/* Design quality is 46.1% of credibility judgements (Stanford, n=2,684) — more
   than twice the next factor. For a premium product it does double duty: trust
   and price positioning are the same asset. */
:root{
  --paper:#F0EEE8;--surface:#FFFFFF;--hair:#DFDBD2;--hair-strong:#C6C1B5;
  --ink:#101F35;--ink-2:#3A4C64;--muted:#78828F;--faint:#A3ABB4;
  --green:#14563A;--green-soft:#E2EAE3;--signal:#A3302A;--cognac:#A9764B;--cream:#E7E4DC;
  --label:#5E6875;
  --font-display:"Fraunces",Georgia,"Times New Roman",serif;
  --font-ui:"Karla",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--font-ui);font-size:16px;line-height:1.5;
  -webkit-font-smoothing:antialiased;
}
body::after{
  content:'';position:fixed;inset:0;pointer-events:none;z-index:9;opacity:.05;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='140' height='140' filter='url(%23n)' opacity='0.5'/></svg>");
}
.wrap{max-width:560px;margin:0 auto;padding:0 22px 80px}

/* ---------- masthead ---------- */
/* A solid green field, edge to edge, no rounded corners. This is signage
   rather than a web section — the thing a club paints on a wall. Everything
   below it stays paper and hairlines, which is what stops it reading as loud
   instead of confident. */
/* One green band across the top of every page. The home page extends it
   downward so the calculator can overlap the seam; other pages stop short. */
.band{background:var(--green);color:var(--paper)}
.band .wrap{padding-bottom:0}
.hero{background:var(--green);color:var(--paper);padding:0 0 96px;margin-bottom:-70px}
.hero .wrap{padding-bottom:0}
.masthead{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:22px 0 18px;border-bottom:1px solid rgba(240,238,232,.22);
}
.brandlink{display:flex;align-items:center;gap:11px;text-decoration:none;padding:8px 0}
/* Three links is a navigation, not a menu. A hamburger here would hide the
   whole site behind a tap to save thirty pixels. */
.nav{display:flex;gap:18px}
.nav a{
  color:rgba(240,238,232,.72);text-decoration:none;
  font-size:11px;font-weight:700;letter-spacing:.13em;text-transform:uppercase;
  padding:14px 0 12px;border-bottom:2px solid transparent;
}
.nav a:hover{color:var(--paper)}
.nav a[aria-current="page"]{color:var(--paper);border-bottom-color:var(--paper)}
.nav a:focus-visible{outline:2px solid var(--paper);outline-offset:3px}

/* Interior pages: a shorter green head, no overlap trick. */
.pagehead{padding:34px 0 40px}
.pagehead h1{
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(34px,8.5vw,52px);letter-spacing:-.04em;line-height:1;
  margin:0;color:var(--paper);text-wrap:balance;
}
.pagehead .stand{
  font-size:16.5px;line-height:1.45;color:rgba(240,238,232,.76);
  margin:16px 0 0;max-width:32em;
}
.after-band{padding-top:34px}
.fline{margin-top:8px}
.logomark{flex:none;color:var(--paper)}
.logomark circle,.logomark ellipse,.logomark line{
  stroke:currentColor;fill:none;stroke-width:6;stroke-linecap:round;
}
.logomark .heavy{stroke-width:10}
.logomark .fill{fill:currentColor;stroke:none}
.wordmark{
  font-family:var(--font-display);font-weight:600;font-size:18px;
  letter-spacing:.15em;text-transform:uppercase;color:var(--paper);
}

/* ---------- hero ----------
   The first two words carry the scan. NNG's test: a concrete opening gave 85%
   correct prediction of a page's purpose from 11 characters; a generic opener
   ("Introducing…") gave 0%. So the headline opens on "Running pace", not on a
   slogan. The slogan is still here — it just isn't doing the identifying. */
/* The page read like an essay: airy, mid-sized, evenly grey. The fix is not
   more decoration, it is contrast — one enormous voice at the top and
   everything else quiet and tight underneath. Scale does the shouting so the
   colours don't have to. */
h1{
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(40px,10.8vw,68px);letter-spacing:-.042em;line-height:.96;
  margin:30px 0 0;text-wrap:balance;color:var(--paper);
}
.sub{
  font-size:16.5px;line-height:1.45;color:rgba(240,238,232,.78);
  margin:20px 0 0;max-width:27em;
}

/* ---------- the live calculator ----------
   The page used to show a photograph of the idea: two numbers and an arrow.
   Nobody believes a screenshot of a claim. This is the real engine — the same
   code that will ship in the app — running in the visitor's browser, on their
   own pace, before they have given anything up.

   Banner-blindness research says decorative imagery gets pattern-matched as
   advertising and skipped; working product does not. A thing you can operate
   is the strongest version of that. */
/* Overlapping the boundary is an editorial move, not an ornament: it makes
   the card the object the page is built around instead of the next thing in a
   stack, and it puts the product's own interface across the seam. */
.demo{
  background:var(--surface);border:1px solid var(--hair-strong);border-radius:4px;
  padding:0;margin:0;overflow:hidden;position:relative;z-index:2;
  box-shadow:0 14px 40px rgba(16,31,53,.16);
}
.demo-head{
  display:flex;justify-content:space-between;align-items:center;gap:10px;
  padding:12px 18px;background:var(--ink);color:var(--paper);
}
.demo-head span{
  font-size:9px;letter-spacing:.13em;white-space:nowrap;text-transform:uppercase;font-weight:700;
}
.demo-head .live{color:rgba(240,238,232,.52)}
.demo-body{padding:20px 18px}

.demo .out{
  display:grid;grid-template-columns:1fr auto 1fr;gap:10px;align-items:end;
}
.demo .out > div:last-child{text-align:right}
.demo .lbl{
  font-size:9px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--label);font-weight:700;margin-bottom:7px;
}
.demo .val{
  font-family:var(--font-display);font-size:clamp(25px,6.4vw,32px);font-weight:600;
  letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums;
}
.demo .val small{
  font-family:var(--font-ui);font-size:13px;font-weight:400;color:var(--label);
}
.demo .arrow{color:var(--label);font-size:17px;padding-bottom:5px}
.demo .why{
  margin:17px 0 0;padding-top:15px;border-top:1px solid var(--hair);
  color:var(--ink-2);font-size:15px;line-height:1.5;
}

.controls{
  margin-top:18px;padding-top:17px;border-top:1px solid var(--hair);
  display:grid;gap:15px;
}
.ctl label{
  display:flex;justify-content:space-between;align-items:baseline;gap:10px;
  font-size:10px;letter-spacing:.13em;text-transform:uppercase;
  color:var(--label);font-weight:700;margin-bottom:8px;
}
.ctl label b{
  font-family:var(--font-ui);font-size:13px;font-weight:700;color:var(--ink);
  letter-spacing:0;text-transform:none;font-variant-numeric:tabular-nums;
}
.ctl input[type=text]{
  width:100%;background:var(--paper);border:1px solid var(--hair-strong);
  border-radius:4px;color:var(--ink);font-family:inherit;
  font-size:16px;font-weight:600;padding:12px 13px;min-height:48px;
  font-variant-numeric:tabular-nums;
}
.ctl input[type=text]:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}
.ctl input[type=range]{
  -webkit-appearance:none;appearance:none;width:100%;
  /* 44px of hit area, 3px of visible track. Measuring the element rather
     than the drawing found 0.8 mm here, against a 9.2 mm research floor. */
  height:44px;background:transparent;margin:0;cursor:pointer;
}
.ctl input[type=range]::-webkit-slider-runnable-track{
  height:3px;background:var(--hair-strong);border-radius:2px;
}
.ctl input[type=range]::-moz-range-track{
  height:3px;background:var(--hair-strong);border-radius:2px;
}
.ctl input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;width:26px;height:26px;border-radius:50%;
  background:var(--surface);border:2px solid var(--green);
  box-shadow:0 1px 3px rgba(16,31,53,.22);margin-top:-11.5px;
}
.ctl input[type=range]::-moz-range-thumb{
  width:26px;height:26px;border-radius:50%;background:var(--surface);
  border:2px solid var(--green);
}
.ctl input[type=range]:focus-visible{outline:2px solid var(--green);outline-offset:5px}
.presets{display:flex;flex-wrap:wrap;gap:7px}
.presets button{
  background:var(--paper);border:1px solid var(--hair-strong);color:var(--label);
  font-family:inherit;font-size:12.5px;font-weight:600;
  padding:9px 12px;min-height:44px;border-radius:4px;cursor:pointer;
}
.presets button[aria-pressed="true"]{border-color:var(--green);color:var(--green);background:var(--green-soft)}
.presets button:focus-visible{outline:2px solid var(--green);outline-offset:2px}


/* ---------- the atom ----------
   Max's idea, and it earns its place: the product's whole claim is that
   several independent things orbit one answer. A bar chart would say the same
   thing and say it flatly.

   One hue throughout. Size does the encoding — orbit weight and electron
   radius scale with what each factor costs — so there is no colour-blindness
   problem to validate and no rainbow to apologise for. It also happens to be
   the logo's own geometry: a sphere with lines through it. */
.atom{
  margin:26px 0 0;padding:26px 18px 20px;background:var(--surface);
  border:1px solid var(--hair);border-radius:6px;
}

/* The number is the answer, so it gets to be typography rather than a label
   crammed inside a drawing. It sits above the diagram at full display weight;
   the diagram underneath explains where it came from. */
.atom-read{text-align:center;margin-bottom:6px}
.atom-lbl{
  font-family:var(--font-ui);font-weight:700;font-size:10px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--label);
}
.atom-pace{
  font-family:var(--font-display);font-weight:600;
  font-size:clamp(46px,13vw,64px);line-height:1.02;letter-spacing:-.03em;
  color:var(--green);margin-top:4px;font-variant-numeric:tabular-nums;
}
.atom-pace small{
  display:block;font-family:var(--font-ui);font-weight:700;font-size:10px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--label);
  margin-top:6px;
}

.atom svg{
  display:block;width:100%;max-width:380px;margin:0 auto;height:auto;
  overflow:visible;shape-rendering:geometricPrecision;
}
.orbit{fill:none;stroke:var(--green);opacity:.45;vector-effect:non-scaling-stroke}
.electron{fill:var(--green);stroke:var(--surface);stroke-width:3}
/* A plate, not a ring: the rings pass behind the nucleus instead of through
   the middle of it, which is what made the old figure read as clutter. */
.nucleus-plate{fill:var(--surface)}
/* Seven packed circles, each cut out of its neighbour by a paper-coloured
   stroke, so the cluster reads as distinct particles instead of a blob. */
.nucleus circle{fill:var(--green);stroke:var(--surface);stroke-width:2.4}
.nucleus circle:first-child{fill:#0E4530}

.legend{
  display:grid;grid-template-columns:repeat(3,1fr);gap:10px;
  margin-top:10px;padding-top:16px;border-top:1px solid var(--hair);
}
.leg{text-align:center}
.leg .dot{display:block;margin:0 auto 8px;border-radius:50%;background:var(--green)}
.leg .amt{
  font-family:var(--font-display);font-size:19px;font-weight:600;
  color:var(--ink);letter-spacing:-.4px;font-variant-numeric:tabular-nums;
}
.leg .nm{
  font-size:9px;letter-spacing:.11em;text-transform:uppercase;
  color:var(--label);font-weight:700;margin-top:5px;
}
/* The diagram is still by design. Sizes carry the information; nothing needs
   to move for it to be read, and a spinning graphic on a page about pacing
   yourself would be a small joke at its own expense. */
.electron{transition:r .22s ease}
.orbit{transition:stroke-width .22s ease}

/* Smallest phones: three legend columns stop fitting long before the diagram
   does, so the legend becomes rows and keeps its numbers legible. */
@media (max-width:360px){
  .legend{grid-template-columns:1fr;gap:0;text-align:left}
  .leg{
    display:grid;grid-template-columns:22px 1fr auto;align-items:center;
    gap:10px;text-align:left;padding:9px 0;border-bottom:1px solid var(--hair);
  }
  .leg:last-child{border-bottom:0}
  .leg .dot{margin:0}
  .leg .nm{margin-top:0;order:2}
  .leg .amt{order:3}
}

/* ---------- signup ----------
   Above the fold, because the value proposition is simple — that's the
   condition where an above-fold CTA wins. Repeated at the end regardless. */
.signup{margin:26px 0 0}
.signup label{
  display:block;font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--label);font-weight:700;margin-bottom:8px;
}
.signup .fields{display:flex;gap:9px;flex-wrap:wrap}
.signup input{
  flex:1;min-width:200px;background:var(--surface);
  border:1px solid var(--hair-strong);border-radius:5px;
  color:var(--ink);font-family:inherit;
  /* 16px minimum: below this, iOS Safari auto-zooms the page on focus. */
  font-size:16px;padding:15px 15px;min-height:52px;
}
.signup input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}
.signup button{
  background:var(--green);color:#fff;border:none;border-radius:5px;
  padding:0 26px;min-height:52px;font-family:inherit;
  font-size:16px;font-weight:700;cursor:pointer;letter-spacing:.01em;
}
.signup button:hover{background:#0F4831}
.signup button:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
.note{font-size:13px;color:var(--label);margin-top:11px}

/* ---------- what it does ---------- */
/* Rules do the separating, not white space. An essay breathes; a programme
   or a scorecard rules a line and moves on. */
h2{
  font-family:var(--font-display);font-weight:700;font-size:clamp(26px,6.6vw,32px);
  letter-spacing:-.032em;line-height:1.05;margin:44px 0 0;
  padding-top:18px;border-top:2px solid var(--ink);
}
ul{margin:14px 0 0;padding:0;list-style:none}
li{padding:14px 0;border-bottom:1px solid var(--hair);color:var(--ink-2);font-size:15.5px;line-height:1.45}
li:last-child{border-bottom:none}
li b{
  color:var(--ink);font-weight:700;display:block;margin-bottom:4px;
  font-size:11px;letter-spacing:.13em;text-transform:uppercase;
}
p{color:var(--ink-2);margin:13px 0 0;max-width:31em;font-size:16px;line-height:1.5}
.lead{
  font-family:var(--font-display);font-weight:600;
  font-size:clamp(21px,5.4vw,26px);letter-spacing:-.028em;line-height:1.18;
  color:var(--ink);margin:16px 0 0;max-width:17em;
}
.lead + p{margin-top:14px}

.closing{
  margin-top:46px;padding:26px 22px;background:var(--surface);
  border:1px solid var(--hair);border-radius:6px;
}
.closing h2{margin-top:0}

footer{
  margin-top:44px;padding-top:22px;border-top:1px solid var(--hair);padding-bottom:70px;
  font-size:11px;color:var(--label);letter-spacing:.1em;text-transform:uppercase;font-weight:700;
}
footer a{color:var(--green);text-decoration:none;display:inline-block;padding:14px 3px}
footer a:hover{text-decoration:underline}
.fline{margin-top:9px;color:var(--label)}

/* Post-submit states. The form redirects back here rather than leaving the
   person on a bare JSON page — a signup that ends on a blank screen reads as
   broken even when it worked. */
.flash{
  margin:26px 0 0;padding:15px 17px;border-radius:6px;font-size:16px;
  border:1px solid var(--hair);background:var(--surface);
}
.flash.good{border-left:3px solid var(--green);background:var(--green-soft);color:var(--ink)}
.flash.bad{border-left:3px solid var(--signal);color:var(--ink)}
.flash b{display:block;margin-bottom:3px}
/* Once someone has joined, asking again is noise. Hide the forms and let the
   confirmation stand on its own. */
body.joined .signup{display:none}
body.joined .closing{display:none}


/* ---------- tables, used on Science and Races ---------- */
.tablewrap{overflow-x:auto;margin:18px 0 0;-webkit-overflow-scrolling:touch}
table{border-collapse:collapse;width:100%;font-size:14.5px;min-width:520px}
th,td{text-align:left;padding:11px 10px 11px 0;border-bottom:1px solid var(--hair);vertical-align:top}
th{
  font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--label);
  font-weight:700;border-bottom:1px solid var(--hair-strong);white-space:nowrap;
}
td{color:var(--ink-2)}
td:first-child{color:var(--ink);font-weight:600}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums;padding-right:0}
.pass{color:var(--green);font-weight:700}
.tension{color:var(--signal);font-weight:700}

/* ---------- a cited claim ---------- */
.finding{
  margin:20px 0 0;padding:18px 20px;background:var(--surface);
  border:1px solid var(--hair);border-left:3px solid var(--green);border-radius:0 6px 6px 0;
}
.finding h3{font-family:var(--font-ui);font-size:16px;font-weight:700;margin:0;color:var(--ink)}
.finding p{margin:9px 0 0;font-size:15.5px}
.cite{
  display:block;margin-top:11px;font-size:12px;color:var(--label);
  font-style:normal;letter-spacing:.01em;
}
.finding.against{border-left-color:var(--signal)}

/* ---------- race list ---------- */
.racefilter{margin:20px 0 0}
.racefilter input{
  width:100%;background:var(--surface);border:1px solid var(--hair-strong);
  border-radius:5px;color:var(--ink);font-family:inherit;
  font-size:16px;padding:14px 15px;min-height:52px;
}
.racefilter input:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px var(--green-soft)}
.racecount{font-size:13px;color:var(--label);margin-top:10px}
.race{
  display:grid;grid-template-columns:1fr auto;gap:4px 14px;
  padding:15px 0;border-bottom:1px solid var(--hair);
}
.race .nm{font-weight:700;color:var(--ink);font-size:16px}
.race .where{font-size:13px;color:var(--label);margin-top:3px}
.race .cond{
  grid-column:2;grid-row:1 / span 2;text-align:right;white-space:nowrap;
  font-size:13px;color:var(--ink-2);font-variant-numeric:tabular-nums;
}
.race .cond b{display:block;font-family:var(--font-display);font-size:20px;color:var(--ink);font-weight:600}
.race .note{grid-column:1 / -1;font-size:13px;color:var(--label);margin-top:7px;line-height:1.45}

/* ---------- charts ----------
   Drawn as plain SVG from the engine's own numbers at build time, so a chart
   can never drift away from the model it claims to depict. No library: these
   are lines, and a library would be 60 kB of someone else's opinions. */
.figure{
  margin:24px 0 8px;padding:20px 16px 14px;background:var(--surface);
  border:1px solid var(--hair);border-radius:6px;
}
.figure .chart{display:block;width:100%;height:auto;overflow:visible}
.figure figcaption{
  margin-top:12px;padding-top:12px;border-top:1px solid var(--hair);
  font-size:14px;line-height:1.55;color:var(--ink-2);
}
.figure figcaption b{color:var(--ink);font-weight:700}
.gl{stroke:var(--hair);stroke-width:1}
.gl.base{stroke:var(--hair-strong);stroke-width:1.2}
.ax{
  font-family:var(--font-ui);font-size:11px;font-weight:600;
  fill:var(--label);letter-spacing:.02em;
}
.curve{fill:none;stroke:var(--green);stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round}
.pt{fill:var(--green);stroke:var(--surface);stroke-width:2.5}
.note{
  font-family:var(--font-ui);font-size:11px;font-weight:700;
  fill:var(--ink);letter-spacing:.01em;
}
.ci-band{fill:var(--signal);opacity:.13}
.meas{fill:none;stroke:var(--signal);stroke-width:2.6;stroke-linecap:round}
.key{font-family:var(--font-ui);font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
.key.model{fill:var(--green)}
.key.measured{fill:var(--signal)}
.bar{fill:var(--green);opacity:.82}
.bar.hot{fill:var(--signal);opacity:.86}
.barlbl{
  font-family:var(--font-ui);font-size:13px;font-weight:700;
  fill:var(--ink);letter-spacing:.01em;
}
.barval{
  font-family:var(--font-display);font-size:15px;font-weight:600;
  fill:var(--ink);font-variant-numeric:tabular-nums;
}

/* Smallest phones: the wordmark and three nav links stop fitting on one line
   at about 340px. Rather than shrink the type until it is unreadable, the
   masthead becomes two rows — brand above, navigation below, still one tap
   from anywhere. */
@media (max-width:374px){
  .masthead{flex-wrap:wrap;gap:2px 12px}
  .nav{width:100%;gap:0;justify-content:space-between;padding-bottom:2px}
  .wordmark{font-size:16px;letter-spacing:.12em}
}

/* The first heading after the green band already has the band as its rule, so
   it does not need 44px of air and a second one on top of it. */
.after-band > h2:first-child{margin-top:6px}
