/* Ledgerline — self-hosted faces, latin subset only (SIL Open Font License;
   licenses in assets/fonts/). Variable weights: Newsreader 200–800,
   Archivo Narrow 400–700, Libre Franklin 100–900. */

@font-face {
  font-family: 'Newsreader';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('./fonts/newsreader-latin.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: 'Newsreader';
  font-style: italic;
  font-weight: 200 800;
  font-display: swap;
  src: url('./fonts/newsreader-400italic-latin.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: 'Archivo Narrow';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url('./fonts/archivonarrow-latin.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: 'Libre Franklin';
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('./fonts/librefranklin-latin.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;
}

/* ============================================================
   Ledgerline — hand-rolled stylesheet, no framework.
   Palette: paper dominant, ink secondary, ONE accent (vermilion
   #BE3F24 = red ink; doubled as the primary-action colour).
   Tick green is a status colour and appears only under the legend.
   Radius scale: 0 / 3px / 999px. One border style: 1px ink-rule.
   Spacing: 8px base.
   ============================================================ */

:root {
  --paper: #F5F1E8;
  --paper-2: #EDE7D8;      /* raised band */
  --card: #FBF8F0;         /* statement sheet */
  --ink: #211F1A;
  --ink-soft: #514D42;
  --rule: #C9C2AE;         /* hairline ledger rule */
  --accent: #BE3F24;       /* red ink */
  --accent-deep: #9A3218;  /* hover / AA text on paper */
  --tick: #3E6B4F;         /* state green, legend-governed */

  --fs-h1: clamp(2rem, 1.2rem + 3.6vw, 3.35rem);
  --fs-h2: clamp(1.45rem, 1.1rem + 1.4vw, 1.9rem);
  --fs-h3: 1.2rem;
  --fs-body: 1.0625rem;
  --fs-small: 0.875rem;
  --fs-meta: 0.78rem;

  --s-1: 8px;  --s-2: 16px; --s-3: 24px; --s-4: 32px;
  --s-6: 48px; --s-8: 64px; --s-12: 96px;
}

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

html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation: none !important; transition: none !important; }
}

body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: 'Libre Franklin', system-ui, sans-serif;
  font-size: var(--fs-body);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

h1, h2, h3 {
  font-family: 'Newsreader', Georgia, serif;
  font-weight: 600;
  line-height: 1.12;
  margin: 0 0 var(--s-2);
  text-wrap: balance;
}
h1 { font-size: var(--fs-h1); letter-spacing: -0.01em; max-width: 22ch; }
h2 { font-size: var(--fs-h2); }
h3 { font-size: var(--fs-h3); }
p { margin: 0 0 var(--s-2); max-width: 66ch; }

a { color: var(--ink); }
a:hover { color: var(--accent-deep); }

:focus-visible {
  outline: 3px solid var(--accent);
  outline-offset: 2px;
}

.visually-hidden, .vh {
  position: absolute; width: 1px; height: 1px;
  margin: -1px; padding: 0; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
}

.skip-link {
  position: absolute; left: var(--s-2); top: -64px;
  background: var(--ink); color: var(--paper);
  padding: var(--s-1) var(--s-2); z-index: 10;
  transition: top .15s ease;
}
.skip-link:focus { top: var(--s-1); }

.wrap { max-width: 1120px; margin-inline: auto; padding-inline: var(--s-3); }

/* ---------- buttons ---------- */
.btn {
  display: inline-block;
  font-family: 'Libre Franklin', sans-serif;
  font-weight: 600;
  font-size: var(--fs-small);
  text-decoration: none;
  color: var(--paper);
  background: var(--accent);
  border: 1px solid var(--accent-deep);
  border-radius: 3px;
  padding: 12px var(--s-3);
}
.btn:hover { background: var(--accent-deep); color: var(--paper); }
.btn-quiet { background: transparent; color: var(--ink); border: 1px solid var(--ink); }
.btn-quiet:hover { background: var(--ink); color: var(--paper); }
.btn-small { padding: 7px var(--s-2); }

/* ---------- header ---------- */
.site-head {
  position: sticky; top: 0; z-index: 9;
  background: var(--paper);
  border-bottom: 3px double var(--ink);
}
.head-inner {
  display: flex; align-items: center; gap: var(--s-3);
  padding-block: var(--s-1);
}
.brand {
  display: flex; align-items: center; gap: 10px;
  font-family: 'Newsreader', serif; font-weight: 700; font-size: 1.2rem;
  text-decoration: none; letter-spacing: .01em;
}
.site-nav { margin-left: auto; display: flex; gap: var(--s-3); }
.site-nav a {
  text-decoration: none; font-size: var(--fs-small); font-weight: 500;
  padding-block: var(--s-1);
  border-bottom: 2px solid transparent;
}
.site-nav a:hover { border-bottom-color: var(--accent); color: var(--accent-deep); }
@media (max-width: 640px) {
  .site-nav { display: none; }
  .head-inner { justify-content: space-between; }
}

/* ---------- hero ---------- */
.hero {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
  gap: var(--s-6);
  padding-block: var(--s-8) var(--s-12);
  align-items: start;
}
@media (max-width: 900px) { .hero { grid-template-columns: 1fr; } }

.lede { font-size: 1.1rem; color: var(--ink-soft); }
.lede:first-of-type { color: var(--ink); font-size: 1.18rem; }
.txn {
  font-family: 'Archivo Narrow', sans-serif;
  font-weight: 500; letter-spacing: .02em;
  background: var(--paper-2);
  padding: 0 5px;
  white-space: nowrap;
}
.hero-actions { display: flex; flex-wrap: wrap; gap: var(--s-2); margin-block: var(--s-3); }
.hero-fine { font-size: var(--fs-small); color: var(--ink-soft); }

/* ---------- the statement demo ---------- */
.demo { position: relative; }
.demo-form {
  background: var(--card);
  border: 1px solid var(--ink);
  border-radius: 3px;
  padding: var(--s-3);
  position: relative;
}
/* the ledger's red margin rule, drawn as actual page furniture */
.demo-form::before {
  content: ""; position: absolute; top: 0; bottom: 0; left: 34px;
  width: 1px; background: color-mix(in srgb, var(--accent) 55%, transparent);
}
.stmt-meta {
  font-size: var(--fs-meta); color: var(--ink-soft);
  font-family: 'Archivo Narrow', sans-serif; letter-spacing: .04em;
  margin-bottom: var(--s-2);
}
.chips { display: flex; gap: var(--s-1); margin-bottom: var(--s-2); }
.chip {
  font-size: var(--fs-meta); font-weight: 600;
  border: 1px solid var(--ink); border-radius: 999px;
  padding: 4px 12px; cursor: pointer;
  background: transparent;
}
#view-ledger:checked ~ .demo-form label[for="view-ledger"],
#view-raw:checked ~ .demo-form label[for="view-raw"] {
  background: var(--ink); color: var(--paper);
}
#view-ledger:focus-visible ~ .demo-form label[for="view-ledger"],
#view-raw:focus-visible ~ .demo-form label[for="view-raw"] {
  outline: 3px solid var(--accent); outline-offset: 2px;
}

.statement {
  width: 100%; border-collapse: collapse;
  font-size: var(--fs-small);
}
.statement th, .statement td {
  text-align: left; padding: 9px 6px;
  border-bottom: 1px solid var(--rule);
  vertical-align: baseline;
}
.statement thead th {
  font-family: 'Archivo Narrow', sans-serif;
  font-size: var(--fs-meta); letter-spacing: .06em; text-transform: uppercase;
  border-bottom: 2px solid var(--ink); color: var(--ink-soft);
}
.statement .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.statement .desc { padding-left: 34px; }
.statement .raw .desc { padding-left: 34px; }
.statement .raw .desc {
  font-family: 'Archivo Narrow', sans-serif; letter-spacing: .02em;
}
.statement .cat { font-size: var(--fs-small); }
.statement .cat.dash { color: var(--rule); }
.statement .voidrow td { color: var(--ink-soft); }
.statement .voidrow .desc { text-decoration: line-through; text-decoration-thickness: 1px; }

/* one orchestrated moment: when the ledger view is switched on,
   ticks draw themselves in, staggered. Runs once per toggle, ends at rest. */
@keyframes tick-draw {
  from { clip-path: inset(0 100% 0 0); }
  to   { clip-path: inset(0 0 0 0); }
}
.tick {
  display: inline-block; width: 13px; height: 13px; margin-right: 6px;
  vertical-align: -2px;
  background: var(--tick);
  clip-path: polygon(14% 46%, 0 60%, 38% 100%, 100% 26%, 86% 12%, 40% 70%);
}
#view-ledger:checked ~ .demo-form .ledg .tick {
  animation: tick-draw .5s ease-out backwards;
}
#view-ledger:checked ~ .demo-form .ledg tr:nth-child(2) .tick { animation-delay: .12s; }
#view-ledger:checked ~ .demo-form .ledg tr:nth-child(4) .tick { animation-delay: .24s; }
#view-ledger:checked ~ .demo-form .ledg tr:nth-child(5) .tick { animation-delay: .36s; }

.inkmark {
  font-family: 'Newsreader', serif; font-style: italic; font-weight: 600;
  color: var(--accent);
  text-decoration: underline wavy var(--accent) 1px;
  text-underline-offset: 3px;
}
.void {
  font-size: var(--fs-meta); font-family: 'Archivo Narrow', sans-serif;
  text-transform: uppercase; letter-spacing: .05em;
  color: var(--ink-soft);
  border: 1px solid var(--rule); border-radius: 999px; padding: 1px 8px;
}
.demo .raw { display: none; }
#view-raw:checked ~ .demo-form .raw { display: table-row-group; }
#view-raw:checked ~ .demo-form .ledg { display: none; }

.legend {
  font-size: var(--fs-meta); color: var(--ink-soft);
  border-top: 1px solid var(--rule); padding-top: var(--s-1); margin: 0;
}
.demo-note { font-size: var(--fs-small); color: var(--ink-soft); margin: var(--s-1) 0 0; }

/* ---------- banded sections ---------- */
.band { background: var(--paper-2); border-block: 1px solid var(--rule); padding-block: var(--s-12); }

.prose h2 { max-width: 30ch; }
.prose p:last-child { margin-bottom: 0; }

/* ---------- how it works: ledger rows ---------- */
#how h2, #pricing h2 { margin-bottom: var(--s-4); }
.flow { width: 100%; border-collapse: collapse; }
.flow tr { border-bottom: 1px solid var(--rule); }
.flow tr:first-child { border-top: 2px solid var(--ink); }
.flow th.lineno {
  font-family: 'Archivo Narrow', sans-serif; font-weight: 700;
  font-size: 1.05rem; color: var(--accent);
  text-align: left; vertical-align: top;
  padding: var(--s-3) var(--s-2) var(--s-3) 0;
  width: 3.5rem;
}
.flow td { padding: var(--s-3) var(--s-2); vertical-align: top; }
.flow h3 { margin-bottom: 4px; }
.flow p { margin: 0; color: var(--ink-soft); }
.flow .flow-meta {
  font-family: 'Archivo Narrow', sans-serif;
  font-size: var(--fs-meta); letter-spacing: .04em; text-transform: uppercase;
  color: var(--ink-soft); text-align: right; white-space: nowrap;
  width: 12rem;
}
@media (max-width: 760px) {
  .flow .flow-meta { display: block; text-align: left; width: auto; }
  .flow tr { display: block; padding-block: var(--s-1); }
  .flow th.lineno { display: inline-block; padding-bottom: 0; width: auto; }
  .flow td { display: block; padding-top: 4px; }
}

/* the folder */
.folder {
  margin-top: var(--s-6);
  border: 1px solid var(--ink); border-radius: 3px;
  background: var(--card);
  padding: var(--s-4);
}
.folder h3 { margin-bottom: var(--s-3); }
.filelist { list-style: none; margin: 0 0 var(--s-2); padding: 0; }
.filelist li {
  display: flex; flex-wrap: wrap; gap: var(--s-2);
  padding: 7px 0; border-bottom: 1px dashed var(--rule);
}
.filelist li:last-child { border-bottom: 0; }
.fname {
  font-family: 'Archivo Narrow', sans-serif; font-weight: 700;
  font-size: var(--fs-small); letter-spacing: .01em;
  min-width: 20em;
}
@media (max-width: 700px) { .fname { min-width: 0; } }
.fmeta { font-size: var(--fs-small); color: var(--ink-soft); }
.folder-note { font-size: var(--fs-small); color: var(--ink-soft); margin: 0; }

/* ---------- red ink split ---------- */
.split { display: grid; grid-template-columns: minmax(0, 6fr) minmax(0, 5fr); gap: var(--s-6); align-items: start; }
@media (max-width: 900px) { .split { grid-template-columns: 1fr; } }
.split-text p:last-child { margin-bottom: 0; }

.review-card {
  background: var(--card);
  border: 1px solid var(--ink);
  border-left: 4px solid var(--accent);
  border-radius: 3px;
  padding: var(--s-3);
}
.rc-title {
  font-family: 'Newsreader', serif; font-weight: 600;
  margin-bottom: var(--s-1);
}
.rc-note {
  font-size: var(--fs-meta); color: var(--ink-soft);
  font-style: italic; margin-bottom: var(--s-2);
}
.review-card dl { margin: 0; }
.review-card dt {
  font-family: 'Archivo Narrow', sans-serif; font-weight: 700;
  letter-spacing: .02em; font-size: var(--fs-small);
  padding-top: var(--s-2);
  border-top: 1px solid var(--rule);
}
.review-card dd {
  margin: 2px 0 0; padding-bottom: var(--s-2);
  font-size: var(--fs-small); color: var(--ink-soft);
  border-bottom: 1px solid var(--rule);
}
.review-card dt + dd { border-bottom: 0; }

/* ---------- pair: deliberately unequal ---------- */
.pair {
  display: grid; grid-template-columns: 3fr 2fr; gap: var(--s-6);
  padding-block: var(--s-12);
}
@media (max-width: 800px) { .pair { grid-template-columns: 1fr; } }
.pair-b {
  border-left: 3px solid var(--ink);
  padding-left: var(--s-3);
}
.pair p { margin-bottom: 0; color: var(--ink-soft); }

/* ---------- pricing ---------- */
.pricing-intro { color: var(--ink-soft); margin-bottom: var(--s-4); }
.rates-scroll { overflow-x: auto; }
.rates {
  width: 100%; min-width: 640px;
  border-collapse: collapse;
  background: var(--card);
  border: 1px solid var(--ink);
}
.rates th, .rates td {
  padding: var(--s-2);
  border-bottom: 1px solid var(--rule);
  text-align: left; font-size: var(--fs-small);
  vertical-align: top;
}
.rates thead th {
  font-family: 'Newsreader', serif; font-weight: 700; font-size: 1.25rem;
  line-height: 1.25;
  border-bottom: 2px solid var(--ink);
  padding-top: var(--s-3);
  width: 33.33%;
}
.tier-sub { display: block; font-family: 'Libre Franklin', sans-serif; font-weight: 500; font-size: var(--fs-meta); color: var(--ink-soft); }
.tier-best { background: color-mix(in srgb, var(--accent) 7%, var(--card)); }
.rates tbody th[scope="row"] { font-weight: 600; color: var(--ink); width: 22%; }
.rates tbody tr:last-child th, .rates tbody tr:last-child td { border-bottom: 0; }
.pricing-fine { font-size: var(--fs-small); color: var(--ink-soft); margin-top: var(--s-2); }

/* ---------- faq ---------- */
.faq h2 { margin-bottom: var(--s-4); }
.faq details {
  border-bottom: 1px solid var(--rule);
  padding-block: var(--s-1);
}
.faq summary {
  font-family: 'Newsreader', serif; font-weight: 600; font-size: var(--fs-h3);
  cursor: pointer; padding-block: var(--s-1);
  list-style: none;
}
.faq summary::before { content: "+ "; color: var(--accent); font-weight: 700; }
.faq details[open] summary::before { content: "− "; }
.faq details p { margin-bottom: var(--s-2); color: var(--ink-soft); }

/* ---------- closer ---------- */
.closer {
  padding-block: var(--s-12);
  border-bottom: 3px double var(--ink);
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-4);
}
.closer h2 { margin: 0; max-width: 24ch; }

/* ---------- footer ---------- */
.site-foot { padding-block: var(--s-6); }
.foot-inner { display: flex; flex-wrap: wrap; gap: var(--s-4); align-items: baseline; }
.foot-brand {
  font-family: 'Newsreader', serif; font-weight: 700; font-size: 1.15rem;
  margin: 0; display: flex; flex-direction: column; gap: 2px;
}
.foot-brand small { font-family: 'Libre Franklin', sans-serif; font-weight: 400; font-size: var(--fs-meta); color: var(--ink-soft); }
.foot-nav { display: flex; flex-wrap: wrap; gap: var(--s-3); margin-left: auto; }
.foot-nav a { font-size: var(--fs-small); text-decoration: none; border-bottom: 1px solid var(--rule); }
.foot-nav a:hover { border-bottom-color: var(--accent); }
.foot-legal { font-size: var(--fs-meta); color: var(--ink-soft); width: 100%; margin: var(--s-2) 0 0; }
