/* ═══════════════════════════════════════════════════════════════════════
   Compaytence x AdRevival — page layer

   This page is NOT the checkout-champ-lander layout. It takes adrevival.io's
   composition and expresses it in our palette:

   THEIRS                                    OURS
   dark the whole way down, no light bands   the warm dark ground (hue 65.6)
   indigo #4B4BE9 section bloom at 15%       the same bloom on OUR blue ladder
   centered hero + platform row              -
   two-tone headline (bright / muted tail)   -
   4px controls                              14px cards
   metal-gradient pricing tiers              Instrument Serif figures on them
   white fill CTA                            blue fill CTA, #061019 ink

   The one deliberate deviation from the v2 system: display headings are set
   in Archivo, not Instrument Serif. A serif display face is what made the
   first draft read as the Checkout Champ page wearing a new logo. Instrument
   Serif still carries every FIGURE on the page, which is where the system says
   the signature actually lives.
   ═══════════════════════════════════════════════════════════════════════ */

/* This page is dark end to end, the way theirs is. It opts out of the
   light theme rather than alternating bands. */
:root{
  --nav-h:64px;
  --ink-on-neon:#061019;      /* 7.54:1 on #33A9FF. Never white on that fill. */
  --r-ctl:4px;                /* theirs */
  --bloom:51,169,255;         /* our blue, in their bloom role */
  --sheen-a:.035;
  /* The system's --t-xs is 10.88px. It carries the kicker, the hero note and
     the step chips here, and 10.88px is under the readable floor at every
     width — not only on a phone. Held at 12px and up. */
  --t-xs:.75rem;
}

html{background:#0d0a08;scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + 12px)}
body{
  background:#0d0a08;
  color:var(--ink);
  font-family:var(--face-text);
  font-size:1rem;
  line-height:var(--lh-body);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

.shell{width:min(1180px,calc(100% - var(--s4)*2));margin-inline:auto}
.skip{position:absolute;left:-9999px;top:0;background:var(--mark-solid);
  color:var(--ink-on-neon);padding:12px 18px;border-radius:var(--r-ctl);z-index:200}
.skip:focus{left:12px;top:12px}

:where(a,button,summary):focus-visible{
  outline:2px solid var(--mark-solid);outline-offset:3px;border-radius:2px}

/* ── The bloom system ──────────────────────────────────────────────────
   Their whole section rhythm is one device: a colored wash bleeding from
   the top or the bottom edge, alternating down the page, over a constant
   dark ground. No hard seams, no light/dark flip. */
.sec{position:relative;padding-block:var(--s7)}
.sec--tight{padding-block:var(--s6)}
.sec--open{padding-block:var(--s8)}
.sec::before{content:"";position:absolute;inset:0;pointer-events:none;z-index:0}
.sec--bloom::before{
  background:linear-gradient(rgba(var(--bloom),.13),rgba(var(--bloom),0) 52%)}
.sec--bloom-up::before{
  background:linear-gradient(rgba(var(--bloom),0) 48%,rgba(var(--bloom),.13))}
.sec > *{position:relative;z-index:1}

/* ── Section heads, with their two-tone device ─────────────────────────
   "Our unmatched pricing. <muted>Suitable for all budgets.</muted>"
   The tail of the sentence drops to a muted tone. It is the single most
   recognizable typographic move on adrevival.io. */
.head{max-width:44rem}
.head--mid{max-width:46rem;margin-inline:auto;text-align:center}
.kicker{display:inline-block;font-size:var(--t-xs);letter-spacing:.14em;
  text-transform:uppercase;color:var(--mark-solid);font-weight:600;
  margin-bottom:var(--s2)}
h1,h2,h3{font-family:var(--face-text);color:var(--ink);margin:0;
  text-wrap:balance;font-weight:600}
h2{font-size:clamp(2rem,4vw,3.1rem);line-height:1.08;letter-spacing:-.005em}
h3{font-size:var(--t-lg);line-height:1.25}
.mute{color:var(--graphite)}          /* the tail of a two-tone headline */
.head p{color:var(--ink-soft);font-size:1.0625rem;margin-top:var(--s3);
  max-width:40rem}
.head--mid p{margin-inline:auto}

/* ── Buttons ───────────────────────────────────────────────────────────
   Theirs are 4px, 12/24, weight 500. The fill is ours. */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;
  min-height:44px;padding:12px 24px;border-radius:var(--r-ctl);
  font-family:var(--face-text);font-size:1rem;font-weight:600;
  text-decoration:none;border:1px solid transparent;cursor:pointer;
  transition:transform .2s var(--ease),background .2s var(--ease),
             border-color .2s var(--ease),box-shadow .2s var(--ease)}
.btn--primary{background:var(--mark-solid);color:var(--ink-on-neon)}
.btn--primary:hover{transform:translateY(-1px);
  box-shadow:0 8px 24px rgba(var(--bloom),.28)}
.btn--ghost{background:rgba(233,230,225,.06);color:var(--ink);
  border-color:rgba(233,230,225,.18)}
.btn--ghost:hover{background:rgba(233,230,225,.11);
  border-color:rgba(233,230,225,.3)}
.btn--sm{min-height:44px;padding:8px 16px;font-size:var(--t-sm)}
.btn .arrow{transition:transform .25s var(--ease)}
.btn:hover .arrow{transform:translateX(3px)}

/* ── Announcement bar ──────────────────────────────────────────────────
   Theirs is a cyan-to-blue gradient strip above the nav. Ours walks the
   blue ladder instead of introducing a second hue. */
.announce{background:linear-gradient(90deg,var(--blue-40),var(--blue-60));
  color:var(--ink-on-neon);text-align:center;font-size:var(--t-sm);
  font-weight:600;padding:0 var(--s4);position:relative;z-index:60}
/* The whole bar is one control, so it owes the full 44px rather than the
   28px a thin strip wants to be. Block rather than inline-flex: as a flex
   container the trailing arrow is a sibling of the text, so when the line
   wraps on a phone the arrow stays pinned to the right of line one instead
   of following the sentence. As a block it flows with the words. */
.announce a{color:inherit;text-decoration:none;display:block;text-align:center;
  min-height:44px;padding-block:11px;box-sizing:border-box;line-height:1.45}
.announce a:hover{text-decoration:underline}
.announce em{font-style:italic;font-family:var(--face-display);
  font-size:1.08em;font-weight:400}

/* ── Nav ───────────────────────────────────────────────────────────────*/
.nav{position:sticky;top:0;z-index:50;height:var(--nav-h);
  display:flex;align-items:center;gap:var(--s4);padding:0 var(--s4);
  background:rgba(13,10,8,.82);backdrop-filter:blur(14px) saturate(1.3);
  border-bottom:1px solid rgba(var(--rule-c),.1)}
.nav-brand{display:flex;align-items:center;gap:var(--s2);flex:0 0 auto}
.nav-brand .logo{height:19px;width:auto;display:block}
/* .wordmark paints the mark from brand.css; aspect-ratio gives it width. */
.nav-brand .wordmark{height:19px}
.nav-x{font-family:var(--face-display);font-size:1rem;color:var(--graphite);
  line-height:1}
.nav-links{display:none;align-items:center;gap:var(--s4);margin-left:auto}
.nav-links a{font-size:var(--t-sm);font-weight:500;color:var(--ink-soft);
  text-decoration:none;white-space:nowrap;
  /* a nav link is a standalone control and owes the full 44px */
  display:inline-flex;align-items:center;min-height:44px;
  transition:color .2s var(--ease)}
.nav-links a:hover{color:var(--ink)}
.nav-right{display:flex;align-items:center;gap:var(--s2);margin-left:auto}
@media (min-width:1060px){
  .nav-links{display:flex}
  .nav-right{margin-left:0}
}

/* ── Hero ──────────────────────────────────────────────────────────────
   Centered, the way theirs is. The first draft used a split hero with a
   routing diagram, which is the Checkout Champ page's shape. */
.hero{position:relative;text-align:center;
  padding-top:calc(var(--s8) + 10px);padding-bottom:var(--s7);overflow:hidden}
.hero::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(62% 48% at 50% -4%,rgba(var(--bloom),.28),transparent 70%),
    radial-gradient(38% 28% at 50% 6%,rgba(var(--bloom),.14),transparent 72%)}
.hero > *{position:relative;z-index:1}
.hero-eyebrow{display:inline-flex;align-items:center;gap:9px;
  padding:6px 14px;border-radius:999px;
  border:1px solid rgba(var(--rule-c),.16);background:rgba(var(--rule-c),.05);
  font-size:var(--t-xs);letter-spacing:.1em;text-transform:uppercase;
  color:var(--graphite);margin-bottom:var(--s4)}
.hero h1{font-size:clamp(1.85rem,5.6vw,4rem);line-height:1.06;
  letter-spacing:-.012em;font-weight:600;max-width:26ch;margin-inline:auto}
.hero-sub{color:var(--ink-soft);font-size:clamp(1rem,1.5vw,1.1875rem);
  max-width:47rem;margin:var(--s3) auto 0}
.hero-cta{display:flex;flex-wrap:wrap;gap:var(--s2);justify-content:center;
  margin-top:var(--s5)}
.hero-note{font-size:var(--t-xs);color:var(--graphite);margin-top:var(--s3);
  max-width:44ch;margin-inline:auto}

/* Platform row — their scrolling logo strip, rebuilt. Two identical groups
   inside one track; translating the track -50% lands group 2 exactly where
   group 1 started, so the loop has no seam. It also solves seven chips
   wrapping badly on a phone. */
.plats{margin-top:var(--s6);padding-top:var(--s5);
  border-top:1px solid rgba(var(--rule-c),.09);
  overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
/* The gap lives INSIDE each group as a trailing pad, and the track has none.
   With a gap on the track the width is 2*group + ONE gap, so -50% lands half
   a gap short and the loop visibly stutters once per cycle. Trailing pad
   makes the track exactly 2*group, and -50% is exactly one group. */
.plats-track{display:flex;gap:0;width:max-content;
  animation:marquee 34s linear infinite}
.plats-group{display:flex;gap:var(--s5);padding-right:var(--s5);flex:0 0 auto}
.plat{display:inline-flex;align-items:center;gap:9px;font-size:var(--t-sm);
  font-weight:500;color:var(--ink-soft);white-space:nowrap}
/* One square box for all seven. Their viewBoxes range from 22x22 to 224x175,
   so the SVG's default preserveAspectRatio does the centering and a wide mark
   simply uses less of the box's height. Monochrome via currentColor, the way
   AdRevival renders them. */
.plat-logo{width:19px;height:19px;flex:0 0 auto;fill:currentColor;
  color:var(--ink);opacity:.92}
/* Optical sizing. At one shared 19px box the painted areas ran 176px^2 (TikTok)
   to 354px^2 (Outbrain) — a 2x spread, and visibly uneven in a row. These boxes
   are the measured half-correction toward equal painted area: full correction
   pushed Meta to a 24px box, which is too wide a footprint for a mark that is
   short. Re-measure with getBBox() on <use> if a logo is ever swapped. */
.plat-logo--meta{width:21px;height:21px}
.plat-logo--tiktok{width:21px;height:21px}
.plat-logo--snapchat{width:20px;height:20px}
.plat-logo--rumble{width:19px;height:19px}
.plat-logo--taboola{width:19px;height:19px}
.plat-logo--newsbreak{width:18px;height:18px}
.plat-logo--outbrain{width:18px;height:18px}
/* The sprite is a real element, so it needs taking out of flow explicitly —
   display:none on an <svg> holding <symbol>s breaks <use> in some engines. */
.sprite{position:absolute;width:0;height:0;overflow:hidden}
.plats:hover .plats-track{animation-play-state:paused}

/* ── The spend-ceiling graph ───────────────────────────────────────────
   Their leaderboard uses pedestals of different heights to rank spend;
   this is the same idea laid on its side, answering the one question the
   pricing block leaves open: which plan do I actually need. The two
   unlimited tiers run the full track and fade out at the right rather
   than stopping, because a bar cannot honestly represent no ceiling. */
.ladder-wrap{margin-top:var(--s6);padding:var(--s5);border-radius:var(--r-lg);
  border:1px solid rgba(var(--rule-c),.12);background:var(--card)}
.lad-cap{display:flex;justify-content:space-between;align-items:baseline;
  gap:var(--s3);padding-bottom:var(--s3);
  border-bottom:1px solid rgba(var(--rule-c),.1);
  font-size:var(--t-xs);letter-spacing:.12em;text-transform:uppercase;
  font-weight:600;color:var(--ink-soft)}
.lad-cap-h{color:var(--graphite);letter-spacing:.06em}
.ladder{margin-top:var(--s4);display:grid;gap:var(--s3)}
.lad{display:grid;grid-template-columns:132px 1fr 92px;gap:var(--s3);
  align-items:center}
.lad-l{font-size:var(--t-sm);font-weight:600;color:var(--ink-soft);
  white-space:nowrap}
.lad-track{height:12px;border-radius:999px;position:relative;
  background:rgba(var(--rule-c),.08);overflow:hidden}
.lad-fill{position:absolute;inset:0 auto 0 0;width:0;border-radius:999px;
  background:linear-gradient(90deg,var(--blue-80),var(--blue-40));
  transition:width 1.1s cubic-bezier(.19,1,.22,1)}
.lad--inf .lad-fill{
  background:linear-gradient(90deg,var(--blue-80),var(--blue-40) 72%,
             rgba(95,183,255,0))}
.lad-v{font-family:var(--face-display);font-size:1.25rem;line-height:1;
  color:var(--fig);font-variant-numeric:tabular-nums;text-align:right;
  white-space:nowrap}
.lad--inf .lad-v{color:var(--blue-30)}

/* ── Benefit strip — their two-tone line, four across ──────────────────*/
.bens{display:grid;gap:var(--s5);
  grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.ben{padding-top:var(--s3);border-top:1px solid rgba(var(--rule-c),.14)}
.ben b{display:block;font-weight:600;color:var(--ink);font-size:var(--t-sm);
  letter-spacing:.01em}
.ben span{display:block;color:var(--graphite);font-size:var(--t-sm)}

/* ── Problem beats ─────────────────────────────────────────────────────
   adrevival.io/payments runs "You find a winner / They shut you down /
   You lose money" as three stacked beats. Same device, our subject. */
.beats{display:grid;gap:var(--s3);margin-top:var(--s6);
  grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}
.beat{padding:var(--s5);border-radius:var(--r-lg);background:var(--card);
  border:1px solid rgba(var(--rule-c),.12);position:relative}
.beat-n{font-family:var(--face-display);font-size:2rem;line-height:1;
  color:var(--fig);font-variant-numeric:tabular-nums;display:block;
  margin-bottom:var(--s2)}
.beat h3{font-size:1.0625rem;margin-bottom:6px}
.beat p{color:var(--ink-soft);font-size:var(--t-sm);margin:0}
.beat--end{border-color:rgba(var(--bloom),.3);
  background:linear-gradient(160deg,rgba(var(--bloom),.09),rgba(var(--bloom),.02))}

/* ── Steps — the funnel spine ──────────────────────────────────────────*/
.steps{margin-top:var(--s6);display:grid;gap:0}
.step{display:grid;grid-template-columns:auto 1fr;gap:var(--s4);
  padding:var(--s4) 0;border-top:1px solid rgba(var(--rule-c),.12);
  align-items:start}
.step:last-child{border-bottom:1px solid rgba(var(--rule-c),.12)}
.step-n{width:38px;height:38px;border-radius:50%;display:grid;
  place-items:center;font-family:var(--face-display);font-size:1.05rem;
  color:var(--mark-solid);border:1px solid rgba(var(--bloom),.35);
  background:rgba(var(--bloom),.07);font-variant-numeric:tabular-nums}
.step h3{font-size:1.125rem;margin-bottom:4px}
.step p{color:var(--ink-soft);font-size:var(--t-sm);margin:0;max-width:52rem}
.step-who{display:inline-block;margin-top:8px;font-size:var(--t-xs);
  letter-spacing:.08em;text-transform:uppercase;font-weight:600;
  padding:3px 9px;border-radius:999px}
.step-who--ar{color:var(--ink-soft);background:rgba(var(--rule-c),.09);
  border:1px solid rgba(var(--rule-c),.16)}
.step-who--cp{color:var(--mark-solid);background:rgba(var(--bloom),.1);
  border:1px solid rgba(var(--bloom),.3)}

/* ── Feature grid — compact, not the alternating slabs ─────────────────*/
.grid3{display:grid;gap:var(--s3);margin-top:var(--s6);
  grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.cell{padding:var(--s5);border-radius:var(--r-lg);background:var(--card);
  border:1px solid rgba(var(--rule-c),.12);
  transition:border-color .3s var(--ease),background .3s var(--ease),
             transform .45s var(--ease-out)}
.cell:hover{background:var(--card-hover);
  border-color:rgba(var(--bloom),.28);transform:translateY(-2px)}
.cell h3{font-size:1.0625rem;margin-bottom:8px}
.cell p{color:var(--ink-soft);font-size:var(--t-sm);margin:0}
.cell-fig{font-family:var(--face-display);font-size:1.75rem;line-height:1;
  color:var(--fig);font-variant-numeric:tabular-nums;display:block;
  margin-bottom:var(--s2)}

/* ── Pricing ───────────────────────────────────────────────────────────*/
.tabs{display:inline-flex;gap:5px;padding:5px;border-radius:8px;
  background:rgba(var(--rule-c),.07);border:1px solid rgba(var(--rule-c),.12);
  margin:var(--s5) auto 0}
.tab{min-height:44px;padding:8px 22px;border-radius:var(--r-ctl);border:0;
  background:transparent;color:var(--graphite);font-family:var(--face-text);
  font-size:var(--t-sm);font-weight:600;cursor:pointer;
  transition:background .2s var(--ease),color .2s var(--ease)}
.tab[aria-selected="true"]{background:var(--mark-solid);
  color:var(--ink-on-neon)}
.tab:hover:not([aria-selected="true"]){color:var(--ink)}

.tiers{display:grid;gap:var(--s3);margin-top:var(--s5);
  grid-template-columns:repeat(auto-fit,minmax(238px,1fr))}
/* `display:grid` outranks the UA's [hidden]{display:none}, so the inactive
   tab panel stayed on screen underneath the active one. */
.tiers[hidden]{display:none}
.tier{position:relative;padding:var(--s5) var(--s4);border-radius:var(--r-lg);
  border:1px solid rgba(var(--rule-c),.14);overflow:hidden;
  display:flex;flex-direction:column;
  transition:transform .45s var(--ease-out),border-color .3s var(--ease)}
/* Their tiers are metal gradients. Theirs run light, which puts white
   labels near the contrast floor; ours are dark metals with the same
   diagonal sweep, so every label clears 4.5:1. */
.tier--bronze{background:linear-gradient(152deg,#3b3025,#241d16)}
.tier--gold{background:linear-gradient(152deg,#473a1d,#262010)}
.tier--diamond{background:linear-gradient(152deg,#0c3a5d,#06243a);
  border-color:rgba(var(--bloom),.4)}
.tier--platinum{background:linear-gradient(152deg,#343940,#1e2124)}
.tier::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(152deg,rgba(255,255,255,.09),transparent 46%)}
.tier > *{position:relative;z-index:1}
.tier:hover{transform:translateY(-3px)}
.tier-name{font-size:var(--t-sm);font-weight:600;letter-spacing:.06em;
  text-transform:uppercase;color:var(--ink);display:flex;align-items:center;
  gap:9px;flex-wrap:wrap}
.tier-badge{font-size:var(--t-xs);letter-spacing:.08em;text-transform:uppercase;
  font-weight:700;padding:3px 8px;border-radius:999px;
  background:var(--mark-solid);color:var(--ink-on-neon)}
.tier-price{font-family:var(--face-display);font-size:3rem;line-height:1;
  color:var(--ink);font-variant-numeric:tabular-nums;
  display:block;margin-top:var(--s3)}
.tier--diamond .tier-price{color:var(--blue-30)}
.tier-per{font-size:var(--t-xs);color:var(--graphite);display:block;
  margin-top:5px}
.tier ul{list-style:none;padding:0;margin:var(--s4) 0 var(--s5);
  display:grid;gap:9px}
.tier li{font-size:var(--t-sm);color:var(--ink-soft);padding-left:22px;
  position:relative;line-height:1.45}
.tier li::before{content:"";position:absolute;left:0;top:7px;width:12px;
  height:7px;border-left:1.5px solid var(--mark-solid);
  border-bottom:1.5px solid var(--mark-solid);transform:rotate(-45deg)}
.tier li b{color:var(--ink);font-weight:600}
.tier .btn{margin-top:auto;width:100%}
.tier-foot{font-size:var(--t-xs);color:var(--graphite);margin-top:var(--s2);
  text-align:center}

/* ── Why — the payments argument ───────────────────────────────────────*/
.args{display:grid;gap:var(--s3);margin-top:var(--s6)}
@media (min-width:860px){.args{grid-template-columns:1fr 1fr}}
.arg{padding:var(--s5);border-radius:var(--r-lg);
  border:1px solid rgba(var(--rule-c),.12);background:var(--card)}
/* The lead argument is the one that costs a merchant money, so it gets
   the full width and the accent. Lopsided on purpose. */
.arg--lead{border-color:rgba(var(--bloom),.28);
  background:linear-gradient(160deg,rgba(var(--bloom),.08),rgba(var(--bloom),.015))}
@media (min-width:860px){.arg--lead{grid-column:1 / -1}}
.arg h3{font-size:1.0625rem;margin-bottom:8px;display:flex;gap:9px;
  align-items:baseline}
.arg h3 i{width:6px;height:6px;border-radius:50%;background:var(--mark-solid);
  flex:0 0 auto;transform:translateY(-2px)}
.arg p{color:var(--ink-soft);font-size:var(--t-sm);margin:0}

.note{padding:var(--s5);border-radius:var(--r-lg);
  border:1px solid rgba(var(--rule-c),.14);background:rgba(var(--rule-c),.04);
  margin-top:var(--s5);
  /* system.css caps .note at 568px and sets .note-l in Instrument Serif
     italic. Both are right for a document and wrong here: this note spans
     the argument grid above it, and nothing else on the page is serif
     except the figures. */
  max-width:none}
.note-l{font-family:var(--face-text);font-style:normal;
  font-size:var(--t-xs);letter-spacing:.12em;text-transform:uppercase;
  color:var(--mark-solid);font-weight:600;margin-bottom:8px}
.note p{color:var(--ink-soft);font-size:var(--t-sm);margin:0}

/* ── Reserve Recovery — the Compaytence block ──────────────────────────
   Andrea's note was that a page on our domain carries too little of our
   branding. This section is the answer: it is the one place on the page that
   is unmistakably ours, so it carries the wordmark, a heavier blue wash than
   the partner sections, and a left rule that no AdRevival block uses. */
.cp{position:relative}
.cp::before{background:
  linear-gradient(rgba(var(--bloom),.16),rgba(var(--bloom),.03) 60%,transparent)}
.cp-mark{margin-bottom:var(--s4)}
.cp-mark .wordmark{height:22px}
/* Our three figures. Instrument Serif, blue, tabular and right-of-nothing —
   the display-figure treatment the design system calls the signature, used
   here because this is the one block on the page making a Compaytence claim. */
.rstats{display:grid;gap:var(--s5);margin-top:var(--s6);
  grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.rstat{padding-top:var(--s3);border-top:1px solid rgba(var(--bloom),.28)}
.rstat-n{font-family:var(--face-display);font-size:clamp(2.4rem,4.4vw,3.4rem);
  line-height:1;color:var(--fig);font-variant-numeric:tabular-nums;
  display:block;letter-spacing:-.01em}
.rstat-l{display:block;margin-top:var(--s2);font-size:var(--t-sm);
  font-weight:600;color:var(--ink)}

.recs{display:grid;gap:var(--s3);margin-top:var(--s6);
  grid-template-columns:repeat(auto-fit,minmax(258px,1fr))}
.rec{padding:var(--s5);border-radius:var(--r-lg);background:var(--card);
  border:1px solid rgba(var(--rule-c),.12);border-left:2px solid var(--mark-solid);
  transition:background .3s var(--ease),border-color .3s var(--ease)}
.rec:hover{background:var(--card-hover)}
.rec h3{font-size:1.0625rem;margin-bottom:8px}
.rec p{color:var(--ink-soft);font-size:var(--t-sm);margin:0}

/* ── Proof wall ────────────────────────────────────────────────────────*/
.wall{display:grid;gap:var(--s3);margin-top:var(--s6);
  grid-template-columns:repeat(auto-fit,minmax(268px,1fr))}
.card-q{padding:var(--s5);border-radius:var(--r-lg);background:var(--card);
  border:1px solid rgba(var(--rule-c),.12);margin:0;
  transition:border-color .3s var(--ease),background .3s var(--ease)}
.card-q:hover{border-color:rgba(var(--bloom),.25);background:var(--card-hover)}
.card-q p{font-size:.9875rem;color:var(--ink);margin:0 0 var(--s3);
  line-height:1.5}
.card-q cite{font-style:normal;font-size:var(--t-xs);color:var(--graphite);
  display:block}
.card-q .who{color:var(--ink-soft);font-weight:600;display:block;
  font-size:var(--t-sm)}

/* ── FAQ — <details>, so it needs no script and stays accessible ───────*/
.faq{margin-top:var(--s6);border-top:1px solid rgba(var(--rule-c),.12)}
.faq details{border-bottom:1px solid rgba(var(--rule-c),.12)}
.faq summary{cursor:pointer;list-style:none;padding:var(--s4) 0;
  display:flex;align-items:center;justify-content:space-between;gap:var(--s4);
  font-size:1.0625rem;font-weight:600;color:var(--ink);min-height:44px}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";width:11px;height:11px;flex:0 0 auto;
  border-right:1.5px solid var(--graphite);border-bottom:1.5px solid var(--graphite);
  transform:rotate(45deg) translateY(-3px);transition:transform .25s var(--ease)}
.faq details[open] summary::after{transform:rotate(-135deg) translateY(-3px)}
.faq details p{color:var(--ink-soft);font-size:var(--t-sm);
  margin:0 0 var(--s4);max-width:56rem;padding-right:var(--s5)}

/* ── Close ─────────────────────────────────────────────────────────────*/
.close{text-align:center;position:relative;overflow:hidden}
.close .hero-cta{margin-top:var(--s5)}
.pagefoot{margin-top:var(--s8);padding-top:var(--s4);
  border-top:1px solid rgba(var(--rule-c),.1);display:flex;flex-wrap:wrap;
  gap:var(--s2) var(--s5);justify-content:space-between;
  font-size:var(--t-xs);color:var(--graphite);text-align:left}

/* ── Source lines ──────────────────────────────────────────────────────*/
.src{font-size:var(--t-xs);color:var(--graphite);margin-top:var(--s5);
  max-width:56rem;line-height:1.55}
.src a{color:var(--mark);text-decoration:underline;
  text-underline-offset:2px}

/* ── Partner wordmark ──────────────────────────────────────────────────
   Their nav SVG is authored fill="currentColor" at 118x30, so one asset
   serves every context. Width AND height are both set: a viewBox-only SVG
   sized on one axis is at the mercy of intrinsic-ratio handling. */
.ar-mark{display:block;fill:currentColor}
.ar-mark--nav{width:63px;height:16px;color:var(--ink)}
.ar-mark--eb{width:47px;height:12px;color:var(--ink-soft)}
.ar-mark--foot{width:71px;height:18px;color:var(--graphite)}

/* ── Reveals — their `blurin`, measured off adrevival.io ──────────────
   0% { opacity:0; filter:blur(.5rem); transform:translateY(1rem) }
   0.85s ease. The blur is what makes it read as theirs rather than as a
   generic rise, and it is cheap: one compositor property. */
.rv{opacity:0;filter:blur(8px);transform:translateY(16px);
  transition:opacity .85s ease,filter .85s ease,transform .85s ease}
.rv.in{opacity:1;filter:blur(0);transform:none}

/* ── Their `lightsweep`, in our blue ──────────────────────────────────
   Theirs: a 300%-wide gradient clipped to the text, background-position
   swept 100%→0% over 3s, infinite. Their highlight rides on #4B4BE9; ours
   rides on the blue ladder, because a second accent hue is not ours to
   introduce. Measured 8.9:1 against the page ground at the darkest point
   of the sweep. */
@keyframes lightsweep{from{background-position:100% 0}to{background-position:0 0}}
.sweep{
  background:linear-gradient(90deg,
    var(--blue-40) 0%, var(--blue-40) 40%,
    #eaf6ff 50%,
    var(--blue-40) 60%, var(--blue-40) 100%) 0 0 / 300% 100% no-repeat text;
  -webkit-text-fill-color:transparent;color:var(--blue-40);
  animation:lightsweep 3s linear infinite}

/* ── Their marquee — two identical tracks, translate -50%, seamless ──── */
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms !important;
    animation-iteration-count:1 !important;transition-duration:.001ms !important}
  .rv{opacity:1;filter:none;transform:none}
  /* The two infinite loops need their end state to be legible, not their
     0% frame: a paused marquee at translateX(0) reads as a normal row, and
     a paused sweep needs a solid fill or the text disappears. */
  .plats-track{animation:none;transform:none}
  .sweep{animation:none;background:none;-webkit-text-fill-color:var(--blue-40)}
  .lad-fill{transition:none}
  html{scroll-behavior:auto}
}

/* ── Grain ─────────────────────────────────────────────────────────────*/
.grain{position:fixed;inset:0;pointer-events:none;z-index:100;
  opacity:var(--grain-op);mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E")}

/* ── Responsive ────────────────────────────────────────────────────────*/
/* The ladder's 132px label + 92px value columns leave a 20px track at 390px:
   nothing overflows, no text is too small, and the graph is unreadable. Label
   and value share a row, the bar gets the full width underneath. */
@media (max-width:480px){
  .lad-cap{flex-direction:column;gap:4px;align-items:flex-start}
}

@media (max-width:640px){
  .lad{grid-template-columns:1fr auto;
       grid-template-areas:"lab val" "trk trk";gap:7px var(--s2)}
  .lad-l{grid-area:lab}
  .lad-v{grid-area:val;font-size:1.125rem}
  .lad-track{grid-area:trk}
  .ladder{gap:var(--s3)}
  .ladder-wrap{padding:var(--s4)}
}

@media (max-width:767px){
  :root{--nav-h:58px}
  .sec{padding-block:var(--s7)}
  .sec--open{padding-block:var(--s8)}
  .hero{padding-top:var(--s7)}
  .hero-cta .btn{width:100%}
  .step{grid-template-columns:auto 1fr;gap:var(--s3)}
  .pagefoot{flex-direction:column}
  :root{--t-xs:.78rem}   /* a touch larger again at arm's length */
}
/* At 360px the brand lockup (267px, flex:0 0 auto) plus the CTA pushed the
   nav 23px past the viewport and took the whole page sideways with it. The
   partner mark comes out of the bar and the hero eyebrow carries the lockup
   instead — the same trade the Checkout Champ nav makes. */
@media (max-width:560px){
  .nav{padding:0 var(--s3);gap:var(--s2)}
  .nav-brand .logo,.nav-brand .wordmark{height:16px}
  .nav-x,.nav-brand .ar-mark{display:none}
}
