.book{grid-template-columns:var(--rail) minmax(0, 1fr);gap:var(--s-8);padding-bottom:var(--s-10);align-items:start;display:grid}.bookhead{padding-block:var(--s-8) var(--s-7);border-bottom:1px solid var(--rule-strong)}.bookhead__crumb{margin-bottom:var(--s-5);font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink-3);align-items:center;gap:.55rem;display:flex}.bookhead__crumb a{color:var(--ink-3);transition:color var(--fast) var(--ease);text-decoration:none}.bookhead__crumb a:hover{color:var(--accent)}.bookhead__crumb span[aria-hidden]{color:var(--ink-4)}.bookhead__grid{gap:var(--s-7);grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);align-items:end;display:grid}.bookhead__title{letter-spacing:var(--track-display);max-width:22ch;font-size:clamp(2.15rem,1.3rem + 3vw,3.25rem);font-weight:400;line-height:1.06}.bookhead__byline{margin-top:var(--s-4);font-family:var(--face-sans);font-size:var(--t-ui);color:var(--ink-3)}.bookhead__byline strong{color:var(--ink);font-weight:600}.bookhead__blurb{font-size:var(--t-ui);line-height:var(--lh-normal);color:var(--ink-3);font-family:var(--face-sans);max-width:48ch;padding-bottom:.35rem}@media (width<=900px){.bookhead__grid{gap:var(--s-5);grid-template-columns:1fr;align-items:start}}.rail{padding-top:var(--s-7);font-family:var(--face-sans);position:sticky;top:5.5rem}.rail__section+.rail__section{margin-top:var(--s-6);padding-top:var(--s-5);border-top:1px solid var(--rule)}.gauge__figure{font-family:var(--face-mono);font-variant-numeric:tabular-nums;color:var(--ink);letter-spacing:-.02em;align-items:baseline;gap:.35rem;display:flex}.gauge__done{color:var(--ink);font-size:2.25rem;font-weight:600;line-height:1}.gauge__total{font-size:var(--t-ui);color:var(--ink-3);font-weight:500}.gauge__track{height:4px;margin-top:var(--s-4);background:var(--rule);border-radius:2px;position:relative;overflow:hidden}.gauge__fill{background:var(--accent);width:0;transition:width var(--slow) var(--ease);border-radius:2px;position:absolute;inset:0 auto 0 0}.gauge__caption{margin-top:var(--s-3);font-size:var(--t-sm);color:var(--ink-3);font-weight:500}.gauge__streak{margin-top:var(--s-3);background:var(--accent-wash);border:1px solid var(--accent-border);font-size:var(--t-micro);color:var(--accent-deep);border-radius:var(--radius-pill);align-items:center;gap:.35rem;padding:.25rem .65rem;font-weight:500;display:inline-flex}.gauge__streak b{color:var(--accent-deep);font-family:var(--face-mono);font-variant-numeric:tabular-nums;font-weight:600}.resume{padding:var(--s-4);background:var(--paper-raised);border:1px solid var(--rule);border-left:3px solid var(--accent);border-radius:var(--radius-sm);box-shadow:var(--shadow-subtle);transition:background var(--fast) var(--ease), border-color var(--fast) var(--ease), transform var(--fast) var(--ease), box-shadow var(--fast) var(--ease);text-decoration:none;display:block}.resume:hover{background:var(--accent-wash);border-color:var(--accent);box-shadow:var(--shadow-card);transform:translateY(-1px)}.resume:active{transform:translateY(1px)}.resume__label{font-size:var(--t-micro);letter-spacing:var(--track-label);text-transform:uppercase;color:var(--accent-deep);align-items:center;gap:.4rem;font-weight:600;display:flex}.resume__arrow{transition:transform var(--mid) var(--ease);display:inline-block}.resume:hover .resume__arrow{transform:translate(4px)}.resume__target{margin-top:var(--s-2);font-family:var(--face-serif);font-size:var(--t-ui);line-height:var(--lh-snug);color:var(--ink);display:block}.resume__code{font-family:var(--face-mono);font-variant-numeric:tabular-nums;color:var(--ink-3);margin-right:.4rem}.railnav{flex-direction:column;display:flex}.railnav a{font-size:var(--t-sm);color:var(--ink-2);border-bottom:1px solid var(--rule-subtle);border-radius:var(--radius-xs);transition:color var(--fast) var(--ease), background var(--fast) var(--ease);grid-template-columns:1.75rem minmax(0,1fr) auto;align-items:baseline;gap:.5rem;padding-block:.55rem;padding-inline:.35rem;line-height:1.35;text-decoration:none;display:grid}.railnav a:last-child{border-bottom:0}.railnav a:hover{color:var(--accent);background:var(--paper-subtle)}.railnav__roman{font-family:var(--face-mono);font-size:var(--t-micro);color:var(--ink-3);transition:color var(--fast) var(--ease);font-weight:600}.railnav a:hover .railnav__roman{color:var(--accent)}.railnav__count{font-family:var(--face-mono);font-variant-numeric:tabular-nums;font-size:var(--t-micro);color:var(--ink-3)}.railnav a[data-complete] .railnav__count{color:var(--status-complete);font-weight:600}.tools>summary{cursor:pointer;font-size:var(--t-sm);color:var(--ink-3);transition:color var(--fast) var(--ease);font-weight:500;list-style:none}.tools>summary::-webkit-details-marker{display:none}.tools>summary:hover{color:var(--ink)}.tools>summary:after{content:" +";font-family:var(--face-mono)}.tools[open]>summary:after{content:" −"}.tools__body{align-items:flex-start;gap:var(--s-2);margin-top:var(--s-3);flex-direction:column;display:flex}.tools__note{margin-top:var(--s-3);font-size:var(--t-micro);color:var(--ink-3);line-height:1.5}.main{padding-top:var(--s-7);min-width:0}.part{scroll-margin-top:6rem}.part+.part{margin-top:var(--s-9)}.part__head{align-items:baseline;gap:var(--s-4);padding-bottom:var(--s-4);border-bottom:2px solid var(--ink);grid-template-columns:3.5rem minmax(0,1fr) auto;display:grid}.part__roman{font-family:var(--face-mono);font-size:var(--t-sm);color:var(--ink);letter-spacing:.02em;font-weight:600}.part__title{font-size:var(--t-h3);letter-spacing:var(--track-heading);font-weight:500}.part__summary{margin-top:var(--s-2);font-family:var(--face-sans);font-size:var(--t-sm);line-height:var(--lh-normal);color:var(--ink-3);max-width:60ch}.part__count{font-family:var(--face-mono);font-variant-numeric:tabular-nums;font-size:var(--t-sm);color:var(--ink-3);white-space:nowrap;font-weight:500}.row{align-items:start;gap:var(--s-4);padding:var(--s-4) var(--s-3);border-bottom:1px solid var(--rule);border-radius:var(--radius-xs);transition:background var(--fast) var(--ease), border-color var(--mid) var(--ease);grid-template-columns:1.5rem 3.5rem minmax(0,1fr) auto;display:grid}.row:hover{background:var(--paper-subtle)}.row[data-next]{background:var(--accent-wash);border-left:3px solid var(--accent);padding-left:calc(var(--s-3) + 1px)}.row__input{opacity:0;width:1px;height:1px;margin:0;position:absolute}.row__mark{border:1.5px solid var(--ink-4);border-radius:var(--radius-xs);cursor:pointer;width:1rem;height:1rem;transition:background var(--fast) var(--ease), border-color var(--fast) var(--ease), transform var(--fast) var(--ease);background:0 0;margin-top:.35rem;position:relative}.row__mark:after{content:"";position:absolute;inset:-.65rem}.row__mark:hover{border-color:var(--ink)}.row__input:checked+.row__mark{background:var(--ink);border-color:var(--ink)}.row__input:focus-visible+.row__mark{outline:2px solid var(--accent);outline-offset:3px}.row[data-next] .row__mark{border-color:var(--accent)}.row__mark:active{transform:scale(.88)}.row__code{font-family:var(--face-mono);font-variant-numeric:tabular-nums;font-size:var(--t-sm);color:var(--ink-3);transition:color var(--fast) var(--ease);line-height:1.55}.row:has(.row__input:checked) .row__code{color:var(--ink-3)}.row[data-next] .row__code{color:var(--accent);font-weight:600}.row__body{min-width:0}.row__title{font-size:var(--t-body);color:var(--ink);transition:color var(--fast) var(--ease);font-weight:500;line-height:1.4}.row:has(.row__input:checked) .row__title{color:var(--ink-3)}.row__title a{color:inherit;background-image:linear-gradient(var(--accent), var(--accent));transition:background-size var(--mid) var(--ease);background-position:0 100%;background-repeat:no-repeat;background-size:0% 1px;text-decoration:none}.row__title a:hover{background-size:100% 1px}.row__sources{margin-top:var(--s-3);font-family:var(--face-sans);font-size:var(--t-sm);flex-wrap:wrap;align-items:center;gap:.35rem .5rem;display:flex}.row__sources a{background:var(--chip-bg);border:1px solid var(--chip-border);color:var(--chip-text);font-size:var(--t-micro);border-radius:var(--radius-xs);transition:color var(--fast) var(--ease), border-color var(--fast) var(--ease), background var(--fast) var(--ease), box-shadow var(--fast) var(--ease);align-items:center;padding:.18rem .5rem;font-weight:500;text-decoration:none;display:inline-flex}.row__sources a:hover{color:var(--ink);border-color:var(--ink-4);background:var(--paper-raised);box-shadow:var(--shadow-subtle)}.row__sources a[data-free]{background:var(--chip-free-bg);border-color:var(--chip-free-border);color:var(--chip-free-text);font-weight:600}.row__sources a[data-free]:hover{background:var(--paper-raised);border-color:var(--accent)}.row__note{margin-top:var(--s-3)}.row__note textarea{width:100%;min-height:5.5rem;padding:var(--s-3);border:1px solid var(--rule-strong);background:var(--paper-raised);border-radius:var(--radius-sm);font-family:var(--face-sans);font-size:var(--t-ui);line-height:var(--lh-normal);color:var(--ink);resize:vertical;box-shadow:var(--shadow-subtle);transition:border-color var(--fast) var(--ease)}.row__note textarea::placeholder{color:var(--ink-3)}.row__note textarea:focus{border-color:var(--ink);outline:2px solid var(--accent);outline-offset:2px}.row__aside{align-items:center;gap:var(--s-3);font-family:var(--face-sans);font-size:var(--t-sm);white-space:nowrap;display:flex}.row__guide{color:var(--ink);border:1px solid var(--rule-strong);background:var(--paper-raised);border-radius:var(--radius-xs);transition:border-color var(--fast) var(--ease), color var(--fast) var(--ease), background var(--fast) var(--ease);padding:.2rem .55rem;font-weight:500;text-decoration:none}.row__guide:hover{border-color:var(--accent);color:var(--accent-deep);background:var(--accent-wash)}.row__notebtn{font-size:var(--t-sm);color:var(--ink-3);border-radius:var(--radius-xs);cursor:pointer;opacity:0;transition:opacity var(--fast) var(--ease), color var(--fast) var(--ease), background var(--fast) var(--ease);background:0 0;border:0;padding:.2rem .4rem;font-weight:500}.row:hover .row__notebtn,.row__notebtn:focus-visible,.row__notebtn[data-has-note]{opacity:1}.row__notebtn:hover{color:var(--ink);background:var(--paper-subtle)}.row__notebtn[data-has-note]{color:var(--accent-deep)}.checklist{margin-top:var(--s-6);padding:var(--s-5);background:var(--paper-subtle);border:1px solid var(--rule);border-radius:var(--radius-sm)}.checklist__title{font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink);font-weight:600}.checklist__items{margin-top:var(--s-3);gap:var(--s-3);grid-template-columns:repeat(auto-fit,minmax(min(100%,22rem),1fr));display:grid}.checklist__item{align-items:baseline;gap:var(--s-3);display:flex}.checklist__item input{width:.875rem;height:.875rem;accent-color:var(--ink);cursor:pointer;flex:none;margin:0;transform:translateY(.1rem)}.checklist__item label{font-family:var(--face-sans);font-size:var(--t-sm);line-height:var(--lh-normal);color:var(--ink-2);cursor:pointer;transition:color var(--fast) var(--ease)}.checklist__item:has(input:checked) label{color:var(--ink-3)}.sources{margin-top:var(--s-8);padding-top:var(--s-6);border-top:1px solid var(--rule-strong)}.sources__grid{margin-top:var(--s-4);gap:var(--s-3) var(--s-6);grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));display:grid}.sources__item{justify-content:space-between;align-items:baseline;gap:var(--s-3);padding:var(--s-4);background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius-sm);box-shadow:var(--shadow-subtle);font-family:var(--face-sans);font-size:var(--t-sm);transition:border-color var(--fast) var(--ease), box-shadow var(--fast) var(--ease);display:flex}.sources__item:hover{border-color:var(--rule-strong);box-shadow:var(--shadow-card)}.sources__item a{color:var(--ink);transition:color var(--fast) var(--ease);font-weight:500;text-decoration:none}.sources__item a:hover{color:var(--accent)}.sources__kind{font-family:var(--face-mono);font-size:var(--t-micro);color:var(--ink-3);text-transform:uppercase;letter-spacing:.06em;font-weight:600}.attrib{margin-top:var(--s-9);padding-top:var(--s-6);border-top:1px solid var(--rule-strong);font-family:var(--face-sans);font-size:var(--t-sm);line-height:var(--lh-normal);color:var(--ink-3);max-width:72ch}.attrib>*+*{margin-top:var(--s-3)}.attrib a{color:var(--ink-2);text-decoration:underline;-webkit-text-decoration-color:var(--ink-4);text-decoration-color:var(--ink-4);text-underline-offset:.16em;transition:text-decoration-color var(--fast) var(--ease)}.attrib a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);color:var(--ink)}@media (width<=1023px){.book{grid-template-columns:1fr;gap:0}.rail{z-index:15;margin-inline:calc(var(--gutter) * -1);padding-top:0;padding-inline:var(--gutter);background:color-mix(in srgb, var(--paper) 94%, transparent);-webkit-backdrop-filter:saturate(180%)blur(16px);border-bottom:1px solid var(--rule);position:sticky;top:4.25rem}.rail__strip{align-items:center;gap:var(--s-4);padding-block:var(--s-3);grid-template-columns:auto minmax(0,1fr);display:grid}.rail__section+.rail__section{border-top:0;margin-top:0;padding-top:0}.gauge__figure{align-items:baseline}.gauge__done{font-size:1.35rem}.gauge__track{margin-top:var(--s-2)}.gauge__caption,.gauge__streak{display:none}.resume{padding:var(--s-2) var(--s-3);min-width:0}.resume__target{font-size:var(--t-sm);text-overflow:ellipsis;white-space:nowrap;margin-top:.15rem;overflow:hidden}.railnav,.tools{display:none}.main{padding-top:var(--s-6)}}@media (width>=1024px){.rail__jump{display:none}}.rail__jump{padding-bottom:var(--s-3)}.rail__jump select{width:100%;padding:var(--s-2) var(--s-3);border:1px solid var(--rule-strong);background:var(--paper-raised);border-radius:var(--radius-sm);font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink)}@media (width<=640px){.row{gap:var(--s-3);row-gap:var(--s-2);grid-template-columns:1.25rem minmax(0,1fr)}.row__code{font-size:var(--t-micro);grid-area:1/2;margin-bottom:.15rem;line-height:1.2}.row__body{grid-area:2/2}.row__aside{margin-top:var(--s-2);grid-area:3/2}.row__notebtn{opacity:1}.part__head{grid-template-columns:2.5rem minmax(0,1fr)}.part__count{margin-top:var(--s-2);grid-column:2}}.figure{padding:var(--s-5);background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius-sm);box-shadow:var(--shadow-subtle);margin:0}.figure__head{justify-content:space-between;align-items:baseline;gap:var(--s-4);padding-bottom:var(--s-3);border-bottom:1px solid var(--rule-subtle);display:flex}.figure__title{font-family:var(--face-sans);font-size:var(--t-ui);color:var(--ink);font-weight:600}.figure__total{font-family:var(--face-mono);font-variant-numeric:tabular-nums;font-size:var(--t-micro);letter-spacing:.04em;color:var(--ink-3);font-weight:600}.stack{background:var(--paper-sunken);border-radius:var(--radius-xs);width:100%;height:26px;margin-top:var(--s-4);gap:2px;display:flex;overflow:hidden}.stack__seg{background:var(--seg-color);min-width:3px;transition:flex-grow var(--slow) var(--ease), filter var(--fast) var(--ease);justify-content:center;align-items:center;display:flex;position:relative}.stack__seg:hover{filter:brightness(1.08)}.stack__value{font-family:var(--face-mono);font-variant-numeric:tabular-nums;font-size:var(--t-micro);color:#fff;opacity:0;transition:opacity var(--mid) var(--ease) .2s;font-weight:600}.stack__seg[data-wide] .stack__value{opacity:1}.legend{gap:var(--s-3) var(--s-6);margin-top:var(--s-4);flex-wrap:wrap;display:flex}.legend__item{font-family:var(--face-sans);font-size:var(--t-sm);color:var(--ink-2);align-items:center;gap:.5rem;display:flex}.legend__swatch{border-radius:var(--radius-xs);background:var(--seg-color);border:1px solid #00000014;flex:none;width:.75rem;height:.75rem}.legend__count{font-family:var(--face-mono);font-variant-numeric:tabular-nums;color:var(--ink-3);margin-left:.2rem;font-weight:600}.figure__note{margin-top:var(--s-4);padding-top:var(--s-3);border-top:1px solid var(--rule-subtle);font-family:var(--face-sans);font-size:var(--t-sm);line-height:var(--lh-normal);color:var(--ink-3);max-width:62ch}.barlist__track{background:var(--rule);border-radius:1.5px;grid-column:1/-1;height:3px;margin-top:.35rem;overflow:hidden}.barlist__fill{background:var(--accent);width:0;height:100%;transition:width var(--slow) var(--ease);border-radius:1.5px;display:block}.railnav a[data-complete] .barlist__fill{background:var(--status-complete)}@media (prefers-reduced-motion:reduce){.stack__seg,.stack__value,.barlist__fill{transition:none}}.freefig{margin-top:var(--s-6);max-width:48rem}
