/* ============================================================
   PDFeyes: Design system
   ============================================================
   CONCEPT: the site is set like a well-made document.

   Every competitor in this category (Instafill, DocFills, pdfFiller,
   Smallpdf) ships the same visual grammar: white page, electric blue,
   geometric sans, drop shadows. Matching it makes us invisible.

   So: warm paper instead of white, a display serif instead of a default
   UI sans, hairline rules instead of shadows, and a highlighter amber
   that mirrors what the product actually does: mark up a page.

   Type:   Fraunces (display) / Instrument Sans (UI + body)
   Ink:    warm near-black, never #000
   Paper:  warm cream, never #fff
   Accent: archival green for action, amber for annotation
   ============================================================ */

:root{
  /* ============================================================
     Midnight and Copper. September 2026 redesign.
     ============================================================
     The old system was a bright orange (#F2610C) on cream. It photographed
     well and read as loud: the solid orange cards and buttons pulled the eye
     away from the thing each page exists to show, which is a number, a form
     or a tool.

     This one is quieter on purpose. Surfaces are white and a cool warm-grey.
     Weight comes from ink, a deep navy, used for the primary action, dark
     bands and the footer. Copper is the accent and it is rationed: links,
     the highlighter, one italic word in a headline, the logo's fold. If a
     page has more than a few copper things on it, one of them is wrong.

     Contrast, all on white: ink 17.9:1, ink-soft 9.3:1, ink-faint 4.8:1
     (AA for body text), copper 6.0:1, copper-deep 8.6:1. White on navy is
     16.7:1, so primary buttons clear AAA. */
  --paper:#FFFFFF;
  --paper-2:#F7F7F5;
  --paper-3:#EEEDE9;
  --card:#FFFFFF;

  --ink:#0B1220;
  --ink-soft:#3F4859;
  --ink-faint:#667085;

  --rule:#E9E8E4;
  --rule-strong:#D9D7D1;

  --navy:#0F1B2D;
  --navy-2:#1B2A42;
  --navy-3:#24364F;

  --accent:#A4502A;
  --accent-deep:#7D3B1E;
  --accent-tint:#F8F1EC;
  --accent-line:#EBD5C8;

  --mark:#A4502A;
  --mark-soft:#F3E7DC;
  --mark-line:#E6CDBE;
  --brand-grad:linear-gradient(100deg,#B85E34 0%,#A4502A 55%,#8E4524 100%);

  /* Money on the statement table: green in, red out. Convention, not brand. */
  --pos:#15803D;
  --neg:#B42318;
  --mark-ink:#7D3B1E;

  --radius-sm:8px;
  --radius:12px;
  --radius-lg:18px;
  --shadow-xs:0 1px 2px rgb(11 18 32 / .05);
  --shadow-sm:0 1px 2px rgb(11 18 32 / .04), 0 2px 8px -2px rgb(11 18 32 / .06);
  --shadow:0 1px 2px rgb(11 18 32 / .04), 0 12px 32px -14px rgb(11 18 32 / .18);
  --shadow-lg:0 2px 4px rgb(11 18 32 / .04), 0 24px 56px -20px rgb(11 18 32 / .28);
  --maxw:1180px;

  --font-display:'Fraunces', Georgia, 'Times New Roman', serif;
  --font:'Instrument Sans', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-mono: ui-monospace, 'SF Mono', Menlo, monospace;

  /* legacy aliases so tool stylesheets keep working */
  --line:var(--rule);
  --accent-soft:var(--accent-tint);
  --accent-ink:var(--accent-deep);
  --paper-soft:var(--paper-2);
  --amber:var(--accent);
  --amber-soft:var(--mark-soft);
}

*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  margin:0; font-family:var(--font); color:var(--ink); background:var(--paper);
  line-height:1.6; -webkit-font-smoothing:antialiased; font-size:16px;
}
/* Paper tooth: barely-there grain so large fields of cream read as stock
   rather than a flat fill. One inline SVG, no network cost. */
body::before{
  display:none; content:""; position:fixed; inset:0; pointer-events:none; z-index:0; opacity:.55;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.04'/%3E%3C/svg%3E");
}
body > *{position:relative; z-index:1;}

img,svg{display:block; max-width:100%;}
a{color:inherit; text-decoration:none;}

h1,h2,h3{font-family:var(--font-display); font-weight:600; letter-spacing:-0.015em; margin:0 0 .5em; font-optical-sizing:auto;}
h4{font-family:var(--font); font-weight:600; margin:0 0 .5em;}
p{margin:0 0 1em; color:var(--ink-soft);}
.wrap{max-width:var(--maxw); margin:0 auto; padding:0 28px;}
:focus-visible{outline:2px solid var(--accent); outline-offset:3px; border-radius:2px;}
::selection{background:var(--mark-soft); color:var(--ink);}

/* Highlighter mark: the signature device. One or two phrases per page,
   never more: it is an annotation, not decoration. */
.mark{background:linear-gradient(to bottom, transparent 56%, var(--mark-soft) 56%, var(--mark-soft) 95%, transparent 95%); padding:0 .1em;}

/* ---------- Buttons ---------- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:9px;
  font-family:inherit; font-weight:600; font-size:15px; letter-spacing:-0.005em;
  padding:12px 22px; border-radius:var(--radius-sm); border:1px solid var(--rule-strong);
  cursor:pointer; white-space:nowrap; background:var(--card); color:var(--ink);
  transition:background .18s ease, color .18s ease, border-color .18s ease, transform .12s ease;
}
.btn:active{transform:translateY(1px);}
.btn-primary{background:#A4502A; color:#FFFFFF; border-color:var(--accent);}
.btn-primary:hover{background:var(--accent-deep); border-color:var(--accent-deep);}
.btn-primary:disabled{opacity:.42; cursor:not-allowed;}
.btn-ghost{background:transparent; border-color:var(--rule-strong); color:var(--ink);}
.btn-ghost:hover{border-color:var(--ink); background:var(--paper-2);}
.btn-quiet{background:transparent; border:none; padding:0; color:var(--accent); font-weight:600; box-shadow:inset 0 -1px 0 var(--accent-line);}
.btn-quiet:hover{box-shadow:inset 0 -1px 0 var(--accent);}
.btn-quiet svg{transition:transform .18s ease;}
.btn-quiet:hover svg{transform:translateX(3px);}

/* ---------- Header ---------- */
.site-header{position:sticky; top:0; z-index:50; background:rgb(255 255 255 / .94); -webkit-backdrop-filter:blur(12px) saturate(1.2); backdrop-filter:blur(12px) saturate(1.2); border-bottom:1px solid var(--rule);}
.site-header .wrap{display:flex; align-items:center; height:68px; gap:16px;}
.logo{display:flex; align-items:center; gap:10px; font-family:var(--font-display); font-weight:600; font-size:19px; letter-spacing:-0.02em;}
.logo img{width:25px; height:25px;}
.logo .wm-eyes{
  background:var(--brand-grad); -webkit-background-clip:text; background-clip:text;
  color:transparent;
}
/* If background-clip:text is unsupported the text would vanish, so only make
   it transparent where the browser can actually paint the gradient. */
@supports not ((-webkit-background-clip:text) or (background-clip:text)){
  .logo .wm-eyes{color:var(--accent); background:none;}
}
.nav-links{display:flex; align-items:center; gap:22px; font-size:14.5px; font-weight:500; color:var(--ink-soft); margin-left:10px;}
.nav-links a{white-space:nowrap; padding:4px 0; box-shadow:inset 0 -1px 0 transparent; transition:box-shadow .18s ease, color .18s ease;}
.nav-links a:hover{color:var(--ink); box-shadow:inset 0 -1px 0 var(--rule-strong);}
.nav-links a.active{color:var(--ink); box-shadow:inset 0 -1px 0 var(--accent);}
.nav-spacer{flex:1;}
.nav-cta{display:flex; align-items:center; gap:18px;}
@media (max-width:1100px){ .nav-links{gap:16px; font-size:14px;} }
@media (max-width:980px){
  .site-header .wrap{height:auto; flex-wrap:wrap; padding-top:12px; padding-bottom:0;}
  .nav-links{order:3; width:100%; margin:6px 0 0; overflow-x:auto; gap:4px; -webkit-overflow-scrolling:touch; scrollbar-width:none;}
  .nav-links::-webkit-scrollbar{display:none;}
  .nav-links a{padding:12px 8px; display:flex; align-items:center; min-height:44px;}
  .nav-spacer{display:none;}
  .nav-cta{margin-left:auto;}
}
@media (pointer:coarse){ .nav-links a{min-height:44px;} .btn{min-height:44px;} }

/* ---------- Footer ---------- */
.site-footer{border-top:1px solid var(--rule); padding:52px 0 34px; background:var(--paper-2);}
.site-footer .foot-grid{display:flex; justify-content:space-between; flex-wrap:wrap; gap:32px;}
.site-footer .foot-col h4{font-size:11.5px; text-transform:uppercase; letter-spacing:.1em; color:var(--ink-faint); margin-bottom:14px; font-weight:600;}
.site-footer .foot-col a{display:block; font-size:14.5px; color:var(--ink-soft); margin-bottom:10px;}
.site-footer .foot-col a:hover{color:var(--accent);}
.site-footer .foot-copy{font-size:13px; color:var(--ink-faint); margin-top:34px; padding-top:22px; border-top:1px solid var(--rule);}

/* ---------- Sections ---------- */
section{padding:84px 0;}
.section-head{max-width:640px; margin:0 auto 44px; text-align:center;}
.section-head h2{font-size:clamp(26px,3.2vw,38px);}
.eyebrow{display:inline-flex; align-items:center; gap:8px; font-size:11.5px; font-weight:600; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-faint); margin-bottom:18px;}
.bg-soft{background:var(--paper-2);}

/* ---------- Grids / cards ---------- */
.grid-2{display:grid; grid-template-columns:repeat(2,1fr); gap:22px;}
.grid-3{display:grid; grid-template-columns:repeat(3,1fr); gap:22px;}
@media (max-width:820px){ .grid-2, .grid-3{grid-template-columns:1fr;} }
.card{background:var(--card); border:1px solid var(--rule); border-radius:var(--radius); padding:26px;}
.card h3{font-family:var(--font); font-weight:600;}
.icon-badge{width:36px; height:36px; border-radius:9px; background:var(--accent-tint); display:flex; align-items:center; justify-content:center; flex-shrink:0; margin-bottom:16px; border:1px solid var(--accent-line);}

/* ---------- Content cards ---------- */
.content-card{border:1px solid var(--rule); border-radius:var(--radius); overflow:hidden; display:flex; flex-direction:column; background:var(--card); transition:border-color .2s ease, transform .2s ease, background .2s ease;}
.content-card:hover{border-color:var(--accent-line); transform:translateY(-2px); background:#fff;}
.content-card .cc-body{padding:24px 24px 26px;}
.content-card .cc-tag{font-size:11px; font-weight:600; color:var(--ink-faint); text-transform:uppercase; letter-spacing:.1em;}
.content-card h3{font-size:19px; margin:10px 0 8px; line-height:1.25;}
.content-card p{font-size:14.5px; margin:0;}
.content-card .cc-meta{font-size:12.5px; color:var(--ink-faint); margin-top:16px;}

/* ---------- Article / prose ---------- */
.article-head{max-width:736px; margin:0 auto; padding:64px 28px 26px;}
.article-head .cc-tag{display:block; margin-bottom:16px; font-size:11.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-faint); font-weight:600;}
.article-head h1{font-size:clamp(30px,4.2vw,46px); line-height:1.1; letter-spacing:-0.02em;}
.article-head .article-meta{font-size:13.5px; color:var(--ink-faint); margin-top:18px;}
.article-head::after{content:""; display:block; height:1px; background:var(--rule); margin-top:26px;}
.prose{max-width:736px; margin:0 auto; padding:36px 28px 90px; font-size:17.5px; line-height:1.72; color:var(--ink);}
.prose h2{font-size:26px; margin-top:1.9em; letter-spacing:-0.02em;}
.prose h3{font-size:20px; margin-top:1.5em;}
.prose p{color:var(--ink); margin-bottom:1.15em;}
.prose ul, .prose ol{padding-left:1.25em; margin-bottom:1.15em; color:var(--ink);}
.prose li{margin-bottom:.5em;}
.prose li::marker{color:var(--ink-faint);}
.prose strong{font-weight:600;}
.prose blockquote{border-left:2px solid var(--mark); margin:1.7em 0; padding:2px 0 2px 22px; color:var(--ink-soft); font-family:var(--font-display); font-size:19px; font-style:italic;}
.prose a{color:var(--accent); font-weight:500; box-shadow:inset 0 -1px 0 var(--accent-line);}
.prose a:hover{box-shadow:inset 0 -1px 0 var(--accent);}
.prose code{background:var(--paper-3); padding:2px 6px; border-radius:4px; font-size:.88em; font-family:var(--font-mono);}
.callout{background:var(--accent-tint); border:1px solid var(--accent-line); border-radius:var(--radius); padding:24px 26px; margin:2em 0;}
.callout p{color:var(--accent-deep); margin:0;}
.callout a.btn{margin-top:14px;}
/* A button inside prose is a button, not a link. `.prose a` (0,0,1,1) outranks
   `.btn-primary` (0,0,1,0), which silently made green text on a green button. */
.prose a.btn, .callout a.btn{box-shadow:none; font-weight:600;}
.prose a.btn-primary, .callout a.btn-primary{color:#FFFFFF;}
.prose a.btn-primary:hover, .callout a.btn-primary:hover{color:#FFFFFF;}
.prose a.btn-ghost, .callout a.btn-ghost{color:var(--ink);}

/* ---------- Glossary ---------- */
.glossary-jump{display:flex; flex-wrap:wrap; gap:7px; margin-bottom:44px;}
.glossary-jump a{font-size:12.5px; font-weight:500; padding:6px 12px; border:1px solid var(--rule); border-radius:999px; color:var(--ink-soft); background:var(--card);}
.glossary-jump a:hover{border-color:var(--accent-line); color:var(--accent); background:var(--accent-tint);}
.glossary-term{border-bottom:1px solid var(--rule); padding:26px 0;}
.glossary-term dt{font-family:var(--font-display); font-size:19px; font-weight:600; margin-bottom:8px;}
.glossary-term dd{margin:0; color:var(--ink-soft); font-size:15.5px; line-height:1.68;}
.glossary-term dd a{color:var(--accent); box-shadow:inset 0 -1px 0 var(--accent-line);}

/* ---------- Hero ---------- */
.hero-v2{padding:76px 0 56px;}
.hero-v2 .grid{display:grid; grid-template-columns:1.12fr .88fr; gap:52px; align-items:center;}
@media (max-width:960px){ .hero-v2 .grid{grid-template-columns:1fr; gap:40px;} }
.hero-v2 h1{font-size:clamp(31px,3.7vw,48px); line-height:1.05; letter-spacing:-0.028em; font-weight:600; text-wrap:balance;}
.hero-v2 h1 em{font-style:italic; color:var(--accent);}
.hero-v2 .lead{font-size:18.5px; margin-top:22px; max-width:46ch; color:var(--ink-soft); line-height:1.6;}
.hero-v2 .ctas{display:flex; align-items:center; gap:22px; margin-top:32px; flex-wrap:wrap;}

/* ---------- Fact strip ---------- */
.fact-strip{border-top:1px solid var(--rule); border-bottom:1px solid var(--rule); background:var(--paper-2);}
.fact-strip .wrap{display:grid; grid-template-columns:repeat(3,1fr);}
.fact-strip .fact{padding:24px 30px 24px 0; display:flex; gap:13px; align-items:flex-start; font-size:14px; color:var(--ink-soft); border-right:1px solid var(--rule);}
.fact-strip .fact:last-child{border-right:none;}
.fact-strip .fact + .fact{padding-left:30px;}
.fact-strip strong{color:var(--ink); display:block; font-size:14.5px; margin-bottom:3px; font-weight:600;}
@media (max-width:760px){
  .fact-strip .wrap{grid-template-columns:1fr;}
  .fact-strip .fact{border-right:none; border-bottom:1px solid var(--rule); padding:18px 0;}
  .fact-strip .fact + .fact{padding-left:0;}
  .fact-strip .fact:last-child{border-bottom:none;}
}

/* ---------- Statement + numbered ---------- */
.statement{padding:96px 0 80px;}
.statement h2{font-size:clamp(30px,3.9vw,48px); letter-spacing:-0.028em; line-height:1.05; max-width:19ch;}
.numbered{display:grid; grid-template-columns:1fr 1fr; gap:0 60px; margin-top:52px; border-top:1px solid var(--rule);}
@media (max-width:820px){ .numbered{grid-template-columns:1fr;} }
.numbered .item{padding:26px 0; border-bottom:1px solid var(--rule); display:grid; grid-template-columns:46px 1fr; gap:16px;}
.numbered .n{font-family:var(--font-mono); font-size:12px; color:var(--mark-ink); padding-top:5px; letter-spacing:.04em;}
.numbered h3{font-family:var(--font); font-size:16.5px; font-weight:600; margin:0 0 7px; letter-spacing:-0.005em;}
.numbered p{font-size:14.5px; margin:0;}

/* ---------- Stepper ---------- */
.stepper{background:var(--accent-tint); padding:88px 0; border-top:1px solid var(--accent-line); border-bottom:1px solid var(--accent-line);}
.stepper h2{font-size:clamp(27px,3.4vw,40px); letter-spacing:-0.025em; margin-bottom:46px; max-width:20ch;}
.steps{display:grid; grid-template-columns:repeat(3,1fr); gap:34px; position:relative;}
.steps::before{content:""; position:absolute; left:18px; right:18px; top:19px; height:1px; background:var(--accent-line);}
@media (max-width:820px){ .steps{grid-template-columns:1fr; gap:26px;} .steps::before{display:none;} }
.step{position:relative;}
.step .dot{width:38px; height:38px; border-radius:50%; background:var(--accent); color:#FFFFFF; display:flex; align-items:center; justify-content:center; font-family:var(--font-display); font-weight:600; font-size:15px; position:relative; z-index:1; box-shadow:0 0 0 7px var(--accent-tint);}
.step h3{font-family:var(--font); font-size:17px; font-weight:600; margin:20px 0 7px;}
.step p{font-size:14.5px; margin:0; max-width:34ch;}

/* ---------- Tools: divided rows ---------- */
.bento{padding:92px 0;}
.bento h2{font-size:clamp(27px,3.4vw,40px); letter-spacing:-0.025em; margin-bottom:44px; max-width:24ch;}
@media (max-width:860px){
}

/* ---------- Audience ---------- */
.audience{background:var(--ink); color:var(--paper); padding:88px 0;}
.audience h2{font-size:clamp(27px,3.4vw,40px); letter-spacing:-0.025em; color:var(--paper); margin-bottom:10px; max-width:20ch;}
.audience .sub{color:#9AA4B2; font-size:16.5px; margin-bottom:42px; max-width:52ch;}
.audience-list{display:grid; grid-template-columns:repeat(2,1fr); gap:0 52px; border-top:1px solid rgb(255 255 255 / .16);}
@media (max-width:820px){ .audience-list{grid-template-columns:1fr;} }
.audience-list .row{display:grid; grid-template-columns:1fr 1.6fr; gap:18px; padding:24px 0; border-bottom:1px solid rgb(255 255 255 / .16);}
.audience-list h3{font-family:var(--font); font-size:15.5px; font-weight:600; margin:0; color:var(--paper);}
.audience-list p{font-size:14px; margin:0; color:#9AA4B2;}
@media (max-width:520px){ .audience-list .row{grid-template-columns:1fr; gap:6px;} }

/* ---------- Learn ---------- */
.learn{padding:88px 0 48px;}
.learn h2{font-size:clamp(27px,3.4vw,40px); letter-spacing:-0.025em; margin-bottom:32px;}
.link-rows{border-top:1px solid var(--rule-strong);}
.link-row{display:grid; grid-template-columns:130px 1fr auto; gap:26px; align-items:center; padding:26px 0; border-bottom:1px solid var(--rule); color:inherit; transition:padding-left .2s ease, background .2s ease;}
.link-row:hover{padding-left:10px; background:var(--paper-2);}
.link-row .k{font-family:var(--font-mono); font-size:11.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-faint);}
.link-row h3{font-family:var(--font); font-size:17px; font-weight:600; margin:0 0 5px;}
.link-row p{font-size:14.5px; margin:0;}
.link-row .arrow{color:var(--accent);}
@media (max-width:640px){ .link-row{grid-template-columns:1fr; gap:6px;} .link-row .arrow{display:none;} }

/* ---------- Final CTA ---------- */
.final-v2{background:var(--paper-2); border-top:1px solid var(--rule); padding:80px 0; text-align:left;}
.final-v2 .wrap{display:flex; justify-content:space-between; align-items:center; gap:34px; flex-wrap:wrap;}
.final-v2 h2{font-size:clamp(28px,3.4vw,42px); letter-spacing:-0.025em; margin:0; max-width:20ch;}
.final-cta{background:var(--ink); color:var(--paper); text-align:center;}
.final-cta h2{color:var(--paper);} .final-cta p{color:#9AA4B2;}

/* ---------- Hero mock ---------- */
.mock{background:var(--paper-2); border:1px solid var(--rule); border-radius:var(--radius-lg); padding:16px; box-shadow:var(--shadow);}
.mock-topbar{display:flex; gap:6px; padding:2px 6px 14px;}
.mock-topbar span{width:8px; height:8px; border-radius:50%; background:var(--rule-strong);}
.mock-panes{display:grid; grid-template-columns:1.15fr 1fr; gap:12px;}
.mock-pdf{background:var(--card); border:1px solid var(--rule); border-radius:8px; padding:18px; min-height:280px;}
.mock-pdf .pline{height:6px; background:var(--paper-3); border-radius:2px; margin-bottom:10px;}
.mock-pdf .pline.short{width:55%;}
.mock-hl{background:var(--mark-soft); border-bottom:1.5px solid var(--mark); padding:2px 7px; display:inline-block; font-size:11px; font-weight:600; color:var(--ink); margin:2px 0 11px; border-radius:2px;}
.mock-fields{background:var(--card); border:1px solid var(--rule); border-radius:8px; padding:14px; display:flex; flex-direction:column; gap:10px;}
.mock-field-card{border:1px solid var(--rule); border-radius:7px; padding:11px 13px; transition:border-color .3s, background .3s;}
.mock-field-card.active{border-color:var(--accent-line); background:var(--accent-tint);}
.mock-field-card .k{font-size:10px; font-weight:600; color:var(--ink-faint); text-transform:uppercase; letter-spacing:.09em;}
.mock-field-card .v{font-size:14px; font-weight:600; margin-top:3px;}
.mock-field-card .n{font-size:11px; color:var(--ink-faint); margin-top:3px;}

.reveal{opacity:1; transform:none; transition:opacity .5s ease, transform .5s ease;}
@media (prefers-reduced-motion:reduce){ *{animation:none !important; transition:none !important;} }


/* ---------- Tool page heroes share the article rule ---------- */
.stmt-hero, .lbl-hero{border-bottom:1px solid var(--rule);}
.stmt-hero h1, .lbl-hero h1{max-width:26ch;}

/* Numerals in data tables should be tabular so columns line up */
.stmt-table td.num, .sum-card .v, .mock-field-card .n{font-variant-numeric:tabular-nums;}


/* ============================================================
   Listing pages (guides, blog)
   ------------------------------------------------------------
   Card grids leave ragged bottom edges and give every item the
   same weight. These pages have a natural hierarchy: a newest
   or most useful piece: so: one lead item set large, the rest
   as divided rows. Reads like a contents page, and there is no
   uneven-height problem because rows have no height to mismatch.
   ============================================================ */
.listing-head{padding:56px 0 0;}
.listing-head + .wrap{padding-top:0;}
.listing-head h1{font-size:clamp(32px,4.2vw,48px); letter-spacing:-0.028em; line-height:1.05; max-width:20ch;}
.listing-head p{font-size:17.5px; max-width:56ch; margin:14px 0 0;}

.lead-item{
  display:grid; grid-template-columns:1.25fr 1fr; gap:44px; align-items:center;
  padding:36px 0; margin-top:32px;
  border-top:1px solid var(--rule-strong); border-bottom:1px solid var(--rule);
  color:inherit;
}
.lead-item:hover h2{color:var(--accent);}
.lead-item h2{font-size:clamp(24px,2.9vw,34px); letter-spacing:-0.025em; line-height:1.12; margin:10px 0 12px; transition:color .18s ease;}
.lead-item p{font-size:16.5px; margin:0; max-width:46ch;}
.lead-item .k{font-family:var(--font-mono); font-size:11.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-faint);}
.lead-item .meta{font-size:13px; color:var(--ink-faint); margin-top:18px;}
.lead-item .thumb{
  aspect-ratio:16/10; border-radius:var(--radius); border:1px solid var(--rule);
  background:var(--paper-2); position:relative; overflow:hidden;
}
/* Ruled-paper motif: the thumbnail is a stylised document, not a stock photo */
.lead-item .thumb::before{
  content:""; position:absolute; inset:22px 26px;
  background:repeating-linear-gradient(to bottom, var(--rule) 0 1px, transparent 1px 13px);
}
.lead-item .thumb::after{
  content:""; position:absolute; left:26px; top:48px; width:42%; height:10px;
  background:var(--mark-soft); border-bottom:1.5px solid var(--mark); border-radius:2px;
}
@media (max-width:860px){ .lead-item{grid-template-columns:1fr; gap:24px; padding:32px 0;} .lead-item .thumb{display:none;} }

.entry-rows{border-top:1px solid var(--rule);}
.entry-row{
  display:grid; grid-template-columns:1fr auto; gap:16px 32px; align-items:baseline;
  padding:26px 0; border-bottom:1px solid var(--rule); color:inherit;
  transition:padding-left .2s ease, background .2s ease;
}
.entry-row:hover{padding-left:10px; background:var(--paper-2);}
.entry-row h3{font-size:20px; letter-spacing:-0.02em; margin:0 0 6px; line-height:1.25;}
.entry-row p{font-size:14.5px; margin:0; max-width:64ch;}
.entry-row .meta{font-family:var(--font-mono); font-size:11.5px; color:var(--ink-faint); white-space:nowrap; letter-spacing:.04em;}
@media (max-width:640px){ .entry-row{grid-template-columns:1fr;} .entry-row .meta{margin-top:8px;} }

/* ============================================================
   Tool page sections
   ------------------------------------------------------------
   Structure follows the pattern proven on high-traffic PDF tool
   pages: capability list, how-it-works, why-it-works, trust row,
   FAQ. Content sits BELOW the tool, because people arrive to use
   it, not to read: but the page still needs the substance to
   stand on its own in search results.
   ============================================================ */

.tool-overline{
  font-family:var(--font-mono); font-size:11.5px; letter-spacing:.12em;
  text-transform:uppercase; color:var(--ink-faint); margin-bottom:14px; display:block;
}

@media (max-width:900px){ .cap-grid{grid-template-columns:repeat(2,1fr);} }
@media (max-width:560px){ .cap-grid{grid-template-columns:1fr;} }
@media (max-width:900px){
}
@media (max-width:560px){ .cap:nth-child(odd){border-right:none; padding-right:0;} }

.howto{padding:70px 0 80px;}
.howto h2{font-size:clamp(25px,3vw,34px); letter-spacing:-0.025em; margin-bottom:36px;}
.howto-steps{display:grid; grid-template-columns:repeat(3,1fr); gap:30px;}
@media (max-width:820px){ .howto-steps{grid-template-columns:1fr; gap:22px;} }
.howto-step{border-top:2px solid var(--accent); padding-top:18px;}
.howto-step .n{font-family:var(--font-mono); font-size:12px; color:var(--accent); letter-spacing:.06em;}
.howto-step h3{font-family:var(--font); font-size:17px; font-weight:600; margin:10px 0 7px;}
.howto-step p{font-size:14.5px; margin:0;}

.why{background:var(--paper-2); border-top:1px solid var(--rule); border-bottom:1px solid var(--rule); padding:78px 0;}
.why .why-head{display:grid; grid-template-columns:1.1fr .9fr; gap:44px; align-items:end; margin-bottom:40px;}
@media (max-width:820px){ .why .why-head{grid-template-columns:1fr; gap:20px;} }
.why h2{font-size:clamp(25px,3vw,34px); letter-spacing:-0.025em; margin:0; max-width:20ch;}
.why .why-head p{font-size:16px; margin:0;}
.why-grid{display:grid; grid-template-columns:repeat(2,1fr); gap:0 48px;}
@media (max-width:760px){ .why-grid{grid-template-columns:1fr;} }
.why-item{padding:22px 0; border-top:1px solid var(--rule-strong);}
.why-item h3{font-family:var(--font); font-size:16px; font-weight:600; margin:0 0 6px;}
.why-item p{font-size:14.5px; margin:0;}

.trust-row{display:flex; flex-wrap:wrap; gap:10px; margin-top:34px;}
.trust-row span{
  font-size:12.5px; font-weight:600; color:var(--accent-deep);
  background:var(--accent-tint); border:1px solid var(--accent-line);
  padding:7px 14px; border-radius:999px; display:inline-flex; align-items:center; gap:7px;
}

.faq{padding:76px 0 84px;}
.faq h2{font-size:clamp(25px,3vw,34px); letter-spacing:-0.025em; margin-bottom:28px;}
.faq-list{border-top:1px solid var(--rule-strong); max-width:820px;}
.faq-item{border-bottom:1px solid var(--rule); padding:22px 0;}
.faq-item h3{font-family:var(--font); font-size:16.5px; font-weight:600; margin:0 0 8px;}
.faq-item p{font-size:15px; margin:0 0 .7em; max-width:70ch;}
.faq-item p:last-child{margin-bottom:0;}
.faq-item a{color:var(--accent); box-shadow:inset 0 -1px 0 var(--accent-line);}

/* Anchored scrolling must clear the sticky header (and the tool toolbar,
   where there is one), otherwise a jump-link lands with the heading hidden
   underneath it. */
:target, h2[id], h3[id], section, .capability, .howto, .why, .faq{scroll-margin-top:92px;}
.stmt-hero ~ * :target, .lbl-hero ~ * :target{scroll-margin-top:150px;}
/* Progressive: browsers without :has() still get the base 92px offset above,
   which clears the header; this only adds room for the tool toolbar. */
body:has(.app-toolbar) section, body:has(.stmt-toolbar) section{scroll-margin-top:150px;}

/* ============================================================
   Upload zone: shared by all three tools
   ------------------------------------------------------------
   Every tool previously offered only a button. Drag-and-drop is
   the expected affordance for a file tool, and the drop target
   doubles as the empty state so there is one obvious thing to do.
   ============================================================ */
.dropzone{
  border:1.5px dashed var(--rule-strong); border-radius:var(--radius-lg);
  background:var(--card); padding:44px 32px; text-align:center;
  transition:border-color .18s ease, background .18s ease, transform .18s ease;
  cursor:pointer; display:block; width:100%;
}
.dropzone:hover{border-color:var(--accent-line); background:var(--accent-tint);}
.dropzone.is-over{border-color:var(--accent); background:var(--accent-tint); transform:scale(1.005);}
.dropzone .dz-icon{
  width:46px; height:46px; margin:0 auto 16px; border-radius:12px;
  background:var(--accent-tint); border:1px solid var(--accent-line);
  display:flex; align-items:center; justify-content:center; color:var(--accent);
}
.dropzone.is-over .dz-icon{background:var(--accent); color:var(--paper); border-color:var(--accent);}
.dropzone h2{font-size:20px; margin:0 0 8px;}
.dropzone p{font-size:14.5px; max-width:52ch; margin:0 auto 20px;}
.dropzone .dz-actions{display:flex; gap:12px; justify-content:center; flex-wrap:wrap;}
.dropzone .dz-hint{font-size:12.5px; color:var(--ink-faint); margin:18px 0 0;}
@media (max-width:560px){ .dropzone{padding:32px 20px;} .dropzone .dz-actions .btn{width:100%;} }

/* Segmented control: the one remaining bespoke control, brought onto
   the same borders, radii and focus treatment as everything else. */
.seg{display:inline-flex; border:1px solid var(--rule-strong); border-radius:var(--radius-sm); overflow:hidden; background:var(--card);}
.seg button{
  font-family:inherit; font-size:13.5px; font-weight:600; padding:9px 16px;
  border:none; background:transparent; color:var(--ink-soft); cursor:pointer;
  border-right:1px solid var(--rule); transition:background .15s ease, color .15s ease;
}
.seg button:last-child{border-right:none;}
.seg button:hover{background:var(--paper-2); color:var(--ink);}
.seg button.active{background:var(--accent); color:var(--paper);}
.seg button:focus-visible{outline:2px solid var(--accent); outline-offset:-2px;}

/* Form controls, unified across the three tool stylesheets */
.field-input, .fcard input:not([type=checkbox]), textarea, select, input[type=number], input[type=text], input[type=date], input[type=email], input[type=tel]{
  font-family:inherit; color:var(--ink); background:var(--card);
  border:1px solid var(--rule-strong); border-radius:var(--radius-sm);
}
.fcard input:not([type=checkbox]):focus, textarea:focus, select:focus,
input[type=number]:focus, input[type=text]:focus, input[type=date]:focus{
  border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-tint); outline:none;
}
input[type=range]{accent-color:var(--accent);}
input[type=checkbox]{accent-color:var(--accent);}

/* The [hidden] attribute is only a UA default of display:none, so any
   component rule setting display (flex, grid, block) silently overrides it.
   Make it authoritative. */
[hidden]{display:none !important;}

/* ============================================================
   Related reading
   ------------------------------------------------------------
   Sits at the end of an article and on each tool page. Rows, not
   cards: the point is to scan three titles and pick one, which a
   list does better than a grid of equally-weighted boxes.
   ============================================================ */
.related{max-width:736px; margin:0 auto; padding:0 28px 80px;}
.related h2{font-size:20px; letter-spacing:-0.02em; margin:0 0 4px;}
.related-rows{border-top:1px solid var(--rule-strong);}
.related-row{
  display:grid; grid-template-columns:76px 1fr auto; gap:18px; align-items:center;
  padding:18px 0; border-bottom:1px solid var(--rule); color:inherit;
  transition:padding-left .18s ease, background .18s ease;
}
.related-row:hover{padding-left:8px; background:var(--paper-2);}
.related-row .k{font-family:var(--font-mono); font-size:11px; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-faint);}
.related-row .t{font-size:16px; font-weight:500;}
.related-row svg{color:var(--accent);}
.related-row:hover .t{color:var(--accent);}
@media (max-width:560px){
  .related-row{grid-template-columns:1fr auto; gap:4px 12px;}
  .related-row .k{grid-column:1; font-size:10.5px;}
  .related-row .t{grid-column:1;}
  .related-row svg{grid-row:1 / span 2; grid-column:2;}
}

/* Tool-page variant sits full width in its own band */
.related-tool{background:var(--paper-2); border-top:1px solid var(--rule); padding:66px 0 72px;}
.related-tool h2{font-size:clamp(22px,2.6vw,28px); letter-spacing:-0.025em; margin-bottom:6px;}
.related-tool .related-rows{max-width:820px;}


/* Where blur is supported the header can be more translucent; where it is not
   (older Safari, older Firefox) the flat 94% background above keeps text from
   showing through. */
@supports ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .site-header{background:rgb(255 255 255 / .86);}
}


/* ============================================================
   Interactive polish: applies everywhere, not per tool
   ============================================================ */

/* File inputs are triggered by a labeled button and by the dropzone, so the
   native control is never the thing a person interacts with. It lived in
   app.css, which the page-operation tools do not load, leaving a raw
   "Choose Files / No file chosen" control under every one of them.
   Hidden globally, and taken out of the tab order so a keyboard user does
   not land on an invisible field before reaching the button that works. */
input[type="file"]{
  position:absolute; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0;
}

/* Touch targets. Footer and inline links sit at ~20px tall, below the 44px
   guidance, which is fiddly on a phone. Only widened on coarse pointers so
   desktop density is unchanged. */
@media (pointer:coarse){
  .site-footer .foot-col a{padding:7px 0; margin-bottom:2px;}
  .glossary-jump a{padding:9px 14px;}
  .related-row, .link-row, .entry-row, .tool-row{min-height:52px;}
  .icon-btn{width:38px; height:38px;}
}

/* Disabled controls should read as disabled, not merely faded. */
.btn:disabled, .btn[disabled]{opacity:.45; cursor:not-allowed; pointer-events:none;}
input:disabled, select:disabled, textarea:disabled{opacity:.55; cursor:not-allowed; background:var(--paper-2);}

/* Consistent motion. Anything that moves on hover uses the same curve, so the
   site feels like one object rather than several. */
a, button, .btn, .tool-card, .content-card, .related-row, .link-row,
.entry-row, .tool-row, .icon-btn, .dropzone{
  transition-timing-function:cubic-bezier(.22,.61,.36,1);
}

/* Text inputs get the same focus ring as everything else. */
input[type="text"], input[type="number"], input[type="date"], input[type="email"],
input[type="tel"], select, textarea{
  transition:border-color .16s, box-shadow .16s;
}
input[type="range"]:focus-visible{outline:2px solid var(--accent); outline-offset:4px;}

/* Selection and caret follow the accent rather than the browser default. */
input, textarea, select{caret-color:var(--accent);}

/* A checkbox is 16px; its label is the actual tap target, so give the label
   the height rather than inflating the box. */
@media (pointer:coarse){
  label.check{min-height:44px; align-items:center;}
  .ctrl-field input[type="range"]{height:32px;}
}

/* ---------- Tools dropdown ---------- */
.nav-drop{position:relative;}
.nav-drop-btn{
  font-family:inherit; font-size:14.5px; font-weight:500; color:var(--ink-soft);
  background:none; border:none; padding:4px 0; cursor:pointer; display:inline-flex;
  align-items:center; gap:5px; white-space:nowrap;
  box-shadow:inset 0 -1px 0 transparent; transition:box-shadow .18s, color .18s;
}
.nav-drop-btn:hover{color:var(--ink); box-shadow:inset 0 -1px 0 var(--rule-strong);}
.nav-drop-btn svg{transition:transform .18s ease;}
.nav-drop.is-open .nav-drop-btn{color:var(--ink); box-shadow:inset 0 -1px 0 var(--accent);}
.nav-drop.is-open .nav-drop-btn svg{transform:rotate(180deg);}
.nav-drop-menu{
  position:absolute; top:calc(100% + 14px); right:0; left:auto; transform:translateY(-6px);
  width:min(460px,92vw); background:var(--card); border:1px solid var(--rule);
  border-radius:var(--radius); box-shadow:var(--shadow); padding:8px;
  display:grid; grid-template-columns:1fr 1fr; gap:2px;
  opacity:0; visibility:hidden; pointer-events:none;
  transition:opacity .16s ease, transform .16s ease, visibility .16s;
  z-index:60;
}
.nav-drop.is-open .nav-drop-menu{opacity:1; visibility:visible; pointer-events:auto; transform:translateY(0);}
.nav-drop-menu a{display:block; padding:9px 11px; border-radius:var(--radius-sm); color:var(--ink);}
.nav-drop-menu a:hover, .nav-drop-menu a:focus-visible{background:var(--accent-tint); color:var(--accent-deep);}
.nav-drop-menu .nd-l{display:block; font-size:14px; font-weight:600; line-height:1.3;}
.nav-drop-menu .nd-d{display:block; font-size:12px; color:var(--ink-faint); margin-top:1px;}
.nav-drop-menu a:hover .nd-d{color:var(--accent-deep); opacity:.8;}
.nav-drop-menu .nd-all{
  grid-column:1 / -1; margin-top:6px; padding-top:11px; border-top:1px solid var(--rule);
  font-size:13.5px; font-weight:600; color:var(--accent); border-radius:0;
}
.nav-drop-menu .nd-all:hover{background:transparent; text-decoration:underline;}
/* On a narrow screen the nav scrolls, so anchor the menu to the left edge
   instead of centring it on a button that may be off-screen. */
@media (max-width:980px){
  .nav-drop-menu{position:fixed; left:12px; right:12px; width:auto; transform:none; top:auto; margin-top:6px;}
  .nav-drop.is-open .nav-drop-menu{transform:none;}
}
@media (max-width:560px){ .nav-drop-menu{grid-template-columns:1fr;} }

/* ---------- Signature capture dialog ---------- */
.sig-overlay{position:fixed; inset:0; z-index:200; background:rgb(11 18 32 / .45); display:flex; align-items:center; justify-content:center; padding:20px;}
.sig-overlay[hidden]{display:none !important;}
.sig-box{background:var(--card); border:1px solid var(--rule); border-radius:var(--radius-lg); box-shadow:var(--shadow); width:min(620px,100%); max-height:92vh; overflow:auto; padding:24px;}
.sig-head{display:flex; align-items:center; justify-content:space-between; margin-bottom:18px;}
.sig-head h2{font-size:21px; margin:0;}
.sig-x{background:none; border:none; font-size:26px; line-height:1; color:var(--ink-faint); cursor:pointer; padding:0 4px;}
.sig-x:hover{color:var(--ink);}
.sig-tabs{margin-bottom:20px;}
.sig-pane label{display:block; font-size:13px; font-weight:600; margin-bottom:7px;}
.sig-pane input[type=text]{width:100%; padding:11px 13px; font-size:16px;}
.sig-hint{font-size:13.5px; color:var(--ink-soft); margin:0 0 12px;}
.sig-fonts{display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-top:14px;}
.sig-fonts button{padding:14px 8px; font-size:20px; border:1px solid var(--rule); border-radius:var(--radius-sm); background:var(--card); cursor:pointer; color:var(--ink);}
.sig-fonts button.active{border-color:var(--accent); background:var(--accent-tint); box-shadow:0 0 0 2px var(--accent-tint);}
#sigCanvas{width:100%; height:180px; border:1px dashed var(--rule-strong); border-radius:var(--radius-sm); background:var(--paper); touch-action:none; cursor:crosshair; display:block;}
.sig-clear{margin-top:10px; font-size:13px; padding:8px 14px;}
#sigFile{position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;}
.sig-preview{margin-top:14px;}
.sig-preview img{max-height:120px; max-width:100%; border:1px solid var(--rule); border-radius:var(--radius-sm); padding:8px; background:var(--paper);}
.sig-foot{margin-top:22px; padding-top:18px; border-top:1px solid var(--rule);}
.sig-note{font-size:12.5px; color:var(--ink-faint); margin:0 0 14px;}
.sig-actions{display:flex; gap:10px; justify-content:flex-end;}
@media (max-width:520px){ .sig-actions{flex-direction:column-reverse;} .sig-actions .btn{width:100%;} .sig-fonts{grid-template-columns:1fr;} }

/* Homepage: the everyday tools, named but not competing with the four above */
.section-sub{font-size:16px; max-width:56ch; margin:-6px 0 34px;}
.everyday{margin-top:44px; padding-top:28px; border-top:1px solid var(--rule);}
.everyday h3{font-family:var(--font); font-size:15px; font-weight:600; margin:0 0 10px;}
.everyday p{font-size:15px; line-height:2; max-width:none; margin:0 0 14px; color:var(--ink-soft);}
@media (pointer:coarse){
  /* Eleven inline links in one paragraph are fiddly at 20px tall. Give each
     its own comfortable target rather than relying on precise tapping. */
  .everyday p{display:flex; flex-wrap:wrap; gap:2px 0; line-height:1.5;}
  .everyday p a, .everyday-all{padding:12px 12px 12px 0; display:inline-block; min-height:44px; box-sizing:border-box;}
}
.everyday a{color:var(--accent); box-shadow:inset 0 -1px 0 var(--accent-line);}
.everyday a:hover{box-shadow:inset 0 -1px 0 var(--accent);}
.everyday-all{font-size:14px; font-weight:600; box-shadow:none !important;}

@media (pointer:coarse){
  /* The dropdown trigger and any bare checkbox were below a comfortable tap
     size. On the permits page one of those checkboxes decides whether license
     details survive the session, which is the last control to mis-tap. */
  .nav-drop-btn{min-height:44px; padding:10px 0;}
  input[type="checkbox"]{width:20px; height:20px;}
  /* Text inputs were rendering at 20px on touch, which is awkward to hit and
     awkward to type into. */
  input[type="text"], input[type="email"], input[type="tel"], input[type="number"],
  input[type="date"], input[type="search"], select, textarea{min-height:44px;}
  label.check, label.check-row{min-height:44px; display:flex; align-items:center; gap:10px;}
}

/* Site-wide legal notice. Present on every page, readable rather than hidden:
   a disclaimer nobody can read is worth less than one they can. */
.site-footer .foot-legal{font-size:12.5px; line-height:1.6; color:var(--ink-faint);
  margin-top:34px; padding-top:22px; border-top:1px solid var(--rule); max-width:none;}

/* Legal pages: readable, not a wall. A disclaimer nobody finishes protects
   nobody, so the type is the same size as the rest of the site. */
.legal-prose h2{font-size:clamp(19px,2.2vw,23px); margin-top:38px;}
.legal-prose .legal-lead{font-size:17px; line-height:1.65; color:var(--ink-soft); max-width:64ch;}
.legal-box{background:var(--mark-soft); border:1px solid var(--mark-line);
  border-left:3px solid var(--mark); border-radius:var(--radius); padding:20px 24px; margin:26px 0;}
.legal-box p{margin:0; font-size:15px; line-height:1.65; color:var(--mark-ink); max-width:68ch;}
.legal-prose code{font-family:var(--font-mono); font-size:.92em; background:var(--paper-2); padding:1px 5px; border-radius:3px;}

/* Per-tool legal notice, placed where someone is about to act on the output */
.tool-legal{background:var(--paper-2); border:1px solid var(--rule);
  border-left:3px solid var(--mark); border-radius:var(--radius-sm);
  padding:16px 20px; margin:44px 0 8px;}
.tool-legal p{font-size:13px; line-height:1.6; color:var(--ink-soft); margin:0; max-width:78ch;}
.tool-legal strong{color:var(--ink);}
.tool-legal a{color:var(--accent);}
/* The link to the full disclaimer has to be reachable, especially on a phone.
   A legal notice whose link is too small to tap is a notice in name only. */
.tool-legal a, .legal-prose p a, .site-footer .foot-legal a{
  display:inline-block; padding:6px 0; min-height:32px; line-height:20px;}
@media (pointer:coarse){
  .tool-legal a, .legal-prose p a, .prose p a, .site-footer .foot-legal a{
    padding:12px 0; min-height:44px; line-height:20px;}
}



/* Permit reference tables. Two columns, both always filled, so the mobile
   stack below reads as a list rather than as gaps. Matches .bp-table. */
.permit-table{width:100%; border-collapse:collapse; font-size:14.5px; margin:18px 0 6px;}
.permit-table th{text-align:left; font-size:11.5px; text-transform:uppercase; letter-spacing:.07em;
  color:var(--ink-faint); font-weight:600; padding:0 12px 8px 0; border-bottom:1px solid var(--rule-strong);}
.permit-table td{padding:11px 12px 11px 0; border-bottom:1px solid var(--rule); vertical-align:top; color:var(--ink-soft);}
.permit-table td:last-child{white-space:nowrap; color:var(--ink); font-variant-numeric:tabular-nums;}
@media (max-width:560px){
  .permit-table thead{display:none;}
  .permit-table tr{display:flex; justify-content:space-between; gap:14px;
    padding:10px 0; border-bottom:1px solid var(--rule);}
  .permit-table td{display:block; border:none; padding:0;}
}
.permit-note{color:var(--ink-faint); font-size:13px;}
.permit-note::before{content:"\00b7"; margin:0 6px;}

/* Jersey Village permit fee estimator. */
.jv-calc{border:1px solid var(--rule-strong); border-radius:var(--radius); padding:18px; margin:18px 0 8px; background:var(--card);}
.jv-row{display:flex; align-items:center; gap:12px; margin-bottom:12px; flex-wrap:wrap;}
.jv-row label{font-size:13px; font-weight:600; color:var(--ink-soft); min-width:110px;}
.jv-row select,.jv-row input[type=number]{font:inherit; font-size:14.5px; padding:9px 10px;
  border:1px solid var(--rule-strong); border-radius:var(--radius-sm); background:var(--paper); color:var(--ink); flex:1; min-width:150px;}
.jv-row select:focus,.jv-row input:focus{outline:2px solid var(--accent); outline-offset:1px;}
.jv-check label{min-width:0; font-weight:500; display:flex; align-items:center; gap:8px; cursor:pointer;}
.jv-check input{width:auto; flex:none;}
.jv-out-table{margin-top:4px;}
.jv-note{display:block; font-size:12.5px; color:var(--ink-faint); margin-top:2px;}
.jv-total td{border-top:2px solid var(--rule-strong); border-bottom:none; padding-top:12px;}
.jv-warn{background:var(--mark-soft); border-left:3px solid var(--accent); padding:12px 14px;
  border-radius:var(--radius-sm); font-size:14px; margin-top:14px;}
.jv-hint{font-size:13px; color:var(--ink-faint); margin-top:10px;}
@media (max-width:560px){ .jv-row label{min-width:0; width:100%;} }

/* ================================================================
   REDESIGN LAYER, September 2026. Midnight and Copper.
   ================================================================
   Sits last in style.css so it settles every component the older rules
   defined. The rules above it still describe structure and layout; this
   layer owns surface, type and weight.

   The principles, in the order they were applied:
   1. One strong color, used for action. Navy fills the primary button and
      the dark bands. Nothing else is filled with a strong color.
   2. Copper is an accent, not a fill. Links, the highlighter, an italic
      word, a two pixel rule. Never a background larger than a badge.
   3. Depth from hairlines and soft shadow, not from color blocks.
   4. Bigger, tighter display type; smaller, calmer UI type. The contrast
      between the two is what reads as expensive.
   ================================================================ */

body{background:var(--paper); color:var(--ink); font-size:16px; letter-spacing:-0.003em;
  text-rendering:optimizeLegibility; font-feature-settings:"ss01","cv11";}
p{color:var(--ink-soft);}
h1,h2,h3{font-weight:500; letter-spacing:-0.022em; color:var(--ink);}
::selection{background:#DCE4F1; color:var(--ink);}
:focus-visible{outline:2px solid var(--navy); outline-offset:3px; border-radius:4px;}
.mark{background:linear-gradient(to bottom, transparent 58%, var(--mark-soft) 58%, var(--mark-soft) 94%, transparent 94%);}

/* ---------- Buttons ---------- */
.btn{border-radius:10px; padding:11px 20px; font-size:14.5px; font-weight:600;
  letter-spacing:-0.006em; border:1px solid var(--rule-strong); background:var(--card);
  color:var(--ink); box-shadow:var(--shadow-xs);}
.btn:hover{border-color:#BDBAB2; background:#FFFFFF;}
.btn-primary, .nav-cta .btn-primary, a.btn-primary{
  background:var(--navy); color:#FFFFFF; border-color:var(--navy);
  box-shadow:0 1px 2px rgb(11 18 32 / .18), inset 0 1px 0 rgb(255 255 255 / .09);}
.btn-primary:hover, a.btn-primary:hover{background:var(--navy-2); border-color:var(--navy-2); color:#FFFFFF;
  box-shadow:0 1px 2px rgb(11 18 32 / .18), 0 8px 20px -8px rgb(11 18 32 / .45);}
.btn-primary:disabled{background:#9AA3B2; border-color:#9AA3B2; box-shadow:none;}
.btn-ghost{background:var(--card); border-color:var(--rule-strong); color:var(--ink);}
.btn-ghost:hover{background:var(--paper-2); border-color:#BDBAB2;}
.btn-quiet{color:var(--navy); box-shadow:inset 0 -1px 0 var(--rule-strong);}
.btn-quiet:hover{box-shadow:inset 0 -1px 0 var(--navy);}
.prose a.btn-primary, .callout a.btn-primary{color:#FFFFFF;}
.prose a.btn-primary:hover, .callout a.btn-primary:hover{color:#FFFFFF;}

/* ---------- Header ---------- */
.site-header{background:rgb(255 255 255 / .78);
  -webkit-backdrop-filter:blur(16px) saturate(1.6); backdrop-filter:blur(16px) saturate(1.6);
  border-bottom:1px solid rgb(11 18 32 / .07);}
.site-header .wrap{height:64px;}
.logo{font-size:18.5px; font-weight:600; letter-spacing:-0.025em; color:var(--ink);}
.logo img{width:26px; height:26px; border-radius:7px; box-shadow:0 1px 2px rgb(11 18 32 / .2);}
.logo .wm-pdf{color:var(--ink);}
.logo .wm-eyes{background:none; -webkit-background-clip:border-box; background-clip:border-box; color:var(--accent);}
.nav-links{gap:24px; font-size:14px; font-weight:500; color:var(--ink-soft);}
.nav-links a:hover{color:var(--ink); box-shadow:none;}
.nav-links a.active{color:var(--ink); box-shadow:inset 0 -2px 0 var(--navy);}
.nav-cta .btn{padding:9px 16px; font-size:14px;}
.nav-drop-btn{color:var(--ink-soft); font-weight:500;}
.nav-drop-menu{border-radius:14px; border:1px solid var(--rule); box-shadow:var(--shadow-lg); background:#FFFFFF;}
.nav-drop-menu a:hover{background:var(--paper-2);}
.nav-drop-menu .nd-all{color:var(--navy);}

/* ---------- Home hero ---------- */
.hero-v2{position:relative; padding:96px 0 72px; overflow:hidden;
  background:
    radial-gradient(900px 480px at 85% -8%, rgb(164 80 42 / .085), transparent 62%),
    radial-gradient(760px 520px at -5% 10%, rgb(27 42 66 / .07), transparent 60%),
    var(--paper);}
.hero-v2::before{content:""; position:absolute; inset:0; pointer-events:none;
  background-image:
    linear-gradient(rgb(11 18 32 / .045) 1px, transparent 1px),
    linear-gradient(90deg, rgb(11 18 32 / .045) 1px, transparent 1px);
  background-size:56px 56px;
  -webkit-mask-image:radial-gradient(ellipse 70% 60% at 50% 30%, #000 30%, transparent 78%);
          mask-image:radial-gradient(ellipse 70% 60% at 50% 30%, #000 30%, transparent 78%);}
.hero-v2 .wrap{position:relative; z-index:1;}
.hero-v2 h1{font-size:clamp(38px,5.2vw,66px); line-height:1.02; letter-spacing:-0.042em; font-weight:500;}
.hero-v2 h1 em{color:var(--accent); font-weight:400;}
.hero-v2 .lead{font-size:18.5px; line-height:1.62; color:var(--ink-soft); max-width:44ch;}
.hero-v2 .ctas{gap:14px;}
.hero-v2 .ctas .btn-primary{padding:13px 22px; font-size:15px;}
.hero-v2 .btn-quiet{padding:12px 4px;}

.mock{background:#FFFFFF; border:1px solid var(--rule); border-radius:20px; padding:14px;
  box-shadow:var(--shadow-lg);}
.mock-topbar span{background:#E3E2DE;}
.mock-pdf{border-radius:12px; border-color:var(--rule);}
.mock-hl{background:var(--mark-soft); color:var(--accent-deep);}
.mock-field-card{border-radius:12px; border:1px solid var(--rule); background:#FFFFFF; box-shadow:var(--shadow-xs);}
.mock-field-card.active{border-color:var(--navy); box-shadow:0 0 0 3px rgb(15 27 45 / .08);}

/* ---------- Fact strip ---------- */
.fact-strip{background:#FFFFFF; border-color:var(--rule);}
.fact-strip .fact{color:var(--ink-soft);}
.fact-strip svg{color:var(--navy);}

/* ---------- Sections ---------- */
.statement h2, .stepper h2, .bento h2, .learn h2, .audience h2, .final-v2 h2,
.howto h2, .why h2, .faq h2, .related-tool h2{font-weight:500; letter-spacing:-0.032em;}
.numbered .n{color:var(--accent);}
.stepper{background:var(--paper-2); border-color:var(--rule);}
.steps::before{background:var(--rule-strong);}
.step .dot{background:var(--navy); color:#FFFFFF; font-weight:500; box-shadow:0 0 0 7px var(--paper-2);}

.audience{background:
    radial-gradient(900px 420px at 100% 0%, rgb(164 80 42 / .16), transparent 60%),
    var(--navy);
  color:#FFFFFF;}
.audience h2{color:#FFFFFF;}
.audience .sub, .audience-list p{color:#AEB7C6;}
.audience-list, .audience-list .row{border-color:rgb(255 255 255 / .12);}
.audience-list h3{color:#FFFFFF;}

.link-row:hover, .entry-row:hover, .related-row:hover{background:var(--paper-2);}
.link-row .arrow, .related-row svg{color:var(--navy);}
.related-row:hover .t{color:var(--navy);}
.entry-row h3{font-weight:500;}

.final-v2{background:var(--paper-2);}
.final-cta{background:var(--navy);}
.final-cta p{color:#AEB7C6;}

/* ---------- Tool pages ---------- */
.op-hero{padding:64px 0 36px; background:
    radial-gradient(700px 300px at 90% -20%, rgb(164 80 42 / .07), transparent 60%),
    var(--paper);}
.op-hero h1{font-weight:500; letter-spacing:-0.035em;}
.tool-overline{color:var(--accent);}
.dropzone{border-radius:20px; border:1.5px dashed #CFCCC4; background:#FFFFFF; box-shadow:var(--shadow-sm);}
.dropzone:hover{border-color:var(--navy-3); background:#FCFCFB;}
.dropzone.is-over{border-color:var(--navy); background:#F4F6FA;}
.dropzone .dz-icon{border-radius:14px; background:var(--paper-2); border:1px solid var(--rule); color:var(--navy);}
.dropzone.is-over .dz-icon{background:var(--navy); color:#FFFFFF; border-color:var(--navy);}
.tool-card{border-radius:16px; border:1px solid var(--rule); background:#FFFFFF; box-shadow:var(--shadow-xs);}
.tool-card:hover{border-color:var(--rule-strong); box-shadow:var(--shadow); transform:translateY(-2px);}
.tool-card .tc-icon{color:var(--navy);}
.howto-step{border-top:1px solid var(--rule-strong); position:relative;}
.howto-step::before{content:""; position:absolute; top:-1px; left:0; width:36px; height:2px; background:var(--accent);}
.howto-step .n{color:var(--accent);}
.why{background:var(--paper-2);}
.faq-item a, .tool-legal a{color:var(--navy); box-shadow:inset 0 -1px 0 var(--accent-line);}
.op-status.is-ok{color:#14532D; background:#F0F7F2; border-color:#CFE6D6;}
.op-status.is-error{color:#912018; background:#FDF3F2; border-color:#F2D0CC;}
.op-status.is-warn{color:var(--accent-deep); background:var(--accent-tint); border-color:var(--accent-line);}
.ctrl-field input[type=text], .ctrl-field input[type=number], .ctrl-field select,
.jv-row select, .jv-row input[type=number]{border-radius:10px; border-color:var(--rule-strong); background:#FFFFFF;}
.ctrl-field input:focus, .ctrl-field select:focus, .jv-row select:focus, .jv-row input:focus{
  outline:none; border-color:var(--navy-3); box-shadow:0 0 0 3px rgb(15 27 45 / .09);}
input[type=range], input[type=checkbox], input[type=radio]{accent-color:var(--navy);}

/* ---------- Articles ---------- */
.article-head{padding:76px 28px 28px;}
.article-head .cc-tag{color:var(--accent); letter-spacing:.12em;}
.article-head h1{font-size:clamp(32px,4.4vw,50px); font-weight:500; letter-spacing:-0.035em; line-height:1.06;}
.article-head .article-meta{color:var(--ink-faint);}
.prose{font-size:17.5px; line-height:1.74;}
.prose h2{font-size:27px; font-weight:500; letter-spacing:-0.028em;}
.prose h3{font-size:19px; font-family:var(--font); font-weight:600; letter-spacing:-0.012em;}
.prose p, .prose li{color:#27303F;}
.prose a{color:var(--navy); font-weight:500; box-shadow:inset 0 -1px 0 var(--accent-line);
  transition:box-shadow .18s ease, color .18s ease;}
.prose a:hover{color:var(--accent-deep); box-shadow:inset 0 -2px 0 var(--accent);}
.prose blockquote{border-left:2px solid var(--accent); color:var(--ink-soft);}
.prose code{background:var(--paper-2); border:1px solid var(--rule);}
.prose .blocks{margin:30px 0 8px;}

.callout{background:
    radial-gradient(500px 200px at 100% 0%, rgb(164 80 42 / .06), transparent 60%),
    #FFFFFF;
  border:1px solid var(--rule); border-radius:18px; padding:26px 28px; box-shadow:var(--shadow-sm);}
.callout p{color:var(--ink); font-weight:500;}
.legal-box{background:var(--paper-2); border-color:var(--rule); border-left-color:var(--accent);}
.legal-box p{color:var(--ink-soft);}
.tool-legal{background:var(--paper-2); border-left-color:var(--accent);}

/* Tables */
.permit-table{font-size:14.5px; border:1px solid var(--rule); border-radius:14px; border-collapse:separate;
  border-spacing:0; overflow:hidden; background:#FFFFFF; box-shadow:var(--shadow-xs);}
.permit-table th{background:var(--paper-2); color:var(--ink-faint); padding:11px 16px; border-bottom:1px solid var(--rule);}
.permit-table td{padding:12px 16px; border-bottom:1px solid var(--rule);}
.permit-table tbody tr:last-child td{border-bottom:none;}
.permit-table td:last-child{color:var(--ink); font-weight:500;}
.permit-table a{color:var(--navy); box-shadow:inset 0 -1px 0 var(--accent-line);}
@media (max-width:560px){
  .permit-table tr{padding:11px 14px;}
  .permit-table td{padding:0;}
}

/* Fee estimator */
.jv-calc{border-radius:18px; border:1px solid var(--rule); padding:22px; box-shadow:var(--shadow-sm); background:#FFFFFF;}
.jv-warn{background:var(--accent-tint); border-left-color:var(--accent); color:var(--accent-deep);}
.jv-total td{border-top:1px solid var(--rule-strong);}

/* ---------- Footer ---------- */
.site-footer{background:
    radial-gradient(900px 300px at 100% 0%, rgb(164 80 42 / .12), transparent 60%),
    #0A1320;
  border-top:none; color:#AEB7C6; padding:68px 0 40px;}
.site-footer p{color:#AEB7C6;}
.site-footer .foot-col h4{color:#7F8A9C;}
.site-footer .foot-col a{color:#D5DAE2;}
.site-footer .foot-col a:hover{color:#FFFFFF;}
.site-footer .logo .wm-pdf{color:#FFFFFF;}
.site-footer .logo .wm-eyes{color:#D98B62;}
.site-footer .foot-legal{color:#7F8A9C; border-color:rgb(255 255 255 / .08);}
.site-footer .foot-legal a{color:#D5DAE2;}
.site-footer .foot-copy{color:#7F8A9C; border-top-color:rgb(255 255 255 / .08);}

/* ---------- Motion ---------- */
@media (prefers-reduced-motion: reduce){
  .btn, .tool-card, .dropzone, .prose a{transition:none !important;}
  .tool-card:hover{transform:none;}
}

/* Refinements after the first review of the redesign. */
.everyday a{color:var(--ink); box-shadow:inset 0 -1px 0 var(--rule-strong); transition:color .18s ease, box-shadow .18s ease;}
.everyday a:hover{color:var(--accent-deep); box-shadow:inset 0 -1px 0 var(--accent);}
.everyday-all{color:var(--navy) !important;}
h1, h2, .block.wide h3{text-wrap:balance;}
.prose p, .lead, .section-sub{text-wrap:pretty;}
.section-sub{color:var(--ink-soft);}
.mock-field-card .n{color:var(--ink-faint);}

/* Long fee cells ("Greater of $166.95 or $1.10/sq ft") wrap on phones instead of widening the page. */
@media (max-width:640px){
  .permit-table{display:block; max-width:100%;}
  .permit-table tbody{display:block;}
  .permit-table td:last-child{white-space:normal; text-align:right; max-width:52%; flex-shrink:0;}
  .permit-table td:first-child{min-width:0;}
}
.stepper h2{line-height:1.08; letter-spacing:-0.03em; max-width:18ch;}
.mock-field-card .n{white-space:nowrap;}
