@import url('https://fonts.googleapis.com/css2?family=Oswald:wght@500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');

/* =====================================================================
   Интерфейс тренажёра.

   Главная идея раскладки: экран игры всегда помещается в окно целиком.
   Картинка и панель управления стоят рядом (широкий экран) или друг под
   другом (узкий). Кнопки и разборы ответов живут в панели и никогда
   не накладываются на картинку — в том числе в полноэкранном режиме,
   потому что во весь экран разворачивается вся связка «картинка + панель».
   ===================================================================== */

/* Две темы. По умолчанию светлая; тёмная включается кнопкой в шапке
   (атрибут data-theme="dark" на <html>). Меняются только цвета. */
:root{
  /* Светлая тема собрана по гамме eioknsk.ru: синий #157FC4, оранжевый #EF8C37,
     серый фон #EDEDED, белые карточки и голубая подложка #DCECF6. */
  --bg:#EDEDED; --panel:#FFFFFF; --panel2:#DCECF6; --stripe:#0F6AA6;
  --accent:#EF8C37; --accent-d:#D9762A; --accent2:#9FD7FF; --amber:#157FC4;
  --text:#1C1C1C; --dim:#6E7783; --danger:#C62B36; --ok:#2E7D4F; --line:#D3DBE2;
  --chip:#DCECF6; --btn-hover:#EDF6FC;
  --head-bg:#157FC4; --head-fg:#FFFFFF; --head-dim:rgba(255,255,255,.78);
  --head-line:#0F6AA6; --head-chip:rgba(255,255,255,.16);
  --good-bg:rgba(46,125,79,.1); --good-fg:#1E5C39; --good-ln:rgba(46,125,79,.38);
  --bad-bg:rgba(198,43,54,.08); --bad-fg:#8E1A22; --bad-ln:rgba(198,43,54,.32);
  --sel-bg:#FDF0E4;
  --shadow:0 2px 10px rgba(21,45,70,.08);
  --sans:'Manrope',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --head:'Oswald','Manrope',system-ui,sans-serif;
  --r:14px;
}
:root[data-theme="dark"]{
  --bg:#0E1327; --panel:#171F3D; --panel2:#1E2A4D; --stripe:#141A34;
  --accent:#FF6A2E; --accent-d:#E4561B; --accent2:#7A3A1E; --amber:#FFB238;
  --text:#EEF1F9; --dim:#98A2C2; --danger:#FF4D5E; --ok:#3FCB93; --line:#2A3560;
  --chip:rgba(255,255,255,.07); --btn-hover:#243059;
  --head-bg:#171F3D; --head-fg:#EEF1F9; --head-dim:#98A2C2;
  --head-line:#2A3560; --head-chip:rgba(255,255,255,.07);
  --sel-bg:rgba(255,106,46,.1);
  --good-bg:rgba(63,203,147,.1); --good-fg:#bdf1dc; --good-ln:rgba(63,203,147,.35);
  --bad-bg:rgba(255,77,94,.1); --bad-fg:#ffc9cf; --bad-ln:rgba(255,77,94,.35);
  --shadow:none;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
/* высота ровно в окно: тогда экран игры не может «вылезти» за экран,
   а прокрутка, если нужна, происходит внутри блоков */
body{background:var(--bg);color:var(--text);font-family:var(--sans);
  height:100dvh;overflow:hidden;display:flex;flex-direction:column;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) 0 env(safe-area-inset-left)}
button{font-family:inherit}
:focus-visible{outline:3px solid var(--amber);outline-offset:2px;border-radius:6px}

/* ---------- шапка и подвал ---------- */
/* Шапка — синяя полоса, как на eioknsk.ru; в тёмной теме остаётся тёмной. */
header.site{display:flex;align-items:center;gap:14px;padding:11px 20px;background:var(--head-bg);
  color:var(--head-fg);border-bottom:1px solid var(--head-line);flex:none}
.brand{display:flex;align-items:center;gap:12px;background:0;border:0;padding:0;cursor:pointer;color:inherit;text-align:left}
.brand-logo{display:block;width:42px;height:42px;flex:none}
.brand-txt b{display:block;font-family:var(--head);font-size:17px;font-weight:600;letter-spacing:.02em;line-height:1.15}
.brand-txt i{display:block;font-style:normal;font-size:12px;color:var(--head-dim);margin-top:2px}
.spacer{flex:1}
.theme-btn{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;cursor:pointer;
  background:var(--head-chip);border:1px solid var(--head-line);color:var(--head-fg);transition:.15s;flex:none}
.theme-btn:hover{border-color:var(--accent);color:var(--accent)}
.theme-btn svg{width:19px;height:19px;display:block}
.theme-btn .i-sun{display:none}
:root[data-theme="dark"] .theme-btn .i-sun{display:block}
:root[data-theme="dark"] .theme-btn .i-moon{display:none}
.tel{display:flex;align-items:center;gap:9px;text-decoration:none;color:var(--head-fg);
  border:1px solid var(--head-line);border-radius:999px;padding:5px 14px 5px 7px;background:var(--head-chip)}
.tel b{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--accent);
  color:#2c1000;font-family:var(--head);font-size:15px;font-weight:700}
.tel span{font-size:10.5px;line-height:1.25;color:var(--head-dim)}
.hz{height:4px;flex:none;background:repeating-linear-gradient(135deg,var(--accent) 0 12px,var(--stripe) 12px 24px)}
footer.site{border-top:1px solid var(--line);padding:14px 20px calc(16px + env(safe-area-inset-bottom));
  text-align:center;font-size:11.5px;color:var(--dim);flex:none;display:flex;gap:8px;justify-content:center;flex-wrap:wrap}

/* ---------- экраны ---------- */
.screen{display:none}
.screen.on{display:block;flex:1;min-height:0;overflow-y:auto}   /* прокрутка внутри экрана */
#s-game.on{display:flex;flex-direction:column;overflow:hidden}
body.in-game footer.site{display:none}                          /* в игре подвал не нужен */
.wrap{max-width:880px;margin:0 auto;padding:30px 20px 44px}

/* ---------- главный экран (как в v0.10: по центру, карточки в ряд) ---------- */
.welcome{padding:38px 0 46px;text-align:center}
.hero{text-align:center;margin-bottom:26px}
.badge{display:inline-block;font-family:var(--head);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--amber);border:1px solid var(--accent2);background:rgba(255,106,46,.08);
  padding:5px 14px;border-radius:999px;margin-bottom:18px}
.badge.ok{color:var(--ok);border-color:var(--ok);background:rgba(63,203,147,.08)}
.title{font-family:var(--head);font-size:clamp(25px,4.6vw,34px);font-weight:700;line-height:1.16;margin:0 0 14px;letter-spacing:.01em}
.lead{font-size:15px;color:var(--dim);line-height:1.6;max-width:560px;margin:0 auto 28px}
.h-sec{font-family:var(--head);font-size:12px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--dim);font-weight:600;margin:0 0 12px}

.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;max-width:660px;margin:0 auto 26px}
.card{display:flex;flex-direction:column;align-items:center;gap:0;background:var(--panel);
  border:1px solid var(--line);border-radius:var(--r);padding:18px 12px 16px;cursor:pointer;
  color:inherit;text-align:center;transition:.15s;position:relative;box-shadow:var(--shadow)}
.card:hover{border-color:var(--accent);background:var(--panel2);transform:translateY(-2px)}
.card.sel{border-color:var(--accent);background:var(--sel-bg);box-shadow:0 0 0 1px var(--accent),var(--shadow)}
.card-ic{display:grid;place-items:center;width:58px;height:58px;margin:0 auto 11px;
  border-radius:14px;background:var(--chip);border:1px solid var(--line)}
.card-ic svg{display:block;width:40px;height:40px}
.cname{font-family:var(--head);font-size:13px;font-weight:600;line-height:1.3}
.cdesc{display:block;font-size:11.5px;color:var(--dim);line-height:1.45;margin-top:6px}
.card-flag{position:absolute;top:8px;right:8px;font-size:9.5px;font-family:var(--head);letter-spacing:.06em;
  text-transform:uppercase;color:var(--dim);border:1px solid var(--line);border-radius:999px;padding:2px 7px}
.card-flag.done{color:var(--ok);border-color:var(--ok);background:var(--good-bg)}
.card-flag.soon{color:var(--amber);border-color:var(--accent2)}

.disc{text-align:left;background:var(--panel);box-shadow:var(--shadow);border:1px solid var(--line);border-left:3px solid var(--amber);
  border-radius:var(--r);padding:16px 18px;margin:0 auto 28px;max-width:580px}
.disc b{display:block;font-family:var(--head);font-size:12px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--amber);margin-bottom:8px;font-weight:600}
.disc p{font-size:13px;line-height:1.6;color:var(--dim);margin:0 0 8px}
.disc p:last-child{margin:0}

/* ---------- кнопки ---------- */
.cta{background:var(--accent);color:#2c1000;border:0;padding:14px 30px;border-radius:12px;
  font-family:var(--head);font-size:15px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;
  cursor:pointer;transition:.15s}
.cta:hover{background:#ff7b45}
.cta:active{transform:translateY(1px)}
.cta.lg{padding:16px 40px;font-size:16px}
.ghost{background:0;border:1px solid var(--line);color:var(--dim);border-radius:12px;padding:13px 22px;
  font-family:var(--head);font-size:13px;letter-spacing:.03em;text-transform:uppercase;cursor:pointer;transition:.15s}
.ghost:hover{border-color:var(--accent);color:var(--text)}
.startbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:12px;text-align:center}
.hint{flex-basis:100%;font-size:12.5px;color:var(--dim);margin-top:12px}

/* ---------- итоги ---------- */
.sum{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:18px 20px;margin:0 0 24px}
.sum ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:9px}
.sum li{position:relative;padding-left:28px;font-size:14px;line-height:1.55}
.sum li::before{content:"✓";position:absolute;left:0;top:1px;width:19px;height:19px;border-radius:50%;
  display:grid;place-items:center;font-size:11px;font-weight:700;color:var(--ok);
  background:rgba(63,203,147,.16);box-shadow:inset 0 0 0 1px rgba(63,203,147,.4)}

/* =====================================================================
   Экран игры: «картинка + панель» всегда помещается в окно
   ===================================================================== */
.gtop{flex:none;display:flex;align-items:center;gap:14px;
  max-width:1560px;width:100%;margin:0 auto;padding:12px 20px 10px}
.back{display:inline-flex;align-items:center;gap:6px;background:0;border:1px solid var(--line);
  color:var(--dim);font-size:12.5px;padding:8px 13px 8px 10px;border-radius:9px;cursor:pointer;transition:.15s}
.back svg{width:14px;height:14px}
.back:hover{border-color:var(--accent);color:var(--text)}
.gname{font-family:var(--head);font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.play{flex:1;min-height:0;display:flex;gap:14px;justify-content:center;
  max-width:1560px;width:100%;margin:0 auto;
  padding:0 20px calc(18px + env(safe-area-inset-bottom))}
.frame{flex:1 1 auto;min-width:0;min-height:0;position:relative;overflow:hidden;background:var(--bg)}
/* «Паспарту»: рамка рисуется ровно по краю картинки, а всё вокруг заливается
   цветом страницы — поэтому чёрных полей не видно при любом размере окна. */
.viewport{position:absolute;pointer-events:none;z-index:9000;border-radius:var(--r);
  box-shadow:0 0 0 1px var(--line),0 0 0 9999px var(--bg)}
.stage{position:absolute;inset:0;overflow:hidden}

.panel{flex:0 0 380px;min-width:0;box-shadow:var(--shadow);display:flex;flex-direction:column;min-height:0;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.panel-top{flex:none;display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:11px 16px;border-bottom:1px solid var(--line);background:var(--panel2)}
.step{font-family:var(--head);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim)}
.dots{display:flex;gap:6px}
.dot{width:9px;height:9px;border-radius:50%;background:var(--line);transition:.3s}
.dot.done{background:var(--ok)}
.dot.now{background:var(--accent);box-shadow:0 0 0 3px rgba(255,106,46,.2)}

.panel-body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:15px 16px 16px;
  scrollbar-width:thin;scrollbar-color:var(--line) transparent}
.panel-body::-webkit-scrollbar{width:8px}
.panel-body::-webkit-scrollbar-thumb{background:var(--line);border-radius:4px}
.panel-foot{position:relative}
/* мягкая тень над кнопкой — видно, что список ответов можно прокрутить */
.panel-foot::before{content:"";position:absolute;left:0;right:0;bottom:100%;height:20px;
  background:linear-gradient(transparent,var(--panel));pointer-events:none}
.ctitle{font-family:var(--head);font-size:17px;font-weight:600;color:var(--amber);margin:0 0 7px;line-height:1.25}
.ctext{font-size:13.5px;line-height:1.6;color:var(--text);opacity:.86;margin:0}

.ans{display:flex;flex-direction:column;gap:8px;margin-top:15px}
.btn{display:flex;gap:11px;align-items:flex-start;text-align:left;width:100%;
  background:var(--panel2);border:1px solid var(--line);color:var(--text);
  padding:11px 13px;border-radius:11px;font-family:var(--sans);font-size:13.5px;
  font-weight:500;line-height:1.45;cursor:pointer;transition:.15s}
.btn .n{flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;
  background:var(--chip);font-size:12px;font-weight:700;color:var(--dim);margin-top:-1px}
.btn:hover:not(:disabled){border-color:var(--accent);background:var(--btn-hover)}
.btn:hover:not(:disabled) .n{background:rgba(255,106,46,.25);color:var(--text)}
.btn.ok{border-color:var(--ok);background:rgba(63,203,147,.14)}
.btn.ok .n{background:var(--ok);color:#08281b}
.btn.no{border-color:var(--danger);background:rgba(255,77,94,.14)}
.btn.no .n{background:var(--danger);color:#fff}
.btn:disabled{cursor:default;opacity:.75}
.btn.ok:disabled,.btn.no:disabled{opacity:1}

.fb{margin-top:12px;padding:11px 13px;border-radius:11px;font-size:13px;line-height:1.5;display:none}
.fb.on{display:block}
.fb.good{background:var(--good-bg);border:1px solid var(--good-ln);color:var(--good-fg)}
.fb.bad{background:var(--bad-bg);border:1px solid var(--bad-ln);color:var(--bad-fg)}

.panel-foot{flex:none;padding:12px 16px 13px;
  border-top:1px solid var(--line);background:var(--panel2)}
.next{width:100%}
.next[hidden]{display:none}

/* кнопки поверх картинки: только служебные, в углу */
/* отступ отсчитывается от края самой картинки, а не пустой рамки */
.tools{position:absolute;top:calc(var(--vy,0px) + 10px);right:calc(var(--vx,0px) + 10px);z-index:9;display:flex;gap:7px}
/* Кнопки лежат поверх картинки, поэтому они всегда тёмное стекло со светлым
   текстом — в обеих темах. */
.tbtn{display:none;height:34px;padding:0 11px;border-radius:9px;background:rgba(10,14,30,.74);
  border:1px solid rgba(255,255,255,.26);color:#F2F5FF;cursor:pointer;font:600 12px var(--sans);
  backdrop-filter:blur(4px);transition:.15s}
.tbtn.on{display:block}
.tbtn.ic{display:grid;place-items:center;width:34px;padding:0}
.tbtn.ic svg{width:17px;height:17px}
.tbtn:hover{border-color:var(--accent)}

/* ---------- полноэкранный режим ----------
   Панель убирается совсем: варианты ответа дети «думают» облачками над головой,
   а внизу остаётся только разбор и одна кнопка. Полное погружение в сцену. */
#play:fullscreen{max-width:none;width:100vw;height:100vh;padding:0;gap:0;background:#000}
#play:fullscreen .panel{display:none}
#play:fullscreen .frame{border-radius:0}
#play:fullscreen .viewport{box-shadow:0 0 0 9999px #000}
#play:fullscreen .fsui{display:block}

.fsui{display:none;position:absolute;inset:var(--vy,0px) var(--vx,0px);z-index:20;pointer-events:none}
.fs-cap{position:absolute;left:0;right:0;top:0;padding:16px 26px 46px;
  background:linear-gradient(180deg,rgba(8,12,26,.92),rgba(8,12,26,.72) 55%,transparent)}
.fs-cap b{display:block;font-family:var(--head);font-size:clamp(17px,1.9vw,24px);color:var(--amber);
  letter-spacing:.02em;margin-bottom:5px}
.fs-cap p{margin:0;font-size:clamp(13px,1.25vw,17px);line-height:1.5;color:#DDE3F2;max-width:60ch}
.fs-bottom{position:absolute;left:0;right:0;bottom:0;display:flex;flex-direction:column;align-items:center;
  gap:10px;padding:56px 26px calc(20px + env(safe-area-inset-bottom));
  background:linear-gradient(0deg,rgba(8,12,26,.92),rgba(8,12,26,.6) 55%,transparent)}
.fs-bottom .fb{margin:0;max-width:min(900px,92%);font-size:clamp(14px,1.35vw,19px);line-height:1.45;
  padding:14px 20px;border-radius:14px;pointer-events:auto;backdrop-filter:blur(6px);text-align:center}
.fs-bottom .fb.good{background:rgba(20,64,48,.9);border:2px solid var(--ok);color:#d6fbec}
.fs-bottom .fb.bad{background:rgba(74,20,28,.9);border:2px solid var(--danger);color:#ffdde1}
.fs-bottom .cta{pointer-events:auto;min-width:240px}
.fs-bottom .cta[hidden]{display:none}

/* облачко-мысль с вариантом ответа: рисуется в мире сцены над ребёнком */
.think{position:absolute;transform:translate(-50%,-100%);pointer-events:auto;cursor:pointer;
  width:400px;background:#fff;color:#131a30;border:5px solid #1b2340;border-radius:30px;
  padding:18px 20px 18px 58px;font:600 27px/1.32 var(--sans);text-align:left;
  box-shadow:0 10px 22px rgba(0,0,0,.28);animation:thinkIn .28s ease-out both;
  transition:background .12s,border-color .12s,opacity .12s}
.think:hover{background:#FFF3E6;border-color:var(--accent)}
.think .n{position:absolute;left:14px;top:16px;width:32px;height:32px;border-radius:50%;
  display:grid;place-items:center;background:#e9edf7;color:#4a5578;font:700 19px var(--sans)}
.think.ok{background:#DFF7EC;border-color:#1f9e70}
.think.ok .n{background:#2FB985;color:#fff}
.think.no{background:#FFE3E6;border-color:#d03a49}
.think.no .n{background:#E04456;color:#fff}
.think.dim{opacity:.42}
@keyframes thinkIn{from{opacity:0;transform:translate(-50%,-92%) scale(.9)}to{opacity:1;transform:translate(-50%,-100%) scale(1)}}
/* единственный «хвост» облачка — цепочка кружков к своему ребёнку */
.think-dot{position:absolute;border-radius:50%;background:#fff;border:5px solid #1b2340;
  pointer-events:none;animation:thinkIn2 .28s ease-out both}
@keyframes thinkIn2{from{opacity:0}to{opacity:1}}
.think-dot.ok{background:#DFF7EC;border-color:#1f9e70}
.think-dot.no{background:#FFE3E6;border-color:#d03a49}
.think-dot.dim{opacity:.42}
/* Весь слой облачков гаснет одной прозрачностью — дёшево для браузера */
.thinks{position:absolute;inset:0;pointer-events:none;transition:opacity .26s ease-in}
.thinks .think{pointer-events:auto}
.thinks.out{opacity:0}
/* Подсветка краёв сцены при ответе.
   Раньше здесь анимировался inset box-shadow с размытием 130–200 px: браузеру
   приходилось каждый кадр заново рисовать тень на весь размер сцены, и в полном
   экране это давало провалы до полусекунды. Теперь свечение — обычный
   градиент, нарисованный один раз, а меняется только прозрачность:
   её composite делает видеокарта, перерисовки нет вообще. */
.verdict{position:absolute;inset:0;pointer-events:none;z-index:4750;opacity:0;border-radius:inherit;
  will-change:opacity;
  background:
    linear-gradient(to right,  var(--vd-b,transparent), var(--vd-a,transparent) 4%, rgba(0,0,0,0) 16%),
    linear-gradient(to left,   var(--vd-b,transparent), var(--vd-a,transparent) 4%, rgba(0,0,0,0) 16%),
    linear-gradient(to bottom, var(--vd-b,transparent), var(--vd-a,transparent) 6%, rgba(0,0,0,0) 26%),
    linear-gradient(to top,    var(--vd-b,transparent), var(--vd-a,transparent) 6%, rgba(0,0,0,0) 26%)}
.verdict.good{--vd-a:rgba(40,205,142,.5);--vd-b:rgba(24,170,114,.92);animation:verdictFade 1.7s ease-out}
.verdict.bad{--vd-a:rgba(255,62,80,.52);--vd-b:rgba(218,28,48,.94);animation:verdictPulse 1.7s ease-out}
@keyframes verdictFade{0%{opacity:0}9%{opacity:1}48%{opacity:.85}100%{opacity:0}}
@keyframes verdictPulse{0%{opacity:0}7%{opacity:1}27%{opacity:.5}47%{opacity:1}100%{opacity:0}}

/* ---------- портретный экран: картинка сверху, панель под ней ----------
   Признак — высота больше ширины. В альбомной ориентации, даже на телефоне,
   картинка и панель всегда стоят рядом: так обе помещаются по высоте. */
@media (max-aspect-ratio:1/1){
  /* кнопка «Начать тренировку» всегда под рукой, не нужно искать её прокруткой */
  .startbar{position:sticky;bottom:0;z-index:5;padding:14px 0 12px;
    background:linear-gradient(transparent,var(--bg) 40%)}
  .play{flex-direction:column;gap:10px;padding:0 12px 12px}
  .frame{flex:0 0 auto;width:100%;aspect-ratio:16/9}
  .panel{flex:1 1 auto;width:100%;max-width:none;min-width:0;min-height:0}
  .gtop{padding:10px 12px 8px}
}
/* портрет с маленькой высотой — ужимаем картинку, панель остаётся читаемой */
@media (max-aspect-ratio:1/1) and (max-height:620px){
  .frame{aspect-ratio:auto;flex:0 0 42%}
}
/* узкая альбомная (телефон боком) — панель поуже */
@media (min-aspect-ratio:1/1) and (max-width:720px){
  .play{gap:10px;padding:0 10px 10px}
  .panel{flex-basis:258px}
  .panel-body{padding:11px 12px 12px}
  .ctitle{font-size:15px}.ctext{font-size:12.5px}.btn{font-size:12.5px;padding:9px 11px}
  .gtop{padding:8px 10px 6px}
}
/* на маленьких экранах полноэкранный режим не предлагаем */
@media (max-width:880px),(max-height:520px){ #fsb{display:none} }
@media (max-width:600px){
  header.site{padding:9px 14px;gap:10px}
  .brand-logo{width:36px;height:36px}
  .brand-txt b{font-size:15px}
  .brand-txt i{display:none}
  .tel span{display:none}
  .tel{padding:4px;border-radius:50%}
  .wrap{padding:22px 14px 34px}
  .cards{grid-template-columns:1fr;gap:9px;max-width:none}
  .card{flex-direction:row;align-items:center;gap:12px;text-align:left;padding:12px 13px}
  .card-ic{margin:0}
  .card-ic svg{width:32px;height:32px}
  .card-flag{position:static;margin-left:auto;flex:none}
  .gname{display:none}
  .panel-body{padding:13px 13px 14px}
  .ctitle{font-size:16px}
  .cta.lg{width:100%}
  footer.site{padding:11px 14px calc(12px + env(safe-area-inset-bottom));font-size:11px}
}
/* мало высоты в альбомной ориентации — ужимаем шапку и верхнюю строку */
@media (min-aspect-ratio:1/1) and (max-height:520px){
  header.site{padding:5px 14px}
  .brand-logo{width:30px;height:30px}
  .brand-txt b{font-size:14px}
  .brand-txt i{display:none}
  .tel{padding:3px}.tel span{display:none}.tel b{width:28px;height:28px;font-size:13px}
  .gtop{padding:6px 10px 5px}
  .back{padding:5px 10px 5px 8px;font-size:11.5px}
  .panel-top{padding:7px 12px}
  .panel-foot{padding:8px 12px 9px}
  .cta{padding:10px 20px;font-size:13px}
}
@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* ===================== Анимационная сцена ===================== */
.stage{background:#0A0E1E}
.world{position:absolute;left:0;top:0;width:1920px;height:1080px;transform-origin:0 0;overflow:hidden}
.world .bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:none}
.layer{position:absolute;inset:0;pointer-events:none}
.layer.bubbles{z-index:3850}   /* реплики поверх всех персонажей */
.curtain{position:absolute;inset:0;background:#0A0E1E;opacity:0;transition:opacity .35s;z-index:5000;pointer-events:none}
.curtain.on{opacity:1}

/* персонажи */
.kid{position:absolute;left:0;top:0;width:0;height:0;will-change:transform}
.kid-shadow{position:absolute;left:0;top:0;border-radius:50%;background:radial-gradient(closest-side,rgba(60,45,20,.38),rgba(60,45,20,0));transform:translate(-50%,-50%)}
.kid-rig{position:absolute;left:0;top:0;width:0;height:0;transform-origin:0 0}
.kid-rig img,.kid-rig svg,.kid-body{position:absolute;left:0;top:0;display:block;overflow:visible;user-select:none;-webkit-user-drag:none}
.kid-body{width:0;height:0}
.kid-legs,.kid-arm{width:1px;height:1px}
.bubble{position:absolute;left:0;top:0;transform:translate(-50%,-100%);background:#fff;color:#1b1f33;font:700 34px/1 'Manrope',sans-serif;padding:10px 18px;border-radius:22px;border:3px solid #1b1f33;white-space:nowrap;animation:pop .25s ease-out}
.bubble::after{content:"";position:absolute;left:50%;bottom:-14px;margin-left:-8px;border:8px solid transparent;border-top:9px solid #1b1f33}
.bubble.danger{background:#FF4D5E;color:#fff}
.bubble.ok{background:#3FCB93;color:#08281b}
@keyframes pop{from{transform:translate(-50%,-80%) scale(.4);opacity:0}to{transform:translate(-50%,-100%) scale(1);opacity:1}}

/* реквизит */
.prop{position:absolute;left:0;top:0;transition:opacity .4s}
.rec{animation:blink 1s steps(2) infinite}
@keyframes blink{50%{opacity:0}}
.tag{position:absolute;transform:translate(-50%,-50%);background:#FF4D5E;color:#fff;font:700 30px/1.1 'Manrope',sans-serif;padding:12px 20px;border-radius:12px;box-shadow:0 8px 20px rgba(0,0,0,.25);animation:pop2 .3s ease-out;white-space:nowrap;z-index:4000}
.tag.ok{background:#3FCB93;color:#08281b}
@keyframes pop2{from{transform:translate(-50%,-50%) scale(.5);opacity:0}to{transform:translate(-50%,-50%) scale(1);opacity:1}}
.zone{position:absolute;border:6px solid #FF4D5E;border-radius:14px;background:rgba(255,77,94,.18);animation:zone 1s ease-in-out infinite;z-index:900}
@keyframes zone{50%{background:rgba(255,77,94,.38)}}

/* тревога */
.alarm{position:absolute;inset:0;pointer-events:none;box-shadow:inset 0 0 160px 40px rgba(255,40,40,.55);opacity:0;z-index:4500}
.alarm.on{animation:alarm 1.6s ease-in-out infinite}
@keyframes alarm{0%,100%{opacity:.15}50%{opacity:1}}
.siren-ic{position:absolute;left:24px;bottom:24px;z-index:4600;display:none;align-items:center;gap:12px;background:rgba(14,19,39,.8);color:#fff;border-radius:40px;padding:10px 22px 10px 14px;font:700 26px 'Oswald',sans-serif;letter-spacing:.04em}
.siren-ic.on{display:flex}
.siren-ic i{width:22px;height:22px;border-radius:50%;background:#FF4D5E;box-shadow:0 0 0 0 rgba(255,77,94,.8);animation:ring 1s infinite}
@keyframes ring{to{box-shadow:0 0 0 18px rgba(255,77,94,0)}}

/* push-уведомление */
.push{position:absolute;right:28px;top:280px;width:560px;background:rgba(245,247,252,.97);color:#141a2e;border-radius:28px;padding:22px 26px;z-index:4700;box-shadow:0 18px 40px rgba(0,0,0,.35);transform:translateX(640px);transition:transform .5s cubic-bezier(.2,.9,.3,1.2)}
.push.on{transform:none}
.push .ph{display:flex;align-items:center;gap:12px;font:600 22px 'Manrope',sans-serif;color:#5b6380;margin-bottom:8px}
.push .ph b{width:40px;height:40px;border-radius:10px;background:#FF6A2E;display:flex;align-items:center;justify-content:center;color:#fff;font:700 18px 'Oswald',sans-serif}
.push.ok .ph b{background:#3FCB93}
.push .pt{font:800 30px/1.15 'Manrope',sans-serif;margin-bottom:6px}
.push .px{font:500 23px/1.35 'Manrope',sans-serif;color:#33394f}
/* постоянное напоминание: откуда брать информацию при любой угрозе */
.push .pn{margin-top:14px;padding-top:13px;border-top:2px solid rgba(20,26,46,.12);
  font:500 19px/1.35 'Manrope',sans-serif;color:#5b6380}

/* квадрокоптер */
.drone{position:absolute;left:0;top:0;width:0;height:0;z-index:4200;will-change:transform}
/* Без filter: drop-shadow — иначе весь рисунок дрона вместе с крутящимися
   винтами пересчитывается каждый кадр. Тень нарисована прямо в SVG. */
.drone-in{position:absolute;left:-220px;top:-150px;width:440px;height:300px;transform-origin:220px 150px}
/* у самолётного типа своя пропорция рисунка */
.drone-in.plane{left:-217px;top:-183px;width:433px;height:366px;transform-origin:217px 183px}
.drone-in svg{display:block;width:100%;height:100%}
/* луч сканирования рисуется ниже персонажей по глубине */
.beam-host{position:absolute;left:0;top:0;width:0;height:0;z-index:400;pointer-events:none}
.beam{position:absolute;left:0;top:0;width:0;height:0;opacity:0;transition:opacity .5s;
 transform-origin:0 0;pointer-events:none}
.beam.on{opacity:1}
.beam svg{transform-origin:0 0}
.beam.on svg{animation:scanSweep 4.2s ease-in-out infinite alternate}
@keyframes scanSweep{from{transform:rotate(-26deg)}to{transform:rotate(26deg)}}
@media (prefers-reduced-motion:reduce){.beam.on svg{animation:none}}

/* вспышка и тряска от прилёта вдалеке */
.flash{position:absolute;inset:0;background:#fff6e0;opacity:0;pointer-events:none;z-index:4800;transition:opacity .45s ease-out}
.flash.on{opacity:.85;transition:opacity .05s}
.blast-glow{position:absolute;width:960px;height:960px;margin:-480px;border-radius:50%;pointer-events:none;
 background:radial-gradient(closest-side,rgba(255,224,150,.95),rgba(255,150,60,.7) 32%,rgba(220,90,40,.32) 60%,rgba(200,80,40,0));
 will-change:transform,opacity;animation:blastGlow 1.4s cubic-bezier(.1,.7,.3,1) forwards}
.blast-core{position:absolute;width:430px;height:430px;margin:-215px;border-radius:50%;pointer-events:none;
 background:radial-gradient(closest-side,#fff,rgba(255,235,170,.9) 55%,rgba(255,190,90,0));
 will-change:transform,opacity;animation:blastCore .55s ease-out forwards}
@keyframes blastGlow{0%{transform:scale(.22);opacity:1}55%{opacity:.85}100%{transform:scale(1.62);opacity:0}}
@keyframes blastCore{0%{transform:scale(.2);opacity:1}100%{transform:scale(1.1);opacity:0}}
.stage.shaking{will-change:transform;animation:stageShake .9s cubic-bezier(.36,.07,.19,.97)}
/* небольшой зум, чтобы при сдвиге не открывались края кадра */
@keyframes stageShake{
 0%,100%{transform:scale(1.025) translate(0,0)}
 8%{transform:scale(1.025) translate(-9px,5px)}18%{transform:scale(1.025) translate(8px,-6px)}
 28%{transform:scale(1.025) translate(-7px,-4px)}40%{transform:scale(1.025) translate(6px,5px)}
 54%{transform:scale(1.025) translate(-4px,-3px)}70%{transform:scale(1.025) translate(3px,2px)}
 85%{transform:scale(1.025) translate(-2px,1px)}}
@media (prefers-reduced-motion:reduce){.stage.shaking{animation:none}.blast-glow{animation-duration:.1s}}

/* телевизор: экран мерцает, когда идёт эфир */
.tv-on .tv-screen{fill:#17324e}
.tv-on .tv-scan{transform-box:fill-box;animation:tvScan 2.4s linear infinite}
@keyframes tvScan{from{transform:translateY(-100%)}to{transform:translateY(100%)}}

/* СМС-оповещение */
.sms{position:absolute;right:28px;top:600px;width:470px;background:#1d2440;color:#eef1f9;border:2px solid #3a4470;
 border-radius:22px;padding:18px 22px;z-index:4700;box-shadow:0 18px 40px rgba(0,0,0,.35);
 transform:translateX(600px);transition:transform .5s cubic-bezier(.2,.9,.3,1.2)}
.sms.on{transform:none}
.sms .sh{font:700 20px 'Oswald',sans-serif;letter-spacing:.06em;color:#8fa0d6;margin-bottom:6px}
.sms .st{font:500 23px/1.35 'Manrope',sans-serif}

/* дым от повреждённого БПЛА */
.puff{position:absolute;width:var(--sz);height:var(--sz);margin:calc(var(--sz) / -2);border-radius:50%;
 background:radial-gradient(closest-side,rgba(110,118,130,.85),rgba(110,118,130,0));
 will-change:transform,opacity;animation:puff 1.6s ease-out forwards;pointer-events:none;z-index:4400}
@keyframes puff{from{transform:translate(0,0) scale(.3);opacity:.9}
 to{transform:translate(var(--dx),-120px) scale(2.2);opacity:0}}
/* дым от прилёта — темнее и выше */
.puff.dark{background:radial-gradient(closest-side,rgba(62,66,74,.92),rgba(62,66,74,0));animation-duration:2.4s;animation-name:puffDark}
@keyframes puffDark{from{transform:translate(0,0) scale(.35);opacity:.95}
 to{transform:translate(var(--dx),-230px) scale(3);opacity:0}}

/* кнопки поверх кадра */
.tools{position:absolute;top:12px;right:12px;z-index:9;display:flex;gap:8px}
.tools .fsbtn{position:static}
.skip{display:none;height:38px;padding:0 12px;border-radius:9px;background:rgba(14,19,39,.72);border:1px solid var(--line);color:var(--text);cursor:pointer;font:600 12.5px 'Manrope',sans-serif}
.skip.on{display:block}.skip:hover{border-color:var(--accent)}
@media (prefers-reduced-motion:reduce){.alarm.on{animation:none;opacity:.5}}

/* ===================== Дополнительные эффекты ===================== */
/* Двор реагирует: гаснет свет, задёргиваются шторы */
.win-out{position:absolute;left:0;top:0}
.win-curtain{position:absolute;left:0;top:0;background:#3c4a63;opacity:0;transform:scaleY(0);transform-origin:top;
 transition:transform .55s cubic-bezier(.3,.8,.4,1),opacity .35s}
.win-curtain.on{opacity:.88;transform:scaleY(1)}

/* Кадр с камеры беспилотника */
.dcam{position:absolute;left:0;top:0;width:1920px;height:1080px;pointer-events:none;
 font-family:'Manrope',monospace;color:#7CFFB2;animation:dcamIn .3s ease-out}
.dcam.off{animation:dcamOut .4s ease-in forwards}
@keyframes dcamIn{from{opacity:0}to{opacity:1}}
@keyframes dcamOut{to{opacity:0}}
.dcam-grain{position:absolute;inset:0;background:
 repeating-linear-gradient(0deg,rgba(0,0,0,.28) 0 2px,rgba(0,0,0,0) 2px 5px),
 radial-gradient(ellipse at center,rgba(0,0,0,0) 45%,rgba(0,10,4,.72) 100%);
 mix-blend-mode:multiply}
.dcam-frame{position:absolute;inset:26px;border:3px solid rgba(124,255,178,.5);border-radius:4px;
 box-shadow:inset 0 0 60px rgba(124,255,178,.12)}
.dcam-hud{position:absolute;font-size:26px;font-weight:700;letter-spacing:.06em;text-shadow:0 2px 6px rgba(0,0,0,.6)}
.dcam-tl{left:52px;top:48px;display:flex;align-items:center;gap:12px}
.dcam-tl i{width:18px;height:18px;border-radius:50%;background:#FF3B30;animation:blink 1s steps(2) infinite}
.dcam-tr{right:52px;top:48px}.dcam-bl{left:52px;bottom:48px}.dcam-br{right:52px;bottom:48px;color:#FF6A5E}
.dcam-target{position:absolute;transform:translate(-50%,0);border:0}
.dcam-target b,.dcam-target i,.dcam-target u,.dcam-target s{position:absolute;width:52px;height:52px;border:5px solid #FF3B30}
.dcam-target b{left:0;top:0;border-right:0;border-bottom:0}
.dcam-target i{right:0;top:0;border-left:0;border-bottom:0}
.dcam-target u{left:0;bottom:0;border-right:0;border-top:0}
.dcam-target s{right:0;bottom:0;border-left:0;border-top:0}
.dcam-cross{position:absolute;width:120px;height:120px;margin:-60px 0 0 -60px;
 background:linear-gradient(#FF3B30,#FF3B30) center/3px 100% no-repeat,
            linear-gradient(#FF3B30,#FF3B30) center/100% 3px no-repeat;opacity:.85;
 animation:dcamPulse 1.1s ease-in-out infinite}
@keyframes dcamPulse{50%{transform:scale(1.15);opacity:.5}}
@media (prefers-reduced-motion:reduce){.dcam-cross,.dcam-tl i{animation:none}}
