Files
ytplayer/frontend/theme-glass.css
2026-10-08 03:56:47 +08:00

378 lines
33 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ============================================================================
* Layout theme: Glass Stage (Settings → Layout theme → Glass Stage)
* html[data-layout="glass-stage"]
*
* Frosted-glass cards over an ambient coral glow. Besides colours it changes the
* layout of the player page:
* · overlay on the video: quality chip, Video / Audio-only switch, −10 / play / +10
* · deck: prev · −10 · play · +10 · next, volume pod + labelled mode pill,
* A-B group, labelled Fullscreen, More, and a row of quick-setting chips
* · now playing: four stacked icon tiles, secondary actions as scrolling pills
* · lyrics: segmented tabs, glowing active line
* · mini player: floating card above the bottom nav
* Everything is scoped, so other themes are untouched.
* ========================================================================== */
/* Elements that only exist for this theme stay hidden elsewhere. */
html[data-layout="glass-stage"] {
--bg: #121317;
--bg-1: #0d0e12;
--bg-2: #1a1b20;
--bg-3: #24252a;
--line: rgba(255, 255, 255, 0.08);
--line-soft: rgba(255, 255, 255, 0.05);
--text: #e3e2e7;
--text-2: #c9c4c2;
--text-dim: #8d8b92;
--accent: #ff553c;
--accent-bright: #ff7865;
--accent-deep: #d63a22;
--accent-glow: rgba(255, 85, 60, 0.5);
--glass: rgba(13, 14, 18, 0.7);
--glass-line: rgba(255, 255, 255, 0.06);
--tile: rgba(255, 255, 255, 0.04);
--tile-hi: rgba(255, 255, 255, 0.09);
--grad: linear-gradient(135deg, #ff553c, #ff7865);
--radius: 24px;
}
html[data-layout="glass-stage"] body::before {
background:
radial-gradient(520px 400px at 50% -6%, rgba(255, 85, 60, 0.14), transparent 70%),
radial-gradient(380px 380px at -8% 42%, rgba(255, 180, 167, 0.07), transparent 70%);
}
/* ---- glass surfaces ---- */
html[data-layout="glass-stage"] #controls,
html[data-layout="glass-stage"] #nowPlayingMeta,
html[data-layout="glass-stage"] .notes-panel,
html[data-layout="glass-stage"] .upnext,
html[data-layout="glass-stage"] .related-panel,
html[data-layout="glass-stage"] .list-pane {
background: var(--glass);
border: 1px solid var(--glass-line);
border-radius: 24px;
-webkit-backdrop-filter: blur(24px) saturate(1.3);
backdrop-filter: blur(24px) saturate(1.3);
box-shadow: 0 16px 40px -18px rgba(0, 0, 0, 0.7);
}
html[data-layout="glass-stage"] #nowPlayingMeta { padding: 16px; margin-top: 16px; gap: 14px; }
html[data-layout="glass-stage"] .topbar { background: rgba(13, 14, 18, 0.8); -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px); border-bottom: 1px solid var(--glass-line); }
html[data-layout="glass-stage"] .bottom-nav { background: rgba(13, 14, 18, 0.82); -webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); border-top: 1px solid var(--glass-line); }
html[data-layout="glass-stage"] .bottom-nav-btn.active { color: var(--accent); }
/* ---- 1. video stage + overlay ---- */
html[data-layout="glass-stage"] .player-stage { border-radius: 28px; border: 1px solid var(--glass-line); box-shadow: 0 20px 50px rgba(0, 0, 0, 0.8); }
html[data-layout="glass-stage"] .stg-overlay {
display: flex; flex-direction: column; justify-content: space-between;
position: absolute; inset: 0; z-index: 6; padding: 12px; pointer-events: none;
background: linear-gradient(180deg, rgba(0, 0, 0, 0.5), transparent 35%, transparent 65%, rgba(0, 0, 0, 0.55));
opacity: 0; transition: opacity 0.25s;
}
html[data-layout="glass-stage"] .player-stage.is-paused .stg-overlay,
html[data-layout="glass-stage"] .player-stage.stg-show .stg-overlay { opacity: 1; }
html[data-layout="glass-stage"] .player-pane.empty .stg-overlay { display: none; }
html[data-layout="glass-stage"] .stg-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
html[data-layout="glass-stage"] .stg-chip {
display: inline-flex; align-items: center; gap: 8px; height: 28px; padding: 0 12px; border-radius: 99px;
background: rgba(13, 14, 18, 0.8); border: 1px solid rgba(255, 255, 255, 0.1); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px);
font: 600 10px var(--mono); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text);
}
html[data-layout="glass-stage"] .stg-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 8px var(--accent); }
html[data-layout="glass-stage"] .stg-seg { display: inline-flex; padding: 2px; border-radius: 99px; background: rgba(13, 14, 18, 0.85); border: 1px solid rgba(255, 255, 255, 0.1); pointer-events: auto; }
html[data-layout="glass-stage"] .stg-seg button { height: 26px; padding: 0 12px; border: 0; border-radius: 99px; background: transparent; color: var(--text-dim); font: 600 11px var(--ui); cursor: pointer; }
html[data-layout="glass-stage"] .stg-seg button.on { background: rgba(255, 255, 255, 0.16); color: var(--text); }
html[data-layout="glass-stage"] .stg-mid { display: flex; align-items: center; justify-content: space-between; padding: 0 22px; }
html[data-layout="glass-stage"] .stg-skip, html[data-layout="glass-stage"] .stg-play { pointer-events: auto; border: 1px solid rgba(255, 255, 255, 0.1); color: #fff; display: grid; place-items: center; cursor: pointer; }
html[data-layout="glass-stage"] .stg-skip { width: 46px; height: 46px; border-radius: 50%; background: rgba(0, 0, 0, 0.45); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); }
html[data-layout="glass-stage"] .stg-skip svg { width: 26px; height: 26px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
html[data-layout="glass-stage"] .stg-play { width: 62px; height: 62px; border-radius: 50%; border: 0; background: linear-gradient(135deg, #ff553c, #ff8471); box-shadow: 0 0 34px rgba(255, 85, 60, 0.6); }
html[data-layout="glass-stage"] .stg-play svg { width: 32px; height: 32px; fill: currentColor; stroke: none; }
/* ---- 2. deck ---- */
html[data-layout="glass-stage"] #controls { padding: 16px; gap: 14px; }
html[data-layout="glass-stage"] #controls .deck-main { display: flex; justify-content: space-between; gap: 6px; padding: 2px 4px 0; }
html[data-layout="glass-stage"] #controls .deck-main .ctrl { width: 46px; height: 46px; border-radius: 16px; background: var(--tile); border: 1px solid var(--glass-line); }
html[data-layout="glass-stage"] #controls .deck-main .ctrl.skip10 { display: grid; width: 44px; height: 44px; color: var(--text-2); }
html[data-layout="glass-stage"] #controls .deck-main .ctrl.skip10 svg { width: 24px; height: 24px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
html[data-layout="glass-stage"] #controls .deck-main .ctrl.play { width: 64px; height: 64px; border-radius: 50%; border: 0; background: var(--grad); box-shadow: 0 12px 30px rgba(255, 85, 60, 0.55), 0 0 20px rgba(255, 85, 60, 0.35); }
html[data-layout="glass-stage"] #controls .deck-main .ctrl.play svg { width: 32px; height: 32px; }
html[data-layout="glass-stage"] #controls .time { font: 600 12px var(--mono); }
html[data-layout="glass-stage"] #controls .deck-vol { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; padding: 0; }
html[data-layout="glass-stage"] #controls .vol-pod {
display: flex; align-items: center; gap: 10px; padding: 6px 12px; border-radius: 16px; min-width: 0;
background: var(--tile); border: 1px solid var(--glass-line);
}
html[data-layout="glass-stage"] #controls .vol-pod #muteBtn { order: -1; width: 28px; height: 28px; border-radius: 8px; }
html[data-layout="glass-stage"] #controls .vol-pod input[type="range"] { flex: 1; min-width: 0; height: 4px; }
html[data-layout="glass-stage"] #controls .vol-pct { display: inline; font: 500 10px var(--mono); color: var(--text-dim); }
html[data-layout="glass-stage"] #controls .deck-vol #modeBtn {
width: auto; height: auto; min-height: 40px; padding: 6px 14px; border-radius: 16px; background: var(--tile); border: 1px solid var(--glass-line);
display: flex; flex-direction: row-reverse; align-items: center; justify-content: space-between; gap: 8px; flex: none; order: 2;
}
html[data-layout="glass-stage"] #controls .mode-name { display: inline; font: 600 12px var(--ui); color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
html[data-layout="glass-stage"] #controls .deck-vol #modeBtn svg { width: 17px; height: 17px; }
html[data-layout="glass-stage"] #controls .deck-chips { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 2px; scrollbar-width: none; }
html[data-layout="glass-stage"] #controls .deck-chips .dchip {
flex: none; height: 30px; padding: 0 12px; border-radius: 99px; border: 1px solid var(--glass-line); background: rgba(255, 255, 255, 0.03);
color: var(--text-dim); font: 500 11px var(--ui); white-space: nowrap; cursor: pointer;
}
html[data-layout="glass-stage"] #controls .deck-chips .dchip.on { background: rgba(255, 255, 255, 0.09); color: var(--text); font-family: var(--mono); font-weight: 600; }
/* ---- 3. now playing ---- */
html[data-layout="glass-stage"] #nowPlayingMeta .np-title { font-size: clamp(22px, 6vw, 26px); }
html[data-layout="glass-stage"] #npAvail { display: inline-flex; align-items: center; gap: 8px; align-self: flex-start; padding: 4px 12px; border-radius: 99px; background: var(--tile); border: 1px solid var(--glass-line); font-size: 11px; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #addBtn,
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #saveBtn,
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #exportBtn,
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #serviceBtn {
order: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; height: auto; padding: 12px 4px;
border-radius: 18px; background: var(--tile); border: 1px solid var(--glass-line); color: var(--text-2); font: 500 11px var(--ui);
}
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #addBtn:hover,
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #saveBtn:hover,
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #exportBtn:hover,
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #serviceBtn:hover { background: var(--tile-hi); color: #fff; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #saveBtn.done { background: rgba(255, 85, 60, 0.15); border-color: rgba(255, 85, 60, 0.3); color: var(--accent); box-shadow: 0 0 20px rgba(255, 85, 60, 0.15); }
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions #serviceBtn .ti { color: var(--accent-bright); }
/* secondary actions: the hidden host becomes a scrolling pill row; the sheet button goes away */
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions .np-more { display: none; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions .np-more-host {
display: flex; grid-column: 1 / -1; gap: 8px; overflow-x: auto; scrollbar-width: none; padding-top: 2px;
}
html[data-layout="glass-stage"] #nowPlayingMeta .np-more-host[hidden] { display: flex; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-more-host #queueBtn,
html[data-layout="glass-stage"] #nowPlayingMeta .np-more-host #addPlaylistBtn { display: none; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-more-host .np-btn {
flex: none; height: 34px; padding: 0 14px; border-radius: 12px; background: var(--tile); border: 1px solid var(--glass-line);
color: var(--text-dim); font: 500 11px var(--ui); white-space: nowrap;
}
html[data-layout="glass-stage"] #nowPlayingMeta .np-more-host .np-btn[hidden] { display: none; }
/* ---- 4. lyrics ---- */
html[data-layout="glass-stage"] .notes-tabs { background: transparent; padding: 14px 16px 6px; gap: 6px; }
html[data-layout="glass-stage"] .notes-tab { border-radius: 14px; padding: 8px 12px; background: transparent; color: var(--text-dim); }
html[data-layout="glass-stage"] .notes-tab.active { background: rgba(255, 255, 255, 0.1); color: var(--accent-bright); box-shadow: none; }
html[data-layout="glass-stage"] #lyricsPane .lyrics-toolbar .np-btn,
html[data-layout="glass-stage"] #lyricsPane .lyr-offset { background: var(--tile); border: 1px solid var(--glass-line); }
html[data-layout="glass-stage"] .lyr-line { opacity: 0.55; }
html[data-layout="glass-stage"] .lyr-line.active {
opacity: 1; position: relative; padding: 14px; border-radius: 18px;
background: linear-gradient(90deg, rgba(255, 85, 60, 0.2), rgba(255, 85, 60, 0.05) 60%, transparent);
border: 1px solid rgba(255, 85, 60, 0.3); box-shadow: 0 8px 24px rgba(255, 85, 60, 0.15); box-shadow: 0 8px 24px rgba(255, 85, 60, 0.15);
}
html[data-layout="glass-stage"] .lyr-line.active .lyr-text { color: #fff; font-family: var(--display); font-weight: 700; font-size: 18px; }
html[data-layout="glass-stage"] .lyr-line.active .lyr-time { color: var(--accent-bright); background: transparent; }
html[data-layout="glass-stage"] .lyr-section { text-align: center; color: var(--accent-bright); }
/* ---- 5. lists ---- */
html[data-layout="glass-stage"] .list-pane { padding: 16px; margin-top: 16px; }
html[data-layout="glass-stage"] .list-header { padding: 4px 0 12px; }
html[data-layout="glass-stage"] .list-header::before { content: "Current list"; font: 600 10px var(--mono); letter-spacing: 0.16em; text-transform: uppercase; color: var(--accent-bright); }
html[data-layout="glass-stage"] #listActions button.la-primary { background: var(--grad); box-shadow: 0 8px 22px rgba(255, 85, 60, 0.4); }
html[data-layout="glass-stage"] #listActions button.la-main { background: var(--tile); border: 1px solid var(--glass-line); }
html[data-layout="glass-stage"] .card { background: var(--tile); border: 1px solid var(--glass-line); border-radius: 18px; }
html[data-layout="glass-stage"] .card.playing, html[data-layout="glass-stage"] .card.now-playing { border-color: rgba(255, 85, 60, 0.4); }
/* ---- 6. mini player: floating card ---- */
@media (max-width: 899px) {
html[data-layout="glass-stage"] .mini-bar { left: 12px; right: 12px; bottom: calc(66px + env(safe-area-inset-bottom)); }
html[data-layout="glass-stage"] .mini-bar-inner {
border-radius: 18px; border: 1px solid rgba(255, 255, 255, 0.08); background: rgba(13, 14, 18, 0.82);
-webkit-backdrop-filter: blur(24px); backdrop-filter: blur(24px); box-shadow: 0 12px 32px rgba(0, 0, 0, 0.75); overflow: hidden;
}
}
/* ordering + pill sizing (beats the id-based order / 50% rules in refresh.css) */
html[data-layout="glass-stage"] #controls .deck-main #prevBtn { order: 1; }
html[data-layout="glass-stage"] #controls .deck-main #back10Btn { order: 2; }
html[data-layout="glass-stage"] #controls .deck-main #playBtn { order: 3; }
html[data-layout="glass-stage"] #controls .deck-main #fwd10Btn { order: 4; }
html[data-layout="glass-stage"] #controls .deck-main #nextBtn { order: 5; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-actions .np-more-host .np-btn { flex: 0 0 auto !important; width: auto !important; min-width: 0 !important; height: 34px !important; }
html[data-layout="glass-stage"] .stg-overlay { justify-content: flex-start; }
html[data-layout="glass-stage"] .stg-mid { margin: auto 0; }
/* =========================== fidelity pass (matches the approved mockup) =========================== */
/* stage HUD */
html[data-layout="glass-stage"] .stg-bot { display: flex; position: absolute; left: 12px; right: 12px; bottom: 12px; justify-content: space-between; pointer-events: none; }
html[data-layout="glass-stage"] .stg-bot .stg-chip { height: 26px; font: 500 10px var(--mono); text-transform: none; letter-spacing: 0; color: var(--text-2); }
html[data-layout="glass-stage"] .stg-overlay { justify-content: flex-start; }
html[data-layout="glass-stage"] .player-pane.empty .stg-bot { display: none; }
/* sleep timer card */
html[data-layout="glass-stage"] .sleep-status {
display: flex; align-items: center; gap: 12px; padding: 10px 14px; border-radius: 18px; margin-top: 12px;
background: rgba(13, 14, 18, 0.6); border: 1px solid var(--glass-line); -webkit-backdrop-filter: blur(20px); backdrop-filter: blur(20px);
}
html[data-layout="glass-stage"] .sleep-status.hidden { display: none; }
html[data-layout="glass-stage"] .sleep-status .sl-ic { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 12px; background: rgba(255, 85, 60, 0.12); border: 1px solid rgba(255, 85, 60, 0.25); color: var(--accent-bright); flex: none; }
html[data-layout="glass-stage"] .sleep-status .sl-ic svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
html[data-layout="glass-stage"] .sleep-status .sl-txt { flex: 1; min-width: 0; display: grid; }
html[data-layout="glass-stage"] .sleep-status .sleep-countdown { font: 600 12px var(--ui); color: var(--text); }
html[data-layout="glass-stage"] .sleep-status .sl-sub { display: block; font: 400 11px var(--ui); color: var(--text-dim); }
html[data-layout="glass-stage"] .sleep-cancel { height: 30px; padding: 0 14px; border-radius: 99px; background: rgba(255, 255, 255, 0.06); border: 1px solid var(--glass-line); color: var(--text-2); font: 600 11px var(--ui); }
/* seek row: thicker gradient track, chapter badge */
html[data-layout="glass-stage"] #controls .seek { height: 6px; }
html[data-layout="glass-stage"] #controls .ch-badge { display: inline-block; padding: 3px 10px; border-radius: 99px; background: rgba(255, 255, 255, 0.06); border: 1px solid var(--glass-line); color: var(--accent-bright); font: 600 10px var(--mono); letter-spacing: 0.04em; white-space: nowrap; }
html[data-layout="glass-stage"] #controls .ch-badge[hidden] { display: none; }
html[data-layout="glass-stage"] #controls #waveLoud {
width: 100%; padding: 8px 14px; border-radius: 14px; text-align: left; font: 500 12px var(--ui); color: var(--accent-bright);
background: linear-gradient(90deg, rgba(255, 85, 60, 0.16), transparent); border: 1px solid rgba(255, 85, 60, 0.22);
}
html[data-layout="glass-stage"] #controls .deck-vol #modeBtn::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 6px var(--accent); flex: none; order: 3; }
html[data-layout="glass-stage"] #controls .deck-vol #modeBtn { justify-content: flex-start; }
html[data-layout="glass-stage"] #controls .deck-vol #modeBtn svg { margin-left: auto; order: -1; color: var(--text-dim); }
html[data-layout="glass-stage"] #controls .deck-vol #modeBtn .mode-name { order: 4; }
/* now playing: verified-style channel line */
html[data-layout="glass-stage"] #nowPlayingMeta .np-channel { font-weight: 500; }
/* lyrics: compact single-row toolbar, bracketed section labels */
html[data-layout="glass-stage"] #lyricsPane .lyrics-toolbar { display: flex; flex-wrap: nowrap; overflow-x: auto; gap: 6px; scrollbar-width: none; }
html[data-layout="glass-stage"] #lyricsPane .lyrics-toolbar > * { flex: none; }
html[data-layout="glass-stage"] #lyricsPane .lyrics-toolbar .np-btn { height: 30px; padding: 0 10px; font-size: 11px; border-radius: 10px; }
html[data-layout="glass-stage"] #lyricsPane .lyrics-toolbar .lyr-offset { height: 30px; border-radius: 10px; padding: 0 4px; }
html[data-layout="glass-stage"] #lyricsPane .lyr-off-btn { height: 24px; padding: 0 6px; background: transparent; color: var(--accent-bright); font-size: 11px; }
html[data-layout="glass-stage"] #lyricsPane .lyr-off-val { font-size: 11px; flex: none; }
html[data-layout="glass-stage"] #lyricsPane .lyr-auto { height: 30px; border: 0; background: transparent; grid-column: auto; }
html[data-layout="glass-stage"] #lyricsPane .lyr-flag { grid-column: auto; height: 30px; padding: 0 10px; font-size: 11px; border-radius: 10px; white-space: nowrap; }
html[data-layout="glass-stage"] #lyricsPane .lyr-flag span { font-size: 11px; }
html[data-layout="glass-stage"] .lyr-section::before { content: "[ "; }
html[data-layout="glass-stage"] .lyr-section::after { content: " ]"; }
/* up next */
html[data-layout="glass-stage"] .upnext { padding: 16px; }
html[data-layout="glass-stage"] .upnext-header { display: flex; align-items: center; gap: 8px; font: 700 16px var(--display); color: var(--text); }
html[data-layout="glass-stage"] .upnext-count { background: rgba(255, 255, 255, 0.06); border: 1px solid var(--glass-line); color: var(--accent-bright); font: 600 10px var(--mono); border-radius: 99px; padding: 2px 10px; }
html[data-layout="glass-stage"] .upnext-clear { display: inline; margin-left: auto; background: none; border: 0; color: var(--accent-bright); font: 500 12px var(--ui); cursor: pointer; }
html[data-layout="glass-stage"] .upnext-item { background: var(--tile); border: 1px solid var(--glass-line); border-radius: 18px; padding: 10px; }
html[data-layout="glass-stage"] .upnext-item img { border-radius: 12px; }
html[data-layout="glass-stage"] .related-panel { padding: 0; overflow: hidden; }
/* list header banner: eyebrow, title + Play all, three tiles with sub-labels */
html[data-layout="glass-stage"] .list-header { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; padding: 0 0 12px; align-items: start; }
html[data-layout="glass-stage"] .list-header::before { grid-column: 1 / -1; content: "Current list"; }
html[data-layout="glass-stage"] .list-header h2 { grid-column: 1 / 5; font: 700 20px var(--display); margin: 0; }
html[data-layout="glass-stage"] .list-sub { display: block; grid-column: 1 / 5; margin: -6px 0 0; font: 400 11px var(--ui); color: var(--text-dim); }
html[data-layout="glass-stage"] .list-sub:empty { display: none; }
html[data-layout="glass-stage"] #listActions { display: contents; }
html[data-layout="glass-stage"] #listActions button.la-primary { grid-column: 5 / -1; grid-row: 2 / span 2; align-self: start; flex: none; height: 44px; padding: 0 14px; border-radius: 16px; font-size: 13px; white-space: nowrap; }
html[data-layout="glass-stage"] #listActions button.la-primary.la-inline { grid-row: 2; }
html[data-layout="glass-stage"] #listActions button.la-main { grid-column: span 2; flex: none; height: auto; min-height: 56px; padding: 8px 4px; border-radius: 18px; flex-direction: column; gap: 2px; font: 600 11px var(--ui); }
html[data-layout="glass-stage"] #listActions button.la-main::after { content: attr(data-sub); font: 500 9px var(--mono); color: var(--text-dim); }
html[data-layout="glass-stage"] #listActions button:not(.la-primary):not(.la-main):not(.la-icon) { grid-column: span 2; flex: none; height: 34px; border-radius: 12px; font-size: 11px; padding: 0 6px; }
html[data-layout="glass-stage"] #listActions button.la-icon { grid-column: span 1; }
html[data-layout="glass-stage"] .list-filter-bar input { border-radius: 14px; background: var(--tile); border: 1px solid var(--glass-line); height: 38px; }
/* P2P strip under a playlist */
html[data-layout="glass-stage"] .p2p-strip { display: block; margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--glass-line); }
html[data-layout="glass-stage"] .p2p-strip.hidden { display: none; }
html[data-layout="glass-stage"] .ps-head { display: flex; align-items: center; justify-content: space-between; font: 700 13px var(--ui); color: var(--text); }
html[data-layout="glass-stage"] .ps-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--text-dim); }
html[data-layout="glass-stage"] .ps-dot.on { background: var(--accent); box-shadow: 0 0 8px var(--accent); }
html[data-layout="glass-stage"] .ps-sub { margin: 4px 0 10px; font: 400 11px var(--ui); color: var(--text-dim); }
html[data-layout="glass-stage"] .ps-row { display: flex; align-items: center; gap: 10px; padding: 10px 12px; margin-bottom: 8px; border-radius: 18px; background: var(--tile); border: 1px solid var(--glass-line); }
html[data-layout="glass-stage"] .ps-ic { width: 32px; height: 32px; border-radius: 12px; display: grid; place-items: center; background: rgba(255, 255, 255, 0.06); flex: none; font-size: 15px; }
html[data-layout="glass-stage"] .ps-txt { flex: 1; min-width: 0; display: grid; cursor: pointer; }
html[data-layout="glass-stage"] .ps-txt b { font: 500 12px var(--ui); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
html[data-layout="glass-stage"] .ps-txt small { font: 400 10px var(--mono); color: var(--text-dim); }
html[data-layout="glass-stage"] .ps-dl { width: 34px; height: 34px; border-radius: 12px; border: 0; background: rgba(255, 255, 255, 0.07); color: var(--accent-bright); font-size: 16px; cursor: pointer; }
/* ===== quick row (clean rebuild): [A | B | ↺] [Fullscreen] [More] ===== */
html[data-layout="glass-stage"] #controls .dk-quick { display: flex; flex-wrap: nowrap; align-items: center; justify-content: space-between; gap: 8px; }
html[data-layout="glass-stage"] #controls .ab-group { display: inline-flex; align-items: stretch; gap: 2px; padding: 3px; border-radius: 14px; background: var(--tile); border: 1px solid var(--glass-line); flex: 0 1 auto; min-width: 0; }
html[data-layout="glass-stage"] #controls .ab-group .ctrl {
display: inline-flex !important; align-items: center; justify-content: center; gap: 4px;
width: auto !important; min-width: 0 !important; height: 32px !important; padding: 0 9px !important; margin: 0 !important;
border: 0 !important; border-radius: 10px !important; background: transparent !important; box-shadow: none !important; transform: none !important;
font: 600 11px var(--mono) !important; color: var(--text-dim); white-space: nowrap; flex: 0 0 auto !important;
}
html[data-layout="glass-stage"] #controls .ab-group .ctrl.hidden { display: none !important; }
html[data-layout="glass-stage"] #controls .ab-group .ctrl.active { background: rgba(255, 255, 255, 0.12) !important; color: var(--accent-bright); }
html[data-layout="glass-stage"] #controls .ab-group #abABtn[data-t]::after,
html[data-layout="glass-stage"] #controls .ab-group #abBBtn[data-t]::after { content: "[" attr(data-t) "]"; }
html[data-layout="glass-stage"] #controls #fsBtn,
html[data-layout="glass-stage"] #controls #ctlMoreBtn {
display: inline-flex !important; flex-direction: row; align-items: center; justify-content: center; gap: 6px;
width: auto !important; height: 40px !important; min-width: 0 !important; margin: 0 !important; padding: 0 12px !important;
border-radius: 14px; background: var(--tile); border: 1px solid var(--glass-line); box-shadow: none !important; color: var(--text);
white-space: nowrap; flex: 0 0 auto !important; text-align: center;
}
html[data-layout="glass-stage"] #controls #fsBtn svg { display: block; flex: none; width: 16px; height: 16px; }
html[data-layout="glass-stage"] #controls #fsBtn .fs-label { display: inline !important; font: 600 11px var(--ui); text-transform: none; letter-spacing: 0; }
html[data-layout="glass-stage"] #controls #ctlMoreBtn span { display: inline; font: 600 11px var(--ui); }
html[data-layout="glass-stage"] #controls #ctlMoreBtn .mc-label { display: inline !important; }
html[data-layout="glass-stage"] #controls #ctlMoreBtn .mc-rest, html[data-layout="glass-stage"] #controls #ctlMoreBtn small { display: none !important; }
html[data-layout="glass-stage"] #controls #ctlMoreBtn .mc-dots { margin-right: 2px; }
/* ===== now playing title block ===== */
html[data-layout="glass-stage"] #nowPlayingMeta .np-text { display: grid; gap: 8px; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-title { font: 700 clamp(22px, 6.2vw, 27px)/1.15 var(--display); letter-spacing: -0.02em; color: var(--text); }
html[data-layout="glass-stage"] #nowPlayingMeta .np-channel { display: flex; align-items: center; gap: 8px; font: 500 13px var(--ui); color: var(--text-2); }
html[data-layout="glass-stage"] #nowPlayingMeta .np-channel::before { display: none; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-channel.verified::after {
content: "✓"; display: inline-grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; flex: none;
background: rgba(255, 85, 60, 0.18); border: 1px solid rgba(255, 85, 60, 0.45); color: var(--accent); font: 700 10px var(--ui);
}
html[data-layout="glass-stage"] #npAvail { display: inline-flex; align-items: center; gap: 8px; align-self: flex-start; padding: 6px 14px; border-radius: 99px; background: var(--tile); border: 1px solid var(--glass-line); font: 500 11px var(--ui); color: var(--text-2); }
html[data-layout="glass-stage"] #npAvail.hidden { display: none; }
html[data-layout="glass-stage"] #npAvail::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 8px var(--accent); animation: stg-pulse 1.8s ease-in-out infinite; flex: none; }
@keyframes stg-pulse { 50% { opacity: 0.35; } }
html[data-layout="glass-stage"] #controls .ab-group { order: 1; flex: 0 0 auto; }
html[data-layout="glass-stage"] #controls #fsBtn { order: 2; }
html[data-layout="glass-stage"] #controls #ctlMoreBtn { order: 3; }
html[data-layout="glass-stage"] #controls .ab-group .ctrl { padding: 0 7px !important; font-size: 10px !important; }
html[data-layout="glass-stage"] #controls .ab-group #abClearBtn { padding: 0 7px !important; font-size: 13px !important; }
/* ===== A-B · Fullscreen · More — styled like the mockup ===== */
html[data-layout="glass-stage"] #controls .dk-quick { flex-wrap: wrap; justify-content: space-between; gap: 8px; }
html[data-layout="glass-stage"] #controls .ab-group { padding: 2px; border-radius: 12px; gap: 0; background: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.05); }
html[data-layout="glass-stage"] #controls .ab-group .ctrl { height: 26px !important; padding: 0 10px !important; border-radius: 8px !important; font: 500 10px var(--mono) !important; color: var(--text-dim); }
html[data-layout="glass-stage"] #controls .ab-group .ctrl.active { background: rgba(255, 255, 255, 0.1) !important; color: var(--accent-bright); font-weight: 700 !important; }
html[data-layout="glass-stage"] #controls .ab-group #abClearBtn { padding: 0 6px !important; font-size: 11px !important; }
html[data-layout="glass-stage"] #controls .ab-group #abClearBtn:hover { color: #ffb4ab; }
html[data-layout="glass-stage"] #controls #fsBtn,
html[data-layout="glass-stage"] #controls #ctlMoreBtn {
height: 30px !important; padding: 0 12px !important; border-radius: 12px; gap: 6px;
background: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.05); color: var(--text); font-weight: 500;
}
html[data-layout="glass-stage"] #controls #ctlMoreBtn { color: var(--text-dim); }
html[data-layout="glass-stage"] #controls #fsBtn:hover, html[data-layout="glass-stage"] #controls #ctlMoreBtn:hover { background: rgba(255, 255, 255, 0.08); color: #fff; }
html[data-layout="glass-stage"] #controls #fsBtn svg { width: 15px; height: 15px; }
html[data-layout="glass-stage"] #controls #fsBtn .fs-label, html[data-layout="glass-stage"] #controls #ctlMoreBtn span { font: 500 11px var(--ui); }
html[data-layout="glass-stage"] #controls #ctlMoreBtn .mc-tune { display: inline-block; width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; margin-right: 4px; vertical-align: -3px; }
html[data-layout="glass-stage"] #controls #ctlMoreBtn .mc-dots { display: none; }
html[data-layout="glass-stage"] #controls #ctlMoreBtn .mc-label { display: inline !important; }
html[data-layout="glass-stage"] #controls #ctlMoreBtn .mc-rest { display: none !important; }
html[data-layout="glass-stage"] #controls .dk-quick.ab-on #fsBtn .fs-label { display: inline !important; }
/* channel: its own line right under the title, clearly a link */
html[data-layout="glass-stage"] #nowPlayingMeta .np-channel { display: flex; margin: -2px 0 0; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-channel.link .np-ch-name {
color: var(--text); font-weight: 600; text-decoration: underline; text-decoration-color: rgba(255, 255, 255, 0.25); text-underline-offset: 3px;
}
html[data-layout="glass-stage"] #nowPlayingMeta .np-channel.link:hover .np-ch-name { color: var(--accent-bright); text-decoration-color: currentColor; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-channel.link .np-ch-name::after { content: " ›"; color: var(--accent-bright); text-decoration: none; display: inline-block; }
html[data-layout="glass-stage"] #nowPlayingMeta .np-channel:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; border-radius: 6px; }
/* Playlist title row takes the old title slot in the glass header grid */
html[data-layout="glass-stage"] .list-header .list-title-row { grid-column: 1 / 5; }
html[data-layout="glass-stage"] .list-icon-btn { background: var(--tile); border-color: var(--glass-line); }
/* Service dock: a touch more compact in Glass Stage */
html[data-layout="glass-stage"] .svc-dock { gap: 4px; padding: 5px; border-radius: 20px; }
html[data-layout="glass-stage"] .svc-tile { min-height: 58px; padding: 8px 4px 7px; gap: 5px; border-radius: 15px; font-size: 10.5px; }
html[data-layout="glass-stage"] .svc-tile .svc-ico { width: 20px; height: 20px; }
html[data-layout="glass-stage"] .svc-font { height: 36px; }
html[data-layout="glass-stage"] .svc-font button { width: 28px; height: 30px; }
/* Chapter badge opens the chapter picker */
html[data-layout="glass-stage"] #controls .ch-badge { cursor: pointer; font-family: var(--mono); transition: background .15s, border-color .15s; }
html[data-layout="glass-stage"] #controls .ch-badge:hover { background: rgba(255, 255, 255, 0.12); border-color: var(--accent); }
html[data-layout="glass-stage"] #controls .ch-badge:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }