/* /tools/ramp-planner/: the line-month cloth carried through eleven states.
   Act I night (splash night, bench deep, delay forest) · Act II paper (compare paper, ledger mist, method paper) ·
   Act III night (interlude night, readers forest, boundary deep, register forest, closing night).
   HTML is the composed end state; pre-states only under :root[data-m-go] once film.ts arms the page. */
.rp-root,.rp-splash{--rp-night:#072d2b;--rp-deep:#0a3d3a;--rp-forest:#0e4d4a;--rp-paper:#f6f4ef;--rp-mist:#e9eeed;--rp-sage:#6bb68f;--rp-ochre:#c98a2b;--rp-gold:#f0c986;--rp-txt:#e3efe8;--rp-txt2:#cfe3d8;--rp-ink:#072d2b;--rp-ink2:#33473f;--rp-ink0:#3f8f6b;--rp-ink1:#0e4d4a;--rp-ink2c:#9a6418;--rp-ink3:#3d4f96;--rp-mono:var(--gft-font-mono);--rp-out:cubic-bezier(.16,1,.3,1);timeline-scope:--rp-delayv,--rp-cmpv,--rp-ledv,--rp-boundv,--rp-fieldv,--rp-closev,--rp-pullv,--rp-seamv,--rp-selv}
.rp-root{--rp-ink3c:#3d4f96}
.rp-root [data-rp-results][hidden]{display:none!important}
.rp-sec{position:relative;isolation:isolate;overflow-x:clip;color:var(--rp-txt2);font-size:17px;line-height:1.6}
.rp-sec::before{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;background-image:linear-gradient(#d6efe40c 1px,transparent 1px),linear-gradient(90deg,#d6efe40c 1px,transparent 1px);background-size:96px 96px}
.rp-sec[data-tone=night]{background:var(--rp-night);color:var(--rp-txt)}
.rp-sec[data-tone=deep]{background:var(--rp-deep)}
.rp-sec[data-tone=forest]{background:var(--rp-forest)}
.rp-sec[data-tone=paper]{background:var(--rp-paper);color:var(--rp-ink)}
.rp-sec[data-tone=mist]{background:var(--rp-mist);color:var(--rp-ink)}
.rp-sec:is([data-tone=paper],[data-tone=mist])::before{background-image:linear-gradient(#0e4d4a0a 1px,transparent 1px),linear-gradient(90deg,#0e4d4a0a 1px,transparent 1px)}
.rp-sec h2{font-size:clamp(2rem,3.4vw,3.25rem);line-height:1.05;letter-spacing:-.045em;color:inherit;max-width:18ch}
:root[data-m-go] .rp-sec h2[data-m=split][data-m-in] .m-c{animation-duration:210ms}
:root[data-m-go] .rp-cmp [data-m=split][data-m-fx=blur]:not([data-m-in]) .m-c{translate:0 .1em;opacity:.45;filter:blur(3px)}
:root[data-m-go] .rp-cmp [data-m=split][data-m-fx=blur][data-m-in] .m-c{animation-duration:180ms}
.rp-sec:is([data-tone=night],[data-tone=deep],[data-tone=forest]) h2{color:#f6f4ef}
.rp-sec .gft-eyebrow{font-size:13px;letter-spacing:.08em;margin-bottom:16px}
.rp-sec:is([data-tone=night],[data-tone=deep],[data-tone=forest]) .gft-eyebrow{color:var(--rp-gold)}
.rp-sec:is([data-tone=paper],[data-tone=mist]) .gft-eyebrow{color:#7a4e12}
.rp-sec p{max-width:none}
.rp-sec output{font-variant-numeric:tabular-nums}
.rp-sec button{font:inherit}

/* ---------------------------------------------------------------- shared cloth, stack, axis, selvedge, gates */
.rp-cl,.rp-st,.rp-staff{display:block;width:100%;height:100%;overflow:hidden}
.rp-cl__warp{fill:none;stroke:#cfe3d82e;stroke-width:1;vector-effect:non-scaling-stroke}
.rp-cl__zone{fill:#c98a2b14}
.rp-cl__fringe path{fill:#e0a54a}
.rp-cl__def{fill:none;stroke:#f0c986;stroke-width:1.4;stroke-dasharray:5 4;vector-effect:non-scaling-stroke}
.rp-cl__core{stroke:#f0c986;stroke-width:2;vector-effect:non-scaling-stroke}
.rp-cl__band{transform-box:fill-box;transform-origin:0 50%}
.rp-st__grid{fill:none;stroke:#cfe3d81c;stroke-width:1;vector-effect:non-scaling-stroke}
.rp-st__a{fill-opacity:.72}
.rp-st__edge{fill:none;stroke:#f6f4ef;stroke-width:1.6;vector-effect:non-scaling-stroke}
.rp-st__ghost{fill:none;stroke:#f6f4ef;stroke-width:2;stroke-dasharray:7 6;vector-effect:non-scaling-stroke;opacity:.85}
.rp-st__gap{fill-opacity:.34}.rp-st__gap[data-up=true]{fill:#3f8f6b}.rp-st__gap[data-up=false]{fill:#c98a2b}
.rp-staff__core{fill:none;stroke:#f0c986;stroke-width:2;stroke-dasharray:6 5;vector-effect:non-scaling-stroke}
.rp-staff__step{fill:none;stroke:#f0c986;stroke-width:2.4;vector-effect:non-scaling-stroke}
.rp-ax,.rp-sv,.rp-gt,.rp-dfc{display:grid;grid-template-columns:repeat(var(--cols,18),minmax(0,1fr))}
.rp-ax span{font:500 13.5px/1.4 var(--rp-mono);letter-spacing:.04em;text-align:center;color:inherit;white-space:nowrap;padding-top:4px}
.rp-ax .rp-ax__lost{grid-column:span 3;color:var(--rp-gold)}
.rp-sv{height:12px;align-items:end}
.rp-sv i{display:block;height:100%;position:relative}
.rp-sv i[data-on]::before{content:'';position:absolute;left:calc(50% - 2px);bottom:0;width:4px;height:12px;background:var(--rp-ochre);transform-origin:50% 100%}
.rp-gt{height:100%;align-items:center}
.rp-gt i{grid-row:1;grid-column-start:calc(var(--m) + 1);display:flex;justify-content:center;align-items:center;gap:4px;position:relative}
.rp-gt i::before{content:'';width:12px;height:12px;background:var(--rp-ochre);transform:rotate(45deg)}
.rp-gt b{font:700 14px/1 var(--rp-mono);color:var(--rp-gold)}
.rp-dfc{position:absolute;inset:0;pointer-events:none}
.rp-dfc i[data-on]{background:repeating-linear-gradient(135deg,#c98a2b55 0 3px,transparent 3px 8px)}
.rp-shut{display:block;position:absolute;left:50%;top:0;bottom:0;width:2px;margin-left:-1px;background:linear-gradient(#f0c986,#f0c98633)}
.rp-shut__d{display:block;position:absolute;left:50%;width:16px;height:16px;margin-left:-8px;background:var(--rp-ochre);transform:rotate(45deg);box-shadow:0 0 0 3px #072d2b}
.rp-dia{width:10px;height:10px;fill:var(--rp-ochre)}

/* ---------------------------------------------------------------- 1 · splash (night) */
.rp-splash{min-height:calc(100svh - 88px)}
.rp-splash__ground{background:var(--rp-night)}
.rp-splash__mesh{background-image:linear-gradient(#d6efe412 1px,transparent 1px),linear-gradient(90deg,#d6efe412 1px,transparent 1px);background-size:96px 96px;overflow-anchor:none}
.rp-splash__grid{flex:1;display:grid;grid-template-columns:minmax(0,38fr) minmax(0,62fr);gap:clamp(24px,3vw,48px);align-items:stretch;padding-block:clamp(16px,3svh,36px) 12px}
.rp-splash__content{padding:0;align-self:center}
.rp-splash .rp-h1{font-size:clamp(3rem,5vw,4.5rem);max-width:none;margin-top:24px;line-height:1.02;letter-spacing:-.055em}
.rp-splash .rp-h1__acc{font-size:.89em;color:var(--rp-sage);line-height:1.12}
.rp-splash__lede{font-size:18px;line-height:1.6;max-width:38ch;color:var(--rp-txt);margin-top:22px}
.rp-splash__actions{display:grid;gap:18px;margin-top:26px;justify-items:start}
.rp-splash__read{font:15px/1.5 var(--rp-mono);color:var(--rp-txt2);letter-spacing:.02em;margin:0}
.rp-splash__read span{display:block;font-size:13px;letter-spacing:.08em;text-transform:uppercase;color:var(--rp-gold)}
.rp-splash__read output{font-size:28px;font-weight:600;color:#f6f4ef;letter-spacing:-.02em}
.rp-splash__stage{position:relative;height:calc(100svh - 88px - var(--splash-strip-h,70px) - 52px);min-height:440px;max-height:860px;display:flex}
.rp-splash__bottom{border-top-color:#a3c8b333;display:flex;align-items:center;justify-content:space-between;gap:16px}
.rp-splash .gft-splash__cue,.rp-splash .gft-splash__caption{font-size:13.5px;color:var(--rp-txt2)}
.rp-splash__handover{display:flex;align-items:center;gap:12px;padding:4px 12px;border:1px solid #6bb68f4d;background:#0a3d3a99}
.rp-splash__htxt{font:12.5px/1.3 var(--rp-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--rp-gold);white-space:nowrap}
.rp-splash__hloom{position:relative;display:grid;grid-template-columns:repeat(4,24px);gap:3px;height:10px;align-items:center}
.rp-splash__hloom i{display:block;height:6px;background:#6bb68f}
.rp-splash__hloom i:nth-child(1){background:#b6dfc8}.rp-splash__hloom i:nth-child(3){background:#c98a2b}.rp-splash__hloom i:nth-child(4){background:#a3b4f1}
.rp-splash__hshut{position:absolute;left:50%;top:-2px;width:8px;height:14px;margin-left:-4px;background:var(--rp-gold);transform:rotate(45deg) scale(.75)}
.rp-sp{flex:1;min-height:0;outline-offset:6px;display:flex;color:var(--rp-txt2);cursor:crosshair}
.rp-sp__move{flex:1;display:grid;grid-template-rows:auto minmax(0,48fr) 30px 14px minmax(0,40fr) 24px;grid-template-columns:minmax(0,1fr);position:relative;min-height:0}
.rp-sp__label{grid-row:1;grid-column:1;display:flex;justify-content:space-between;gap:16px;font:600 14px/1.4 var(--rp-mono);letter-spacing:.07em;text-transform:uppercase;color:var(--rp-txt);padding-bottom:10px}
.rp-sp__stack{grid-row:2;grid-column:1;position:relative;min-height:0}
.rp-sp__svw{grid-row:4;grid-column:1}.rp-sp__ax{grid-row:6;grid-column:1}
.rp-sp__flag{position:absolute;left:0;top:6px;display:grid;gap:2px;padding:10px 14px;background:#072d2bf0;border:1.5px solid #6bb68f99;font:16px/1.4 var(--rp-mono);color:var(--rp-txt);width:min(310px,48%)}
.rp-sp__reel{font:700 25px/1.1 var(--rp-mono);color:var(--rp-gold)}
.rp-sp__beam{grid-row:3;grid-column:1;border-bottom:1px solid #6bb68f80;position:relative}
.rp-sp__cloth{grid-row:5;grid-column:1;position:relative;min-height:0}
.rp-sp__glow{position:absolute;top:0;bottom:0;left:0;width:calc(100% / 18);background:linear-gradient(#f0c98626,#f0c98614);transform:translateX(calc(var(--m) * 100%));transition:transform .26s var(--rp-out);pointer-events:none}
.rp-sp__ax{color:var(--rp-txt2)}
.rp-sp__run{grid-row:2/6;grid-column:1;position:relative;width:calc(100% / 18);transform:translateX(calc(var(--m) * 100%));transition:transform .26s var(--rp-out);pointer-events:none;display:grid;grid-template-rows:subgrid}
.rp-sp__run .rp-shut{grid-row:1/-1}
.rp-sp__run .rp-shut__d{grid-row:2;align-self:center;position:relative;top:auto}
/* splash entrance (time-based from first paint): warp draws down, the shuttle picks column by column, the stack rises
   behind it, the selvedge stamps */
:root[data-m-go] .rp-sp__cl .rp-cl__warp{transform-box:fill-box;transform-origin:50% 0;animation-name:rp-warp;animation-duration:260ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-sp__cl .rp-cl__band{animation-name:rp-pick;animation-duration:630ms;animation-delay:150ms;animation-timing-function:steps(18,end);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-sp__stack svg{animation-name:rp-rise-cols;animation-duration:630ms;animation-delay:190ms;animation-timing-function:steps(18,end);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-sp__run{animation-name:rp-run;animation-duration:630ms;animation-delay:150ms;animation-timing-function:steps(17,end);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-sp__sv i[data-on]::before{animation-name:rp-stamp;animation-duration:200ms;animation-delay:calc(700ms + (var(--i) - 5) * 14ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-sp__gates i{animation-name:rp-pop;animation-duration:280ms;animation-delay:calc(260ms + var(--k) * 90ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-sp__flag{animation-name:rp-fade-up;animation-duration:320ms;animation-delay:620ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-splash .rp-h1 .rp-h1__acc .m-c{animation-name:rp-track;animation-timing-function:cubic-bezier(.19,1,.22,1);transform-origin:50% 100%}
:root[data-m-go] .rp-sp__svw[data-m-on]{animation-name:rp-breathe;animation-duration:3.6s;animation-delay:1s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
@keyframes rp-warp{from{transform:scaleY(0);opacity:.2}}
@keyframes rp-pick{from{transform:scaleX(0)}}
@keyframes rp-rise-cols{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
@keyframes rp-run{from{transform:translateX(0)}to{transform:translateX(1700%)}}
@keyframes rp-stamp{from{transform:scaleY(0)}}
@keyframes rp-pop{from{transform:scale(.2);opacity:0}}
@keyframes rp-fade-up{from{transform:translateY(10px);opacity:0}}
@keyframes rp-track{from{opacity:0;transform:scaleX(.72) translateX(-.2em)}to{opacity:1;transform:none}}
@keyframes rp-breathe{from{opacity:1}to{opacity:.62}}
/* hand-over 1 → 2: the stage compresses as the splash leaves and the shuttle settles on M9 */
@supports (animation-timeline:view()){
 :root[data-m-go] .rp-sp__move{transform-origin:50% 100%;animation-name:rp-sp-exit;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--gft-splash;animation-range-start:exit 0%;animation-range-end:exit 100%}
}
@keyframes rp-sp-exit{to{transform:translateY(6vh) scale(.86)}}

/* ---------------------------------------------------------------- 2 · bench (deep) */
.rp-bench{padding-block:0 clamp(56px,8svh,96px)}
.rp-bench__handover{display:grid;grid-template-columns:minmax(0,40fr) minmax(0,60fr);gap:clamp(28px,3.2vw,56px);align-items:center;padding-bottom:18px;margin-bottom:18px;border-bottom:1px solid #6bb68f40;pointer-events:none}
.rp-bench__hlead{display:flex;align-items:center;gap:12px;font:13px/1.3 var(--rp-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--rp-gold)}
.rp-bench__hlead i{flex:1;height:1px;background:linear-gradient(90deg,var(--rp-ochre),#6bb68f33)}
.rp-bench__hwarp{position:relative;height:38px;width:calc(1800% / 21);display:grid;align-items:stretch}
.rp-bench__hthreads{display:grid;grid-template-columns:repeat(18,minmax(0,1fr));height:100%}
.rp-bench__hthreads i{justify-self:center;width:1px;height:100%;background:linear-gradient(#f0c98666,#cfe3d833)}
.rp-bench__hbands{position:absolute;left:0;right:0;top:50%;transform:translateY(-50%);display:grid;grid-template-columns:4fr 6fr 6fr 4fr;gap:4px;height:6px;opacity:.85}
.rp-bench__hbands b{display:block;height:100%;background:var(--c)}
.rp-bench__hshut{position:absolute;top:-4px;bottom:-4px;left:0;width:calc(100% / 18);transform:translateX(calc(var(--m) * 100%));transition:transform .32s var(--rp-out)}
.rp-bench__hshut::before{content:'';position:absolute;left:50%;top:0;bottom:0;width:2px;margin-left:-1px;background:var(--rp-gold)}
.rp-bench__hshut::after{content:'';position:absolute;left:50%;top:50%;width:10px;height:10px;margin:-5px 0 0 -5px;background:var(--rp-ochre);transform:rotate(45deg)}
.rp-bench__grid{display:grid;grid-template-columns:minmax(0,40fr) minmax(0,60fr);gap:clamp(28px,3.2vw,56px);align-items:start}
.rp-bench__ctl h2{font-size:clamp(1.9rem,2.7vw,2.6rem);max-width:20ch}
.rp-lede{margin-top:18px;color:var(--rp-txt2)}
.rp-presets{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:22px}
.rp-presets span{font:13px var(--rp-mono);letter-spacing:.08em;text-transform:uppercase;margin-right:6px}
.rp-presets button{min-height:44px;padding:8px 14px;border:1px solid #6bb68f99;background:transparent;color:var(--rp-txt);font-size:15px}
.rp-presets button[aria-pressed=true]{background:var(--rp-sage);color:var(--rp-night);border-color:var(--rp-sage);font-weight:650}
.rp-banner{display:flex;gap:12px;align-items:flex-start;margin-top:18px;padding:14px 16px;border:1px solid #6bb68f55;background:#072d2b80;font-size:15px;line-height:1.55;color:var(--rp-txt2)}
.rp-banner strong{color:var(--rp-txt)}
.rp-dot{flex:none;width:9px;height:9px;margin-top:7px;border-radius:50%;background:var(--rp-ochre)}
.rp-form{margin-top:22px;display:grid;gap:10px}
.rp-fold{border:1px solid #6bb68f4d;background:#072d2b66}
.rp-fold summary{display:flex;justify-content:space-between;align-items:baseline;gap:14px;min-height:52px;padding:12px 16px;cursor:pointer;font-weight:750;font-size:18px;color:#f6f4ef;list-style:none}
.rp-fold summary::-webkit-details-marker{display:none}
.rp-fold summary small{font:13px var(--rp-mono);letter-spacing:.04em;color:var(--rp-txt2);font-weight:400;text-align:right}
.rp-fold summary::after{content:'+';font:400 22px var(--rp-mono);color:var(--rp-gold)}
.rp-fold[open] summary::after{content:'\2212'}
.rp-fold fieldset{border:0;margin:0;padding:4px 16px 16px;min-width:0}
.rp-fold legend{font-size:15px;font-weight:650;color:var(--rp-txt);padding:0;margin-bottom:6px;float:left;width:100%}
.rp-note{font-size:15px;color:var(--rp-txt2);clear:both;margin:4px 0 10px}
.rp-phase-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;clear:both}
.rp-phase{border-top:3px solid var(--rp-phase);padding-top:8px}
.rp-phase h3{font-size:16px;letter-spacing:-.01em;display:flex;gap:8px;color:#f6f4ef}
.rp-phase h3 span{font:13px var(--rp-mono);color:var(--rp-gold);padding-top:2px}
.rp-field{margin-top:8px;clear:both}
.rp-field label{display:flex;justify-content:space-between;gap:8px;font-size:15px;color:var(--rp-txt)}
.rp-field label small{font:13px var(--rp-mono);color:var(--rp-txt2)}
.rp-inputs{display:grid;grid-template-columns:minmax(0,1fr) 92px;gap:10px;align-items:center}
.rp-inputs input[type=range]{width:100%;min-height:44px;accent-color:var(--rp-sage)}
.rp-inputs input[type=number]{min-height:44px;width:100%;padding:6px 8px;border:1px solid #6bb68f80;background:#072d2b;color:#f6f4ef;font:15px var(--rp-mono)}
.rp-inputs input[aria-invalid=true]{border-color:#f0c986;outline:2px solid #f0c986}
.rp-segment{display:flex;gap:8px;margin-top:12px}
.rp-segment label{flex:1;display:flex;align-items:center;gap:8px;min-height:44px;padding:6px 12px;border:1px solid #6bb68f66;font-size:15px;color:var(--rp-txt)}
.rp-reset{min-height:48px;border:1px solid var(--rp-gold);background:transparent;color:var(--rp-gold);font-weight:650;font-size:15px}
.rp-bench__stage{position:sticky;top:0;height:100svh;display:flex;flex-direction:column;gap:10px;padding-block:22px 18px;min-height:0}
.rp-error{padding:12px 14px;border:1px solid var(--rp-gold);color:var(--rp-gold);font-size:15px}
.rp-tot{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border-top:1px solid #6bb68f66;border-bottom:1px solid #6bb68f66}
.rp-tot>div{padding:10px 14px 10px 0;display:grid;gap:2px}
.rp-tot>div+div{padding-left:14px;border-left:1px solid #6bb68f40}
.rp-tot span{font:13px/1.3 var(--rp-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--rp-txt2)}
.rp-tot output{font-size:clamp(28px,2.8vw,40px);font-weight:820;letter-spacing:-.04em;color:#f6f4ef;line-height:1.05}
.rp-tot small{font-size:13px;color:var(--rp-txt2)}
.rp-viz{--cols:21;position:relative;flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 150px;grid-template-rows:auto minmax(110px,1fr) 24px 14px minmax(150px,200px) 24px;column-gap:14px;cursor:crosshair}
.rp-viz__lab{grid-column:1/-1;display:flex;justify-content:space-between;font:13px/1.4 var(--rp-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--rp-txt2);padding-bottom:6px}
.rp-viz__lab b{color:#f6f4ef;font-weight:600}
.rp-viz__stack{grid-column:1;grid-row:2;min-height:0}
.rp-viz__beam{grid-column:1;grid-row:3;border-bottom:1px solid #6bb68f80}
.rp-viz__gates{--cols:21}
.rp-viz__sv{grid-column:1;grid-row:4}
.rp-viz__body{grid-column:1/-1;grid-row:5;display:grid;grid-template-columns:minmax(0,1fr) 150px;column-gap:14px;min-height:0}
.rp-viz__cloth{position:relative;min-height:0}
.rp-viz__cloth::after{content:'';position:absolute;top:0;bottom:0;right:0;width:calc(300% / 21);background:repeating-linear-gradient(135deg,#c98a2b70 0 3px,transparent 3px 8px);pointer-events:none}
.rp-viz__ax{grid-column:1;grid-row:6}
.rp-viz__run{grid-column:1;grid-row:2/6;position:relative;width:calc(100% / 21);transform:translateX(calc(var(--m) * 100%));transition:transform .32s var(--rp-out);pointer-events:none;display:grid;grid-template-rows:subgrid}
.rp-viz__run .rp-shut{grid-row:1/-1}
.rp-viz__run .rp-shut__d{grid-row:2;align-self:center;position:relative;box-shadow:0 0 0 3px var(--rp-deep)}
.rp-viz__ghost{grid-column:1;grid-row:5;position:relative;pointer-events:none;overflow:hidden}
.rp-viz__ghost i{position:absolute;top:0;bottom:0;left:0;width:calc(100% / 21);background:linear-gradient(90deg,transparent,#f6f4ef26,transparent);opacity:0}
.rp-chips{list-style:none;margin:0;padding:0;position:relative;min-height:0}
.rp-chips li{position:absolute;left:14px;right:0;top:calc(var(--y) * 1%);transform:translateY(-50%);display:grid;grid-template-columns:auto 1fr auto;gap:6px;align-items:baseline;padding:4px 8px;border-left:3px solid var(--c);background:#072d2bd9;font-size:15px;line-height:1.3;color:var(--rp-txt)}
.rp-chips li::before{content:'';position:absolute;right:100%;top:50%;width:14px;border-top:1px dashed var(--c)}
.rp-chips b{font:600 13px var(--rp-mono);color:var(--c)}
.rp-chips span{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rp-chips output{font:600 15px var(--rp-mono)}
.rp-chips li[data-state="Not installed"]{opacity:.82}
.rp-chips li[data-state="Not installed"] output{display:none}
.rp-spine-wrap{display:flex;gap:10px;align-items:center}
.rp-spine{flex:1;display:grid;grid-template-columns:repeat(18,minmax(0,1fr));gap:3px}
.rp-spine button{min-height:44px;border:1px solid #6bb68f40;background:#072d2b80;color:var(--rp-txt2);font:13px var(--rp-mono);padding:0}
.rp-spine button[aria-pressed=true]{background:var(--rp-ochre);color:var(--rp-night);border-color:var(--rp-ochre);font-weight:700}
.rp-scrub{display:none}
.rp-play{min-height:44px;padding:8px 14px;border:1px solid var(--rp-gold);background:transparent;color:var(--rp-gold);font-size:15px;font-weight:650;white-space:nowrap}
.rp-read output{display:block;font-size:clamp(22px,1.9vw,28px);font-weight:760;letter-spacing:-.025em;color:#f6f4ef;line-height:1.2}
.rp-read p{font-size:15px;color:var(--rp-txt2);margin-top:4px}
.rp-hover{font:13px/1.5 var(--rp-mono);color:var(--rp-txt2);letter-spacing:.02em}
/* bench entrance: shed (rows part, then pick back band by band) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-bench:not([data-rp-in]) :is(.rp-bench__cl .rp-cl__band,.rp-viz__stack,.rp-fold,.rp-reset,.rp-chips li){opacity:0}
:root[data-m-go] .rp-bench[data-rp-in]:not([data-rp-done]) .rp-bench__cl .rp-cl__band{animation-name:rp-shed;animation-duration:820ms;animation-delay:calc(var(--k) * 50ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
.rp-bench__cl .rp-cl__band[data-k="0"],.rp-bench__cl .rp-cl__band[data-k="1"]{--sy:-16px}
.rp-bench__cl .rp-cl__band[data-k="2"],.rp-bench__cl .rp-cl__band[data-k="3"]{--sy:16px}
:root[data-m-go] .rp-bench[data-rp-in]:not([data-rp-done]) .rp-viz__stack{animation-name:rp-rise-cols;animation-duration:560ms;animation-delay:300ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-bench[data-rp-in]:not([data-rp-done]) :is(.rp-fold,.rp-reset){animation-name:rp-slide-in;animation-duration:520ms;animation-delay:calc(var(--i) * 40ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-bench[data-rp-in]:not([data-rp-done]) .rp-chips li{animation-name:rp-chip;animation-duration:420ms;animation-delay:calc(480ms + var(--y) * 3ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
@keyframes rp-shed{0%{transform:translateY(var(--sy,0)) scaleX(.18);opacity:.25}38%{transform:translateY(var(--sy,0)) scaleX(.3);opacity:.7}100%{transform:none;opacity:1}}
@keyframes rp-slide-in{from{transform:translateX(-28px);opacity:0}}
@keyframes rp-chip{from{transform:translate(-18px,-50%);opacity:0}to{transform:translate(0,-50%);opacity:1}}
:root[data-m-go] .rp-viz:not([data-hold]) .rp-viz__ghost[data-m-on] i{animation-name:rp-ghost;animation-duration:45s;animation-timing-function:steps(18,end);animation-iteration-count:infinite;animation-direction:normal}
.rp-viz[data-hold] .rp-viz__ghost i{animation-play-state:paused;opacity:0}
@keyframes rp-ghost{0%{transform:translateX(0);opacity:1}99%{opacity:1}100%{transform:translateX(1800%);opacity:1}}
/* hand-over 2 → 3: as the delay block enters, the bench's bands slide right by the stress delay into the lost zone */
@supports (animation-timeline:view()){
 :root[data-m-go] .rp-bench__cl .rp-cl__band{animation-name:rp-drag;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--rp-delayv;animation-range-start:cover 2%;animation-range-end:cover 17%}
 :root[data-m-go] .rp-bench[data-rp-in]:not([data-rp-done]) .rp-bench__cl .rp-cl__band{animation-timeline:auto}
}
@keyframes rp-drag{to{transform:translateX(calc(var(--rp-drag,0) * 100px))}}

/* ---------------------------------------------------------------- 3 · delay (forest) */
.rp-delay{view-timeline-name:--rp-delayv;view-timeline-axis:block;padding-block:clamp(56px,8svh,96px) 150px;z-index:3;overflow:visible;overflow-x:clip}
.rp-delay__head{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:40px;align-items:end}
.rp-delay__head p{color:var(--rp-txt2);max-width:46ch}
.rp-delay__band{margin-top:36px;display:grid;grid-template-rows:auto 14px clamp(180px,30svh,280px) 26px auto}
.rp-delay__lab{display:flex;justify-content:space-between;gap:16px;font:13px/1.4 var(--rp-mono);letter-spacing:.06em;text-transform:uppercase;padding-bottom:8px}
.rp-delay__lab b{color:#f6f4ef;font-weight:600}
.rp-delay__lost{color:var(--rp-gold)}
.rp-delay__lost output{font-weight:700}
.rp-delay__cloth{position:relative;min-height:0}
.rp-delay__key{display:flex;gap:22px;flex-wrap:wrap;font:13px var(--rp-mono);letter-spacing:.04em;margin-top:6px}
.rp-delay__key span{display:inline-flex;align-items:center;gap:8px}
.rp-delay__key i{display:inline-block;width:18px;height:10px}
.rp-k-def{border:1.5px dashed var(--rp-gold)}.rp-k-lost{background:#e0a54a}.rp-k-sv{width:4px!important;height:12px!important;background:var(--rp-ochre)}
.rp-delay__cols{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr) minmax(0,1fr);gap:clamp(24px,3vw,48px);margin-top:28px;align-items:start}
.rp-delay__kick{display:flex;gap:10px;align-items:center;font:13px var(--rp-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-gold)}
.rp-delay__dia{width:12px;height:12px;background:var(--rp-ochre);transform:rotate(45deg)}
.rp-delay__big{display:flex;align-items:baseline;gap:12px;margin:6px 0 4px;color:#f6f4ef}
.rp-delay__big output{font-size:clamp(56px,6.6vw,96px);font-weight:850;letter-spacing:-.06em;line-height:1}
.rp-delay__big span{font:600 24px var(--rp-mono);color:var(--rp-gold)}
.rp-delay__sub{font-size:15px;color:var(--rp-txt2)}
.rp-delay__sub b{color:#f6f4ef}
.rp-delay__sub span{display:block;color:var(--rp-gold);margin-top:4px}
.rp-delay__sub span[hidden]{display:none}
.rp-delay__ctl{margin-top:14px}
.rp-delay__ctl input[type=number]{background:var(--rp-night)}
.rp-br{display:grid;gap:14px;padding-top:6px}
.rp-br__row{display:grid;grid-template-columns:22px minmax(0,1fr) auto;grid-template-rows:auto 16px;column-gap:10px;row-gap:6px;align-items:center}
.rp-br__op{grid-row:1/3;font:600 22px var(--rp-mono);color:var(--rp-gold);text-align:center}
.rp-br__l{font-size:15px;color:var(--rp-txt)}
.rp-br__row output{font:700 22px var(--rp-mono);color:#f6f4ef;grid-row:1;grid-column:3;text-align:right}
.rp-br__row i{grid-column:2/4;grid-row:2;display:block;height:16px;transform-origin:0 50%;transform:scaleX(var(--w));background:repeating-linear-gradient(90deg,#6bb68f 0 9px,#6bb68f99 9px 12px)}
.rp-br__row--avoid i{background:repeating-linear-gradient(90deg,#a3b4f1 0 9px,#a3b4f199 9px 12px)}
.rp-br__row--net i{background:repeating-linear-gradient(90deg,#e0a54a 0 9px,#e0a54aa6 9px 12px)}
.rp-br__row--net output{color:var(--rp-gold)}
.rp-lad__h{font:13px/1.4 var(--rp-mono);letter-spacing:.06em;text-transform:uppercase;margin-bottom:10px}
.rp-ladder{display:grid;grid-template-columns:repeat(13,minmax(0,1fr));gap:4px;height:170px;align-items:end}
.rp-rung{height:100%;display:grid;grid-template-rows:1fr 22px;align-items:end;border:0;background:transparent;padding:0;position:relative;min-width:0}
.rp-rung i{display:block;height:100%;transform-origin:50% 100%;transform:scaleY(max(.03,var(--h)));background:#6bb68fb3}
.rp-rung[data-neg] i{background:#a3b4f1b3}
.rp-rung b{font:13px var(--rp-mono);color:var(--rp-txt2);font-weight:400}
.rp-rung[aria-pressed=true] i,.rp-rung[data-eg] i{background:var(--rp-ochre)}
.rp-rung[aria-pressed=true] b,.rp-rung[data-eg] b{color:var(--rp-gold);font-weight:700}
.rp-rung::after{content:'';position:absolute;left:50%;top:-4px;width:8px;height:8px;margin-left:-4px;background:var(--rp-gold);transform:rotate(45deg);opacity:0}
.rp-rung[data-eg]::after,.rp-rung[aria-pressed=true]:not([data-rp-delay-set="0"])::after{opacity:1}
.rp-lad__read{font:13px/1.5 var(--rp-mono);margin-top:10px;color:var(--rp-txt2)}
.rp-delay__reads{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:28px;border-top:1px solid #6bb68f55}
.rp-delay__reads>div{padding:14px 18px 0 0;display:grid;gap:2px}
.rp-delay__reads>div+div{padding-left:18px;border-left:1px solid #6bb68f40}
.rp-delay__reads span{font:13px/1.4 var(--rp-mono);letter-spacing:.06em;text-transform:uppercase}
.rp-delay__reads output{font-size:28px;font-weight:780;color:#f6f4ef;letter-spacing:-.03em}
.rp-delay__reads small{font-size:13px}
/* delay entrance: beat-up (ladder beaten up by one reed stroke, then the bands slide to the delay) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-delay:not([data-rp-in]) :is(.rp-rung i,.rp-br__row i,.rp-delay__cl .rp-cl__fringe){opacity:0}
:root[data-m-go] .rp-delay[data-rp-in]:not([data-rp-done]) .rp-rung i{animation-name:rp-beat;animation-duration:420ms;animation-delay:calc(var(--i) * 25ms);animation-timing-function:cubic-bezier(.3,1.5,.5,1);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-delay[data-rp-in]:not([data-rp-done]) .rp-delay__cl .rp-cl__band{animation-name:rp-slip;animation-duration:450ms;animation-delay:450ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-delay[data-rp-in]:not([data-rp-done]) .rp-delay__cl .rp-cl__fringe{animation-name:rp-fray;animation-duration:320ms;animation-delay:640ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-delay[data-rp-in]:not([data-rp-done]) .rp-br__row i{animation-name:rp-bar;animation-duration:520ms;animation-delay:calc(260ms + var(--i) * 90ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
@keyframes rp-beat{from{transform:scaleY(0)}}
@keyframes rp-slip{from{transform:translateX(calc(var(--d,3) * -100px))}}
@keyframes rp-fray{from{opacity:0;transform:translateX(-30px)}}
@keyframes rp-bar{from{transform:scaleX(0)}}
:root[data-m-go] .rp-delay[data-rp-done] .rp-delay__cl .rp-cl__fringe path,:root[data-m-go] .rp-delay[data-m-on] .rp-delay__cl .rp-cl__fringe path{transform-box:fill-box;animation-name:rp-flutter;animation-duration:2.6s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
.rp-delay__cl .rp-cl__fringe path:nth-child(2n){animation-delay:-.9s}.rp-delay__cl .rp-cl__fringe path:nth-child(3n){animation-delay:-1.7s}
@keyframes rp-flutter{from{transform:translate(0,0)}to{transform:translate(6px,1.5px)}}
:root[data-m-go] .rp-delay[data-rp-done] .rp-rung[data-eg]::after,:root[data-m-go] .rp-delay[data-rp-done] .rp-rung[aria-pressed=true]::after{animation-name:rp-pulse;animation-duration:1.6s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
@keyframes rp-pulse{from{transform:rotate(45deg) scale(.7)}to{transform:rotate(45deg) scale(1.25)}}
/* hand-over 3 → 4: the cloth straddles the cut; night copy above the diagonal, ink-on-paper copy below */
.rp-seam{position:absolute;left:0;right:0;bottom:-96px;height:192px;pointer-events:none;z-index:2;view-timeline-name:--rp-seamv;view-timeline-axis:block}
.rp-seam__move{position:absolute;inset:0;overflow-anchor:none}
.rp-seam__dark,.rp-seam__ink{position:absolute;inset:0;padding:44px max(48px,calc((100% - 1440px) / 2))}
.rp-seam__dark{background:var(--rp-forest);clip-path:polygon(0 0,100% 0,100% 34%,0 66%)}
.rp-seam__ink{background:var(--rp-paper);clip-path:polygon(0 66%,100% 34%,100% 100%,0 100%)}
.rp-seam__dark::after{content:'';position:absolute;left:0;right:0;top:50%;height:2px;background:var(--rp-ochre);transform:rotate(-2.2deg);transform-origin:50% 50%}
.rp-seam .rp-cl{height:104px}
.rp-seam__ink .rp-cl__warp{stroke:#0e4d4a33}
@supports (animation-timeline:view()){
 :root[data-m-go] .rp-seam__move{animation-name:rp-seam-slide;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--rp-seamv;animation-range-start:cover 0%;animation-range-end:cover 100%}
}
@keyframes rp-seam-slide{from{transform:translateX(-4%)}to{transform:translateX(4%)}}

/* ---------------------------------------------------------------- 4 · compare (paper) */
.rp-cmp{view-timeline-name:--rp-cmpv;view-timeline-axis:block;padding-block:150px clamp(56px,8svh,96px);color:var(--rp-ink)}
.rp-cmp__stage{border:1px solid #0e4d4a33;background:#fbfaf6;padding:14px 20px 18px}
.rp-cmp__bar{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px solid #0e4d4a26}
.rp-cmp__legend{display:flex;gap:18px;flex-wrap:wrap;font:13px var(--rp-mono);letter-spacing:.03em;color:var(--rp-ink2)}
.rp-cmp__legend span{display:inline-flex;align-items:center;gap:8px}
.rp-cmp__legend i{display:inline-block;width:20px;height:10px}
.rp-k-b{background:#0e4d4a}.rp-k-a{border-top:2px dashed #33473f;height:2px!important}.rp-k-up{background:#3f8f6b70}.rp-k-dn{background:#c98a2b70}
.rp-actions{display:flex;gap:8px;flex-wrap:wrap}
.rp-actions button{min-height:44px;padding:8px 14px;border:1px solid var(--rp-forest);background:transparent;color:var(--rp-ink);font-size:15px;font-weight:600}
.rp-actions button:first-child{background:var(--rp-forest);color:#f6f4ef}
.rp-actions button:disabled{opacity:.5}
.rp-cmp__status{font-size:15px;color:var(--rp-ink2);min-height:24px;margin:6px 0 0}
.rp-share-url{display:grid;gap:4px;font-size:15px;margin-top:6px}
.rp-share-url[hidden]{display:none}
.rp-share-url input{min-height:44px;padding:8px;border:1px solid #9bad9f;font:13px var(--rp-mono)}
.rp-cmp__body{display:grid;grid-template-columns:minmax(330px,37fr) minmax(0,63fr);gap:28px;margin-top:10px;align-items:stretch}
.rp-cmp__left{display:flex;flex-direction:column;justify-content:space-between;gap:16px;background:#fbfaf6;padding:6px 4px 2px 0;position:relative;z-index:2}
.rp-cmp__head{position:static;width:auto;background:#fbfaf6;padding:0}
.rp-cmp__head h2{font-size:clamp(1.75rem,2.35vw,2.35rem);max-width:16ch;color:var(--rp-ink)}
.rp-cmp__head p{font-size:15.5px;line-height:1.55;color:var(--rp-ink2);margin-top:10px;max-width:44ch}
.rp-cmp__plot{position:relative;display:grid;grid-template-rows:auto minmax(195px,28svh) clamp(145px,21svh,195px) 26px;gap:6px;padding:12px 16px 10px;background:#f6f4ef;border:1px solid #0e4d4a26;overflow:hidden}
.rp-cmp__plab{grid-row:1;display:flex;justify-content:space-between;gap:12px;font:600 13px/1.35 var(--rp-mono);letter-spacing:.05em;text-transform:uppercase;color:var(--rp-ink2);padding-bottom:6px;border-bottom:1px solid #0e4d4a1f}
.rp-cmp__stack{grid-row:2;min-height:0;padding-top:6px}
.rp-cmp__stack .rp-st__a{fill-opacity:.58}
.rp-cmp__stack .rp-st__edge{stroke:#072d2b}
.rp-cmp__stack .rp-st__ghost{stroke:#33473f;opacity:1}
.rp-cmp__stack .rp-st__grid{stroke:#0e4d4a1f}
.rp-cmp__cloths{grid-row:3;position:relative;min-height:0;margin-top:4px}
.rp-cmp__a,.rp-cmp__b,.rp-cmp__turn{position:absolute;inset:0}
.rp-cmp__a{clip-path:inset(0 calc(100% - var(--fold)) 0 0)}
.rp-cmp__a .rp-cl__c{fill-opacity:.32;stroke-width:1.2}
.rp-cmp__b{clip-path:inset(0 0 0 var(--fold))}
.rp-cmp .rp-cl__warp{stroke:#0e4d4a2e}
.rp-cmp__turn{opacity:0;pointer-events:none;transform-origin:50% 50%}
.rp-cmp__fold{position:absolute;top:0;bottom:0;left:var(--fold);width:0;pointer-events:none}
.rp-cmp__handle{position:absolute;top:-6px;bottom:-6px;left:-1px;width:3px;background:var(--rp-ochre)}
.rp-cmp__handle b{position:absolute;top:50%;width:30px;height:30px;margin-top:-15px;display:grid;place-items:center;font:700 14px var(--rp-mono);background:var(--rp-ochre);color:var(--rp-night)}
.rp-cmp__handle b:first-child{right:3px}.rp-cmp__handle b:last-child{left:3px;background:var(--rp-forest);color:#f6f4ef}
.rp-cmp__hint{position:absolute;top:0;bottom:0;left:-1px;width:3px;background:#c98a2b66;opacity:0}
.rp-cmp__range{position:absolute;inset:-6px 0;width:100%;height:calc(100% + 12px);margin:0;opacity:0;cursor:ew-resize}
.rp-cmp__range:focus-visible{opacity:.01;outline:none}
.rp-cmp__cloths:has(.rp-cmp__range:focus-visible) .rp-cmp__handle{outline:3px solid var(--rp-ochre);outline-offset:4px}
.rp-cmp__ax{grid-row:4;color:var(--rp-ink2)}
.rp-cmp__deltas{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;align-content:start}
.rp-dt{padding:10px 12px;border:1px solid #0e4d4a33;border-left:4px solid #8da69a;background:#fff;display:grid;gap:2px}
.rp-dt[data-tone=good]{border-left-color:#3f8f6b}.rp-dt[data-tone=bad]{border-left-color:#c98a2b}
.rp-dt span{font:12.5px/1.3 var(--rp-mono);letter-spacing:.03em;color:var(--rp-ink2)}
.rp-dt output{font-size:21px;font-weight:780;letter-spacing:-.03em;color:var(--rp-ink);line-height:1.15}
.rp-cmp__tab{margin-top:14px;border-top:1px solid #0e4d4a26;padding-top:6px}
.rp-cmp__tab summary{min-height:44px;display:flex;align-items:center;font-size:15px;font-weight:650;cursor:pointer}
.rp-table-scroll{overflow-x:auto}
.rp-cmp__tab table{width:100%;border-collapse:collapse;font-size:15px}
.rp-cmp__tab caption{text-align:left;font-size:13px;color:var(--rp-ink2);padding-bottom:6px}
.rp-cmp__tab :is(th,td){padding:8px 10px;border-bottom:1px solid #0e4d4a22;text-align:left}
/* compare entrance: satin-float (A floats down under B; delta tiles rise one by one) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-cmp:not([data-rp-in]) :is(.rp-cmp__a,.rp-dt,.rp-cmp__stack){opacity:0}
:root[data-m-go] .rp-cmp[data-rp-in]:not([data-rp-done]) .rp-cmp__a{animation-name:rp-float;animation-duration:520ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-cmp[data-rp-in]:not([data-rp-done]) .rp-cmp__stack{animation-name:rp-float;animation-duration:560ms;animation-delay:120ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-cmp[data-rp-in]:not([data-rp-done]) .rp-dt{animation-name:rp-fade-up;animation-duration:380ms;animation-delay:calc(400ms + var(--i) * 80ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
@keyframes rp-float{from{transform:translateY(-24px);opacity:0}}
:root[data-m-go] .rp-cmp__stack[data-m-on] .rp-st__gap{animation-name:rp-shimmer;animation-duration:3.2s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
@keyframes rp-shimmer{from{opacity:1}to{opacity:.45}}
:root[data-m-go] .rp-cmp__plot:not([data-touched]) .rp-cmp__fold[data-m-on] .rp-cmp__hint{animation-name:rp-hint;animation-duration:4.4s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
@keyframes rp-hint{0%{transform:translateX(-6vw);opacity:.9}100%{transform:translateX(6vw);opacity:.9}}
/* hand-over 4 → 5: a quarter turn about the M1 corner, so months run down the page */
@supports (animation-timeline:view()){
 :root[data-m-go] .rp-cmp__turn{animation-name:rp-turn;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--rp-cmpv;animation-range-start:exit 20%;animation-range-end:exit 75%}
}
@keyframes rp-turn{0%{opacity:0;transform:none}15%{opacity:.75}80%{opacity:.5}100%{opacity:0;transform:rotate(90deg) scale(.35)}}

/* ---------------------------------------------------------------- 5 · ledger (mist) */
.rp-ledger{view-timeline-name:--rp-ledv;view-timeline-axis:block;padding-block:clamp(56px,8svh,96px)}
.rp-ledger__head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:32px;align-items:end}
.rp-ledger__tools{display:grid;gap:10px;justify-items:end}
.rp-tabs{border:0;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.rp-tabs legend{float:left;font:13px var(--rp-mono);letter-spacing:.06em;text-transform:uppercase;margin-right:10px;padding:0}
.rp-tabs label{position:relative}
.rp-tabs input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.rp-tabs span{display:inline-flex;align-items:center;min-height:44px;padding:6px 12px;border:1px solid #0e4d4a55;font-size:15px}
.rp-tabs input:checked+span{background:var(--rp-forest);color:#f6f4ef;border-color:var(--rp-forest)}
.rp-tabs input:focus-visible+span{outline:3px solid var(--rp-ochre);outline-offset:2px}
.rp-ledger__grid{display:grid;grid-template-columns:minmax(0,1fr) 296px;gap:24px;margin-top:24px;align-items:stretch}
.rp-ledger__main{min-width:0;display:grid;gap:10px;align-content:start}
.rp-ledger__rail{width:296px;padding-left:18px;border-left:2px solid #0e4d4a2e;display:flex;flex-direction:column}
.rp-ledger__scroll{position:relative;overflow-x:auto;background:#fbfaf6;border:1.5px solid #0e4d4a3d}
.rp-ledger__scroll table{width:100%;border-collapse:collapse;font-size:14.5px;min-width:720px}
.rp-ledger__scroll caption{text-align:left;font-size:13px;padding:10px 12px;color:var(--rp-ink2);border-bottom:1px solid #0e4d4a1c}
.rp-ledger__scroll th,.rp-ledger__scroll td{padding:8px 8px;border-bottom:1px solid #0e4d4a1c;text-align:right;white-space:nowrap;position:relative}
.rp-ledger__scroll thead th{font:600 13px/1.25 var(--rp-mono);letter-spacing:.02em;color:var(--rp-ink);vertical-align:top;white-space:nowrap;background:#f2f0ea;border-bottom:1.5px solid #0e4d4a33;padding:10px 8px}
.rp-ledger__scroll thead th b{display:block;font-weight:700;color:var(--rp-ink)}
.rp-ledger__scroll thead th small{display:block;font:400 12px/1.2 var(--rp-mono);color:var(--rp-ink2);margin-top:2px}
.rp-ledger__scroll .c-m{text-align:left;position:sticky;left:0;background:#fbfaf6;z-index:1;min-width:86px}
.rp-ledger__scroll thead .c-m{background:#f2f0ea}
.rp-ledger__scroll .c-w{width:164px;padding-block:6px;text-align:left}
.rp-rw{display:block;width:164px;height:28px}
.rp-rw__warp{stroke:#0e4d4a33;stroke-width:1;vector-effect:non-scaling-stroke}
.rp-ledger__scroll tbody .c-m button{min-height:44px;min-width:44px;border:0;background:transparent;font:600 15px var(--rp-mono);padding:0 6px;color:var(--rp-ink);text-decoration:underline;text-decoration-color:#0e4d4a55;text-underline-offset:4px}
.rp-gate{display:inline-flex;gap:4px;align-items:center;font:13px var(--rp-mono);color:#7a4e12;margin-left:4px}
.rp-ledger__scroll tr.is-sel>*{background:#d8eadf}
.rp-ledger__scroll tr.is-sel .c-m{background:#d8eadf}
.rp-ledger__scroll tr.is-sel .c-m button::before{content:'';display:inline-block;width:9px;height:9px;background:var(--rp-ochre);transform:rotate(45deg);margin-right:8px}
.rp-ledger__scroll td[data-ok]{color:#1f6b4a;font-weight:700}
.rp-ledger__scroll td[data-ok]::after{content:'';display:inline-block;width:4px;height:12px;background:var(--rp-ochre);margin-left:6px;vertical-align:-1px}
.rp-ledger__scroll[data-win="1"] tbody tr:not([data-w="1"]),.rp-ledger__scroll[data-win="2"] tbody tr:not([data-w="2"]),.rp-ledger__scroll[data-win="3"] tbody tr:not([data-w="3"]){display:none}
.rp-ledger__scroll[data-cols=o] :is(.c-c,.c-v),.rp-ledger__scroll[data-cols=c] :is(.c-o,.c-v),.rp-ledger__scroll[data-cols=v] :is(.c-o,.c-c){display:none}
.rp-reed{position:absolute;top:0;bottom:0;left:98px;width:164px;pointer-events:none;overflow:hidden}
.rp-reed::before{content:'';position:absolute;left:0;right:0;top:0;height:2px;background:linear-gradient(90deg,transparent,#c98a2b,transparent);opacity:0}
:root[data-m-go] .rp-reed[data-m-on]::before{animation-name:rp-reed;animation-duration:6s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:normal}
@keyframes rp-reed{0%{transform:translateY(0);opacity:0}8%{opacity:.9}40%{transform:translateY(420px);opacity:.9}46%,100%{transform:translateY(420px);opacity:0}}
.rp-ledger__foot{font-size:13.5px;line-height:1.5;color:var(--rp-ink2);padding:8px 12px;background:#fbfaf6;border:1px solid #0e4d4a26}
.rp-mcard{position:sticky;top:20px;padding:16px;background:var(--rp-forest);color:var(--rp-txt2);border:1.5px solid #072d2b;display:grid;gap:8px}
.rp-mcard__k{font:13px var(--rp-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-gold)}
.rp-mcard__v{display:grid;gap:2px;font-size:14.5px}
.rp-mcard__v>output{font:700 34px/1.05 var(--rp-mono);color:#f6f4ef}
.rp-mcard__v span output{font-size:21px;font-weight:760;color:#f6f4ef}
.rp-mcard__chips{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;min-height:68px}
.rp-mcard__chips li{display:flex;gap:5px;align-items:baseline;padding:4px 6px;border-left:3px solid #6bb68f;background:#072d2b59;font-size:13px;color:var(--rp-txt);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rp-mcard__chips li:nth-child(1){border-left-color:#b6dfc8}.rp-mcard__chips li:nth-child(2){border-left-color:#6bb68f}.rp-mcard__chips li:nth-child(3){border-left-color:#c98a2b}.rp-mcard__chips li:nth-child(4){border-left-color:#a3b4f1}
.rp-mcard__chips b{font:600 12.5px var(--rp-mono);color:var(--rp-gold)}
.rp-mcard__chips output{margin-left:auto;font:600 13px var(--rp-mono)}
.rp-mcard__read{font:13px/1.45 var(--rp-mono);color:var(--rp-txt);border-top:1px solid #6bb68f40;padding-top:8px}
/* ledger entrance: twill-shift (rows on a diagonal, then a sage sweep across the selected month) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-ledger:not([data-rp-in]) tbody tr{opacity:0}
:root[data-m-go] .rp-ledger[data-rp-in]:not([data-rp-done]) tbody tr>td{animation-name:rp-twill-c;animation-duration:560ms;animation-delay:calc(var(--r) * 40ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-ledger[data-rp-in]:not([data-rp-done]) tbody tr{animation-name:rp-fadein;animation-duration:520ms;animation-delay:calc(var(--r) * 40ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-ledger[data-rp-in]:not([data-rp-done]) tr.is-sel>*::before{content:'';position:absolute;inset:0;background:#6bb68f55;pointer-events:none;animation-name:rp-sweep;animation-duration:300ms;animation-timing-function:var(--rp-out);animation-fill-mode:both;animation-iteration-count:1;animation-direction:normal}
.rp-ledger tr.is-sel>:nth-child(1)::before{animation-delay:600ms}.rp-ledger tr.is-sel>:nth-child(2)::before{animation-delay:630ms}.rp-ledger tr.is-sel>:nth-child(3)::before{animation-delay:660ms}.rp-ledger tr.is-sel>:nth-child(4)::before{animation-delay:690ms}.rp-ledger tr.is-sel>:nth-child(5)::before{animation-delay:720ms}.rp-ledger tr.is-sel>:nth-child(6)::before{animation-delay:750ms}.rp-ledger tr.is-sel>:nth-child(7)::before{animation-delay:780ms}.rp-ledger tr.is-sel>:nth-child(8)::before{animation-delay:810ms}.rp-ledger tr.is-sel>:nth-child(9)::before{animation-delay:840ms}.rp-ledger tr.is-sel>:nth-child(10)::before{animation-delay:870ms}
@keyframes rp-fadein{from{opacity:0}}
@keyframes rp-twill-c{from{clip-path:polygon(0 0,0 0,-30% 100%,-30% 100%)}to{clip-path:polygon(0 0,130% 0,100% 100%,0 100%)}}
@keyframes rp-sweep{0%{clip-path:inset(0 100% 0 0);opacity:1}60%{clip-path:inset(0 0 0 0);opacity:1}100%{clip-path:inset(0 0 0 0);opacity:0}}
/* hand-over 5 → 6: the woven column drains to bare warp from the last month upward as the ledger leaves */
@supports (animation-timeline:view()){
 :root[data-m-go] .rp-rw__c{animation-name:rp-unweave;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--rp-ledv;animation-range-start:exit calc(18% + (5 - var(--r)) * 5%);animation-range-end:exit calc(34% + (5 - var(--r)) * 5%)}
}
@keyframes rp-unweave{to{opacity:.08}}

/* ---------------------------------------------------------------- pinned scenes (method, interlude) */
.rp-pin{position:sticky;top:0;height:100svh;overflow:clip;z-index:1}
.rp-steps{list-style:none;margin:-100svh 0 0;padding:0;position:relative;z-index:2;pointer-events:none}
.rp-steps>li{min-height:100svh;display:flex;align-items:flex-start;padding:50svh max(48px,calc((100% - 1440px) / 2)) 0}
.rp-steps>li:first-child{padding-top:64svh}
.rp-card{pointer-events:auto;width:min(440px,34vw);padding:20px 22px;background:#fbfaf6f2;border:1px solid #0e4d4a40;box-shadow:0 18px 50px #072d2b26;color:var(--rp-ink)}
.rp-card__n{font:13px var(--rp-mono);letter-spacing:.08em;color:#7a4e12}
.rp-card h3{font-size:24px;letter-spacing:-.03em;margin:6px 0 8px}
.rp-card__lead{font-size:20px;line-height:1.45;letter-spacing:-.01em}
.rp-card details{margin-top:10px;font-size:15px;line-height:1.55;color:var(--rp-ink2)}
.rp-card summary{min-height:44px;display:flex;align-items:center;font-weight:650;color:var(--rp-ink);cursor:pointer}
.rp-card details p+p{margin-top:8px}
.rp-card--dark{background:#072d2bf0;border-color:#6bb68f66;color:var(--rp-txt);box-shadow:0 18px 60px #0009}
.rp-card--dark .rp-card__n{color:var(--rp-gold)}
.rp-card--dark h3{color:#f6f4ef}

@supports (animation-timeline:view()){
 :root[data-m-go] .rp-steps .rp-card{animation-name:rp-cardfade;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:view();animation-range-start:cover 0%;animation-range-end:cover 100%}
}
@keyframes rp-cardfade{0%{opacity:0}12%{opacity:1}52%{opacity:1}63%{opacity:0}100%{opacity:0}}

/* ---------------------------------------------------------------- 6 · method (paper, 4 steps) */
.rp-method{color:var(--rp-ink)}
.rp-method__in{height:100%;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;gap:12px;padding-block:28px 22px}
.rp-method__top{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:28px;align-items:end}
.rp-method__top h2{font-size:clamp(1.8rem,2.6vw,2.6rem);max-width:24ch}
.rp-rail{display:grid;gap:6px;justify-items:end}
.rp-rail__n{font:13px var(--rp-mono);letter-spacing:.08em;text-transform:uppercase}
.rp-rail__n b{font-size:22px;color:#7a4e12}
.rp-rail ol{list-style:none;display:flex;gap:6px;margin:0;padding:0}
.rp-rail a{display:flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;text-decoration:none}
.rp-rail a i{display:block;width:34px;height:6px;background:#0e4d4a33}
.rp-rail a[aria-current] i{background:var(--rp-ochre)}
.rp-rail a span{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.rp-method__reads{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1px solid #0e4d4a33;border-bottom:1px solid #0e4d4a33}
.rp-method__reads>div{padding:8px 14px 8px 0;display:grid;opacity:.55;transition:opacity .3s}
.rp-method__reads>div+div{padding-left:14px;border-left:1px solid #0e4d4a22}
.rp-method__reads span{font:13px var(--rp-mono);letter-spacing:.04em;color:var(--rp-ink2)}
.rp-method__reads output{font-size:32px;font-weight:800;letter-spacing:-.04em;line-height:1.1}
.rp-method[data-step="1"] .rp-method__reads [data-k="1"],.rp-method[data-step="2"] .rp-method__reads [data-k="2"],.rp-method[data-step="3"] .rp-method__reads [data-k="3"],.rp-method[data-step="4"] .rp-method__reads [data-k="4"]{opacity:1;box-shadow:inset 0 -4px var(--rp-ochre)}
.rp-method__stage{min-height:0;display:grid;grid-template-rows:14px minmax(0,1fr) 64px 24px;gap:4px;position:relative}
.rp-mg__cloth{position:relative;min-height:0}
.rp-mg__grey,.rp-mg__dens{position:absolute;inset:0}
.rp-mg__grey .rp-cl__c{fill:#7d8b84;fill-opacity:.55}
.rp-method .rp-cl__warp{stroke:#0e4d4a40}
.rp-mg__dens,.rp-mg__staff,.rp-mg__sv,.rp-mg__cloth .rp-dfc,.rp-mg__learn{opacity:0;transition:opacity .22s ease-in,transform .22s ease-in}
.rp-mg__staff{transform:translateY(14px)}
.rp-mg__sv{transform:translateY(-8px)}
.rp-method[data-step="1"] .rp-mg__grey,.rp-method[data-step="1"] .rp-mg__dens{transition:opacity .45s var(--rp-out) .22s}
.rp-method:is([data-step="2"],[data-step="3"],[data-step="4"]) .rp-mg__dens{opacity:1;transition:opacity .5s var(--rp-out) .22s}
.rp-method:is([data-step="2"],[data-step="3"],[data-step="4"]) .rp-mg__grey{opacity:0;transition:opacity .2s ease-in}
.rp-method[data-step="3"] .rp-mg__dens{opacity:.55}
.rp-method:is([data-step="3"],[data-step="4"]) .rp-mg__staff{opacity:1;transform:none;transition:opacity .5s var(--rp-out) .22s,transform .5s var(--rp-out) .22s}
.rp-method[data-step="4"] :is(.rp-mg__sv,.rp-mg__cloth .rp-dfc){opacity:1;transform:none;transition:opacity .5s var(--rp-out) .22s,transform .5s var(--rp-out) .22s}
.rp-method[data-step="2"] .rp-mg__learn{opacity:1;transition:opacity .4s var(--rp-out) .3s}
.rp-mg__staff .rp-staff__core,.rp-mg__staff .rp-staff__step{stroke:#9a6418}
.rp-mg__learn{position:absolute;left:0;right:0;top:var(--y0);height:calc(var(--y1) - var(--y0));pointer-events:none}
.rp-mg__learn i{position:absolute;top:0;bottom:0;left:calc(var(--s) * 100% / 18);width:calc(100% / 18);border:2px solid #072d2b;background:#072d2b1f}
:root[data-m-go] .rp-method[data-step="2"] .rp-mg__learn[data-m-on] i{animation-name:rp-learn;animation-duration:4s;animation-timing-function:steps(6,end);animation-iteration-count:infinite;animation-direction:normal}
@keyframes rp-learn{to{transform:translateX(600%)}}
.rp-mg__col{position:absolute;top:-4px;bottom:-4px;left:0;width:calc(100% / 18);transform:translateX(calc(var(--m) * 100%));border-inline:1px dashed #9a6418;pointer-events:none;transition:transform .3s var(--rp-out)}
.rp-mg__ax{color:var(--rp-ink2)}
.rp-method__stage[data-hl]:not([data-hl=""]) :is(.rp-mg__cloth,.rp-mg__staff,.rp-mg__sv){transition:opacity .2s,filter .2s}
.rp-method__stage[data-hl=lines] .rp-mg__cloth,.rp-method__stage[data-hl=rate] .rp-mg__cloth,.rp-method__stage[data-hl=eff] .rp-mg__cloth{filter:saturate(1.6) contrast(1.15)}
.rp-method__stage[data-hl=util] .rp-mg__cloth{filter:brightness(1.15)}
.rp-method__stage[data-hl=staff] .rp-mg__staff{filter:drop-shadow(0 0 4px #c98a2b)}
.rp-method__stage:is([data-hl=fixed],[data-hl=cov],[data-hl=out]) .rp-mg__col{border-inline-width:3px;border-style:solid}
.rp-method__eq{display:grid;min-height:56px}
/* Keep the last two equations beside the scrolling cards, including expanded arithmetic. */
@media(min-width:901px){
 .rp-method__eq .rp-eq:is([data-eq="3"],[data-eq="4"]){margin-left:calc(min(440px,34vw) + 24px)}
}
.rp-eq{grid-area:1/1;display:flex;flex-wrap:wrap;gap:6px;align-items:center;opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s .25s}
.rp-method[data-step="1"] .rp-eq[data-eq="1"],.rp-method[data-step="2"] .rp-eq[data-eq="2"],.rp-method[data-step="3"] .rp-eq[data-eq="3"],.rp-method[data-step="4"] .rp-eq[data-eq="4"]{opacity:1;visibility:visible;transition:opacity .4s var(--rp-out) .2s,visibility 0s}
.rp-eq__op{font:600 18px var(--rp-mono);color:#7a4e12}
.rp-eq__t{display:inline-flex;gap:8px;align-items:baseline;min-height:44px;padding:6px 12px;border:1px solid #0e4d4a55;background:#fff;font:15px var(--rp-mono);color:var(--rp-ink)}
.rp-eq__t output{font-weight:700;color:#7a4e12}
.rp-eq__t:hover,.rp-eq__t:focus-visible{background:#e2ebe6;border-color:var(--rp-forest)}
.rp-method__steps>li.is-r{justify-content:flex-end}
.rp-method__steps>li.is-l{justify-content:flex-start}
/* method entrance: heddle (warp lifts, then step one's bands drop between them) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-method:not([data-rp-in]) :is(.rp-mg__grey .rp-cl__band,.rp-method__reads>div){opacity:0}
:root[data-m-go] .rp-method[data-rp-in]:not([data-rp-done]) .rp-mg__grey .rp-cl__warp{transform-box:fill-box;animation-name:rp-heddle;animation-duration:380ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-method[data-rp-in]:not([data-rp-done]) .rp-mg__grey .rp-cl__band{animation-name:rp-drop;animation-duration:500ms;animation-delay:calc(300ms + var(--k) * 70ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-method[data-rp-in]:not([data-rp-done]) .rp-method__reads>div{animation-name:rp-fade-up;animation-duration:420ms;animation-delay:200ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
@keyframes rp-heddle{from{transform:translateY(-22px);opacity:.15}}
@keyframes rp-drop{from{transform:translateY(-28px);opacity:0}}

/* ---------------------------------------------------------------- 7 · interlude (night, 3 states) */
.rp-int{z-index:3;overflow:visible;overflow-x:clip;view-timeline-name:--rp-pullv;view-timeline-axis:block}
.rp-int__bg{position:absolute;inset:-40px;background-image:radial-gradient(#6bb68f2e 1.2px,transparent 1.4px),linear-gradient(#d6efe40e 1px,transparent 1px),linear-gradient(90deg,#d6efe40e 1px,transparent 1px);background-size:32px 32px,96px 96px,96px 96px;overflow-anchor:none;pointer-events:none}
.rp-int__iris{position:absolute;inset:0}
.rp-int__in{height:100%;display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;gap:10px;padding-block:26px 20px}
.rp-int__top{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:28px;align-items:end}
.rp-int__h h2{font-size:clamp(1.8rem,2.5vw,2.5rem);max-width:22ch}
.rp-int__reads{display:grid}
.rp-int__reads>div{grid-area:1/1;opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s .25s,transform .25s;transform:translateY(8px)}
.rp-int[data-step="1"] .rp-int__reads>[data-p="1"],.rp-int[data-step="2"] .rp-int__reads>[data-p="2"],.rp-int[data-step="3"] .rp-int__reads>[data-p="3"]{opacity:1;visibility:visible;transform:none;transition:opacity .45s var(--rp-out) .2s,transform .45s var(--rp-out) .2s,visibility 0s}
.rp-int__n{font:13px var(--rp-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-gold)}
.rp-int__total{display:block;font-size:clamp(56px,6.4vw,96px);font-weight:850;letter-spacing:-.06em;line-height:1;color:#f6f4ef}
.rp-int__sub{display:flex;gap:22px;flex-wrap:wrap;margin-top:6px}
.rp-int__sub b{font-size:clamp(22px,2.2vw,32px);font-weight:720;letter-spacing:-.03em;color:var(--rp-txt)}
.rp-int__lab{font-size:15px;color:var(--rp-txt2)}
.rp-int__stage{--cols:21;min-height:0;display:grid;grid-template-rows:14px minmax(0,1fr) 24px;gap:4px}
.rp-int__svs{display:grid}
.rp-int__svs>.rp-sv{grid-area:1/1;opacity:0;transition:opacity .3s}
.rp-int[data-step="1"] .rp-int__sv--1,.rp-int[data-step="2"] .rp-int__sv--2,.rp-int[data-step="3"] .rp-int__sv--3{opacity:1;transition:opacity .45s var(--rp-out) .25s}
.rp-int__cloth{position:relative;min-height:0}
.rp-int__l{position:absolute;inset:0;transition:opacity .4s var(--rp-out)}
.rp-int__ghost,.rp-int__slow,.rp-int__cut{opacity:0}
.rp-int__ghost .rp-cl__c{fill-opacity:0;stroke-width:1.2}
.rp-int__ghost .rp-cl__warp,.rp-int__slow .rp-cl__warp,.rp-int__cut .rp-cl__warp,.rp-int__slow .rp-cl__zone,.rp-int__cut .rp-cl__zone,.rp-int__ghost .rp-cl__zone{display:none}
.rp-int__plan{clip-path:inset(0 calc(300% / 21) 0 0)}
.rp-int__plan .rp-cl__band{transition:transform .7s var(--rp-out)}
.rp-int[data-step="2"] .rp-int__plan{opacity:0}
.rp-int[data-step="2"] .rp-int__slow{opacity:1;transition:opacity .5s var(--rp-out) .2s}
.rp-int:is([data-step="2"],[data-step="3"]) .rp-int__ghost{opacity:.9;transition:opacity .5s var(--rp-out) .2s}
.rp-int[data-step="3"] .rp-int__plan .rp-cl__band{transform:translateX(300px)}
.rp-int[data-step="3"] .rp-int__cut{opacity:1;transition:opacity .4s var(--rp-out) .55s}
.rp-int__shut{position:absolute;top:-10px;bottom:-10px;left:0;width:2px;pointer-events:none;opacity:0}
.rp-int__shut .rp-shut{left:0;margin:0;background:linear-gradient(#f0c986,#f0c98622)}
.rp-int__ax{color:var(--rp-txt2)}
.rp-int__chips{display:flex;gap:8px;flex-wrap:wrap}
.rp-int__chips a{display:inline-flex;align-items:center;min-height:44px;padding:6px 14px;border:1px solid #6bb68f80;color:var(--rp-txt);text-decoration:none;font-size:15px}
.rp-int__chips a[aria-current]{background:var(--rp-sage);color:var(--rp-night);font-weight:700}
.rp-int__steps>li{justify-content:flex-end}
:root[data-m-go] .rp-int__slow[data-m-on] svg{animation-name:rp-breathe;animation-duration:2s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
:root[data-m-go] .rp-int[data-step="3"] .rp-int__cut[data-m-on] .rp-cl__fringe path{transform-box:fill-box;animation-name:rp-fall;animation-duration:3.4s;animation-timing-function:cubic-bezier(.55,0,.8,.4);animation-iteration-count:infinite;animation-direction:normal}
.rp-int__cut .rp-cl__fringe path:nth-child(2){animation-delay:-.6s}.rp-int__cut .rp-cl__fringe path:nth-child(3){animation-delay:-1.3s}.rp-int__cut .rp-cl__fringe path:nth-child(4){animation-delay:-2s}.rp-int__cut .rp-cl__fringe path:nth-child(5){animation-delay:-2.6s}.rp-int__cut .rp-cl__fringe path:nth-child(6){animation-delay:-.3s}
@keyframes rp-fall{0%,30%{transform:translate(0,0);opacity:1}100%{transform:translate(40px,60px) rotate(8deg);opacity:0}}
:root[data-m-go] .rp-int__bg[data-m-on]{animation-name:rp-drift;animation-duration:18s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
@keyframes rp-drift{from{transform:translate(0,0)}to{transform:translate(32px,18px)}}
/* interlude entrance: iris from the M6 selvedge tick */
:root[data-m-go] .rp-root[data-rp-arm] .rp-int:not([data-rp-in]) .rp-int__iris{clip-path:circle(5% at 30% 64%)}
:root[data-m-go] .rp-int[data-rp-in]:not([data-rp-done]) .rp-int__iris{animation-name:rp-iris;animation-duration:820ms;animation-timing-function:cubic-bezier(.6,0,.2,1);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
@keyframes rp-iris{from{clip-path:circle(5% at 30% 64%)}to{clip-path:circle(150% at 30% 64%)}}
/* hand-over 7 → 8: the M9 column lifts out, turns flat and slides down into the readers' first bar */
.rp-int__pull{position:absolute;right:max(48px,calc((100% - 1440px) / 2 + 120px));bottom:-150px;width:26px;height:300px;pointer-events:none;z-index:4}
.rp-int__col{display:grid;grid-template-rows:repeat(var(--rows),1fr);gap:3px;height:100%;opacity:0;transform-origin:50% 100%}
.rp-int__col i{background:var(--c);opacity:var(--o)}
@supports (animation-timeline:view()){
 :root[data-m-go] .rp-int__col{animation-name:rp-pull;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--rp-pullv;animation-range-start:exit 0%;animation-range-end:exit 22%}
}
@keyframes rp-pull{0%{opacity:0;transform:none}20%{opacity:1;transform:translateY(-30px)}75%{opacity:1;transform:translate(-120px,40px) rotate(-90deg)}100%{opacity:0;transform:translate(-160px,60px) rotate(-90deg)}}

/* ---------------------------------------------------------------- 8 · readers (forest) */
.rp-readers{padding-block:clamp(64px,9svh,110px)}
.rp-readers__grid{display:grid;grid-template-columns:minmax(0,45fr) minmax(0,55fr);gap:clamp(28px,4vw,64px);align-items:center}
.rp-tabs--dark{margin-top:22px}
.rp-tabs--dark legend{color:var(--rp-txt2)}
.rp-tabs--dark span{border-color:#6bb68f80;color:var(--rp-txt)}
.rp-tabs--dark input:checked+span{background:var(--rp-sage);color:var(--rp-night);border-color:var(--rp-sage);font-weight:700}
.rp-readers__qs{display:grid;margin-top:22px}
.rp-readers__q{grid-area:1/1;opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s .25s}
.rp-readers[data-aud=a] [data-aud=a],.rp-readers[data-aud=b] [data-aud=b],.rp-readers:not([data-aud]) [data-aud=a]{opacity:1;visibility:visible;transition:opacity .4s var(--rp-out) .1s,visibility 0s}
.rp-readers__q h3{font-size:24px;color:#f6f4ef;letter-spacing:-.025em}
.rp-readers__q ol{margin:12px 0 0;padding-left:22px;display:grid;gap:8px;color:var(--rp-txt)}
.rp-readers__viz{padding:22px 24px;border:1px solid #6bb68f55;background:#072d2b8c}
.rp-readers__cap{font:13px/1.5 var(--rp-mono);letter-spacing:.06em;text-transform:uppercase}
.rp-readers__cap b{color:var(--rp-gold);font-size:15px}
.rp-plies{display:grid;gap:20px;margin-top:16px}
.rp-ply{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto 26px;column-gap:16px;row-gap:6px;transition:opacity .3s}
.rp-ply__l{font-size:16px;color:var(--rp-txt)}
.rp-ply__l small{display:block;font:13px var(--rp-mono);color:var(--rp-txt2)}
.rp-ply output{grid-row:1/3;grid-column:2;align-self:center;font:700 30px var(--rp-mono);color:#f6f4ef;letter-spacing:-.03em}
.rp-ply__bar{grid-column:1;grid-row:2;position:relative;overflow:hidden;background:repeating-linear-gradient(90deg,#cfe3d81a 0 1px,transparent 1px 18px)}
.rp-ply__fill{position:absolute;inset:0;transform-origin:0 50%;transform:scaleX(var(--w));background:repeating-linear-gradient(90deg,#6bb68f 0 10px,#6bb68fb3 10px 13px)}
.rp-ply[data-ply=util] .rp-ply__fill{background:repeating-linear-gradient(90deg,#b6dfc8 0 10px,#b6dfc8b3 10px 13px)}
.rp-ply[data-ply=learn] .rp-ply__fill{background:repeating-linear-gradient(90deg,#e0a54a 0 10px,#e0a54ab3 10px 13px)}
.rp-ply__loss{position:absolute;top:0;bottom:0;left:calc(var(--wn) * 100%);width:calc((var(--w) - var(--wn)) * 100%);background:repeating-linear-gradient(135deg,#f0c98699 0 2px,transparent 2px 7px);transform-origin:0 50%}
.rp-ply__pick{position:absolute;top:0;bottom:0;left:0;width:30px;background:linear-gradient(90deg,transparent,#fff9,transparent);opacity:0}
.rp-readers[data-aud=a] .rp-ply:not([data-ply=util]),.rp-readers[data-aud=b] .rp-ply[data-ply=util]{opacity:.55}
.rp-readers[data-aud=a] .rp-ply[data-ply=util] .rp-ply__bar,.rp-readers[data-aud=b] .rp-ply[data-ply=learn] .rp-ply__bar{outline:2px solid var(--rp-gold);outline-offset:3px}
.rp-readers__foot{font-size:13px;line-height:1.55;margin-top:18px;color:var(--rp-txt2)}
:root[data-m-go] .rp-ply__bar[data-m-on] .rp-ply__pick{animation-name:rp-pickrun;animation-duration:5s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:normal}
.rp-ply[data-ply=util] .rp-ply__pick{animation-delay:-1.6s}.rp-ply[data-ply=learn] .rp-ply__pick{animation-delay:-3.2s}
@keyframes rp-pickrun{0%{transform:translateX(0);opacity:0}5%{opacity:1}40%{transform:translateX(min(620px,40vw));opacity:1}46%,100%{transform:translateX(min(620px,40vw));opacity:0}}
:root[data-m-go] .rp-ply__bar[data-m-on] .rp-ply__loss{animation-name:rp-sway;animation-duration:3s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
@keyframes rp-sway{from{transform:skewX(0)}to{transform:skewX(-14deg)}}
/* readers entrance: ply (three strands twist apart from one thread into three bars) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-readers:not([data-rp-in]) .rp-ply{opacity:0}
:root[data-m-go] .rp-readers[data-rp-in]:not([data-rp-done]) .rp-ply{animation-name:rp-ply;animation-duration:520ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
.rp-ply[data-ply=nom]{--py:120%}.rp-ply[data-ply=learn]{--py:-120%}
@keyframes rp-ply{from{transform:translateY(var(--py,0)) scaleY(.35) skewX(-12deg);opacity:.2}}
.rp-readers__selv{position:absolute;left:0;right:0;bottom:0;height:3px;pointer-events:none}
.rp-readers__selv i{display:block;height:100%;background:var(--rp-ochre);transform-origin:0 50%;transform:scaleX(0)}
@supports (animation-timeline:view()){
 .rp-readers__selv{view-timeline-name:--rp-selv;view-timeline-axis:block}
 :root[data-m-go] .rp-readers__selv i{animation-name:rp-selv;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--rp-selv;animation-range-start:cover 30%;animation-range-end:cover 70%}
}
@keyframes rp-selv{from{transform:scaleX(.05)}to{transform:scaleX(1)}}

/* ---------------------------------------------------------------- 9 · boundary (deep) */
.rp-bound{view-timeline-name:--rp-boundv;view-timeline-axis:block;padding-block:clamp(64px,9svh,110px)}
.rp-bound__head{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:40px;align-items:end}
.rp-bound__notes{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;counter-reset:rpn}
.rp-bound__notes li{counter-increment:rpn;font-size:15px;line-height:1.5;color:var(--rp-txt);border-top:2px solid #f0c98699;padding-top:10px}
.rp-bound__notes li::before{content:"0" counter(rpn);display:block;font:13px var(--rp-mono);letter-spacing:.08em;color:var(--rp-gold);margin-bottom:4px}
.rp-bound__notes b{display:block;font-size:16px;color:#f6f4ef;margin-bottom:2px}
.rp-bound__field{display:grid;grid-template-columns:minmax(0,19fr) minmax(0,62fr) minmax(0,19fr);gap:28px;margin-top:36px;align-items:stretch}
.rp-bound__side{position:relative;z-index:2;display:grid;align-content:space-between;gap:20px;padding:18px 0}
.rp-bound__out-h{font:13px var(--rp-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-gold)}
.rp-bound__out{list-style:none;margin:0;padding:0;display:grid;gap:14px}
.rp-bound__out li{font-size:16px;color:var(--rp-txt);padding-left:16px;border-left:1px dashed #f0c98699}
.rp-bound__rel h3{font-size:19px;color:#f6f4ef;letter-spacing:-.02em}
.rp-bound__rel p{font-size:15px;margin-top:6px}
.rp-switch{display:flex;gap:10px;align-items:center;min-height:44px;font-size:15px;margin-top:8px;color:var(--rp-txt)}
.rp-switch input{width:20px;height:20px;accent-color:var(--rp-sage)}
.rp-bound__move{position:relative;z-index:1;transform-origin:50% 100%}
.rp-bound__frame{position:relative;padding:16px 18px 14px;display:grid;gap:10px}
.rp-bound__sel{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.rp-bound__sel rect{fill:none;stroke:var(--rp-ochre);stroke-width:2.5;vector-effect:non-scaling-stroke;stroke-dasharray:none;stroke-dashoffset:0}
.rp-bound__in-h{font:13px var(--rp-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-gold)}
.rp-bound__in{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.rp-bound__in li{font-size:14px;line-height:1.35;color:var(--rp-txt);border-top:2px solid var(--rp-sage);padding-top:6px}
.rp-bound__cloth{position:relative;display:grid;grid-template-rows:12px clamp(150px,22svh,220px) 30px 24px;gap:4px;transition:opacity .35s}
.rp-bound__cl{position:relative;min-height:0}
.rp-bound__cloth>.rp-dfc{top:16px;bottom:58px;height:auto;opacity:0;transition:opacity .3s}
.rp-bound__staff{min-height:0}
.rp-bound__col{top:16px;bottom:58px;border-inline-color:var(--rp-gold);opacity:0}
.rp-bound__ax{color:var(--rp-txt2)}
.rp-bound__field[data-cloth=off] .rp-bound__cloth{opacity:0;visibility:hidden}
.rp-bound__frame[data-hl=deficit] .rp-bound__cloth>.rp-dfc{opacity:1}
.rp-bound__frame[data-hl=out] .rp-bound__col{opacity:1;border-inline-width:3px}
.rp-bound__frame[data-hl=eff] .rp-bound__cl{filter:saturate(1.7) brightness(1.2)}
.rp-bound__frame[data-hl=staff] .rp-bound__staff{filter:drop-shadow(0 0 5px #f0c986)}
.rp-bound__frame[data-hl=util] .rp-bound__cl{filter:brightness(1.35)}
.rp-threads{position:relative;z-index:0;display:block;width:100%;height:110px;overflow:visible;pointer-events:none}
.rp-threads path{fill:none;stroke:#f0c986b3;stroke-width:1.4;vector-effect:non-scaling-stroke;stroke-dasharray:none;stroke-dashoffset:0}
/* the dash exists only while the frame and threads draw in; at rest they are whole lines (non-scaling strokes break a pathLength dash) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-bound:not([data-rp-done]) :is(.rp-bound__sel rect,.rp-threads path){stroke-dasharray:100}
.rp-tags{position:relative;z-index:1;list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:16px;align-items:start}
.rp-tag[data-alt]{margin-top:42px}
.rp-tag__in{transform-origin:50% -40px}
.rp-tag__box{display:grid;gap:6px;padding:14px 16px;background:#072d2b;border:1px solid #6bb68f80;border-top:3px solid var(--rp-ochre);color:var(--rp-txt);text-decoration:none;min-height:100%}
.rp-tag[data-hot] .rp-tag__box{border-color:var(--rp-gold);background:#0b3634}
.rp-tag__k{font:13px var(--rp-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--rp-gold)}
.rp-tag__t{font-weight:750;font-size:17px;color:#f6f4ef;line-height:1.25}
.rp-tag__q{font-size:16px;line-height:1.45}
.rp-tag__r{display:grid;border-top:1px solid #6bb68f40;padding-top:6px}
.rp-tag__r small{font:13px var(--rp-mono);color:var(--rp-txt2)}
.rp-tag__r output{font:700 22px var(--rp-mono);color:#f6f4ef;letter-spacing:-.02em}
.rp-tag__go{font-size:15px;font-weight:650;color:var(--rp-gold)}
:root[data-m-go] .rp-tag__in[data-m-on]{animation-name:rp-tagsway;animation-duration:5.5s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
.rp-tag:nth-child(2) .rp-tag__in{animation-delay:-1.4s}.rp-tag:nth-child(3) .rp-tag__in{animation-delay:-2.6s}.rp-tag:nth-child(4) .rp-tag__in{animation-delay:-.7s}.rp-tag:nth-child(5) .rp-tag__in{animation-delay:-3.5s}
@keyframes rp-tagsway{from{transform:rotate(-.9deg)}to{transform:rotate(.9deg)}}
/* boundary entrance: selvedge-draw (frame drawn from the top-left corner, then the tags drop on their threads) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-bound:not([data-rp-in]) :is(.rp-tag,.rp-bound__cloth){opacity:0}
:root[data-m-go] .rp-root[data-rp-arm] .rp-bound:not([data-rp-in]) :is(.rp-bound__sel rect,.rp-threads path){stroke-dashoffset:100}
:root[data-m-go] .rp-bound[data-rp-in]:not([data-rp-done]) .rp-bound__sel rect{animation-name:rp-draw;animation-duration:460ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-bound[data-rp-in]:not([data-rp-done]) .rp-bound__cloth{animation-name:rp-fade-up;animation-duration:420ms;animation-delay:160ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-bound[data-rp-in]:not([data-rp-done]) .rp-threads path{animation-name:rp-draw;animation-duration:360ms;animation-delay:calc(320ms + var(--i) * 60ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-bound[data-rp-in]:not([data-rp-done]) .rp-tag{animation-name:rp-tagdrop;animation-duration:440ms;animation-delay:calc(400ms + var(--i) * 60ms);animation-timing-function:cubic-bezier(.3,1.4,.5,1);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
@keyframes rp-draw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
@keyframes rp-tagdrop{from{transform:translateY(-40px);opacity:0}}
/* hand-over 9 → 10: the framed cloth slides left and scales toward the register's locator */
@supports (animation-timeline:view()){
 .rp-bound__field{view-timeline-name:--rp-fieldv;view-timeline-axis:block}
 :root[data-m-go] .rp-bound__move{animation-name:rp-to-loc;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--rp-fieldv;animation-range-start:exit 0%;animation-range-end:exit 100%}
}
/* the frame contracts on its bottom edge as it leaves, staying inside its own column (never over the outside-the-model labels) and keeping its threads attached */
@keyframes rp-to-loc{to{transform:scale(.9)}}

/* ---------------------------------------------------------------- 10 · register (forest) */
.rp-reg{padding-block:clamp(64px,9svh,110px) clamp(80px,12svh,140px)}
.rp-reg__head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:40px;align-items:end}
.rp-reg__head p{color:var(--rp-txt)}
.rp-reg__rail{position:relative;overflow:hidden;margin-top:28px;border-block:1px solid #6bb68f55;padding:12px 0}
.rp-status{border:0;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.rp-status legend{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.rp-status label{position:relative;display:block}
.rp-status input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.rp-status span{display:grid;gap:2px;min-height:44px;padding:8px 12px;border:1px solid #6bb68f66;height:100%}
.rp-status span b{font-size:16px;color:#f6f4ef}
.rp-status span small{font-size:13px;line-height:1.4;color:var(--rp-txt2)}
.rp-status input:checked+span{background:#072d2b;border-color:var(--rp-gold);box-shadow:inset 0 3px var(--rp-gold)}
.rp-status input:focus-visible+span{outline:3px solid var(--rp-ochre);outline-offset:2px}
.rp-reg__chg{font:13px var(--rp-mono);letter-spacing:.04em;margin-top:10px;color:var(--rp-txt)}
.rp-reg__chg output{font-weight:700;color:var(--rp-gold)}
.rp-reg__scan{position:absolute;top:0;bottom:0;left:0;width:80px;background:linear-gradient(90deg,transparent,#6bb68f22,transparent);pointer-events:none}
.rp-reg__grid{display:grid;grid-template-columns:minmax(0,44fr) minmax(0,56fr);gap:clamp(24px,3vw,48px);margin-top:24px;align-items:start}
.rp-reg__loc{position:sticky;top:0;height:100svh;display:flex;flex-direction:column;justify-content:center;gap:14px;padding-block:24px}
.rp-reg__frame{position:relative;display:grid;grid-template-rows:12px clamp(220px,40svh,380px) 34px 24px;gap:4px;padding:14px;border:2.5px solid var(--rp-ochre)}
.rp-reg__cl{position:relative;min-height:0;transition:filter .3s}
.rp-reg__frame>.rp-dfc{top:30px;bottom:72px;left:14px;right:14px;height:auto;opacity:0;transition:opacity .3s}
.rp-reg__sv,.rp-reg__staff{transition:opacity .3s,filter .3s}
.rp-reg__ax{color:var(--rp-txt2)}
.rp-reg__legend{font-size:16px;line-height:1.5;min-height:3em;color:var(--rp-txt)}
.rp-reg__legend b{color:var(--rp-gold)}
.rp-reg__loc:not([data-part=selvedge]) .rp-reg__sv{opacity:.35}
.rp-reg__loc:not([data-part=staff]) .rp-reg__staff{opacity:.4}
.rp-reg__loc[data-part=staff] .rp-reg__staff{filter:drop-shadow(0 0 5px #f0c986)}
.rp-reg__loc[data-part=fixed] .rp-reg__frame>.rp-dfc{opacity:1}
.rp-reg__loc[data-part=bands] .rp-reg__svg .rp-cl__band{filter:drop-shadow(0 0 3px #f6f4ef)}
.rp-reg__loc[data-part=density] .rp-reg__cl{filter:saturate(1.8) brightness(1.15)}
.rp-reg__loc[data-part=load] .rp-reg__cl{filter:brightness(1.35)}
.rp-reg__loc[data-part=cells] .rp-reg__svg .rp-cl__c{stroke:#f6f4ef;stroke-width:1;vector-effect:non-scaling-stroke}
.rp-reg__loc:not([data-part=offset]) .rp-reg__svg .rp-cl__def{opacity:0}
.rp-reg__loc[data-part=offset] .rp-reg__svg .rp-cl__warp{stroke:#f0c98666}
.rp-reg__rows{list-style:none;margin:0;padding:12vh 0;display:grid;gap:14px}
.rp-reg__card{padding:16px 18px;border:1px solid #6bb68f55;background:#072d2b80;transition:border-color .25s,background .25s}
.rp-reg__rows li[data-lit] .rp-reg__card{border-color:var(--rp-gold);background:#072d2bd9}
.rp-reg__rows li[hidden]{display:none}
.rp-reg__t{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.rp-reg__t b{font-size:19px;color:#f6f4ef;letter-spacing:-.015em}
.rp-dotst{width:10px;height:10px;transform:rotate(45deg);background:var(--rp-sage)}
.rp-dotst[data-st=Estimate]{background:#a3b4f1}.rp-dotst[data-st=Placeholder]{background:var(--rp-ochre)}
.rp-stat{font:13px var(--rp-mono);letter-spacing:.06em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;color:#b6dfc8}
.rp-stat[data-st=Estimate]{color:#c6d0f7}.rp-stat[data-st=Placeholder]{color:var(--rp-gold)}
.rp-chg{font:13px var(--rp-mono);padding:3px 8px;background:var(--rp-gold);color:var(--rp-night)}
.rp-chg[hidden]{display:none}
.rp-reg__v{font:600 16px var(--rp-mono);color:var(--rp-txt);margin-top:8px}
.rp-reg__b{font-size:15px;line-height:1.55;margin-top:6px;color:var(--rp-txt2)}
.rp-reg__acts{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.rp-reg__acts button{min-height:44px;padding:6px 12px;border:1px solid #6bb68f80;background:transparent;color:var(--rp-txt);font-size:15px}
:root[data-m-go] .rp-reg__scan[data-m-on]{animation-name:rp-scanrun;animation-duration:7s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
@keyframes rp-scanrun{from{transform:translateX(0)}to{transform:translateX(calc(min(1440px,100vw) - 160px))}}
/* register entrance: card (rows dealt from the status rail; then the locator lights the first row's part) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-reg:not([data-rp-in]) .rp-reg__rows>li{opacity:0}
:root[data-m-go] .rp-reg[data-rp-in]:not([data-rp-done]) .rp-reg__rows>li{animation-name:rp-deal;animation-duration:480ms;animation-delay:calc(var(--i) * 28ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-reg[data-rp-in]:not([data-rp-done]) .rp-reg__cl{animation-name:rp-light;animation-duration:380ms;animation-delay:500ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
@keyframes rp-deal{from{transform:translateY(-34px) rotateX(18deg);opacity:0}}
@keyframes rp-light{from{filter:brightness(.45)}}

/* ---------------------------------------------------------------- 11 · closing (night, last full screen) */
.rp-close{min-height:100svh;z-index:3;overflow:visible;overflow-x:clip;view-timeline-name:--rp-closev;view-timeline-axis:block;display:flex;align-items:center;padding-block:28px}
.rp-close__grid{display:grid;grid-template-columns:minmax(0,55fr) minmax(0,45fr);gap:clamp(24px,3vw,48px);align-items:center}
.rp-close__wheel{position:relative;width:min(100%,82svh,700px);aspect-ratio:1;justify-self:center;--lift:0}
.rp-close__turn,.rp-close__spin{position:absolute;inset:6%}
.rp-bm{width:100%;height:100%;overflow:visible}
.rp-bm__hub{fill:#0a3d3a;stroke:#6bb68f66}
.rp-bm__bare{fill:none;stroke:#cfe3d84d;stroke-width:1;stroke-dasharray:3 3}
.rp-bm__spk{fill:none;stroke:#cfe3d81f}
.rp-bm__ring{transform-box:view-box;transform-origin:300px 300px}
.rp-bm__ring[data-held] .rp-bm__bare{stroke:var(--rp-gold);stroke-dasharray:none;stroke-width:1.4}
.rp-close__wheel[data-verdict=release] .rp-bm__ring[data-held]{filter:drop-shadow(0 0 6px #6bb68f)}
.rp-close__pawl{position:absolute;inset:6%;transform:rotate(var(--a));transition:transform .45s var(--rp-out);pointer-events:none}
.rp-pawl{position:absolute;left:50%;top:-5%;width:26px;height:21%;margin-left:-13px;display:flex;flex-direction:column;align-items:center;gap:6px;padding-top:6px;transform:translateY(calc(var(--lift) * -6px));transition:transform .4s var(--rp-out)}
.rp-pawl::before{content:'';position:absolute;inset:0;background:var(--rp-ochre);clip-path:polygon(50% 100%,100% 0,0 0)}
.rp-pawl b{position:relative;width:10px;height:10px;border-radius:50%;background:#5a3a0a;border:1px solid #f0c986}
.rp-pawl b[data-on]{background:#b6dfc8;border-color:#b6dfc8;box-shadow:0 0 8px #b6dfc8}
.rp-close__labs{list-style:none;margin:0;padding:0;position:absolute;inset:0}
.rp-close__labs li{position:absolute;left:var(--x);top:var(--y);transform:translate(-50%,-50%);font:13px var(--rp-mono);color:var(--rp-txt2)}
.rp-close__hub{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:30%;display:grid;gap:2px;text-align:center;color:#f6f4ef}
.rp-close__hub span{font:13px var(--rp-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--rp-txt2)}
.rp-close__hub span output{font-size:15px;color:var(--rp-gold)}
.rp-close__hub>output{font-size:clamp(20px,2vw,28px);font-weight:780;letter-spacing:-.03em;line-height:1.15}
.rp-close__held{position:absolute;right:0;bottom:4%;font:13px/1.4 var(--rp-mono);color:var(--rp-gold);max-width:16ch;text-align:right;transition:opacity .3s}
.rp-close__held[data-off]{opacity:0}
.rp-close__side h2{font-size:clamp(1.9rem,2.8vw,2.8rem)}
.rp-close__guide{font-size:17px;margin-top:12px;color:var(--rp-txt)}
.rp-close__scrub{margin-top:16px}
.rp-close__scrub label{font-size:15px;color:var(--rp-txt)}
.rp-close__scrub div{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;align-items:center}
.rp-close__scrub input{width:100%;min-height:44px;accent-color:var(--rp-ochre)}
.rp-close__scrub output{font:700 24px var(--rp-mono);color:var(--rp-gold)}
.rp-close__facts{font-size:15px;color:var(--rp-txt2)}
.rp-checks{border:0;margin:12px 0 0;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.rp-checks legend{font:13px var(--rp-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--rp-gold);margin-bottom:8px;padding:0}
.rp-check{position:relative;display:grid;grid-template-columns:22px minmax(0,1fr);gap:10px;min-height:48px;padding:8px 10px;border:1px solid #6bb68f55;cursor:pointer}
.rp-check input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.rp-check__box{width:20px;height:20px;border:1.5px solid var(--rp-gold);margin-top:2px}
.rp-check[data-on]{border-color:#b6dfc8;background:#0e4d4a99}
.rp-check[data-on] .rp-check__box{background:#b6dfc8;border-color:#b6dfc8}
.rp-check:has(input:focus-visible){outline:3px solid var(--rp-ochre);outline-offset:2px}
.rp-check__txt{font-size:14px;line-height:1.4;color:var(--rp-txt2)}
.rp-check__txt b{display:flex;justify-content:space-between;gap:6px;font-size:16px;color:#f6f4ef}
.rp-check__txt em{font:normal 13px var(--rp-mono);color:var(--rp-gold)}
.rp-check[data-on] .rp-check__txt em{color:#b6dfc8}
.rp-verdict{margin-top:14px;font-size:clamp(20px,1.9vw,26px);font-weight:720;line-height:1.3;letter-spacing:-.02em;color:var(--rp-gold)}
.rp-verdict[data-ok]{color:#b6dfc8}
.rp-close__hold{font:13px/1.5 var(--rp-mono);margin-top:6px;color:var(--rp-txt)}
.rp-close__call{font-size:15px;line-height:1.5;margin-top:10px;color:var(--rp-txt2)}
.rp-close__call b{color:#f6f4ef}
.rp-close__link{display:inline-flex;align-items:center;min-height:44px;color:var(--rp-gold);font-weight:650}
.rp-close__thread{position:absolute;left:0;width:55%;bottom:-120px;height:260px;overflow:visible;pointer-events:none;z-index:3}
.rp-close__thread path{fill:none;stroke:var(--rp-ochre);stroke-width:2.5;vector-effect:non-scaling-stroke;stroke-dasharray:100;stroke-dashoffset:0}
.rp-close__wheel[data-verdict=release]~* .rp-close__thread path,.rp-close:has([data-verdict=release]) .rp-close__thread path{stroke:var(--rp-sage)}
:root[data-m-go] .rp-close__spin[data-m-on]{animation-name:rp-turnslow;animation-duration:60s;animation-timing-function:linear;animation-iteration-count:infinite;animation-direction:normal}
@keyframes rp-turnslow{0%{transform:rotate(0)}90%{transform:rotate(-6deg)}93%{transform:rotate(1deg)}100%{transform:rotate(0)}}
:root[data-m-go] .rp-close__wheel[data-rp-done] .rp-pawl b:not([data-on]){animation-name:rp-lamp;animation-duration:1.8s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate}
@keyframes rp-lamp{from{opacity:.55}to{opacity:1}}
:root[data-m-go] .rp-close[data-rp-done] .rp-close__thread{animation-name:rp-threadsway;animation-duration:4.5s;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-direction:alternate;transform-origin:50% 0}
@keyframes rp-threadsway{from{transform:skewX(-1.5deg)}to{transform:skewX(1.5deg)}}
/* closing entrance: wind (rings wind on from the hub outward, then the pawl drops into the release notch) */
:root[data-m-go] .rp-root[data-rp-arm] .rp-close:not([data-rp-in]) :is(.rp-bm__ring,.rp-pawl){opacity:0}
:root[data-m-go] .rp-root[data-rp-arm] .rp-close:not([data-rp-in]) .rp-close__thread path{stroke-dashoffset:100}
:root[data-m-go] .rp-close[data-rp-in]:not([data-rp-done]) .rp-bm__ring{animation-name:rp-wind;animation-duration:520ms;animation-delay:calc(var(--k) * 90ms);animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-close[data-rp-in]:not([data-rp-done]) .rp-pawl{animation-name:rp-pawldrop;animation-duration:340ms;animation-delay:560ms;animation-timing-function:cubic-bezier(.3,1.5,.5,1);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
:root[data-m-go] .rp-close[data-rp-in]:not([data-rp-done]) .rp-close__thread path{animation-name:rp-draw;animation-duration:500ms;animation-delay:400ms;animation-timing-function:var(--rp-out);animation-fill-mode:backwards;animation-iteration-count:1;animation-direction:normal}
@keyframes rp-wind{from{transform:rotate(-100deg);opacity:0}}
@keyframes rp-pawldrop{from{transform:translateY(-40px);opacity:0}}
/* hand-over 10 → 11: the beam turns with the closing's arrival */
@supports (animation-timeline:view()){
 :root[data-m-go] .rp-close__turn{animation-name:rp-beamin;animation-duration:1ms;animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--rp-closev;animation-range-start:entry 0%;animation-range-end:entry 100%}
}
@keyframes rp-beamin{from{transform:rotate(-120deg)}to{transform:rotate(0)}}

/* ---------------------------------------------------------------- calm and reduced motion show the finished state */
:root[data-motion=calm] .rp-root *,:root[data-motion=calm] .rp-splash *{transition-duration:.01ms!important}
@media(prefers-reduced-motion:reduce){.rp-root *,.rp-splash *{animation-name:none!important;animation-timeline:auto!important;transition-duration:.01ms!important}}

/* ---------------------------------------------------------------- phones and narrow tablets */
@media(max-width:900px){
 .rp-sec{font-size:17px}
 .rp-splash__grid{grid-template-columns:minmax(0,1fr);gap:18px;padding-block:20px 8px}
 .rp-splash .rp-h1{font-size:44px;margin-top:16px}
 .rp-splash .rp-h1__acc{font-size:40px}
 .rp-splash__lede{font-size:17px;margin-top:14px}
 .rp-splash__actions{margin-top:16px;gap:12px}
 .rp-splash__read output{font-size:24px}
 .rp-splash__stage{height:52svh;min-height:330px}
 .rp-sp__flag{position:static;width:auto;margin-bottom:6px;padding:6px 10px;grid-template-columns:auto 1fr;gap:10px;align-items:baseline}
 .rp-sp__move{grid-template-rows:auto auto minmax(0,48fr) 24px 12px minmax(0,40fr) 24px}
 .rp-sp__label{flex-direction:column;gap:2px;padding-bottom:4px}
 .rp-sp__stack{display:contents}
 .rp-sp__flag{grid-row:2;grid-column:1}
 .rp-sp__st{grid-row:3;grid-column:1}
 .rp-sp__beam{grid-row:4}.rp-sp__svw{grid-row:5}.rp-sp__cloth{grid-row:6}.rp-sp__ax{grid-row:7}
 .rp-sp__run{grid-row:3/7}
 .rp-ax span:not([data-key]){visibility:hidden}
 .rp-ax span{overflow:visible}
 .rp-splash__handover,.rp-bench__handover{display:none}
 .rp-bench{padding-top:36px}
 .rp-bench__grid{display:grid;grid-template-columns:minmax(0,1fr);gap:12px}
 .rp-bench__ctl,.rp-bench__stage{display:contents}
 .rp-bench__ctl>.gft-eyebrow{order:1}.rp-bench__ctl>h2{order:2}.rp-lede{order:3}.rp-presets{order:4}.rp-banner{order:5}
 .rp-tot{order:6}.rp-viz{order:7}.rp-spine-wrap{order:8}.rp-read{order:9}.rp-hover{order:10}.rp-error{order:11}.rp-form{order:12}
 .rp-tot{grid-template-columns:repeat(2,minmax(0,1fr))}
 .rp-tot>div:nth-child(3){grid-column:1/-1;border-left:0;padding-left:0;border-top:1px solid #6bb68f40}
 .rp-tot output{font-size:28px}
 .rp-viz{position:sticky;top:0;z-index:3;height:38svh;min-height:260px;background:var(--rp-deep);grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,40fr) 18px 10px minmax(0,60fr) 22px;padding-block:6px;box-shadow:0 10px 24px #0007}
 .rp-viz__body{grid-template-columns:minmax(0,1fr)}
 .rp-chips{display:none}
 .rp-spine{display:none}
 .rp-scrub{display:flex;flex:1;gap:10px;align-items:center;font:13px var(--rp-mono)}
 .rp-scrub input{flex:1;min-height:44px;accent-color:var(--rp-ochre)}
 .rp-read output{font-size:22px}
 .rp-phase-grid{grid-template-columns:minmax(0,1fr)}
 .rp-delay__head,.rp-delay__cols,.rp-delay__reads{grid-template-columns:minmax(0,1fr)}
 .rp-delay__cols{display:flex;flex-direction:column}
 .rp-delay__fig{order:-1}
 .rp-delay__big output{font-size:56px}
 .rp-delay__band{grid-template-rows:auto 12px 26svh 24px auto}
 .rp-delay__lab{flex-direction:column}
 .rp-delay__reads>div+div{border-left:0;padding-left:0;border-top:1px solid #6bb68f40}
 .rp-delay__reads>div{padding-bottom:12px}
 .rp-ladder{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;height:160px;gap:6px;padding-bottom:4px}
 .rp-rung{flex:0 0 44px;scroll-snap-align:start}
 .rp-seam__dark,.rp-seam__ink{padding:56px 20px}
 .rp-seam .rp-cl{height:80px}
 .rp-cmp{padding-top:140px}
 .rp-cmp__stage{padding:12px}
 .rp-cmp__bar{flex-direction:column;align-items:stretch}
 .rp-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
 .rp-actions button{font-size:13px;padding:6px 8px}
 .rp-cmp__body{grid-template-columns:minmax(0,1fr);gap:16px}
 .rp-cmp__left{padding:0}
 .rp-cmp__plot{grid-template-rows:auto 22svh 18svh 24px;padding:10px}
 .rp-cmp__plab{flex-direction:column;gap:2px}
 .rp-cmp__head{position:static;width:auto;background:none;padding:0}
 .rp-cmp__stack{grid-row:2}.rp-cmp__cloths{grid-row:3}
 .rp-cmp__deltas{grid-template-columns:repeat(2,minmax(0,1fr))}
 .rp-dt output{font-size:20px}
 .rp-ledger__head{grid-template-columns:minmax(0,1fr)}
 .rp-ledger__tools{justify-items:start}
 .rp-tabs{flex-wrap:nowrap;overflow-x:auto;max-width:100%}
 .rp-tabs span{white-space:nowrap}
 .rp-ledger__grid{grid-template-columns:minmax(0,1fr);gap:12px}
 .rp-ledger__rail{width:auto;padding-left:0;border-left:0;order:-1;position:sticky;top:0;z-index:3}
 .rp-mcard{position:static;grid-template-columns:auto 1fr;padding:10px 12px;gap:6px 12px}
 .rp-mcard__k{grid-column:1/-1}
 .rp-mcard__v{grid-column:1/-1;display:flex;gap:4px 14px;align-items:baseline;align-content:flex-start;flex-wrap:wrap;min-height:90px}
 .rp-mcard__v>output{font-size:28px}
 .rp-mcard__chips,.rp-mcard__read{display:none}
 .rp-ledger__scroll .c-w{width:120px}
 .rp-rw{width:120px;height:22px}
 .rp-ledger__scroll table{min-width:720px}
 .rp-reed{left:98px;width:120px}
 .rp-method__pin,.rp-method__in,.rp-int__pin,.rp-int__iris,.rp-int__in{display:contents}
 .rp-method,.rp-int{padding-top:48px}
 .rp-method__top,.rp-int__top{grid-template-columns:minmax(0,1fr);padding-inline:20px;gap:12px}
 .rp-rail{justify-items:start}
 .rp-method__reads{position:sticky;top:0;z-index:3;background:var(--rp-paper);grid-template-columns:repeat(4,minmax(0,1fr));margin:12px 20px 0}
 .rp-method__reads>div{padding:6px 4px;border:0!important}
 .rp-method__reads span{font-size:13px;line-height:1.2}
 .rp-method__reads output{font-size:24px}
 .rp-method__reads>div:not([data-k="1"]) span{visibility:hidden;height:0}
 .rp-method__stage{position:sticky;top:76px;z-index:3;height:calc(40svh - 76px);min-height:200px;background:var(--rp-paper);margin-inline:20px;grid-template-rows:12px minmax(0,1fr) 40px 22px}
 .rp-method__eq{margin:10px 20px 0}
 .rp-steps{margin-top:0}
 .rp-steps>li{min-height:auto;padding:0 20px 28px;display:block}
 .rp-steps>li:first-child{padding-top:24px}
 .rp-steps>li:last-child{min-height:100svh}
 .rp-card{width:auto}
 .rp-card__lead{font-size:18px}
 .rp-int__bg{display:none}
 .rp-int__h{padding-inline:0}
 .rp-int__reads{position:sticky;top:0;z-index:3;background:var(--rp-night);margin:0 20px;padding-top:8px}
 .rp-int__total{font-size:56px}
 .rp-int__sub b{font-size:22px}
 .rp-int__sub{gap:14px}
 .rp-int__lab{margin:8px 20px 0;font-size:15px}
 .rp-int__stage{position:sticky;top:120px;z-index:3;height:calc(42svh - 120px);min-height:180px;background:var(--rp-night);margin:0 20px;grid-template-rows:12px minmax(0,1fr) 22px}
 .rp-int__chips{margin:10px 20px 0}
 .rp-int__pull{display:none}
 .rp-readers__grid,.rp-bound__head,.rp-reg__head{grid-template-columns:minmax(0,1fr)}
 .rp-bound__notes{grid-template-columns:minmax(0,1fr);gap:14px}
 .rp-bound__field{gap:0}
 .rp-ply output{font-size:22px}
 .rp-bound__field{grid-template-columns:minmax(0,1fr)}
 .rp-bound__side{padding:12px 0}
 .rp-bound__side--l{order:2}.rp-bound__side--r{order:3}
 .rp-bound__in{grid-template-columns:repeat(2,minmax(0,1fr))}
 .rp-bound__cloth{grid-template-rows:12px 160px 26px 24px}
 .rp-threads{display:none}
 .rp-tags{margin-top:20px;display:flex;overflow-x:auto;scroll-snap-type:x mandatory;gap:12px;padding:30px 0 8px}
 .rp-tag{flex:0 0 280px;scroll-snap-align:start;position:relative}
 .rp-tag[data-alt]{margin-top:0}
 .rp-tag::before{content:'';position:absolute;left:50%;top:-30px;height:30px;border-left:1.4px solid #f0c986b3}
 .rp-status{display:flex;overflow-x:auto;gap:8px}
 .rp-status label{flex:0 0 220px}
 .rp-reg__grid{grid-template-columns:minmax(0,1fr)}
 .rp-reg__loc{height:auto;top:0;z-index:3;background:var(--rp-forest);padding:8px 0;justify-content:flex-start}
 .rp-reg__frame{grid-template-rows:10px 30svh 0 22px;padding:8px;height:auto}
 .rp-reg__frame{grid-template-rows:10px calc(30svh - 60px) 18px 22px}
 .rp-reg__legend{font-size:15px;min-height:4.5em}
 .rp-reg__rows{padding:8px 0}
 .rp-close{display:block;padding-block:40px 120px}
 .rp-close__grid{grid-template-columns:minmax(0,1fr)}
 .rp-close__wheel{width:min(100%,340px)}
 .rp-close__hub>output{font-size:22px}
 .rp-close__wheel{margin-bottom:34px}
 .rp-close__held{top:100%;bottom:auto;left:0;right:0;max-width:none;text-align:center;margin-top:6px}
 .rp-checks{grid-template-columns:minmax(0,1fr)}
 .rp-verdict{font-size:22px}
 .rp-close__thread{left:auto;right:4px;width:30px;bottom:-110px;height:70%}
 .rp-card{box-shadow:0 8px 24px #072d2b22}
}
@media(max-width:640px){.rp-splash .rp-h1{font-size:44px}.rp-cmp__head h2,.rp-method__top h2,.rp-int__h h2{font-size:30px}}
