:root{--color-bg:#0e0e10;--color-surface-1:#16161a;--color-surface-2:#15151a;--color-surface-deep:#131316;--color-surface-base:#121216;--color-border:#26262b;--color-border-2:#2a2a31;--color-border-3:#232329;--color-hover-1:#161619;--color-hover-2:#222228;--color-accent:#3d8ad8;--color-accent-tint-10:#3d8ad81a;--color-accent-tint-16:#3d8ad829;--color-accent-light:#9ac2eb;--color-spotify:#1db954;--color-text-primary:#f4f4f6;--color-text-primary-2:#f0f0f2;--color-text-primary-3:#e7e7ea;--color-text-muted:#83838a;--color-text-muted-2:#7a7a82;--color-text-muted-3:#6a6a72;--color-danger:#e0635f;--font-family:"Schibsted Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-tabular:tabular-nums;--radius-cover:9px;--radius-field:12px;--radius-pill:21px;--radius-round:50%;--radius-menu:14px;--shadow-card:0 6px 18px #0000006b;--shadow-menu:0 16px 40px #0000008c;--shadow-modal:0 24px 70px #0009;--shadow-queue:-24px 0 60px #00000073;--spacing-side:clamp(16px, 4.5vw, 40px);--spacing-gap:clamp(16px, 2vw, 24px);--player-bar-height:74px;--toolbar-control-height:38px;--z-player-bar:900;--z-queue-panel:910;--z-device-picker:920;--z-modal:1000;--z-artist-overlay:1050;--z-sheet:1060;--z-toast:1100}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-family);background:var(--color-bg);color:var(--color-text-primary);min-height:100vh}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:2px}@keyframes spin{to{transform:rotate(360deg)}}@keyframes eqbar{0%,to{transform:scaleY(.3)}50%{transform:scaleY(1)}}@media (prefers-reduced-motion:reduce){*,:before,:after{animation-duration:.01ms!important;animation-iteration-count:1!important}}.loading{color:#888;justify-content:center;align-items:center;height:100vh;font-size:1.2rem;display:flex}.login-page{flex-direction:column;justify-content:center;align-items:center;gap:1rem;height:100vh;display:flex}.login-page h1{color:#1db954;font-size:3rem}.login-button{color:#fff;background:#1db954;border-radius:2rem;padding:.8rem 2rem;font-size:1.1rem;font-weight:600;text-decoration:none;transition:background .2s;display:inline-block}.login-button:hover{background:#1ed760}.app{max-width:1180px;padding:calc(1rem + env(safe-area-inset-top,0px)) var(--spacing-side) 5rem;margin:0 auto}.app:before{content:"";height:env(safe-area-inset-top,0px);background:color-mix(in srgb, var(--color-bg) 93%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:40;pointer-events:none;position:fixed;top:0;left:0;right:0}.app-header{justify-content:space-between;align-items:center;padding:1rem 0;display:flex}.app-logo{align-items:center;gap:11px;display:flex}.app-logo-mark{align-items:flex-end;gap:2.5px;display:flex}.app-logo-mark span{border-radius:1.5px;width:5px;display:block}.app-logo-mark span:first-child{background:var(--color-accent);height:22px}.app-logo-mark span:nth-child(2){background:#3a3a42;height:15px}.app-logo-mark span:nth-child(3){background:#5a5a64;height:27px}.app-logo-word{letter-spacing:-.02em;color:var(--color-text-primary);font-size:clamp(21px,2.4vw,25px);font-weight:700;line-height:1}.profile-wrapper{position:relative}.profile-avatar-btn{cursor:pointer;background:#282828;border:2px solid #444;border-radius:50%;justify-content:center;align-items:center;width:36px;height:36px;padding:0;transition:border-color .2s;display:flex;overflow:hidden}.profile-avatar-btn:hover{border-color:#1db954}.profile-avatar-img{object-fit:cover;width:100%;height:100%}.profile-avatar-fallback{fill:#aaa;width:22px;height:22px}.profile-menu{z-index:100;background:#282828;border:1px solid #444;border-radius:8px;min-width:200px;padding:.5rem 0;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 4px 16px #00000080}.profile-menu-name{color:#fff;border-bottom:1px solid #333;margin-bottom:.25rem;padding:.5rem 1rem;font-weight:600}.profile-menu-item{color:#b3b3b3;text-align:left;cursor:pointer;background:0 0;border:none;width:100%;padding:.5rem 1rem;font-size:.9rem;text-decoration:none;transition:background .15s,color .15s;display:block}.profile-menu-item:hover{color:#fff;background:#333}.profile-menu-item:disabled{opacity:.6;cursor:not-allowed}.profile-menu-logout{border-top:1px solid #333;margin-top:.25rem;padding-top:.5rem}.profile-menu-message{color:#1db954;padding:.25rem 1rem;font-size:.8rem}.profile-menu-sync-status{color:#888;padding:.25rem 1rem;font-size:.75rem}.auto-sync-toast{color:#000;text-align:center;background:#1db954;padding:.4rem 1rem;font-size:.85rem;font-weight:500}.update-banner{left:50%;bottom:calc(var(--player-bar-height) + 16px + env(safe-area-inset-bottom,0px));z-index:var(--z-toast);background:var(--color-surface-1);border:1px solid var(--color-border);border-radius:var(--radius-pill);max-width:calc(100vw - 32px);box-shadow:var(--shadow-menu);color:var(--color-text-primary);font:500 14px/1 var(--font-family);align-items:center;gap:14px;padding:10px 12px 10px 18px;display:flex;position:fixed;transform:translate(-50%)}.update-banner-text{white-space:nowrap}.update-banner-actions{align-items:center;gap:6px;display:flex}.update-banner-reload{background:var(--color-accent);color:#fff;border-radius:var(--radius-pill);font:600 14px/1 var(--font-family);cursor:pointer;border:none;padding:9px 18px;transition:filter .15s}.update-banner-reload:hover{filter:brightness(1.08)}.update-banner-dismiss{color:var(--color-text-muted);cursor:pointer;background:0 0;border:none;padding:6px 8px;font-size:15px;line-height:1;transition:color .15s}.update-banner-dismiss:hover{color:var(--color-text-primary)}.tabs{flex-wrap:wrap;gap:7px;padding:4px 0 0;display:flex}.tab{font:500 14px/1 var(--font-family);color:#a0a0a8;background:var(--color-surface-1);border:1px solid var(--color-border);cursor:pointer;border-radius:22px;padding:9px 17px;transition:color .15s,background .15s,border-color .15s}.tab:hover:not(.is-active){color:var(--color-text-primary);border-color:var(--color-border-2)}.tab.is-active{color:#fff;background:var(--color-accent);border-color:var(--color-accent);font-weight:600}.list-toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:4px;padding:18px 0 0;display:flex}.search-wrapper{flex:1;min-width:160px;max-width:360px;position:relative}.search-icon{color:var(--color-text-muted-3);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.search-input{box-sizing:border-box;width:100%;height:var(--toolbar-control-height);background:var(--color-surface-1);color:var(--color-text-primary-2);border:1px solid var(--color-border);font:400 13px/1 var(--font-family);border-radius:9px;outline:none;padding:0 34px;transition:border-color .15s}.search-input::placeholder{color:var(--color-text-muted-3)}.search-input:focus{border-color:var(--color-accent)}.search-clear{width:24px;height:24px;color:var(--color-text-muted-2);cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:0;font-size:1.1rem;line-height:1;transition:background .15s,color .15s;display:flex;position:absolute;top:50%;right:6px;transform:translateY(-50%)}.search-clear:hover{background:var(--color-hover-2);color:#fff}.toolbar-btn{box-sizing:border-box;height:var(--toolbar-control-height);background:var(--color-surface-1);color:#dcdce0;border:1px solid var(--color-border);font:500 13px/1 var(--font-family);cursor:pointer;border-radius:9px;flex:none;align-items:center;gap:7px;padding:0 12px;transition:color .15s,border-color .15s;display:flex}.toolbar-btn:hover{color:#fff;border-color:var(--color-border-2)}.sort-menu{flex:none;position:relative}.sort-menu__btn{box-sizing:border-box;height:var(--toolbar-control-height);background:var(--color-surface-1);color:#c4c4ca;border:1px solid var(--color-border);font:500 13px/1 var(--font-family);cursor:pointer;border-radius:9px;align-items:center;gap:7px;padding:0 11px;transition:color .15s,border-color .15s;display:flex}.sort-menu__btn:hover{color:#fff;border-color:var(--color-border-2)}.sort-menu__icon{flex:none}.sort-menu__caret{color:var(--color-text-muted-2);flex:none;margin-left:1px}.sort-menu__list{background:var(--color-surface-1);border:1px solid var(--color-border-2);width:212px;box-shadow:var(--shadow-menu);z-index:45;border-radius:12px;padding:6px;position:absolute;top:46px;right:0}.sort-menu__item{color:#b6b6bd;width:100%;font:400 13px/1 var(--font-family);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:8px;justify-content:space-between;align-items:center;gap:10px;padding:9px 11px;transition:background .12s,color .12s;display:flex}.sort-menu__item:hover{background:var(--color-hover-2);color:#fff}.sort-menu__item.is-active{color:var(--color-accent-light);font-weight:600}.jump-bar{top:env(safe-area-inset-top,0px);z-index:30;margin:16px calc(-1 * var(--spacing-side)) 0;background:color-mix(in srgb, var(--color-bg) 93%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid #1c1c21;position:sticky}.jump-bar__inner{padding:13px var(--spacing-side);scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:8px;display:flex;overflow-x:auto}.jump-bar__inner::-webkit-scrollbar{display:none}.jump-chip{font:500 13px/1 var(--font-family);color:#c4c4ca;border:1px solid var(--color-border-2);cursor:pointer;white-space:nowrap;background:#1b1b20;border-radius:18px;flex:none;padding:10px 16px;transition:background .15s,border-color .15s,color .15s}.jump-chip:hover{color:#fff;border-color:var(--color-accent)}.jump-chip.is-active{color:var(--color-accent-light);background:var(--color-accent-tint-16);border-color:color-mix(in srgb, var(--color-accent) 55%, transparent);font-weight:600}.shelf-recent{padding:20px 0 0}.shelf-recent__title{font:600 16px/1 var(--font-family);color:var(--color-text-primary-2);margin-bottom:13px}.shelf-recent__row{scrollbar-width:none;-webkit-overflow-scrolling:touch;margin:0 calc(-1 * var(--spacing-side));padding:0 var(--spacing-side) 2px;gap:14px;display:flex;overflow-x:auto}.shelf-recent__row::-webkit-scrollbar{display:none}.shelf-recent__cell{flex:none;width:128px}.shelf-recent__cell .lib-tile__play{width:36px;height:36px}.shelf-section{padding:26px 0 0}.shelf-section__header{cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:10px;width:100%;padding:0 0 14px;display:flex}.shelf-section__chevron{color:#9a9aa2;flex:none;transition:transform .18s}.shelf-section__chevron.is-collapsed{transform:rotate(-90deg)}.shelf-section__title{font:600 17px/1 var(--font-family);color:var(--color-text-primary-2)}.shelf-section__count{font:500 13px/1 var(--font-family);color:var(--color-text-muted-3)}.shelf-grid{gap:var(--spacing-gap) clamp(12px, 1.6vw, 18px);grid-template-columns:repeat(auto-fill,minmax(clamp(110px,25vw,158px),1fr));display:grid}.lib-tile{cursor:pointer;border-radius:var(--radius-field);margin:-8px;padding:8px;transition:background .15s}.lib-tile:hover{background:var(--color-hover-1)}.lib-tile__cover{aspect-ratio:1;border-radius:var(--radius-cover);background:var(--color-surface-2);box-shadow:var(--shadow-card);position:relative;overflow:hidden}.lib-tile__img{object-fit:cover;width:100%;height:100%;display:block;position:absolute;inset:0}.lib-tile__placeholder{justify-content:center;align-items:center;font-size:2rem;display:flex}.lib-tile__play{background:var(--color-accent);color:#fff;cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;width:38px;height:38px;padding:0;transition:transform .12s,opacity .16s;display:flex;position:absolute;bottom:9px;right:9px;box-shadow:0 5px 14px #00000080}.lib-tile__play:hover{transform:scale(1.12)}.lib-tile__name{font:600 13px/1.25 var(--font-family);color:var(--color-text-primary-2);white-space:nowrap;text-overflow:ellipsis;padding-top:10px;overflow:hidden}.lib-tile__sub{font:400 11px/1.3 var(--font-family);color:var(--color-text-muted);white-space:nowrap;text-overflow:ellipsis;margin-top:2px;overflow:hidden}@media (hover:hover) and (pointer:fine) and (width>=821px){.lib-tile__play{opacity:0;pointer-events:none}.lib-tile:hover .lib-tile__play,.lib-tile:focus-within .lib-tile__play,.lib-tile__play:focus-visible{opacity:1;pointer-events:auto}}.flat-grid{padding:18px 0 0}.flat-grid__hint{font:400 13px/1 var(--font-family);color:#8a8a92;margin-bottom:16px}.shelf-skeleton{padding:20px 0 0}.skel-tile__cover{aspect-ratio:1;border-radius:var(--radius-cover);background:var(--color-surface-2)}.skel-tile__name,.skel-tile__sub{background:var(--color-surface-2);border-radius:4px;height:11px;margin-top:10px}.skel-tile__sub{width:60%;margin-top:6px}.skel-tile__cover,.skel-tile__name,.skel-tile__sub{animation:1.4s ease-in-out infinite skel-pulse}@keyframes skel-pulse{0%,to{opacity:.55}50%{opacity:1}}.library-empty{text-align:center;flex-direction:column;align-items:center;gap:1rem;padding:64px 1rem;display:flex}.library-empty__text{font:400 15px/1.4 var(--font-family);color:var(--color-text-muted)}.library-empty__btn{background:var(--color-accent);color:#fff;border-radius:var(--radius-pill);font:600 14px/1 var(--font-family);cursor:pointer;border:none;align-items:center;gap:8px;padding:11px 20px;transition:filter .15s;display:inline-flex}.library-empty__btn:hover:not(:disabled){filter:brightness(1.08)}.library-empty__btn:disabled{opacity:.6;cursor:not-allowed}.genre-tag{color:#ffffff73;background:#ffffff14;border-radius:.8rem;padding:.15rem .5rem;font-size:.7rem}.modal-overlay{z-index:1000;background:#000000b3;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal-content{background:#1e1e1e;border-radius:12px;flex-direction:column;width:100%;max-width:480px;max-height:80vh;display:flex;overflow:hidden}.modal-header{border-bottom:1px solid #333;justify-content:space-between;align-items:center;padding:1rem 1.25rem;display:flex}.modal-title{font-size:1.1rem;font-weight:600}.modal-close{color:#888;cursor:pointer;background:0 0;border:none;border-radius:4px;padding:.2rem .5rem;font-size:1.5rem;line-height:1}.modal-close:hover{color:#fff;background:#333}.modal-body{overscroll-behavior:contain;flex-direction:column;flex:1;min-height:0;padding:1.25rem;display:flex;overflow-y:auto}.genre-manager-list{flex-direction:column;gap:.4rem;margin-bottom:1rem;display:flex}.genre-manager-item{background:#282828;border-radius:8px;justify-content:space-between;align-items:center;padding:.5rem .75rem;font-size:.9rem;display:flex}.genre-manager-delete{color:#666;cursor:pointer;background:0 0;border:none;border-radius:4px;padding:.2rem .5rem;font-size:1.2rem;transition:all .2s}.genre-manager-delete:hover{color:#e74c3c;background:#e74c3c26}.genre-manager-empty{color:#666;text-align:center;padding:1rem;font-size:.85rem}.genre-manager-add{gap:.5rem;display:flex}.genre-manager-add input{color:#e0e0e0;background:#282828;border:1px solid #444;border-radius:8px;flex:1;padding:.5rem .75rem;font-size:.9rem}.genre-manager-add input::placeholder{color:#666}.genre-manager-add button{color:#fff;cursor:pointer;background:#1db954;border:none;border-radius:8px;padding:.5rem 1rem;font-size:.9rem;font-weight:600;transition:background .2s}.genre-manager-add button:hover:not(:disabled){background:#1ed760}.genre-manager-add button:disabled{opacity:.5;cursor:not-allowed}.album-genre-chips{flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;display:flex}.album-genre-chip{color:#ccc;cursor:pointer;background:#282828;border:1px solid #444;border-radius:1.2rem;padding:.4rem .9rem;font-size:.85rem;transition:all .2s}.album-genre-chip:hover{color:#fff;border-color:#1db954}.album-genre-chip.selected{color:#fff;background:#1db954;border-color:#1db954}.album-genre-add{gap:.5rem;display:flex}.album-genre-add input{color:#e0e0e0;background:#282828;border:1px solid #444;border-radius:1.2rem;flex:1;padding:.4rem .75rem;font-size:.85rem}.album-genre-add input::placeholder{color:#666}.album-genre-add button{color:#1db954;cursor:pointer;background:#282828;border:1px solid #444;border-radius:50%;padding:.4rem .7rem;font-size:1rem;line-height:1;transition:all .2s}.album-genre-add button:hover:not(:disabled){color:#fff;background:#1db954}.album-genre-add button:disabled{opacity:.5;cursor:not-allowed}.tracklist-header{border-bottom:1px solid #333;align-items:flex-start;gap:1rem;margin-bottom:.5rem;padding-bottom:.75rem;display:flex}.tracklist-close{flex-shrink:0;margin-left:auto}.tracklist-cover{object-fit:cover;border-radius:4px;flex-shrink:0;width:120px;height:120px}.tracklist-meta{min-width:0}.tracklist-title{color:#fff;white-space:nowrap;text-overflow:ellipsis;font-size:1rem;font-weight:600;overflow:hidden}.tracklist-artist{color:#b3b3b3;margin-top:.2rem;font-size:.85rem}.tracklist-stats{color:#999;margin-top:.25rem;font-size:.8rem}.episode-sort-select{max-width:12rem;margin-top:.5rem}.tracklist-genres{flex-wrap:wrap;align-items:center;gap:.3rem;margin-top:.4rem;display:flex}.tracklist-genre-edit-btn{color:#ffffff4d;cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:.15rem;transition:color .15s;display:flex}.tracklist-genre-edit-btn:hover{color:#ffffffb3}.tracklist-genre-editor{border-bottom:1px solid #333;margin-bottom:.5rem;padding:.75rem 0}.tracklist-genre-editor .album-genre-chips{margin-bottom:.5rem}.track-list-loading{text-align:center;color:#999;padding:1rem}.track-list{flex-direction:column;flex:1;gap:2px;min-height:0;display:flex;overflow-y:auto}.track-item{border-radius:4px;align-items:center;gap:.75rem;padding:.5rem .75rem;display:flex}.track-item:hover{background:#282828}.track-item.clickable{cursor:pointer}.track-item.playing{background:#1db9541a}.track-item.playing .track-number,.track-item.playing .track-name{color:#1db954}.track-number{color:#999;text-align:right;min-width:1.5rem;font-size:.8rem}.track-info{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.track-name{color:#fff;white-space:nowrap;text-overflow:ellipsis;font-size:.85rem;overflow:hidden}.track-artist{color:#999;white-space:nowrap;text-overflow:ellipsis;font-size:.75rem;overflow:hidden}.track-duration{color:#999;text-align:right;flex-shrink:0;min-width:3em;font-size:.8rem}.popularity-bar{background:#ffffff1f;border-radius:2px;flex-shrink:0;width:40px;height:4px;overflow:hidden}.popularity-bar-fill{background:#1db954;border-radius:2px;height:100%}@media (width<=600px){.popularity-bar{width:28px}}.track-item.episode-item .track-name{white-space:normal;text-overflow:clip;overflow:visible}.episode-progress{background:#404040;border-radius:1px;height:2px;margin-top:4px;overflow:hidden}.episode-progress-bar{background:#1db954;height:100%}.episode-fully-played{color:#1db954;text-transform:uppercase;letter-spacing:.05em;margin-top:2px;font-size:.7rem;display:inline-block}@media (width<=600px){.app-header{padding:.5rem 0}.tracklist-cover{width:80px;height:80px}.modal-content{border-radius:12px 12px 0 0;align-self:flex-end;max-width:100%;max-height:90dvh}.list-toolbar{gap:8px}.toolbar-btn__label{display:none}.player-bar{gap:.3rem .5rem;padding:.4rem .75rem}.player-btn{padding:.3rem}.player-device-btn-name{display:none}.player-device-btn{color:#999;padding:.3rem}}.scroll-top-btn{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#b3b3b3;cursor:pointer;z-index:90;background:#282828d9;border:1px solid #444;border-radius:20px;align-items:center;gap:.35rem;padding:.4rem 1.2rem;font-size:.8rem;line-height:1;transition:opacity .25s,color .15s,border-color .15s;display:flex;position:fixed;bottom:20px;left:50%;transform:translate(-50%);box-shadow:0 2px 8px #0006}.scroll-top-btn:hover{color:#fff;border-color:#666}.scroll-top-btn:active{transform:translate(-50%)scale(.95)}.app:has(.player-bar) .scroll-top-btn{bottom:75px}@media (width<=600px){.scroll-top-btn{bottom:20px}.app:has(.player-bar) .scroll-top-btn{bottom:130px}}.player-bar{z-index:900;background:#1e1e1e;border-top:1px solid #333;flex-wrap:wrap;align-items:center;gap:.4rem .75rem;padding:.5rem 1rem;display:flex;position:fixed;bottom:0;left:0;right:0}.player-bar-img{object-fit:cover;border-radius:4px;flex-shrink:0;width:40px;height:40px}.player-bar-img-clickable{cursor:pointer;transition:opacity .15s}.player-bar-img-clickable:hover{opacity:.8}.player-bar-info{flex:1;min-width:0}.player-bar-middle{flex-direction:column;flex:1;gap:.25rem;min-width:150px;display:flex}.player-bar-progress-row{align-items:center;gap:.4rem;display:flex}.player-bar-time{color:#888;text-align:center;flex-shrink:0;width:2.5rem;font-size:.65rem}.player-bar-progress{cursor:pointer;background:#444;border-radius:2px;flex:1;height:4px;position:relative}.player-bar-progress:before{content:"";position:absolute;inset:-10px 0}.player-bar-progress-fill{background:#1db954;border-radius:2px;height:100%;transition:width .25s linear}.player-bar-track{white-space:nowrap;text-overflow:ellipsis;font-size:.85rem;font-weight:600;overflow:hidden}.player-bar-artist{color:#aaa;white-space:nowrap;text-overflow:ellipsis;font-size:.75rem;overflow:hidden}.player-bar-controls{flex-shrink:0;justify-content:flex-end;align-items:center;gap:.3rem;display:flex}@media (width<=600px){.player-bar-controls{justify-content:center;width:100%}.player-device-popover{width:min(240px,100vw - 1rem);left:50%;right:auto;transform:translate(-50%)}.player-queue-popover{width:min(320px,100vw - 1rem);left:50%;right:auto;transform:translate(-50%)}}.player-btn{color:#999;cursor:pointer;background:0 0;border:none;border-radius:50%;justify-content:center;align-items:center;padding:.4rem;line-height:0;transition:color .15s,transform .1s;display:flex}.player-btn:hover{color:#fff}.player-btn:active{color:#fff;transform:scale(.8)}.player-btn-main{color:#fff}.player-btn-active{color:#1db954}.player-btn-active:hover{color:#1ed760}.player-btn-active:active{color:#1ed760;transform:scale(.8)}.player-bar-add-wrapper{flex-shrink:0;align-items:center;gap:.1rem;display:flex;position:relative}.add-to-playlist-popover{z-index:1000;background:#282828;border:1px solid #444;border-radius:8px;flex-direction:column;width:min(280px,100vw - 1rem);max-height:360px;display:flex;position:fixed;bottom:60px;left:50%;transform:translate(-50%);box-shadow:0 8px 24px #00000080}.add-to-playlist-search{color:#e0e0e0;background:#333;border:none;border-bottom:1px solid #444;border-radius:8px 8px 0 0;outline:none;padding:.6rem .75rem;font-size:.85rem}.add-to-playlist-search::placeholder{color:#888}.add-to-playlist-list{flex:1;padding:.25rem 0;overflow-y:auto}.add-to-playlist-item{color:#e0e0e0;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:.6rem;width:100%;padding:.45rem .75rem;font-size:.82rem;transition:background .15s;display:flex}.add-to-playlist-item:hover{background:#333}.add-to-playlist-img{object-fit:cover;border-radius:4px;flex-shrink:0;width:32px;height:32px}.add-to-playlist-name{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.add-to-playlist-empty{text-align:center;color:#888;padding:1rem;font-size:.85rem}.player-bar-device{align-items:center;display:flex;position:relative}.player-device-btn{color:#aaa;cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:4px;align-items:center;gap:.35rem;max-width:200px;padding:.25rem .5rem;font-size:.75rem;transition:color .15s,background .15s;display:flex}.player-device-btn-name{text-overflow:ellipsis;overflow:hidden}.player-device-btn:hover{color:#fff;background:#ffffff14}.player-device-popover{z-index:1000;background:#282828;border:1px solid #444;border-radius:8px;width:240px;margin-bottom:.5rem;padding:.25rem 0;position:absolute;bottom:100%;right:0;box-shadow:0 8px 24px #00000080}.player-device-popover-title{color:#888;text-transform:uppercase;letter-spacing:.05em;padding:.5rem .75rem;font-size:.75rem;font-weight:600}.player-device-option{color:#e0e0e0;cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;width:100%;padding:.5rem .75rem;font-size:.85rem;transition:background .15s;display:flex}.player-device-option:hover:not(:disabled){background:#333}.player-device-option:disabled{cursor:default}.player-device-active{color:#1db954}.player-device-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.player-device-type{color:#888;flex-shrink:0;margin-left:.5rem;font-size:.7rem}.player-bar-queue{align-items:center;display:flex;position:relative}.player-queue-popover{z-index:1000;background:#282828;border:1px solid #444;border-radius:8px;width:320px;max-height:60vh;margin-bottom:.5rem;padding:.25rem 0;position:absolute;bottom:100%;right:0;overflow-y:auto;box-shadow:0 8px 24px #00000080}.player-queue-header{background:#282828;justify-content:space-between;align-items:center;padding:.5rem .75rem;display:flex;position:sticky;top:0}.player-queue-title{color:#888;text-transform:uppercase;letter-spacing:.05em;font-size:.75rem;font-weight:600}.player-queue-refresh{color:#aaa;cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;padding:.2rem;transition:color .15s,background .15s;display:flex}.player-queue-refresh:hover:not(:disabled){color:#fff;background:#ffffff14}.player-queue-refresh:disabled{opacity:.5;cursor:default}.player-queue-section-label{color:#888;text-transform:uppercase;letter-spacing:.05em;padding:.4rem .75rem .2rem;font-size:.7rem;font-weight:600}.player-queue-row{align-items:center;gap:.6rem;padding:.4rem .75rem;display:flex}.player-queue-row-current .player-queue-name{color:#1db954}.player-queue-img{object-fit:cover;border-radius:4px;flex-shrink:0;width:40px;height:40px}.player-queue-img-placeholder{background:#444}.player-queue-text{flex:1;min-width:0}.player-queue-name{color:#e0e0e0;text-overflow:ellipsis;white-space:nowrap;font-size:.85rem;overflow:hidden}.player-queue-artist{color:#888;text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;overflow:hidden}.player-queue-empty{color:#888;text-align:center;padding:.75rem;font-size:.85rem}.player-bar-toast{color:#fff;white-space:nowrap;pointer-events:none;background:#1db954;border-radius:1rem;padding:.4rem 1rem;font-size:.8rem;font-weight:600;animation:3s ease-in-out toast-fade;position:absolute;top:-2.5rem;left:50%;transform:translate(-50%)}@keyframes toast-fade{0%,80%{opacity:1}to{opacity:0}}.modal-toast{color:#fff;z-index:1100;pointer-events:none;background:#e22134;border-radius:1rem;padding:.5rem 1rem;font-size:.85rem;font-weight:600;position:fixed;bottom:5rem;left:50%;transform:translate(-50%)}.player-btn-remove-confirm{animation:1s ease-in-out infinite pulse-remove;box-shadow:0 0 0 2px #f44;color:#f44!important}@keyframes pulse-remove{0%,to{box-shadow:0 0 0 2px #f44}50%{box-shadow:0 0 0 2px #f446}}.spotify-search-ghost-card{aspect-ratio:1;color:#999;cursor:pointer;background:0 0;border:2px dashed #444;border-radius:8px;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;gap:.6rem;max-width:320px;margin:0 auto;padding:1.5rem;font-family:inherit;transition:all .15s;display:flex}.spotify-search-ghost-card:hover{color:#fff;background:#1db9540d;border-color:#1db954}.spotify-search-ghost-text{text-align:center;font-size:.95rem;font-weight:600}.spotify-search-ghost-subtext{color:#aaa;margin-top:4px;font-size:.8rem;font-weight:400}.spotify-search-ghost-card:hover .spotify-search-ghost-subtext{color:#1db954}.search-modal-input{color:#fff;background:#282828;border:1px solid #444;border-radius:6px;outline:none;width:100%;margin-bottom:1rem;padding:.6rem .8rem;font-size:.95rem}.search-modal-input:focus{border-color:#1db954}.search-modal-results{overscroll-behavior:contain;flex-direction:column;flex:1;gap:1.25rem;min-height:0;display:flex;overflow-y:auto}.search-modal-back-link{color:#1db954;cursor:pointer;background:0 0;border:none;border-radius:4px;align-self:flex-start;align-items:center;gap:4px;padding:.3rem .5rem;font-size:.85rem;display:inline-flex}.search-modal-back-link:hover{background:#282828}.search-modal-track-row{color:inherit;cursor:pointer;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:.75rem;width:100%;padding:.5rem;display:flex}.search-modal-track-row:hover{background:#282828}.search-modal-track-img{object-fit:cover;border-radius:4px;flex-shrink:0;width:48px;height:48px}.search-modal-track-info{flex:1;min-width:0}.search-modal-track-name{color:#fff;white-space:nowrap;text-overflow:ellipsis;font-size:.95rem;font-weight:600;overflow:hidden}.search-modal-track-meta{color:#999;white-space:nowrap;text-overflow:ellipsis;margin-top:2px;font-size:.8rem;overflow:hidden}.search-modal-track-duration{color:#999;font-variant-numeric:tabular-nums;flex-shrink:0;font-size:.8rem}.search-modal-track-add{color:#aaa;cursor:pointer;background:0 0;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;padding:0;display:inline-flex}.search-modal-track-add:hover{color:#1db954;background:#333}.search-modal-toast{color:#fff;white-space:nowrap;pointer-events:none;z-index:1100;background:#1db954;border-radius:1rem;padding:.5rem 1.1rem;font-size:.85rem;font-weight:600;animation:3s ease-in-out toast-fade;position:fixed;bottom:5rem;left:50%;transform:translate(-50%)}.search-modal-show-all{color:#1db954;cursor:pointer;background:0 0;border:none;border-radius:4px;align-self:flex-start;padding:.4rem .5rem;font-size:.85rem}.search-modal-show-all:hover{background:#282828}.search-modal-status{color:#999;text-align:center;padding:1rem;font-size:.9rem}.search-modal-artist-row{color:inherit;cursor:pointer;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:.75rem;width:100%;padding:.5rem;display:flex}.search-modal-artist-row:hover{background:#282828}.search-modal-artist-img{object-fit:cover;border-radius:50%;flex-shrink:0;width:48px;height:48px}.search-modal-artist-img-placeholder{background:#333}.search-modal-artist-info{flex:1;min-width:0}.search-modal-artist-name{color:#fff;white-space:nowrap;text-overflow:ellipsis;font-size:.95rem;font-weight:600;overflow:hidden}.search-modal-artist-genres{color:#999;white-space:nowrap;text-overflow:ellipsis;margin-top:2px;font-size:.8rem;overflow:hidden}.search-modal-back-bar{border-bottom:1px solid #333;justify-content:space-between;align-items:center;margin-bottom:1rem;padding-bottom:.75rem;display:flex}.search-modal-back{color:#1db954;cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:.3rem .5rem;font-size:.85rem;display:inline-flex}.search-modal-back:hover{background:#282828}.search-modal-artist{flex-direction:column;flex:1;gap:1.25rem;min-height:0;display:flex;overflow-y:auto}.search-modal-artist-header{align-items:center;gap:1rem;display:flex}.search-modal-artist-hero{object-fit:cover;border-radius:50%;flex-shrink:0;width:96px;height:96px}.search-modal-artist-header-info{flex:1;min-width:0}.search-modal-artist-title{margin:0 0 4px;font-size:1.3rem;font-weight:700}.search-modal-artist-followers{color:#999;margin-top:4px;font-size:.8rem}.search-modal-section{flex-direction:column;gap:.5rem;display:flex}.search-modal-section-title{color:#ddd;margin:0;font-size:.95rem;font-weight:600}.search-modal-album-grid{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:.75rem;display:grid}.search-modal-album-card{color:inherit;text-align:left;background:#181818;border:none;border-radius:6px;padding:.5rem;transition:background .15s}.search-modal-album-card.clickable{cursor:pointer}.search-modal-album-card:hover{background:#282828}.search-modal-album-img-wrap{margin-bottom:.4rem;position:relative}.search-modal-album-img{aspect-ratio:1;object-fit:cover;border-radius:4px;width:100%;display:block}.search-modal-album-save{color:#fff;cursor:pointer;background:#0000008c;border:none;border-radius:50%;justify-content:center;align-items:center;width:32px;height:32px;padding:0;display:inline-flex;position:absolute;top:.35rem;right:.35rem}.search-modal-album-save:hover{background:#000000bf}.search-modal-album-save.saved{color:#1db954}.search-modal-album-name{white-space:nowrap;text-overflow:ellipsis;font-size:.85rem;font-weight:600;overflow:hidden}.search-modal-album-meta{color:#999;margin-top:2px;font-size:.75rem}@media (width<=600px){.search-modal-artist-hero{width:72px;height:72px}.search-modal-artist-title{font-size:1.1rem}.search-modal-album-grid{grid-template-columns:repeat(auto-fill,minmax(100px,1fr));gap:.5rem}.search-input,.search-modal-input,.add-to-playlist-search{font-size:16px}}.wash-view{padding:1rem 0}.wash-header{align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.wash-header h1{margin:0;font-size:1.5rem}.wash-back{color:#1db954;cursor:pointer;background:0 0;border:none;align-items:center;gap:.4rem;padding:.4rem .5rem;font-size:.9rem;display:inline-flex}.wash-back:hover{text-decoration:underline}.wash-status{color:#ccc;background:#1a1a1a;border-radius:6px;margin:1rem 0;padding:1rem}.wash-error{color:#ff6b6b}.wash-intro{color:#aaa;max-width:65ch;margin:0 0 1rem;font-size:.9rem}.wash-rows{flex-direction:column;gap:.5rem;display:flex}.wash-row{cursor:pointer;background:#181818;border-radius:6px;grid-template-columns:auto 1fr auto 1fr auto;align-items:center;gap:.75rem;padding:.6rem .8rem;transition:background .1s;display:grid}.wash-row:hover{background:#1f1f1f}.wash-row input[type=checkbox]{cursor:pointer;width:18px;height:18px}.wash-album{align-items:center;gap:.6rem;min-width:0;display:flex}.wash-album img,.wash-album-placeholder{object-fit:cover;border-radius:4px;flex-shrink:0;width:48px;height:48px}.wash-album-placeholder{background:#333}.wash-album-meta{min-width:0}.wash-album-name{white-space:nowrap;text-overflow:ellipsis;font-weight:500;overflow:hidden}.wash-album-sub{color:#999;white-space:nowrap;text-overflow:ellipsis;font-size:.8rem;overflow:hidden}.wash-pop{color:#888}.wash-pop-good{color:#1db954}.wash-arrow{color:#666;font-size:1.4rem}.wash-confidence{text-transform:lowercase;border-radius:999px;padding:.2rem .5rem;font-size:.75rem}.wash-confidence-high{color:#1db954;background:#1db95433}.wash-confidence-medium{color:#ffc300;background:#ffc30026}.wash-confidence-low{color:#aaa;background:#ffffff1a}.wash-without-candidate{background:#141414;border-radius:6px;margin-top:2rem;padding:.8rem}.wash-without-candidate summary{cursor:pointer;color:#aaa}.wash-without-candidate ul{color:#ccc;margin:.6rem 0 0 1.2rem}.wash-actions{background:linear-gradient(#0000,#0a0a0a 30%);justify-content:flex-end;padding:1rem 0;display:flex;position:sticky;bottom:0}.wash-apply-btn{color:#000;cursor:pointer;background:#1db954;border:none;border-radius:999px;padding:.7rem 1.4rem;font-weight:600}.wash-apply-btn:disabled{opacity:.5;cursor:not-allowed}@media (width<=600px){.wash-row{grid-template-columns:auto 1fr;gap:.5rem}.wash-row .wash-album-old{grid-column:2}.wash-arrow{grid-column:2;justify-self:start;padding-left:.5rem;transform:rotate(90deg)}.wash-row .wash-album-new{grid-column:2}.wash-confidence{grid-column:2;justify-self:start}}.artist-link{cursor:pointer;border-radius:2px;text-decoration:none}.artist-link:hover{color:#fff;text-decoration:underline}.artist-link:focus-visible{outline-offset:2px;outline:2px solid #1db954}.pb-input,.pb-preview,.pb-done{flex-direction:column;gap:1rem;display:flex}.pb-label{color:#bbb;flex-direction:column;gap:.4rem;font-size:.9rem;display:flex}.pb-text-input,.pb-textarea{color:#eee;resize:vertical;background:#1a1a1a;border:1px solid #444;border-radius:4px;padding:.6rem .75rem;font-family:inherit;font-size:.95rem}.pb-textarea{min-height:200px;line-height:1.4}.pb-text-input:focus,.pb-textarea:focus{border-color:#1db954;outline:none}.pb-error{color:#ff8080;background:#ff44441f;border:1px solid #ff444459;border-radius:4px;padding:.6rem .8rem;font-size:.9rem}.pb-status{text-align:center;color:#888;padding:2rem;font-size:.95rem}.pb-actions{border-top:1px solid #2a2a2a;justify-content:flex-end;gap:.6rem;padding-top:.5rem;display:flex}.pb-btn{cursor:pointer;border:1px solid #0000;border-radius:2rem;padding:.55rem 1.1rem;font-family:inherit;font-size:.9rem;font-weight:600;transition:all .15s}.pb-btn-primary{color:#000;background:#1db954}.pb-btn-primary:hover:not(:disabled){background:#1ed760}.pb-btn-primary:disabled{color:#666;cursor:not-allowed;background:#2a2a2a}.pb-btn-secondary{color:#ddd;background:0 0;border-color:#555}.pb-btn-secondary:hover:not(:disabled){color:#fff;border-color:#888}.pb-preview-summary{color:#bbb;font-size:.95rem}.pb-preview-summary strong{color:#fff}.pb-rows{flex-direction:column;gap:.5rem;max-height:55vh;padding-right:.25rem;display:flex;overflow-y:auto}.pb-row{background:#1a1a1a;border:1px solid #2a2a2a;border-left:3px solid #444;border-radius:4px;gap:.75rem;padding:.65rem .75rem;display:flex}.pb-row-high{border-left-color:#1db954}.pb-row-medium{border-left-color:#e0c020}.pb-row-low{border-left-color:#d97a2c}.pb-row-none{border-left-color:#d04040}.pb-row-excluded{opacity:.5}.pb-row-check{cursor:pointer;accent-color:#1db954;flex-shrink:0;width:16px;height:16px;margin-top:.2rem}.pb-row-info{flex-direction:column;flex:1;gap:.4rem;min-width:0;display:flex}.pb-row-input{color:#888;align-items:center;gap:.6rem;font-size:.85rem;display:flex}.pb-row-input-text{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.pb-row-badge{text-transform:uppercase;letter-spacing:.03em;border-radius:2rem;flex-shrink:0;padding:.1rem .5rem;font-size:.7rem;font-weight:600}.pb-row-badge-high{color:#1db954;background:#1db9542e}.pb-row-badge-medium{color:#e0c020;background:#e0c0202e}.pb-row-badge-low{color:#d97a2c;background:#d97a2c33}.pb-row-badge-none{color:#d04040;background:#d0404033}.pb-row-match{align-items:center;gap:.6rem;display:flex}.pb-row-cover{object-fit:cover;border-radius:2px;flex-shrink:0;width:40px;height:40px}.pb-row-match-text{flex:1;min-width:0}.pb-row-match-track{color:#fff;text-overflow:ellipsis;white-space:nowrap;font-size:.95rem;overflow:hidden}.pb-row-match-meta{color:#888;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;overflow:hidden}.pb-row-alt-btn{color:#bbb;cursor:pointer;background:0 0;border:1px solid #555;border-radius:4px;flex-shrink:0;padding:.3rem .6rem;font-size:.75rem;transition:all .15s}.pb-row-alt-btn:hover{color:#fff;border-color:#1db954}.pb-row-error{color:#888;font-size:.85rem;font-style:italic}.pb-row-alternatives{border-top:1px solid #2a2a2a;flex-direction:column;gap:.3rem;margin-top:.4rem;padding-top:.5rem;display:flex}.pb-row-alt{cursor:pointer;color:#ccc;border-radius:3px;align-items:center;gap:.5rem;padding:.35rem .5rem;font-size:.85rem;display:flex}.pb-row-alt:hover{background:#222}.pb-row-alt-selected{background:#1db9541a}.pb-row-alt input{accent-color:#1db954;cursor:pointer}.pb-row-alt-text strong{color:#fff;font-weight:500}.pb-done-message{text-align:center;color:#eee;padding:1.5rem .5rem;font-size:1rem}@media (width<=600px){.pb-row{padding:.55rem .6rem}.pb-row-match{flex-wrap:wrap}.pb-row-alt-btn{margin-top:.3rem}.pb-rows{max-height:50vh}}
