.stage{--stage-ink:#141413;--stage-code:#1d1d1b;--stage-code-ink:#e8e6dc;--stage-key:#c9c5b5;--stage-str:#b9d1c2;--stage-num:#e7c08f;--stage-up:#f0a58b;margin-top:clamp(28px,4vw,48px)}
.stage-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;border-top:1px solid var(--line)}
.stage-tabs button{position:relative;padding:14px 0 0;border:0;background:none;font:inherit;font-size:14px;text-align:left;color:var(--muted);cursor:pointer;transition:color .15s}
.stage-tabs:has(button:hover) button:not(:hover){opacity:.55}
.stage-tabs button[aria-selected=true]{color:var(--ink)}
.stage-tab-bar{position:absolute;top:-1px;left:0;height:2px;width:100%;background:var(--ink);transform:scaleX(0);transform-origin:left}
.stage-tabs button[aria-selected=true] .stage-tab-bar{transform:scaleX(var(--progress,1))}
.stage-stack{margin-top:20px}
.stage-scene{display:grid;grid-template-columns:minmax(0,1fr) 48px minmax(0,1.3fr);grid-template-areas:"src arrow res" "check check check" "note note note";row-gap:14px;align-items:stretch}
.stage-source{grid-area:src}.stage-arrow{grid-area:arrow}.stage-result{grid-area:res}.stage-check{grid-area:check}.stage-note{grid-area:note}
.stage-card{position:relative;border:1px solid var(--line);border-radius:14px;background:#fff;padding:18px;min-height:340px;overflow:hidden}
.stage-result{background:var(--stage-code);border-color:var(--stage-code);color:var(--stage-code-ink)}
.stage-eyebrow{margin:0 0 12px;font-size:12px;letter-spacing:.04em;color:var(--muted)}
.stage-result .stage-eyebrow{color:#9c998d}
.stage-arrow{position:relative}
.stage-arrow::before{content:"";position:absolute;top:50%;left:8px;right:8px;height:1px;background:var(--line)}
.stage-arrow::after{content:"";position:absolute;top:calc(50% - 3px);left:8px;width:7px;height:7px;border-radius:50%;background:var(--ink);opacity:0}
.stage.is-running .stage-scene:not([hidden]) .stage-arrow::after{animation:stage-travel 1.6s ease-in-out infinite}
@keyframes stage-travel{0%{left:8px;opacity:0}20%{opacity:1}80%{opacity:1}100%{left:calc(100% - 15px);opacity:0}}
.stage-pages{position:relative;padding:0 12% 14% 0}
.stage-page{position:relative;margin:0}
.stage-page+.stage-page{position:absolute;left:12%;top:14%;right:0;box-shadow:0 14px 34px rgba(20,20,19,.16)}
.stage-page img{display:block;width:100%;height:auto;border:1px solid var(--line);border-radius:6px;background:#fff}
.stage-page figcaption{position:absolute;right:8px;bottom:8px;padding:1px 6px;border-radius:4px;background:rgba(255,255,255,.9);font:12px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
.stage-file{margin:0 0 10px;font-size:13px;color:var(--muted)}
.stage-timeline{list-style:none;margin:0;padding:0 0 0 18px;border-left:1px solid var(--line);display:grid;gap:10px}
.stage-timeline li{position:relative}
.stage-timeline li::before{content:"";position:absolute;left:-23px;top:6px;width:9px;height:9px;border-radius:50%;background:var(--paper);border:1px solid var(--ink)}
.stage-timeline strong{font-size:14px}
.stage-timeline p{margin:2px 0 0;font-size:13px;line-height:1.55;color:var(--muted);white-space:pre-line}
.stage-cases{display:grid;gap:12px}
.stage-case{display:grid;grid-template-columns:1fr auto;gap:6px 12px;padding:12px;border:1px solid var(--line);border-radius:10px}
.stage-case-text{margin:0;font-size:14px;line-height:1.6}
.stage-case-reason{grid-column:1/-1;margin:0;font-size:13px;color:var(--muted)}
.stage-level{align-self:start;padding:2px 10px;border-radius:999px;font:600 13px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;border:1px solid var(--ink)}
.stage-level-l1{background:var(--ink);color:var(--paper)}
.stage-code{margin:0;font:12px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:pre-wrap;word-break:break-word;overflow:auto;max-height:300px;scrollbar-width:thin;scrollbar-color:#4a4944 transparent}
.stage-code code{font:inherit}
.stage-code-tall{max-height:380px}
#stage-report .stage-code-tall{font-size:11.5px}
.stage-code-free{max-height:none}
.stage-line{display:block;padding-left:calc(var(--d,0) * 1.2em + 1.2em);text-indent:-1.2em}
.j-k{color:var(--stage-key)}.j-s{color:var(--stage-str)}.j-n{color:var(--stage-num)}
.j-up,.j-up .j-k,.j-up .j-n{color:var(--stage-up)}
.stage-code-small{max-height:200px}
.stage-sub{margin:0 0 8px;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;color:#9c998d}
.stage-sub+.stage-code{margin-top:0}
.stage-calls+.stage-sub{margin-top:14px}
.stage-calls{list-style:none;margin:0;padding:0;display:grid;gap:8px;counter-reset:call}
.stage-calls li{position:relative;padding:0 0 0 22px;font:12px/1.65 ui-monospace,SFMono-Regular,Menlo,monospace;counter-increment:call}
.stage-calls li::before{content:counter(call);position:absolute;left:0;top:1px;width:15px;height:15px;border:1px solid #6b6a63;border-radius:50%;font-size:10px;line-height:15px;text-align:center;color:var(--stage-key)}
.stage-call-name{display:block;color:var(--stage-key)}
.stage-calls code{display:block;font:inherit;white-space:pre-line;color:var(--stage-code-ink)}
.stage-doc{display:grid;gap:2px}
.stage-doc-label{margin:10px 0 0;font-size:12px;letter-spacing:.04em;color:var(--muted)}
.stage-doc-label:first-child{margin-top:0}
.stage-doc-text{margin:0;padding:8px 10px;border-left:2px solid var(--ink);background:#f6f5f0;font-size:13px;line-height:1.65;white-space:pre-line}
.stage-check{margin:0;font-size:14px}
.stage-note{margin:0;font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
/* reveal: only when the script is running; without it every step is visible */
.stage.is-animated [data-step]{opacity:0;transform:translateY(4px);transition:opacity .2s ease,transform .2s ease}
.stage.is-animated [data-step].is-on{opacity:1;transform:none}
.stage.is-animated .stage-level.is-on{animation:stage-stamp .3s ease}
@keyframes stage-stamp{0%{transform:scale(1.25);opacity:0}100%{transform:none;opacity:1}}
@media (max-width:767px){
  .stage-tabs{grid-template-columns:repeat(2,minmax(0,1fr))}
  .stage-scene{grid-template-columns:minmax(0,1fr);grid-template-areas:"src" "arrow" "res" "check" "note"}
  .stage-arrow{height:28px}.stage-arrow::before{top:4px;bottom:4px;left:50%;right:auto;width:1px;height:auto}.stage-arrow::after{display:none}
  .stage-card{min-height:0}
}
@media (prefers-reduced-motion:reduce){.stage *{animation:none!important;transition:none!important}}

.hero-claim{max-width:30em;font:400 clamp(28px,3.2vw,42px)/1.25 var(--serif);letter-spacing:-.01em;margin:0}
.hero-claim .quiet{color:#8a8a84}
.hero-claim .ph{white-space:nowrap}
@media (max-width:767px){.hero-claim .quiet .ph{white-space:normal}}
/* home sections below the stage */
.claim-hero{padding-top:clamp(40px,6vw,88px)}
.section-title{font:400 clamp(26px,2.6vw,36px)/1.25 var(--serif);letter-spacing:-.01em;margin:0 0 28px}
.gen-steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;border-top:1px solid var(--line)}
.gen-steps li{margin:0;padding:20px 20px 24px 0;border-right:1px solid var(--line);transition:opacity .15s}
.gen-steps li+li{padding-left:20px}.gen-steps li:last-child{border-right:0}
.gen-steps:has(li:hover) li:not(:hover){opacity:.45}
.gen-no{font:13px/1 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
.gen-steps h3{margin:14px 0 8px;font-size:18px;font-weight:600}
.gen-steps p{margin:0;font-size:15px;line-height:1.6;color:var(--muted)}
.gen-steps li:nth-child(2) h3,.gen-steps li:nth-child(2) .gen-no{opacity:.85}
.gen-coda{margin:24px 0 0;font:400 18px/1.5 var(--serif);color:var(--muted)}
.home-map{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px}
.map-region h3{display:flex;justify-content:space-between;align-items:baseline;margin:0 0 10px;padding-bottom:10px;border-bottom:1px solid var(--ink);font-size:17px}
.map-region h3 a{color:inherit;text-decoration:none}
.map-rows{display:grid}
.map-rows a{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);color:var(--ink);text-decoration:none;font-size:15px;transition:opacity .15s}
.map-rows:has(a:hover) a:not(:hover){opacity:.45}
.map-count{font:13px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
@media (max-width:767px){.gen-steps{grid-template-columns:1fr}.gen-steps li{border-right:0;border-bottom:1px solid var(--line);padding-left:0!important}.home-map{grid-template-columns:1fr}}
.home-task{display:grid;grid-template-columns:minmax(0,.7fr) minmax(0,1.3fr);gap:40px;align-items:start;padding-top:32px;padding-bottom:64px}
.home-task h2{margin:0;font:400 22px/1.4 var(--serif)}
.home-task h2 a{text-decoration:none;border-bottom:1px solid var(--line)}
.home-task .available-files>p{display:none}
.home-task .file-badges{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.home-task .file-badges li{display:grid;grid-template-columns:1fr auto;align-items:baseline;margin:0;border-bottom:1px solid var(--line);transition:opacity .15s}
.home-task .file-badges:has(li:hover) li:not(:hover){opacity:.5}
.home-task .file-badges a{display:grid;grid-template-columns:52px 1fr auto auto;gap:14px;align-items:baseline;padding:12px 0;font-size:15px;text-decoration:none}
.home-task .file-type,.home-task .file-size{font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
.home-task .file-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.home-task .file-source{display:inline;margin:0 0 0 14px;padding:0;border:0;background:none;font-size:12px;color:var(--muted)}
@media (max-width:767px){
  .home-task{grid-template-columns:1fr;gap:14px;padding-bottom:48px}
  .home-task .file-badges a{grid-template-columns:44px minmax(0,1fr) auto;gap:10px;font-size:14px}
  .home-task .file-badges a>span:last-child{display:none}
  .home-task .file-badges li{grid-template-columns:1fr}
  .home-task .file-source{margin:0 0 10px 54px}
  .hero-claim{font-size:24px;line-height:1.45}
}
@media (min-width:768px) and (max-width:1023px){
  .gen-steps{grid-template-columns:repeat(2,minmax(0,1fr))}
  .gen-steps li{border-bottom:1px solid var(--line)}
  .gen-steps li:nth-child(2n){border-right:0}
  .gen-steps li:nth-child(3){padding-left:0}
  .home-task{grid-template-columns:1fr;gap:18px}
}

.home-task .file-badges li{margin:0}

/* life: a caret after the newest line, lines sliding in, report pages breathing */
.stage.is-animated .stage-line{transform:translateX(-6px);transition:opacity .28s ease,transform .32s cubic-bezier(.2,0,0,1)}
.stage.is-animated .stage-line.is-on{transform:none}
.stage.is-animated .stage-code .stage-line.is-on:not(:has(~ .stage-line.is-on))::after{content:"";display:inline-block;width:.55em;height:1.05em;margin-left:2px;vertical-align:-.15em;background:var(--stage-key);animation:stage-caret 1s steps(2,start) infinite}
@keyframes stage-caret{to{opacity:0}}
.stage.is-animated .stage-page img{transform-origin:40% 30%;animation:stage-breathe 18s ease-in-out infinite alternate}
.stage.is-animated .stage-page+.stage-page{transform:translate(10px,10px) rotate(.4deg);transition:transform .9s cubic-bezier(.2,0,0,1),opacity .6s ease}
.stage.is-animated .stage-page+.stage-page.is-on{transform:none}
@keyframes stage-breathe{from{transform:scale(1)}to{transform:scale(1.035)}}
.stage.is-animated .stage-term code,.stage.is-animated .stage-task code{display:block;transform:translateY(6px);transition:transform .5s cubic-bezier(.2,0,0,1)}
.stage.is-animated [data-step].is-on code{transform:none}
.stage.is-running .stage-tabs button[aria-selected=true] .stage-tab-bar{transition:transform .2s linear}
/* home task: brief and inputs on the left, reference files and marking scheme on the right */
.home-task{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-areas:"head head" "input output";column-gap:56px;row-gap:32px;padding-top:40px}
.home-task .task-head{grid-area:head}.home-task .task-input{grid-area:input}.home-task .task-output{grid-area:output}
.home-task .task-lede{margin:10px 0 0;font-size:15px;color:var(--muted)}
.task-label{margin:0 0 10px;font:500 12px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.06em;color:var(--muted)}
.task-col .task-label:not(:first-child){margin-top:28px}
.task-brief{margin:0;font-size:15px;line-height:1.85}
.task-sub{margin:0 0 10px;font-size:14px;color:var(--muted)}
.task-sources{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.task-sources li{display:grid;grid-template-columns:minmax(0,1fr);gap:4px;margin:0;padding:12px 0;border-bottom:1px solid var(--line);font-size:14px;line-height:1.7}
.task-sources .task-doc{font-weight:600}.task-sources .task-loc{font-size:12px;color:var(--muted)}
.task-sources q{quotes:"“" "”";font-family:var(--serif)}
.task-rubric{list-style:none;margin:0;padding:0;border-top:1px solid var(--line);counter-reset:rubric}
.task-rubric li{counter-increment:rubric;margin:0;padding:12px 0 12px 34px;border-bottom:1px solid var(--line);position:relative;font-size:14px;line-height:1.7}
.task-rubric li::before{content:counter(rubric,decimal-leading-zero);position:absolute;left:0;top:14px;font:12px/1.7 ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
.task-rubric strong{display:block;font-weight:600;margin-bottom:4px}.task-rubric p{margin:0;color:var(--muted)}
.home-task .text-link{margin-top:18px}
@media (max-width:1023px){.home-task{grid-template-columns:1fr;grid-template-areas:"head" "input" "output";row-gap:28px}}
/* generations: each card opens the catalogue filtered to that generation */
.home-generations .gen-steps li{padding:0}.home-generations .gen-steps li+li{padding-left:0}
.home-generations .gen-steps li>a{display:flex;flex-direction:column;height:100%;padding:22px 20px 22px 0;color:inherit;text-decoration:none;transition:background .2s}
.home-generations .gen-steps li+li>a{padding-left:20px}
.home-generations .gen-steps li>a:hover{background:rgba(20,20,19,.035)}
.home-generations .gen-steps .gen-more{margin-top:auto;padding-top:20px;font-size:13px;color:var(--muted);transition:color .15s}
.home-generations .gen-steps li>a:hover .gen-more{color:var(--ink)}
.home-generations .gen-steps li>a:hover h3{text-decoration:underline;text-underline-offset:5px;text-decoration-thickness:1px}
@media (max-width:767px){.gen-steps li>a,.home-generations .gen-steps li+li>a{padding-left:0}}
