/* ═══════════════════════════════════════════════════════════════
   Экран Generate (картинка и видео): один результат по центру + строка снизу,
   пока ждём — огни (smoke.js), Advanced — пункты со значениями → список выбранного пункта.
   ═══════════════════════════════════════════════════════════════ */
/* вход на экран — только проявление: transform на секции делает fixed-детей (строка, результат, дым) относительными к ней,
   и на 0.2с страница получает скролл */
.core.in > .gen{animation-name:fade}
/* дым: ПК — за курсором, везде — огни во время генерации; под контентом */
#smoke{position:fixed;inset:0;z-index:-1;pointer-events:none}
/* результат: по центру свободной области над строкой; проявляется из блюра, растворяется быстрее */
.gen-res{position:fixed;left:var(--pad);right:var(--pad);top:calc((100vh - var(--tab) - 62px) / 2);transform:translateY(-50%) scale(.94);z-index:1;
         display:grid;justify-items:center;gap:14px;opacity:0;filter:blur(18px);pointer-events:none;
         transition:opacity .45s cubic-bezier(.22,1,.36,1),transform .45s cubic-bezier(.22,1,.36,1),filter .45s cubic-bezier(.22,1,.36,1)}
.gen-res.in{opacity:1;transform:translateY(-50%);filter:none;pointer-events:auto;transition-duration:.9s,1s,.9s}
.gen-res img,.gen-res video{display:block;max-width:100%;max-height:calc(100vh - var(--tab) - 230px);border-radius:16px;box-shadow:0 30px 80px #000a}
.gen-res img{cursor:zoom-in}
/* действия под картинкой: сохранить · скачать · 👍 · 👎 · edit */
.gen-res .acts{display:flex;gap:8px}
.gen-res .acts button{width:42px;height:42px;border-radius:12px;border:0;background:#00000080;backdrop-filter:blur(10px);color:#fff;cursor:pointer;display:grid;place-items:center}
.gen-res .acts button:hover{background:#000000b0}
.gen-res .acts button.on{color:var(--acc)}
.gen-res .acts svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.gen-res .acts button.on svg{fill:currentColor}
.gen-res .fail{text-align:center;font-size:14px;color:#ff6b5c}
/* полный размер: картинка вписана в экран на чёрном, клик или Esc — закрыть */
.gen-full{position:fixed;inset:0;z-index:40;background:#000;display:grid;place-items:center;cursor:zoom-out}
.gen-full img{max-width:100vw;max-height:100dvh}   /* vw/vh: у ячейки grid высота auto, проценты не режут */
/* док: строка + плашка advanced над ней, двигаются как одно целое */
.gen-dock{position:fixed;left:var(--pad);right:var(--pad);bottom:calc(var(--tab) + 10px);z-index:9;transition:transform .45s cubic-bezier(.2,.8,.2,1)}   /* двигаем только transform — без дёрганья */
/* до первой генерации строка посередине экрана, с первой — уезжает вниз */
.gen:not(.has) .gen-dock{transform:translateY(calc(-50vh + var(--tab) + 10px + 50%))}
.gen:not(.has).adv-open .gen-dock{transform:translateY(calc(-50vh + var(--tab) + 10px + 50% + 150px))}   /* параметры открыты — строка на 150px ниже, плашке есть место */
/* строка: одна строка текста — ⚙ · текст · ↑ в ряд; длинный текст — текст на всю ширину, кнопки рядом ниже */
/* кнопки прибиты к низу плашки, текст над ними: одна строка — между кнопками,
   со второй — на всю ширину и съезжает влево, кнопки уезжают под текст. Всё на переходах */
.gen-bar{
  position:relative;z-index:2;
  background:var(--panel);border:1px solid #8b5cf680;border-radius:18px;
  box-shadow:0 0 0 1px #ffffff12 inset,0 16px 40px #05010ab3,0 0 40px #7b2ff733;
  --t:.5s;--e:cubic-bezier(.2,.8,.2,1);
}
/* идёт генерация: по нижнему краю строки бежит блик */
.gen.busy .gen-bar::after{content:"";position:absolute;left:14px;right:14px;bottom:-1px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,transparent,var(--acc),transparent) no-repeat;background-size:40% 100%;animation:strip 2.2s ease-in-out infinite}
@keyframes strip{from{background-position:-100% 0}to{background-position:200% 0}}
.gen-bar textarea{display:block;width:100%;border:0;background:none;outline:0;font:inherit;font-size:16px;line-height:1.4;color:var(--fg);
                  resize:none;margin:0;padding:15px 122px 15px 60px;max-height:calc(1.4em * 6 + 30px);overflow-y:auto;scrollbar-width:none;
                  /* назад в одну строку в два такта: сначала текст едет вправо от ⚙, потом кнопки поднимаются к нему */
                  transition:padding-left calc(var(--t)/2) var(--e),padding-right calc(var(--t)/2) var(--e),height calc(var(--t)/2) var(--e) calc(var(--t)/2)}
/* многострочная: кнопки под текстом в отступе (не в паддинге — паддинг скроллится вместе с текстом, и строки уезжали под кнопки) */
.gen-bar.multi textarea{padding:10px 14px 8px;margin-bottom:44px;transition:height var(--t) var(--e),padding-left var(--t) var(--e),padding-right var(--t) var(--e)}
.gen-bar textarea::-webkit-scrollbar{display:none}
.gen-bar textarea::placeholder{color:#6b5a8a}
.gen-ic{position:absolute;left:7px;bottom:7px;width:38px;height:38px;border-radius:12px;flex:none;
        display:grid;place-items:center;font-size:16px;background:#ffffff10;border:1px solid var(--line);color:var(--dim);cursor:pointer}
/* запуск: ↑ и цена за чертой — одна кнопка */
.gen-go{position:absolute;right:7px;bottom:7px;height:38px;padding:0 12px 0 11px;border-radius:12px;border:0;cursor:pointer;
        display:inline-flex;align-items:center;gap:11px;background:linear-gradient(90deg,var(--acc2),var(--acc))}
.gen-cost{display:inline-flex;align-items:center;gap:5px;padding-left:11px;border-left:1px solid #ffffff40;
          font:700 13px var(--mono);font-variant-numeric:tabular-nums;letter-spacing:-.02em;color:#fff}
.gen-cost i{width:9px;height:9px;border-radius:50%;background:#fff}
.gen-go svg{width:18px;height:18px;stroke:#fff;stroke-width:3;fill:none;stroke-linecap:round;stroke-linejoin:round}

/* ── advanced ─────────────────────────────────────────────── */
/* окно над строкой: обрезает плашку, которая выезжает из-под края строки; фона и перехвата кликов нет */
.mo.adv{position:absolute;inset:auto 0 calc(100% + 10px);height:380px;padding:0;align-items:flex-end;overflow:hidden;
        background:none;backdrop-filter:none;pointer-events:none}
.mo.adv .mo-card{pointer-events:auto;box-shadow:none;border-radius:18px}
/* открытие: строка вниз, плашка мягко растёт из угла у ⚙, пункты меню по очереди; закрытие — реверс (своё имя, иначе не перезапустится) */
.adv .mo-card{padding:12px 0 12px;transform-origin:24px 100%;animation:pop .45s cubic-bezier(.22,1,.36,1)}
.adv.out .mo-card{animation:unpop .3s ease both}
.adv.out .adv-list,.adv.out .adv-menu button{animation:none}
@keyframes pop{from{opacity:0;transform:scale(.92)}}
@keyframes unpop{to{opacity:0;transform:scale(.96)}}
@keyframes slide{from{opacity:0;transform:translateX(-8px)}}
.adv-menu button{animation:slide .3s cubic-bezier(.22,1,.36,1) both}
.adv-menu button:nth-child(2){animation-delay:.05s}
.adv-menu button:nth-child(3){animation-delay:.1s}
.adv-menu{display:grid;padding:0 16px;align-content:start}
.adv-menu button{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:13px 2px;
                 border:0;border-bottom:1px solid var(--line);background:none;font-size:14px;font-weight:600;
                 cursor:pointer;text-align:left}
.adv-menu button:last-child{border:0}
.adv-menu b{font-weight:500;color:var(--dim);white-space:nowrap}
.adv-menu b::after{content:" ›";color:#6b5a8a}
/* мобилка: меню → экран пункта; ПК: оба окна рядом */
.adv-pane{display:none;flex-direction:column;min-height:0;position:relative}
/* список с шапкой колонок (модели): «‹ Model» ложится в ту же строку слева от speed · quality · credits */
.adv-pane:has(.hdr) .adv-back{position:absolute;left:0;top:0;z-index:2}
.adv-pane:has(.hdr) .hdr{padding-top:6px}
.adv .open .adv-menu{display:none}
.adv .open .adv-pane{display:flex}
.adv-back{display:flex;gap:6px;padding:4px 16px 8px;border:0;background:none;color:var(--dim);font-size:13px;cursor:pointer}
.adv-list{display:grid;align-content:start;max-height:290px;overflow-y:auto;scrollbar-width:none;animation:fade .3s .2s both}
.adv-list::-webkit-scrollbar{display:none}
.adv-list.sw{animation:slide .25s cubic-bezier(.2,.8,.2,1)}   /* смена пункта меню */
@keyframes fade{from{opacity:0}}
.adv-menu button,.adv-list button{outline:0}
.adv-list::-webkit-scrollbar{width:6px}
.adv-list::-webkit-scrollbar-thumb{background:#ffffff22;border-radius:3px}
.adv-list button{display:flex;align-items:center;gap:12px;padding:8px 18px;border:0;
                 background:none;font-size:13px;color:var(--dim);cursor:pointer;text-align:left}
.adv-list button b{flex:1;min-width:0;color:var(--fg);font-weight:500}
.adv-list button:disabled{opacity:.3;cursor:default}
.adv-list button.on{background:#ffffff0d;color:#fff}
.adv-list button.on b{font-weight:700}
.adv-list .grp{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:#6b5a8a;padding:12px 18px 3px}
/* строка модели: имя · точки скорости и качества · цена (монетка + число) */
.adv-list .cq{width:30px;margin-left:10px;display:inline-grid;grid-template-columns:9px 1fr;justify-items:start}   /* узкая колонка: монетка + число, шапка центруется над ней */
/* шапка списка моделей: подписи колонок, правые края совпадают с точками и ценой */
.adv-list .hdr{position:sticky;top:0;z-index:1;background:var(--panel);box-shadow:0 -12px 0 var(--panel);display:flex;align-items:center;gap:12px;padding:12px 18px 4px;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:#6b5a8a}
.adv-list .hdr b{flex:1}
.adv-list .hdr .m span{min-width:46px;text-align:right}
.adv-list .hdr .cq{display:inline-flex;justify-content:center;font:inherit;letter-spacing:inherit;color:inherit}
.adv-list button.on .cq{color:var(--fg)}
.adv-list .m{display:flex;gap:10px;flex:none}
.adv-list .rate{min-width:46px;justify-content:flex-end}   /* колонка под ширину подписи шапки */
/* пункт «Preset»: карточка пресета и выход в свою генерацию */
.adv-list .pre{display:flex;gap:12px;align-items:center;padding:6px 18px 12px}
.adv-list .pre img{width:44px;height:64px;border-radius:9px;object-fit:cover;border:1px solid var(--line)}
.adv-list .pre b{display:block;font-size:14px}
.adv-list .pre span{font-size:12px;color:var(--dim)}
.adv-list [data-detach]{margin:0 18px;width:auto;border-radius:12px;padding:10px}
.adv-list .sub{padding:10px 18px 0;font-size:12px;color:#6b5a8a}
/* референсы */
.adv-list .gen-refs{padding:6px 18px}
.gen-refs{display:flex;gap:8px;flex-wrap:wrap}
.gen-ref{position:relative;width:64px;height:64px;border-radius:12px;overflow:hidden;border:1px solid var(--line)}
.gen-ref img{width:100%;height:100%;object-fit:cover;display:block}
.gen-ref .dz-x{top:4px;right:4px}
.gen-ref.add{border:1.5px dashed var(--line);background:#ffffff08;color:var(--dim);font-size:20px;display:grid;place-items:center;cursor:pointer}

@media (min-width:900px){
  .gen-res{left:0;right:0;top:calc((100vh - 80px) / 2)}
  .gen-res img,.gen-res video{max-height:calc(100vh - 270px)}
  .gen-dock{left:0;right:0;margin:0 auto;bottom:28px;width:640px}
  .gen:not(.has) .gen-dock{transform:translateY(calc(-50vh + 28px + 50%))}
  .gen:not(.has).adv-open .gen-dock{transform:translateY(calc(-50vh + 28px + 50% + 80px))}   /* строка опускается на 80px, плашке есть место */
  .mo.adv .mo-card{width:100%;height:300px;padding:0;display:grid;grid-template-columns:220px 1fr;overflow:hidden}
  .adv-menu{padding:6px 16px;border-right:1px solid var(--line)}
  .adv .mo-card .adv-pane{display:flex}
  .adv .mo-card .adv-menu{display:grid}
  .adv-back{display:none}
  .adv-list{max-height:none;flex:1}
}
