/* IKI — сайт v3, «жидкая библиотека».
   Монохром — решение бренда, а не настроение: чёрный, белый и серые. Фото и
   экраны приложения тоже серые. Глубину дают стекло, свет и движение, а не цвет.
   ONY One — всё; IBM Plex Mono — пути к файлам (файл = владение);
   системный шрифт — только внутри макетов приложения, чтобы экран на сайте
   выглядел ровно как экран на iPhone. */

@font-face { font-family: "ONY One"; src: url("../fonts/onyone-thin.woff2") format("woff2"); font-weight: 100; font-display: swap; }
@font-face { font-family: "ONY One"; src: url("../fonts/onyone-light.woff2") format("woff2"); font-weight: 300; font-display: swap; }
@font-face { font-family: "ONY One"; src: url("../fonts/onyone-regular.woff2") format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "ONY One"; src: url("../fonts/onyone-medium.woff2") format("woff2"); font-weight: 500; font-display: swap; }
@font-face { font-family: "ONY One"; src: url("../fonts/onyone-bold.woff2") format("woff2"); font-weight: 700; font-display: swap; }
@font-face { font-family: "ONY One"; src: url("../fonts/onyone-black.woff2") format("woff2"); font-weight: 900; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url("../fonts/plexmono-latin.woff2") format("woff2"); font-weight: 400; font-display: swap; }

/* ---------- токены ----------
   Тёмная тема — состояние покоя бренда; светлая — выбор через переключатель
   (data-theme="light" на <html>, помнится в localStorage «iki-theme»). */

:root {
  --bg: #000;
  --bg-2: #080808;
  --bg-3: #111;
  --surface: #0d0d0d;
  --ink: #fff;
  --ink-2: #c4c4c4;
  --ink-3: #8c8c8c;
  --ink-4: #5a5a5a;
  --line: rgba(255, 255, 255, .11);
  --line-2: rgba(255, 255, 255, .2);
  --glass-fill: rgba(255, 255, 255, .055);
  --glass-fill-2: rgba(255, 255, 255, .09);
  --glass-rim: rgba(255, 255, 255, .07);
  --glass-hi: rgba(255, 255, 255, .1);
  --glass-glow: rgba(255, 255, 255, .5);
  --glass-sheen: rgba(255, 255, 255, .07);
  --glass-shadow: rgba(0, 0, 0, .55);
  --glow: rgba(255, 255, 255, .09);
  --grain-opacity: .05;

  --sans: "ONY One", -apple-system, "SF Pro Display", "Helvetica Neue", Arial, sans-serif;
  --ui: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;

  --r-s: 14px;
  --r: 22px;
  --r-l: 32px;
  --r-xl: 44px;
  --max: 1240px;
  --gutter: clamp(20px, 4.2vw, 44px);
  --ease: cubic-bezier(.16, 1, .3, 1);
  --ease-io: cubic-bezier(.65, 0, .35, 1);
  --spring: cubic-bezier(.34, 1.36, .64, 1);
  --testflight: "";
  color-scheme: dark;
}

:root[data-theme="light"] {
  --bg: #fff;
  --bg-2: #f6f6f6;
  --bg-3: #ededed;
  --surface: #fff;
  --ink: #000;
  --ink-2: #383838;
  --ink-3: #6f6f6f;
  --ink-4: #a6a6a6;
  --line: rgba(0, 0, 0, .09);
  --line-2: rgba(0, 0, 0, .17);
  --glass-fill: rgba(255, 255, 255, .58);
  --glass-fill-2: rgba(255, 255, 255, .78);
  --glass-rim: rgba(0, 0, 0, .06);
  --glass-hi: rgba(255, 255, 255, .9);
  --glass-glow: rgba(0, 0, 0, .26);
  --glass-sheen: rgba(255, 255, 255, .8);
  --glass-shadow: rgba(0, 0, 0, .12);
  --glow: rgba(0, 0, 0, .05);
  --grain-opacity: .035;
  color-scheme: light;
}

/* ---------- база ---------- */

*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; padding: 0; }
/* вширь страница не прокручивается никогда: лента захвата и макеты ездят внутри своих рамок */
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-padding-top: 96px; overflow-x: clip; }
body {
  font-family: var(--sans);
  font-size: 17px;
  line-height: 1.55;
  font-weight: 400;
  color: var(--ink);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: clip;
  transition: background-color .35s var(--ease), color .35s var(--ease);
}
::selection { background: var(--ink); color: var(--bg); }
a { color: inherit; text-decoration: none; }
img, svg, video { display: block; max-width: 100%; }
svg[viewBox="0 0 24 24"] { width: 1.2em; height: 1.2em; flex: none; }
svg.mark { width: 1.15em; height: 1.15em; flex: none; }
ul, ol { list-style: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
:focus-visible { outline: 2px solid var(--ink); outline-offset: 3px; border-radius: 8px; }
.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.skip-link {
  position: fixed; left: 16px; top: -60px; z-index: 300;
  background: var(--ink); color: var(--bg); padding: 10px 16px; border-radius: 999px;
  font-weight: 600; transition: top .2s;
}
.skip-link:focus { top: 16px; }

/* Зерно поверх всего: чистый чёрный на экране выглядит пластиком,
   а едва заметный шум — бумагой. На клики не влияет. */
.grain {
  position: fixed; inset: 0; z-index: 400; pointer-events: none;
  opacity: var(--grain-opacity);
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .55 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
}
:root[data-theme="light"] .grain { filter: invert(1); }

/* ---------- типографика ---------- */

.display, h1, h2 { font-family: var(--sans); font-weight: 500; letter-spacing: -.045em; line-height: .94; }
.display { font-size: clamp(3rem, 8.6vw, 8.4rem); }
h1 { font-size: clamp(2.8rem, 7.4vw, 6.6rem); }
h2 { font-size: clamp(2.3rem, 5.4vw, 4.7rem); }
h3 { font-family: var(--sans); font-weight: 600; font-size: clamp(1.18rem, 1.6vw, 1.4rem); letter-spacing: -.02em; line-height: 1.2; }
h4 { font-weight: 600; font-size: 1rem; letter-spacing: -.01em; }
p { text-wrap: pretty; }
h1, h2, h3, .display { text-wrap: balance; }
.soft { color: var(--ink-3); }
.dim { color: var(--ink-4); }
em { font-style: normal; font-weight: 300; }
strong { font-weight: 600; }

.lede {
  font-size: clamp(1.1rem, 1.6vw, 1.32rem);
  line-height: 1.5;
  font-weight: 300;
  color: var(--ink-2);
  max-width: 36em;
}
.lede strong { color: var(--ink); font-weight: 500; }
.kicker {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--mono); font-size: .78rem; letter-spacing: .06em;
  text-transform: lowercase; color: var(--ink-3);
}
.kicker::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; opacity: .8; }
.mono { font-family: var(--mono); font-size: .86em; letter-spacing: 0; }
.path {
  font-family: var(--mono); font-size: .8rem; color: var(--ink-3);
  background: var(--glass-fill); border-radius: 8px; padding: 3px 9px;
  box-shadow: inset 0 0 0 1px var(--line);
}
.center { text-align: center; }
.center .lede { margin-inline: auto; }

/* ---------- раскладка ---------- */

.wrap { width: 100%; max-width: var(--max); margin-inline: auto; padding-inline: var(--gutter); }
.wrap-narrow { max-width: 880px; }
.section { position: relative; padding-block: clamp(100px, 13vw, 190px); }
.section-tight { position: relative; padding-block: clamp(70px, 8vw, 120px); }
.section-head { display: grid; gap: 22px; margin-bottom: clamp(44px, 6vw, 80px); }
.section-head.center { justify-items: center; }
.stack-s > * + * { margin-top: 12px; }
.stack > * + * { margin-top: 22px; }
.stack-l > * + * { margin-top: 36px; }
.divider { height: 1px; background: var(--line); border: 0; }

/* ---------- стекло ----------
   Жидкое стекло в вебе: размытие того, что под ним, и тонкий обод. В покое обод
   едва виден — постоянная яркая рамка давит. Свет появляется только под
   курсором: обод и заливка разгораются вокруг точки (--mx/--my ставит iki.js)
   и гаснут, когда курсор уходит. На сенсорных экранах рамки остаются тихими. */

.glass {
  position: relative;
  isolation: isolate;
  background: linear-gradient(180deg, var(--glass-fill-2), var(--glass-fill) 42%, var(--glass-fill));
  -webkit-backdrop-filter: blur(22px) saturate(170%);
  backdrop-filter: blur(22px) saturate(170%);
  box-shadow:
    inset 0 1px 0 0 var(--glass-hi),
    inset 0 0 0 1px var(--glass-rim),
    0 18px 50px -24px var(--glass-shadow);
}
.glass::before {
  content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; z-index: -1;
  background: radial-gradient(260px circle at var(--mx, 50%) var(--my, 0%), var(--glass-sheen), transparent 70%);
  opacity: 0; transition: opacity .45s var(--ease);
}
.glass::after {
  content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none;
  padding: 1px;
  background: radial-gradient(220px circle at var(--mx, 50%) var(--my, 0%), var(--glass-glow), transparent 72%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask-composite: exclude;
  opacity: 0; transition: opacity .45s var(--ease);
}
@media (hover: hover) {
  .glass:hover::before, .glass:hover::after { opacity: 1; }
}

/* ---------- кнопки и пилюли ---------- */

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 10px;
  min-height: 50px; padding: 0 26px; border-radius: 999px;
  font-family: var(--sans); font-size: 1rem; font-weight: 500; letter-spacing: -.01em;
  white-space: nowrap; cursor: pointer; user-select: none;
  transition: transform .35s var(--ease), box-shadow .35s var(--ease), background-color .25s, color .25s;
}
.btn:active { transform: scale(.97); }
.btn svg { width: 18px; height: 18px; flex: none; }
.btn-primary { background: var(--ink); color: var(--bg); box-shadow: 0 10px 30px -12px rgba(255, 255, 255, .45); }
:root[data-theme="light"] .btn-primary { box-shadow: 0 10px 30px -12px rgba(0, 0, 0, .45); }
.btn-primary:hover { transform: translateY(-2px); }
.btn-glass { color: var(--ink); }
.btn-glass:hover { transform: translateY(-2px); }
.btn-line { color: var(--ink); box-shadow: inset 0 0 0 1.5px var(--line-2); }
.btn-line:hover { box-shadow: inset 0 0 0 1.5px var(--ink); }
.btn-sm { min-height: 38px; padding: 0 16px; font-size: .9rem; gap: 8px; }
.btn-row { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
.center .btn-row { justify-content: center; }

.pill {
  display: inline-flex; align-items: center; gap: 9px;
  height: 36px; padding: 0 16px; border-radius: 999px;
  font-size: .88rem; font-weight: 500; color: var(--ink-2); letter-spacing: -.005em;
}
.pill .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--ink); box-shadow: 0 0 0 0 rgba(255, 255, 255, .5); animation: pulse 2.4s var(--ease) infinite; }
@keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(255, 255, 255, .45); } 70%, 100% { box-shadow: 0 0 0 9px rgba(255, 255, 255, 0); } }
:root[data-theme="light"] .pill .dot { animation-name: pulse-dark; }
@keyframes pulse-dark { 0% { box-shadow: 0 0 0 0 rgba(0, 0, 0, .35); } 70%, 100% { box-shadow: 0 0 0 9px rgba(0, 0, 0, 0); } }
.tag {
  display: inline-flex; align-items: center; height: 30px; padding: 0 13px; border-radius: 999px;
  font-size: .84rem; color: var(--ink-2); box-shadow: inset 0 0 0 1px var(--line-2);
}
.arrow-link { display: inline-flex; align-items: center; gap: 8px; font-weight: 500; color: var(--ink); }
.arrow-link svg { width: 16px; height: 16px; transition: transform .3s var(--ease); }
.arrow-link:hover svg { transform: translateX(4px); }

/* ---------- верхняя навигация ----------
   Плавающая стеклянная капсула — как таб-бар iOS 26/27: контент едет под ней. */

.topbar {
  position: fixed; top: 14px; left: 0; right: 0; z-index: 200;
  display: flex; justify-content: center; padding-inline: 12px; pointer-events: none;
}
.navpill {
  --nav-t: .6s; --nav-ease: cubic-bezier(.3, 1.18, .45, 1);
  position: relative; pointer-events: auto;
  display: flex; align-items: center; gap: 4px;
  width: min(100%, 1020px); height: 58px; padding: 0 8px 0 18px;
  border-radius: 999px;
  transition: height .4s var(--ease);
}
.topbar.is-scrolled .navpill { height: 52px; }
/* Стекло капсулы — отдельный слой под содержимым. При прокрутке вниз он
   сужается к центру (left/right → --dx, считает iki.js), знак и «Get IKI»
   съезжают вместе с краями, ссылки гаснут. При прокрутке вверх, при наведении
   и при фокусе с клавиатуры капсула раскрывается обратно. */
.navpill > .navpill-bg { position: absolute; inset: 0; z-index: 0; border-radius: 999px; pointer-events: auto; transition: left var(--nav-t) var(--nav-ease), right var(--nav-t) var(--nav-ease); }
.navpill > :not(.navpill-bg) { position: relative; z-index: 1; }
.navpill > .brand, .navpill > .menu-toggle { transition: transform var(--nav-t) var(--nav-ease); }
.navpill > .btn { transition: transform var(--nav-t) var(--nav-ease), box-shadow .35s var(--ease), background-color .25s, color .25s; }
.navpill > .navlinks, .navpill > .theme-toggle { transition: opacity .3s var(--ease) .16s, visibility 0s, color .2s, background-color .2s; }
.topbar.is-compact .navpill { pointer-events: none; }
.topbar.is-compact .navpill > .navpill-bg { left: var(--dx, 0px); right: var(--dx, 0px); }
.topbar.is-compact .navpill > .brand { transform: translateX(var(--dx, 0px)); pointer-events: auto; }
.topbar.is-compact .navpill > .btn, .topbar.is-compact .navpill > .menu-toggle { transform: translateX(calc(var(--dx, 0px) * -1)); pointer-events: auto; }
.topbar.is-compact .navpill > .navlinks, .topbar.is-compact .navpill > .theme-toggle { opacity: 0; visibility: hidden; transition: opacity .16s var(--ease), visibility 0s .16s; }
.topbar.is-compact .navpill:focus-within > .navpill-bg { left: 0; right: 0; }
.topbar.is-compact .navpill:focus-within > .brand, .topbar.is-compact .navpill:focus-within > .btn, .topbar.is-compact .navpill:focus-within > .menu-toggle { transform: none; }
.topbar.is-compact .navpill:focus-within > .navlinks, .topbar.is-compact .navpill:focus-within > .theme-toggle { opacity: 1; visibility: visible; pointer-events: auto; transition: opacity .3s var(--ease) .16s, visibility 0s; }
@media (hover: hover) {
  .topbar.is-compact .navpill:hover > .navpill-bg { left: 0; right: 0; }
  .topbar.is-compact .navpill:hover > .brand, .topbar.is-compact .navpill:hover > .btn, .topbar.is-compact .navpill:hover > .menu-toggle { transform: none; }
  .topbar.is-compact .navpill:hover > .navlinks, .topbar.is-compact .navpill:hover > .theme-toggle { opacity: 1; visibility: visible; pointer-events: auto; transition: opacity .3s var(--ease) .16s, visibility 0s; }
  .navpill:hover > .navpill-bg::before, .navpill:hover > .navpill-bg::after { opacity: 1; }
}
.brand { display: inline-flex; align-items: center; gap: 9px; font-weight: 700; font-size: 1.32rem; letter-spacing: -.04em; margin-right: auto; }
.brand .mark { width: 24px; height: 24px; }
/* Знак при наведении: внешний цветок проворачивается на четверть оборота на
   пружине, сердцевина — навстречу. Оба симметричны на 90°, поэтому в покое
   знак выглядит ровно как был. */
.brand .mk-ring, .brand .mk-core { transform-box: view-box; transform-origin: 50% 50%; transition: transform .9s var(--spring); }
.brand:hover .mk-ring { transform: rotate(90deg); }
.brand:hover .mk-core { transform: rotate(-90deg); }
.navlinks { display: flex; align-items: center; gap: 2px; }
.navlinks a, .navlinks button {
  display: inline-flex; align-items: center; gap: 6px; height: 38px; padding: 0 14px; border-radius: 999px;
  font-size: .93rem; font-weight: 500; color: var(--ink-2); transition: color .2s, background-color .2s;
}
.navlinks a:hover, .navlinks button:hover, .navlinks a[aria-current="page"] { color: var(--ink); background: var(--glass-fill); }
.navlinks button svg { width: 12px; height: 12px; transition: transform .3s var(--ease); }
.navlinks .has-menu { position: relative; }
.navlinks .has-menu.open button svg { transform: rotate(180deg); }
.dropdown {
  position: absolute; top: calc(100% + 12px); left: 50%; width: 420px; padding: 10px;
  border-radius: 26px; transform: translate(-50%, -6px) scale(.98); transform-origin: top center;
  opacity: 0; visibility: hidden; transition: opacity .25s var(--ease), transform .35s var(--ease), visibility 0s .35s;
  display: grid; grid-template-columns: 1fr 1fr; gap: 2px;
}
.has-menu.open .dropdown { opacity: 1; visibility: visible; transform: translate(-50%, 0) scale(1); transition-delay: 0s; }
.dropdown a { display: grid; gap: 1px; height: auto; padding: 11px 14px; border-radius: 16px; }
/* Капсула сама размывает фон, а значит становится «корнем фона» для всего, что
   внутри: размытие меню видело бы только капсулу, а страница под ним читалась бы
   насквозь. Поэтому меню почти непрозрачное. */
.navpill .dropdown { background: rgba(22, 22, 23, .96); -webkit-backdrop-filter: none; backdrop-filter: none; }
:root[data-theme="light"] .navpill .dropdown { background: rgba(255, 255, 255, .97); }
.dropdown a b { font-weight: 600; color: var(--ink); font-size: .92rem; }
.dropdown a span { font-size: .8rem; color: var(--ink-3); line-height: 1.35; }
.dropdown .all { grid-column: 1 / -1; display: flex; justify-content: space-between; align-items: center; }
.theme-toggle {
  width: 38px; height: 38px; border-radius: 50%; display: inline-grid; place-items: center; color: var(--ink-2);
  transition: color .2s, background-color .2s, transform .5s var(--ease);
}
.theme-toggle:hover { color: var(--ink); background: var(--glass-fill); transform: rotate(180deg); }
.theme-toggle svg { width: 17px; height: 17px; }
.navpill .btn { margin-left: 6px; }
.menu-toggle { display: none; width: 42px; height: 42px; border-radius: 50%; place-items: center; }
.menu-toggle svg { width: 20px; height: 20px; }
.menu-sheet {
  position: fixed; inset: 82px 12px auto 12px; z-index: 190; padding: 14px; border-radius: 30px;
  display: grid; gap: 4px; max-height: calc(100svh - 100px); overflow: auto;
  opacity: 0; visibility: hidden; transform: translateY(-10px) scale(.98); transform-origin: top center;
  transition: opacity .25s var(--ease), transform .35s var(--ease), visibility 0s .35s;
}
.menu-open .menu-sheet { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
.menu-sheet a { padding: 12px 14px; border-radius: 16px; font-size: 1.05rem; font-weight: 500; }
.menu-sheet a:hover { background: var(--glass-fill); }
.menu-sheet .sub { font-family: var(--mono); font-size: .74rem; color: var(--ink-3); padding: 14px 14px 4px; }
.menu-sheet .btn { margin-top: 10px; }

@media (max-width: 920px) {
  .navlinks, .navpill .theme-toggle { display: none; }
  .menu-toggle { display: inline-grid; }
  .navpill { height: 54px; padding-left: 16px; }
}

/* ---------- подвал ---------- */

.footer { position: relative; padding: clamp(80px, 10vw, 140px) 0 40px; border-top: 1px solid var(--line); overflow: clip; }
.footer-grid { display: grid; grid-template-columns: 1.4fr repeat(4, 1fr); gap: 32px; }
.footer h4 { font-family: var(--mono); font-weight: 400; font-size: .75rem; color: var(--ink-3); letter-spacing: .06em; text-transform: lowercase; margin-bottom: 16px; }
.footer-col a { display: block; color: var(--ink-2); font-size: .93rem; padding: 4px 0; transition: color .2s; }
.footer-col a:hover { color: var(--ink); }
.footer-about p { color: var(--ink-3); font-size: .93rem; max-width: 22em; margin-top: 14px; }
.footer-about p a, .footer-bottom a { color: var(--ink-2); text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--line-2); transition: color .2s; }
.footer-about p a:hover, .footer-bottom a:hover { color: var(--ink); }
.footer-bottom { display: flex; flex-wrap: wrap; gap: 14px 28px; justify-content: space-between; margin-top: clamp(56px, 7vw, 90px); font-size: .84rem; color: var(--ink-3); }
.footer-bottom .mono { font-size: .76rem; }
@media (max-width: 900px) { .footer-grid { grid-template-columns: 1fr 1fr; } .footer-about { grid-column: 1 / -1; } }

/* ---------- появление при прокрутке ----------
   Без JS и при «уменьшить движение» всё видно сразу: класс .js ставит скрипт. */

.js [data-reveal] { opacity: 0; transform: translateY(26px); filter: blur(6px); transition: opacity .9s var(--ease), transform 1.1s var(--ease), filter .9s var(--ease); transition-delay: calc(var(--d, 0) * 90ms); }
.js [data-reveal].in { opacity: 1; transform: none; filter: none; }

/* ---------- сцены с прилипанием ----------
   --p (0…1) ставит iki.js по прокрутке; всё, что движется, считает от него. */

.scene { position: relative; }
.scene-sticky { position: sticky; top: 0; height: 100vh; height: 100svh; overflow: clip; }

/* ---------- герой ----------
   Текст наверху, телефон выглядывает снизу. По прокрутке текст уходит вверх,
   телефон поднимается, а вещи вокруг него влетают в экран и становятся
   карточками — вся идея продукта за одну прокрутку. */

.hero { --p: 0; height: 200vh; }
.hero-text {
  position: relative; z-index: 3; text-align: center; padding-top: clamp(116px, 16vh, 168px);
  display: grid; justify-items: center; gap: 22px; padding-inline: var(--gutter);
  transform: translate3d(0, calc(var(--p) * -30vh), 0);
  opacity: clamp(0, calc(1 - var(--p) * 2.4), 1);
}
.hero-title { font-size: clamp(2.8rem, 7vw, 7.2rem); line-height: .9; }
.hero-title .line { display: block; }
.hero-title .line:nth-child(2) { color: var(--ink-3); }
.hero .lede { text-align: center; max-width: 34em; }
.hero .btn-row { justify-content: center; }
.hero-meta { font-size: .86rem; color: var(--ink-3); display: flex; flex-wrap: wrap; gap: 6px 18px; justify-content: center; }
.hero-meta span { display: inline-flex; align-items: center; gap: 7px; }
.hero-meta svg { width: 14px; height: 14px; }
.js .hero-in { opacity: 0; transform: translateY(40px); filter: blur(14px); animation: hero-in 1.3s var(--ease) forwards; animation-delay: calc(var(--d, 0) * 110ms + 120ms); }
@keyframes hero-in { to { opacity: 1; transform: none; filter: none; } }

.hero .scene-sticky { display: flex; flex-direction: column; align-items: center; }
.hero-phone {
  position: relative; flex: none; margin-top: clamp(36px, 6vh, 72px); z-index: 2;
  transform: translate3d(0, calc(var(--p) * -64vh), 0);
}
.hero-phone .device { --w: 350; }
.hero-glow {
  position: absolute; left: 50%; top: 40%; width: 1300px; height: 1300px; transform: translate(-50%, -50%); pointer-events: none; z-index: -1;
  background: radial-gradient(closest-side, var(--glow), transparent 70%);
}
.hero-rings { position: absolute; left: 50%; top: 42%; width: min(1500px, 170vw); transform: translate(-50%, -50%); color: var(--line); pointer-events: none; z-index: -1; }

/* Вещи вокруг заголовка: стартуют в полях по бокам (left/top в долях экрана),
   по прокрутке летят в экран телефона и растворяются — становятся карточками.
   Куда лететь (--dx/--dy, px), iki.js мерит по настоящему положению экрана. */
.floats { position: absolute; inset: 0; z-index: 4; pointer-events: none; }
.float {
  position: absolute; left: var(--sx); top: var(--sy);
  --k: clamp(0, calc((var(--p) - var(--t0, .1)) / .4), 1);
  transform:
    translate(-50%, -50%)
    translate3d(calc(var(--dx, 0) * var(--k) * 1px), calc(var(--dy, 0) * var(--k) * 1px), 0)
    rotate(calc(var(--r, 0deg) * (1 - var(--k))))
    scale(calc(1 - var(--k) * .76));
  opacity: calc(1 - var(--k) * var(--k));
}
.float > * { animation: bob 6.5s var(--ease-io) infinite alternate; animation-delay: calc(var(--t0, .1) * -50s); }
@keyframes bob { from { translate: 0 -7px; } to { translate: 0 8px; } }
@media (max-width: 1180px) { .float { scale: .82; } .float.hide-m { display: none; } }
@media (max-width: 760px) { .floats { display: none; } }
/* карточки в сетке телефона проявляются, когда в экран «влетает» вещь */
.arrive { --a: clamp(0, calc((var(--p) - var(--t, .3)) * 7), 1); opacity: var(--a); transform: translateY(calc((1 - var(--a)) * -18px)) scale(calc(.94 + var(--a) * .06)); }

@media (max-width: 760px) {
  .hero { height: 185vh; }
  .hero-phone .device { --w: 290; }
}

/* ---------- заявление: слова проявляются по прокрутке ---------- */

.statement { height: 220vh; }
.statement .scene-sticky { display: grid; place-items: center; }
.statement-text {
  font-family: var(--sans); font-weight: 500; letter-spacing: -.04em; line-height: 1.02;
  font-size: clamp(2.2rem, 5.6vw, 5.2rem); max-width: 17em; text-align: center; padding-inline: var(--gutter);
}
.w { opacity: clamp(.14, calc((var(--p) - .06) * var(--n) * 1.55 - var(--i) + 1), 1); transition: opacity .12s linear; }
.statement-text .w.accent { font-weight: 300; }

/* ---------- три опоры ---------- */

.pillars { height: 420vh; }
.pillars .scene-sticky { display: grid; align-items: center; }
.pillars-grid { display: grid; grid-template-columns: 1fr minmax(320px, 440px); gap: clamp(40px, 7vw, 110px); align-items: center; }
.pillar-steps { position: relative; min-height: 460px; }
.pillar-step {
  position: absolute; inset: 0 0 auto 0; display: grid; gap: 20px; align-content: start;
  opacity: 0; transform: translateY(30px); filter: blur(6px);
  transition: opacity .6s var(--ease), transform .8s var(--ease), filter .6s var(--ease);
  pointer-events: none;
}
.pillars[data-step="0"] .pillar-step:nth-child(1),
.pillars[data-step="1"] .pillar-step:nth-child(2),
.pillars[data-step="2"] .pillar-step:nth-child(3) { opacity: 1; transform: none; filter: none; pointer-events: auto; }
.pillar-num { font-family: var(--mono); font-size: .82rem; color: var(--ink-3); display: flex; align-items: center; gap: 12px; }
.pillar-num::after { content: ""; flex: none; width: 48px; height: 1px; background: var(--line-2); }
.pillar-step h2 { font-size: clamp(2.6rem, 5.2vw, 4.8rem); }
.pillar-step p { color: var(--ink-2); font-size: clamp(1.05rem, 1.45vw, 1.22rem); font-weight: 300; max-width: 30em; }
.pillar-facts { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
.pillar-dots { position: absolute; left: 0; bottom: -80px; display: flex; gap: 8px; }
.pillar-dots i { width: 28px; height: 3px; border-radius: 3px; background: var(--line-2); position: relative; overflow: hidden; }
.pillar-dots i::after { content: ""; position: absolute; inset: 0; background: var(--ink); transform-origin: left; transform: scaleX(clamp(0, calc(var(--p) * 3 - var(--n)), 1)); }
.pillar-phone { justify-self: center; position: relative; }
.pillar-phone .device { --w: 380; }
.pillar-screen { position: absolute; inset: 0; opacity: 0; transition: opacity .7s var(--ease); }
.pillars[data-step="0"] .pillar-screen.s0,
.pillars[data-step="1"] .pillar-screen.s1,
.pillars[data-step="2"] .pillar-screen.s2 { opacity: 1; }
.pillar-badges { position: absolute; inset: 0; pointer-events: none; }
.pillar-badge {
  position: absolute; display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 15px 0 12px;
  border-radius: 999px; font-size: .86rem; font-weight: 500; white-space: nowrap; color: var(--ink);
  opacity: 0; transform: translateY(10px) scale(.96); transition: opacity .5s var(--ease), transform .6s var(--spring);
}
.pillar-badge svg { width: 17px; height: 17px; }
.pillars[data-step="0"] .pillar-badge.b0,
.pillars[data-step="1"] .pillar-badge.b1,
.pillars[data-step="2"] .pillar-badge.b2 { opacity: 1; transform: none; }
.pillar-badge:nth-of-type(2n) { transition-delay: .12s; }
.pillar-badge:nth-of-type(3n) { transition-delay: .24s; }
.pillar-mobile { display: none; }

@media (max-width: 899px) {
  .pillars { height: auto; }
  .pillars .scene-sticky { position: static; height: auto; overflow: visible; }
  .pillars-grid { display: none; }
  .pillar-mobile { display: grid; gap: clamp(90px, 16vw, 140px); }
  .pillar-mobile .pillar-step { position: static; opacity: 1; transform: none; filter: none; pointer-events: auto; }
  .pillar-mobile .device { --w: 300; margin: 34px auto 0; }
}

/* ---------- матрица сравнения ---------- */

.matrix-wrap { overflow-x: auto; margin-inline: calc(var(--gutter) * -1); padding-inline: var(--gutter); scrollbar-width: none; }
.matrix-wrap::-webkit-scrollbar { display: none; }
.matrix { width: 100%; min-width: 760px; border-collapse: separate; border-spacing: 0; font-size: .95rem; }
.matrix th, .matrix td { padding: 17px 14px; text-align: center; border-bottom: 1px solid var(--line); vertical-align: middle; }
.matrix thead th { font-family: var(--sans); font-weight: 500; font-size: .92rem; color: var(--ink-2); letter-spacing: -.01em; line-height: 1.25; vertical-align: bottom; padding-bottom: 20px; }
.matrix tbody th { text-align: left; font-weight: 500; font-size: 1rem; white-space: nowrap; }
.matrix tbody th small { display: block; font-weight: 400; font-size: .78rem; color: var(--ink-3); margin-top: 2px; }
.matrix .me th { font-weight: 700; }
.matrix .me td, .matrix .me th { background: var(--row-hl, rgba(255, 255, 255, .06)); }
:root[data-theme="light"] .matrix .me td, :root[data-theme="light"] .matrix .me th { --row-hl: rgba(0, 0, 0, .045); }
.matrix .me th { border-radius: 18px 0 0 18px; }
.matrix .me td:last-child { border-radius: 0 18px 18px 0; }
.mx { display: inline-grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; }
.mx.y { background: var(--ink); }
.mx.h { background: conic-gradient(var(--ink) 0 50%, transparent 0); box-shadow: inset 0 0 0 1.5px var(--ink); transform: rotate(-90deg); }
.mx.n { box-shadow: inset 0 0 0 1.5px var(--ink-4); }
.mx.na { width: 14px; height: 1.5px; border-radius: 1px; background: var(--ink-4); }
.matrix-legend .mx.na { width: 12px; height: 1.5px; }
.js .matrix tbody tr { opacity: 0; transform: translateY(14px); transition: opacity .7s var(--ease), transform .8s var(--ease); transition-delay: calc(var(--r, 0) * 70ms); }
.js .matrix.in tbody tr { opacity: 1; transform: none; }
.matrix-legend { display: flex; flex-wrap: wrap; gap: 8px 22px; margin-top: 22px; font-size: .84rem; color: var(--ink-3); }
.matrix-legend span { display: inline-flex; align-items: center; gap: 8px; }
.matrix-legend .mx { width: 14px; height: 14px; }
.note { font-size: .82rem; color: var(--ink-3); max-width: 60em; }

/* ---------- «ничего не истекает» ---------- */

.expire { height: 230vh; }
.expire .scene-sticky { display: grid; place-items: center; }
.expire-lines { display: grid; gap: .1em; text-align: center; font-family: var(--sans); font-weight: 500; letter-spacing: -.045em; line-height: 1; font-size: clamp(2rem, 5.2vw, 4.9rem); padding-inline: var(--gutter); }
.expire-lines span {
  display: block;
  --k: clamp(0, calc((var(--p) - var(--a)) * 7), 1);
  opacity: calc(.08 + var(--k) * .92);
  transform: translateY(calc((1 - var(--k)) * 18px));
}
.expire-lines span.strike { color: var(--ink-3); }
.expire-lines span.last { font-weight: 700; font-size: 1.35em; margin-top: .25em; }
.expire-foot { margin-top: 38px; text-align: center; color: var(--ink-2); font-weight: 300; font-size: clamp(1.02rem, 1.4vw, 1.2rem); max-width: 34em; margin-inline: auto; opacity: clamp(0, calc((var(--p) - .72) * 6), 1); padding-inline: var(--gutter); }

/* ---------- лента захвата (горизонтальная прокрутка) ---------- */

.capture { --shift: 0; }
.capture .scene-sticky { display: grid; grid-template-columns: minmax(0, 1fr); align-content: center; gap: 42px; }
.capture-track { display: flex; gap: 20px; padding-inline: max(var(--gutter), calc((100vw - var(--max)) / 2 + var(--gutter))); width: max-content; justify-self: start; transform: translate3d(calc(var(--p) * var(--shift) * -1px), 0, 0); will-change: transform; }
.tile {
  position: relative; flex: none; width: 330px; height: 470px; border-radius: 34px; padding: 26px;
  display: flex; flex-direction: column; gap: 10px; overflow: hidden;
}
.tile h3 { font-size: 1.28rem; }
.tile p { font-size: .95rem; color: var(--ink-2); font-weight: 300; line-height: 1.45; }
.tile-art { position: relative; flex: 1; margin: 6px -26px -26px; display: grid; place-items: center; overflow: hidden; }
.capture-progress { width: 180px; height: 3px; border-radius: 3px; background: var(--line-2); margin-inline: auto; overflow: hidden; }
.capture-progress i { display: block; height: 100%; background: var(--ink); transform-origin: left; transform: scaleX(var(--p)); }
@media (max-width: 899px) {
  .capture { height: auto !important; }
  .capture .scene-sticky { position: static; height: auto; overflow: visible; }
  .capture-track { transform: none; width: 100%; max-width: 100vw; overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 20px; scrollbar-width: none; justify-self: stretch; padding-inline: var(--gutter); }
  .capture-track::-webkit-scrollbar { display: none; }
  .tile { scroll-snap-align: center; width: min(82vw, 330px); height: 450px; }
  .capture-progress { display: none; }
}

/* ---------- секции «функция + телефон» ---------- */

.feature { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(40px, 7vw, 120px); align-items: center; }
.feature.flip .feature-media { order: -1; }
.feature-copy { display: grid; gap: 22px; align-content: center; }
.feature-copy h2 { font-size: clamp(2.3rem, 4.8vw, 4.3rem); }
.feature-list { display: grid; gap: 14px; margin-top: 8px; }
.feature-list li { display: grid; grid-template-columns: 26px 1fr; gap: 12px; color: var(--ink-2); font-weight: 300; }
.feature-list li svg { width: 20px; height: 20px; margin-top: 3px; color: var(--ink); }
.feature-list li b { color: var(--ink); font-weight: 500; }
.feature-media { position: relative; display: grid; place-items: center; min-height: 640px; }
.feature-media .device { --w: 360; }
.feature-scene { height: 250vh; }
.feature-scene .scene-sticky { display: grid; align-items: center; }
@media (max-width: 899px) {
  .feature { grid-template-columns: 1fr; }
  .feature.flip .feature-media { order: 0; }
  .feature-media { min-height: 0; }
  .feature-media .device { --w: 300; }
  .feature-scene { height: auto; }
  .feature-scene .scene-sticky { position: static; height: auto; overflow: visible; padding-block: 90px; }
  .feature-scene { --p: 1 !important; }
}

.side-card { position: absolute; border-radius: 24px; padding: 16px 18px; width: 250px; font-size: .86rem; color: var(--ink-2); display: grid; gap: 6px; }
.side-card b { color: var(--ink); font-weight: 600; font-size: .92rem; }
@media (max-width: 1100px) { .side-card { display: none; } }

/* ---------- бенто студии ---------- */

.bento { display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 210px; gap: 16px; }
.bento-cell { border-radius: 30px; padding: 24px; display: flex; flex-direction: column; gap: 8px; overflow: hidden; position: relative; }
.bento-cell h3 { font-size: 1.15rem; }
.bento-cell p { font-size: .9rem; color: var(--ink-2); font-weight: 300; line-height: 1.45; }
.bento-cell .art { position: absolute; inset: auto 0 0 0; height: 55%; display: grid; place-items: end center; pointer-events: none; }
.bento-cell.wide { grid-column: span 2; }
.bento-cell.tall { grid-row: span 2; }
.bento-cell .icon { width: 30px; height: 30px; color: var(--ink); margin-bottom: 6px; }
@media (max-width: 1000px) { .bento { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .bento { grid-template-columns: 1fr; grid-auto-rows: minmax(190px, auto); } .bento-cell.wide { grid-column: auto; } .bento-cell.tall { grid-row: auto; min-height: 380px; } }

/* ---------- приватность ---------- */

.privacy-grid { display: grid; grid-template-columns: 1.05fr 1fr; gap: clamp(40px, 6vw, 90px); align-items: start; }
.switches { border-radius: 30px; padding: 10px; }
.switch-row { display: grid; grid-template-columns: 1fr auto; gap: 16px; align-items: center; padding: 16px 16px; border-radius: 20px; }
.switch-row + .switch-row { box-shadow: inset 0 1px 0 var(--line); border-radius: 0; }
.switch-row b { display: block; font-weight: 600; font-size: .98rem; }
.switch-row span { display: block; font-size: .84rem; color: var(--ink-3); line-height: 1.4; margin-top: 2px; }
.toggle { width: 51px; height: 31px; border-radius: 999px; background: rgba(120, 120, 128, .32); position: relative; flex: none; }
.toggle::after { content: ""; position: absolute; top: 2px; left: 2px; width: 27px; height: 27px; border-radius: 50%; background: #fff; box-shadow: 0 3px 8px rgba(0, 0, 0, .25); transition: transform .4s var(--spring); }
.toggle.on { background: var(--ink); }
:root[data-theme="light"] .toggle.on { background: #000; }
.toggle.on::after { transform: translateX(20px); background: var(--bg); }
.toggle.fixed { background: transparent; box-shadow: inset 0 0 0 1.5px var(--line-2); width: auto; padding: 0 12px; display: inline-flex; align-items: center; font-size: .78rem; color: var(--ink-2); font-family: var(--mono); }
.toggle.fixed::after { display: none; }
.airplane { display: inline-flex; align-items: center; gap: 12px; margin-top: 8px; padding: 12px 18px 12px 14px; border-radius: 999px; font-size: .92rem; }
.airplane svg { width: 20px; height: 20px; }
@media (max-width: 899px) { .privacy-grid { grid-template-columns: 1fr; } }

/* ---------- iOS 27 ---------- */

.ios27 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.ios27-cell { border-radius: 28px; padding: 24px; display: grid; gap: 10px; align-content: start; }
.ios27-cell svg { width: 26px; height: 26px; }
.ios27-cell h3 { font-size: 1.08rem; }
.ios27-cell p { font-size: .9rem; color: var(--ink-2); font-weight: 300; line-height: 1.45; }
.big27 { font-family: var(--sans); font-weight: 700; letter-spacing: -.08em; line-height: .8; font-size: clamp(8rem, 22vw, 19rem); background: linear-gradient(180deg, var(--ink) 20%, transparent 95%); -webkit-background-clip: text; background-clip: text; color: transparent; }
@media (max-width: 899px) { .ios27 { grid-template-columns: 1fr; } }

/* ---------- карточки когорт и сравнений ---------- */

.cards-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.cards-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.link-card { border-radius: 28px; padding: 26px; display: flex; flex-direction: column; gap: 10px; min-height: 230px; transition: transform .45s var(--ease); }
.link-card:hover { transform: translateY(-4px); }
.link-card .who { font-family: var(--mono); font-size: .74rem; color: var(--ink-3); text-transform: lowercase; letter-spacing: .04em; }
.link-card h3 { font-size: 1.35rem; }
.link-card p { font-size: .92rem; color: var(--ink-2); font-weight: 300; line-height: 1.45; flex: 1; }
.link-card .arrow-link { font-size: .9rem; }
.vs-chip { border-radius: 22px; padding: 18px 20px; display: flex; align-items: center; justify-content: space-between; gap: 10px; font-weight: 500; transition: transform .4s var(--ease); }
.vs-chip:hover { transform: translateY(-3px); }
.vs-chip small { display: block; font-weight: 400; color: var(--ink-3); font-size: .8rem; margin-top: 2px; }
.vs-chip svg { width: 16px; height: 16px; flex: none; }
@media (max-width: 1000px) { .cards-3 { grid-template-columns: 1fr 1fr; } .cards-4 { grid-template-columns: 1fr 1fr; } }
@media (max-width: 620px) { .cards-3, .cards-4 { grid-template-columns: 1fr; } }

/* ---------- цены ---------- */

.prices { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; align-items: stretch; }
.price { border-radius: 32px; padding: 30px 28px; display: flex; flex-direction: column; gap: 16px; }
.price.featured { box-shadow: inset 0 1px 0 0 var(--glass-hi), inset 0 0 0 1px var(--line-2), 0 30px 80px -30px var(--glass-shadow); }
.price-top { display: flex; justify-content: space-between; align-items: center; }
.price h3 { font-size: 1.3rem; }
.price .badge { font-family: var(--mono); font-size: .72rem; padding: 5px 10px; border-radius: 999px; background: var(--ink); color: var(--bg); }
.price-tag { font-family: var(--sans); font-weight: 500; font-size: 3.2rem; letter-spacing: -.05em; line-height: 1; }
.price-tag small { font-size: 1rem; letter-spacing: 0; color: var(--ink-3); font-weight: 400; margin-left: 4px; }
.price-note { color: var(--ink-3); font-size: .9rem; margin-top: -8px; }
.price ul { display: grid; gap: 10px; flex: 1; align-content: start; }
.price li { display: grid; grid-template-columns: 20px 1fr; gap: 10px; font-size: .93rem; color: var(--ink-2); font-weight: 300; }
.price li svg { width: 16px; height: 16px; margin-top: 4px; color: var(--ink); }
@media (max-width: 900px) { .prices { grid-template-columns: 1fr; } }

/* ---------- вопросы ---------- */

.faq { display: grid; gap: 10px; }
.faq details { border-radius: 24px; padding: 0 24px; }
.faq summary { list-style: none; cursor: pointer; display: flex; justify-content: space-between; align-items: center; gap: 20px; padding: 22px 0; font-weight: 500; font-size: 1.06rem; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary svg { width: 18px; height: 18px; flex: none; transition: transform .4s var(--ease); color: var(--ink-3); }
.faq details[open] summary svg { transform: rotate(45deg); }
.faq .answer { padding-bottom: 22px; color: var(--ink-2); font-weight: 300; display: grid; gap: 10px; max-width: 46em; }
.faq .answer a { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--line-2); }

/* ---------- финальный призыв ---------- */

.cta { position: relative; isolation: isolate; text-align: center; padding-block: clamp(130px, 16vw, 230px); overflow: clip; }
/* Интерактив с частицами (iki.js): в герое — сетка точек, которая под курсором
   расходится линзой; в финале — знак IKI из частиц, которые разлетаются от
   курсора и собираются обратно. Холсты не ловят клики. */
.fx { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: -1; }
.hero .fx-hero { opacity: clamp(0, calc(1 - var(--p) * 1.8), 1); }
.cta h2 { font-size: clamp(3rem, 8vw, 7.4rem); }
.cta .lede { margin: 22px auto 34px; }
.cta-glow { position: absolute; left: 50%; top: 50%; width: 1100px; height: 700px; transform: translate(-50%, -50%); background: radial-gradient(closest-side, var(--glow), transparent 72%); pointer-events: none; z-index: -1; }
.cta .fine { margin-top: 20px; font-size: .86rem; color: var(--ink-3); }

/* ---------- подстраницы ---------- */

.page-top { padding-top: clamp(140px, 18vh, 190px); padding-bottom: clamp(40px, 6vw, 80px); position: relative; }
.page-top .lede { margin-top: 26px; }
.page-top .btn-row { margin-top: 34px; }
.crumbs { font-family: var(--mono); font-size: .76rem; color: var(--ink-3); display: flex; gap: 8px; margin-bottom: 26px; }
.crumbs a:hover { color: var(--ink); }
.split-hero { display: grid; grid-template-columns: 1.1fr .9fr; gap: clamp(30px, 6vw, 90px); align-items: center; }
.split-hero .device { --w: 340; }
.split-hero h1 { font-size: clamp(2.6rem, 5.3vw, 5rem); }
.split-hero .hero-visual { display: grid; place-items: center; position: relative; }
@media (max-width: 899px) { .split-hero { grid-template-columns: 1fr; } .split-hero .device { --w: 290; } }

.prose { max-width: 720px; }
.prose > * + * { margin-top: 1.05em; }
.prose h2 { font-size: clamp(1.6rem, 3vw, 2.3rem); margin-top: 1.8em; letter-spacing: -.035em; line-height: 1.05; }
.prose h3 { margin-top: 1.5em; font-size: 1.15rem; }
.prose p, .prose li { color: var(--ink-2); font-weight: 300; }
.prose p strong, .prose li strong { color: var(--ink); font-weight: 500; }
.prose a { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--line-2); }
.prose a:hover { text-decoration-color: var(--ink); }
.prose ul { list-style: disc; padding-left: 1.2em; }
.prose ol { list-style: decimal; padding-left: 1.3em; }
.prose li + li { margin-top: .45em; }

.moments { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.moment { border-radius: 30px; padding: 26px; display: flex; flex-direction: column; gap: 12px; }
.moment .num { font-family: var(--mono); font-size: .76rem; color: var(--ink-3); }
.moment h3 { font-size: 1.28rem; }
.moment p { color: var(--ink-2); font-weight: 300; font-size: .95rem; }
.moment .art { margin-top: auto; padding-top: 16px; display: grid; place-items: center; min-height: 200px; }
@media (max-width: 1000px) { .moments { grid-template-columns: 1fr; } }

.week { display: grid; gap: 0; border-radius: 30px; overflow: hidden; }
.week-row { display: grid; grid-template-columns: 110px 1fr; gap: 20px; padding: 20px 26px; align-items: baseline; }
.week-row + .week-row { box-shadow: inset 0 1px 0 var(--line); }
.week-row .day { font-family: var(--mono); font-size: .8rem; color: var(--ink-3); text-transform: lowercase; }
.week-row p { color: var(--ink-2); font-weight: 300; }
.week-row p b { color: var(--ink); font-weight: 500; }
@media (max-width: 560px) { .week-row { grid-template-columns: 1fr; gap: 4px; } }

.uses { display: grid; grid-template-columns: repeat(3, 1fr); gap: 26px 30px; }
.use { display: grid; grid-template-columns: 36px 1fr; gap: 14px; }
.use svg { width: 24px; height: 24px; margin-top: 2px; }
.use h4 { font-size: 1rem; margin-bottom: 4px; }
.use p { color: var(--ink-2); font-weight: 300; font-size: .93rem; }
@media (max-width: 900px) { .uses { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .uses { grid-template-columns: 1fr; } }

.honest { border-radius: 30px; padding: clamp(24px, 4vw, 40px); display: grid; grid-template-columns: 1fr 1.4fr; gap: 30px; }
.honest ul { display: grid; gap: 14px; }
.honest li { display: grid; grid-template-columns: 22px 1fr; gap: 12px; color: var(--ink-2); font-weight: 300; }
.honest li svg { width: 18px; height: 18px; margin-top: 4px; color: var(--ink-3); }
@media (max-width: 800px) { .honest { grid-template-columns: 1fr; } }

/* сравнение: вердикт и таблица */
.verdict { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.verdict-cell { border-radius: 28px; padding: 26px; display: grid; gap: 12px; align-content: start; }
.verdict-cell .who { font-family: var(--mono); font-size: .76rem; color: var(--ink-3); text-transform: lowercase; }
.verdict-cell h3 { font-size: 1.3rem; }
.verdict-cell ul { display: grid; gap: 9px; }
.verdict-cell li { display: grid; grid-template-columns: 20px 1fr; gap: 10px; color: var(--ink-2); font-weight: 300; font-size: .95rem; }
.verdict-cell li svg { width: 16px; height: 16px; margin-top: 4px; }
.verdict-cell.me { box-shadow: inset 0 1px 0 0 var(--glass-hi), inset 0 0 0 1px var(--line-2), 0 30px 80px -30px var(--glass-shadow); }
@media (max-width: 760px) { .verdict { grid-template-columns: 1fr; } }

.pillars-check { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
.pc { border-radius: 24px; padding: 20px; display: grid; gap: 14px; align-content: start; }
.pc h4 { font-size: .95rem; line-height: 1.25; }
.pc .row { display: flex; justify-content: space-between; align-items: center; font-size: .82rem; color: var(--ink-3); }
.pc .row b { color: var(--ink); font-weight: 600; }
@media (max-width: 1000px) { .pillars-check { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .pillars-check { grid-template-columns: 1fr; } }

.table-wrap { overflow-x: auto; border-radius: 28px; }
.vs-table { width: 100%; min-width: 640px; border-collapse: collapse; font-size: .95rem; }
.vs-table th, .vs-table td { padding: 18px 20px; text-align: left; vertical-align: top; border-bottom: 1px solid var(--line); }
.vs-table thead th { font-family: var(--sans); font-weight: 500; font-size: .92rem; color: var(--ink-2); letter-spacing: -.01em; }
.vs-table tbody th { font-weight: 500; width: 24%; color: var(--ink); }
.vs-table td { color: var(--ink-2); font-weight: 300; width: 38%; }
.vs-table td.me { color: var(--ink); font-weight: 400; }
.vs-table tr:last-child th, .vs-table tr:last-child td { border-bottom: 0; }
.vs-table .yes, .vs-table .no { font-weight: 600; margin-right: 4px; }
.vs-table .no { color: var(--ink-3); }

.wins { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.win { border-radius: 26px; padding: 24px; display: grid; gap: 10px; align-content: start; }
.win h3 { font-size: 1.1rem; }
.win p { color: var(--ink-2); font-weight: 300; font-size: .93rem; }
@media (max-width: 900px) { .wins { grid-template-columns: 1fr; } }

.steps { display: grid; gap: 12px; }
.steps li { display: grid; grid-template-columns: 32px minmax(0, 1fr); gap: 16px; align-items: start; padding: 20px 22px; border-radius: 22px; color: var(--ink-2); font-weight: 300; }
.steps .step-n { width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center; font-family: var(--mono); font-size: .82rem; color: var(--ink); box-shadow: inset 0 0 0 1.5px var(--line-2); }
.steps .step-t { padding-top: 4px; }

/* старые служебные страницы (save, library): их разметка держится на этих
   классах, а скрипты шифрования трогать нельзя — поэтому совместимость здесь */
.page-hero { padding-top: clamp(140px, 18vh, 190px); padding-bottom: 30px; }
.page-hero .lede { margin-top: 22px; }
.filepath { font-family: var(--mono); font-size: .82rem; color: var(--ink-3); background: var(--glass-fill); border-radius: 10px; padding: 6px 12px; display: inline-block; box-shadow: inset 0 0 0 1px var(--line); }
.filepath:empty { display: none; }
.muted { color: var(--ink-3); }
.btn:not(.btn-primary):not(.btn-glass):not(.btn-line) { box-shadow: inset 0 0 0 1.5px var(--line-2); }
.prose input, .prose textarea { font-family: var(--sans); font-size: 1rem; }

/* ---------- устройство: iPhone ----------
   Экран рисуется в настоящих пунктах iPhone 17 Pro (402×874) и масштабируется
   через zoom: размеры в макете — это размеры из SwiftUI, а не подогнанные на глаз.
   --w — ширина корпуса в px, без единиц, чтобы из неё считался zoom. */

.device {
  --w: 360;
  --bezel: calc(var(--w) * .028px);
  position: relative; flex: none;
  width: calc(var(--w) * 1px);
  padding: var(--bezel);
  border-radius: calc(var(--w) * .172px);
  background:
    linear-gradient(160deg, #4a4a4c 0%, #1b1b1d 22%, #0b0b0c 50%, #202022 78%, #4d4d50 100%);
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, .12),
    inset 0 0 0 calc(var(--bezel) * .45) #050505,
    0 0 0 1px rgba(0, 0, 0, .9),
    0 50px 100px -30px rgba(0, 0, 0, .9),
    0 30px 60px -40px rgba(255, 255, 255, .08);
}
:root[data-theme="light"] .device { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .12), inset 0 0 0 calc(var(--bezel) * .45) #050505, 0 0 0 1px rgba(0, 0, 0, .9), 0 50px 100px -40px rgba(0, 0, 0, .45); }
.device::before, .device::after { content: ""; position: absolute; width: 3px; border-radius: 2px; background: linear-gradient(90deg, #3a3a3c, #121212); }
.device::before { left: -2px; top: 21%; height: 6.5%; box-shadow: 0 calc(var(--w) * .16px) 0 #2a2a2c, 0 calc(var(--w) * .305px) 0 #2a2a2c; }
.device::after { right: -2px; top: 29%; height: 11%; }
.device-screen {
  position: relative; overflow: hidden; background: #000;
  width: calc(var(--w) * .944px);
  aspect-ratio: 402 / 874;
  border-radius: calc(var(--w) * .136px);
  transform: translateZ(0);
}
.device-screen .ios { zoom: calc(var(--w) * .944 / 402); }
.device-reflect { position: absolute; inset: var(--bezel); border-radius: calc(var(--w) * .136px); pointer-events: none; z-index: 30; background: linear-gradient(115deg, rgba(255, 255, 255, .09) 0%, rgba(255, 255, 255, 0) 32%); }

/* ---------- интерфейс приложения внутри макета ----------
   Тёмная тема iOS: системные цвета тёмного режима, SF — как в приложении. */

.ios {
  --i-bg: #000;
  --i-card: #1c1c1e;
  --i-card-2: #2c2c2e;
  --i-card-3: #3a3a3c;
  --i-label: #fff;
  --i-label-2: rgba(235, 235, 245, .6);
  --i-label-3: rgba(235, 235, 245, .32);
  --i-sep: rgba(84, 84, 88, .55);
  --i-fill: rgba(118, 118, 128, .24);
  --i-fill-2: rgba(120, 120, 128, .36);
  position: relative; width: 402px; height: 874px; overflow: hidden;
  background: var(--i-bg); color: var(--i-label);
  font-family: var(--ui); font-size: 17px; line-height: 22px; letter-spacing: -.41px;
  -webkit-font-smoothing: antialiased; text-align: left;
}
.ios * { letter-spacing: inherit; }
.ios .i-abs { position: absolute; }
.i-gl {
  background: rgba(38, 38, 40, .62);
  -webkit-backdrop-filter: blur(14px) saturate(160%);
  backdrop-filter: blur(14px) saturate(160%);
  box-shadow: inset 0 .5px 0 rgba(255, 255, 255, .38), inset 0 0 0 .5px rgba(255, 255, 255, .14), 0 6px 20px rgba(0, 0, 0, .35);
}
.i-circle { position: absolute; width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center; z-index: 20; }
.i-circle svg { width: 20px; height: 20px; }
.i-title-l { position: absolute; left: 16px; top: 108px; font-size: 34px; line-height: 41px; font-weight: 700; letter-spacing: .37px; }
.i-title-i { position: absolute; left: 0; right: 0; top: 68px; text-align: center; font-size: 17px; font-weight: 600; z-index: 20; }
.i-chips { position: absolute; left: 16px; top: 162px; display: flex; gap: 8px; white-space: nowrap; }
.i-chip { height: 34px; padding: 0 15px; border-radius: 17px; background: var(--i-card); display: inline-flex; align-items: center; font-size: 16px; }
.i-chip.on { background: var(--i-card-3); font-weight: 600; }
.i-grid { position: absolute; left: 16px; right: 16px; top: 212px; display: flex; gap: 12px; align-items: flex-start; }
.i-col { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 12px; }

/* карточка: те же отступы и кегли, что в CardView (padding 12, радиус 16) */
.c { background: var(--i-card); border-radius: 16px; padding: 12px; display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.c-h { display: flex; align-items: center; gap: 6px; font-size: 11px; line-height: 13px; font-weight: 500; letter-spacing: .06px; text-transform: uppercase; color: var(--i-label-3); }
.c-h svg { width: 12px; height: 12px; color: var(--i-label); }
.c-t { font-size: 17px; line-height: 22px; font-weight: 600; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.c-o { font-size: 15px; line-height: 20px; color: var(--i-label-2); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; letter-spacing: -.24px; }
.c-m { font-size: 12px; line-height: 16px; color: var(--i-label-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; letter-spacing: 0; }
.c-b { display: grid; gap: 4px; }
.c-b span { display: grid; grid-template-columns: 8px 1fr; gap: 6px; font-size: 13px; line-height: 18px; color: var(--i-label-2); letter-spacing: -.08px; }
.c-b span::before { content: "•"; color: var(--i-label-3); }
.c-b span i { font-style: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.c-media { position: relative; border-radius: 12px; overflow: hidden; background: #111; aspect-ratio: var(--ar, 16 / 9); }
.c-play { position: absolute; left: 50%; top: 50%; width: 44px; height: 44px; margin: -22px 0 0 -22px; border-radius: 50%; display: grid; place-items: center; background: rgba(0, 0, 0, .55); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.c-play svg { width: 18px; height: 18px; margin-left: 3px; }
.c-wave { height: 44px; display: flex; align-items: center; gap: 3px; }
.c-wave i { flex: none; width: 3px; border-radius: 2px; background: #fff; height: var(--h, 40%); }
.c-shot { height: 160px; border-radius: 12px; overflow: hidden; background: var(--i-card-2); position: relative; }

/* обложки: всё рисуется CSS, в сером */
.reel { position: absolute; inset: 0; display: grid; place-items: center; background: radial-gradient(120% 80% at 50% 38%, #26262a 0%, #111113 60%, #0a0a0b 100%); font-weight: 800; color: #fff; text-align: center; letter-spacing: -.02em; line-height: .95; }
/* надпись выше центра: по центру обложки стоит кнопка play, как в приложении */
.reel .big { position: absolute; left: 0; right: 0; top: 30%; transform: translateY(-50%); font-size: var(--fs, 21px); padding: 0 8%; }
.reel .handle { position: absolute; bottom: 7%; left: 0; right: 0; text-align: center; font-size: calc(var(--fs, 21px) * .36); font-weight: 600; color: rgba(255, 255, 255, .55); letter-spacing: 0; }
.reel.soft { background: radial-gradient(120% 80% at 50% 30%, #3b3b3f 0%, #1a1a1c 70%); }
.reel.light { background: radial-gradient(120% 90% at 40% 20%, #d9d9d9 0%, #9a9a9a 100%); color: #111; }
.reel.light .handle { color: rgba(0, 0, 0, .5); }
.reel .big.gold { color: #d9d9d9; }
/* кадры шириной в палец: надпись в одну строку и без отступов по краям */
.reel.tiny .big { white-space: nowrap; padding: 0 3px; letter-spacing: 0; }

.shot-pass { position: absolute; inset: 10px; background: #f2f2f2; border-radius: 10px; color: #111; padding: 10px; display: grid; gap: 5px; align-content: start; font-size: 9px; line-height: 11px; font-weight: 600; }
.shot-pass .route { font-size: 19px; line-height: 20px; font-weight: 800; letter-spacing: -.5px; }
.shot-pass .row { display: flex; justify-content: space-between; color: #555; font-weight: 500; }
.shot-pass .qr { width: 40px; height: 40px; margin-top: 4px; background:
  conic-gradient(from 90deg at 3px 3px, #111 90deg, transparent 0) 0 0 / 8px 8px,
  linear-gradient(#111, #111) 0 0 / 12px 12px no-repeat,
  linear-gradient(#111, #111) 28px 0 / 12px 12px no-repeat,
  linear-gradient(#111, #111) 0 28px / 12px 12px no-repeat; opacity: .85; }
.shot-slide { position: absolute; inset: 0; background: #0c0c0d; color: #fff; padding: 14px; display: grid; gap: 8px; align-content: start; }
.shot-slide b { font-size: 14px; line-height: 16px; }
.shot-slide svg { width: 100%; height: 80px; color: #bbb; }
.shot-list { position: absolute; inset: 0; background: #f4f4f4; color: #111; padding: 12px; display: grid; gap: 6px; align-content: start; font-size: 10px; line-height: 13px; }
.shot-list b { font-size: 13px; }
.shot-list .ln { height: 6px; border-radius: 3px; background: #c9c9c9; }
.shot-chat { position: absolute; inset: 0; background: #0f0f10; padding: 12px; display: grid; gap: 7px; align-content: end; font-size: 10px; line-height: 13px; }
.shot-chat span { max-width: 80%; padding: 6px 9px; border-radius: 12px; background: #2c2c2e; color: #fff; }
.shot-chat span.me { justify-self: end; background: #d8d8d8; color: #000; }
.shot-code { position: absolute; inset: 0; background: #0d0d0e; padding: 12px; font-family: "SF Mono", Menlo, monospace; font-size: 9px; line-height: 14px; color: #9a9a9a; white-space: pre; overflow: hidden; }
.shot-code b { color: #fff; font-weight: 500; }
.shot-ui { position: absolute; inset: 10px; border-radius: 12px; background: #f5f5f5; padding: 10px; display: grid; gap: 7px; align-content: start; color: #111; }
.shot-ui .hd { font-size: 12px; font-weight: 800; }
.shot-ui .bar { height: 7px; border-radius: 4px; background: #cfcfcf; }
.shot-ui .btnx { margin-top: 4px; height: 20px; border-radius: 10px; background: #111; color: #fff; font-size: 8px; display: grid; place-items: center; font-weight: 700; }

/* таб-бар iOS 27: одна стеклянная капсула, выбранный таб — светлая пилюля */
.i-tabbar { position: absolute; left: 21px; right: 21px; bottom: 22px; height: 64px; border-radius: 32px; display: flex; align-items: center; padding: 0 5px; z-index: 30; }
.i-tab { flex: 1; height: 54px; border-radius: 27px; display: grid; place-items: center; align-content: center; gap: 2px; font-size: 10px; line-height: 12px; font-weight: 600; color: var(--i-label); letter-spacing: .1px; }
.i-tab svg { width: 24px; height: 24px; }
.i-tab.on { background: rgba(255, 255, 255, .13); }
.i-tab:not(.on) { color: rgba(255, 255, 255, .9); }
.i-fab { position: absolute; right: 21px; bottom: 100px; width: 56px; height: 56px; border-radius: 50%; display: grid; place-items: center; z-index: 31; }
.i-fab svg { width: 24px; height: 24px; }
.i-fade-b { position: absolute; left: 0; right: 0; bottom: 0; height: 160px; background: linear-gradient(transparent, rgba(0, 0, 0, .85)); z-index: 25; pointer-events: none; }

/* экран ролика */
.i-player { position: absolute; left: 20px; right: 20px; top: 124px; height: 520px; border-radius: 22px; overflow: hidden; }
.i-player .reel .big { --fs: 44px; }
.i-bigplay { position: absolute; left: 50%; top: 50%; width: 56px; height: 56px; margin: -28px 0 0 -28px; border-radius: 50%; background: rgba(245, 245, 245, .92); display: grid; place-items: center; color: #000; z-index: 3; }
.i-bigplay svg { width: 22px; height: 22px; margin-left: 3px; }
.i-film { display: flex; gap: 8px; padding-left: 20px; }
.i-film figure { width: 64px; display: grid; gap: 6px; justify-items: center; }
.i-film .frame { position: relative; width: 64px; height: 96px; border-radius: 10px; overflow: hidden; }
.i-film figcaption { font-size: 12px; color: var(--i-label-2); font-variant-numeric: tabular-nums; }
.i-pad { padding: 0 20px; }
.i-h1 { font-size: 22px; line-height: 28px; font-weight: 700; letter-spacing: .35px; }
.i-sub { font-size: 15px; line-height: 20px; color: var(--i-label-2); letter-spacing: -.24px; }
.i-body { font-size: 17px; line-height: 23px; }
.i-caps { font-size: 13px; line-height: 18px; font-weight: 600; color: var(--i-label-2); text-transform: uppercase; letter-spacing: -.08px; }
.i-note { display: flex; gap: 8px; align-items: center; font-size: 13px; line-height: 18px; color: var(--i-label-2); letter-spacing: -.08px; }
.i-note svg { width: 15px; height: 15px; }
.i-actions { position: absolute; left: 16px; right: 16px; bottom: 26px; height: 60px; border-radius: 30px; display: flex; align-items: center; justify-content: space-around; z-index: 30; font-size: 16px; }
.i-actions span { display: inline-flex; align-items: center; gap: 7px; }
.i-actions span.off { color: var(--i-label-3); }
.i-actions svg { width: 18px; height: 18px; }

/* Ask */
.i-scope { position: absolute; left: 16px; top: 124px; height: 30px; padding: 0 12px; border-radius: 15px; display: inline-flex; align-items: center; gap: 6px; font-size: 15px; background: var(--i-card); }
.i-scope svg { width: 14px; height: 14px; }
.i-q { align-self: flex-end; max-width: 78%; padding: 10px 14px; border-radius: 20px; background: var(--i-card-2); font-size: 17px; line-height: 22px; }
.i-a { font-size: 17px; line-height: 24px; }
.i-a .cite { color: var(--i-label-2); font-size: 14px; font-weight: 600; }
.i-sources { display: grid; gap: 12px; }
.i-src { display: grid; grid-template-columns: 26px 1fr 10px; gap: 10px; align-items: center; }
.i-src .n { width: 24px; height: 24px; border-radius: 50%; background: var(--i-card-2); display: grid; place-items: center; font-size: 13px; font-weight: 600; }
.i-src b { display: block; font-size: 15px; line-height: 20px; font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.i-src span { display: block; font-size: 13px; line-height: 17px; color: var(--i-label-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.i-src svg { width: 8px; height: 13px; color: var(--i-label-3); }
.i-input { position: absolute; left: 16px; right: 16px; bottom: 104px; height: 50px; border-radius: 25px; background: var(--i-card); display: flex; align-items: center; padding: 0 8px 0 18px; gap: 10px; color: var(--i-label-3); z-index: 30; }
.i-input .grow { flex: 1; }
.i-input svg { width: 20px; height: 20px; color: var(--i-label-2); }
.i-input .send { width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; background: var(--i-card-3); }
.i-input .send svg { width: 16px; height: 16px; color: #fff; }

/* поиск */
.i-search { position: absolute; left: 16px; right: 16px; top: 162px; height: 44px; border-radius: 22px; background: var(--i-card); display: flex; align-items: center; gap: 8px; padding: 0 14px; color: var(--i-label-3); font-size: 17px; }
.i-search svg { width: 18px; height: 18px; color: var(--i-label-2); }
.i-search .q { color: var(--i-label); }
.i-search .caret { width: 2px; height: 22px; background: #fff; border-radius: 1px; animation: caret 1s steps(1) infinite; }
@keyframes caret { 50% { opacity: 0; } }
mark.hl { background: rgba(255, 255, 255, .92); color: #000; border-radius: 4px; padding: 0 2px; }

/* сводка */
.i-seg { position: absolute; left: 16px; right: 16px; top: 112px; height: 32px; border-radius: 9px; background: var(--i-fill); display: flex; padding: 2px; z-index: 20; }
.i-seg span { flex: 1; display: grid; place-items: center; font-size: 13px; font-weight: 600; border-radius: 7px; }
.i-seg span.on { background: #636366; box-shadow: 0 3px 8px rgba(0, 0, 0, .12); }
.i-big { font-size: 34px; line-height: 41px; font-weight: 700; letter-spacing: .37px; }
.i-themes { display: flex; flex-wrap: wrap; gap: 8px; }
.i-themes span { height: 32px; padding: 0 12px; border-radius: 16px; background: rgba(118, 118, 128, .18); display: inline-flex; align-items: center; font-size: 15px; }
.i-strip { display: flex; gap: 12px; }
.i-strip .c { width: 170px; flex: none; }
.i-btn { height: 48px; border-radius: 24px; background: var(--i-fill); display: flex; align-items: center; justify-content: center; gap: 8px; font-size: 17px; font-weight: 500; }
.i-btn svg { width: 18px; height: 18px; }
.i-tiny { font-size: 11px; line-height: 13px; color: var(--i-label-3); text-align: center; letter-spacing: .06px; }

/* Файлы: папка сохранения плитками и index.md, открытый для чтения */
.i-ftitle { left: 20px; right: 20px; top: 108px; font-size: 26px; line-height: 31px; font-weight: 700; letter-spacing: .2px; }
.i-fsub { left: 20px; top: 178px; display: flex; gap: 6px; align-items: center; font-size: 15px; color: var(--i-label-2); letter-spacing: -.24px; }
.i-fsub svg { width: 17px; height: 17px; }
.i-fgrid { position: absolute; left: 16px; right: 16px; top: 222px; display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.i-ftile { display: grid; justify-items: center; align-content: start; gap: 2px; text-align: center; min-width: 0; }
.i-ftile > b { font-size: 11.5px; line-height: 15px; font-weight: 500; letter-spacing: 0; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin-top: 7px; }
.i-ftile > span:last-child { font-size: 11px; line-height: 13px; color: var(--i-label-3); letter-spacing: 0; }
.ft-media, .ft-doc, .ft-folder { position: relative; width: 62px; height: 84px; }
.ft-media { border-radius: 9px; overflow: hidden; box-shadow: 0 0 0 .5px rgba(255, 255, 255, .16); }
.ft-play { position: absolute; left: 50%; top: 50%; width: 26px; height: 26px; margin: -13px 0 0 -13px; border-radius: 50%; display: grid; place-items: center; background: rgba(0, 0, 0, .55); }
.ft-play svg { width: 11px; height: 11px; margin-left: 2px; }
.ft-doc { border-radius: 6px; background: #f2f2f2; padding: 8px 7px; display: grid; gap: 4px; align-content: start; }
.ft-doc b { font-size: 6.5px; line-height: 8px; font-weight: 700; color: #111; letter-spacing: 0; text-align: left; }
.ft-doc i { height: 3px; border-radius: 2px; background: #cdcdcd; }
.ft-doc i:nth-of-type(2n) { width: 80%; }
.ft-doc i:nth-of-type(3n) { width: 62%; }
.ft-folder { display: grid; place-items: center; }
.ft-folder svg { width: 62px; height: 56px; color: #8e8e93; stroke-width: 1.1; }
.ft-folder svg path { fill: #3a3a3c; }
.i-md { position: absolute; left: 12px; right: 12px; bottom: 16px; top: 372px; border-radius: 30px; background: #1c1c1e; box-shadow: inset 0 .5px 0 rgba(255, 255, 255, .2), 0 -10px 40px rgba(0, 0, 0, .6); padding: 30px 22px 20px; overflow: hidden; z-index: 30; display: grid; gap: 10px; align-content: start; }
.i-md .grab { position: absolute; top: 8px; left: 50%; width: 36px; height: 5px; margin-left: -18px; border-radius: 3px; background: rgba(255, 255, 255, .25); }
.md-file { display: flex; gap: 6px; align-items: center; font-size: 13px; line-height: 16px; color: var(--i-label-2); letter-spacing: -.08px; }
.md-file svg { width: 15px; height: 15px; }
.md-title { font-size: 22px; line-height: 27px; font-weight: 700; letter-spacing: .35px; }
.md-meta { font-size: 14px; line-height: 18px; color: var(--i-label-2); letter-spacing: -.15px; }
.md-tags { display: flex; gap: 6px; }
.md-tags span { height: 26px; padding: 0 10px; border-radius: 13px; background: rgba(118, 118, 128, .24); display: inline-flex; align-items: center; font-size: 13px; letter-spacing: -.08px; }
.i-md p { font-size: 16px; line-height: 22px; color: rgba(235, 235, 245, .86); letter-spacing: -.31px; }
.md-h { font-size: 13px; line-height: 18px; font-weight: 600; text-transform: uppercase; color: var(--i-label-2); letter-spacing: -.08px; margin-top: 4px; }

/* шторка «Поделиться» */
.i-sheet { position: absolute; left: 0; right: 0; bottom: 0; border-radius: 34px 34px 0 0; background: #1c1c1e; padding: 22px 20px 34px; z-index: 35; box-shadow: 0 -10px 40px rgba(0, 0, 0, .5); }
.i-sheet .grab { width: 36px; height: 5px; border-radius: 3px; background: rgba(255, 255, 255, .25); margin: -12px auto 16px; }
.i-apps { display: flex; gap: 18px; }
.i-app { display: grid; justify-items: center; gap: 6px; font-size: 11px; color: var(--i-label-2); }
.i-app .ic { width: 62px; height: 62px; border-radius: 15px; display: grid; place-items: center; background: #2c2c2e; }
.i-app .ic.iki { background: #000; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .14); color: #fff; }
.i-app .ic svg { width: 34px; height: 34px; }
.i-primary { height: 52px; border-radius: 26px; background: #f2f2f2; color: #000; display: grid; place-items: center; font-weight: 600; font-size: 17px; }

/* радио */
.i-radio-wave { display: flex; align-items: center; justify-content: center; gap: 4px; height: 120px; }
.i-radio-wave i { width: 5px; border-radius: 3px; background: #fff; height: var(--h, 30%); animation: wave 1.3s var(--ease-io) infinite alternate; animation-delay: calc(var(--j, 0) * -110ms); transform-origin: center; }
@keyframes wave { from { transform: scaleY(.35); } to { transform: scaleY(1); } }
.paused .i-radio-wave i, .paused .c-wave i { animation-play-state: paused; }

/* ---------- Apple Watch ----------
   Корпус 46 мм — 39 × 46 мм (1 : 1.179), экран 208 × 248 pt почти во весь
   корпус. Ремешок сверху и снизу, колёсико и кнопка справа: по ним глаз и
   узнаёт часы. --w — ширина корпуса, без единиц. */
.watch { --w: 190; position: relative; flex: none; width: calc(var(--w) * 1px); height: calc(var(--w) * 1.78px); }
.watch-band { position: absolute; left: 50%; width: calc(var(--w) * .64px); height: calc(var(--w) * .4px); margin-left: calc(var(--w) * -.32px); background: linear-gradient(90deg, #121213, #262628 22%, #2e2e30 50%, #262628 78%, #121213); }
.watch-band.top { top: 0; border-radius: calc(var(--w) * .06px) calc(var(--w) * .06px) 0 0; -webkit-mask-image: linear-gradient(to top, #000 45%, transparent); mask-image: linear-gradient(to top, #000 45%, transparent); }
.watch-band.bottom { bottom: 0; border-radius: 0 0 calc(var(--w) * .06px) calc(var(--w) * .06px); -webkit-mask-image: linear-gradient(#000 45%, transparent); mask-image: linear-gradient(#000 45%, transparent); }
.watch-case {
  position: absolute; left: 0; right: 0; top: calc(var(--w) * .3px); height: calc(var(--w) * 1.179px);
  border-radius: calc(var(--w) * .29px);
  background: linear-gradient(150deg, #5e5e61 0%, #262628 26%, #101011 58%, #2d2d2f 84%, #4a4a4d 100%);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .14), 0 34px 70px -26px rgba(0, 0, 0, .9);
}
:root[data-theme="light"] .watch-case { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .14), 0 34px 70px -30px rgba(0, 0, 0, .45); }
.watch-case::before { content: ""; position: absolute; inset: calc(var(--w) * .03px); border-radius: calc(var(--w) * .262px); background: #000; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .07); }
.watch-crown { position: absolute; right: calc(var(--w) * -.052px); top: 21%; width: calc(var(--w) * .078px); height: calc(var(--w) * .2px); border-radius: calc(var(--w) * .028px); background: repeating-linear-gradient(180deg, #707073 0 1px, #2a2a2c 1px 3px); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .12), inset calc(var(--w) * -.02px) 0 calc(var(--w) * .02px) rgba(0, 0, 0, .5); }
.watch-button { position: absolute; right: calc(var(--w) * -.024px); top: 50%; width: calc(var(--w) * .04px); height: calc(var(--w) * .27px); border-radius: calc(var(--w) * .02px); background: linear-gradient(90deg, #3c3c3e, #18181a); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .08); }
.watch-screen { position: absolute; left: calc(var(--w) * .075px); right: calc(var(--w) * .075px); top: calc(var(--w) * .082px); aspect-ratio: 208 / 248; border-radius: calc(var(--w) * .2px); overflow: hidden; background: #000; }
.watch-screen .wos { zoom: calc(var(--w) * .85 / 208); }
.wos { width: 208px; height: 248px; position: relative; font-family: var(--ui); color: #fff; font-size: 15px; line-height: 19px; display: grid; justify-items: center; align-content: start; gap: 8px; padding: 30px 12px 0; letter-spacing: 0; }
.wos .wtime { position: absolute; top: 8px; right: 18px; font-size: 15px; line-height: 18px; font-weight: 600; }
.wos .wmic { width: 88px; height: 88px; border-radius: 50%; display: grid; place-items: center; background: rgba(255, 255, 255, .09); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .14); }
.wos .wmic svg { width: 34px; height: 34px; color: #ff453a; stroke-width: 2; }
.wos .wmic.rec i { width: 74px; height: 74px; border-radius: 50%; background: #ff453a; display: grid; place-items: center; }
.wos .wmic.rec i::after { content: ""; width: 22px; height: 22px; border-radius: 5px; background: #fff; }
.wos .wdict { height: 34px; padding: 0 16px; border-radius: 17px; background: #2c2c2e; display: grid; place-items: center; font-size: 13px; font-weight: 600; }
.wos .wsaved { justify-self: stretch; display: grid; gap: 1px; padding: 2px 6px 0; }
.wos .wsaved b { display: flex; justify-content: space-between; font-size: 13px; line-height: 16px; font-weight: 600; }
.wos .wsaved > span { font-size: 11px; line-height: 14px; color: rgba(235, 235, 245, .6); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.wos .wsaved small { font-size: 11px; line-height: 14px; color: rgba(235, 235, 245, .35); }
.wos .wtimer { font-size: 22px; line-height: 26px; font-weight: 600; color: #ff453a; font-variant-numeric: tabular-nums; }
.wos .wwave { height: 30px; justify-content: center; }
.wos .wwave i { width: 3px; animation: wave 1s var(--ease-io) infinite alternate; animation-delay: calc(var(--j, 0) * -90ms); }

/* ---------- iPad ----------
   Горизонтальный iPad, экран 1180 × 820 pt; как и в iPhone, размеры в пунктах,
   масштаб — через zoom от ширины корпуса. */
.ipad { --w: 520; position: relative; flex: none; width: calc(var(--w) * 1px); padding: calc(var(--w) * .022px); border-radius: calc(var(--w) * .048px);
  background: linear-gradient(160deg, #4a4a4c 0%, #1b1b1d 22%, #0b0b0c 50%, #202022 78%, #4d4d50 100%);
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .12), inset 0 0 0 calc(var(--w) * .01px) #050505, 0 0 0 1px rgba(0, 0, 0, .9), 0 50px 100px -30px rgba(0, 0, 0, .9); }
:root[data-theme="light"] .ipad { box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .12), inset 0 0 0 calc(var(--w) * .01px) #050505, 0 0 0 1px rgba(0, 0, 0, .9), 0 50px 100px -40px rgba(0, 0, 0, .45); }
.ipad-screen { position: relative; overflow: hidden; aspect-ratio: 1180 / 820; border-radius: calc(var(--w) * .03px); background: #000; }
.ios.pd { width: 1180px; height: 820px; zoom: calc(var(--w) * .956 / 1180); }
.pd-side { position: absolute; left: 14px; top: 14px; bottom: 14px; width: 250px; border-radius: 26px; background: rgba(30, 30, 32, .92); box-shadow: inset 0 .5px 0 rgba(255, 255, 255, .22), inset 0 0 0 .5px rgba(255, 255, 255, .1); padding: 22px 12px; display: flex; flex-direction: column; gap: 2px; z-index: 20; }
.pd-item { height: 42px; padding: 0 12px; border-radius: 12px; display: flex; align-items: center; gap: 12px; font-size: 17px; }
.pd-item svg { width: 22px; height: 22px; color: var(--i-label-2); }
.pd-item.on { background: rgba(255, 255, 255, .12); font-weight: 600; }
.pd-item.on svg { color: #fff; }
.pd-sec { padding: 18px 12px 6px; font-size: 15px; font-weight: 700; }
.pd-title { position: absolute; left: 294px; top: 34px; font-size: 34px; line-height: 41px; font-weight: 700; letter-spacing: .37px; }
.pd-grid { position: absolute; left: 294px; right: 24px; top: 96px; display: flex; gap: 16px; align-items: flex-start; }
.pd-grid .i-col { gap: 16px; }

/* ---------- браузер: iki.place/library ---------- */
.wb { --w: 720; position: relative; flex: none; width: calc(var(--w) * 1px); border-radius: 14px; overflow: hidden; background: #070708; box-shadow: 0 0 0 1px rgba(255, 255, 255, .14), 0 40px 90px -30px rgba(0, 0, 0, .9); }
:root[data-theme="light"] .wb { box-shadow: 0 0 0 1px rgba(0, 0, 0, .5), 0 40px 90px -40px rgba(0, 0, 0, .45); }
.wb-inner { width: 1280px; height: 800px; zoom: calc(var(--w) / 1280); position: relative; font-family: var(--ui); color: #fff; letter-spacing: 0; }
.wb-bar { height: 52px; display: flex; align-items: center; gap: 12px; padding: 0 16px; background: #1f1f20; border-bottom: 1px solid #000; }
.wb-bar .lights { display: flex; gap: 8px; }
.wb-bar .lights i { width: 12px; height: 12px; border-radius: 50%; background: #4c4c4e; }
.wb-bar .url { width: 440px; margin: 0 auto; height: 32px; border-radius: 9px; background: #121213; display: flex; align-items: center; justify-content: center; gap: 6px; font-size: 13px; color: #a9a9a9; }
.wb-bar .url svg { width: 12px; height: 12px; }
.wb-bar .ext { width: 32px; height: 32px; border-radius: 8px; display: grid; place-items: center; background: #3a3a3c; color: #fff; }
.wb-bar .ext svg { width: 18px; height: 18px; }
.wb-page { padding: 34px 56px; }
.wb-head { display: flex; justify-content: space-between; align-items: center; font-size: 14px; color: #8c8c8c; }
.wb-brand { display: flex; align-items: center; gap: 8px; font-weight: 700; font-size: 22px; color: #fff; letter-spacing: -.04em; }
.wb-brand svg { width: 22px; height: 22px; }
.wb-lock { display: flex; gap: 6px; align-items: center; }
.wb-lock svg { width: 14px; height: 14px; }
.wb-h1 { font-size: 46px; line-height: 1; font-weight: 600; letter-spacing: -.04em; margin: 34px 0 30px; }
.wb-panes { display: grid; grid-template-columns: 380px 1fr; gap: 30px; }
.wb-list { display: grid; gap: 4px; align-content: start; }
.wb-search { height: 44px; border-radius: 12px; background: #19191a; display: flex; align-items: center; gap: 10px; padding: 0 14px; color: #777; font-size: 15px; margin-bottom: 10px; }
.wb-search svg { width: 16px; height: 16px; }
.wb-row { display: grid; gap: 2px; padding: 11px 14px; border-radius: 12px; }
.wb-row b { font-size: 16px; font-weight: 600; }
.wb-row span { font-size: 13px; color: #8c8c8c; }
.wb-row.on { background: #1d1d1f; }
.wb-reader { background: #111112; border-radius: 18px; padding: 30px 34px; display: grid; gap: 12px; align-content: start; min-height: 440px; }
.wb-reader > b { font-size: 30px; line-height: 1.1; font-weight: 700; letter-spacing: -.02em; }
.wb-meta { font-size: 14px; color: #8c8c8c; }
.wb-reader p { font-size: 17px; line-height: 1.6; color: #d0d0d0; }
.wb-cap { font-size: 13px; font-weight: 600; text-transform: uppercase; color: #8c8c8c; margin-top: 8px; }

/* ---------- все устройства одним планом ----------
   Холст 1180 × 660, как у Apple: браузер позади, iPad и iPhone перед ним, часы
   спереди. На узких экранах холст целиком уменьшается через zoom. */
.lineup-stage { display: grid; justify-items: center; overflow: hidden; margin-inline: calc(var(--gutter) * -1); padding: 10px var(--gutter) 30px; }
.lineup { position: relative; width: 1180px; height: 660px; zoom: var(--lz, 1); }
.lu { position: absolute; }
.lu-web { left: 170px; top: 0; }
.lu-ipad { right: 70px; top: 188px; }
.lu-phone { left: 64px; top: 150px; }
.lu-watch { right: 0; top: 398px; }
.lineup-notes { display: grid; grid-template-columns: repeat(4, 1fr); gap: 30px; margin-top: 40px; }
.lineup-notes > div { display: grid; gap: 8px; align-content: start; }
.lineup-notes svg { width: 24px; height: 24px; }
.lineup-notes h3 { font-size: 1.12rem; }
.lineup-notes p { font-size: .92rem; color: var(--ink-2); font-weight: 300; line-height: 1.45; }
@media (max-width: 1260px) { .lineup { --lz: .9; } }
@media (max-width: 1120px) { .lineup { --lz: .8; } }
@media (max-width: 980px) { .lineup { --lz: .68; } .lineup-notes { grid-template-columns: 1fr 1fr; } }
@media (max-width: 840px) { .lineup { --lz: .58; } }
@media (max-width: 720px) { .lineup { --lz: .48; } }
@media (max-width: 600px) { .lineup { --lz: .4; } }
@media (max-width: 500px) { .lineup { --lz: .32; } .lineup-notes { grid-template-columns: 1fr; gap: 24px; } }
@media (max-width: 400px) { .lineup { --lz: .29; } }

/* ---------- мелкие арт-элементы тайлов ---------- */
.ph-card { width: 70%; }
.orbit { position: absolute; inset: 0; display: grid; place-items: center; }
.icon-xl { width: 64px; height: 64px; }
.island-demo { display: flex; align-items: center; gap: 10px; height: 44px; padding: 0 16px; border-radius: 22px; background: #000; color: #fff; font-family: var(--ui); font-size: 14px; font-weight: 600; box-shadow: 0 0 0 1px rgba(255, 255, 255, .12); }
.island-demo .rec { width: 10px; height: 10px; border-radius: 50%; background: #ff453a; animation: blink 1.4s steps(1) infinite; }
@keyframes blink { 50% { opacity: .25; } }
.island-demo .c-wave { height: 22px; }
.island-demo .c-wave i { width: 2.5px; animation: wave 1s var(--ease-io) infinite alternate; animation-delay: calc(var(--j, 0) * -90ms); }
.chips-cloud { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; padding: 0 20px; }
.chips-cloud .tag { background: var(--glass-fill); }
.pencil-line { width: 80%; height: 90px; }
.pencil-line path { stroke-dasharray: 600; stroke-dashoffset: 600; animation: draw 3.6s var(--ease-io) infinite; }
@keyframes draw { 0% { stroke-dashoffset: 600; } 55%, 100% { stroke-dashoffset: 0; } }
.anim-off *, .anim-off *::before, .anim-off *::after { animation-play-state: paused !important; }


/* Телефон должен целиком помещаться в прилипшую сцену: на невысоких окнах
   корпус меньше. Ширина задаётся числом без единиц, поэтому — ступенями. */
@media (max-height: 980px) and (min-width: 900px) { .pillar-phone .device, .feature-scene .feature-media .device { --w: 340 !important; } }
@media (max-height: 860px) and (min-width: 900px) { .pillar-phone .device, .feature-scene .feature-media .device { --w: 300 !important; } .hero-phone .device { --w: 320; } }
@media (max-height: 740px) and (min-width: 900px) { .pillar-phone .device, .feature-scene .feature-media .device { --w: 262 !important; } }

/* ---------- хореография экранов ----------
   Каждый экран опоры получает свой локальный прогресс --q (0…1) из общего --p
   сцены. Мобильные копии экранов живут в своих маленьких сценах «view». */

.pillar-screen.s0 { --q: clamp(0, calc(var(--p) * 3.05), 1); }
.pillar-screen.s1 { --q: clamp(0, calc((var(--p) - .3333) * 3.05), 1); }
.pillar-screen.s2 { --q: clamp(0, calc((var(--p) - .6667) * 3.05), 1); }
.pillar-screen.m { --q: clamp(0, calc((var(--p) - .14) * 2.1), 1); opacity: 1 !important; }
.pillar-m { display: grid; gap: 34px; }

/* ролик: сначала заглушка, потом лента кадров, заголовок, расшифровка, надписи */
.vd-scroll { position: absolute; left: 0; right: 0; top: 0; height: 874px; --vs: clamp(0, calc((var(--q) - .08) / .32), 1); transform: translateY(calc(var(--vs) * -452px)); }
.vd-after { position: absolute; left: 0; right: 0; top: 664px; }
.vd-fade-t { position: absolute; left: 0; right: 0; top: 0; height: 118px; background: linear-gradient(#000 48%, rgba(0, 0, 0, 0)); z-index: 15; }
.i-film .fr { --f: clamp(0, calc((var(--q) - .28 - var(--i) * .05) * 10), 1); opacity: var(--f); transform: translateY(calc((1 - var(--f)) * 10px)); }
.vd-titles { display: grid; }
.vd-titles > * { grid-area: 1 / 1; }
.vd-t0 { opacity: calc(1 - clamp(0, calc((var(--q) - .44) * 9), 1)); color: var(--i-label-2); }
.vd-t1 { opacity: clamp(0, calc((var(--q) - .48) * 9), 1); }
.vd-author { opacity: clamp(0, calc((var(--q) - .5) * 9), 1); }
.vd-bodywrap { position: relative; }
.vd-pending { position: absolute; top: 0; left: 0; right: 0; opacity: calc(1 - clamp(0, calc((var(--q) - .44) * 9), 1)); }
.vd-text .tw { opacity: clamp(.04, calc((var(--q) - .5) * var(--n) * 3.2 - var(--i) + 1), 1); }
.vd-on { opacity: clamp(0, calc((var(--q) - .84) * 12), 1); }
.vd-lines span { opacity: clamp(0, calc((var(--q) - .86 - var(--i) * .035) * 14), 1); }

/* ответ: вопрос, ответ по словам, источники */
.plane-toast { position: absolute; z-index: 46; top: 14px; left: 50%; display: flex; align-items: center; gap: 10px; padding: 8px 16px 8px 12px; border-radius: 22px; font-size: 13px; line-height: 16px; white-space: nowrap;
  --t: clamp(0, calc(var(--q) * 14), 1); --o: calc(var(--t) - clamp(0, calc((var(--q) - .34) * 10), 1));
  opacity: var(--o); transform: translate(-50%, calc((1 - var(--t)) * -26px)); }
.plane-toast svg { width: 22px; height: 22px; }
.ask-q { --t: clamp(0, calc((var(--q) - .08) * 10), 1); opacity: var(--t); transform: translateY(calc((1 - var(--t)) * 12px)); }
.ask-a .aw { opacity: clamp(0, calc((var(--q) - .2) * var(--n) * 2.3 - var(--i) + 1), 1); }
.ask-src .i-src { --t: clamp(0, calc((var(--q) - .66 - var(--k, 0) * .07) * 10), 1); opacity: var(--t); transform: translateY(calc((1 - var(--t)) * 8px)); }
.ask-src .i-src:nth-child(2) { --k: 1; }
.ask-scene .device-screen { position: relative; }
.ask-layer { position: absolute; inset: 0; transition: opacity .6s var(--ease); }
.ask-scene .ask-layer.a1 { opacity: 0; }
.ask-scene[data-step="1"] .ask-layer.a0 { opacity: 0; }
.ask-scene[data-step="1"] .ask-layer.a1 { opacity: 1; }
.ask-scene .a0 { --q: clamp(0, calc(var(--p) * 2.3), 1); }
.ask-scene .a1 { --q: clamp(0, calc((var(--p) - .5) * 3), 1); }
.ask-scene .a1 .ask-a { opacity: clamp(0, calc((var(--q) - .3) * 5), 1); }

/* файлы: плитки по одной, потом index.md шторкой снизу */
.i-ftile.fl { --t: clamp(0, calc((var(--q) - .04 - var(--i) * .06) * 10), 1); opacity: var(--t); transform: translateY(calc((1 - var(--t)) * 16px)) scale(calc(.92 + var(--t) * .08)); }
.i-md { transform: translateY(calc((1 - clamp(0, calc((var(--q) - .4) / .22), 1)) * 112%)); }
.i-md .ml { opacity: clamp(0, calc((var(--q) - .58 - var(--i) * .025) * 14), 1); }

/* поиск: буквы печатаются, результаты встают, приходит iPhone-поиск */
.search-scene .ltr { display: inline-block; overflow: hidden; vertical-align: bottom; max-width: calc(clamp(0, calc((var(--p) - .12) * 26 - var(--i)), 1) * 1em); }
.search-scene .res { --t: clamp(0, calc((var(--p) - .42 - var(--i) * .06) * 8), 1); opacity: var(--t); transform: translateY(calc((1 - var(--t)) * 16px)); }
.search-scene .side-card { opacity: clamp(0, calc((var(--p) - .62) * 6), 1); transform: translateY(calc((1 - clamp(0, calc((var(--p) - .62) * 6), 1)) * 20px)); }

/* шторка «Поделиться» по кругу: системная → IKI → снова */
.share-loop .share-iki { transform: translateY(105%); animation: share-iki 6.5s var(--ease) infinite; }
.share-loop .share-sys { animation: share-sys 6.5s var(--ease) infinite; }
@keyframes share-iki { 0%, 42% { transform: translateY(105%); } 52%, 90% { transform: none; } 100% { transform: translateY(105%); } }
@keyframes share-sys { 0%, 42% { transform: none; } 52%, 90% { transform: translateY(105%); } 100% { transform: none; } }

/* мелкие живые детали плиток */
.scanline { position: absolute; left: 0; right: 0; height: 2px; top: 0; background: rgba(0, 0, 0, .55); box-shadow: 0 0 18px 6px rgba(0, 0, 0, .12); animation: scan 3.4s var(--ease-io) infinite; }
@keyframes scan { 0% { transform: translateY(0); opacity: 0; } 8% { opacity: 1; } 70% { transform: translateY(236px); opacity: 1; } 78%, 100% { transform: translateY(236px); opacity: 0; } }
.prompter { position: absolute; inset: 0 0 auto 0; display: grid; align-content: start; gap: 6px; padding-top: 18px; text-align: center; font-size: 1.3rem; font-weight: 600; letter-spacing: -.02em; line-height: 1.12; color: var(--ink);
  -webkit-mask-image: linear-gradient(transparent, #000 30%, #000 70%, transparent); mask-image: linear-gradient(transparent, #000 30%, #000 70%, transparent); animation: prompt 12s linear infinite; }
@keyframes prompt { from { transform: translateY(0); } to { transform: translateY(-46%); } }
/* клетки с рисунком: рисунок в потоке, а не поверх текста */
.bento-cell.has-art .art { position: relative; inset: auto; height: auto; pointer-events: none; }
.bento-cell.wide.has-art { flex-direction: row; align-items: stretch; gap: 20px; }
.bento-cell.wide.has-art .bc-text { flex: 1; display: flex; flex-direction: column; gap: 8px; }
.bento-cell.wide.has-art .art { flex: 1; display: grid; place-items: center; }
.bento-cell.tall.has-art { gap: 8px; }
.bento-cell.tall.has-art .art { flex: 1; margin: 6px -24px -24px; overflow: hidden; }
@media (max-width: 560px) { .bento-cell.wide.has-art { flex-direction: column; } }
.bento-cell .icon { width: 28px; height: 28px; }

/* ---------- движение: уважать настройку системы ---------- */

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; }
  .scene { height: auto !important; --p: 1 !important; }
  .scene-sticky { position: static !important; height: auto !important; overflow: visible !important; padding-block: 90px; }
  .hero-text { transform: none; opacity: 1; }
  .hero-phone { position: relative; left: auto; top: auto; transform: none; display: grid; place-items: center; padding: 40px 0 80px; }
  .arrive { opacity: 1; transform: none; }
  .float { display: none; }
  .pillars-grid { display: none; }
  .pillar-mobile { display: grid; gap: 120px; }
  .pillar-mobile .pillar-step { position: static; opacity: 1; transform: none; filter: none; }
  .pillar-mobile .device { margin: 34px auto 0; }
  .capture-track { transform: none; width: auto; overflow-x: auto; }
  .w { opacity: 1; }
  .js [data-reveal] { opacity: 1; transform: none; filter: none; }
}

/* ---------- переходы между страницами ---------- */

/* Новая страница раскрывается цветком из четырёх кругов — как знак IKI — из
   точки клика (--vt-x/--vt-y ставит скрипт в <head> по pagereveal). Перед
   краем цветка идёт кайма из точек-частиц: маска точек пересечена с кругом
   чуть больше цветка. Старая страница в это время чуть уходит вглубь.
   Где браузер не умеет переходы между документами, переход обычный. */
@view-transition { navigation: auto; }
@property --vt-r { syntax: "<length>"; inherits: false; initial-value: 0px; }
::view-transition-old(root) { animation: vt-old .85s cubic-bezier(.65, 0, .35, 1) both; }
::view-transition-new(root) {
  --x: var(--vt-x, 50vw); --y: var(--vt-y, 50vh); --o: calc(var(--vt-r) * .42);
  animation: vt-new .85s cubic-bezier(.65, 0, .35, 1) both;
  mask-image:
    radial-gradient(circle at calc(var(--x) - var(--o)) calc(var(--y) - var(--o)), #000 var(--vt-r), transparent calc(var(--vt-r) + 1px)),
    radial-gradient(circle at calc(var(--x) + var(--o)) calc(var(--y) - var(--o)), #000 var(--vt-r), transparent calc(var(--vt-r) + 1px)),
    radial-gradient(circle at calc(var(--x) - var(--o)) calc(var(--y) + var(--o)), #000 var(--vt-r), transparent calc(var(--vt-r) + 1px)),
    radial-gradient(circle at calc(var(--x) + var(--o)) calc(var(--y) + var(--o)), #000 var(--vt-r), transparent calc(var(--vt-r) + 1px)),
    radial-gradient(circle, #000 3px, transparent 4px),
    radial-gradient(circle at var(--x) var(--y), #000 calc(var(--vt-r) * 1.62 + 80px), transparent calc(var(--vt-r) * 1.62 + 81px));
  mask-size: 100% 100%, 100% 100%, 100% 100%, 100% 100%, 15px 15px, 100% 100%;
  mask-repeat: no-repeat, no-repeat, no-repeat, no-repeat, repeat, no-repeat;
  mask-composite: add, add, add, add, intersect, add;
}
@keyframes vt-new { from { --vt-r: 0px; } to { --vt-r: 118vmax; } }
@keyframes vt-old { to { transform: scale(.965); opacity: .5; } }
@media (prefers-reduced-motion: reduce) { ::view-transition-old(root), ::view-transition-new(root) { animation: none; mask-image: none; } }
/* У навигации нет своего view-transition-name: она раскрывается вместе со
   страницей. Отдельная группа рисуется поверх корня — слой стекла закрыл бы
   текст капсулы на всё время перехода, а имя на предке стекла ломает размытие. */

/* ---------- таблица пяти вопросов на страницах сравнения ---------- */
.scorecard { border-radius: 30px; padding: 8px 10px; width: min(100%, 460px); }
.sc-row { display: grid; grid-template-columns: 1fr 88px 64px; gap: 10px; align-items: center; padding: 15px 14px; font-size: .92rem; }
.sc-row + .sc-row { box-shadow: inset 0 1px 0 var(--line); }
.sc-head { font-family: var(--sans); font-weight: 500; font-size: .88rem; color: var(--ink-2); padding-block: 12px; }
.sc-head span:nth-child(n+2) { text-align: center; }
.sc-q { color: var(--ink-2); }
.sc-them, .sc-me { justify-self: center; }

/* ---------- перенесённые страницы (privacy, terms, save, library) ---------- */
.legacy .prose { max-width: 760px; }
.legacy .prose h2 { font-size: clamp(1.5rem, 2.6vw, 2rem); }
.legacy .pull { font-size: 1.15rem; color: var(--ink); font-weight: 400; }
.legacy .page-hero h1 { font-size: clamp(2.6rem, 6vw, 5.2rem); }
.legacy input, .legacy textarea { border-color: var(--line-2) !important; }
.note a { text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--line-2); }
.compare .split-hero h1 { font-size: clamp(2.4rem, 4.6vw, 4.4rem); }
