
:root{color-scheme:light;--bg:#e9e8e4;--surface:#eeede9;--ink:#333943;--muted:#616773;--line:#c8cbd0;--bridge:#bcc3cd;--shade:#6e78842e;--rim:#ffffffb0;--accent:#566784;--icon:20px}
:root[data-theme=dark]{color-scheme:dark;--bg:#202329;--surface:#292e35;--ink:#e2e5e9;--muted:#a8b0bb;--line:#444b56;--bridge:#424d5e;--shade:#0005;--rim:#ffffff10;--accent:#adbbd3}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.7 system-ui,-apple-system,BlinkMacSystemFont,sans-serif}a{color:inherit;text-underline-offset:5px}button,input,select{font:inherit;color:inherit}button,a,input,select{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:5px}button svg{width:var(--icon);height:var(--icon);fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}[hidden]{display:none!important}.skip{position:fixed;top:-100px;left:20px;z-index:30;background:var(--surface);padding:10px}.skip:focus{top:12px}.shell{width:min(1180px,100%);margin:auto;padding:36px 84px 28px 48px}header{display:flex;justify-content:space-between;gap:20px;align-items:center}.brand{font-weight:620;letter-spacing:-.04em;text-decoration:none;font-size:20px}.meta,.eyebrow{color:var(--muted);font-size:14px}.eyebrow{letter-spacing:.13em;text-transform:uppercase}.intro{margin:48px 0 36px;max-width:680px}.intro h1{font-size:clamp(40px,5.5vw,68px);font-weight:480;letter-spacing:-.06em;line-height:1.16;margin:14px 0 22px;word-break:keep-all}.intro p{color:var(--muted);max-width:520px}.projects{border-top:1px solid var(--line)}.project{display:grid;grid-template-columns:84px minmax(0,1fr) auto;gap:24px;padding:36px 0;border-bottom:1px solid var(--line);align-items:center}.project .number{white-space:nowrap;align-self:start;color:var(--muted);font:14px/2 monospace}.project h2{font-size:clamp(24px,3.5vw,36px);font-weight:500;letter-spacing:-.035em;line-height:1.3;margin:0 0 9px}.project p{margin:0;color:var(--muted);max-width:560px}.actions{display:flex;flex-wrap:wrap;gap:16px;align-items:center;margin-top:20px;font-size:14px}.pill{display:inline-flex;justify-content:center;align-items:center;min-height:44px;border:1px solid var(--line);border-radius:22px;padding:8px 22px;text-decoration:none;background:var(--surface);box-shadow:3px 4px 9px var(--shade),-2px -2px 6px var(--rim)}.symbol{width:100px;height:100px;color:var(--accent);fill:none;stroke:currentColor;stroke-width:1.2;opacity:.8}.notes{display:grid;grid-template-columns:1fr 1fr;gap:48px;margin:48px 0 60px}.notes h2{font-size:18px;font-weight:550;margin-bottom:8px}.notes p{color:var(--muted);font-size:15px;margin:0}.footer{border-top:1px solid var(--line);padding-top:22px;font-size:14px;color:var(--muted);display:flex;gap:12px 24px;flex-wrap:wrap}.footer a{overflow-wrap:anywhere}.footer .copyright{width:100%;font-size:13px}.edge-layer{position:fixed;inset:0;overflow:clip;pointer-events:none;z-index:10}.bridges{position:absolute;width:100%;height:100%;inset:0}.bridge{fill:var(--bridge);filter:drop-shadow(-2px 3px 3px var(--shade))}.edge-control{--pull:0px;position:absolute;right:env(safe-area-inset-right,0px);top:var(--y);width:56px;height:64px;border:0;padding:0;background:transparent;transform:translateY(-50%) translateX(var(--pull));pointer-events:auto;touch-action:none;user-select:none}.edge-control .bead{position:absolute;right:-14px;top:8px;width:48px;height:48px;border-radius:50%;display:grid;place-items:center;color:var(--ink);background:var(--bridge);box-shadow:inset 1px 1px 2px var(--rim),inset -1px -2px 3px var(--shade)}.edge-control svg{transform:translateX(-5px)}.edge-control:focus-visible{outline-offset:-6px;border-radius:20px}.edge-control::after{content:attr(aria-label);position:absolute;right:62px;top:15px;padding:3px 10px;border-radius:12px;background:var(--surface);color:var(--ink);white-space:nowrap;opacity:0;pointer-events:none;font-size:14px}.edge-control:hover::after,.edge-control:focus-visible::after{opacity:1}.edge-control.dragging::after{opacity:0}dialog{color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:28px;width:min(520px,calc(100% - 32px));max-height:calc(100svh - 40px);padding:28px;box-shadow:8px 14px 40px var(--shade);overflow:auto}dialog::backdrop{background:#11182745}dialog h2{font-size:26px;font-weight:500;letter-spacing:-.03em;margin:0}dialog .head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:24px}.close{border:0;background:none;font-size:24px;width:44px;height:44px;border-radius:50%}dialog label{display:block;margin:22px 0 6px}dialog select{width:100%;padding:9px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}dialog input[type=range]{width:100%;accent-color:var(--accent)}dialog a{overflow-wrap:anywhere}.article{max-width:760px;margin:64px auto 70px;word-break:keep-all;overflow-wrap:anywhere}.article h1{font-size:clamp(30px,5vw,48px);line-height:1.25;font-weight:500;letter-spacing:-.04em;margin:0 0 36px}.article h2{font-size:22px;font-weight:550;margin:36px 0 10px}.article p,.article li{color:var(--muted)}.article strong{color:var(--ink)}.article li{margin-bottom:10px}.article table{width:100%;border-collapse:collapse;word-break:normal;font-size:14px}.article td,.article th{text-align:left;vertical-align:top;border-bottom:1px solid var(--line);padding:12px 8px}.article th{font-weight:600}.quiet-note{font-size:14px;color:var(--muted)}
@media(max-width:650px){.shell{padding:26px 64px 24px 24px}.meta{display:none}.intro{margin:56px 0 36px}.project{grid-template-columns:1fr;gap:10px}.project .number{font-size:13px}.symbol{display:none}.notes{grid-template-columns:1fr;gap:22px;margin:32px 0}.edge-control::after{display:none}.article{margin-top:40px}.article table{font-size:13px}.article td,.article th{padding:10px 3px}.footer{gap:12px 18px}dialog{padding:22px}}
@media(max-height:440px){.edge-control{top:calc(40px + var(--n)*76px)}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;animation:none!important;transition:none!important}}:root[data-motion=reduce] *{animation:none!important;transition:none!important;scroll-behavior:auto!important}

/* The SVG owns the attached silhouette so the circle cannot cover the neck. */
.edge-control:not(.detached) .bead{background:transparent;box-shadow:none}
