:root{--bg-canvas:#0b1220;--bg-surface:#1e293b80;--border-subtle:#94a3b81a;--border-medium:#94a3b833;--text-primary:#f1f5f9;--text-secondary:#94a3b8;--text-muted:#64748b;--accent:#5eead4;--accent-surface:#2dd4bf1a;--nav-inactive:#64748b;--nav-indicator:#475569;--nav-active:#e2e8f0;--font-sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;--font-mono:"JetBrains Mono", "DM Mono", monospace;--spotlight-color:#1d4ed81f;--container-max:1200px;--content-index:1000px;--content-technical:880px;--content-reading:720px;--gutter-x:clamp(1.5rem, 5vw, 3.5rem);--space-top-desktop:clamp(3.75rem, 6.5vh, 5.5rem)}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;color-scheme:dark;background-color:var(--bg-canvas);scrollbar-gutter:stable;overflow-x:clip}body{background-color:var(--bg-canvas);color:var(--text-secondary);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-height:100vh;font-size:1rem;line-height:1.625;position:relative;overflow-x:clip}::selection{color:var(--bg-canvas);background-color:#5eead4}a{color:inherit;text-decoration:none}img{max-width:100%;height:auto;display:block}:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.skip-to-content{z-index:100;background-color:var(--accent);color:var(--bg-canvas);border-radius:.25rem;padding:.75rem 1.5rem;font-size:.875rem;font-weight:600;transition:top .15s;position:absolute;top:-9999px;left:1.5rem}.skip-to-content:focus{top:1.5rem}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ambient-spotlight{pointer-events:none;z-index:0;opacity:0;contain:paint;transform-origin:0 0;background:radial-gradient(600px circle at center, var(--spotlight-color), transparent 80%);width:1200px;height:1200px;transition:opacity .18s;position:fixed;top:0;left:0;transform:translate(-600px,-600px)}.ambient-spotlight.is-ready{opacity:1;will-change:transform}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.ambient-spotlight{display:none}}.portfolio-shell{width:100%;position:relative}.portfolio-container{min-height:100vh;max-width:var(--container-max);padding:3.5rem var(--gutter-x);margin-inline:auto}@media (width>=1024px){.portfolio-container{padding-top:var(--space-top-desktop);padding-bottom:var(--space-top-desktop)}}.split-layout{display:block}@media (width>=1024px){.split-layout{justify-content:space-between;align-items:flex-start;gap:clamp(3rem,5vw,5.5rem);display:flex}}.identity-rail{flex-direction:column;display:flex}@media (width>=1024px){.identity-rail{top:var(--space-top-desktop);max-height:calc(100vh - var(--space-top-desktop) * 2);scrollbar-width:none;flex-shrink:0;justify-content:space-between;width:42%;max-width:380px;padding-top:0;padding-bottom:0;position:sticky;overflow-y:auto}.identity-rail::-webkit-scrollbar{display:none}}.identity-name{letter-spacing:-.04em;color:var(--text-primary);margin:0;font-size:2.5rem;font-weight:700;line-height:1.1}@media (width>=640px){.identity-name{font-size:3rem}}.identity-title{letter-spacing:-.02em;color:var(--text-primary);margin-top:.75rem;font-size:1.125rem;font-weight:500}@media (width>=640px){.identity-title{font-size:1.25rem}}.identity-summary{max-width:22rem;color:var(--text-secondary);margin-top:1rem;font-size:.9375rem;line-height:1.6}.section-nav{display:none}@media (width>=1024px){.section-nav{margin-top:clamp(2.5rem,5vh,4rem);display:block}}.section-nav ul{width:max-content;list-style:none}.section-nav-link{color:var(--nav-inactive);align-items:center;padding-block:.75rem;text-decoration:none;transition:color .15s;display:flex}.section-nav-indicator{background-color:var(--nav-indicator);width:2rem;height:1px;margin-right:1rem;transition:width .2s,background-color .2s;display:inline-block}.section-nav-text{text-transform:uppercase;letter-spacing:.15em;color:var(--nav-inactive);font-size:.75rem;font-weight:700;transition:color .2s}.section-nav-link:hover .section-nav-indicator,.section-nav-link:focus-visible .section-nav-indicator,.section-nav-link.active .section-nav-indicator{background-color:var(--nav-active);width:4rem}.section-nav-link:hover .section-nav-text,.section-nav-link:focus-visible .section-nav-text,.section-nav-link.active .section-nav-text{color:var(--nav-active)}.rail-footer{margin-top:2rem}@media (width>=1024px){.rail-footer{margin-top:2.5rem}}.social-links{align-items:center;gap:1.25rem;margin-top:0;list-style:none;display:flex}.social-link{color:var(--text-secondary);justify-content:center;align-items:center;transition:color .15s,transform .15s;display:inline-flex}.social-link:hover{color:var(--text-primary);transform:translateY(-1px)}.social-link svg{width:1.25rem;height:1.25rem}.content-column{padding-top:3.5rem}@media (width>=1024px){.content-column{flex-grow:1;width:58%;padding-top:0;padding-bottom:0}}.content-section{margin-bottom:3.5rem;scroll-margin-top:4rem}.site-credit{max-width:32rem;color:var(--text-muted);padding-bottom:3.5rem;font-size:.875rem;line-height:1.65}.site-credit a{color:var(--text-secondary);font-weight:600;transition:color .15s}.site-credit a:hover{color:var(--accent)}@media (width>=768px){.content-section{margin-bottom:4rem}}@media (width>=1024px){.content-section{scroll-margin-top:var(--space-top-desktop);margin-bottom:clamp(3.5rem,6vh,5rem)}.site-credit{padding-bottom:clamp(3.5rem,6vh,5rem)}}.section-boundary{align-items:center;gap:1rem;margin-bottom:2rem;display:flex}.section-boundary-title{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.125em;color:var(--text-muted);flex-shrink:0;margin:0;font-size:.75rem;font-weight:600}.section-boundary-rule{background-color:var(--border-subtle);flex-grow:1;height:1px}@media (width>=1024px){.section-boundary.mobile-only{display:none}}.about-prose{color:var(--text-secondary);flex-direction:column;gap:1.25rem;font-size:1rem;line-height:1.7;display:flex}.about-prose p:first-child{margin-top:0}.about-prose p strong{color:var(--text-primary);font-weight:600}.about-prose a{color:var(--text-primary);text-decoration:underline;text-decoration-color:var(--border-medium);text-underline-offset:4px;font-weight:500;transition:color .15s,text-decoration-color .15s}.about-prose a:hover{color:var(--accent);text-decoration-color:var(--accent)}.interactive-list{list-style:none}.interactive-item{margin-bottom:2.25rem;position:relative}@media (width>=1024px){.interactive-item{margin-bottom:2rem}.interactive-list:hover .interactive-item,.interactive-list:has(:focus-visible) .interactive-item{opacity:.45;transition:opacity .2s}.interactive-list .interactive-item:hover,.interactive-list .interactive-item:has(:focus-visible){opacity:1!important}}.work-card{gap:1rem;padding-bottom:.25rem;display:grid;position:relative}@media (width>=640px){.work-card{grid-template-columns:repeat(8,minmax(0,1fr));gap:1.5rem}}@media (width>=768px){.work-card{gap:1rem}}.card-hover-plate{pointer-events:none;z-index:0;border-radius:.5rem;transition:background-color .2s,box-shadow .2s;display:none;position:absolute;inset:-1rem}@media (width>=1024px){.card-hover-plate{display:block;inset:-1rem -1.5rem}}.work-card:hover .card-hover-plate{background-color:var(--bg-surface);box-shadow:inset 0 1px 0 0 var(--border-subtle), 0 10px 15px -3px #0006}.work-visual{z-index:10}.experience-period{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);padding-top:.25rem;font-size:.75rem;font-weight:500;display:inline-block}.experience-period-mobile{display:none}@media (width>=640px){.work-visual{order:1;grid-column:span 2/span 2;transform:translateY(.25rem)}}.work-thumbnail{aspect-ratio:16/9;object-fit:cover;border:1px solid var(--border-medium);border-radius:.25rem;width:100%;transition:border-color .2s}.work-card:hover .work-thumbnail{border-color:#94a3b866}.work-content{z-index:10}@media (width>=640px){.work-content{order:2;grid-column:span 6/span 6}}.work-content.span-full{grid-column:span 8/span 8}.work-card-title{letter-spacing:-.02em;color:var(--text-primary);font-size:1rem;font-weight:600;line-height:1.35}.work-title-link{color:var(--text-primary);align-items:baseline;text-decoration:none;display:inline-flex}.work-title-link:hover{color:var(--accent)}@media (width>=1024px){.work-title-link:after{content:"";z-index:1;border-radius:.5rem;position:absolute;inset:-1rem -1.5rem}}.arrow-icon{flex-shrink:0;width:.95rem;height:.95rem;margin-left:.35rem;transition:transform .2s;display:inline-block;transform:translateY(1px)}.work-card:hover .arrow-icon,.archive-entry:hover .arrow-icon{transform:translate(3px,-3px)}@media (prefers-reduced-motion:reduce){.work-card:hover .arrow-icon,.archive-entry:hover .arrow-icon{transform:none}}.work-summary{color:var(--text-secondary);margin-top:.5rem;font-size:.875rem;line-height:1.55}.experience-header{align-items:flex-start;display:flex}.experience-role{letter-spacing:-.025em;color:var(--text-primary);font-size:1.0625rem;font-weight:650;line-height:1.3}.experience-affiliation{flex-wrap:wrap;align-items:center;gap:.3rem;margin-top:.2rem;font-size:.8125rem;line-height:1.45;display:flex}.experience-lab{color:var(--text-secondary);font-weight:550}.experience-institution{color:var(--text-muted)}.experience-card{cursor:default}@media (width<=639px){.content-column{padding-top:3rem}.content-section{margin-bottom:3.25rem}.section-boundary,.interactive-item{margin-bottom:1.75rem}.interactive-item:last-child{margin-bottom:0}.experience-card>.work-visual{display:none}.experience-header{justify-content:space-between;gap:1rem}.experience-period-mobile{text-align:right;flex-shrink:0;padding-top:.15rem;display:inline-block}}.experience-card .work-summary{max-width:58ch;margin-top:.875rem;line-height:1.6}.tag-list{z-index:2;flex-wrap:wrap;gap:.375rem;margin-top:.75rem;list-style:none;display:flex;position:relative}.tag-badge{background-color:var(--accent-surface);color:var(--accent);border-radius:9999px;align-items:center;padding:.25rem .75rem;font-size:.75rem;font-weight:500;line-height:1.25;display:inline-flex}.output-links{z-index:2;flex-wrap:wrap;align-items:center;margin-top:.875rem;font-size:.75rem;line-height:1.25rem;display:flex;position:relative}.output-links-unseparated{gap:1.25rem}.output-link{color:var(--text-secondary);align-items:center;gap:.3rem;font-weight:550;text-decoration:none;transition:color .15s;display:inline-flex}.output-link:hover{color:var(--accent)}.output-link svg{flex:0 0 .875rem;width:.875rem;height:.875rem}.output-separator{width:1.75rem;color:var(--text-muted);pointer-events:none;flex:0 0 1.75rem;justify-content:center;align-items:center;font-weight:400;line-height:1;display:inline-flex}.section-action-wrapper{margin-top:1.75rem}.action-link{color:var(--text-primary);align-items:center;gap:.35rem;font-size:.9375rem;font-weight:600;text-decoration:none;transition:color .15s;display:inline-flex}.action-link:hover{color:var(--accent)}.action-arrow{width:1rem;height:1rem;transition:transform .2s;display:inline-block}.action-link:hover .action-arrow{transform:translate(4px)}.project-archive-link{gap:.5rem;min-height:2.75rem;margin:-.25rem -.5rem;padding:.75rem .5rem;font-size:1rem}.project-archive-link .action-arrow{color:var(--accent)}.project-archive-link:focus-visible .action-arrow{transform:translate(4px)}.page-shell{width:100%;position:relative}.page-container{min-height:100vh;max-width:var(--container-max);padding:var(--space-top-desktop) var(--gutter-x) 6rem;margin-inline:auto}main#content:focus{outline:none}.content-measure-index{width:100%;max-width:var(--content-index,1000px);margin-inline:auto}.content-measure-technical{width:100%;max-width:var(--content-technical,880px);margin-inline:auto}.content-measure-reading{width:100%;max-width:var(--content-reading,720px);margin-inline:auto}.back-link{color:var(--accent);align-items:center;gap:.4rem;margin-bottom:1.75rem;font-size:.875rem;font-weight:600;text-decoration:none;transition:transform .15s;display:inline-flex}.back-link:hover{transform:translate(-4px)}.back-link svg{width:.95rem;height:.95rem}.breadcrumb-nav{margin-bottom:1.75rem}.breadcrumb-trail{align-items:center;gap:.5rem;margin:0;padding:0;font-size:.875rem;font-weight:500;line-height:1.25;list-style:none;display:inline-flex}.breadcrumb-item{align-items:center;display:inline-flex}.breadcrumb-link{color:var(--text-muted);border-radius:.125rem;text-decoration:none;transition:color .15s}.breadcrumb-item:last-child .breadcrumb-link{color:var(--text-secondary)}.breadcrumb-link:hover{color:var(--accent)}.breadcrumb-link:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.breadcrumb-separator{color:var(--text-muted);user-select:none;font-size:.8125rem}.page-header{margin-bottom:3rem}.page-title{letter-spacing:-.04em;color:var(--text-primary);margin:0 0 .75rem;font-size:clamp(2.25rem,4vw,3rem);font-weight:700;line-height:1.15}.page-lead{color:var(--text-secondary);max-width:44rem;margin:0;font-size:1.0625rem;line-height:1.6}.archive-list{flex-direction:column;list-style:none;display:flex}.archive-entry{border-top:1px solid var(--border-subtle);grid-template-columns:1fr;gap:.5rem;padding-block:2.25rem;transition:background-color .15s;display:grid}.archive-entry:last-child{border-bottom:1px solid var(--border-subtle)}@media (width>=640px){.archive-entry{grid-template-columns:80px minmax(0,1fr);gap:2rem}}@media (width>=1024px){.archive-entry{grid-template-columns:96px minmax(0,1fr);gap:2.5rem}}.archive-entry-year{font-family:var(--font-mono);color:var(--text-muted);padding-top:.25rem;font-size:.8125rem}.archive-entry-content{flex-direction:column;display:flex}.archive-entry-title{letter-spacing:-.025em;color:var(--text-primary);margin:0;font-size:1.25rem;font-weight:600;line-height:1.3}.archive-entry-title a{color:var(--text-primary);align-items:baseline;text-decoration:none;transition:color .15s;display:inline-flex}.archive-entry-title a:hover{color:var(--accent)}.archive-entry-summary{color:var(--text-secondary);max-width:48rem;margin-top:.5rem;margin-bottom:.875rem;font-size:.9375rem;line-height:1.6}.archive-entry-footer{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 1.5rem;margin-top:.875rem;display:flex}.archive-entry-actions{flex-shrink:0;align-items:center;gap:1.25rem;margin-left:auto;display:flex}@media (width<=639px){.archive-entry-actions{width:100%;margin-left:0}}.archive-action-link{color:var(--text-primary);align-items:center;gap:.25rem;font-size:.8125rem;font-weight:500;text-decoration:none;transition:color .15s;display:inline-flex}.archive-action-link:hover{color:var(--accent)}.archive-action-link svg{width:.875rem;height:.875rem}.detail-header{border-bottom:1px solid var(--border-subtle);margin-bottom:2.5rem;padding-bottom:2rem}.detail-meta-pill{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--accent);margin-bottom:.75rem;font-size:.75rem;display:inline-block}.detail-title{letter-spacing:-.04em;color:var(--text-primary);margin:0 0 1rem;font-size:2.25rem;font-weight:700;line-height:1.15}@media (width>=640px){.detail-title{font-size:2.75rem}}.detail-summary{color:var(--text-secondary);margin:0;font-size:1.125rem;line-height:1.6}.project-detail-title{margin-bottom:1.5rem}.project-detail-metadata{gap:.875rem;display:grid}.project-detail-facts{flex-wrap:wrap;align-items:center;gap:.75rem 1rem;display:flex}.project-detail-year{font-family:var(--font-mono);letter-spacing:.05em;color:var(--text-muted);font-size:.75rem;font-weight:500}.project-detail-actions .output-links{margin-top:0;font-size:.8125rem}.prose{color:var(--text-secondary);font-size:1rem;line-height:1.75}.prose h2{letter-spacing:-.03em;color:var(--text-primary);margin-top:2.5rem;margin-bottom:1rem;font-size:1.5rem;font-weight:700}.prose h3{color:var(--text-primary);margin-top:2rem;margin-bottom:.75rem;font-size:1.25rem;font-weight:600}.prose p{margin-bottom:1.5rem}.prose ul,.prose ol{margin-bottom:1.5rem;padding-left:1.5rem}.prose li{margin-bottom:.5rem}.prose a{color:var(--accent);text-underline-offset:4px;text-decoration:underline}.prose pre{border:1px solid var(--border-subtle);font-family:var(--font-mono);background-color:#0f172ae6;border-radius:.375rem;margin-block:1.5rem;padding:1.25rem;font-size:.875rem;overflow-x:auto}.prose code{font-family:var(--font-mono);color:var(--accent);background-color:#1e293b66;border-radius:.25rem;padding:.15rem .35rem;font-size:.875em}.prose pre code{color:inherit;background:0 0;padding:0}.prose figure{margin-block:2rem}.prose figure img{border:1px solid var(--border-subtle);border-radius:.375rem;width:100%}.prose figcaption{color:var(--text-muted);margin-top:.75rem;font-size:.875rem;line-height:1.5}.prose .project-stats{font-family:var(--font-mono);color:var(--text-muted);font-size:.8125rem}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}
