/* Начитка — приложение. Дизайн-система Flow: zinc, чёрная главная кнопка,
   радиус 10 px, семантика emerald/amber/blue/red. Шрифты: Literata (книжное),
   Onest (интерфейс). Тема — по colorScheme Телеграма (data-theme на <html>). */
:root{
  --z50:#fafafa;--z100:#f4f4f5;--z200:#e4e4e7;--z300:#d4d4d8;--z400:#a1a1aa;--z500:#71717a;
  --z600:#52525b;--z700:#3f3f46;--z800:#27272a;--z900:#18181b;--z950:#09090b;
  --ok:#10b981;--warn:#f59e0b;--info:#3b82f6;--bad:#ef4444;
  --ok-bg:rgba(16,185,129,.12);--warn-bg:rgba(245,158,11,.14);--info-bg:rgba(59,130,246,.12);--bad-bg:rgba(239,68,68,.12);
  --bg:#ffffff;--bg2:var(--z100);--bg3:var(--z50);--ink:var(--z900);--ink2:var(--z500);--ink3:var(--z400);
  --line:var(--z200);--primary:var(--z900);--primary-ink:#ffffff;--shadow:0 12px 30px rgba(24,24,27,.10);
  --blob-a:rgba(245,158,11,.10);--blob-b:rgba(249,115,22,.10);
  --amber1:#ffbf48;--amber2:#e0661f;
  --r:10px;--r-lg:14px;--r-xl:18px;
  --font-ui:"Onest",system-ui,-apple-system,"Segoe UI",sans-serif;
  --font-book:"Literata",Georgia,"Times New Roman",serif;
  --sab:env(safe-area-inset-bottom,0px);--sat:env(safe-area-inset-top,0px);
  color-scheme:light;
}
:root[data-theme="dark"]{
  --bg:var(--z950);--bg2:var(--z900);--bg3:var(--z800);--ink:var(--z50);--ink2:var(--z400);--ink3:var(--z500);
  --line:var(--z800);--primary:var(--z100);--primary-ink:var(--z900);--shadow:0 12px 30px rgba(0,0,0,.45);
  --blob-a:rgba(245,158,11,.12);--blob-b:rgba(249,115,22,.10);
  color-scheme:dark;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.4 var(--font-ui);-webkit-font-smoothing:antialiased;overscroll-behavior:none}
button{font:inherit;color:inherit}
a{color:inherit}
#app{min-height:100%;display:flex;flex-direction:column;position:relative}
#app::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:0;
  background:radial-gradient(520px 320px at 92% -8%,var(--blob-a),transparent 70%),radial-gradient(420px 280px at -12% 28%,var(--blob-b),transparent 70%)}
#app>*{position:relative;z-index:1}
.top{display:flex;align-items:center;gap:8px;padding:calc(10px + var(--sat)) 12px 8px;position:sticky;top:0;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);z-index:3}
.top .ttl{flex:1;font-weight:600;font-size:1rem;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.icb{width:36px;height:36px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;background:var(--bg2);border:0;cursor:pointer;flex:none}
.icb svg{width:19px;height:19px}
.icb.ghost{background:transparent}
.icb:focus-visible,.btn:focus-visible,.tab:focus-visible,.row:focus-visible,.chip:focus-visible{outline:2px solid var(--info);outline-offset:2px}
.screen{flex:1;padding:0 16px 130px;max-width:720px;width:100%;margin:0 auto}
.screen.plain{padding-bottom:calc(24px + var(--sab))}
svg.i{width:18px;height:18px;flex:none}

/* нижние вкладки и мини-плеер */
.dock{position:fixed;left:0;right:0;bottom:0;z-index:5;background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-top:1px solid var(--line)}
.tabs{display:flex;align-items:flex-end;padding:6px 6px calc(8px + var(--sab));max-width:720px;margin:0 auto}
.tab{flex:1;background:none;border:0;color:var(--ink3);font-size:.66rem;font-weight:600;display:flex;flex-direction:column;align-items:center;gap:3px;cursor:pointer;padding:4px 0;border-radius:var(--r)}
.tab svg{width:23px;height:23px}
.tab.on{color:var(--ink)}
.tab.add .ring{width:42px;height:42px;border-radius:50%;background:var(--primary);color:var(--primary-ink);display:flex;align-items:center;justify-content:center;margin-top:-18px;box-shadow:0 6px 16px rgba(0,0,0,.18)}
.tab.add .ring svg{width:20px;height:20px}
.mini{display:flex;align-items:center;gap:10px;margin:6px auto 0;padding:8px 10px;border-radius:var(--r-lg);background:var(--bg2);border:1px solid var(--line);max-width:704px;cursor:pointer}
.mini .cv{width:38px;height:50px;border-radius:6px}
.mini .t{flex:1;min-width:0}
.mini .t b{display:block;font-size:.82rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mini .t small{color:var(--ink2);font-size:.74rem;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mini .prog{height:2px;background:var(--line);margin-top:5px;border-radius:2px}
.mini .prog i{display:block;height:100%;background:var(--ink);border-radius:2px;width:0}
.mini .icb{background:transparent}
.mini .icb.play{background:var(--primary);color:var(--primary-ink)}

/* обложки */
.cv{border-radius:8px;background:linear-gradient(160deg,var(--c1,#4b3a8f),var(--c2,#160c2e) 72%);position:relative;overflow:hidden;flex:none;color:#fff;display:flex;align-items:flex-end;padding:8px;background-size:cover;background-position:center}
.cv{width:56px;height:76px}
.cv.lg{width:96px;height:132px;border-radius:10px}
.cv span{font:500 .62rem/1.15 var(--font-book);opacity:.92;text-shadow:0 1px 2px rgba(0,0,0,.45)}
.cv.lg span{font-size:.9rem}
.cv.img span{display:none}
.cv::after{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;background:rgba(0,0,0,.26)}
.cv.img::after{display:none}

/* типографика */
.h1{font:600 1.45rem/1.15 var(--font-book);letter-spacing:-.01em;margin:10px 0 2px}
.bt{font:600 1.05rem/1.25 var(--font-book)}
.au{color:var(--ink2);font-size:.84rem}
.lbl{font-size:.68rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ink3);margin:18px 0 8px;display:flex;align-items:center;justify-content:space-between}
.num{font-variant-numeric:tabular-nums}
.muted{color:var(--ink2)}.small{font-size:.8rem}
.price{font-size:.74rem;color:var(--ink3);font-variant-numeric:tabular-nums;font-weight:500}
.btn .price{margin-left:auto;padding-left:10px;color:inherit;opacity:.6}
.btn.sec .price,.btn.line .price{color:var(--ink3);opacity:1}

/* компоненты */
.card{background:var(--bg2);border-radius:var(--r-lg);padding:12px}
.card.paper{background:var(--bg);border:1px solid var(--line)}
.btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;border:0;border-radius:var(--r);padding:13px 14px;font-weight:600;font-size:.93rem;cursor:pointer;background:var(--primary);color:var(--primary-ink);transition:transform .08s}
.btn:active{transform:translateY(1px)}
.btn svg{width:18px;height:18px;flex:none}
.btn.sec{background:var(--bg2);color:var(--ink)}
.btn.line{background:transparent;color:var(--ink);border:1px solid var(--line)}
.btn.danger{background:var(--bad-bg);color:var(--bad)}
.btn.sm{padding:8px 12px;font-size:.82rem;width:auto}
.btn[disabled]{opacity:.5;pointer-events:none}
.chip{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:5px 11px;font-size:.76rem;font-weight:600;background:var(--bg2);color:var(--ink);border:0;cursor:pointer}
.chip svg{width:13px;height:13px}
.chip.ok{background:var(--ok-bg);color:var(--ok)}.chip.info{background:var(--info-bg);color:var(--info)}.chip.bad{background:var(--bad-bg);color:var(--bad)}
.bar{height:6px;border-radius:3px;background:var(--line);overflow:hidden}
.bar i{display:block;height:100%;background:var(--ink);border-radius:3px;transition:width .4s}
.bar.info i{background:var(--info)}
.row{display:grid;grid-template-columns:26px 1fr auto;gap:10px;align-items:center;padding:11px 4px;border:0;border-bottom:1px solid var(--line);cursor:pointer;border-radius:8px;background:none;text-align:left;width:100%}
.row:active{background:var(--bg2)}
.row .n{font-size:.78rem;color:var(--ink3);text-align:right}
.row .nm{font-size:.9rem;line-height:1.25;min-width:0}
.row .nm small{display:block;color:var(--ink2);font-size:.74rem;margin-top:2px}
.row .st{font-size:.76rem;color:var(--ink2);text-align:right;white-space:nowrap}
.row.done .st{color:var(--ok)}.row.next{background:var(--info-bg)}.row.busy .st,.row.queued .st{color:var(--info)}.row.service{opacity:.55}
.dot{width:8px;height:8px;border-radius:50%;background:var(--line);justify-self:center}
.row.done .dot{background:var(--ok)}.row.next .dot{background:var(--info)}.row.busy .dot,.row.queued .dot{background:var(--info);animation:pulse 1.2s infinite}
.row.started .dot{background:linear-gradient(90deg,var(--ok) 50%,var(--line) 50%)}
@keyframes pulse{50%{opacity:.25}}
.shelfrow{display:flex;gap:12px;overflow-x:auto;padding:4px 2px 10px;scrollbar-width:none;margin:0 -16px;padding-left:16px;padding-right:16px}
.shelfrow::-webkit-scrollbar{display:none}
.shelfrow .it{width:96px;flex:none;cursor:pointer;border:0;background:none;padding:0;text-align:left;color:inherit}
.shelfrow .cv{width:96px;height:134px}
.shelfrow .it b{display:block;font-size:.74rem;line-height:1.2;margin-top:6px;font-weight:600;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.shelfrow .it small{color:var(--ink2);font-size:.7rem;display:block}
.shelfrow .bar{height:3px;margin-top:5px}

/* плеер */
.player{padding:0 0 calc(24px + var(--sab))}
.player .cover{width:min(62vw,260px);aspect-ratio:216/300;height:auto;margin:6px auto 16px;border-radius:14px;box-shadow:0 22px 44px rgba(0,0,0,.3)}
.scrub{height:22px;position:relative;margin:12px 0 0;cursor:pointer;touch-action:none}
.scrub .track{position:absolute;left:0;right:0;top:9px;height:4px;background:var(--line);border-radius:2px}
.scrub .fill{position:absolute;left:0;top:9px;height:4px;background:var(--ink);border-radius:2px;width:0}
.scrub .knob{position:absolute;top:4px;width:14px;height:14px;border-radius:50%;background:var(--ink);transform:translateX(-50%);box-shadow:0 0 0 3px var(--bg);left:0}
.times{display:flex;justify-content:space-between;color:var(--ink2);font-size:.76rem}
.ctrls{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:10px}
.ctrls button{background:none;border:0;color:var(--ink);cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:1px;font-size:.62rem;font-weight:600;padding:6px;border-radius:10px}
.ctrls button svg{width:28px;height:28px}
.ctrls .play{width:68px;height:68px;border-radius:50%;background:var(--primary);color:var(--primary-ink);display:flex;align-items:center;justify-content:center}
.ctrls .play svg{width:30px;height:30px}
.pchips{display:flex;justify-content:center;gap:8px;margin-top:16px;flex-wrap:wrap}
/* голоса */
.voice{display:grid;grid-template-columns:46px 1fr auto;gap:10px;align-items:center;padding:10px;border-radius:var(--r-lg);background:var(--bg2);margin-bottom:8px;cursor:pointer;border:2px solid transparent;width:100%;text-align:left;color:inherit}
.voice.on{border-color:var(--ink)}
.voice .pl{width:46px;height:46px;border-radius:50%;background:var(--primary);color:var(--primary-ink);display:flex;align-items:center;justify-content:center;border:0;cursor:pointer}
.voice .pl svg{width:18px;height:18px}
.voice .pl.wait{background:var(--line);color:var(--ink3)}
.voice .wave{display:flex;gap:2px;align-items:flex-end;height:20px;margin-top:5px}
.voice .wave i{width:3px;background:var(--ink3);border-radius:2px;opacity:.55;transition:height .3s}
.voice.on .wave i{background:var(--ink);opacity:.85}
.voice.playing .wave i{animation:wave 1s ease-in-out infinite alternate}
.voice.playing .wave i:nth-child(odd){animation-delay:-.4s}
@keyframes wave{to{height:20px}}
.voice .g{font-size:.72rem;color:var(--ink2)}
/* синтез — сетка кусков, живёт минуты: только цвет и прозрачность, без фильтров */
.synth{border:1px solid var(--info);border-radius:var(--r-lg);padding:12px;background:var(--bg)}
.chunks{display:flex;flex-wrap:wrap;gap:3px;margin:10px 0}
.chunks i{flex:1 1 calc(100% / 15 - 3px);max-width:calc(100% / 8 - 3px);height:9px;border-radius:2px;background:var(--line);transition:background .4s}
.chunks i.d{background:var(--ok)}
.chunks i.w{background:var(--info);animation:chunk 1.4s ease-in-out infinite}
.chunks i.w:nth-child(2n){animation-delay:-.35s}.chunks i.w:nth-child(3n){animation-delay:-.7s}.chunks i.w:nth-child(5n){animation-delay:-1s}
@keyframes chunk{0%,100%{opacity:.35}50%{opacity:1}}
/* Янтарный «живой» шар — для коротких ожиданий (разбор файла, голоса).
   В духе загрузчика ApexATS, но без contrast-фильтра (он делал плоскую жёлтую кляксу):
   тёплое ядро и четыре размытых круга-лавы, плавающих внутри круга 96 px. */
.orb{width:96px;height:96px;margin:0 auto;position:relative;border-radius:50%;overflow:hidden;
  background:radial-gradient(circle at 40% 35%,#ffd88a 0%,var(--amber1) 35%,var(--amber2) 80%,#8a3a12 100%);
  box-shadow:0 0 0 1px rgba(255,191,72,.25),0 18px 40px rgba(224,102,31,.35),inset 0 -14px 24px rgba(120,40,0,.45),inset 0 10px 18px rgba(255,236,190,.45)}
.orb i{position:absolute;border-radius:50%;filter:blur(9px);opacity:.85;will-change:transform;mix-blend-mode:screen}
.orb i:nth-child(1){width:54px;height:54px;left:8px;top:10px;background:#fff1b8;animation:o1 3.4s ease-in-out infinite}
.orb i:nth-child(2){width:44px;height:44px;left:44px;top:36px;background:#ff9a3c;animation:o2 2.9s ease-in-out infinite}
.orb i:nth-child(3){width:38px;height:38px;left:20px;top:50px;background:#ffcf5a;animation:o3 4.1s ease-in-out infinite}
.orb i:nth-child(4){width:30px;height:30px;left:52px;top:8px;background:#ff6a2a;animation:o4 2.4s ease-in-out infinite}
@keyframes o1{0%,100%{transform:translate(0,0) scale(1)}33%{transform:translate(18px,14px) scale(1.15)}66%{transform:translate(-8px,22px) scale(.9)}}
@keyframes o2{0%,100%{transform:translate(0,0)}50%{transform:translate(-26px,-18px) scale(1.2)}}
@keyframes o3{0%,100%{transform:translate(0,0)}50%{transform:translate(22px,-26px)}}
@keyframes o4{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(-22px,30px) scale(1.4)}}
.wait{text-align:center;padding:26px 12px}
.wait .t{font:600 1.05rem var(--font-book);margin-top:14px;position:relative;z-index:1}
.wait .s{position:relative;z-index:1}
.wait .s{color:var(--ink2);font-size:.82rem;margin-top:4px}
.wait .glow{position:relative}
.wait .glow::after{content:"";position:absolute;left:50%;top:50%;width:140px;height:140px;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,rgba(255,191,72,.35),transparent 70%);z-index:-1;animation:breathe 3s ease-in-out infinite}
@keyframes breathe{50%{transform:translate(-50%,-50%) scale(1.25);opacity:.6}}
/* скелет списка */
.skel{background:linear-gradient(90deg,var(--bg2) 25%,var(--bg3) 50%,var(--bg2) 75%);background-size:200% 100%;animation:shimmer 1.3s infinite;border-radius:8px;height:14px;margin:8px 0}
@keyframes shimmer{to{background-position:-200% 0}}
/* шторки */
.sheet{position:fixed;inset:0;background:rgba(9,9,11,.5);display:flex;align-items:flex-end;justify-content:center;z-index:9;animation:fade .15s}
.sheet .box{background:var(--bg);width:100%;max-width:720px;max-height:84%;border-radius:22px 22px 0 0;padding:10px 16px calc(18px + var(--sab));display:flex;flex-direction:column;gap:8px;overflow:auto;animation:up .2s ease-out}
.sheet .grab{width:38px;height:4px;border-radius:2px;background:var(--line);margin:0 auto 6px;flex:none}
@keyframes up{from{transform:translateY(30px);opacity:.6}}
@keyframes fade{from{opacity:0}}
.seg{display:flex;background:var(--bg2);border-radius:var(--r);padding:3px;gap:3px}
.seg button{flex:1;text-align:center;font-size:.8rem;font-weight:600;padding:8px;border-radius:8px;color:var(--ink2);border:0;background:none;cursor:pointer}
.seg button.on{background:var(--bg);color:var(--ink);box-shadow:0 1px 3px rgba(0,0,0,.12)}
.set{display:flex;align-items:center;gap:10px;padding:12px 4px;border-bottom:1px solid var(--line);font-size:.92rem;width:100%;background:none;border-left:0;border-right:0;border-top:0;text-align:left;color:inherit;cursor:pointer}
.set .ic{width:32px;height:32px;border-radius:8px;background:var(--bg2);display:flex;align-items:center;justify-content:center;flex:none}
.set .ic svg{width:16px;height:16px}
.set .v{margin-left:auto;color:var(--ink2);font-size:.82rem;white-space:nowrap}
.sw{width:42px;height:26px;border-radius:13px;background:var(--line);position:relative;flex:none;margin-left:auto;transition:background .2s}
.sw::after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:left .2s}
.sw.on{background:var(--ok)}.sw.on::after{left:19px}
.toast{position:fixed;left:16px;right:16px;bottom:calc(150px + var(--sab));max-width:600px;margin:0 auto;background:var(--ink);color:var(--bg);border-radius:var(--r-lg);padding:11px 14px;font-size:.84rem;display:flex;gap:10px;align-items:center;box-shadow:0 10px 24px rgba(0,0,0,.25);z-index:12;animation:up .2s}
.toast svg{width:18px;height:18px;flex:none}
.toast.bad{background:var(--bad);color:#fff}
.drop{border:1.5px dashed var(--ink3);border-radius:var(--r-xl);padding:24px 14px;text-align:center;background:var(--bg);cursor:pointer}
.drop.over{border-color:var(--info);background:var(--info-bg)}
.drop svg{width:34px;height:34px;color:var(--ink2)}
.empty{text-align:center;padding:40px 16px;color:var(--ink2)}
.empty svg{width:42px;height:42px;color:var(--ink3)}
.empty .t{font:600 1.15rem var(--font-book);color:var(--ink);margin-top:10px}
.fade-in{animation:fade .2s}
.hidden{display:none!important}
/* десктоп: три колонки */
@media (min-width:960px){
  #app{display:grid;grid-template-columns:220px 1fr 320px;grid-template-rows:100vh}
  .side{border-right:1px solid var(--line);padding:22px 14px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh}
  .side .brand{font:600 1.25rem var(--font-book);padding:4px 10px 14px}
  .side .nav{display:flex;align-items:center;gap:10px;padding:10px;border-radius:var(--r);font-weight:600;font-size:.92rem;color:var(--ink2);border:0;background:none;cursor:pointer;text-align:left;width:100%}
  .side .nav.on{background:var(--bg2);color:var(--ink)}
  .side .nav svg{width:18px;height:18px}
  .side .who{margin-top:auto;color:var(--ink2);font-size:.82rem;padding:0 10px}
  .main{overflow:auto;height:100vh}
  .main .top{position:static;background:none;backdrop-filter:none}
  .screen{padding-bottom:40px;max-width:760px}
  .rail{border-left:1px solid var(--line);background:var(--bg2);padding:22px 18px;overflow:auto;height:100vh}
  .rail .player .cover{width:170px}
  .rail .ctrls .play{width:54px;height:54px}
  .dock,.top .icb.back{display:none}
  .mob{display:none}
}
@media (max-width:959px){.side,.rail{display:none}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.orb{filter:none}.orb i{opacity:.7}}
