:root{--paper: #ffffff;--ink: #111111;--ink-2: #555555;--ink-3: #8a8a8a;--rule: #111111;--rule-soft: #d6d6d6;--fill: #efefef;--sans: "IBM Plex Sans", "Helvetica Neue", Arial, sans-serif;--mono: "IBM Plex Mono", ui-monospace, Menlo, monospace;--gutter: clamp(16px, 4vw, 32px);--nav-h: 44px;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-mode=day]){--paper: #111111;--ink: #f2f2f2;--ink-2: #b3b3b3;--ink-3: #7c7c7c;--rule: #f2f2f2;--rule-soft: #333333;--fill: #1f1f1f;color-scheme:dark}}:root[data-mode=night]{--paper: #111111;--ink: #f2f2f2;--ink-2: #b3b3b3;--ink-3: #7c7c7c;--rule: #f2f2f2;--rule-soft: #333333;--fill: #1f1f1f;color-scheme:dark}:root[data-mode=day]{--paper: #ffffff;--ink: #111111;--ink-2: #555555;--ink-3: #8a8a8a;--rule: #111111;--rule-soft: #d6d6d6;--fill: #efefef;color-scheme:light}*{box-sizing:border-box}html,body{margin:0}body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:inherit}:focus-visible{outline:2px solid var(--ink);outline-offset:2px}img,video{max-width:100%;display:block}h1,h2,h3{margin:0;font-weight:600;text-wrap:balance}h1{font-size:28px;line-height:1.15}h2{scroll-margin-top:calc(var(--nav-h) + 20px);font-size:13px;letter-spacing:.06em;text-transform:uppercase;border-bottom:1px solid var(--rule);padding-bottom:6px;margin:48px 0 16px}h3{font-size:16px;margin:0 0 4px}p{margin:0 0 10px;max-width:65ch}ul{margin:0 0 10px;padding-left:18px;max-width:65ch}li{margin-bottom:4px}.muted{color:var(--ink-2)}.mono{font-family:var(--mono);font-size:13px}.wrap{max-width:960px;margin:0 auto;padding-inline:var(--gutter);padding-block:0 40px;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}.wrap>footer.foot{margin-top:auto;padding-top:14px}.wrap>.panel{margin-bottom:40px}#progress{position:fixed;left:0;top:env(safe-area-inset-top,0px);height:2px;width:0;background:var(--ink);z-index:30;pointer-events:none}.nav{position:sticky;top:env(safe-area-inset-top,0px);z-index:20;background:var(--paper);border-bottom:1px solid var(--rule);display:flex;justify-content:space-between;align-items:center;gap:16px;padding:8px 0;margin-bottom:22px;font-family:var(--mono);font-size:12px;min-height:44px}.nav .brand{font-weight:500;letter-spacing:.04em;text-transform:uppercase;text-decoration:none}.nav ul{list-style:none;margin:0;padding:0;display:flex;gap:2px;flex-wrap:wrap;max-width:none}.nav li{margin:0}.nav a.tab{text-decoration:none;color:var(--ink-2);padding:3px 8px;border:1px solid transparent;display:block}.nav a.tab:hover{color:var(--ink);border-color:var(--ink)}.nav a.tab.on{color:var(--paper);background:var(--ink);border-color:var(--ink)}.nav .right{display:flex;gap:10px;align-items:center}.hint .door{display:inline-block;width:10px;height:10px;border:1px solid var(--ink);vertical-align:-1px;margin-right:6px;background:linear-gradient(90deg,var(--ink) 50%,transparent 50%)}.switch{font:inherit;background:var(--paper);color:var(--ink);border:1px solid var(--ink);padding:4px 10px;cursor:pointer;letter-spacing:.04em;text-transform:uppercase}.switch:hover{background:var(--ink);color:var(--paper)}.wipe{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;pointer-events:none;clip-path:circle(0 at var(--wx, 50%) var(--wy, 50%))}@media(prefers-reduced-motion:no-preference){.wipe.go{transition:clip-path .6s cubic-bezier(.4,0,.2,1)}}[data-door]{cursor:pointer;text-decoration:none;border-bottom:1px dashed var(--ink);padding-bottom:1px;color:var(--ink)}[data-door]:hover,[data-door].open{background:var(--ink);color:var(--paper)}[data-door].empty{border-bottom-style:dotted;border-bottom-color:var(--ink-3)}[data-door].empty:hover{background:transparent;color:var(--ink)}.door-card{position:absolute;z-index:10;width:300px;max-width:calc(100vw - 32px);background:var(--ink);color:var(--paper);border:1px solid var(--ink);box-shadow:5px 5px 0 var(--paper),6px 6px 0 var(--ink);font-size:13.5px;line-height:1.45;transform-origin:left center;visibility:hidden;opacity:0}.door-card.show{visibility:visible;opacity:1}@media(prefers-reduced-motion:no-preference){.door-card{transition:opacity .12s,transform .12s;transform:scaleX(.6)}.door-card.show{transform:scaleX(1)}}.door-card .d-kind{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;opacity:.7;padding:10px 14px 0}.door-card .d-title{font-weight:600;font-size:15px;padding:2px 14px 0}.door-card .d-note{padding:6px 14px 10px;opacity:.9}.door-card .d-link{display:flex;justify-content:space-between;gap:8px;font-family:var(--mono);font-size:12.5px;padding:9px 14px;border-top:1px solid var(--paper);color:var(--paper);text-decoration:none;word-break:break-all}.door-card .d-link:hover{background:var(--paper);color:var(--ink)}.door-card .d-none{font-family:var(--mono);font-size:12px;padding:9px 14px;border-top:1px dashed var(--paper);opacity:.7}.head{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:24px;align-items:start;border-bottom:1px solid var(--rule);padding-top:28px;padding-bottom:20px}.head .sub{font-size:17px;color:var(--ink-2);margin-top:4px}.head dl{margin:0;font-family:var(--mono);font-size:13px;display:grid;grid-template-columns:auto auto;gap:2px 14px;line-height:1.6}.head dt{color:var(--ink-3)}.head dd{margin:0}.head a{text-decoration:none}.head a:hover{text-decoration:underline}.copy{font:inherit;background:transparent;border:1px solid var(--rule-soft);color:var(--ink-2);padding:0 6px;margin-left:8px;cursor:pointer;font-size:11px;letter-spacing:.04em;text-transform:uppercase}.copy:hover{border-color:var(--ink);color:var(--ink)}table{width:100%;border-collapse:collapse;font-size:14px}th{text-align:left;font-weight:500;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2);padding:0 12px 6px 0;border-bottom:1px solid var(--rule)}td{vertical-align:top;padding:8px 12px 8px 0;border-bottom:1px solid var(--rule-soft)}td:first-child{font-weight:500;white-space:nowrap}tr:last-child td{border-bottom:none}tbody tr[data-case]{cursor:pointer}tbody tr[data-case]:hover td{background:var(--fill)}.tbl{overflow-x:auto}.tbl table{min-width:640px}.tag{display:inline-block;font-family:var(--mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;border:1px solid var(--ink);padding:0 5px;white-space:nowrap}.tag.live{background:var(--ink);color:var(--paper)}.case{scroll-margin-top:calc(var(--nav-h) + 20px);display:grid;grid-template-columns:150px minmax(0,1fr);gap:8px 24px;padding:16px 0;border-bottom:1px solid var(--rule-soft);transition:box-shadow .15s,padding-left .15s}.case:last-child{border-bottom:none}.case.hl{box-shadow:inset 4px 0 0 var(--ink);padding-left:16px}.case .when{font-family:var(--mono);font-size:13px;color:var(--ink-2);line-height:1.6}.case .when b{display:block;color:var(--ink);font-weight:500}.case .k{font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);margin:8px 0 2px}.case .k:first-child{margin-top:0}.case p,.case ul{margin-bottom:4px}.timeline{margin-top:8px;overflow-x:auto;overflow-y:hidden;border:1px solid var(--rule-soft);padding:12px 0 8px;cursor:grab;position:relative;scrollbar-width:thin}.timeline.dragging{cursor:grabbing;-webkit-user-select:none;user-select:none}.timeline svg{display:block}.tl-hint{font-size:11px;color:var(--ink-3);padding:6px 12px 0;position:sticky;left:0}.timeline rect[data-case],.timeline .tk{cursor:pointer}.timeline rect[data-case]:hover{stroke-width:2}.timeline .tk:hover line{stroke-width:2}.cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:24px}.cols ul{max-width:none}footer.foot{margin-top:56px;border-top:1px solid var(--rule);padding-top:14px;font-family:var(--mono);font-size:13px;color:var(--ink-2);display:flex;gap:24px;flex-wrap:wrap}footer.foot a{text-decoration:none}.index{border-top:1px solid var(--rule)}.row{display:grid;grid-template-columns:70px minmax(0,1fr) auto;gap:16px;align-items:baseline;padding:14px 0;border-bottom:1px solid var(--rule-soft);text-decoration:none;color:var(--ink)}.row:hover{background:var(--fill);box-shadow:0 0 0 var(--gutter) var(--fill)}.row .yr{font-family:var(--mono);font-size:13px;color:var(--ink-2)}.row .t{font-weight:600;font-size:18px}.row .t small{font-weight:400;color:var(--ink-2);font-size:14px;margin-left:10px}.row .go{font-family:var(--mono);font-size:12px;color:var(--ink-2)}.row:hover .go{color:var(--ink)}.lede{font-size:20px;line-height:1.35;max-width:34em;margin:24px 0 10px}.proj-head{border-bottom:1px solid var(--rule);padding-bottom:20px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:24px;align-items:end}.proj-head .yr{font-family:var(--mono);font-size:13px;color:var(--ink-2)}.proj-head h1{font-size:clamp(30px,5vw,44px)}.proj-head .role{font-size:17px;color:var(--ink-2);margin-top:4px}.proj-head dl{margin:0;font-family:var(--mono);font-size:12.5px;display:grid;grid-template-columns:auto auto;gap:2px 12px}.proj-head dt{color:var(--ink-3)}.proj-head dd{margin:0}.block{margin-top:28px}.block p{font-size:15.5px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1px;background:var(--rule-soft);border:1px solid var(--rule-soft)}.grid figure{margin:0;background:var(--paper);min-width:0}.grid figure img{width:100%;aspect-ratio:4 / 3;object-fit:cover;filter:grayscale(1) contrast(1.05);transition:filter .2s}.grid figure:hover img{filter:none}.grid.wide figure img{aspect-ratio:16 / 10}.grid figcaption{font-family:var(--mono);font-size:11px;color:var(--ink-2);padding:6px 8px;border-top:1px solid var(--rule-soft)}.vid{border:1px solid var(--rule);background:#000}.vid video{width:100%}.vid-cap{font-family:var(--mono);font-size:11px;color:var(--ink-2);padding:6px 0}.quote{font-family:var(--mono);font-size:13px;white-space:pre-wrap;border-left:2px solid var(--ink);padding:4px 0 4px 14px;color:var(--ink-2);max-width:65ch}.pager{margin-top:48px;border-top:1px solid var(--rule);padding-top:12px;display:flex;justify-content:space-between;font-family:var(--mono);font-size:13px;gap:16px}.pager a{text-decoration:none}.pager a:hover{text-decoration:underline}.bio-grid{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:32px;align-items:start}.bio-grid img{width:100%;filter:grayscale(1) contrast(1.1);border:1px solid var(--rule)}@media(max-width:640px){.nav ul,.nav .hint{display:none}.head,.proj-head,.bio-grid,.case{grid-template-columns:1fr}.row{grid-template-columns:56px minmax(0,1fr)}.row .go{display:none}h1{font-size:24px}}#crawler{position:fixed;top:0;right:0;bottom:0;left:0;z-index:15;pointer-events:none;image-rendering:pixelated}@media(prefers-reduced-motion:no-preference){.thud{animation:thud .45s cubic-bezier(.2,.8,.2,1)}.thud-hard{animation:thud-hard .45s cubic-bezier(.2,.8,.2,1)}@keyframes thud{0%{transform:translateY(0)}25%{transform:translateY(2px)}60%{transform:translateY(-1px)}to{transform:translateY(0)}}@keyframes thud-hard{0%{transform:translateY(0)}20%{transform:translateY(4px) rotate(.3deg)}50%{transform:translateY(-2px) rotate(-.2deg)}80%{transform:translateY(1px)}to{transform:translateY(0)}}}:root{--paint: #e85d3a}.paint{background:color-mix(in srgb,var(--paint) 16%,transparent);box-shadow:0 0 0 3px color-mix(in srgb,var(--paint) 16%,transparent);transition:background .25s ease,box-shadow .25s ease}.paint-fade{background:transparent;box-shadow:0 0 0 3px transparent;transition:background 2.5s ease,box-shadow 2.5s ease}.paint-keep{color:var(--paint)!important;border-color:var(--paint)!important}[data-door].paint-keep:hover{background:var(--paint);color:var(--paper)!important}@media(prefers-reduced-motion:no-preference){body.shake .wrap,body.shake #crawler{animation:shake .3s linear}body.shake-hard .wrap,body.shake-hard #crawler{animation:shake-hard .5s linear}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translateY(2px)}50%{transform:translate(1px,-1px)}75%{transform:translate(-1px,1px)}}@keyframes shake-hard{0%,to{transform:translate(0)}15%{transform:translateY(6px)}30%{transform:translate(-3px,-3px)}45%{transform:translate(3px,2px)}60%{transform:translate(-2px,1px)}80%{transform:translate(1px,-1px)}}}.nav li.sep{width:1px;height:16px;background:var(--rule-soft);margin:0 6px;align-self:center}.nav a.tab.sub{color:var(--ink-3)}.pov p{font-size:16px}.clip{margin:10px 0 0;max-width:560px}.clip video{width:100%;border:1px solid var(--rule);background:#000}.clip figcaption{font-family:var(--mono);font-size:11px;color:var(--ink-2);padding-top:4px}.linkish{font:inherit;background:none;border:0;padding:0;color:var(--ink-3);cursor:pointer;text-decoration:underline dotted}.linkish:hover{color:var(--ink)}#intro{position:fixed;top:0;right:0;bottom:0;left:0;z-index:16;pointer-events:none;image-rendering:pixelated}html.intro .wrap{clip-path:polygon(0 0,0 0,0 100%,0 100%)}.linkish.nope{color:var(--paint);text-decoration-color:var(--paint)}.tags{display:inline-flex;flex-wrap:wrap;gap:4px;margin-left:8px;vertical-align:middle}td .tags{display:flex;margin:6px 0 0}.chip{font:inherit;font-family:var(--mono);font-size:10.5px;letter-spacing:.03em;color:var(--ink-2);background:transparent;border:1px solid var(--rule-soft);padding:0 5px;line-height:16px;cursor:default}button.chip{cursor:pointer}button.chip:hover{border-color:var(--ink);color:var(--ink)}.chip.on{background:var(--ink);color:var(--paper);border-color:var(--ink)}tbody tr.dim td{opacity:.3}tbody tr.dim td .chip{opacity:1}.tabs{display:flex;flex-wrap:nowrap;gap:0;margin-top:28px;border-bottom:1px solid var(--ink);width:100%;position:sticky;top:calc(var(--nav-h) + env(safe-area-inset-top,0px));z-index:12;background:var(--paper);padding-top:6px}.tab-btn{flex:1 1 0;min-width:0;text-align:center;font:inherit;font-family:var(--mono);font-size:12px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2);background:var(--fill);border:1px solid var(--rule-soft);border-bottom:1px solid var(--ink);padding:7px 6px;margin-right:-1px;margin-bottom:-1px;cursor:pointer;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tab-btn:hover{color:var(--ink);border-color:var(--ink);z-index:1}.tab-btn.on{color:var(--ink);background:var(--paper);border-color:var(--ink);border-bottom:1px solid var(--paper);z-index:2}.panel{border:1px solid var(--ink);border-top:0;padding:6px clamp(12px,2.5vw,24px) 24px}.panel>h2{margin-top:18px}.panel .tbl table{min-width:600px}.pov.panel p{font-size:16px}@media(max-width:640px){.tabs{flex-wrap:wrap}.tab-btn{flex:1 1 33%;padding:6px 4px;font-size:10.5px}}td.paint,th.paint,td.paint-fade,th.paint-fade{box-shadow:none}td.thud,th.thud,td.thud-hard,th.thud-hard{display:table-cell}.portrait{display:block;width:256px}.portrait img{image-rendering:auto}.portrait img{width:100%;height:auto;display:none}.portrait .day{display:block}@media(prefers-color-scheme:dark){:root:not([data-mode=day]) .portrait .day{display:none}:root:not([data-mode=day]) .portrait .night{display:block}}:root[data-mode=night] .portrait .day{display:none}:root[data-mode=night] .portrait .night{display:block}:root[data-mode=day] .portrait .day{display:block}:root[data-mode=day] .portrait .night{display:none}@media(max-width:640px){.portrait{width:160px}}.tl-lanes{position:sticky;left:0;width:0;height:0;z-index:2}.tl-lanes span{position:absolute;left:0;transform:translateY(-50%);font-family:var(--mono);font-size:12px;font-weight:500;color:var(--ink);background:var(--paper);padding:2px 8px 2px 10px;border-right:1px solid var(--rule-soft);white-space:nowrap}
