@font-face{font-family:Geist;src:url(/assets/geist-latin-wght-normal-BgDaEnEv.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist Mono;src:url(/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0b0b0d;--surface:#131316;--surface-2:#1a1a1e;--border:#ffffff14;--border-strong:#ffffff24;--text-primary:#ecebe6;--text-secondary:#9b9a94;--text-muted:#6f6e68;--accent:#d4b483;--accent-hover:#e6c69a;--on-accent:#0b0b0d;--shadow-hover:0 20px 48px #0000003d;--nav-bg:#0b0b0db8;--spot:#ffffff0b;--grain-opacity:.035;--font-sans:"Geist", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"Geist Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--font-serif:ui-serif, "Iowan Old Style", "Palatino Linotype", "Palatino", "Book Antiqua", Georgia, serif;--fs-display:clamp(3rem, 8.5vw, 6.5rem);--fs-eyebrow:.78rem;--fs-h2:clamp(1.85rem, 3.8vw, 2.75rem);--fs-h3:1.25rem;--fs-lg:1.125rem;--fs-base:1rem;--fs-sm:.875rem;--fs-xs:.75rem;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-7:28px;--sp-8:32px;--sp-9:36px;--sp-10:40px;--sp-11:44px;--sp-12:48px;--sp-14:56px;--sp-16:64px;--sp-20:80px;--sp-24:96px;--sp-32:128px;--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-full:999px;--container:1080px;--gutter:clamp(24px, 5vw, 48px);--dur-press:.12s;--dur-press-in:90ms;--dur-hover:.2s;--dur-enter:.32s;--dur-page:.52s;--ease-out:cubic-bezier(.22, 1, .36, 1);--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-in-out:cubic-bezier(.77, 0, .175, 1);--ease-press:cubic-bezier(.34, 1.26, .64, 1);--ease-hover:ease;--ease-spring:cubic-bezier(.32, .72, 0, 1);--ease-swift:cubic-bezier(.19, 1, .22, 1);--stagger-step:60ms;--stagger-cap:4;--shadow-base:none}@media (prefers-color-scheme:light){:root:not([data-theme]){--bg:#f4f1ea;--surface:#ede9df;--surface-2:#e4dfd2;--border:#14120e1a;--border-strong:#14120e33;--text-primary:#1a1815;--text-secondary:#55524b;--text-muted:#7d7a72;--accent:#7a5a2f;--accent-hover:#5b4322;--on-accent:#f4f1ea;--shadow-hover:0 24px 48px #14120e1a;--nav-bg:#f4f1eac7;--spot:#14120e0a;--grain-opacity:.055}}[data-theme=light]{--bg:#f4f1ea;--surface:#ede9df;--surface-2:#e4dfd2;--border:#14120e1a;--border-strong:#14120e33;--text-primary:#1a1815;--text-secondary:#55524b;--text-muted:#7d7a72;--accent:#7a5a2f;--accent-hover:#5b4322;--on-accent:#f4f1ea;--shadow-hover:0 24px 48px #14120e1a;--nav-bg:#f4f1eac7;--spot:#14120e0a;--grain-opacity:.055}[data-theme=dark]{--bg:#0b0b0d;--surface:#131316;--surface-2:#1a1a1e;--border:#ffffff14;--border-strong:#ffffff24;--text-primary:#ecebe6;--text-secondary:#9b9a94;--text-muted:#6f6e68;--accent:#d4b483;--accent-hover:#e6c69a;--on-accent:#0b0b0d;--shadow-hover:0 20px 48px #0000003d;--nav-bg:#0b0b0db8;--spot:#ffffff0b;--grain-opacity:.035}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;scroll-padding-top:88px}body{font-family:var(--font-sans);font-size:var(--fs-base);background:var(--bg);color:var(--text-primary);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;transition:background var(--dur-hover) var(--ease-hover), color var(--dur-hover) var(--ease-hover);line-height:1.65;overflow-x:hidden}body:before{content:"";z-index:200;pointer-events:none;opacity:var(--grain-opacity);mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.6 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");background-size:180px 180px;position:fixed;inset:0}.progress-bar{z-index:101;background:var(--text-primary);transform-origin:0;will-change:transform;pointer-events:none;opacity:.6;height:1px;transition:transform 60ms linear;position:fixed;top:0;left:0;right:0;transform:scaleX(0)}a{color:inherit;text-decoration:none}::selection{background:var(--text-primary);color:var(--bg)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius-sm)}img{max-width:100%;display:block}.hero-canvas{z-index:0;pointer-events:none;position:absolute;inset:0}.skip-link{left:var(--sp-4);top:var(--sp-4);transform:translateY(calc(-100% - var(--sp-8)));z-index:200;padding:var(--sp-2) var(--sp-4);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);color:var(--text-primary);font-size:var(--fs-sm);transition:transform var(--dur-enter) var(--ease-out);position:absolute}.skip-link:focus{transform:none}.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}.container{width:100%;max-width:var(--container);padding-inline:var(--gutter);margin-inline:auto}.section{padding-block:var(--sp-24)}@media (width<=720px){.section{padding-block:var(--sp-16)}}.divider{background:var(--border);border:0;height:1px}.stage,.rail{display:block}.panel{padding-block:var(--sp-16);position:relative}.panel-inner{width:100%;max-width:var(--container);padding-inline:var(--gutter);margin-inline:auto}.panel-hero{min-height:100dvh;padding-top:88px}.panel-hero .panel-inner{min-height:calc(100dvh - 88px - var(--sp-16));flex-direction:column;justify-content:center;display:flex}@media (width>=900px){main.stage{height:calc(var(--stage-panel-count,5) * 100vh);width:100%;position:relative}html:has(main.stage){scroll-behavior:auto;scrollbar-width:none;-ms-overflow-style:none}html:has(main.stage)::-webkit-scrollbar{width:0;height:0;display:none}.rail{z-index:0;width:100%;height:100vh;position:fixed;top:0;left:0;overflow:hidden}.panel{will-change:transform;background:var(--bg);width:100%;height:100vh;padding:0;position:absolute;top:0;left:0;overflow:hidden;transform:translate(100%)}.panel:first-of-type{transform:translate(0,0)}.panel:not(:first-of-type){box-shadow:-1px 0 0 var(--border), -18px 0 40px -20px #00000047}.panel:not(.panel-hero) .panel-inner{box-sizing:border-box;width:100%;max-width:1440px;height:100vh;padding:96px var(--gutter) var(--sp-10);grid-template-rows:1fr;grid-template-columns:minmax(240px,360px) minmax(0,1fr);align-items:center;column-gap:clamp(48px,6vw,96px);margin-inline:auto;display:grid}.panel:not(.panel-hero) .section-head{grid-column:1;align-self:center;margin-bottom:0}.panel:not(.panel-hero) .section-body{min-width:0;height:100%;padding-block:var(--sp-4);flex-direction:column;grid-column:2;justify-content:center;gap:clamp(24px,3.5vh,44px);display:flex}.panel:not(.panel-hero) .section-body>*{margin-top:0}.panel:not(.panel-hero) .section-title{letter-spacing:-.02em;font-size:clamp(2.2rem,3.6vw,3.4rem);line-height:1.02}.panel:not(.panel-hero) .section-lead{font-size:var(--fs-lg);max-width:none;margin-top:var(--sp-4)}.panel:not(.panel-hero) .section-index{margin-bottom:var(--sp-5)}.panel-hero{min-height:100vh;padding:0}.panel-hero .panel-inner{box-sizing:border-box;min-height:100vh;max-width:var(--container);padding:96px var(--gutter) var(--sp-8);flex-direction:column;justify-content:center;margin-inline:auto;display:flex}.panel .section{padding:0}}@media (width>=900px) and (prefers-reduced-motion:reduce){main.stage{height:auto}.rail{width:100%;height:auto;position:static;overflow:visible}.panel{width:100%;height:auto;min-height:100vh;box-shadow:none;padding-block:var(--sp-16);position:relative;transform:none}.panel-hero{padding-top:88px;padding-bottom:var(--sp-16)}}@media (width>=900px) and (width<=1100px){.panel:not(.panel-hero) .panel-inner{row-gap:var(--sp-6);grid-template-rows:auto 1fr;grid-template-columns:minmax(0,1fr);align-items:start;padding-top:88px}.panel:not(.panel-hero) .section-head{grid-column:1;align-self:start}.panel:not(.panel-hero) .section-body{grid-column:1;height:auto}.panel{overflow:hidden auto}}@media (width>=1101px){.panel-work .section-body .featured{padding:var(--sp-5) 0 var(--sp-5) var(--sp-6)}.panel-work .section-body .featured-title{font-size:clamp(1.7rem,2.4vw,2.1rem)}.panel-work .section-body .featured-desc{font-size:var(--fs-base);margin-top:var(--sp-3);max-width:64ch;line-height:1.5}.panel-work .section-body .featured-foot{margin-top:var(--sp-4)}.panel-work .section-body .work-list{margin-top:0}.panel-work .section-body .work-row{padding:var(--sp-4) var(--sp-3);gap:var(--sp-5)}.panel-work .section-body .work-title{font-size:1.2rem}.panel-work .section-body .work-desc{margin-top:3px;font-size:.9rem;line-height:1.5}.panel-coursework .section-body .course-groups{gap:var(--sp-10)}.panel-coursework .section-body .course-row{padding:var(--sp-4) var(--sp-2) var(--sp-4) var(--sp-5)}.panel-coursework .section-body .course-name{font-size:1.15rem}.panel-about .section-body .about-grid{gap:var(--sp-10)}.panel-about .section-body .about-prose p{font-size:1.2rem;line-height:1.6}.panel-about .section-body .about-photo{width:140px;height:140px}.panel-about .section-body .facts{padding-top:var(--sp-6);margin-top:0}.panel-about .section-body .fact-value{font-size:1.75rem}.panel-about .section-body .skills{gap:var(--sp-4);margin-top:0}.panel-about .section-body .skill-group{padding:var(--sp-4) 0}.panel-contact .section-body .contact-lead{font-size:var(--fs-lg);max-width:54ch;margin-bottom:0}.panel-contact .section-body .contact-email{font-size:clamp(2.2rem,4.5vw,3.4rem)}.panel-contact .section-body .contact-secondary,.panel-contact .section-body .contact-footer{padding-top:var(--sp-5);margin-top:0}}.contact-footer{margin-top:var(--sp-8);padding-top:var(--sp-5);border-top:1px solid var(--border);justify-content:space-between;align-items:baseline;gap:var(--sp-6);font-family:var(--font-mono);font-size:var(--fs-eyebrow);color:var(--text-muted);letter-spacing:.04em;text-transform:uppercase;flex-wrap:wrap;display:flex}.contact-footer .footer-monogram{font-family:var(--font-serif);color:var(--text-primary);letter-spacing:-.005em;text-transform:none;font-size:1rem;font-style:italic}.contact-footer .footer-meta{font-variant-numeric:tabular-nums}@media (width>=1101px){.panel-contact .section-body .contact-footer{margin-top:var(--sp-6);padding-top:var(--sp-4)}}.scroll-cue{align-items:center;gap:var(--sp-3);margin-top:var(--sp-12);font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);transition:opacity var(--dur-page) var(--ease-spring), transform var(--dur-page) var(--ease-spring);display:none}@media (width>=900px){.scroll-cue{display:inline-flex}}.scroll-cue.is-hidden{opacity:0;pointer-events:none;transform:translateY(6px)}.scroll-cue .cue-track{background:currentColor;width:42px;height:1px;display:inline-block;position:relative;overflow:hidden}.scroll-cue .cue-track:before{content:"";background:var(--text-primary);animation:2.4s cubic-bezier(.65,0,.35,1) infinite cue-slide;position:absolute;inset:0;transform:translate(-100%)}@keyframes cue-slide{0%{transform:translate(-100%)}60%{transform:translate(100%)}to{transform:translate(100%)}}.scroll-cue .cue-arrow{transition:transform var(--dur-page) var(--ease-spring)}.section-head{margin-bottom:var(--sp-12);gap:var(--sp-3);grid-template-columns:minmax(0,1fr);display:grid}.section-index{font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);align-items:center;gap:var(--sp-2);display:inline-flex}.section-index:before{content:"";opacity:.5;background:currentColor;width:24px;height:1px}.eyebrow{font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-bottom:var(--sp-3)}.section-title{font-family:var(--font-serif);font-size:var(--fs-h2);letter-spacing:-.01em;color:var(--text-primary);font-weight:400;line-height:1.05}.section-title em{color:var(--text-primary);font-style:italic;font-family:var(--font-serif)}.section-lead{margin-top:var(--sp-2);max-width:62ch;font-size:var(--fs-lg);color:var(--text-secondary);line-height:1.55}.section-lead em{font-style:italic;font-family:var(--font-serif);color:var(--text-primary)}@media (scripting:enabled){.reveal,[data-reveal]{opacity:0;translate:0 14px}}.reveal,[data-reveal]{transition:opacity var(--dur-page) var(--ease-spring), translate var(--dur-page) var(--ease-spring)}.reveal.is-visible,[data-reveal].is-visible{opacity:1;translate:none}@media (prefers-reduced-motion:no-preference){.rise{opacity:0;animation:rise var(--dur-page) var(--ease-spring) forwards}.rise.d1{animation-delay:0s}.rise.d2{animation-delay:90ms}.rise.d3{animation-delay:.18s}.rise.d4{animation-delay:.27s}.rise.d5{animation-delay:.36s}}@keyframes rise{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}.mask-in{padding-bottom:.22em;display:block;overflow:hidden}.mask-in+.mask-in{margin-top:-.2em}@media (prefers-reduced-motion:no-preference){.mask-in>.mask-inner{animation:mask-slide var(--dur-page) var(--ease-spring) forwards;animation-delay:var(--mask-delay,0s);display:inline-block;transform:translateY(120%)}}@keyframes mask-slide{0%{transform:translateY(120%)}to{transform:translateY(0)}}.site-nav{z-index:100;height:56px;transition:background var(--dur-hover) var(--ease-hover), border-color var(--dur-hover) var(--ease-hover);background:0 0;border-bottom:1px solid #0000;align-items:center;display:flex;position:fixed;inset:0 0 auto}.site-nav.is-scrolled{background:var(--nav-bg);border-bottom-color:var(--border);-webkit-backdrop-filter:blur(20px)saturate(160%)}.nav-inner{width:100%;max-width:var(--container);padding-inline:var(--gutter);justify-content:space-between;align-items:center;gap:var(--sp-4);margin-inline:auto;display:flex}.nav-brand{align-items:baseline;gap:var(--sp-2);font-size:var(--fs-sm);letter-spacing:-.005em;color:var(--text-primary);font-weight:500;display:inline-flex}.nav-brand:before{content:"§";font-family:var(--font-serif);color:var(--text-muted);transition:color var(--dur-hover) var(--ease-hover), transform var(--dur-page) var(--ease-spring);font-size:1rem;font-style:italic}.nav-brand:hover:before{color:var(--text-primary);transform:rotate(-8deg)}.nav-links{align-items:center;gap:var(--sp-1);font-family:var(--font-mono);list-style:none;display:flex}.nav-link{align-items:center;gap:var(--sp-1);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-eyebrow);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);transition:color var(--dur-hover) var(--ease-hover);font-weight:500;display:inline-flex;position:relative}.nav-link .num{color:var(--text-muted);opacity:.65;font-variant-numeric:tabular-nums;transition:color var(--dur-hover) var(--ease-hover);font-size:.6rem}.nav-link:hover,.nav-link:hover .num,.nav-link.is-active{color:var(--text-primary)}.nav-link.is-active .num{color:var(--text-primary);opacity:1}.nav-link.is-active:before{content:"";left:var(--sp-2);background:var(--text-primary);width:3px;height:3px;animation:nav-dot-in var(--dur-page) var(--ease-spring) forwards;border-radius:50%;position:absolute;top:50%;transform:translate(-6px,-50%)}@keyframes nav-dot-in{0%{opacity:0;transform:translate(-10px,-50%)scale(.6)}to{opacity:1;transform:translate(-6px,-50%)scale(1)}}.nav-tools{align-items:center;gap:var(--sp-1);display:flex}.icon-btn{border-radius:var(--radius-md);width:38px;height:38px;color:var(--text-secondary);cursor:pointer;transition:color var(--dur-hover) var(--ease-hover), border-color var(--dur-hover) var(--ease-hover), background var(--dur-hover) var(--ease-hover);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:inline-flex}.icon-btn:hover{color:var(--text-primary);border-color:var(--border)}.icon-btn svg{width:18px;height:18px}.nav-toggle,.nav-toggle .icon-close,.nav-toggle.is-open .icon-menu{display:none}.nav-toggle.is-open .icon-close{display:block}.nav-panel{z-index:99;background:var(--nav-bg);-webkit-backdrop-filter:blur(16px)saturate(180%);border-bottom:1px solid var(--border);padding:var(--sp-2) var(--gutter) var(--sp-4);gap:var(--sp-1);opacity:0;transition:opacity var(--dur-enter) var(--ease-in), translate var(--dur-enter) var(--ease-in), display var(--dur-enter) allow-discrete;flex-direction:column;display:none;position:fixed;inset:64px 0 auto;translate:0 -8px}.nav-panel.is-open{opacity:1;transition:opacity var(--dur-enter) var(--ease-out), translate var(--dur-enter) var(--ease-out), display var(--dur-enter) allow-discrete;display:flex;translate:none}@starting-style{.nav-panel.is-open{opacity:0;translate:0 -8px}}.nav-panel .nav-link{padding:var(--sp-3) var(--sp-3);font-size:var(--fs-base)}.btn{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.04em;text-transform:uppercase;padding:var(--sp-3) var(--sp-6);border-radius:var(--radius-full);cursor:pointer;transition:transform var(--dur-press) var(--ease-press), background var(--dur-hover) var(--ease-hover), border-color var(--dur-hover) var(--ease-hover), color var(--dur-hover) var(--ease-hover);border:1px solid #0000;font-weight:500;display:inline-flex;position:relative;overflow:hidden}.btn:active{transition:transform var(--dur-press-in) var(--ease-out);will-change:transform;transform:scale(.97)}.btn-primary{background:var(--text-primary);color:var(--bg)}.btn-primary:hover{background:var(--text-secondary)}.btn-secondary{color:var(--text-primary);border-color:var(--border-strong);background:0 0}.btn-secondary:hover{border-color:var(--text-primary);background:0 0}.btn .arrow{transition:transform var(--dur-hover) var(--ease-swift)}@media (hover:hover) and (pointer:fine){.btn:hover .arrow{transform:translate(3px)}}.hero{isolation:isolate;min-height:100dvh;padding-top:88px;padding-bottom:var(--sp-16);flex-direction:column;justify-content:center;display:flex;position:relative}.hero>:not(.hero-canvas){z-index:1;position:relative}.hero-avail{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);margin-bottom:var(--sp-8);display:inline-flex}.hero-avail:before{content:"";background:#4ade80;border-radius:50%;width:7px;height:7px;animation:2.4s cubic-bezier(.4,0,.6,1) infinite avail-pulse;box-shadow:0 0 #4ade80b3}@keyframes avail-pulse{0%,to{box-shadow:0 0 #4ade8059}50%{box-shadow:0 0 0 6px #4ade8000}}.hero-name{font-family:var(--font-serif);font-size:var(--fs-display);letter-spacing:-.025em;color:var(--text-primary);max-width:14ch;font-weight:400;line-height:.92}.hero-name .em{color:var(--text-primary);transform-origin:0;font-style:italic;font-weight:400;display:inline-block}.hero-role{margin-top:var(--sp-8);color:var(--text-primary);letter-spacing:-.005em;font-size:clamp(1.1rem,1.6vw,1.3rem);font-weight:400}.hero-role .accent{font-family:var(--font-serif);color:var(--text-primary);padding-inline:.1em;font-style:italic;font-weight:400}.hero-desc{margin-top:var(--sp-4);max-width:58ch;font-size:var(--fs-lg);color:var(--text-secondary);line-height:1.6}.hero-desc em{font-family:var(--font-serif);color:var(--text-primary);font-style:italic}.hero-actions{margin-top:var(--sp-8);gap:var(--sp-3);flex-wrap:wrap;display:flex}.hero-meta{margin-top:var(--sp-16);padding-top:var(--sp-6);border-top:1px solid var(--border);gap:var(--sp-4) var(--sp-8);grid-template-columns:repeat(auto-fit,minmax(140px,1fr));max-width:780px;display:grid}.hero-meta-item{gap:var(--sp-1);flex-direction:column;display:flex}.hero-meta-label{font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}.hero-meta-value{font-size:var(--fs-sm);color:var(--text-primary);letter-spacing:-.005em}.hero-meta-value em{font-family:var(--font-serif);font-style:italic}.featured{padding:var(--sp-6) 0 var(--sp-6) var(--sp-6);border-top:1px solid var(--border-strong);border-bottom:1px solid var(--border);transition:opacity var(--dur-enter) var(--ease-spring), translate var(--dur-enter) var(--ease-spring), border-color var(--dur-hover) var(--ease-hover);display:block;position:relative}.featured:before{content:"";background:var(--text-primary);width:3px;height:0;transition:height var(--dur-page) var(--ease-spring);position:absolute;top:50%;left:0;transform:translateY(-50%)}@media (hover:hover) and (pointer:fine){.featured:hover{border-bottom-color:var(--border-strong)}.featured:hover:before{height:calc(100% - var(--sp-16))}.featured:hover .featured-title{transform:translate(6px)}.featured:hover .arrow{transform:translate(3px,-3px)}}.featured-top{justify-content:space-between;align-items:center;gap:var(--sp-4);margin-bottom:var(--sp-6);display:flex}.featured-label{font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);align-items:center;gap:var(--sp-2);display:inline-flex}.featured-label:before{content:"";opacity:.5;background:currentColor;width:24px;height:1px}.featured-title{font-family:var(--font-serif);letter-spacing:-.015em;color:var(--text-primary);transition:transform var(--dur-hover) var(--ease-swift);font-size:clamp(1.9rem,3.6vw,2.6rem);font-weight:400;line-height:1.05}.featured-title em{font-style:italic}.featured-desc{margin-top:var(--sp-4);max-width:62ch;color:var(--text-secondary);font-size:var(--fs-lg);line-height:1.55}.featured-desc em{font-family:var(--font-serif);color:var(--text-primary);font-style:italic}.featured-foot{margin-top:var(--sp-6);justify-content:space-between;align-items:center;gap:var(--sp-4);flex-wrap:wrap;display:flex}.featured .arrow{transition:transform var(--dur-hover) var(--ease-swift)}.work-list{margin-top:var(--sp-8);border-top:1px solid var(--border);position:relative}.work-list:before{content:"";pointer-events:none;background:radial-gradient(240px 140px at var(--spot-x,50%) var(--spot-y,50%), var(--spot), transparent 70%);opacity:0;transition:opacity var(--dur-page) var(--ease-spring);z-index:0;position:absolute;inset:0}.work-list:hover:before{opacity:1}.work-row{align-items:center;gap:var(--sp-6);padding:var(--sp-6) var(--sp-4);border-bottom:1px solid var(--border);z-index:1;transition:opacity var(--dur-enter) var(--ease-spring), translate var(--dur-enter) var(--ease-spring);grid-template-columns:auto 1fr auto;display:grid;position:relative}.work-row:before{content:"";background:var(--text-primary);width:2px;height:0;transition:height var(--dur-page) var(--ease-spring);position:absolute;top:20%;left:0}.work-index,.work-main,.work-row .arrow{transition:transform var(--dur-hover) var(--ease-swift)}@media (hover:hover) and (pointer:fine){.work-row:hover:before{height:60%;top:20%}.work-row:hover .work-index{color:var(--text-primary);transform:translateX(var(--sp-2))}.work-row:hover .work-title{color:var(--text-primary)}.work-row:hover .work-main{transform:translateX(var(--sp-2))}.work-row:hover .arrow{color:var(--text-primary);transform:translate(3px,-3px)}}.work-index{font-family:var(--font-mono);font-size:var(--fs-eyebrow);color:var(--text-muted);font-variant-numeric:tabular-nums;letter-spacing:.04em;transition:color var(--dur-hover) var(--ease-hover), transform var(--dur-hover) var(--ease-swift)}.work-main{min-width:0}.work-title{font-family:var(--font-serif);letter-spacing:-.005em;color:var(--text-primary);transition:color var(--dur-hover) var(--ease-hover);font-size:1.4rem;font-weight:400;line-height:1.15}.work-title em{font-style:italic}.work-desc{margin-top:var(--sp-2);font-size:var(--fs-sm);color:var(--text-secondary);max-width:62ch;line-height:1.55}.work-aside{align-items:center;gap:var(--sp-4);color:var(--text-muted);transition:color var(--dur-hover) var(--ease-hover);display:flex}.tags{flex-wrap:wrap;align-items:center;gap:0;display:flex}.tag{font-family:var(--font-mono);font-size:var(--fs-eyebrow);color:var(--text-muted);white-space:nowrap;letter-spacing:.02em;padding:0}.tag+.tag:before{content:"·";color:var(--text-muted);opacity:.5;padding:0 var(--sp-2)}.work-row .tags{display:none}@media (width>=880px){.work-row .tags{justify-content:flex-end;max-width:340px;display:flex}}.course-groups{gap:var(--sp-12);grid-template-columns:1fr 1fr;display:grid}@media (width<=720px){.course-groups{gap:var(--sp-8);grid-template-columns:1fr}}.course-group-title{font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);padding-bottom:var(--sp-3);border-bottom:1px solid var(--border-strong);margin-bottom:var(--sp-3);justify-content:space-between;align-items:baseline;display:flex}.course-group-title:after{content:attr(data-count);font-family:var(--font-mono);font-size:var(--fs-eyebrow);color:var(--text-muted);opacity:.7}.course-row{align-items:baseline;gap:var(--sp-4);padding:var(--sp-3) var(--sp-2) var(--sp-3) var(--sp-4);border-bottom:1px solid var(--border);color:var(--text-primary);transition:color var(--dur-hover) var(--ease-hover);grid-template-columns:5rem 1fr auto;display:grid;position:relative}.course-row:before{content:"";background:var(--text-primary);width:6px;height:6px;transition:transform var(--dur-page) var(--ease-spring);border-radius:50%;position:absolute;top:50%;left:0;transform:translate(-12px,-50%)scale(0)}.course-row:last-child{border-bottom:0}@media (hover:hover) and (pointer:fine){.course-row:hover:before{transform:translateY(-50%)scale(1)}.course-row:hover{color:var(--text-primary)}.course-row:hover .course-name{transform:translate(4px)}.course-row:hover .arrow{color:var(--text-primary);transform:translate(4px)}}.course-code{font-family:var(--font-mono);font-size:var(--fs-eyebrow);color:var(--text-muted);letter-spacing:.04em}.course-name{font-family:var(--font-serif);transition:transform var(--dur-hover) var(--ease-swift);font-size:1.05rem;font-weight:400}.course-name em{font-style:italic}.course-row .grad{font-family:var(--font-mono);color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase;margin-left:var(--sp-2);border:1px solid var(--border);border-radius:var(--radius-full);padding:2px 6px;font-size:.65rem}.course-row .arrow{color:var(--text-muted);transition:transform var(--dur-hover) var(--ease-swift), color var(--dur-hover) var(--ease-hover)}.about-grid{gap:var(--sp-12);grid-template-columns:1fr auto;align-items:start;display:grid}@media (width<=720px){.about-grid{gap:var(--sp-8);grid-template-columns:1fr}}.about-prose p{color:var(--text-secondary);max-width:62ch;font-size:1.2rem;line-height:1.6}.about-prose p+p{margin-top:var(--sp-4)}.about-prose strong{color:var(--text-primary);font-weight:500}.about-prose em{font-family:var(--font-serif);color:var(--text-primary);font-style:italic;font-weight:400}.about-photo{border-radius:var(--radius-full);object-fit:cover;border:1px solid var(--border-strong);filter:grayscale(.2)contrast(1.02);width:132px;height:132px;transition:filter var(--dur-page) var(--ease-spring)}.about-photo:hover{filter:grayscale(0)contrast()}@media (width<=720px){.about-photo{width:96px;height:96px}}.facts{margin-top:var(--sp-8);padding-top:var(--sp-4);border-top:1px solid var(--border);gap:var(--sp-6);grid-template-columns:repeat(3,1fr);display:grid}@media (width<=540px){.facts{gap:var(--sp-4);grid-template-columns:1fr}}.fact{gap:var(--sp-1);flex-direction:column;display:flex}.fact-value{font-family:var(--font-serif);color:var(--text-primary);font-variant-numeric:tabular-nums;letter-spacing:-.01em;font-size:1.8rem;font-weight:400;line-height:1}.fact-value em{font-style:italic}.fact-label{font-family:var(--font-mono);font-size:var(--fs-eyebrow);color:var(--text-muted);letter-spacing:.06em;text-transform:uppercase}.skills{margin-top:var(--sp-8);gap:var(--sp-4);background:0 0;border:0;grid-template-columns:repeat(4,1fr);padding:0;display:grid}.skill-group{padding:var(--sp-4) 0;border-top:1px solid var(--border)}@media (width<=720px){.skills{grid-template-columns:repeat(2,1fr)}}@media (width<=480px){.skills{grid-template-columns:1fr}}.skill-group-title{font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);margin-bottom:var(--sp-3)}.skill-group .tags{align-items:flex-start;gap:var(--sp-1);flex-direction:column}.skill-group .tag{color:var(--text-primary);font-size:var(--fs-sm)}.skill-group .tag+.tag:before{content:none;padding:0}.contact-lead{font-size:var(--fs-lg);color:var(--text-secondary);max-width:56ch;margin-bottom:var(--sp-8);line-height:1.6}.contact-lead em{font-family:var(--font-serif);color:var(--text-primary);font-style:italic}.contact-email{font-family:var(--font-serif);letter-spacing:-.015em;color:var(--text-primary);align-items:center;gap:var(--sp-4);padding-bottom:4px;font-size:clamp(2rem,5.5vw,3.6rem);font-style:italic;font-weight:400;line-height:1.05;display:inline-flex;position:relative}.contact-email:after{content:"";transform-origin:100%;height:1px;transition:transform var(--dur-page) var(--ease-spring);background:currentColor;position:absolute;bottom:0;left:0;right:40px;transform:scaleX(0)}.contact-email:hover:after{transform-origin:0;transform:scaleX(1)}.contact-email .arrow{transition:transform var(--dur-hover) var(--ease-swift);font-style:normal}@media (hover:hover) and (pointer:fine){.contact-email:hover .arrow{transform:translate(4px,-4px)}}.contact-secondary{margin-top:var(--sp-8);padding-top:var(--sp-5);border-top:1px solid var(--border);gap:var(--sp-8);flex-wrap:wrap;display:flex}.contact-link{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.06em;text-transform:uppercase;color:var(--text-secondary);transition:color var(--dur-hover) var(--ease-hover), transform var(--dur-hover) var(--ease-swift);font-weight:500;display:inline-flex}.contact-link:hover{color:var(--text-primary);transform:translateY(-2px)}.contact-link svg{width:16px;height:16px}.site-footer{border-top:1px solid var(--border);padding-block:var(--sp-8);margin-top:var(--sp-16)}.footer-inner{gap:var(--sp-6);grid-template-columns:1fr auto;align-items:baseline;display:grid}@media (width<=720px){.footer-inner{grid-template-columns:1fr}}.footer-name{font-family:var(--font-serif);color:var(--text-primary);letter-spacing:-.005em;font-size:1.1rem;font-style:italic;font-weight:400}.footer-meta{font-family:var(--font-mono);font-size:var(--fs-eyebrow);color:var(--text-muted);font-variant-numeric:tabular-nums;letter-spacing:.04em;text-transform:uppercase;text-align:right}@media (width<=720px){.footer-meta{text-align:left}}.footer-links{gap:var(--sp-6);margin-top:var(--sp-4);padding-top:var(--sp-4);border-top:1px dashed var(--border);grid-column:1/-1;display:flex}@view-transition{navigation:auto}::view-transition-old(root){animation:vt-out var(--dur-page) var(--ease-in) both}::view-transition-new(root){animation:vt-in var(--dur-page) var(--ease-out) both}@keyframes vt-out{to{opacity:0}}@keyframes vt-in{0%{opacity:0}}.site-nav,nav.ds-nav{view-transition-name:site-nav}@media (width<=720px){.nav-links{display:none}.nav-toggle{display:inline-flex}.hero-name{max-width:none}.featured{padding:var(--sp-6)}.work-row{gap:var(--sp-4);padding-inline:var(--sp-1);grid-template-columns:auto 1fr auto}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto!important}*,:before,:after{transition-property:opacity,color,background-color,border-color,fill,stroke,box-shadow!important;transition-duration:var(--dur-hover)!important;scroll-behavior:auto!important;transition-delay:0s!important;animation-duration:1ms!important;animation-iteration-count:1!important;animation-delay:0s!important}.reveal,[data-reveal]{opacity:1!important;transform:none!important}.rise,.ds-fade-up{opacity:1!important;animation:none!important;transform:none!important}.ds-card{opacity:1!important;transform:none!important}.featured:hover,.ds-card:hover,.btn:active,.ds-btn-primary:active,.ds-btn-ghost:active{transform:none!important}::view-transition-old(root){animation-duration:var(--dur-hover)!important}::view-transition-new(root){animation-duration:var(--dur-hover)!important}}@media (hover:none){.card,[data-card],.ds-card,.featured{box-shadow:var(--shadow-base);transform:none!important}}nav.ds-nav{z-index:100;justify-content:space-between;align-items:center;gap:var(--sp-4);height:56px;padding:0 var(--gutter);transition:background var(--dur-hover) var(--ease-hover), border-color var(--dur-hover) var(--ease-hover);background:0 0;border-bottom:1px solid #0000;display:flex;position:fixed;top:0;left:0;right:0}nav.ds-nav.is-scrolled{background:var(--nav-bg);border-bottom-color:var(--border);-webkit-backdrop-filter:blur(20px)saturate(160%)}.ds-nav-logo{align-items:baseline;gap:var(--sp-2);font-family:var(--font-sans);font-size:var(--fs-sm);letter-spacing:-.005em;color:var(--text-primary);white-space:nowrap;flex-shrink:0;font-weight:500;display:inline-flex}.ds-nav-logo:before{content:"§";font-family:var(--font-serif);color:var(--text-muted);transition:color var(--dur-hover) var(--ease-hover), transform var(--dur-page) var(--ease-spring);font-size:1rem;font-style:italic}.ds-nav-logo:hover:before{color:var(--text-primary);transform:rotate(-8deg)}.ds-nav-back{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);padding:var(--sp-2) 0;transition:color var(--dur-hover) var(--ease-hover), transform var(--dur-hover) var(--ease-swift);background:0 0;border:0;font-weight:500;display:inline-flex}.ds-nav-back:hover{color:var(--text-primary);transform:translate(-3px)}.ds-nav-right{align-items:center;gap:var(--sp-2);flex-shrink:0;display:flex}.ds-theme-toggle{border-radius:var(--radius-md);cursor:pointer;width:38px;height:38px;color:var(--text-secondary);transition:color var(--dur-hover) var(--ease-hover), border-color var(--dur-hover) var(--ease-hover);background:0 0;border:1px solid #0000;justify-content:center;align-items:center;display:flex}.ds-theme-toggle:hover{color:var(--text-primary);border-color:var(--border)}.ds-theme-toggle svg{width:18px;height:18px}.ds-main{z-index:1;padding-top:56px;position:relative}.ds-page-hero{max-width:var(--container);padding:var(--sp-24) var(--gutter) var(--sp-16);margin:0 auto}.ds-badge{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-bottom:var(--sp-6);background:0 0;border:0;padding:0;display:inline-flex}.ds-badge:before{content:"";opacity:.5;background:currentColor;width:24px;height:1px}.ds-page-title{font-family:var(--font-serif);letter-spacing:-.02em;color:var(--text-primary);margin-bottom:var(--sp-6);font-size:clamp(2.4rem,6.5vw,4rem);font-weight:400;line-height:1.02}.ds-page-title em{color:var(--text-primary);font-style:italic}.ds-page-desc{font-size:var(--fs-lg);color:var(--text-secondary);max-width:62ch;line-height:1.6}.ds-page-desc em{font-family:var(--font-serif);color:var(--text-primary);font-style:italic}.ds-section{max-width:var(--container);padding:var(--sp-12) var(--gutter);margin:0 auto}.ds-section-label{font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-bottom:var(--sp-4);align-items:center;gap:var(--sp-2);display:inline-flex}.ds-section-label:before{content:"";opacity:.5;background:currentColor;width:24px;height:1px}.ds-section-title{font-family:var(--font-serif);font-size:var(--fs-h2);letter-spacing:-.015em;color:var(--text-primary);margin-bottom:var(--sp-6);font-weight:400;line-height:1.05}.ds-section-title em{color:var(--text-primary);font-style:italic}.ds-body{color:var(--text-secondary);margin-bottom:var(--sp-4);max-width:68ch;font-size:1.05rem;line-height:1.7}.ds-body strong{color:var(--text-primary);font-weight:500}.ds-body em{font-family:var(--font-serif);color:var(--text-primary);font-style:italic;font-weight:400}.ds-card-grid{gap:var(--sp-4);margin-top:var(--sp-8);grid-template-columns:repeat(auto-fit,minmax(280px,1fr));display:grid}.ds-card{padding:var(--sp-6);border:1px solid var(--border);border-radius:var(--radius-md);transition:opacity var(--dur-page) var(--ease-spring), translate var(--dur-page) var(--ease-spring), border-color var(--dur-hover) var(--ease-hover), background var(--dur-hover) var(--ease-hover);background:0 0;position:relative}@media (scripting:enabled){.ds-card{opacity:0;translate:0 14px}}.ds-card.visible,.ds-card.is-visible{opacity:1;translate:none}@media (hover:hover) and (pointer:fine){.ds-card:hover{background:var(--surface);border-color:var(--border-strong)}.ds-card:hover .ds-card-title{color:var(--text-primary)}}.ds-card.ds-card-featured{padding:var(--sp-8);grid-column:1/-1}.ds-card-icon{border:1px solid var(--border);width:40px;height:40px;color:var(--text-primary);margin-bottom:var(--sp-4);padding:var(--sp-2);background:0 0;border-radius:50%;justify-content:center;align-items:center;display:flex}.ds-card-icon svg{width:18px;height:18px}.ds-card-title{font-family:var(--font-serif);letter-spacing:-.005em;color:var(--text-primary);margin-bottom:var(--sp-2);transition:color var(--dur-hover) var(--ease-hover);font-size:1.2rem;font-weight:400;line-height:1.2}.ds-card-title em{font-style:italic}.ds-card-title-lg{font-family:var(--font-serif);letter-spacing:-.01em;color:var(--text-primary);margin-bottom:var(--sp-4);font-size:clamp(1.6rem,3vw,2rem);font-weight:400}.ds-card-title-lg em{font-style:italic}.ds-card-desc{font-size:var(--fs-sm);color:var(--text-secondary);margin-bottom:var(--sp-4);line-height:1.6}.ds-card-desc em{font-family:var(--font-serif);color:var(--text-primary);font-style:italic}.ds-highlight{border:0;border-left:1px solid var(--text-primary);padding:var(--sp-2) var(--sp-6);margin:var(--sp-6) 0;font-family:var(--font-serif);color:var(--text-primary);background:0 0;border-radius:0;max-width:62ch;font-size:1.15rem;font-style:italic;line-height:1.55}.ds-highlight strong{color:var(--text-primary);font-style:normal;font-weight:500;font-family:var(--font-sans)}.ds-pill-row{margin-top:var(--sp-4);flex-wrap:wrap;align-items:center;gap:0;display:flex}.ds-pill{font-family:var(--font-mono);font-size:var(--fs-eyebrow);color:var(--text-muted);letter-spacing:.02em;background:0 0;border:0;border-radius:0;padding:0}.ds-pill+.ds-pill:before{content:"·";color:var(--text-muted);opacity:.5;padding:0 var(--sp-2)}.ds-link{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.06em;text-transform:uppercase;color:var(--text-primary);transition:transform var(--dur-hover) var(--ease-swift);padding-bottom:2px;font-weight:500;display:inline-flex;position:relative}.ds-link:after{content:"";transform-origin:100%;height:1px;transition:transform var(--dur-page) var(--ease-spring);background:currentColor;position:absolute;bottom:0;left:0;right:20px;transform:scaleX(1)}.ds-link:hover{transform:translate(3px)}.ds-link:hover:after{transform-origin:0;transform:scaleX(.4)}.ds-btn-primary{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.04em;text-transform:uppercase;padding:var(--sp-3) var(--sp-6);border-radius:var(--radius-full);background:var(--text-primary);color:var(--bg);cursor:pointer;transition:transform var(--dur-press) var(--ease-press), background var(--dur-hover) var(--ease-hover);border:1px solid #0000;font-weight:500;display:inline-flex}.ds-btn-primary:hover{background:var(--text-secondary)}.ds-btn-primary:active{transition:transform var(--dur-press-in) var(--ease-out);will-change:transform;transform:scale(.97)}.ds-btn-ghost{align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:var(--fs-eyebrow);letter-spacing:.04em;text-transform:uppercase;padding:var(--sp-3) var(--sp-6);border-radius:var(--radius-full);color:var(--text-primary);border:1px solid var(--border-strong);cursor:pointer;transition:transform var(--dur-press) var(--ease-press), border-color var(--dur-hover) var(--ease-hover), background var(--dur-hover) var(--ease-hover);background:0 0;font-weight:500;display:inline-flex}.ds-btn-ghost:hover{border-color:var(--text-primary);background:0 0}.ds-btn-ghost:active{transition:transform var(--dur-press-in) var(--ease-out);will-change:transform;transform:scale(.97)}.ds-btn-row{gap:var(--sp-3);margin-top:var(--sp-6);flex-wrap:wrap;display:flex}.ds-divider{background:var(--border);height:1px;margin:0}footer.ds-footer{z-index:1;border-top:1px solid var(--border);padding:var(--sp-8) var(--gutter);align-items:baseline;gap:var(--sp-4);max-width:var(--container);margin:0 auto;margin-top:var(--sp-16);grid-template-columns:1fr auto;display:grid;position:relative}@media (width<=720px){footer.ds-footer{grid-template-columns:1fr}}.ds-footer-logo{font-family:var(--font-serif);color:var(--text-primary);letter-spacing:-.005em;font-size:1.1rem;font-style:italic;font-weight:400}.ds-footer-text{font-family:var(--font-mono);font-size:var(--fs-eyebrow);color:var(--text-muted);letter-spacing:.04em;text-transform:uppercase}.ds-code-block{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--sp-4) var(--sp-6);font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--text-primary);margin:var(--sp-3) 0 var(--sp-6);tab-size:4;line-height:1.7;overflow-x:auto}code{font-family:var(--font-mono)}.ds-body code,.ds-card-desc code,.ds-page-desc code{background:var(--surface-2);border:1px solid var(--border);padding:1px var(--sp-1);border-radius:var(--radius-sm);font-size:var(--fs-xs);color:var(--text-primary)}.ds-step-title{font-family:var(--font-serif);font-size:var(--fs-h3);color:var(--text-primary);margin-bottom:var(--sp-2);letter-spacing:-.005em;font-weight:400}.ds-step-title em{font-style:italic}.ds-body ul,.ds-body ol{margin:var(--sp-2) 0 var(--sp-4) var(--sp-6);color:var(--text-secondary);line-height:1.8}.ds-body li{margin-bottom:var(--sp-1)}.ds-body li em{font-family:var(--font-serif);color:var(--text-primary);font-style:italic}.ds-fade-up{opacity:0;animation:rise var(--dur-page) var(--ease-spring) forwards}.ds-fade-up-1{animation-delay:90ms}.ds-fade-up-2{animation-delay:.18s}.ds-fade-up-3{animation-delay:.27s}
