/* On Point Finances — "The Summit Is Halfway"
   One mountain world shared across every page. Each page sits at its own elevation
   band (see data-band on <body>), so the site reads as one continuous climb.
   Storyboard: content/website/opfinances-storyboard.md */

:root{
  --rock:#1B2027; --snow:#EDEFF1; --glacier:#6E8CA0; --pine:#2E4034;
  --alpenglow:#D9663F;

  color-scheme:dark;
  --ground:#0D1319;
  --ink:#E6EBEF;
  --ink-dim:#A2B0BC;
  --ink-faint:#6E7F8D;
  --panel:rgba(19,24,32,.72);
  --panel-line:rgba(160,180,200,.16);
  --field-solid:#171E27;
  --accent:var(--alpenglow);
  --accent-ink:#12181E;

  --sky-0a:#080D13; --sky-0b:#18202A;
  --sky-1a:#141D2A; --sky-1b:#33405A;
  --sky-2a:#243040; --sky-2b:#D9663F;
  --sky-3a:#1E2A36; --sky-3b:#8A5A48;
  --sky-4a:#0A1017; --sky-4b:#1C2A26;
  --ridge-far:#3A4A5C; --ridge-mid:#26313E; --ridge-near:#161D26; --ridge-fore:#0C1116;
  --sun:#FFD9BC;

  --font-display:Georgia,"Iowan Old Style","Palatino Linotype","Times New Roman",serif;
  --font-body:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --font-mono:ui-monospace,"SF Mono","Cascadia Mono",Consolas,"Liberation Mono",monospace;

  --measure:34rem;
  --pad:clamp(1.25rem,5vw,3rem);
}
@media (prefers-color-scheme: light){
  :root{
    color-scheme:light;
    --ground:#E9EDF0; --ink:#1A222B; --ink-dim:#4A5A68; --ink-faint:#7B8A97;
    --panel:rgba(255,255,255,.74); --panel-line:rgba(30,50,70,.14);
    --field-solid:#E4E9ED;
    --accent:#B4502C; --accent-ink:#FFFFFF;
    --sky-0a:#B9CBD9; --sky-0b:#E6ECF0; --sky-1a:#9FBBD2; --sky-1b:#E4EDF2;
    --sky-2a:#E3B197; --sky-2b:#F6E8DC; --sky-3a:#D3BCAD; --sky-3b:#F0E9E3;
    --sky-4a:#BCCAC3; --sky-4b:#E6EBE7;
    --ridge-far:#A8BAC8; --ridge-mid:#8598A8; --ridge-near:#5F7183; --ridge-fore:#3E4E5D;
    --sun:#FFF3E4;
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --ground:#0D1319; --ink:#E6EBEF; --ink-dim:#A2B0BC; --ink-faint:#6E7F8D;
  --panel:rgba(19,24,32,.72); --panel-line:rgba(160,180,200,.16);
  --field-solid:#171E27;
  --accent:#D9663F; --accent-ink:#12181E;
  --sky-0a:#080D13; --sky-0b:#18202A; --sky-1a:#141D2A; --sky-1b:#33405A;
  --sky-2a:#243040; --sky-2b:#D9663F; --sky-3a:#1E2A36; --sky-3b:#8A5A48;
  --sky-4a:#0A1017; --sky-4b:#1C2A26;
  --ridge-far:#3A4A5C; --ridge-mid:#26313E; --ridge-near:#161D26; --ridge-fore:#0C1116;
  --sun:#FFD9BC;
}
:root[data-theme="light"]{
  color-scheme:light;
  --ground:#E9EDF0; --ink:#1A222B; --ink-dim:#4A5A68; --ink-faint:#7B8A97;
  --panel:rgba(255,255,255,.74); --panel-line:rgba(30,50,70,.14);
  --field-solid:#E4E9ED;
  --accent:#B4502C; --accent-ink:#FFFFFF;
  --sky-0a:#B9CBD9; --sky-0b:#E6ECF0; --sky-1a:#9FBBD2; --sky-1b:#E4EDF2;
  --sky-2a:#E3B197; --sky-2b:#F6E8DC; --sky-3a:#D3BCAD; --sky-3b:#F0E9E3;
  --sky-4a:#BCCAC3; --sky-4b:#E6EBE7;
  --ridge-far:#A8BAC8; --ridge-mid:#8598A8; --ridge-near:#5F7183; --ridge-fore:#3E4E5D;
  --sun:#FFF3E4;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0; background:var(--ground); color:var(--ink);
  font-family:var(--font-body); font-size:18px; line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
#world{position:fixed; inset:0; width:100%; height:100%; z-index:0; display:block}
.veil{position:fixed; inset:0; z-index:1; pointer-events:none;
  background:radial-gradient(120% 80% at 50% 0%,transparent 40%,rgba(0,0,0,.28) 100%)}
@media (prefers-color-scheme: light){
  .veil{background:radial-gradient(120% 80% at 50% 0%,transparent 45%,rgba(40,60,80,.14) 100%)}
}
:root[data-theme="light"] .veil{
  background:radial-gradient(120% 80% at 50% 0%,transparent 45%,rgba(40,60,80,.14) 100%)}
:root[data-theme="dark"] .veil{
  background:radial-gradient(120% 80% at 50% 0%,transparent 40%,rgba(0,0,0,.28) 100%)}
main{position:relative; z-index:2}

.skip{position:absolute; left:-9999px}
.skip:focus{left:var(--pad); top:.6rem; z-index:9; background:var(--accent);
  color:var(--accent-ink); padding:.7rem 1rem; border-radius:2px}

/* ---- chrome ---- */
.topbar{
  position:fixed; top:0; left:0; right:0; z-index:5;
  display:flex; align-items:center; gap:1rem; flex-wrap:wrap;
  padding:.75rem var(--pad);
  background:linear-gradient(to bottom,rgba(0,0,0,.42),transparent);
}
@media (prefers-color-scheme: light){ .topbar{background:linear-gradient(to bottom,rgba(255,255,255,.7),transparent)} }
:root[data-theme="light"] .topbar{background:linear-gradient(to bottom,rgba(255,255,255,.7),transparent)}
:root[data-theme="dark"] .topbar{background:linear-gradient(to bottom,rgba(0,0,0,.42),transparent)}
.brand{font-family:var(--font-display); font-size:1.05rem; color:var(--ink); text-decoration:none; margin-right:auto}
.brand span{color:var(--accent)}
nav{display:flex; gap:.2rem; flex-wrap:wrap; align-items:center}
nav a{
  display:inline-flex; align-items:center; min-height:44px; padding:0 .7rem;
  font:500 .88rem/1 var(--font-body); color:var(--ink-dim); text-decoration:none; border-radius:2px;
}
nav a:hover{color:var(--ink)}
nav a[aria-current="page"]{color:var(--accent)}
.pill{
  display:inline-flex; align-items:center; min-height:48px;
  font:600 .82rem/1 var(--font-body); letter-spacing:.04em; text-transform:uppercase;
  background:var(--accent); color:var(--accent-ink); text-decoration:none;
  padding:0 1.15rem; border-radius:2px; white-space:nowrap;
}
.pill:hover{filter:brightness(1.08)}
.hud{
  position:fixed; right:var(--pad); bottom:1.1rem; z-index:5;
  font:500 .72rem/1.5 var(--font-mono); letter-spacing:.08em;
  color:var(--ink-faint); text-align:right; text-transform:uppercase;
  font-variant-numeric:tabular-nums; pointer-events:none;
}
.hud b{display:block; font-size:1.1rem; color:var(--ink-dim); font-weight:500}

/* ---- chapters ---- */
section{min-height:100svh; display:flex; align-items:center; padding:7.5rem var(--pad) 5rem}
section.short{min-height:auto; padding-block:4rem}
.wrap{width:100%; max-width:var(--measure)}
.wide{max-width:56rem}
.eyebrow{font:600 .74rem/1 var(--font-mono); letter-spacing:.16em; text-transform:uppercase;
  color:var(--accent); margin:0 0 1.15rem}
h1{font-family:var(--font-display); font-weight:400; text-wrap:balance;
  font-size:clamp(2.6rem,8vw,5rem); line-height:1.04; letter-spacing:-.02em; margin:0 0 1.3rem}
h2{font-family:var(--font-display); font-weight:400; text-wrap:balance;
  font-size:clamp(1.9rem,5vw,3rem); line-height:1.12; letter-spacing:-.015em; margin:0 0 1.15rem}
h3{font-family:var(--font-display); font-weight:400; font-size:1.3rem; line-height:1.25; margin:0 0 .5rem}
p{margin:0 0 1.1rem; color:var(--ink-dim); max-width:34rem}
.lead{font-size:1.2rem; color:var(--ink)}
.panel{background:var(--panel); border:1px solid var(--panel-line); border-radius:3px;
  padding:clamp(1.4rem,3.5vw,2.2rem); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px)}
.quote{font-family:var(--font-display); font-size:clamp(1.5rem,3.6vw,2.1rem); line-height:1.3;
  color:var(--ink); border-left:2px solid var(--accent); padding-left:1.2rem; margin:2rem 0 0; max-width:30rem}
.grid{display:grid; gap:1rem; grid-template-columns:1fr; margin-top:1.75rem}
@media(min-width:720px){ .grid{grid-template-columns:1fr 1fr; gap:1.15rem} }
.card{background:var(--panel); border:1px solid var(--panel-line); border-top:2px solid var(--accent);
  border-radius:3px; padding:1.35rem; backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px)}
.card p{font-size:.97rem; margin:0; color:var(--ink-dim)}
.steps{list-style:none; margin:1.75rem 0 0; padding:0; display:grid; gap:1.4rem}
.steps li{display:grid; grid-template-columns:auto 1fr; gap:1rem; align-items:start}
.steps .n{font:500 .78rem/1.9 var(--font-mono); color:var(--accent); letter-spacing:.08em}
.steps p{margin:.25rem 0 0; font-size:.98rem}
.note{font-size:.95rem; color:var(--ink-faint); border-top:1px solid var(--panel-line);
  padding-top:1.1rem; margin-top:1.75rem}
.faq{margin-top:1.75rem; display:grid; gap:.6rem}
details{background:var(--panel); border:1px solid var(--panel-line); border-radius:3px; padding:1rem 1.15rem}
summary{cursor:pointer; font-family:var(--font-display); font-size:1.1rem; color:var(--ink); min-height:32px}
details p{margin:.8rem 0 0; font-size:.97rem}

.rise{opacity:0; transform:translateY(22px); transition:opacity .8s ease, transform .8s cubic-bezier(.2,.7,.3,1)}
.rise.in{opacity:1; transform:none}

/* ---- form ---- */
form{display:grid; gap:.9rem; margin-top:1.5rem}
.row{display:grid; gap:.9rem; grid-template-columns:1fr}
@media(min-width:620px){ .row{grid-template-columns:1fr 1fr} }
label{display:block; font:600 .76rem/1 var(--font-mono); letter-spacing:.1em;
  text-transform:uppercase; color:var(--ink-faint); margin-bottom:.45rem}
input,select,textarea{width:100%; font:inherit; font-size:1rem; color:var(--ink);
  background:rgba(127,150,170,.10); border:1px solid var(--panel-line); border-radius:2px;
  padding:.85rem .9rem; min-height:52px}
/* The dropdown list of a <select> is painted by the OS, not by this stylesheet. Left
   alone it renders on a stark white sheet while inheriting near-white text, so the
   choices are invisible. color-scheme (set per theme above) fixes the widget chrome;
   this explicit option pair fixes the list and keeps it on-palette rather than white. */
select{background-color:var(--field-solid); background-image:none}
select option{background-color:var(--field-solid); color:var(--ink); padding:.5rem}
textarea{min-height:110px; resize:vertical}
input:focus-visible,select:focus-visible,textarea:focus-visible,
button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--accent); outline-offset:3px}
.consent{display:grid; grid-template-columns:auto 1fr; gap:.7rem; align-items:start;
  font-size:.86rem; color:var(--ink-faint); line-height:1.5}
.consent input{width:26px; height:26px; min-height:0; margin-top:.1rem}
.hp{position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden}
button{font:600 .9rem/1 var(--font-body); letter-spacing:.04em; text-transform:uppercase;
  background:var(--accent); color:var(--accent-ink); border:0; border-radius:2px;
  padding:1.1rem 1.4rem; min-height:56px; cursor:pointer}
button:hover{filter:brightness(1.08)}
button[disabled]{opacity:.6; cursor:default}
.formnote{font-size:.9rem; margin:0; color:var(--ink-faint)}
.formnote.err{color:var(--accent)}

footer{position:relative; z-index:2; background:var(--ground);
  border-top:1px solid var(--panel-line); padding:3rem var(--pad) 2.5rem}
.fgrid{display:grid; gap:2rem; max-width:56rem}
@media(min-width:720px){ .fgrid{grid-template-columns:1fr 1fr} }
footer p{font-size:.9rem; color:var(--ink-faint); max-width:36rem}
footer a{color:var(--ink-dim)}
.nap{font-style:normal; font-size:1rem; color:var(--ink-dim); line-height:1.8}
.nap strong{color:var(--ink); font-weight:600}
.nap a{display:inline-block; padding:.3rem 0; text-underline-offset:3px}
.nap a[href^="tel:"]{font-size:1.15rem; color:var(--accent); font-weight:600}
.flinks{display:flex; flex-wrap:wrap; gap:.2rem 1rem; margin-top:.5rem}
.flinks a{font-size:.92rem; display:inline-block; padding:.35rem 0}
.disc{font-size:.78rem; line-height:1.6; color:var(--ink-faint); margin-top:2rem;
  border-top:1px solid var(--panel-line); padding-top:1.4rem; max-width:56rem}

/* ---- founder bio ----
   The portrait is a white-background cutout with no alpha, so it is framed as a
   deliberate photographic print rather than keyed out (keying eats hair edges). */
.bio{display:grid; gap:1.75rem; grid-template-columns:1fr; align-items:start; margin-top:1.75rem}
@media(min-width:760px){ .bio{grid-template-columns:minmax(0,15rem) 1fr; gap:2.25rem} }
.bio-photo{
  border-radius:4px; overflow:hidden; background:#fff; line-height:0;
  border:1px solid var(--panel-line);
  box-shadow:0 18px 40px rgba(0,0,0,.35);
  max-width:15rem;
}
:root[data-theme="light"] .bio-photo{box-shadow:0 18px 40px rgba(40,60,80,.18)}
.bio-photo img{width:100%; height:auto; display:block}
.bio-name{font-family:var(--font-display); font-size:1.5rem; margin:0 0 .15rem; color:var(--ink)}
.bio-role{font:600 .74rem/1.4 var(--font-mono); letter-spacing:.14em; text-transform:uppercase;
  color:var(--accent); margin:0 0 1.1rem}
.bio p{font-size:1.02rem}
.bio .lic{font:500 .8rem/1.5 var(--font-mono); letter-spacing:.04em; color:var(--ink-faint);
  border-top:1px solid var(--panel-line); padding-top:1rem; margin-top:1.4rem}

/* ---- long-form legal pages ----
   These are documents, not chapters. The mountain stays as ground but the type
   goes quiet and the measure tightens so a policy is actually readable. */
.doc{max-width:44rem; width:100%}
.doc-panel{background:var(--panel); border:1px solid var(--panel-line); border-radius:3px;
  padding:clamp(1.5rem,4vw,2.75rem); backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px)}
.doc h2{font-size:clamp(1.35rem,3vw,1.7rem); margin:2.25rem 0 .75rem}
.doc h2:first-of-type{margin-top:0}
.doc h3{font-size:1.1rem; margin:1.5rem 0 .5rem}
.doc p, .doc li{font-size:1rem; color:var(--ink-dim); max-width:none}
.doc ul{margin:0 0 1.1rem; padding-left:1.25rem; display:grid; gap:.5rem}
.doc a{color:var(--accent)}
.doc .updated{font:500 .78rem/1.5 var(--font-mono); letter-spacing:.08em;
  text-transform:uppercase; color:var(--ink-faint); margin-bottom:2rem}
.doc dl{margin:0 0 1.1rem; display:grid; gap:.6rem}
.doc dt{font-weight:600; color:var(--ink); font-size:.98rem}
.doc dd{margin:0; font-size:1rem; color:var(--ink-dim)}
.legalbar{display:flex; flex-wrap:wrap; gap:.2rem 1rem; margin-top:1.5rem;
  padding-top:1.2rem; border-top:1px solid var(--panel-line)}
/* Standalone links get a real tap area. Inline links inside prose are left alone,
   because block padding on those breaks the line box. */
.legalbar a{font-size:.9rem; display:inline-flex; align-items:center; min-height:40px;
  padding:.25rem 0; color:var(--ink-dim)}

@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  .rise{opacity:1; transform:none; transition:none}
}
