Files
ytplayer/frontend/theme-glass.css

210 lines
16 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. */
.stg-overlay, .skip10, .deck-chips, .vol-pct, .mode-name { display: none; }
.np-btn .ti, .np-btn .tl { pointer-events: none; }
.np-btn .ti { width: 20px; height: 20px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
.np-btn .i-done { display: none; }
.np-btn.done .i-save { display: none; }
.np-btn.done .i-done { display: inline; }
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 .dk-quick { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
html[data-layout="glass-stage"] #controls .dk-quick .ctrl,
html[data-layout="glass-stage"] #controls .dk-more { height: 40px; border-radius: 14px; background: var(--tile); border: 1px solid var(--glass-line); }
html[data-layout="glass-stage"] #controls .dk-quick #fsBtn { font-size: 12px; }
html[data-layout="glass-stage"] #controls .dk-more small { display: none; }
html[data-layout="glass-stage"] #controls .dk-more { flex: 1 1 90px; }
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; }