Files
planet/frontend/public/earth/css/tv-panel.css
2026-04-20 14:10:27 +08:00

325 lines
7.2 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);
max-height: calc(100vh - (2 * var(--hud-offset)));
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;
}
.hud-panel-tv[data-active-tab="news"]:not([data-resized="true"]) {
max-height: min(
var(--tv-news-default-max-height, calc(100vh - (2 * var(--hud-offset)))),
calc(100vh - (2 * var(--hud-offset)))
);
}
.hud-panel-tv.is-reforming {
transition:
height 0.24s cubic-bezier(0.22, 1, 0.36, 1),
top 0.24s cubic-bezier(0.22, 1, 0.36, 1);
will-change: height, top;
}
.hud-panel-tv .hud-panel__header {
align-items: center;
gap: var(--hud-gap-xs);
}
.tv-panel-header-title {
flex: 0 0 auto;
white-space: nowrap;
margin: 0;
}
.hud-panel-tv .hud-panel__header .hud-panel__action,
.hud-panel-tv .hud-panel__header .hud-panel-close {
cursor: pointer;
user-select: auto;
}
.hud-panel-tv .hud-panel__header .tv-panel-select,
.hud-panel-tv .hud-panel__header .tv-panel-tab {
cursor: pointer;
user-select: auto;
}
.tv-panel-header-controls {
display: flex;
align-items: center;
gap: var(--hud-gap-xs);
flex: 1 1 auto;
min-width: 0;
}
.tv-panel-header-controls--news {
justify-content: flex-end;
}
.tv-panel-content {
display: flex;
flex: 1 1 auto;
min-height: 0;
overflow: hidden;
}
.tv-tab-pane {
display: flex;
flex: 1 1 auto;
min-height: 0;
flex-direction: column;
gap: var(--hud-gap-sm);
overflow: hidden;
}
.tv-panel-toolbar-actions {
display: inline-flex;
align-items: center;
gap: var(--hud-gap-xs);
flex-shrink: 0;
}
.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-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;
}
.tv-panel-tabs {
display: grid;
grid-template-columns: 1fr 1fr;
gap: calc(8px * var(--hud-scale));
}
.tv-panel-tab {
border: 1px solid rgba(201, 225, 247, 0.12);
border-radius: calc(12px * var(--hud-scale));
background: rgba(255, 255, 255, 0.03);
color: var(--hud-text-muted);
padding: calc(9px * var(--hud-scale)) calc(12px * var(--hud-scale));
font-size: calc(0.78rem * var(--hud-scale));
font-weight: 600;
letter-spacing: 0.04em;
cursor: pointer;
transition: background 0.18s ease, border-color 0.18s ease, color 0.18s ease;
}
.tv-panel-tab:hover {
color: var(--hud-text);
border-color: rgba(214, 235, 255, 0.18);
background: rgba(255, 255, 255, 0.06);
}
.tv-panel-tab--active {
color: var(--hud-accent-strong);
border-color: rgba(120, 180, 255, 0.24);
background: rgba(120, 180, 255, 0.12);
}
.tv-tab-pane[hidden] {
display: none !important;
}
/* ── 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. */