:root{--space-3xs:2px;--space-2xs:4px;--space-xs:8px;--space-sm:12px;--space-md:16px;--space-lg:24px;--space-xl:40px;--space-2xl:64px;--space-3xl:96px;--space-4xl:144px;--text-xs:.8125rem;--text-sm:.875rem;--text-md:1rem;--text-lg:1.25rem;--text-xl:1.5625rem;--text-2xl:1.953rem;--text-3xl:2.441rem;--text-display-s:clamp(2.25rem, 4vw + .5rem, 3.75rem);--text-display:clamp(2.75rem, 5vw + 1rem, 5.25rem);--text-section:clamp(2rem, 2.5vw + 1rem, 3.5rem);--text-title:clamp(1.25rem, .75vw + .875rem, 1.625rem);--text-lead:clamp(1.125rem, .35vw + 1rem, 1.375rem);--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in:cubic-bezier(.7, 0, .84, 0);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--dur-micro:.12s;--dur-short:.22s;--dur-long:.42s;--color-error:oklch(52% .19 27);--color-success:oklch(50% .12 150);--container:1440px;--gutter:64px;--gap-columns:32px;--section-gap-s:120px;--section-gap:144px;--section-gap-l:176px;--z-base:1;--z-raised:10;--z-dropdown:100;--z-sticky:200;--z-sticky-nav:300;--z-modal:400;--z-toast:500;--z-tooltip:600;--radius-card:4px;--radius-pill:999px;--rule-hair:1px;--shadow-card:none;--color-paper:oklch(97.5% .008 95);--color-paper-2:oklch(94.5% .012 95);--color-paper-3:oklch(91% .014 95);--color-ink:oklch(21% .014 160);--color-ink-2:oklch(33% .016 160);--color-muted:oklch(47% .012 160);--color-rule:oklch(86% .012 120);--color-sun:oklch(85% .17 85);--color-forest:oklch(39% .06 163);--color-violet:oklch(52% .2 285);--color-accent:var(--color-violet);--color-accent-ink:oklch(98% .01 285);--color-focus:oklch(50% .21 285);--color-scrim:oklch(97.5% .008 95/.86);--shadow-float:0 1px 2px oklch(20% .01 160/.05);--font-display:"Bricolage Grotesque", ui-sans-serif, system-ui, sans-serif;--font-body:"Geist", ui-sans-serif, system-ui, sans-serif;--display-weight:800;--tracking-display:-.035em;--nav-h:64px}*,:before,:after{box-sizing:border-box}html,body{overflow-x:clip}html{scrollbar-color:var(--color-muted) var(--color-paper);scroll-padding-top:var(--space-3xl)}body{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);font-size:var(--text-md);-webkit-font-smoothing:antialiased;caret-color:var(--color-accent);margin:0;line-height:1.55}::selection{background:color-mix(in oklab, var(--color-accent) 22%, transparent);color:var(--color-ink)}:focus-visible{outline:2px solid var(--color-focus);outline-offset:2px}a{color:inherit;text-underline-offset:.16em;text-decoration-thickness:1px}h1,h2,h3{font-family:var(--font-display);font-weight:var(--display-weight,700);font-synthesis:none;letter-spacing:var(--tracking-display);overflow-wrap:break-word;text-wrap:balance;min-width:0;margin:0;line-height:1.05}h1{max-width:20ch;font-size:var(--text-display)}h2{max-width:30ch;font-size:var(--text-section)}h3{max-width:40ch;font-size:var(--text-title);line-height:1.2}.lead{font-size:var(--text-lead);max-width:52ch;line-height:1.45}p{text-wrap:pretty;margin:0}p:not([class]){max-width:65ch}img,video{max-width:100%;height:auto;display:block}svg{display:block}[hidden]{display:none!important}button,input,select,textarea{font:inherit}.container{width:100%;max-width:var(--container);padding-inline:var(--gutter);box-sizing:border-box;margin-inline:auto}.num,.figure,td.num{font-variant-numeric:tabular-nums}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}[data-slot]{background:linear-gradient(160deg, var(--color-paper-2,var(--color-paper)), var(--color-paper-3,var(--color-paper)));position:relative;overflow:hidden}[data-slot]>img{object-fit:cover;z-index:1;width:100%;height:100%;position:absolute;inset:0}[data-slot]:has(>img)>:not(img):not([data-keep]){display:none!important}@media (width<=60rem){:root{--gutter:24px;--section-gap-s:80px;--section-gap:96px;--section-gap-l:120px}}@media (width<=40rem){:root{--gutter:16px;--section-gap-s:56px;--section-gap:72px;--section-gap-l:96px;--gap-columns:16px}}@media (prefers-reduced-motion:reduce){:not(.keep-motion),:not(.keep-motion):before,:not(.keep-motion):after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}#bg{z-index:-1;background:var(--color-paper);width:100%;height:100%;position:fixed;inset:0}html:not(.js) .bg-toggle{display:none}@media (prefers-reduced-motion:reduce){.bg-toggle{display:none}}.btn{min-height:48px;padding:0 var(--space-lg);border:1px solid var(--color-ink);border-radius:var(--radius-pill);background:var(--color-ink);color:var(--color-paper);font:600 var(--text-md)/1 var(--font-body);white-space:nowrap;cursor:pointer;transition:background-color var(--dur-short) var(--ease-out), border-color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);align-items:center;text-decoration:none;display:inline-flex}.btn:hover{background:var(--color-violet);border-color:var(--color-violet);color:var(--color-accent-ink)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.btn--quiet{background:var(--color-paper);color:var(--color-ink);border-color:var(--color-rule)}.btn--quiet:hover{background:var(--color-paper-2);border-color:var(--color-ink);color:var(--color-ink)}.btn--quiet:disabled:hover{background:var(--color-paper);border-color:var(--color-rule)}.link-btn{color:var(--color-ink);font:600 var(--text-sm)/1.4 var(--font-body);text-underline-offset:.2em;cursor:pointer;transition:color var(--dur-short) var(--ease-out);background:0 0;border:0;padding:0;text-decoration:underline}.link-btn:hover,a:hover{color:var(--color-violet)}.link-btn:active{transform:translateY(1px)}.skip{left:var(--space-md);top:calc(-1 * var(--space-3xl));z-index:var(--z-toast);padding:var(--space-xs) var(--space-md);background:var(--color-ink);color:var(--color-paper);position:absolute}.skip:focus-visible{top:var(--space-md)}.tags{gap:var(--space-2xs) var(--space-xs);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.tags li{padding:var(--space-3xs) var(--space-xs);border:1px solid var(--color-rule);border-radius:var(--radius-pill);color:var(--color-muted);font-size:var(--text-xs);line-height:1.5}.nav{z-index:var(--z-sticky-nav);height:var(--nav-h);background:var(--color-paper);border-bottom:1px solid var(--color-rule);position:fixed;inset:0 0 auto}.nav-inner{justify-content:space-between;align-items:center;gap:var(--space-lg);height:100%;display:flex}.wordmark{font:var(--display-weight) var(--text-lg)/1 var(--font-display);letter-spacing:-.02em;white-space:nowrap;text-decoration:none}.nav nav{align-items:center;gap:var(--space-2xs);display:flex}.nav nav a{padding:var(--space-xs) var(--space-sm);border-radius:var(--radius-pill);font-size:var(--text-sm);transition:background-color var(--dur-short) var(--ease-out);text-decoration:none}.nav nav a:hover{background:var(--color-paper-2);color:var(--color-ink)}.nav nav a.is-current{background:var(--color-sun)}.nav nav .nav-action{margin-left:var(--space-xs);border:1px solid var(--color-ink)}@media (width<=60rem){.nav nav a:not(.nav-action):not([href=\#path]):not([href=\#projects]){display:none}}@media (width<=26rem){.nav nav a[href=\#path]{display:none}}.hero{min-height:100svh;padding-block:calc(var(--nav-h) + var(--space-xl)) var(--space-3xl);align-items:center;display:grid}.hero-inner{text-align:center;align-items:center;gap:var(--space-lg);flex-direction:column;display:flex}.hero h1{width:fit-content;max-width:none;font-size:clamp(4rem,10vw,9rem);line-height:.92}.hero .lead{text-wrap:balance;width:fit-content;max-width:34ch}.actions{justify-content:center;gap:var(--space-sm);width:fit-content;margin-top:var(--space-xs);flex-wrap:wrap;display:flex}.about{padding-block:var(--section-gap-s) var(--section-gap)}.statement{width:fit-content;max-width:22ch;font-size:var(--text-display-s);line-height:1.04}.about-meta{margin-top:var(--space-2xl);gap:var(--gap-columns);grid-template-columns:minmax(0,8fr) minmax(0,4fr);align-items:start;display:grid}.facts{background:var(--color-paper);grid-template-columns:repeat(3,minmax(0,1fr));margin:0;display:grid}.facts>div{padding-inline:var(--space-lg);border-left:1px solid var(--color-rule)}.facts>div:first-child{border-left:0;padding-left:0}.facts dt{color:var(--color-muted);font-size:var(--text-sm)}.facts dd{margin:var(--space-2xs) 0 0;font-size:var(--text-lg);line-height:1.3}.traits{gap:var(--space-xs);background:var(--color-paper);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.traits li{padding:var(--space-2xs) var(--space-sm);border-radius:var(--radius-pill);background:var(--color-sun);font-size:var(--text-sm)}.stage{padding-block:var(--section-gap-s)}.stage .container{gap:var(--space-2xl) var(--gap-columns);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}.stage .container:before{content:"";border-top:1px solid var(--color-rule);margin-bottom:calc(-1 * var(--space-xl));grid-column:1/-1}.stage-head{gap:var(--gap-columns);grid-column:1/-1;grid-template-columns:minmax(0,6fr) minmax(0,6fr);align-items:end;display:grid}.stage-head h2{width:fit-content;max-width:14ch}.stage-n{color:var(--color-muted)}.stage .lead{background:var(--color-paper);width:fit-content;max-width:44ch}.stage--fablab .stage-n{color:var(--color-forest)}.stage--iut .stage-n,.stage--batconnect .stage-n{color:var(--color-violet)}.stats{background:var(--color-paper);grid-column:1/-1;grid-template-columns:repeat(auto-fit,minmax(0,1fr));display:grid}.stats>div{padding-inline:var(--space-lg);border-left:1px solid var(--color-rule)}.stats>div:first-child{border-left:0;padding-left:0}.stats b{font:var(--display-weight) var(--text-display)/1 var(--font-display);letter-spacing:var(--tracking-display);font-variant-numeric:tabular-nums;white-space:nowrap;display:block}.stats span{margin-top:var(--space-sm);max-width:32ch;color:var(--color-muted);font-size:var(--text-md);display:block}.stage--batconnect .stats b{font-size:var(--text-title);font-variant-numeric:tabular-nums}.stage--batconnect .stats span{margin-top:var(--space-2xs)}.stage-photo{grid-column:1/-1;margin:0}.stage-photo .frame{aspect-ratio:21/9;border-radius:min(1vw, var(--radius-card));min-height:360px}.stage-photo figcaption{margin-top:var(--space-sm);max-width:65ch;color:var(--color-muted);font-size:var(--text-sm);background:var(--color-paper);width:fit-content}.stage-rows{background:var(--color-paper);grid-column:1/-1;margin:0;padding:0;list-style:none}.stage-rows li{gap:var(--gap-columns);padding-block:var(--space-lg);border-top:1px solid var(--color-rule);grid-template-columns:minmax(0,5fr) minmax(0,4fr);align-items:baseline;display:grid}.stage-rows li:first-child{border-top:0;padding-top:0}.stage-rows p{color:var(--color-muted)}.hsection{height:100svh;padding:calc(var(--nav-h) + var(--space-lg)) 0 var(--space-md);background:var(--color-paper);--c0:var(--color-ink);--c1:var(--color-forest);--c2:var(--color-violet);--c3:var(--color-muted);flex-direction:column;display:flex;position:relative;overflow:clip}.hs-head{justify-content:space-between;align-items:baseline;gap:var(--space-lg);margin-bottom:var(--space-sm);flex-wrap:wrap;display:flex}.hs-head h2{font-size:var(--text-section)}.hs-progress{height:2px;margin-top:var(--space-sm);background:var(--color-rule)}.hs-progress span{background:var(--color-ink);transform-origin:0;height:100%;display:block;transform:scaleX(0)}html:not(.js) .hsection{height:auto}.tl-fallback{gap:var(--space-lg);margin:0;padding:0;list-style:none;display:grid}.tl-fallback ul{margin:var(--space-xs) 0 0;padding-left:var(--space-lg);color:var(--color-muted)}.tl-legend{gap:var(--space-md);font-size:var(--text-sm);flex-wrap:wrap;display:flex}.tl-legend span{align-items:center;gap:var(--space-xs);display:flex}.tl-legend span:before{content:"";border-radius:4px;width:18px;height:8px}.tl-legend [data-cat="1"]:before{background:var(--c1)}.tl-legend [data-cat="2"]:before{background:var(--c2)}.tl-legend [data-cat="3"]:before{background:var(--c3)}.tl-legend .lg-role:before{background:var(--color-ink)}.tl-legend .lg-proj:before{border:1.2px solid var(--color-ink);background:radial-gradient(circle, var(--color-ink) 1.1px, transparent 1.3px) 0 0 / 5px 5px}.tl-view{flex:1;min-height:0;position:relative;overflow:clip}.tl-view.native{overflow-x:auto}.tl-mover{position:absolute;top:0;left:0}.tl-track{transform:scale(var(--s,1));transform-origin:0 0;position:relative}.tl-svg{pointer-events:none;position:absolute;inset:0;overflow:visible}.tl-axis span{font-size:var(--text-sm);font-variant-numeric:tabular-nums;font-weight:600;position:absolute;top:0;transform:translate(-50%)}.tl-grid{stroke:var(--color-rule);stroke-width:1px}.tl-grid.faint{stroke-opacity:.6}.tl-grid.year,.tl-grid.axis{stroke:var(--color-muted)}.tl-today{stroke:var(--color-ink);stroke-width:1.5px;stroke-dasharray:4 5}.tl-now{padding:var(--space-3xs) var(--space-xs);background:var(--color-sun);font-size:var(--text-sm);white-space:nowrap;border-radius:3px;position:absolute;top:0;transform:translate(-50%)}.tl-g,.tl-g *{pointer-events:auto}.tl-bar{stroke-width:1.4px;transition:stroke-width var(--dur-short) var(--ease-out)}.c0 .tl-bar{stroke:var(--c0)}.c1 .tl-bar{stroke:var(--c1)}.c2 .tl-bar{stroke:var(--c2)}.c3 .tl-bar{stroke:var(--c3)}.c0 .tl-bar.role{fill:var(--c0)}.c1 .tl-bar.role{fill:var(--c1)}.c2 .tl-bar.role{fill:var(--c2)}.c3 .tl-bar.role{fill:var(--c3)}.dot.c0{fill:var(--c0)}.dot.c1{fill:var(--c1)}.dot.c2{fill:var(--c2)}.dot.c3{fill:var(--c3)}.tl-node{stroke:var(--color-paper);stroke-width:2.5px}.tl-node.c0{fill:var(--c0)}.tl-node.c1{fill:var(--c1)}.tl-node.c2{fill:var(--c2)}.tl-node.c3{fill:var(--c3)}.tl-stem{fill:none;stroke:var(--color-muted);stroke-opacity:.55;stroke-width:1.2px;transition:stroke-opacity var(--dur-short) var(--ease-out)}.tl-branch{fill:none;stroke-width:1.8px;stroke-dasharray:3 4}.tl-branch.c1{stroke:var(--c1)}.tl-branch.c2{stroke:var(--c2)}.tl-branch.c3{stroke:var(--c3)}.tl-dur{font-family:var(--font-body);fill:var(--color-muted);font-size:12px}.tl-g.hot .tl-stem{stroke:var(--color-ink);stroke-opacity:1}.tl-g.hot .tl-bar{stroke-width:2.6px}.tl-g.hot .tl-dur{fill:var(--color-ink)}.tl-card{z-index:var(--z-base);padding:var(--space-md) var(--space-lg) var(--space-lg);border:1px solid var(--color-rule);border-radius:var(--radius-card);background:var(--color-paper);transition:border-color var(--dur-short) var(--ease-out);position:absolute;top:0;left:0}.tl-card:hover,.tl-card.hot{border-color:var(--color-ink)}.tl-card.is-branch{border-top:2px solid var(--c1)}.tl-card.is-branch[data-cat="2"]{border-top-color:var(--c2)}.tl-card.is-branch[data-cat="3"]{border-top-color:var(--c3)}.tl-card.is-project{background:var(--color-paper-2);border-style:solid dashed dashed}.tl-card.is-step{border:1.5px solid var(--color-ink)}.tl-card.is-step h3{font-size:var(--text-section)}.tl-card.is-step .tl-inner{width:fit-content;max-width:100%}.tl-card.has-project{cursor:pointer}.tl-inner{gap:var(--space-xs);flex-direction:column;display:flex}.tl-meta{color:var(--color-muted);font-size:var(--text-sm)}.tl-card h3{font-size:var(--text-title);line-height:1.1}.tl-place{color:var(--color-muted)}.tl-more{font-weight:600;font-size:var(--text-sm);text-underline-offset:.2em;text-decoration:underline}.tl-card.has-project:hover .tl-more{color:var(--color-violet)}.projects{padding-block:var(--section-gap) var(--section-gap-s)}.projects-head{gap:var(--space-lg) var(--gap-columns);margin-bottom:var(--space-2xl);grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"title nav""filters filters";align-items:end;display:grid}.projects-head h2{grid-area:title;width:fit-content}.filters{gap:var(--space-xs);background:var(--color-paper);flex-wrap:wrap;grid-area:filters;width:fit-content;display:flex}.rail-nav{gap:var(--space-xs);grid-area:nav;display:flex}.chip{min-height:40px;padding:0 var(--space-md);border:1px solid var(--color-rule);border-radius:var(--radius-pill);background:var(--color-paper);color:var(--color-ink);font:400 var(--text-sm)/1 var(--font-body);cursor:pointer;transition:background-color var(--dur-short) var(--ease-out), border-color var(--dur-short) var(--ease-out)}.chip:hover{border-color:var(--color-ink)}.chip:active{transform:translateY(1px)}.chip[aria-pressed=true]{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-paper)}.rail{--rail-pad:max(var(--gutter), calc((100% - var(--container)) / 2 + var(--gutter)));gap:var(--gap-columns);padding:0 var(--rail-pad) var(--space-lg);scroll-snap-type:x mandatory;scroll-padding-inline:var(--rail-pad);overscroll-behavior-x:contain;cursor:grab;scrollbar-color:var(--color-ink) transparent;grid-auto-columns:minmax(18rem,27%);grid-auto-flow:column;margin:0;list-style:none;display:grid;overflow-x:auto}.rail:focus-visible{outline:2px solid var(--color-focus);outline-offset:4px}.rail.dragging{cursor:grabbing;scroll-snap-type:none}.rail.dragging .card{pointer-events:none}.card{scroll-snap-align:start;gap:var(--space-sm);padding:var(--space-xl);border-radius:var(--radius-card);background:var(--color-paper-2);cursor:pointer;transition:background-color var(--dur-short) var(--ease-out);flex-direction:column;display:flex}.card:hover{background:var(--color-paper-3)}.card[hidden]{display:none}.card-media{aspect-ratio:4/3;margin:calc(-1 * var(--space-xl)) calc(-1 * var(--space-xl)) var(--space-xs);border-radius:var(--radius-card) var(--radius-card) 0 0;overflow:hidden}.card-media img{object-fit:cover;width:100%;height:100%}.card-media img[src$=\.png]{object-fit:contain;padding:var(--space-sm);background:var(--color-paper)}.card-meta{justify-content:space-between;gap:var(--space-sm);color:var(--color-muted);font-size:var(--text-sm);display:flex}.card h3{font-size:var(--text-title)}.card>p:not([class]){color:var(--color-ink-2)}.card-actions{padding-top:var(--space-sm);gap:var(--space-md);font-size:var(--text-sm);flex-wrap:wrap;margin-top:auto;display:flex}.card-actions a{font-weight:600}.skills{padding-block:var(--section-gap-l) var(--section-gap)}.skills-inner{gap:var(--gap-columns);grid-template-columns:minmax(0,4fr) minmax(0,8fr);align-items:start;display:grid}.skills-inner h2{width:fit-content;max-width:10ch}.skill-rows{background:var(--color-paper)}.skill-row{gap:var(--gap-columns);padding-block:var(--space-lg);border-top:1px solid var(--color-rule);grid-template-columns:minmax(0,3fr) minmax(0,6fr);align-items:start;display:grid}.skill-row:first-child{border-top:0;padding-top:0}.skill-head{align-items:center;gap:var(--space-sm);display:flex}.skill-row h3{font-size:var(--text-title)}.skill-head>.icon{width:28px;height:28px;padding:var(--space-2xs);border-radius:var(--radius-card);background:var(--color-sun);color:var(--color-ink);flex-shrink:0}.icon{flex-shrink:0;width:18px;height:18px}.icon--line{stroke-width:2px}.skill-chips{gap:var(--space-xs);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.skill-chips li{align-items:center;gap:var(--space-xs);min-height:40px;padding:var(--space-2xs) var(--space-md) var(--space-2xs) var(--space-sm);border:1px solid var(--color-rule);border-radius:var(--radius-pill);background:var(--color-paper);font-size:var(--text-sm);transition:border-color var(--dur-short) var(--ease-out), background-color var(--dur-short) var(--ease-out), transform var(--dur-short) var(--ease-out);display:inline-flex}.skill-chips li:hover{border-color:var(--color-ink);background:var(--color-paper-2);transform:translateY(-2px)}.skill-chips li .icon{color:var(--color-violet)}.skill-row:first-child .skill-chips .icon,.skill-row:nth-child(4) .skill-chips .icon{color:var(--color-forest)}.lang-table ul{gap:var(--space-sm);margin:0;padding:0;list-style:none;display:grid}.lang-table li,.lang-scale{gap:var(--space-md);grid-template-columns:7rem minmax(0,1fr) 5.5rem;align-items:center;display:grid}.lang-scale{margin:0 0 var(--space-xs);color:var(--color-muted);font-size:var(--text-xs)}.lang-scale span:not(:first-child):not(:last-child){text-align:center}.lang-scale{column-gap:var(--space-2xs);grid-template-columns:7rem repeat(6,minmax(0,1fr)) 5.5rem}.lang-name{font-weight:600}.lang-level{color:var(--color-muted);font-size:var(--text-sm)}.meter{gap:var(--space-2xs);grid-template-columns:repeat(6,minmax(0,1fr));display:grid}.meter i{background:var(--color-paper-3);border-radius:3px;height:10px}.meter i.on{background:var(--color-ink)}.meter i.half{background:linear-gradient(90deg, var(--color-ink) 50%, var(--color-paper-3) 50%)}.js .skill-row[data-reveal] .skill-chips li,.js .skill-row[data-reveal] .meter i{opacity:0;transition:opacity var(--dur-long) var(--ease-out), transform var(--dur-long) var(--ease-out);transition-delay:calc(var(--i,0) * 40ms + var(--k,0) * 50ms);transform:translateY(6px)}.js .skill-row[data-reveal].is-in .skill-chips li,.js .skill-row[data-reveal].is-in .meter i{opacity:1;transform:none}.js .skill-row.is-in .skill-chips li:hover{transition-delay:0s;transform:translateY(-2px)}@media (prefers-reduced-motion:reduce){.js .skill-row[data-reveal] .skill-chips li,.js .skill-row[data-reveal] .meter i{opacity:1;transition:none;transform:none}}.close{padding-block:var(--section-gap-s) var(--space-2xl);background:var(--color-paper-2)}.close-inner{gap:var(--space-2xl) var(--gap-columns);grid-template-columns:minmax(0,7fr) minmax(0,5fr);align-items:end;display:grid}.close-letter,.close-side{gap:var(--space-lg);justify-items:start;display:grid}.close h2{font-size:var(--text-display)}.close-mail{font:var(--display-weight) var(--text-section)/1.05 var(--font-display);letter-spacing:var(--tracking-display);overflow-wrap:break-word;min-width:0}.close-mail a{-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;text-decoration-thickness:3px;-webkit-text-decoration-color:var(--color-sun);text-decoration-color:var(--color-sun);text-underline-offset:.12em}.contact-list{gap:var(--space-lg) var(--space-2xl);flex-wrap:wrap;margin:0;display:flex}.contact-list dt{color:var(--color-muted);font-size:var(--text-sm)}.contact-list dd{margin:var(--space-3xs) 0 0;font-size:var(--text-lg)}.signoff{font:var(--display-weight) var(--text-title)/1.2 var(--font-display)}.credits{color:var(--color-muted);font-size:var(--text-sm)}.modal{z-index:var(--z-modal);padding:var(--space-md);background:var(--color-scrim);place-items:center;display:grid;position:fixed;inset:0}.modal[hidden]{display:none}.modal-card{width:100%;max-width:44rem;max-height:90svh;padding:var(--space-xl);border:1px solid var(--color-ink);border-radius:var(--radius-card);background:var(--color-paper);gap:var(--space-md);box-shadow:var(--shadow-float);display:grid;position:relative;overflow:auto}#modal-body{gap:var(--space-md);display:grid}.modal-card h3{font-size:var(--text-section);padding-right:var(--space-3xl)}.modal-close{top:var(--space-md);right:var(--space-md);min-height:40px;padding:0 var(--space-md);border:1px solid var(--color-rule);border-radius:var(--radius-pill);background:var(--color-paper);color:var(--color-ink);font:400 var(--text-sm)/1 var(--font-body);cursor:pointer;transition:border-color var(--dur-short) var(--ease-out);position:absolute}.modal-close:hover{border-color:var(--color-ink)}.modal-close:active{transform:translateY(1px)}@media (width<=60rem){.about-meta,.skills-inner,.stage-head,.close-inner,.facts{grid-template-columns:minmax(0,1fr)}.facts>div{padding:var(--space-sm) 0;border-left:0;border-top:1px solid var(--color-rule)}.facts>div:first-child{border-top:0}.stage-rows li,.skill-row{gap:var(--space-md);grid-template-columns:minmax(0,1fr)}.lang-table li{grid-template-columns:5.5rem minmax(0,1fr) 4.5rem}.lang-scale{display:none}.stage-photo .frame{aspect-ratio:4/3;min-height:0}.projects-head{grid-template-columns:minmax(0,1fr);grid-template-areas:"title""filters""nav"}.rail{grid-auto-columns:minmax(16rem,82%)}}@media (width<=40rem){.stats{grid-template-columns:minmax(0,1fr)}.stats>div{padding:var(--space-md) 0;border-left:0;border-top:1px solid var(--color-rule)}.stats>div:first-child{border-top:0}}
