/* ==========================================================================
   FONTS ARE SELF-HOSTED. The @import to fonts.googleapis.com was REMOVED.

   Why, on this product specifically: an external font request happens in
   the CUSTOMER's browser, on every page load, and hands a third party the
   visitor's IP, User-Agent and Referer for the page they are reading. On a
   verification product whose pitch is that you do not have to trust us,
   a silent dependency on a third party for every page view is not something
   we can justify. It is also a hard dependency: if fonts.googleapis.com is
   slow, our page blocks on it.

   The @font-face rules below are inlined rather than @import-ed, because an
   @import is render-blocking and costs an extra round trip.
   ========================================================================== */
/* Self-hosted fonts. Generated from the Google Fonts CSS, latin + latin-ext
   only. Cyrillic and Vietnamese are DROPPED — A TRADEOFF, NOT AN OVERSIGHT:
   including them would cost every visitor the download to serve scripts this
   product has no users in yet. The consequence is that a Cyrillic wallet label
   renders in a system fallback font rather than Martian Mono. If that turns up
   later it is a DECISION recorded here, not a bug: add the subset back and the
   @font-face rules regenerate from the same script.

   DEDUPED BY CONTENT HASH. Google serves one variable file for several
   weights, so a (family, weight) naming scheme wrote identical bytes four
   times over and the browser would have fetched each one.

   unicode-range is copied from the source, not invented: without it the
   browser downloads every face regardless of the text on the page. */
@font-face{
  font-family:'Martian Mono';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/martian-mono-latin-ext-c26a87eedc.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Martian Mono';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/martian-mono-latin-d0be3a78a8.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Martian Mono';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('/static/fonts/martian-mono-latin-ext-c26a87eedc.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Martian Mono';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('/static/fonts/martian-mono-latin-d0be3a78a8.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Martian Mono';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('/static/fonts/martian-mono-latin-ext-c26a87eedc.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Martian Mono';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('/static/fonts/martian-mono-latin-d0be3a78a8.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Martian Mono';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/martian-mono-latin-ext-c26a87eedc.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Martian Mono';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/martian-mono-latin-d0be3a78a8.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Public Sans';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/public-sans-latin-ext-3a00a32f02.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Public Sans';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('/static/fonts/public-sans-latin-5ed4d31c98.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Public Sans';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('/static/fonts/public-sans-latin-ext-3a00a32f02.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Public Sans';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('/static/fonts/public-sans-latin-5ed4d31c98.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Public Sans';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('/static/fonts/public-sans-latin-ext-3a00a32f02.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Public Sans';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('/static/fonts/public-sans-latin-5ed4d31c98.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face{
  font-family:'Public Sans';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/public-sans-latin-ext-3a00a32f02.woff2') format('woff2');
  unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face{
  font-family:'Public Sans';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('/static/fonts/public-sans-latin-5ed4d31c98.woff2') format('woff2');
  unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* =========================================================================
   FillProof — Authenticated Surface
   Shared stylesheet. All pages extend this. Design tokens derived directly
   from fillproof.io. Zero JavaScript. Semantic HTML only.
   ========================================================================= */


:root{
  /* ground + surface */
  --paper:#F8FAF6;
  --card:#FFFFFF;
  --stripe:#EFF4EC;
  --tint:#EAF1EC;

  /* ink */
  --ink:#182420;
  --ink2:#4E5D56;
  --line:#D9E0D6;
  --line-dk:#B9C6BE;


  /* ---- TYPE SCALE, six steps ----------------------------------------------
     10 · 12 · 14 · 18 · 22 · 28. Ratios 1.20 / 1.17 / 1.29 / 1.22 / 1.27,
     mean 1.229 — near a major third, deliberately NOT a pure geometric scale.
     A strict x1.25 from 14 gives 17.5px and 21.9px, and fractional sizes
     antialias inconsistently across browsers; whole pixels cost +/-0.06 on the
     ratio and are worth it.

     Replaces 21 distinct sizes, nine of which differed from a neighbour by half
     a pixel or one pixel — differences no reader perceives as intentional, but
     which stop any two elements from looking deliberately related. 101 of 110
     declarations moved by <=1px, so the change is invisible per element and
     shows only as coherence. */
  --t-micro:10px;    /* uppercase labels, decks, table headers */
  --t-small:12px;    /* secondary text, addresses, captions */
  --t-body:14px;     /* the deliberate body size, used by components */
  --t-card:18px;     /* card and subsection headings (h3) */
  --t-section:22px;  /* section headings (h2) */
  --t-page:28px;     /* page headings (h1) */

  /* semantic */
  --fact:#176647;         /* verified truth */
  --fact-dk:#125239;
  --fact-bg:#E3F0E8;
  --est:#8A5B10;          /* estimate / warning */
  --est-bg:#F5ECD9;
  --est-line:#E4D2A8;
  --fic:#9E3527;          /* fiction / error */
  --fic-bg:#F6E5E1;
  --fic-line:#E9CFC9;

  /* dark panel palette (matches "rule" section of live site) */
  --dark:#20302A;
  --dark-line:#33463D;
  --dark-ink:#EAF1EC;
  --dark-mute:#8FA398;

  --mono:'Martian Mono',ui-monospace,'SFMono-Regular',Menlo,monospace;
  --sans:'Public Sans',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
}

*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:15px  /* DOCUMENTED EXCEPTION, not a scale step. Tokenised body
     copy is 14px, so a 16px base rendered every UNSTYLED element a full
     step above the deliberate text around it — the same defect as the
     unstyled h1: a default sitting above a chosen value. 15 narrows that
     without shrinking anything noticeably. It is off the scale on purpose
     and is the only size in this file that is. */;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}
a{color:var(--fact)}
a:hover{text-decoration:underline;text-underline-offset:3px}
img{max-width:100%;display:block}
button{font-family:inherit;font-size:inherit;cursor:pointer;background:none;border:none;color:inherit}
/* THE DEFECT THIS FIXES. This rule set family, letter-spacing, line-height and
   weight — and NO FONT-SIZE. So every h1 and h2 in the dashboard rendered at the
   BROWSER DEFAULT: 2em (32px) and 1.5em (24px), with the browser's em-based
   margins, inside a stylesheet whose own scale topped out at 28px and whose
   spacing is tokenised. Fourteen templates carry an h1; plan.html has four h2s.
   The auth pages styled theirs and the outcome card styled its own, which is
   why signed-out pages read as composed and the dashboard did not.

   A 32px default heading above 14px tokenised body copy is a hierarchy nobody
   chose. That single omission produced most of the "unfinished" impression.

   MARGINS ARE SET TOO, and must be: browser heading margins are em-based, so
   changing font-size silently changes the spacing around every heading as well.
   Leaving them default would have traded one uncontrolled value for another. */
h1,h2,h3,h4,h5{font-family:var(--mono);letter-spacing:-.02em;line-height:1.2;font-weight:700}
h1{font-size:var(--t-page);margin:0 0 8px}
h2{font-size:var(--t-section);margin:32px 0 12px}
h3{font-size:var(--t-card);margin:24px 0 8px}
h4{font-size:var(--t-body);margin:20px 0 8px}
h5{font-size:var(--t-small);margin:16px 0 4px}
code,pre,.mono{font-family:var(--mono)}

:focus-visible{outline:2px solid var(--fact);outline-offset:2px;border-radius:2px}

/* ---------- wordmark ---------- */
.wordmark{
  font-family:var(--mono);
  font-weight:700;
  font-size:14px;
  letter-spacing:-.02em;
  color:var(--ink);
  text-decoration:none;
  display:inline-flex;
  align-items:center;
  gap:8px;
}
/* THE SEAL IS SCOPED TO THE DASHBOARD BRAND. It is deliberately NOT on the
   wordmark generally, and specifically not in auth chrome (2026-08-21).

   A 22px seal beside a wordmark marks nothing — it is the same furniture
   problem removed from the footer. The seal means a verification HAPPENED, so
   it belongs on audit output, the report header, per-row stamps, and favicons.
   Signed-out pages carry no verification result, so their header carries the
   wordmark alone.

   Scoped rather than overridden on purpose: an `.auth-top .wordmark::before
   {content:none}` would leave a rule painting a seal onto every wordmark and a
   second rule hiding it again, and the next reader could not tell which was
   load-bearing (§22). Here the seal is painted only where it is wanted. */
.dash-brand .wordmark::before{
  content:"";
  width:22px;
  height:22px;
  background:url("assets/seal_64.png") center/contain no-repeat;
  flex:0 0 22px;
}
.wordmark b{color:var(--fact);font-weight:700}
.wordmark:hover{text-decoration:none}

/* ---------- sent page (SIGNED-OUT family) ----------
   PORTED from the mirrored design 2026-08-21. `.sent-message` became
   `.sent-card .auth-hd h1` because our auth shell owns the heading; the
   type is unchanged.
   ----------
   The most-rendered page in the product. One design carries every message.
   Visually neutral across all six states — no colour accent, no icon, no
   success or error decoration that would leak what the words withhold.
   The non-enumeration property is preserved through the visual channel too.
*/
.sent-card{padding-top:32px;padding-bottom:32px}
.sent-card .auth-hd h1{
  font-family:var(--mono);
  font-size:18px;
  font-weight:700;
  letter-spacing:-.02em;
  line-height:1.45;
  color:var(--ink);
  margin:0 0 16px;
}
.sent-detail{
  font-size:14px;
  color:var(--ink2);
  line-height:1.6;
  margin:0 0 24px;
}
.sent-detail:last-child{margin-bottom:0}
.sent-action{margin-top:8px}
.sent-action .btn{width:100%}
.sent-wait{
  font-family:var(--mono);
  font-size:12px;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--ink2);
  margin-top:20px;
  padding-top:16px;
  border-top:1px solid var(--line);
  text-align:center;
}
.sent-card .auth-hd{margin-bottom:0}

/* ---------- eyebrows / decks ---------- */
.eyebrow{
  font-family:var(--mono);
  font-size:10px;
  font-weight:500;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink2);
}
.deck{
  font-family:var(--mono);
  font-size:10px;
  font-weight:600;
  letter-spacing:.13em;
  text-transform:uppercase;
  color:var(--fact);
  margin-bottom:12px;
}

/* ---------- buttons ---------- */
.btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  font-family:var(--sans);
  font-weight:600;
  font-size:14px;
  padding:8px 16px;
  border:1px solid transparent;
  border-radius:6px;
  text-decoration:none;
  color:var(--ink);
  background:transparent;
  cursor:pointer;
  transition:background .15s,border-color .15s,color .15s;
  line-height:1.2;
}
.btn:hover{text-decoration:none}
.btn-solid{background:var(--fact);color:#fff;border-color:var(--fact)}
.btn-solid:hover{background:var(--fact-dk);border-color:var(--fact-dk)}
.btn-ghost{background:transparent;border-color:var(--line);color:var(--ink)}
.btn-ghost:hover{border-color:var(--ink2)}
.btn-danger{background:transparent;color:var(--fic);border-color:var(--fic)}
.btn-danger:hover{background:var(--fic-bg)}
.btn-danger-solid{background:var(--fic);color:#fff;border-color:var(--fic)}
.btn-danger-solid:hover{background:#8A2E22;border-color:#8A2E22}
.btn-lg{padding:12px 20px;font-size:14px}
.btn-sm{padding:8px 12px;font-size:12px}
.btn-block{width:100%}
.btn-link{color:var(--fact);font-weight:600;padding:0;border:none;background:none;text-decoration:underline;text-underline-offset:3px}

/* ---------- forms ---------- */
.form{display:grid;gap:16px}
.field{display:grid;gap:8px}
.field label{font-size:12px;font-weight:600;color:var(--ink)}
.field .lbl-row{display:flex;justify-content:space-between;align-items:baseline;gap:12px}
.field .lbl-row a{font-size:12px;font-weight:500;text-decoration:none}
.field .lbl-row a:hover{text-decoration:underline}
.field input,
.field textarea{
  width:100%;
  padding:12px 12px;
  border:1px solid var(--line);
  border-radius:6px;
  font-size:14px;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  line-height:1.4;
}
.field input[type="password"],
.field input[data-mono],
.field input[type="email"]{font-family:var(--mono);letter-spacing:.01em}
.field input:focus,
.field textarea:focus{border-color:var(--fact);outline:none;background:var(--card)}
.field .hint{font-size:12px;color:var(--ink2);line-height:1.55}
.field .err{font-size:12px;color:var(--fic);display:flex;gap:8px;align-items:flex-start;line-height:1.55;margin-top:2px}
.field .err::before{content:"×";font-family:var(--mono);font-weight:600;color:var(--fic);flex:0 0 auto}
.field.invalid input,
.field.invalid textarea{border-color:var(--fic);background:#FBEEEB}
.field.invalid input:focus{background:var(--card)}

.form-banner{
  padding:12px 16px;
  border-radius:6px;
  font-size:14px;
  display:flex;
  gap:12px;
  align-items:flex-start;
  line-height:1.55;
  border:1px solid transparent;
}
.form-banner .mark{font-family:var(--mono);font-weight:600;flex:0 0 auto}
.form-banner-err{background:var(--fic-bg);color:var(--fic);border-color:var(--fic-line)}
.form-banner-ok{background:var(--fact-bg);color:var(--fact);border-color:#C8DFD1}
.form-banner-warn{background:var(--est-bg);color:var(--est);border-color:var(--est-line)}

.pw-req{font-size:12px;color:var(--ink2);line-height:1.6}
.pw-req strong{color:var(--ink);font-weight:500;display:block;margin-bottom:4px}
.pw-req ul{list-style:none;display:grid;gap:2px}
.pw-req li{display:flex;gap:8px;align-items:baseline}
.pw-req li::before{content:"·";font-family:var(--mono);color:var(--ink2);font-weight:600}

/* ---------- auth layout ---------- */
.auth{
  min-height:100vh;
  display:flex;
  flex-direction:column;
  align-items:center;
  padding:48px 20px 64px;
}
.auth-shell{
  width:100%;
  max-width:440px;
  display:flex;
  flex-direction:column;
  gap:24px;
}
.auth-top{display:flex;justify-content:space-between;align-items:center}
.auth-top .wordmark{font-size:14px}
.auth-top .motto{
  font-family:var(--mono);
  font-size:10px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink2);
}
.auth-card{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:10px;
  padding:32px 32px;
}
.auth-hd{margin-bottom:24px}
.auth-hd h1{font-size:22px;font-weight:700;letter-spacing:-.02em}
.auth-hd p{margin-top:8px;color:var(--ink2);font-size:14px;line-height:1.55}
.auth-foot{text-align:center;font-size:14px;color:var(--ink2)}
.auth-foot a{color:var(--fact);text-decoration:none;font-weight:500}
.auth-foot a:hover{text-decoration:underline}

/* PORTED from the mirrored design 2026-08-24. The signed-in outcome family:
   29 render sites, dashboard chrome, severity carried by the ACTION rather
   than by any card tint. Deck stays neutral --ink2: fact-green on a 502
   deck would leak severity through the label channel. */
/* ==========================================================================
   outcome page — the SIGNED-IN outcome family (29 render sites across 22
   distinct message expressions). Companion to sent.html; the axis is the
   SESSION. Every render here happens to a reader who holds a session, so
   the page keeps dashboard chrome and its nav. There is never a
   "Back to sign in" — the reader is already in.

   Three severities encoded through the ACTION, not through card colour:
     - 402 quota:      solid primary CTA "Upgrade"      (only loud state)
     - 400/404/409:    ghost link, quiet return
     - 502 upstream:   ghost "Try again"
     - 429 rate limit: no button, wait line
     - 200 sent:       ghost "Back to <surface>"

   Non-enumeration does NOT apply — messages are specific to the reader's
   own account.
   ========================================================================== */
.outcome-wrap{max-width:620px;margin:8px auto 0}
.outcome{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:10px;
  padding:40px 40px;
}
.outcome-hd{
  margin-bottom:24px;
  display:flex;
  align-items:center;
  gap:12px;
  flex-wrap:wrap;
}
/* deck is neutral, never fact-green — a fact-green label on a 502 would
   imply success on the label of a failure; neutral --ink2 across every
   severity keeps the label honest. */
.outcome-hd .deck{color:var(--ink2);margin:0}
.outcome-message{
  font-family:var(--mono);
  font-size:18px;
  font-weight:700;
  letter-spacing:-.02em;
  line-height:1.45;
  color:var(--ink);
  margin:0 0 20px;
  max-width:44ch;
}
/* "Nothing was charged" and "Nothing changed" are load-bearing on money
   paths — they answer the specific fear ("did money move while the request
   half-happened?"). Because they arrive as part of the message string, they
   render at the same size and weight as the primary sentence automatically.
   This selector protects that invariant against any future override that
   would demote a trailing sentence. */
.outcome-message + .outcome-money-guard{
  font-family:var(--mono);
  font-size:18px;
  font-weight:700;
  color:var(--ink);
  margin:-16px 0 20px;
  max-width:44ch;
  line-height:1.45;
}
.outcome-detail{
  font-size:14px;
  color:var(--ink2);
  line-height:1.6;
  margin:0 0 24px;
  max-width:52ch;
}
.outcome-detail:last-child{margin-bottom:0}
.outcome-actions{margin-top:8px;display:flex;gap:12px;flex-wrap:wrap}
.outcome-actions .btn{padding:12px 20px;font-size:14px}
.outcome-wait{
  font-family:var(--mono);
  font-size:12px;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--ink2);
  margin-top:20px;
  padding-top:16px;
  border-top:1px solid var(--line);
}
@media(max-width:680px){
  .outcome{padding:32px 24px}
}
@media(max-width:440px){
  .outcome{padding:24px 20px}
  .outcome-message,.outcome-message + .outcome-money-guard{font-size:18px}
}

.print-stamp{display:none}


/* ---------- dashboard shell ---------- */
.dash{min-height:100vh;display:flex;flex-direction:column;background:var(--paper)}
.dash-nav{
  border-bottom:1px solid var(--line);
  background:var(--card);
  position:sticky;
  top:0;
  z-index:20;
}
.dash-nav-in{
  max-width:1180px;
  margin:0 auto;
  padding:12px 24px;
  display:flex;
  align-items:center;
  gap:20px;
  flex-wrap:wrap;
}
.dash-brand{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.dash-org{
  padding-left:16px;
  border-left:1px solid var(--line);
  display:flex;
  align-items:center;
  gap:12px;
}
.dash-org .org-name{font-size:14px;color:var(--ink);font-weight:500}
.plan-badge{
  font-family:var(--mono);
  font-size:10px;
  letter-spacing:.1em;
  text-transform:uppercase;
  font-weight:600;
  padding:4px 8px;
  border-radius:4px;
  background:var(--tint);
  color:var(--fact);
  border:1px solid #C8DFD1;
}
.dash-links{
  display:flex;
  gap:2px;
  margin-left:8px;
}
.dash-links a{
  padding:8px 12px;
  font-size:14px;
  color:var(--ink2);
  text-decoration:none;
  border-radius:5px;
  font-weight:500;
}
.dash-links a:hover{color:var(--ink);background:var(--stripe);text-decoration:none}
.dash-links a[aria-current="page"]{color:var(--ink);background:var(--stripe);font-weight:500}
.dash-right{margin-left:auto;display:flex;align-items:center;gap:16px}
.dash-user{font-size:12px;color:var(--ink2);font-family:var(--mono)}
.dash-signout{font-size:12px;color:var(--ink2);text-decoration:none;font-weight:500}
.dash-signout:hover{color:var(--ink);text-decoration:underline}

.dash-main{
  max-width:1180px;
  margin:0 auto;
  padding:40px 24px 64px;
  width:100%;
  flex:1;
}
.page-h{
  margin-bottom:32px;
  display:flex;
  justify-content:space-between;
  align-items:flex-end;
  gap:24px;
  flex-wrap:wrap;
}
.page-h h1{font-size:22px;font-weight:700}
.page-h p{margin-top:8px;color:var(--ink2);font-size:14px;max-width:60ch;line-height:1.6}
.page-h .actions{display:flex;gap:12px;flex-wrap:wrap}

/* ---------- panels ---------- */
.panel{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:10px;
  overflow:hidden;
  margin-bottom:24px;
}
.panel-h{
  padding:16px 20px;
  border-bottom:1px solid var(--line);
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
  flex-wrap:wrap;
}
.panel-h h2{font-size:14px;font-weight:600;font-family:var(--sans);letter-spacing:0}
.panel-h .sub{font-size:12px;color:var(--ink2)}
.panel-b{padding:24px}
.panel-b > *:last-child{margin-bottom:0}
.panel-f{padding:12px 20px;border-top:1px solid var(--line);background:var(--stripe);font-size:12px;color:var(--ink2)}

/* ---------- tables ---------- */
.tbl-wrap{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl thead th{
  font-family:var(--mono);
  font-size:10.5px;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--ink2);
  text-align:left;
  padding:11px 20px;
  border-bottom:1px solid var(--line);
  font-weight:500;
  background:var(--stripe);
  white-space:nowrap;
}
.tbl thead th.num{text-align:right}
/* ================= .tbl IS DELIBERATELY LEFT ALONE =========================
   The reconciliation table is the product's core artifact and the strongest
   thing in this stylesheet: mono numerics with tabular-nums so columns align,
   right-aligned numeric cells, uppercase letterspaced headers, and cell padding
   tuned against real rows rather than against a grid. The 2026-08-24 pass that
   collapsed the spacing and the weights everywhere else EXEMPTED EVERY .tbl
   RULE by selector — not by hoping the transform missed them.

   Its 16/20 cells and 6/10 action buttons are off the 4px set on purpose: a
   table of decimal figures needs more horizontal room than vertical. "Tidying"
   them to the grid would cost legibility on the one surface where legibility IS
   the product.

   @font-face is exempt for a different reason: its font-weight says which
   weight the FILE carries. It is not a style choice, and rewriting it remaps
   every weight in the product to the wrong file.
   ========================================================================== */

.tbl tbody td{padding:16px 20px;vertical-align:top;border-bottom:1px solid var(--line)}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl tbody tr:hover{background:#FBFDF9}
.tbl td.num{font-family:var(--mono);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.tbl td.addr{font-family:var(--mono);font-size:12.5px;color:var(--ink)}
.tbl td.actions{text-align:right;white-space:nowrap}
.tbl td.actions .btn{padding:6px 10px;font-size:12.5px;margin-left:4px}
.tbl .label-cell{display:flex;flex-direction:column;gap:2px}
.tbl .label-cell .label{font-size:13.5px;color:var(--ink);font-weight:500}
.tbl .label-cell .sub{font-size:12px;color:var(--ink2)}

/* address with disclosure */
details.addr-details{font-family:var(--mono)}
details.addr-details summary{
  cursor:pointer;
  list-style:none;
  font-size:12px;
  color:var(--ink);
  display:inline-flex;
  align-items:center;
  gap:8px;
}
details.addr-details summary::-webkit-details-marker{display:none}
details.addr-details summary::after{
  content:"show full";
  font-family:var(--sans);
  font-size:10px;
  color:var(--ink2);
  text-transform:uppercase;
  letter-spacing:.08em;
  border-left:1px solid var(--line);
  padding-left:8px;
}
details.addr-details[open] summary::after{content:"hide"}
details.addr-details .full{margin-top:8px;font-size:10px;color:var(--ink2);word-break:break-all;line-height:1.5}

/* coverage indicator */
.coverage{
  margin-top:8px;
  font-size:12px;
  display:inline-flex;
  gap:8px;
  align-items:center;
  padding:4px 8px;
  border-radius:3px;
  font-weight:500;
  font-family:var(--sans);
}
.coverage .dot{width:6px;height:6px;border-radius:99px;background:currentColor;flex:0 0 6px}
.coverage.ok{color:var(--fact);background:var(--fact-bg)}
.coverage.gap{color:var(--est);background:var(--est-bg)}
.coverage.new{color:var(--ink2);background:var(--stripe)}

/* unknown cell */
.unknown-cell{color:var(--ink2);font-family:var(--mono);font-style:normal}
.unknown-cell sup{color:var(--fact);font-family:var(--sans);font-size:10px;font-weight:500;margin-left:2px}

/* badges */
.badge{
  font-family:var(--mono);
  font-size:10px;
  font-weight:600;
  letter-spacing:.1em;
  text-transform:uppercase;
  padding:4px 8px;
  border-radius:4px;
  white-space:nowrap;
  display:inline-block;
  line-height:1;
}
.b-active{background:var(--fact-bg);color:var(--fact)}
.b-inactive{background:var(--stripe);color:var(--ink2)}
.b-revoked{background:var(--fic-bg);color:var(--fic)}
.b-warn{background:var(--est-bg);color:var(--est)}
.b-rotating{background:var(--est-bg);color:var(--est)}

/* empty states */
.empty{
  padding:64px 32px;
  text-align:center;
  background:var(--card);
  border:1px dashed var(--line-dk);
  border-radius:10px;
}
.empty .seal{width:48px;height:48px;margin:0 auto 20px;opacity:.9;display:block}
.empty h3{font-family:var(--mono);font-size:14px;letter-spacing:-.01em;margin-bottom:8px;font-weight:700}
.empty p.lede{color:var(--ink2);font-size:14px;max-width:52ch;margin:0 auto 24px;line-height:1.65}
.empty .steps{
  max-width:460px;
  margin:0 auto 32px;
  text-align:left;
  display:grid;
  gap:16px;
  padding:24px;
  background:var(--paper);
  border:1px solid var(--line);
  border-radius:8px;
}
.empty .step{display:flex;gap:16px;font-size:14px;color:var(--ink);line-height:1.55;align-items:flex-start}
.empty .step .n{
  font-family:var(--mono);
  font-weight:600;
  color:var(--fact);
  flex:0 0 24px;
  font-size:12px;
}
.empty .step b{font-weight:500;display:block;margin-bottom:2px}
.empty .step span.d{color:var(--ink2);font-size:12px}

/* callouts / warnings */
.callout{
  padding:16px 20px;
  border-radius:8px;
  border-left:3px solid var(--est);
  background:var(--est-bg);
  color:var(--est);
  font-size:14px;
  line-height:1.6;
}
.callout.danger{border-color:var(--fic);background:var(--fic-bg);color:var(--fic)}
.callout.info{border-color:var(--fact);background:var(--fact-bg);color:var(--fact)}
.callout .lbl{
  font-family:var(--mono);
  font-size:10px;
  letter-spacing:.12em;
  text-transform:uppercase;
  font-weight:600;
  margin-bottom:8px;
  display:block;
}
.callout p + p{margin-top:8px}
.callout strong{font-weight:600}

/* key block (one-time reveal) */
.key-block{
  background:var(--dark);
  color:var(--dark-ink);
  padding:24px 24px;
  border-radius:8px;
  font-family:var(--mono);
  font-size:14px;
  word-break:break-all;
  line-height:1.7;
  user-select:all;
  border:1px solid var(--dark-line);
}
.key-block .lbl{
  color:var(--dark-mute);
  font-size:10px;
  letter-spacing:.12em;
  text-transform:uppercase;
  margin-bottom:12px;
  font-weight:500;
  display:block;
}
.key-block .k{font-size:14px;font-weight:500;color:#fff}
.key-block .caret{color:var(--dark-mute)}

/* KPI / usage cards */
.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:24px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:20px}
.kpi .l{
  font-size:10px;
  color:var(--ink2);
  font-family:var(--mono);
  letter-spacing:.1em;
  text-transform:uppercase;
  font-weight:500;
}
.kpi .v{
  font-family:var(--mono);
  font-weight:600;
  font-size:1.6rem;
  margin-top:12px;
  letter-spacing:-.02em;
  line-height:1.1;
  color:var(--ink);
}
.kpi .v.unknown{color:var(--ink2);font-size:1.15rem;font-weight:500;font-style:normal}
.kpi .c{font-size:12px;color:var(--ink2);margin-top:12px;line-height:1.55}
.kpi .split{display:flex;gap:8px;align-items:baseline;margin-top:12px;font-family:var(--mono)}
.kpi .split .used{font-weight:600;font-size:1.5rem;color:var(--ink)}
.kpi .split .lim{color:var(--ink2);font-size:1.05rem}
.kpi .bar{margin-top:12px;height:4px;background:var(--stripe);border-radius:2px;overflow:hidden}
.kpi .bar span{display:block;height:100%;background:var(--fact)}
.kpi .bar span.warn{background:var(--est)}
.kpi .bar span.full{background:var(--fic)}

/* fill list (reasons / details) */
.def-list{display:grid;gap:0;font-size:14px;border-top:1px solid var(--line)}
.def-list > div{
  display:grid;
  grid-template-columns:200px 1fr;
  gap:20px;
  padding:12px 0;
  border-bottom:1px solid var(--line);
}
.def-list dt{font-size:12px;color:var(--ink2);font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase}
.def-list dd{font-size:14px;color:var(--ink)}
.def-list dd.mono{font-family:var(--mono);font-size:12px}

/* pricing */
.market-nav{
  border-bottom:1px solid var(--line);
  background:rgba(248,250,246,.92);
  backdrop-filter:blur(8px);
}
.market-nav-in{
  max-width:1180px;
  margin:0 auto;
  padding:16px 24px;
  display:flex;
  align-items:center;
  gap:20px;
}
.market-nav .links{display:flex;gap:24px;margin-left:24px}
.market-nav .links a{font-size:14px;color:var(--ink2);text-decoration:none}
.market-nav .links a:hover{color:var(--ink)}
.market-nav .cta{margin-left:auto;display:flex;gap:12px}

.pricing{max-width:1180px;margin:0 auto;padding:64px 24px 40px}
.pricing-hd{max-width:60ch;margin-bottom:48px}
.pricing-hd .deck{margin-bottom:12px}
.pricing-hd h1{font-size:clamp(1.8rem,3.6vw,2.4rem);font-weight:700}
.pricing-hd p{margin-top:16px;color:var(--ink2);font-size:14px;line-height:1.6}

.tiers{
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:16px;
  margin-bottom:64px;
  align-items:stretch;
}
.tier{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:10px;
  padding:24px 24px;
  display:flex;
  flex-direction:column;
  position:relative;
}
.tier.featured{border-color:var(--fact);box-shadow:0 0 0 1px var(--fact) inset}
.tier .name{
  font-family:var(--mono);
  font-size:12px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink2);
  font-weight:600;
}
.tier .featured-tag{
  position:absolute;
  top:-10px;
  left:20px;
  background:var(--fact);
  color:#fff;
  font-family:var(--mono);
  font-size:10px;
  letter-spacing:.14em;
  text-transform:uppercase;
  padding:4px 8px;
  border-radius:3px;
  font-weight:500;
}
.tier .price{
  font-family:var(--mono);
  font-weight:700;
  font-size:2.1rem;
  letter-spacing:-.02em;
  margin:12px 0 2px;
  line-height:1;
}
.tier .price small{font-size:14px;color:var(--ink2);font-weight:400;margin-left:2px}
.tier .tagline{font-size:12px;color:var(--ink2);min-height:42px;margin-top:8px;margin-bottom:20px;line-height:1.55}
.tier ul{list-style:none;display:grid;gap:12px;font-size:14px;margin-bottom:24px;line-height:1.5}
.tier ul li{display:flex;gap:12px;align-items:baseline}
.tier ul .tick{color:var(--fact);font-family:var(--mono);font-weight:600;flex:0 0 12px;font-size:14px}
.tier ul .excl{color:var(--ink2);font-family:var(--mono);font-weight:600;flex:0 0 12px}
.tier ul .no{color:var(--ink2)}
.tier .cta{margin-top:auto}

.vaults{
  background:var(--card);
  border:1px solid var(--line);
  border-radius:10px;
  padding:32px;
}
.vaults-hd{margin-bottom:24px;max-width:60ch}
.vaults-hd h2{font-size:18px;font-weight:700;margin-bottom:8px}
.vaults-hd p{color:var(--ink2);font-size:14px;line-height:1.6}
.vaults-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.vault{
  border:1px solid var(--line);
  border-radius:8px;
  padding:24px;
  background:var(--paper);
}
.vault .n{
  font-family:var(--mono);
  font-size:12px;
  letter-spacing:.14em;
  text-transform:uppercase;
  font-weight:500;
  color:var(--ink2);
}
.vault .p{
  font-family:var(--mono);
  font-weight:700;
  font-size:1.5rem;
  margin:12px 0 2px;
  letter-spacing:-.02em;
}
.vault .p small{font-size:12px;color:var(--ink2);font-weight:400;margin-left:2px}
.vault .cap{font-size:12px;color:var(--ink2);margin-top:8px;line-height:1.55}

/* honesty section — dark strip, "what we don't do" */
.honesty{
  margin-top:48px;
  padding:32px 32px;
  background:var(--dark);
  color:var(--dark-ink);
  border-radius:10px;
}
.honesty-hd{max-width:64ch;margin-bottom:24px}
.honesty .deck{color:var(--dark-mute);margin-bottom:8px}
.honesty h2{color:#fff;font-size:18px;margin-bottom:12px}
.honesty p{color:var(--dark-mute);font-size:14px;line-height:1.6}
.honesty-grid{
  list-style:none;
  display:grid;
  grid-template-columns:repeat(2,1fr);
  gap:16px 32px;
  font-size:14px;
  color:var(--dark-mute);
  line-height:1.55;
}
.honesty-grid li{display:flex;flex-direction:column;gap:2px;padding-left:16px;border-left:1px solid var(--dark-line)}
.honesty-grid li b{color:#fff;font-family:var(--mono);font-size:12px;letter-spacing:.06em;font-weight:500}
.honesty-grid li span{font-size:12px;line-height:1.55}

/* error pages */
.err-page{
  min-height:80vh;
  display:grid;
  place-items:center;
  padding:64px 24px;
}
.err-card{max-width:560px}
.err-code{
  font-family:var(--mono);
  font-weight:700;
  font-size:96px;
  letter-spacing:-.04em;
  color:var(--fact);
  line-height:.9;
  margin-bottom:24px;
}
.err-card h1{font-size:28px;font-weight:700;margin-bottom:16px;letter-spacing:-.02em}
.err-card p{color:var(--ink2);font-size:14px;line-height:1.65;margin-bottom:20px}
.err-card .actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:8px}
.err-card .meta{
  font-family:var(--mono);
  font-size:12px;
  color:var(--ink2);
  border-top:1px solid var(--line);
  padding-top:16px;
  margin-top:32px;
  line-height:1.65;
}
.err-card .meta .lbl{color:var(--ink);font-weight:500;margin-right:8px}

/* review index */
.review{max-width:1180px;margin:0 auto;padding:64px 24px 64px}
.review-hd{margin-bottom:48px;max-width:70ch}
.review-hd .deck{color:var(--fact)}
.review-hd h1{font-size:28px;font-weight:700;margin-bottom:12px;letter-spacing:-.02em}
.review-hd p{color:var(--ink2);font-size:14px;line-height:1.65}
.review-hd .meta{
  margin-top:24px;
  padding:16px 20px;
  background:var(--card);
  border:1px solid var(--line);
  border-radius:8px;
  font-size:12px;
  color:var(--ink2);
  line-height:1.6;
}
.review-hd .meta code{background:var(--stripe);padding:2px 4px;border-radius:3px;font-size:12px}
.review-sec{margin-bottom:40px}
.review-sec > h2{
  font-size:12px;
  font-family:var(--mono);
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink2);
  font-weight:600;
  margin-bottom:16px;
  padding-bottom:12px;
  border-bottom:1px solid var(--line);
}
.review-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(280px,1fr));
  gap:2px;
  background:var(--line);
  border:1px solid var(--line);
  border-radius:8px;
  overflow:hidden;
}
.review-grid a{
  background:var(--card);
  padding:20px 20px;
  text-decoration:none;
  color:var(--ink);
  display:flex;
  flex-direction:column;
  gap:8px;
  transition:background .12s;
}
.review-grid a:hover{background:var(--stripe);text-decoration:none}
.review-grid a .n{
  font-family:var(--mono);
  font-size:10px;
  color:var(--fact);
  letter-spacing:.08em;
  text-transform:uppercase;
  font-weight:500;
}
.review-grid a .t{font-size:14px;font-weight:500;color:var(--ink)}
.review-grid a .d{font-size:12px;color:var(--ink2);line-height:1.55}

/* footnotes */
.footnotes{
  margin-top:20px;
  padding:16px 20px;
  background:var(--stripe);
  border-radius:8px;
  font-size:12px;
  color:var(--ink2);
  border:1px solid var(--line);
}
.footnotes .lbl{
  font-family:var(--mono);
  font-size:10px;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--ink2);
  font-weight:500;
  margin-bottom:8px;
  display:block;
}
.footnotes ol{margin:0;padding-left:20px;display:grid;gap:8px;line-height:1.55}
.footnotes li sup{color:var(--fact);font-weight:500;margin-right:4px;font-family:var(--sans)}

/* add-wallet inline form panel */
.form-inline{
  display:grid;
  grid-template-columns:1fr 220px auto;
  gap:12px;
  align-items:end;
}
.form-inline .field{gap:8px}
@media(max-width:720px){.form-inline{grid-template-columns:1fr}}

/* def rows for wallet meta */
.meta-rows{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  gap:20px;
  padding:16px 20px;
  background:var(--stripe);
  border-bottom:1px solid var(--line);
}
.meta-rows .cell .l{
  font-family:var(--mono);
  font-size:10px;
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--ink2);
}
.meta-rows .cell .v{
  font-family:var(--mono);
  font-weight:500;
  font-size:14px;
  margin-top:4px;
  color:var(--ink);
}

/* utility */
.mono{font-family:var(--mono)}
.mute{color:var(--ink2)}
.tag{
  display:inline-block;
  font-family:var(--mono);
  font-size:10px;
  letter-spacing:.1em;
  text-transform:uppercase;
  padding:4px 8px;
  border-radius:4px;
  background:var(--stripe);
  color:var(--ink2);
  border:1px solid var(--line);
  font-weight:500;
}
.stack{display:grid;gap:16px}
.stack-lg{display:grid;gap:24px}
.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.spacer{flex:1}
hr.divider{border:none;border-top:1px solid var(--line);margin:0}

/* motto strip */
.motto-strip{
  border-top:1px solid var(--line);
  padding:24px 24px;
  text-align:center;
  font-family:var(--mono);
  font-size:10px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink2);
  background:var(--card);
}
.motto-strip b{color:var(--fact);font-weight:600}

/* ---------- responsive ---------- */
@media(max-width:900px){
  .tiers{grid-template-columns:1fr 1fr}
  .vaults-grid{grid-template-columns:1fr}
  .honesty-grid{grid-template-columns:1fr;gap:12px}
  .def-list > div{grid-template-columns:1fr;gap:4px}
  .def-list dt{color:var(--ink2)}
}
@media(max-width:680px){
  .dash-nav-in{gap:12px;padding:12px 16px}
  .dash-brand{flex-basis:100%;justify-content:space-between}
  .dash-links{
    flex-basis:100%;
    overflow-x:auto;
    padding:8px 0;
    border-top:1px solid var(--line);
    margin-top:8px;
  }
  .dash-right{margin-left:0;flex-basis:100%;justify-content:flex-end;border-top:1px solid var(--line);padding-top:12px}
  .dash-main{padding:24px 16px 64px}
  .page-h{flex-direction:column;align-items:stretch}
  .tiers{grid-template-columns:1fr}
  .pricing{padding:48px 16px 40px}
  .auth{padding:32px 16px 48px}
  .auth-card{padding:24px 24px}
  .tbl thead th,.tbl tbody td{padding:12px 14px}
  .empty{padding:48px 20px}
  .review{padding:40px 16px 64px}
}
@media(max-width:440px){
  body{font-size:15px}
  h1{font-size:18px !important}
  .err-code{font-size:64px}
  .kpi .v{font-size:1.35rem}
  .tier .price{font-size:1.8rem}
  .meta-rows{grid-template-columns:1fr 1fr}
  .form-inline{grid-template-columns:1fr}
}
@media(max-width:380px){
  .dash-nav-in{padding:12px 12px}
  .dash-main{padding:20px 12px 48px}
  .auth-card{padding:24px 20px}
  .review{padding:32px 12px 64px}
}


/* ==========================================================================
   Print stamp — seal + wordmark + printed-on line at the top of any
   reconciliation report. Hidden on screen; revealed by the print stylesheet.
   Add <div class="print-stamp"> to any page that should carry a mark of
   origin when printed or exported to PDF.
   ========================================================================== */
.print-stamp{display:none}

/* ---------- loading interstitial ---------- */
.loading{
  min-height:100vh;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  padding:48px 20px;
  text-align:center;
}
.loading-mark{
  width:96px;
  height:96px;
  background:url("assets/seal_128.png") center/contain no-repeat;
  margin-bottom:24px;
  animation:sealPulse 2.4s ease-in-out infinite;
}
@keyframes sealPulse{
  0%,100%{opacity:.72;transform:scale(1)}
  50%{opacity:1;transform:scale(1.02)}
}
@media(prefers-reduced-motion:reduce){.loading-mark{animation:none;opacity:.92}}
.loading .wordmark{font-size:18px;margin-bottom:12px;pointer-events:none}
.loading h1{
  font-family:var(--mono);
  font-size:18px;
  font-weight:700;
  letter-spacing:-.02em;
  margin-bottom:12px;
}
.loading p{color:var(--ink2);font-size:14px;line-height:1.6;max-width:44ch}
.loading .meta{
  margin-top:24px;
  font-family:var(--mono);
  font-size:10px;
  letter-spacing:.14em;
  text-transform:uppercase;
  color:var(--ink2);
}
.loading .bar{
  margin-top:16px;
  width:180px;
  height:3px;
  background:var(--tint);
  border-radius:2px;
  overflow:hidden;
  position:relative;
}
.loading .bar::before{
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(90deg,transparent 0,var(--fact) 40%,var(--fact) 60%,transparent 100%);
  width:40%;
  animation:loadSlide 1.6s linear infinite;
}
@keyframes loadSlide{
  0%{transform:translateX(-100%)}
  100%{transform:translateX(350%)}
}
@media(prefers-reduced-motion:reduce){
  .loading .bar::before{animation:none;width:100%;opacity:.6}
}

/* ==========================================================================
   PRINT STYLESHEET
   Strips the interactive chrome, keeps the record, stamps the seal at the
   top of any page so a printed audit carries its own mark of origin.
   ========================================================================== */
@media print{
  @page{margin:18mm 16mm 16mm 16mm}

  *{-webkit-print-color-adjust:exact;print-color-adjust:exact}

  body{
    background:#fff !important;
    color:#000 !important;
    font-size:11pt;
    line-height:1.45;
  }

  /* hide interactive chrome */
  .dash-nav,
  .market-nav,
  .motto-strip,
  .dash-signout,
  .dash-right form,
  .page-h .actions,
  .actions,
  .btn,
  .form,
  .form-inline,
  .empty .btn,
  .callout .btn,
  a[href^="mailto"]{display:none !important}

  /* REDUNDANT SINCE 2026-08-21, kept for explicitness. The wordmark seal is
     scoped to `.dash-brand`, so a print stamp outside the dashboard brand never
     receives one and there is nothing here to strip. The load-bearing rule is
     the `.dash-brand .wordmark::before` scoping above — deleting THAT is what
     would change rendering; deleting this line changes nothing (§22). */
  .print-stamp .wordmark::before{display:none}

  /* full-width canvas */
  .dash-main,
  .pricing,
  .auth,
  .review,
  .err-page{
    max-width:100% !important;
    padding:0 !important;
    margin:0 !important;
  }

  /* reveal + style print stamp */
  .print-stamp{
    display:flex !important;
    align-items:center;
    gap:16px;
    padding:0 0 12px;
    margin:0 0 20px;
    border-bottom:1.5px solid #000;
    page-break-after:avoid;
    break-after:avoid;
  }
  .print-stamp .seal{
    width:52px;
    height:52px;
    background:url("assets/seal_128.png") center/contain no-repeat;
    flex:0 0 52px;
  }
  .print-stamp .stamp-txt{display:flex;flex-direction:column;gap:2px}
  .print-stamp .stamp-txt .m{font-family:var(--mono);font-weight:600;font-size:14pt;letter-spacing:-.02em;color:#000}
  .print-stamp .stamp-txt .m b{color:#125239;font-weight:600}
  .print-stamp .stamp-txt .s{
    font-family:var(--mono);
    font-size:8pt;
    letter-spacing:.1em;
    text-transform:uppercase;
    color:#555;
  }
  .print-stamp .stamp-meta{
    margin-left:auto;
    font-family:var(--mono);
    font-size:8pt;
    color:#555;
    text-align:right;
    line-height:1.45;
    letter-spacing:.02em;
  }
  .print-stamp .stamp-meta b{color:#000;font-weight:600}

  /* panels, tables — print-safe */
  .panel{
    border:1px solid #000 !important;
    box-shadow:none !important;
    background:#fff !important;
    page-break-inside:avoid;
    break-inside:avoid;
    margin-bottom:14pt;
  }
  .panel-h,.panel-f{background:#fff !important;color:#000 !important;border-color:#000 !important}
  .tbl thead th{background:#eee !important;color:#000 !important;border-color:#000 !important}
  .tbl tbody td{border-color:#666 !important;color:#000 !important}
  .tbl tbody tr{page-break-inside:avoid;break-inside:avoid}

  /* unknowns stay honest */
  .unknown-cell{color:#666 !important}
  .unknown-cell sup{color:#125239 !important}
  .coverage.gap{background:#f4e6c8 !important;color:#5c3f0b !important;border:1px solid #a37c33 !important}
  .coverage.ok{background:#e0efe5 !important;color:#0f4a2d !important;border:1px solid #4f8069 !important}

  .footnotes{background:#fafafa !important;border-color:#666 !important;color:#333 !important;page-break-inside:avoid}
  .callout{border:1px solid #000 !important;background:#fafafa !important;color:#000 !important;page-break-inside:avoid}
  .callout.danger{border-color:#7a2618 !important}

  /* let long text flow across pages naturally */
  h1,h2,h3{page-break-after:avoid;break-after:avoid}

  /* URLs behind links become visible on paper */
  a[href^="http"]::after,a[href^="/"]::after{
    content:" (" attr(href) ")";
    font-size:8pt;
    color:#666;
    font-family:var(--mono);
  }
}

/* ---------- legal version banner ----------
   Sits OUTSIDE the document it introduces. The document's bytes are evidence —
   an acceptance record names their sha256 — so the notice cannot be added to
   them without breaking the record. It wraps instead. */
.legal-banner{
  background:var(--fact-bg);border-bottom:1px solid var(--line);
  font-family:var(--mono);font-size:12px;line-height:1.6;color:var(--ink)
}
.legal-banner-upcoming{background:var(--est-bg);border-bottom-color:var(--est-line)}
.legal-banner-in{max-width:52rem;margin:0 auto;padding:12px 20px}
.legal-banner a{color:var(--fact)}
.legal-banner .sep{color:var(--line-dk);margin:0 8px}
.legal-digest{color:var(--ink2);margin-left:8px}
@media print{.legal-banner{display:none}}
