*,*::before,*::after{box-sizing:border-box}html{background:var(--outer);scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + 1rem);-webkit-text-size-adjust:100%}body,h1,h2,h3,p,figure,dl,dd,ol{margin:0}button,input{font:inherit}button{color:inherit}a{color:inherit}img,svg{display:block;max-width:100%}[hidden]{display:none!important}body{min-width:20rem;background:var(--outer);color:var(--ink);font:400 var(--fs-base)/1.65 var(--sans);overflow-x:hidden;-webkit-font-smoothing:antialiased}::selection{background:var(--selection)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.skip-link{position:fixed;z-index:100;top:.5rem;left:.5rem;padding:.6rem .9rem;background:var(--ink);color:var(--canvas);transform:translateY(-150%)}.skip-link:focus{transform:none}
.site-header{position:sticky;z-index:var(--z-header);top:0;background:color-mix(in srgb,var(--outer) 90%,transparent);backdrop-filter:blur(1rem)}.header-frame{width:var(--frame);height:var(--header-h);margin:auto;padding:0 var(--pad);display:grid;grid-template-columns:1fr auto 1fr;align-items:center;border-inline:var(--hairline) solid var(--edge);border-bottom:var(--hairline) solid var(--edge);background:color-mix(in srgb,var(--canvas) 94%,transparent)}.wordmark{display:flex;align-items:center;gap:.65rem;text-decoration:none;font-size:var(--fs-sm);font-weight:600}.wordmark-mark{width:2rem;height:2rem;flex:none;fill:none;stroke:currentColor;stroke-linecap:round}.wordmark-mark *{stroke-width:1.2px;vector-effect:non-scaling-stroke}.wordmark-mark .accent{stroke:var(--accent)}.primary-nav{display:flex;align-items:center;gap:clamp(.7rem,2vw,1.8rem)}.primary-nav a{position:relative;padding:.4rem 0;color:var(--ink-3);text-decoration:none;font-size:var(--fs-xs)}.primary-nav a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--accent);transform:scaleX(0);transform-origin:0 50%;transition:transform var(--dur) var(--ease)}.primary-nav a:hover,.primary-nav a[aria-current=location]{color:var(--ink)}.primary-nav a[aria-current=location]::after{transform:scaleX(1)}.header-actions{justify-self:end;display:flex;align-items:center;gap:.8rem}.mode-link,.theme-switch,.menu-toggle{border:0;background:transparent;cursor:pointer}.mode-link{padding:.4rem 0;display:flex;align-items:center;gap:.45rem;color:var(--ink-2);font-size:var(--fs-xs)}.mode-link i{display:inline-block;font-style:normal;transform-origin:center;transition:transform var(--dur) var(--ease)}.mode-link:hover i,.mode-link:focus-visible i{transform:rotate(45deg)}.terminal-label{display:none}.theme-switch{width:1.8rem;height:1.8rem;display:grid;place-items:center;color:var(--ink-2)}.theme-switch svg{width:.95rem;fill:none;stroke:currentColor;stroke-width:1.5}.menu-toggle{display:none;width:1.8rem;height:1.8rem;place-items:center}.menu-toggle span{grid-area:1/1;width:1rem;height:1px;background:currentColor;transition:transform var(--dur) var(--ease)}.menu-toggle span:first-child{transform:translateY(-.2rem)}.menu-toggle span:last-child{transform:translateY(.2rem)}.menu-toggle[aria-expanded=true] span:first-child{transform:rotate(45deg)}.menu-toggle[aria-expanded=true] span:last-child{transform:rotate(-45deg)}.mobile-nav{width:var(--frame);margin:auto;padding:1rem var(--pad);border-inline:var(--hairline) solid var(--edge);border-bottom:var(--hairline) solid var(--edge);background:var(--paper)}.mobile-nav a{padding:.7rem 0;display:block;border-bottom:var(--hairline) solid var(--line-soft);text-decoration:none;font:400 var(--fs-xs)/1.2 var(--mono)}

.page-frame{position:relative;width:var(--frame);margin-inline:auto;border-inline:var(--hairline) solid var(--edge);background:var(--canvas)}.section-pad{position:relative;padding:var(--section) var(--pad);overflow:hidden;border-top:var(--hairline) solid var(--edge)}.ambient-geometry{position:absolute;pointer-events:none;fill:none;stroke:currentColor;stroke-width:.7;color:var(--ink);opacity:.055}.ambient-geometry .accent-geometry{color:var(--accent);stroke:currentColor;opacity:.9}

.intro-section{position:relative;min-height:calc(100svh - var(--header-h));padding:clamp(2.5rem,6vw,5rem) var(--pad) 2rem;display:flex;flex-direction:column;overflow:hidden}.ambient-hero{width:min(62rem,78%);right:-13%;top:-12%;opacity:.05}.intro-grid{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1.2fr) minmax(15rem,.45fr);gap:clamp(3rem,8vw,9rem);align-items:end}.eyebrow{display:flex;align-items:center;gap:.55rem;color:var(--ink-3);font:400 var(--fs-xs)/1.2 var(--mono);text-transform:uppercase;letter-spacing:.04em}.eyebrow span{width:.45rem;height:.45rem;border-radius:50%;background:var(--accent)}.intro-copy h1{margin:clamp(1.3rem,3vw,2.5rem) 0 .9rem;font-size:clamp(3.6rem,9vw,8.5rem);line-height:.86;letter-spacing:-.085em;font-weight:500}.intro-thesis{max-width:49rem;color:var(--ink-2);font-size:clamp(1.15rem,2.1vw,1.75rem);line-height:1.42;letter-spacing:-.025em}.intro-links{margin-top:2rem;display:flex;gap:1.5rem}.intro-links a{padding-bottom:.15rem;display:flex;gap:.7rem;border-bottom:var(--hairline) solid var(--line);text-decoration:none;font-size:var(--fs-sm)}.intro-links span{color:var(--accent)}.intro-portrait{justify-self:end;width:min(100%,17rem)}.intro-portrait>div{aspect-ratio:4/5;overflow:hidden;background:var(--surface);border:var(--hairline) solid var(--edge)}.intro-portrait img{width:100%;height:100%;object-fit:cover;filter:saturate(.78)}.intro-portrait figcaption{padding-top:.65rem;display:grid;gap:.15rem;color:var(--ink-3);font:400 var(--fs-2xs)/1.35 var(--mono)}.intro-foot{position:relative;z-index:1;margin-top:clamp(4rem,10vh,8rem);padding-top:.85rem;display:grid;grid-template-columns:1fr 2fr auto;gap:1rem;border-top:var(--hairline) solid var(--line-soft);font:400 var(--fs-xs)/1.2 var(--mono)}.intro-foot span{color:var(--ink-3)}.intro-foot b{font-weight:400}

.section-heading{position:relative;z-index:1;display:grid;grid-template-columns:minmax(8rem,.35fr) minmax(0,1.65fr);gap:clamp(2rem,6vw,7rem);align-items:start;margin-bottom:clamp(3.5rem,7vw,7rem)}.section-heading>p,.contact-label{color:var(--ink-3);font:400 var(--fs-xs)/1.2 var(--mono);text-transform:uppercase;letter-spacing:.04em}.section-heading h2{max-width:18ch;font-size:clamp(2.2rem,4.9vw,5.15rem);line-height:.98;letter-spacing:-.065em;font-weight:500}

.about-section{background:var(--paper)}.ambient-about{width:min(42rem,70%);right:-15%;top:8%}.about-grid{position:relative;z-index:1;margin-left:calc(35% + 1rem);display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(2rem,5vw,6rem)}.about-lead{font-size:clamp(1.35rem,2.6vw,2.35rem);line-height:1.35;letter-spacing:-.035em}.about-copy{color:var(--ink-2);font-size:var(--fs-md)}.about-copy p+p{margin-top:1rem}.practice-list{position:relative;z-index:1;margin-top:clamp(4rem,8vw,8rem);border-top:var(--hairline) solid var(--line)}.practice-list article{padding:1.15rem 0;display:grid;grid-template-columns:4rem minmax(12rem,.7fr) 1fr;gap:1.5rem;border-bottom:var(--hairline) solid var(--line-soft);align-items:baseline}.practice-list span{color:var(--ink-3);font:400 var(--fs-2xs)/1 var(--mono)}.practice-list h3{font-size:var(--fs-lg);font-weight:500}.practice-list p{max-width:44ch;color:var(--ink-2);font-size:var(--fs-sm)}

.work-section{background:color-mix(in srgb,var(--accent-soft) 18%,var(--canvas))}.ambient-work{width:min(46rem,70%);left:-20%;top:18%}.work-layout{position:relative;z-index:1;display:grid;grid-template-columns:minmax(14rem,.42fr) minmax(0,1.58fr);gap:clamp(2rem,6vw,7rem);align-items:start}.project-list{border-top:0}.project-row{width:100%;padding:1rem 0;display:block;border:0;border-bottom:var(--hairline) solid var(--line-soft);background:transparent;text-align:left;cursor:pointer}.project-row b{transition:color var(--dur) var(--ease)}.project-row b{display:block;font-size:var(--fs-base);font-weight:500}.project-row small{display:block;margin-top:.2rem;color:var(--ink-3);font-size:var(--fs-xs)}.project-row.active b{color:var(--accent)}.project-row.active b::after{content:"  →"}.project-detail{min-width:0;border-top:0}.project-media{aspect-ratio:16/10;padding:clamp(.6rem,2vw,1.5rem);display:grid;place-items:center;background:transparent;border-bottom:var(--hairline) solid var(--line-soft)}.project-media img{width:100%;height:100%;object-fit:contain;transition:opacity var(--dur) var(--ease)}.project-thumbs{padding:.55rem 0;display:flex;gap:.5rem;border-bottom:var(--hairline) solid var(--line-soft)}.project-thumbs button{width:5.5rem;height:3.4rem;padding:.2rem;border:var(--hairline) solid var(--line-soft);background:transparent;cursor:pointer;opacity:.45}.project-thumbs button.active{opacity:1;border-color:var(--accent)}.project-thumbs img{width:100%;height:100%;object-fit:cover}.project-text{padding:clamp(1.3rem,3vw,2.5rem) 0;display:grid;grid-template-columns:1fr .7fr;gap:clamp(2rem,5vw,5rem)}.project-text>div>p:first-child{color:var(--ink-3);font:400 var(--fs-xs)/1.2 var(--mono);text-transform:uppercase}.project-text h3{margin:.5rem 0 .8rem;font-size:clamp(2rem,4.5vw,4.4rem);line-height:.95;letter-spacing:-.06em;font-weight:500}.project-description{max-width:42ch;color:var(--ink-2);font-size:var(--fs-md)}.project-text dl{border-top:var(--hairline) solid var(--line-soft)}.project-text dl div{padding:.65rem 0;border-bottom:var(--hairline) solid var(--line-soft);font-size:var(--fs-xs)}.project-text dt{margin-bottom:.2rem;color:var(--ink-3);font:400 var(--fs-2xs)/1 var(--mono);text-transform:uppercase}.project-detail footer{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);border-top:var(--hairline) solid var(--line)}.project-detail footer a,.project-detail footer button{min-width:0;padding:.8rem 0;display:flex;align-items:center;justify-content:space-between;gap:.75rem;border:0;background:transparent;text-decoration:none;font-size:var(--fs-xs);cursor:pointer}.project-detail footer a{padding-right:clamp(1rem,3vw,2rem)}.project-detail footer button{padding-left:clamp(1rem,3vw,2rem);border-left:1px solid var(--line-soft)}.project-detail footer span{flex:none}

.research-section{background:color-mix(in srgb,var(--mint-soft) 24%,var(--canvas))}.ambient-research{width:min(42rem,70%);right:-15%;top:16%}.question-list{position:relative;z-index:1;margin-left:calc(35% + 1rem);border-top:var(--hairline) solid var(--line)}.question{border-bottom:var(--hairline) solid var(--line-soft)}.question button{width:100%;min-height:5.5rem;padding:1rem 0;display:grid;grid-template-columns:minmax(0,1fr) 5rem 1.5rem;gap:1rem;align-items:center;border:0;background:transparent;text-align:left;cursor:pointer}.question button small{color:var(--ink-3);font:400 var(--fs-2xs)/1.2 var(--mono);text-transform:uppercase}.question button b{font-size:clamp(.95rem,1.6vw,1.25rem);line-height:1.35;font-weight:500}.question button i{justify-self:end;color:var(--accent);font-style:normal}.answer{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--dur-layout) var(--ease)}.answer>div{min-height:0;overflow:hidden}.question.open .answer{grid-template-rows:1fr}.question.open .answer>div{padding:0 0 1.6rem}.answer p:first-child{max-width:57ch;color:var(--ink-2);font-size:var(--fs-md)}.answer p:last-child{max-width:45rem;margin-top:1rem;padding-top:.6rem;display:flex;justify-content:space-between;border-top:var(--hairline) solid var(--line-soft);font:400 var(--fs-2xs)/1.3 var(--mono)}.answer p:last-child span{color:var(--ink-3)}

.notes-section{background:var(--paper)}.notes-list{position:relative;z-index:1;margin-left:calc(35% + 1rem);border-top:var(--hairline) solid var(--line)}.notes-list a{padding:1.05rem 0;display:grid;grid-template-columns:6rem 1fr auto;gap:1rem;border-bottom:var(--hairline) solid var(--line-soft);text-decoration:none}.notes-list time{color:var(--ink-3);font:400 var(--fs-2xs)/1.4 var(--mono)}.notes-list b{display:block;font-size:var(--fs-base);font-weight:500}.notes-list small{display:block;margin-top:.15rem;color:var(--ink-3);font-size:var(--fs-xs)}.notes-list i{color:var(--accent);font-style:normal;transition:transform var(--dur) var(--ease)}.notes-list a:hover i{transform:translate(.2rem,-.2rem)}

.contact-section{min-height:38rem;background:var(--on-dark-bg);color:var(--on-dark)}.ambient-contact{width:min(46rem,75%);right:-15%;top:0;color:var(--on-dark);opacity:.06}.contact-label{position:relative;z-index:1;color:var(--on-dark-mute-2)}.contact-grid{position:relative;z-index:1;margin-top:3rem;display:grid;grid-template-columns:1.35fr .65fr;gap:clamp(3rem,8vw,9rem);align-items:end}.contact-grid>div:first-child>p{margin-bottom:1rem;color:var(--on-dark-mute);font:400 var(--fs-xs)/1.3 var(--mono);text-transform:uppercase}.contact-grid h2{max-width:13ch;font-size:clamp(2.8rem,6.5vw,6.8rem);line-height:.92;letter-spacing:-.07em;font-weight:500}.contact-links{border-top:var(--hairline) solid var(--on-dark-line)}.contact-links a,.contact-links button{width:100%;padding:.75rem 0;display:flex;justify-content:space-between;border:0;border-bottom:var(--hairline) solid var(--on-dark-line);background:transparent;color:inherit;text-decoration:none;text-align:left;font-size:var(--fs-xs);cursor:pointer}.contact-links a:hover,.contact-links button:hover{color:var(--on-dark-accent)}
.toast{position:fixed;z-index:var(--z-toast);left:50%;bottom:1.25rem;padding:.55rem .8rem;border:var(--hairline) solid var(--line);background:var(--paper);font-size:var(--fs-xs);opacity:0;transform:translate(-50%,.4rem);pointer-events:none;transition:opacity var(--dur),transform var(--dur) var(--ease)}.toast.show{opacity:1;transform:translate(-50%,0)}.js .reveal{opacity:0;transform:translateY(.65rem);transition:opacity 560ms var(--ease),transform 560ms var(--ease)}.js .reveal.in{opacity:1;transform:none}

.terminal-site{display:none}[data-skin=terminal] body{overflow:hidden}[data-skin=terminal] .academic-site,[data-skin=terminal] .primary-nav,[data-skin=terminal] .menu-toggle{display:none}[data-skin=terminal] .academic-label{display:none}[data-skin=terminal] .terminal-label{display:inline}[data-skin=terminal] .site-header{background:var(--outer);backdrop-filter:none}[data-skin=terminal] .header-frame{grid-template-columns:1fr auto;background:var(--canvas)}[data-skin=terminal] .header-actions{grid-column:2}[data-skin=terminal] .terminal-site{width:var(--frame);height:calc(100dvh - var(--header-h));margin:auto;display:grid;grid-template-rows:2rem minmax(0,1fr) 3.2rem 1.8rem;border-inline:var(--hairline) solid var(--edge);background:var(--paper);overflow:hidden;font-family:var(--mono)}.terminal-mast,.terminal-footer{padding:0 clamp(1rem,2.5vw,2.5rem);display:flex;align-items:center;justify-content:space-between;border-bottom:var(--hairline) solid var(--line-soft);color:var(--ink-3);font-size:var(--fs-2xs)}.terminal-compose{min-height:0;padding:clamp(1.5rem,5vw,4.5rem);display:grid;grid-template-columns:minmax(14rem,.65fr) minmax(0,1.35fr);gap:clamp(2rem,7vw,7rem);overflow:hidden}.terminal-prompt{color:var(--accent);font-size:var(--fs-xs)}.terminal-intro h1{margin:1rem 0;font-family:var(--mono);font-size:clamp(2.4rem,5vw,4.4rem);line-height:.95;letter-spacing:-.055em;font-weight:500}.terminal-intro>p:last-of-type{max-width:42ch;color:var(--ink-2);font-size:var(--fs-sm)}.terminal-intro nav{margin-top:clamp(1.5rem,5vh,4rem);border-top:var(--hairline) solid var(--line-soft)}.terminal-intro nav button{width:100%;padding:.65rem 0;display:grid;grid-template-columns:1fr auto;border:0;border-bottom:var(--hairline) solid var(--line-soft);background:transparent;color:var(--ink-3);text-align:left;cursor:pointer}.terminal-intro nav button span{font-size:var(--fs-2xs)}.terminal-intro nav button.active{padding-left:.35rem;color:var(--ink)}.terminal-intro nav button.active::after{content:"←";color:var(--accent)}.terminal-views{min-height:0;padding:.5rem 0 1rem clamp(1.5rem,3vw,3rem);border-left:var(--hairline) solid var(--line-soft);overflow:auto}.terminal-view{display:none;animation:terminal-in var(--dur-layout) var(--ease) both}.terminal-view.active{display:block}@keyframes terminal-in{from{opacity:0;transform:translateY(.5rem)}}.terminal-statement{max-width:21ch;margin:clamp(2rem,7vh,5rem) 0;font-size:clamp(1.35rem,2.8vw,2.8rem);line-height:1.18;letter-spacing:-.05em}.terminal-view dl{max-width:40rem;border-top:var(--hairline) solid var(--line-soft)}.terminal-view dl div{padding:.65rem 0;display:grid;grid-template-columns:1fr 1.5fr;border-bottom:var(--hairline) solid var(--line-soft);font-size:var(--fs-xs)}.terminal-view dt{color:var(--ink-3)}.terminal-note{margin:1rem 0 2rem;color:var(--ink-3);font-size:var(--fs-xs)}.terminal-note code{color:var(--accent)}.terminal-work-list{border-top:var(--hairline) solid var(--line-soft)}.terminal-work-list button{width:100%;padding:.9rem 0;display:grid;grid-template-columns:2rem 1fr auto auto;gap:.7rem;border:0;border-bottom:var(--hairline) solid var(--line-soft);background:transparent;text-align:left;cursor:pointer}.terminal-work-list span,.terminal-work-list small{color:var(--ink-3);font-size:var(--fs-2xs)}.terminal-work-list b{font-weight:500}.terminal-work-list i{color:var(--accent);font-style:normal}.terminal-view ol{padding:0;margin:clamp(2rem,6vh,5rem) 0 0;list-style:none;border-top:var(--hairline) solid var(--line-soft)}.terminal-view li{padding:.9rem 0;display:grid;gap:.35rem;border-bottom:var(--hairline) solid var(--line-soft)}.terminal-view li small{color:var(--ink-3);font-size:var(--fs-2xs)}.terminal-view li b{font-weight:500}.terminal-contact{max-width:36rem;margin-top:3rem;border-top:var(--hairline) solid var(--line-soft)}.terminal-contact a,.terminal-contact button{width:100%;padding:.75rem 0;display:flex;justify-content:space-between;border:0;border-bottom:var(--hairline) solid var(--line-soft);background:transparent;text-decoration:none;text-align:left;cursor:pointer;font-size:var(--fs-xs)}.terminal-output{margin-top:1.5rem;color:var(--ink-3);font-size:var(--fs-xs)}.terminal-output.error{color:var(--error)}.terminal-command{padding:0 clamp(1rem,2.5vw,2.5rem);display:flex;align-items:center;gap:.6rem;border-block:var(--hairline) solid var(--line-soft);background:var(--canvas)}.terminal-command label{flex:none;color:var(--accent);font-size:var(--fs-xs)}.terminal-command input{min-width:0;flex:1;border:0;outline:0;background:transparent;color:var(--ink);caret-color:var(--accent);font-size:var(--fs-sm)}.terminal-command>span{color:var(--ink-3)}.terminal-footer{border:0}

@media(max-width:64rem){.primary-nav{gap:.9rem}.intro-grid{grid-template-columns:1fr 13rem;gap:3rem}.about-grid,.question-list,.notes-list{margin-left:0}.section-heading{grid-template-columns:8rem 1fr}.work-layout{grid-template-columns:13rem 1fr;gap:3rem}.project-text{grid-template-columns:1fr}.terminal-compose{gap:2.5rem;padding:2.5rem}}
@media(max-width:48rem){.header-frame{grid-template-columns:1fr auto}.primary-nav{display:none}.menu-toggle{display:grid}.mode-link span{display:none}.mode-link{font-size:0}.mode-link i{font-size:0}.mode-link i::before{content:">_";font:500 var(--fs-xs)/1 var(--mono)}[data-skin=terminal] .mode-link i::before{content:"Aa"}.mode-link:hover i,.mode-link:focus-visible i{transform:none}.header-actions{gap:.5rem}.intro-section{min-height:auto;padding-top:4.5rem}.intro-grid{grid-template-columns:1fr}.intro-copy h1{font-size:clamp(3.3rem,16vw,6rem)}.intro-portrait{justify-self:start;width:12rem}.intro-foot{grid-template-columns:1fr auto}.intro-foot b{grid-column:1/-1;grid-row:2}.section-heading{display:block}.section-heading h2{margin-top:1rem}.about-grid{grid-template-columns:1fr}.practice-list article{grid-template-columns:2.5rem 1fr}.practice-list p{grid-column:2}.work-layout{display:block}.question button{grid-template-columns:1fr 1.5rem}.question button small{display:none}.notes-list a{grid-template-columns:5rem 1fr auto}.contact-grid{grid-template-columns:1fr}.contact-links{margin-top:2rem}[data-skin=terminal] .terminal-site{height:calc(100dvh - var(--header-h))}.terminal-compose{padding:1.2rem 1rem;display:block;overflow:auto}.terminal-intro h1{font-size:clamp(2.8rem,13vw,4.5rem)}.terminal-intro nav{margin-top:1.2rem;display:grid;grid-template-columns:1fr 1fr;gap:0 1rem;border:0}.terminal-views{min-height:21rem;margin-top:1.5rem;padding:1.2rem 0 2rem;border-left:0;border-top:var(--hairline) solid var(--line-soft);overflow:visible}.terminal-command label{display:none}}
@media(max-width:34rem){.wordmark span{display:none}.intro-thesis{font-size:var(--fs-lg)}.intro-links{display:grid;gap:.8rem}.intro-links a{width:max-content}.intro-foot{font-size:var(--fs-2xs)}.practice-list article{grid-template-columns:2rem 1fr}.project-thumbs{overflow-x:auto}.project-thumbs button{flex:0 0 4.7rem}.project-text{padding:1rem 0}.project-text h3{font-size:var(--fs-2xl)}.question button{min-height:4.8rem;grid-template-columns:1fr 1rem;gap:.6rem}.answer p:last-child{display:grid;gap:.4rem}.notes-list a{grid-template-columns:1fr auto}.notes-list time,.notes-list span{grid-column:1}.notes-list i{grid-column:2;grid-row:1/3}.contact-grid h2{font-size:clamp(2.6rem,13vw,4rem)}.contact-foot{display:grid;gap:.5rem}.terminal-mast span:first-child,.terminal-footer span:first-child{max-width:12rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.terminal-view dl div{grid-template-columns:1fr;gap:.2rem}.terminal-work-list button{grid-template-columns:2rem 1fr auto}.terminal-work-list small{display:none}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.js .reveal{opacity:1;transform:none}}
@media print{.site-header,.toast,.terminal-site,.intro-links,.ambient-geometry,.project-thumbs,.next-project,.menu-toggle,.mode-link,.theme-switch{display:none!important}.academic-site{display:block!important;width:100%;border:0}.reveal{opacity:1!important;transform:none!important}.question .answer{display:block!important;max-height:none!important}.question-list [aria-expanded]{pointer-events:none}.project-detail{display:block!important}.contact-section{background:#fff!important;color:#000!important;min-height:0!important}.contact-section *{color:#000!important;border-color:#999!important}a[href^="http"]::after{content:" <" attr(href) ">";font-size:9pt;color:#555;word-break:break-all}@page{margin:16mm}body{background:#fff;color:#000;font-size:11pt}.section-pad{padding:1.5rem 0;break-inside:auto}.project-row,.question,.notes-list li,.practice-list article{break-inside:avoid}h1,h2,h3{break-after:avoid}.project-media img{max-height:70mm;object-fit:contain}}

/* --- corrections --- */
.notes-list a,.answer p a{display:inline-flex;align-items:center;min-height:1.5rem}
.intro-grid{margin-block:auto}
.intro-foot{margin-top:clamp(2.5rem,6vh,5rem)}
/* The 5%-opacity line drawings are cropped hard by their section on
   narrow screens, leaving two stray segments that read as a render
   glitch rather than decoration. Below the tablet breakpoint they
   earn nothing, so they don't run. */
@media (max-width:48rem){.ambient-geometry{display:none}}
/* Below the desktop breakpoint the header controls collapse to bare
   glyphs, which left the mode switch a 16px-wide target. These are
   the primary touch controls on the page, so they get a real 44px
   hit area without changing where the glyph sits. */
@media (max-width:60rem){
  .mode-link,.theme-switch,.menu-toggle{
    min-width:2.75rem;min-height:2.75rem;
    display:inline-flex;align-items:center;justify-content:center;padding:0;
  }
}
.wordmark{min-height:1.75rem}
/* No rubber-band bounce. Set on html only: body has overflow-x:hidden, which
   makes it its own scroll container, and overscroll-behavior there stops
   Chrome passing trackpad scrolling up to the page. */
html{overscroll-behavior-y:none}

/* --- content pass --- */
/* Research switch: data-research="off" on <html> hides every .research-only element. */
[data-research=off] .research-only{display:none!important}
/* The portrait is black line art on transparency. On the dark canvas it
   disappeared into the background, so the dark theme inverts it to light lines. */
:root[data-theme=dark] .intro-portrait img{filter:invert(1) brightness(.9)}
@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .intro-portrait img{filter:invert(1) brightness(.9)}}
/* Experience rows reuse the practice list with a wider date column. */
.role-list article{grid-template-columns:minmax(9rem,.3fr) minmax(12rem,.7fr) 1fr}
.role-list span{line-height:1.5}
.role-list h3 small{display:block;margin-top:.25rem;color:var(--ink-3);font-size:var(--fs-xs);font-weight:400}
@media (max-width:48rem){.role-list article{grid-template-columns:1fr;gap:.35rem}.role-list p{grid-column:1}}
/* Project texts share one grid cell, so the detail keeps the height of the
   longest entry and nothing below it shifts when the project changes. */
.project-texts{display:grid}
.project-texts>.project-text{grid-area:1/1;opacity:0;visibility:hidden;transition:opacity var(--dur) var(--ease),visibility 0s linear var(--dur)}
.project-texts>.project-text.active{opacity:1;visibility:visible;transition:opacity var(--dur) var(--ease)}
.project-thumbs button{transition:opacity var(--dur) var(--ease),border-color var(--dur) var(--ease)}
/* Phones: the project list becomes a swipeable strip of titles above the detail. */
@media (max-width:48rem){
  .project-list{margin:0 0 1rem;display:flex;gap:1.5rem;overflow-x:auto;scroll-snap-type:x proximity;scrollbar-width:none;border-top:0;border-bottom:var(--hairline) solid var(--line-soft)}
  .project-list::-webkit-scrollbar{display:none}
  .project-row{flex:0 0 auto;width:auto;padding:.8rem 0;border-bottom:1px solid transparent;scroll-snap-align:start;white-space:nowrap}
  .project-row.active{border-bottom-color:var(--accent)}
  .project-row.active b::after,.project-row small{display:none}
}
@media print{.project-texts{display:block}.project-texts>.project-text:not(.active){display:none}}
.project-detail footer a.is-unavailable{visibility:hidden}
/* iOS Safari zooms the whole page when a focused input is under 16px.
   Scoped to coarse pointers so the desktop terminal keeps its
   intended scale. */
@media (pointer:coarse){
  .terminal-command input,input,select,textarea{font-size:1rem}
}
