292 lines
6.6 KiB
CSS
292 lines
6.6 KiB
CSS
/* tv-panel */
|
||
|
||
.hud-panel-tv {
|
||
bottom: var(--hud-offset);
|
||
right: var(--hud-offset);
|
||
width: calc(420px * var(--hud-scale));
|
||
max-width: calc(100vw - 32px);
|
||
min-width: calc(300px * var(--hud-scale));
|
||
padding: calc(10px * var(--hud-scale));
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: var(--hud-gap-sm);
|
||
z-index: 18;
|
||
}
|
||
|
||
/* header 内嵌 select + actions */
|
||
.hud-panel-tv .hud-panel-header {
|
||
align-items: center;
|
||
gap: var(--hud-gap-xs);
|
||
}
|
||
|
||
.hud-panel-tv .hud-panel-header .hud-panel-close {
|
||
align-self: center;
|
||
}
|
||
|
||
.tv-panel-header-title {
|
||
flex: 0 0 auto;
|
||
white-space: nowrap;
|
||
margin: 0;
|
||
}
|
||
|
||
/* select / action 在 drag-handle 内,恢复正常指针 */
|
||
.hud-panel-tv .hud-panel-header .tv-panel-select,
|
||
.hud-panel-tv .hud-panel-header .tv-panel-action {
|
||
cursor: pointer;
|
||
user-select: auto;
|
||
}
|
||
|
||
.tv-panel-status {
|
||
color: var(--hud-text-soft);
|
||
font-size: calc(0.68rem * var(--hud-scale));
|
||
letter-spacing: 0.08em;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.tv-panel-select {
|
||
flex: 1 1 auto;
|
||
min-width: 0;
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
color-scheme: dark;
|
||
border: 1px solid rgba(201, 225, 247, 0.14);
|
||
border-radius: calc(12px * var(--hud-scale));
|
||
background: rgba(255, 255, 255, 0.04);
|
||
color: var(--hud-text);
|
||
padding: calc(10px * var(--hud-scale)) calc(12px * var(--hud-scale));
|
||
font-size: calc(0.84rem * var(--hud-scale));
|
||
}
|
||
|
||
.tv-panel-select option,
|
||
.tv-panel-select optgroup {
|
||
background: #0a1422;
|
||
color: #eef5fc;
|
||
}
|
||
|
||
.tv-panel-actions {
|
||
display: flex;
|
||
gap: var(--hud-gap-xs);
|
||
}
|
||
|
||
.tv-panel-action {
|
||
border: 1px solid transparent;
|
||
border-radius: calc(4px * var(--hud-scale));
|
||
background: transparent;
|
||
color: var(--hud-text-muted);
|
||
padding: calc(7px * var(--hud-scale));
|
||
display: inline-flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
cursor: pointer;
|
||
transition:
|
||
background 0.18s ease,
|
||
border-color 0.18s ease,
|
||
color 0.18s ease,
|
||
transform 0.18s ease,
|
||
opacity 0.18s ease;
|
||
}
|
||
|
||
.tv-panel-action--icon .material-symbols-rounded {
|
||
font-size: calc(16px * var(--hud-scale));
|
||
line-height: 1;
|
||
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 20;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.tv-panel-action:hover:not(:disabled) {
|
||
background: rgba(255, 255, 255, 0.08);
|
||
border-color: rgba(225, 239, 255, 0.14);
|
||
color: var(--hud-accent-strong);
|
||
}
|
||
|
||
.tv-panel-action:disabled {
|
||
opacity: 0.45;
|
||
cursor: not-allowed;
|
||
}
|
||
|
||
/* toggle 箭头:展开时朝下,折叠时朝上 */
|
||
.tv-panel-meta-toggle .material-symbols-rounded {
|
||
transition: transform 0.22s ease;
|
||
transform: rotate(0deg);
|
||
}
|
||
|
||
.tv-panel-meta-toggle.is-collapsed .material-symbols-rounded {
|
||
transform: rotate(180deg);
|
||
}
|
||
|
||
/* meta wrap:折叠时用负 margin 抵消 flex gap,无死区 */
|
||
.tv-panel-meta-wrap {
|
||
overflow: hidden;
|
||
max-height: calc(120px * var(--hud-scale));
|
||
opacity: 1;
|
||
transition: max-height 0.22s ease, opacity 0.18s ease, margin 0.22s ease;
|
||
}
|
||
|
||
.tv-panel-meta-wrap.is-collapsed {
|
||
max-height: 0;
|
||
opacity: 0;
|
||
pointer-events: none;
|
||
margin-top: calc(-1 * var(--hud-gap-sm));
|
||
margin-bottom: calc(-1 * var(--hud-gap-sm));
|
||
}
|
||
|
||
.tv-panel-meta {
|
||
display: grid;
|
||
gap: calc(4px * var(--hud-scale));
|
||
}
|
||
|
||
.tv-panel-title {
|
||
color: var(--hud-text);
|
||
font-size: calc(0.96rem * var(--hud-scale));
|
||
font-weight: 600;
|
||
}
|
||
|
||
.tv-panel-subtitle {
|
||
color: var(--hud-text-muted);
|
||
font-size: calc(0.74rem * var(--hud-scale));
|
||
line-height: 1.35;
|
||
}
|
||
|
||
.tv-panel-notes {
|
||
color: var(--hud-text-soft);
|
||
font-size: calc(0.68rem * var(--hud-scale));
|
||
line-height: 1.45;
|
||
}
|
||
|
||
.tv-panel-catalog {
|
||
color: var(--hud-text-soft);
|
||
font-size: calc(0.66rem * var(--hud-scale));
|
||
letter-spacing: 0.04em;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.tv-panel-player {
|
||
position: relative;
|
||
flex: 1 0 auto;
|
||
min-height: calc(220px * var(--hud-scale));
|
||
border-radius: calc(16px * var(--hud-scale));
|
||
overflow: hidden;
|
||
border: 1px solid rgba(201, 225, 247, 0.1);
|
||
background:
|
||
linear-gradient(180deg, rgba(9, 18, 32, 0.94), rgba(5, 11, 22, 0.94));
|
||
}
|
||
|
||
.tv-panel-empty,
|
||
.tv-panel-iframe,
|
||
.tv-panel-video {
|
||
position: absolute;
|
||
inset: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.tv-panel-empty {
|
||
display: grid;
|
||
place-items: center;
|
||
padding: calc(18px * var(--hud-scale));
|
||
text-align: center;
|
||
color: var(--hud-text-muted);
|
||
font-size: calc(0.84rem * var(--hud-scale));
|
||
line-height: 1.5;
|
||
}
|
||
|
||
.tv-panel-iframe,
|
||
.tv-panel-video {
|
||
border: 0;
|
||
background: #050a14;
|
||
}
|
||
|
||
/* ── Multi-edge resize handles ───────────────────────────────── */
|
||
|
||
.tv-panel-edge {
|
||
position: absolute;
|
||
z-index: 10;
|
||
}
|
||
|
||
.tv-panel-edge[data-edge="r"] {
|
||
right: 0;
|
||
top: calc(12px * var(--hud-scale));
|
||
bottom: calc(12px * var(--hud-scale));
|
||
width: calc(6px * var(--hud-scale));
|
||
cursor: ew-resize;
|
||
}
|
||
|
||
.tv-panel-edge[data-edge="b"] {
|
||
bottom: 0;
|
||
left: calc(12px * var(--hud-scale));
|
||
right: calc(12px * var(--hud-scale));
|
||
height: calc(6px * var(--hud-scale));
|
||
cursor: ns-resize;
|
||
}
|
||
|
||
.tv-panel-edge[data-edge="l"] {
|
||
left: 0;
|
||
top: calc(12px * var(--hud-scale));
|
||
bottom: calc(12px * var(--hud-scale));
|
||
width: calc(6px * var(--hud-scale));
|
||
cursor: ew-resize;
|
||
}
|
||
|
||
.tv-panel-edge[data-edge="br"] {
|
||
right: 0;
|
||
bottom: 0;
|
||
width: calc(20px * var(--hud-scale));
|
||
height: calc(20px * var(--hud-scale));
|
||
cursor: nwse-resize;
|
||
}
|
||
|
||
.tv-panel-edge[data-edge="bl"] {
|
||
left: 0;
|
||
bottom: 0;
|
||
width: calc(20px * var(--hud-scale));
|
||
height: calc(20px * var(--hud-scale));
|
||
cursor: nesw-resize;
|
||
}
|
||
|
||
/* 右下角视觉标记 */
|
||
.tv-panel-edge[data-edge="br"]::before {
|
||
content: "";
|
||
position: absolute;
|
||
inset: calc(4px * var(--hud-scale));
|
||
border-right: 2px solid rgba(223, 235, 248, 0.4);
|
||
border-bottom: 2px solid rgba(223, 235, 248, 0.4);
|
||
transition: border-color 0.18s ease;
|
||
}
|
||
|
||
.tv-panel-edge[data-edge="br"]:hover::before {
|
||
border-color: rgba(244, 249, 255, 0.75);
|
||
}
|
||
|
||
.hud-panel-tv.is-resizing {
|
||
transition: none !important;
|
||
user-select: none;
|
||
}
|
||
|
||
/* Whole panel is draggable; player overrides back to default */
|
||
.hud-panel-tv:not(.is-resizing) {
|
||
cursor: grab;
|
||
}
|
||
|
||
.hud-panel-tv.is-dragging {
|
||
cursor: grabbing;
|
||
}
|
||
|
||
.hud-panel-tv .tv-panel-player {
|
||
cursor: default;
|
||
}
|
||
|
||
/* Disable iframe/video pointer capture while dragging so mouse events pass through */
|
||
.hud-panel-tv.is-dragging .tv-panel-iframe,
|
||
.hud-panel-tv.is-dragging .tv-panel-video {
|
||
pointer-events: none;
|
||
}
|
||
|
||
.earth-app.layout-expanded .hud-panel-tv:not([data-dragged="true"]) {
|
||
bottom: var(--hud-offset);
|
||
right: var(--hud-offset);
|
||
transform: translate(calc(100% - var(--hud-offset)), calc(100% - var(--hud-offset)));
|
||
}
|
||
|
||
/* TV panel keeps its fixed width on all screen sizes.
|
||
Responsive stretching removed — width only changes if user manually resizes. */
|