/* ===========================
   RESET & TOKENS
   =========================== */
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }

:root {
  --black: #000000;
  --surface: #0b0b0c;
  --card: #121214;
  --card-2: #18181b;
  --line: #242428;
  --line-2: #33333a;

  --text: #ffffff;
  --text-2: #9b9ba3;
  --text-3: #6a6a73;

  --accent: #4a9ee0;      /* app's blue — progress bars, step labels */
  --accent-dim: #2f6fa6;
  --accent-soft: rgba(74, 158, 224, 0.12);
  --soon: #ec4c84;        /* app's pink "coming soon" pill — post-beta features only */

  --r-sm: 10px;
  --r: 14px;
  --r-lg: 18px;
  --r-xl: 26px;

  --sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', sans-serif;
  --mono: 'JetBrains Mono', ui-monospace, 'SF Mono', Menlo, monospace;
  --ease: 0.35s cubic-bezier(0.4, 0, 0.2, 1);
  --max: 1180px;
}

html {
  scroll-behavior: smooth;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  overflow-x: hidden;
  /* iOS Safari ignores overflow-x on <body> alone */
  max-width: 100%;
}

body {
  font-family: var(--sans);
  background: var(--black);
  color: var(--text);
  line-height: 1.55;
  overflow-x: hidden;
}

a { text-decoration: none; color: inherit; }
img { max-width: 100%; display: block; }
ul, ol { list-style: none; }

.mono {
  font-family: var(--mono);
  font-weight: 400;
  letter-spacing: 0.01em;
  text-transform: lowercase;
}

.grain {
  position: fixed; inset: 0; z-index: 4; pointer-events: none; opacity: 0.45;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.045'/%3E%3C/svg%3E");
}

.wrap { max-width: var(--max); margin: 0 auto; padding: 0 2rem; position: relative; z-index: 1; }

.section { padding: 7.5rem 0; position: relative; }

.label {
  font-size: 0.78rem; color: var(--accent);
  margin-bottom: 1rem; display: flex; align-items: center; gap: 0.6rem;
}

.title {
  font-size: clamp(2rem, 4.4vw, 3.1rem);
  font-weight: 700; line-height: 1.08; letter-spacing: -0.04em;
  margin-bottom: 1.2rem;
}

.title-sm { font-size: clamp(1.6rem, 3vw, 2.1rem); }

.lede {
  font-size: 1.03rem; color: var(--text-2); line-height: 1.7;
  max-width: 56ch; margin-bottom: 1.1rem;
}

.lede strong { color: var(--text); font-weight: 600; }

.tint { color: var(--accent); }

/* ===========================
   NAV
   =========================== */
.navbar {
  position: fixed; top: 0; left: 0; width: 100%; z-index: 50;
  padding: 1rem 0; border-bottom: 1px solid transparent;
  transition: background var(--ease), border-color var(--ease);
}

.navbar.scrolled {
  background: rgba(0, 0, 0, 0.78);
  backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
  border-bottom-color: var(--line);
}

.nav-inner {
  max-width: var(--max); margin: 0 auto; padding: 0 2rem;
  display: flex; align-items: center; justify-content: space-between;
}

.logo-img { height: 26px; width: auto; }

.nav-links { display: flex; gap: 2rem; align-items: center; }

.nav-links a {
  font-family: var(--mono); font-size: 0.8rem; text-transform: lowercase;
  color: var(--text-2); transition: color var(--ease);
}

.nav-links a:hover { color: var(--text); }

.nav-cta {
  font-family: var(--sans) !important; text-transform: none !important;
  background: var(--text); color: #000 !important;
  padding: 0.55rem 1.1rem; border-radius: var(--r-sm);
  font-size: 0.85rem !important; font-weight: 600;
  transition: transform var(--ease), box-shadow var(--ease);
}

.nav-cta:hover { transform: translateY(-1px); box-shadow: 0 6px 22px rgba(255,255,255,0.16); }

.burger {
  display: none; flex-direction: column; gap: 5px;
  background: none; border: none; cursor: pointer;
  /* 44x44 minimum touch area, visually still a small icon */
  width: 44px; height: 44px; align-items: center; justify-content: center;
  margin-right: -10px;
}
.burger span { width: 22px; height: 1.5px; background: var(--text); transition: var(--ease); }

/* ===========================
   HERO
   =========================== */
.hero {
  position: relative;
  padding: 4.75rem 0 5rem;
  overflow: hidden;
}

/* Static grid of generations across the top. No animation by design: the
   earlier marquee could freeze on iOS, and a grid shows every frame at once. */
.hero-grid {
  display: grid;
  grid-template-columns: repeat(8, minmax(0, 1fr));
  gap: 0.6rem;
  max-width: var(--max);
  margin: 0 auto 3rem;
  padding: 0 2rem;
}

.hero-grid img {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 360 / 645;
  object-fit: cover;
  border-radius: var(--r-sm);
  border: 1px solid var(--line);
  background: var(--card);
}

.hero-copy {
  position: relative;
  z-index: 1;
  max-width: 760px;
  margin: 0 auto;
  padding: 0 2rem;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
}

.eyebrow {
  display: inline-flex; align-items: center; gap: 0.55rem;
  font-size: 0.76rem; color: var(--accent); margin-bottom: 1.6rem;
  padding: 0.4rem 0.85rem; border: 1px solid rgba(74,158,224,0.3);
  border-radius: 999px; background: var(--accent-soft);
}

.pip {
  width: 6px; height: 6px; border-radius: 50%; background: var(--accent);
  box-shadow: 0 0 10px rgba(74,158,224,0.9); animation: pip 2.4s ease-in-out infinite;
}

@keyframes pip { 0%,100% { opacity: 1; } 50% { opacity: 0.3; } }

.hero-title {
  font-size: clamp(2.4rem, 5.6vw, 3.8rem);
  font-weight: 700; line-height: 1.04; letter-spacing: -0.045em;
  margin-bottom: 1.2rem;
}

.hero-sub {
  font-size: 1.05rem; color: var(--text-2); line-height: 1.7;
  max-width: 58ch; margin: 0 auto 2rem;
}

.hero-foot { margin-top: 1.4rem; font-size: 0.72rem; color: var(--text-3); }

/* ===========================
   FORMS
   =========================== */
.signup {
  max-width: 540px; margin: 0 auto; text-align: left;
  background: rgba(10,10,12,0.72);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 1.5rem;
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
}

.signup-lg { max-width: 620px; }

/* Offer banner inside the form card. Sits above the fields so it is read
   before anything is typed, and unlike .form-note it is never replaced by
   validation or status messages. */
.signup-offer {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
  margin: -0.35rem 0 1rem;
  padding-bottom: 0.9rem;
  border-bottom: 1px solid var(--line);
  font-size: 0.88rem;
  line-height: 1.5;
  color: var(--text-2);
  text-align: left;
}

.signup-offer strong { color: var(--text); font-weight: 600; }

.offer-tag {
  flex-shrink: 0;
  font-size: 0.62rem;
  letter-spacing: 0.04em;
  color: var(--accent);
  border: 1px solid rgba(74, 158, 224, 0.45);
  background: var(--accent-soft);
  border-radius: 999px;
  padding: 0.18rem 0.5rem;
  margin-top: 0.1rem;
}

.signup-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.85rem; margin-bottom: 0.85rem; }

.field { display: flex; flex-direction: column; }
.field + .field { margin-top: 0; }
.signup > .field { margin-bottom: 0.85rem; }

.field label { font-size: 0.74rem; color: var(--text-2); margin-bottom: 0.45rem; }
.field .opt { color: var(--text-3); }

.field input {
  background: #0e0e10;
  border: 1px solid var(--line-2);
  border-radius: var(--r);
  color: var(--text); font-family: var(--sans);
  /* must stay >= 16px or iOS Safari zooms in on focus */
  font-size: 16px;
  padding: 0.85rem 1rem; outline: none; width: 100%;
  transition: border-color var(--ease), box-shadow var(--ease);
}

.field input::placeholder { color: var(--text-3); }

.field input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgba(74,158,224,0.16);
}

.field.has-error input { border-color: #ff6b6b; }

.form-note {
  margin-top: 0.8rem; font-size: 0.72rem; color: var(--text-3);
  text-align: center; min-height: 1.4em; transition: color var(--ease);
}

/* Consent line under each signup form. Separate from .form-note, which is
   overwritten by status messages. Links open in a new tab so a half-filled
   form isn't lost. */
.form-consent {
  margin-top: 0.5rem; font-size: 0.72rem; line-height: 1.5;
  color: var(--text-3); text-align: center;
}
.form-consent a {
  color: var(--text-2); text-decoration: underline; text-underline-offset: 2px;
  padding: 0.35rem 0; /* taller tap target without changing the line */
}
.form-consent a:hover { color: var(--text); }

.signup.is-success .form-note { color: #58d98b; }
.signup.is-error .form-note { color: #ff8080; }

.hp { position: absolute; left: -9999px; opacity: 0; height: 0; width: 0; }

/* ===========================
   BUTTONS
   =========================== */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem;
  padding: 0.95rem 1.6rem; border-radius: var(--r);
  font-family: var(--sans); font-weight: 600; font-size: 0.97rem;
  border: none; cursor: pointer; white-space: nowrap;
  transition: transform var(--ease), box-shadow var(--ease), opacity var(--ease);
}

.btn-white { background: #fff; color: #000; }
.btn-white:hover { transform: translateY(-1px); box-shadow: 0 10px 28px rgba(255,255,255,0.15); }
.btn-block { width: 100%; }

.btn-spin {
  display: none; width: 15px; height: 15px;
  border: 2px solid rgba(0,0,0,0.2); border-top-color: #000;
  border-radius: 50%; animation: spin 0.7s linear infinite;
}

@keyframes spin { to { transform: rotate(360deg); } }

.signup.is-loading .btn-spin { display: inline-block; }
.signup.is-loading .btn-label { display: none; }
.signup.is-loading .btn { pointer-events: none; opacity: 0.85; }

/* ===========================
   STATS
   =========================== */
.stats-section { border-top: 1px solid var(--line); background: var(--surface); }

.stats {
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-top: 3rem;
}

.stat {
  border: 1px solid var(--line); border-radius: var(--r-lg);
  padding: 1.8rem 1.5rem; background: var(--card);
  display: flex; flex-direction: column; gap: 0.5rem;
}

.stat strong {
  font-size: clamp(1.9rem, 3.6vw, 2.6rem); font-weight: 700;
  letter-spacing: -0.04em; line-height: 1;
}

.stat .cap { font-size: 0.74rem; color: var(--text-2); }

.stat.is-trim {
  border-color: rgba(74,158,224,0.45);
  background: linear-gradient(150deg, rgba(74,158,224,0.14), rgba(18,18,20,0.9));
}

.stat.is-trim strong { color: var(--accent); }

/* ===========================
   GALLERY MARQUEE
   =========================== */
.work { border-top: 1px solid var(--line); padding-bottom: 5rem; overflow: hidden; }

/* Manual slideshow. This used to be an infinite CSS marquee, but `:hover`
   sticks on touch devices — one tap and the animation paused forever. Native
   scrolling cannot stall that way, and lets people actually study a frame. */
.gallery-wrap { position: relative; margin-top: 3rem; }

.gallery {
  display: flex;
  gap: 1rem;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  -webkit-overflow-scrolling: touch;
  padding: 0 2rem;
  scroll-padding-left: 2rem;
  /* Hide the scrollbar; the arrows and swipe are the affordance */
  scrollbar-width: none;
  -ms-overflow-style: none;
}

.gallery::-webkit-scrollbar { display: none; }

.gallery:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }

.gallery figure {
  width: 258px; flex: 0 0 auto; position: relative;
  scroll-snap-align: start;
  border-radius: var(--r); overflow: hidden; border: 1px solid var(--line);
}

/* height:auto is required: the <img> carries width/height attributes so the
   browser can reserve space before it loads, and without this the literal
   height="1000" wins and every card becomes a 1000px-tall strip. */
.gallery img { width: 100%; height: auto; aspect-ratio: 558 / 1000; object-fit: cover; }

.gallery figcaption {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 1.6rem 0.85rem 0.7rem; font-size: 0.66rem; color: #cfd4dc;
  background: linear-gradient(transparent, rgba(0,0,0,0.85));
}

/* Tells people the rail scrolls. Wording follows the input: swipe on touch,
   arrows on a mouse — the same split the arrow buttons use. */
.gal-hint {
  display: inline-flex; align-items: center; gap: 0.45rem;
  margin-top: 0.4rem;
  font-size: 0.76rem; color: var(--accent);
  transition: opacity 0.5s var(--ease);
}

.gal-hint .hint-pointer { display: none; }

@media (hover: hover) and (pointer: fine) {
  .gal-hint .hint-touch { display: none; }
  .gal-hint .hint-pointer { display: inline; }
}

.hint-arrow { width: 15px; height: 15px; animation: nudge 1.6s ease-in-out infinite; }

@keyframes nudge { 0%, 100% { transform: translateX(0); } 50% { transform: translateX(5px); } }

/* Once they have scrolled, the hint has done its job */
.gal-hint.is-done { opacity: 0.35; }
.gal-hint.is-done .hint-arrow { animation: none; }

/* Arrows: pointer devices only — touch users swipe, and the buttons would
   just cover the images. */
.gal-nav {
  display: none;
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 44px; height: 44px; border-radius: 50%;
  background: rgba(10,10,12,0.8);
  border: 1px solid var(--line-2);
  color: var(--text);
  cursor: pointer;
  align-items: center; justify-content: center;
  backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px);
  transition: background var(--ease), border-color var(--ease), opacity var(--ease);
  z-index: 2;
}

.gal-nav svg { width: 20px; height: 20px; }
.gal-nav:hover { background: #fff; color: #000; border-color: #fff; }
.gal-nav[disabled] { opacity: 0.25; pointer-events: none; }

.gal-prev { left: 1rem; }
.gal-next { right: 1rem; }

@media (hover: hover) and (pointer: fine) {
  .gal-nav { display: flex; }
}

/* ===========================
   SPLIT SECTIONS
   =========================== */
.split { display: grid; grid-template-columns: 1fr 1fr; gap: 4.5rem; align-items: center; }
.split-rev .split-text { order: 2; }
.split-rev .split-media { order: 1; }

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

.ticks { margin-top: 1.75rem; display: flex; flex-direction: column; gap: 0.85rem; }

.ticks li { display: flex; gap: 0.7rem; align-items: flex-start; font-size: 0.93rem; color: var(--text-2); }

.tick {
  flex-shrink: 0; width: 17px; height: 17px; margin-top: 0.22rem; border-radius: 50%;
  border: 1px solid var(--accent); background: var(--accent-soft);
  position: relative;
}

.tick::after {
  content: ''; position: absolute; left: 5px; top: 2px;
  width: 4px; height: 8px; border: solid var(--accent);
  border-width: 0 1.5px 1.5px 0; transform: rotate(45deg);
}

/* Device frame */
.device {
  border-radius: 30px; overflow: hidden;
  border: 1px solid var(--line-2); background: #000;
  box-shadow: 0 40px 90px rgba(0,0,0,0.8), 0 0 60px rgba(74,158,224,0.1);
  max-width: 300px;
}

.device img { width: 100%; display: block; }

.device-tilt { transform: perspective(1200px) rotateY(-9deg) rotateX(2deg); transition: transform 0.6s var(--ease); }
.device-tilt:hover { transform: perspective(1200px) rotateY(0) rotateX(0); }

/* Accuracy scan */
.shot {
  position: relative; max-width: 300px;
  border-radius: 30px; overflow: hidden;
  border: 1px solid var(--line-2); background: #000;
  box-shadow: 0 40px 90px rgba(0,0,0,0.8), 0 0 70px rgba(74,158,224,0.14);
}

.scanline {
  position: absolute; left: 0; right: 0; height: 26%;
  background: linear-gradient(180deg, transparent, rgba(74,158,224,0.22) 55%, rgba(120,200,255,0.5));
  border-bottom: 1px solid rgba(150,215,255,0.8);
  animation: scan 3.6s ease-in-out infinite;
  mix-blend-mode: screen;
}

@keyframes scan {
  0% { top: -26%; opacity: 0; }
  12% { opacity: 1; }
  88% { opacity: 1; }
  100% { top: 100%; opacity: 0; }
}

/* Realism duo */
.duo { position: relative; width: 100%; max-width: 420px; height: 440px; }

.duo figure {
  position: absolute; border-radius: var(--r-lg); overflow: hidden;
  border: 1px solid var(--line-2);
  box-shadow: 0 30px 70px rgba(0,0,0,0.75);
}

.duo img { width: 100%; height: 100%; object-fit: cover; }

.duo-a { width: 62%; height: 86%; top: 0; left: 0; z-index: 2; animation: bobA 9s ease-in-out infinite; }
.duo-b { width: 52%; height: 70%; bottom: 0; right: 0; z-index: 1; animation: bobB 9s ease-in-out infinite; }

@keyframes bobA { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-12px); } }
@keyframes bobB { 0%,100% { transform: translateY(0); } 50% { transform: translateY(12px); } }

/* ===========================
   TRENDS CHIPS
   =========================== */
.trends { border-top: 1px solid var(--line); background: var(--surface); }

.chips { display: flex; flex-wrap: wrap; gap: 0.6rem; margin-top: 2.5rem; max-width: 900px; }

.chip {
  font-size: 0.85rem; font-weight: 500;
  padding: 0.55rem 1.05rem; border-radius: 999px;
  border: 1px solid var(--line-2); background: var(--card);
  color: var(--text-2);
  transition: all var(--ease);
}

.chip:nth-child(3n+1):hover, .chip:hover {
  background: #fff; color: #000; border-color: #fff; transform: translateY(-2px);
}

/* ===========================
   FLOW
   =========================== */
.flow { border-top: 1px solid var(--line); }

.flow-body {
  display: grid; grid-template-columns: 1fr 300px; gap: 4rem;
  align-items: center; margin-top: 3rem;
}

.flow-steps { display: flex; flex-direction: column; gap: 0.6rem; }

.fstep button {
  width: 100%; text-align: left; cursor: pointer;
  background: transparent; border: 1px solid transparent;
  border-radius: var(--r-lg); padding: 1.1rem 1.3rem;
  font-family: var(--sans); color: inherit;
  display: flex; flex-direction: column; gap: 0.3rem;
  position: relative; overflow: hidden;
  transition: background var(--ease), border-color var(--ease);
}

.fstep button:hover { background: var(--card); }

.fstep.is-active button { background: var(--card); border-color: var(--line-2); }

.fstep-no { font-size: 0.72rem; color: var(--text-3); transition: color var(--ease); }
.fstep.is-active .fstep-no { color: var(--accent); }

.fstep-h { font-size: 1.22rem; font-weight: 600; letter-spacing: -0.025em; }

.fstep-p {
  font-size: 0.88rem; color: var(--text-2); line-height: 1.6;
  max-height: 0; opacity: 0; overflow: hidden;
  transition: max-height 0.45s var(--ease), opacity 0.35s var(--ease), margin-top 0.45s var(--ease);
}

.fstep.is-active .fstep-p { max-height: 6em; opacity: 1; margin-top: 0.15rem; }

.fstep-bar {
  position: absolute; left: 0; bottom: 0; height: 2px; width: 0;
  background: var(--accent);
}

.fstep.is-active .fstep-bar { animation: fill 5s linear forwards; }

@keyframes fill { from { width: 0; } to { width: 100%; } }

.flow-phone { display: flex; justify-content: center; }

.flow-phone .device { max-width: 300px; }

#flowShot { transition: opacity 0.3s var(--ease); }
#flowShot.swapping { opacity: 0; }

/* ===========================
   SOON
   =========================== */
.soon { border-top: 1px solid var(--line); background: var(--surface); }

.soon-card {
  border: 1px solid var(--line); border-radius: var(--r-xl);
  background: linear-gradient(150deg, rgba(74,158,224,0.09), rgba(10,10,12,0.4));
  padding: 3rem; display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: center;
}

.badge {
  font-size: 0.62rem; color: var(--accent);
  border: 1px solid rgba(74,158,224,0.5); border-radius: 999px;
  padding: 0.12rem 0.55rem;
}


/* Post-beta pill, matching the app's pink "coming soon" */
.badge-soon {
  color: #fff;
  background: var(--soon);
  border-color: var(--soon);
  font-weight: 500;
}

/* ===========================
   CREATIVE DIRECTOR
   =========================== */
.director { border-top: 1px solid var(--line); }

.dir-list {
  margin-top: 1.75rem;
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  background: var(--card);
  overflow: hidden;
  text-align: left;
  width: 100%;
  max-width: 520px;
}

.dir-list li {
  display: flex; gap: 0.9rem; align-items: flex-start;
  padding: 1rem 1.15rem;
  border-bottom: 1px solid var(--line);
}

.dir-list li:last-child { border-bottom: none; }

.dir-icon { flex-shrink: 0; width: 20px; height: 20px; margin-top: 0.15rem; color: var(--accent); }
.dir-icon svg { width: 100%; height: 100%; }

.dir-list li > span:last-child { display: flex; flex-direction: column; gap: 0.2rem; }
.dir-list strong { font-size: 0.98rem; font-weight: 600; letter-spacing: -0.015em; }
.dir-list small { font-size: 0.86rem; color: var(--text-2); line-height: 1.5; }

.dir-foot { margin-top: 1.1rem; font-size: 0.74rem; color: var(--text-3); }

/* Demo video in a phone frame */
/* A <video> reports its 720px intrinsic width as its min-content size, which
   can stretch a 1fr grid column wider than a phone screen. */
.soon-card > * { min-width: 0; }

.soon-video { display: flex; justify-content: center; }

/* The video sizes itself from its own 720x1280 dimensions (width/height
   attributes in the markup) rather than filling a box shaped by
   `aspect-ratio`. iOS Safari mishandles `height: 100%` inside aspect-ratio
   boxes on <video>, which stretched the clip. The source is exactly 9:16,
   so this box is exactly 9:16 too and there is nothing to warp. */
.device-video {
  position: relative;
  width: 100%;
  max-width: 290px;
}

.device-video video {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
  background: #000;
}

.video-tag {
  position: absolute; left: 0.75rem; bottom: 0.75rem;
  font-size: 0.62rem; color: #dfe4ea;
  background: rgba(0,0,0,0.55);
  border: 1px solid rgba(255,255,255,0.14);
  border-radius: 999px;
  padding: 0.25rem 0.6rem;
  backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
  pointer-events: none;
}

/* Only shown when the browser refuses to autoplay (iOS Low Power Mode,
   Reduce Motion, data saver). Never used to pause — the clip is not
   meant to stop on tap. */
.video-play {
  position: absolute; inset: 0; margin: auto;
  width: 64px; height: 64px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background: rgba(255,255,255,0.92); color: #000;
  border: none; cursor: pointer;
  box-shadow: 0 10px 30px rgba(0,0,0,0.5);
}

.video-play[hidden] { display: none; }
.video-play svg { width: 26px; height: 26px; margin-left: 3px; }

/* ===========================
   BETA
   =========================== */
.beta {
  border-top: 1px solid var(--line);
  position: relative; overflow: hidden; text-align: center;
}

.beta::before {
  content: ''; position: absolute; top: 0; left: 50%; transform: translateX(-50%);
  width: min(1000px, 130vw); height: 600px; pointer-events: none;
  background: radial-gradient(ellipse closest-side, rgba(74,158,224,0.2), transparent 75%);
}

.beta-wrap { display: flex; flex-direction: column; align-items: center; }

.beta-logo { height: 44px; width: auto; margin-bottom: 2rem; }

.beta .label { justify-content: center; }
.beta .lede { margin-bottom: 2.5rem; }

/* "Got questions? Join our Discord" under the bottom signup form */
.discord-cta {
  display: inline-flex; align-items: center; gap: 0.7rem;
  margin-top: 1.5rem;
  min-height: 48px;
  padding: 0.75rem 1.15rem;
  border: 1px solid var(--line-2);
  border-radius: var(--r);
  background: var(--card);
  color: var(--text-2);
  font-size: 0.92rem;
  transition: border-color var(--ease), color var(--ease), background var(--ease);
}

.discord-cta strong { color: var(--text); font-weight: 600; }
.discord-cta > svg:first-child { width: 20px; height: 20px; color: #8b9bf5; flex-shrink: 0; }
.discord-arrow { width: 16px; height: 16px; flex-shrink: 0; transition: transform var(--ease); }

.discord-cta:hover { border-color: #8b9bf5; color: var(--text); background: rgba(139,155,245,0.08); }
.discord-cta:hover .discord-arrow { transform: translateX(3px); }

/* ===========================
   LEGAL PAGES (privacy.html, terms.html)
   =========================== */
/* Fixed, like the homepage nav: `position: sticky` is defeated by the
   overflow-x: hidden on html/body that stops sideways scrolling on iOS. */
/* Not the mobile menu overlay: keep the button compact at every width */
.legal-nav .nav-cta { display: inline-block; font-size: 0.85rem !important; padding: 0.55rem 1.1rem; }

.legal { padding: 7.5rem 0 6rem; }

.legal-wrap { max-width: 760px; margin: 0 auto; padding: 0 2rem; }

.legal-back {
  display: inline-flex; align-items: center; min-height: 44px;
  font-size: 0.8rem; color: var(--text-2); margin-bottom: 1.5rem;
  transition: color var(--ease);
}
.legal-back:hover { color: var(--text); }

.legal-title {
  font-size: clamp(2.2rem, 6vw, 3.2rem); font-weight: 700;
  letter-spacing: -0.04em; line-height: 1.05; margin-bottom: 0.9rem;
}

.legal-dates { font-size: 0.76rem; color: var(--text-3); margin-bottom: 2.5rem; text-transform: none; }

.legal-toc {
  border: 1px solid var(--line); border-radius: var(--r-lg);
  background: var(--card); padding: 1rem 1.25rem; margin-bottom: 3rem;
}
.legal-toc summary {
  cursor: pointer; font-size: 0.78rem; color: var(--accent);
  min-height: 32px; display: flex; align-items: center; list-style: none;
}
.legal-toc summary::-webkit-details-marker { display: none; }
.legal-toc summary::after { content: '+'; margin-left: auto; color: var(--text-3); }
.legal-toc[open] summary::after { content: '−'; }
.legal-toc ol { list-style: none; margin-top: 0.75rem; columns: 2; column-gap: 2rem; }
.legal-toc li { break-inside: avoid; }
.legal-toc a {
  display: block; padding: 0.3rem 0; font-size: 0.86rem;
  color: var(--text-2); transition: color var(--ease);
}
.legal-toc a:hover { color: var(--text); }

.legal-body { color: var(--text-2); font-size: 0.98rem; line-height: 1.75; }
.legal-body h2 {
  color: var(--text); font-size: 1.3rem; font-weight: 600; letter-spacing: -0.02em;
  margin: 2.75rem 0 1rem; padding-top: 1.5rem; border-top: 1px solid var(--line);
  scroll-margin-top: 90px;
}
.legal-body h2:first-child { margin-top: 0; }
.legal-body h3 { color: var(--text); font-size: 1rem; font-weight: 600; margin: 1.75rem 0 0.6rem; }
.legal-body p { margin-bottom: 0.9rem; }
.legal-body ul { margin: 0.25rem 0 1.1rem; padding-left: 1.2rem; list-style: disc; }
.legal-body li { margin-bottom: 0.25rem; }
.legal-body li::marker { color: var(--accent); }
.legal-body a { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; overflow-wrap: anywhere; }
.legal-strong { color: var(--text); font-weight: 600; }

.legal-other { margin-top: 3.5rem; font-size: 0.8rem; color: var(--text-3); }
.legal-other a { color: var(--accent); }

@media (max-width: 560px) {
  .legal-wrap { padding: 0 1.25rem; }
  .legal-toc ol { columns: 1; }
  .legal-body { font-size: 0.95rem; }
}

/* ===========================
   FOOTER
   =========================== */
.footer { border-top: 1px solid var(--line); padding: 4rem 0 2rem; }

.foot-top { display: flex; justify-content: space-between; gap: 4rem; margin-bottom: 3rem; }

.foot-logo { height: 24px; width: auto; margin-bottom: 0.9rem; }
.foot-brand p { font-size: 0.74rem; color: var(--text-3); }

.foot-links { display: flex; gap: 4rem; }
.foot-col { display: flex; flex-direction: column; gap: 0.55rem; }

.foot-col h4 { font-size: 0.72rem; font-weight: 400; color: var(--text-3); margin-bottom: 0.3rem; }

.foot-col a {
  font-family: var(--mono); font-size: 0.78rem; text-transform: lowercase;
  color: var(--text-2); transition: color var(--ease);
}

.foot-col a:hover { color: var(--text); }

.foot-bottom {
  display: flex; justify-content: space-between; align-items: center; gap: 1.5rem;
  padding-top: 2rem; border-top: 1px solid var(--line);
}

.foot-bottom p { font-size: 0.68rem; color: var(--text-3); text-transform: none; }

.socials { display: flex; gap: 1.1rem; flex-shrink: 0; }
.socials a { color: var(--text-3); transition: color var(--ease); }
.socials a:hover { color: var(--text); }

/* ===========================
   TOUCH TARGETS
   =========================== */
/* Narrow screens or any touch pointer. Width is included because some phones
   report `pointer: fine` in desktop-request mode, and it keeps this testable. */
@media (max-width: 860px), (pointer: coarse) {
  .foot-col a {
    padding: 0.55rem 0;
    min-height: 44px;
    display: flex;
    align-items: center;
  }

  .foot-col { gap: 0; }

  .socials { gap: 0.5rem; }

  .socials a {
    width: 44px; height: 44px;
    display: flex; align-items: center; justify-content: center;
  }

  .nav-logo {
    display: flex; align-items: center;
    min-height: 44px; padding-right: 0.5rem;
  }

  .nav-links a { padding: 0.35rem 0.5rem; }
}

/* ===========================
   REVEAL
   =========================== */
.reveal { opacity: 0; transform: translateY(26px); transition: opacity 0.85s cubic-bezier(0.4,0,0.2,1), transform 0.85s cubic-bezier(0.4,0,0.2,1); }
.reveal.visible { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .scanline, .duo-a, .duo-b, .pip, .hint-arrow { animation: none !important; }
  .gallery { scroll-behavior: auto; }
  .fstep.is-active .fstep-bar { animation: none; width: 100%; }
  .reveal { opacity: 1; transform: none; transition: none; }
  html { scroll-behavior: auto; }
}

/* ===========================
   RESPONSIVE
   =========================== */
@media (max-width: 1000px) {
  .hero-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0.45rem; margin-bottom: 2.5rem; }

  .split, .flow-body, .soon-card { grid-template-columns: 1fr; gap: 3rem; }
  .split-rev .split-text { order: 1; }
  .split-rev .split-media { order: 2; }
  .split-text { text-align: center; display: flex; flex-direction: column; align-items: center; }
  .split-text .label { justify-content: center; }
  .ticks li { text-align: left; }
  .device-tilt { transform: none; }
  .soon-card { padding: 2.25rem; text-align: center; }

  .soon-card .label { justify-content: center; }
  .soon-card .lede { margin-left: auto; margin-right: auto; }
  .flow-steps { max-width: 620px; margin: 0 auto; width: 100%; }
  .stats { grid-template-columns: 1fr; }
}

@media (max-width: 860px) {
  .nav-links {
    display: none; position: fixed; inset: 0; height: 100vh;
    background: rgba(0,0,0,0.97); backdrop-filter: blur(16px);
    flex-direction: column; align-items: center; justify-content: center; gap: 2rem;
  }
  .nav-links.open { display: flex; }
  .nav-links a { font-size: 1.3rem; }
  .nav-cta { font-size: 1.1rem !important; padding: 0.75rem 1.6rem; }

  .burger { display: flex; z-index: 51; }
  .burger.active span:nth-child(1) { transform: rotate(45deg) translate(5px, 5px); }
  .burger.active span:nth-child(2) { opacity: 0; }
  .burger.active span:nth-child(3) { transform: rotate(-45deg) translate(5px, -5px); }

  .section { padding: 5.5rem 0; }
  .hero { padding: 7.5rem 0 4.5rem; }
    .duo { max-width: 340px; height: 380px; }
  .gallery figure { width: 200px; }
  .foot-top { flex-direction: column; gap: 2.5rem; }
  .foot-links { gap: 2.5rem; flex-wrap: wrap; }
  .foot-bottom { flex-direction: column; text-align: center; }
}

@media (max-width: 560px) {
  .wrap, .nav-inner, .hero-copy { padding: 0 1.25rem; }
  .signup { padding: 1.15rem; border-radius: var(--r-lg); }
  .signup-grid { grid-template-columns: 1fr; }
  .hero-grid { padding: 0 1.25rem; gap: 0.4rem; }
  .duo { height: 300px; }
  .gallery figure { width: 168px; }
  .gallery { padding: 0 1.25rem; scroll-padding-left: 1.25rem; }
  .soon-card { padding: 1.5rem; }
}
