/* ============================================================
   Lens — landing page styles
   Aesthetic: "the detective's reading room" — deep warm ink,
   brass/amber lamplight, Fraunces optical serif + Spline Sans.
   ============================================================ */

/* ---------- Design tokens ---------- */
:root {
  /* ink — warm near-blacks, layered for depth */
  --ink-900: #0b0a08;
  --ink-850: #100e0b;
  --ink-800: #15120e;
  --ink-700: #1c1814;
  --ink-600: #261f18;
  --hairline: rgba(245, 199, 121, 0.14);
  --hairline-soft: rgba(243, 234, 216, 0.08);

  /* text — warm parchment */
  --paper: #f3ead8;
  --paper-dim: #cdc2ac;
  --paper-faint: #948a78;

  /* amber / brass lamplight (the lens glint) */
  --amber: #e0a04d;
  --amber-bright: #f5c779;
  --amber-deep: #c07f2f;

  /* signal colours */
  --pass: #9fc59b; /* sage — matches cross */
  --hold: #b86a57; /* dim red-brown — held back */

  /* type */
  --font-display: 'Fraunces', Georgia, 'Times New Roman', serif;
  --font-text: 'Spline Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-mono: 'JetBrains Mono', ui-monospace, 'SFMono-Regular', 'Cascadia Code', monospace;

  /* rhythm */
  --space: clamp(1rem, 0.6rem + 1.4vw, 1.5rem);
  --container: 1160px;
  --radius: 16px;
  --radius-sm: 10px;
  --radius-lg: 20px;

  /* card depth — subtle elevated fill + soft shadow */
  --shadow-card: 0 1px 0 rgba(245, 199, 121, 0.05) inset, 0 18px 44px -32px rgba(0, 0, 0, 0.85);
  --shadow-card-hover: 0 1px 0 rgba(245, 199, 121, 0.08) inset, 0 26px 60px -34px rgba(224, 160, 77, 0.4);

  /* motion */
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
}

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

html {
  scroll-behavior: smooth;
  scroll-padding-top: 5rem;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  font-family: var(--font-text);
  font-size: clamp(1rem, 0.96rem + 0.2vw, 1.075rem);
  line-height: 1.7;
  color: var(--paper);
  background-color: var(--ink-900);
  /* atmospheric depth: two warm lamp glows + a fine grain feel via radial layers */
  background-image:
    radial-gradient(1100px 620px at 78% -8%, rgba(224, 160, 77, 0.16), transparent 60%),
    radial-gradient(900px 700px at 6% 108%, rgba(176, 106, 64, 0.1), transparent 55%),
    linear-gradient(180deg, var(--ink-900), var(--ink-850));
  /* No background-attachment: fixed — it forces a full repaint on every scroll
     (a known jank source on mobile Safari). The glows scroll with the page. */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}

img,
svg {
  display: block;
  max-width: 100%;
}

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

h1,
h2,
h3 {
  font-family: var(--font-display);
  font-weight: 500;
  font-optical-sizing: auto;
  letter-spacing: -0.015em;
  line-height: 1.08;
  margin: 0;
  text-wrap: balance;
}

p {
  margin: 0;
}

code {
  font-family: var(--font-mono);
  font-size: 0.86em;
  color: var(--amber-bright);
  background: rgba(245, 199, 121, 0.08);
  border: 1px solid var(--hairline);
  padding: 0.1em 0.4em;
  border-radius: 6px;
}

/* ---------- Utilities ---------- */
.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: clamp(1.1rem, 0.6rem + 2.4vw, 2.2rem);
}

.visually-hidden,
.skip-link {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

.skip-link:focus {
  position: fixed;
  top: 0.75rem;
  left: 0.75rem;
  width: auto;
  height: auto;
  clip: auto;
  z-index: 200;
  padding: 0.6rem 1rem;
  background: var(--amber);
  color: var(--ink-900);
  border-radius: var(--radius-sm);
  font-weight: 600;
}

/* visible, consistent focus everywhere */
:where(a, button, input, [tabindex]):focus-visible {
  outline: 2px solid var(--amber-bright);
  outline-offset: 3px;
  border-radius: 6px;
}

/* ---------- Pills & badges ---------- */
.pill {
  display: inline-flex;
  align-items: center;
  gap: 0.45em;
  font-family: var(--font-mono);
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 0.34em 0.75em;
  border-radius: 999px;
  border: 1px solid var(--hairline);
  color: var(--paper-dim);
  background: rgba(245, 199, 121, 0.05);
  white-space: nowrap;
}

.pill--soon {
  color: var(--amber-bright);
  border-color: rgba(245, 199, 121, 0.32);
  background: rgba(245, 199, 121, 0.08);
}

.pill--status .pill__dot,
.pill--progress::before {
  content: '';
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--amber-bright);
  box-shadow: 0 0 0 0 rgba(245, 199, 121, 0.6);
  animation: pulse 2.6s var(--ease) infinite;
}

.pill--progress {
  color: var(--pass);
  border-color: rgba(159, 197, 155, 0.34);
  background: rgba(159, 197, 155, 0.08);
}

.pill--progress::before {
  background: var(--pass);
  box-shadow: 0 0 0 0 rgba(159, 197, 155, 0.55);
}

@keyframes pulse {
  0% {
    box-shadow: 0 0 0 0 rgba(245, 199, 121, 0.55);
  }
  70% {
    box-shadow: 0 0 0 7px rgba(245, 199, 121, 0);
  }
  100% {
    box-shadow: 0 0 0 0 rgba(245, 199, 121, 0);
  }
}

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: baseline;
  gap: 0.4em;
  font-family: var(--font-text);
  font-weight: 600;
  font-size: 0.95rem;
  line-height: 1;
  padding: 0.85em 1.3em;
  border-radius: var(--radius-sm);
  border: 1px solid transparent;
  cursor: pointer;
  transition:
    transform 0.18s var(--ease),
    background 0.2s var(--ease),
    border-color 0.2s var(--ease),
    box-shadow 0.2s var(--ease);
}

.btn--sm {
  font-size: 0.85rem;
  padding: 0.65em 1em;
}

.btn--primary {
  color: var(--ink-900);
  background: linear-gradient(135deg, var(--amber-bright), var(--amber-deep));
  box-shadow:
    0 1px 0 rgba(255, 255, 255, 0.25) inset,
    0 8px 24px -10px rgba(224, 160, 77, 0.7);
}

.btn--primary:hover {
  transform: translateY(-2px);
  box-shadow:
    0 1px 0 rgba(255, 255, 255, 0.3) inset,
    0 12px 30px -10px rgba(224, 160, 77, 0.85);
}

.btn--ghost {
  color: var(--paper);
  border-color: var(--hairline);
  background: rgba(243, 234, 216, 0.03);
}

.btn--ghost:hover {
  border-color: rgba(245, 199, 121, 0.4);
  background: rgba(245, 199, 121, 0.06);
}

.btn__sub {
  font-family: var(--font-mono);
  font-weight: 400;
  font-size: 0.72em;
  letter-spacing: 0.02em;
  color: var(--paper-faint);
}

/* ============================================================
   HEADER
   ============================================================ */
.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  backdrop-filter: blur(14px) saturate(140%);
  background: color-mix(in srgb, var(--ink-900) 78%, transparent);
  border-bottom: 1px solid var(--hairline-soft);
}

.header-inner {
  display: flex;
  align-items: center;
  gap: 1.25rem;
  min-height: 4.25rem;
}

.wordmark {
  display: inline-flex;
  align-items: center;
  gap: 0.55rem;
}

.wordmark__mark {
  color: var(--amber-bright);
  display: inline-flex;
  filter: drop-shadow(0 2px 8px rgba(224, 160, 77, 0.35));
}

.wordmark__text {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 1.4rem;
  letter-spacing: -0.02em;
}

.wordmark__emoji {
  font-size: 0.95rem;
  filter: saturate(0.9);
}

.site-nav {
  display: flex;
  gap: 1.6rem;
  margin-inline: auto;
  font-size: 0.95rem;
  color: var(--paper-dim);
}

.site-nav a {
  position: relative;
  padding-block: 0.35rem;
  transition: color 0.2s var(--ease);
}

.site-nav a::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: 0;
  height: 1.5px;
  width: 0;
  background: var(--amber-bright);
  transition: width 0.25s var(--ease);
}

.site-nav a:hover {
  color: var(--paper);
}

.site-nav a:hover::after {
  width: 100%;
}

.header-actions {
  display: flex;
  align-items: center;
  gap: 0.7rem;
}

/* ============================================================
   HERO
   ============================================================ */
.hero {
  position: relative;
  padding-block: clamp(4.5rem, 2.5rem + 9vw, 9.5rem) clamp(3.5rem, 2rem + 6vw, 7rem);
  min-height: min(92vh, 880px);
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* soft ambient amber glow behind the hero/connector — adds depth, sits behind
   all content, never intercepts pointer events. */
.hero::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background:
    radial-gradient(1000px 720px at 64% 38%, rgba(245, 199, 121, 0.12), transparent 62%),
    radial-gradient(640px 520px at 22% 30%, rgba(224, 160, 77, 0.06), transparent 60%);
}

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

.hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.04fr) minmax(0, 0.96fr);
  gap: clamp(2rem, 1rem + 4vw, 4rem);
  align-items: center;
}

.eyebrow {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin-bottom: 1.5rem;
  flex-wrap: wrap;
}

.eyebrow__text {
  font-family: var(--font-mono);
  font-size: 0.74rem;
  letter-spacing: 0.04em;
  color: var(--paper-faint);
  text-transform: uppercase;
}

.hero-title {
  font-size: clamp(2.5rem, 1.4rem + 5.2vw, 4.6rem);
  font-weight: 400;
  letter-spacing: -0.025em;
}

.hero-title em {
  font-style: italic;
  font-weight: 500;
  color: var(--amber-bright);
  /* subtle warm glow on the key phrase */
  text-shadow: 0 0 38px rgba(245, 199, 121, 0.28);
}

.hero-sub {
  margin-top: 1.75rem;
  max-width: 35rem;
  font-size: clamp(1.05rem, 1rem + 0.3vw, 1.2rem);
  color: var(--paper-dim);
  line-height: 1.72;
}

.hero-sub strong {
  color: var(--paper);
  font-weight: 600;
}

/* waitlist */
.waitlist {
  margin-top: 2rem;
  max-width: 30rem;
}

.waitlist__row {
  display: flex;
  gap: 0.6rem;
  padding: 0.4rem;
  border: 1px solid var(--hairline);
  border-radius: 14px;
  background: rgba(11, 10, 8, 0.6);
  transition: border-color 0.2s var(--ease);
}

.waitlist__row:focus-within {
  border-color: rgba(245, 199, 121, 0.5);
}

.waitlist__input {
  flex: 1;
  min-width: 0;
  background: transparent;
  border: 0;
  color: var(--paper);
  font: inherit;
  padding: 0.6rem 0.75rem;
}

.waitlist__input::placeholder {
  color: var(--paper-faint);
}

.waitlist__input:focus {
  outline: none;
}

.waitlist__note {
  margin-top: 0.75rem;
  font-size: 0.82rem;
  color: var(--paper-faint);
}

.waitlist__success {
  margin-top: 0.75rem;
  font-family: var(--font-mono);
  font-size: 0.9rem;
  color: var(--pass);
  font-weight: 500;
}

/* Empty on load: no visual footprint, but still present in the a11y tree (not
   display:none) so the live region can announce when JS fills it. */
.waitlist__success:empty {
  margin-top: 0;
}

.hero-tagline {
  margin-top: 2rem;
  font-family: var(--font-display);
  font-style: italic;
  font-size: 1.15rem;
  color: var(--paper-dim);
}

/* ============================================================
   CONNECTOR GRAPHIC (centerpiece)
   ============================================================ */
.connector {
  margin: 0;
}

.connector__stage {
  position: relative;
  border: 1px solid var(--hairline);
  border-radius: var(--radius);
  background:
    radial-gradient(120% 90% at 50% 50%, rgba(38, 31, 24, 0.75), rgba(11, 10, 8, 0.95)),
    var(--ink-800);
  box-shadow:
    0 1px 0 rgba(245, 199, 121, 0.08) inset,
    0 30px 80px -40px rgba(0, 0, 0, 0.9);
  overflow: hidden;
}

.connector__svg {
  width: 100%;
  height: auto;
}

/* nodes (agents + inbox) */
.node rect {
  fill: rgba(243, 234, 216, 0.04);
  stroke: var(--hairline);
  stroke-width: 1;
}

.node text {
  fill: var(--paper-dim);
  font-family: var(--font-mono);
  font-size: 12px;
  text-anchor: middle;
  letter-spacing: 0.02em;
}

.node--inbox rect {
  stroke: rgba(176, 106, 64, 0.35);
}

/* coming-soon sources read quieter than the live Gmail node: dimmer + a dashed
   outline. Purely presentational — does not touch the dots/wires/gate/animation. */
.node--soon {
  opacity: 0.5;
}

.node--soon rect {
  stroke-dasharray: 3 4;
}

/* wires */
.wire {
  stroke: rgba(243, 234, 216, 0.16);
  stroke-width: 1.4;
}

.wire--pass {
  stroke: rgba(245, 199, 121, 0.4);
  stroke-width: 1.6;
  stroke-dasharray: 5 7;
  animation: dash 2.4s linear infinite;
}

.wires--in .wire {
  stroke-dasharray: 4 8;
  animation: dash 3s linear infinite;
}

@keyframes dash {
  to {
    stroke-dashoffset: -48;
  }
}

/* gate */
.gate__ring {
  fill: none;
  stroke: var(--amber);
}

.gate__ring--outer {
  stroke-width: 1.4;
  stroke-dasharray: 3 6;
  transform-origin: center;
  animation: spin 28s linear infinite;
  opacity: 0.7;
  will-change: transform;
}

.gate__ring--inner {
  stroke-width: 1.8;
  stroke: var(--amber-bright);
  opacity: 0.9;
}

.gate__owl {
  filter: drop-shadow(0 0 10px rgba(245, 199, 121, 0.5));
}

.gate__glow {
  animation: breathe 4.5s var(--ease) infinite;
  will-change: opacity;
}

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

@keyframes breathe {
  0%,
  100% {
    opacity: 0.55;
  }
  50% {
    opacity: 1;
  }
}

/* flowing email dots */
.dot {
  /* No filter on a moving element: a drop-shadow forces the browser to recompute
     the filter region every frame as the dot translates — the main source of jank.
     `will-change` promotes each dot to its own GPU compositor layer so the motion
     stays on the compositor thread (60fps). The soft "glow" now comes from the dot's
     radial-gradient fill (paint-once, travels with the layer) instead of a filter. */
  will-change: transform, opacity;
}

.dot--pass {
  fill: url(#dot-amber);
  /* Stream from Gmail (the live source, top-right) into the gate, then fan out to one
     agent (per-dot `--ty`) as a match — turning sage when it crosses. `backwards` + a
     per-dot delay holds each dot hidden at Gmail until its turn; `linear` keeps a
     constant velocity so the stream reads as smooth, even flow. */
  animation: flow-pass 4s linear infinite backwards;
}

/* four matches, one per agent output wire (y = 70 / 163 / 257 / 350), evenly staggered */
.dot--p1 {
  --ty: 70px;
  animation-delay: 0s;
}
.dot--p2 {
  --ty: 163px;
  animation-delay: 1s;
}
.dot--p3 {
  --ty: 257px;
  animation-delay: 2s;
}
.dot--p4 {
  --ty: 350px;
  animation-delay: 3s;
}

.dot--hold {
  fill: url(#dot-hold);
  /* one item from Gmail that doesn't match: held at the gate and faded (never crosses) */
  animation: flow-hold 4s linear infinite backwards;
  animation-delay: 1.5s;
}

@keyframes flow-pass {
  0% {
    transform: translate(430px, 120px); /* Gmail, top-right */
    opacity: 0;
    fill: url(#dot-amber);
  }
  10% {
    opacity: 1;
  }
  48% {
    transform: translate(260px, 210px); /* the gate */
    fill: url(#dot-amber);
  }
  58% {
    fill: url(#dot-sage); /* crosses → match */
  }
  90% {
    opacity: 1;
  }
  100% {
    transform: translate(96px, var(--ty, 163px)); /* fan out to this dot's agent */
    opacity: 0;
    fill: url(#dot-sage);
  }
}

@keyframes flow-hold {
  0% {
    transform: translate(430px, 120px); /* Gmail, same source */
    opacity: 0;
  }
  12% {
    opacity: 1;
  }
  48% {
    transform: translate(258px, 206px); /* reaches the gate */
    opacity: 1;
  }
  64% {
    transform: translate(250px, 250px) scale(0.55); /* held at the gate, fades */
    opacity: 0;
  }
  100% {
    transform: translate(250px, 250px) scale(0.55);
    opacity: 0;
  }
}

.connector__legend {
  position: absolute;
  left: 0.9rem;
  bottom: 0.8rem;
  display: flex;
  gap: 1rem;
  margin: 0;
  padding: 0;
  list-style: none;
  font-family: var(--font-mono);
  font-size: 0.66rem;
  letter-spacing: 0.03em;
  color: var(--paper-faint);
  text-transform: uppercase;
}

.connector__legend li {
  display: inline-flex;
  align-items: center;
  gap: 0.4em;
}

.swatch {
  width: 9px;
  height: 9px;
  border-radius: 50%;
}

.swatch--pass {
  background: var(--pass);
  box-shadow: 0 0 6px var(--pass);
}

.swatch--hold {
  background: var(--hold);
}

.connector__cap {
  margin-top: 1rem;
  font-size: 0.86rem;
  color: var(--paper-faint);
  text-align: center;
  font-style: italic;
  font-family: var(--font-display);
}

/* ============================================================
   WORKS-WITH STRIP — colourful source logos under the hero
   ============================================================ */
.works-with {
  position: relative;
  z-index: 1;
  margin-top: clamp(2.5rem, 1.5rem + 4vw, 4.5rem);
  padding-top: clamp(1.75rem, 1rem + 2vw, 2.5rem);
  border-top: 1px solid var(--hairline-soft);
  text-align: center;
}

.works-with__label {
  font-family: var(--font-mono);
  font-size: 0.72rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--paper-faint);
  margin-bottom: clamp(1.4rem, 1rem + 1.5vw, 2.2rem);
}

.works-with__row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: flex-start;
  gap: clamp(1.5rem, 0.8rem + 3.5vw, 3.5rem) clamp(1.75rem, 1rem + 4vw, 4rem);
  margin: 0;
  padding: 0;
  list-style: none;
}

.works-with__item {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 0.55rem;
  min-width: 4.5rem;
}

.works-with__item--soon {
  opacity: 0.55;
}

.works-with__glyph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.works-with__item--soon .works-with__glyph {
  /* gentle "soon" treatment: slightly desaturated so live Gmail pops */
  filter: saturate(0.78);
}

.works-with__name {
  font-family: var(--font-mono);
  font-size: 0.78rem;
  letter-spacing: 0.03em;
  color: var(--paper-dim);
}

.works-with__tag {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  font-family: var(--font-mono);
  font-size: 0.6rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--paper-faint);
}

.works-with__tag--live {
  color: var(--pass);
}

.works-with__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--pass);
  box-shadow: 0 0 0 0 rgba(159, 197, 155, 0.6);
  animation: pulse 2.6s var(--ease) infinite;
}

/* ============================================================
   SHARED SECTION SCAFFOLD
   ============================================================ */
.section {
  padding-block: clamp(4.5rem, 2.5rem + 7.5vw, 9rem);
  position: relative;
}

.section + .section {
  border-top: 1px solid var(--hairline-soft);
}

.section-head {
  max-width: 46rem;
  margin-bottom: clamp(3rem, 2rem + 2.8vw, 4.75rem);
}

.section-kicker {
  font-family: var(--font-mono);
  font-size: 0.74rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--amber);
  margin-bottom: 0.9rem;
}

.section-title {
  font-size: clamp(2.05rem, 1.35rem + 3vw, 3.3rem);
  font-weight: 500;
}

.section-lede {
  margin-top: 1.3rem;
  max-width: 42rem;
  font-size: clamp(1.05rem, 1rem + 0.35vw, 1.2rem);
  line-height: 1.7;
  color: var(--paper-dim);
}

.section-lede em,
.hero-sub em {
  font-style: italic;
  color: var(--paper);
}

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

/* ============================================================
   HOW IT WORKS — steps + boundary
   ============================================================ */
.steps {
  list-style: none;
  margin: 0 0 clamp(3rem, 2rem + 3.5vw, 5rem);
  padding: 0;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: clamp(1.5rem, 1rem + 1.6vw, 2.25rem);
  counter-reset: step;
}

.step {
  position: relative;
  padding: clamp(1.9rem, 1.5rem + 1vw, 2.5rem) clamp(1.6rem, 1.2rem + 1vw, 2.1rem);
  border: 1px solid var(--hairline);
  border-radius: var(--radius-lg);
  background: linear-gradient(180deg, var(--ink-800), var(--ink-850));
  box-shadow: var(--shadow-card);
  transition:
    border-color 0.2s var(--ease),
    box-shadow 0.2s var(--ease);
}

.step__num {
  font-family: var(--font-mono);
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--amber);
  letter-spacing: 0.05em;
}

.step__title {
  font-size: 1.4rem;
  margin-top: 0.6rem;
}

.step__body {
  margin-top: 0.7rem;
  color: var(--paper-dim);
  font-size: 0.97rem;
}

.step__body strong,
.step__body em {
  color: var(--paper);
}

.step__body em {
  font-style: italic;
}

/* boundary diagram */
.boundary {
  margin: 0;
}

.boundary__frame {
  position: relative;
  border: 1.5px dashed rgba(245, 199, 121, 0.4);
  border-radius: var(--radius);
  padding: clamp(2.5rem, 1.8rem + 2vw, 3.2rem) clamp(1.25rem, 0.8rem + 2vw, 2.5rem) clamp(1.5rem, 1rem + 1.5vw, 2rem);
  background: radial-gradient(120% 140% at 50% 0%, rgba(245, 199, 121, 0.05), transparent 60%);
}

.boundary__label {
  position: absolute;
  top: -0.8rem;
  left: 1.5rem;
  font-family: var(--font-mono);
  font-size: 0.7rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--amber-bright);
  background: var(--ink-850);
  padding: 0.2rem 0.7rem;
  border-radius: 999px;
  border: 1px solid rgba(245, 199, 121, 0.3);
}

.boundary__flow {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.5rem 0.6rem;
  justify-content: center;
}

.chip {
  font-family: var(--font-mono);
  font-size: 0.86rem;
  padding: 0.5em 0.9em;
  border-radius: var(--radius-sm);
  border: 1px solid var(--hairline);
  background: rgba(243, 234, 216, 0.04);
  color: var(--paper-dim);
}

.chip--src {
  border-color: rgba(176, 106, 64, 0.4);
  color: var(--paper);
}

.chip--gate {
  border-color: var(--amber);
  color: var(--amber-bright);
  background: rgba(245, 199, 121, 0.08);
  box-shadow: 0 0 24px -8px rgba(245, 199, 121, 0.6);
}

.arrow {
  color: var(--amber);
  font-size: 1.1rem;
}

.boundary__outcomes {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.75rem 2rem;
  margin-top: 1.75rem;
  padding-top: 1.5rem;
  border-top: 1px solid var(--hairline-soft);
}

.outcome {
  font-size: 0.95rem;
  display: inline-flex;
  align-items: center;
  gap: 0.5em;
}

.outcome--pass {
  color: var(--pass);
}

.outcome--hold {
  color: var(--paper-faint);
}

.boundary__cap {
  margin-top: 1.1rem;
  text-align: center;
  font-size: 0.85rem;
  color: var(--paper-faint);
  font-family: var(--font-mono);
}

/* ============================================================
   CONNECTORS GRID
   ============================================================ */
.grid {
  display: grid;
  gap: clamp(1.25rem, 0.9rem + 1.2vw, 1.85rem);
}

.grid--connectors {
  list-style: none;
  margin: 0;
  padding: 0;
  grid-template-columns: repeat(4, 1fr);
}

.card {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
  padding: clamp(1.6rem, 1.25rem + 1vw, 2.1rem) clamp(1.5rem, 1.2rem + 0.9vw, 1.9rem);
  border: 1px solid var(--hairline);
  border-radius: var(--radius-lg);
  background: linear-gradient(180deg, var(--ink-800), var(--ink-850));
  box-shadow: var(--shadow-card);
  transition:
    border-color 0.2s var(--ease),
    box-shadow 0.2s var(--ease);
}

.card--connector:hover {
  border-color: rgba(245, 199, 121, 0.34);
  box-shadow: var(--shadow-card-hover);
}

.card__mark {
  color: var(--amber-bright);
  display: inline-flex;
  width: 48px;
  height: 48px;
  align-items: center;
  justify-content: center;
  border-radius: 13px;
  border: 1px solid var(--hairline);
  background: rgba(245, 199, 121, 0.06);
}

/* brand glyphs sit on a neutral parchment-tinted tile so their own colour reads
   true (no amber border tint fighting the logo) */
.card__mark--brand {
  color: inherit;
  border-color: var(--hairline-soft);
  background: rgba(243, 234, 216, 0.05);
}

.card__title {
  font-size: 1.2rem;
  margin-top: 0.35rem;
}

.card__body {
  font-size: 0.9rem;
  color: var(--paper-dim);
  flex: 1;
}

.card .pill {
  align-self: flex-start;
  margin-top: 0.35rem;
}

.card--more {
  background: repeating-linear-gradient(
    135deg,
    rgba(245, 199, 121, 0.03),
    rgba(245, 199, 121, 0.03) 10px,
    transparent 10px,
    transparent 20px
  );
  border-style: dashed;
}

/* ============================================================
   VISION / ROADMAP
   ============================================================ */
.roadmap {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: clamp(1.25rem, 0.9rem + 1.2vw, 1.85rem);
}

.phase {
  position: relative;
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
  padding: clamp(1.75rem, 1.4rem + 1vw, 2.25rem) clamp(1.5rem, 1.2rem + 0.9vw, 1.9rem);
  border: 1px solid var(--hairline);
  border-radius: var(--radius-lg);
  background: linear-gradient(180deg, var(--ink-800), var(--ink-850));
  box-shadow: var(--shadow-card);
  transition:
    border-color 0.2s var(--ease),
    box-shadow 0.2s var(--ease);
}

.phase:hover {
  border-color: rgba(245, 199, 121, 0.3);
  box-shadow: var(--shadow-card-hover);
}

.phase--now {
  border-color: rgba(159, 197, 155, 0.34);
  background: linear-gradient(180deg, rgba(159, 197, 155, 0.08), var(--ink-850));
}

.phase--star {
  border-color: rgba(245, 199, 121, 0.4);
  background: linear-gradient(180deg, rgba(245, 199, 121, 0.09), var(--ink-850));
}

/* gentle hover lift for all elevated cards — transform only under motion-OK, so
   reduced-motion users keep the border/shadow cue but no movement. */
@media (prefers-reduced-motion: no-preference) {
  .step,
  .card--connector,
  .phase {
    transition:
      transform 0.2s var(--ease),
      border-color 0.2s var(--ease),
      box-shadow 0.2s var(--ease);
  }

  .step:hover,
  .card--connector:hover,
  .phase:hover {
    transform: translateY(-2px);
  }
}

.phase__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  flex-wrap: wrap;
}

.phase__h {
  font-family: var(--font-mono);
  font-size: 0.74rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--amber);
}

.phase--now .phase__h {
  color: var(--pass);
}

.phase__title {
  font-size: 1.3rem;
  margin-top: 0.4rem;
}

.phase__body {
  font-size: 0.92rem;
  color: var(--paper-dim);
}

.phase__body--star {
  font-family: var(--font-display);
  font-style: italic;
  font-size: 1.02rem;
  color: var(--paper);
}

.phase__body strong {
  color: var(--paper);
}

/* ============================================================
   FOOTER
   ============================================================ */
.site-footer {
  border-top: 1px solid var(--hairline);
  background: linear-gradient(180deg, transparent, rgba(11, 10, 8, 0.6));
  padding-block: clamp(2.5rem, 1.5rem + 3vw, 4rem) 1.75rem;
}

.footer-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 2.5rem;
  justify-content: space-between;
  align-items: flex-start;
}

.footer-brand {
  max-width: 28rem;
}

.footer-tag {
  margin-top: 1rem;
  color: var(--paper-dim);
  font-size: 0.96rem;
}

.footer-tag strong {
  color: var(--amber-bright);
}

.footer-cta__lead {
  font-family: var(--font-display);
  font-size: 1.15rem;
  margin-bottom: 0.9rem;
}

.footer-cta__row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.7rem;
}

.footer-base {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 0.6rem 1.5rem;
  margin-top: clamp(2rem, 1.5rem + 2vw, 3rem);
  padding-top: 1.5rem;
  border-top: 1px solid var(--hairline-soft);
}

.footer-note {
  font-size: 0.8rem;
  color: var(--paper-faint);
}

.footer-note--mono {
  font-family: var(--font-mono);
  letter-spacing: 0.02em;
}

/* ============================================================
   PAGE-LOAD STAGGER (decorative; disabled w/ reduced motion)
   ============================================================ */
.hero-copy > *,
.hero-visual {
  animation: rise 0.8s var(--ease) both;
}

.hero-copy .eyebrow {
  animation-delay: 0.05s;
}
.hero-copy .hero-title {
  animation-delay: 0.12s;
}
.hero-copy .hero-sub {
  animation-delay: 0.22s;
}
.hero-copy .waitlist {
  animation-delay: 0.32s;
}
.hero-copy .hero-tagline {
  animation-delay: 0.4s;
}
.hero-visual {
  animation-delay: 0.3s;
}

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

/* reveal-on-scroll for sections (JS toggles .is-in) */
.section-head,
.step,
.card,
.phase,
.boundary {
  --reveal-delay: 0ms;
}

@media (prefers-reduced-motion: no-preference) {
  .js .reveal {
    opacity: 0;
    transform: translateY(22px);
    transition:
      opacity 0.7s var(--ease),
      transform 0.7s var(--ease);
    transition-delay: var(--reveal-delay);
  }

  .js .reveal.is-in {
    opacity: 1;
    transform: none;
  }
}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 960px) {
  .hero {
    min-height: 0;
  }

  .hero-grid {
    grid-template-columns: 1fr;
  }

  .hero-visual {
    order: -1;
    max-width: 560px;
    margin-inline: auto;
    width: 100%;
  }

  .steps {
    grid-template-columns: 1fr;
  }

  .grid--connectors {
    grid-template-columns: repeat(2, 1fr);
  }

  .roadmap {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 720px) {
  .site-nav {
    display: none;
  }

  .header-actions .btn__sub {
    display: none;
  }

  .header-inner {
    gap: 0.75rem;
  }

  .pill--status {
    display: none;
  }
}

@media (max-width: 560px) {
  .grid--connectors,
  .roadmap {
    grid-template-columns: 1fr;
  }

  .waitlist__row {
    flex-direction: column;
  }

  .waitlist__row .btn {
    justify-content: center;
  }

  .footer-base {
    flex-direction: column;
  }
}

/* ============================================================
   REDUCED MOTION — disable all animation, show static state
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }

  /* static composed state for the connector graphic — fully freeze the
     dots/rings (don't rely on a near-zero animation landing well) */
  .dot,
  .gate__ring--outer,
  .gate__glow,
  .wire--pass,
  .wires--in .wire {
    animation: none !important;
  }

  .wire--pass,
  .wires--in .wire {
    stroke-dasharray: none;
  }

  /* one held dot parked just shy of the gate, faded */
  .dot--hold {
    transform: translate(250px, 246px) scale(0.7);
    opacity: 0.55;
  }

  /* matches shown as a static trail fanning from the gate toward the agents */
  .dot--pass {
    fill: url(#dot-sage);
    opacity: 0.9;
  }
  .dot--p1 {
    transform: translate(175px, 150px);
  }
  .dot--p2 {
    transform: translate(150px, 198px);
  }
  .dot--p3 {
    transform: translate(190px, 244px);
  }
  .dot--p4 {
    display: none;
  }

  .gate__glow {
    opacity: 0.85;
  }
}
