:root{
  --bg:#f6f8f6; --panel:#ffffff; --ink:#14231b; --muted:#5d6b62; --line:#e3e9e4;
  --brand:#2a8a3f; --brand-d:#1f6c30; --accent:#0f5132; --ring:#cfe6d5; --shadow:0 6px 24px rgba(20,60,35,.08);
  --radius:14px; --maxw:1140px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;font-family:'Segoe UI',system-ui,-apple-system,Roboto,Helvetica,Arial,sans-serif;color:var(--ink);background:var(--bg);line-height:1.55}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
img{max-width:100%}
h1,h2,h3{line-height:1.2;color:var(--ink)}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 20px}
.btn{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);background:#fff;color:var(--ink);
  font:inherit;font-weight:600;padding:10px 16px;border-radius:10px;cursor:pointer;transition:.15s}
.btn:hover{border-color:var(--brand);background:var(--brand);color:#fff;text-decoration:none}
.btn:hover svg{stroke:#fff}
.btn.iconbtn{padding:10px 14px;font-size:18px;line-height:1;min-width:44px;justify-content:center}
.btn:disabled{opacity:.4;cursor:not-allowed}
.btn:disabled:hover{background:#fff;color:var(--ink);border-color:var(--line)}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}
.btn.primary:hover{background:var(--brand-d);border-color:var(--brand-d)}
.btn.ghost{background:transparent}

/* header */
header.site{position:sticky;top:0;z-index:20;background:rgba(255,255,255,.9);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
header.site .wrap{display:flex;align-items:center;gap:18px;height:64px}
.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:19px;color:var(--ink)}
.brand:hover{text-decoration:none}
.brand .x{color:var(--brand);margin:0px 2px}
header.site nav{margin-left:auto;display:flex;gap:6px;align-items:center;flex-wrap:wrap}
header.site nav a{padding:8px 12px;border-radius:8px;color:var(--muted);font-weight:600}
header.site nav a:hover{background:#f0f5f1;color:var(--ink);text-decoration:none}
header.site nav a.active{background:#eef8f0;color:var(--accent)}
.burger{display:none;margin-left:auto;width:40px;height:40px;padding:10px;background:none;border:0;cursor:pointer;flex-direction:column;justify-content:space-between}
.burger span{display:block;height:2px;width:100%;background:var(--ink);border-radius:2px;transition:transform .25s ease,opacity .2s ease}
.burger.open span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.burger.open span:nth-child(2){opacity:0}
.burger.open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
@media(max-width:680px){
  .burger{display:flex}
  header.site .wrap{height:60px;gap:12px}
  header.site nav{position:absolute;top:100%;left:0;right:0;margin:0;background:#fff;border-bottom:1px solid var(--line);box-shadow:0 8px 20px rgba(0,0,0,.06);flex-direction:column;gap:2px;padding:8px 16px;display:none}
  header.site nav.open{display:flex}
  header.site nav a{padding:11px 8px;font-size:15px}
  .dl{gap:6px}
  .dl .btn{padding:8px 9px;font-size:12.5px}
  .dl .btn.iconbtn{padding:7px 9px;font-size:15px;min-width:34px}
  footer.site .fine .sep{display:none}
  footer.site .fine .lic{display:block}
}

/* hero */
.hero{padding:54px 0 28px;text-align:center}
.hero h1{font-size:clamp(30px,5vw,50px);margin:0 0 14px;letter-spacing:-.5px}
.hero p.lead{font-size:clamp(16px,2.4vw,20px);color:var(--muted);max-width:720px;margin:0 auto 10px}
.badge{display:inline-block;background:var(--ring);color:var(--accent);font-weight:700;font-size:13px;padding:5px 12px;border-radius:999px;margin-bottom:16px}

/* generator layout */
.gen{display:grid;grid-template-columns:1.15fr .85fr;gap:26px;align-items:stretch;margin:8px 0 40px}
.gen>.card{height:100%}
.preview .card{height:100%;display:flex;flex-direction:column}
.preview .card .pad{flex:1;display:flex;flex-direction:column;justify-content:flex-start}
@media(max-width:900px){.gen{grid-template-columns:1fr}}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}
.card .pad{padding:20px}
.types{display:flex;flex-wrap:wrap;gap:8px;padding:16px;border-bottom:1px solid var(--line)}
.type{display:flex;flex-direction:column;align-items:center;gap:5px;min-width:74px;padding:10px 8px;border:1px solid var(--line);
  border-radius:10px;background:#fff;cursor:pointer;font-size:12px;font-weight:600;color:var(--muted);transition:.15s}
.type svg{width:22px;height:22px;stroke:var(--muted);fill:none;stroke-width:1.8}
.type:hover{border-color:var(--ring)}
.type.on{border-color:var(--brand);background:#eef8f0;color:var(--accent)}
.type.on svg{stroke:var(--brand)}
/* мобильный: типы в одну строку, лишние скрыты за кадром, скролл пальцем, без видимой полосы прокрутки */
@media(max-width:680px){
  .gen>*{min-width:0}   /* иначе grid-ячейка растягивается под ширину всех иконок и распирает страницу */
  .types{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:12px}
  .types::-webkit-scrollbar{display:none}
  .type{flex:0 0 auto;min-width:66px}
}
.field{margin-bottom:14px}
.field label{display:block;font-size:13px;font-weight:600;color:var(--muted);margin-bottom:5px}
.field input,.field textarea,.field select{width:100%;font:inherit;font-size:15px;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:#fff}
.field input:focus,.field textarea:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--ring)}
.field.limit input,.field.limit textarea{border-color:#d33a45}
.field.limit input:focus,.field.limit textarea:focus{border-color:#d33a45;box-shadow:0 0 0 3px rgba(211,58,69,.18)}
.field .limit-msg{margin-top:5px;font-size:12px;color:#b02a37;text-align:right;display:none}
.field.limit .limit-msg{display:block}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.hint{font-size:12.5px;color:var(--muted)}

/* preview */
.preview{position:sticky;top:84px}
.stage{position:relative;aspect-ratio:0.88;max-height:420px;display:flex;align-items:flex-start;justify-content:center;padding:0 22px;background:
  radial-gradient(circle at 50% 40%,#ffffff,#f0f5f1);border-radius:var(--radius);border:1px solid var(--line);overflow:hidden}
.stage svg{width:100%;height:auto;max-width:380px}
.stage .placeholder{color:var(--muted);text-align:center;font-size:14px}
/* tree-shaped loader: golden energy flows from the central node outward along the branches (the "tubes"),
   drawing the tree segment by segment, with the final colour trailing just behind the gold front. */
.growwrap{position:relative;width:100%;display:flex;justify-content:center;align-items:center}
.growwrap svg{width:100%;height:auto;max-width:360px;display:block}
/* старое дерево (подложка) плавно гаснет, пока сверху золото рисует новое */
.nrgunder{width:100%;max-width:360px;margin:0 auto;animation-name:nrgfadeout;animation-timing-function:ease-in;animation-fill-mode:forwards}
@keyframes nrgfadeout{to{opacity:0}}
.nrgover{position:absolute;top:0;left:50%;transform:translateX(-50%);width:100%;max-width:360px;pointer-events:none}
.nrgunder svg,.nrgover svg{width:100%;height:auto;display:block}
/* сегменты energyFill проявляются по своей задержке (краска дотекла по трубке до этого места) */
.nrgL{opacity:0;animation:nrgfade 200ms ease forwards}
@keyframes nrgfade{to{opacity:1}}
.codeimg{width:100%;display:flex;justify-content:center}
.codeimg svg{width:100%;height:auto;max-width:360px}
.dl{display:flex;gap:8px;justify-content:center;margin-top:14px;flex-wrap:wrap}
/* всплывающая подсказка (свой плагин) */
.tip{position:fixed;z-index:200;transform:translate(-50%,-100%);background:#14231b;color:#fff;font-size:12px;line-height:1.4;padding:7px 10px;border-radius:8px;max-width:230px;text-align:center;pointer-events:none;opacity:0;transition:opacity .12s ease;box-shadow:0 8px 24px rgba(0,0,0,.2)}
.tip.on{opacity:1}
.tip::after{content:"";position:absolute;left:50%;top:100%;transform:translateX(-50%);border:5px solid transparent;border-top-color:#14231b}
.meta{margin-top:12px;font-size:12.5px;color:var(--muted);text-align:center;line-height:1.7}
.meta b{color:var(--ink)}
.caption-opts{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:6px}
.chip{border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 10px;font-size:12.5px;font-weight:600;color:var(--muted);cursor:pointer}
.chip.on{border-color:var(--brand);background:#eef8f0;color:var(--accent)}
.chip .swatch{display:inline-block;width:12px;height:12px;border-radius:3px;margin-right:6px;vertical-align:-1px;border:1px solid rgba(0,0,0,.15)}

/* sections */
section.block{padding:46px 0;border-top:1px solid var(--line)}
section.block h2{font-size:clamp(24px,3.4vw,34px);text-align:center;margin:0 0 8px}
section.block .sub{text-align:center;color:var(--muted);max-width:720px;margin:0 auto 30px}
.feature-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
@media(max-width:820px){.feature-grid{grid-template-columns:1fr}}
.feature{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:22px}
.feature h3{margin:0 0 6px;font-size:18px}
.feature p{margin:0;color:var(--muted);font-size:14.5px}
.feature .ic{width:40px;height:40px;border-radius:10px;background:#eef8f0;display:flex;align-items:center;justify-content:center;margin-bottom:12px}
.feature .ic svg{width:22px;height:22px;stroke:var(--brand);fill:none;stroke-width:1.8}

/* comparison */
table.cmp{width:100%;border-collapse:collapse;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
table.cmp th,table.cmp td{padding:13px 16px;text-align:left;border-bottom:1px solid var(--line);font-size:14.5px}
table.cmp th{background:#f0f5f1;font-weight:700}
table.cmp td.y{color:var(--brand);font-weight:700}

/* faq */
.faq details{background:var(--panel);border:1px solid var(--line);border-radius:12px;margin-bottom:10px;padding:4px 16px}
.faq summary{cursor:pointer;font-weight:700;padding:12px 0}
.faq p{margin:0 0 14px;color:var(--muted)}

/* app promo banner + store buttons */
.appbar{display:none;align-items:center;gap:12px;background:var(--accent);color:#fff;padding:9px 16px;font-size:14px}
.appbar.show{display:flex}
.appbar a.get{margin-left:auto;background:#fff;color:var(--accent);font-weight:700;padding:6px 13px;border-radius:8px;white-space:nowrap}
.appbar a.get:hover{text-decoration:none;background:#eef8f0}
.appbar button.close{background:none;border:none;color:#fff;font-size:20px;line-height:1;cursor:pointer;opacity:.85;padding:0 2px}
.stores{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;margin:16px 0}
.store{display:inline-flex;align-items:center;gap:9px;background:var(--ink);color:#fff;padding:9px 16px;border-radius:11px;font-weight:600}
.store:hover{text-decoration:none;background:#000}
.store svg{width:22px;height:22px;fill:#fff}
.store small{display:block;font-size:10px;opacity:.8;font-weight:400;line-height:1.1}

/* prose (math page) */
.prose{margin:0 auto}
.prose h2{margin-top:40px;font-size:26px;border-bottom:2px solid var(--ring);padding-bottom:8px}
.prose h3{margin-top:26px;font-size:19px}
.prose p,.prose li{color:#31413a;font-size:15.5px}
.prose code{background:#eef2ee;padding:2px 6px;border-radius:5px;font-size:14px}
.prose pre{background:#0f1a14;color:#d7e6db;padding:16px;border-radius:12px;overflow-x:auto;font-size:13px;line-height:1.55}
.prose figure{margin:22px 0;text-align:center}
.prose figure svg{max-width:100%;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px}
.prose figcaption{font-size:13px;color:var(--muted);margin-top:8px}
.callout{background:#eef8f0;border-left:4px solid var(--brand);padding:14px 18px;border-radius:0 10px 10px 0;margin:18px 0}
.toc{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:16px 20px;margin-bottom:24px}
.toc a{display:block;padding:3px 0;color:var(--muted)}
.dlrow{display:flex;gap:12px;flex-wrap:wrap;margin:18px 0}
.dlrow .short{display:none}
@media(max-width:680px){
  .cmp{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}   /* широкие таблицы скроллятся по горизонтали */
  .dlrow{flex-wrap:nowrap}
  .dlrow .btn{flex:1;justify-content:center;padding:10px 8px}
  .dlrow .full{display:none}
  .dlrow .short{display:inline}
}

/* footer */
footer.site{border-top:1px solid var(--line);background:#fff;padding:34px 0;margin-top:20px}
footer.site .cols{display:grid;grid-template-columns:2fr 1fr 1fr;gap:24px}
@media(max-width:700px){footer.site .cols{grid-template-columns:1fr}}
footer.site h4{margin:0 0 10px;font-size:14px}
footer.site a{display:block;color:var(--muted);padding:3px 0;font-size:14px}
footer.site .fine{margin-top:22px;padding-top:16px;border-top:1px solid var(--line);color:var(--muted);font-size:13px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}
.dropzone{display:block;width:100%;border:2px dashed var(--ring);border-radius:14px;padding:34px;text-align:center;color:var(--muted);cursor:pointer;transition:.15s;background:#fff}
.dropzone.drag{border-color:var(--brand);background:#eef8f0}
.result-box{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:18px;margin-top:18px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;font-size:14px;margin-top:10px}
.kv b{color:var(--muted);font-weight:600}
