@font-face{font-family:Manrope;src:url(/fonts/manrope-latin-wght-normal.woff2)format("woff2");font-weight:200 800;font-style:normal;font-display:swap}:root{color-scheme:light;--color-ground:#fff;--color-ink:#26313f;--color-muted:#435a7a;--color-route:#2455ba;--color-accent-deep:#1d4194;--color-panel:#eef3fc;--color-signal:#e1eafd;--color-line:#c8d6ef;--color-note:#e5f3ef;--color-note-ink:#185f54;--color-footer:#163761;--color-footer-ink:#d4e0f4;--color-footer-line:#627fa6;--color-diagram-line:#6982ac;--font-body:"Manrope", sans-serif;--font-size-lead:1.15rem;--radius-panel:12px;--radius-control:6px;--space-unit:.5rem;--space-section:2.5rem;--space-group:1.75rem;--space-row:1.5rem;--width-shell:1184px;--width-reading:70ch;--reading-rail:190px;--reading-gap:3rem;--ease-route:cubic-bezier(.16, 1, .3, 1)}*{box-sizing:border-box}html{scrollbar-gutter:stable;scroll-behavior:smooth;scrollbar-color:var(--color-route) var(--color-ground);scroll-padding-top:2rem}body{background:var(--color-ground);color:var(--color-ink);font:1.0625rem/1.65 var(--font-body);-webkit-font-smoothing:antialiased;margin:0}::selection{color:var(--color-ink);background:var(--color-signal)}a{color:var(--color-route);text-underline-offset:.22em;text-decoration-thickness:1px}a:hover{color:var(--color-accent-deep);text-decoration-thickness:2px}a:focus-visible,summary:focus-visible,[tabindex="0"]:focus-visible{outline:3px solid var(--color-route);outline-offset:4px}button,input,textarea{font:inherit;caret-color:var(--color-route)}h1,h2,h3{color:var(--color-accent-deep);letter-spacing:-.03em;text-wrap:balance;margin:0;font-weight:600;line-height:1.12}h1{font-size:clamp(2rem,4vw,2.75rem)}h2{font-size:clamp(1.45rem,2.5vw,1.625rem)}h3{font-size:clamp(1.2rem,1.8vw,1.3rem)}p{margin:0 0 1.2rem}img,svg{max-width:100%}.shell{max-width:var(--width-shell);margin-inline:auto;padding-inline:clamp(1.25rem,4vw,4rem)}.page{padding-block:2.25rem 3rem}.arrow{stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle;flex:none}.text-link{align-items:center;gap:.6rem;font-weight:550;display:inline-flex}.sr-only{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:20;background:var(--color-signal);color:var(--color-ink);padding:.65rem 1rem;position:fixed;top:1rem;left:1rem;transform:translateY(-200%)}.skip-link:focus{transform:translateY(0)}.site-header{background:var(--color-ground);border-bottom:1px solid var(--color-line)}.header-inner{justify-content:space-between;align-items:center;gap:2rem;min-height:80px;display:flex}.brand{color:var(--color-accent-deep);letter-spacing:-.035em;white-space:nowrap;font-size:1.05rem;font-weight:600;text-decoration:none}.site-header nav{align-items:center;gap:clamp(.4rem,1.2vw,1rem);display:flex}.site-header nav a{border-radius:var(--radius-control);color:var(--color-muted);align-items:center;gap:.4rem;padding:.45rem .75rem;font-size:.9rem;font-weight:650;text-decoration:none;display:inline-flex}.site-header nav a:hover{background:var(--color-panel);color:var(--color-accent-deep);text-decoration:underline}.site-header nav a[aria-current=page],.contents a[aria-current=location]{background:var(--color-route);color:var(--color-ground);text-underline-offset:.2em;font-weight:650;text-decoration:underline}.page-intro{background:var(--color-panel);border-bottom:1px solid var(--color-line)}.page-intro-inner{padding-block:2.25rem}.page-heading{margin:0}.page-intro h1{text-align:left;max-width:30ch}.page-heading p{max-width:65ch;color:var(--color-muted);font-size:var(--font-size-lead);margin:.85rem 0 0}.page-heading .text-link{margin-top:1.15rem}.home-opening{text-align:left}.home-intro-grid{grid-template-columns:minmax(0,1fr) 200px;gap:2rem;display:grid}.home-intro-copy{min-width:0}.hero-profiles{flex-direction:column;justify-content:center;gap:1rem;display:flex}.hero-profile{align-items:center;gap:1rem;min-height:64px;font-size:1.1rem;font-weight:600;display:inline-flex}.hero-profile .social-icon{width:44px;height:44px}.hero-profile-label{align-items:center;gap:.5rem;display:inline-flex}.home-opening .role{color:var(--color-muted);margin:1rem 0;font-size:1rem;font-weight:550}.home-opening .description{max-width:65ch;color:var(--color-muted);font-size:var(--font-size-lead);margin-inline:0}.home-actions{flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:1.5rem;margin-top:1.25rem;display:flex}.home-actions .text-link{font-size:.95rem}.home-primary{border-radius:var(--radius-control);background:var(--color-route);color:var(--color-ground);padding:.6rem 1rem;font-weight:700;text-decoration:none}.home-primary:hover{background:var(--color-accent-deep);color:var(--color-ground)}.section-header,.topic-panel{justify-content:space-between;align-items:baseline;gap:1.5rem;margin-bottom:1.25rem;display:flex}.section-header>a{font-size:.875rem}.topic-panel span{color:var(--color-muted);font-size:.85rem}.home-work{padding-block:2.25rem 3rem}.route-index{padding:0}.route-entry{padding:var(--space-group) 0;border-top:1px solid var(--color-line);position:relative}.route-entry h3 a{max-width:100%;color:inherit;align-items:baseline;gap:1rem;text-decoration:none;display:inline-flex}.route-entry h3 a:hover,.route-entry.is-related h3 a{color:var(--color-route);text-underline-offset:.3em;text-decoration:underline}.route-entry h3 .arrow{display:none}.route-entry p{max-width:63ch;color:var(--color-muted);margin:.7rem 0 .8rem;font-size:1rem}.route-entry .text-link{font-size:.875rem}.entry-meta{color:var(--color-muted);font-variant-numeric:tabular-nums;margin-top:.65rem;font-size:.85rem}.project-entry{grid-template-columns:minmax(0,1fr) 320px;align-items:center;gap:2rem;display:grid}.project-entry-copy{min-width:0}.project-preview,.about-aside,.contents details{background:var(--color-panel);border:1px solid var(--color-line);border-radius:var(--radius-panel)}.project-preview{margin:0;padding:.5rem}.project-preview svg{width:100%;height:auto;display:block}.preview-lines{stroke:var(--color-diagram-line);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.preview-box{fill:var(--color-ground);stroke:var(--color-line);stroke-width:1px}.preview-emphasis{fill:var(--color-route)}.preview-label{fill:var(--color-ink);font:500 15px var(--font-body);text-anchor:middle}.preview-label-light{fill:var(--color-ground)}.preview-feedback{fill:var(--color-accent-deep);font-size:13px}.reading-shell{padding-block:var(--space-group) 3rem}.has-reading-contents>.reading-close{margin-left:calc(var(--reading-rail) + var(--reading-gap))}.back-link{align-items:center;gap:.7rem;margin:0;font-size:.9rem;display:inline-flex}.reading-header{max-width:var(--width-reading)}.reading-summary{max-width:65ch;color:var(--color-muted);font-size:var(--font-size-lead);margin:.85rem 0 0}.reading-meta{color:var(--color-muted);margin-top:1.5rem;font-size:.9rem}.reading-actions{flex-wrap:wrap;align-items:center;gap:.75rem 1.5rem;margin-top:1.4rem;display:flex}.reading-actions .source-links{display:contents}.reading-actions a{align-items:center;gap:.5rem;min-height:44px;font-size:.9rem;line-height:1.5}.source-links{flex-wrap:wrap;gap:.75rem 1.5rem;margin-top:1.4rem;font-size:.9rem;display:flex}.source-links a{align-items:center;gap:.4rem;display:inline-flex}.reading-grid{min-width:0}.reading-grid.has-contents{grid-template-columns:var(--reading-rail) minmax(0, 1fr);gap:var(--reading-gap);display:grid}.contents{min-width:0}.contents details{padding:1rem .75rem;position:sticky;top:1.5rem}.contents summary{color:var(--color-accent-deep);cursor:pointer;padding-inline:.4rem;font-size:.9rem;font-weight:600}.contents nav{flex-direction:column;gap:.35rem;margin-top:.9rem;display:flex}.contents a{border-radius:var(--radius-control);color:var(--color-muted);transition:background-color .16s var(--ease-route), color .16s var(--ease-route);padding:.6rem .65rem;font-size:.85rem;line-height:1.5;text-decoration:none;display:block}.contents a:hover:not([aria-current=location]){background:var(--color-signal);color:var(--color-accent-deep);text-decoration:underline}.prose{width:100%;min-width:0;max-width:var(--width-reading);margin-inline:auto;font-size:1.0625rem}.reading-grid>.prose{margin-inline:0}.prose h2{margin:2.25rem 0 .85rem}.prose h2:first-child{margin-top:0}.prose h3{margin:2rem 0 .7rem}.prose p{margin-bottom:1.35rem}.prose ul,.prose ol{margin-block:1rem 1.6rem;padding-left:1.5rem}.prose li{margin-bottom:.6rem}.prose li::marker{color:var(--color-route)}.prose blockquote{background:var(--color-note);color:var(--color-note-ink);border-radius:8px;margin:2rem 0;padding:1.5rem;font-size:1.15rem}.prose blockquote p:last-child{margin-bottom:0}.prose pre{border-radius:var(--radius-control);padding:1.5rem;font-size:.85rem;line-height:1.7;overflow-x:auto}.prose :not(pre)>code{background:var(--color-panel);border-radius:3px;padding:.15em .25em;font-size:.9em}.prose table{border-collapse:collapse;width:100%;margin-block:2rem;font-size:.95rem;display:block;overflow-x:auto}.prose th,.prose td{text-align:left;border-bottom:1px solid var(--color-line);min-width:150px;padding:.8rem 1rem}.prose th{background:var(--color-panel);color:var(--color-accent-deep)}.technical-figure{min-width:0;max-width:100%;margin:2rem 0}.figure-hint{color:var(--color-muted);margin-bottom:.5rem;font-size:.8rem}.figure-scroll{background:var(--color-panel);width:100%;min-width:0;max-width:100%;overflow-x:auto}.figure-scroll img{width:100%;min-width:660px;max-width:none;height:auto;display:block}.technical-figure figcaption{color:var(--color-muted);flex-wrap:wrap;justify-content:space-between;gap:.75rem 1.5rem;margin-top:.8rem;font-size:.83rem;display:flex}.technical-figure figcaption span:first-child{flex-basis:100%}.reading-close{max-width:var(--width-reading);padding-top:var(--space-group);border-top:1px solid var(--color-line);flex-wrap:wrap;gap:1rem 2rem;margin-top:3rem;display:flex}@media (prefers-reduced-motion:no-preference){@view-transition{navigation:auto}.site-header{view-transition-name:site-header}}:root{view-transition-name:none}::view-transition-group(*){animation-duration:.46s;animation-timing-function:var(--ease-route)}::view-transition-old(*){opacity:0;animation:none}::view-transition-new(site-header){animation:none}::view-transition-new(.project-actions){animation:.16s ease-out .3s both actions-arrive}@keyframes actions-arrive{0%{opacity:0}to{opacity:1}}.route-entry h3,.reading-header h1{width:fit-content}.reading-intro-grid.has-project-preview{grid-template-columns:minmax(0,1fr) 320px;align-items:start;gap:2rem;display:grid}.reading-intro-grid .project-preview{width:100%}.preview-link{border-radius:var(--radius-control);display:block}.project-preview{transition:border-color .18s var(--ease-route)}.project-entry:is(:hover,:focus-within) .project-preview{border-color:var(--color-route)}.project-entry:is(:hover,:focus-within) .preview-lines{stroke:var(--color-route)}@media (prefers-reduced-motion:no-preference){.project-entry:is(:hover,:focus-within) .preview-lines path{animation:trace-route .6s var(--ease-route) both;stroke-dasharray:1}}@keyframes trace-route{0%{stroke-dashoffset:1px}to{stroke-dashoffset:0}}.section-link{vertical-align:middle;border-radius:var(--radius-control);width:44px;height:44px;color:var(--color-muted);justify-content:center;align-items:center;margin:-.5rem 0 -.5rem .25rem;display:inline-flex}.section-link:hover,.section-link:focus-visible{background:var(--color-panel);color:var(--color-route)}.section-link svg{flex-shrink:0}@media (hover:hover) and (width>=901px){.section-link{opacity:0}.prose h2:hover .section-link,.section-link:focus-visible{opacity:1}}.prose h2:target{scroll-margin-top:2rem}.next-project{background:var(--color-panel);border:1px solid var(--color-line);border-radius:var(--radius-panel);flex-basis:100%;justify-content:space-between;align-items:center;gap:1.5rem;padding:1.5rem;text-decoration:none;display:flex}.next-project-title{text-underline-offset:.22em;font-weight:600;line-height:1.4;text-decoration:underline;display:block}.next-project-summary{color:var(--color-muted);margin-top:.6rem;font-size:.95rem;display:block}.next-project:hover{border-color:var(--color-route)}.technical-figure[data-overflows=false] .figure-hint{display:none}.about-heading{gap:var(--space-section);grid-template-columns:minmax(0,1fr) 260px;align-items:start;display:grid}.about-intro-copy{min-width:0}.about-portrait{aspect-ratio:1;object-fit:cover;border-radius:50%;justify-self:center;width:176px;height:auto;display:block}.about-grid{gap:var(--space-section);grid-template-columns:minmax(0,1fr) 260px;display:grid}.about-grid .prose{margin:0}.about-aside{align-self:start;padding:1.5rem}.about-aside h2{margin-bottom:1.2rem;font-size:1.15rem}.about-aside p{font-size:.95rem}.about-aside a{margin-top:.6rem;padding-block:.4rem;font-size:.95rem;display:block}.site-footer{background:var(--color-footer);color:var(--color-footer-ink);padding-block:1.75rem 1.25rem}.footer-main{justify-content:space-between;gap:3rem;display:flex}.footer-name{color:var(--color-ground);letter-spacing:-.03em;margin-bottom:.75rem;font-size:1.1rem;font-weight:600}.footer-main p:not(.footer-name){color:var(--color-footer-ink);font-size:.95rem}.footer-links{flex-wrap:wrap;align-items:start;gap:1rem 1.5rem;font-size:.95rem;display:flex}.footer-links .social-link{align-items:center;gap:.5rem;display:inline-flex}.social-icon{flex:none;width:1.05em;height:1.05em}.footer-bottom{border-top:1px solid var(--color-footer-line);flex-wrap:wrap;justify-content:space-between;gap:1rem;margin-top:2rem;padding-top:1.2rem;font-size:.78rem;display:flex}.site-footer a{color:var(--color-footer-ink)}.site-footer a:focus-visible{outline-color:var(--color-ground)}.site-footer a:hover{color:var(--color-ground)}.not-found{flex-wrap:wrap;align-content:start;gap:1.5rem;min-height:12rem;display:flex}.draft-label{background:var(--color-signal);color:var(--color-ink);padding:.2rem .5rem;font-size:.85rem;font-weight:600;display:inline-block}.writing-list .route-entry:first-child{border-top:0}.empty-writing{padding:1.6rem 0}.empty-writing p{max-width:62ch}.band{background:var(--color-panel);padding-block:3rem}.section-split{grid-template-columns:minmax(0,.82fr) minmax(0,1.5fr);gap:3rem;display:grid}.section-split>div{min-width:0}.section-split>div:first-child p{max-width:36ch;color:var(--color-muted);margin-top:1.2rem}@media (width<=900px){.reading-intro-grid.has-project-preview{grid-template-columns:minmax(0,1fr);gap:1.75rem}.reading-intro-grid .project-preview{max-width:420px}.has-reading-contents>.reading-close{margin-left:0}.reading-grid.has-contents{display:block}.contents{margin-bottom:var(--space-group)}.contents details{position:static}.contents nav{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem 1rem;display:grid}.project-entry{grid-template-columns:minmax(0,1fr) 260px;gap:1.5rem}.about-grid,.section-split{gap:var(--space-section);grid-template-columns:minmax(0,1fr)}.about-aside{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:2rem;display:grid}.about-aside h2,.about-aside p{grid-column:1/-1}}@media (width<=680px){.home-intro-grid{grid-template-columns:minmax(0,1fr);gap:1.5rem}.hero-profiles{flex-flow:wrap;justify-content:flex-start;gap:1.5rem}.hero-profile{gap:.6rem;min-height:48px;font-size:.95rem}.hero-profile .social-icon{width:32px;height:32px}.hero-profile-label{gap:.35rem}.hero-profile .arrow{width:16px;height:16px}.shell{padding-inline:1.25rem}.page,.home-work{padding-block:2rem 2.5rem}.page-intro-inner{padding-block:2rem}.header-inner{flex-wrap:wrap;gap:.8rem;min-height:112px;padding-block:1rem}.site-header nav{justify-content:space-between;gap:.2rem;width:100%}.site-header nav a{padding-inline:.5rem;font-size:.85rem}.site-header nav .arrow{width:17px;height:17px}.home-opening{text-align:left}.home-opening .description{margin-inline:0}.home-actions{justify-content:flex-start}.project-entry{grid-template-columns:minmax(0,1fr);gap:1.25rem}.project-preview{width:100%;max-width:420px}.route-entry{padding-block:var(--space-row)}.contents{margin-bottom:2rem}.contents nav{grid-template-columns:minmax(0,1fr);gap:.25rem}.reading-summary{font-size:var(--font-size-lead)}.reading-close{margin-top:2.5rem}.about-heading{grid-template-columns:minmax(0,1fr);gap:1.5rem}.about-portrait{justify-self:start;width:96px}.footer-main{flex-direction:column;gap:1.5rem}.footer-bottom{gap:.75rem}.footer-bottom span:nth-child(2){flex-basis:100%;order:3}}@media (prefers-reduced-motion:reduce){@view-transition{navigation:none}html{scrollbar-gutter:stable;scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}}
