:root{color-scheme:light;--paper:#fff;--ink:#172236;--muted:#7c8798;--line:#e9edf3;--soft:#f6f8fb;--blue:#3865dc;--glass:rgba(255,255,255,.72);--shadow:0 20px 55px #263b5715;--ambient:#e4edfa;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:15px;font-synthesis:none}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);transition:background .25s,color .25s}button,input,a{-webkit-tap-highlight-color:transparent}button,input{font:inherit}button{cursor:pointer;color:inherit}button,a{touch-action:manipulation}button{border:0;background:none}button:disabled{opacity:.4;cursor:default}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid #71809680;outline-offset:4px}button{transition:background .16s,transform .18s,color .18s,opacity .18s}button:active:not(:disabled){transform:scale(.96)}[hidden]{display:none!important}.icon{width:20px;height:20px;display:block;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}.icon use{stroke:inherit}.site-header{height:88px;padding:0 48px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);gap:24px}.brand{display:flex;align-items:center;gap:10px;white-space:nowrap;font-size:14px;font-weight:650;letter-spacing:-.02em}.brand img{object-fit:contain}.brand-divider{margin:0 13px;color:#cbd3df;font-weight:400}.brand b{font-weight:500}.site-links{display:flex;gap:28px;color:var(--muted);font-size:13px}.site-links button{padding:12px 1px}.site-links button:hover{color:var(--blue)}.header-actions{display:flex;align-items:center;gap:16px}.preview-label{font-size:11px;color:var(--muted);letter-spacing:.07em}.icon-button{display:grid;place-items:center;border-radius:50%;width:42px;height:42px;flex:none}.icon-button:hover{background:var(--soft)}.app-layout{display:grid;grid-template-columns:205px 1fr;max-width:1536px;margin:auto;min-height:calc(100dvh - 88px)}.sidebar{padding:49px 24px 150px 34px;border-right:1px solid var(--line)}.nav-caption{font-size:11px;color:var(--muted);margin:0 0 23px 14px;letter-spacing:.08em}.sidebar nav{display:grid;gap:9px}.nav-button{display:flex;align-items:center;gap:13px;padding:12px 15px;border-radius:11px;text-align:left;font-size:14px;font-weight:500}.nav-button .icon{width:18px;height:18px}.nav-button:hover{background:var(--soft)}.nav-button.active{color:var(--blue);background:#4269db0d}.sidebar-note{margin:90px 0 0 15px;color:#a5afbf;display:flex;gap:12px;align-items:flex-start}.sidebar-note .icon{margin-top:3px;width:17px;height:17px}.sidebar-note p{font-size:11px;line-height:1.9;margin:0}main{padding:55px 54px 180px;min-width:0}.page-heading{display:flex;justify-content:space-between;align-items:end;gap:22px;margin:0 0 38px}.eyebrow{font-size:11px;color:var(--muted);letter-spacing:.13em;margin:0 0 15px}h1{font-size:34px;line-height:1.22;letter-spacing:-.06em;font-weight:650;margin:0}.heading-note{color:var(--muted);font-size:13px;line-height:1.8;margin:14px 0 0}.pill-button{display:flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:9px 15px;border-radius:22px;border:1px solid var(--line);font-size:12px;font-weight:500;white-space:nowrap}.pill-button .icon{width:15px;height:15px}.pill-button:hover{background:var(--soft)}.section-heading{display:flex;justify-content:space-between;align-items:center;margin:0 0 20px}h2{font-size:17px;font-weight:600;letter-spacing:-.035em;margin:0}.section-heading>span{font-size:11px;color:var(--muted)}.album-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:24px}.album-card{min-width:0;content-visibility:auto;contain-intrinsic-size:auto 380px}.album-art{position:relative;aspect-ratio:1;border-radius:16px;overflow:hidden;width:100%;display:block;text-align:left;box-shadow:0 7px 17px #23375c08;isolation:isolate;transition:transform .27s cubic-bezier(.2,.7,.2,1),box-shadow .27s}.album-art:hover{transform:translateY(-4px);box-shadow:0 16px 27px #23375c17}.cover-copy{display:flex;height:100%;flex-direction:column;justify-content:space-between;align-items:flex-start;padding:22px;color:var(--cover-ink,#23415e);background:var(--cover,#e5edf9);overflow:hidden}.cover-copy .cover-edition{font-size:9px;letter-spacing:.2em;text-transform:uppercase;opacity:.55}.cover-copy strong{font-size:clamp(19px,2.1vw,34px);font-weight:450;letter-spacing:-.045em;white-space:pre-line;line-height:1.2}.cover-copy small{font-size:10px;letter-spacing:.07em;opacity:.65}.album-art>img{width:100%;height:100%;display:block;object-fit:cover}.cover-play{display:grid;place-items:center;position:absolute;right:14px;bottom:14px;width:38px;height:38px;background:#ffffffc9;color:#193457;border:1px solid #fff8;backdrop-filter:blur(16px);border-radius:50%;opacity:0;transform:translateY(5px);transition:opacity .18s,transform .18s}.album-art:hover .cover-play,.album-art:focus-visible .cover-play,.album-card.is-current .cover-play{opacity:1;transform:none}.album-caption{display:flex;align-items:start;gap:5px;margin-top:15px}.album-caption>div{min-width:0;flex:1}.album-caption strong{font-size:13px;font-weight:560;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.album-caption p{font-size:11px;color:var(--muted);margin:6px 0 0}.album-caption .icon-button{width:28px;height:28px;margin-top:-4px}.album-caption .icon{width:17px;height:17px}.quiet-note{font-size:11px;color:var(--muted);margin-top:33px;line-height:1.8}.section-divider{height:1px;background:var(--line);margin:37px 0 28px}.continue-row{display:flex;align-items:center;gap:12px;padding:12px 0;max-width:500px}.continue-icon{width:42px;height:42px;border-radius:12px;background:var(--soft);display:grid;place-items:center;color:var(--muted)}.continue-row>div{flex:1}.continue-row strong{font-size:12px;font-weight:500}.continue-row p{font-size:11px;color:var(--muted);margin:4px 0 0}.text-button{display:inline-flex;align-items:center;gap:7px;min-height:36px;font-size:12px;color:var(--blue);padding:5px 2px}.text-button .icon{width:15px;height:15px}.list-toolbar{display:flex;justify-content:space-between;gap:20px;margin-bottom:25px}.search-field{display:flex;align-items:center;gap:8px;background:var(--soft);border:1px solid transparent;padding:0 12px;border-radius:10px;max-width:330px;width:100%;color:var(--muted)}.search-field input{background:none;border:0;min-width:0;width:100%;height:42px;color:var(--ink);outline:none}.search-field:focus-within{border-color:#8a97aa}.track-list{display:grid}.track-row{display:flex;align-items:center;gap:15px;min-height:72px;border-bottom:1px solid var(--line);padding:9px 0}.track-index{font-size:12px;color:var(--muted);width:20px;text-align:center}.small-cover{width:48px;height:48px;border-radius:9px;flex:none;overflow:hidden;background:var(--cover,#e4edfa);color:var(--cover-ink,#25405e);display:grid;place-items:center}.small-cover img{width:100%;height:100%;object-fit:cover}.small-cover span{font-size:12px}.track-description{flex:1;min-width:0}.track-description strong{display:block;font-size:13px;font-weight:550;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.track-description p{font-size:11px;color:var(--muted);margin:5px 0 0}.track-duration{color:var(--muted);font-size:12px;min-width:35px}.track-row.current .track-description strong{color:var(--blue)}.track-row .icon-button{width:33px;height:33px}.track-row .icon{width:16px;height:16px}.is-loved{color:#d93655!important}.is-loved .icon{fill:currentColor}.empty-section{padding:48px 26px;border:1px dashed var(--line);border-radius:18px;text-align:center;color:var(--muted)}.empty-section .icon{margin:0 auto 16px;width:25px;height:25px}.empty-section p{font-size:13px;line-height:1.8}.playlist-tile{min-height:180px;border-radius:16px;padding:23px;background:var(--soft);text-align:left;display:flex;flex-direction:column;justify-content:space-between}.playlist-tile .icon{color:#7d93be}.playlist-tile strong{font-size:19px;font-weight:550;display:block}.playlist-tile small{font-size:11px;color:var(--muted);margin-top:9px;display:block}.back-button{margin-bottom:20px}.track-actions{display:flex;gap:4px;align-items:center}.playlist-select{max-width:115px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--muted);padding:6px;font:inherit;font-size:11px}.mobile-nav{display:none}
.mini-player{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);width:min(650px,calc(100% - 40px));min-height:80px;z-index:40;display:flex;align-items:center;gap:12px;padding:12px 15px 12px 13px;border:1px solid #ffffff9c;border-radius:25px;background:rgba(255,255,255,.58);box-shadow:inset 0 1px 0 #ffffffc2,inset 0 -1px 0 #6b85ab0d,0 10px 32px #2a456514,0 2px 8px #27364a05;backdrop-filter:blur(16px) saturate(1.4);-webkit-backdrop-filter:blur(16px) saturate(1.4);transition:opacity .15s,visibility .15s}.mini-player:after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;background:linear-gradient(125deg,#ffffff1f,transparent 45%,#c4d9ff08)}.dock-summary{display:flex;align-items:center;gap:12px;text-align:left;min-width:0;flex:1;padding:0;position:relative;z-index:1}.dock-art{display:grid;place-items:center;width:52px;height:52px;border-radius:16px;color:var(--blue);background:#edf3ff9e;border:1px solid #ffffffc2;box-shadow:inset 0 1px 0 #fff;overflow:hidden;flex:none}.dock-art img{width:100%;height:100%;object-fit:cover}.dock-art .icon{width:23px;height:23px}.dock-art .initial{font-size:18px}.dock-copy{min-width:0;display:flex;flex-direction:column;gap:6px}.dock-copy strong{font-weight:550;font-size:13px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1.4}.dock-copy>span{font-size:11px;color:#23314a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dock-controls{display:flex;gap:3px;align-items:center;position:relative;z-index:1}.dock-controls .icon-button{width:37px;height:37px}.dock-controls .primary-play{width:42px;height:42px;background:var(--ink);color:var(--paper)}.primary-play .icon{width:18px;height:18px;fill:currentColor;stroke-width:1.2}.dock-empty-actions{position:relative;z-index:1}.random-button{height:39px;border-radius:18px;padding:0 15px;display:flex;align-items:center;gap:8px;color:#4268b4;background:#eef3feaa;border:1px solid #dce7fcaa;font-size:12px;font-weight:550}.random-button .icon{width:15px;height:15px}.random-button:hover{background:#e2ebff}.is-empty .dock-controls,.is-empty .dock-progress{display:none}.mini-player:not(.is-empty) .dock-empty-actions{display:none}.dock-progress{position:absolute;bottom:0;left:25px;right:25px;height:2px;overflow:hidden}.dock-progress>span{display:block;height:100%;width:0;background:#6c93e8;transition:width .3s linear}.player-panel{position:fixed;inset:0;margin:auto;width:min(950px,calc(100vw - 70px));height:min(655px,calc(100dvh - 70px));max-width:none;max-height:none;padding:0;border-radius:30px;border:1px solid #ffffffdc;background:var(--glass);color:var(--ink);box-shadow:0 30px 100px #16263b2b;backdrop-filter:blur(40px) saturate(1.2);-webkit-backdrop-filter:blur(40px) saturate(1.2);overflow:hidden;transform-origin:top left}.player-panel::backdrop{background:#25324630;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.player-panel.is-closing{backdrop-filter:none;-webkit-backdrop-filter:none}.player-panel-inner{height:100%;display:flex;flex-direction:column}.player-heading{height:61px;display:flex;align-items:center;justify-content:space-between;padding:10px 20px;flex:none}.player-heading>span{color:var(--muted);font-size:11px;letter-spacing:.15em}.player-heading .icon-button{width:35px;height:35px}.player-heading .icon{width:18px;height:18px}.expanded-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:58px;flex:1;min-height:0;padding:4px 48px 35px}.now-playing{min-width:0;display:flex;flex-direction:column;justify-content:center}.large-art{width:100%;aspect-ratio:1;max-height:315px;flex:none;border-radius:18px;overflow:hidden;box-shadow:0 14px 32px #1f335c14;background:var(--ambient)}.large-art>img{width:100%;height:100%;object-fit:cover}.large-art .cover-copy{padding:30px}.large-art .cover-copy strong{font-size:42px}.song-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:24px 0 19px}.song-heading>div{min-width:0}.song-heading h2{font-size:21px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.song-heading p{font-size:12px;color:var(--muted);margin:8px 0 0}.song-heading .icon-button{width:32px;height:32px}.seek-area input,.volume-row input{display:block;width:100%;height:5px;margin:0;appearance:none;-webkit-appearance:none;border-radius:10px;background:linear-gradient(to right,var(--blue) var(--progress,0%),#c3cbd855 var(--progress,0%));cursor:pointer}.seek-area input::-webkit-slider-thumb,.volume-row input::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;background:var(--blue);width:10px;height:10px;border-radius:50%;box-shadow:0 0 0 3px #fff5}.seek-area input::-moz-range-thumb,.volume-row input::-moz-range-thumb{border:0;background:var(--blue);width:10px;height:10px;border-radius:50%}.time-row{display:flex;justify-content:space-between;font-size:10px;color:var(--muted);margin-top:9px;font-variant-numeric:tabular-nums}.transport{display:flex;align-items:center;justify-content:space-between;margin:12px 1px 9px;gap:13px}.transport .icon-button{width:38px;height:38px}.transport .icon{width:22px;height:22px}.transport .mode-control .icon,.transport #stopButton .icon{width:17px;height:17px}.transport .large-play{width:54px;height:54px}.large-play .icon{width:30px;height:30px;fill:currentColor;stroke-width:1}.mode-control[data-enabled=true]{color:var(--blue);background:#4874db12}.volume-row{display:flex;align-items:center;gap:13px;max-width:210px;width:75%;margin:0 auto;color:var(--muted)}.volume-row .icon{width:15px;height:15px;flex:none}.volume-row input{height:3px;background:linear-gradient(to right,#8392ab var(--progress,65%),#c3cbd855 var(--progress,65%))}.volume-row input::-webkit-slider-thumb{width:8px;height:8px;background:#8392ab}.mode-label{font-size:10px;color:var(--muted);text-align:center;margin:12px 0 0}.player-detail{display:flex;flex-direction:column;min-height:0;padding-top:8px}.detail-tabs{display:flex;gap:24px;flex:none;border-bottom:1px solid var(--line);margin-bottom:22px}.detail-tabs button{font-size:12px;color:var(--muted);padding:9px 1px 14px;position:relative}.detail-tabs [aria-selected=true]{color:var(--ink);font-weight:600}.detail-tabs [aria-selected=true]:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--blue);border-radius:3px}.detail-pane{flex:1;min-height:0;overflow:auto;scrollbar-width:thin;overscroll-behavior:contain}.player-footnote{font-size:10px;color:var(--muted);margin-top:15px}.player-footnote span{margin:0 9px}.lyrics-empty{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;color:var(--muted);gap:13px}.lyrics-empty .icon{width:25px;height:25px;opacity:.45}.lyrics-empty h3{color:var(--ink);font-size:22px;font-weight:550;margin:0}.lyrics-empty p{font-size:12px;line-height:1.9;margin:0}.lyrics-lines{padding:80px 0 110px}.lyric-line{display:block;font-size:23px;font-weight:600;line-height:1.5;letter-spacing:-.03em;color:var(--muted);opacity:.45;transform-origin:left center;transition:opacity .22s,transform .24s,color .24s;padding:13px 0}.lyric-line.active{color:var(--ink);opacity:1;transform:scale(1.055)}#pickLrc{font-size:11px;position:sticky;bottom:0;background:var(--glass);border-radius:10px;padding:6px 10px}.queue-heading{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:11px;margin-bottom:7px}.queue-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}.queue-row .small-cover{width:38px;height:38px;border-radius:8px}.queue-row .track-description strong{font-size:12px}.queue-row .track-description p{font-size:10px}.queue-row .icon-button{width:28px;height:28px}.queue-row .icon{width:14px;height:14px}.queue-row.current .track-description strong{color:var(--blue)}body.player-open .mini-player{opacity:0;visibility:hidden}.player-panel.immersive{width:100vw;height:100dvh;border-radius:0;border:0;background:color-mix(in srgb,var(--ambient) 32%,var(--paper));box-shadow:none}.player-panel.immersive .expanded-grid{max-width:1120px;width:100%;margin:0 auto;gap:110px;padding:24px 50px 50px}.player-panel.immersive .large-art{max-height:410px;max-width:410px}.player-panel.immersive .player-heading{padding:20px 35px;height:85px}.player-panel.immersive .lyric-line{font-size:30px}.player-panel.immersive .song-heading{margin-top:28px}.small-dialog{border:1px solid var(--line);border-radius:24px;padding:28px;width:min(390px,calc(100% - 32px));background:var(--paper);color:var(--ink);box-shadow:var(--shadow)}.small-dialog::backdrop{background:#23334633;backdrop-filter:blur(6px)}.small-dialog label{display:block;font-size:12px;color:var(--muted);margin-top:22px;margin-bottom:8px}.small-dialog input{border:1px solid var(--line);background:var(--soft);border-radius:11px;width:100%;padding:12px;color:var(--ink)}.small-dialog p{font-size:11px;color:var(--muted);line-height:1.8;margin:12px 0 22px}.small-dialog form>div{display:flex;justify-content:flex-end;gap:20px}.blue-button{background:var(--blue);color:#fff;border-radius:11px;padding:10px 19px;font-size:12px}.toast{position:fixed;left:50%;bottom:132px;transform:translateX(-50%);z-index:100;font-size:12px;padding:12px 19px;border-radius:14px;background:#1d2d43ed;color:#fff;box-shadow:var(--shadow);max-width:calc(100vw - 36px);text-align:center;pointer-events:none}.context-bar{height:45px;padding:0 28px;display:flex;align-items:center;gap:22px;border-bottom:1px solid var(--line);font-size:12px;color:var(--muted);background:var(--paper)}.context-note{margin-left:auto;font-size:11px}.context-bar .text-button{font-size:11px}#siteFrame{display:block;border:0;width:100%;height:calc(100dvh - 133px)}body[data-outside=true] .mobile-nav{display:none}
.dark{color-scheme:dark;--paper:#101722;--ink:#e6ecf7;--muted:#8e9ab0;--line:#263044;--soft:#182232;--blue:#9eb8fa;--glass:rgba(28,39,57,.8);--ambient:#263a55}.dark .brand img{filter:brightness(1.6)}.dark .nav-button.active{background:#89a7fc12}.dark .mini-player{background:rgba(24,34,50,.64);border-color:#bacfff30;box-shadow:inset 0 1px 0 #d7e6ff30,0 10px 32px #0003}.dark .mini-player .dock-copy>span{color:#e6ecf7}.dark .mini-player:after{background:linear-gradient(125deg,#d9e5ff0b,transparent 50%,#7ba8ff0a)}.dark .dock-art{background:#89a7fc12;border-color:#b1cbff28;box-shadow:inset 0 1px 0 #d0e1ff1a}.dark .random-button{color:#b5c9ff;background:#89a7fc13;border-color:#bbcefb20}.dark .player-panel{border-color:#d5e4ff24}.dark .cover-play{background:#172a45bf;color:#e0ebff;border-color:#bbd6ff33}.dark .toast{background:#e3ecff;color:#162135}
@media(min-width:1600px){main{padding-left:75px;padding-right:75px}.album-grid{gap:30px}}
@media(max-width:1150px){.site-header{padding:0 28px;height:76px}.app-layout{grid-template-columns:175px 1fr;min-height:calc(100dvh - 76px)}.sidebar{padding-left:20px;padding-right:16px}main{padding:45px 32px 170px}.album-grid{gap:18px}.cover-copy{padding:18px}.cover-copy strong{font-size:24px}.site-links{gap:19px}#siteFrame{height:calc(100dvh - 121px)}}
@media(max-width:850px) and (min-width:761px){.expanded-grid{gap:30px;padding:5px 32px 28px}.large-art{max-height:280px}.song-heading{margin-top:20px}.player-panel{height:min(625px,calc(100dvh - 45px))}.player-panel.immersive .expanded-grid{gap:55px}}
@media(max-width:760px){.site-header{height:68px;padding:0 20px;gap:12px}.brand{font-size:12px;gap:8px}.brand img{width:24px;height:24px}.brand-divider{margin:0 9px}.header-actions{gap:7px}.preview-label{font-size:9px}.header-actions .icon-button{width:30px;height:30px}.header-actions .icon{width:17px;height:17px}.site-links{display:none}.app-layout{display:block;min-height:calc(100dvh - 68px)}.sidebar{display:none}main{padding:34px 22px 185px}.page-heading{margin-bottom:31px;align-items:start;gap:12px}.eyebrow{font-size:9px;margin-bottom:12px}h1{font-size:28px}.heading-note{font-size:11px;line-height:1.7;margin-top:10px}.pill-button{font-size:10px;padding:8px 11px;min-height:35px}.pill-button .icon{width:13px;height:13px}.page-heading>.pill-button{margin-top:28px}.album-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 17px}.cover-copy{padding:17px}.cover-copy strong{font-size:clamp(18px,5vw,25px)}.cover-copy .cover-edition{font-size:7px}.cover-copy small{font-size:8px}.album-art{border-radius:13px}.album-caption{margin-top:12px}.album-caption strong{font-size:12px}.album-caption p{font-size:10px}.cover-play{width:31px;height:31px;right:10px;bottom:10px;opacity:1;transform:none}.cover-play .icon{width:16px;height:16px}.section-heading h2{font-size:15px}.section-heading>span{font-size:10px}.quiet-note{font-size:10px;margin-top:25px}.section-divider{margin:27px 0 17px}.mobile-nav{display:flex;justify-content:space-around;align-items:center;position:fixed;left:0;right:0;bottom:0;padding:9px 10px calc(9px + env(safe-area-inset-bottom));height:calc(66px + env(safe-area-inset-bottom));background:var(--paper);border-top:1px solid var(--line);z-index:30}.mobile-nav button{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:5px;color:var(--muted);font-size:9px;min-width:54px;min-height:44px}.mobile-nav button.active{color:var(--blue)}.mobile-nav .icon{width:19px;height:19px}.mini-player{width:calc(100% - 24px);bottom:calc(77px + env(safe-area-inset-bottom));min-height:70px;border-radius:21px;padding:10px 11px;gap:5px}.dock-summary{gap:9px}.dock-art{width:46px;height:46px;border-radius:13px}.dock-copy{gap:4px}.dock-copy strong{font-size:11px}.dock-copy>span{font-size:9px}.random-button{font-size:10px;padding:0 11px;height:34px;gap:6px}.random-button .icon{width:13px;height:13px}.dock-previous,.dock-queue{display:none!important}.dock-controls{gap:0}.dock-controls .icon-button{width:31px;height:35px}.dock-controls .primary-play{width:36px;height:36px;margin:0 4px}.dock-controls .icon{width:17px;height:17px}.dock-progress{left:21px;right:21px}.player-panel,.player-panel.immersive{width:100vw;height:100dvh;border:0;border-radius:0;background:color-mix(in srgb,var(--ambient) 20%,var(--paper));inset:0;margin:0}.player-panel::backdrop{backdrop-filter:none}.player-heading,.player-panel.immersive .player-heading{height:59px;padding:calc(8px + env(safe-area-inset-top)) 17px 8px;box-sizing:content-box}.player-heading>span{font-size:10px}.player-heading #expandPlayer{visibility:hidden}.expanded-grid,.player-panel.immersive .expanded-grid{display:flex;flex-direction:column;gap:18px;padding:3px 32px calc(22px + env(safe-area-inset-bottom));overflow:auto;max-width:490px;margin:0 auto;width:100%}.now-playing{flex:none}.large-art,.player-panel.immersive .large-art{width:min(100%,32dvh);max-height:none;max-width:none;align-self:center;border-radius:17px}.large-art .cover-copy{padding:22px}.large-art .cover-copy strong{font-size:clamp(22px,7vw,33px)}.song-heading,.player-panel.immersive .song-heading{margin:22px 0 20px}.song-heading h2{font-size:23px}.song-heading p{font-size:12px;margin-top:7px}.transport{margin:14px 5px 11px;gap:10px}.transport .icon{width:24px;height:24px}.transport .large-play{width:52px;height:52px}.transport .large-play .icon{width:31px;height:31px}.volume-row{width:70%;max-width:215px}.mode-label{margin-top:11px;font-size:9px}.player-detail{min-height:170px;padding:0;flex:1}.detail-tabs{margin-bottom:10px}.detail-tabs button{font-size:12px;padding-top:4px;padding-bottom:10px}.detail-pane{max-height:260px;min-height:115px}.player-footnote{display:none}.lyrics-empty{min-height:115px;gap:7px}.lyrics-empty .icon{display:none}.lyrics-empty h3{font-size:19px}.lyrics-empty p{font-size:11px}.lyrics-lines{padding:25px 0 100px}.lyric-line,.player-panel.immersive .lyric-line{font-size:22px;padding:9px 0}.toast{bottom:calc(163px + env(safe-area-inset-bottom));font-size:11px}.list-toolbar{gap:9px}.search-field input{font-size:12px;height:38px}.track-row{gap:9px;min-height:67px}.track-index{display:none}.small-cover{width:42px;height:42px}.track-duration{font-size:10px;min-width:29px}.track-row .icon-button{width:29px;height:33px}.track-description strong{font-size:12px}.track-description p{font-size:10px}.track-row .secondary-track-action{display:none}.playlist-select{max-width:86px;font-size:10px}.playlist-tile{min-height:157px;padding:18px}.playlist-tile strong{font-size:17px}.context-bar{padding:0 17px;height:41px;gap:13px}.context-note{font-size:10px}#siteFrame{height:calc(100dvh - 109px)}body[data-outside=true] .mini-player{bottom:calc(16px + env(safe-area-inset-bottom))}}
@media(max-height:740px) and (max-width:760px){.large-art,.player-panel.immersive .large-art{width:25dvh}.expanded-grid{gap:12px}.song-heading{margin-top:15px!important}.player-detail{min-height:110px}.mode-label{display:none}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

.refresh-recommendations{width:44px;height:44px;color:var(--muted);margin:-4px -10px -4px 0}.refresh-recommendations .icon{width:17px;height:17px}.refresh-recommendations:hover{color:var(--blue)}.list-play-actions{display:flex;align-items:center;gap:5px;flex:none}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.leading-rank{color:var(--blue);font-weight:650}
/* Idle dock is decorative; controls live on the music page until a song is chosen. */
.mini-player.is-empty{width:min(330px,68vw);min-height:44px;height:44px;padding:0;border-radius:23px;pointer-events:none;background:linear-gradient(135deg,#ffffff29,#edf5ff14);box-shadow:inset 0 1px 0 #ffffffbd,inset 0 -1px 0 #9ab1d326,0 8px 26px #243d620d,0 2px 7px #243d6205;transition:width .4s ease,height .4s ease,opacity .2s}
.mini-player.is-empty>.dock-summary,.mini-player.is-empty>.dock-empty-actions{display:none}
.dark .mini-player.is-empty{background:linear-gradient(135deg,#526a8d24,#20304714);border-color:#c6daff30;box-shadow:inset 0 1px 0 #e0ecff3d,0 8px 26px #0002}
@media(max-width:760px){.mini-player.is-empty{width:62vw;min-height:38px;height:38px;border-radius:21px}}

.library-filters,.playlist-actions{display:flex;gap:22px;align-items:center;flex-wrap:wrap;margin:-14px 0 25px;color:var(--muted);font-size:12px}.library-filters .active{color:var(--ink);box-shadow:0 2px var(--blue)}.support-button{flex:none;border:1px solid var(--line);padding:9px 12px;border-radius:16px;font-size:11px;color:var(--muted)}.support-button.active{color:var(--blue);background:#3b6ce30b;border-color:#3b6ce333}.unavailable-track{padding:20px 0;border-bottom:1px solid var(--line);color:var(--muted);font-size:12px}.upload-dialog{padding:0;border:1px solid var(--line);border-radius:26px;width:min(720px,calc(100vw - 40px));max-height:calc(100dvh - 60px);background:var(--paper);color:var(--ink);box-shadow:var(--shadow);overflow:hidden}.upload-dialog::backdrop{background:#1e2d443d;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.upload-dialog form{display:flex;flex-direction:column;max-height:calc(100dvh - 62px)}.upload-heading{display:flex;justify-content:space-between;align-items:center;padding:25px 28px;border-bottom:1px solid var(--line);flex:none}.upload-heading h2{font-size:23px}.upload-heading p{font-size:12px;color:var(--muted);margin:10px 0 0}.upload-scroll{overflow:auto;padding:0 28px;overscroll-behavior:contain;min-height:230px}.upload-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;border-top:1px solid var(--line);padding:19px 28px;flex:none}.upload-footer>span{font-size:11px;color:var(--muted);max-width:190px;line-height:1.8}.upload-footer>div{display:flex;gap:13px;align-items:center}.upload-footer .blue-button{white-space:nowrap}.upload-song{padding:25px 0;border-bottom:1px solid var(--line)}.upload-file-heading{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-bottom:20px}.upload-file-heading strong{font-size:13px;word-break:break-all}.upload-file-heading span{font-size:11px;color:var(--muted);margin-left:12px}.upload-fields{display:grid;grid-template-columns:132px 1fr;gap:24px}.upload-song label{font-size:12px;color:var(--muted);display:block}.upload-song input:not([type=file]),.upload-song select,.upload-song textarea{display:block;width:100%;margin:7px 0 13px;border:1px solid var(--line);border-radius:9px;background:var(--soft);color:var(--ink);padding:10px 12px;min-height:41px;font:inherit;font-size:14px;resize:vertical}.upload-song .field-invalid{border-color:#c45a5a}.cover-picker{cursor:pointer}.cover-preview{display:grid;place-items:center;aspect-ratio:1;border-radius:13px;background:var(--soft);border:1px solid var(--line);overflow:hidden;font-size:12px}.cover-preview img{width:100%;height:100%;object-fit:cover}.cover-picker input{max-width:132px;margin-top:10px;font-size:10px}.cover-picker small{display:block;margin-top:10px;font-size:10px;line-height:1.7}.upload-version{display:grid;grid-template-columns:1fr 1.4fr;gap:12px}.upload-source{margin-top:13px}.upload-lyrics summary{font-size:12px;color:var(--blue);cursor:pointer;padding:10px 0}.upload-lyrics .pill-button{display:inline-flex}.lrc-filename{font-size:11px;margin-left:10px;color:var(--muted)}.upload-status{font-size:12px;color:var(--muted);margin:10px 0 0}.has-error .upload-status{color:#b74b4b}.upload-progress{width:100%;height:4px;margin-top:18px;accent-color:var(--blue)}#uploadEmpty{padding:55px 20px;text-align:center}#uploadEmpty p{font-size:15px;color:var(--muted);margin:0 0 25px}#uploadEmpty .pill-button{display:inline-flex;cursor:pointer}#uploadError{padding:14px;margin-top:20px;border:1px solid #b74b4b33;border-radius:10px;background:#b74b4b08;color:#a64242;font-size:13px;line-height:1.8}
@media(max-width:760px){.library-filters{gap:19px;margin-top:-10px;flex-wrap:nowrap;overflow:auto;white-space:nowrap}.library-filters .text-button{font-size:11px}.track-row .track-duration,.track-row .playlist-select{display:none}.support-button{font-size:10px;padding:8px 9px}.upload-dialog{width:100vw;max-width:none;max-height:100dvh;height:100dvh;margin:0;border:0;border-radius:0}.upload-dialog form{max-height:100dvh;height:100dvh}.upload-heading{padding:22px}.upload-scroll{padding:0 22px;flex:1}.upload-fields{grid-template-columns:88px 1fr;gap:15px}.cover-picker input{max-width:88px}.upload-version{grid-template-columns:1fr}.upload-footer{padding:15px 18px calc(15px + env(safe-area-inset-bottom));flex-wrap:wrap}.upload-footer>span{max-width:none;width:100%}.upload-footer>div{width:100%;justify-content:space-between}.upload-heading h2{font-size:21px}.upload-song input:not([type=file]),.upload-song select,.upload-song textarea{font-size:16px}.playlist-actions{gap:16px}}
.track-row [data-add-next],.track-row [data-add-queue],.track-row .playlist-select{display:none}.track-more{width:38px!important;height:44px!important}.track-actions-dialog{padding:17px 22px 22px;max-width:360px}.track-actions-dialog header{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px;gap:10px}.track-actions-dialog h2{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.action-option{display:block;text-align:left;width:100%;min-height:44px;padding:12px 8px;border-radius:8px;font-size:13px}.action-option:hover{background:var(--soft)}.track-actions-dialog label{margin:13px 8px;font-size:12px;color:var(--muted)}.track-actions-dialog select{display:block;width:100%;margin-top:9px;min-height:44px;border:1px solid var(--line);border-radius:9px;background:var(--paper);color:var(--ink);padding:8px}.cover-picker{position:relative}.cover-picker input{position:absolute;top:0;left:0;width:100%;height:132px;opacity:0;cursor:pointer;margin:0}.cover-picker:focus-within .cover-preview{outline:2px solid #71809680;outline-offset:3px}@media(max-width:760px){.cover-picker input{height:88px}.track-row{gap:6px}.track-more{width:32px!important}}
.lyrics-plain{white-space:pre-wrap;font-size:20px;font-weight:500;line-height:1.9;padding:30px 0 80px}
.music-edit-dialog{max-height:calc(100dvh - 50px)}.music-edit-dialog>.upload-scroll{max-height:calc(100dvh - 170px);padding-bottom:22px}.music-edit-form label{display:block;font-size:12px;color:var(--muted);margin:18px 0}.music-edit-form input:not([type=checkbox]),.music-edit-form textarea{display:block;width:100%;margin-top:8px;border:1px solid var(--line);border-radius:10px;padding:11px 12px;background:var(--soft);color:var(--ink);font:inherit;font-size:14px}.edit-fields{display:grid;grid-template-columns:1fr 1fr;gap:20px}.music-edit-form .edit-clear-cover{display:flex;align-items:center;gap:8px}.edit-submit{display:flex;align-items:center;justify-content:space-between;gap:20px;border-top:1px solid var(--line);padding:20px 0 0;margin-top:24px}.edit-submit span{font-size:11px;line-height:1.8;color:var(--muted)}.edit-submit>div{display:flex;gap:15px;align-items:center}.revision-status{margin:22px 0;padding:12px 14px;background:var(--soft);border-radius:10px;font-size:13px}.revision-field{margin:25px 0}.revision-field>strong{font-size:13px}.revision-columns{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:12px}.revision-columns section{min-width:0;padding:15px;background:var(--soft);border-radius:12px}.revision-columns section>span{font-size:11px;color:var(--muted)}.revision-columns pre{font:inherit;font-size:14px;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere;max-height:250px;overflow:auto}.revision-cover{width:100%;max-width:180px;aspect-ratio:1;object-fit:cover;border-radius:10px}.music-edit-dialog [data-error]{background:#c74b4b0c;color:#aa4444;padding:12px;border-radius:9px;font-size:13px;line-height:1.8}@media(max-width:760px){.music-edit-dialog{max-height:100dvh;height:100dvh}.music-edit-dialog>.upload-scroll{max-height:calc(100dvh - 100px)}.edit-fields{grid-template-columns:1fr;gap:0}.music-edit-form input:not([type=checkbox]),.music-edit-form textarea{font-size:16px}.revision-columns{gap:10px}.revision-columns section{padding:12px}.edit-submit{flex-wrap:wrap;gap:12px}}
.preflight-list{display:grid;grid-template-columns:1fr auto;gap:18px;margin:25px 0;font-size:14px}.preflight-list dt{color:var(--muted)}.preflight-list dd{margin:0}
.load-more{margin:28px auto}.playlist-cover{width:72px;height:72px;object-fit:cover;border-radius:12px}.playlist-edit-dialog{width:min(470px,calc(100vw - 32px));max-height:calc(100dvh - 40px);overflow:auto;padding:24px}.playlist-edit-dialog header{display:flex;align-items:center;justify-content:space-between;gap:20px}.playlist-edit-dialog textarea,.playlist-edit-dialog input{max-width:100%}.playlist-edit-dialog [data-error]{color:#a64242;background:#b74b4b08;border-radius:9px;padding:12px;font-size:13px}.playlist-edit-dialog .blue-button{min-height:44px}.track-description:disabled{opacity:.55}.playlist-actions{flex-wrap:wrap}button:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid #71809680;outline-offset:3px}@media(max-width:760px){.playlist-edit-dialog input,.playlist-edit-dialog textarea{font-size:16px}.album-caption .icon-button{min-width:44px;min-height:44px}.text-button{min-height:44px}}
.music-confirm-dialog h2{font-size:17px;line-height:1.8}.music-confirm-dialog>div{display:flex;justify-content:flex-end;gap:22px;margin-top:24px}.music-confirm-dialog button{min-height:44px}

/* A quieter page, with the hierarchy carried by covers and primary actions. */
.sidebar{background:#f8faff;padding-top:40px}
.sidebar nav{gap:8px}
.nav-button{position:relative;min-height:48px;border-radius:12px;padding-left:16px}
.nav-button.active{color:#2858ce;background:#e9efff}
.nav-button.active:before{content:"";position:absolute;left:0;top:15px;bottom:15px;width:3px;border-radius:3px;background:currentColor}
main{padding-top:40px}
.page-heading{align-items:center;margin-bottom:32px}
.heading-title{display:flex;align-items:center;gap:14px;min-width:0}
.heading-title h1{font-size:32px;letter-spacing:-.045em}
.heading-title .refresh-recommendations{margin:0;border:1px solid var(--line);background:var(--paper);color:var(--muted)}
.upload-trigger{min-height:48px;min-width:148px;padding:12px 22px;border-radius:15px;border:1px solid #2653c8;background:#315ed5;color:#fff;font-size:14px;font-weight:600;box-shadow:0 5px 14px #315ed521}
.upload-trigger .icon{width:20px;height:20px}
.upload-trigger:hover{background:#244fc2;box-shadow:0 7px 18px #315ed52e;transform:translateY(-1px)}
.upload-trigger:active{transform:translateY(0) scale(.98)}
.recommendation-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:28px;align-items:start}
.recommendation-grid[data-count="1"]{grid-template-columns:minmax(0,460px)}
.recommendation-grid[data-count="0"]{display:block}
.recommendation-grid .album-art{padding:0;border-radius:20px;box-shadow:0 9px 24px #19345c12,inset 0 0 0 1px #ffffff66}
.recommendation-grid .album-caption{align-items:center;margin-top:20px;gap:12px}
.recommendation-grid .album-caption strong{font-size:18px;line-height:1.45;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.recommendation-grid .album-caption p{font-size:12px;line-height:1.5;color:#65738a;margin-top:7px}
.recommendation-grid .album-caption .icon-button{width:44px;height:44px;margin:0;flex:none}
.recommendation-grid .cover-copy{padding:30px;justify-content:center}
.recommendation-grid .cover-copy strong{font-size:clamp(25px,3.2vw,43px);font-weight:540;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.recommendation-grid .cover-play{width:46px;height:46px;right:19px;bottom:19px}
.recommendation-grid .cover-copy .cover-edition,.recommendation-grid .cover-copy small{display:none}
.recent-meta{margin:10px 0 0;font-size:12px;color:var(--muted)}
.recent-toolbar{align-items:center;flex-wrap:wrap}
.recent-toolbar .search-field{max-width:380px}
.recent-clear{min-height:44px;padding:9px 14px;color:#ad3c46;border:1px solid #b7474729;border-radius:12px}
.recent-clear:hover{background:#b7474709}
.recent-empty{border-style:solid;background:var(--soft);padding:60px 24px}
.recent-empty h2{color:var(--ink);font-size:20px}
.recent-empty .pill-button{display:inline-flex;min-height:44px;margin-top:8px}
.recent-loading{display:grid;gap:18px;padding-top:10px}
.recent-loading span{display:block;height:68px;border-radius:12px;background:var(--soft);animation:recent-pulse 1.2s ease-in-out infinite alternate}
@keyframes recent-pulse{to{opacity:.4}}
.track-description p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dark .sidebar{background:#121b2a}
.dark .nav-button.active{background:#9bb8ff17;color:#b1c7ff}
.dark .upload-trigger{background:#3564dc;border-color:#6389ea;color:white;box-shadow:0 5px 14px #0002}
.dark .upload-trigger:hover{background:#4070eb}
.dark .recommendation-grid .album-art{box-shadow:0 8px 24px #0003;outline:1px solid #c7d6ee18;outline-offset:-1px}
.dark .recommendation-grid .album-caption p{color:#9caec7}
.dark .recent-clear{color:#f0a6ae;border-color:#e49aa530}
@media(min-width:1025px){
 .recommendation-grid[data-count="4"]{grid-template-columns:minmax(0,400px) minmax(0,1fr);column-gap:36px;row-gap:0;align-items:center}
 .recommendation-grid[data-count="4"] .album-card:first-child{grid-row:span 3;align-self:start}
 .recommendation-grid[data-count="4"] .album-card:not(:first-child){display:grid;grid-template-columns:116px minmax(0,1fr);gap:22px;align-items:center;padding:21px 0;border-bottom:1px solid var(--line)}
 .recommendation-grid[data-count="4"] .album-card:last-child{border-bottom:0}
 .recommendation-grid[data-count="4"] .album-card:not(:first-child) .album-art{border-radius:14px;box-shadow:0 5px 14px #19345c0c}
 .recommendation-grid[data-count="4"] .album-card:not(:first-child) .album-caption{margin:0;gap:4px}
 .recommendation-grid[data-count="4"] .album-card:not(:first-child) .album-caption strong{font-size:17px}
 .recommendation-grid[data-count="4"] .album-card:not(:first-child) .cover-copy{padding:15px}
 .recommendation-grid[data-count="4"] .album-card:not(:first-child) .cover-copy strong{font-size:20px}
 .recommendation-grid[data-count="4"] .album-card:not(:first-child) .cover-play{width:34px;height:34px;right:9px;bottom:9px}
}
@media(max-width:1024px) and (min-width:761px){.recommendation-grid{gap:28px 22px}.recommendation-grid .cover-copy strong{font-size:28px}.sidebar{padding-top:39px}}
@media(max-width:760px){
 main{padding:28px 20px calc(185px + env(safe-area-inset-bottom))}
 .page-heading{align-items:center;flex-wrap:wrap;gap:20px;margin-bottom:26px}
 .heading-title{flex:1}.heading-title h1,h1{font-size:28px}
 .page-heading>.upload-trigger{width:100%;min-height:48px;margin:0;font-size:15px;border-radius:14px}
 .heading-title .refresh-recommendations{margin-left:auto;width:44px;height:44px}
 .recommendation-grid{gap:28px 18px}
 .recommendation-grid .album-art{border-radius:15px}
 .recommendation-grid .cover-copy{padding:18px}
 .recommendation-grid .cover-copy strong{font-size:24px;-webkit-line-clamp:3}
 .recommendation-grid .album-caption{margin-top:12px;gap:1px;align-items:start}
 .recommendation-grid .album-caption strong{font-size:14px;line-height:1.5}
 .recommendation-grid .album-caption p{font-size:11px;line-height:1.5;margin-top:5px}
 .recommendation-grid .album-caption .icon-button{width:44px;height:44px;margin-top:-5px}
 .recommendation-grid .cover-play{width:35px;height:35px;right:10px;bottom:10px}
 .mobile-nav button{min-width:54px;min-height:44px}
 .recent-toolbar{gap:12px}.recent-toolbar .search-field{max-width:none;flex-basis:100%}
 .recent-toolbar .search-field input{font-size:16px;min-height:44px}
 .recent-toolbar .list-play-actions{margin-left:auto}
}
@media(prefers-reduced-motion:reduce){.upload-trigger:hover,.upload-trigger:active,.album-art:hover{transform:none}}

.dock-summary{appearance:none;-webkit-appearance:none;background:transparent}

.mini-player.is-idle{opacity:0;visibility:hidden;pointer-events:none;transform:translate(-50%,8px)}

.lyrics-disclaimer{font-size:12px;line-height:1.5;color:var(--muted);margin:12px 0 6px}.music-lyrics-note{display:block;font-size:12px;line-height:1.5;color:var(--muted);margin:5px 0 10px}

/* Shared home/music navigation and small, interruptible transitions. */
html[data-shell-header="true"] .site-header{display:flex;position:sticky;top:0;z-index:45;height:64px;padding:0 32px;gap:22px;background:var(--paper);border-bottom:1px solid var(--line)}
html[data-shell-header="false"] .site-header{display:none}
.shell-bird{display:block;width:30px;height:30px;background:url('/assets/pigeon/companion-b-20260927a.webp') 0 0/200% 200% no-repeat;flex:none}
.site-header .brand{font-size:16px;gap:11px}.site-links{margin-right:auto;gap:18px;align-self:stretch;align-items:stretch}.site-links button{font-size:14px;padding:0 5px;position:relative;min-height:44px;white-space:nowrap}.site-links button::after{content:"";position:absolute;bottom:-1px;left:4px;right:4px;height:2px;background:var(--blue);transform:scaleX(0);transition:transform .22s cubic-bezier(.2,.8,.2,1)}.site-links button.active{color:var(--blue)}.site-links button.active::after{transform:scaleX(1)}
.shell-search{display:flex;align-items:center;gap:9px;min-height:40px;padding:0 12px;border:1px solid var(--line);border-radius:12px;color:var(--muted);font-size:12px}.shell-search .icon{width:16px;height:16px}.shell-search kbd{font:10px system-ui;border:1px solid var(--line);border-radius:5px;padding:3px}.shell-account{min-height:44px;max-width:115px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;letter-spacing:0;border-radius:22px;padding:0 13px;background:var(--soft)}
#siteView{position:relative}html[data-shell-header="true"] body[data-outside="true"] #siteFrame{height:calc(100dvh - 64px)}.app-layout{min-height:calc(100dvh - 64px)}#siteView.is-loading::after{content:"正在打开…";position:absolute;top:18px;left:50%;transform:translateX(-50%);padding:9px 15px;border:1px solid var(--line);border-radius:20px;background:var(--glass);backdrop-filter:blur(14px);font-size:12px;color:var(--muted);pointer-events:none;z-index:4;animation:route-status-in .14s ease-out}@keyframes route-status-in{from{opacity:0}to{opacity:1}}
.upload-dialog,.cps-dialog{box-shadow:inset 0 1px 0 #ffffff7a,0 24px 80px #08162730}.upload-dialog::backdrop{background:#10203b20;backdrop-filter:blur(9px)}.upload-dialog input,.upload-dialog select,.upload-dialog textarea{font-size:14px}.track-row .track-more{min-width:44px;min-height:44px}.playlist-actions{gap:12px;flex-wrap:wrap}.playlist-actions button{min-height:44px}.toast{max-width:min(90vw,460px)}
@media(max-width:1150px){.shell-search span:not([data-icon]),.shell-search kbd{display:none}.shell-search{border:0;padding:0;width:40px;justify-content:center}.site-header .header-actions{gap:6px}}
@media(max-width:760px){html[data-shell-header="true"] .site-header{height:calc(64px + env(safe-area-inset-top));padding:env(safe-area-inset-top) 14px 0;gap:10px;flex-wrap:wrap;align-content:center}.site-header .brand{font-size:14px}.site-header .shell-bird{width:25px;height:25px}.site-header .site-links{display:flex;order:3;width:100%;height:28px;justify-content:space-between;gap:4px}.site-links button{font-size:12px;min-height:28px;padding:0 5px}.site-header .header-actions{margin-left:auto}.site-header .shell-search{display:none}.site-header .shell-account{min-height:30px;max-width:98px;padding:0 9px}.site-header .header-actions .icon-button{width:32px;height:32px}.app-layout{min-height:calc(100dvh - 64px - env(safe-area-inset-top))}html[data-shell-header="true"] body[data-outside="true"] #siteFrame{height:calc(100dvh - 64px - env(safe-area-inset-top))}.track-row .icon-button{min-width:40px;min-height:44px}.track-row{gap:7px}.playlist-actions{gap:8px}.playlist-actions button{padding:8px}.track-description strong{font-size:14px}.track-description p{font-size:12px}}
@media(prefers-reduced-motion:reduce){.site-links button::after{transition:opacity .1s ease;transform:none;opacity:0}.site-links button.active::after{opacity:1}.is-loading::after{animation:none!important}}

.upload-audio-picker{margin:16px 0 20px;width:fit-content;cursor:pointer}.upload-placeholder .upload-progress{display:none}.upload-placeholder .upload-status{color:var(--muted)}.upload-dialog .upload-song+.upload-song{margin-top:26px;padding-top:26px;border-top:1px solid var(--line)}.upload-dialog .upload-metadata label{font-size:13px}.upload-dialog #uploadMore:disabled{opacity:.45;cursor:default}

/* Render the destination first; content fills in without blocking navigation. */
#mainContent[data-view="discover"]{padding-top:76px;padding-bottom:120px}
.collection-skeleton{display:contents}.skeleton-card{display:flex;flex-direction:column;gap:12px;animation:skeleton-appear .16s ease-out backwards;animation-delay:var(--arrival,0ms)}.skeleton-card .skeleton-art{display:block;position:relative;width:100%;aspect-ratio:1;border-radius:15px;background:var(--soft);overflow:hidden}.skeleton-card .skeleton-art::after{content:'';position:absolute;inset:0;background:linear-gradient(100deg,transparent 18%,#ffffff42 46%,transparent 72%);transform:translateX(-110%);animation:skeleton-sheen 1.7s ease-in-out infinite}.skeleton-card .skeleton-copy{display:grid;gap:8px;padding:0 2px}.skeleton-card i{display:block;width:100%;height:11px;border-radius:6px;background:var(--soft)}.skeleton-card i+i{width:52%}@keyframes skeleton-sheen{to{transform:translateX(110%)}}.track-row.is-arriving{animation:collection-row-arrive .18s ease-out backwards;animation-delay:var(--arrival,0ms)}
.upload-opening{display:grid;gap:20px;padding:12px 0}.upload-opening span{display:block;height:52px;background:var(--soft);border-radius:12px}.upload-opening span:first-child{height:110px}.upload-opening p{margin:0;color:var(--muted);font-size:12px}
@keyframes skeleton-appear{from{opacity:.45;transform:translateY(3px)}to{opacity:1;transform:none}}@keyframes collection-row-arrive{from{opacity:.75;transform:translateY(3px)}to{opacity:1;transform:none}}
@media(max-width:760px){#mainContent[data-view="discover"]{padding-top:34px;padding-bottom:115px}.skeleton-card{gap:9px}}
@media(prefers-reduced-motion:reduce){.skeleton-card,.skeleton-card .skeleton-art::after,.track-row{animation:none!important}}

/* Music collections scroll within their own pane; navigation and tools stay put. */
.app-layout.is-collection{height:calc(100vh - 64px - env(safe-area-inset-top));height:calc(100dvh - 64px - env(safe-area-inset-top));min-height:0;overflow:hidden}
.app-layout.is-collection .sidebar{min-height:0;overflow-y:auto;overscroll-behavior-y:contain}
.app-layout.is-collection #mainContent{display:flex;flex-direction:column;min-height:0;overflow:hidden;padding-bottom:24px}
.app-layout.is-collection #mainContent>:not(.collection-viewport){flex-shrink:0}
.collection-viewport{flex:1;min-height:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;scrollbar-gutter:stable;padding:3px 8px 120px 2px}
.collection-viewport:focus-visible{outline:2px solid #71809680;outline-offset:2px;border-radius:12px}
@media(max-width:760px){.app-layout.is-collection{display:flex;flex-direction:column}.app-layout.is-collection #mainContent{flex:1;padding-bottom:calc(76px + env(safe-area-inset-bottom))}.collection-viewport{padding-right:4px;padding-bottom:100px}}
@media(max-height:620px){.app-layout.is-collection #mainContent{padding-top:22px}.app-layout.is-collection .page-heading{margin-bottom:18px}.app-layout.is-collection .heading-note{margin-top:8px}.app-layout.is-collection .list-toolbar{margin-bottom:14px}}
/* A dedicated add action stays available in every song list, including phones. */
.track-row .track-add-playlist,.track-row .track-more{display:grid!important;min-width:44px;width:44px;height:44px;min-height:44px}
.track-row .track-add-playlist{color:var(--blue)}
.playlist-picker-dialog{width:min(420px,calc(100vw - 28px));max-height:calc(100dvh - 48px);overflow:auto}
.playlist-picker-dialog header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}
.playlist-picker-dialog header p{margin:6px 0 0;color:var(--muted);font-size:13px;overflow-wrap:anywhere}
.playlist-picker-lists{max-height: min(360px,45dvh);overflow:auto;overscroll-behavior:contain;display:grid;gap:4px}
.playlist-picker-option{display:flex;align-items:center;gap:12px;min-height:48px;border-radius:10px;padding:10px;text-align:left}
.playlist-picker-option:hover,.playlist-picker-option:focus-visible{background:var(--soft)}
.playlist-picker-option span{flex:1;min-width:0;overflow-wrap:anywhere}
.playlist-picker-dialog details{margin-top:18px}.playlist-picker-dialog summary{cursor:pointer;padding:12px 0;color:var(--blue)}
.playlist-picker-dialog form{display:grid;gap:12px;padding:8px 0}.playlist-picker-dialog label{display:grid;gap:8px;font-size:13px}
.playlist-picker-dialog input{width:100%;min-height:44px}.picker-error{color:var(--muted);font-size:13px}
@media(max-width:760px){.track-row [data-add-next]{display:none}.track-row{gap:3px}.track-row .track-duration{display:none}}
.music-edit-form .edit-clear-cover{display:flex;align-items:center;justify-content:flex-start;gap:9px;min-height:44px;width:fit-content;max-width:100%;font-size:13px;line-height:1.5}
.music-edit-form .edit-clear-cover input[type=checkbox]{flex:0 0 18px;width:18px;height:18px;min-width:18px;min-height:18px;padding:0;margin:0;accent-color:var(--blue)}
.music-edit-form .edit-clear-cover span{flex:0 1 auto;white-space:nowrap}
.recommendation-placeholder{display:grid;gap:14px;animation:song-arrival .24s ease-out both;animation-delay:var(--arrival,0ms)}
.recommendation-placeholder>span{display:block;aspect-ratio:1;border-radius:16px;background:var(--soft)}
.recommendation-placeholder>i{display:block;height:13px;width:65%;border-radius:8px;background:var(--soft)}
@media(prefers-reduced-motion:reduce){.recommendation-placeholder{animation:none}}
.upload-batch-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin:0 0 18px}.upload-batch-toolbar .pill-button{min-height:44px;color:var(--blue);background:var(--soft)}.upload-batch-toolbar>span{font-size:12px;color:var(--muted)}.upload-song[aria-busy=true]{transition:opacity .18s}.upload-song[aria-busy=true] .upload-status{color:var(--muted)}

/* The no-lyrics notice is a static panel, not a scrollable lyrics sheet. */
#lyricsPane.is-empty{display:flex;flex-direction:column;overflow:hidden;overflow:clip}
#lyricsPane.is-empty>.lyrics-empty{flex:1;min-height:0;height:auto}
#lyricsPane.is-empty>#pickLrc{flex:none;align-self:flex-start}

.dock-controls .dock-close{width:44px;height:44px;color:var(--muted)}
.dock-controls .dock-close .icon{width:14px;height:14px}

/* One reaction per song: its current, distinct listener count accompanies the heart. */
.favorite-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;width:auto;border-radius:12px;white-space:nowrap}
.favorite-button [data-favorite-count]{font-size:12px;font-variant-numeric:tabular-nums;line-height:1.4}
.track-row .favorite-button{min-width:96px;width:auto;padding:6px 8px}
.album-caption .favorite-button{width:auto;min-width:0;gap:4px;margin-top:0;padding:0 2px}
.album-caption .favorite-button [data-favorite-count]{font-size:11px}
@media(max-width:760px){.track-row .favorite-button{min-width:64px;flex-direction:column;gap:0;padding:4px}.track-row .favorite-button [data-favorite-count]{font-size:10px}.album-caption .favorite-button{flex-direction:column;gap:2px}}

.dark .is-loved{color:#ff6b85!important}
.lyric-line:empty{display:none}

.download-note{font-size:12px;color:var(--muted);line-height:1.65;margin:4px 14px 12px}.download-mark{font-size:11px;color:var(--muted)}.download-action[data-state="ready"]{color:var(--muted)}.download-action[data-state="downloading"]{color:var(--blue);font-variant-numeric:tabular-nums}

.publish-result-dialog{width:min(350px,calc(100vw - 48px));border:1px solid #ffffffa6;border-radius:28px;padding:34px 28px 28px;color:var(--ink);text-align:center;background:linear-gradient(145deg,#ffffffc9,#f5f8ff9c);backdrop-filter:blur(30px) saturate(1.4);-webkit-backdrop-filter:blur(30px) saturate(1.4);box-shadow:0 24px 70px #20314b26,inset 0 1px 0 #ffffffc9}
.publish-result-dialog::backdrop{background:#24314938;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.publish-result-dialog h2{font-size:23px;line-height:1.4;margin:0 0 24px}
.publish-result-dialog p{margin:-12px 0 24px;font-size:13px;color:var(--muted);line-height:1.7}
.blue-glass-option{width:100%;min-height:48px;padding:12px 20px;border-radius:16px;border:1px solid #ffffff66;color:#fff;background:linear-gradient(145deg,#527be5dd,#3461cfd9);box-shadow:inset 0 1px 0 #ffffff75,0 8px 20px #3666c926;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);font-size:15px;font-weight:600}
.blue-glass-option:hover{background:linear-gradient(145deg,#6288edeb,#3a6ae4e8);box-shadow:inset 0 1px 0 #ffffff85,0 10px 22px #3666c936}
.blue-glass-option:active{transform:scale(.97)}
.dark .publish-result-dialog{background:linear-gradient(145deg,#29334ac9,#1d273da6);border-color:#ffffff38;box-shadow:0 24px 70px #0005,inset 0 1px 0 #ffffff24}

.publish-result-dialog.is-failed{width:min(310px,calc(100vw - 48px));padding:28px}.publish-result-dialog.is-failed h2{font-size:20px;margin:0}

/* Recognition has a truthful indeterminate bar: the provider reports no percentage. */
.recognition-progress{margin:12px 0 18px;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--soft);animation:recognition-appear .18s ease-out}
.recognition-progress[hidden],.recognition-progress [hidden]{display:none!important}
.recognition-progress-heading{display:flex;justify-content:space-between;gap:12px;align-items:baseline;font-size:13px;line-height:1.7}
.recognition-progress-heading strong{font-weight:600;overflow-wrap:anywhere}
.recognition-progress-heading>span{flex:none;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.recognition-progress progress{display:block;width:100%;height:6px;margin:12px 0;accent-color:var(--blue)}
.recognition-progress p{font-size:12px;line-height:1.8;color:var(--muted);margin:8px 0 0}
.recognition-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px}
.recognition-actions .text-button{min-height:44px;padding:6px 0}
.recognition-progress[data-state=error] strong{color:#b04444}
.music-edit-form textarea[readonly]{cursor:progress}
@keyframes recognition-appear{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.recognition-progress{animation:none}.recognition-progress progress:indeterminate{opacity:.75}}
@media(max-width:480px){.recognition-progress-heading{flex-direction:column;gap:2px}.recognition-progress{padding:12px}}

:root{--focus-stroke:#71809699}.dark{--focus-stroke:#b9c6d9a6}
html[data-focus-input=pointer] :is(button,a,input,select,textarea,[tabindex]):focus{outline:none!important}
html[data-focus-input=keyboard] :is(button,a,input,select,textarea,[tabindex]):focus-visible{outline:2px solid var(--focus-stroke)!important;outline-offset:3px}

/* 2026-10-17 性能：屏幕外的卡片跳过布局/绘制（尺寸记忆用 auto 380px，回滚时不跳动）。滚动期间只暂停纯装饰动画，停下 150ms 由脚本移除 data-scrolling；静态画面逐像素不变。 */
html[data-scrolling="true"] .quiet-nav.sidebar::before,html[data-scrolling="true"] .quiet-nav.sidebar::after,html[data-scrolling="true"] .cover-equalizer i,html[data-scrolling="true"] .guest-hero .art-record{animation-play-state:paused}
@media(prefers-reduced-motion:reduce){html[data-scrolling="true"] *{animation-play-state:paused}}

/* 2026-10-17（站长："上下滚动时滚动的是背景，应该保证背景不能滚动"）：
   手机端播放面板是全屏 dialog，iOS 上手势会继续把底下的文档滚走。
   这里在面板打开期间锁住文档滚动，滚动只发生在面板自己的滚动容器内。 */
@media(max-width:760px){
 /* 只在展开动画跑完（620ms 后 data-player-locked=true）才锁文档，避免 Safari 动画失效 */
 html[data-player-locked="true"]{overflow:hidden;overscroll-behavior:none}
 html[data-player-locked="true"] body{overflow:hidden;height:100dvh;overscroll-behavior:none}
 .player-panel .expanded-grid,.player-panel .detail-pane,.player-panel .lyrics-lines{overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
}

/* 2026-10-18（站长："点封面时封面淡化消失变为歌词，歌词取代它的位置，就在进度条上方"）：
   封面盒子里叠一层歌词，只做交叉淡入淡出；盒子尺寸不变，所以进度条与按钮不会位移。 */
.large-art{position:relative;isolation:isolate}
.large-art>:not(.art-lyrics){transition:opacity .34s ease,transform .34s ease}
.large-art.is-lyrics>:not(.art-lyrics){opacity:0;transform:scale(1.03)}
/* 2026-10-18（站长："不要有边框和背景遮罩，字就直接放在背景"）：歌词模式连封面色块和卡片阴影一起去掉 */
.large-art.is-lyrics{background:none!important;box-shadow:none!important}
.art-lyrics{position:absolute;inset:0;z-index:2;overflow:hidden;opacity:0;pointer-events:none;transition:opacity .34s ease;background:none;border:0;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none;border-radius:inherit;scrollbar-width:none;color:var(--ink)}
.art-lyrics::-webkit-scrollbar{display:none}
.large-art.is-lyrics .art-lyrics{opacity:1;pointer-events:auto}
/* 2026-10-18（站长）：歌词形态把封面框拉高，把进度条等控件整体往下推，给歌词腾出空间 */
.player-panel .large-art.is-lyrics{aspect-ratio:auto;height:min(38vh,340px)}
@media(max-width:760px){.player-panel .large-art.is-lyrics{width:100%;height:min(44dvh,340px)}}
/* 固定轨道按换句时间平滑滚动；普通面板 3 行，沉浸全屏 5 行。 */
.art-lyrics-scroll{position:absolute;inset:50% 0 auto;transform:translateY(-50%);height:calc(var(--art-stride,34px)*var(--art-visible-rows,3));max-height:100%;overflow:hidden;padding:0 4px;scrollbar-width:none;--art-stride:34px}
.art-lyrics-scroll::-webkit-scrollbar{display:none}
.art-lyrics-track{display:flex;flex-direction:column;will-change:transform;backface-visibility:hidden;transition:transform .55s cubic-bezier(.22,.8,.22,1)}
.player-panel .art-lyrics .lyric-line{--focus:0;display:flex;flex:none;align-items:center;justify-content:center;width:100%;min-height:var(--art-stride);height:auto;padding:5px 2px;border:0;background:none;text-align:center;color:var(--ink);opacity:calc(.2 + .8*var(--focus));transition:opacity .45s cubic-bezier(.22,.8,.22,1)}
/* 2026-10-18（站长："绝对不要出现省略号"）：歌词一律折行，宁可让行变高也不截断。
   原来这里是 nowrap + overflow:hidden + text-overflow:ellipsis，靠 fitArtLines() 压字号硬塞成一行，
   压到 13px 还放不下就出省略号。现在改成允许换行，轨道按每行实际高度定位（见 paintArtLyrics）。 */
.player-panel .art-lyrics .lyric-line>span{display:block;width:100%;font-size:min(var(--cap,26px),calc(14px + 12px*var(--focus)));font-weight:600;line-height:1.28;letter-spacing:-.02em;white-space:normal;overflow-wrap:anywhere;text-wrap:pretty;transition:font-size .45s cubic-bezier(.22,.8,.22,1)}
.art-lyrics .lyric-line.current>span{font-weight:680}
.art-lyrics-plain{padding:8px 2px;margin:0;font-size:14px;line-height:1.85;color:var(--muted)}
.art-lyrics-note{margin:0;padding:8px 2px;font-size:14px;color:var(--muted)}
.art-lyrics-scroll:not([data-cursor=timed]){inset:0;transform:none;height:auto;display:flex;flex-direction:column;justify-content:center}
@media(prefers-reduced-motion:reduce){.art-lyrics-track,.player-panel .art-lyrics .lyric-line,.player-panel .art-lyrics .lyric-line>span{transition:none}}

.art-lyrics-cover{position:absolute;top:2px;right:2px;display:flex;align-items:center;gap:4px;margin:0;padding:2px 4px;border:0;border-radius:0;background:none;backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:none;color:var(--muted);opacity:.62;font-size:11px;font-weight:500;z-index:3}
.art-lyrics-cover .icon{width:13px;height:13px}
.art-lyrics-cover:hover,.art-lyrics-cover:focus-visible{opacity:1}
.art-lyrics-cover:hover,.art-lyrics-cover:focus-visible{opacity:1;color:var(--ink)}

/* 2026-10-19：发布音乐弹窗里的“同步发帖”编辑区（板块固定爱乐之坛） */
.upload-post-editor{margin:4px 0 18px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:var(--soft);display:grid;gap:12px}
.upload-post-editor[hidden]{display:none}
.upload-post-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 10px}
.upload-post-head strong{font-size:14px}
.upload-post-head span{font-size:12px;color:var(--muted)}
.upload-post-editor label{display:grid;gap:6px;font-size:12px;color:var(--muted)}
.upload-post-editor input,.upload-post-editor textarea{width:100%;border:1px solid var(--line);border-radius:10px;background:var(--paper,#fff);color:var(--ink);padding:10px 12px;font:inherit;font-size:14px;resize:vertical}
.upload-post-editor input:focus-visible,.upload-post-editor textarea:focus-visible{outline:2px solid var(--blue);outline-offset:1px}
@media(max-width:760px){.upload-post-editor{padding:12px;margin-bottom:14px}.upload-post-editor input,.upload-post-editor textarea{font-size:16px}}

.music-audio-permission label{display:flex;align-items:flex-start;gap:8px;line-height:1.8}.music-audio-permission input[type=checkbox]{flex:0 0 18px;width:18px;height:18px;min-width:18px;min-height:18px;padding:0;margin:2px 0 0;accent-color:var(--blue)}
