/* ============================================================================
   OZJAM — Design System
   Dark / cinematic. Built for cPanel static hosting. No build step.
   ------------------------------------------------------------------------
   00  Reset & base
   01  Tokens
   02  Typography
   03  Layout primitives
   04  Atmosphere (aurora, grain, grid)
   05  Buttons & badges
   06  Cards & surfaces
   07  Navigation
   08  Hero
   09  Sections & feature blocks
   10  Device mockups (iPhone frame)
   11  Marquee, stats, timeline, accordion
   12  Forms
   13  Prose (legal / blog)
   14  Footer
   15  Motion & reveal
   16  Utilities
   17  Responsive
   ========================================================================== */

/* ---------------------------------------------------------------- 00 reset */

*,
*::before,
*::after { box-sizing: border-box; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: 96px;
  /* clip, not hidden — hidden on the root would break position: sticky */
  overflow-x: clip;
}

body,
h1, h2, h3, h4, h5, h6,
p, figure, blockquote, dl, dd, ul, ol {
  margin: 0;
  padding: 0;
}

ul[class], ol[class] { list-style: none; }

img, svg, video, canvas {
  display: block;
  max-width: 100%;
  height: auto;
}

button, input, select, textarea {
  font: inherit;
  color: inherit;
}

a { color: inherit; text-decoration: none; }

:focus-visible {
  outline: 2px solid var(--focus);
  outline-offset: 3px;
  border-radius: 6px;
}

::selection {
  background: rgba(99, 102, 241, .35);
  color: #fff;
}

/* --------------------------------------------------------------- 01 tokens */

:root {
  /* Surfaces */
  --bg-0:        #04060c;
  --bg-1:        #070a13;
  --bg-2:        #0a0e1a;
  --bg-3:        #0e1322;

  --surface:      rgba(255, 255, 255, .034);
  --surface-2:    rgba(255, 255, 255, .06);
  --surface-3:    rgba(255, 255, 255, .09);

  --stroke:        rgba(255, 255, 255, .08);
  --stroke-2:      rgba(255, 255, 255, .14);
  --stroke-strong: rgba(255, 255, 255, .22);

  /* Text */
  --text:    #eef1f7;
  --text-1:  #a8b1c3;
  --text-2:  #737d92;
  --text-3:  #4c5568;

  /* Brand */
  --indigo:  #6366f1;
  --violet:  #a855f7;
  --cyan:    #22d3ee;
  --gold:    #f5c451;
  --gold-2:  #fbbf24;
  --blue:    #3b82f6;
  --green:   #34d399;
  --red:     #f87171;

  --accent:        var(--indigo);
  --accent-soft:   rgba(99, 102, 241, .16);
  --accent-line:   rgba(99, 102, 241, .34);

  --grad-brand: linear-gradient(115deg, #6366f1 0%, #a855f7 46%, #22d3ee 100%);
  --grad-gold:  linear-gradient(115deg, #fbbf24 0%, #f5c451 50%, #fde68a 100%);
  --grad-text:  linear-gradient(100deg, #ffffff 0%, #dbe2f0 40%, #9aa6c0 100%);

  /* Type */
  --font-display: 'Plus Jakarta Sans', 'Segoe UI', system-ui, -apple-system, sans-serif;
  --font-body:    'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif;
  --font-mono:    ui-monospace, 'SF Mono', 'JetBrains Mono', 'Cascadia Mono', Consolas, monospace;

  /* Space */
  --gutter:  clamp(20px, 5vw, 40px);
  --maxw:    1200px;
  --maxw-nr: 760px;
  --section: clamp(72px, 11vw, 148px);

  /* Radii */
  --r-sm: 10px;
  --r-md: 16px;
  --r-lg: 22px;
  --r-xl: 30px;
  --r-pill: 999px;

  /* Shadow */
  --sh-sm: 0 1px 2px rgba(0, 0, 0, .4);
  --sh-md: 0 12px 32px -12px rgba(0, 0, 0, .65);
  --sh-lg: 0 40px 80px -32px rgba(0, 0, 0, .8);
  --sh-glow: 0 0 0 1px rgba(99, 102, 241, .28), 0 22px 60px -22px rgba(99, 102, 241, .5);

  --focus: #8b93ff;

  --ease:      cubic-bezier(.4, 0, .2, 1);
  --ease-out:  cubic-bezier(.16, 1, .3, 1);
  --ease-spring: cubic-bezier(.34, 1.56, .64, 1);

  --nav-h: 68px;
}

/* Per-app accent theming — set data-accent on <body> or a section */
[data-accent="warry"] {
  --accent:      #3b82f6;
  --accent-soft: rgba(59, 130, 246, .16);
  --accent-line: rgba(59, 130, 246, .36);
  --grad-brand:  linear-gradient(115deg, #2563eb 0%, #3b82f6 45%, #60a5fa 100%);
  --sh-glow:     0 0 0 1px rgba(59, 130, 246, .28), 0 22px 60px -22px rgba(59, 130, 246, .5);
}

/* PurrBuddy is a warm, playful game — amber rather than the studio indigo. */
[data-accent="purrbuddy"] {
  --accent:      #f59e0b;
  --accent-soft: rgba(245, 158, 11, .15);
  --accent-line: rgba(245, 158, 11, .38);
  --grad-brand:  linear-gradient(115deg, #f97316 0%, #f59e0b 48%, #fcd34d 100%);
  --sh-glow:     0 0 0 1px rgba(245, 158, 11, .3), 0 22px 60px -22px rgba(245, 158, 11, .5);
}

/* ----------------------------------------------------------- 02 typography */

body {
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.65;
  color: var(--text-1);
  background: var(--bg-0);
  font-feature-settings: 'cv02', 'cv03', 'cv04', 'ss01';
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
  min-height: 100vh;
}

h1, h2, h3, h4, h5 {
  font-family: var(--font-display);
  color: var(--text);
  font-weight: 700;
  line-height: 1.1;
  letter-spacing: -.028em;
  text-wrap: balance;
}

.display {
  font-size: clamp(2.7rem, 7.4vw, 5.05rem);
  font-weight: 800;
  line-height: 1.02;
  letter-spacing: -.042em;
}

.h1 { font-size: clamp(2.1rem, 5.2vw, 3.5rem); letter-spacing: -.035em; }
.h2 { font-size: clamp(1.75rem, 4vw, 2.7rem); letter-spacing: -.03em; }
.h3 { font-size: clamp(1.3rem, 2.4vw, 1.65rem); letter-spacing: -.022em; }
.h4 { font-size: clamp(1.08rem, 1.7vw, 1.22rem); letter-spacing: -.016em; font-weight: 650; }

.lead {
  font-size: clamp(1.06rem, 1.9vw, 1.28rem);
  line-height: 1.62;
  color: var(--text-1);
  text-wrap: pretty;
}

.muted  { color: var(--text-2); }
.faint  { color: var(--text-3); }
.small  { font-size: .875rem; line-height: 1.6; }
.tiny   { font-size: .8rem; line-height: 1.55; }

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  font-family: var(--font-display);
  font-size: .705rem;
  font-weight: 700;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--text-2);
}
.eyebrow::before {
  content: '';
  width: 22px;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--accent-line));
}

.grad-text {
  background: var(--grad-text);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.grad-brand-text {
  background: var(--grad-brand);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.gold-text {
  background: var(--grad-gold);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

/* ---------------------------------------------------------- 03 layout */

.wrap {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.wrap-narrow {
  width: 100%;
  max-width: var(--maxw-nr);
  margin-inline: auto;
  padding-inline: var(--gutter);
}

.section { padding-block: var(--section); position: relative; }
.section-sm { padding-block: clamp(48px, 7vw, 84px); }
.section-top-0 { padding-top: 0; }

.stack > * + * { margin-top: var(--stack-gap, 18px); }

.grid { display: grid; gap: clamp(16px, 2.4vw, 26px); }
.grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

.split {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(32px, 6vw, 82px);
  align-items: center;
}

.cluster {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
}

.center { text-align: center; }
.center-x { margin-inline: auto; }

.section-head {
  max-width: 660px;
  margin-bottom: clamp(36px, 5vw, 60px);
}
.section-head.center { margin-inline: auto; }
.section-head .h2 { margin-top: 16px; }
.section-head .lead { margin-top: 18px; }

.rule {
  height: 1px;
  border: 0;
  background: linear-gradient(90deg, transparent, var(--stroke-2) 20%, var(--stroke-2) 80%, transparent);
  margin-block: clamp(40px, 6vw, 72px);
}

/* ------------------------------------------------------ 04 atmosphere */

.atmos {
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  overflow: hidden;
  background:
    radial-gradient(120% 90% at 50% -10%, #0d1224 0%, transparent 60%),
    linear-gradient(180deg, var(--bg-1) 0%, var(--bg-0) 55%, #05070e 100%);
}

.atmos::after {
  /* fine grain — pure CSS, no image request */
  content: '';
  position: absolute;
  inset: -50%;
  opacity: .5;
  background-image:
    radial-gradient(circle at 1px 1px, rgba(255, 255, 255, .045) 1px, transparent 0);
  background-size: 3px 3px;
  mix-blend-mode: overlay;
}

.blob {
  position: absolute;
  border-radius: 50%;
  filter: blur(90px);
  opacity: .5;
  will-change: transform;
}
.blob-1 {
  width: 46vw; height: 46vw; min-width: 340px; min-height: 340px;
  top: -14vw; left: -8vw;
  background: radial-gradient(circle, rgba(99, 102, 241, .55), transparent 68%);
  animation: drift-a 26s var(--ease) infinite alternate;
}
.blob-2 {
  width: 40vw; height: 40vw; min-width: 300px; min-height: 300px;
  top: 8vw; right: -12vw;
  background: radial-gradient(circle, rgba(168, 85, 247, .42), transparent 68%);
  animation: drift-b 32s var(--ease) infinite alternate;
}
.blob-3 {
  width: 36vw; height: 36vw; min-width: 260px; min-height: 260px;
  top: 62vh; left: 34%;
  background: radial-gradient(circle, rgba(34, 211, 238, .26), transparent 68%);
  animation: drift-c 38s var(--ease) infinite alternate;
}

@keyframes drift-a { to { transform: translate3d(7vw, 5vw, 0) scale(1.14); } }
@keyframes drift-b { to { transform: translate3d(-8vw, 7vw, 0) scale(1.08); } }
@keyframes drift-c { to { transform: translate3d(5vw, -8vw, 0) scale(1.16); } }

/* Faint technical grid used behind key sections */
.gridlines {
  position: absolute;
  inset: 0;
  pointer-events: none;
  background-image:
    linear-gradient(var(--stroke) 1px, transparent 1px),
    linear-gradient(90deg, var(--stroke) 1px, transparent 1px);
  background-size: 72px 72px;
  mask-image: radial-gradient(ellipse 70% 60% at 50% 40%, #000 10%, transparent 76%);
  -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 40%, #000 10%, transparent 76%);
  opacity: .55;
}

.glow-line {
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--accent-line) 35%, rgba(168, 85, 247, .5) 50%, var(--accent-line) 65%, transparent);
}

/* --------------------------------------------------------- 05 buttons */

.btn {
  --btn-bg: var(--surface-2);
  --btn-fg: var(--text);
  --btn-bd: var(--stroke-2);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  padding: 13px 24px;
  border-radius: var(--r-pill);
  border: 1px solid var(--btn-bd);
  background: var(--btn-bg);
  color: var(--btn-fg);
  font-family: var(--font-display);
  font-size: .935rem;
  font-weight: 650;
  letter-spacing: -.008em;
  line-height: 1;
  cursor: pointer;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  white-space: nowrap;
  transition: transform .25s var(--ease-out), border-color .25s var(--ease), background .25s var(--ease), box-shadow .3s var(--ease);
}

.btn:hover { transform: translateY(-2px); border-color: var(--stroke-strong); }
.btn:active { transform: translateY(0) scale(.985); }

.btn svg { width: 17px; height: 17px; flex-shrink: 0; }

.btn-primary {
  --btn-bd: transparent;
  --btn-fg: #fff;
  background: var(--grad-brand);
  box-shadow: 0 14px 34px -14px rgba(99, 102, 241, .75);
}
.btn-primary::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(115deg, #7c7ff5, #b975f8 46%, #4ce0f5);
  opacity: 0;
  transition: opacity .3s var(--ease);
}
.btn-primary:hover { box-shadow: 0 20px 44px -14px rgba(99, 102, 241, .9); }
.btn-primary:hover::after { opacity: 1; }

.btn-gold {
  --btn-bd: transparent;
  --btn-fg: #1a1405;
  background: var(--grad-gold);
  box-shadow: 0 14px 34px -14px rgba(251, 191, 36, .6);
}

.btn-ghost {
  --btn-bg: transparent;
  --btn-bd: var(--stroke-2);
}
.btn-ghost:hover { --btn-bg: var(--surface-2); }

.btn-lg { padding: 16px 30px; font-size: 1rem; }
.btn-sm { padding: 9px 17px; font-size: .84rem; }

.btn-block { width: 100%; }

/* App Store badge — drawn, not an image */
.appstore-badge {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 11px 22px 11px 18px;
  border-radius: 14px;
  border: 1px solid var(--stroke-2);
  background: linear-gradient(180deg, rgba(255, 255, 255, .09), rgba(255, 255, 255, .035));
  color: var(--text);
  transition: transform .28s var(--ease-out), border-color .28s var(--ease), box-shadow .3s var(--ease);
}
.appstore-badge:hover {
  transform: translateY(-3px);
  border-color: var(--stroke-strong);
  box-shadow: 0 18px 40px -18px rgba(0, 0, 0, .9);
}
.appstore-badge svg { width: 27px; height: 27px; flex-shrink: 0; }
.appstore-badge .as-txt { display: flex; flex-direction: column; line-height: 1.15; }
.appstore-badge .as-top { font-size: .655rem; letter-spacing: .07em; text-transform: uppercase; color: var(--text-2); }
.appstore-badge .as-btm { font-family: var(--font-display); font-size: 1.08rem; font-weight: 650; letter-spacing: -.02em; }

/* Chips / pills */
.chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 6px 14px;
  border-radius: var(--r-pill);
  border: 1px solid var(--stroke);
  background: var(--surface);
  font-size: .795rem;
  font-weight: 500;
  color: var(--text-1);
  white-space: nowrap;
}
.chip svg { width: 14px; height: 14px; opacity: .8; }
.chip-accent {
  border-color: var(--accent-line);
  background: var(--accent-soft);
  color: #cfd3ff;
}
.chip-gold {
  border-color: rgba(251, 191, 36, .3);
  background: rgba(251, 191, 36, .1);
  color: #f7d58c;
}
.chip-live::before {
  content: '';
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--green);
  box-shadow: 0 0 0 3px rgba(52, 211, 153, .2);
  animation: pulse-dot 2.2s var(--ease) infinite;
}
@keyframes pulse-dot {
  0%, 100% { box-shadow: 0 0 0 3px rgba(52, 211, 153, .22); }
  50%      { box-shadow: 0 0 0 6px rgba(52, 211, 153, 0); }
}

/* ------------------------------------------------- 06 cards & surfaces */

.card {
  position: relative;
  border-radius: var(--r-lg);
  border: 1px solid var(--stroke);
  background:
    linear-gradient(180deg, rgba(255, 255, 255, .055), rgba(255, 255, 255, .018));
  padding: clamp(22px, 3vw, 32px);
  overflow: hidden;
  isolation: isolate;
  transition: transform .4s var(--ease-out), border-color .4s var(--ease), box-shadow .4s var(--ease);
}

/* mouse-tracked spotlight (see ozjam.js) */
.card::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  opacity: 0;
  background: radial-gradient(420px circle at var(--mx, 50%) var(--my, 50%), rgba(255, 255, 255, .07), transparent 62%);
  transition: opacity .45s var(--ease);
}
.card:hover::before { opacity: 1; }

.card-hover:hover {
  transform: translateY(-4px);
  border-color: var(--stroke-2);
  box-shadow: var(--sh-lg);
}

.card-glass {
  background: rgba(255, 255, 255, .04);
  backdrop-filter: blur(18px) saturate(150%);
  -webkit-backdrop-filter: blur(18px) saturate(150%);
}

/* Gradient hairline border */
.card-lit {
  border-color: transparent;
  background:
    linear-gradient(var(--bg-2), var(--bg-2)) padding-box,
    var(--grad-brand) border-box;
  border: 1px solid transparent;
}

.card-icon {
  width: 46px;
  height: 46px;
  border-radius: 13px;
  display: grid;
  place-items: center;
  background: var(--accent-soft);
  border: 1px solid var(--accent-line);
  color: #c8cbff;
  margin-bottom: 20px;
}
.card-icon svg { width: 22px; height: 22px; }
.card-icon-gold {
  background: rgba(251, 191, 36, .12);
  border-color: rgba(251, 191, 36, .28);
  color: var(--gold);
}
.card-icon-green {
  background: rgba(52, 211, 153, .1);
  border-color: rgba(52, 211, 153, .26);
  color: var(--green);
}
.card-icon-cyan {
  background: rgba(34, 211, 238, .1);
  border-color: rgba(34, 211, 238, .26);
  color: var(--cyan);
}

.card h3, .card .h3, .card .h4 { margin-bottom: 10px; }
.card p { color: var(--text-1); font-size: .95rem; }

/* App showcase card */
.app-card {
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: clamp(24px, 3vw, 34px);
  text-decoration: none;
}
.app-card-head {
  display: flex;
  align-items: center;
  gap: 16px;
}
.app-icon {
  width: 62px;
  height: 62px;
  border-radius: 15px;
  flex-shrink: 0;
  box-shadow: 0 10px 26px -10px rgba(0, 0, 0, .9), inset 0 0 0 1px rgba(255, 255, 255, .12);
}
.app-card-meta { min-width: 0; }
.app-card-meta .h3 { margin-bottom: 3px; }
.app-card-foot {
  margin-top: auto;
  padding-top: 18px;
  border-top: 1px solid var(--stroke);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.app-card-cta {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-family: var(--font-display);
  font-weight: 620;
  font-size: .9rem;
  color: var(--text);
}
.app-card-cta svg { width: 15px; height: 15px; transition: transform .3s var(--ease-out); }
.app-card:hover .app-card-cta svg { transform: translateX(4px); }

/* Coming-soon / placeholder card */
.card-dashed {
  border-style: dashed;
  border-color: var(--stroke-2);
  background: transparent;
  display: grid;
  place-items: center;
  text-align: center;
  min-height: 220px;
  color: var(--text-2);
}

/* ------------------------------------------------------ 07 navigation */

.skip-link {
  position: absolute;
  left: 50%;
  top: 10px;
  transform: translate(-50%, -180%);
  z-index: 200;
  padding: 11px 20px;
  border-radius: var(--r-pill);
  background: var(--bg-3);
  border: 1px solid var(--stroke-2);
  color: var(--text);
  font-size: .875rem;
  transition: transform .25s var(--ease-out);
}
.skip-link:focus { transform: translate(-50%, 0); }

.nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 100;
  height: var(--nav-h);
  display: flex;
  align-items: center;
  transition: background .35s var(--ease), border-color .35s var(--ease), backdrop-filter .35s var(--ease);
  border-bottom: 1px solid transparent;
}
.nav.is-stuck {
  background: rgba(6, 9, 16, .72);
  backdrop-filter: blur(20px) saturate(160%);
  -webkit-backdrop-filter: blur(20px) saturate(160%);
  border-bottom-color: var(--stroke);
}

.nav-inner {
  width: 100%;
  max-width: var(--maxw);
  margin-inline: auto;
  padding-inline: var(--gutter);
  display: flex;
  align-items: center;
  gap: 18px;
}

.brand {
  display: inline-flex;
  align-items: center;
  gap: 11px;
  flex-shrink: 0;
  margin-right: auto;
}
/* The wordmark already spells the name, so there is no text beside it. It
   keeps its own aspect ratio and its own glow rather than being boxed in. */
.brand-wordmark {
  height: 28px;
  width: auto;
  flex-shrink: 0;
  transition: opacity .25s var(--ease);
}
.brand:hover .brand-wordmark { opacity: .82; }

@media (max-width: 620px) {
  .brand-wordmark { height: 25px; }
}
.brand-name {
  font-family: var(--font-display);
  font-size: 1.12rem;
  font-weight: 800;
  letter-spacing: -.03em;
  color: var(--text);
}
.brand-name span { color: var(--text-2); font-weight: 600; }

.nav-links {
  display: flex;
  align-items: center;
  gap: 4px;
}
.nav-link {
  position: relative;
  padding: 9px 14px;
  border-radius: var(--r-pill);
  font-size: .905rem;
  font-weight: 500;
  color: var(--text-1);
  transition: color .25s var(--ease), background .25s var(--ease);
}
.nav-link:hover { color: var(--text); background: var(--surface); }
.nav-link[aria-current="page"] { color: var(--text); }
.nav-link[aria-current="page"]::after {
  content: '';
  position: absolute;
  left: 14px; right: 14px; bottom: 3px;
  height: 2px;
  border-radius: 2px;
  background: var(--grad-brand);
}

.nav-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}

/* Language switch */
.lang-switch {
  display: inline-flex;
  align-items: center;
  padding: 3px;
  border-radius: var(--r-pill);
  border: 1px solid var(--stroke);
  background: var(--surface);
  position: relative;
}
.lang-btn {
  position: relative;
  z-index: 1;
  padding: 6px 13px;
  border: 0;
  background: none;
  border-radius: var(--r-pill);
  font-family: var(--font-display);
  font-size: .775rem;
  font-weight: 700;
  letter-spacing: .04em;
  color: var(--text-2);
  cursor: pointer;
  transition: color .28s var(--ease);
}
.lang-btn[aria-pressed="true"] { color: #fff; }
.lang-thumb {
  position: absolute;
  top: 3px;
  bottom: 3px;
  border-radius: var(--r-pill);
  background: var(--grad-brand);
  transition: transform .38s var(--ease-spring), width .38s var(--ease-spring);
  z-index: 0;
}

/* Mobile menu */
.nav-toggle {
  display: none;
  width: 42px;
  height: 42px;
  border-radius: 12px;
  border: 1px solid var(--stroke);
  background: var(--surface);
  cursor: pointer;
  place-items: center;
}
.nav-toggle span {
  display: block;
  width: 17px;
  height: 1.5px;
  background: var(--text);
  border-radius: 2px;
  transition: transform .32s var(--ease-out), opacity .2s var(--ease);
}
.nav-toggle span + span { margin-top: 4.5px; }
.nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
.nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

.nav-drawer {
  position: fixed;
  inset: var(--nav-h) 0 0;
  z-index: 99;
  background: rgba(4, 6, 12, .96);
  backdrop-filter: blur(24px);
  -webkit-backdrop-filter: blur(24px);
  padding: 28px var(--gutter) 48px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-10px);
  transition: opacity .3s var(--ease), transform .35s var(--ease-out), visibility .3s;
  overflow-y: auto;
}
.nav-drawer.is-open { opacity: 1; visibility: visible; transform: none; }
.nav-drawer a {
  padding: 15px 4px;
  font-family: var(--font-display);
  font-size: 1.32rem;
  font-weight: 650;
  letter-spacing: -.02em;
  color: var(--text);
  border-bottom: 1px solid var(--stroke);
}
.nav-drawer .drawer-foot { margin-top: 28px; display: flex; flex-direction: column; gap: 14px; }

/* ------------------------------------------------------------- 08 hero */

.hero {
  position: relative;
  padding-top: calc(var(--nav-h) + clamp(56px, 10vw, 116px));
  padding-bottom: clamp(64px, 9vw, 112px);
  overflow: hidden;
}

.hero-inner { position: relative; z-index: 1; }

.hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);
  gap: clamp(36px, 5vw, 72px);
  align-items: center;
}

.hero .display { margin-top: 22px; }
.hero .lead { margin-top: 24px; max-width: 54ch; }
.hero-cta { margin-top: 36px; }
.hero-note { margin-top: 22px; font-size: .84rem; color: var(--text-3); }

.hero-stats {
  margin-top: clamp(48px, 7vw, 84px);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 1px;
  background: var(--stroke);
  border: 1px solid var(--stroke);
  border-radius: var(--r-lg);
  overflow: hidden;
}
.hero-stat {
  background: var(--bg-1);
  padding: 26px clamp(18px, 2.4vw, 30px);
  /* Labels wrap to different line counts across languages, so the values are
     pushed to the bottom of the cell instead of hanging off the label. Grid
     stretches every cell to the same height, so they all land on one line. */
  display: flex;
  flex-direction: column;
}
.hero-stat dt {
  font-size: .755rem;
  line-height: 1.45;
  letter-spacing: .13em;
  text-transform: uppercase;
  color: var(--text-3);
  font-weight: 600;
  text-wrap: balance;
}
.hero-stat dd {
  margin-top: auto;
  padding-top: 14px;
  font-family: var(--font-display);
  font-size: clamp(1.5rem, 3vw, 2.05rem);
  font-weight: 800;
  letter-spacing: -.035em;
  line-height: 1.05;
  color: var(--text);
  /* Same-width digits, so numbers line up column to column. */
  font-variant-numeric: lining-nums tabular-nums;
}

/* --------------------------------------------- 09 sections & features */

.feature-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(32px, 6vw, 80px);
  align-items: center;
}
.feature-row + .feature-row { margin-top: clamp(64px, 9vw, 120px); }
.feature-row.reverse > :first-child { order: 2; }

.feature-list { margin-top: 26px; display: grid; gap: 16px; }
.feature-item { display: flex; gap: 14px; align-items: flex-start; }
.feature-item-icon {
  width: 26px; height: 26px;
  border-radius: 8px;
  flex-shrink: 0;
  margin-top: 2px;
  display: grid;
  place-items: center;
  background: var(--accent-soft);
  border: 1px solid var(--accent-line);
  color: #c8cbff;
}
.feature-item-icon svg { width: 13px; height: 13px; }
.feature-item strong { color: var(--text); font-weight: 620; display: block; margin-bottom: 2px; font-family: var(--font-display); }
.feature-item p { font-size: .925rem; color: var(--text-2); }

/* --- Decision log ----------------------------------------------------------
   A deliberately different shape from .feature-list: struck-through headings
   and a dashed rule between rows, so a list of refusals reads as a list of
   refusals rather than as another set of feature bullets.                    */

.nope-list { display: grid; }

.nope {
  display: grid;
  grid-template-columns: 22px minmax(0, 1fr);
  gap: 14px;
  padding: 15px 0;
  border-bottom: 1px dashed var(--stroke);
}
.nope:first-child { padding-top: 4px; }
.nope:last-child { border-bottom: 0; padding-bottom: 0; }

.nope-mark {
  width: 22px;
  height: 22px;
  margin-top: 2px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  border: 1px solid rgba(248, 113, 113, .28);
  background: rgba(248, 113, 113, .08);
  color: var(--red);
}
.nope-mark svg { width: 10px; height: 10px; }

.nope strong {
  display: block;
  margin-bottom: 3px;
  font-family: var(--font-display);
  font-weight: 650;
  font-size: .97rem;
  letter-spacing: -.014em;
  color: var(--text-1);
  text-decoration: line-through;
  text-decoration-color: rgba(248, 113, 113, .55);
  text-decoration-thickness: 1.5px;
}
.nope p { font-size: .89rem; color: var(--text-2); }

/* Big callout band */
.band {
  position: relative;
  border-radius: var(--r-xl);
  border: 1px solid var(--stroke);
  padding: clamp(38px, 6vw, 72px);
  overflow: hidden;
  text-align: center;
  background:
    radial-gradient(90% 130% at 50% 0%, rgba(99, 102, 241, .22), transparent 62%),
    linear-gradient(180deg, rgba(255, 255, 255, .05), rgba(255, 255, 255, .015));
}
.band .h2 { max-width: 20ch; margin-inline: auto; }
.band .lead { max-width: 56ch; margin: 20px auto 0; }
.band .cluster { justify-content: center; margin-top: 34px; }

/* --------------------------------------------------- 10 device mockup */

.device-stage {
  position: relative;
  display: grid;
  place-items: center;
  perspective: 1600px;
}
.device-stage::before {
  content: '';
  position: absolute;
  width: 78%;
  height: 62%;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(99, 102, 241, .4), transparent 68%);
  filter: blur(70px);
  z-index: 0;
}
[data-accent="warry"] .device-stage::before {
  background: radial-gradient(circle, rgba(59, 130, 246, .45), transparent 68%);
}

.phone {
  position: relative;
  z-index: 1;
  width: min(300px, 76vw);
  /* No aspect-ratio here on purpose. 393x852 is the iPhone SCREEN, and the
     bezel sits outside it, so the body's height has to be the screen's height
     plus the bezel. Fixing a ratio on the body instead only lands correctly at
     one particular width — at every other size the fixed padding eats a
     different share of it and the screen comes out too narrow, which crops the
     sides off a real screenshot. The ratio therefore lives on .phone-screen
     and this element simply wraps it. */
  /* Every dimension is a share of the frame's own size, so the bezel, the
     corner and the notch keep their relationship whether the phone renders at
     300px in the hero or 232px in the carousel. Fixed pixels only look right
     at one size; at any other the bezel reads as too thick and the notch as
     too big, which is what makes a mockup feel cheap.

     The bezel is NOT padding: a percentage padding resolves against the
     containing block's width, not the element's own, so it drifts as soon as
     the phone sits in a wider column. .phone-screen is positioned instead,
     with insets that do resolve against this box.

     This ratio is derived, not guessed: with a bezel of 3.7% of the outer
     width, an inner screen of 393x852 makes the outer body 1 : 2.0815.
     Radii are width%/height% pairs so corners stay circular. */
  aspect-ratio: 0.48042;
  border-radius: 17.3% / 8.31%;
  background: linear-gradient(160deg, #2b3145 0%, #10131d 28%, #070910 62%, #262b3c 100%);
  box-shadow:
    0 0 0 1px rgba(255, 255, 255, .1),
    0 50px 90px -34px rgba(0, 0, 0, .95),
    inset 0 0 0 2px rgba(0, 0, 0, .55);
  transition: transform .8s var(--ease-out);
}
.phone-tilt { transform: rotateY(-13deg) rotateX(5deg) rotateZ(1.2deg); }
.phone-tilt:hover { transform: rotateY(-5deg) rotateX(2deg); }

.phone-screen {
  /* Inset from the frame rather than padded into it. Percentages on `inset`
     resolve against .phone itself, so the bezel stays 3.7% of the frame width
     at any size and the screen lands at exactly 393:852. Horizontal insets are
     a share of width, vertical ones a share of height — hence the two numbers. */
  position: absolute;
  inset: 1.7776% 3.7%;
  /* ~55pt corner on a 393pt-wide screen, as a width%/height% pair so it stays
     circular instead of stretching with the tall box. */
  border-radius: 15.1% / 7%;
  overflow: hidden;
  background: #f2f2f7;
  display: flex;
  flex-direction: column;
}

/* A frame holding a real screenshot gets a dark screen, so a sub-pixel
   rounding gap reads as bezel rather than as a white band. */
.phone-screen:has(.phone-shot) { background: #0b0d16; }

/* Apple's Dynamic Island measures 125x37pt on a 393x852pt screen and sits
   about 11pt below the top edge. Expressed as a share of the screen those are
   the numbers below, so the island scales with the frame and lands in the gap
   the app's own top bar leaves for it — a fixed height collides with it. */
.phone-notch {
  position: absolute;
  top: 1.3%;
  left: 50%;
  transform: translateX(-50%);
  width: 31.8%;
  aspect-ratio: 125 / 37;
  border-radius: 999px;
  background: #05070c;
  z-index: 20;
}

.phone-glare {
  position: absolute;
  inset: 0;
  z-index: 21;
  pointer-events: none;
  /* Matches .phone-screen's radius pair so the sheen never bleeds past the
     rounded corner at small sizes. */
  border-radius: 15.1% / 7%;
  background: linear-gradient(128deg, rgba(255, 255, 255, .17) 0%, rgba(255, 255, 255, .04) 22%, transparent 44%);
}

/* Warry UI recreation — light iOS surface inside the frame */
.ui {
  font-family: var(--font-body);
  color: #0f172a;
  flex: 1;
  display: flex;
  flex-direction: column;
  background: #f2f2f7;
  overflow: hidden;
}
.ui-status {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 15px 22px 4px;
  font-size: 11px;
  font-weight: 700;
  color: #0f172a;
  letter-spacing: -.01em;
}
.ui-status-icons { display: flex; gap: 4px; align-items: center; }
.ui-status-icons i {
  display: block;
  width: 3px;
  border-radius: 1px;
  background: #0f172a;
}
.ui-status-icons i:nth-child(1) { height: 4px; }
.ui-status-icons i:nth-child(2) { height: 6px; }
.ui-status-icons i:nth-child(3) { height: 8px; }
.ui-status-icons i:nth-child(4) { height: 10px; }
.ui-battery {
  width: 18px; height: 9px;
  border: 1.2px solid #0f172a;
  border-radius: 3px;
  padding: 1px;
  margin-left: 3px;
}
.ui-battery span { display: block; height: 100%; width: 72%; background: #0f172a; border-radius: 1px; }

.ui-body { flex: 1; padding: 12px 15px 0; overflow: hidden; }

.ui-header { display: flex; align-items: center; gap: 9px; margin-bottom: 14px; }
.ui-header .ui-logo { width: 30px; height: 30px; flex-shrink: 0; }
.ui-header .ui-app-name { font-size: 15px; font-weight: 800; color: #0f172a; letter-spacing: -.02em; line-height: 1; font-family: var(--font-display); }
.ui-header p { font-size: 9.5px; color: #64748b; font-weight: 500; margin-top: 3px; line-height: 1; }

.ui-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 9px; }
.ui-card {
  background: #fff;
  border: 1px solid #eef1f6;
  border-radius: 15px;
  padding: 11px;
  position: relative;
  overflow: hidden;
  min-height: 78px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}
.ui-card::after {
  content: '';
  position: absolute;
  top: -14px; right: -14px;
  width: 52px; height: 52px;
  border-bottom-left-radius: 100%;
  opacity: .5;
}
.ui-card.blue::after  { background: #eff6ff; }
.ui-card.green::after { background: #ecfdf5; }
.ui-card-label { font-size: 8.5px; font-weight: 700; color: #64748b; letter-spacing: .04em; position: relative; z-index: 1; }
.ui-card-icon { width: 13px; height: 13px; margin-top: 5px; position: relative; z-index: 1; }
.ui-card-value {
  font-family: var(--font-display);
  font-size: 17px;
  font-weight: 800;
  letter-spacing: -.035em;
  color: #0f172a;
  position: relative;
  z-index: 1;
  line-height: 1;
}
.ui-card-value.ok { color: #059669; }

.ui-panel {
  margin-top: 10px;
  background: #fff;
  border: 1px solid #eef1f6;
  border-radius: 15px;
  padding: 12px;
}
.ui-panel-title { font-size: 10.5px; font-weight: 700; color: #0f172a; margin-bottom: 9px; font-family: var(--font-display); letter-spacing: -.01em; }

.ui-donut { display: grid; place-items: center; padding: 2px 0 8px; }
.ui-donut svg { width: 96px; height: 96px; }

.ui-legend { display: flex; flex-wrap: wrap; gap: 4px; justify-content: center; }
.ui-legend span {
  display: inline-flex;
  align-items: center;
  gap: 3.5px;
  font-size: 7.6px;
  font-weight: 600;
  color: #475569;
  background: #f8fafc;
  border: 1px solid #eef1f6;
  border-radius: 5px;
  padding: 2.5px 5px;
}
.ui-legend i { width: 5px; height: 5px; border-radius: 50%; display: block; }

.ui-nav {
  position: relative;
  margin-top: auto;
  background: #fff;
  border-top: 1px solid #e6e9ef;
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  padding: 7px 16px 15px;
  height: 62px;
}
.ui-nav-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  width: 42px;
  color: #b4bcca;
}
.ui-nav-item.active { color: #2563eb; }
.ui-nav-item svg { width: 17px; height: 17px; }
.ui-nav-item span { font-size: 7.4px; font-weight: 600; letter-spacing: -.01em; }
.ui-fab {
  position: absolute;
  left: 50%;
  top: -22px;
  transform: translateX(-50%);
  width: 47px; height: 47px;
  border-radius: 50%;
  background: #2563eb;
  display: grid;
  place-items: center;
  color: #fff;
  box-shadow: 0 10px 22px -8px rgba(37, 99, 235, .8);
  border: 4px solid #f2f2f7;
}
.ui-fab svg { width: 21px; height: 21px; }

/* --- Add-item screen -------------------------------------------------------
   A faithful, scaled recreation of pages/AddItem.tsx: its own white top bar
   (the tab bar is hidden on that route), a photo tile, then the form card.
   Scale factor vs. the real 393pt screen is ~0.68.                           */

.ui-topbar {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 40px;
  padding: 0 12px;
  background: #fff;
  border-bottom: 1px solid #e6e9ef;
  box-shadow: 0 1px 2px rgba(15, 23, 42, .04);
  flex-shrink: 0;
}
.ui-topbar .ui-app-name {
  font-family: var(--font-display);
  font-size: 12.5px;
  font-weight: 800;
  letter-spacing: -.02em;
  color: #0f172a;
}
.ui-topbar .ui-back {
  position: absolute;
  left: 8px;
  width: 22px;
  height: 22px;
  display: grid;
  place-items: center;
  color: #475569;
}
.ui-topbar .ui-back svg { width: 16px; height: 16px; }

.ui-scroll {
  flex: 1;
  overflow: hidden;
  background: #f9fafb;
  padding: 12px 14px 0;
}

.ui-photo {
  width: 76px;
  height: 76px;
  margin: 0 auto 11px;
  border-radius: 16px;
  border: 2px solid #fff;
  box-shadow: 0 4px 12px rgba(15, 23, 42, .1);
  background: linear-gradient(160deg, #e2e8f0 0%, #f8fafc 55%, #cbd5e1 100%);
  display: grid;
  place-items: center;
  color: #94a3b8;
  overflow: hidden;
}
.ui-photo svg { width: 40px; height: 40px; }

.ui-formcard {
  background: #fff;
  border: 1px solid #eef1f6;
  border-radius: 16px;
  padding: 12px;
  display: grid;
  gap: 10px;
}

.ui-label {
  display: block;
  font-size: 8px;
  font-weight: 800;
  color: #64748b;
  letter-spacing: .01em;
  margin: 0 0 3px 2px;
  text-transform: uppercase;
}
.ui-label span { color: #ef4444; }

.ui-control {
  height: 30px;
  padding: 0 9px;
  border-radius: 9px;
  border: 1px solid #e5e7eb;
  background: #f8fafc;
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 10px;
  font-weight: 600;
  color: #0f172a;
  white-space: nowrap;
  overflow: hidden;
}
.ui-control > span {
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}
.ui-control.lg { font-size: 11px; height: 32px; }
.ui-control.ghost { color: #94a3b8; font-weight: 500; }
.ui-control svg { width: 11px; height: 11px; color: #94a3b8; flex-shrink: 0; margin-left: auto; }

.ui-row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }

.ui-price { display: flex; gap: 6px; }
.ui-price .ui-control:first-child { flex: 1; }
.ui-cur {
  width: 52px;
  height: 30px;
  border-radius: 9px;
  border: 1px solid #e5e7eb;
  background: #f1f5f9;
  display: grid;
  place-items: center;
  font-size: 9.5px;
  font-weight: 700;
  color: #475569;
  flex-shrink: 0;
}

.ui-doccard {
  margin-top: 10px;
  background: #fff;
  border: 1px solid #eef1f6;
  border-radius: 16px;
  padding: 11px 12px;
}
.ui-dochead {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 8px;
}
.ui-dochead .ui-label { margin: 0; }
.ui-docadd {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 3px 8px;
  border-radius: 7px;
  border: 1px solid #dbeafe;
  background: #eff6ff;
  color: #2563eb;
  font-size: 8.5px;
  font-weight: 700;
}
.ui-docadd svg { width: 9px; height: 9px; }

.ui-docrow {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 6px 7px;
  border-radius: 10px;
  border: 1px solid #eef1f6;
  background: #f8fafc;
  font-size: 9px;
  font-weight: 600;
  color: #334155;
}
.ui-docrow + .ui-docrow { margin-top: 5px; }
.ui-docrow i {
  width: 22px; height: 22px;
  border-radius: 7px;
  border: 1px solid #e5e7eb;
  background: #fff;
  display: grid;
  place-items: center;
  color: #3b82f6;
  flex-shrink: 0;
}
.ui-docrow i svg { width: 11px; height: 11px; }

.ui-savebtn {
  margin-top: 12px;
  height: 36px;
  border-radius: 13px;
  background: #2563eb;
  color: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  font-family: var(--font-display);
  font-size: 12px;
  font-weight: 800;
  letter-spacing: -.01em;
  box-shadow: 0 8px 18px -8px rgba(37, 99, 235, .8);
}
.ui-savebtn svg { width: 14px; height: 14px; }

/* --- Real screenshots inside the phone frame -------------------------------
   The supplied screenshots are 500x1086, a ratio of 0.4604; .phone is
   393/852 = 0.4613. Close enough that `cover` crops nothing visible, so a
   game screenshot drops straight into the same frame the Warry mockups use. */

/* <picture> is an inline wrapper with no height of its own, so an <img> set to
   height:100% inside it resolves against nothing and falls back to its own
   aspect ratio — leaving a gap at the bottom of the frame. Make the wrapper a
   flex item that fills the screen, and the image fills the wrapper. */
.phone-screen > picture {
  display: block;
  flex: 1 1 auto;
  min-height: 0;
  position: relative;
}

.phone-shot {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
  border-radius: 15.1% / 7%;
  display: block;
}

/* --- Screenshot carousel ---------------------------------------------------
   Native scroll-snap does the moving, so a thumb drag on a phone feels exactly
   like every other carousel the reader has used. The scrollbar itself is
   hidden and replaced by arrows and dots, which are reachable by keyboard and
   large enough to hit with a thumb.                                          */

.carousel { position: relative; }

.shots {
  display: flex;
  gap: clamp(18px, 3vw, 34px);
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  overscroll-behavior-x: contain;
  padding: 6px 4px 4px;
  /* Fades at both edges hint that there is more to either side. */
  mask-image: linear-gradient(90deg, transparent, #000 3%, #000 97%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 3%, #000 97%, transparent);
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.shots::-webkit-scrollbar { display: none; }

.shot {
  flex: 0 0 auto;
  scroll-snap-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
  transition: opacity .45s var(--ease), transform .45s var(--ease-out);
}
.shot .phone { width: min(232px, 64vw); }

/* App Store marketing panels. These already contain a device frame and their
   own headline, so they are shown flat — no .phone wrapper around them. */

.shot figcaption {
  font-size: .85rem;
  color: var(--text-2);
  text-align: center;
  max-width: 24ch;
  text-wrap: balance;
}

/* The centred card is the one being read; its neighbours step back. */
.carousel[data-ready] .shot { opacity: .42; transform: scale(.94); }
.carousel[data-ready] .shot.is-active { opacity: 1; transform: none; }

.carousel-controls {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 18px;
  margin-top: 20px;
}

.carousel-btn {
  width: 46px;
  height: 46px;
  flex-shrink: 0;
  display: grid;
  place-items: center;
  border-radius: 50%;
  border: 1px solid var(--stroke-2);
  background: var(--surface-2);
  color: var(--text);
  cursor: pointer;
  transition: border-color .25s var(--ease), background .25s var(--ease),
              transform .25s var(--ease-out), opacity .25s var(--ease);
}
.carousel-btn:hover:not(:disabled) {
  border-color: var(--accent-line);
  background: var(--accent-soft);
  transform: translateY(-2px);
}
.carousel-btn:active:not(:disabled) { transform: translateY(0) scale(.94); }
.carousel-btn:disabled { opacity: .3; cursor: default; }
.carousel-btn svg { width: 18px; height: 18px; }

.carousel-dots {
  display: flex;
  align-items: center;
  gap: 9px;
}
.carousel-dot {
  width: 9px;
  height: 9px;
  padding: 0;
  border: 0;
  border-radius: 50%;
  background: var(--stroke-strong);
  cursor: pointer;
  transition: background .3s var(--ease), width .3s var(--ease-spring);
}
.carousel-dot[aria-current="true"] {
  width: 26px;
  border-radius: var(--r-pill);
  background: var(--grad-brand);
}
/* Comfortable touch target without a large visible dot. */
.carousel-dot::before {
  content: '';
  position: absolute;
  width: 32px;
  height: 32px;
  transform: translate(-50%, -50%);
  margin-left: 4.5px;
  margin-top: 4.5px;
}

@media (max-width: 620px) {
  .carousel-btn { width: 50px; height: 50px; }
  .carousel-controls { gap: 14px; }
}

@media (prefers-reduced-motion: reduce) {
  .shots { scroll-behavior: auto; }
  .carousel[data-ready] .shot { opacity: 1; transform: none; }
}

/* Cut-out character art, floated beside copy */
.cutout {
  display: block;
  width: 100%;
  max-width: 300px;
  height: auto;
  margin-inline: auto;
  filter: drop-shadow(0 24px 44px rgba(0, 0, 0, .55));
}

/* Decorative tile strip, used as a soft divider */
.tile-strip {
  display: block;
  width: 100%;
  max-width: 760px;
  height: auto;
  margin: clamp(30px, 5vw, 52px) auto 0;
  opacity: .9;
  mask-image: linear-gradient(90deg, transparent, #000 14%, #000 86%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 14%, #000 86%, transparent);
}

/* Game logo lockup on the hero */
.game-logo {
  display: block;
  width: min(370px, 78vw);
  height: auto;
  margin-bottom: 6px;
}

/* --- Unreleased app: the badge is present but deliberately inert ---------- */

.appstore-badge[aria-disabled="true"] {
  opacity: .55;
  cursor: default;
  pointer-events: none;
  filter: grayscale(.35);
}
.appstore-badge[aria-disabled="true"]:hover {
  transform: none;
  box-shadow: none;
  border-color: var(--stroke-2);
}

.chip-soon {
  border-color: rgba(245, 158, 11, .34);
  background: rgba(245, 158, 11, .12);
  color: #fbd38d;
}
.chip-soon::before {
  content: '';
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--gold-2);
  box-shadow: 0 0 0 3px rgba(251, 191, 36, .2);
  animation: pulse-dot 2.6s var(--ease) infinite;
}

/* Floating annotation chips around the phone */
.device-note {
  position: absolute;
  z-index: 3;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 9px 15px;
  border-radius: var(--r-pill);
  background: rgba(10, 14, 26, .82);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
  border: 1px solid var(--stroke-2);
  font-size: .8rem;
  font-weight: 550;
  color: var(--text);
  box-shadow: var(--sh-md);
  white-space: nowrap;
}
.device-note svg { width: 14px; height: 14px; color: var(--accent); }
.device-note-a { top: 14%; left: -6%; animation: float-a 7s var(--ease) infinite alternate; }
.device-note-b { bottom: 22%; right: -8%; animation: float-b 8.5s var(--ease) infinite alternate; }

@keyframes float-a { to { transform: translateY(-13px); } }
@keyframes float-b { to { transform: translateY(11px); } }

/* -------------------------------- 11 marquee, stats, timeline, faq */

.marquee {
  position: relative;
  overflow: hidden;
  mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
}
.marquee-track {
  display: flex;
  gap: 14px;
  width: max-content;
  animation: scroll-x 38s linear infinite;
}
.marquee:hover .marquee-track { animation-play-state: paused; }
@keyframes scroll-x { to { transform: translateX(-50%); } }

.step-list { counter-reset: step; display: grid; gap: 1px; background: var(--stroke); border: 1px solid var(--stroke); border-radius: var(--r-lg); overflow: hidden; }
.step {
  counter-increment: step;
  background: var(--bg-1);
  padding: clamp(24px, 3vw, 34px);
  display: flex;
  gap: 20px;
  align-items: flex-start;
}
.step::before {
  content: counter(step, decimal-leading-zero);
  font-family: var(--font-mono);
  font-size: .78rem;
  font-weight: 600;
  color: var(--accent);
  letter-spacing: .08em;
  padding-top: 4px;
  flex-shrink: 0;
}
.step h3 { font-size: 1.08rem; margin-bottom: 7px; }
.step p { font-size: .93rem; color: var(--text-2); }

/* Accordion (FAQ) */
.faq { display: grid; gap: 12px; }
.faq-item {
  border: 1px solid var(--stroke);
  border-radius: var(--r-md);
  background: var(--surface);
  overflow: hidden;
  transition: border-color .3s var(--ease), background .3s var(--ease);
}
.faq-item[open] { border-color: var(--stroke-2); background: var(--surface-2); }
.faq-item summary {
  list-style: none;
  cursor: pointer;
  padding: 19px 56px 19px 22px;
  position: relative;
  font-family: var(--font-display);
  font-weight: 620;
  font-size: 1.01rem;
  color: var(--text);
  letter-spacing: -.015em;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: '';
  position: absolute;
  right: 22px;
  top: 50%;
  width: 11px; height: 11px;
  margin-top: -6px;
  border-right: 2px solid var(--text-2);
  border-bottom: 2px solid var(--text-2);
  transform: rotate(45deg);
  transition: transform .3s var(--ease-out), border-color .3s var(--ease);
}
.faq-item[open] summary::after { transform: rotate(-135deg); border-color: var(--accent); }
.faq-body { padding: 0 22px 22px; color: var(--text-1); font-size: .95rem; }
.faq-body p + p { margin-top: 12px; }
.faq-body a { color: #a9b0ff; text-decoration: underline; text-underline-offset: 3px; }

/* --- App Store rating -------------------------------------------------------
   Populated at runtime from /api/appstore.php and hidden until real numbers
   arrive, so a fetch failure leaves no empty shell behind.                    */

.rating {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 8px 15px 8px 13px;
  border-radius: var(--r-pill);
  border: 1px solid rgba(251, 191, 36, .26);
  background: rgba(251, 191, 36, .08);
  color: var(--text);
  transition: border-color .28s var(--ease), background .28s var(--ease), transform .28s var(--ease-out);
}
a.rating:hover {
  border-color: rgba(251, 191, 36, .5);
  background: rgba(251, 191, 36, .13);
  transform: translateY(-2px);
}
.rating[hidden] { display: none; }

.stars {
  position: relative;
  display: inline-block;
  line-height: 0;
  flex-shrink: 0;
}
.stars svg { display: block; height: 15px; width: auto; }
.stars-bg { color: rgba(255, 255, 255, .16); }
.stars-fg {
  position: absolute;
  inset: 0;
  overflow: hidden;
  width: var(--pct, 0%);
  color: var(--gold-2);
}

.rating-value {
  font-family: var(--font-display);
  font-weight: 750;
  font-size: .95rem;
  letter-spacing: -.02em;
  color: #f7d58c;
}
.rating-count {
  font-size: .82rem;
  color: var(--text-2);
  white-space: nowrap;
}

/* Review cards — rendered from the same proxy payload */

.reviews[hidden] { display: none; }

.review {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: clamp(20px, 2.6vw, 26px);
}
.review-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.review-head .stars svg { height: 13px; }
.review-title {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.02rem;
  letter-spacing: -.018em;
  color: var(--text);
}
.review-body {
  font-size: .945rem;
  line-height: 1.62;
  color: var(--text-1);
  text-wrap: pretty;
  flex: 1;
}
.review-body::before { content: '“'; }
.review-body::after  { content: '”'; }
.review-foot {
  display: flex;
  align-items: center;
  gap: 8px;
  padding-top: 12px;
  border-top: 1px solid var(--stroke);
  font-size: .8rem;
  color: var(--text-3);
}
.review-author { color: var(--text-2); font-weight: 550; }
.review-foot .dot { opacity: .5; }

.reviews-note {
  margin-top: 26px;
  font-size: .82rem;
  color: var(--text-3);
  display: flex;
  flex-wrap: wrap;
  gap: 6px 10px;
  align-items: center;
  justify-content: center;
}
.reviews-note a { color: #a9b0ff; text-decoration: underline; text-underline-offset: 3px; }

/* Compact variant for sitting in a row of chips */
.rating-sm { padding: 5px 12px 5px 10px; gap: 8px; }
.rating-sm .stars svg { height: 12px; }
.rating-sm .rating-value { font-size: .85rem; }
.rating-sm .rating-count { font-size: .76rem; }

/* Contact method tiles */
.contact-tile {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 20px 22px;
  border-radius: var(--r-md);
  border: 1px solid var(--stroke);
  background: var(--surface);
  transition: border-color .3s var(--ease), transform .3s var(--ease-out), background .3s var(--ease);
}
.contact-tile:hover { border-color: var(--accent-line); transform: translateX(3px); background: var(--surface-2); }
.contact-tile .card-icon { margin-bottom: 0; }
.contact-tile-meta { min-width: 0; }
.contact-tile-meta strong { display: block; color: var(--text); font-family: var(--font-display); font-weight: 620; }
.contact-tile-meta span { font-size: .875rem; color: var(--text-2); word-break: break-word; }

/* --------------------------------------------------------- 12 forms */

.field { display: grid; gap: 8px; }
.field label {
  font-family: var(--font-display);
  font-size: .845rem;
  font-weight: 620;
  color: var(--text-1);
  letter-spacing: -.005em;
}
.field label .req { color: var(--accent); }

.input, .textarea, .select {
  width: 100%;
  padding: 13px 16px;
  border-radius: var(--r-md);
  border: 1px solid var(--stroke-2);
  background: rgba(255, 255, 255, .035);
  color: var(--text);
  font-size: .95rem;
  font-family: var(--font-body);
  transition: border-color .25s var(--ease), background .25s var(--ease), box-shadow .25s var(--ease);
}
.input::placeholder, .textarea::placeholder { color: var(--text-3); }
.input:focus, .textarea:focus, .select:focus {
  outline: none;
  border-color: var(--accent-line);
  background: rgba(255, 255, 255, .06);
  box-shadow: 0 0 0 4px var(--accent-soft);
}
.textarea { resize: vertical; min-height: 148px; line-height: 1.6; }
.select {
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23737d92' stroke-width='2.4' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 15px center;
  background-size: 16px;
  padding-right: 42px;
}
.select option { background: var(--bg-2); color: var(--text); }

.form-grid { display: grid; gap: 18px; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }

.honeypot {
  position: absolute !important;
  left: -9999px !important;
  width: 1px; height: 1px;
  opacity: 0;
}

.consent {
  display: flex;
  gap: 11px;
  align-items: flex-start;
  font-size: .85rem;
  color: var(--text-2);
  line-height: 1.55;
}
.consent input[type="checkbox"] {
  appearance: none;
  width: 19px; height: 19px;
  flex-shrink: 0;
  margin-top: 1px;
  border-radius: 6px;
  border: 1px solid var(--stroke-strong);
  background: rgba(255, 255, 255, .04);
  cursor: pointer;
  transition: background .2s var(--ease), border-color .2s var(--ease);
}
.consent input[type="checkbox"]:checked {
  background: var(--grad-brand) center / 62% no-repeat,
              url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6L9 17l-5-5'/%3E%3C/svg%3E") center / 62% no-repeat;
  border-color: transparent;
}
.consent a { color: #a9b0ff; text-decoration: underline; text-underline-offset: 3px; }

.form-status {
  display: none;
  padding: 14px 18px;
  border-radius: var(--r-md);
  font-size: .9rem;
  border: 1px solid transparent;
}
.form-status.is-visible { display: block; }
.form-status.ok  { background: rgba(52, 211, 153, .1); border-color: rgba(52, 211, 153, .3); color: #7ee7c0; }
.form-status.err { background: rgba(248, 113, 113, .1); border-color: rgba(248, 113, 113, .3); color: #ffa8a8; }

/* --------------------------------------------------------- 13 prose */

.prose {
  color: var(--text-1);
  font-size: 1.005rem;
  line-height: 1.78;
}
.prose > * + * { margin-top: 20px; }
.prose h2 {
  font-size: clamp(1.3rem, 2.6vw, 1.65rem);
  margin-top: 52px;
  padding-top: 4px;
  color: var(--text);
  scroll-margin-top: 110px;
}
.prose h3 {
  font-size: 1.09rem;
  margin-top: 34px;
  color: var(--text);
  scroll-margin-top: 110px;
}
.prose p { text-wrap: pretty; }
.prose strong { color: var(--text); font-weight: 620; }
.prose a { color: #a9b0ff; text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; }
.prose a:hover { color: #c4c9ff; }
.prose ul, .prose ol { padding-left: 22px; display: grid; gap: 10px; }
.prose ul { list-style: none; padding-left: 0; }
.prose ul > li {
  position: relative;
  padding-left: 24px;
}
.prose ul > li::before {
  content: '';
  position: absolute;
  left: 4px;
  top: .72em;
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--accent);
  opacity: .85;
}
.prose ol { list-style: decimal; }
.prose ol::marker { color: var(--accent); }
.prose blockquote {
  border-left: 2px solid var(--accent-line);
  padding: 4px 0 4px 22px;
  color: var(--text-1);
  font-style: italic;
}
.prose code {
  font-family: var(--font-mono);
  font-size: .875em;
  padding: 2px 7px;
  border-radius: 6px;
  background: rgba(255, 255, 255, .07);
  border: 1px solid var(--stroke);
  color: #d5dbff;
}
.prose table {
  width: 100%;
  border-collapse: collapse;
  font-size: .92rem;
}
.prose th, .prose td {
  border: 1px solid var(--stroke);
  padding: 11px 14px;
  text-align: left;
}
.prose th { background: var(--surface); color: var(--text); font-weight: 620; font-family: var(--font-display); }
.table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; border-radius: var(--r-md); }

.doc-head {
  padding-top: calc(var(--nav-h) + clamp(44px, 7vw, 76px));
  padding-bottom: clamp(28px, 4vw, 44px);
}
.doc-meta {
  margin-top: 18px;
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  font-size: .82rem;
  color: var(--text-3);
}

/* Table of contents */
.toc {
  border: 1px solid var(--stroke);
  border-radius: var(--r-md);
  background: var(--surface);
  padding: 20px 22px;
  margin-bottom: 42px;
}
.toc strong {
  display: block;
  font-family: var(--font-display);
  font-size: .755rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--text-3);
  margin-bottom: 12px;
}
.toc ol { display: grid; gap: 7px; list-style: none; padding: 0; counter-reset: toc; }
.toc li { counter-increment: toc; }
.toc a {
  font-size: .9rem;
  color: var(--text-1);
  transition: color .2s var(--ease);
  display: inline-flex;
  gap: 10px;
}
.toc a::before {
  content: counter(toc, decimal-leading-zero);
  font-family: var(--font-mono);
  font-size: .74rem;
  color: var(--text-3);
}
.toc a:hover { color: var(--text); }

/* Blog list */
.post-card {
  display: block;
  padding: clamp(22px, 3vw, 30px);
}
.post-card time {
  font-family: var(--font-mono);
  font-size: .76rem;
  letter-spacing: .05em;
  color: var(--text-3);
}
.post-card .h3 { margin: 12px 0 10px; }
.post-card p { font-size: .94rem; color: var(--text-2); }

/* -------------------------------------------------------- 14 footer */

.footer {
  position: relative;
  margin-top: clamp(64px, 9vw, 120px);
  border-top: 1px solid var(--stroke);
  background: linear-gradient(180deg, rgba(255, 255, 255, .018), transparent 45%);
  padding-block: clamp(48px, 7vw, 76px) 32px;
}

.footer-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.5fr) repeat(3, minmax(0, 1fr));
  gap: clamp(28px, 4vw, 52px);
}
.footer-brand p { margin-top: 16px; font-size: .9rem; color: var(--text-2); max-width: 34ch; }
.footer-col h2, .footer-col-title {
  font-family: var(--font-display);
  font-size: .74rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--text-3);
  margin-bottom: 16px;
  font-weight: 700;
}
.footer-col ul { display: grid; gap: 10px; }
.footer-col a {
  font-size: .91rem;
  color: var(--text-1);
  transition: color .22s var(--ease);
}
.footer-col a:hover { color: var(--text); }

.footer-bottom {
  margin-top: clamp(38px, 5vw, 56px);
  padding-top: 26px;
  border-top: 1px solid var(--stroke);
  display: flex;
  flex-wrap: wrap;
  gap: 14px 24px;
  align-items: center;
  justify-content: space-between;
  font-size: .84rem;
  color: var(--text-3);
}
.footer-bottom nav { display: flex; flex-wrap: wrap; gap: 18px; }
.footer-bottom a:hover { color: var(--text-1); }

.social { display: flex; gap: 10px; margin-top: 22px; }
.social a {
  width: 38px; height: 38px;
  border-radius: 11px;
  border: 1px solid var(--stroke);
  background: var(--surface);
  display: grid;
  place-items: center;
  color: var(--text-2);
  transition: color .25s var(--ease), border-color .25s var(--ease), transform .25s var(--ease-out);
}
.social a:hover { color: var(--text); border-color: var(--stroke-strong); transform: translateY(-2px); }
.social svg { width: 17px; height: 17px; }


/* The two hero buttons stand for two different products; the game's wears the
   game's accent instead of Warry's indigo. --grad-brand comes from the
   data-accent token set, the shadow has to follow by hand. */
.btn-primary[data-accent="purrbuddy"] {
  box-shadow: 0 14px 34px -14px rgba(245, 158, 11, .7);
}

/* The homepage introduces two products, so its hero runs tighter than the
   product pages': less lead-in, a smaller display size, and stats that sit
   closer. Measured against a 720px-tall viewport, this is what brings the
   buttons and both devices above the fold. The product heroes keep the
   roomier setting. */
.hero-compact {
  padding-top: calc(var(--nav-h) + clamp(28px, 4.5vw, 60px));
  padding-bottom: clamp(48px, 6vw, 76px);
}
.hero-compact .display { font-size: clamp(2.25rem, 5vw, 3.6rem); }
.hero-compact .lead { font-size: clamp(1rem, 1.5vw, 1.12rem); }
.hero-compact .hero-note { margin-top: 14px; }
.hero-compact .hero-stats { margin-top: clamp(30px, 4vw, 50px); }

/* Two devices in the hero — the app and the game — so the first screen shows
   both. They overlap rather than sitting side by side: that needs about a
   third less width, which is what keeps both on screen at 375px.

   The pair is fitted with a transform, not by narrowing the frames. The Warry
   device is built from DOM with fixed pixel type in seventeen places, so a
   width change would shrink the phone and leave the text at full size; a
   transform scales both together. Transforms do not affect layout, hence the
   negative margin that takes back the space the scale leaves behind. */
.device-duo-row {
  position: relative;
  display: grid;
  place-items: center;
  transform: scale(.8);
  transform-origin: center;
  margin: -10% 0;
}
.device-duo-row > .phone {
  grid-area: 1 / 1;
  transition: transform .5s var(--ease-out);
}
.device-duo-row > .phone:first-child {
  transform: translateX(-37%) rotate(-5deg);
  z-index: 1;
}
.device-duo-row > .phone:last-child {
  transform: translateX(37%) rotate(5deg);
  z-index: 2;
}
.device-duo-row:hover > .phone:first-child { transform: translateX(-40%) rotate(-6deg); }
.device-duo-row:hover > .phone:last-child  { transform: translateX(40%) rotate(6deg); }

/* --------------------------------------------------- 15 motion */

[data-reveal] {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity .85s var(--ease-out), transform .85s var(--ease-out);
  transition-delay: var(--delay, 0ms);
  will-change: opacity, transform;
}
[data-reveal].is-in { opacity: 1; transform: none; }

[data-reveal="scale"] { transform: translateY(26px) scale(.97); }
[data-reveal="scale"].is-in { transform: none; }

[data-reveal="left"]  { transform: translateX(-26px); }
[data-reveal="right"] { transform: translateX(26px); }
[data-reveal="left"].is-in, [data-reveal="right"].is-in { transform: none; }

.scroll-progress {
  position: fixed;
  top: 0; left: 0;
  height: 2px;
  width: 100%;
  transform-origin: 0 50%;
  transform: scaleX(0);
  background: var(--grad-brand);
  z-index: 130;
  pointer-events: none;
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
  [data-reveal] { opacity: 1 !important; transform: none !important; }
  .phone-tilt { transform: none; }
}

/* -------------------------------------------------- 16 utilities */

.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.mt-0  { margin-top: 0 !important; }
.mt-1  { margin-top: 8px; }
.mt-2  { margin-top: 16px; }
.mt-3  { margin-top: 24px; }
.mt-4  { margin-top: 32px; }
.mt-5  { margin-top: 44px; }
.mt-6  { margin-top: 60px; }
.mb-0  { margin-bottom: 0 !important; }

.relative { position: relative; }
.hidden { display: none !important; }
.full { width: 100%; }
.nowrap { white-space: nowrap; }

/* i18n: hide the inactive language's text before JS boots */
[data-i18n] { }

/* ------------------------------------------------- 17 responsive */

@media (max-width: 1024px) {
  .hero-grid { grid-template-columns: 1fr; gap: 52px; }
  .hero-compact .hero-grid { gap: 26px; }
  .device-duo-row { transform: scale(.66); margin: -18% 0; }
  .device-duo .device-note { display: none; }
  .hero-grid .device-stage { order: 2; }
  .footer-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 860px) {
  .nav-links { display: none; }
  .nav-toggle { display: grid; }
  .grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .split, .feature-row { grid-template-columns: 1fr; gap: 40px; }
  .feature-row.reverse > :first-child { order: 0; }
  .phone-tilt { transform: none; }
  .device-note-a { left: -2%; }
  .device-note-b { right: -2%; }

  /* Sideways reveals would poke past the viewport on narrow screens and
     create a phantom horizontal scroll before they animate in. */
  [data-reveal="left"],
  [data-reveal="right"] { transform: translateY(22px); }
}

@media (max-width: 620px) {
  :root { --nav-h: 62px; }
  .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; }
  .form-row { grid-template-columns: 1fr; }
  .footer-grid { grid-template-columns: 1fr; gap: 34px; }
  .footer-bottom { flex-direction: column; align-items: flex-start; }
  .hero-stats { grid-template-columns: repeat(2, 1fr); }
  .device-note { font-size: .74rem; padding: 7px 12px; }
  .device-note-a { top: 8%; left: -1%; }
  .device-note-b { bottom: 16%; right: -1%; }
  .btn { padding: 12px 20px; }
  .step { flex-direction: column; gap: 12px; }
}

@media (max-width: 380px) {
  .hero-stats { grid-template-columns: 1fr; }
}

/* Print — legal pages should print cleanly on white */
@media print {
  :root { --text: #111; --text-1: #333; --text-2: #555; --text-3: #777; }
  body { background: #fff; color: #222; }
  .atmos, .nav, .nav-drawer, .footer, .scroll-progress,
  .btn, .toc, .device-stage, .gridlines, .blob { display: none !important; }
  .prose a { color: #222; text-decoration: underline; }
  .prose a[href^="http"]::after { content: " (" attr(href) ")"; font-size: .8em; color: #666; }
  .doc-head { padding-top: 0; }
  h1, h2, h3 { color: #000 !important; -webkit-text-fill-color: #000 !important; }
  .grad-text, .grad-brand-text { -webkit-text-fill-color: #000 !important; color: #000 !important; background: none !important; }
  .section { padding-block: 12px; }
}
