/* Noire · Gen — единственный слой стилей (редизайн v2, 2026-10).
   Раскладка: верхнее меню -> слева одна колонка управления сверху вниз (тип, модель, промпт,
   кадры, настройки, цена и кнопка), справа большой результат. Токены и правила: docs/design-system.md */
:root{
  --bg:#0E0C12;--panel:#17131E;--panel-2:#211B2B;--panel-3:#2C2439;
  --line:rgba(255,255,255,.07);--line-2:rgba(255,255,255,.13);
  --violet:#A863FF;--violet-deep:#855CFF;--action:#7C50F8;--lav:#C5B1FF;--tint:rgba(168,99,255,.14);
  --text:#F4F4F4;--muted:#A199B3;--faint:#928AA6;
  --red:#ED1D49;--warn:#FFB454;--ok:#5BD6A0;
  --s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;
  --r-s:10px;--r-m:14px;--r-l:20px;
  --tap-min:44px;--nav-h:60px;--controls-w:420px;--content-max:1600px;
  --focus-ring:0 0 0 2px var(--bg),0 0 0 4px var(--lav);
  --font:'Montserrat',system-ui,-apple-system,'Segoe UI',sans-serif;
  /* семантические алиасы — на них ссылаются тесты и инлайновые стили шаблонов */
  --surface-canvas:var(--bg);--surface-panel:var(--panel);--text-primary:var(--text);
  --text-secondary:var(--muted);--action-primary:var(--action);
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--text);font:500 14px/1.45 var(--font);
  -webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}
h1,h2,h3,p{margin:0}
h2{font-size:22px;font-weight:700;letter-spacing:-.01em}
h3{font-size:16px;font-weight:700}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer;border:0;background:none;padding:0}
button:disabled{cursor:not-allowed}
img,video{display:block;max-width:100%}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;color:var(--muted);font-weight:600;padding:10px 12px;border-bottom:1px solid var(--line)}
td{padding:12px;border-bottom:1px solid var(--line);vertical-align:middle}
.num{text-align:right}
.mono{font-variant-numeric:tabular-nums;word-break:break-word}
.hidden{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.skip-link{position:absolute;left:12px;top:-60px;z-index:100;background:var(--violet);color:#fff;padding:10px 14px;border-radius:var(--r-s)}
.skip-link:focus{top:12px}
:focus-visible{outline:none;box-shadow:var(--focus-ring)}
::selection{background:var(--violet-deep);color:#fff}
*{scrollbar-width:thin;scrollbar-color:var(--panel-3) transparent}

/* ── бренд ── */
.brandmark{display:flex;align-items:center;gap:10px}
.logo{position:relative;width:26px;height:26px;flex:none}
.logo i,.wm i{position:absolute;display:block;border-radius:22%}
.logo i:first-child,.wm i:first-child{left:0;top:0;width:66%;height:66%;background:var(--violet)}
.logo i:last-child,.wm i:last-child{left:52%;top:52%;width:48%;height:48%;background:var(--lav)}
.wordmark{font-weight:700;letter-spacing:.14em;font-size:13px;color:var(--muted)}
.wordmark b{color:var(--text)}

/* ── кнопки и поля ── */
.btn,.gen-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--tap-min);
  padding:0 20px;border-radius:var(--r-m);background:var(--action);color:#fff;font-weight:700;transition:background .15s,transform .1s}
.btn:hover,.gen-btn:hover{background:#6C3FE8}
.btn:active,.gen-btn:active{transform:translateY(1px)}
.btn:disabled,.gen-btn:disabled{background:var(--panel-3);color:var(--muted);transform:none}
.btn-w{width:100%}
.btn-ghost,.iconbtn,.chip,.minibtn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  background:var(--panel-2);color:var(--text);border-radius:999px;font-weight:600;text-decoration:none;transition:background .15s}
.btn-ghost,.iconbtn{min-height:40px;padding:0 16px;font-size:13px}
.chip{min-height:34px;padding:0 14px;font-size:13px}
.minibtn{min-height:32px;min-width:32px;padding:0 10px;font-size:12px}
.btn-ghost:hover,.iconbtn:hover,.chip:hover,.minibtn:hover{background:var(--panel-3)}
.btn-ghost:disabled,.iconbtn:disabled,.minibtn:disabled{opacity:.4}
.chip.act{background:var(--tint);color:var(--lav)}
.minibtn-danger{color:#ff7d98}
.field{width:100%;min-height:var(--tap-min);padding:0 14px;border-radius:var(--r-s);background:var(--panel-2);
  border:1px solid transparent;color:var(--text)}
.field:hover{border-color:var(--line-2)}
.field:focus{outline:none;border-color:var(--violet);box-shadow:none}
select.field{appearance:none;padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%239990AB' stroke-width='2'%3E%3Cpath d='M2 4l4 4 4-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center}
label{display:block;font-size:13px;font-weight:600;color:var(--muted);margin:14px 0 6px}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.form-spacer{height:18px}
.err{color:#ff7d98;font-size:13px;font-weight:600}
.err:empty{display:none}
.err:not(:empty){margin-top:8px}
.spin{width:14px;height:14px;border-radius:50%;border:2px solid rgba(255,255,255,.25);border-top-color:#fff;animation:spin .7s linear infinite;flex:none}
@keyframes spin{to{transform:rotate(360deg)}}
.pill{display:inline-flex;align-items:center;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;background:var(--panel-3);color:var(--muted)}
.pill.on{background:rgba(91,214,160,.14);color:var(--ok)}
.pill.warn{background:rgba(255,180,84,.14);color:var(--warn)}
.avatar{width:36px;height:36px;border-radius:50%;background:var(--tint);color:var(--lav);display:grid;place-items:center;font-weight:700;flex:none}
.row-between{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:40px}
.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}

/* переключатель-таблетка: один трек, выбранное залито — без двойных рамок */
.seg{display:flex;gap:4px;padding:4px;background:var(--panel-2);border-radius:var(--r-m)}
.seg-wrap{flex-wrap:wrap}.seg-wrap button{flex:1 1 auto}
.seg button{flex:1;min-height:36px;padding:0 12px;border-radius:var(--r-s);font-weight:600;font-size:13px;color:var(--muted);white-space:nowrap;transition:background .15s,color .15s}
.seg button:hover{color:var(--text)}
.seg button.on{background:var(--lav);color:#17131E}
.seg button:disabled{opacity:.6}
.toggle{width:46px;height:28px;border-radius:999px;background:var(--panel-3);position:relative;flex:none;transition:background .15s}
.toggle i{position:absolute;left:3px;top:3px;width:22px;height:22px;border-radius:50%;background:#fff;transition:transform .15s}
.toggle.on{background:var(--action)}
.toggle.on i{transform:translateX(18px)}
input[type=range]{width:100%;accent-color:var(--violet);height:28px}

/* ── вход ── */
.auth{min-height:100%;display:grid;place-items:center;padding:24px;
  background:radial-gradient(60% 50% at 50% 0,rgba(168,99,255,.22),transparent 70%)}
.auth .card{width:min(400px,100%);background:var(--panel);border-radius:var(--r-l);padding:32px}
.auth h1{font-size:28px;font-weight:700;margin:28px 0 6px}
.auth p{color:var(--muted)}

/* ── каркас ── */
#app{height:100%;display:grid;grid-template-rows:var(--nav-h) minmax(0,1fr)}
#app>*{min-width:0}
#nav{display:flex;align-items:center;gap:var(--s5);padding:0 var(--s5);border-bottom:1px solid var(--line)}
.navlinks{display:flex;gap:4px;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}
.navlink{flex:none;white-space:nowrap}
#nav .brandmark,.nav-right{flex:none}
.wordmark{white-space:nowrap}
.navlink{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 14px;border-radius:999px;color:var(--muted);font-weight:600}
.navlink:hover{color:var(--text);background:var(--panel)}
.navlink.active{color:var(--text);background:var(--panel-2)}
.navlink.active svg{color:var(--lav)}
.nav-right{display:flex;align-items:center;gap:var(--s4)}
.project-pick{width:auto;max-width:190px;min-height:40px;border-radius:999px;font-weight:600;font-size:13px}
.quota{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted);min-width:150px}
.quota b{color:var(--text);font-size:13px}
.qbar{display:block;height:4px;border-radius:4px;background:var(--panel-3);overflow:hidden}
.qbar i{display:block;height:100%;background:var(--violet);border-radius:4px}
.qbar.warn i{background:var(--warn)}
.usercard{display:flex;align-items:center;gap:10px}
.uname{font-weight:700;font-size:13px;line-height:1.2}
.urole{font-size:12px;color:var(--muted)}
#logout{min-width:40px;padding:0}
#logout .nl-label{display:none}
#stage{min-height:0;overflow:hidden;width:100%;max-width:var(--content-max);margin:0 auto}
#stage>*{height:100%}

/* ── Создать: слева управление, справа результат ── */
#panel-gen{display:grid;grid-template-columns:var(--controls-w) minmax(0,1fr)}
#inspector{display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--line)}
.controls-scroll{flex:1;min-height:0;overflow-y:auto;padding:var(--s5);display:flex;flex-direction:column;gap:var(--s5)}
.step-title,.insp-h,.clabel{font-size:13px;font-weight:700;color:var(--text);margin:0 0 10px;display:flex;align-items:center;justify-content:space-between;gap:8px}
.clabel{font-weight:600;color:var(--muted);margin-bottom:8px}
.cval,.ref-limit{color:var(--lav);font-weight:700}
.ref-limit{color:var(--muted);font-weight:600}
#kind-toggle{margin-bottom:10px}
.models{display:flex;flex-direction:column;gap:6px}
.mcard{display:grid;grid-template-columns:56px minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;padding:8px;text-align:left;
  border-radius:var(--r-m);background:var(--panel);border:1.5px solid transparent;transition:background .15s,border-color .15s}
.mcard:hover{background:var(--panel-2)}
.mcard.sel{background:var(--tint);border-color:var(--violet)}
.mcard.skel{height:74px}
.mcard__cover{position:relative;width:56px;height:56px;border-radius:var(--r-s);overflow:hidden;
  background:radial-gradient(70% 70% at 25% 25%,var(--cov-c1,#855CFF),transparent 70%),radial-gradient(70% 70% at 80% 85%,var(--cov-c2,#FC51FF),transparent 70%),var(--cov-base,#17131E)}
.mcard__photo{width:100%;height:100%;object-fit:cover}
.mcard__body{min-width:0}
.mname{font-weight:700;font-size:14px;display:flex;align-items:center;gap:8px}
.mbadge{font-size:11px;font-weight:700;padding:2px 8px;border-radius:999px;background:#d0143c;color:#fff}
.mtag{display:block;font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mprice{font-weight:700;font-size:13px;color:var(--lav);padding-right:6px}
.skel{background:linear-gradient(100deg,var(--panel) 30%,var(--panel-2) 50%,var(--panel) 70%);background-size:200% 100%;animation:shimmer 1.4s linear infinite;border-radius:var(--r-m)}
@keyframes shimmer{to{background-position:-200% 0}}

.dock{position:relative}
.dock textarea{width:100%;min-height:104px;max-height:220px;resize:vertical;padding:14px;border-radius:var(--r-m);
  background:var(--panel-2);border:1.5px solid transparent;font-size:15px;line-height:1.5;display:block}
.dock textarea::placeholder{color:var(--faint)}
.prompt-wrap{position:relative;background:var(--panel-2);border-radius:var(--r-m)}
.prompt-wrap textarea{position:relative;background:transparent}
.prompt-hl{position:absolute;inset:0;padding:14px;border:1.5px solid transparent;font-size:15px;line-height:1.5;white-space:pre-wrap;overflow-wrap:break-word;overflow:hidden;color:transparent;pointer-events:none}
.prompt-hl mark{color:transparent;background:rgba(168,99,255,.34);border-radius:5px;box-shadow:0 0 0 2px rgba(168,99,255,.34)}
.prompt-hl mark.bad{background:rgba(237,29,73,.4);box-shadow:0 0 0 2px rgba(237,29,73,.4)}
.ref-chips{display:flex;flex-wrap:wrap;gap:6px}
.aud-refs{display:flex;flex-direction:column;gap:6px;margin:6px 0}
.aud-tok{color:var(--lav)}
.ls-file.is-err{box-shadow:inset 0 0 0 1.5px var(--red)}
.ref-chip{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 10px 0 4px;border-radius:999px;background:var(--panel-2);color:var(--muted);font-size:12px}
.ref-chip:hover{background:var(--tint);color:var(--text)}
.ref-chip img,.ref-chip video{width:24px;height:24px;border-radius:999px;object-fit:cover}
.ref-chip b{color:var(--lav);font-weight:700}.ref-chip i{font-style:normal;max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ref-chip.used{box-shadow:inset 0 0 0 1.5px var(--violet)}
.ref-ac-opt video{width:32px;height:32px;object-fit:cover;border-radius:6px}
.voice-row{display:flex;gap:8px}.voice-row select{flex:1;min-width:0}
.voice-sample{display:flex;align-items:center;gap:8px;margin-top:8px}.voice-sample audio{flex:1;height:36px;min-width:0}
.prov-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.prov{background:var(--panel);border-radius:var(--r-m);padding:16px;display:flex;flex-direction:column;gap:10px}
.prov.off{opacity:.6}
.prov-top{display:flex;justify-content:space-between;align-items:center;gap:8px}
.prov-num{font-size:24px;font-weight:800;display:flex;flex-direction:column;gap:2px}
.prov-num span{font-size:12px;font-weight:500;color:var(--muted)}
.prov-num.low{color:var(--red)}
.prov-sub{font-size:12px;color:var(--muted);margin-top:auto}
.prov a{text-align:center;text-decoration:none;display:flex;align-items:center;justify-content:center;min-height:40px}
.dock textarea:focus{outline:none;border-color:var(--violet);box-shadow:none}
.step-title label{margin:0;color:inherit;font:inherit}
.composer-help,.preset-hint,.tier-hint{font-size:12px;color:var(--muted);line-height:1.5}
.composer-help{margin-top:8px}
.composer-help:empty{display:none}
.ref-ac{position:absolute;left:0;right:0;top:100%;z-index:20;margin-top:4px;background:var(--panel-3);border-radius:var(--r-m);padding:6px;max-height:240px;overflow:auto;box-shadow:0 16px 40px rgba(0,0,0,.5)}
.ref-ac-group{font-size:12px;color:var(--muted);padding:6px 10px}
.ref-ac-opt{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r-s);cursor:pointer}
.ref-ac-opt.active{background:var(--tint)}
.ref-ac-opt img{width:32px;height:32px;object-fit:cover;border-radius:6px}
.ref-ac-token{font-weight:700;color:var(--lav)}
.ref-ac-label{color:var(--muted);font-size:13px}

/* настройки модели (#insp рисует JS) */
#insp{display:flex;flex-direction:column}
#insp>.insp-h{margin-top:var(--s5)}
#insp>.insp-h:first-child,#insp>.seg:first-child{margin-top:0}
#insp>.preset-hint{margin:8px 0}
.ctrl{margin-top:14px}
.insp-h+.ctrl{margin-top:0}
.tier-hint{margin-top:6px}
.tier-row{display:grid;grid-template-columns:auto auto;gap:0 8px;justify-content:space-between;padding:6px 10px;border-radius:var(--r-s)}
.tier-row.on{background:var(--panel-2)}
.tier-row b{color:var(--text);font-size:13px}
.tier-row .tier-price{color:var(--text);font-weight:600}
.tier-row span:last-child{grid-column:1/-1}
.tier-advice{margin-top:6px;padding:0 10px;color:var(--lav)}
.frames,.ref-tray{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.dropzone,.ref-add{position:relative;min-height:104px;border-radius:var(--r-m);border:1.5px dashed var(--line-2);background:var(--panel);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--muted);font-weight:600;font-size:13px;cursor:pointer;text-align:center;padding:10px;transition:border-color .15s,color .15s}
.dropzone:hover,.ref-add:hover,.dropzone.drag,.ref-add.drag{border-color:var(--violet);color:var(--text)}
.dropzone small{font-weight:500;font-size:11px;color:var(--faint)}
.dropzone[aria-disabled=true]{cursor:default;opacity:.55}
.dropzone[aria-disabled=true]:hover{border-color:var(--line-2);color:var(--muted)}
.dropzone.filled{border:0;padding:0;overflow:hidden;cursor:default}
.dropzone.filled img{width:100%;height:104px;object-fit:cover}
.dz-label{position:absolute;left:8px;bottom:8px;font-size:11px;font-weight:700;background:rgba(14,12,18,.75);padding:3px 8px;border-radius:999px;color:var(--text)}
.ref-add{font-size:22px;font-weight:400}
.ref-add span{font-size:13px;font-weight:600}
.rm{position:absolute;top:6px;right:6px;width:28px;height:28px;border-radius:50%;background:rgba(14,12,18,.8);color:#fff;display:grid;place-items:center}
.rm:hover{background:var(--red)}
.ref-card{background:var(--panel);border-radius:var(--r-m);padding:8px;display:flex;flex-direction:column;gap:8px;min-width:0}
.ref-card.is-error{outline:1.5px solid var(--red)}
.ref-thumb{position:relative;aspect-ratio:4/3;border-radius:var(--r-s);overflow:hidden;background:var(--panel-2)}
.ref-thumb img,.ref-thumb video{width:100%;height:100%;object-fit:cover}
.ref-spin{position:absolute;inset:0;background:rgba(14,12,18,.7);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;font-size:12px}
.ref-err{position:absolute;top:6px;left:6px;width:22px;height:22px;border-radius:50%;background:var(--red);display:grid;place-items:center;font-weight:700}
.ref-error{font-size:12px;color:#ff7d98}
.ref-meta{font-size:11px;color:var(--muted)}
.ref-label{width:100%;min-height:34px;padding:0 10px;border-radius:8px;background:var(--panel-2);border:1px solid transparent;font-size:12px}
.ref-label:focus{outline:none;border-color:var(--violet);box-shadow:none}
.ref-token{align-self:flex-start;font-size:12px;font-weight:700;color:var(--lav);background:var(--tint);padding:5px 10px;border-radius:999px}
.ref-token[aria-disabled=true]{opacity:.5}
.ref-actions{display:flex;gap:6px;align-items:center}
.ref-actions .rm{margin-left:auto;background:var(--panel-2)}
.ref-actions .rm:hover{background:var(--red)}
.seed-row{display:flex;gap:8px}
.seed-row .minibtn{min-width:var(--tap-min);min-height:var(--tap-min);border-radius:var(--r-s)}
.acc,.inspector-details{margin-top:var(--s5);border-top:1px solid var(--line);padding-top:var(--s3)}
.acc-head,.inspector-details summary{display:flex;align-items:center;gap:8px;width:100%;min-height:40px;font-weight:700;font-size:13px;color:var(--muted);cursor:pointer;list-style:none}
.inspector-details summary::-webkit-details-marker{display:none}
.inspector-details summary span{margin-left:auto;color:var(--faint)}
.acc-head:hover,.inspector-details summary:hover{color:var(--text)}
.acc .chev{transition:transform .15s}
.acc.open .chev{transform:rotate(90deg)}
.acc-body{display:none}
.acc.open .acc-body{display:block}
.preset-row{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 12px}
.preset-chip{display:inline-flex;align-items:center;background:var(--panel-2);border-radius:999px}
.preset-chip .chip{background:none}
.pdel{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;color:var(--muted);margin-right:3px}
.pdel:hover{background:var(--red);color:#fff}
#save-preset,#char-new{align-self:flex-start;margin-top:8px}

/* цена и запуск — всегда на виду внизу колонки */
.launch{padding:var(--s4) var(--s5) var(--s5);border-top:1px solid var(--line);background:var(--bg)}
.variants-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;font-size:13px;font-weight:600;color:var(--muted)}
.variants-row .seg{width:168px}
.variants-row .seg button{min-height:32px;padding:0}
.insp-foot{display:flex;align-items:baseline;justify-content:space-between;gap:12px;color:var(--muted);font-size:13px;font-weight:600}
.insp-foot b{font-size:22px;font-weight:700;color:var(--text)}
#price-explanation{font-size:12px;color:var(--faint);margin:2px 0 12px}
.gen-btn{width:100%;min-height:52px;font-size:16px}
.gen-btn .price{display:none}
#generation-readiness{font-size:13px;font-weight:600;color:var(--warn);margin-top:8px}
#generation-readiness:empty{display:none}

/* результат */
#studio-surface{position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;padding:var(--s5);gap:var(--s4);overflow:auto;
  background:radial-gradient(50% 45% at 78% 8%,color-mix(in srgb,var(--cov-c1,#855CFF) 16%,transparent),transparent 70%),
    radial-gradient(45% 40% at 12% 96%,color-mix(in srgb,var(--cov-c2,#FC51FF) 12%,transparent),transparent 70%)}
#canvas-wrap{flex:1;min-height:0;display:grid;place-items:center}
#canvas{position:relative;max-width:100%;max-height:100%;height:min(100%,62vh);border-radius:var(--r-l);
  border:1.5px dashed var(--line-2);display:grid;place-items:center;overflow:hidden;transition:aspect-ratio .2s}
#canvas.has-media{aspect-ratio:auto!important;height:100%;width:100%;border:0;border-radius:0;overflow:visible}
.empty-state{text-align:center;padding:24px;max-width:460px;display:flex;flex-direction:column;align-items:center;gap:12px}
.empty-state h3{font-size:20px}
.wm{position:relative;width:44px;height:44px;opacity:.9}
.ex-chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.result-wrap{width:100%;height:100%;display:flex;flex-direction:column;gap:var(--s4);min-height:0}
.result-media,.result-grid{flex:1;min-height:0;display:grid;place-items:center;gap:10px}
.result-media img,.result-media video{max-width:100%;max-height:100%;border-radius:var(--r-l);object-fit:contain;box-shadow:0 30px 80px rgba(0,0,0,.55)}
.result-grid img{width:100%;height:100%;object-fit:contain;border-radius:var(--r-m)}
[data-zoom]{cursor:zoom-in}
.result-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:8px}
.result-bar .spend{color:var(--muted);font-size:13px;font-weight:600;margin-left:8px}
.prog{width:min(360px,90%);display:flex;flex-direction:column;gap:12px}
.prog .skel{height:8px;display:none}
.stage-txt{font-size:18px;font-weight:700;text-align:center}
.prog .bar{height:6px;border-radius:6px;background:var(--panel-3);overflow:hidden;position:relative}
.prog .bar::after{content:"";position:absolute;inset:0;width:40%;border-radius:6px;background:var(--violet);animation:slide 1.4s ease-in-out infinite}
@keyframes slide{0%{transform:translateX(-100%)}100%{transform:translateX(250%)}}
.prog .meta{display:flex;justify-content:space-between;gap:12px;font-size:12px;color:var(--muted)}
.queue-box{position:absolute;top:var(--s4);right:var(--s4);z-index:2;background:var(--panel);border-radius:var(--r-m);padding:12px 14px;max-width:300px}
.queue-box .insp-h{margin-bottom:6px}
.qtask{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted);padding:3px 0}

/* ── общие страницы (История, Персонажи, Команда) ── */
.page{overflow-y:auto;padding:var(--s6) var(--s5);display:flex;flex-direction:column;gap:var(--s5)}
.page-sub{color:var(--muted);margin-top:4px}
.stats-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.stat-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.stat{background:var(--panel);border-radius:var(--r-m);padding:18px 20px;display:flex;flex-direction:column;gap:2px}
.stat b{font-size:26px;font-weight:700}
.stat span{color:var(--muted);font-size:13px}
.stat-models{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.sm{display:flex;gap:10px;background:var(--panel);border-radius:999px;padding:6px 14px;font-size:13px}
.sm .mono{color:var(--muted)}
.filters{display:flex;flex-wrap:wrap;gap:8px}
.ledger-note{display:flex;gap:8px;align-items:flex-start;font-size:12px;color:var(--faint)}
.ledger-note svg{flex:none;margin-top:1px}
.date-h{font-weight:700;font-size:14px;margin:var(--s5) 0 var(--s3)}
.date-h:first-child{margin-top:0}
.gallery,.character-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.tile{position:relative;aspect-ratio:4/3;border-radius:var(--r-m);overflow:hidden;background:var(--panel);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--muted)}
.tile img,.tile video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .25s}
.tile:hover img,.tile:hover video{transform:scale(1.04)}
.tile .ov{position:absolute;left:0;right:0;bottom:0;padding:28px 12px 10px;text-align:left;font-size:12px;color:#d9d3e6;background:linear-gradient(transparent,rgba(14,12,18,.9))}
.tile .ov .m{font-weight:700;font-size:13px;color:#fff}
.tile.err{color:#ff7d98}.tile.warn{color:var(--warn)}
.tile-model{font-weight:700;font-size:13px;color:var(--text)}
.tile-status{font-size:12px}
.rowbtn{cursor:pointer}
.rowbtn:hover td{background:var(--panel)}
.barmini{height:4px;border-radius:4px;background:var(--panel-3);overflow:hidden;margin-bottom:4px;width:90px}
.barmini i{display:block;height:100%;background:var(--violet)}
.admin-actions{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.character-toolbar{display:flex;align-items:center;gap:var(--s4)}
.character-toolbar .seg{width:fit-content}
.character-card{text-align:left;background:var(--panel);border-radius:var(--r-m);overflow:hidden;display:flex;flex-direction:column;transition:background .15s}
.character-card:hover{background:var(--panel-2)}
.character-card.is-archived{opacity:.6}
.character-card__media{aspect-ratio:1;background:var(--panel-2)}
.character-card__media img{width:100%;height:100%;object-fit:cover}
.character-card__media video{width:100%;height:100%;object-fit:cover}
.view-projects .character-card__media{aspect-ratio:4/3;position:relative}
.view-projects .character-card__media>*{position:absolute;inset:0}
.proj-cur{color:var(--lav)}
.crumb{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font:inherit}
.crumb:hover{color:var(--text)}
.character-card__empty{width:100%;height:100%;display:grid;place-items:center;color:var(--faint)}
.character-card__body{padding:14px;display:flex;flex-direction:column;gap:4px}
.character-card__top{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.character-card__name{font-weight:700;font-size:15px}
.character-card__version,.character-card__desc,.character-card__meta{font-size:12px;color:var(--muted)}
.character-card__meta{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}
.character-empty{grid-column:1/-1;display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center;padding:64px 20px;color:var(--muted)}
.character-empty h3{color:var(--text);font-size:20px}
.character-empty p{max-width:420px}
.character-detail-media{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px;margin:14px 0}
.character-detail-media img{aspect-ratio:1;object-fit:cover;border-radius:var(--r-s);width:100%}
.character-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}

/* ── Раскадровка: слева сцены, по центру кадр, снизу лента и поле ── */
#panel-scene{display:grid;grid-template-columns:280px minmax(0,1fr)}
.thread-tabs-wrap{border-right:1px solid var(--line);padding:var(--s5) var(--s3);overflow-y:auto;min-height:0}
.sheet-head{display:none}
.thread-tabs{display:flex;flex-direction:column;gap:2px}
.tthread{display:flex;align-items:center;gap:2px;border-radius:var(--r-s);padding:2px 4px;min-height:40px}
.tthread:hover{background:var(--panel)}
.tthread.cur{background:var(--panel-2)}
.tname{flex:1;min-width:0;text-align:left;font-weight:600;font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:8px 4px;border-radius:6px}
.tthread.cur .tname{color:var(--text)}
.tname-input{flex:1;min-width:0;background:var(--bg);border:1px solid var(--violet);border-radius:6px;padding:6px 8px;font-size:13px}
.star,.tedit,.tdel{width:28px;height:28px;border-radius:6px;display:grid;place-items:center;color:var(--faint);flex:none}
.star.on{color:var(--warn)}
.star:hover,.tedit:hover{color:var(--text);background:var(--panel-3)}
.tdel:hover{color:#fff;background:var(--red)}
.tedit,.tdel{opacity:0}
.tthread:hover .tedit,.tthread:hover .tdel,.tthread:focus-within .tedit,.tthread:focus-within .tdel{opacity:1}
.grp-sep{height:1px;background:var(--line);margin:8px 4px}
.tthread-new{order:-1;min-height:var(--tap-min);margin-bottom:10px;border-radius:var(--r-m);background:var(--tint);color:var(--lav);font-weight:700}
.tthread-new:hover{background:rgba(168,99,255,.24)}
.scene-main{display:flex;flex-direction:column;gap:var(--s3);padding:var(--s5);min-width:0;min-height:0}
.scene-main .section-head .seg{width:fit-content}
.scene-switcher{display:none}
.scene-lock-note{display:flex;gap:8px;align-items:center;font-size:12px;color:var(--muted)}
.scene-stage{position:relative;flex:1;min-height:160px;display:grid;place-items:center;border-radius:var(--r-l);background:var(--panel);overflow:hidden}
.scene-stage.drag{outline:2px dashed var(--violet);outline-offset:-6px}
.scene-stage>img{max-width:100%;max-height:100%;object-fit:contain}
.scene-char-tag,.fr-char-tag{position:absolute;left:10px;bottom:10px;display:flex;align-items:center;gap:6px;background:rgba(14,12,18,.8);border-radius:999px;padding:4px 10px 4px 4px;font-size:12px;font-weight:600}
.scene-char-tag img,.fr-char-tag img{width:22px;height:22px;border-radius:50%;object-fit:cover}
.fr-char-tag{left:4px;bottom:4px;padding:2px 6px 2px 2px;font-size:10px}
.fr-char-tag img{width:14px;height:14px}
.filmstrip{display:flex;align-items:center;gap:0;overflow-x:auto;padding:4px 2px;flex:none}
.filmstrip:empty{display:none}
.fr{position:relative;flex:none}
.frsel{position:relative;display:block;width:112px;height:72px;border-radius:var(--r-s);overflow:hidden;border:2px solid transparent;opacity:.7}
.frsel img{width:100%;height:100%;object-fit:cover}
.fr.cur .frsel{border-color:var(--violet);opacity:1}
.frsel:hover{opacity:1}
.frsel .n{position:absolute;left:5px;top:5px;font-size:11px;font-weight:700;background:rgba(14,12,18,.8);border-radius:6px;padding:1px 6px}
.fr-cur-tag{display:none}
.frdel{position:absolute;top:-6px;right:-6px;width:22px;height:22px;border-radius:50%;background:var(--panel-3);display:grid;place-items:center;opacity:0}
.fr:hover .frdel,.frdel:focus-visible{opacity:1}
.frdel:hover{background:var(--red)}
.fr-link{width:14px;height:2px;background:var(--line-2);flex:none}
#scene-dock textarea{min-height:64px}
.dock-row{display:flex;align-items:center;gap:12px;margin-top:10px;flex-wrap:wrap}
.dock-row .preset-hint{flex:1;min-width:140px}
.dock-row .gen-btn{width:auto;min-height:var(--tap-min);font-size:14px;margin-left:auto}

/* ── Липсинк ── */
#panel-lipsync,#panel-voice{display:grid;grid-template-columns:var(--controls-w) minmax(0,1fr)}
.voice-stage{display:flex;flex-direction:column;gap:var(--s4);padding:var(--s5);overflow-y:auto;min-height:0}
.voice-result{min-height:220px;display:grid;place-items:center;border-radius:var(--r-l);background:var(--panel)}
.voice-result .result-wrap{width:100%}
.vo-text{width:100%;resize:vertical;padding:12px;min-height:150px}
.voice-list{display:flex;flex-direction:column;gap:4px;margin-top:8px;max-height:260px;overflow:auto}
.voice-item{display:flex;align-items:center;gap:6px;padding:4px;border-radius:var(--r-s);background:var(--panel-2)}
.voice-item.on{box-shadow:inset 0 0 0 1.5px var(--violet);background:var(--tint)}
.voice-pick{flex:1;min-width:0;min-height:36px;padding:0 8px;text-align:left;display:flex;flex-direction:column;justify-content:center}
.voice-pick b{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.voice-pick i{font-style:normal;font-size:11px;color:var(--muted)}
.voice-item .minibtn.on{background:var(--lav);color:#17131E}
.vo-line{display:grid;grid-template-columns:120px minmax(0,1fr) auto;gap:6px;align-items:start;margin-bottom:6px}
.vo-line textarea{resize:vertical;padding:8px 10px;min-height:44px}
.vo-row{background:var(--panel);border-radius:var(--r-m);padding:14px;display:flex;flex-direction:column;gap:8px}
.voice-history{display:flex;flex-direction:column;gap:8px}
.voice-tools{display:flex;flex-wrap:wrap;gap:8px}
.voice-tools .btn-ghost{display:inline-flex;align-items:center;gap:8px}
.voice-folders{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:4px}
.voice-result video{max-width:100%;max-height:50vh;border-radius:var(--r-m)}
.vo-row-top{display:flex;justify-content:space-between;gap:10px;font-size:13px}.vo-row-top span{color:var(--muted);font-size:12px}
.vo-row p{font-size:13px;color:var(--muted);white-space:pre-wrap;overflow-wrap:anywhere}
.vo-row-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.vo-row-bar audio{flex:1;min-width:200px;height:36px}
.lipsync-controls{display:flex;flex-direction:column;gap:var(--s5);padding:var(--s5);border-right:1px solid var(--line);overflow-y:auto;min-height:0}
.lipsync-launch{margin-top:auto;padding-top:var(--s4);border-top:1px solid var(--line)}
.lipsync-launch .insp-foot{margin-bottom:12px}
#ls-result{margin:var(--s5);min-height:260px}
.ls-file{display:flex;align-items:center;gap:10px;min-height:56px;padding:0 10px 0 14px;border-radius:var(--r-m);background:var(--panel-2)}
.ls-file__name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}
.ls-file__meta{color:var(--muted);font-size:13px}

/* ── оверлеи ── */
.scrim{position:fixed;inset:0;z-index:50;background:rgba(8,6,12,.72);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;padding:24px}
.modal{width:min(480px,100%);max-height:calc(100vh - 48px);overflow:auto;background:var(--panel);border-radius:var(--r-l);padding:24px}
.modal-wide{width:min(1120px,100%)}
.modal-mid{width:min(720px,100%)}
.aud{display:flex;flex-direction:column;align-items:center;gap:16px;padding:40px 24px;color:var(--lav);width:100%}
.aud audio{width:min(520px,100%)}
.aud-tile{display:grid;place-items:center;width:100%;height:100%;color:var(--lav);background:var(--panel-2)}
.trim-row{display:flex;align-items:flex-end;gap:10px;margin-top:12px}
.trim-row label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--muted);flex:1}
.join-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px;margin-top:12px;max-height:46vh;overflow:auto}
.join-item{position:relative;aspect-ratio:16/9;border-radius:var(--r-s);overflow:hidden;background:var(--panel-2);outline:2px solid transparent}
.join-item video{width:100%;height:100%;object-fit:cover}
.join-item.on{outline-color:var(--violet)}
.join-item b{position:absolute;top:6px;left:6px;min-width:22px;height:22px;border-radius:999px;background:var(--action);color:#fff;font-size:12px;display:grid;place-items:center}
.btn-accent{color:var(--lav)}
.edit-grid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:20px;align-items:start;margin-top:12px}
.edit-stage{position:relative;background:var(--panel-2);border-radius:var(--r-m);overflow:hidden;line-height:0;align-self:start}
.edit-stage img{width:100%;max-height:calc(100vh - 180px);object-fit:contain;display:block}
.edit-stage canvas{position:absolute;inset:0;width:100%;height:100%;opacity:.55;cursor:crosshair;touch-action:none}
.edit-stage canvas.off{display:none}
.edit-side{display:flex;flex-direction:column;gap:14px}
.edit-side textarea{width:100%;resize:vertical;min-height:84px;padding:12px}
.edit-row{display:grid;grid-template-columns:1fr;gap:12px}
.edit-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
@media(max-width:860px){.edit-grid{grid-template-columns:1fr}.edit-stage img{max-height:50vh}}
.modal .section-head{margin-bottom:8px}
.modal p{color:var(--muted)}
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(520px,100%);background:var(--panel);padding:24px;overflow-y:auto;animation:drawer .2s ease-out}
@keyframes drawer{from{transform:translateX(24px);opacity:0}}
.drawer .insp-h{margin-top:var(--s4)}
.palette{width:min(520px,100%);margin-top:10vh;background:var(--panel);border-radius:var(--r-l);padding:10px;max-height:70vh;overflow:auto}
.palette input{width:100%;min-height:48px;background:none;border:0;border-bottom:1px solid var(--line);padding:0 12px;margin-bottom:8px;font-size:16px}
.palette input:focus{outline:none;box-shadow:none}
.palette .grp{font-size:12px;font-weight:700;color:var(--muted);padding:10px 12px 6px}
.palette .opt{display:flex;align-items:center;gap:10px;padding:11px 12px;border-radius:var(--r-s);cursor:pointer;font-weight:600}
.palette .opt:hover,.palette .opt.on{background:var(--panel-2)}
.palette .dot{width:8px;height:8px;border-radius:50%;background:var(--violet)}
.palette .pm{margin-left:auto;color:var(--muted)}
.lightbox img,.lightbox video{max-width:calc(100vw - 48px);max-height:calc(100vh - 48px);border-radius:var(--r-m)}
#toasts{position:fixed;left:50%;top:calc(var(--nav-h) + 12px);transform:translateX(-50%);z-index:60;display:flex;flex-direction:column;gap:8px;align-items:center;width:max-content;max-width:calc(100vw - 32px)}
.toast{display:flex;align-items:center;gap:14px;background:#fff;color:#17131E;font-weight:600;padding:12px 18px;border-radius:999px;box-shadow:0 12px 36px rgba(0,0,0,.5);animation:toast .2s ease-out}
.toast.err{background:var(--red);color:#fff}
.toast-action{font-weight:700;color:var(--violet-deep);text-decoration:underline}
.toast.err .toast-action{color:#fff}
@keyframes toast{from{transform:translateY(8px);opacity:0}}
.sheet-scrim{position:fixed;inset:0;z-index:39;background:rgba(8,6,12,.72)}

/* шапка ужимается раньше, чем страница получит горизонтальную прокрутку */
@media(max-width:1760px){.navlink svg{display:none}}
@media(max-width:1600px){.uid-wrap{display:none}.quota{min-width:0}}
@media(max-width:1400px){#nav{gap:var(--s3)}.navlink{padding:0 10px}.project-pick{max-width:150px}.wordmark{display:none}.quota{display:none}}
@media(max-width:1180px){.nav-right{gap:var(--s2)}.navlink{padding:0 8px;font-size:13px}}
/* ── планшет и телефон: одна колонка, меню внизу ── */
@media(max-width:1024px){
  :root{--controls-w:360px}
  #nav{gap:var(--s3);padding:0 var(--s4)}
  .navlink{padding:0 10px}
  .quota{min-width:0}
  .uid-wrap{display:none}
}
@media(max-width:768px){
  body{height:auto}
  #app{display:block;height:auto;padding-bottom:calc(72px + env(safe-area-inset-bottom))}
  #nav{position:sticky;top:0;z-index:30;height:56px;background:var(--bg);justify-content:space-between}
  .navlinks{position:fixed;left:0;right:0;bottom:0;z-index:40;justify-content:space-around;gap:0;background:var(--panel);
    border-top:1px solid var(--line);padding:6px 4px calc(6px + env(safe-area-inset-bottom))}
  .navlinks{overflow-x:auto;justify-content:flex-start}
  .navlink svg{display:block}
  .navlink{flex:1 0 76px;flex-direction:column;gap:3px;height:auto;min-width:44px;min-height:52px;padding:4px 2px;font-size:10px;border-radius:var(--r-s)}
  .navlink.active{background:none;color:var(--lav)}
  .quota b{font-size:12px}
  #nav .project-pick{max-width:118px;min-height:36px;padding-left:10px;font-size:12px}
  #nav .quota{display:none}
  #stage,#stage>*{height:auto;overflow:visible}
  #panel-gen{display:block}
  #inspector{border-right:0}
  .controls-scroll{overflow:visible;padding:var(--s4)}
  .launch{position:sticky;bottom:calc(64px + env(safe-area-inset-bottom));z-index:20;padding:var(--s3) var(--s4)}
  #price-explanation{display:none}
  .insp-foot{margin-bottom:8px}
  .insp-foot b{font-size:18px}
  #studio-surface{padding:var(--s4);overflow:visible;min-height:60vh}
  #canvas{height:auto;width:100%;max-height:70vh}
  #canvas.has-media{height:auto}
  .result-media img,.result-media video{max-height:70vh}
  .queue-box{position:static;max-width:none}
  .page{padding:var(--s5) var(--s4)}
  .stat-cards{grid-template-columns:1fr 1fr}
  .stat b{font-size:20px}
  .gallery,.character-grid{grid-template-columns:repeat(2,1fr)}
  .field,.btn-ghost,.iconbtn,.seg button{min-height:var(--tap-min)}
  /* таблица команды -> карточки */
  #admin-body thead{display:none}
  #admin-body tr{display:block;background:var(--panel);border-radius:var(--r-m);padding:8px 14px;margin-bottom:10px}
  #admin-body td{display:flex;justify-content:space-between;align-items:center;gap:12px;border:0;padding:7px 0;text-align:right}
  #admin-body td::before{content:attr(data-label);color:var(--muted);font-weight:600}
  #admin-body td.admin-actions{justify-content:flex-start}
  #admin-body td.admin-actions::before{display:none}
  #admin-projects thead{display:none}
  #admin-projects tr{display:block;background:var(--panel);border-radius:var(--r-m);padding:8px 14px;margin-bottom:10px}
  #admin-projects td{display:flex;justify-content:space-between;align-items:center;gap:12px;border:0;padding:7px 0;text-align:right}
  #admin-projects td::before{content:attr(data-label);color:var(--muted);font-weight:600}
  #admin-projects td.admin-actions{justify-content:flex-start}
  #admin-projects td.admin-actions::before{display:none}
  #scene-dock textarea{min-height:96px}
  /* список сцен -> шторка снизу */
  #panel-lipsync,#panel-voice{display:block}
  .voice-stage{overflow:visible;padding:var(--s4)}
  .lipsync-controls{border-right:0;overflow:visible;padding:var(--s4)}
  #ls-result{margin:var(--s4)}
  #panel-scene{display:block}
  .scene-main{padding:var(--s4);min-height:calc(100vh - 140px)}
  .scene-switcher{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:var(--tap-min);padding:0 14px;border-radius:var(--r-m);background:var(--panel-2);font-weight:600}
  .thread-tabs-wrap{display:block;position:fixed;left:0;right:0;bottom:0;z-index:45;max-height:75vh;border:0;border-radius:var(--r-l) var(--r-l) 0 0;background:var(--panel);
    padding:var(--s4);padding-bottom:calc(var(--s4) + env(safe-area-inset-bottom));transform:translateY(100%);visibility:hidden;transition:transform .2s,visibility .2s}
  .thread-tabs-wrap.open{transform:translateY(0);visibility:visible}
  .sheet-head{display:flex;align-items:center;gap:12px;font-weight:700;margin-bottom:12px}
  .sheet-head .minibtn{min-height:var(--tap-min);padding:0 14px}
  .sheet-head .minibtn:focus-visible{outline:2px solid var(--lav)}
  .tedit,.tdel{opacity:1}
  /* касания: всё, что нажимают пальцем, не меньше 44 px */
  .chip,.minibtn,.rm,.pdel,.star,.tedit,.tdel,.ref-label,.toast-action{min-width:var(--tap-min);min-height:var(--tap-min)}
  .rm,.pdel,.star,.tedit,.tdel{width:var(--tap-min);height:var(--tap-min)}
  .frdel{opacity:1;width:32px;height:32px;top:-10px;right:-10px}
  .frdel::after{content:"";position:absolute;inset:-6px}
  .filmstrip{padding-top:12px;gap:4px}
  .drawer{width:100%}
  #toasts{top:68px}
}
@media(max-width:390px){
  .wordmark{display:none}
  .frames,.ref-tray{gap:8px}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
