:root{color-scheme:dark;--bg:#151a23;--ink:#edf1f8;--muted:#a8b3c6;--line:#343e50;--accent:#a6c6ff;--serif:Georgia,'Times New Roman',serif;--sans:Inter,ui-sans-serif,system-ui,-apple-system,'Segoe UI',sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:25px}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);transition:background .3s,color .3s}a{color:inherit}button{font:inherit}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.skip{position:absolute;top:-60px;left:20px;z-index:20;padding:12px;background:var(--accent);color:#151a23}.skip:focus{top:10px}.grain{pointer-events:none;position:fixed;inset:0;z-index:8;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Cpath fill='%23fff' filter='url(%23n)' d='M0 0h180v180H0z'/%3E%3C/svg%3E")}header,main,footer{max-width:1600px;margin:auto;padding-inline:clamp(24px,4.7vw,80px)}header{height:100px;display:flex;align-items:center;gap:30px;border-bottom:1px solid var(--line)}.wordmark{font-size:12px;font-weight:600;letter-spacing:1.8px;text-decoration:none;display:flex;align-items:center;gap:12px;white-space:nowrap}.edition{margin-left:auto;font-size:9px;letter-spacing:1.4px;color:var(--muted)}#lights{display:flex;align-items:center;gap:9px;cursor:pointer;border:1px solid var(--line);border-radius:50px;background:transparent;color:var(--ink);padding:10px 13px;font-size:12px}#lights span{font-size:10px}.intro{min-height:532px;display:grid;grid-template-columns:1.2fr 1fr;align-items:center;gap:30px;padding-block:52px 56px}.eyebrow{font-size:9px;letter-spacing:1.8px;color:var(--muted);font-weight:500}h1{font-family:var(--serif);font-size:clamp(72px,7.4vw,117px);font-weight:400;line-height:.96;letter-spacing:-5px;margin:27px 0 24px;position:relative;width:max-content}h1 em{font-weight:400;color:var(--accent)}.description{color:var(--muted);font-size:14px;line-height:1.8;margin:0}.explore{display:flex;align-items:center;gap:12px;text-decoration:none;font-size:12px;width:max-content;margin-top:28px}.explore i{border:1px solid var(--line);border-radius:50%;height:34px;width:34px;display:grid;place-items:center;font-style:normal;transition:background .2s}.explore:hover i{background:var(--accent);color:var(--bg)}.explore small{font-size:8px;letter-spacing:1.3px;color:var(--muted);margin-left:13px}.section-line{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--line);padding:22px 0 21px;gap:20px}.section-line h2{font-size:10px;font-weight:500;letter-spacing:1.5px;margin:0}.section-line>span{font-size:8px;letter-spacing:1.3px;color:var(--muted)}.projects{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.project{text-decoration:none;display:block;min-width:0}.art{height:265px;position:relative;overflow:hidden;border-radius:3px;transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg));transition:transform .25s;border:1px solid #ffffff15}.slate{background:#253950}.slate:before,.equity:before{content:'';position:absolute;inset:0;background-image:linear-gradient(#fff .5px,transparent .5px),linear-gradient(90deg,#fff .5px,transparent .5px);background-size:35px 35px;opacity:.035}.art-id{position:absolute;left:19px;top:18px;font-size:7px;letter-spacing:1.5px;color:#becfe4}.art-caption{position:absolute;bottom:16px;left:19px;right:19px;text-align:center;font-size:6.5px;letter-spacing:2px;color:#becfe4}.code-window{position:absolute;left:8%;top:55px;width:70%;height:166px;background:#182638;border:1px solid #647e9f;border-radius:6px;transform:rotate(-6deg);box-shadow:0 16px 20px #0003;transition:transform .4s}.window-bar{height:26px;border-bottom:1px solid #354d6b;padding:7px 10px;font-size:6px;color:#839cbb}.window-bar span{float:right;color:#9baec8}.code-lines{font:9px/1.65 ui-monospace,Consolas,monospace;padding:13px;color:#d6e4f6}.code-lines b{color:#c5b0dd;font-weight:400}.code-lines em{color:#a9caff;font-style:normal}.code-lines strong{color:#e4bb83;font-weight:400}.code-lines span{color:#93a8c1}.output-window{position:absolute;width:106px;height:126px;right:6%;top:91px;background:#c7d8f1;color:#243e63;transform:rotate(8deg);border-radius:4px;box-shadow:0 14px 25px #0003;display:flex;align-items:center;flex-direction:column;padding:12px;gap:8px;transition:transform .4s}.output-window small{align-self:flex-start;font-size:6px;letter-spacing:1.1px}.output-window svg{width:54px;fill:#385b8c}.output-window i{font:italic 10px var(--serif)}.equity{background:#203956}.equity .art-id,.equity .art-caption{color:#afc7e6}.chart-heading{position:absolute;left:23px;top:52px;z-index:1}.chart-heading small{font-size:6px;letter-spacing:1.6px;color:#a7c6e8}.chart-heading strong{display:block;font:29px/1.08 var(--serif);margin-top:10px;color:#dfebff}.chart-heading em{color:#bdd4fc}.equity-chart{position:absolute;bottom:26px;left:0;width:100%;height:144px;overflow:visible}.chart-line{fill:none;stroke:#b8d1ff;stroke-width:1.5;stroke-dasharray:600;transition:stroke-dashoffset .8s}.equity-chart circle{fill:#203956;stroke:#b8d1ff;stroke-width:2}.crosshair{stroke:#b8d1ff;stroke-width:.5;stroke-dasharray:3 4;opacity:.6}.chart-note{position:absolute;right:14px;top:17px;font-size:5px;letter-spacing:1px;color:#9bb5d1;writing-mode:vertical-rl}.atlas{background:#c9b58f;color:#4d402d}.atlas .art-id,.atlas .art-caption{color:#635132}.map-art{position:absolute;inset:18px 0 0;width:100%;height:calc(100% - 25px);transition:transform 1s}.map-date{position:absolute;right:18px;bottom:42px;text-align:right;font-size:7px;letter-spacing:1px;line-height:1.6}.map-date em{font:italic 13px var(--serif);letter-spacing:0}.project-info{padding:20px 0 0}.category{font-size:7px;letter-spacing:1.6px;color:var(--muted)}.project-title{display:flex;justify-content:space-between;align-items:center;margin:9px 0 10px}.project-title h3{font:30px var(--serif);letter-spacing:-.7px;margin:0}.project-title>span{font-size:25px;transition:transform .25s;color:var(--accent)}.project-info p{font-size:12px;line-height:1.8;color:var(--muted);margin:0;max-width:300px}.action{display:block;font-size:10px;margin-top:18px;color:var(--accent)}.project:hover .project-title>span{transform:translate(3px,-3px)}.project:hover .code-window{transform:rotate(-9deg) translate(-2px,-3px)}.project:hover .output-window{transform:rotate(12deg) translate(2px,-3px)}.project:hover .chart-line{stroke-dashoffset:60}.project:hover .map-art{transform:scale(1.06) rotate(-2deg)}.hobby-note{border-block:1px solid var(--line);padding:37px 0;margin:54px 0 0}.hobby-note .eyebrow{margin:1px 0 13px;font-size:7px}.hobby-note h2{font:27px var(--serif);letter-spacing:-.5px;margin:0 0 10px}.hobby-note p:not(.eyebrow){font-size:11px;line-height:1.8;color:var(--muted);margin:0}.hobby-note details{margin-top:14px;max-width:780px}.hobby-note summary{cursor:pointer;font-size:10px;color:var(--accent);width:max-content;list-style:none;display:flex;gap:14px;align-items:center}.hobby-note summary::-webkit-details-marker{display:none}.hobby-note summary span{font-size:18px}.hobby-note details[open] summary span{transform:rotate(45deg)}.commitment{padding-top:14px}.commitment p+p{margin-top:8px!important}footer{min-height:92px;display:flex;align-items:center;justify-content:space-between;gap:20px;font-size:7px;letter-spacing:1.3px;color:var(--muted)}footer a{text-decoration:none}body.light{color-scheme:light;--bg:#f3f5f9;--ink:#202b3e;--muted:#58677d;--line:#cbd3df;--accent:#315c9c}
@media(min-width:1500px){.art{height:300px}.intro{min-height:600px}.code-window{top:70px;height:180px}.output-window{top:110px}.code-lines{font-size:11px}}
@media(max-width:1000px){.edition{display:none}#lights{margin-left:auto}.intro{grid-template-columns:1.15fr 1fr;gap:0;min-height:470px}h1{font-size:83px;letter-spacing:-4px}.explore small{display:none}.projects{gap:18px}.art{height:230px}.project-title h3{font-size:25px}.code-lines{font-size:7.5px}.code-window{height:151px;left:5%;width:75%}.output-window{width:80px;height:108px;right:5%;top:95px}.output-window svg{width:43px}.output-window i{font-size:8px}.chart-heading strong{font-size:26px}}
@media(max-width:720px){header{height:79px;gap:15px}.wordmark{font-size:9px;letter-spacing:1.2px;gap:8px}#lights{padding:7px 10px}#lights>span{display:none}.intro{display:block;padding-top:44px;padding-bottom:22px;min-height:0}.eyebrow{font-size:7px;letter-spacing:1.4px}h1{font-size:88px;letter-spacing:-5px;margin:25px 0 22px}.description{font-size:12px}.description br{display:none}.explore{margin-top:24px}.section-line{padding-block:19px}.section-line h2{font-size:9px}.section-line>span{font-size:6px;letter-spacing:.6px;max-width:155px;text-align:right;line-height:1.6}.projects{grid-template-columns:1fr;gap:36px}.art{height:280px}.project-info{padding-top:17px}.project-title h3{font-size:31px}.project-info p{max-width:100%}.action{margin-top:12px}.code-window{left:9%;top:57px;width:69%;height:175px}.code-lines{font-size:10px}.output-window{width:110px;height:135px;right:7%;top:99px}.output-window svg{width:60px}.output-window i{font-size:10px}.chart-heading{left:27px;top:55px}.chart-heading strong{font-size:36px}.equity-chart{height:175px;bottom:23px}.hobby-note{padding-block:29px;margin-top:39px}.hobby-note h2{font-size:25px;line-height:1.15}footer{padding-block:25px;min-height:85px;font-size:6px;gap:14px}footer>span:nth-child(2){display:none}}
@media(max-width:380px){h1{font-size:78px}.wordmark{font-size:8px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}.art{transform:none!important}}

/* Clear project context, with a restrained blue and slate palette. */
.role{font-size:16px;line-height:1.6;font-weight:550;margin:0 0 14px;color:var(--ink)}
.description{max-width:470px;font-size:14px;line-height:1.9}
.projects{align-items:stretch}.project{display:flex;flex-direction:column}.art{flex-shrink:0}.project-info{display:flex;flex:1;flex-direction:column}.project-info p{max-width:100%;font-size:13px;line-height:1.85}.project-info .action{margin-top:auto;padding-top:20px}
.project-status{align-self:flex-start;border:1px solid var(--line);border-radius:4px;padding:5px 8px;color:var(--muted);font-size:9px;line-height:1.5;letter-spacing:.25px;margin:0 0 14px}.hobby-note p:not(.eyebrow){font-size:12px}.hobby-note .commitment{max-width:900px}.grain{opacity:.02}
@media(max-width:1000px){.description{font-size:13px}.role{font-size:14px}}
@media(max-width:720px){.role{font-size:14px;margin-bottom:12px}.description{font-size:13px;max-width:100%}.project-info p{font-size:13px}.project-status{font-size:10px}.intro{padding-bottom:32px}h1{font-size:88px}}

/* A focused introduction with no decorative hero illustration. */
.intro{display:block;min-height:0;padding-block:72px 68px}.intro>div{max-width:920px}h1{width:auto;font-size:clamp(54px,6.8vw,96px);line-height:1.08;letter-spacing:-3px;margin:22px 0}.role{font-size:18px}.description{max-width:700px;font-size:15px}.output-window svg{fill:none;stroke:#385b8c;stroke-width:6;stroke-linecap:round;stroke-linejoin:round}
@media(max-width:720px){.intro{padding-block:44px 42px}h1{font-size:60px;letter-spacing:-2.5px;margin:18px 0}.role{font-size:15px}.description{font-size:14px;line-height:1.85}}
@media(max-width:380px){h1{font-size:54px}}
/* The project commitment is ordinary full-width text, without an icon column. */
.hobby-note{display:block;width:100%;min-width:0;grid-template-columns:none}
.hobby-note>div{display:block;width:100%;min-width:0;max-width:100%;grid-column:1 / -1}
.hobby-note h2{max-width:100%;text-wrap:balance}
.hobby-note p:not(.eyebrow){max-width:900px;font-size:13px;line-height:1.8}
.hobby-note summary{max-width:100%;width:fit-content;flex-wrap:wrap}
.hobby-note details{max-width:900px}
