/* ============================================================================
   Account Finder — site design system
   One stylesheet, five pages. Themes are CSS custom properties swapped on
   <html data-theme>; every page shares the same grid, rhythm and signatures.
   ========================================================================== */

/* --- fixed palette (from lib/brand.ts + site/styles.css) ----------------- */
:root{
  --bone:#fbfaf8; --tint:#f7ecec; --paper:#f4f1ec;
  --deep:#2b0f0f; --night:#141010;
  --ox:#7f1d1d;   --ox-d:#5c1414;
  --ink:#1e2430;  --muted:#5b6472;
  --line:#e5e2dd; --line-2:#d4d0c9;
  --green:#1b7f4f;
  --ease:cubic-bezier(.22,.61,.36,1);
  --ease-out:cubic-bezier(.16,1,.3,1);

  /* section rhythm — the single vertical unit that makes 5 files feel like 1 */
  --rhythm:clamp(64px,9vw,128px);

  --promo-h:36px;
  --nav-h:64px;
}

/* --- theme sets ---------------------------------------------------------- */
:root,[data-theme="bone"]{
  --bg:var(--bone); --text:var(--ink); --dim:var(--muted);
  --rule:var(--line); --rule-2:var(--line-2);
  --accent:var(--ox); --on-accent:var(--bone);
  --panel:#fff; --panel-rule:var(--line); --ghost:rgba(30,36,48,.06);
  --wine:var(--ox-d);
}
[data-theme="tint"]{
  --bg:var(--tint); --text:var(--ink); --dim:#6b5656;
  --rule:#e6d5d5; --rule-2:#dcc6c6;
  --accent:var(--ox); --on-accent:var(--tint);
  --panel:#fdf7f7; --panel-rule:#e6d5d5; --ghost:rgba(127,29,29,.07);
  --wine:var(--ox-d);
}
[data-theme="paper"]{
  --bg:var(--paper); --text:var(--ink); --dim:var(--muted);
  --rule:#e2ded6; --rule-2:var(--line-2);
  --accent:var(--ox); --on-accent:var(--paper);
  --panel:#faf8f4; --panel-rule:#e2ded6; --ghost:rgba(30,36,48,.06);
  --wine:var(--ox-d);
}
[data-theme="deep"]{
  --bg:var(--deep); --text:#f4ebe8; --dim:#b99b96;
  --rule:rgba(247,236,236,.16); --rule-2:rgba(247,236,236,.26);
  --accent:#f7ecec; --on-accent:var(--deep);
  --panel:#3a1616; --panel-rule:rgba(247,236,236,.16); --ghost:rgba(247,236,236,.07);
  --wine:var(--ox);
}
/* On near-black, oxblood is unreadable as text — so the dark themes promote the
   brand's own tint to the accent role and keep oxblood for filled ground. No
   colour outside the brand palette is introduced anywhere on the site. */
[data-theme="night"]{
  --bg:var(--night); --text:#efe7e4; --dim:#8d7c78;
  --rule:rgba(239,231,228,.14); --rule-2:rgba(239,231,228,.26);
  --accent:var(--tint); --on-accent:var(--night);
  --panel:#1c1616; --panel-rule:rgba(239,231,228,.14); --ghost:rgba(239,231,228,.06);
  --wine:var(--ox);
}

/* --- reset --------------------------------------------------------------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{
  margin:0; background:var(--bg); color:var(--text);
  font-family:"Instrument Sans",-apple-system,sans-serif;
  font-size:clamp(1rem,.94rem + .3vw,1.125rem); line-height:1.55;
  -webkit-font-smoothing:antialiased;
  transition:background-color .55s var(--ease),color .55s var(--ease);
  overflow-x:hidden;
}
img,svg,canvas{display:block;max-width:100%}
a{color:inherit}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
hr{border:0;border-top:1px solid var(--rule);margin:0}
::selection{background:var(--ox);color:#fff}

/* --- type ---------------------------------------------------------------- */
.display,h1{
  font-family:"Fraunces",Georgia,serif; font-weight:900;
  font-variation-settings:"SOFT" 0,"WONK" 1;
  font-size:clamp(2.75rem,1.2rem + 7.5vw,8.5rem);
  line-height:.88; letter-spacing:-.032em; margin:0;
  text-wrap:balance;
}
.display--sm{font-size:clamp(2.2rem,1rem + 5vw,5rem)}
h2,.h2{
  font-family:"Fraunces",Georgia,serif; font-weight:900;
  font-variation-settings:"SOFT" 0,"WONK" 0;
  font-size:clamp(1.75rem,1rem + 2.8vw,3.25rem);
  line-height:1.02; letter-spacing:-.018em; margin:0; text-wrap:balance;
}
h3,.h3{
  font-family:"Instrument Sans",sans-serif; font-weight:600;
  font-size:clamp(1.05rem,.98rem + .4vw,1.3rem);
  line-height:1.25; letter-spacing:-.01em; margin:0;
}
p{margin:0 0 1em;max-width:64ch}
p:last-child{margin-bottom:0}
.lede{font-size:clamp(1.05rem,.98rem + .6vw,1.35rem);line-height:1.5;color:var(--dim);max-width:52ch}
.lede strong{color:var(--text);font-weight:500}
.mono{font-family:"IBM Plex Mono",ui-monospace,monospace;font-feature-settings:"tnum"}

/* signature (b) — micro-label: 4px dot, 24px rule, then the text. The marks
   LEAD the label so a long eyebrow can wrap to two lines without stranding
   them mid-air at the end of line one. */
.micro{
  display:flex;align-items:flex-start;gap:10px;
  font-family:"IBM Plex Mono",monospace; font-size:11px; font-weight:500;
  letter-spacing:.14em; text-transform:uppercase; line-height:1.45;
  color:var(--dim); margin:0 0 18px;
}
.micro::after{content:"";order:-1;flex:0 0 4px;height:4px;border-radius:50%;
              background:var(--accent);margin-top:.45em}
.micro::before{content:"";flex:0 0 24px;height:1px;background:var(--rule-2);margin-top:.65em}

/* signature (c) — every statistic in tabular mono, underlined to digit width */
.stat{
  font-family:"IBM Plex Mono",monospace;font-feature-settings:"tnum";
  font-size:1.4em;font-weight:500;letter-spacing:-.02em;
  display:inline-block;padding-bottom:2px;
  border-bottom:2px solid var(--accent);
}

/* --- grid ---------------------------------------------------------------- */
.grid{
  display:grid;grid-template-columns:repeat(16,1fr);
  column-gap:clamp(10px,1.4vw,22px);
  padding-inline:clamp(18px,4vw,40px);
  max-width:1560px;margin-inline:auto;
}
.inset{grid-column:3/15}
/* THE break rule: only display type and full-bleed visuals may leave the
   inset, and only by reaching column 1 or 17 — so a break always touches
   an edge and reads as intent, never as a stray column. */
.bleed-r{grid-column:3/17}
.bleed-l{grid-column:1/15}
.bleed{grid-column:1/-1}

/* Below the desktop breakpoint the 16-column field collapses to 4 and every
   band goes full width. This lived in each concept page's own <style> block,
   which meant the 23 pages ported into the system inherited a desktop-only
   grid: their copy sat in columns 3-14 of 16 on a phone, and anything with a
   hard minimum width (a table, a wide card row) pushed the page sideways. It
   belongs to the grid, so it lives with the grid. */
@media (max-width:1023px){
  .grid{grid-template-columns:repeat(4,1fr)}
  .inset,.bleed-r,.bleed-l{grid-column:1/-1}
}
/* A grid item's default min-width is auto, so a child with an intrinsic minimum
   — a table at min-width:520px inside its own scroll container — stretches the
   COLUMN instead of scrolling. Without this the scroll container never scrolls. */
.inset,.bleed-r,.bleed-l,.bleed{min-width:0}

section{padding-block:var(--rhythm);position:relative}
.sec-rule{border-top:1px solid var(--rule)}

/* signature (a) — the ghost ordinal. It is a GRID ITEM in columns 1–2, not an
   absolutely-positioned overlay: the gutter is where it belongs, and placing it
   by grid means it can never collide with the inset copy at any width. */
.ord{
  grid-column:1/3; justify-self:end; align-self:start;
  font-family:"Fraunces",Georgia,serif;font-weight:900;
  font-size:clamp(4rem,7.6vw,8.5rem);line-height:.72;letter-spacing:-.05em;
  color:transparent;-webkit-text-stroke:1px var(--rule-2);
  margin-top:-.09em;margin-right:clamp(10px,1.4vw,22px);
  pointer-events:none;user-select:none;
}
@media (max-width:1023px){.ord{display:none}}

/* --- skip link + focus ---------------------------------------------------- */
.skip{
  position:fixed;top:8px;left:8px;z-index:80;
  background:var(--ox);color:#f7ecec;text-decoration:none;
  padding:11px 16px;font-size:13px;font-weight:600;
  transform:translateY(-160%);transition:transform .2s var(--ease);
}
.skip:focus{transform:none}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
main:focus{outline:none}

/* --- promo strip --------------------------------------------------------- */
/* The offer, stated before anything else, and gone the moment you engage. */
.promo{
  position:fixed;inset:0 0 auto;z-index:61;height:var(--promo-h);
  background:var(--ox);color:#f7ecec;
  transition:transform .4s var(--ease);
}
.promo-in{
  display:flex;align-items:center;gap:11px;height:100%;
  padding-inline:clamp(18px,4vw,40px);max-width:1560px;margin-inline:auto;
  font-size:12.5px;letter-spacing:-.005em;
}
.promo p{margin:0;max-width:none;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.promo b{font-weight:600}
.promo-more{opacity:.76}
.promo a{
  margin-left:auto;white-space:nowrap;text-decoration:none;font-weight:600;
  border-bottom:1px solid rgba(247,236,236,.45);padding-bottom:1px;
}
.promo a i{font-style:normal;display:inline-block;transition:transform .22s var(--ease)}
.promo a:hover i{transform:translateX(3px)}
.promo-dot{
  width:6px;height:6px;border-radius:50%;background:#fbfaf8;flex:0 0 auto;
  animation:af-pulse 2.8s var(--ease) infinite;
}
@keyframes af-pulse{0%,100%{opacity:.3;transform:scale(.75)}50%{opacity:1;transform:scale(1)}}
body.scrolled .promo{transform:translateY(-100%)}

/* --- nav ----------------------------------------------------------------- */
.nav{
  position:fixed;left:0;right:0;top:var(--promo-h);z-index:60;
  background:color-mix(in srgb,var(--bg) 84%,transparent);
  backdrop-filter:blur(16px) saturate(1.35);-webkit-backdrop-filter:blur(16px) saturate(1.35);
  border-bottom:1px solid var(--rule);
  transition:top .4s var(--ease),background-color .55s var(--ease),border-color .55s var(--ease);
}
body.scrolled .nav{top:0}
.nav-in{
  display:flex;align-items:center;gap:clamp(12px,2vw,28px);
  height:var(--nav-h);padding-inline:clamp(18px,4vw,40px);
  max-width:1560px;margin-inline:auto;transition:height .3s var(--ease);
}
body.scrolled .nav-in{height:54px}

/* wordmark — the real brand mark, themed live and poured on hover */
.wm{display:flex;align-items:center;gap:10px;text-decoration:none;flex:0 0 auto}
.wm-mark{width:30px;height:30px;flex:0 0 auto;display:block;
         transition:width .3s var(--ease),height .3s var(--ease),transform .4s var(--ease)}
body.scrolled .wm-mark{width:26px;height:26px}
.wm-mark svg{width:100%;height:100%;display:block;overflow:visible}
.m-pin{fill:var(--accent);transition:fill .55s var(--ease)}
.m-glass{fill:var(--bg);transition:fill .55s var(--ease)}
.m-stem{stroke:var(--bg);stroke-width:1.1;stroke-linecap:round;fill:none;transition:stroke .55s var(--ease)}
.m-wine{fill:var(--wine);transition:transform .55s var(--ease-out),fill .55s var(--ease)}
.wm:hover .m-wine,.wm:focus-visible .m-wine{transform:translateY(-8.4px)}
.wm:hover .wm-mark{transform:rotate(-5deg)}
.wm-tx{font-weight:600;font-size:16px;letter-spacing:-.022em;white-space:nowrap}

/* links — one measuring indicator, the same device as the page tab sliders */
.nav-links{display:flex;gap:2px;margin-left:auto;position:relative}
.nav-links a{
  position:relative;z-index:1;font-size:14px;font-weight:500;letter-spacing:-.012em;
  text-decoration:none;color:var(--dim);padding:9px 14px;transition:color .22s;
}
.nav-links a:hover,.nav-links a[aria-current]{color:var(--text)}
.nav-ind{
  position:absolute;top:0;bottom:0;left:0;width:0;z-index:0;opacity:0;
  background:var(--ghost);border-bottom:1.5px solid var(--accent);
  transition:transform .42s var(--ease-out),width .42s var(--ease-out),opacity .25s;
}
.nav-ind.on{opacity:1}

.nav-end{display:flex;align-items:center;gap:clamp(10px,1.3vw,20px);flex:0 0 auto}
.nav-signin{font-size:14px;font-weight:500;color:var(--dim);text-decoration:none;transition:color .2s}
.nav-signin:hover{color:var(--text)}
.nav-cta{
  position:relative;overflow:hidden;display:inline-flex;align-items:center;gap:7px;
  font-size:13.5px;font-weight:600;letter-spacing:-.012em;text-decoration:none;white-space:nowrap;
  background:var(--accent);color:var(--on-accent);padding:10px 16px;
  transition:background-color .55s var(--ease),color .55s var(--ease);
}
.nav-cta i{font-style:normal;transition:transform .25s var(--ease)}
.nav-cta:hover i{transform:translateX(3px)}
.nav-cta::after{
  content:"";position:absolute;top:0;bottom:0;left:-60%;width:38%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.3),transparent);
  transform:skewX(-18deg);
}
.nav-cta:hover::after{animation:af-sheen .75s var(--ease) forwards}
@keyframes af-sheen{to{left:130%}}

/* hairline scroll progress — persists on every page */
.prog{position:absolute;left:0;bottom:-1px;height:1.5px;background:var(--accent);width:0}

.burger{display:none;margin-left:auto;padding:8px;line-height:0}
.burger span{display:block;width:20px;height:1.5px;background:var(--text);margin:4px 0;
             transition:transform .3s var(--ease),opacity .2s}
.navopen .burger span:nth-child(1){transform:translateY(5.5px) rotate(45deg)}
.navopen .burger span:nth-child(2){opacity:0}
.navopen .burger span:nth-child(3){transform:translateY(-5.5px) rotate(-45deg)}

/* --- mobile sheet -------------------------------------------------------- */
.nav-sheet{
  position:fixed;left:0;right:0;top:calc(var(--promo-h) + var(--nav-h));z-index:59;
  background:var(--bg);border-bottom:1px solid var(--rule);
  padding:6px clamp(18px,4vw,40px) 26px;
  transform:translateY(-10px);opacity:0;
  /* visibility, not just opacity — a hidden menu must leave the tab order too */
  visibility:hidden;pointer-events:none;
  transition:transform .28s var(--ease),opacity .22s,visibility 0s .28s,top .4s var(--ease);
}
body.scrolled .nav-sheet{top:var(--nav-h)}
body.navopen .nav-sheet{transform:none;opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}
/* direct children only — otherwise this swallows the Sign in / CTA links
   inside .sheet-end and gives them a stray rule and the wrong size */
.nav-sheet > a{
  display:block;text-decoration:none;border-bottom:1px solid var(--rule);
  padding:16px 0;font-weight:600;font-size:1.35rem;letter-spacing:-.025em;
}
.nav-sheet > a[aria-current]{color:var(--accent)}
.sheet-end{display:flex;align-items:center;gap:20px;margin-top:24px}
.sheet-end .nav-cta{font-size:14px;padding:13px 20px}

/* The full site carries six primary links, not the four the concept had.
   Six at 14px plus the wordmark and the CTA need ~1010px, so the sheet takes
   over well before they would collide — a burger at 1024 is normal; a nav that
   overlaps its own call to action is not. */
@media (max-width:1099px){
  .nav-links,.nav-end{display:none}
  .burger{display:block}
}
@media (min-width:1100px){.nav-sheet{display:none}}
@media (max-width:760px){
  .promo-more{display:none}
  :root{--nav-h:58px}
}
main{padding-top:calc(var(--promo-h) + var(--nav-h))}

/* --- buttons ------------------------------------------------------------- */
.btn{
  display:inline-flex;align-items:center;gap:10px;text-decoration:none;
  font-family:"IBM Plex Mono",monospace;font-size:12.5px;letter-spacing:.07em;
  text-transform:uppercase;padding:14px 22px;border:1px solid var(--accent);
  background:var(--accent);color:var(--on-accent);
  transition:background-color .5s var(--ease),color .5s var(--ease),transform .2s var(--ease);
}
.btn:hover{transform:translateY(-2px)}
.btn--ghost{background:transparent;color:var(--text);border-color:var(--rule-2)}
.btn--ghost:hover{border-color:var(--accent)}
.btn i{font-style:normal;transition:transform .2s var(--ease)}
.btn:hover i{transform:translateX(3px)}
.btns{display:flex;flex-wrap:wrap;gap:12px;align-items:center}

/* --- panels, cards, rules ------------------------------------------------ */
.panel{background:var(--panel);border:1px solid var(--panel-rule);
       transition:background-color .55s var(--ease),border-color .55s var(--ease)}
.rows{border-top:1px solid var(--rule)}
.rows>*{border-bottom:1px solid var(--rule);padding-block:clamp(18px,2.4vw,30px)}

/* --- external link + hover preview --------------------------------------- */
.ext{
  color:var(--accent);text-decoration:none;
  border-bottom:1px solid color-mix(in srgb,var(--accent) 42%,transparent);
  padding-bottom:1px;transition:border-color .2s;
}
.ext:hover{border-bottom-color:var(--accent)}
.ext i{font-style:normal;display:inline-block;font-size:.82em;transition:transform .2s var(--ease)}
.ext:hover i{transform:translate(2px,-2px)}

.lpv{
  position:fixed;top:0;left:0;z-index:70;width:340px;
  background:var(--panel);border:1px solid var(--rule-2);
  opacity:0;pointer-events:none;
  transform-origin:top left;
  transition:opacity .18s var(--ease);
}
.lpv.on{opacity:1}
.lpv-shot{aspect-ratio:16/10;overflow:hidden;border-bottom:1px solid var(--rule)}
.lpv-shot img{width:100%;height:100%;object-fit:cover;object-position:top center;display:block}
.lpv-meta{padding:11px 13px;font-family:"IBM Plex Mono",monospace;font-size:10.5px;line-height:1.5}
.lpv-meta b{display:block;color:var(--text);font-weight:500;letter-spacing:.04em}
.lpv-meta span{display:block;color:var(--dim);margin-top:3px}
@media (prefers-reduced-motion:reduce){.lpv{transition:none}}

/* --- footnotes (CSS counters → real disclaimers) ------------------------- */
body{counter-reset:fn}
/* The mark is an INFO badge, not a numbered reference — a number beside a
   sentence reads as a legal citation. Drawn in CSS rather than set as a glyph
   (ⓘ) so it renders identically whatever the font falls back to. A tick was
   the other candidate and was wrong: half these notes qualify a claim, and a
   ✓ next to "not a verified guarantee" reads as verification. */
.fn{counter-increment:fn;font-size:.62em;vertical-align:super;
    color:var(--accent);text-decoration:none;position:relative;cursor:pointer;
    margin-left:.28em}
.fn::after{
  content:"i";font-family:"Instrument Sans",system-ui,sans-serif;font-style:italic;
  font-weight:600;font-size:1.12em;line-height:1.42em;
  display:inline-block;width:1.5em;height:1.5em;text-align:center;
  border:1px solid currentColor;border-radius:50%;
  transition:background-color .18s,color .18s;
}
.fn:hover::after,.fn[aria-expanded="true"]::after{background:var(--accent);color:var(--bg)}
/* The mark itself is ~8px of type. The hit area is a pseudo-element so the
   target reaches a real 24px without the padding disturbing the line box. */
.fn::before{content:"";position:absolute;inset:-11px -8px}

/* the note itself, opened in place off the mark */
.fnp{
  position:fixed;top:0;left:0;z-index:75;width:min(370px,calc(100vw - 28px));
  background:var(--panel);border:1px solid var(--rule-2);
  /* the system has no shadows anywhere — the card lifts off the copy with an
     accent edge instead, which also ties it back to the mark that opened it */
  border-left:2px solid var(--accent);
  opacity:0;pointer-events:none;transition:opacity .16s var(--ease);
}
.fnp.on{opacity:1;pointer-events:auto}
.fnp-h{display:flex;align-items:baseline;gap:9px;padding:12px 15px 0}
.fnp-h b{font-size:12.5px;color:var(--accent);font-weight:600;letter-spacing:-.01em}
.fnp-h span{font-family:"IBM Plex Mono",monospace;font-size:10px;letter-spacing:.12em;
            text-transform:uppercase;color:var(--dim);margin-left:auto}
.fnp-b{padding:7px 15px 13px;font-size:13px;line-height:1.62;color:var(--text);
       max-height:min(52vh,380px);overflow:auto;overscroll-behavior:contain}
.fnp-b a{color:var(--accent)}
.fnp-f{border-top:1px solid var(--rule);padding:9px 15px;display:flex;justify-content:flex-end;
       align-items:center;gap:12px;font-family:"IBM Plex Mono",monospace;font-size:10px;
       letter-spacing:.1em;text-transform:uppercase}
.fnp-f a{color:var(--accent);text-decoration:none;border-bottom:1px solid transparent}
.fnp-f a:hover{border-bottom-color:currentColor}
@media (prefers-reduced-motion:reduce){.fnp{transition:none}}
.notes{counter-reset:fnn;font-size:12.5px;line-height:1.6;color:var(--dim);max-width:78ch}
.notes li{counter-increment:fnn;list-style:none;position:relative;padding-left:22px;margin-bottom:10px}
.notes li::before{content:counter(fnn);position:absolute;left:0;top:.1em;
  font-family:"IBM Plex Mono",monospace;font-size:10px;color:var(--accent)}

/* --- reveals ------------------------------------------------------------- */
.rv{opacity:0;transform:translateY(18px);transition:opacity .7s var(--ease-out),transform .7s var(--ease-out)}
.rv.in{opacity:1;transform:none}
.rv-1{transition-delay:.06s}.rv-2{transition-delay:.12s}.rv-3{transition-delay:.18s}
.rv-4{transition-delay:.24s}.rv-5{transition-delay:.3s}

/* --- tab slider (measuring indicator) ------------------------------------ */
.tabs{display:flex;gap:clamp(14px,2.4vw,32px);position:relative;
      border-bottom:1px solid var(--rule);overflow-x:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tabs button{
  font-family:"IBM Plex Mono",monospace;font-size:12px;letter-spacing:.09em;
  text-transform:uppercase;color:var(--dim);padding:0 0 14px;white-space:nowrap;
  transition:color .25s;
}
.tabs button[aria-selected="true"]{color:var(--text)}
.tab-ind{position:absolute;bottom:-1px;height:2px;background:var(--accent);
         transition:transform .42s var(--ease-out),width .42s var(--ease-out)}
.tabpanel[hidden]{display:none}

/* --- footer -------------------------------------------------------------- */
.foot{border-top:1px solid var(--rule);padding-block:clamp(40px,6vw,72px) 34px}
.foot a{text-decoration:none;color:var(--dim);transition:color .2s}
.foot a:hover{color:var(--text)}
.foot-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
           gap:28px;font-family:"IBM Plex Mono",monospace;font-size:12px}
.foot-cols h4{font-size:11px;letter-spacing:.14em;text-transform:uppercase;
              color:var(--text);margin:0 0 12px;font-weight:500}
.foot-cols li{list-style:none;margin-bottom:7px}
.foot-cols ul{margin:0;padding:0}
.foot-btm{display:flex;flex-wrap:wrap;gap:14px;justify-content:space-between;
          margin-top:44px;padding-top:20px;border-top:1px solid var(--rule);
          font-family:"IBM Plex Mono",monospace;font-size:11px;color:var(--dim)}

/* --- utility ------------------------------------------------------------- */
.dim{color:var(--dim)}
.acc{color:var(--accent)}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.nowrap{white-space:nowrap}

/* --- reduced motion ------------------------------------------------------ */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important}
  .rv{opacity:1;transform:none}
  body{transition:none}
}

/* ============================================================================
   DOCUMENT PAGES — the .doc layer
   ----------------------------------------------------------------------------
   Twenty of the twenty-six pages on this site are prose the business already
   owns: legal documents, the Learn guides, About, Contact, Support, Enterprise,
   Partners. Their copy is load-bearing (the legal pages are contractual, the
   guides are indexed), so the port keeps their markup and their words EXACTLY
   as they were and restyles them here instead of rewriting them.

   That is why this section reads as a translation table: it maps the old site's
   component classes onto the new system's tokens. Nothing below invents a
   component — every selector corresponds to something already in the HTML.
   ========================================================================== */

/* The old stylesheet's tokens, aliased to the new ones. A handful of inline
   style attributes in the ported pages say `var(--color-text-muted)`; rather
   than edit prose files to chase them, they resolve here. */
.doc,.close{
  --color-accent:var(--accent); --color-accent-dark:var(--ox-d);
  --color-accent-tint:var(--tint); --color-bg:var(--bg); --color-surface:var(--panel);
  --color-text:var(--text); --color-text-muted:var(--dim); --color-text-faint:var(--dim);
  --color-border:var(--rule); --color-border-strong:var(--rule-2);
  --color-success:var(--green); --color-success-tint:var(--ghost);
}

/* Document sections carry one idea each and there are many of them, so they
   run at roughly half the art-directed rhythm — at the full measure a
   400-word guide became a column of headlines separated by empty screens. The
   hairline is what does the separating instead. */
.doc{padding-block:clamp(34px,4.2vw,60px)}
.doc + .doc{border-top:1px solid var(--rule)}

/* --- flow ---------------------------------------------------------------- */
.doc h2{margin:clamp(38px,5vw,64px) 0 16px}
.doc > .grid > .inset > *:first-child,
.doc .section-heading h2{margin-top:0}
.doc h3{margin:clamp(24px,3vw,34px) 0 10px}
.doc h4{font-family:"Instrument Sans",sans-serif;font-size:1rem;font-weight:600;
        margin:24px 0 8px;letter-spacing:-.01em}
.doc p{margin:0 0 1.1em;max-width:72ch}
.doc ul,.doc ol{margin:0 0 1.2em;padding-left:22px;max-width:72ch}
.doc li{margin-bottom:8px}
.doc li::marker{color:var(--accent)}
.doc a:not(.btn):not(.fn){
  color:var(--accent);text-decoration:none;
  border-bottom:1px solid color-mix(in srgb,var(--accent) 38%,transparent);
  transition:border-color .2s;
}
.doc a:not(.btn):not(.fn):hover{border-bottom-color:var(--accent)}
.doc strong{font-weight:600}
.doc hr{margin:clamp(30px,4vw,46px) 0}
.doc .meta{font-family:"IBM Plex Mono",monospace;font-size:11.5px;letter-spacing:.06em;
           color:var(--dim);margin-bottom:clamp(24px,3vw,36px)}
.doc .text-center{text-align:center;margin-inline:auto}
.doc .mt-0{margin-top:0}

/* --- section headings ---------------------------------------------------- */
/* .eyebrow is renamed to .micro during the port, so it picks up the site's own
   dot-and-rule signature rather than carrying a second, competing one. */
.doc .section-heading{margin-bottom:clamp(22px,3vw,34px);max-width:70ch}
.doc .section-heading p{margin-top:14px;color:var(--dim)}
.doc .lede{margin-bottom:1.2em}

/* --- panels -------------------------------------------------------------- */
.doc .card,.doc .callout{
  background:var(--panel);border:1px solid var(--panel-rule);
  padding:clamp(20px,2.6vw,30px);
  transition:background-color .55s var(--ease),border-color .55s var(--ease);
}
.doc .card h3,.doc .card h4{margin-top:0}
.doc .card p:last-child,.doc .callout p:last-child{margin-bottom:0}
/* the callout is the one panel that argues with the copy around it, so it gets
   the accent edge — the same device the footnote card uses */
.doc .callout{border-left:2px solid var(--accent);margin:clamp(20px,2.6vw,30px) 0}
.doc .card > .micro{margin-bottom:12px}

/* --- rows of cards ------------------------------------------------------- */
/* .grid here is the OLD site's card row, not the 16-column page grid. It is
   always nested inside .inset, so it must shed the page grid's padding. */
.doc .cards,.doc .cards-2,.doc .cards-3,.doc .two-col,.doc .form-grid{
  display:grid;gap:clamp(14px,1.8vw,22px);padding:0;max-width:none;margin:0 0 1.2em;
  grid-template-columns:repeat(auto-fit,minmax(255px,1fr));
}
.doc .cards-2,.doc .two-col{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.doc .form-grid{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:18px}
.doc .field.full,.doc .full{grid-column:1/-1}

/* numbered steps — the ordinal is the site's ghost numeral, scaled down */
.doc .step-card{position:relative;padding-top:clamp(24px,3vw,32px)}
.doc .step-number{
  font-family:"Fraunces",Georgia,serif;font-weight:900;font-size:2.6rem;line-height:.8;
  color:transparent;-webkit-text-stroke:1px var(--rule-2);display:block;margin-bottom:14px;
}
/* the one-line pitch that heads each industry card */
.doc .vertical-pitch{font-weight:600;color:var(--wine);margin:0 0 .7em}
.doc .feature-icon{color:var(--accent);margin-bottom:12px}
.doc .feature-icon svg{width:22px;height:22px}

/* --- tags and badges ----------------------------------------------------- */
.doc .tier-tag,.doc .lang-badge,.doc .shot-badge{
  display:inline-flex;align-items:center;gap:7px;
  font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.11em;
  text-transform:uppercase;color:var(--dim);
  border:1px solid var(--rule-2);padding:5px 9px;
}
.doc .badge-row{display:flex;flex-wrap:wrap;gap:8px;margin:16px 0}
.doc .shot-badge-dot{width:5px;height:5px;border-radius:50%;background:var(--accent);flex:0 0 auto}
.doc .shot-feature{margin:clamp(20px,2.6vw,30px) 0}

/* --- lists that carry a tick -------------------------------------------- */
.doc .included-list{list-style:none;padding:0;max-width:none;
  display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.doc .included-list li{display:flex;gap:11px;align-items:flex-start;margin:0}
.doc .included-list svg{width:15px;height:15px;flex:0 0 auto;margin-top:.32em;color:var(--accent)}
.doc .included-list strong{display:block}
.doc .included-list span{color:var(--dim);font-size:.93em}

/* --- buttons ------------------------------------------------------------- */
/* .btn-primary / .btn-secondary / .btn-ghost are rewritten to the system's own
   .btn / .btn--ghost during the port; these only cover the modifiers. */
.doc .btn-sm{padding:10px 16px;font-size:11.5px}
.doc .btn-block{display:flex;justify-content:center;width:100%}
.doc .cta-actions,.doc .hero-actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center;margin-top:24px}

/* --- FAQ ----------------------------------------------------------------- */
.doc .faq-list{max-width:80ch}
.doc .faq-item{border-bottom:1px solid var(--rule)}
.doc .faq-item summary{
  list-style:none;cursor:pointer;padding:18px 34px 18px 0;position:relative;
  font-weight:600;letter-spacing:-.012em;
}
.doc .faq-item summary::-webkit-details-marker{display:none}
.doc .faq-item summary::after{
  content:"";position:absolute;right:6px;top:50%;width:9px;height:9px;
  border-right:1.5px solid var(--accent);border-bottom:1.5px solid var(--accent);
  transform:translateY(-70%) rotate(45deg);transition:transform .25s var(--ease);
}
.doc .faq-item[open] summary::after{transform:translateY(-25%) rotate(-135deg)}
.doc .faq-item .faq-body{padding:0 0 20px;color:var(--dim)}

/* --- tables -------------------------------------------------------------- */
/* wide content scrolls inside its own container; the page body never does */
.doc .table-wrap{overflow-x:auto;margin:20px 0 26px;border:1px solid var(--rule)}
.doc table{border-collapse:collapse;width:100%;font-size:.92rem;min-width:520px}
.doc th,.doc td{border-bottom:1px solid var(--rule);padding:11px 13px;text-align:left;
                vertical-align:top}
.doc th{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.1em;
        text-transform:uppercase;color:var(--dim);font-weight:500;
        background:var(--ghost);border-bottom-color:var(--rule-2)}
.doc tr:last-child td{border-bottom:0}

/* --- legal documents ----------------------------------------------------- */
/* Long contractual prose. Narrower measure than the marketing pages, and the
   numbered headings need to be findable when someone is citing a section. */
.doc .legal{max-width:78ch}
.doc .legal h2{font-size:clamp(1.3rem,.95rem + 1.1vw,1.7rem);
               padding-top:clamp(26px,3.4vw,40px);border-top:1px solid var(--rule);
               scroll-margin-top:calc(var(--promo-h) + var(--nav-h) + 20px)}
.doc .legal h2:first-of-type{border-top:0;padding-top:0}
.doc .legal h3{font-size:1.02rem;font-weight:600;font-family:"Instrument Sans",sans-serif;
               letter-spacing:-.01em}
.doc .legal p,.doc .legal li{line-height:1.68}

/* --- forms --------------------------------------------------------------- */
.doc .field{display:flex;flex-direction:column;gap:7px}
.doc label{font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.11em;
           text-transform:uppercase;color:var(--dim)}
.doc input,.doc select,.doc textarea{
  font:inherit;font-size:.95rem;color:var(--text);background:var(--panel);
  border:1px solid var(--rule-2);padding:11px 13px;width:100%;
  transition:border-color .2s;
}
.doc input:focus,.doc select:focus,.doc textarea:focus{outline:none;border-color:var(--accent)}
.doc textarea{min-height:150px;resize:vertical}
.doc .form-note{font-size:.85rem;color:var(--dim);margin-top:14px}
/* honeypot — off-screen, never display:none (some bots skip hidden fields) */
.doc .hp-field{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.doc .field-error{font-size:.82rem;color:var(--accent);font-weight:500}
.doc .form-status{display:none;padding:13px 16px;margin-top:18px;font-size:.92rem;
                  border-left:2px solid var(--accent);background:var(--ghost)}
.doc .form-status.is-visible{display:block}
.doc .form-status.is-success{border-left-color:var(--green)}
.doc .contact-fallback{margin-top:26px;padding-top:20px;border-top:1px solid var(--rule);
                       font-size:.9rem;color:var(--dim)}

/* --- the closing band ---------------------------------------------------- */
/* .cta-band sections become the site's own dark close, so a document page ends
   the same way the art-directed pages do. */
.close .btns{margin-top:30px}

/* --- illustrative product view (Learn: how a search works) --------------- */
.doc .mockup-below{margin-top:clamp(24px,3vw,36px)}
.doc .mockup-frame{border:1px solid var(--rule-2);background:var(--panel);overflow:hidden}
.doc .mockup-titlebar{display:flex;align-items:center;gap:6px;padding:9px 12px;
  border-bottom:1px solid var(--rule);background:var(--ghost)}
.doc .mockup-dot{width:6px;height:6px;border-radius:50%;background:var(--rule-2)}
.doc .mockup-url{font-family:"IBM Plex Mono",monospace;font-size:10.5px;color:var(--dim);
  margin-left:10px;letter-spacing:.04em}
.doc .mockup-body{display:grid;grid-template-columns:minmax(0,210px) minmax(0,1fr)}
.doc .mockup-side{border-right:1px solid var(--rule);padding:16px 14px}
.doc .mockup-label{display:block;font-family:"IBM Plex Mono",monospace;font-size:9.5px;
  letter-spacing:.13em;text-transform:uppercase;color:var(--dim);margin:14px 0 7px}
.doc .mockup-side .mockup-label:first-child{margin-top:0}
.doc .mockup-toggle{display:flex;flex-wrap:wrap;gap:5px}
.doc .mockup-chip{font-size:11px;padding:5px 9px;border:1px solid var(--rule-2);color:var(--dim)}
.doc .mockup-chip.active{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.doc .mockup-input{border:1px solid var(--rule-2);padding:8px 10px;font-size:12px}
.doc .mockup-btn{display:block;margin-top:16px;background:var(--accent);color:var(--on-accent);
  text-align:center;font-family:"IBM Plex Mono",monospace;font-size:10.5px;letter-spacing:.08em;
  text-transform:uppercase;padding:10px}
.doc .mockup-scan{height:1.5px;background:var(--rule);margin-top:12px;overflow:hidden}
.doc .mockup-scan i{display:block;height:100%;width:38%;background:var(--accent);
  animation:af-scan 2.4s var(--ease) infinite}
@keyframes af-scan{0%{transform:translateX(-100%)}100%{transform:translateX(300%)}}
.doc .mockup-results{padding:0}
.doc .mockup-results-head{display:flex;flex-wrap:wrap;gap:4px 14px;align-items:baseline;
  padding:14px 16px;border-bottom:1px solid var(--rule)}
.doc .mockup-results-title{font-weight:600;font-size:13px}
.doc .mockup-results-sub{font-family:"IBM Plex Mono",monospace;font-size:10.5px;color:var(--dim)}
.doc .mockup-map{position:relative;height:104px;background:var(--ghost);
  border-bottom:1px solid var(--rule)}
.doc .mockup-pin{position:absolute;width:8px;height:8px;border-radius:50% 50% 50% 0;
  transform:rotate(-45deg);background:var(--rule-2)}
.doc .mockup-pin.best{background:var(--accent);width:11px;height:11px}
.doc .mockup-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 14px;
  padding:11px 16px;border-bottom:1px solid var(--rule);align-items:center}
.doc .mockup-row:last-child{border-bottom:0}
.doc .mockup-name{font-weight:600;font-size:13px}
.doc .mockup-meta{grid-column:1;font-size:11.5px;color:var(--dim);display:flex;
  flex-wrap:wrap;gap:8px;align-items:center;min-width:0}
.doc .mockup-tag{font-family:"IBM Plex Mono",monospace;font-size:9.5px;letter-spacing:.1em;
  text-transform:uppercase;border:1px solid var(--rule-2);padding:2px 6px;flex:0 0 auto}
.doc .mockup-score{grid-row:1/3;grid-column:2;display:flex;flex-direction:column;
  align-items:flex-end;gap:5px}
.doc .mockup-score-num{font-family:"IBM Plex Mono",monospace;font-feature-settings:"tnum";
  font-size:13px;color:var(--accent)}
.doc .mockup-bar{display:block;width:64px;height:2px;background:var(--rule)}
.doc .mockup-bar i{display:block;height:100%;width:var(--w,50%);background:var(--accent)}
.doc .mockup-caption{font-size:12px;color:var(--dim);margin-top:14px;max-width:70ch}
@media (max-width:640px){
  .doc .mockup-body{grid-template-columns:minmax(0,1fr)}
  .doc .mockup-side{border-right:0;border-bottom:1px solid var(--rule)}
}
