/* ============================================================
   InkFirst marketing site — home.css
   Editorial-literary design system.
   Light by default; dark is opt-in via the nav toggle (which
   adds .dark-mode to <body>) — matches the iOS app's default.
   Scoped under <body class="home"> so it never leaks into the
   /privacy or /terms pages, which keep using style.css.
   ============================================================ */

/* ------------------------------------------------------------
   Tokens
   ------------------------------------------------------------ */
.home {
  --paper:        #faf6ec;
  --paper-rim:    #f3ecdb;
  --ink:          #0e1722;
  --ink-soft:     #3a3530;
  --ink-quiet:    #6b655c;
  --brand:        #4173b3;
  --brand-soft:   #7eb1e5;
  --brand-deep:   #2c548a;
  --gold:         #c2aa6b;
  --rule:         #d8d0bf;
  --rule-soft:    #e8e1d0;
  --shadow-rgb:   14, 23, 34;

  --space-1: 4px;
  --space-2: 8px;
  --space-3: 16px;
  --space-4: 24px;
  --space-5: 40px;
  --space-6: 64px;
  --space-7: 96px;
  --space-8: 144px;

  --max:        1240px;
  --measure:    640px;

  --display:    "Fraunces", "Iowan Old Style", "Apple Garamond", Georgia, serif;
  --body:       "Hanken Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
  --mono:       "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;

  --ease-quart: cubic-bezier(0.25, 1, 0.5, 1);
  --ease-soft:  cubic-bezier(0.32, 0.72, 0.18, 1);
}

.home.dark-mode {
  --paper:      #0a0e14;
  --paper-rim:  #131923;
  --ink:        #f0ece2;
  --ink-soft:   #cfc7b6;
  --ink-quiet:  #8a8473;
  --brand:      #7eb1e5;
  --brand-soft: #a8cdf0;
  --brand-deep: #4173b3;
  --gold:       #d4b97a;
  --rule:       #27303d;
  --rule-soft:  #1a212c;
  --shadow-rgb: 0, 0, 0;
}

/* ------------------------------------------------------------
   Reset + base
   ------------------------------------------------------------ */
.home,
.home * {
  box-sizing: border-box;
}

.home {
  margin: 0;
  padding: 0;
  font-family: var(--body);
  font-size: 18px;
  line-height: 1.6;
  color: var(--ink-soft);
  background: var(--paper);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-feature-settings: "kern" 1, "liga" 1, "calt" 1;
  overflow-x: hidden;
}

.home img,
.home picture,
.home video {
  display: block;
  max-width: 100%;
}

.home a {
  color: var(--brand);
  text-decoration: none;
  transition: color 0.2s var(--ease-soft);
}

.home a:hover {
  color: var(--brand-deep);
}

.home button {
  font: inherit;
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  color: inherit;
}

/* Selection highlight in brand tone */
.home ::selection {
  background: rgba(65, 115, 179, 0.22);
  color: var(--ink);
}

/* ------------------------------------------------------------
   Typography
   ------------------------------------------------------------ */
.home h1,
.home h2,
.home h3,
.home .display {
  font-family: var(--display);
  color: var(--ink);
  letter-spacing: -0.02em;
  font-feature-settings: "ss01" 1, "ss02" 1;
  font-variation-settings: "opsz" 144, "SOFT" 100, "wght" 500;
  margin: 0;
}

.home .display-xl {
  font-size: clamp(48px, 8vw, 116px);
  line-height: 0.96;
  letter-spacing: -0.035em;
  font-variation-settings: "opsz" 144, "SOFT" 100, "wght" 460;
}

.home .display-l {
  font-size: clamp(40px, 5.5vw, 76px);
  line-height: 1.02;
  letter-spacing: -0.03em;
  font-variation-settings: "opsz" 96, "SOFT" 80, "wght" 500;
}

.home .display-m {
  font-size: clamp(28px, 3.5vw, 44px);
  line-height: 1.1;
  letter-spacing: -0.02em;
  font-variation-settings: "opsz" 48, "SOFT" 60, "wght" 540;
}

.home .display-s {
  font-size: clamp(22px, 2.4vw, 30px);
  line-height: 1.2;
  letter-spacing: -0.01em;
  font-variation-settings: "opsz" 32, "SOFT" 40, "wght" 600;
}

.home p {
  margin: 0 0 var(--space-3);
  color: var(--ink-soft);
}

.home p.lede {
  font-size: clamp(18px, 1.6vw, 22px);
  line-height: 1.5;
  color: var(--ink);
  max-width: 560px;
}

.home .eyebrow {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  margin: 0 0 var(--space-3);
  display: inline-flex;
  align-items: center;
  gap: 10px;
}

.home .eyebrow::before {
  content: "";
  width: 24px;
  height: 1px;
  background: var(--gold);
}

.home .accent { color: var(--brand); }
.home em { font-style: italic; font-variation-settings: "opsz" 96, "SOFT" 100, "wght" 500; }

/* ------------------------------------------------------------
   Layout primitives
   ------------------------------------------------------------ */
.home .container {
  width: 100%;
  max-width: var(--max);
  margin: 0 auto;
  padding: 0 clamp(20px, 4vw, 48px);
}

.home .measure { max-width: var(--measure); }
.home .center  { margin-left: auto; margin-right: auto; }

.home section {
  position: relative;
}

.home .section-pad {
  padding-block: clamp(80px, 12vw, 160px);
}

/* Chapter ornament: three diamonds between sections */
.home .ornament {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 14px;
  color: var(--gold);
  margin: 0;
  letter-spacing: 0.4em;
  font-size: 8px;
  user-select: none;
}

.home .ornament::before,
.home .ornament::after {
  content: "";
  width: 60px;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--rule), transparent);
}

/* Folio chapter labels — like the running head of a finely set book */
.home .folio {
  font-family: var(--mono);
  font-size: clamp(13px, 1.1vw, 16px);
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin: 0 0 var(--space-4);
  font-weight: 500;
}

.home .folio span {
  color: var(--gold);
  font-weight: 600;
}

/* ------------------------------------------------------------
   Paper grain overlay (full-viewport, subtle)
   ------------------------------------------------------------ */
.home .grain {
  position: fixed;
  inset: 0;
  pointer-events: none;
  opacity: 0.06;
  mix-blend-mode: multiply;
  z-index: 100;
}

.home.dark-mode .grain {
  opacity: 0.10;
  mix-blend-mode: screen;
}

/* ------------------------------------------------------------
   Nav
   ------------------------------------------------------------ */
.home .nav {
  position: sticky;
  top: 0;
  z-index: 60;
  backdrop-filter: blur(14px) saturate(140%);
  -webkit-backdrop-filter: blur(14px) saturate(140%);
  background: color-mix(in oklab, var(--paper) 78%, transparent);
  border-bottom: 1px solid transparent;
  transition: border-color 0.3s var(--ease-soft);
}

.home .nav.is-scrolled {
  border-bottom-color: var(--rule);
}

.home .nav-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 64px;
  gap: var(--space-4);
}

.home .wordmark {
  font-family: var(--display);
  font-size: 22px;
  font-variation-settings: "opsz" 32, "SOFT" 60, "wght" 600;
  letter-spacing: -0.015em;
  color: var(--ink);
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

.home .wordmark .dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--brand);
  display: inline-block;
  margin-bottom: -3px;
}

.home .nav-links {
  display: none;
  gap: var(--space-5);
  list-style: none;
  padding: 0;
  margin: 0;
}

.home .nav-links a {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  position: relative;
  padding: 4px 0;
}

.home .nav-links a::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 0;
  height: 1px;
  background: var(--brand);
  transition: width 0.3s var(--ease-soft);
}

.home .nav-links a:hover::after { width: 100%; }
.home .nav-links a:hover { color: var(--ink); }

.home .nav-actions {
  display: flex;
  align-items: center;
  gap: var(--space-3);
}

.home .theme-toggle {
  width: 36px;
  height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--rule);
  border-radius: 50%;
  background: var(--paper);
  color: var(--ink-soft);
  cursor: pointer;
  transition:
    border-color 0.25s var(--ease-soft),
    color 0.25s var(--ease-soft),
    background 0.25s var(--ease-soft);
}

.home .theme-toggle:hover {
  border-color: var(--brand);
  color: var(--brand);
}

.home .theme-toggle svg {
  width: 16px;
  height: 16px;
}

.home .theme-toggle .theme-icon-sun  { display: none; }
.home .theme-toggle .theme-icon-moon { display: block; }
.home.dark-mode .theme-toggle .theme-icon-sun  { display: block; }
.home.dark-mode .theme-toggle .theme-icon-moon { display: none; }

.home .nav-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 14px;
  border: 1px solid var(--rule);
  border-radius: 999px;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  background: var(--paper);
}

.home .nav-pill .pulse {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 0 0 var(--gold);
  animation: pulse 2.4s var(--ease-soft) infinite;
}

@keyframes pulse {
  0%   { box-shadow: 0 0 0 0 rgba(194,170,107,0.55); }
  70%  { box-shadow: 0 0 0 12px rgba(194,170,107,0); }
  100% { box-shadow: 0 0 0 0 rgba(194,170,107,0); }
}

@media (min-width: 880px) {
  .home .nav-links { display: flex; }
}

/* ------------------------------------------------------------
   Hero
   ------------------------------------------------------------ */
.home .hero {
  padding-block: clamp(64px, 9vw, 128px) clamp(80px, 12vw, 160px);
  position: relative;
  overflow: hidden;
}

.home .hero-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(40px, 8vw, 96px);
  align-items: center;
}

@media (min-width: 980px) {
  .home .hero-grid {
    grid-template-columns: 1.15fr 0.85fr;
  }
}

.home .hero-copy {
  position: relative;
  z-index: 2;
}

.home .hero-copy h1 {
  margin-bottom: var(--space-4);
}

.home .hero-copy h1 .word {
  display: inline-block;
  opacity: 0;
  transform: translateY(0.3em);
  animation: word-rise 0.9s var(--ease-quart) forwards;
}

.home .hero-copy h1 .word:nth-child(1) { animation-delay: 0.10s; }
.home .hero-copy h1 .word:nth-child(2) { animation-delay: 0.22s; }
.home .hero-copy h1 .word:nth-child(3) { animation-delay: 0.34s; }
.home .hero-copy h1 .word:nth-child(4) { animation-delay: 0.46s; }

.home .hero-copy h1 .ink-period {
  color: var(--brand);
  font-style: italic;
  font-variation-settings: "opsz" 144, "SOFT" 100, "wght" 460;
}

@keyframes word-rise {
  to { opacity: 1; transform: translateY(0); }
}

.home .hero .lede {
  margin-bottom: var(--space-5);
  opacity: 0;
  transform: translateY(8px);
  animation: rise 0.9s 0.7s var(--ease-quart) forwards;
}

.home .hero-cta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-4);
  opacity: 0;
  transform: translateY(8px);
  animation: rise 0.9s 0.95s var(--ease-quart) forwards;
}

@keyframes rise {
  to { opacity: 1; transform: translateY(0); }
}

.home .hero-meta {
  margin-top: var(--space-4);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  opacity: 0;
  animation: rise 0.9s 1.2s var(--ease-quart) forwards;
}

/* App Store badge */
.home .app-store-badge {
  display: inline-block;
  height: 56px;
  border-radius: 12px;
  transition: transform 0.25s var(--ease-soft), filter 0.25s var(--ease-soft);
}

.home .app-store-badge img {
  height: 100%;
  width: auto;
  display: block;
}

.home .app-store-badge:hover {
  transform: translateY(-1px);
  filter: drop-shadow(0 6px 18px rgba(var(--shadow-rgb), 0.2));
}

.home.dark-mode .app-store-badge img { filter: invert(1); }

/* Ghost link CTA */
.home .ghost-link {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 10px 0;
  position: relative;
}

.home .ghost-link::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 6px;
  height: 1px;
  background: var(--ink-quiet);
  transform-origin: left;
  transform: scaleX(0.3);
  transition: transform 0.4s var(--ease-soft), background 0.2s;
}

.home .ghost-link:hover::after {
  transform: scaleX(1);
  background: var(--brand);
}

.home .ghost-link svg {
  width: 14px;
  height: 14px;
  transition: transform 0.3s var(--ease-soft);
}

.home .ghost-link:hover svg { transform: translateY(2px); }

/* Hero ink-bleed brushstroke */
.home .ink-bleed {
  position: absolute;
  top: 8%;
  left: -6%;
  width: 60%;
  max-width: 700px;
  height: auto;
  z-index: 1;
  opacity: 0.10;
  pointer-events: none;
}

.home .ink-bleed path {
  stroke: var(--brand);
  stroke-width: 8;
  fill: none;
  stroke-linecap: round;
  stroke-dasharray: 1800;
  stroke-dashoffset: 1800;
  animation: draw 2.6s 0.4s var(--ease-quart) forwards;
}

@keyframes draw {
  to { stroke-dashoffset: 0; }
}

.home.dark-mode .ink-bleed { opacity: 0.16; }

/* ------------------------------------------------------------
   iPhone frame — pure CSS
   ------------------------------------------------------------ */
.home .iphone {
  --bezel: 12px;
  --radius: 48px;
  width: min(360px, 78vw);
  aspect-ratio: 9 / 19.5;
  position: relative;
  border-radius: var(--radius);
  background: linear-gradient(165deg, #1c2230, #08090d);
  padding: var(--bezel);
  margin: 0 auto;
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.08),
    inset 0 1px 1px rgba(255, 255, 255, 0.18),
    0 1px 0 rgba(255, 255, 255, 0.04),
    0 30px 60px -22px rgba(var(--shadow-rgb), 0.45),
    0 12px 28px -10px rgba(var(--shadow-rgb), 0.25);
  isolation: isolate;
}

.home .iphone::before {
  /* Dynamic Island */
  content: "";
  position: absolute;
  top: calc(var(--bezel) + 10px);
  left: 50%;
  transform: translateX(-50%);
  width: 110px;
  height: 32px;
  border-radius: 18px;
  background: #000;
  z-index: 3;
}

.home .iphone::after {
  /* Side-button hint glints */
  content: "";
  position: absolute;
  top: 22%;
  left: -1px;
  width: 2px;
  height: 60px;
  background: linear-gradient(180deg, transparent, rgba(255,255,255,0.3), transparent);
  border-radius: 2px;
  pointer-events: none;
}

.home .iphone-screen {
  position: relative;
  width: 100%;
  height: 100%;
  border-radius: calc(var(--radius) - var(--bezel));
  overflow: hidden;
  background: #000;
  z-index: 1;
}

.home .iphone-screen > video,
.home .iphone-screen > img,
.home .iphone-screen > picture,
.home .iphone-screen > picture > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Hero iPhone scale + tilt — kept for any markup that still uses .iphone
   in the hero (it currently uses .hero-frame instead, but leaving the
   rule here means a future swap doesn't break.) */
.home .hero .iphone {
  transform: rotate(-1.5deg);
  transition: transform 0.6s var(--ease-soft);
  opacity: 0;
  animation: rise-tilt 1.2s 0.5s var(--ease-quart) forwards;
}

@keyframes rise-tilt {
  to { opacity: 1; transform: rotate(-1.5deg) translateY(0); }
}

.home .hero .iphone:hover { transform: rotate(0deg) translateY(-4px); }

/* ------------------------------------------------------------
   Hero neumorphic frame — wraps the demo video.
   The video already includes its own iPhone composite + sky-blue
   backdrop, so the frame here is a soft "raised card" rather than
   another phone bezel. Two-shadow neumorphism: warm highlight from
   the upper-left, soft sienna depth from the lower-right.
   ------------------------------------------------------------ */
.home .hero-frame {
  width: min(440px, 88vw);
  aspect-ratio: 1 / 1;
  border-radius: 36px;
  background: var(--paper);
  margin: 0 auto;
  position: relative;
  overflow: hidden;
  isolation: isolate;
  transform: rotate(-1deg) translateY(8px);
  opacity: 0;
  animation: hero-frame-rise 1.2s 0.4s var(--ease-quart) forwards;
  transition: transform 0.55s var(--ease-soft), box-shadow 0.55s var(--ease-soft);
  box-shadow:
    -14px -14px 36px rgba(255, 255, 255, 0.85),
    20px 22px 48px -10px rgba(101, 86, 56, 0.22),
    8px 10px 22px -6px rgba(101, 86, 56, 0.12),
    inset 0 0 0 1px rgba(255, 255, 255, 0.55);
}

@keyframes hero-frame-rise {
  to { opacity: 1; transform: rotate(-1deg) translateY(0); }
}

.home .hero-frame:hover {
  transform: rotate(0deg) translateY(-4px);
  box-shadow:
    -14px -14px 40px rgba(255, 255, 255, 0.92),
    24px 26px 56px -10px rgba(101, 86, 56, 0.28),
    8px 10px 22px -6px rgba(101, 86, 56, 0.15),
    inset 0 0 0 1px rgba(255, 255, 255, 0.65);
}

/* The hero-frame is a layered card:
     1. .hero-frame-still — always-visible poster image (back layer)
     2. .hero-video       — the playing video, fades in over the poster
     3. .hero-play-fallback — visible when autoplay is blocked
   Putting the poster image as a separate layer (rather than relying on
   the <video> element's poster attribute) means the visitor always sees
   the lock screen, even before metadata loads or if autoplay is denied. */
.home .hero-frame > .hero-frame-still,
.home .hero-frame > .hero-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
  display: block;
}

.home .hero-frame > .hero-frame-still {
  z-index: 1;
}

.home .hero-video {
  z-index: 2;
  opacity: 0;
  transition: opacity 0.9s var(--ease-soft);
  background: transparent;
}

/* JS adds .is-ready once the video's `playing` or `loadeddata` event
   fires — that's when we have actual frames to show. */
.home .hero-video.is-ready { opacity: 1; }

/* Soft fade-out as the loop approaches its end; the always-visible
   poster underneath shows through during the cross-fade so the
   loop boundary feels intentional rather than a stutter. */
.home .hero-video.is-fading-out { opacity: 0; }

/* Click-to-play overlay — only visible when autoplay was blocked
   (JS adds .is-needed when it detects a play() rejection). */
.home .hero-play-fallback {
  position: absolute;
  inset: 0;
  z-index: 3;
  display: none;
  align-items: center;
  justify-content: center;
  background: rgba(14, 23, 34, 0.4);
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
  border: 0;
  border-radius: inherit;
  cursor: pointer;
  color: rgba(255, 255, 255, 0.95);
  transition: background 0.25s var(--ease-soft);
}

.home .hero-play-fallback.is-needed { display: flex; }
.home .hero-play-fallback:hover { background: rgba(14, 23, 34, 0.55); }

.home .hero-play-fallback svg {
  width: 56px;
  height: 56px;
  filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.4));
  transition: transform 0.2s var(--ease-soft);
}

.home .hero-play-fallback:hover svg { transform: scale(1.08); }

/* Dark mode: invert the highlight so the "light source" still feels
   plausible — subtle pale glow up-left, deeper black depth down-right. */
.home.dark-mode .hero-frame {
  background: var(--paper-rim);
  box-shadow:
    -10px -10px 28px rgba(255, 255, 255, 0.025),
    18px 20px 44px -10px rgba(0, 0, 0, 0.55),
    8px 10px 22px -6px rgba(0, 0, 0, 0.4),
    inset 0 0 0 1px rgba(255, 255, 255, 0.04);
}

.home.dark-mode .hero-frame:hover {
  box-shadow:
    -10px -10px 32px rgba(255, 255, 255, 0.045),
    22px 24px 52px -10px rgba(0, 0, 0, 0.6),
    8px 10px 22px -6px rgba(0, 0, 0, 0.45),
    inset 0 0 0 1px rgba(255, 255, 255, 0.06);
}

/* ------------------------------------------------------------
   Section: The problem (animated counter)
   ------------------------------------------------------------ */
.home .problem {
  text-align: center;
}

.home .counter-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-2);
  margin: var(--space-5) 0;
}

.home .counter {
  font-family: var(--display);
  font-size: clamp(120px, 18vw, 240px);
  line-height: 0.9;
  letter-spacing: -0.05em;
  color: var(--ink);
  font-variation-settings: "opsz" 144, "SOFT" 30, "wght" 320;
  font-variant-numeric: tabular-nums;
  display: inline-block;
  position: relative;
}

.home .counter .underline {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -8px;
  height: 6px;
  background: var(--brand);
  border-radius: 3px;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 1.4s 0.3s var(--ease-quart);
}

.home .counter.is-counted .underline { transform: scaleX(1); }

.home .counter-label {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-quiet);
}

/* Drop-cap on the manifesto paragraph */
.home .manifesto {
  font-family: var(--display);
  font-size: clamp(22px, 2.4vw, 28px);
  line-height: 1.45;
  font-variation-settings: "opsz" 24, "SOFT" 80, "wght" 400;
  color: var(--ink);
  max-width: 620px;
  margin: 0 auto;
  text-align: left;
}

.home .manifesto::first-letter {
  font-family: var(--display);
  font-variation-settings: "opsz" 144, "SOFT" 30, "wght" 600;
  font-size: 5em;
  float: left;
  line-height: 0.85;
  margin: 0.06em 0.08em 0 0;
  color: var(--brand);
}

/* ------------------------------------------------------------
   Section: The ritual — sticky-scroll product pin
   ------------------------------------------------------------ */
.home .ritual {
  background: var(--paper-rim);
  border-block: 1px solid var(--rule);
}

.home .ritual-intro {
  margin-bottom: clamp(56px, 9vw, 120px);
}

.home .ritual-intro .folio { margin-bottom: var(--space-4); }
.home .ritual-intro h2 { margin: 0; }

.home .ritual-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
  align-items: start;
}

@media (min-width: 980px) {
  .home .ritual-grid {
    grid-template-columns: 1fr 1fr;
    gap: clamp(40px, 8vw, 120px);
  }
}

.home .ritual-pin {
  position: relative;
  display: flex;
  justify-content: center;
}

@media (min-width: 980px) {
  .home .ritual-pin {
    position: sticky;
    /* Auto-size to the iPhone so it never overflows the sticky cell.
       align-self:start keeps the pin from stretching to grid height. */
    align-self: start;
    top: clamp(80px, 8vh, 110px);
  }

  /* Smaller iPhone in the sticky pin — it dominates less and gives the
     three text stops on the right room to breathe. */
  .home .ritual-pin .iphone {
    width: min(280px, 70vw);
  }
}

.home .ritual-pin .iphone-screen > picture {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity 0.7s var(--ease-soft);
}

.home .ritual-pin[data-active="1"] > .iphone .iphone-screen > picture:nth-of-type(1),
.home .ritual-pin[data-active="2"] > .iphone .iphone-screen > picture:nth-of-type(2),
.home .ritual-pin[data-active="3"] > .iphone .iphone-screen > picture:nth-of-type(3) {
  opacity: 1;
}

.home .ritual-stops {
  display: flex;
  flex-direction: column;
  gap: var(--space-7);
}

@media (min-width: 980px) {
  /* Tail padding on the right column so the sticky iPhone remains
     fully visible while the reader is on Stop Three — without it,
     the grid bottom approaches before the user is done reading
     and sticky releases, dragging the iPhone off-screen. */
  .home .ritual-stops {
    padding-bottom: clamp(80px, 18vh, 220px);
  }
}

.home .ritual-stop {
  border-left: 2px solid var(--rule);
  padding: var(--space-4) 0 var(--space-4) var(--space-4);
  transition: border-color 0.4s var(--ease-soft);
  opacity: 0.55;
  transition: opacity 0.4s var(--ease-soft), border-color 0.4s var(--ease-soft);
}

.home .ritual-stop.is-active {
  opacity: 1;
  border-left-color: var(--brand);
}

.home .ritual-stop .stop-num {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  margin-bottom: var(--space-2);
}

.home .ritual-stop.is-active .stop-num { color: var(--brand); }

.home .ritual-stop h3 {
  margin-bottom: var(--space-3);
}

.home .ritual-stop p {
  color: var(--ink-soft);
}

/* ------------------------------------------------------------
   Section: Transformation — entries → book
   ------------------------------------------------------------ */
.home .transform {
  text-align: center;
  position: relative;
}

.home .transform .tx-stage {
  position: relative;
  margin: var(--space-6) auto 0;
  width: min(720px, 90%);
  height: clamp(440px, 56vw, 520px);
}

/* On narrow viewports the book-rise is taller than the stage's
   minimum height, and since it's anchored to bottom: 0 the
   overflow goes upward into the lede paragraph. Tighten the
   book width and bump the stage minimum height so it fits. */
@media (max-width: 640px) {
  .home .transform .tx-stage {
    height: clamp(420px, 90vw, 460px);
  }
  .home .tx-stage .book-rise {
    width: 170px;
  }
  .home .entry-card {
    width: 160px;
    font-size: 12px;
  }
}

.home .entry-card {
  position: absolute;
  width: 200px;
  background: var(--paper);
  border: 1px solid var(--rule);
  border-radius: 4px;
  padding: 14px 16px;
  text-align: left;
  box-shadow: 0 12px 28px -16px rgba(var(--shadow-rgb), 0.25);
  font-size: 13px;
  line-height: 1.45;
  color: var(--ink-soft);
  /* Slowed considerably so the bind moment is the cinematic beat
     of the section, not a flash you miss while scrolling in. */
  transition: transform 1.8s var(--ease-quart), opacity 1.2s ease;
}

.home .entry-card .date {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--brand);
  margin-bottom: 6px;
  display: block;
}

.home .entry-card:nth-child(1) { top: 0;     left: 4%;  transform: rotate(-6deg); }
.home .entry-card:nth-child(2) { top: 12%;   right: 6%; transform: rotate(4deg); }
.home .entry-card:nth-child(3) { top: 38%;   left: 12%; transform: rotate(2deg); }
.home .entry-card:nth-child(4) { top: 30%;   right: 14%; transform: rotate(-3deg); }
.home .entry-card:nth-child(5) { bottom: 12%; left: 26%; transform: rotate(5deg); }
.home .entry-card:nth-child(6) { bottom: 4%; right: 22%; transform: rotate(-4deg); }

/* Linger first — the cards hold their scattered, tilted positions
   for ~1.5s after the section is in view, giving the visitor time
   to read the dates and the quotes. Then they collapse into the
   binding one after the other, a hand placing each page. */
.home .tx-stage.is-bound .entry-card:nth-child(1) { transition-delay: 1.5s; }
.home .tx-stage.is-bound .entry-card:nth-child(2) { transition-delay: 1.68s; }
.home .tx-stage.is-bound .entry-card:nth-child(3) { transition-delay: 1.86s; }
.home .tx-stage.is-bound .entry-card:nth-child(4) { transition-delay: 2.04s; }
.home .tx-stage.is-bound .entry-card:nth-child(5) { transition-delay: 2.22s; }
.home .tx-stage.is-bound .entry-card:nth-child(6) { transition-delay: 2.40s; }

.home .tx-stage.is-bound .entry-card {
  opacity: 0;
  transform: translate(0, 30%) rotate(0deg) scale(0.6);
}

.home .tx-stage .book-rise {
  position: absolute;
  bottom: 0;
  left: 50%;
  width: 220px;
  transform: translate(-50%, 30%) scale(0.85);
  opacity: 0;
  /* Book rises after the last card has begun binding. The base
     1.5s linger above is added in here so the book rise pairs
     with the tail of the card collapse. */
  transition: transform 2.4s 3.0s var(--ease-quart), opacity 1.6s 3.2s ease;
}

.home .tx-stage.is-bound .book-rise {
  transform: translate(-50%, 0) scale(1);
  opacity: 1;
}

.home .tx-stage .book-rise img {
  width: 100%;
  border-radius: 8px;
  box-shadow:
    0 30px 60px -20px rgba(var(--shadow-rgb), 0.45),
    0 8px 20px -6px rgba(var(--shadow-rgb), 0.25);
}

/* ------------------------------------------------------------
   Section: Life Book — cinematic dark insert with page-curl
   ------------------------------------------------------------ */
.home .lifebook {
  background: #08090d;
  color: #f0ece2;
  overflow: hidden;
  position: relative;
  isolation: isolate;
}

.home .lifebook::before {
  /* faint blue rim light */
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(60% 80% at 20% 30%, rgba(65,115,179,0.18), transparent 70%),
    radial-gradient(50% 60% at 85% 80%, rgba(194,170,107,0.12), transparent 70%);
  z-index: 0;
}

.home .lifebook .container { position: relative; z-index: 2; }

.home .lifebook .folio { color: rgba(240, 236, 226, 0.4); }
.home .lifebook .folio span { color: var(--gold); }

.home .lifebook h2 {
  color: #f0ece2;
}

.home .lifebook .pull-quote {
  font-family: var(--display);
  font-size: clamp(28px, 3.6vw, 48px);
  line-height: 1.25;
  font-variation-settings: "opsz" 96, "SOFT" 100, "wght" 380;
  color: #f0ece2;
  max-width: 760px;
  margin: var(--space-5) 0;
  font-style: italic;
  position: relative;
  padding-left: var(--space-5);
}

.home .lifebook .pull-quote::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.35em;
  bottom: 0.35em;
  width: 2px;
  background: var(--gold);
}

.home .lifebook .quote-attr {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: rgba(240, 236, 226, 0.5);
  margin-top: var(--space-4);
}

/* Page-curl */
.home .pagecurl {
  position: relative;
  width: min(420px, 80vw);
  aspect-ratio: 9 / 19.5;
  margin: var(--space-6) auto 0;
  perspective: 1600px;
  cursor: pointer;
}

.home .pagecurl .iphone {
  width: 100%;
  height: 100%;
  margin: 0;
}

.home .pagecurl-page {
  position: absolute;
  inset: 12px;
  border-radius: 36px;
  overflow: hidden;
  transform-origin: left center;
  transform: rotateY(0deg);
  transition: transform 1.2s var(--ease-quart);
  z-index: 4;
  box-shadow: 0 0 0 1px rgba(255,255,255,0.05);
  background: #fff;
}

.home .pagecurl-page > img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.home .pagecurl.is-turned .pagecurl-page {
  transform: rotateY(-160deg);
}

.home .pagecurl-back {
  position: absolute;
  inset: 12px;
  border-radius: 36px;
  background:
    radial-gradient(60% 80% at 50% 30%, #f6efe0, #e6dcc4 80%);
  z-index: 2;
  padding: 32px;
  font-family: var(--display);
  font-size: 16px;
  line-height: 1.5;
  color: #2c2519;
  font-variation-settings: "opsz" 18, "SOFT" 100, "wght" 380;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.home .pagecurl-back .chapter-title {
  font-size: 22px;
  font-variation-settings: "opsz" 32, "SOFT" 50, "wght" 600;
  color: var(--brand-deep);
  margin-bottom: 14px;
}

.home .pagecurl-back .chapter-meta {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(44, 37, 25, 0.55);
  margin-bottom: 18px;
}

.home .pagecurl-hint {
  text-align: center;
  margin-top: var(--space-4);
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: rgba(240, 236, 226, 0.45);
}

/* ------------------------------------------------------------
   Section: The Voice — ten literary tones
   ------------------------------------------------------------ */
.home .voice-intro {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  margin-bottom: clamp(48px, 8vw, 96px);
}

@media (min-width: 880px) {
  .home .voice-intro {
    grid-template-columns: 1.15fr 1fr;
    gap: clamp(40px, 6vw, 96px);
    align-items: end;
  }
}

.home .voice-scene {
  font-family: var(--display);
  font-size: clamp(16px, 1.4vw, 19px);
  line-height: 1.55;
  font-style: italic;
  font-variation-settings: "opsz" 18, "SOFT" 100, "wght" 360;
  color: var(--ink-soft);
  border-left: 2px solid var(--gold);
  padding: var(--space-3) 0 var(--space-3) var(--space-4);
  margin: 0;
}

.home .voice-scene strong {
  display: block;
  font-style: normal;
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  font-weight: 500;
  margin-bottom: var(--space-2);
}

.home .voice-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}

@media (min-width: 720px) {
  .home .voice-grid {
    grid-template-columns: 1fr 1fr;
    gap: var(--space-5);
  }
}

@media (min-width: 1100px) {
  .home .voice-grid {
    /* Keep 2 columns even at large widths so each prose excerpt
       has a comfortable measure for reading. */
    grid-template-columns: 1fr 1fr;
  }
}

.home .voice-card {
  position: relative;
  padding: var(--space-5);
  background: var(--paper);
  border: 1px solid var(--rule);
  border-radius: 4px;
  transition: border-color 0.4s var(--ease-soft), transform 0.4s var(--ease-soft);
}

.home .voice-card:hover {
  border-color: var(--brand);
  transform: translateY(-2px);
}

.home .voice-card.is-default {
  border-color: var(--gold);
  background: linear-gradient(180deg, var(--paper) 0%, var(--paper-rim) 100%);
}

.home .voice-head {
  display: flex;
  align-items: baseline;
  gap: var(--space-3);
  margin-bottom: var(--space-3);
  padding-bottom: var(--space-3);
  border-bottom: 1px solid var(--rule-soft);
}

.home .voice-sigil {
  font-family: var(--display);
  font-size: clamp(28px, 2.6vw, 36px);
  line-height: 1;
  color: var(--brand);
  font-variation-settings: "opsz" 48, "SOFT" 60, "wght" 500;
  flex: 0 0 auto;
}

.home .voice-name {
  flex: 1 1 auto;
}

.home .voice-name h3 {
  font-family: var(--display);
  font-size: clamp(20px, 1.8vw, 24px);
  line-height: 1.2;
  letter-spacing: -0.01em;
  font-variation-settings: "opsz" 24, "SOFT" 60, "wght" 580;
  color: var(--ink);
  margin: 0;
}

.home .voice-name .voice-shortname {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  margin-top: 4px;
  display: block;
}

.home .voice-card.is-default .voice-name .voice-shortname {
  color: var(--gold);
}

.home .voice-card.is-default .voice-default-tag {
  position: absolute;
  top: -10px;
  right: var(--space-4);
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.2em;
  text-transform: uppercase;
  color: var(--paper);
  background: var(--gold);
  padding: 3px 10px;
  border-radius: 999px;
  font-weight: 600;
}

.home .voice-prose {
  font-family: var(--display);
  font-size: clamp(15px, 1.1vw, 17px);
  line-height: 1.55;
  color: var(--ink-soft);
  font-variation-settings: "opsz" 18, "SOFT" 80, "wght" 380;
  margin: 0;
}

/* ------------------------------------------------------------
   Section: The Look — themes with demo video.
   Mirrors the hero's neumorphic frame treatment but in portrait
   aspect (the demo is a phone screen recording).
   ------------------------------------------------------------ */
.home .appearance-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: clamp(40px, 6vw, 80px);
  align-items: center;
}

@media (min-width: 920px) {
  .home .appearance-grid {
    grid-template-columns: 1.05fr 0.95fr;
    gap: clamp(48px, 8vw, 120px);
  }
}

.home .appearance-copy h2 {
  margin-bottom: var(--space-4);
}

.home .appearance-copy .lede {
  margin-bottom: var(--space-5);
}

.home .appearance-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-3) var(--space-4);
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

.home .appearance-list li {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 8px 0;
  border-bottom: 1px solid var(--rule-soft);
}

.home .appearance-list .swatch {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  display: inline-block;
  position: relative;
  overflow: hidden;
  border: 1px solid var(--rule);
  flex: 0 0 auto;
}

/* Half-light / half-dark swatches — match the iOS app's theme picker
   which shows each theme as a sun-and-moon split. */
.home .appearance-list .swatch::before,
.home .appearance-list .swatch::after {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  width: 50%;
}
.home .appearance-list .swatch::before { left: 0; }
.home .appearance-list .swatch::after  { right: 0; }

.home .appearance-list .swatch-latte::before { background: #f5e8d6; }
.home .appearance-list .swatch-latte::after  { background: #4173b3; }

.home .appearance-list .swatch-ocean::before { background: #e1efe6; }
.home .appearance-list .swatch-ocean::after  { background: #1f6b5e; }

.home .appearance-list .swatch-rose::before  { background: #f7e2e3; }
.home .appearance-list .swatch-rose::after   { background: #a04563; }

.home .appearance-list .swatch-noir::before  { background: #f1eee8; }
.home .appearance-list .swatch-noir::after   { background: #1a1a1a; }

.home .appearance-media {
  display: flex;
  justify-content: center;
}

/* Portrait phone frame, neumorphic raise — same recipe as the hero
   frame but with portrait aspect and tighter dimensions. */
.home .appearance-frame {
  width: min(280px, 70%);
  /* Matches the source iPhone screen recording (640×1392). The
     iOS recording indicator (red dot) lives inside the Dynamic
     Island; we cover it with a CSS black pill overlay below
     (.appearance-frame::after) so the indicator vanishes while
     the rest of the status bar stays intact. */
  aspect-ratio: 640 / 1392;
  border-radius: 36px;
  background: var(--paper);
  position: relative;
  overflow: hidden;
  isolation: isolate;
  box-shadow:
    -10px -10px 28px rgba(255, 255, 255, 0.78),
    16px 18px 38px -8px rgba(101, 86, 56, 0.20),
    8px 10px 20px -6px rgba(101, 86, 56, 0.10),
    inset 0 0 0 1px rgba(255, 255, 255, 0.5);
  transition: transform 0.55s var(--ease-soft), box-shadow 0.55s var(--ease-soft);
  transform: rotate(-1deg);
}

.home .appearance-frame:hover {
  transform: rotate(0deg) translateY(-3px);
  box-shadow:
    -10px -10px 32px rgba(255, 255, 255, 0.85),
    20px 22px 44px -8px rgba(101, 86, 56, 0.26),
    8px 10px 20px -6px rgba(101, 86, 56, 0.13),
    inset 0 0 0 1px rgba(255, 255, 255, 0.6);
}

.home.dark-mode .appearance-frame {
  background: var(--paper-rim);
  box-shadow:
    -8px -8px 22px rgba(255, 255, 255, 0.025),
    16px 18px 36px -8px rgba(0, 0, 0, 0.55),
    8px 10px 20px -6px rgba(0, 0, 0, 0.4),
    inset 0 0 0 1px rgba(255, 255, 255, 0.04);
}

.home.dark-mode .appearance-frame:hover {
  box-shadow:
    -8px -8px 26px rgba(255, 255, 255, 0.04),
    20px 22px 42px -8px rgba(0, 0, 0, 0.6),
    8px 10px 20px -6px rgba(0, 0, 0, 0.45),
    inset 0 0 0 1px rgba(255, 255, 255, 0.06);
}

.home .appearance-frame > .appearance-frame-still,
.home .appearance-frame > .appearance-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
  display: block;
}

.home .appearance-frame > .appearance-frame-still { z-index: 1; }

.home .appearance-video {
  z-index: 2;
  opacity: 0;
  transition: opacity 0.9s var(--ease-soft);
  background: transparent;
}

.home .appearance-video.is-ready { opacity: 1; }
.home .appearance-video.is-fading-out { opacity: 0; }

/* ------------------------------------------------------------
   Section: Intelligence — 2×2 quiet grid
   ------------------------------------------------------------ */
.home .intel-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  margin-top: var(--space-6);
}

@media (min-width: 720px) {
  .home .intel-grid {
    grid-template-columns: 1fr 1fr;
    gap: var(--space-6);
  }
}

.home .intel-cell {
  padding: var(--space-5);
  border: 1px solid var(--rule);
  border-radius: 4px;
  background: var(--paper);
  position: relative;
  transition: transform 0.4s var(--ease-soft), border-color 0.4s;
}

.home .intel-cell:hover {
  transform: translateY(-3px);
  border-color: var(--brand);
}

.home .intel-cell .icon {
  width: 40px;
  height: 40px;
  margin-bottom: var(--space-4);
  color: var(--brand);
}

.home .intel-cell .icon svg {
  width: 100%;
  height: 100%;
  stroke: currentColor;
  fill: none;
  stroke-width: 1.4;
}

.home .intel-cell h3 { margin-bottom: var(--space-2); }
.home .intel-cell p { color: var(--ink-soft); margin: 0; }

/* ------------------------------------------------------------
   Section: Privacy
   ------------------------------------------------------------ */
.home .privacy {
  background: var(--paper-rim);
  border-block: 1px solid var(--rule);
}

.home .privacy-list {
  list-style: none;
  padding: 0;
  margin: var(--space-5) 0 0;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
}

@media (min-width: 760px) {
  .home .privacy-list { grid-template-columns: repeat(3, 1fr); }
}

.home .privacy-list li {
  padding: var(--space-4) 0 var(--space-4) var(--space-4);
  border-left: 2px solid var(--gold);
}

.home .privacy-list h3 {
  font-size: 19px;
  margin-bottom: var(--space-2);
}

.home .privacy-list p { margin: 0; font-size: 16px; }

.home .privacy a.read-policy {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: var(--space-5);
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-soft);
  border-bottom: 1px solid var(--rule);
  padding-bottom: 4px;
  transition: color 0.2s, border-color 0.2s;
}

.home .privacy a.read-policy:hover {
  color: var(--brand);
  border-bottom-color: var(--brand);
}

/* ------------------------------------------------------------
   Section: Final CTA
   ------------------------------------------------------------ */
.home .final-cta {
  text-align: center;
}

.home .final-cta h2 {
  margin-bottom: var(--space-4);
}

.home .final-cta .badge-row {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-3);
  margin-top: var(--space-5);
}

.home .final-cta .quiet-mailto {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink-quiet);
  border-bottom: 1px dashed var(--rule);
  padding-bottom: 2px;
  margin-top: var(--space-2);
}

.home .final-cta .quiet-mailto:hover {
  color: var(--brand);
  border-bottom-style: solid;
  border-bottom-color: var(--brand);
}

/* ------------------------------------------------------------
   Footer
   ------------------------------------------------------------ */
.home .site-footer {
  border-top: 1px solid var(--rule);
  padding-block: var(--space-5);
  font-family: var(--body);
  font-size: 14px;
  color: var(--ink-quiet);
}

.home .footer-row {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  align-items: flex-start;
  justify-content: space-between;
}

@media (min-width: 720px) {
  .home .footer-row {
    flex-direction: row;
    align-items: center;
  }
}

.home .footer-links {
  display: flex;
  gap: var(--space-4);
  list-style: none;
  padding: 0;
  margin: 0;
}

.home .footer-links a {
  color: var(--ink-soft);
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
}

.home .footer-links a:hover { color: var(--brand); }

.home .footer-aside {
  font-family: var(--display);
  font-style: italic;
  font-variation-settings: "opsz" 14, "SOFT" 100, "wght" 360;
  font-size: 14px;
  color: var(--ink-quiet);
}

/* ------------------------------------------------------------
   Reveal animations (IntersectionObserver-driven)
   ------------------------------------------------------------ */
.home [data-reveal] {
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity 0.9s var(--ease-quart),
    transform 0.9s var(--ease-quart);
}

.home [data-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}

.home [data-reveal-stagger] > * {
  opacity: 0;
  transform: translateY(14px);
  transition:
    opacity 0.7s var(--ease-quart),
    transform 0.7s var(--ease-quart);
}

.home [data-reveal-stagger].is-visible > *:nth-child(1) { transition-delay: 0.05s; }
.home [data-reveal-stagger].is-visible > *:nth-child(2) { transition-delay: 0.18s; }
.home [data-reveal-stagger].is-visible > *:nth-child(3) { transition-delay: 0.31s; }
.home [data-reveal-stagger].is-visible > *:nth-child(4) { transition-delay: 0.44s; }
.home [data-reveal-stagger].is-visible > *:nth-child(5) { transition-delay: 0.57s; }
.home [data-reveal-stagger].is-visible > *:nth-child(6) { transition-delay: 0.70s; }

.home [data-reveal-stagger].is-visible > * {
  opacity: 1;
  transform: translateY(0);
}

/* ------------------------------------------------------------
   Reduced motion
   ------------------------------------------------------------ */
@media (prefers-reduced-motion: reduce) {
  .home *,
  .home *::before,
  .home *::after {
    animation-duration: 0.001ms !important;
    animation-delay: 0ms !important;
    transition-duration: 0.001ms !important;
  }

  .home .ink-bleed,
  .home .pagecurl-page,
  .home .counter .underline,
  .home .nav-pill .pulse {
    animation: none !important;
  }

  .home [data-reveal],
  .home [data-reveal-stagger] > * {
    opacity: 1 !important;
    transform: none !important;
  }
}
