*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{background:radial-gradient(900px 420px at 15% -8%,var(--color-glow),transparent 70%),radial-gradient(800px 380px at 100% 0%,var(--color-glow-warm),transparent 70%),var(--color-bg);background-attachment:fixed;color:var(--color-text);font-family:var(--font-sans);font-size:var(--text-sm);-webkit-font-smoothing:antialiased;letter-spacing:-.005em}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
input{font:inherit;color:inherit}
a{color:inherit;text-decoration:none}
svg{display:block}
:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--radius-sm)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:absolute;left:-999px;top:0;background:var(--color-accent);color:var(--color-on-accent);padding:var(--space-2) var(--space-4);z-index:100}
.skip:focus{left:var(--space-2);top:var(--space-2)}

/* shell */
#app{display:flex;flex-direction:column;min-height:100%}
main{flex:1;padding:var(--space-4) var(--layout-page-padding);padding-bottom:calc(var(--layout-tab-bar-height) + var(--layout-mini-player-height) + var(--space-6));max-width:960px;width:100%;margin:0 auto}
.tabbar{position:fixed;left:0;right:0;bottom:0;height:var(--layout-tab-bar-height);background:var(--color-glass);-webkit-backdrop-filter:blur(22px) saturate(1.3);backdrop-filter:blur(22px) saturate(1.3);border-top:1px solid var(--color-border);display:flex;justify-content:space-around;align-items:center;z-index:30}
.tab{display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--color-text-muted);min-width:64px;min-height:44px;justify-content:center;font-size:var(--text-xs);position:relative}
.tab[aria-current="page"]{color:var(--color-text)}
.tab[aria-current="page"] svg{fill:currentColor}
.tab .badge{position:absolute;top:4px;right:16px;width:8px;height:8px;border-radius:var(--radius-pill);background:var(--color-danger)}
.mini{position:fixed;left:var(--space-2);right:var(--space-2);bottom:calc(var(--layout-tab-bar-height) + var(--space-2));height:var(--layout-mini-player-height);background:var(--color-glass-raised);-webkit-backdrop-filter:blur(22px) saturate(1.4);backdrop-filter:blur(22px) saturate(1.4);border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-lg);display:flex;align-items:center;gap:var(--space-3);padding:0 var(--space-3);overflow:hidden;z-index:25;box-shadow:var(--shadow-pop)}
.mini[hidden]{display:none}
.mini .prog{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--color-border);opacity:.7;pointer-events:none}
.mini>*{position:relative}
.mini .open{flex:1;display:flex;align-items:center;gap:var(--space-3);min-width:0;text-align:left}
.mini .meta{min-width:0}
.t-title{font-size:var(--text-base);font-weight:var(--weight-base);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.t-sub{color:var(--color-text-muted);font-size:var(--text-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ibtn{width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-pill);color:var(--color-text)}
.ibtn:hover{background:var(--color-surface)}
.ibtn[aria-pressed="true"] svg{fill:var(--color-accent);color:var(--color-accent)}
.ibtn:disabled{opacity:.4;cursor:not-allowed}

/* covers: градиенты из токенов, не картинки оригинала */
.cover{flex:none;border-radius:var(--radius-sm);width:var(--layout-cover-row);height:var(--layout-cover-row);background:var(--color-surface-raised)}
.cover.sm{width:40px;height:40px}
.cover.lg{width:min(70vw,320px);height:min(70vw,320px);border-radius:var(--radius-lg)}
.cv0,.cv1,.cv2,.cv3,.cv4,.cv5{background-blend-mode:normal;box-shadow:inset 0 0 0 1px rgba(255,255,255,.06)}
.cv0{background:radial-gradient(circle at 28% 18%,rgba(255,255,255,.28),transparent 52%),linear-gradient(145deg,#3a56e8,#12a98f)}
.cv1{background:radial-gradient(circle at 28% 18%,rgba(255,255,255,.26),transparent 52%),linear-gradient(145deg,#d63a74,#4a39c9)}
.cv2{background:radial-gradient(circle at 28% 18%,rgba(255,255,255,.26),transparent 52%),linear-gradient(145deg,#12a98f,#2a43b8)}
.cv3{background:radial-gradient(circle at 28% 18%,rgba(255,255,255,.28),transparent 52%),linear-gradient(145deg,#f08a5d,#c2306f)}
.cv4{background:radial-gradient(circle at 28% 18%,rgba(255,255,255,.26),transparent 52%),linear-gradient(145deg,#a53bd0,#2f7de0)}
.cv5{background:radial-gradient(circle at 28% 18%,rgba(255,255,255,.18),transparent 52%),linear-gradient(145deg,#2a2d3d,#14151d)}

/* typography */
h1{font-size:var(--text-xl);font-weight:var(--weight-xl);margin:var(--space-2) 0 var(--space-4)}
h2{font-size:var(--text-lg);font-weight:var(--weight-lg);margin:var(--space-5) 0 var(--space-3)}
.muted{color:var(--color-text-muted)}
.topbar{display:flex;align-items:center;justify-content:space-between;min-height:48px}

/* rows */
.rows{list-style:none}
.row{display:flex;align-items:center;gap:var(--space-3);min-height:var(--layout-track-row-height);position:relative}
.row .main{flex:1;min-width:0;display:flex;align-items:center;gap:var(--space-3);text-align:left;min-height:var(--layout-track-row-height)}
.row .meta{min-width:0}
.row.playing .t-title{color:var(--color-accent)}
.row.unavailable{opacity:.5}
.row .dl{color:var(--color-download)}
.badge-pill{display:inline-block;border:1px solid var(--color-border-input);color:var(--color-text-muted);border-radius:var(--radius-pill);padding:0 var(--space-2);font-size:var(--text-xs);margin-left:var(--space-2)}

/* chips */
.chips{display:flex;gap:var(--space-2);overflow-x:auto;padding:var(--space-1) 0 var(--space-3);scrollbar-width:none}
.chip{flex:none;height:40px;padding:0 var(--space-4);border-radius:var(--radius-pill);background:var(--color-surface-raised);border:2px solid transparent}
.chip[aria-checked="true"]{border-color:var(--color-text)}

/* cards, grids */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:var(--space-4)}
.card{display:flex;flex-direction:column;gap:var(--space-2);text-align:left}
.card .cover{width:100%;height:auto;aspect-ratio:1;border-radius:var(--radius-md)}
.tilegrid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-4)}
.tile{display:flex;align-items:center;gap:var(--space-3);text-align:left;min-height:64px}
.tile .cover{width:64px;height:64px;border-radius:var(--radius-md)}
.box{background:var(--color-surface);border-radius:var(--radius-md);padding:var(--space-4);margin-bottom:var(--space-3)}
.setrow{display:flex;align-items:center;justify-content:space-between;min-height:56px;padding:0 var(--space-4);background:var(--color-surface);width:100%;text-align:left;border-bottom:1px solid var(--color-border)}
.setrows{border-radius:var(--radius-md);overflow:hidden}
.btn{height:44px;padding:0 var(--space-5);border-radius:var(--radius-pill);background:var(--color-surface-raised);font-weight:600}
.btn.primary{background:var(--color-accent);color:var(--color-on-accent)}
.btn.sm{height:36px;padding:0 var(--space-4)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.search{display:flex;align-items:center;gap:var(--space-2);height:48px;border-radius:var(--radius-pill);background:var(--color-surface-raised);padding:0 var(--space-4)}
.search input{flex:1;background:none;border:0;outline:none;min-width:0}
.search:focus-within{outline:2px solid var(--color-accent)}

/* hero play */
.play{border-radius:var(--radius-pill);background:var(--color-accent);color:var(--color-on-accent);display:inline-flex;align-items:center;justify-content:center;transition:transform var(--motion-fast) var(--motion-ease)}
.play:active{transform:scale(.96)}
.play.hero{width:var(--layout-play-button-hero);height:var(--layout-play-button-hero)}
.play.large{width:var(--layout-play-button-large);height:var(--layout-play-button-large)}
.play svg{fill:currentColor}

/* wave hero */
.wave{position:relative;text-align:center;padding:var(--space-6) 0 var(--space-4);overflow:hidden;border-radius:var(--radius-lg)}
.blob{position:absolute;left:50%;top:50%;width:min(80vw,420px);height:min(80vw,420px);transform:translate(-50%,-55%);filter:blur(40px);opacity:.9;border-radius:var(--radius-pill);background:radial-gradient(circle at 30% 30%,var(--color-mood-b),transparent 55%),radial-gradient(circle at 70% 60%,var(--color-accent),transparent 60%),radial-gradient(circle at 40% 80%,var(--color-mood-a),transparent 60%);animation:drift 9s ease-in-out infinite alternate}
.wave.playing .blob{animation-duration:4s}
@keyframes drift{from{transform:translate(-50%,-55%) rotate(0) scale(1)}to{transform:translate(-48%,-52%) rotate(25deg) scale(1.08)}}
@media (prefers-reduced-motion:reduce){.blob{animation:none}.skel{animation:none}}
.wave>*:not(.blob){position:relative}
.wave h1{font-size:var(--text-display);line-height:var(--leading-display);font-weight:var(--weight-display);margin:var(--space-7) 0 var(--space-5)}
.now{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);background:var(--color-surface-raised);border-radius:var(--radius-pill);padding:0 var(--space-2) 0 var(--space-5);height:56px;margin:var(--space-5) 0 0;position:relative;overflow:hidden}
.now .prog{position:absolute;left:0;top:0;bottom:0;width:0;background:var(--color-border);pointer-events:none}
.now>*{position:relative}
.now .t-title{text-align:center;flex:1}
.modes{display:flex;gap:var(--space-3);overflow-x:auto;padding:var(--space-5) 0;scrollbar-width:none;align-items:stretch}
.mode{flex:none;width:140px;height:140px;border-radius:var(--radius-lg);display:flex;align-items:flex-end;justify-content:center;text-align:center;padding:var(--space-3);font-weight:700}
.mode[aria-pressed="true"]{outline:2px solid var(--color-text)}
.mode.shake{background:var(--color-surface);color:var(--color-accent);align-items:center}

/* overlays */
.sheet{position:fixed;inset:0;background:var(--color-bg);z-index:50;display:flex;flex-direction:column;padding:var(--space-4) var(--layout-page-padding);overflow-y:auto}
.sheet[hidden]{display:none}
.player{align-items:center;text-align:center;gap:var(--space-4)}
.player .cover{margin:var(--space-4) 0}
.player .controls{display:flex;align-items:center;gap:var(--space-4);justify-content:center}
.seek{width:100%;max-width:420px;accent-color:var(--color-accent)}
.times{display:flex;justify-content:space-between;width:100%;max-width:420px;color:var(--color-text-muted);font-size:var(--text-xs)}
.lyrics{max-width:420px;white-space:pre-line;color:var(--color-text-muted);line-height:1.6;margin-top:var(--space-4)}
.menu{position:fixed;inset:0;z-index:70;background:var(--color-scrim);display:flex;align-items:flex-end;justify-content:center}
.menu[hidden]{display:none}
.menu .panel{background:var(--color-surface-raised);width:100%;max-width:480px;border-radius:var(--radius-lg) var(--radius-lg) 0 0;padding:var(--space-3);box-shadow:var(--shadow-pop)}
.menu button{display:flex;align-items:center;width:100%;min-height:48px;padding:0 var(--space-4);border-radius:var(--radius-md);text-align:left}
.menu button:hover{background:var(--color-surface)}
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(var(--layout-tab-bar-height) + var(--layout-mini-player-height) + var(--space-5));background:var(--color-surface-raised);padding:var(--space-3) var(--space-5);border-radius:var(--radius-pill);z-index:80;box-shadow:var(--shadow-pop)}
.toast.error{border:1px solid var(--color-danger)}
.toast[hidden]{display:none}

/* header of a collection page */
.phead{display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--space-5) 0;gap:var(--space-3);border-radius:var(--radius-lg);background:linear-gradient(180deg,var(--color-mood-b),var(--color-bg))}
.phead .acts{display:flex;gap:var(--space-5);align-items:flex-start}
.phead .act{display:flex;flex-direction:column;align-items:center;gap:var(--space-2);color:var(--color-text-muted)}
.ring{width:var(--layout-play-button-large);height:var(--layout-play-button-large);border-radius:var(--radius-pill);border:2px solid var(--color-text-muted);display:flex;align-items:center;justify-content:center}
.ring.done{border-color:var(--color-download);color:var(--color-download)}

/* states */
.empty{text-align:center;padding:var(--space-7) var(--space-4);color:var(--color-text-muted)}
.empty .cover{margin:0 auto var(--space-4)}
.empty p{margin-bottom:var(--space-4)}
.skel{background:linear-gradient(90deg,var(--color-surface),var(--color-surface-raised),var(--color-surface));background-size:200% 100%;animation:sk 1.2s linear infinite;border-radius:var(--radius-sm)}
@keyframes sk{to{background-position:-200% 0}}
.skelrow{display:flex;gap:var(--space-3);align-items:center;height:var(--layout-track-row-height)}
.skelrow .a{width:var(--layout-cover-row);height:var(--layout-cover-row)}
.skelrow .b{height:14px;flex:1;max-width:240px}
.err{border:1px solid var(--color-danger);color:var(--color-danger);padding:var(--space-4);border-radius:var(--radius-md);margin:var(--space-4) 0}

/* wide screens: rail instead of bottom bar */
@media (min-width:900px){
  .tabbar{top:0;bottom:0;right:auto;width:96px;height:auto;flex-direction:column;justify-content:flex-start;gap:var(--space-4);padding-top:var(--space-5);border-top:0;border-right:1px solid var(--color-border)}
  main{margin-left:96px;width:calc(100% - 96px);max-width:none;padding-left:var(--space-6);padding-right:var(--space-6);padding-bottom:calc(var(--layout-mini-player-height) + var(--space-6))}
  main>.inner{max-width:880px;margin:0 auto}
  .mini{left:calc(96px + var(--space-3));bottom:var(--space-3)}
  .toast{bottom:calc(var(--layout-mini-player-height) + var(--space-5))}
}

h1 a{display:inline-flex;align-items:center;gap:var(--space-2)}

/* вход и YouTube */
#auth{z-index:90;align-items:center;justify-content:center}
.authbox{width:100%;max-width:400px}
.fld{display:flex;flex-direction:column;gap:6px;margin-bottom:var(--space-3)}
.fld span{color:var(--color-text-muted);font-size:var(--text-sm)}
.fld input{height:48px;border-radius:var(--radius-sm);border:1px solid var(--color-border-input);background:var(--color-surface-raised);padding:0 var(--space-3);font-size:var(--text-base)}
.fld input:focus{outline:2px solid var(--color-accent);outline-offset:1px}
.formerr{color:var(--color-danger);margin-top:var(--space-2)}
.linkbtn{color:var(--color-accent);min-height:44px;padding:0 var(--space-3)}
.linkbtn.muted{color:var(--color-text-muted)}
.yt{position:fixed;right:var(--space-2);bottom:calc(var(--layout-tab-bar-height) + var(--layout-mini-player-height) + var(--space-5));width:200px;height:200px;z-index:28;background:var(--color-bg);border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-pop)}
.yt iframe{width:100%;height:100%;border:0}
@media (min-width:900px){.yt{bottom:calc(var(--layout-mini-player-height) + var(--space-5))}}

/* глубина и мягкость */
h1{letter-spacing:-.025em}
h2{font-size:var(--text-lg);letter-spacing:-.015em}
.row{border-radius:var(--radius-md);padding:0 var(--space-2);margin:0 calc(var(--space-2) * -1);transition:background var(--motion-fast) var(--motion-ease)}
.row:hover{background:rgba(255,255,255,.04)}
.row.playing{background:linear-gradient(90deg,rgba(110,231,200,.10),transparent 70%)}
.row .cover{border-radius:var(--radius-sm)}
.card .cover,.tile .cover{box-shadow:var(--shadow-glow)}
.card:hover .cover{transform:translateY(-2px);transition:transform var(--motion-base) var(--motion-ease)}
.box{background:linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.02));border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-md)}
.setrows{border:1px solid rgba(255,255,255,.06)}
.setrow{background:rgba(255,255,255,.035)}
.btn{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.06);transition:background var(--motion-fast) var(--motion-ease),transform var(--motion-fast) var(--motion-ease)}
.btn:hover{background:rgba(255,255,255,.13)}
.btn:active{transform:scale(.98)}
.btn.primary{background:linear-gradient(135deg,#8af0d6,#4fd8b7);border:0;color:var(--color-on-accent);box-shadow:0 8px 24px -8px rgba(110,231,200,.55)}
.btn.primary:hover{background:linear-gradient(135deg,#9bf4dd,#5fe2c1)}
.play{background:linear-gradient(135deg,#8af0d6,#4fd8b7);box-shadow:0 10px 30px -8px rgba(110,231,200,.6)}
.chip{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.05)}
.chip[aria-checked="true"]{background:rgba(255,255,255,.14);border-color:var(--color-text)}
.search{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.06)}
.phead{background:linear-gradient(180deg,rgba(224,70,124,.55),rgba(79,107,255,.18) 55%,transparent);border:1px solid rgba(255,255,255,.05)}
.now{background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.07)}
.mode{box-shadow:var(--shadow-glow);border:1px solid rgba(255,255,255,.06)}
.mode.shake{background:rgba(255,255,255,.05)}
.sheet{background:radial-gradient(700px 360px at 50% -5%,var(--color-glow),transparent 70%),var(--color-bg)}
.menu .panel{background:var(--color-surface-raised);border:1px solid rgba(255,255,255,.07)}
.toast{background:var(--color-glass-raised);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);border:1px solid rgba(255,255,255,.08)}
.tab[aria-current="page"]{color:var(--color-accent)}
.cover.lg{box-shadow:0 30px 70px -20px rgba(0,0,0,.8),var(--shadow-glow)}
@media (min-width:900px){.tabbar{background:rgba(6,6,9,.6)}}

/* свои треки, перенос */
.drop{display:flex;flex-direction:column;gap:6px;align-items:flex-start;padding:var(--space-5);border:1.5px dashed var(--color-border-input);border-radius:var(--radius-lg);background:rgba(255,255,255,.03);cursor:pointer}
.drop:hover,.drop:focus-within,body.dragging .drop{border-color:var(--color-accent);background:rgba(110,231,200,.07)}
body.dragging::after{content:"Отпустите файлы, чтобы загрузить";position:fixed;inset:var(--space-3);display:flex;align-items:center;justify-content:center;border:2px dashed var(--color-accent);border-radius:var(--radius-lg);background:var(--color-glass);font-size:var(--text-lg);font-weight:700;z-index:95;pointer-events:none}
.fld textarea{border-radius:var(--radius-sm);border:1px solid var(--color-border-input);background:var(--color-surface-raised);padding:var(--space-3);font:inherit;font-size:var(--text-base);resize:vertical;min-height:140px;color:var(--color-text)}
.fld textarea:focus{outline:2px solid var(--color-accent);outline-offset:1px}
.dest{border:0;margin-bottom:var(--space-2)}
.radio{display:flex;align-items:center;gap:var(--space-3);min-height:44px}
.radio input{width:20px;height:20px;accent-color:var(--color-accent)}
.mi{display:flex;align-items:center;min-height:48px;padding:0 var(--space-4);border-radius:var(--radius-md)}
.mi:hover{background:var(--color-surface)}
.newtag{display:inline-block;font-size:10px;font-weight:700;letter-spacing:.04em;padding:1px 5px;border-radius:var(--radius-pill);background:var(--color-accent,#ffd23f);color:#111;vertical-align:1px}
.tab{position:relative}
