/* CLS-фикс (07.07.2026): метрик-совместимые фолбэки — свап веб-шрифта не меняет
   геометрию текста (size-adjust под Times New Roman: он метрик-идентичен Liberation Serif на Linux у PSI-ботов — сдвиг 0 на всех ОС). */
@font-face{font-family:'Cormorant Fallback';src:local('Times New Roman'),local('Liberation Serif'),local('Tinos');size-adjust:94.35%;ascent-override:97.93%;descent-override:30.42%;line-gap-override:0%;}
@font-face{font-family:'Manrope Fallback';src:local('Arial'),local('Liberation Sans'),local('Arimo'),local('Helvetica Neue');size-adjust:102%;ascent-override:104.51%;descent-override:29.41%;line-gap-override:0%;}

/* A-perf3 · @import расшит: colors_and_type + tokens вклеены, один блокирующий файл */
/* =========================================================
   Asatoma Aqua — Design Tokens
   Colors, type, spacing, radii, shadows
   ========================================================= */

/* Cormorant Garamond — supplied brand display font, per-weight TTFs */
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-Light-sub.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-Light.ttf') format('truetype'); font-weight: 300; font-style: normal; font-display: swap; }
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-LightItalic-sub.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-LightItalic.ttf') format('truetype'); font-weight: 300; font-style: italic; font-display: swap; }
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-Regular.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-Regular.ttf') format('truetype'); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-Italic.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-Italic.ttf') format('truetype'); font-weight: 400; font-style: italic; font-display: swap; }
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-Medium.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-Medium.ttf') format('truetype'); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-MediumItalic.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-MediumItalic.ttf') format('truetype'); font-weight: 500; font-style: italic; font-display: swap; }
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-SemiBold.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-SemiBold.ttf') format('truetype'); font-weight: 600; font-style: normal; font-display: swap; }
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-SemiBoldItalic.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-SemiBoldItalic.ttf') format('truetype'); font-weight: 600; font-style: italic; font-display: swap; }
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-Bold.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-Bold.ttf') format('truetype'); font-weight: 700; font-style: normal; font-display: swap; }
@font-face { font-family: 'Cormorant Garamond'; src: url('../project/fonts/CormorantGaramond-BoldItalic.woff2') format('woff2'), url('../project/fonts/CormorantGaramond-BoldItalic.ttf') format('truetype'); font-weight: 700; font-style: italic; font-display: swap; }

/* Manrope — supplied brand font, per-weight TTFs (full Cyrillic) */
@font-face { font-family: 'Manrope'; src: url('../project/fonts/Manrope-ExtraLight.woff2') format('woff2'), url('../project/fonts/Manrope-ExtraLight.ttf') format('truetype'); font-weight: 200; font-style: normal; font-display: swap; }
@font-face { font-family: 'Manrope'; src: url('../project/fonts/Manrope-Light-sub.woff2') format('woff2'), url('../project/fonts/Manrope-Light.ttf') format('truetype'); font-weight: 300; font-style: normal; font-display: swap; }
@font-face { font-family: 'Manrope'; src: url('../project/fonts/Manrope-Regular-sub.woff2') format('woff2'), url('../project/fonts/Manrope-Regular.ttf') format('truetype'); font-weight: 400; font-style: normal; font-display: swap; }
@font-face { font-family: 'Manrope'; src: url('../project/fonts/Manrope-Medium-sub.woff2') format('woff2'), url('../project/fonts/Manrope-Medium.ttf') format('truetype'); font-weight: 500; font-style: normal; font-display: swap; }
@font-face { font-family: 'Manrope'; src: url('../project/fonts/Manrope-SemiBold-sub.woff2') format('woff2'), url('../project/fonts/Manrope-SemiBold.ttf') format('truetype'); font-weight: 600; font-style: normal; font-display: swap; }
@font-face { font-family: 'Manrope'; src: url('../project/fonts/Manrope-Bold.woff2') format('woff2'), url('../project/fonts/Manrope-Bold.ttf') format('truetype'); font-weight: 700; font-style: normal; font-display: swap; }
@font-face { font-family: 'Manrope'; src: url('../project/fonts/Manrope-ExtraBold.woff2') format('woff2'), url('../project/fonts/Manrope-ExtraBold.ttf') format('truetype'); font-weight: 800; font-style: normal; font-display: swap; }

:root {
  /* ---------- BRAND COLOR ---------- */
  --aa-sapphire:        #2C4A88;   /* Primary brand — extracted from logo */
  --aa-sapphire-deep:   #163866;   /* Hover / pressed */
  --aa-sapphire-soft:   #3A6BB0;   /* Lighter sapphire for accents */

  /* ---------- WARM NEUTRALS ---------- */
  --aa-pearl:           #EFE7DA;   /* Main background — warm pearl white */
  --aa-pearl-deep:      #E5DBCB;   /* Card surface on pearl */
  --aa-travertine:      #D4B896;   /* Texture support */
  --aa-honey:           #B8895A;   /* Honey oak warmth */
  --aa-brass:           #9B7C4A;   /* Brushed brass — premium metal */

  /* ---------- INK / TEXT ---------- */
  --aa-anthracite:      #2B2620;   /* Warm dark — NEVER pure black */
  --aa-ink:             #3F362C;   /* Body copy */
  --aa-ink-mute:        #5C5248;   /* Secondary text (затемнён с #6E6155: контраст ≥4.5 на pearl-deep) */
  --aa-ink-soft:        #5D574E;   /* Tertiary / captions (затемнён с #97877A: мелкий текст на pearl требует 4.5:1) */

  /* ---------- VAPOR / ACCENT ---------- */
  --aa-vapor:           #B8D4E8;   /* Ionized vapor pale blue — sparing */
  --aa-vapor-mist:      #D9E6EF;   /* Whisper-soft vapor */

  /* ---------- SURFACE / LINE ---------- */
  --aa-surface:         #F5EFE3;   /* Slightly lifted pearl */
  --aa-surface-deep:    var(--aa-pearl-deep);
  --aa-hairline:        rgba(43, 38, 32, 0.12);   /* Anthracite at 12% */
  --aa-hairline-strong: rgba(43, 38, 32, 0.22);
  --aa-divider-brass:   rgba(155, 124, 74, 0.35);

  /* ---------- SEMANTIC ---------- */
  --aa-bg:              var(--aa-pearl);
  --aa-bg-elevated:     var(--aa-surface);
  --aa-fg:              var(--aa-anthracite);
  --aa-fg-1:            var(--aa-anthracite);
  --aa-fg-2:            var(--aa-ink);
  --aa-fg-3:            var(--aa-ink-mute);
  --aa-fg-4:            var(--aa-ink-soft);
  --aa-accent:          var(--aa-sapphire);
  --aa-accent-warm:     var(--aa-brass);

  /* ---------- TYPE FAMILIES ---------- */
  --aa-font-display:    'Cormorant Garamond', 'Cormorant Fallback', Georgia, serif;
  --aa-font-body:       'Manrope', 'Manrope Fallback', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --aa-font-wordmark:   'Manrope', -apple-system, BlinkMacSystemFont, sans-serif;

  /* ---------- TYPE SCALE (modular ~1.25, with editorial display jumps) ---------- */
  --aa-text-micro:      11px;   /* 0.6875rem — eyebrow, legal */
  --aa-text-caption:    13px;
  --aa-text-body-sm:    15px;
  --aa-text-body:       17px;
  --aa-text-body-lg:    19px;
  --aa-text-lead:       22px;
  --aa-text-h6:         20px;
  --aa-text-h5:         24px;
  --aa-text-h4:         32px;
  --aa-text-h3:         42px;
  --aa-text-h2:         56px;
  --aa-text-h1:         76px;
  --aa-text-display:    104px;

  /* ---------- TRACKING ---------- */
  --aa-track-wordmark:  0.32em;   /* Logo-style */
  --aa-track-eyebrow:   0.28em;   /* All-caps labels */
  --aa-track-button:    0.18em;
  --aa-track-display:   0.01em;
  --aa-track-body:      0.005em;
  --aa-track-tight:    -0.015em;

  /* ---------- LINE HEIGHT ---------- */
  --aa-leading-display: 1.05;
  --aa-leading-heading: 1.15;
  --aa-leading-body:    1.55;
  --aa-leading-loose:   1.75;

  /* ---------- SPACING — 8pt grid ---------- */
  --aa-s-1:  4px;
  --aa-s-2:  8px;
  --aa-s-3:  12px;
  --aa-s-4:  16px;
  --aa-s-5:  24px;
  --aa-s-6:  32px;
  --aa-s-7:  48px;
  --aa-s-8:  64px;
  --aa-s-9:  96px;
  --aa-s-10: 128px;
  --aa-s-11: 192px;

  /* ---------- RADII — restrained ---------- */
  --aa-r-none: 0px;
  --aa-r-1:    2px;   /* hairline corner */
  --aa-r-2:    4px;
  --aa-r-3:    8px;
  --aa-r-pill: 999px;

  /* ---------- SHADOWS — warm, soft, never harsh ---------- */
  --aa-shadow-1: 0 1px 2px rgba(43,38,32,0.04), 0 2px 6px rgba(43,38,32,0.04);
  --aa-shadow-2: 0 4px 18px rgba(43,38,32,0.06), 0 1px 3px rgba(43,38,32,0.04);
  --aa-shadow-3: 0 18px 48px rgba(43,38,32,0.08), 0 2px 6px rgba(43,38,32,0.04);
  --aa-shadow-inset: inset 0 0 0 1px var(--aa-hairline);

  /* ---------- MOTION ---------- */
  --aa-ease:        cubic-bezier(0.22, 0.61, 0.36, 1);   /* gentle */
  --aa-ease-in:     cubic-bezier(0.55, 0.05, 0.68, 0.19);
  --aa-ease-out:    cubic-bezier(0.16, 0.84, 0.44, 1);
  --aa-dur-fast:    180ms;
  --aa-dur:         320ms;
  --aa-dur-slow:    560ms;
  --aa-dur-vapor:   1400ms;       /* Atmospheric fades */

  /* ---------- LAYOUT ---------- */
  --aa-page-max:    1200px;
  --aa-gutter:      var(--aa-s-7);
  --aa-slide-w:     1280px;
  --aa-slide-h:     720px;
}

/* =========================================================
   Base elements — semantic defaults
   ========================================================= */

html, body {
  background: var(--aa-bg);
  color: var(--aa-fg);
  font-family: var(--aa-font-body);
  font-size: var(--aa-text-body);
  line-height: var(--aa-leading-body);
  letter-spacing: var(--aa-track-body);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* ---------- DISPLAY / HEADINGS ---------- */
.aa-display {
  font-family: var(--aa-font-display);
  font-weight: 300;
  font-size: var(--aa-text-display);
  line-height: var(--aa-leading-display);
  letter-spacing: var(--aa-track-tight);
  color: var(--aa-fg-1);
}

h1, .aa-h1 {
  font-family: var(--aa-font-display);
  font-weight: 300;
  font-size: var(--aa-text-h1);
  line-height: var(--aa-leading-display);
  letter-spacing: var(--aa-track-tight);
  color: var(--aa-fg-1);
  margin: 0 0 var(--aa-s-5) 0;
}

h2, .aa-h2 {
  font-family: var(--aa-font-display);
  font-weight: 400;
  font-size: var(--aa-text-h2);
  line-height: var(--aa-leading-heading);
  letter-spacing: var(--aa-track-display);
  color: var(--aa-fg-1);
  margin: 0 0 var(--aa-s-5) 0;
}

h3, .aa-h3 {
  font-family: var(--aa-font-display);
  font-weight: 400;
  font-size: var(--aa-text-h3);
  line-height: var(--aa-leading-heading);
  color: var(--aa-fg-1);
  margin: 0 0 var(--aa-s-4) 0;
}

h4, .aa-h4 {
  font-family: var(--aa-font-display);
  font-weight: 500;
  font-size: var(--aa-text-h4);
  line-height: var(--aa-leading-heading);
  color: var(--aa-fg-1);
  margin: 0 0 var(--aa-s-3) 0;
}

h5, .aa-h5 {
  font-family: var(--aa-font-body);
  font-weight: 500;
  font-size: var(--aa-text-h5);
  line-height: var(--aa-leading-heading);
  letter-spacing: var(--aa-track-body);
  color: var(--aa-fg-1);
  margin: 0 0 var(--aa-s-3) 0;
}

h6, .aa-h6 {
  font-family: var(--aa-font-body);
  font-weight: 600;
  font-size: var(--aa-text-h6);
  line-height: var(--aa-leading-heading);
  letter-spacing: var(--aa-track-body);
  color: var(--aa-fg-1);
  margin: 0 0 var(--aa-s-3) 0;
}

p, .aa-p {
  font-family: var(--aa-font-body);
  font-weight: 400;
  font-size: var(--aa-text-body);
  line-height: var(--aa-leading-body);
  color: var(--aa-fg-2);
  margin: 0 0 var(--aa-s-4) 0;
  text-wrap: pretty;
}

.aa-lead {
  font-family: var(--aa-font-body);
  font-weight: 300;
  font-size: var(--aa-text-lead);
  line-height: var(--aa-leading-body);
  color: var(--aa-fg-2);
  letter-spacing: var(--aa-track-body);
}

/* ---------- EDITORIAL UTILITIES ---------- */
.aa-eyebrow {
  font-family: var(--aa-font-body);
  font-weight: 500;
  font-size: var(--aa-text-micro);
  letter-spacing: var(--aa-track-eyebrow);
  text-transform: uppercase;
  color: var(--aa-brass);
}

.aa-wordmark {
  font-family: var(--aa-font-wordmark);
  font-weight: 600;
  letter-spacing: var(--aa-track-wordmark);
  text-transform: uppercase;
  color: var(--aa-sapphire);
}

.aa-caption {
  font-family: var(--aa-font-body);
  font-weight: 400;
  font-size: var(--aa-text-caption);
  line-height: var(--aa-leading-body);
  color: var(--aa-fg-3);
}

.aa-italic-pull {
  font-family: var(--aa-font-display);
  font-style: italic;
  font-weight: 400;
  color: var(--aa-fg-1);
}

/* ---------- LINKS ---------- */
a, .aa-link {
  color: var(--aa-sapphire);
  text-decoration: none;
  border-bottom: 1px solid var(--aa-divider-brass);
  transition: color var(--aa-dur) var(--aa-ease), border-color var(--aa-dur) var(--aa-ease);
}
a:hover, .aa-link:hover {
  color: var(--aa-sapphire-deep);
  border-bottom-color: var(--aa-brass);
}

/* ---------- HAIRLINES ---------- */
.aa-rule {
  height: 1px;
  background: var(--aa-hairline);
  border: 0;
  margin: var(--aa-s-7) 0;
}
.aa-rule-brass {
  height: 1px;
  background: var(--aa-brass);
  border: 0;
  width: 56px;
}

/* =========================================================
   Asatoma Aqua — Web Design Tokens
   Веб-токены v1 · база: ../colors_and_type.css
   Используется на сайте asatomapar.ru
   ========================================================= */


:root {
  /* =========================================================
     COLOR · BRAND SAPPHIRE SCALE 50–900
     Шкала выведена из бренд-сапфира #2C4A88 (= --color-sapphire-500)
     Шаги по светлоте, оттенок сохранён.
     ========================================================= */
  --color-sapphire-50:  #EAF0F8;
  --color-sapphire-100: #D2DEEE;
  --color-sapphire-200: #A5BBDC;
  --color-sapphire-300: #7898C9;
  --color-sapphire-400: #4B75B7;
  --color-sapphire-500: #2C4A88;   /* brand */
  --color-sapphire-600: #163866;
  --color-sapphire-700: #102A4D;
  --color-sapphire-800: #0B1F38;
  --color-sapphire-900: #061528;

  /* =========================================================
     COLOR · WARM NEUTRALS (paper / cream / sand)
     ========================================================= */
  --color-paper:        #FBF7EF;   /* самый светлый — карточки на pearl */
  --color-cream:        #F5EFE3;   /* surface, lift на pearl */
  --color-pearl:        #EFE7DA;   /* основной фон страницы */
  --color-pearl-deep:   #E5DBCB;   /* карточка на pearl */
  --color-sand:         #D4B896;   /* травертин, текстурная поддержка */
  --color-honey:        #B8895A;
  --color-brass:        #9B7C4A;   /* редакторская линейка, eyebrow */

  /* =========================================================
     COLOR · INK & VAPOR
     ========================================================= */
  --color-ink-900:      #2B2620;   /* anthracite — заголовки */
  --color-ink-800:      #3F362C;   /* body */
  --color-ink-600:      #5C5248;   /* secondary text (затемнён с #6E6155: контраст ≥4.5 на cream/pearl) */
  --color-ink-400:      #5D574E;   /* tertiary / captions (затемнён с #97877A: мелкий текст на светлом требует 4.5:1) */
  --color-ink-200:      rgba(43,38,32,0.22);  /* strong hairline */
  --color-ink-100:      rgba(43,38,32,0.12);  /* hairline */
  --color-ink-50:       rgba(43,38,32,0.06);  /* whisper */

  --color-vapor-50:     #D9E6EF;
  --color-vapor-100:    #B8D4E8;
  --color-vapor-200:    #8FB8D6;

  /* =========================================================
     COLOR · SEMANTIC
     Все семантические — приглушённые, без неона.
     Success — мшистый, error — глиняный, warning — медовый (= brass),
     info — sapphire-300. needs-decision: точные оттенки.
     ========================================================= */
  --color-success:      #5A7A52;
  --color-success-bg:   #E8EDE3;
  --color-warning:      #9B7C4A;   /* = brass */
  --color-warning-bg:   #F2E9D5;
  --color-error:        #A8513A;
  --color-error-bg:     #F2DDD3;
  --color-info:         #3A6BB0;   /* = sapphire-soft */
  --color-info-bg:      #DEE7F2;

  /* =========================================================
     SEMANTIC TOKENS · покрытие сайта
     brand → semantic — для использования компонентами.
     ========================================================= */
  --bg-page:            var(--color-pearl);
  --bg-surface:         var(--color-cream);
  --bg-surface-elev:    var(--color-paper);
  --bg-card:            var(--color-pearl-deep);
  --bg-inverse:         var(--color-sapphire-500);

  --fg-default:         var(--color-ink-800);
  --fg-strong:          var(--color-ink-900);
  --fg-muted:           var(--color-ink-600);
  --fg-soft:            var(--color-ink-400);
  --fg-on-inverse:      var(--color-pearl);
  --fg-on-inverse-muted: rgba(239,231,218,0.79);  /* .72 давал 4.49:1 на сапфире — на волосок ниже нормы WCAG 4.5 */
  --fg-on-inverse-soft: rgba(239,231,218,0.55);

  --accent-primary:     var(--color-sapphire-500);
  --accent-primary-hover: var(--color-sapphire-600);
  --accent-warm:        var(--color-brass);

  --border-default:     var(--color-ink-100);
  --border-strong:      var(--color-ink-200);
  --border-brass:       var(--color-brass);
  --border-focus:       var(--color-brass);

  /* =========================================================
     TYPOGRAPHY · WEB SCALE
     Базовая единица 16px. Используется и в px, и в rem.
     ========================================================= */
  --font-display:       'Cormorant Garamond', 'Cormorant Fallback', Georgia, serif;
  --font-body:          'Manrope', 'Manrope Fallback', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-wordmark:      'Manrope', -apple-system, BlinkMacSystemFont, sans-serif;
  --font-mono:          ui-monospace, 'SF Mono', Menlo, Consolas, monospace;

  /* size — px / rem */
  --text-overline:       11px;   /* 0.6875rem */
  --text-caption:        13px;   /* 0.8125rem */
  --text-small:          15px;   /* 0.9375rem */
  --text-body:           17px;   /* 1.0625rem */
  --text-body-lg:        19px;   /* 1.1875rem */
  --text-lead:           22px;   /* 1.375rem  */
  --text-h4:             24px;   /* 1.5rem    */
  --text-h3:             32px;   /* 2rem      */
  --text-h2:             48px;   /* 3rem      */
  --text-h1:             64px;   /* 4rem      */
  --text-display:        96px;   /* 6rem      */

  /* line-height */
  --leading-display:    1.05;
  --leading-heading:    1.15;
  --leading-body:       1.6;
  --leading-loose:      1.75;

  /* letter-spacing */
  --tracking-wordmark:  0.32em;
  --tracking-eyebrow:   0.28em;
  --tracking-button:    0.18em;
  --tracking-display:   -0.015em;
  --tracking-tight:     -0.005em;
  --tracking-body:      0.005em;

  /* weight */
  --weight-light:       300;
  --weight-regular:     400;
  --weight-medium:      500;
  --weight-semibold:    600;

  /* =========================================================
     SPACING · 8pt grid
     ========================================================= */
  --space-0:    0;
  --space-2:    2px;
  --space-4:    4px;
  --space-8:    8px;
  --space-12:   12px;
  --space-16:   16px;
  --space-24:   24px;
  --space-32:   32px;
  --space-40:   40px;
  --space-48:   48px;
  --space-64:   64px;
  --space-80:   80px;
  --space-96:   96px;
  --space-128:  128px;
  --space-160:  160px;
  --space-192:  192px;

  /* Ритм секций (premium-motion): шкала пауз между секциями.
     s — тесно связанные блоки, m — стандартный стык, l — вдох перед ключевым.
     Паддинги секций = половина стыка с каждой стороны → сумма = значение шкалы. */
  --space-s:    96px;
  --space-m:    160px;
  --space-l:    240px;

  /* =========================================================
     LAYOUT · grid + breakpoints
     ========================================================= */
  --bp-mobile:          0px;       /* < 768 */
  --bp-tablet:          768px;     /* 768–1199 */
  --bp-desktop:         1200px;    /* 1200–1599 */
  --bp-wide:            1600px;    /* ≥ 1600 */

  --container-narrow:   720px;     /* читабельный текст */
  --container-default:  1200px;    /* основной сайт */
  --container-wide:     1440px;    /* hero, journal cover */

  --grid-cols:          12;
  --grid-gutter-mobile: 16px;
  --grid-gutter-tablet: 24px;
  --grid-gutter:        24px;      /* desktop */
  --grid-margin-mobile: 24px;
  --grid-margin-tablet: 40px;
  --grid-margin:        64px;      /* desktop */

  /* =========================================================
     RADII · restrained
     ========================================================= */
  --radius-none:        0px;
  --radius-sm:          2px;
  --radius-md:          4px;
  --radius-lg:          8px;
  --radius-pill:        999px;

  /* =========================================================
     ELEVATION · 4 уровня, тёплые
     ========================================================= */
  --elevation-0:        none;
  --elevation-1:        0 1px 2px rgba(43,38,32,0.04), 0 2px 6px rgba(43,38,32,0.04);
  --elevation-2:        0 4px 18px rgba(43,38,32,0.06), 0 1px 3px rgba(43,38,32,0.04);
  --elevation-3:        0 18px 48px rgba(43,38,32,0.08), 0 2px 6px rgba(43,38,32,0.04);
  --elevation-4:        0 32px 80px rgba(43,38,32,0.14), 0 4px 10px rgba(43,38,32,0.06);

  /* =========================================================
     MOTION
     ========================================================= */
  --ease-default:       cubic-bezier(0.22, 0.61, 0.36, 1);
  --ease-in:            cubic-bezier(0.55, 0.05, 0.68, 0.19);
  --ease-out:           cubic-bezier(0.16, 0.84, 0.44, 1);
  --duration-fast:      180ms;
  --duration:           320ms;
  --duration-slow:      560ms;

  /* =========================================================
     Z-INDEX
     ========================================================= */
  --z-base:             0;
  --z-sticky:           10;
  --z-overlay:          50;
  --z-modal:            100;
  --z-toast:            200;
}

/* =========================================================
   Адаптивные переопределения масштаба типографики
   ========================================================= */
@media (max-width: 1199px) {
  :root {
    --text-display: 72px;
    --text-h1:      48px;
    --text-h2:      36px;
    --text-h3:      28px;
    --text-h4:      22px;
  }
}
@media (max-width: 767px) {
  :root {
    --text-display: 48px;
    --text-h1:      36px;
    --text-h2:      28px;
    --text-h3:      24px;
    --text-h4:      20px;
    --text-lead:    19px;
    --text-body:    17px;
    --grid-margin:  var(--grid-margin-mobile);
    --grid-gutter:  var(--grid-gutter-mobile);
  }
}

/* =========================================================
   asatomapar.ru · main.css
   База + навигация + кнопки + лейаут + футер
   Источник правды токенов: project/web_system/tokens.css
     ← который импортирует project/colors_and_type.css
   ========================================================= */


/* ---------- RESET ---------- */
*, *::before, *::after { box-sizing: border-box; }
html {
  /* scroll-behavior НЕ задаём smooth — кастомный smoothScrollTo()
     из scripts/main.js даёт более премиальную кривую (easeInOutCubic
     1200ms vs браузерные ~500ms linear). Нативный smooth конкурировал
     бы с нашим RAF-loop'ом. Остаётся 'auto' = мгновенный jump для
     не-обработанных случаев (back-button, URL hash, JS-disabled). */
  scroll-padding-top: 80px;
}
@media (max-width: 1023px) {
  html { scroll-padding-top: 60px; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }
}
html, body { margin: 0; padding: 0; }

/* ---------- MOBILE HORIZONTAL OVERFLOW GUARD ----------
   Виновник дрейфа на iOS — мобильное меню .drawer (position:fixed;
   inset:0; transform:translateX(100%)): full-viewport бокс, припаркован
   на 100vw вправо, visibility:hidden его не убирает из overflow.
   overflow-x: clip на корне реально клипает fixed-потомков на iOS
   Safari 16+ (в отличие от overflow-x: hidden) и не создаёт
   containing block. Старым iOS — фолбэк на hidden. */
html, body {
  overflow-x: clip;
  max-width: 100%;
}
@supports not (overflow-x: clip) {
  html, body { overflow-x: hidden; }
}

body {
  background: var(--bg-page);
  color: var(--fg-default);
  font-family: var(--font-body);
  font-size: var(--text-body);
  line-height: var(--leading-body);
  letter-spacing: var(--tracking-body);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
img { max-width: 100%; display: block; }
button { font: inherit; }

/* ---------- SKIP LINK ---------- */
.skip-to-content {
  position: absolute; left: -9999px; top: 12px; z-index: var(--z-toast);
  padding: var(--space-8) var(--space-16); background: var(--accent-primary); color: var(--fg-on-inverse);
  font-family: var(--font-body); font-weight: 600; font-size: 13px;
  letter-spacing: var(--tracking-button); text-transform: uppercase;
  text-decoration: none; border-radius: var(--radius-sm);
}
.skip-to-content:focus { left: 16px; }

/* ---------- LAYOUT ---------- */
.container {
  max-width: var(--container-default);
  margin: 0 auto;
  padding-left: var(--grid-margin);
  padding-right: var(--grid-margin);
}
.container.wide { max-width: var(--container-wide); }
/* ─── Ритм секций · premium-motion ────────────────────────────────────────────
   Каждый стык = padding-bottom предыдущей + padding-top следующей. Обе стороны
   стыка ссылаются на одну величину шкалы /2 → сумма = значение шкалы, без удвоения.
   Стыки главной: hero→method = l · …→цены(formats) = l · formats→сертификат = l ·
   phases(60мин)→sinusoid = s · science→safety→team = s · остальные = m.
   Мобайл масштабируется автоматически — токены --space-* меняются ниже. */
.section { padding-top: calc(var(--space-m) / 2); padding-bottom: calc(var(--space-m) / 2); }

/* «Большой вдох» (l) перед ключевыми блоками */
#method           { padding-top: var(--space-l); }               /* hero (padding:0) → весь вдох несёт верх method */
#reviews          { padding-bottom: calc(var(--space-l) / 2); }  /* … → цены */
#formats          { padding-top: calc(var(--space-l) / 2); padding-bottom: calc(var(--space-l) / 2); }
#gift-certificate { padding-top: calc(var(--space-l) / 2); }     /* цены → сертификат */

/* «Тесно связанные» блоки (s) */
#phases           { padding-bottom: calc(var(--space-s) / 2); }  /* таймлайн 60 мин → синусоида */
#sinusoid         { padding-top: calc(var(--space-s) / 2); }
#science          { padding-bottom: calc(var(--space-s) / 2); }  /* наука → безопасность → команда */
#safety           { padding-top: calc(var(--space-s) / 2); padding-bottom: calc(var(--space-s) / 2); }
#team             { padding-top: calc(var(--space-s) / 2); }

@media (max-width: 767px) {
  :root { --space-s: 56px; --space-m: 88px; --space-l: 128px; }
  /* На телефоне «большой вдох» перед технологией смотрелся провалом: у героя
     padding-bottom = 0, поэтому весь стык несла эта секция — 128px против 88px
     на всех остальных стыках. Приводим к общему ритму (Сергей, 18.08.2026). */
  #method { padding-top: var(--space-m); }
}

/* ---------- BACKGROUND CONTEXTS ---------- */
.bg-pearl { background: var(--bg-page); color: var(--fg-default); }
.bg-cream { background: var(--bg-surface); color: var(--fg-default); }
.bg-sapphire { background: var(--bg-inverse); color: var(--fg-on-inverse); }
.bg-sapphire-deep { background: var(--color-sapphire-700); color: var(--fg-on-inverse); }
.bg-sapphire .aa-eyebrow,
.bg-sapphire-deep .aa-eyebrow { color: var(--accent-warm); }

/* ---------- EYEBROW / RULE ---------- */
.eyebrow {
  font-family: var(--font-body); font-weight: var(--weight-medium);
  font-size: var(--text-overline); letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase; color: var(--accent-warm);
}
.rule-brass { width: 56px; height: 1px; background: var(--accent-warm); border: 0; margin: 0; }

/* ---------- HEADINGS — page-scope override of doc-system defaults ---------- */
h1, h2, h3, h4, p { margin: 0; }
.display-h1 {
  font-family: var(--font-display); font-weight: var(--weight-light);
  font-size: var(--text-h1); line-height: var(--leading-display);
  letter-spacing: var(--tracking-display); color: var(--fg-strong);
}
.display-h2 {
  font-family: var(--font-display); font-weight: var(--weight-light);
  font-size: var(--text-h2); line-height: 1.08;
  letter-spacing: var(--tracking-display); color: var(--fg-strong);
}
.display-h2 .it { font-style: italic; font-weight: var(--weight-regular); }
.display-h3 {
  font-family: var(--font-display); font-weight: var(--weight-regular);
  font-size: var(--text-h3); line-height: var(--leading-heading);
  letter-spacing: var(--tracking-tight); color: var(--fg-strong);
}
.lead {
  font-family: var(--font-body); font-weight: var(--weight-light);
  font-size: var(--text-lead); line-height: var(--leading-body);
  color: var(--fg-default);
}
.bg-sapphire .display-h1,
.bg-sapphire .display-h2,
.bg-sapphire .display-h3,
.bg-sapphire-deep .display-h1,
.bg-sapphire-deep .display-h2,
.bg-sapphire-deep .display-h3 { color: var(--fg-on-inverse); }
.bg-sapphire p, .bg-sapphire .lead,
.bg-sapphire-deep p, .bg-sapphire-deep .lead { color: var(--fg-on-inverse-muted); }

/* ---------- SECTION HEADER · единый компонент для всех секций ----------
   Структура:
     <header class="section-header">
       <p class="section-header__eyebrow">EYEBROW</p>
       <h2 class="section-header__title">Заголовок <em>курсив</em>.</h2>
       <p class="section-header__lead">Опциональный лид.</p>
     </header>

   Все значения — токены из tokens.css. На sapphire-фоне срабатывает
   каскад .bg-sapphire / .bg-sapphire-deep ниже.
   ---------------------------------------------------------------- */
.section-header {
  max-width: var(--container-narrow);
  margin: 0 0 var(--space-64);
}
.section-header__eyebrow {
  font-family: var(--font-body);
  font-weight: var(--weight-medium);
  font-size: var(--text-caption);
  letter-spacing: var(--tracking-eyebrow);
  text-transform: uppercase;
  color: #7A6136;   /* тёмная латунь: мелкий текст на светлом фоне, контраст ≥4.5 (на тёмных секциях перекрывает .bg-sapphire p) */
  margin: 0;
}
.section-header__eyebrow::after {
  content: "";
  display: block;
  width: var(--space-48);
  height: 1px;
  background: var(--accent-warm);
  margin: var(--space-16) 0 var(--space-24);
}
.section-header__title {
  font-family: var(--font-display);
  font-weight: var(--weight-light);
  font-size: var(--text-h2);
  line-height: var(--leading-heading);
  letter-spacing: var(--tracking-display);
  color: var(--fg-strong);
  margin: 0;
}
.section-header__title em {
  font-style: italic;
  font-weight: var(--weight-regular);
  color: inherit;
}
.section-header__lead {
  font-family: var(--font-body);
  font-weight: var(--weight-light);
  font-size: var(--text-body);
  line-height: var(--leading-body);
  color: var(--fg-muted);
  max-width: var(--container-narrow);
  margin: var(--space-24) 0 0;
}
/* Sapphire-фон: title → cream, lead → cream с приглушением.
   Eyebrow и divider остаются gold (brass) на любом фоне. */
.bg-sapphire .section-header__title,
.bg-sapphire-deep .section-header__title { color: var(--fg-on-inverse); }
.bg-sapphire .section-header__lead,
.bg-sapphire-deep .section-header__lead { color: var(--fg-on-inverse-muted); }
/* На мобайле уменьшаем нижний отступ хедера — берём ближайший
   меньший токен space-scale. Типографика (--text-h2) уменьшается
   автоматически через @media в tokens.css. */
@media (max-width: 767px) {
  .section-header { margin-bottom: var(--space-48); }
}

/* ---------- BUTTON ---------- */
.btn {
  --btn-py: 14px;
  --btn-px: 28px;
  --btn-fs: 12px;
  --btn-ic: 16px;
  font-family: var(--font-body); font-weight: var(--weight-semibold);
  font-size: var(--btn-fs);
  letter-spacing: var(--tracking-button);
  text-transform: uppercase;
  padding: var(--btn-py) var(--btn-px);
  border-radius: var(--radius-sm);
  border: 1px solid transparent;
  cursor: pointer;
  background: var(--accent-primary);
  color: var(--fg-on-inverse);
  display: inline-flex; align-items: center; gap: var(--space-8);
  text-decoration: none; white-space: nowrap;
  transition: background var(--duration) var(--ease-default),
              color var(--duration) var(--ease-default),
              border-color var(--duration) var(--ease-default),
              transform var(--duration-fast) var(--ease-default);
  user-select: none;
}
/* На hover дополнительно явно фиксируем color и border-color:
   глобальное правило `a:hover { color: var(--aa-sapphire-deep) }`
   из colors_and_type.css имеет ту же специфичность (0,1,1), что
   и `.btn:hover`, и резолвится в #163866 — РОВНО как наш
   --accent-primary-hover. Без явного color cream-текст
   подменяется на sapphire-deep и сливается с тёмным фоном.
   Аналогично border-bottom-color от `a:hover` ставит brass-полоску. */
.btn:hover {
  background: var(--accent-primary-hover);
  color: var(--fg-on-inverse);
  border-color: transparent;
}
.btn:active { transform: translateY(1px); }
.btn:focus-visible { outline: 2px solid var(--border-focus); outline-offset: 2px; }
.btn[disabled], .btn[aria-disabled="true"] { opacity: 0.35; cursor: not-allowed; pointer-events: none; }
.btn.sm { --btn-py: 10px; --btn-px: 18px; --btn-fs: 11px; --btn-ic: 14px; }
.btn.lg { --btn-py: 18px; --btn-px: 36px; --btn-fs: 13px; --btn-ic: 18px; }
.btn.secondary {
  background: transparent; color: var(--fg-strong); border-color: var(--border-strong);
}
.btn.secondary:hover { border-color: var(--accent-warm); color: var(--accent-warm); }
.btn.ghost {
  background: transparent; color: var(--fg-strong); border-color: transparent;
  padding-left: 0; padding-right: 0;
}
.btn.ghost:hover { color: var(--accent-warm); }
.btn.link {
  background: transparent; color: var(--accent-primary);
  text-transform: none; letter-spacing: var(--tracking-body);
  font-weight: var(--weight-medium); padding: 0; border: 0;
  border-bottom: 1px solid var(--accent-warm); border-radius: 0;
  font-size: 15px;
}
.btn.link:hover { color: var(--accent-primary-hover); border-bottom-color: var(--accent-warm); }
.btn.icon-only { padding: 0; width: 44px; height: 44px; justify-content: center; gap: 0; }
.btn .ico {
  display: inline-block; width: var(--btn-ic); height: var(--btn-ic);
  stroke: currentColor; fill: none; stroke-width: 1.5;
}

/* dark context override for secondary */
.bg-sapphire .btn.secondary,
.bg-sapphire-deep .btn.secondary {
  color: var(--fg-on-inverse); border-color: rgba(239,231,218,0.35);
}
.bg-sapphire .btn.secondary:hover,
.bg-sapphire-deep .btn.secondary:hover {
  border-color: var(--accent-warm); color: var(--accent-warm);
}
.bg-sapphire .btn.ghost,
.bg-sapphire-deep .btn.ghost { color: var(--fg-on-inverse); }

/* ---------- NAV ----------
   Одно состояние: всегда непрозрачная cream-шапка с sapphire-
   логотипом и ink-меню. Никаких .is-scrolled переключений,
   text-shadow или backdrop-blur — фон solid cream и так
   полностью читаемый. Над hero шапка выступает как «рамка
   кадра», видео уходит под неё. */
.topnav {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: var(--z-sticky);
  background: var(--color-cream);
  border-bottom: 1px solid var(--border-default);
  color: var(--fg-strong);
}
.topnav-inner {
  max-width: var(--container-default);   /* шапка 3.0: оба яруса на единой сетке сайта (1200) */
  margin: 0 auto;
  display: flex; align-items: center; justify-content: space-between;
  padding: 20px var(--grid-margin);
  height: 80px; gap: var(--space-32);
}

/* ---------- BRAND LOCKUP ---------- */
.brand-lockup {
  display: inline-flex;
  align-items: center;
  gap: var(--space-12);
  text-decoration: none;
  border: 0;
  color: var(--accent-primary);
  transition: opacity var(--duration-fast) var(--ease-default);
}
.brand-lockup:hover { opacity: 0.85; }
.brand-lockup:focus-visible {
  outline: 2px solid var(--border-focus);
  outline-offset: 4px;
  border-radius: var(--radius-sm);
}
.brand-lockup--on-dark { color: var(--color-pearl); }

.brand-mark {
  display: inline-flex;
  width: 28px; height: 28px;
  flex-shrink: 0;
  color: inherit;
}
.brand-mark svg {
  width: 100%; height: 100%;
  display: block;
  fill: currentColor;
}
.brand-mark--lg { width: 40px; height: 40px; }

/* Шапка 3.0 · оптическое выравнивание знака: эмблема (чернила вплотную к краю
   бокса) на линии сетки выглядит «вдавленной» рядом с плоским левым краем текста.
   Лёгкий выступ влево на 3px сажает её визуально на линию. translate — не рефлоу:
   бокс-лого остаётся на линии сетки = кнопка города. Только шапка (футер не трогаем). */
.topnav .brand-mark { transform: translateX(-3px); }

/* ─── Мультигород · обратная связь переключения города ───────────────────────
   Тост-подтверждение (фирменная тёмная плашка у нижнего края шапки), вспышка
   обновлённых данных, анимация смены названия на кнопке. Только transform/opacity/
   background → CLS 0. prefers-reduced-motion отключает движение (тост без слайда). */
.aa-citytoast {
  position: fixed; top: 0; left: 50%; z-index: var(--z-toast);
  transform: translateX(-50%) translateY(-6px);
  max-width: min(440px, calc(100vw - 32px));
  padding: 10px 18px; border-radius: 8px;
  background: var(--color-sapphire-900); color: var(--color-pearl);
  box-shadow: 0 14px 34px rgba(15,32,65,.36);
  font: 600 13px/1.35 var(--aa-font-body); letter-spacing: .01em; text-align: center;
  opacity: 0; pointer-events: none;
  transition: opacity 250ms ease, transform 250ms ease;
}
.aa-citytoast.is-shown { opacity: 1; transform: translateX(-50%) translateY(0); }
@media (max-width: 1023px) {
  .aa-citytoast { max-width: calc(100vw - 24px); font-size: 12px; padding: 9px 14px; }
}

@keyframes aa-city-flash { from { background-color: rgba(155,124,74,.08); } to { background-color: rgba(155,124,74,0); } }
.city-flash { animation: aa-city-flash 800ms ease-out; }

@keyframes aa-cityname-in  { from { opacity: 0; transform: translateY(6px); }  to { opacity: 1; transform: translateY(0); } }
@keyframes aa-cityname-out { from { opacity: 1; transform: translateY(0); }    to { opacity: 0; transform: translateY(-6px); } }
.aa-cityname-in { animation: aa-cityname-in 200ms cubic-bezier(.22,1,.36,1); }
.aa-city__name .aa-cityname-out {
  grid-area: 1 / 1; justify-self: start; white-space: nowrap; pointer-events: none;
  animation: aa-cityname-out 200ms cubic-bezier(.22,1,.36,1) forwards;
}
@media (prefers-reduced-motion: reduce) {
  .aa-citytoast { transition: opacity 200ms ease; transform: translateX(-50%); }
  .aa-citytoast.is-shown { transform: translateX(-50%); }
  .aa-cityname-in, .aa-city__name .aa-cityname-out { animation: none; }
}

.brand-wordmark {
  font-family: var(--font-wordmark);
  font-weight: var(--weight-semibold);
  letter-spacing: var(--tracking-wordmark);
  text-transform: uppercase;
  font-size: 15px;
  color: inherit;
}
/* Footer-вариант (рядом с .brand-mark--lg): wordmark поднимается до 17px,
   чтобы сохранить визуальный баланс со знаком 40px. */
.brand-lockup--on-dark .brand-wordmark { font-size: 17px; }

@media (max-width: 768px) {
  .brand-mark { width: 24px; height: 24px; }
  .brand-mark--lg { width: 32px; height: 32px; }
  .brand-wordmark { font-size: 14px; }
  .brand-lockup--on-dark .brand-wordmark { font-size: 16px; }
}

/* ── Логотип 28.08.2026: единый статичный локап на всех ширинах ──
   Знак + АСАТОМА + подпись «живительный пар» + значок в правом верхнем углу
   (assets/logo-h-sapphire.svg — тот же, что на промо регаты). Морф-вывеска
   и раздельные .brand-mark/.brand-wordmark из разметки убраны. */
.brand-lockup { flex: none; }                                /* иначе flex шапки сжимает логотип в полоску */
.brand-lockup__full { display: block; height: 28px; width: auto; max-width: none; flex: none; }
.drawer-head .brand-lockup__full { height: 25px; }
.brand-lockup--on-dark .brand-lockup__full { height: 34px; }
@media (max-width: 1023px) {
  .topnav .brand-lockup__full { height: 25px; }
}
@media (max-width: 360px) {
  .topnav .brand-lockup__full { height: 23px; }
}

/* ---------- LOCKUP IN CONTEXT: TOPNAV ----------
   Шапка всегда на cream → логотип всегда sapphire. */
.topnav .brand-lockup { color: var(--accent-primary); }

.topnav .center { display: flex; align-items: center; gap: var(--space-40); }
.topnav .center a {
  position: relative;
  font-family: var(--font-body); font-weight: var(--weight-medium);
  font-size: 13px; letter-spacing: 0.2em; text-transform: uppercase;
  color: var(--fg-strong); text-decoration: none;
  padding: var(--space-8) 0;
  transition: color var(--duration-fast) var(--ease-default);
}
.topnav .center a::after {
  content: "";
  position: absolute;
  left: 0; bottom: 0;
  width: 100%; height: 1px;
  background: var(--accent-primary);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform var(--duration) var(--ease-default);
}
.topnav .center a:hover { color: var(--accent-primary); }
.topnav .center a.is-active { color: var(--accent-primary); }
.topnav .center a.is-active::after { transform: scaleX(1); }

/* Шапка 3.0 · нижний ярус справа = CTA (+ трубка/бургер на мобайле). */
.topnav .right { display: flex; align-items: center; gap: var(--space-16); }

/* ── Верхний utility-ярус (≥768 — планшеты и десктоп): город + адрес слева ·
   язык + НОМЕР телефона справа. С планшета (iPad) позвонить нельзя, поэтому номер
   показываем ТЕКСТОМ (а кнопка-трубка — только на телефоне ≤767). Порог 768, а не
   1200: бургер-навигация включается отдельно (≤1199, меню не влезает), но адрес и
   телефон на планшете должны оставаться видимыми — их не видно иначе. ── */
.topnav-utility { display: none; }
@media (min-width: 768px) {
  .topnav-utility { display: block; background: var(--color-pearl-deep); border-bottom: 1px solid var(--border-default); height: 40px; overflow: hidden; }
  .topnav-utility.is-cityopen { overflow: visible; }   /* дропдаун города выходит за 40px-ярус */
  .topnav-utility__inner { max-width: var(--container-default); margin: 0 auto; padding: 0 var(--grid-margin); height: 40px; display: flex; align-items: center; justify-content: space-between; }
  .topnav-utility__right { display: flex; align-items: center; gap: var(--space-24); }
  .topnav-city-wrap { position: relative; display: inline-flex; }
}
/* ── Телефон (<768): слим-ярус ТОЛЬКО с выбором города (адрес/язык/номер прячем —
   номер доступен кнопкой-трубкой в шапке и в бургер-меню, звонок в один тап). ── */
@media (max-width: 767.98px) {
  .topnav-utility { display: block; background: var(--color-pearl-deep); border-bottom: 1px solid var(--border-default); height: 36px; overflow: hidden; }
  .topnav-utility.is-cityopen { overflow: visible; }
  .topnav-utility__inner { max-width: none; margin: 0; padding: 0 var(--grid-margin); height: 36px; display: flex; align-items: center; justify-content: flex-start; }
  .topnav-utility__right { display: none; }
  .topnav-city-addr { display: none; }
  .topnav-city-wrap { position: relative; display: inline-flex; align-items: center; }
  /* Кнопка города слева экрана — дропдаун крепим к ЛЕВОМУ краю (иначе при коротких
     названиях «Ижевск»/«Сочи» узкая кнопка тянет right:0-меню за левый край экрана). */
  .topnav-utility .aa-city__menu { left: 0; right: auto; }
}
/* RU/EN сегмент-контрол (паттерн pricing-toggle). */
.aa-lang-seg { display: inline-flex; align-items: center; gap: 2px; padding: 2px; background: var(--aa-pearl); border: 1px solid var(--aa-hairline); border-radius: 6px; }
.aa-lang-seg__item { display: inline-flex; align-items: center; justify-content: center; min-width: 30px; min-height: 26px; padding: 4px 10px; border-radius: 4px; font: 600 11px/1 var(--aa-font-body); letter-spacing: 0.1em; text-transform: uppercase; color: var(--aa-ink-soft); text-decoration: none; cursor: pointer; transition: background 160ms ease, color 160ms ease; }
.aa-lang-seg__item:hover { color: var(--aa-anthracite); }
.aa-lang-seg__item.is-active { background: var(--aa-sapphire); color: #fff; }
.aa-lang-seg__item:focus-visible { outline: 2px solid var(--aa-sapphire); outline-offset: 2px; }

/* CTA в навбаре — фиксированная min-width, чтобы кнопка не «прыгала»
   при переключении языка: RU «ЗАПИСАТЬСЯ» заметно длиннее EN «BOOK».
   Текст центрируется внутри фиксированной ширины. */
.topnav .right .btn { min-width: 172px; justify-content: center; }

.topnav .burger {
  display: none;
  width: 44px; height: 44px; padding: 0;
  background: transparent;
  border: 1px solid var(--border-strong); border-radius: var(--radius-sm);
  color: var(--fg-strong); cursor: pointer;
  align-items: center; justify-content: center;
}
.topnav .burger svg { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 1.5; }

@media (max-width: 1199px) {
  .topnav .center, .topnav .aa-lang-slash, .topnav .right .btn { display: none; }
  .topnav .burger { display: inline-flex; }
}

/* ---------- MOBILE DRAWER ---------- */
.drawer {
  position: fixed; inset: 0;
  background: var(--bg-page);
  z-index: var(--z-modal);
  padding: 24px var(--grid-margin) 32px;
  display: flex; flex-direction: column;
  transform: translateX(100%);
  transition: transform var(--duration-slow) var(--ease-default);
  visibility: hidden;
}
.drawer.is-open { transform: translateX(0); visibility: visible; }
.drawer-head {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: var(--space-48);
}
/* Drawer уже на cream-фоне → дефолтный цвет sapphire, модификатор не нужен */
.drawer nav { display: flex; flex-direction: column; gap: var(--space-4); }
.drawer nav a {
  font-family: var(--font-display); font-weight: var(--weight-regular);
  font-size: 32px; line-height: 1.2; color: var(--fg-strong);
  text-decoration: none; border-bottom: 1px solid var(--border-default);
  padding: var(--space-16) 0;
}
.drawer-foot {
  margin-top: auto; padding-top: var(--space-32);
  display: flex; flex-direction: column; gap: var(--space-16);
}
.drawer-foot .btn { width: 100%; justify-content: center; }
.drawer-foot .aa-lang-slash { align-self: flex-start; }

/* ---------- FOOTER ---------- */
.site-footer {
  background: var(--color-sapphire-700);
  color: var(--fg-on-inverse);
  padding: var(--space-96) 0 var(--space-48);
  position: relative; overflow: hidden;
}
.site-footer .bg-rose {
  position: absolute; right: -150px; bottom: -160px;
  width: 560px; height: 560px;
  opacity: 0.06;
  pointer-events: none;
  /* Края растворяются радиально — под юридической строкой и кредитом
     паттерна нет, тексты лежат на чистом сапфире (наслоение убрано). */
  -webkit-mask-image: radial-gradient(closest-side at 62% 62%, #000 34%, rgba(0,0,0,.55) 58%, transparent 82%);
          mask-image: radial-gradient(closest-side at 62% 62%, #000 34%, rgba(0,0,0,.55) 58%, transparent 82%);
}
.site-footer .bg-rose img {
  width: 100%; height: 100%;
  filter: brightness(0) invert(1);
  transform-origin: 62% 62%;
  animation: rose-breathe 16s ease-in-out infinite;
  will-change: transform;
}
/* Расфокусированный двойник поверх чёткого слоя: blur статичен (рендерится
   один раз), дышит только его прозрачность — «пар» то собирается в чёткий
   знак, то расплывается. Противофаза чёткому слою через отрицательный delay. */
.site-footer .bg-rose::after {
  content: "";
  position: absolute; inset: 0;
  background: url('../project/assets/rosette.svg') center / contain no-repeat;
  filter: brightness(0) invert(1) blur(7px);
  opacity: 0;
  transform-origin: 62% 62%;
  animation: rose-vapor 16s ease-in-out -8s infinite;
  will-change: opacity, transform;
}
@keyframes rose-breathe {
  0%, 100% { transform: scale(1) rotate(0deg); }
  50%      { transform: scale(1.05) rotate(2deg); }
}
@keyframes rose-vapor {
  0%, 100% { opacity: 0;   transform: scale(1.02); }
  50%      { opacity: .75; transform: scale(1.07); }
}
@media (prefers-reduced-motion: reduce) {
  .site-footer .bg-rose img { animation: none; }
  .site-footer .bg-rose::after { animation: none; opacity: .3; }
}
.site-footer .wrap {
  position: relative; z-index: 1;
  display: grid;
  /* brand-col + Разделы / О нас / Контакты / Правовое */
  grid-template-columns: 1.4fr 1fr 0.9fr 1fr 1.1fr;
  gap: var(--space-48);
  padding-bottom: var(--space-48);
  /* Линия между блоком ссылок и legal-row снята —
     контраст обеспечивается margin'ом legal-row и тем,
     что copyright идёт более приглушённым цветом. */
}
.site-footer h3,
.site-footer h4 {
  font-family: var(--font-body); font-weight: var(--weight-medium);
  font-size: 11px; letter-spacing: var(--tracking-eyebrow); text-transform: uppercase;
  color: var(--fg-on-inverse); margin: 0 0 var(--space-24);
}
.site-footer .brand-col { display: flex; flex-direction: column; gap: var(--space-16); }
/* Footer lockup: <a class="brand-lockup brand-lockup--on-dark"> уже задаёт цвет cream */
.site-footer .brand-col .stmt {
  font-family: var(--font-display); font-weight: var(--weight-light); font-style: italic;
  font-size: 20px; line-height: 1.35;
  color: rgba(239, 231, 218, 0.85); max-width: 280px;
}
.site-footer ul { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: var(--space-12); }
.site-footer ul a, .site-footer ul span {
  color: rgba(239, 231, 218, 0.78); font-size: 14px;
  text-decoration: none; border: 0; padding-bottom: 2px;
  border-bottom: 1px solid transparent;
  transition: color var(--duration) var(--ease-default), border-color var(--duration) var(--ease-default);
}
.site-footer ul a:hover { color: var(--fg-on-inverse); border-bottom-color: var(--accent-warm); }
/* ── Соцсети города в подвале ──
   Иконка + сеть + подпись, что за ссылкой (канал или сообщество и адрес).
   Строки с data-city-row прячет свитчер, если у города сети нет. Подчёркивание
   на наведении — только под названием сети, иконка подсвечивается латунью. */
.site-footer ul.site-footer__social { margin-top: var(--space-24); gap: var(--space-16); }
.site-footer ul .site-footer__soc {
  display: flex; align-items: flex-start; gap: var(--space-12);
  padding: 0; border: 0;
}
.site-footer__soc-ico {
  flex: none; width: 22px; height: 22px; margin-top: 1px;   /* flex:none — иначе сплющится в овал */
  fill: currentColor; color: rgba(239, 231, 218, 0.78);
  transition: color var(--duration) var(--ease-default), transform var(--duration) var(--ease-default);
}
.site-footer__soc-txt { display: flex; flex-direction: column; align-items: flex-start; gap: 3px; min-width: 0; }
.site-footer ul .site-footer__soc-name {
  font-size: 14px; color: rgba(239, 231, 218, 0.9);
  padding-bottom: 1px; border-bottom: 1px solid transparent;
  transition: color var(--duration) var(--ease-default), border-color var(--duration) var(--ease-default);
}
.site-footer ul .site-footer__soc-note,
.site-footer ul .site-footer__soc-note span {
  font-size: 11.5px; line-height: 1.4; letter-spacing: 0.01em;
  color: var(--fg-on-inverse-soft);
  padding: 0; border: 0; overflow-wrap: anywhere;
}
.site-footer ul .site-footer__soc:hover .site-footer__soc-ico { color: var(--accent-warm); transform: translateY(-1px); }
.site-footer ul .site-footer__soc:hover .site-footer__soc-name { color: var(--fg-on-inverse); border-bottom-color: var(--accent-warm); }
.site-footer ul .site-footer__soc:focus-visible { outline: 2px solid var(--accent-warm); outline-offset: 4px; border-radius: 4px; }
@media (prefers-reduced-motion: reduce) {
  .site-footer__soc-ico, .site-footer ul .site-footer__soc-name { transition: none; }
}
.site-footer .legal-row {
  position: relative; z-index: 1;
  margin-top: var(--space-32);
  display: flex; justify-content: space-between; align-items: center; gap: var(--space-32); flex-wrap: wrap;
  font-family: var(--font-body); font-size: 11px;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: rgba(239, 231, 218, 0.64);   /* .5 не хватало контраста на тёмном сапфире */
}
/* Герб основателя — «печать» в правом крае legal-row (как на промо /pervoe).
   При наведении — оборот «монеткой» вокруг вертикальной оси: перспектива,
   блеск металла на рёбрах (90°/270°) и лёгкое приближение в середине. */
.site-footer .legal-row__gerb {
  height: 28px; width: auto; flex: none; opacity: .55;
  transition: opacity .35s ease;
}
.site-footer .legal-row__gerb:hover {
  opacity: 1;
  animation: gerb-coin 2.4s cubic-bezier(.45, 0, .2, 1) 1;
}
/* Оборот «тяжёлой монеты»: медленный разгон, ровная середина, мягкая
   посадка. Ось чуть наклонена (rotateX до 7°) — монета вертится «на
   пальцах», а не на станке. Блики на рёбрах распределены по 12–16% шкалы
   (нарастание/спад), а не пиками — от пиков и был эффект ряби. */
@keyframes gerb-coin {
  0%   { transform: perspective(420px) rotateX(0deg) rotateY(0deg)   scale(1);    filter: brightness(1); }
  12%  { transform: perspective(420px) rotateX(6deg) rotateY(38deg)  scale(1.02); filter: brightness(1.05); }
  26%  { transform: perspective(420px) rotateX(7deg) rotateY(90deg)  scale(1.05); filter: brightness(1.22); }
  40%  { transform: perspective(420px) rotateX(7deg) rotateY(142deg) scale(1.065);filter: brightness(1.07); }
  50%  { transform: perspective(420px) rotateX(7deg) rotateY(180deg) scale(1.07); filter: brightness(1.03); }
  60%  { transform: perspective(420px) rotateX(7deg) rotateY(218deg) scale(1.065);filter: brightness(1.07); }
  74%  { transform: perspective(420px) rotateX(7deg) rotateY(270deg) scale(1.05); filter: brightness(1.22); }
  88%  { transform: perspective(420px) rotateX(6deg) rotateY(322deg) scale(1.02); filter: brightness(1.05); }
  100% { transform: perspective(420px) rotateX(0deg) rotateY(360deg) scale(1);    filter: brightness(1); }
}
@media (prefers-reduced-motion: reduce) {
  .site-footer .legal-row__gerb:hover { animation: none; }
}

/* Dev credit — самая нижняя строка футера. Намеренно вне legal-row
   стиля (без uppercase / tracking) — обычный текст, низкий контраст,
   правый угол. «Профессионально, без выпендрёжа». */
.site-footer__credit {
  position: relative; z-index: 1;
  margin-top: var(--space-16);
  font-family: var(--font-body); font-size: 12px;
  letter-spacing: 0.02em;
  color: rgba(239, 231, 218, 0.32);
  text-align: right;
}
.site-footer__credit a {
  color: rgba(239, 231, 218, 0.7);
  text-decoration: none;
  border-bottom: 1px solid rgba(239, 231, 218, 0.32);
  padding-bottom: 1px;
  transition: color var(--duration-fast) var(--ease-default),
              border-color var(--duration-fast) var(--ease-default);
}
.site-footer__credit a:hover {
  color: var(--color-sapphire-300);
  border-bottom-color: var(--color-sapphire-300);
}
/* Версия сайта — тихая ссылка на журнал изменений /changelog:
   выглядит как обычный текст кредита, оживает только на ховере */
.site-footer__credit a.site-footer__build {
  color: rgba(239, 231, 218, 0.32);
  border-bottom-color: transparent;
}
.site-footer__credit a.site-footer__build:hover {
  color: rgba(239, 231, 218, 0.7);
  border-bottom-color: rgba(239, 231, 218, 0.32);
}

@media (max-width: 1279px) {
  .site-footer .wrap {
    /* Brand-col во всю ширину сверху, дальше 4 колонки */
    grid-template-columns: 1fr 1fr 1fr 1fr;
    gap: var(--space-40);
  }
  .site-footer .brand-col { grid-column: 1 / -1; }
}
@media (max-width: 1023px) {
  .site-footer .wrap { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 767px) {
  .site-footer .wrap { grid-template-columns: 1fr; gap: var(--space-32); }
  .site-footer .legal-row { flex-direction: column; align-items: flex-start; gap: var(--space-12); }
  .site-footer__credit { text-align: left; }
}

/* ---------- IMAGE PLACEHOLDERS ---------- */
.image-placeholder {
  position: relative;
  background: var(--color-pearl-deep);
  border: 1px solid var(--border-default);
  border-radius: var(--radius-sm);
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
  color: var(--fg-soft);
  font-family: var(--font-body); font-size: 11px;
  letter-spacing: 0.18em; text-transform: uppercase;
}
.image-placeholder.ratio-16x9 { aspect-ratio: 16 / 9; }
.image-placeholder.ratio-1x1  { aspect-ratio: 1 / 1; }
.image-placeholder .rose-mark {
  width: 38%; height: auto; opacity: 0.22;
}
.image-placeholder .ph-label {
  position: absolute; bottom: 12px; right: 14px;
}
.bg-sapphire .image-placeholder,
.bg-sapphire-deep .image-placeholder {
  background: var(--color-sapphire-700);
  border-color: rgba(239,231,218,0.18);
  color: var(--fg-on-inverse-soft);
}
.bg-sapphire .image-placeholder .rose-mark,
.bg-sapphire-deep .image-placeholder .rose-mark { filter: brightness(0) invert(1); }

/* ---------- SCROLL TO TOP · D · COMPASS ----------
   Sapphire-печать + brass-арка с меткой севера.
   На hover арка делает полный оборот за 900мс — «как стрелка
   возвращается на север». Деталь, не спецэффект. Источник:
   /project/Кнопка наверх · Варианты.html (вариант D).         */
.scroll-to-top {
  position: fixed;
  right: var(--space-32);
  bottom: var(--space-32);
  z-index: var(--z-overlay);
  width: 64px; height: 64px;
  padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--accent-primary);
  color: var(--color-paper);
  border: 0;
  border-radius: 50%;
  cursor: pointer;
  /* Видимость через opacity (.is-visible), не display, чтобы
     transition работал. Атрибут hidden снимается JS-ом при
     первом scroll-событии. */
  opacity: 0;
  transform: translateY(8px);
  pointer-events: none;
  transition: opacity var(--duration) var(--ease-default),
              transform var(--duration) var(--ease-default),
              background var(--duration-fast) var(--ease-default);
}
.scroll-to-top.is-visible {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
.scroll-to-top:hover { background: var(--accent-primary-hover); }
.scroll-to-top:focus-visible {
  outline: 2px solid var(--accent-warm);
  outline-offset: 6px;
}
.scroll-to-top[hidden] { display: none; }

/* Стрелка по центру sapphire-печати */
.scroll-to-top__arrow {
  width: 16px; height: 16px;
  position: relative; z-index: 2;
  fill: none; stroke: currentColor; stroke-width: 1.5;
  stroke-linecap: round; stroke-linejoin: round;
  transition: transform var(--duration) var(--ease-default);
}

/* Brass-арка вокруг печати — крутится на hover за 900ms.
   inset:-10px отодвигает её на ~10px от края sapphire-круга. */
.scroll-to-top__arc {
  position: absolute; inset: -10px;
  pointer-events: none;
  transition: transform 900ms var(--ease-default);
}
.scroll-to-top__arc svg { width: 100%; height: 100%; }

/* Двойное кольцо: приглушённый трек + brass-прогресс, который
   растёт по часовой стрелке от севера в зависимости от того,
   сколько страницы пролистано. --scroll-progress (0..1) пишется
   из main.js на саму кнопку и нормирован pathLength=100. */
.scroll-to-top__arc-track {
  fill: none;
  stroke: color-mix(in srgb, var(--accent-warm) 28%, transparent);
  stroke-width: 1;
}
.scroll-to-top__arc-progress {
  fill: none;
  stroke: var(--accent-warm);
  stroke-width: 1.25;
  stroke-linecap: round;
  stroke-dasharray: 100;
  stroke-dashoffset: calc(100 - (var(--scroll-progress, 0) * 100));
  transition: stroke-dashoffset 160ms linear;
}
.scroll-to-top__arc-marker {
  fill: var(--accent-warm);
  stroke: none;
}

/* Полный оборот за 900мс — каждый раз при наведении.
   transition наследуется из .scroll-to-top__arc выше. */
.scroll-to-top:hover .scroll-to-top__arc  { transform: rotate(360deg); }
.scroll-to-top:hover .scroll-to-top__arrow { transform: translateY(-2px); }

/* Маленькая «гипотетическая метка севера» снаружи арки — короткая
   brass-чёрточка над компасом. Подчёркивает «север». */
.scroll-to-top--compass::before {
  content: "";
  position: absolute;
  top: -14px; left: 50%;
  transform: translateX(-50%);
  width: 1px; height: 6px;
  background: var(--accent-warm);
}

@media (max-width: 767px) {
  .scroll-to-top {
    right: var(--space-16);
    bottom: var(--space-16);
    width: 56px; height: 56px;
  }
  .scroll-to-top__arc { inset: -8px; }
  /* На тач-устройствах hover-вращение бесполезно. Заменяем
     на короткую пульсацию sapphire-печати при тапе. */
  .scroll-to-top:hover .scroll-to-top__arc  { transform: none; }
  .scroll-to-top:hover .scroll-to-top__arrow { transform: none; }
  .scroll-to-top:active {
    animation: scroll-to-top-pulse 200ms var(--ease-default);
  }
}
@keyframes scroll-to-top-pulse {
  0%   { transform: translateY(0)   scale(1); }
  50%  { transform: translateY(0)   scale(0.92); }
  100% { transform: translateY(0)   scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  .scroll-to-top { transition: opacity var(--duration-fast) linear; transform: none !important; }
  .scroll-to-top__arc { transition: none; }
  .scroll-to-top__arc-progress { transition: none; }
  .scroll-to-top:hover .scroll-to-top__arc  { transform: none; }
  .scroll-to-top:hover .scroll-to-top__arrow { transform: none; }
}

/* =========================================================
   MOBILE SWIPE — универсальный horizontal scroll-snap
   ─────────────────────────────────────────────────────────
   На ≤768px любой `.mobile-swipe` контейнер превращается
   в горизонтальную ленту с peek-эффектом и snap'ом по
   началу каждой карточки. На десктопе ничего не делает —
   родная grid-разметка работает как обычно.
   Ширина карточки задаётся на каждом блоке отдельно через
   `--swipe-card-width` (default 85%).
   ========================================================= */
@media (max-width: 768px) {
  .mobile-swipe {
    display: flex !important;
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x mandatory;
    scroll-padding-left: var(--space-24);
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    gap: var(--space-16);
    /* Edge-to-edge: уезжаем за пределы .container, чтобы
       первая карточка стартовала от левого края экрана,
       а последняя могла прижаться к правому. */
    margin-left: calc(var(--space-24) * -1);
    margin-right: calc(var(--space-24) * -1);
    padding: var(--space-8) var(--space-24) var(--space-16);
    /* Поведение скролла — мгновенное по drag, плавное по JS. */
    scroll-behavior: smooth;
  }
  .mobile-swipe::-webkit-scrollbar { display: none; }

  .mobile-swipe > * {
    flex: 0 0 var(--swipe-card-width, 85%);
    scroll-snap-align: start;
    min-height: auto;
  }
  .mobile-swipe > *:last-child {
    /* «Хвост» — гарантия, что последняя карточка может
       долистаться до начала с peek-эффектом. */
    margin-right: var(--space-24);
  }
}

/* =========================================================
   SWIPE INDICATOR — точки + одноразовая подсказка
   ─────────────────────────────────────────────────────────
   Рендерится JS-скриптом /scripts/swipe-indicators.js на
   основе data-swipe-target. На десктопе скрыт.

   ДИЗАЙН-ПРИНЦИПЫ:
   · Неактивная точка — 6×6px круг, ink-900 @ 0.20
   · Активная       — 20×6px sapphire-капсула (плавно расширяется)
   · Tap-target 32×32px (visual dot сам по себе меньше, кликабельная
     зона — родительская кнопка)
   · Никаких теней, бликов, бордеров — сугубо служебный элемент
   ========================================================= */
.swipe-indicator { display: none; }

@media (max-width: 768px) {
  .swipe-indicator {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-8);
    margin-top: var(--space-24);
    margin-bottom: var(--space-8);
    padding: 0 var(--space-20);
  }

  /* Сама КНОПКА = визуальная точка. ::before — это невидимый
     overlay 32×32, расширяющий tap-target до WCAG-минимума.
     ─────────────────────────────────────────────────────────
     Почему так: iOS Safari агрессивно навешивает дефолтную
     отрисовку (gradient + inset bevel) на `<button>`, который
     `appearance: none` НЕ всегда полностью гасит. Если делать
     кнопку прозрачной 32×32 с ::before-точкой внутри — iOS может
     отрисовать свою «pill»-плашку поверх и точку не видно. Поэтому
     сама кнопка получает явные width/height/background/border-radius
     визуальной точки — iOS не может ничего поверх «дорисовать»,
     потому что её собственная отрисовка перекрывается нашими
     явными свойствами. Tap-area при этом расширяется через
     position: absolute ::before-overlay. */
  .swipe-indicator__dot {
    width: 6px; height: 6px;
    padding: 0; margin: 0;
    border: 0;
    border-radius: 50%;
    background-color: var(--color-ink-900);
    background-image: none;
    box-shadow: none;
    opacity: 0.2;
    color: transparent;     /* гасим text-баг iOS если случайно появится */
    font-size: 0;
    cursor: pointer;
    position: relative;
    -webkit-appearance: none;
    appearance: none;
    outline: none;
    -webkit-tap-highlight-color: transparent;
    transition: width 300ms var(--ease-default),
                height 300ms var(--ease-default),
                border-radius 300ms var(--ease-default),
                background-color 300ms var(--ease-default),
                opacity 300ms var(--ease-default);
  }
  /* Невидимый tap-target 32×32 поверх точки. */
  .swipe-indicator__dot::before {
    content: "";
    position: absolute;
    inset: -19px;           /* 6 + 19×2 = 44 — тач-таргет ≥44px (Этап 2 · A3) */
  }

  /* Hover (mouse/trackpad). */
  .swipe-indicator__dot:hover { opacity: 0.45; }

  /* Активная — sapphire-капсула 20×6 с плавным расширением. */
  .swipe-indicator__dot.is-active {
    width: 20px; height: 6px;
    border-radius: 3px;
    background-color: var(--color-sapphire-500);
    opacity: 1;
  }
  .swipe-indicator__dot.is-active::before { inset: -19px -12px; }

  /* Tab-фокус — sapphire-ring через cream-разрыв. */
  .swipe-indicator__dot:focus-visible {
    box-shadow: 0 0 0 2px var(--color-cream),
                0 0 0 4px var(--color-sapphire-500);
  }

  /* На тёмном sapphire-фоне — инвертированный ink: pearl с
     прозрачностью, активная — sapphire-300 для дельты по светлоте
     на sapphire-900-фоне. */
  .bg-sapphire .swipe-indicator__dot {
    background-color: var(--color-pearl);
    opacity: 0.22;
  }
  .bg-sapphire .swipe-indicator__dot:hover { opacity: 0.45; }
  .bg-sapphire .swipe-indicator__dot.is-active {
    background-color: var(--color-sapphire-300);
    opacity: 1;
  }
  .bg-sapphire .swipe-indicator__dot:focus-visible {
    box-shadow: 0 0 0 2px var(--color-sapphire-900),
                0 0 0 4px var(--color-sapphire-300);
  }

  /* Hint — небольшая подсказка «← листайте →», показывается
     один раз за сессию (sessionStorage gate). */
  .swipe-hint {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-8);
    margin: var(--space-8) auto 0;
    font-family: var(--font-body);
    font-weight: var(--weight-medium);
    font-size: 10px;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--fg-soft);
    opacity: 0;
    pointer-events: none;
    transition: opacity 600ms var(--ease-default);
  }
  .bg-sapphire .swipe-hint { color: color-mix(in srgb, var(--color-pearl) 60%, transparent); }
  .swipe-hint.is-visible { opacity: 1; }
  .swipe-hint.is-hiding  { opacity: 0; }
  .swipe-hint svg {
    width: 14px; height: 14px;
    stroke: currentColor; fill: none;
    stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round;
    animation: swipeHintNudge 1.8s var(--ease-default) infinite;
  }
  @keyframes swipeHintNudge {
    0%, 100% { transform: translateX(0); }
    50%      { transform: translateX(4px); }
  }
}
@media (prefers-reduced-motion: reduce) {
  .swipe-hint svg { animation: none; }
  .swipe-indicator__dot::before { transition: none; }
  .mobile-swipe { scroll-behavior: auto; }
}

/* ─────────────────────────────────────────────────────────────
   Этап 2 · A3 — текстовые поля на мобиле ≥16px.
   iOS Safari зумит страницу при фокусе на input с font-size <16px.
   Скоупим на ≤640px и исключаем checkbox/radio/range (не зумят).
   !important — перебиваем компонентные правила (promo 13px,
   gift-builder/booking-поля 14–15px) без правки каждого по отдельности.
   ───────────────────────────────────────────────────────────── */
@media (max-width: 640px) {
  input:not([type="checkbox"]):not([type="radio"]):not([type="range"]),
  textarea,
  select {
    font-size: 16px !important;
  }
}


/* ═══════════════════════════════════════════════════════════
   UX-1 · Телефон в шапке + мобильный sticky-CTA
   ═══════════════════════════════════════════════════════════ */
/* Десктоп: телефон текстом слева от «Записаться» (caption, ink-mute → sapphire) */
.topnav-phone{font-size:var(--text-caption);color:var(--fg-muted);text-decoration:none;white-space:nowrap;letter-spacing:.02em;font-variant-numeric:tabular-nums;min-width:128px;text-align:center;transition:color var(--duration-fast,.2s) var(--ease-default,ease)}
.topnav-phone:hover{color:var(--accent-primary)}
/* Мобила: иконка-трубка 44×44 рядом с бургером */
.topnav-phone-ico{display:none;width:44px;height:44px;align-items:center;justify-content:center;color:var(--fg-strong);border:1px solid var(--border-strong);border-radius:var(--radius-sm);text-decoration:none}
.topnav-phone-ico svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.topnav-phone-ico:hover{color:var(--accent-primary);border-color:var(--accent-primary)}
.drawer-phone{display:inline-block;font-size:var(--text-caption);color:var(--fg-muted);text-decoration:none;margin-top:6px}
/* Телефон (<768): номер-текст скрыт, иконка-трубка в шапке (звонок в один тап).
   Планшет/десктоп (≥768): номер живёт текстом в utility-ярусе (с iPad не звонят). */
@media (max-width:767px){
  .topnav-phone{display:none}
  .topnav-phone-ico{display:inline-flex}
}

/* Мобильный sticky-CTA: fixed (CLS-safe), показывается через .is-visible */
.sticky-cta{position:fixed;left:0;right:0;bottom:0;z-index:35;display:none;align-items:center;justify-content:space-between;gap:12px;
  padding:8px 16px calc(8px + env(safe-area-inset-bottom));background:var(--color-sapphire-900,#122F5C);color:var(--color-pearl);
  transform:translateY(110%);transition:transform 300ms cubic-bezier(.16,1,.3,1);will-change:transform}
.sticky-cta.is-visible{transform:translateY(0)}
.sticky-cta__price{font-size:var(--text-caption);letter-spacing:.02em;color:var(--color-pearl);line-height:1.25}
.sticky-cta__btn{flex:none;min-height:40px;display:inline-flex;align-items:center;padding:9px 20px;border-radius:var(--radius-sm,6px);
  background:var(--color-pearl);color:var(--color-sapphire-900,#122F5C);font-weight:700;font-size:13px;letter-spacing:.1em;text-transform:uppercase;text-decoration:none;white-space:nowrap}
.sticky-cta__btn:hover{background:#fff}
@media (max-width:767px){.sticky-cta{display:flex}}
@media (prefers-reduced-motion:reduce){.sticky-cta{transition:none}}

/* ── Кнопка «Пространство» в шапке (вход в галерею студии) ──
   Вторичная по стилю: прозрачная, тонкая линия, латунь на наведении — рядом с
   заливной «Записаться» две сплошные кнопки читались бы как реклама. Уже, чем
   основная (у неё min-width 172px), иначе правая часть шапки перевешивает.
   Ниже 1200px её прячет общее правило `.topnav .right .btn { display: none }` —
   там в дело вступает мобильное меню, где «Пространство» отдельным пунктом. */
.topnav .right .btn--space {
  min-width: 0;
  --btn-px: 22px;
  letter-spacing: 0.16em;
  border-color: var(--border-strong);
  color: var(--fg-strong);
}
.topnav .right .btn--space:hover { border-color: var(--accent-warm); color: var(--accent-warm); background: transparent; }
.topnav .right .btn--space:focus-visible { outline: 2px solid var(--accent-warm); outline-offset: 2px; }
@media (max-width: 1439px) {
  /* На узком десктопе шапка плотная: сжимаем поля и трекинг кнопки. */
  .topnav .right .btn--space { --btn-px: 16px; letter-spacing: 0.12em; }
}
@media (max-width: 1366px) {
  /* На 1280 правый блок вылезал за край на 8px — режем поля ещё
     и чуть уменьшаем кегль. Ниже 1200px кнопка скрыта общим правилом. */
  .topnav .right .btn--space { --btn-px: 12px; --btn-fs: 11px; letter-spacing: 0.1em; }
}

/* ── Кинолента «Пространство» по городам ──
   У Ижевска своя съёмка: оба набора кадров в разметке (inc/gallery.php,
   data-gal-city), лишний прячется по html[data-city] — атрибут ставится ранним
   скриптом городских маршрутов ещё в <head>, так что мигания нет, а скрытые
   кадры не грузятся (lazy). Сочи сюда не входит — у него своя серверная
   страница с собственным набором без меток. */
html[data-city="izhevsk"] .gs[data-gal-city="spb"] { display: none; }
html:not([data-city="izhevsk"]) .gs[data-gal-city="izhevsk"] { display: none; }



/* Открытое мобильное меню: плавающая плашка «Первый визит» не наезжает на него.
   Класс ставит scripts/main.js при открытии бургера (Сергей 24.08.2026). */
body.aa-drawer-open .sticky-cta { display: none !important; }   /* рядом живут правила с !important — иначе проигрываем */
/* И плавающая пилюля «Первый визит · −30%» (её ставит блок «Знакомство»,
   z-index 1000) — при открытом меню она наезжала на телефон и город. */
body.aa-drawer-open #aa-welcome-tab,
body.aa-drawer-open .aa-welcome-tab { display: none !important; }
