/* ============================================================
   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;
  /* Explicit dimensions are required: <svg> elements without
     width/height attributes default to a 300×150 intrinsic size,
     which `inset:0` doesn't override. Without this, the noise
     rectangle paints only in the top-left of the viewport — and
     mix-blend-mode:screen in dark mode makes that small rectangle
     visibly lighter than the surrounding background (a translucent
     ghost in the upper-left corner of the page). */
  width: 100vw;
  height: 100vh;
  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: 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;
}

/* Force dark text on the cream paper-back regardless of theme.
   The page-back is always cream in both light and dark modes,
   so we can't rely on var(--ink-soft) — that token flips to a
   cream tone in dark mode and the prose disappears against
   the matching paper background. */
.home .pagecurl-back p { color: #2c2519; }

.home .pagecurl-back .chapter-title {
  font-size: 22px;
  font-variation-settings: "opsz" 32, "SOFT" 50, "wght" 600;
  color: #1f3a64;
  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.7);
  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; }

/* Glossary section bullets — small filled dots tinted by category. */
.home .appearance-list .glossary-dot {
  width: 12px;
  height: 12px;
  border-radius: 50%;
  display: inline-block;
  margin-right: 14px;
  vertical-align: middle;
  flex: 0 0 auto;
}

.home .appearance-list .glossary-dot-people { background: var(--brand); }
.home .appearance-list .glossary-dot-places { background: var(--gold); }
.home .appearance-list .glossary-dot-things { background: var(--brand-deep); }
.home .appearance-list .glossary-dot-link {
  background: transparent;
  border: 2px solid var(--ink-quiet);
  width: 10px;
  height: 10px;
}

/* Life Book section bullets — small icons standing in for the
   different reader controls (book open, theme tag, fullscreen,
   slider) rather than plain dots, so the centerpiece section
   has slightly more visual weight than the others. */
.home .appearance-list .lifebook-dot {
  width: 18px;
  height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-right: 14px;
  vertical-align: middle;
  flex: 0 0 auto;
  color: var(--brand);
  position: relative;
}

.home .appearance-list .lifebook-dot::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 50%;
  background: var(--brand);
  opacity: 0.12;
}

.home .appearance-list .lifebook-dot::after {
  content: "";
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--brand);
  position: relative;
  z-index: 1;
}

.home .appearance-list .lifebook-dot-thematic { color: var(--gold); }
.home .appearance-list .lifebook-dot-thematic::before { background: var(--gold); }
.home .appearance-list .lifebook-dot-thematic::after  { background: var(--gold); }

.home .appearance-list .lifebook-dot-fullscreen { color: var(--brand-deep); }
.home .appearance-list .lifebook-dot-fullscreen::before { background: var(--brand-deep); }
.home .appearance-list .lifebook-dot-fullscreen::after  { background: var(--brand-deep); }

.home .appearance-list .lifebook-dot-slider { color: var(--ink-soft); }
.home .appearance-list .lifebook-dot-slider::before { background: var(--ink-soft); opacity: 0.10; }
.home .appearance-list .lifebook-dot-slider::after  {
  width: 14px;
  height: 3px;
  border-radius: 999px;
  background: var(--ink-soft);
}

.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;
  }
}
