:root{color-scheme:light dark;--page:#f7f6f2;--ink:#17252b;--muted:#617178;--water-top:#b9dce0;--water-bottom:#79afb8;--water-line:#ffffff2e;--route:#17374080;--wake:#f2fcfbb8;--ripple:#ffffffe6;--hull:#183f4b;--hull-edge:#ffffffd1;--deck:#d8eceb;--windscreen:#82b9c0;--wood:#8a5a36;--wood-edge:#53351f;--sail:#f3e5bd;--sail-edge:#9d7e4b;--mast:#3e2a1c;--pennant:#d7352c;--pennant-edge:#681b19;--trampoline:#e2f3efb8;--trampoline-line:#183f4b59;--overlay:#0d262db8;--overlay-text:#f4fbfa;--focus:#17252b;--link:#1d5a69;--rule:#17252b24;--surface:#fff;--badge-bg:#d8eceb;--badge-ink:#183f4b;--badge-pending-bg:#f3e5bd;--badge-pending-ink:#53351f}@media (prefers-color-scheme:dark){:root{--page:#10191d;--ink:#e2eeed;--muted:#9aadaf;--water-top:#164754;--water-bottom:#0a2c38;--water-line:#b9e5e61a;--route:#dcf5f180;--wake:#cdf1ee9e;--ripple:#e0faf6c7;--hull:#d8eceb;--hull-edge:#041f26c7;--deck:#245b67;--windscreen:#092f3a;--wood:#b17a4e;--wood-edge:#e4bb82;--sail:#e7d6ae;--sail-edge:#8f6b36;--mast:#f0dfba;--pennant:#ff6f52;--pennant-edge:#5b1716;--trampoline:#add8d394;--trampoline-line:#05293194;--overlay:#03171dbf;--overlay-text:#e8f5f3;--focus:#ffe986;--link:#8fd0d6;--rule:#e2eeed24;--surface:#152227;--badge-bg:#245b67;--badge-ink:#e2eeed;--badge-pending-bg:#5a4526;--badge-pending-ink:#f3e5bd}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{color:var(--ink);background:var(--page);overflow-wrap:break-word;margin:0;font:17px/1.65 ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}a{color:var(--link);text-underline-offset:.15em}a:hover{text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}img{max-width:100%;height:auto}h1,h2,h3{letter-spacing:-.01em;line-height:1.2}h1{letter-spacing:-.035em;margin:0 0 12px;font-size:clamp(2rem,5vw,3.4rem);line-height:1.05}h2{margin:2.2em 0 .6em;font-size:1.45rem}h3{margin:1.4em 0 .3em;font-size:1.1rem}pre,code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.88em}pre{background:var(--surface);border:1px solid var(--rule);border-radius:6px;padding:12px;overflow-x:auto}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:10;color:var(--overlay-text);background:var(--overlay);border-radius:5px;padding:8px 12px;position:absolute;top:8px;left:8px;transform:translateY(-150%)}.skip-link:focus{transform:none}.site-header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 20px;max-width:70ch;margin:0 auto;padding:12px 16px;display:flex}.site-name{color:var(--ink);font-weight:650;text-decoration:none}.site-nav ul{flex-wrap:wrap;gap:2px 16px;margin:0;padding:0;list-style:none;display:flex}.site-nav a{color:var(--muted);text-decoration:none}.site-nav a:hover{color:var(--ink);text-decoration:underline}.site-nav a[aria-current]{color:var(--ink);font-weight:600;text-decoration:underline 2px}.content{max-width:70ch;margin:0 auto;padding:36px 16px 64px}.content:focus{outline:none}.site-footer{max-width:70ch;color:var(--muted);margin:0 auto;padding:0 16px}.site-footer p{border-top:1px solid var(--rule);margin:0;padding:16px 0 32px;font-size:.85rem}.lede{color:var(--muted);margin-top:0;font-size:1.15rem}.muted{color:var(--muted)}.work-list{margin:0;padding:0;list-style:none}.work-list>li{border-bottom:1px solid var(--rule);padding:14px 0}.work-list>li:last-child{border-bottom:0}.work-list h3{margin:0 0 4px}.work-list p{margin:4px 0}.meta{color:var(--muted);font-size:.92rem}.meta .me{color:var(--ink);font-weight:650}.badge{letter-spacing:.02em;vertical-align:.1em;color:var(--badge-ink);background:var(--badge-bg);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:.75rem;font-weight:600;display:inline-block}.badge-under-review,.badge-draft{color:var(--badge-pending-ink);background:var(--badge-pending-bg)}.links{flex-wrap:wrap;gap:6px 14px;margin:10px 0 0;padding:0;font-size:.95rem;list-style:none;display:flex}.cards{gap:16px;margin:0;padding:0;list-style:none;display:grid}.card{border:1px solid var(--rule);background:var(--surface);border-radius:8px;overflow:hidden}.card img{aspect-ratio:16/9;object-fit:cover;width:100%;display:block}.card-body{padding:14px 16px 16px}.card h2{margin:0 0 4px;font-size:1.2rem}.card p{margin:4px 0}.cite summary{cursor:pointer;color:var(--link);text-underline-offset:.15em;text-decoration:underline}.cite pre{white-space:pre-wrap;margin:8px 0 4px}.cite button{border:1px solid var(--rule);color:var(--ink);background:var(--surface);font:inherit;cursor:pointer;border-radius:5px;padding:4px 10px;font-size:.85rem}.prose>:first-child{margin-top:0}.cv-section ul{padding-left:1.2em}.banner{background:var(--water-bottom);isolation:isolate;width:100%;height:320px;position:relative;overflow:hidden}.banner canvas{touch-action:pan-y;cursor:crosshair;outline:none;width:100%;height:100%;display:block}.banner canvas:focus-visible{outline:2px solid var(--focus);outline-offset:-3px}.banner-hint,.banner-telemetry{z-index:1;color:var(--overlay-text);background:var(--overlay);-webkit-backdrop-filter:blur(5px);position:absolute}.banner-hint{letter-spacing:.02em;pointer-events:none;white-space:nowrap;border-radius:999px;margin:0;padding:5px 10px;font-size:12px;transition:opacity .45s,transform .45s;bottom:18px;left:50%;transform:translate(-50%)}.banner-hint.dismissed{opacity:0;transform:translate(-50%,5px)}.banner-telemetry{letter-spacing:.04em;pointer-events:none;border-radius:5px;min-width:126px;padding:5px 8px;font:10px/1.45 ui-monospace,SFMono-Regular,Consolas,monospace;top:14px;left:14px}.banner-actions{z-index:2;align-items:center;gap:6px;display:flex;position:absolute;top:14px;right:14px}.banner-clear,.banner-ship-picker select{color:var(--overlay-text);background:var(--overlay);font:inherit;cursor:pointer;-webkit-backdrop-filter:blur(5px);border:1px solid #fff3;border-radius:5px;font-size:11px}.banner-clear{padding:5px 9px}.banner-clear:hover{filter:brightness(1.12)}.banner-clear:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.banner-ship-picker{display:flex}.banner-ship-picker select{max-width:118px;padding:5px 7px}.banner-ship-picker select:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.banner-ship-picker option{color:var(--ink);background:var(--page)}@media (width<=600px){.banner{height:220px}.banner-telemetry{top:10px;left:10px}.banner-actions{top:10px;right:10px}.banner-hint{bottom:12px}.content{padding-top:28px}}@media (prefers-reduced-motion:reduce){.banner-hint{transition:none}}
