/* miniapp/base/base.css — игровой экран «База» над главным экраном (miniapp/base/game.js).
   Ровно одна высота окна (100dvh), отступы под чёлку/панели (env(safe-area-inset-*)) и под
   элементы Telegram в полноэкранном режиме (--tg-*-safe-area-inset-*, их ставит telegram-web-app.js).
   Кнопки и плашки — «дымчатое стекло» поверх города: тёмная полупрозрачная подложка с размытием,
   тонкий светлый кант, мягкая тень. Раньше были кремовые пилюли с обводкой 3px и жёсткой нижней
   тенью — владелец: «выглядит дёшево». Главное действие «+ Доход» — оранжевая эмаль. */
/* игра шире колонки body (100vw) — горизонтальную прокрутку гасим на html: overflow на body
   обрезал бы саму игру по краям колонки */
html{scroll-snap-type:y proximity;overflow-x:clip}

.game{
  --g-top:calc(max(env(safe-area-inset-top),var(--tg-safe-area-inset-top,0px)) + var(--tg-content-safe-area-inset-top,0px));
  --g-bottom:calc(max(env(safe-area-inset-bottom),var(--tg-safe-area-inset-bottom,0px)) + var(--tg-content-safe-area-inset-bottom,0px));
  --g-left:max(env(safe-area-inset-left),var(--tg-safe-area-inset-left,0px));
  --g-right:max(env(safe-area-inset-right),var(--tg-safe-area-inset-right,0px));
  --g-ink:#3a2c17;--g-cream:#fff8e8;--g-cream2:#f3e3bd;--g-accent:#ff9f1c;--g-accent2:#f07b00;
  /* стекло кнопок: подложка, кант, блик сверху, тень */
  --g-glass:rgba(26,23,19,.56);--g-glass-hi:rgba(26,23,19,.7);--g-edge:rgba(255,255,255,.16);
  --g-shine:inset 0 1px 0 rgba(255,255,255,.14);--g-drop:0 10px 24px -8px rgba(0,0,0,.45),0 2px 6px rgba(0,0,0,.18);
  --g-blur:blur(16px) saturate(160%);
  /* светлая карточка снизу */
  --g-sheet:rgba(255,251,243,.97);--g-sheet-ink:#2a2219;--g-sheet-mut:rgba(42,34,25,.66);--g-sheet-line:rgba(42,34,25,.1);
  --g-ink-rgb:42,34,25;--g-field:#fff;   /* чернила карточки для rgba(var(--g-ink-rgb),…) и поле ввода в ней */
  --g-tag-bg:rgba(255,251,243,.93);--g-tag-edge:rgba(255,255,255,.7);   /* подписи зданий */
  /* 100vw включает полосу прокрутки браузера (Opera, Chrome на Windows): игра была шире видимой области и
     уезжала влево — слева кнопки почти у края, справа отступ больше (владелец 06.10, снимок). --sbw — ширина
     полосы, её ставит common.js */
  position:relative;width:calc(100vw - var(--sbw,0px));margin-left:calc(50% - 50vw + var(--sbw,0px) / 2);
  height:100vh;height:100dvh;overflow:hidden;scroll-snap-align:start;
  background:radial-gradient(120% 80% at 50% 45%,#8fd36a 0%,#5fb548 55%,#3f8f38 100%);
  font-family:'Unbounded',system-ui,sans-serif;color:var(--g-ink);user-select:none;-webkit-user-select:none}

/* карта: жесты управляют камерой, прокрутка страницы на ней не срабатывает */
.g-map{position:absolute;inset:0;touch-action:none;overflow:hidden}
.g-map-empty{position:absolute;inset:0;display:grid;place-items:center;color:var(--g-ink);
  font-size:14px;text-align:center;padding:24px}

/* пилюли сверху */
.g-top{position:absolute;z-index:5;top:calc(var(--g-top) + 10px);left:calc(var(--g-left) + 10px);
  right:calc(var(--g-right) + 10px);display:flex;gap:10px;align-items:center}
.g-pill{display:flex;align-items:center;gap:7px;min-width:0;height:40px;padding:0 13px 0 5px;color:#fff;
  background:var(--g-glass);-webkit-backdrop-filter:var(--g-blur);backdrop-filter:var(--g-blur);
  border:1px solid var(--g-edge);border-radius:12px;box-shadow:var(--g-shine),var(--g-drop)}
/* Все стеклянные кнопки игры — квадраты со скруглением ≈30% стороны (владелец 06.10: «где-то круги, где-то
   квадраты, разного размера»): верхний ряд — 40 (пилюли, шестерёнка), «к моему делу» — 40, колонка слева — 60,
   значки в пилюлях — плашки 30 (ui-icons.js) */
.g-pill .i{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;font-size:15px;
  background:rgba(255,255,255,.12);flex:none}
.g-pill b{font-size:14.5px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;letter-spacing:-.01em}
.g-pill small{font-size:10px;font-weight:500;color:rgba(255,255,255,.7);white-space:nowrap}
.g-pill .t{display:flex;flex-direction:column;line-height:1.05;min-width:0}
.g-spacer{flex:1}

/* круглые кнопки (настройки, разделы) */
.g-round{width:50px;height:50px;border-radius:15px;flex:none;display:grid;place-items:center;cursor:pointer;
  font-size:21px;color:#fff;text-decoration:none;
  background:var(--g-glass);-webkit-backdrop-filter:var(--g-blur);backdrop-filter:var(--g-blur);
  border:1px solid var(--g-edge);box-shadow:var(--g-shine),var(--g-drop);
  transition:transform .16s cubic-bezier(.2,.8,.2,1),background .2s ease}
.g-round:hover{background:var(--g-glass-hi)}
.g-round:active{transform:scale(.94)}

/* слева — таймеры сроков */
/* Шаг интерфейса игры — 10 px: от краёв экрана, между кнопками и между группами (владелец 06.10:
   «чтобы все были на одинаковом расстоянии»). Верхний ряд — 10 + 40, колонка слева и карта справа — с 60 */
.g-left{position:absolute;z-index:5;top:calc(var(--g-top) + 60px);left:calc(var(--g-left) + 10px);
  display:flex;flex-direction:column;gap:10px}
.g-timer{width:60px;height:60px;border-radius:18px;display:flex;flex-direction:column;align-items:center;
  justify-content:center;text-align:center;cursor:pointer;text-decoration:none;color:#fff;
  background:var(--g-glass);-webkit-backdrop-filter:var(--g-blur);backdrop-filter:var(--g-blur);
  border:1px solid var(--g-edge);box-shadow:var(--g-shine),var(--g-drop);transition:transform .16s cubic-bezier(.2,.8,.2,1)}
.g-timer:active{transform:scale(.94)}
/* Низкий экран (iPhone SE и меньше): шесть кнопок по 60 не помещались до ряда разделов — нижняя пряталась под
   него. Кнопки поменьше, шаг тот же 10 px: 60 + 6×52 + 5×10 = 422 — над рядом даже при высоте 568 */
@media(max-height:620px){.g-timer{width:52px;height:52px;border-radius:16px}.g-timer b{font-size:17px}.g-timer small{font-size:8.5px;margin-top:3px}}
/* «Ещё» — свёрнутые редкие кружки (base/game.js MORE_HTML) */
.g-more{position:relative}
.g-more-dots{font-size:15px;letter-spacing:1px;line-height:1}
.g-more.open{background:rgba(255,255,255,.22)}
.g-left-more{display:flex;flex-direction:column;gap:10px}
.g-left-more[hidden]{display:none}
.g-timer b{font-size:19px;font-weight:600;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.g-timer small{font-size:9px;font-weight:500;margin-top:4px;color:rgba(255,255,255,.72);line-height:1.1;padding:0 4px}
/* срок близко — янтарный кант и тёплая подложка, без крика */
.g-timer.soon{background:rgba(92,56,12,.62);border-color:rgba(255,184,77,.7);box-shadow:var(--g-shine),var(--g-drop),0 0 0 3px rgba(255,159,28,.18)}
.g-timer.soon b{color:#ffcf7a}

/* снизу — главное действие (справа, над рядом) и ряд разделов */
.g-bottom{position:absolute;z-index:5;left:calc(var(--g-left) + 10px);right:calc(var(--g-right) + 10px);
  bottom:calc(var(--g-bottom) + 52px);display:flex;flex-direction:column;align-items:flex-end;gap:10px}   /* 52 = 10 + «Сводка» 32 + 10 */
/* Ряд разделов — плотной группой по центру (владелец 06.10: «плотнее, но чуть больше пространства», чем
   квадраты через 10): ячейка 64 + шаг 10 → между плашками ~24 px. Раньше растягивался на всю ширину */
.g-nav{display:flex;gap:10px;justify-content:center;width:100%}
.g-nav a{flex:none;width:64px;display:flex;flex-direction:column;align-items:center;gap:4px;text-decoration:none;color:#fff;
  font-size:10px;font-weight:600;letter-spacing:.01em;text-shadow:0 1px 3px rgba(0,0,0,.6),0 0 12px rgba(0,0,0,.35)}
/* подсказка новичку над «+ Доход» — в стиле пилюль HUD, хвостик смотрит на кнопку */
.g-hint{position:relative;max-width:230px;padding:11px 14px;border-radius:14px;font-size:12.5px;font-weight:500;
  line-height:1.4;color:var(--g-sheet-ink);background:var(--g-sheet);border:1px solid var(--g-sheet-line);
  box-shadow:var(--g-drop);animation:g-hint-bob 2.4s ease-in-out infinite}
.g-hint::after{content:'';position:absolute;right:34px;bottom:-6px;width:12px;height:12px;background:var(--g-sheet);
  border-right:1px solid var(--g-sheet-line);border-bottom:1px solid var(--g-sheet-line);transform:rotate(45deg)}
@keyframes g-hint-bob{50%{transform:translateY(-4px)}}
@media(prefers-reduced-motion:reduce){.g-hint{animation:none}}
.g-fab{height:60px;padding:0 24px 0 10px;border-radius:18px;cursor:pointer;display:flex;
  align-items:center;gap:11px;font-family:inherit;font-size:15.5px;font-weight:600;color:#fff;letter-spacing:-.01em;
  background:linear-gradient(180deg,#ffae45 0%,#fb8a12 55%,#ec6f00 100%);border:0;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.45),inset 0 -2px 6px rgba(150,60,0,.25),
    0 14px 28px -10px rgba(214,98,0,.75),0 3px 8px rgba(0,0,0,.2);
  text-shadow:0 1px 1px rgba(120,50,0,.35);transition:transform .16s cubic-bezier(.2,.8,.2,1),filter .2s ease}
.g-fab:hover{filter:brightness(1.05)}
.g-fab .plus{width:40px;height:40px;border-radius:12px;background:rgba(255,255,255,.22);display:grid;place-items:center;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.35)}
.g-fab .plus svg{display:block}
.g-fab:active{transform:scale(.96)}
/* Стройка: «Следующий шаг · Сколько брать» — две строки, название шага может быть длинным */
.g-fab-step{padding-right:18px;max-width:min(300px,calc(100vw - 32px))}
.g-fab-step .lbl{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15;text-align:left;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.g-fab-step .lbl small{font-size:11px;font-weight:500;opacity:.88;letter-spacing:0}
/* Стройка: «Следующий шаг» и ряд разделов — одна колонка по центру одной ширины (4 × 64 + 3 × 18 = 310).
   В обычном режиме «+ Доход» по-прежнему справа над рядом */
.g-bottom-start{align-items:center;--g-dock-w:310px}
.g-bottom-start .g-nav{gap:18px;width:var(--g-dock-w)}
.g-bottom-start .g-fab-step{width:var(--g-dock-w);max-width:calc(100vw - 32px)}
@media(max-width:360px){.g-bottom-start{--g-dock-w:286px}.g-bottom-start .g-nav{gap:10px}}

/* ручка к сводке: свайп вверх по ней прокручивает страницу (touch-action разрешает), тап — тоже */
.g-handle{position:absolute;z-index:6;left:50%;transform:translateX(-50%);bottom:calc(var(--g-bottom) + 10px);
  touch-action:pan-y;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 22px 4px;
  border:1px solid var(--g-edge);background:var(--g-glass);color:#fff;border-radius:12px;cursor:pointer;
  font-family:inherit;font-size:11px;font-weight:600;-webkit-backdrop-filter:var(--g-blur);backdrop-filter:var(--g-blur);
  box-shadow:var(--g-shine)}
.g-handle .bar{width:34px;height:4px;border-radius:2px;background:rgba(255,255,255,.8)}

/* узкий экран: в плашках только значок и число (подписи не влезают в широкий шрифт) */
@media(max-width:560px){.g-pill small{display:none}.g-pill{padding-right:10px}.g-pill b{font-size:14px}}
.g-top .g-round{width:40px;height:40px;border-radius:12px}   /* шестерёнка — высотой с пилюли */
@media(max-width:360px){.g-nav .g-round{width:44px;height:44px;font-size:19px}.g-nav a{font-size:9px}.g-nav .ui-tile{--s:44px!important}}
/* ряд разделов — плашки как иконки приложений на «доке» iOS: над городом им нужна тень поглубже */
.g-nav .ui-tile{box-shadow:inset 0 0 0 .5px rgba(0,0,0,.18),inset 0 1px 0 rgba(255,255,255,.32),0 6px 14px -4px rgba(0,0,0,.55);
  transition:transform .16s cubic-bezier(.2,.8,.2,1)}
.g-nav a:active .ui-tile{transform:scale(.92)}
@media(prefers-reduced-motion:reduce){.g-nav .ui-tile{transition:none}}
@media(prefers-reduced-transparency:reduce){.g-pill,.g-round,.g-timer,.g-handle,.g-home3d{background:rgba(26,23,19,.9);
  -webkit-backdrop-filter:none;backdrop-filter:none}}
/* центрируем полями, а не transform: анимация появления (g-in) сбрасывает transform в конце */
@media(min-width:900px){.g-bottom{left:0;right:0;margin:0 auto;width:min(560px,90vw)}}
@media(prefers-reduced-motion:reduce){.g-round,.g-fab,.g-timer{transition:none}}

/* слой карты — его двигает камера (translate + scale от левого верхнего угла) */
.g-world{position:absolute;left:0;top:0;transform-origin:0 0}
.g-svg{display:block;overflow:visible}
.g-plot{cursor:pointer;outline:none}
.g-plot:focus-visible polygon:first-of-type{stroke:#fff;stroke-width:5}

/* лёгкая жизнь на карте: деревья и флажки покачиваются, луч маяка мерцает */
@keyframes g-sway{0%,100%{transform:rotate(-2.5deg)}50%{transform:rotate(2.5deg)}}
.g-sway{animation:g-sway 4.5s ease-in-out infinite}
@media(prefers-reduced-motion:reduce){.g-sway{animation:none}}

/* карточка здания — выезжает снизу поверх кнопок */
.g-card{position:absolute;z-index:8;left:calc(var(--g-left) + 10px);right:calc(var(--g-right) + 10px);
  bottom:calc(var(--g-bottom) + 10px);max-width:520px;margin:0 auto;padding:18px 18px 16px;color:var(--g-sheet-ink);
  background:var(--g-sheet);border:1px solid rgba(255,255,255,.6);border-radius:24px;
  box-shadow:0 24px 60px -18px rgba(0,0,0,.55),0 4px 14px rgba(0,0,0,.14);
  animation:g-card-in .34s cubic-bezier(.2,.8,.2,1) both}
.g-card[hidden]{display:none}
@keyframes g-card-in{from{transform:translateY(18px);opacity:0}to{transform:none;opacity:1}}
.g-card-x{position:absolute;top:10px;right:10px;width:36px;height:36px;border-radius:50%;border:0;display:grid;place-items:center;
  background:rgba(var(--g-ink-rgb),.07);color:var(--g-sheet-ink);cursor:pointer;padding:0;transition:background .2s ease}
.g-card-x:hover{background:rgba(var(--g-ink-rgb),.12)}
.g-card-x svg{display:block}
.g-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding-right:40px}
.g-card-name{font-size:18px;font-weight:600;letter-spacing:-.02em;line-height:1.2}
.g-card-lvl{font-size:11px;font-weight:500;letter-spacing:.02em;color:var(--g-sheet-mut);white-space:nowrap;padding-top:5px}
.g-pips{display:flex;gap:4px;margin-top:6px}
.g-pips i{width:22px;height:6px;border-radius:3px;background:rgba(var(--g-ink-rgb),.12)}
.g-pips i.on{background:var(--g-accent)}
.g-card-now{font-size:13.5px;line-height:1.55;margin-top:10px;font-weight:400}
.g-card-next{font-size:12.5px;line-height:1.5;margin-top:10px;color:var(--g-sheet-mut)}
.g-card-decor{margin-top:14px;border-top:1px solid var(--g-sheet-line);padding-top:12px}
.g-card-decor-h{font-size:12.5px;font-weight:600;margin-bottom:6px}
.g-card-decor-i{display:flex;align-items:baseline;gap:6px;font-size:13px;font-weight:500;padding:3px 0;opacity:.6}
.g-card-decor-i.on{opacity:1}
.g-card-decor-i b{width:14px;flex:none;color:#2f7a3a}
.g-card-decor-i small{margin-left:auto;font-size:11.5px;font-weight:500;text-align:right}
.g-card-next.max{font-weight:600;color:var(--g-sheet-ink)}
.g-bar{height:6px;border-radius:3px;background:rgba(var(--g-ink-rgb),.1);margin-top:8px;overflow:hidden}
.g-bar div{height:100%;border-radius:3px;background:linear-gradient(90deg,#7cc85a,#3f9e3a)}
/* главное действие в карточке — та же оранжевая эмаль, что «+ Доход» */
.g-card-go{margin-top:16px;width:100%;min-height:48px;border-radius:14px;cursor:pointer;border:0;
  font:600 14px 'Unbounded',system-ui,sans-serif;color:#fff;text-shadow:0 1px 1px rgba(120,50,0,.3);
  background:linear-gradient(180deg,#ffae45 0%,#fb8a12 55%,#ec6f00 100%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.4),0 10px 20px -10px rgba(214,98,0,.8);
  transition:transform .16s cubic-bezier(.2,.8,.2,1),filter .2s ease}
.g-card-go:hover{filter:brightness(1.05)}
.g-card-go:active{transform:scale(.98)}
@media(prefers-reduced-motion:reduce){.g-card{animation:none}}

/* пока грузится / если не загрузилось */
.g-status{position:absolute;inset:0;display:grid;place-items:center;color:var(--g-ink);font-size:15px;font-weight:600;
  text-shadow:0 1px 0 rgba(255,255,255,.45);padding:24px;text-align:center}
/* HUD мягко появляется */
@keyframes g-in{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
.g-top,.g-left{animation:g-in .35s ease-out both}
.g-bottom{animation:g-in .35s .08s ease-out both}
/* игра не на экране — анимации на паузе (base/game.js pauseWhenHidden) */
.g-paused .g-sway{animation-play-state:paused}
@media(prefers-reduced-motion:reduce){.g-top,.g-left,.g-bottom{animation:none}}

/* граница игры и ленты: скругление, тень и отступ — чтобы игра не «слипалась» со сводкой */
.game{border-radius:0 0 28px 28px;box-shadow:0 10px 28px -8px rgba(40,60,20,.45)}
.game + #app{padding-top:22px}

/* огни на радиовышке мигают */
@keyframes g-blink{0%,60%,100%{opacity:1}75%{opacity:.25}}
.g-blink{animation:g-blink 2.4s ease-in-out infinite}
.g-paused .g-blink{animation-play-state:paused}
@media(prefers-reduced-motion:reduce){.g-blink{animation:none}}

/* 3D-Base: плашки с названиями над зданиями (base3d/plots.js) — сразу видно, где что */
.g-tags{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.g-tag{position:absolute;left:0;top:0;pointer-events:auto;display:flex;flex-direction:column;align-items:center;
  padding:5px 11px 6px;border-radius:11px;border:1px solid var(--g-tag-edge);background:var(--g-tag-bg);
  color:var(--g-sheet-ink,#2a2219);font:inherit;line-height:1.1;box-shadow:0 6px 16px -6px rgba(0,0,0,.45),0 1px 3px rgba(0,0,0,.15);
  cursor:pointer;white-space:nowrap;transform-origin:50% 100%;transition:opacity .22s ease,scale .22s ease}
/* Под кнопкой игры плашка плавно тает и сжимается к своей точке (plots.js labels) — не исчезает рывком */
.g-tag.g-tag-off{opacity:0;scale:.7;pointer-events:none}
@media(prefers-reduced-motion:reduce){.g-tag{transition:none}}
.g-tag b{font-size:12px;font-weight:600;letter-spacing:-.01em}
.g-tag small{font-size:9.5px;font-weight:500;color:rgba(var(--g-ink-rgb),.62)}
/* Всплывающая надпись над зданием (base3d/view.js floatText): доход, «налог уплачен», рост */
.g-float{position:absolute;left:0;top:0;z-index:3;pointer-events:none;padding:8px 16px 9px;border-radius:16px;color:#fff;
  font-weight:600;font-size:17px;letter-spacing:-.01em;max-width:calc(100% - 24px);width:max-content;text-align:center;line-height:1.25;
  text-shadow:0 1px 2px rgba(0,0,0,.3);opacity:0;   /* длинная — в две строки */
  background:linear-gradient(180deg,rgba(255,255,255,.14),rgba(255,255,255,.02) 55%),rgba(26,23,19,.58);
  -webkit-backdrop-filter:blur(18px) saturate(170%);backdrop-filter:blur(18px) saturate(170%);
  border:1px solid rgba(255,255,255,.2);box-shadow:inset 0 1px 0 rgba(255,255,255,.28),inset 0 -1px 0 rgba(255,255,255,.06),0 14px 34px -12px rgba(0,0,0,.5)}
/* жидкое стекло (05.10): цвет смысла — в тексте и кромке, а не в заливке */
.g-float.gain{color:#ffd65a;border-color:rgba(255,214,90,.55)}
.g-float.ok{color:#bff0a0;border-color:rgba(160,230,130,.5)}
.g-float.grow{color:#ffc46b;border-color:rgba(255,190,92,.55);font-size:19px}
.g-tag::after{content:"";position:absolute;bottom:-6px;left:50%;margin-left:-6px;border:6px solid transparent;
  border-top-color:var(--g-tag-bg);border-bottom:0}
.g-tag em{font-style:normal;font-size:9.5px;font-weight:800;color:#fff;background:#e5533d;border-radius:8px;
  padding:1px 6px;margin-top:2px}
.g-tag.alert{border-color:rgba(229,83,61,.8);animation:g-tag-pulse 1.8s ease-in-out infinite}
@keyframes g-tag-pulse{0%,100%{box-shadow:0 6px 16px -6px rgba(0,0,0,.45),0 0 0 0 rgba(229,83,61,.35)}
  50%{box-shadow:0 6px 16px -6px rgba(0,0,0,.45),0 0 0 6px rgba(229,83,61,0)}}
@media(prefers-reduced-motion:reduce){.g-tag.alert{animation:none}}
/* 3D-Base: мини-карта и кнопка «к моему делу» (base3d/minimap.js, view.js) */
.g-mini{position:absolute;z-index:4;top:calc(var(--g-top,0px) + 60px);right:calc(var(--g-right,0px) + 10px);
  width:100px;height:100px;padding:5px;cursor:pointer;border-radius:24px;
  background:var(--g-glass);-webkit-backdrop-filter:var(--g-blur);backdrop-filter:var(--g-blur);
  border:1px solid var(--g-edge);box-shadow:var(--g-shine),var(--g-drop);transition:transform .16s cubic-bezier(.2,.8,.2,1)}
.g-mini:active{transform:scale(.96)}
.g-mini svg{display:block;width:88px;height:88px;border-radius:19px}   /* окно карты: скругление плашки минус отступ */
.g-mini-green{fill:#6e9c4f}
.g-mini-town{fill:#dde0d0}
.g-mini-land{fill:#93c46b}
.g-mini-road line{stroke:#6b7179;stroke-width:2.2;stroke-linecap:round}
.g-mini-marks rect{stroke:#fff;stroke-width:1.4}
.g-mini-pulse{fill:none;stroke:#e5533d!important;transform-box:fill-box;transform-origin:center;animation:g-mini-pulse 2.4s ease-out infinite}
@keyframes g-mini-pulse{from{transform:scale(1);opacity:.9}to{transform:scale(2.6);opacity:0}}
@media(prefers-reduced-motion:reduce){.g-mini-pulse{animation:none;opacity:0}}
.g-mini-view{fill:rgba(255,255,255,.2);stroke:#fff;stroke-width:1.5}
.g-home3d{position:absolute;z-index:4;top:calc(var(--g-top,0px) + 170px);   /* под картой: 60 + 100 + 10 */right:calc(var(--g-right,0px) + 10px);
  width:40px;height:40px;border-radius:12px;border:1px solid var(--g-edge,rgba(255,255,255,.16));
  background:var(--g-glass,rgba(26,23,19,.56));-webkit-backdrop-filter:blur(16px) saturate(160%);backdrop-filter:blur(16px) saturate(160%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.14),0 10px 24px -8px rgba(0,0,0,.45);display:grid;place-items:center;cursor:pointer;padding:0}

/* Тёмная тема (как ui.css): карточки игры — тёплый графит вместо кремовой бумаги (владелец 06.10: «панели белыми
   остались»). Газета «Вестник Базы» — бумажная, остаётся светлой (gazette.css своими цветами) */
[data-theme=dark] .game{--g-sheet:rgba(30,29,27,.97);--g-sheet-ink:#f1eee8;--g-sheet-mut:rgba(241,238,232,.66);--g-sheet-line:rgba(241,238,232,.12);
  --g-ink-rgb:241,238,232;--g-field:#2a2825;--g-tag-bg:rgba(30,29,27,.92);--g-tag-edge:rgba(255,255,255,.14)}

/* Слабое устройство или лёгкий режим (base3d/view.js lowFx): стекло без размытия города — плотнее, выглядит почти
   так же, а видеокарте не нужно каждый кадр пересчитывать размытие под каждой кнопкой и панелью */
.g-lowfx .game *,.g-lowfx .hs,.g-lowfx .hs-dock,.g-lowfx .hs-tab{-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
.g-lowfx .game{--g-glass:rgba(26,23,19,.82);--g-glass-hi:rgba(26,23,19,.9)}
.g-lowfx .hs,.g-lowfx .hs-dock,.g-lowfx .hs-tab{background:rgba(26,23,19,.9)!important}
