@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,400;0,500;0,600;0,700;0,800;1,700;1,800&display=swap');

:root {
  /* off-white, not cream */
  --paper:      #F4F4F1;
  --paper-2:    #EAEAE5;
  --paper-3:    #DCDCD5;
  --ink:        #11140F;
  --ink-2:      #3C423A;
  --ink-3:      #6E7569;

  --slab-line:  rgba(255,255,255,.15);
  --pop:        #7FE9FF;   /* the accent on the blue slab */
  --logo:       #5B6058;   /* the one grey every brand mark gets */
  --amber:      #FFB020;
  --amber-bg:   #FFF4DC;

  /* the fun: a blue, an orange and a green, each with a gloss on top */
  --grad-blue:   linear-gradient(180deg, #F0F3FA, #D1DCF1 22%, #99B1E0 56%, #6B8ED2);
  --grad-orange: linear-gradient(180deg, #FFF0D2, #FFD88A 24%, #FFB020 60%, #F59412);
  --grad-green:  linear-gradient(180deg, #E0F7EB, #A9E8C9 24%, #3FC48E 60%, #16956A);
  --grad-lav:    linear-gradient(180deg, #F4ECFF, #E3D2FE 28%, #C4A3FB 70%, #A87CF5);
  --brand:       #003DB2;   /* sampled from the logo; every blue is keyed to it */
  --blue-ink:    #001744;
  --blue-edge:   #4773C8;
  --edgebar: linear-gradient(90deg, var(--brand), #2B6EF0 38%, #5FA8E8 68%, var(--pop));

  --sans:  "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;
  --mono:  ui-monospace, "SF Mono", Menlo, monospace;

  --gut: clamp(20px, 5vw, 56px);
  --max: 1240px;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body {
  font-family: var(--sans);
  background-color: var(--paper);
  background-image: radial-gradient(rgba(17,20,15,.12) 1px, transparent 1.3px);
  background-size: 23px 23px;
  color: var(--ink);
  font-size: 16px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}
a { color: inherit; text-decoration: none; }
:focus-visible { outline: 2px solid var(--amber); outline-offset: 3px; border-radius: 4px; }

.wrap { max-width: var(--max); margin: 0 auto; padding: 0 var(--gut); }

/* ── display type ────────────────────────────────────────────── */

.d1, .d2, .d3 {
  font-family: var(--sans); font-weight: 800;
  letter-spacing: -.035em; line-height: 1.02;
}
.d1 { font-size: clamp(42px, 5.6vw, 74px); }
.d2 { font-size: clamp(32px, 4.2vw, 54px); }
.d3 { font-size: clamp(27px, 3.1vw, 40px); }
.d1 em, .d2 em, .d3 em { font-style: italic; }

.eyebrow { font-size: 11px; font-weight: 600; letter-spacing: .16em;
           text-transform: uppercase; color: var(--ink-3); }
.lede { font-size: clamp(16px, 1.3vw, 18px); color: var(--ink-2); max-width: 48ch; }

/* the highlighter — the product's own gesture, used on words */
.hl { background: linear-gradient(180deg, transparent 54%, rgba(255,176,32,.45) 54%);
      padding: 0 .1em; border-radius: 2px; }
.slab .hl, .close .hl { background: linear-gradient(180deg, transparent 54%, rgba(255,176,32,.32) 54%); }

/* keycaps — ⌥T is the whole interaction, so it gets to look like a key */
kbd { font-family: var(--sans); font-size: .82em; font-weight: 700; line-height: 1.5;
      display: inline-block; padding: 1px 6px; margin: 0 1px; border-radius: 5px;
      background: #fff; color: var(--ink);
      border: 1px solid rgba(17,20,15,.24); box-shadow: 0 1.5px 0 rgba(17,20,15,.2); }
.slab kbd, .close kbd, .voicebar kbd, .subs kbd {
      background: rgba(255,255,255,.16); color: #fff;
      border-color: rgba(255,255,255,.3); box-shadow: 0 1.5px 0 rgba(0,0,0,.35); }

/* ── buttons ─────────────────────────────────────────────────── */

.btn {
  display: inline-flex; align-items: center; gap: 10px;
  font: inherit; font-size: 15px; font-weight: 600;
  padding: 13px 24px; border-radius: 999px; border: 1px solid var(--blue-edge);
  background: var(--grad-blue); color: var(--blue-ink); cursor: pointer;
  transition: transform .18s ease, filter .18s ease;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.95),
              inset 0 -10px 16px rgba(255,255,255,.45),
              0 1px 0 rgba(17,20,15,.06),
              0 10px 24px rgba(0,61,178,.24);
}
.btn:hover { filter: brightness(1.05) saturate(1.05); transform: translateY(-1px); }
.btn.sm { padding: 10px 18px; font-size: 14px; }
.btn.lg { padding: 16px 30px; font-size: 16.5px; }
/* the Chrome glyph is inlined and inherits the button's ink via currentColor */
.btn svg, .btn img { flex: none; display: block; }
.btn svg { width: 18px; height: 18px; }
.btn.sm svg { width: 16px; height: 16px; }
.btn .chev { opacity: .5; }

/* ── nav ─────────────────────────────────────────────────────── */

header.nav { position: sticky; top: 14px; z-index: 60; padding: 0 var(--gut); margin-top: 14px; }
.navbar {
  max-width: 1120px; margin: 0 auto;
  display: flex; align-items: center; gap: 28px;
  padding: 10px 10px 10px 20px;
  background: rgba(244,244,241,.86);
  backdrop-filter: blur(14px) saturate(1.4);
  border: 1px solid rgba(17,20,15,.13);
  border-radius: 16px;
}
.brand { display: flex; align-items: center; }
.brand img { display: block; height: 23px; width: auto; }
/* the mark is dark blue; reversed out for the near-black footer */
.brand.rev img { filter: brightness(0) invert(1); height: 21px; }
.navlinks { display: flex; flex-wrap: nowrap; white-space: nowrap;
            gap: 26px; margin-left: auto; font-size: 14.5px;
            font-weight: 500; color: var(--ink-2); }
.navlinks a:hover { color: var(--ink); }

/* the waveform mark, reused at several sizes */
.wave { display: flex; align-items: center; gap: 2px; height: 1em; }
.wave i { width: 2.5px; border-radius: 2px; background: currentColor; display: block;
          animation: bob 1.5s ease-in-out infinite; }
.wave i:nth-child(1){ height:38%; animation-delay:0s }
.wave i:nth-child(2){ height:72%; animation-delay:.12s }
.wave i:nth-child(3){ height:100%; animation-delay:.24s }
.wave i:nth-child(4){ height:60%; animation-delay:.36s }
.wave i:nth-child(5){ height:88%; animation-delay:.48s }
.wave i:nth-child(6){ height:44%; animation-delay:.6s }
@keyframes bob { 0%,100% { transform: scaleY(.55) } 50% { transform: scaleY(1) } }
@media (prefers-reduced-motion: reduce) { .wave i { animation: none } }

/* ── floating stickers ───────────────────────────────────────── */

.stickers { position: absolute; inset: 0; pointer-events: none; z-index: 0; }
.sticker {
  position: absolute; left: var(--x); top: var(--y);
  transform: translate(-50%,-50%) rotate(var(--r));
  animation: drift 7.5s ease-in-out infinite; animation-delay: var(--d, 0s);
}
@keyframes drift { 50% { transform: translate(-50%, calc(-50% - 10px)) rotate(var(--r)); } }
@media (prefers-reduced-motion: reduce) { .sticker, .slabsticker, .ask { animation: none } }

.sticker.win, .slabsticker { width: 118px; }
.sticker .bar, .slabsticker .bar, .frame .bar, .heroframe .bar {
  display: flex; gap: 3.5px; padding: 5px 7px;
  background: linear-gradient(#fff, #E7E7E7 42%, #FBFBFB);
  border: 1px solid rgba(17,20,15,.2); border-bottom: 0; border-radius: 8px 8px 0 0; }
.sticker .bar u, .slabsticker .bar u, .frame .bar u, .heroframe .bar u {
  width: 6px; height: 6px; border-radius: 50%; display: block; text-decoration: none; }
.sticker .bar u:nth-child(1), .slabsticker .bar u:nth-child(1), .frame .bar u:nth-child(1), .heroframe .bar u:nth-child(1) { background: #FF5F57 }
.sticker .bar u:nth-child(2), .slabsticker .bar u:nth-child(2), .frame .bar u:nth-child(2), .heroframe .bar u:nth-child(2) { background: #FEBC2E }
.sticker .bar u:nth-child(3), .slabsticker .bar u:nth-child(3), .frame .bar u:nth-child(3), .heroframe .bar u:nth-child(3) { background: #28C840 }
.sticker .scr, .slabsticker .scr {
  border: 1px solid rgba(17,20,15,.2); border-radius: 0 0 8px 8px; background: #fff;
  padding: 10px; font-size: 11px; line-height: 1.4; color: var(--ink);
  box-shadow: 0 10px 22px rgba(17,20,15,.14); }
.sticker .scr b { font-weight: 700 }
.sticker .scr em, .slabsticker .scr em {
  display: block; font-style: normal; font-family: var(--mono);
  font-size: 9px; color: var(--ink-3); margin-top: 4px; }
.sticker .scr .big, .slabsticker .scr .big {
  display: block; font-weight: 800; font-size: 17px; line-height: 1.1; margin-top: 2px; }
.sticker .cap { display: block; text-align: center; margin-top: 6px;
  font-family: var(--mono); font-size: 9px; color: var(--ink-3); }
.sticker.emo { font-family: var(--mono); font-size: 14px; color: var(--ink-2);
  background: #fff; border: 1px solid rgba(17,20,15,.16); border-radius: 9px;
  padding: 8px 11px; white-space: nowrap; box-shadow: 0 8px 18px rgba(17,20,15,.09); }

/* ── hero ────────────────────────────────────────────────────── */

.hero { position: relative; padding: clamp(48px, 8vw, 92px) 0 0; }
.hero > .wrap, .hero > .bubbles, .hero > .platforms { position: relative; z-index: 1; }
.hero-grid {
  display: grid; grid-template-columns: minmax(0,0.94fr) minmax(0,1.06fr);
  gap: clamp(28px, 4vw, 60px); align-items: center;
}
.hero h1 { margin: 16px 0 20px; }
.hero .lede { margin-bottom: 30px; }
.avail { margin-top: 14px; font-size: 13px; color: var(--ink-3); }

/* the market page, with Telly's marks on it */
/* the hero image carries its own perspective and glow — no stage transform */
.device-stage { padding-bottom: 8px; position: relative; }
/* the same mac-window chrome the stickers use, at hero size */
.heroframe { border-radius: 14px; overflow: hidden; background: #0F1317;
             border: 1px solid rgba(17,20,15,.22);
             box-shadow: 0 26px 54px rgba(17,20,15,.26); }
.heroframe .bar { border-radius: 13px 13px 0 0; padding: 8px 11px; gap: 5px; }
.heroframe .bar u { width: 9px; height: 9px; }
.heroshot { display: block; width: 100%; height: auto; }
.device {
  transform: rotateY(-13deg) rotateX(3.5deg) rotate(1.2deg);
  transform-style: preserve-3d; position: relative;
  filter: drop-shadow(0 32px 60px rgba(17,20,15,.2));
}
.book { background: #0F1317; border-radius: 14px; overflow: hidden;
        border: 1px solid #262c33; color: #D6DCE4; font-size: 13px; }
.book-top { display: flex; align-items: center; gap: 12px; padding: 11px 14px;
            border-bottom: 1px solid #1d2329; background: #12171c; }
.book-top .bmark { display: flex; align-items: center; gap: 7px; font-weight: 700;
                   font-size: 12.5px; letter-spacing: -.02em; color: #fff; white-space: nowrap; }
.book-top .bmark span { width: 14px; height: 14px; border-radius: 4px; background: var(--amber); }
.book-top nav { display: flex; gap: 14px; font-size: 11.5px; color: #78828f; }
.book-top nav b { color: #fff; font-weight: 600; }

.book-main { padding: 15px 16px 14px; }
.book-main h4 { font-size: 16px; font-weight: 700; letter-spacing: -.02em; color: #fff; }
.book-tabs { display: flex; gap: 6px; margin: 10px 0 14px; }
.book-tabs span { font-size: 11px; padding: 4px 10px; border-radius: 999px;
                  background: #1b2229; color: #78828f; }
.book-tabs span.on { background: #2b333c; color: #fff; }

/* the bracket is the line it draws between the two contracts */
.brows { position: relative; padding-left: 24px; }
.brows::before { content: ''; position: absolute; left: 0; top: 18px; height: 87px; width: 14px;
  border: 2px solid var(--amber); border-right: 0; border-radius: 9px 0 0 9px; }
.brow { display: grid; grid-template-columns: 1fr 48px 30px; gap: 10px; align-items: center;
  padding: 9px 11px; margin-bottom: 6px; border-radius: 8px;
  background: #161b21; border: 1px solid #242a31; font-size: 12.5px; }
.brow:last-child { margin-bottom: 0 }
.brow .rl { color: #fff }
.brow .rq { font-family: var(--mono); font-size: 12px; text-align: right; color: #fff }
.brow .rd { font-family: var(--mono); font-size: 10.5px; text-align: right; color: #7c8591 }
.brow .rd.up { color: #4ADE9B } .brow .rd.dn { color: #FF8585 }
.brow.marked { border-color: var(--amber); background: rgba(255,176,32,.14);
               box-shadow: 0 0 0 3px rgba(255,176,32,.14); }

/* it subtitles what it just said — there is no dialogue box */
.subs { display: flex; gap: 10px; align-items: flex-start; padding: 12px 15px;
        background: #090C0F; border-top: 1px solid #1d2329; }
.subs .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--amber);
             margin-top: 5px; flex: none; box-shadow: 0 0 0 4px rgba(255,176,32,.18); }
.subs p { font-size: 12px; line-height: 1.55; color: #D2D8DF; }
.subs p b { color: #FFCB63; font-weight: 600; }
.health { display: flex; align-items: center; gap: 6px; padding: 7px 15px 9px;
          background: #090C0F; border-top: 1px solid #14181d;
          font-family: var(--mono); font-size: 9.5px; color: #5d6670; }
.health i { width: 6px; height: 6px; border-radius: 50%; background: #28C840; }

.anno { position: absolute; right: 13%; bottom: -58px;
        display: flex; align-items: flex-end; gap: 6px;
        font-style: italic; font-weight: 600; font-size: 15px;
        color: var(--ink-2); line-height: 1.15; text-align: right; }
.anno span { white-space: nowrap; }
.anno svg { display: block; color: var(--ink-3); margin-bottom: 2px; }

/* ── the questions, as a field of bubbles ────────────────────── */

.bubbles { position: relative; height: 520px; margin-top: 30px; }

/* ── one question ────────────────────────────────────────────────
   who asked / the question / what came back. The tint lives on .ask rather
   than on the bubble because the glow, the tail and the speed lines all need
   the same hue, and three places reading one variable beats three classes. */
.ask {
  position: absolute; left: var(--x); top: var(--y);
  transform: translate(-50%,-50%) rotate(var(--r));
  animation: drift 8.5s ease-in-out infinite; animation-delay: var(--d, 0s);
  display: flex; flex-direction: column; align-items: flex-start;
}
.ask.blue   { --g1:#EEF4FE; --g2:#C6D8F8; --edge:#8FB0EA; --deep:#14307C; --glow:79,124,216; }
.ask.lav    { --g1:#F6ECFE; --g2:#E0CBFB; --edge:#BB9CF2; --deep:#4A2178; --glow:150,100,230; }
.ask.orange { --g1:#FFF5E2; --g2:#FFD795; --edge:#F2B14C; --deep:#6B3E00; --glow:240,160,40; }
.ask.green  { --g1:#E9FAF1; --g2:#ACEBCA; --edge:#58C79A; --deep:#05503A; --glow:40,180,120; }
.ask.cyan   { --g1:#EAF8FC; --g2:#B8E6F3; --edge:#67C3DE; --deep:#07485C; --glow:40,165,200; }

/* ── who asked ── */
.who { display: flex; align-items: center; gap: 10px; margin: 0 0 9px 26px; }
.avs { display: flex; }
.av {
  width: 24px; height: 24px; border-radius: 50%; flex: none;
  display: block; object-fit: cover;
  /* -7px, not deeper: bury each face under the next and the row reads as smudges */
  border: 2px solid var(--paper); margin-left: -7px;
  background: var(--paper-2);        /* holds the circle while the png loads */
}
.av:first-child { margin-left: 0; }
.who b { font-weight: 500; font-size: 13px; letter-spacing: -.008em; color: var(--ink-3); }

/* ── the question ──
   Three shadows: a tight ring, a soft drop, and a wide ambient wash. The wash
   is what makes these sit in the page rather than on top of it. */
.bub {
  position: relative; z-index: 2;
  white-space: nowrap;              /* one line each, as in the design */
  padding: 13px 24px 14px; border-radius: 21px;
  font-size: 18px; font-weight: 600; letter-spacing: -.022em; line-height: 1.25;
  color: var(--deep);
  background: linear-gradient(170deg, var(--g1), var(--g2));
  border: 1px solid var(--edge);
  box-shadow: 0 0 0 7px rgba(var(--glow), .09),
              0 12px 26px -6px rgba(var(--glow), .42),
              0 0 54px rgba(var(--glow), .22),
              inset 0 1px 0 rgba(255,255,255,.85);
}
/* The tail points down into the pill below it.
   A rotated square shows all four of its edges, so the two bordered ones read
   as a diamond stuck on the bottom. A borderless triangle in the gradient's
   end colour has no silhouette at all; the extra 1px of height tucks under
   the bubble's own bottom border so there is no seam either. */
.bub::after { content: ''; position: absolute; left: 24px; bottom: -9px;
  width: 0; height: 0;
  border-left: 10px solid transparent; border-right: 10px solid transparent;
  border-top: 10px solid var(--g2); }

/* ── what came back ──
   Its own white pill, deliberately not inside the bubble: inside, an answer
   reads as more question. Tucked under the tail, it reads as the reply. */
.ans {
  position: relative; z-index: 1;
  display: flex; align-items: center; gap: 9px;
  margin: -3px 0 0 14px; padding: 11px 19px 11px 15px;
  border-radius: 999px; background: #fff;
  font-size: 14px; font-weight: 500; letter-spacing: -.008em; white-space: nowrap;
  color: var(--ink-2);
  box-shadow: 0 1px 0 rgba(17,20,15,.04),
              0 10px 24px -8px rgba(17,20,15,.18),
              0 0 36px rgba(var(--glow), .14);
}
.ans b { font-weight: 700; color: var(--ink); }
.ans .ic { font-style: normal; font-size: 15px; line-height: 1; flex: none; }

/* ── the speed lines ──
   They live inside .bub so they centre on the bubble itself. Anchored to the
   whole unit they sat low, pulled down by the answer pill underneath.

   The fan points INTO the bubble — a ">" on the left, a "<" on the right —
   so the strokes read as emphasis landing on the question rather than as
   something flying away from it. */
.zip { position: absolute; top: 50%; transform: translateY(-50%);
       display: flex; flex-direction: column; gap: 6px; }
.ask.l .zip { left: -36px; align-items: flex-end; }
.ask.r .zip { right: -36px; align-items: flex-start; }
.zip u { display: block; height: 3.5px; border-radius: 3px; background: var(--edge); }
.zip u:nth-child(1) { width: 14px; transform: rotate(26deg); }
.zip u:nth-child(2) { width: 21px; }
.zip u:nth-child(3) { width: 14px; transform: rotate(-26deg); }
.ask.r .zip u:nth-child(1) { transform: rotate(-26deg); }
.ask.r .zip u:nth-child(3) { transform: rotate(26deg); }

@media (prefers-reduced-motion: reduce) { .ask { animation: none; } }

/* ── where it runs ───────────────────────────────────────────── */

.platforms { padding: 28px 0 64px; text-align: center; }

/* scrolls left, fading out at both edges */
.marquee { margin-top: 26px; overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 11%, #000 89%, transparent);
          mask-image: linear-gradient(90deg, transparent, #000 11%, #000 89%, transparent); }
.marquee-track { display: flex; width: max-content; animation: slide 42s linear infinite; }
.marquee:hover .marquee-track { animation-play-state: paused; }
.marquee-set { display: flex; align-items: center; gap: clamp(44px, 5.5vw, 84px);
               padding-right: clamp(44px, 5.5vw, 84px); }
@keyframes slide { to { transform: translateX(-50%) } }
@media (prefers-reduced-motion: reduce) {
  .marquee-track { animation: none; justify-content: center; }
}

/* each item is either a wordmark or the brand's own file — same grey either way */
.logo { display: flex; align-items: center; height: 44px; white-space: nowrap;
        font-size: 21px; font-weight: 700; letter-spacing: -.03em; color: var(--logo); }
/* Balanced by ink area, not bounding box — a letterspaced wordmark at the same height
   as a compact one reads twice as loud. Heights = 26px x (geo-mean ink / own ink)^0.38,
   measured by rasterising each file and counting opaque pixels. Dampened from the pure
   equal-area 0.5 so the heavy marks don't shrink below legibility. */
.logo img[src$="kalshi.svg"] { height: 24.5px; }
.logo img[src$="polymarket.svg"] { height: 28px; }
.logo img[src$="draftkings.svg"] { height: 38px; }
.logo img[src$="fanduel.svg"] { height: 26.5px; }
.logo img[src$="espnbet.svg"] { height: 19.5px; }
.logo img[src$="caesars.svg"] { height: 23px; }
/* a set wordmark standing in for artwork we don't have */
/* set wordmarks standing in for artwork we don't have — see assets/logos/SOURCES.md */
.logo.wm { font-size: 24px; font-weight: 500; letter-spacing: .01em; }
.logo.wm b { font-weight: 800; }
.pinmark { display: inline-block; font-size: 20px; font-weight: 800;
           letter-spacing: -.005em; line-height: 1; padding-bottom: 4px;
           border-bottom: 2.5px solid currentColor; }
.pinmark i { font-style: normal; margin-left: -.11em; }   /* the A tucks under the N */
/* the prediction-market venues we have no artwork for yet: set in the page's own
   face, a touch quieter than the real marks so they don't shout over them. Drop a
   real SVG in and swap the span for an <img> — nothing else has to change. */
.logo.tx { font-size: 20px; font-weight: 700; letter-spacing: -.025em; }
.logo.tx b { font-weight: 800; }
.logo img { display: block; height: 26px; width: auto;
            /* flattens any artwork, colour or not, to one dark grey */
            filter: grayscale(1) brightness(0) invert(.36); }

.runnote { margin: 26px auto 0; max-width: 56ch; font-size: 13.5px; color: var(--ink-3); }

/* ── green slab ──────────────────────────────────────────────── */

.slab {
  position: relative;
  background-color: #102E63;
  background-image:
    radial-gradient(38% 44% at 10% 6%,  rgba(127,233,255,.24), transparent 70%),
    radial-gradient(42% 46% at 92% 88%, rgba(196,163,251,.24), transparent 70%),
    radial-gradient(46% 44% at 74% 4%,  rgba(97,135,207,.40), transparent 72%),
    radial-gradient(34% 34% at 30% 96%, rgba(255,176,32,.14),  transparent 70%),
    linear-gradient(168deg, #00369D, #00205D 58%, #001439);
  color: #EFF5F1;
  border-radius: clamp(28px, 3vw, 44px);
  margin: 0 var(--gut);
  padding: clamp(56px, 7vw, 92px) 0 clamp(56px, 7vw, 88px);
}
.slab .wrap { max-width: 1140px; }
.slab-head { text-align: center; max-width: 760px; margin: 0 auto 52px; }
.slab-head em { color: var(--pop); }
.slab-head p { color: rgba(239,245,241,.72); margin-top: 18px; font-size: 17px; }

/* a sticker straddling the top edge */
.slabsticker { position: absolute; right: clamp(28px, 7vw, 92px); top: -30px; z-index: 3;
  transform: rotate(7deg); animation: slabdrift 9s ease-in-out infinite; }
@keyframes slabdrift { 50% { transform: rotate(7deg) translateY(-9px) } }

.compare { display: grid; grid-template-columns: 1fr 1.25fr; gap: 18px; margin-bottom: 54px; }
.cmp { border: 1px solid var(--slab-line); border-radius: 20px; padding: 26px 24px 24px; }
.cmp .cap { font-size: 13px; color: rgba(239,245,241,.62); }
.cmp .big { font-weight: 800; letter-spacing: -.035em; font-size: clamp(30px, 3.4vw, 46px); line-height: 1.08;
            margin-top: 4px; }
/* a messy pile of tabs, not a tidy list */
.cmp.them .stack { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 24px; }
.cmp.them .stack span { font-size: 11px; padding: 6px 11px; border-radius: 7px;
  background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.18);
  color: rgba(239,245,241,.72); transform: rotate(var(--t)); }
.cmp.them .stack span:nth-child(1){--t:-3deg} .cmp.them .stack span:nth-child(2){--t:2deg}
.cmp.them .stack span:nth-child(3){--t:-1.5deg} .cmp.them .stack span:nth-child(4){--t:3deg}
.cmp.them .stack span:nth-child(5){--t:-2.5deg} .cmp.them .stack span:nth-child(6){--t:1.5deg}
.cmp.them .stack span:nth-child(7){--t:-2deg}
.cmp.us { background: linear-gradient(160deg, rgba(31,84,187,.58), rgba(17,48,104,.5));
          border-color: rgba(127,233,255,.34); }
.cmp.us .big { color: var(--pop); }
.cmp.us .shot { margin-top: 22px; background: rgba(0,0,0,.3); border-radius: 13px;
                border: 1px solid rgba(255,255,255,.12); padding: 14px 15px; }
.cmp.us .shot .q { font-size: 13px; color: rgba(239,245,241,.7); }
.cmp.us .shot .a { font-size: 14px; margin-top: 8px; line-height: 1.5; }
.cmp.us .shot .a b { color: var(--amber); font-weight: 600; }

.cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.card { border: 1px solid var(--slab-line); border-radius: 18px; padding: 22px 20px 24px;
        background: rgba(255,255,255,.04); transition: transform .2s ease, background .2s ease; }
.card:hover { transform: translateY(-4px); background: rgba(255,255,255,.08); }
.card .ico { width: 38px; height: 38px; border-radius: 12px; display: grid; place-items: center;
             color: #10213F; margin-bottom: 16px;
             box-shadow: inset 0 1px 0 rgba(255,255,255,.85), 0 5px 12px rgba(0,0,0,.24); }
.card h4 { font-size: 16px; font-weight: 600; letter-spacing: -.01em; }
.card p { font-size: 13.5px; line-height: 1.55; color: rgba(239,245,241,.68); margin-top: 7px; }

/* ── alternating feature rows ────────────────────────────────── */

.rows { padding: clamp(80px, 10vw, 128px) 0 clamp(40px, 6vw, 76px); position: relative; }
.rows::before {
  content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background:
    radial-gradient(44% 34% at 20% 2%, rgba(168,189,229,.55), transparent 70%),
    radial-gradient(40% 30% at 80% 0%, rgba(255,201,120,.46), transparent 70%),
    radial-gradient(46% 26% at 52% 10%, rgba(227,210,254,.38), transparent 72%);
}
.rows .wrap { position: relative; z-index: 1; }
.rows-head { text-align: center; max-width: 880px; margin: 0 auto clamp(56px, 7vw, 88px); }
.rows-head p { color: var(--ink-2); margin-top: 18px; font-size: 17px; }

.frow { display: grid; grid-template-columns: 180px minmax(0,1fr) 292px;
        gap: clamp(24px, 4vw, 56px); align-items: center;
        padding: clamp(36px, 5vw, 62px) 0; border-top: 1px solid rgba(17,20,15,.1); }
.frow .num { font-family: var(--mono); font-size: 12px; color: var(--ink-3); }
.frow .lab { font-size: 21px; font-weight: 700; letter-spacing: -.03em;
             line-height: 1.2; margin-top: 8px; }
.frow .desc { font-size: 14.5px; color: var(--ink-2); line-height: 1.6; }
.frow .desc b { color: var(--ink); font-weight: 600; }

.vis { background: var(--paper-2); border: 1px solid rgba(17,20,15,.1); border-radius: 18px;
       padding: 22px; box-shadow: 0 14px 34px rgba(17,20,15,.07); }
.vis.b { border-color: rgba(0,61,178,.26); box-shadow: 0 16px 36px rgba(0,61,178,.16); }
.vis.o { border-color: rgba(230,160,40,.4);  box-shadow: 0 16px 36px rgba(255,176,32,.22); }
.vis.g { border-color: rgba(22,149,106,.3);  box-shadow: 0 16px 36px rgba(22,149,106,.17); }

/* ── Telly's marks, as the extension draws them ───────────────────
   INK.point #2b6ef0 on a gradient, white halo underneath, round caps,
   drawn on with a stagger. Lifted from extension/overlay.css. */

.markfx { display: block; width: 100%; height: auto; }
.markfx .board rect { fill: #fff; stroke: rgba(17,20,15,.12); }
.markfx .board .lit { fill: #cfe0fb; stroke: #9dbef5; }
.markfx.good .board .lit { fill: #cdeedf; stroke: #86cfae; }
.markfx .rl { font: 500 13px var(--sans); fill: var(--ink); }
.markfx .rq { font: 12px var(--mono); fill: var(--ink-2); text-anchor: end; }

.markfx .ink path { fill: none; stroke-linecap: round; stroke-linejoin: round; }
.markfx .halo  { stroke: rgba(255,255,255,.92); stroke-width: 7; }
.markfx .draw  { stroke: url(#tink); stroke-width: 2.6;
                 stroke-dasharray: 100; stroke-dashoffset: 100;
                 animation: markdraw 7s ease-in-out infinite; }
.markfx.good .draw { stroke: #0a9d68; }
.markfx .d2 { animation-delay: .09s } .markfx .d3 { animation-delay: .18s }
.markfx .d4 { animation-delay: .5s }
@keyframes markdraw {
  0%        { stroke-dashoffset: 100 }
  14%, 84%  { stroke-dashoffset: 0 }
  96%, 100% { stroke-dashoffset: 100 }
}

/* the white chip the label sits on */
.markfx .chip rect { fill: rgba(255,255,255,.97); stroke: #2b6ef0; stroke-width: 1.2; }
.markfx.good .chip rect { stroke: #0a9d68; }
.markfx .chip text { font: 600 12.5px var(--mono); fill: #2b6ef0; text-anchor: middle; }
.markfx.good .chip text { fill: #0a9d68; }
.markfx .chip { opacity: 0; animation: chipin 7s ease-in-out infinite; }
@keyframes chipin { 0%,8% { opacity: 0 } 20%,84% { opacity: 1 } 94%,100% { opacity: 0 } }
@media (prefers-reduced-motion: reduce) {
  .markfx .draw { animation: none; stroke-dashoffset: 0 }
  .markfx .chip { animation: none; opacity: 1 }
}

/* the recorder, matching #telly-rec in the extension */
.recbar { display: flex; align-items: center; gap: 12px;
          background: rgba(10,13,18,.96); border: 1px solid rgba(255,255,255,.09);
          border-radius: 26px; padding: 9px 10px 9px 16px; color: #8a929e; }
.recbars { display: flex; align-items: center; gap: 3px; height: 24px; }
.recbars i { display: block; width: 3px; height: 24px; border-radius: 2px;
             background: linear-gradient(180deg, #dbe9ff, #a9c6f7);
             transform-origin: center; animation: recbob 1.1s ease-in-out infinite; }
.recbars i:nth-child(1){animation-delay:0s}    .recbars i:nth-child(2){animation-delay:.08s}
.recbars i:nth-child(3){animation-delay:.16s}  .recbars i:nth-child(4){animation-delay:.24s}
.recbars i:nth-child(5){animation-delay:.32s}  .recbars i:nth-child(6){animation-delay:.4s}
.recbars i:nth-child(7){animation-delay:.48s}  .recbars i:nth-child(8){animation-delay:.56s}
@keyframes recbob { 0%,100% { transform: scaleY(.14) } 50% { transform: scaleY(1) } }
@media (prefers-reduced-motion: reduce) { .recbars i { animation: none; transform: scaleY(.5) } }
.rectime { font: 12px var(--mono); color: #8a929e; font-variant-numeric: tabular-nums; }
.recsaid { font-size: 13.5px; color: #cfd5dd; }
.recsend { margin-left: auto; font: 600 12px var(--mono); letter-spacing: .02em;
           color: #16233a; background: linear-gradient(180deg, #dbe9ff, #a9c6f7);
           box-shadow: inset 0 0 0 1px #8ea8ea; border-radius: 18px; padding: 6px 12px;
           white-space: nowrap; }

/* the answer card under the recorder */
.answer { margin-top: 16px; background: #fff; border: 1px solid rgba(17,20,15,.1);
          border-radius: 13px; padding: 15px 16px; font-size: 13.5px; line-height: 1.6;
          color: var(--ink-2); text-align: left; }
.answer b { color: var(--ink); font-weight: 600; }
.answer .tag { display: inline-flex; align-items: center; gap: 6px; font-size: 11px;
               font-weight: 600; letter-spacing: .08em; text-transform: uppercase;
               color: #0B6E52; margin-bottom: 8px; }

.dragnote { display: inline-flex; align-items: center; gap: 7px; margin-top: 14px;
            font-size: 12px; color: var(--ink-3); }
.dragnote u { width: 9px; height: 9px; border-radius: 3px; background: #2b6ef0;
              text-decoration: none; display: block; }

.clear { background: #fff; border: 1px solid rgba(17,20,15,.1); border-radius: 14px;
         padding: 18px 18px 16px; }
.clear .hd { display: flex; align-items: center; gap: 10px; font-weight: 600; font-size: 14.5px; }
.clear .hd u { width: 22px; height: 22px; border-radius: 50%; background: #0a9d68;
               display: grid; place-items: center; text-decoration: none; flex: none;
               color: #fff; font-size: 12px; font-weight: 700;
               box-shadow: inset 0 1px 0 rgba(255,255,255,.7); }
.clear p { font-size: 13.5px; color: var(--ink-2); line-height: 1.6; margin-top: 10px; }
.clear .bars { display: flex; align-items: flex-end; gap: 4px; height: 44px; margin-top: 14px; }
.clear .bars i { flex: 1; background: var(--paper-3); border-radius: 2px 2px 0 0; display: block; }
.clear .bars i.on { background: var(--amber); }
.clear .cap { font-size: 11px; color: var(--ink-3); margin-top: 8px; font-family: var(--mono); }

/* ── the rules ───────────────────────────────────────────────── */

.built { padding: clamp(60px, 8vw, 106px) 0; }
.built-head { text-align: center; max-width: 880px; margin: 0 auto clamp(40px, 5vw, 62px); }
.acc { max-width: 820px; margin: 0 auto; }
.acc details { border-top: 1px solid rgba(17,20,15,.13); }
.acc details:last-of-type { border-bottom: 1px solid rgba(17,20,15,.13); }
.acc summary { list-style: none; cursor: pointer; padding: 22px 4px;
               display: flex; align-items: center; gap: 16px;
               font-weight: 700; letter-spacing: -.025em;
               font-size: clamp(18px, 1.9vw, 23px); }
.acc summary::-webkit-details-marker { display: none; }
.acc summary::before { content: ''; width: 11px; height: 11px; border-radius: 50%; flex: none;
                       box-shadow: inset 0 1px 0 rgba(255,255,255,.7); }
.acc details:nth-of-type(1) summary::before { background: var(--grad-blue) }
.acc details:nth-of-type(2) summary::before { background: var(--grad-orange) }
.acc details:nth-of-type(3) summary::before { background: var(--grad-green) }
.acc details:nth-of-type(4) summary::before { background: var(--grad-lav) }
.acc summary .plus { margin-left: auto; width: 26px; height: 26px; flex: none;
                     border: 1px solid rgba(17,20,15,.2); border-radius: 50%;
                     display: grid; place-items: center; font-family: var(--sans);
                     font-size: 15px; color: var(--ink-3); transition: transform .22s ease; }
.acc details[open] summary .plus { transform: rotate(45deg); }
.acc .body { padding: 0 42px 26px 31px; font-size: 15px; color: var(--ink-2);
             line-height: 1.65; max-width: 68ch; }
.acc .body code { font-family: var(--mono); font-size: .86em; background: var(--paper-2);
                  border: 1px solid rgba(17,20,15,.1); border-radius: 5px; padding: 1px 6px; }

/* ── honesty ─────────────────────────────────────────────────── */

.honest { padding: 0 0 clamp(70px, 9vw, 116px); }
.honest-in { background: var(--paper-2); border: 1px solid rgba(17,20,15,.1);
             border-radius: clamp(24px, 3vw, 36px); padding: clamp(36px, 5vw, 60px);
             display: grid; grid-template-columns: minmax(0,1.1fr) minmax(0,.9fr);
             gap: clamp(28px, 4vw, 58px); align-items: center; }
.honest-in p { color: var(--ink-2); margin-top: 18px; font-size: 16px; max-width: 50ch; }
.proof { display: grid; gap: 12px; }
.proof div { background: #fff; border: 1px solid rgba(17,20,15,.1);
             border-radius: 13px; padding: 14px 16px; font-size: 13.5px; color: var(--ink-2); }
.proof div b { display: block; color: var(--ink); font-weight: 600; font-size: 14px;
               margin-bottom: 3px; }

/* ── closing CTA + footer ────────────────────────────────────── */

.close {
  background: var(--ink); color: #F4F4F1;
  border-radius: clamp(28px, 3vw, 44px) clamp(28px, 3vw, 44px) 0 0;
  margin: 0 var(--gut); padding: clamp(70px, 9vw, 114px) 0 0; text-align: center;
  position: relative; overflow: hidden;
}
.close::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: 4px;
                 background: var(--edgebar); }
.close h2 { max-width: 16ch; margin: 0 auto; }
.close p { color: rgba(244,244,241,.62); margin: 20px auto 30px; max-width: 48ch; font-size: 17px; }
.close .avail { color: rgba(244,244,241,.45); }

footer { margin-top: clamp(60px, 8vw, 96px); border-top: 1px solid rgba(244,244,241,.14);
         padding: 34px 0 40px; text-align: left; }
footer .cols { display: flex; flex-wrap: wrap; gap: 40px 64px; align-items: flex-start; }
footer .brand { color: #F4F4F1; }
footer .col { display: flex; flex-direction: column; gap: 9px; font-size: 13.5px;
              color: rgba(244,244,241,.55); }
footer .col strong { color: #F4F4F1; font-size: 11px; font-weight: 600;
                     letter-spacing: .14em; text-transform: uppercase; margin-bottom: 3px; }
footer .col a:hover { color: #fff; }
footer .fine { margin-top: 36px; font-size: 12px; line-height: 1.7;
               color: rgba(244,244,241,.38); max-width: 72ch; }
footer .fine b { color: rgba(244,244,241,.62); font-weight: 600; }


/* ── media ───────────────────────────────────────────────────────
   Files live in telly/assets/ and are referenced as assets/<name>.
   Always set width + height on <img> so nothing jumps while it loads. */

.sticker.media .scr { padding: 0; overflow: hidden; line-height: 0; }
.sticker.media .scr img,
.sticker.media .scr video { display: block; width: 100%; height: auto; }

/* mac-window chrome around any picture, at any size */
.frame { border-radius: 10px; overflow: hidden; background: #fff;
         border: 1px solid rgba(17,20,15,.2);
         box-shadow: 0 16px 34px rgba(17,20,15,.16); }
.frame .bar { border-radius: 9px 9px 0 0; }
.frame .screen { line-height: 0; background: #0F1317; }
.frame img, .frame video { display: block; width: 100%; height: auto; }
.frame .cap { display: block; padding: 7px 10px; font-family: var(--mono);
              font-size: 10px; color: var(--ink-3); background: #fff;
              border-top: 1px solid rgba(17,20,15,.1); }

/* a picture dropped into one of the feature-row cards */
.vis .shot { margin-top: 14px; border-radius: 12px; overflow: hidden; line-height: 0;
             border: 1px solid rgba(17,20,15,.12); background: #0F1317; }
.vis .shot img, .vis .shot video { display: block; width: 100%; height: auto; }

/* anything that moves stops when the viewer asked for that — the sticker falls back to
   its own still frame, carried on --still so the file is only fetched when it's needed */
@media (prefers-reduced-motion: reduce) {
  .frame video, .vis .shot video, .sticker.media video { display: none; }
  .sticker.media .scr { aspect-ratio: var(--ar);
    background: var(--still) center / cover no-repeat; }
}

/* ── responsive ──────────────────────────────────────────────── */

/* the stickers live in the page margins; below this there aren't any */
@media (max-width: 1340px) { .stickers { display: none } }
@media (max-width: 900px)  { .slabsticker { display: none } }

@media (max-width: 1080px) {
  .hero-grid { grid-template-columns: 1fr; }
  .device { transform: none; margin-top: 10px; }
  .anno { display: none; }
  .cards { grid-template-columns: repeat(2, 1fr); }
  .compare { grid-template-columns: 1fr; }
  .frow { grid-template-columns: 1fr; gap: 24px; }
  .honest-in { grid-template-columns: 1fr; }
}

@media (max-width: 940px) {
  /* the scatter collapses to a centred stack; the three tiers stay together,
     which is the part that has to survive the reflow */
  .bubbles { height: auto; display: flex; flex-direction: column; align-items: center;
             gap: 30px; padding: 30px var(--gut) 10px; }
  .ask { position: static; transform: none; animation: none; align-items: center; }
  .who { margin-left: 0; }
  .bub { white-space: normal; max-width: 24ch; text-align: center; }
  .bub::after { left: 50%; margin-left: -10px; }
  .ans { margin-left: 0; white-space: normal; }
  .zip { display: none; }          /* no outward to fan into once it is a column */
}

/* five links need more room than four: between the tablet cut-off and a
   comfortable desktop they have to tighten or they wrap under the logo */
@media (max-width: 1080px) {
  .navlinks { gap: 17px; font-size: 13.5px; }
}

@media (max-width: 820px) {
  .navlinks { display: none; }
  .brand { margin-right: auto; }
}

@media (max-width: 560px) {
  .cards { grid-template-columns: 1fr; }
  .bub { font-size: 16px; padding: 11px 19px 12px; }
  .ans { font-size: 13px; padding: 10px 16px 10px 13px; }
}

/* ── onboarding overlay ──────────────────────────────────────────
   Not a modal over a blurred page — the same off-white and dot grid the
   site is built on, so it reads as a step rather than an interruption.
   Nothing is collected or sent; the picks stay local until there's an
   endpoint to post them to. */

.flow { position: fixed; inset: 0; z-index: 200; display: grid; place-items: center;
        padding: var(--gut); overflow-y: auto;
        background-color: var(--paper);
        background-image: radial-gradient(rgba(17,20,15,.12) 1px, transparent 1.3px);
        background-size: 23px 23px;
        animation: flowin .2s ease; }
.flow[hidden] { display: none; }
@keyframes flowin { from { opacity: 0 } }

.flow-card {
  /* min-width:0 or the grid item takes its min-content size from the venue
     strip inside it, which is ~1800px wide and scrolls — the card drifted
     off-centre the moment that list grew past the viewport. */
  position: relative; width: min(560px, 100%); min-width: 0;
  background: #fff; border: 1px solid rgba(17,20,15,.12); border-radius: 24px;
  padding: 54px 36px 36px; text-align: center; color: var(--ink);
  box-shadow: 0 24px 60px rgba(17,20,15,.1);
  animation: flowrise .26s cubic-bezier(.2,.9,.3,1);
}
@keyframes flowrise { from { opacity: 0; transform: translateY(10px) scale(.985) } }

.flow-x, .flow-back {
  position: absolute; top: 16px; border: 0; background: none; cursor: pointer;
  color: var(--ink-3); font: inherit; font-size: 13.5px; font-weight: 500;
  padding: 6px 10px; border-radius: 9px;
}
.flow-x { right: 14px; font-size: 20px; line-height: 1; }
.flow-back { left: 14px; }
.flow-x:hover, .flow-back:hover { color: var(--ink); background: var(--paper-2); }
.flow-back[hidden] { display: none; }

.flow-dots { display: flex; justify-content: center; gap: 6px; margin-bottom: 28px; }
.flow-dots i { width: 26px; height: 4px; border-radius: 2px;
               background: var(--paper-3); transition: background .2s; }
.flow-dots i.on { background: var(--brand); }

.flow-step h3 { font-size: clamp(24px, 3vw, 30px); font-weight: 800; letter-spacing: -.035em; }
.flow-step > p { margin: 10px auto 26px; max-width: 40ch; font-size: 15px;
                 color: var(--ink-2); line-height: 1.55; }
.flow-step .btn { margin-top: 28px; }

.chips { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; }
.chip { font: inherit; font-size: 13.5px; font-weight: 500; cursor: pointer;
        padding: 9px 16px; border-radius: 999px; color: var(--ink-2);
        background: #fff; border: 1px solid rgba(17,20,15,.16);
        transition: background .15s, color .15s, border-color .15s, transform .15s; }
.chip:hover { border-color: rgba(17,20,15,.34); color: var(--ink); }
.chip.on { background: var(--grad-blue); border-color: var(--blue-edge);
           color: var(--blue-ink); font-weight: 600; transform: translateY(-1px);
           box-shadow: inset 0 1px 0 rgba(255,255,255,.9), 0 6px 16px rgba(0,61,178,.24); }

.flow-keys { display: flex; align-items: center; justify-content: center; gap: 8px;
             margin: 2px 0; }
.flow-keys em { font-style: normal; font-family: var(--mono); font-size: 11.5px;
                color: var(--ink-3); margin-left: 4px; }
.flow-fine { margin-top: 16px; font-size: 12px; color: var(--ink-3); }

@media (max-width: 560px) { .flow-card { padding: 48px 20px 28px; } }

/* ── onboarding: the longer flow ─────────────────────────────── */

.flow-rail { height: 4px; border-radius: 2px; background: var(--paper-3);
             margin: 0 0 30px; overflow: hidden; }
.flow-rail i { display: block; height: 100%; width: 11%; border-radius: 2px;
               background: var(--brand); transition: width .3s cubic-bezier(.2,.9,.3,1); }

.flow-beat { font: 600 11px var(--mono); letter-spacing: .14em; text-transform: uppercase;
             color: var(--ink-3); margin-bottom: 10px; }
.flow-step h3.big { font-size: clamp(34px, 4.6vw, 48px); }

.flow-link { border: 0; background: none; cursor: pointer; font: inherit; font-size: 14px;
             font-weight: 600; color: var(--brand); padding: 8px; }
.flow-link:hover { text-decoration: underline; }

.flow-form { display: flex; flex-direction: column; gap: 12px; align-items: center; }
.flow-form input {
  width: min(340px, 100%); font: inherit; font-size: 15.5px; text-align: center;
  padding: 13px 18px; border-radius: 999px; color: var(--ink);
  background: #fff; border: 1px solid rgba(17,20,15,.2);
  transition: border-color .15s, box-shadow .15s;
}
.flow-form input::placeholder { color: var(--ink-3); }
.flow-form input:focus { outline: 0; border-color: var(--blue-edge);
                         box-shadow: 0 0 0 4px rgba(0,61,178,.12); }
.flow-form .btn { margin-top: 2px; }

/* the walkthrough reuses the page's own components, sized for the card */
.flow-step .recbar { margin: 4px 0 2px; text-align: left; }
.flow-step .recbar .recsaid { margin-left: auto; }
.flow-step .markfx { max-width: 400px; margin: 0 auto; }
.flow-step .markfx .ink .draw { stroke: var(--g, url(#tink)); }
.flow-step .markfx .chip-g rect { fill: rgba(255,255,255,.97); stroke: #2b6ef0; stroke-width: 1.2; }
.flow-step .markfx .chip-g text { font: 600 12.5px var(--mono); fill: #2b6ef0; text-anchor: middle; }
.flow-step .markfx .chip-g { opacity: 0; animation: chipin 7s ease-in-out infinite; }
.flow-step .clear { text-align: left; max-width: 400px; margin: 4px auto 0;
                    background: var(--paper); }

/* ── the mic check ───────────────────────────────────────────── */

.miccheck {
  display: flex; align-items: center; justify-content: center; gap: 14px;
  margin: 6px auto 0; cursor: pointer; font: inherit;
  padding: 14px 26px; border-radius: 999px;
  background: var(--grad-blue); color: var(--blue-ink);
  border: 1px solid var(--blue-edge);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.95), 0 10px 24px rgba(0,61,178,.22);
  transition: transform .15s ease, box-shadow .15s ease, background .15s ease;
  -webkit-user-select: none; user-select: none; touch-action: none;
}
.miccheck:hover { transform: translateY(-1px); }
.miccheck .micstate { font-size: 14.5px; font-weight: 600; }
.miccheck .recbars i { background: linear-gradient(180deg, #2b6ef0, #1742b8);
                       transform: scaleY(.14); animation: none; }
.miccheck.live { background: linear-gradient(180deg, #ffd0d0, #ff6b6b);
                 border-color: #e05858; color: #2a0f0f;
                 box-shadow: inset 0 1px 0 rgba(255,255,255,.8), 0 10px 26px rgba(224,88,88,.34); }
.miccheck.live .recbars i { background: linear-gradient(180deg, #7a1f1f, #2a0f0f);
                            animation: recbob 1.1s ease-in-out infinite; }
.miccheck kbd { background: rgba(255,255,255,.75); border-color: rgba(17,20,15,.2);
                box-shadow: 0 1.5px 0 rgba(17,20,15,.18); color: var(--blue-ink); }

.micout { margin-top: 18px; }
.micout .micsaid { font-size: 15px; color: var(--ink); font-weight: 500; margin: 0 0 8px; }
.micout .micreply { display: inline-flex; align-items: flex-start; gap: 9px;
  text-align: left; max-width: 42ch; margin: 0 auto; padding: 13px 16px;
  background: var(--paper); border: 1px solid rgba(17,20,15,.1); border-radius: 14px;
  font-size: 14px; line-height: 1.5; color: var(--ink-2);
  animation: flowrise .3s cubic-bezier(.2,.9,.3,1); }
.micout[hidden] { display: none; }

/* ── the venue picker on the last step ───────────────────────── */

.venues { display: flex; gap: 10px; overflow-x: auto; padding: 4px 2px 12px;
          scroll-snap-type: x proximity; margin: 6px -8px 0;
          -webkit-mask-image: linear-gradient(90deg, transparent, #000 4%, #000 94%, transparent);
                  mask-image: linear-gradient(90deg, transparent, #000 4%, #000 94%, transparent); }
.venues::-webkit-scrollbar { height: 5px; }
.venues::-webkit-scrollbar-thumb { background: rgba(17,20,15,.16); border-radius: 3px; }

.venue { flex: none; width: 128px; scroll-snap-align: start;
         display: flex; flex-direction: column; align-items: center; justify-content: center;
         gap: 9px; padding: 16px 10px 13px; border-radius: 15px;
         background: #fff; border: 1px solid rgba(17,20,15,.14);
         transition: transform .16s ease, border-color .16s ease, box-shadow .16s ease, opacity .16s ease; }
.venue:first-child { margin-left: 8px; }
.venue:last-child  { margin-right: 8px; }
.venue em { font-style: normal; font-family: var(--mono); font-size: 10px;
            letter-spacing: .08em; color: var(--ink-3); }
.venue:hover { transform: translateY(-2px); border-color: var(--brand); opacity: 1;
               box-shadow: 0 10px 22px rgba(0,61,178,.16); }
.venue.on { border-color: var(--blue-edge); box-shadow: 0 6px 16px rgba(0,61,178,.14); }
.venue.on em { color: var(--brand); }
.venue.off { opacity: .4; }

.venue .art { display: flex; align-items: center; justify-content: center;
              height: 30px; color: var(--logo); }
.venue .art img { display: block; height: 19px; width: auto;
                  filter: grayscale(1) brightness(0) invert(.36); }
.venue .art img.tall { height: 30px; }
.venue .art .wm { font-size: 16px; font-weight: 500; letter-spacing: .01em; }
.venue .art .wm b { font-weight: 800; }
.venue .art .pinmark { font-size: 14px; padding-bottom: 3px; border-bottom-width: 2px; }
.venue .art .tx { font-size: 15px; font-weight: 700; letter-spacing: -.025em; }
.venue .art .tx b { font-weight: 800; }

/* ── the notetaker ───────────────────────────────────────────────
   The panel mock reuses the real panel's vocabulary and values
   (extension/panel.css): peach for anything Telly stamped, blue for the
   thing you press, a white card for a line you said. Copying the hex
   codes rather than inventing new ones is what keeps a marketing mock
   from quietly drifting away from the product it is selling. */

/* overflow-x: clip, not hidden — the strokes and the ambient wash hang past
   the panel and were widening the whole document, but `hidden` would make
   this a scroll container and break sticky/anchor behaviour inside it. */
.notes { padding: 86px 0 94px; border-top: 1px solid var(--paper-3);
         overflow-x: clip; }
.notes-in { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,.95fr);
            gap: clamp(40px, 6vw, 86px); align-items: center; }
.notes-say .eyebrow { margin-bottom: 14px; }
.notes-say .d2 { margin-bottom: 18px; }
.notes-say .lede { max-width: 46ch; margin-bottom: 30px; }

.notes-pts { display: grid; gap: 17px; }
.notes-pts div { font-size: 14px; line-height: 1.6; color: var(--ink-3); max-width: 50ch; }
.notes-pts b { display: block; font-size: 14.5px; font-weight: 700; color: var(--ink);
               letter-spacing: -.012em; margin-bottom: 3px; }
.notes-fine { margin-top: 26px; font-size: 12.5px; line-height: 1.6; color: var(--ink-3);
              max-width: 46ch; }

/* the panel —
   Three bands: chrome, a scrolling body, a composer pinned to the bottom.
   Colours track extension/panel.css so the mock cannot drift from the product. */
.notes-art { position: relative; display: flex; flex-direction: column; align-items: center; }
/* the strokes hang off the panel, so they need a box the panel's size to hang from */
.p-stage { position: relative; width: 100%; max-width: 400px; }
/* the ambient wash either side, same family as the question bubbles above */
.notes-art::before, .notes-art::after {
  content: ''; position: absolute; top: 18%; width: 46%; height: 64%;
  border-radius: 50%; filter: blur(52px); z-index: 0; pointer-events: none;
}
.notes-art::before { left: -16%; background: rgba(60,120,230,.16); }
.notes-art::after  { right: -16%; background: rgba(230,80,90,.11); }

.panel {
  position: relative; z-index: 1;
  width: 100%; max-width: 400px;
  background: #F2F3F5; color: #11161D;
  border: 1px solid rgba(17,20,15,.08); border-radius: 22px; overflow: hidden;
  text-align: left; font-size: 13px;
  box-shadow: 0 34px 64px -24px rgba(17,22,29,.3), 0 3px 10px rgba(17,22,29,.05);
}

/* the little emphasis strokes, same idea as the hero bubbles' */
.p-zip { position: absolute; top: 24%; display: flex; flex-direction: column; gap: 9px; z-index: 2; }
.p-zip u { display: block; height: 5px; border-radius: 3px; }
.p-zip.l { left: -36px; align-items: flex-end; }
.p-zip.r { right: -36px; top: 56%; align-items: flex-start; }
.p-zip.l u { background: #2B6EF0; }
.p-zip.r u { background: #E5484D; }
.p-zip.l u:nth-child(1) { width: 22px; transform: rotate(26deg); }
.p-zip.l u:nth-child(2) { width: 22px; transform: rotate(-12deg); }
.p-zip.r u:nth-child(1) { width: 22px; transform: rotate(-26deg); }
.p-zip.r u:nth-child(2) { width: 22px; transform: rotate(12deg); }

/* ── chrome ── */
.p-head { display: flex; align-items: center; gap: 9px; padding: 13px 14px;
          background: #fff; border-bottom: 1px solid #ECEEF1; }
.p-back { color: #9AA0A8; font-size: 19px; line-height: 1; padding: 0 2px; }
.p-topic { display: flex; align-items: center; gap: 8px;
           font-size: 13.5px; font-weight: 600; color: #C77E22;
           background: #FDF3E3; border: 1px solid rgba(207,132,40,.2);
           border-radius: 22px; padding: 5px 13px 5px 6px; }
.p-btn { display: flex; align-items: center; gap: 6px; flex: none;
         font-size: 12.5px; font-weight: 500; color: #3B424B;
         background: #fff; border: 1px solid #E4E7EB; border-radius: 22px;
         padding: 6px 12px; box-shadow: 0 1px 2px rgba(17,22,29,.05); }
.p-btn svg { width: 14px; height: 14px; }
.p-btn:first-of-type { margin-left: auto; }
.p-more { padding: 6px 10px; color: #8A9099; letter-spacing: .5px; }

/* the team marks. See assets/avatars/SOURCES.md — these are initials in the
   club's own colours, not their logos, which nobody here has a licence to. */
.tm { display: grid; place-items: center; flex: none;
      width: 26px; height: 26px; border-radius: 50%;
      font: 700 8.5px/1 var(--sans); letter-spacing: .02em; }
.tm.chi { background: #CE1141; color: #fff; }
.tm.gsw { background: #1D428A; color: #FFC72C; }

/* ── body ── */
.p-body { padding: 16px 15px 17px; }
.p-title { font-size: 20px; font-weight: 700; letter-spacing: -.024em; line-height: 1.2; }
.p-when  { margin-top: 5px; font: 12.5px var(--mono); color: #9AA0A8; }

/* the arithmetic, drawn rather than described */
.p-ctx { margin-top: 14px; padding: 12px 16px 14px; border-radius: 14px;
         background: #FDF6EA; border: 1px solid rgba(207,132,40,.14); }
.p-ctx > i { display: block; font-style: normal; font: 600 10.5px var(--mono);
             letter-spacing: .07em; text-transform: uppercase; color: #D08A2E;
             margin-bottom: 11px; }
.p-sum { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.p-t { display: flex; align-items: center; gap: 7px; font-size: 14px; color: #4A3B22; }
.p-t em { font-style: normal; font-weight: 700; color: #241A08; }
.p-sum s { text-decoration: none; color: #C09A62; font-size: 15px; }
.p-tot { margin-left: auto; font-size: 17px; font-weight: 800; letter-spacing: -.02em;
         color: #D43A3A; background: #FDE7E7; border-radius: 10px; padding: 5px 13px; }
/* the sum is a fact; this is why the fact matters, and it is said nowhere else */
.p-note { margin-top: 10px; font-size: 12.5px; color: #8C6E3E; }
.p-note b { color: #4A3B22; font-weight: 700; }

.p-tabs { display: flex; gap: 22px; margin: 18px 0 0; border-bottom: 1px solid #E6E8EC; }
.p-tabs span { display: flex; align-items: center; gap: 7px; padding-bottom: 10px;
               font-size: 13px; font-weight: 500; color: #8A9099;
               border-bottom: 2px solid transparent; }
.p-tabs svg { width: 15px; height: 15px; }
.p-tabs span.on { color: #2B6EF0; font-weight: 600; border-bottom-color: #2B6EF0; }

.p-card { margin-top: 14px; background: #fff; border-radius: 16px; padding: 13px 14px 14px;
          box-shadow: 0 1px 2px rgba(17,22,29,.05), 0 0 0 1px #ECEEF1 inset; }

.p-rec { display: flex; align-items: center; gap: 11px; }
.p-play { display: grid; place-items: center; flex: none; width: 34px; height: 34px;
          border-radius: 50%; background: #DCE8FD; color: #2B6EF0; }
.p-play svg { width: 13px; height: 13px; }
.p-listen { font-size: 13.5px; font-weight: 500; color: #3B424B; flex: none; }
.p-wave { flex: 1; height: 15px; min-width: 0; }
.p-wave rect { fill: #D6DAE1; }
.p-wave rect.on { fill: #2B6EF0; }
.p-dur { font: 12.5px var(--mono); color: #9AA0A8; flex: none;
         font-variant-numeric: tabular-nums; }
.p-line { margin-top: 13px; font-size: 14.5px; line-height: 1.55; color: #1B2027; }

/* what the market did while you were talking */
.p-move-hd { display: flex; align-items: center; gap: 9px;
              padding-bottom: 10px; border-bottom: 1px solid #EFF1F4; }
.p-live { display: flex; align-items: center; gap: 6px; flex: none;
          font-size: 11px; font-weight: 500; color: #8A9099; white-space: nowrap; }
.p-live u { width: 7px; height: 7px; border-radius: 50%; background: #E5484D;
            box-shadow: 0 0 0 3px rgba(229,72,77,.14); animation: ppulse 1.4s infinite; }
@keyframes ppulse { 50% { box-shadow: 0 0 0 6px rgba(229,72,77,0); } }
.p-move-lbl { flex: 1; font: 600 10.5px var(--mono); letter-spacing: .07em;
              text-transform: uppercase; color: #A6ACB4; }
/* the unit opts out of the uppercase — "37S" reads as a constant, not a time */
.p-move-lbl i { font-style: normal; text-transform: none; }
.p-row { display: flex; align-items: center; gap: 10px; padding: 9px 0 0; }
.p-row > span { font-size: 14px; font-weight: 500; }
.p-row em { margin-left: auto; font-style: normal; font: 13px var(--mono);
            color: #8A9099; font-variant-numeric: tabular-nums; flex: none; }
.p-row em b { color: #11161D; font-weight: 700; }
.p-row u { text-decoration: none; flex: none; min-width: 44px; text-align: center;
           font: 700 11.5px var(--mono); border-radius: 7px; padding: 4px 0; }
.p-row u.up   { color: #0E8A55; background: #E6F7EF; }
.p-row u.down { color: #D43A3A; background: #FDE7E7; }
.p-spark { width: 48px; height: 16px; flex: none; }
.p-spark.up   { color: #0E8A55; }
.p-spark.down { color: #D43A3A; }
.p-why { display: flex; align-items: center; gap: 8px;
         margin-top: 12px; padding-top: 11px; border-top: 1px solid #EFF1F4;
         font-size: 12.5px; color: #6A7078; }
.p-why svg { width: 14px; height: 14px; color: #D08A2E; flex: none; }
.p-why b { color: #11161D; font-weight: 600; }

/* ── composer, pinned ── */
.p-foot { display: flex; align-items: center; gap: 9px;
          padding: 12px 14px; background: #fff; border-top: 1px solid #ECEEF1; }
.p-q { display: flex; align-items: center; gap: 9px; flex: 1; min-width: 0;
       background: #fff; border: 1px solid #E1E4E9; border-radius: 24px;
       padding: 10px 15px; font-size: 13px; color: #9AA0A8;
       box-shadow: 0 1px 2px rgba(17,22,29,.04); }
.p-q svg { width: 15px; height: 15px; color: #2B6EF0; flex: none; }
.p-mic { display: grid; place-items: center; flex: none; width: 30px; height: 30px;
         color: #8A9099; }
.p-mic svg { width: 16px; height: 16px; }
.p-send { display: grid; place-items: center; flex: none; width: 38px; height: 38px;
          border-radius: 50%; color: #fff; font-size: 15px; font-weight: 700;
          background: linear-gradient(180deg,#4287F5,#1E5FDB);
          box-shadow: 0 2px 8px rgba(43,110,240,.4), 0 0 0 5px rgba(43,110,240,.1); }

@media (prefers-reduced-motion: reduce) { .p-live u { animation: none } }
@media (max-width: 940px) {
  .notes { padding: 62px 0 70px; }
  .notes-in { grid-template-columns: 1fr; gap: 42px; }
  .notes-say .lede, .notes-pts div, .notes-fine { max-width: none; }
}

/* ── the install page ────────────────────────────────────────────
   Wispr's shape: the download has already fired, so the left half is just
   a plain numbered list, and one looping scene on the right carries the
   weight. Three cards with three animations was three times too much. */

.dl { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1.08fr);
      min-height: 100vh; }

.dl-say { background: var(--ink); color: #F4F4F1;
          padding: clamp(36px, 5vw, 64px) clamp(28px, 5vw, 76px);
          display: flex; flex-direction: column; justify-content: center; gap: 26px; }
.dl-say .brand { position: absolute; top: clamp(30px, 4vw, 52px); }
.dl-say h1 { font-size: clamp(38px, 4.4vw, 60px); font-weight: 800;
             letter-spacing: -.035em; line-height: 1.04; }
.dl-say ol { list-style: none; counter-reset: dl; display: grid; gap: 14px;
             font-size: clamp(16px, 1.5vw, 19px); color: rgba(244,244,241,.9); }
.dl-say li { counter-increment: dl; display: flex; gap: 11px; align-items: baseline; }
.dl-say li span { flex: 1; min-width: 0; }
.dl-say li::before { content: counter(dl) "."; color: rgba(244,244,241,.42);
                     font-variant-numeric: tabular-nums; }
.dl-say li b { overflow-wrap: anywhere; }
.dl-say li::before { flex: none; }
.dl-say li b { font-weight: 700; color: #fff; }
.dl-say kbd { background: rgba(255,255,255,.16); color: #fff;
              border-color: rgba(255,255,255,.3); box-shadow: 0 1.5px 0 rgba(0,0,0,.4); }
.dl-retry { font-size: 14.5px; color: rgba(244,244,241,.5); }
.dl-retry a { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
.dl-say .btn { align-self: flex-start; }

/* ── the scene ───────────────────────────────────────────────────
   Three beats on an 11s loop: the store listing, Chrome's own install
   confirmation, and the extension landing in the toolbar. */

.dl-art { position: relative; overflow: hidden; display: grid; place-items: center;
  background-color: #0E2A5C;
  background-image:
    radial-gradient(44% 44% at 16% 8%, rgba(127,233,255,.22), transparent 70%),
    radial-gradient(46% 46% at 86% 88%, rgba(196,163,251,.2), transparent 70%),
    linear-gradient(168deg, #16419A, #0B2558 62%, #061734); }

.scene { position: relative; width: min(560px, 86%); aspect-ratio: 4 / 3.1; }

.win { position: absolute; left: 0; right: 0; top: 8%;
       background: #fff; border-radius: 13px; overflow: hidden;
       box-shadow: 0 34px 80px rgba(2,8,26,.5); }
.wbar { display: flex; align-items: center; gap: 12px; padding: 9px 12px;
        background: linear-gradient(180deg,#F3F3EF,#E6E6E0); border-bottom: 1px solid #D8D8D1; }
.wbar .dots { display: flex; gap: 5px }
.wbar .dots i { width: 9px; height: 9px; border-radius: 50%; background: #CFCFC8 }
.wbar .tab { font: 11px var(--sans); color: var(--ink-2); background: #fff;
             border-radius: 7px 7px 0 0; padding: 5px 14px; margin-bottom: -10px;
             white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 190px }
.wbar .tray { margin-left: auto; display: flex; gap: 7px; align-items: center }
.wbar .tray u { width: 16px; height: 16px; border-radius: 5px; display: block;
                background: #D8D8D1; text-decoration: none }
.wbar .tray .tly { background: var(--brand); opacity: 0;
                   animation: pinpop 11s cubic-bezier(.2,1.5,.4,1) infinite }
@keyframes pinpop { 0%,64% { opacity: 0; transform: scale(.4) }
                    70%,96% { opacity: 1; transform: scale(1) }
                    100% { opacity: 0; transform: scale(.4) } }

.wurl { padding: 9px 12px; background: #fff; border-bottom: 1px solid #ECECE6 }
.wurl span { display: block; font: 11px var(--mono); color: var(--ink-3);
             background: var(--paper); border-radius: 999px; padding: 6px 13px }

.wbody { padding: 16px 14px; display: grid; gap: 13px }

/* the listing row */
.listing { display: flex; align-items: center; gap: 12px }
.lico { width: 38px; height: 38px; border-radius: 10px; background: var(--brand); flex: none }
.ltext { display: grid; font: 13px var(--sans); min-width: 0 }
.ltext b { font-weight: 700 }
.ltext em { font-style: normal; font-size: 10.5px; color: var(--ink-3) }
.ladd { margin-left: auto; flex: none; font: 600 11.5px var(--sans); color: #fff;
        background: #1A73E8; border-radius: 999px; padding: 8px 15px;
        animation: addpress 11s ease infinite }
@keyframes addpress { 0%,16% { transform: none; filter: none }
                      20% { transform: scale(.94); filter: brightness(.9) }
                      24%,100% { transform: none; filter: none } }
.lshot { display: grid; grid-template-columns: 1fr 1fr; gap: 9px }
.lshot i { height: 62px; border-radius: 8px; background: var(--paper-2);
           border: 1px solid rgba(17,20,15,.08) }

/* Chrome's confirmation, dropping from the toolbar */
.cdialog { position: absolute; right: 6%; top: 16%; width: 61%;
           background: #fff; border-radius: 12px; padding: 15px 17px;
           box-shadow: 0 26px 60px rgba(2,8,26,.45);
           opacity: 0; animation: cdrop 11s cubic-bezier(.2,.9,.3,1) infinite }
@keyframes cdrop { 0%,24% { opacity: 0; transform: translateY(-12px) scale(.97) }
                   30%,56% { opacity: 1; transform: none }
                   62%,100% { opacity: 0; transform: translateY(-6px) scale(.98) } }
.cdialog b { font: 700 14px var(--sans); color: var(--ink) }
.cdialog p { margin-top: 6px; font: 11.5px/1.45 var(--sans); color: var(--ink-2) }
.crow { display: flex; justify-content: flex-end; gap: 8px; margin-top: 13px }
.crow u { text-decoration: none; font: 600 11.5px var(--sans); padding: 7px 14px;
          border-radius: 999px }
.crow .cancel { color: var(--ink-3) }
.crow .go { color: #fff; background: #1A73E8; animation: gopress 11s ease infinite }
@keyframes gopress { 0%,50% { transform: none } 54% { transform: scale(.94) }
                     58%,100% { transform: none } }

/* the "it's added" toast */
.ctoast { position: absolute; right: 4%; top: 4%; display: flex; align-items: center; gap: 11px;
          background: #fff; border-radius: 12px; padding: 12px 15px;
          box-shadow: 0 22px 50px rgba(2,8,26,.42);
          opacity: 0; animation: toastin 11s cubic-bezier(.2,1.2,.4,1) infinite }
@keyframes toastin { 0%,62% { opacity: 0; transform: translateY(-10px) scale(.96) }
                     70%,94% { opacity: 1; transform: none }
                     100% { opacity: 0; transform: translateY(-6px) } }
.ctoast .tico { width: 30px; height: 30px; border-radius: 8px; background: var(--brand); flex: none }
.ctoast span { display: grid; font: 12.5px var(--sans) }
.ctoast b { font-weight: 700 }
.ctoast em { font-style: normal; font-size: 10.5px; color: var(--ink-3) }

/* the pointer that does the clicking */
.cursor { position: absolute; width: 17px; height: 17px;
          background: var(--brand); clip-path: polygon(0 0,0 72%,26% 56%,44% 94%,62% 84%,44% 48%,72% 44%);
          filter: drop-shadow(0 2px 4px rgba(0,0,0,.35));
          opacity: 0; animation: point 11s ease infinite }
@keyframes point {
  0%       { opacity: 0; left: 50%; top: 70% }
  10%      { opacity: 1; left: 50%; top: 70% }
  18%      { opacity: 1; left: 80%; top: 34% }
  26%      { opacity: 1; left: 80%; top: 34% }
  48%      { opacity: 1; left: 76%; top: 46% }
  58%      { opacity: 1; left: 76%; top: 46% }
  66%,100% { opacity: 0; left: 76%; top: 46% }
}

@media (prefers-reduced-motion: reduce) {
  .cdialog, .ctoast { opacity: 1; animation: none; transform: none }
  .cdialog { display: none }
  .ladd, .crow .go, .cursor, .wbar .tray .tly { animation: none }
  .cursor { opacity: 0 } .wbar .tray .tly { opacity: 1 }
}

@media (max-width: 900px) {
  .dl { grid-template-columns: 1fr; min-height: 0 }
  .dl-say { padding-top: clamp(96px, 18vw, 140px) }
  .dl-art { padding: 48px 0 56px }
  .scene { width: min(460px, 86%) }
}

/* ---------- the key, handed over once ----------
 * A key is read off a screen and pasted into another window, so it is set in
 * the mono face at a size that can be read without leaning in, and it wraps
 * rather than scrolling sideways — a key with its tail cut off looks complete
 * and is not, which is the one failure here nobody would catch.
 */
.keybox {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  background: var(--paper-2); border: 1px solid var(--paper-3);
  border-radius: 12px; padding: 12px 14px; margin: 14px 0 6px;
}
.keybox code {
  font: 500 14px/1.5 var(--mono); color: var(--ink);
  word-break: break-all; flex: 1 1 240px; user-select: all;
}
.flow-err {
  margin: 10px 0 0; color: #B3261E; font-size: 14px;
  background: #FDECEA; border: 1px solid #F5C6C2;
  border-radius: 10px; padding: 9px 12px;
}
.flow-form input[name="code"] { text-transform: uppercase; }
.flow-form input[name="code"]::placeholder { text-transform: none; }

/* ---------- the written pages ----------
 * Privacy, terms, responsible play. Long-form, read once, mostly by somebody
 * checking whether to trust this — so: a measured column width, real
 * paragraph spacing, and nothing decorative competing with the sentences.
 */
.doc { max-width: 760px; margin: 0 auto; padding: 48px var(--gut) 90px; }
.doc .brand { display: inline-block; margin-bottom: 36px; }
.doc h1 { font-size: clamp(32px, 5vw, 46px); line-height: 1.08; letter-spacing: -.02em;
          margin: 0 0 10px; }
.doc .when { color: var(--ink-3); font-size: 14px; margin: 0 0 34px; }
.doc h2 { font-size: 20px; letter-spacing: -.01em; margin: 38px 0 10px; }
.doc h3 { font-size: 16px; margin: 24px 0 6px; }
.doc p, .doc li { color: var(--ink-2); font-size: 16px; line-height: 1.65; }
.doc p { margin: 0 0 14px; }
.doc ul { margin: 0 0 16px; padding-left: 20px; }
.doc li { margin: 0 0 8px; }
.doc strong, .doc b { color: var(--ink); }
.doc a { color: var(--brand); }
.doc .box { background: var(--paper-2); border: 1px solid var(--paper-3);
            border-radius: 14px; padding: 18px 20px; margin: 22px 0; }
.doc .box p:last-child { margin-bottom: 0; }
.doc table { width: 100%; border-collapse: collapse; margin: 18px 0 22px; font-size: 15px; }
.doc th, .doc td { text-align: left; padding: 10px 12px 10px 0; vertical-align: top;
                   border-bottom: 1px solid var(--paper-3); color: var(--ink-2); }
.doc th { color: var(--ink); font-weight: 600; white-space: nowrap; }
.doc .back { display: inline-block; margin-top: 40px; color: var(--ink-3); font-size: 15px; }
