/* Software Shippers — the app’s warm paper, black ink, and gold palette.
   Keep the inherited funnel accent tokens and notebook layout. */

:root {
  --bg: #f6f3e8;
  --bg2: #eee7d1;
  --surface: #fffdf7;
  --surface2: #efe2b8;
  --paper: #ffffff;
  --ink: #181710;
  --lime: #70520b;
  --lime-bright: #e9bc3e;
  --lime2: #70520b;
  --coral: #70520b;
  --coral-bright: #e9bc3e;
  --danger: #bc3f48;
  --cyan: #70520b;
  --cyan-bright: #b38a19;
  --violet: #70520b;
  --muted: #635f4f;
  --line: rgba(24, 23, 16, .19);
  --line2: rgba(24, 23, 16, .26);
  --sans: "Manrope", system-ui, sans-serif;
  --serif: "Source Serif 4", Georgia, serif;
  --mono: "IBM Plex Mono", ui-monospace, monospace;
  --shadow: 0 18px 48px rgba(24, 23, 16, .12);
  --radius: 18px;
  --max: 1180px;

  /* ClickFunnels SDK checkout iframe theme (light) */
  --cfsdk-checkout-color-scheme: light;
  --cfsdk-checkout-color-primary: #70520b;
  --cfsdk-checkout-color-text: #181710;
  --cfsdk-checkout-color-danger: var(--danger);
  --cfsdk-checkout-color-placeholder: #635f4f;
  --cfsdk-checkout-color-background: #ffffff;
  --cfsdk-checkout-color-border: rgba(24, 23, 16, .26);
  --cfsdk-checkout-input-shadow: 0 1px 1px rgb(0 0 0 / .05);
  --cfsdk-checkout-border-radius: 10px;
  --cfsdk-checkout-font-family: "Manrope", system-ui, sans-serif;
  --cfsdk-checkout-font-size: 15px;
  --cfsdk-checkout-spacing-unit: 4px;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.58;overflow-x:hidden}
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:-1;
  background-image:linear-gradient(rgba(24,23,16,.035) 1px,transparent 1px),linear-gradient(90deg,rgba(24,23,16,.035) 1px,transparent 1px);
  background-size:38px 38px;mask-image:linear-gradient(to bottom,black,transparent 75%)}
/* Three confetti dots. Exactly three: the layer is fixed to the viewport, so
   `no-repeat` is what makes that literal — it used to tile at ~200px and put
   about ninety dots on screen at once, which read as texture rather than as a
   couple of specks on a lab notebook. Muted accents at 5-7% instead of the
   bright ones at 10-13%, for the same reason. */
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:-1;
  background-repeat:no-repeat;
  background-image:radial-gradient(circle at 6% 16%,rgba(179,138,25,.085) 0 6px,transparent 7px),
             radial-gradient(circle at 94% 33%,rgba(179,138,25,.07) 0 8px,transparent 9px),
             radial-gradient(circle at 13% 86%,rgba(112,82,11,.065) 0 5px,transparent 6px)}
a{color:inherit}
a:hover{color:var(--lime2)}
button{font:inherit}
::selection{background:var(--lime-bright);color:var(--ink)}
:focus-visible{outline:3px solid var(--lime);outline-offset:3px}

.shell{width:min(var(--max),calc(100% - 40px));margin-inline:auto}
.mono{font-family:var(--mono)}
.eyebrow{font:600 11px var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--lime);margin:0 0 8px}
.kicker{font:600 11px var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--coral)}

/* top bar */
.topbar{position:sticky;top:0;z-index:80;background:rgba(246,243,232,.92);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--line);box-shadow:0 10px 30px rgba(24,23,16,.10)}
.topbar-inner{min-height:70px;display:flex;align-items:center;justify-content:space-between;gap:22px}
.mark{display:flex;align-items:center;gap:11px;text-decoration:none;font-weight:700;white-space:nowrap}
.mark-card{width:42px;height:42px;display:grid;place-items:center;border:1px solid var(--line2);border-radius:11px;background:var(--surface);font:600 15px var(--mono);color:var(--lime);transform:rotate(-5deg);box-shadow:4px 4px 0 var(--cyan-bright);flex:none}
.mark small{display:block;color:var(--muted);font:500 10px var(--mono);text-transform:uppercase;letter-spacing:.12em;white-space:normal;max-width:min(46vw,360px);line-height:1.4}

/* typography */
h1{font:650 clamp(42px,6.6vw,84px)/.94 var(--serif);letter-spacing:-.05em;margin:8px 0 22px;text-wrap:balance;text-shadow:2px 2px 0 rgba(179,138,25,.22)}
h1 .accent{color:var(--lime)}
h2{font:600 clamp(32px,4.6vw,56px)/1 var(--serif);letter-spacing:-.035em;margin:7px 0 14px;text-wrap:balance}
h3{font:600 22px var(--serif);margin:0 0 8px}
.lead{font-size:clamp(17px,2vw,21px);line-height:1.5;color:#635f4f;max-width:760px;text-wrap:pretty}
p{color:#635f4f}
.muted{color:var(--muted)}
.tiny{font-size:12px}
.center{text-align:center}
.fine{color:#635f4f;font-size:12px}

/* buttons + fields */
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:12px 18px;border-radius:10px;border:1px solid var(--line2);background:var(--surface);color:var(--ink);text-decoration:none;font-weight:700;font-size:14px;cursor:pointer;transition:transform .15s ease}
.btn.primary{background:var(--lime-bright);border-color:var(--lime);color:var(--ink);box-shadow:5px 5px 0 var(--cyan-bright)}
.btn.block{width:100%}
.btn:hover{transform:translate(-1px,-2px)}
.btn:disabled{opacity:.55;cursor:wait;transform:none}
.field{width:100%;min-height:48px;padding:12px 14px;border-radius:10px;border:1px solid var(--line2);background:var(--paper);color:var(--ink);font:500 15px var(--sans)}
.field::placeholder{color:var(--muted)}
.field:focus{outline:3px solid var(--lime);outline-offset:1px;border-color:var(--lime)}
label.flbl{display:block;font:600 10px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--lime2);margin:0 0 8px}

/* chips */
.chips{display:flex;gap:10px;flex-wrap:wrap}
.chip{border:1px solid var(--line2);border-radius:999px;padding:8px 14px;font:600 11px var(--mono);color:#635f4f;background:rgba(255,255,255,.72)}
.chip b{color:var(--lime)}
.chip.coral b{color:var(--coral)}

/* lab pass (the ticket) */
.ticket{background:var(--paper);color:var(--ink);border-radius:20px;padding:24px;position:relative;transform:rotate(1.2deg);box-shadow:8px 8px 0 var(--lime-bright),var(--shadow)}
.ticket-kicker{font:600 9px var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--coral);display:flex;justify-content:space-between;gap:12px}
.ticket-title{font:600 24px/1.1 var(--serif);margin:10px 0 4px;color:var(--ink)}
.ticket p{color:inherit}
.ticket-rule{height:1px;background:var(--line2);margin:14px 0}
.ticket-row{display:flex;justify-content:space-between;gap:10px;font:500 11px var(--mono);padding:4px 0;color:#635f4f}
.ticket-row b{color:var(--ink)}

/* metric strip */
.metric-strip{border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:56px 0 0;background:rgba(255,255,255,.55)}
.metrics{display:grid;grid-template-columns:repeat(6,1fr)}
.metric{padding:22px 16px;border-left:1px solid var(--line)}
.metric:last-child{border-right:1px solid var(--line)}
.metric-value{font:600 27px/1 var(--serif);color:var(--lime2);letter-spacing:-.03em}
.metric:nth-child(2) .metric-value{color:var(--coral)}
.metric:nth-child(3) .metric-value{color:var(--cyan)}
.metric:nth-child(4) .metric-value{color:var(--violet)}
.metric:nth-child(5) .metric-value{color:var(--lime2)}
.metric:nth-child(6) .metric-value{color:var(--coral)}
.metric-label{margin-top:8px;color:var(--muted);font:500 10px var(--mono);letter-spacing:.07em;text-transform:uppercase}

/* sections */
.section{padding:80px 0;border-top:1px solid var(--line)}
.section-num{font:600 11px var(--mono);color:var(--coral);letter-spacing:.14em;margin-bottom:12px;text-transform:uppercase}
.section-intro{color:#635f4f;font-size:18px;max-width:680px}

/* cards / panels */
.panel{border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);padding:26px}
.panel.lime{border-color:rgba(233,188,62,.58);background:linear-gradient(145deg,var(--surface2),var(--surface))}
.pillar{border:1px solid var(--line);background:var(--surface);border-radius:14px;padding:22px 24px;display:grid;grid-template-columns:48px 1fr;gap:18px;align-items:start;transition:transform .15s ease}
.pillar:hover{transform:translate(-1px,-2px)}
.pillar-no{font:600 14px var(--mono);color:var(--coral)}
.pillar p{margin:0;color:#635f4f;font-size:14px}

/* big pull-quote (straight talk) */
.pull-card{background:var(--paper);border-radius:22px;padding:40px 42px;transform:rotate(-.6deg);box-shadow:8px 8px 0 var(--cyan-bright),var(--shadow);max-width:880px;margin-inline:auto}
.pull-card .q{font:600 clamp(24px,3.2vw,38px)/1.25 var(--serif);letter-spacing:-.02em;color:var(--ink);margin:0}
.pull-card .q em{color:var(--lime);font-style:normal}
.pull-card .who{margin:16px 0 0;font:600 11px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--coral)}

/* loop steps */
.loop-steps{display:grid;gap:10px}
.loop-step{border:1px solid var(--line);background:var(--surface);border-radius:12px;padding:18px 20px;display:grid;grid-template-columns:44px 1fr;gap:16px;align-items:start}
.loop-step .n{font:600 15px var(--mono);color:var(--lime)}
.loop-step p{margin:2px 0 0;color:#635f4f;font-size:14px}

/* notes */
.note{margin-top:24px;border:1px dashed rgba(179,138,25,.45);background:rgba(255,255,255,.62);border-radius:11px;padding:16px 18px;font-size:13.5px;line-height:1.6;color:#635f4f}
.note b{display:block;color:var(--lime2);font:700 11px var(--mono);letter-spacing:.09em;text-transform:uppercase;margin-bottom:7px}
.rule-note{margin-top:18px;padding:14px 16px;border-left:3px solid var(--lime);background:rgba(233,188,62,.07);color:#4a4535;border-radius:0 10px 10px 0}

/* clean lists (offer bullets) */
.clean{margin:0;padding:0;list-style:none}
.clean li{position:relative;padding:9px 0 9px 25px;border-top:1px solid var(--line);color:#4a4535;font-size:14.5px}
.clean li:first-child{border-top:0}
.clean li::before{content:"↳";position:absolute;left:1px;color:var(--lime);font-family:var(--mono)}
.clean li.extra::before{content:"+";color:var(--coral)}
/* one level of nesting: what a deliverable actually contains, not a second list */
.clean .sub{margin:9px 0 1px;padding:0;list-style:none}
.clean .sub li{border-top:0;padding:3px 0 3px 18px;font-size:13.5px;color:#635f4f}
.clean .sub li::before{content:"→";color:var(--muted)}

/* plan / offer cards */
.plans{display:grid;grid-template-columns:1fr 1fr;gap:22px;align-items:stretch}
.plan{position:relative;border:1px solid var(--line);background:var(--surface);border-radius:var(--radius);padding:30px;display:flex;flex-direction:column;gap:14px}
.plan.featured{border-color:rgba(233,188,62,.7);background:linear-gradient(145deg,var(--surface2),var(--surface));box-shadow:8px 8px 0 var(--lime-bright),var(--shadow);transform:rotate(.5deg)}
.plan-badge{position:absolute;top:-14px;left:24px;background:var(--lime-bright);color:var(--ink);font:700 10px var(--mono);letter-spacing:.09em;text-transform:uppercase;padding:6px 11px;border-radius:7px;box-shadow:3px 3px 0 #e9bc3e;transform:rotate(-1.5deg)}
.plan h3{font-size:27px}
.price-line{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.price-line .amount{font:600 50px/1 var(--serif);letter-spacing:-.03em;color:var(--lime)}
.price-line .period{font:600 13px var(--mono);color:var(--muted)}
.plan .spacer{flex:1}

/* checkout layout */
.checkout-grid{display:grid;grid-template-columns:1fr .95fr;gap:26px;align-items:start}
.summary-lines{display:grid;gap:6px}
.summary-line{display:flex;justify-content:space-between;gap:14px;font:500 13px var(--mono);color:#635f4f;padding:8px 0;border-bottom:1px dashed var(--line2)}
.summary-line.total{border-bottom:0;border-top:2px solid var(--line2);padding-top:12px;color:var(--ink);font-weight:700;font-size:15px}
.gateway-box{margin:16px 0}
.err{color:var(--danger);font:500 13px var(--sans);margin:8px 0 0}

/* terminal trace (kept dark for contrast — quiet terminal cues) */
.trace{border-radius:14px;background:#181710;border:1px solid #484337;padding:20px 22px;font:500 13px/1.9 var(--mono);color:#f2e8c9;overflow-x:auto;box-shadow:6px 6px 0 var(--violet),var(--shadow);transform:rotate(-.4deg)}
.trace .ok{color:#e9bc3e}
.trace .dim{color:#d8cda9}
.trace .hl{color:#f2e8c9}

/* team portraits */
.founder-lineup{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;align-items:start;max-width:820px;margin:34px auto 0}
.portrait-card{margin:0;padding:12px 12px 16px;border-radius:20px;background:var(--paper);color:var(--ink);box-shadow:var(--shadow)}
.portrait-card:nth-child(1){transform:rotate(-1.4deg);box-shadow:8px 8px 0 #e9bc3e,var(--shadow)}
.portrait-card:nth-child(2){transform:translateY(13px) rotate(1.2deg);box-shadow:8px 8px 0 var(--cyan-bright),var(--shadow)}
.portrait-card img{display:block;width:100%;aspect-ratio:1;object-fit:cover;border-radius:13px;background:#f5efdf}
.portrait-card figcaption{display:flex;justify-content:space-between;gap:12px;align-items:baseline;padding:12px 4px 0}
.portrait-card figcaption b{font:650 19px var(--serif)}
.portrait-card figcaption span{color:#4a4535;font:700 10px var(--mono);text-align:right;text-transform:uppercase;letter-spacing:.04em}
.bot-quote{margin-top:12px;color:var(--cyan);font:600 17px/1.35 var(--serif)}

/* about page: one person per row. The portrait keeps its size while the TL;DR
   beside it is allowed to run long, which a three-up tile grid never was. */
.bio{display:grid;grid-template-columns:230px minmax(0,1fr);gap:28px;align-items:start;margin-top:30px}
.bio .portrait-card{transform:rotate(-1.4deg);box-shadow:8px 8px 0 #e9bc3e,var(--shadow)}
#otto .bio .portrait-card{transform:rotate(1.2deg);box-shadow:8px 8px 0 var(--cyan-bright),var(--shadow)}
/* Both bios are `.clean` bullet lists now; the long-form `.bio-tldr` paragraph
   they used to share is gone, and only its inline-code chip was worth keeping. */
.clean code{font:600 13px var(--mono);background:rgba(233,188,62,.16);padding:1px 5px;border-radius:5px}
.women-callout{margin-top:20px;padding:16px;border:2px solid var(--cyan);border-radius:14px 5px 14px 5px;background:rgba(179,138,25,.08)}
.women-callout b{display:block;margin-bottom:6px;color:var(--cyan);font:650 18px var(--serif)}
.women-callout span{color:#635f4f;font-size:13px}

/* what-is-it strip */
.isit{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:30px}
.isit-card{padding:18px;border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.72)}
.isit-card b{display:block;font:700 12px var(--mono);letter-spacing:.05em;text-transform:uppercase;margin-bottom:6px}
.isit-card:nth-child(1) b{color:var(--coral)}
.isit-card:nth-child(2) b{color:var(--cyan)}
.isit-card:nth-child(3) b{color:var(--violet)}
.isit-card:nth-child(4) b{color:var(--lime2)}
.isit-card span{color:#635f4f;font-size:13px}

/* before/after */
.beforeafter{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:30px}

/* three-tier loop taxonomy */
.tiers{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:30px}
.tiers .panel h3{font-size:20px}

/* in/on the loop explainer */
.loop-modes{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:22px}
.loop-mode{padding:18px;border:1px solid var(--line);border-radius:12px;background:var(--bg2)}
.loop-mode b{display:block;margin-bottom:8px;color:var(--lime2);font:600 12px var(--mono)}
.loop-mode span{color:#635f4f;font-size:13px}
.loop-mode:first-child{border-top:3px solid var(--coral)}
.loop-mode:last-child{border-top:3px solid var(--cyan)}

/* hero grid */
.hero{padding:72px 0 30px}
.hero-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:48px;align-items:center}

/* footer — shared by every page on looplabs.cc (membership + blog + legal) */
.foot{padding:44px 0 60px;color:var(--muted);border-top:1px solid var(--line)}
.foot .disc{font-size:12px;line-height:1.7;max-width:760px}
.foot-grid{display:flex;justify-content:space-between;gap:24px;flex-wrap:wrap;align-items:flex-start;margin-top:22px}
.foot-links{display:flex;gap:18px;flex-wrap:wrap;justify-content:flex-end;font:600 11px var(--mono);letter-spacing:.1em;text-transform:uppercase}
.foot-links a{color:var(--muted);text-decoration:none}
.foot-links a:hover{color:var(--lime2)}
/* the quiet legal row — under the content links, lighter and lowercase */
.foot-legal{flex-basis:100%;display:flex;gap:14px;justify-content:flex-end;margin-top:4px;
  font:400 11px var(--mono);letter-spacing:.04em;text-transform:lowercase}
.foot-legal a{color:color-mix(in srgb,var(--muted) 62%,transparent)}
.foot-legal a:hover{color:var(--muted)}
@media (max-width:700px){.foot-links,.foot-legal{justify-content:flex-start}}
.status-dot{width:7px;height:7px;border-radius:50%;background:var(--lime-bright);box-shadow:0 0 0 5px rgba(233,188,62,.18);display:inline-block}

@media (max-width: 900px){
  .hero-grid,.plans,.checkout-grid,.beforeafter,.loop-modes,.tiers{grid-template-columns:1fr}
  .founder-lineup{grid-template-columns:1fr;max-width:420px;margin-inline:auto}
  .portrait-card:nth-child(2){transform:rotate(1.2deg)}
  .bio{grid-template-columns:1fr}
  .bio .portrait-card{max-width:320px}
  .isit{grid-template-columns:repeat(2,1fr)}
  .metrics{grid-template-columns:repeat(3,1fr)}
  .metric:nth-child(2n+1){border-left:1px solid var(--line)}
  .section{padding:60px 0}
  .pull-card{padding:28px}
}

/* ── interactive bits (index only) ───────────────────────────────────────
   All four are progressive enhancement: the HTML reads correctly with JS
   off, and script.js only adds the interaction on top. */

/* 1. era slider: two engineers, ten years */
.era{margin-top:26px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);overflow:hidden}
.era-head{display:grid;grid-template-columns:auto auto 1fr;gap:14px;align-items:center;padding:20px 22px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.5)}
.era-label{font:600 11px var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.era-year{font:600 30px/1 var(--serif);color:var(--lime2);letter-spacing:-.02em;min-width:4ch}
.era-range{-webkit-appearance:none;appearance:none;width:100%;height:6px;border-radius:99px;background:linear-gradient(90deg,var(--lime-bright) var(--fill,0%),var(--surface2) var(--fill,0%));cursor:pointer}
.era-range::-webkit-slider-thumb{-webkit-appearance:none;width:26px;height:26px;border-radius:50%;background:var(--paper);border:2px solid var(--lime);box-shadow:0 2px 6px rgba(24,23,16,.3);cursor:grab}
.era-range::-moz-range-thumb{width:26px;height:26px;border-radius:50%;background:var(--paper);border:2px solid var(--lime);box-shadow:0 2px 6px rgba(24,23,16,.3);cursor:grab}
.era-rows{display:grid}
.era-row{display:grid;grid-template-columns:auto 1fr auto;gap:18px;align-items:center;padding:20px 22px;border-bottom:1px solid var(--line)}
.era-row.top{background:rgba(233,188,62,.07)}
.era-face{font-size:34px;line-height:1;width:44px;text-align:center}
.era-who b{display:block;font:650 18px var(--serif)}
.era-who span{display:block;margin-top:2px;color:#635f4f;font-size:13px}
.era-pay{text-align:right;white-space:nowrap}
.era-amount{display:block;font:600 25px var(--mono);color:var(--lime2);letter-spacing:-.02em;transition:color .3s ease}
.era-row.top .era-amount{color:var(--lime)}
.era-row.down .era-amount{color:var(--danger)}
.era-row.up .era-amount{color:var(--lime)}
.era-delta{display:inline-block;margin-top:5px;padding:2px 7px;border-radius:99px;font:700 10px var(--mono);letter-spacing:.06em}
.era-row.down .era-delta{background:rgba(188,63,72,.12);color:var(--danger)}
.era-row.up .era-delta{background:rgba(233,188,62,.22);color:var(--lime2)}
.era-row.down{background:rgba(188,63,72,.05)}
.era-row.up{background:rgba(233,188,62,.09)}
.era-row{transition:background .3s ease}
.era-basis{display:block;margin-top:3px;color:var(--muted);font:500 10px var(--mono);letter-spacing:.06em;text-transform:uppercase}
.era-foot{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;padding:16px 22px}
.era-toggle{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:#635f4f;cursor:pointer;user-select:none}
.era-toggle input{width:17px;height:17px;accent-color:var(--lime)}
.era-note{margin:0;color:var(--muted);font-size:11.5px;line-height:1.5;max-width:62ch}
.era-note a{color:var(--lime2)}

/* 2. tier self-select */
.tiers .panel[data-tier]{cursor:pointer;transition:box-shadow .15s ease,border-color .15s ease}
.tiers .panel[data-tier]:hover{border-color:var(--line2)}
.tiers .panel[data-tier][aria-expanded="true"]{box-shadow:0 0 0 2px var(--lime-bright)}
.tier-pick{display:inline-block;margin-top:12px;padding:6px 10px;border:1px solid var(--line2);border-radius:8px;background:transparent;color:var(--lime2);font:600 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;cursor:pointer}
.tier-pick:hover{background:var(--lime-bright);border-color:var(--lime);color:var(--ink)}
.tier-answer{margin:12px 0 0;padding-top:12px;border-top:1px solid var(--line);font-size:13.5px;color:#635f4f}

/* 3. terminal replay */
.trace-run{margin-top:10px}
.trace-btn{display:inline-flex;align-items:center;gap:7px;min-height:38px;padding:8px 13px;border:1px solid var(--line2);border-radius:9px;background:var(--paper);color:var(--ink);font:600 12px var(--mono);cursor:pointer}
.trace-btn:hover{background:var(--lime-bright);border-color:var(--lime)}
.trace-btn[disabled]{opacity:.5;cursor:default}


/* ── /newsletter only ────────────────────────────────────────────────────
   The one-button subscribe page. Both bits below read correctly with JS off:
   the headcount is printed in the HTML, the dial ships showing "on the loop". */

/* 4. headcount — the number, and the day it was counted */
.headcount{display:flex;align-items:center;gap:18px;margin:30px 0 4px;padding:18px 22px;border:1px solid var(--line);border-radius:14px;background:var(--surface);box-shadow:6px 6px 0 var(--cyan-bright);transform:rotate(-.5deg);width:fit-content;max-width:100%}
.headcount-num{font:600 clamp(46px,7vw,64px)/1 var(--serif);letter-spacing:-.04em;color:var(--lime2);font-variant-numeric:tabular-nums}
.headcount-meta b{display:block;font:700 11px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--coral)}
.headcount-meta span{display:block;margin-top:5px;color:var(--muted);font:500 11px var(--mono);letter-spacing:.04em}

/* 5. the loop dial — four positions between a human and the machine.
   `--stop` is the active notch's accent and everything reads from it: the dot, the
   tick, the stamp, and whichever pipeline tiles are still marked "you". The ramp is
   red → orange → green by severity, so `in` is orange here even though the index
   page's tier panel paints it cyan — cyan does not sit between coral and lime on a
   scale. `--amber` is local on purpose: the brand has no orange, and one dial is not
   a reason to add a token every page then inherits. */
/* No overflow:hidden — godmode's sparks have to leave the box. The track rounds its
   own top corners instead, which is all the clipping this ever needed. */
.dial{--stop:var(--lime);--amber:#c2711c;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}
.dial[data-stop="out"]{--stop:var(--coral)}
.dial[data-stop="in"]{--stop:var(--amber)}
.dial[data-stop="on"]{--stop:var(--lime)}
.dial[data-stop="godmode"]{--stop:var(--violet)}
.dial-track{display:grid;grid-template-columns:repeat(4,1fr);position:relative;padding:22px 10px 14px;background:rgba(255,255,255,.5);border-bottom:1px solid var(--line);border-radius:calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0}
/* the rail the notches sit on, drawn behind them */
.dial-track::before{content:"";position:absolute;left:calc(12.5% + 10px);right:calc(12.5% + 10px);top:32px;height:2px;background:var(--surface2)}
.dial-notch{display:grid;justify-items:center;gap:9px;padding:0 2px;background:none;border:0;cursor:pointer;position:relative;z-index:1}
.dial-dot{width:20px;height:20px;border-radius:50%;border:2px solid var(--line2);background:var(--paper);transition:background .16s ease,border-color .16s ease,transform .16s ease}
.dial-notch:hover .dial-dot{border-color:var(--stop)}
.dial-notch[aria-checked="true"] .dial-dot{background:var(--stop);border-color:var(--stop);transform:scale(1.22);box-shadow:0 0 0 5px color-mix(in srgb,var(--stop) 22%,transparent)}
.dial-tick{font:600 10px var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.dial-notch[aria-checked="true"] .dial-tick{color:var(--stop)}
.dial-card{padding:24px 22px 26px}
.dial-stamp{margin:0;font:700 11px var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--stop)}
.dial-pipeline{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin:16px 0 0}
.dial-node{position:relative;padding:14px 8px;border:1px solid var(--line);border-radius:11px;background:var(--bg2);text-align:center}
.dial-node+.dial-node::before{content:"→";position:absolute;left:-11px;top:50%;transform:translateY(-50%);color:var(--muted);font-family:var(--mono);font-size:12px}
.dial-node b{display:block;font:600 11px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--ink)}
.dial-node span{display:block;margin-top:6px;font:700 10px var(--mono);letter-spacing:.08em;text-transform:uppercase}
.dial-node[data-who="you"]{border-top:3px solid var(--stop)}
.dial-node[data-who="you"] span{color:var(--stop)}
.dial-node[data-who="agent"]{border-top:3px solid var(--cyan)}
.dial-node[data-who="agent"] span{color:var(--cyan)}
.dial-verdict{margin:18px 0 0;font-size:15px;line-height:1.65;color:#635f4f;min-height:4.9em}

/* godmode detonates. It is the one place on this site allowed to be silly, and it
   re-detonates on every click of the notch. Reduced motion gets the switch only —
   the JS never spawns a spark and the shake is disabled here too. */
.dial[data-stop="godmode"] .dial-node{background:rgba(233,188,62,.16);border-color:rgba(112,82,11,.4)}
.dial.is-blown{animation:dial-shake .42s cubic-bezier(.36,.07,.19,.97)}
@keyframes dial-shake{
  10%,90%{transform:translate3d(-2px,0,0)}
  20%,80%{transform:translate3d(4px,0,0)}
  30%,50%,70%{transform:translate3d(-7px,0,0)}
  40%,60%{transform:translate3d(7px,0,0)}
}
.dial[data-stop="godmode"] .dial-notch[aria-checked="true"] .dial-dot{transform:scale(1.45)}
/* the shockwave: one ring off the godmode dot, ahead of the debris */
.dial-notch .dial-boom{position:absolute;top:10px;left:50%;width:22px;height:22px;margin:-11px 0 0 -11px;border-radius:50%;border:2px solid var(--violet);pointer-events:none;animation:dial-boom .5s cubic-bezier(.15,.7,.4,1) forwards}
@keyframes dial-boom{
  from{opacity:.85;transform:scale(.4)}
  to{opacity:0;transform:scale(5.2)}
}
.dial-spark{position:absolute;top:10px;left:50%;width:9px;height:9px;margin:-4px 0 0 -4px;border-radius:50%;background:var(--violet);pointer-events:none;z-index:2;animation:dial-spark .72s cubic-bezier(.1,.75,.3,1) forwards}
.dial-spark:nth-child(3n){background:var(--coral-bright)}
.dial-spark:nth-child(3n+1){background:var(--lime-bright)}
.dial-spark:nth-child(4n){width:6px;height:6px;background:var(--cyan-bright)}
@keyframes dial-spark{
  from{opacity:1;transform:rotate(var(--a)) translateX(0) scale(1.2)}
  to{opacity:0;transform:rotate(var(--a)) translateX(var(--d)) scale(.3)}
}
@media (prefers-reduced-motion:reduce){
  .dial.is-blown{animation:none}
  .dial-spark,.dial-notch .dial-boom{display:none}
}

@media (max-width:760px){
  /* five tiles will not fit in a row; the arrows would then point in from nowhere
     at each wrapped row, so they go rather than lie about the reading order. */
  .dial-pipeline{grid-template-columns:repeat(2,1fr);gap:8px}
  .dial-node+.dial-node::before{content:none}
  .dial-node:last-child:nth-child(odd){grid-column:1/-1}
  .dial-verdict{min-height:0}
}
@media (max-width:560px){
  .headcount{gap:14px;padding:16px}
}

@media (max-width:680px){
  .era-head{grid-template-columns:auto 1fr;gap:10px}
  .era-range{grid-column:1/-1}
  .era-row{grid-template-columns:auto 1fr;gap:12px;padding:16px}
  .era-pay{grid-column:2;text-align:left}
  .era-face{font-size:28px;width:34px}
}


/* ── index only: how-it-works, session format, results, FAQ accordions ────
   Ported from the rails.builders homepage (same author, same tricks) and
   recoloured into the lab-notebook palette: the wonky hand-cut reveal card,
   the clip-path opening, the play button that runs the track, and the
   marker that travels it. All of it is either a native <details> or
   progressive enhancement, so the page still reads whole with JS off. */

/* 6. section reveal — a <details> whose summary is a hand-cut card.
   Two skins: `.reveal-blob` (lime, tucks up beside the heading, opens
   downward) and `.reveal-side` (paper, opens in from the right). */
.reveal{position:relative}
.reveal-lead{max-width:min(100%,620px)}
.reveal>summary{list-style:none;cursor:pointer;user-select:none;display:flex;align-items:center;gap:16px;
  border:1px solid transparent;transition:transform .25s ease,box-shadow .25s ease,background .25s ease}
.reveal>summary::-webkit-details-marker{display:none}
.reveal>summary::marker{content:""}
.reveal-copy strong,.reveal-copy small{display:block}
.reveal-copy strong{font:650 18px/1.15 var(--serif);letter-spacing:-.02em}
.reveal-copy small{margin-top:5px;font:700 10px var(--mono);letter-spacing:.12em;text-transform:uppercase}

/* the loop mark that unlocks when the card opens */
.reveal-mark{flex:0 0 auto;width:70px;height:70px;position:relative;display:grid;place-items:center}
.reveal-mark i{position:absolute;font-style:normal;line-height:1}
.reveal-mark i:first-child{font:600 46px var(--mono)}
.reveal-mark i:nth-child(2){top:2px;right:2px;font:600 13px var(--mono)}
.reveal-mark i:nth-child(3){bottom:4px;left:3px;font:600 9px var(--mono)}

/* — skin A: the lime blob, tucked up beside the heading — */
.reveal-blob>summary{width:300px;margin:-136px 6px 0 auto;padding:20px;color:var(--ink);
  border-color:var(--lime);border-radius:36% 64% 43% 57%/54% 40% 60% 46%;
  background:linear-gradient(145deg,var(--lime-bright) 0 18%,#d4a62d 52%,#b38a19);
  box-shadow:8px 8px 0 var(--cyan-bright),var(--shadow);transform:rotate(2deg)}
.reveal-blob>summary:hover{transform:translate(-1px,-4px) rotate(-1deg);box-shadow:10px 12px 0 var(--cyan-bright),var(--shadow)}
.reveal-blob[open]>summary{margin-bottom:40px}
.reveal-blob .reveal-mark i{color:var(--ink)}
.reveal-blob[open] .reveal-mark i:first-child{animation:loop-unlock .7s cubic-bezier(.2,.8,.2,1) both}
.reveal-blob[open] .reveal-mark i:nth-child(2){animation:loop-spark-r .65s ease-out both}
.reveal-blob[open] .reveal-mark i:nth-child(3){animation:loop-spark-l .65s ease-out both}
@keyframes loop-unlock{45%{transform:scale(1.3) rotate(200deg);filter:drop-shadow(0 0 12px var(--cyan-bright))}
  100%{transform:scale(.92) rotate(360deg)}}
@keyframes loop-spark-r{100%{opacity:0;transform:translate(26px,-20px) scale(1.8) rotate(180deg)}}
@keyframes loop-spark-l{100%{opacity:0;transform:translate(-22px,20px) scale(1.8) rotate(-180deg)}}

/* — skin B: the paper card that opens in from the right — */
.reveal-side>summary{width:min(360px,100%);margin:-116px 6px 0 auto;padding:18px 20px;justify-content:space-between;
  border-color:var(--line2);border-radius:22px 52px 22px 52px;background:var(--paper);
  box-shadow:7px 7px 0 var(--violet),var(--shadow)}
.reveal-side>summary:hover{transform:translate(-4px,-2px);box-shadow:10px 9px 0 var(--violet),var(--shadow)}
.reveal-side[open]>summary{margin-bottom:30px}
.reveal-side .reveal-copy small{color:var(--coral)}
.reveal-side .reveal-mark i{color:var(--violet)}
.reveal-side[open] .reveal-mark i:first-child{animation:loop-unlock .7s cubic-bezier(.2,.8,.2,1) both}

/* 7. the four-step build path */
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.reveal-blob[open] .steps{animation:steps-open .7s cubic-bezier(.17,.84,.27,1) both;transform-origin:top right}
@keyframes steps-open{from{opacity:0;clip-path:inset(0 0 100% 0 round 14px);transform:translateY(-26px) scale(.97)}
  to{opacity:1;clip-path:inset(0 0 0 0 round 14px);transform:none}}
.steps article{min-height:236px;padding:24px;border:1px solid var(--line);border-radius:14px;background:var(--surface);
  transition:transform .18s ease,box-shadow .18s ease}
.steps article:nth-child(even){margin-top:26px}
.steps article:hover{transform:translate(-1px,-4px);box-shadow:6px 6px 0 var(--lime-bright)}
.steps article>span{font:600 13px var(--mono);color:var(--coral)}
.steps h3{margin:54px 0 10px;font-size:22px}
.steps p{margin:0;color:#635f4f;font-size:14px}

/* 8. the results list behind the side reveal */
.results{margin:0;padding:0;list-style:none}
.reveal-side[open] .results{animation:results-open .65s cubic-bezier(.2,.76,.25,1) both}
@keyframes results-open{from{opacity:0;clip-path:inset(0 0 0 100%);transform:translateX(50px)}
  to{opacity:1;clip-path:inset(0);transform:none}}
.results li{padding:20px 0;border-bottom:1px solid var(--line)}
.results li:last-child{border-bottom:0}
.results b{display:block;font:650 21px var(--serif);margin-bottom:5px}
.results span{color:#635f4f;font-size:14.5px}
.results li:nth-child(3n+1) b{color:var(--lime2)}
.results li:nth-child(3n+2) b{color:var(--cyan)}
.results li:nth-child(3n) b{color:var(--violet)}

/* 9. the session format — the one dark band on the page, and the only place
   the bench colour shows up full width. Press ↻, the flask runs the bench. */
.format{padding:92px 0;position:relative;overflow:hidden;color:#f2e8c9;border-top:1px solid var(--line);
  background:radial-gradient(circle at 12% 16%,rgba(233,188,62,.16),transparent 26%),
    repeating-linear-gradient(135deg,rgba(255,255,255,.03) 0 2px,transparent 2px 25px),
    linear-gradient(135deg,#242219,#181710 74%)}
.format::before{content:"↻";position:absolute;right:-50px;top:-160px;color:rgba(255,255,255,.05);
  font:600 400px var(--mono);transform:rotate(14deg);pointer-events:none}
.format .shell{position:relative;z-index:1}
.format .section-num{color:var(--lime-bright)}
.format h2{color:#fff9e8}
.format .section-intro{color:#d8cda9}
.format-box{margin-top:40px;padding:30px;border:1px solid rgba(233,188,62,.22);border-radius:16px;
  background:rgba(24,23,16,.8);box-shadow:8px 8px 0 rgba(179,138,25,.18);font:500 14px/1.6 var(--mono)}
.format-launcher{height:70px;position:relative}
.format-track{height:2px;position:absolute;top:33px;right:0;left:0;
  background:repeating-linear-gradient(90deg,#73602a 0 16px,transparent 16px 24px)}
.format-play{width:64px;height:64px;padding:0;position:relative;z-index:2;display:grid;place-items:center;align-content:center;
  border:1px solid var(--lime);border-radius:42% 58% 52% 48%/55% 43% 57% 45%;color:var(--ink);
  background:linear-gradient(145deg,var(--lime-bright),#b38a19);box-shadow:0 10px 26px rgba(233,188,62,.3);
  cursor:pointer;transition:transform .8s cubic-bezier(.2,.72,.25,1),opacity .3s}
.format-play span{font:600 25px/1 var(--mono)}
.format-play small{font:700 9px var(--mono);letter-spacing:.12em;text-transform:uppercase}
.format.is-running .format-play{transform:translateX(var(--run,0px)) rotate(720deg);opacity:.18}
.format-points{margin:24px 0 0;padding:0;display:grid;gap:11px;list-style:none}
.format-points li{padding:15px 17px 15px 42px;position:relative;border:1px solid rgba(255,255,255,.09);
  border-radius:10px;color:#f2e8c9;background:rgba(255,255,255,.04)}
.format-points li::before{content:">";position:absolute;left:17px;color:var(--lime-bright);font-weight:700}
.format-points li[hidden]{display:none}
.format-points li.is-revealed{animation:format-line .45s ease both}
@keyframes format-line{from{opacity:0;transform:translateX(-16px)}to{opacity:1;transform:none}}
.format-progress{height:32px;margin-top:22px;position:relative;border-bottom:2px dashed #73602a;--run-at:0%}
.format-progress span{position:absolute;left:var(--run-at);bottom:-9px;font-size:23px;transform:translateX(-50%);
  transition:left .75s ease}
.format-cta{margin-top:30px;border-color:var(--lime-bright)}
.format-cta[hidden]{display:none}

/* 10. FAQ accordions — the old numbered sections 02 to 05, folded up.
   Native <details>, so with JS off every answer is one click away. */
.faq{margin-top:34px;display:grid;gap:12px}
.faq>details{border:1px solid var(--line);border-radius:14px;background:var(--surface);overflow:hidden;
  transition:box-shadow .16s ease,border-color .16s ease}
.faq>details[open]{border-color:var(--line2);box-shadow:6px 6px 0 var(--lime-bright),var(--shadow)}
.faq summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:16px;padding:20px 24px;
  font:650 clamp(20px,2.4vw,26px)/1.2 var(--serif);letter-spacing:-.02em}
.faq summary::-webkit-details-marker{display:none}
.faq summary::marker{content:""}
.faq summary:hover{background:rgba(233,188,62,.07)}
.faq-no{flex:0 0 auto;font:600 11px var(--mono);color:var(--coral);letter-spacing:.12em;padding-top:6px}
.faq-sign{flex:0 0 auto;margin-left:auto;width:30px;height:30px;display:grid;place-items:center;border-radius:50%;
  border:1px solid var(--line2);color:var(--lime2);font:600 16px/1 var(--mono);transition:transform .2s ease,background .2s ease}
.faq>details[open] .faq-sign{background:var(--lime-bright);border-color:var(--lime);transform:rotate(180deg)}
.faq-body{padding:0 24px 26px;border-top:1px solid var(--line)}
.faq-body>.section-intro{margin-top:20px}
.faq>details[open] .faq-body{animation:faq-open .3s ease both}
@keyframes faq-open{from{opacity:0;transform:translateY(-7px)}to{opacity:1;transform:none}}

@media (prefers-reduced-motion:reduce){
  .reveal-blob[open] .reveal-mark i,.reveal-side[open] .reveal-mark i,
  .reveal-blob[open] .steps,.reveal-side[open] .results,
  .format-points li.is-revealed,.faq>details[open] .faq-body{animation:none}
  .format.is-running .format-play{transition:none}
  .format-progress span{transition:none}
}

@media (max-width:900px){
  .steps{grid-template-columns:1fr 1fr}
  .reveal-blob>summary{width:100%;margin:26px 0 0;border-radius:24px 58px 24px 58px;transform:none}
  .reveal-side>summary{margin:26px 0 0}
  .reveal-blob>summary:hover{transform:translateY(-3px)}
  .reveal-side>summary{width:100%}
  .format{padding:66px 0}
  .format-box{padding:22px 16px}
}
@media (max-width:620px){
  .steps{grid-template-columns:1fr}
  .steps article,.steps article:nth-child(even){min-height:0;margin-top:0}
  .steps h3{margin-top:32px}
  .faq summary{padding:16px 18px;gap:12px}
  .faq-body{padding:0 18px 22px}
  .format-points li{padding-left:36px;font-size:13px}
  .format-points li::before{left:14px}
}
