*, *::before, *::after { -webkit-user-select: none; user-select: none; } html { height: 100%; } body { background-color: var(--yj-bg-base, black); color: var(--yj-text-primary, white); margin: 0; height: 100vh; display: grid; grid-template: "top-bar top-bar" 4em "sidebar main-panel" 1fr "bottom-bar bottom-bar" 4em / auto 1fr; overflow: hidden; } p { margin: 0; /* I want to set paragraph margins myself */ } .top-bar { grid-area: top-bar; height: 100%; padding-left: 2em; padding-right: 2em; display: flex; justify-content: space-between; align-items: center; background-color: var(--yj-bg-elevated, #343a40); gap: 1em; } .top-bar search-bar { flex: 0 1 320px; } .mode-toggle { position: relative; display: flex; align-items: center; width: 52px; height: 26px; border-radius: 13px; background: var(--yj-bg-overlay, rgba(255, 255, 255, 0.1)); cursor: pointer; flex-shrink: 0; transition: background 0.2s ease; } .mode-toggle:hover { background: rgba(255, 255, 255, 0.15); } .mode-toggle-thumb { position: absolute; top: 2px; left: 2px; width: 22px; height: 22px; border-radius: 50%; background: var(--yj-text-primary, #fff); transition: left 0.2s ease, background 0.2s ease; z-index: 1; } .mode-toggle.active .mode-toggle-thumb { left: 28px; background: #000; } .mode-toggle.active { background: var(--yj-accent, #ffd43b); } .mode-icon { position: absolute; top: 50%; transform: translateY(-50%); font-size: 12px; z-index: 2; transition: opacity 0.2s ease; pointer-events: none; } .mode-icon-globe { left: 7px; color: #000; opacity: 0; } .mode-icon-local { right: 7px; color: var(--yj-text-secondary, #b3b3b3); opacity: 1; } .mode-toggle.active .mode-icon-globe { opacity: 1; } .mode-toggle.active .mode-icon-local { opacity: 0; } ul { list-style-type: none; } .title { font-size: 1.5em; margin-bottom: 0; } .subtitle { font-size: 0.8em; margin-top: 0; } body div.sidebar { grid-area: sidebar; background-color: var(--yj-bg-surface, #212529); overflow: hidden; contain: layout style paint; } .bottom-bar { grid-area: bottom-bar; padding: 0.25em; background-color: var(--yj-bg-elevated, #343a40); display: grid; grid-template-columns: var(--now-playing-width, 200px) 1fr auto; align-items: center; contain: layout style; #now-playing-info { justify-self: start; display: flex; min-width: 0; overflow: hidden; #album-art { width: 3.5em; min-width: 3.5em; height: 3.5em; min-height: 3.5em; border-radius: 0.25em; background-color: var(--yj-accent, #ffd43b); } #track-info { display: flex; margin-left: 1em; flex-direction: column; font-size: 0.75em; justify-content: center; text-wrap-mode: nowrap; overflow: hidden; p { overflow: hidden; text-overflow: ellipsis; } } } now-playing { overflow: hidden; } audio-player { margin: 0.5em 1em; } #queue-button { justify-self: end; background: none; border: none; color: inherit; cursor: pointer; padding: 8px; display: flex; align-items: center; } #queue-button:hover { color: var(--yj-accent, #ffd43b); } #queue-button.drag-over { color: var(--yj-accent, #ffd43b); outline: 2px dashed var(--yj-accent, #ffd43b); outline-offset: -2px; border-radius: 4px; } } .content-area { grid-area: main-panel; display: flex; overflow: hidden; contain: layout style; } .main-panel { flex: 1; min-width: 0; display: flex; flex-direction: column; background-color: var(--yj-bg-surface, #212529); overflow: hidden; contain: layout style paint; } .main-panel > * { flex: 1; min-height: 0; box-sizing: border-box; contain: layout style paint; } /* Hidden cached views: use visibility+size collapse instead of display:none so scroll containers preserve their scrollTop. display:none discards scroll state in WebKitGTK. */ .main-panel > .view-hidden { visibility: hidden !important; flex: 0 0 0px !important; min-height: 0 !important; max-height: 0 !important; height: 0 !important; padding: 0 !important; margin: 0 !important; border: none !important; overflow: hidden !important; pointer-events: none !important; contain: strict !important; }