:root{--bg:#f6f0e6;--bg-alt:#ece2d2;--paper:#fcfaf5;--paper-strong:#f2eadc;--ink:#1f252c;--ink-soft:#5d645d;--edge:#493f3029;--edge-strong:#493f304d;--accent:#1d6b78;--accent-strong:#144952;--accent-soft:#1d6b781f;--accent-2:#8e6a2e;--accent-2-soft:#8e6a2e21;--chip-bg:#ece3d3;--chip-border:#5e4f313d;--chip-text:#615339;--selection-bg:#1d6b7838;--selection-ink:#16323a;--shadow-soft:0 18px 45px #281f1814;--shadow-strong:0 26px 60px #281f181f;--radius-xl:28px;--radius-lg:20px;--radius-md:14px;--radius-sm:10px;--reading-width:56rem;--header-offset:5.8rem}:root[data-theme=dark]{--bg:#312f2e;--bg-alt:#393837;--paper:#3f3d3c;--paper-strong:#484543;--ink:#f7dbc5;--ink-soft:#c6b1a0;--edge:#f7dbc524;--edge-strong:#f7dbc538;--accent:#ff9029;--accent-strong:#ffb15b;--accent-soft:#ff902929;--accent-2:#7fc0ad;--accent-2-soft:#7fc0ad29;--chip-bg:#464543;--chip-border:#f7dbc52e;--chip-text:#efd7c4;--selection-bg:#ff90293d;--selection-ink:#fff2ec;--shadow-soft:0 22px 55px #0f0c0a47;--shadow-strong:0 30px 80px #0f0c0a61;--portrait-hover-accent:#ffad5a;--portrait-hover-glow:#ff8f3033;--portrait-hover-shadow:#ff8f301f}*{box-sizing:border-box}html,body{margin:0;padding:0}html{scroll-behavior:smooth}body{min-height:100vh;color:var(--ink);background:var(--bg);color-scheme:light dark;text-rendering:optimizelegibility;font-family:Space Grotesk,Avenir Next,Segoe UI,sans-serif;font-size:1.04rem;line-height:1.68;position:relative}body:before{content:"";pointer-events:none;opacity:0;background:0 0;position:fixed;inset:0}img{max-width:100%;height:auto;display:block}a{color:var(--accent);text-underline-offset:.16em;text-decoration:none}a:hover{color:var(--accent-strong)}h1,h2,h3,h4{letter-spacing:-.03em;margin:0;line-height:1.08}h1{font-size:clamp(2.9rem,2.2rem + 3vw,5rem)}h2{font-size:clamp(1.45rem,1.2rem + 1vw,2.25rem)}h3{font-size:clamp(1.05rem,.95rem + .45vw,1.35rem)}p,ul,ol{margin:0}button,input{font:inherit}:focus-visible{outline:2px solid color-mix(in oklab, var(--accent) 72%, transparent);outline-offset:3px}:root{--portrait-hover-accent:color-mix(in oklab, var(--accent) 88%, white 12%);--portrait-hover-glow:color-mix(in oklab, var(--accent) 18%, transparent);--portrait-hover-shadow:color-mix(in oklab, var(--accent) 8%, transparent)}::selection{background:var(--selection-bg);color:var(--selection-ink)}::selection{background:var(--selection-bg);color:var(--selection-ink)}.shell{width:min(1180px,92vw);margin:0 auto}body:has(main.page-content--quarto) .site-header-inner,body:has(main.page-content--quarto) .site-footer-inner{width:min(1520px,92vw)}.skip-link{background:var(--paper);color:var(--ink);box-shadow:var(--shadow-soft);z-index:100;border-radius:999px;padding:.8rem 1rem;position:absolute;top:.5rem;left:1rem;transform:translateY(-200%)}.skip-link:focus-visible{transform:translateY(0)}.site-header{z-index:30;opacity:1;transition:transform .26s cubic-bezier(.22,1,.36,1),opacity .22s;position:fixed;inset:.75rem 0 auto;transform:translateY(0)}.site-header.is-hidden{opacity:.01;pointer-events:none;transform:translateY(calc(-100% - .85rem))}.site-header-inner{border:1px solid var(--edge);background:color-mix(in oklab, var(--paper) 84%, transparent);backdrop-filter:blur(12px);box-shadow:var(--shadow-soft);border-radius:999px;justify-content:space-between;align-items:center;gap:1rem;padding:.9rem 1.1rem;display:flex}.site-brand{min-width:0;color:inherit;align-items:center;gap:.8rem;display:flex}.site-brand img{filter:drop-shadow(0 8px 16px #00000014);border-radius:12px}.site-brand span{min-width:0;display:grid}.site-brand strong{font-size:.98rem;font-weight:700}.site-brand em{text-transform:uppercase;letter-spacing:.12em;color:var(--ink-soft);font-size:.72rem;font-style:normal}.header-actions{justify-content:flex-end;align-items:center;gap:.55rem;display:flex}.header-controls{align-items:center;gap:.45rem;display:flex}.nav-list,.social-list,.chip-list,.hero-proof,.cv-highlight-list{margin:0;padding:0;list-style:none}.nav-list{flex-wrap:wrap;gap:.25rem;display:flex}.nav-list a,.theme-toggle,.menu-toggle,.pill-toggle,.cv-filter-chip,.cv-contact-pill,.portrait-socials a,.social-list a{min-height:44px}.nav-list a{color:var(--ink-soft);border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;padding:.6rem .95rem;font-weight:600;transition:color .18s,border-color .18s,background-color .18s,transform .18s;display:inline-flex}.nav-list a:hover,.nav-list a:focus-visible{color:var(--ink);border-color:color-mix(in oklab, var(--accent) 34%, transparent);background:var(--accent-soft)}.nav-list a.is-active{color:var(--ink);background:color-mix(in oklab, var(--paper-strong) 84%, var(--accent-soft) 16%);border-color:var(--edge-strong)}.theme-toggle{appearance:none;border:1px solid var(--edge-strong);background:color-mix(in oklab, var(--paper) 92%, transparent);color:var(--ink-soft);cursor:pointer;border-radius:999px;align-items:center;gap:.45rem;padding:.6rem 1rem;font-weight:600;transition:border-color .18s,background-color .18s,color .18s,transform .18s;display:inline-flex}.theme-toggle:hover,.theme-toggle:focus-visible{color:var(--ink);border-color:color-mix(in oklab, var(--accent) 44%, transparent);background:var(--accent-soft)}.theme-toggle span{color:var(--ink)}.theme-toggle iconify-icon,.menu-toggle iconify-icon{font-size:.95rem}.menu-toggle{appearance:none;border:1px solid var(--edge-strong);background:color-mix(in oklab, var(--paper) 92%, transparent);color:var(--ink-soft);cursor:pointer;border-radius:999px;justify-content:center;align-items:center;gap:.45rem;padding:.6rem .9rem;font-weight:600;transition:border-color .18s,background-color .18s,color .18s,transform .18s;display:none}.menu-toggle:hover,.menu-toggle:focus-visible{color:var(--ink);border-color:color-mix(in oklab, var(--accent) 44%, transparent);background:var(--accent-soft)}.page-content{--page-rhythm:clamp(1.4rem, 1rem + 1vw, 2.2rem);gap:var(--page-rhythm);padding-top:calc(var(--page-rhythm) + var(--header-offset));padding-bottom:3rem;display:grid}.page-content.page-content--quarto{width:min(1520px,92vw)}.reveal-in{animation:.56s cubic-bezier(.22,1,.36,1) both rise-in}@keyframes rise-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.eyebrow,.section-kicker,.article-kicker,.status-dot,.timeline-card span,.meta-row,.editorial-entry-meta span,.cv-meta,.cv-timeplace{letter-spacing:.06em;font-family:IBM Plex Mono,Consolas,monospace;font-size:.78rem}.eyebrow,.section-kicker,.article-kicker{text-transform:uppercase;color:var(--accent)}.section-head{gap:.45rem;display:grid}.section-head p:last-child{max-width:clamp(62ch,78vw,76ch);color:var(--ink-soft)}.block,.hero-card,.portrait-panel,.article,.project-feature,.cv-hero{border:1px solid var(--edge);border-radius:var(--radius-xl);background:var(--paper);box-shadow:var(--shadow-soft)}.block,.hero-card,.portrait-panel,.article,.cv-hero{padding:clamp(1.2rem,.9rem + .9vw,1.8rem)}.block,.page-intro{gap:1rem;display:grid}.page-intro--split{grid-template-columns:minmax(0,1.4fr) minmax(18rem,.9fr);align-items:end}.page-intro-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:.8rem;display:grid}.page-intro-stats article{border-radius:var(--radius-md);border:1px solid var(--edge);background:color-mix(in oklab, var(--paper) 92%, var(--paper-strong) 8%);gap:.25rem;padding:.95rem 1rem;display:grid}.page-intro-stats span{color:var(--ink);font-size:clamp(1.1rem,.95rem + .7vw,1.8rem);line-height:1.1}.page-intro-stats p{color:var(--ink-soft)}.hero-grid{grid-template-columns:minmax(0,1.7fr) minmax(16rem,.75fr);align-items:start;gap:1.2rem;display:grid}.hero-stack{--hero-rhythm:.9rem;gap:var(--hero-rhythm);display:grid}.hero-card h1{font-size:clamp(2.35rem,1.95rem + 2vw,3.8rem)}.hero-note{color:var(--ink);max-width:clamp(58ch,76vw,70ch);font-weight:600}.hero-note-link{color:inherit;background:color-mix(in oklab, var(--accent-soft) 70%, transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab, var(--accent) 20%, transparent);text-decoration-color:color-mix(in oklab, var(--accent) 62%, transparent);text-underline-offset:.12em;border-radius:.45rem;align-items:center;margin-inline:.06rem;padding:.02rem .28rem;font-weight:700;text-decoration-thickness:.12em;transition:background-color .18s,box-shadow .18s,color .18s,text-decoration-color .18s;display:inline-flex}.hero-note-link:hover,.hero-note-link:focus-visible{color:var(--accent);background:color-mix(in oklab, var(--accent-soft) 96%, transparent);box-shadow:inset 0 0 0 1px color-mix(in oklab, var(--accent) 38%, transparent), 0 8px 18px color-mix(in oklab, var(--accent) 14%, transparent);text-decoration-color:currentColor}.hero-intro{max-width:52rem;color:var(--ink-soft);font-size:clamp(1.06rem,.98rem + .35vw,1.2rem)}.hero-actions{flex-wrap:wrap;gap:.7rem;display:flex}.cta-link,.inline-link{align-items:center;gap:.45rem;width:fit-content;min-height:44px;font-weight:700;transition:transform .18s,border-color .18s,background-color .18s,color .18s;display:inline-flex}.cta-link{border:1px solid var(--edge-strong);border-radius:999px;padding:.68rem 1rem}.cta-link.is-primary{background:linear-gradient(135deg, color-mix(in oklab, var(--accent) 20%, var(--paper-strong) 80%), color-mix(in oklab, var(--accent-2) 12%, var(--paper) 88%));color:var(--ink)}.cta-link.is-secondary{background:color-mix(in oklab, var(--paper) 96%, transparent);color:var(--ink)}.project-feature-actions{flex-wrap:wrap;gap:.7rem;display:flex}.cta-link--repo,.cta-link--site{gap:.55rem}.cta-link--repo iconify-icon,.cta-link--site iconify-icon{font-size:1.05rem;transition:transform .18s,color .18s}.cta-link:hover,.cta-link:focus-visible,.inline-link:hover,.inline-link:focus-visible{transform:translateY(-1px)}.cta-link:hover,.cta-link:focus-visible{border-color:color-mix(in oklab, var(--accent) 44%, transparent);background:color-mix(in oklab, var(--accent-soft) 42%, var(--paper) 58%);box-shadow:0 10px 22px color-mix(in oklab, var(--accent) 10%, transparent)}.cta-link--repo:hover iconify-icon,.cta-link--repo:focus-visible iconify-icon,.cta-link--site:hover iconify-icon,.cta-link--site:focus-visible iconify-icon{color:var(--accent);transform:translate(-1px)scale(1.04)}.inline-link{color:var(--accent)}.inline-link:after{content:"->";font-family:IBM Plex Mono,Consolas,monospace;font-size:.82rem}.hero-proof,.chip-list{flex-wrap:wrap;gap:.45rem;display:flex}.hero-proof li,.chip-list li{border:1px solid var(--chip-border);background:var(--chip-bg);color:var(--chip-text);border-radius:999px;padding:.35rem .68rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.76rem}.fact-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;display:grid}.fact-card{border-radius:var(--radius-md);border:1px solid var(--edge);background:var(--paper);align-content:start;gap:.55rem;padding:1rem .95rem;transition:border-color .18s,box-shadow .18s,background-color .18s;display:grid;position:relative;overflow:hidden}.fact-card:after{content:"";border-radius:inherit;border:2px solid color-mix(in oklab, var(--accent) 88%, white 12%);box-shadow:0 0 0 1px color-mix(in oklab, var(--accent) 52%, transparent), 0 0 18px color-mix(in oklab, var(--accent) 12%, transparent);opacity:0;pointer-events:none;transition:opacity .18s;position:absolute;inset:0}.fact-card:hover,.fact-card:focus-within{border-color:color-mix(in oklab, var(--accent) 28%, var(--edge));background:color-mix(in oklab, var(--paper) 90%, var(--paper-strong) 10%);box-shadow:0 10px 26px color-mix(in oklab, var(--accent) 8%, transparent), inset 0 1px 0 oklab(100% 0 5.96046e-8/.14)}.fact-card:hover:after,.fact-card:focus-within:after{opacity:1}.fact-card h2{letter-spacing:-.01em;font-family:IBM Plex Mono,Consolas,monospace;font-size:1rem;transition:color .18s}.fact-card h2:before{content:"> ";color:var(--accent)}.fact-card:hover h2,.fact-card:focus-within h2{color:color-mix(in oklab, var(--ink) 88%, var(--accent) 12%)}.fact-card p{color:var(--ink-soft);max-width:22ch;font-size:.94rem;line-height:1.5;transition:color .18s}.fact-card:hover p,.fact-card:focus-within p{color:color-mix(in oklab, var(--ink-soft) 82%, var(--ink) 18%)}.portrait-panel{text-align:center;box-shadow:none;background:0 0;border:0;align-content:start;justify-items:center;padding:0;display:grid}.portrait-stack{justify-items:center;gap:.8rem;width:min(100%,20rem);display:grid;position:relative}.portrait-image{border-radius:calc(var(--radius-xl) - 8px);isolation:isolate;width:clamp(220px,22vw,320px);max-width:100%;transition:box-shadow .18s;position:relative;overflow:hidden}.portrait-image:after{content:"";border-radius:inherit;border:2px solid var(--portrait-hover-accent);box-shadow:0 0 0 1px color-mix(in oklab, var(--portrait-hover-accent) 58%, transparent), 0 0 14px var(--portrait-hover-glow);opacity:0;pointer-events:none;transition:opacity .18s;position:absolute;inset:0}.portrait-base{aspect-ratio:1;object-fit:cover;object-position:center;border-radius:inherit;border:1px solid var(--edge);width:100%;box-shadow:var(--shadow-soft);transition:filter .24s,transform .24s}.portrait-panel:hover .portrait-base,.portrait-panel:focus-within .portrait-base{filter:none}.portrait-panel:hover .portrait-image,.portrait-panel:focus-within .portrait-image{box-shadow:0 0 0 1px color-mix(in oklab, var(--portrait-hover-accent) 24%, transparent), 0 0 18px var(--portrait-hover-glow), 0 16px 30px var(--portrait-hover-shadow)}.portrait-panel:hover .portrait-image:after,.portrait-panel:focus-within .portrait-image:after{opacity:1}.portrait-meta-cloud{border:1px solid var(--edge);background:var(--paper);width:100%;box-shadow:var(--shadow-soft);backdrop-filter:blur(12px);border-radius:1.5rem;justify-items:center;gap:.75rem;margin-top:0;padding:1.15rem 1rem .85rem;display:grid}.portrait-intro,.portrait-contact{color:var(--ink-soft)}.portrait-contact{word-break:break-word;font-size:.98rem;line-height:1.4}.portrait-contact a{color:var(--accent)}.portrait-socials,.social-list{flex-wrap:wrap;gap:.5rem;display:flex}.portrait-socials{justify-content:center;margin:0;padding:0;list-style:none}.portrait-socials a,.social-list a{filter:drop-shadow(0 0 #0000);border:1px solid var(--edge-strong);background:color-mix(in oklab, var(--paper) 94%, transparent);width:44px;height:44px;color:var(--ink);border-radius:999px;justify-content:center;align-items:center;transition:transform .18s,border-color .18s,background-color .18s,color .18s;display:inline-flex}.portrait-socials a:hover,.portrait-socials a:focus-visible,.social-list a:hover,.social-list a:focus-visible{border-color:color-mix(in oklab, var(--accent) 44%, transparent);background:color-mix(in oklab, var(--paper) 90%, transparent);transform:translateY(-1px)}.portrait-socials iconify-icon,.social-list iconify-icon{pointer-events:none;font-size:1rem}.portrait-socials a[href*=mailto\:]:hover,.portrait-socials a[href*=mailto\:]:focus-visible,.social-list a[href*=mailto\:]:hover,.social-list a[href*=mailto\:]:focus-visible{color:#bb001b;filter:drop-shadow(0 2px 6px #bb001b66);border-color:#bb001b}.portrait-socials a[href*=github\.com]:hover,.portrait-socials a[href*=github\.com]:focus-visible,.social-list a[href*=github\.com]:hover,.social-list a[href*=github\.com]:focus-visible{color:#333;filter:drop-shadow(0 2px 6px #3336);border-color:#333}.portrait-socials a[href*=gitlab\.com]:hover,.portrait-socials a[href*=gitlab\.com]:focus-visible,.social-list a[href*=gitlab\.com]:hover,.social-list a[href*=gitlab\.com]:focus-visible{color:#fc6d26;filter:drop-shadow(0 2px 6px #fc6d2666);border-color:#fc6d26}.portrait-socials a[href*=linkedin\.com]:hover,.portrait-socials a[href*=linkedin\.com]:focus-visible,.social-list a[href*=linkedin\.com]:hover,.social-list a[href*=linkedin\.com]:focus-visible{color:#0a66c2;filter:drop-shadow(0 2px 6px #0a66c266);border-color:#0a66c2}.portrait-socials a[href*=orcid\.org]:hover,.portrait-socials a[href*=orcid\.org]:focus-visible,.social-list a[href*=orcid\.org]:hover,.social-list a[href*=orcid\.org]:focus-visible{color:#a6ce39;filter:drop-shadow(0 2px 6px #a6ce3966);border-color:#a6ce39}.portrait-socials a[href*=letterboxd\.com]:hover,.portrait-socials a[href*=letterboxd\.com]:focus-visible,.social-list a[href*=letterboxd\.com]:hover,.social-list a[href*=letterboxd\.com]:focus-visible{color:#00d735;filter:drop-shadow(0 2px 6px #00d73566);border-color:#00d735}.split-layout{grid-template-columns:minmax(0,1.28fr) minmax(0,.92fr);gap:1rem;display:grid}.quick-paths-panel{padding-block:clamp(.78rem,.66rem + .32vw,.96rem)}.pathway-list{gap:.3rem;display:grid}.pathway-card{border-top:1px solid var(--edge);grid-template-columns:auto 1fr;align-items:start;gap:.8rem;padding:.75rem 0;display:grid}.pathway-card:first-child{border-top:0;padding-top:.1rem}.pathway-card h3{font-size:1.18rem}.pathway-card p{color:var(--ink-soft)}.pathway-icon{border:1px solid color-mix(in oklab, var(--accent) 18%, var(--edge));background:color-mix(in oklab, var(--accent-soft) 64%, transparent);width:2.05rem;height:2.05rem;color:var(--accent);border-radius:.72rem;justify-content:center;align-items:center;display:inline-flex;box-shadow:inset 0 1px oklab(100% 0 5.96046e-8/.12)}.pathway-icon iconify-icon{font-size:.84rem}.timeline{border-left:1px solid var(--edge-strong);gap:.68rem;margin:0;padding:0 0 0 .78rem;list-style:none;display:grid}.timeline>li{position:relative}.timeline>li:before{content:"";background:var(--paper);border:2px solid color-mix(in oklab, var(--accent) 72%, var(--paper) 28%);border-radius:999px;width:.66rem;height:.66rem;position:absolute;top:1.02rem;left:-1.06rem}.timeline-card{border-radius:var(--radius-md);border:1px solid var(--edge);background:color-mix(in oklab, var(--paper) 94%, var(--paper-strong) 6%);padding:.82rem .95rem}.timeline-card header{justify-content:space-between;gap:.8rem;margin-bottom:.35rem;display:flex}.timeline-card h3{font-size:1rem}.timeline-subtitle{color:var(--ink-soft);margin-top:.18rem;font-size:.88rem;line-height:1.35}.timeline-card header>span{color:var(--ink-soft)}.timeline-meta{color:var(--ink-soft);margin-bottom:.3rem;font-weight:600}.timeline-meta--institution{letter-spacing:normal;align-items:center;gap:.38rem;width:fit-content;font-family:inherit;display:inline-flex}.timeline-meta--institution iconify-icon{color:color-mix(in oklab, var(--accent) 72%, var(--ink-soft) 28%)}.timeline-meta--institution span{color:var(--ink-soft);letter-spacing:normal;text-transform:none;font-family:inherit;font-size:1rem}.timeline-card p:last-child{color:var(--ink-soft)}.pill-row{flex-wrap:wrap;gap:.55rem;display:flex}.pill-toggle{appearance:none;border:1px solid var(--edge);background:color-mix(in oklab, var(--paper) 92%, transparent);color:var(--ink-soft);cursor:pointer;border-radius:999px;padding:.6rem .95rem;font-weight:600;transition:border-color .18s,background-color .18s,color .18s}.pill-toggle:hover,.pill-toggle:focus-visible{border-color:color-mix(in oklab, var(--accent) 46%, transparent);color:var(--ink)}.pill-toggle.is-active{color:var(--ink);border-color:color-mix(in oklab, var(--accent) 52%, transparent);background:color-mix(in oklab, var(--paper-strong) 70%, var(--accent-soft) 30%)}.overview-panels{border-radius:var(--radius-lg);border:1px dashed color-mix(in oklab, var(--accent) 32%, var(--edge) 68%);background:color-mix(in oklab, var(--paper-strong) 50%, transparent);padding:1.1rem}.overview-panel{gap:.8rem;display:grid}.overview-panel[hidden]{display:none!important}.overview-panel p{color:var(--ink-soft)}.domain-panel .chip-list li{background:color-mix(in oklab, var(--accent-soft) 45%, var(--chip-bg) 55%)}.project-feature-media img,.editorial-entry-media img{object-fit:cover;border-radius:calc(var(--radius-xl) - 8px);border:1px solid var(--edge);width:100%;height:100%;min-height:18rem}.meta-row{color:var(--ink-soft);flex-wrap:wrap;gap:.5rem .9rem;display:flex}.editorial-feed{gap:1rem;display:grid}.editorial-entry{border:1px solid var(--edge);border-radius:var(--radius-xl);background:var(--paper);box-shadow:var(--shadow-soft);grid-template-columns:minmax(0,1fr) minmax(16rem,20rem);align-items:start;gap:1rem;padding:clamp(1rem,.9rem + .5vw,1.35rem);display:grid}.editorial-entry-media{justify-content:flex-end;align-items:center;min-width:0;display:flex}.editorial-entry-media img{min-height:unset;aspect-ratio:3/2;object-fit:cover;background:color-mix(in oklab, var(--paper-strong) 58%, transparent)}.editorial-entry-meta{gap:.25rem;display:grid}.editorial-entry-body{align-content:start;gap:.65rem;display:grid}.editorial-entry-body p{color:var(--ink-soft)}.project-rail{gap:.75rem;display:grid}.project-feature{border-radius:calc(var(--radius-xl) - 4px);grid-template-columns:minmax(12rem,15.5rem) minmax(0,1fr);align-items:start;gap:.65rem;padding:clamp(.68rem,.62rem + .24vw,.86rem);display:grid}.project-feature-media{width:100%;min-width:0}.project-feature-media img{object-fit:contain;border-radius:calc(var(--radius-lg) - 4px);width:100%;height:auto;min-height:0}.project-feature-body{align-content:start;gap:.55rem;display:grid}.project-feature-body h2{font-size:clamp(1.2rem,1.06rem + .55vw,1.65rem);line-height:1.08}.project-feature-body .chip-list{gap:.28rem}.project-feature-body .chip-list li{padding:.24rem .5rem;font-size:.68rem}.project-feature-body .cta-link{width:fit-content;min-height:36px;padding:.5rem .78rem}.project-feature-body .meta-row{gap:.55rem;font-size:.74rem}.project-feature-body>p:not(.meta-row){font-size:.95rem;line-height:1.48}.publication-year-grid{gap:1.4rem;display:grid}.publication-year-group{grid-template-columns:6.5rem minmax(0,1fr);align-items:start;gap:1rem;display:grid}.publication-year-label{position:sticky;top:7rem}.publication-year-label span{border:1px solid var(--edge);background:color-mix(in oklab, var(--paper-strong) 90%, transparent);min-width:5rem;color:var(--accent);border-radius:999px;justify-content:center;align-items:center;padding:.65rem .9rem;font-family:IBM Plex Mono,Consolas,monospace;font-weight:600;display:inline-flex}.publication-year-list{gap:.9rem;display:grid}.publication-record{border-left:3px solid color-mix(in oklab, var(--accent) 42%, transparent);border-radius:0 var(--radius-md) var(--radius-md) 0;background:color-mix(in oklab, var(--paper) 94%, var(--paper-strong) 6%);padding:1rem 1.1rem}.publication-record header{gap:.3rem;display:grid}.publication-authors{color:var(--ink-soft);margin-top:.6rem}.publication-authors strong{color:var(--ink);font-weight:700}.link-row{flex-wrap:wrap;gap:.55rem;margin-top:.75rem;display:flex}.link-row a{border:1px solid var(--edge);background:color-mix(in oklab, var(--paper) 92%, transparent);min-height:40px;color:var(--ink);border-radius:999px;align-items:center;gap:.5rem;padding:.5rem .8rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.76rem;transition:transform .18s,border-color .18s,background-color .18s;display:inline-flex}.link-row a:hover,.link-row a:focus-visible{border-color:color-mix(in oklab, var(--accent) 44%, transparent);background:var(--accent-soft);transform:translateY(-1px)}.publication-link iconify-icon{font-size:.95rem}.publication-link--journal:hover iconify-icon,.publication-link--journal:focus-visible iconify-icon{color:var(--accent)}.publication-link--pdf:hover iconify-icon,.publication-link--pdf:focus-visible iconify-icon{color:#b13a3a}.publication-link--code:hover iconify-icon,.publication-link--code:focus-visible iconify-icon{color:var(--ink)}.article{gap:1.3rem;min-width:0;display:grid}.comments-panel{width:100%;max-width:var(--reading-width);border:1px solid var(--edge);border-radius:var(--radius-xl);background:var(--paper);box-shadow:var(--shadow-soft);gap:.8rem;margin-inline:auto;padding:clamp(1rem,.92rem + .36vw,1.25rem);display:grid}.comments-panel-head{justify-items:start;gap:.2rem;display:grid}.comments-panel-head p{color:var(--ink-soft);margin:0}.comments-panel .giscus,.comments-panel iframe.giscus-frame{width:100%}.quarto-comments-shell{--quarto-prose-width:clamp(46.5rem, 49vw, 63rem);--quarto-margin-width:clamp(10rem, 12vw, 13rem);--quarto-toc-width:clamp(12rem, 14vw, 15rem);--quarto-column-gap:clamp(1.5rem, 2.4vw, 2.6rem);width:min(100%, calc(var(--quarto-prose-width) + var(--quarto-margin-width) + var(--quarto-column-gap)));grid-template-columns:minmax(0, var(--quarto-prose-width)) minmax(0, var(--quarto-margin-width));column-gap:var(--quarto-column-gap);margin-inline:auto;display:grid}.quarto-comments-shell>.comments-panel{grid-column:1/-1;width:100%;max-width:none}.article>*{width:100%;max-width:var(--reading-width)}.article-header{border-bottom:1px solid var(--edge);gap:.75rem;padding-bottom:1rem;display:grid}.article-header>p:last-of-type{color:var(--ink-soft);font-size:1.04rem}.article section{gap:.7rem;display:grid}.article p,.article li,.notebook-content p,.notebook-content li{color:var(--ink-soft);overflow-wrap:anywhere}.article a,.notebook-content a{overflow-wrap:anywhere}.article ol,.article ul,.notebook-content ol,.notebook-content ul{padding-left:1.2rem}.article img,.article figure,.notebook-content pre,.notebook-content table,.notebook-content img,.notebook-content figure{max-width:min(64rem,100%)}.article img,.notebook-content img{border-radius:var(--radius-md);border:1px solid var(--edge);box-shadow:var(--shadow-soft)}[data-lightbox-root] img.is-lightboxable{cursor:zoom-in;transition:transform .18s,box-shadow .18s,border-color .18s}[data-lightbox-root] img.is-lightboxable:hover,[data-lightbox-root] img.is-lightboxable:focus-visible{border-color:color-mix(in oklab, var(--accent) 34%, var(--edge));box-shadow:var(--shadow-strong);transform:translateY(-2px)}.notebook-article{gap:1.5rem}.quarto-post-layout{--quarto-prose-width:clamp(46.5rem, 49vw, 63rem);--quarto-code-width:clamp(46.5rem, 49vw, 63rem);--quarto-margin-width:clamp(10rem, 12vw, 13rem);--quarto-toc-width:clamp(12rem, 14vw, 15rem);--quarto-column-gap:clamp(1.5rem, 2.4vw, 2.6rem);--quarto-side-rail-width:calc(var(--quarto-margin-width) + var(--quarto-column-gap));--quarto-layout-width:calc(var(--quarto-prose-width) + var(--quarto-side-rail-width));gap:2.25rem;display:grid}.quarto-post-layout:has(.quarto-document:not(:has(#TOC,.column-margin,.margin-caption,.column-sidebar))){--quarto-side-rail-width:0px}.quarto-article{--reading-width:var(--quarto-layout-width);width:min(100%, var(--quarto-layout-width));max-width:var(--quarto-layout-width);box-shadow:none;background:0 0;border:0;border-radius:0;justify-self:center;padding:0}.quarto-article>*{max-width:none}.notebook-content{gap:1rem;min-width:0;display:grid;overflow-x:visible}.notebook-content>*{width:100%;max-width:var(--reading-width)}.notebook-content h2,.notebook-content h3,.notebook-content h4{margin-top:.8rem}.notebook-content h2{font-size:clamp(1.8rem,1.6rem + 1.5vw,2.8rem)}.notebook-content h3{font-size:clamp(1.4rem,1.25rem + 1vw,2rem)}.notebook-content h4{font-size:clamp(1.1rem,.95rem + .7vw,1.5rem)}.quarto-document{gap:1.35rem;width:100%;min-width:0;max-width:none}.quarto-document>#quarto-content{grid-template-columns:minmax(0,1fr);align-items:start;width:100%;max-width:none;margin-inline:auto;display:grid;position:relative;overflow:visible}.quarto-document #quarto-margin-sidebar{top:calc(var(--header-offset) + 1rem);margin-top:clamp(1.75rem,2.6vw,2.75rem);margin-right:calc(-1 * (var(--quarto-toc-width) + clamp(.5rem, .9vw, .95rem)));width:var(--quarto-toc-width);z-index:3;pointer-events:none;grid-area:1/1;place-self:start end;min-width:0;position:sticky}.quarto-document #quarto-document-content{grid-area:1/1;grid-template-columns:minmax(0, var(--quarto-prose-width)) minmax(0, var(--quarto-margin-width));align-items:start;column-gap:var(--quarto-column-gap);width:100%;min-width:0;max-width:none;display:grid}.quarto-document:not(:has(#TOC,.column-margin,.margin-caption,.column-sidebar)) #quarto-document-content,.quarto-document:not(:has(#TOC,.column-margin,.margin-caption,.column-sidebar)) #quarto-document-content .page-columns{grid-template-columns:minmax(0,1fr)}.quarto-document #quarto-document-content>*{grid-column:1}.quarto-document .screen-reader-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.quarto-document #quarto-document-content .page-columns{grid-template-columns:minmax(0, var(--quarto-prose-width)) minmax(0, var(--quarto-margin-width));align-items:start;column-gap:var(--quarto-column-gap);grid-column:1/-1;width:100%;display:grid}.quarto-document #quarto-document-content.page-columns>*,.quarto-document #quarto-document-content .page-columns>*{grid-column:1}.quarto-document #quarto-document-content>.column-margin,.quarto-document #quarto-document-content.page-columns>.column-margin,.quarto-document #quarto-document-content .page-columns>.column-margin,.quarto-document #quarto-document-content>.margin-caption,.quarto-document #quarto-document-content.page-columns>.margin-caption,.quarto-document #quarto-document-content .page-columns>.margin-caption,.quarto-document #quarto-document-content>.column-sidebar,.quarto-document #quarto-document-content.page-columns>.column-sidebar,.quarto-document #quarto-document-content .page-columns>.column-sidebar{grid-column:2;justify-self:stretch;width:100%;max-width:100%}.quarto-document .column-margin>*,.quarto-document .margin-caption>*{margin-top:0}.quarto-document #quarto-margin-sidebar>*{pointer-events:auto}.quarto-document #TOC{max-height:calc(100vh - var(--header-offset) - 1.25rem);border-left:1px solid var(--edge);color:var(--ink-soft);gap:.55rem;padding-left:.9rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.72rem;line-height:1.35;display:grid;position:static;overflow:hidden auto}.quarto-document #toc-title{color:var(--accent);letter-spacing:.08em;text-transform:uppercase;margin:0;font-size:.72rem;font-weight:500}.quarto-document #TOC ul{gap:.18rem;margin:0;padding-left:0;list-style:none;display:grid}.quarto-document #TOC ul ul{border-left:1px solid var(--edge);gap:.1rem;margin-top:.15rem;padding-left:.75rem}.quarto-document #TOC a{color:var(--ink-soft);padding:.16rem 0;text-decoration:none;display:block}.quarto-document #TOC a:hover,.quarto-document #TOC a:focus-visible,.quarto-document #TOC a.active{color:var(--accent)}.quarto-document #TOC .collapse{display:none}.quarto-document .quarto-sidebar-toggle{border:1px solid var(--edge);border-radius:var(--radius-sm);background:color-mix(in oklab, var(--paper) 95%, transparent);box-shadow:var(--shadow-soft);backdrop-filter:blur(10px);overflow:hidden}.quarto-document .quarto-sidebar-toggle-title{all:unset;box-sizing:border-box;cursor:pointer;width:100%;color:var(--accent);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;align-items:center;gap:.8rem;padding:.6rem .75rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.72rem;font-weight:500;display:flex}.quarto-document .quarto-sidebar-toggle-icon{border-bottom:1.5px solid;border-right:1.5px solid;flex-shrink:0;width:.72rem;height:.72rem;transition:transform .18s;transform:rotate(45deg)translateY(-1px)}.quarto-document .quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(225deg)translateY(1px)}.quarto-document .quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:1px solid var(--edge)}.quarto-document .quarto-sidebar-toggle-contents{background:color-mix(in oklab, var(--paper) 98%, transparent);padding-inline:.75rem;transition:height .22s,padding .22s;overflow:hidden}.quarto-document .quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0;padding-bottom:0}.quarto-document .quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:.75rem;padding-bottom:.75rem}.quarto-document .quarto-sidebar-toggle-contents ul{gap:.18rem;margin:0;padding-left:0;list-style:none;display:grid}.quarto-document .quarto-sidebar-toggle-contents ul ul{border-left:1px solid var(--edge);padding-left:.75rem}.quarto-document .quarto-sidebar-toggle-contents a{color:var(--ink-soft);padding:.16rem 0;font-family:IBM Plex Mono,Consolas,monospace;font-size:.72rem;line-height:1.35;text-decoration:none;display:block}.quarto-document .quarto-sidebar-toggle-contents a:hover,.quarto-document .quarto-sidebar-toggle-contents a:focus-visible,.quarto-document .quarto-sidebar-toggle-contents a.active{color:var(--accent)}.quarto-document>:first-child{margin-top:0}.quarto-document>*,.quarto-document section,.quarto-document .cell,.quarto-document .cell-output-display,.quarto-document .cell-output-stdout,.quarto-document .cell-output-stderr,.quarto-document .code-copy-outer-scaffold,.quarto-document .sourceCode,.quarto-document .columns,.quarto-document .column,.quarto-document figure,.quarto-document p,.quarto-document ul,.quarto-document ol,.quarto-document table{box-sizing:border-box;min-width:0;max-width:100%}.quarto-document>p,.quarto-document>ul,.quarto-document>ol,.quarto-document>table,.quarto-document>blockquote,.quarto-document>.callout,.quarto-document>section:not(.page-full),.quarto-document>.quarto-title-block,.quarto-document #quarto-document-content>p,.quarto-document #quarto-document-content>ul,.quarto-document #quarto-document-content>ol,.quarto-document #quarto-document-content>table,.quarto-document #quarto-document-content>blockquote,.quarto-document #quarto-document-content>.callout,.quarto-document #quarto-document-content>section:not(.page-full),.quarto-document #quarto-document-content>.quarto-title-block,.quarto-document .page-full>h2,.quarto-document .page-full>h3,.quarto-document .page-full>h4,.quarto-document .page-full>h5,.quarto-document .page-full>h6,.quarto-document .page-full>p,.quarto-document .page-full>ul,.quarto-document .page-full>ol,.quarto-document .page-full>table,.quarto-document .page-full>blockquote,.quarto-document .page-full>.callout,.quarto-document .page-full>details,.quarto-document .page-full>section:not(.page-full){width:100%;margin-inline:0}.quarto-document .quarto-title-block{border-bottom:1px solid var(--edge);gap:.9rem;padding-bottom:1rem;display:grid}.quarto-document .quarto-title h1,.quarto-document h1.title{font-size:clamp(2.3rem,2rem + 2vw,4rem)}.quarto-document .description,.quarto-document .quarto-title-meta,.quarto-document .cell-output-display,.quarto-document .cell-output-stdout,.quarto-document .cell-output-stderr{color:var(--ink-soft)}.quarto-document p+p,.quarto-document p+ul,.quarto-document p+ol,.quarto-document ul+p,.quarto-document ol+p,.quarto-document blockquote+p,.quarto-document p+blockquote{margin-top:1rem}.quarto-document>p+p{margin-top:0}.quarto-document .quarto-title-meta{flex-wrap:wrap;gap:.8rem 1.2rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.82rem;display:flex}.quarto-document .quarto-title-meta-contents p{flex-wrap:wrap;align-items:center;gap:.45rem;display:flex}.quarto-document .quarto-title-meta-heading{color:var(--accent);text-transform:uppercase;letter-spacing:.06em}.quarto-document .quarto-categories{flex-wrap:wrap;gap:.45rem;margin-top:1.4rem;margin-bottom:.9rem;display:flex}.quarto-document .quarto-category{border:1px solid var(--chip-border);background:var(--chip-bg);color:var(--chip-text);border-radius:999px;padding:.35rem .68rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.76rem}.quarto-document .columns{align-items:start}.quarto-document .cell{margin:1rem 0;gap:.7rem;width:100%;max-width:none;margin-inline:0;display:grid}.quarto-document .cell>*{grid-column:1}.quarto-document .cell.page-columns,.quarto-document .cell.page-full,.quarto-document .page-full,.quarto-document .column-body-outset,.quarto-document .column-page,.quarto-document .column-screen{grid-column:1/-1}.quarto-document .cell.page-columns,.quarto-document .cell.page-full{grid-template-columns:minmax(0, var(--quarto-prose-width)) minmax(0, var(--quarto-margin-width));column-gap:var(--quarto-column-gap);display:grid}.quarto-document .cell>.code-copy-outer-scaffold,.quarto-document .cell>.sourceCode,.quarto-document .cell>pre,.quarto-document .cell>.cell-output-stdout,.quarto-document .cell>.cell-output-stderr{width:min(100%, var(--quarto-code-width));max-width:var(--quarto-code-width);justify-self:start}.quarto-document .code-copy-button{color:var(--ink-soft);cursor:pointer;opacity:0;pointer-events:none;z-index:3;background:0 0;border:0;border-radius:0;justify-content:center;align-items:center;margin-top:5px;margin-right:5px;padding:.35rem;transition:opacity .14s,color .14s,transform .14s;display:inline-flex;position:absolute;top:1rem;right:.5rem}.quarto-document .sourceCode,.quarto-document pre{max-width:100%;overflow-x:auto}.quarto-document .sourceCode,.quarto-document pre,.quarto-document .cell-output-stdout,.quarto-document .cell-output-stderr{width:100%;margin-inline:0}.quarto-document .code-copy-outer-scaffold{width:100%;margin-inline:0;position:relative}.quarto-document .code-copy-outer-scaffold:hover .code-copy-button,.quarto-document .code-copy-outer-scaffold:focus-within .code-copy-button{opacity:1;pointer-events:auto}.quarto-document .code-copy-button:hover,.quarto-document .code-copy-button:focus-visible,.quarto-document .code-copy-button.code-copy-button-checked{color:var(--accent);transform:none}.quarto-document .code-copy-button .bi:before{font-size:1rem}.quarto-document pre{border:1px solid var(--edge);border-radius:var(--radius-md);background:color-mix(in oklab, var(--paper-strong) 72%, transparent);white-space:pre;width:100%;padding:1rem 1.05rem;box-shadow:inset 0 1px #ffffff26}.quarto-document code:not(pre code){background:color-mix(in oklab, var(--paper-strong) 82%, transparent);border-radius:.45rem;padding:.16rem .36rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.9em}.quarto-document .cell-output-display pre,.quarto-document .cell-output-stdout pre,.quarto-document .cell-output-stderr pre{background:color-mix(in oklab, var(--paper) 92%, transparent)}.quarto-document blockquote,.quarto-document .callout{border-left:3px solid color-mix(in oklab, var(--accent) 42%, transparent);border-radius:0 var(--radius-md) var(--radius-md) 0;background:color-mix(in oklab, var(--paper) 94%, var(--paper-strong) 6%);margin:1rem 0;padding:.9rem 1rem}.quarto-document .callout-header{align-items:center;gap:.5rem;display:flex}.quarto-document .callout-title-container{align-items:center;gap:.35rem;font-weight:600;display:flex}.quarto-document .citation a,.quarto-document a[role=doc-biblioref],.quarto-document a[role=doc-noteref],.quarto-document a[role=doc-backlink]{color:var(--accent);text-decoration:none}.tippy-box[data-theme~=quarto-citations]{border:1px solid var(--edge);border-radius:var(--radius-md);background:color-mix(in oklab, var(--paper) 92%, black 8%);max-width:min(28rem,100vw - 2rem);color:var(--ink);box-shadow:var(--shadow-strong)}.tippy-box[data-theme~=quarto-citations] .tippy-content{color:var(--ink-soft);padding:.7rem .8rem;font-size:.92rem;line-height:1.5}.tippy-box[data-theme~=quarto-citations] .csl-entry+.csl-entry{margin-top:.65rem}.quarto-document #quarto-appendix{grid-column:1;width:100%;margin-top:2rem}.quarto-document .quarto-appendix-heading{color:var(--ink);margin:0 0 .85rem;font-size:clamp(1.35rem,1.15rem + .6vw,1.75rem)}.quarto-document .references,.quarto-document .footnotes{width:100%;color:var(--ink-soft)}.quarto-document .csl-entry+.csl-entry{margin-top:.85rem}.quarto-document .footnotes ol{padding-left:1.2rem}.quarto-document table{border-collapse:collapse;border:1px solid var(--edge);background:0 0;border-radius:0;width:auto;min-width:min(100%,30rem);margin-inline:auto;overflow:hidden}.quarto-document th,.quarto-document td{border-bottom:1px solid var(--edge);text-align:left;padding:.65rem .8rem}.quarto-document th{color:var(--accent);background:color-mix(in oklab, var(--paper-strong) 72%, transparent);font-family:IBM Plex Mono,Consolas,monospace;font-size:.8rem}.quarto-document figure{width:100%;max-width:var(--quarto-figure-width);gap:.55rem;margin-inline:auto;display:grid}.quarto-document img,.quarto-document .figure-img{width:100%;max-width:100%;height:auto}.quarto-document .quarto-title-author-email,.quarto-document .quarto-title-author-orcid{width:1.05rem;height:1.05rem;color:var(--accent);justify-content:center;align-items:center;display:inline-flex}.quarto-document .quarto-title-author-email i{font-size:.95rem;line-height:1}.quarto-document .quarto-title-author-orcid img{width:1rem;max-width:none;height:1rem;box-shadow:none;border:0;border-radius:0;display:block}.quarto-document .cell-output-display,.quarto-document .cell-output-display.page-columns,.quarto-document .cell-output-display.page-full,.quarto-document figure.page-columns,.quarto-document figure.page-full,.quarto-document p.page-columns,.quarto-document p.page-full{width:100%;max-width:100%}.quarto-document #quarto-document-content .page-full,.quarto-document #quarto-document-content .column-page,.quarto-document #quarto-document-content .column-page-inset,.quarto-document #quarto-document-content .column-body-outset,.quarto-document #quarto-document-content .column-screen,.quarto-document #quarto-document-content .column-screen-inset{grid-column:1/-1}.quarto-document .figure-img.column-page-inset,.quarto-document img.column-page-inset{width:100%;max-width:100%;margin-inline:auto}.quarto-document .math.display{width:100%;padding:.25rem 0;display:block;overflow-x:auto}.quarto-document figcaption{color:var(--ink-soft);font-size:.92rem}.quarto-document .header-anchor{color:var(--ink-soft);opacity:.28;margin-left:.45rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.82em;transition:opacity .14s,color .14s}.quarto-document .anchored:hover .header-anchor,.quarto-document .anchored:focus-within .header-anchor,.quarto-document .anchored.reveal-anchor .header-anchor{opacity:1}.quarto-document .header-anchor:hover,.quarto-document .header-anchor:focus-visible{color:var(--accent)}.quarto-document .panel-tabset{width:min(100%, var(--quarto-prose-width));margin:1.25rem auto}.quarto-document .panel-tabset .nav-tabs{border-bottom:1px solid var(--edge);flex-wrap:wrap;gap:.45rem;margin:0 0 .9rem;padding:0 0 .35rem;list-style:none;display:flex}.quarto-document .panel-tabset .nav-item{margin:0}.quarto-document .panel-tabset .nav-link{border:1px solid var(--edge);background:color-mix(in oklab, var(--paper) 82%, transparent);color:var(--ink-soft);border-radius:999px;justify-content:center;align-items:center;padding:.45rem .8rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.82rem;text-decoration:none;display:inline-flex}.quarto-document .panel-tabset .nav-link:hover,.quarto-document .panel-tabset .nav-link:focus-visible{color:var(--accent);border-color:color-mix(in oklab, var(--accent) 42%, var(--edge))}.quarto-document .panel-tabset .nav-link.active{background:color-mix(in oklab, var(--accent-soft) 62%, var(--paper));color:var(--selection-ink);border-color:color-mix(in oklab, var(--accent) 48%, var(--edge))}.quarto-document .panel-tabset .tab-content>.tab-pane{display:none}.quarto-document .panel-tabset .tab-content>.active{display:block}.image-lightbox{border:1px solid color-mix(in oklab, var(--edge) 75%, transparent);border-radius:calc(var(--radius-xl) + .2rem);background:color-mix(in oklab, var(--paper) 86%, black 14%);width:min(94vw,90rem);max-width:94vw;margin:auto;padding:clamp(1rem,.9rem + .6vw,1.5rem);box-shadow:0 28px 100px #0a0a0a6b}.image-lightbox::backdrop{backdrop-filter:blur(6px);background:#0c0a08b8}.image-lightbox[open]{display:grid}.image-lightbox-close{border:1px solid var(--edge);background:color-mix(in oklab, var(--paper) 84%, transparent);width:2.8rem;height:2.8rem;color:var(--ink);cursor:pointer;border-radius:999px;justify-self:end}.image-lightbox-close:hover,.image-lightbox-close:focus-visible{border-color:color-mix(in oklab, var(--accent) 42%, var(--edge));color:var(--accent)}.image-lightbox-frame{gap:.8rem;margin:0;display:grid}.image-lightbox-frame img{object-fit:contain;border-radius:var(--radius-md);border:1px solid color-mix(in oklab, var(--edge) 72%, transparent);background:color-mix(in oklab, var(--paper-strong) 76%, transparent);width:100%;max-width:100%;max-height:calc(100vh - 10rem);box-shadow:none}.image-lightbox-frame figcaption{text-align:center;color:var(--ink-soft);font-size:.95rem}body.lightbox-open{overflow:hidden}.quarto-document .anchored{scroll-margin-top:calc(var(--header-offset) + 1.2rem)}:root[data-theme=dark] .quarto-document pre{background:color-mix(in oklab, var(--paper) 82%, black 18%);border-color:#f7dbc529;box-shadow:inset 0 1px #ffffff0a}:root[data-theme=dark] .quarto-document code:not(pre code){background:color-mix(in oklab, var(--paper-strong) 78%, black 22%);color:var(--ink)}:root[data-theme=dark] .quarto-document .cell-output-display pre,:root[data-theme=dark] .quarto-document .cell-output-stdout pre,:root[data-theme=dark] .quarto-document .cell-output-stderr pre{background:color-mix(in oklab, var(--paper) 88%, black 12%)}:root[data-theme=dark] .quarto-document .sourceCode code,:root[data-theme=dark] .quarto-document .sourceCode span{color:#f6dcc8}:root[data-theme=dark] .quarto-document .sourceCode .im,:root[data-theme=dark] .quarto-document .sourceCode .kw,:root[data-theme=dark] .quarto-document .sourceCode .cf{color:#ffb86c}:root[data-theme=dark] .quarto-document .sourceCode .fu,:root[data-theme=dark] .quarto-document .sourceCode .dt,:root[data-theme=dark] .quarto-document .sourceCode .bu{color:#8be9fd}:root[data-theme=dark] .quarto-document .sourceCode .dv,:root[data-theme=dark] .quarto-document .sourceCode .fl{color:#bd93f9}:root[data-theme=dark] .quarto-document .sourceCode .st,:root[data-theme=dark] .quarto-document .sourceCode .vs,:root[data-theme=dark] .quarto-document .sourceCode .ss{color:#a6e3a1}:root[data-theme=dark] .quarto-document .sourceCode .co,:root[data-theme=dark] .quarto-document .sourceCode .an{color:#9bb6b1}:root[data-theme=dark] .quarto-document .sourceCode .op,:root[data-theme=dark] .quarto-document .sourceCode .sc,:root[data-theme=dark] .quarto-document .sourceCode .pp{color:#f7c6a5}.notebook-content pre{border-radius:var(--radius-md);border:1px solid var(--edge);background:color-mix(in oklab, var(--paper-strong) 88%, transparent);padding:1rem 1.05rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.84rem;line-height:1.55;overflow-x:auto}.notebook-content p{font-size:1.1em}.notebook-content code{font-family:IBM Plex Mono,Consolas,monospace;font-size:1em}.notebook-content blockquote{border-left:3px solid color-mix(in oklab, var(--accent) 46%, transparent);background:var(--accent-soft);border-radius:0 var(--radius-sm) var(--radius-sm) 0;margin:0;padding:.8rem 1rem}.notebook-content table{border-collapse:collapse;border-radius:var(--radius-md);width:100%;font-size:.92rem;display:block;overflow-x:auto}.notebook-content th,.notebook-content td{border:1px solid var(--edge);padding:.55rem .7rem}.notebook-content th{background:color-mix(in oklab, var(--paper-strong) 90%, transparent);color:var(--ink)}.notebook-content.quarto-document table{border-radius:0;width:auto;min-width:min(100%,30rem);display:table;overflow:hidden}.notebook-content.quarto-document th,.notebook-content.quarto-document td{border:none;border-bottom:1px solid var(--edge);text-align:left;padding:.65rem .8rem}.notebook-content.quarto-document th{color:var(--accent);background:color-mix(in oklab, var(--paper-strong) 72%, transparent);font-family:IBM Plex Mono,Consolas,monospace;font-size:.8rem}.notebook-content figure{gap:.5rem;display:grid}.notebook-content figcaption{color:var(--ink-soft);font-size:.88rem}.cv-hero{grid-template-columns:minmax(0,1fr);align-items:start;gap:0;display:grid}.cv-hero-main{gap:.8rem;min-width:0;display:grid}.cv-hero h1{white-space:nowrap;max-width:none;font-size:clamp(2.5rem,2.2rem + 2.1vw,4rem);line-height:.98}.cv-title{color:var(--accent);letter-spacing:-.02em;max-width:none;font-size:clamp(.96rem,.9rem + .32vw,1.14rem);font-weight:700}.cv-summary-lead{max-width:min(80ch,100%);color:var(--ink-soft);font-size:clamp(1rem,.97rem + .22vw,1.12rem);line-height:1.62}.cv-highlight-list{flex-wrap:wrap;gap:.5rem;margin-top:.9rem;display:flex}.cv-highlight-list li{border:1px solid var(--edge);background:color-mix(in oklab, var(--paper-strong) 86%, transparent);border-radius:14px;gap:.15rem;padding:.6rem .8rem;display:grid}.cv-highlight-list span{text-transform:uppercase;color:var(--ink-soft);font-family:IBM Plex Mono,Consolas,monospace;font-size:.72rem}.cv-highlight-list strong{font-size:.95rem}.cv-meta{color:var(--ink-soft);align-items:center;gap:.35rem;margin-top:.15rem;font-size:.98rem;display:inline-flex}.cv-meta iconify-icon,.cv-location iconify-icon,.cv-org iconify-icon{color:var(--accent)}.cv-meta-links{flex-wrap:wrap;gap:.5rem;margin-top:.15rem;display:flex}.cv-contact-pill{--cv-pill-accent:var(--accent);border:1px solid color-mix(in oklab, var(--edge-strong) 82%, var(--cv-pill-accent) 18%);background:color-mix(in oklab, var(--paper) 94%, var(--paper-strong) 6%);width:fit-content;max-width:100%;min-height:2.55rem;color:color-mix(in oklab, var(--ink-soft) 78%, var(--ink) 22%);white-space:nowrap;border-radius:999px;align-items:center;gap:.45rem;padding:.52rem .8rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.74rem;transition:transform .18s,border-color .18s,background-color .18s,box-shadow .18s,color .18s;display:inline-flex;box-shadow:inset 0 1px oklab(100% 0 5.96046e-8/.1)}.cv-contact-pill span{overflow-wrap:anywhere}.cv-contact-pill:hover,.cv-contact-pill:focus-visible{border-color:color-mix(in oklab, var(--cv-pill-accent) 52%, var(--edge-strong) 48%);background:color-mix(in oklab, var(--cv-pill-accent) 12%, var(--paper) 88%);color:color-mix(in oklab, var(--cv-pill-accent) 58%, var(--ink) 42%);box-shadow:0 10px 24px color-mix(in oklab, var(--cv-pill-accent) 10%, transparent), 0 0 0 1px color-mix(in oklab, var(--cv-pill-accent) 14%, transparent), inset 0 1px 0 oklab(100% 0 5.96046e-8/.12);transform:translateY(-1px)}.cv-contact-pill iconify-icon{color:color-mix(in oklab, var(--cv-pill-accent) 44%, var(--ink-soft) 56%);flex-shrink:0;font-size:.86rem}.cv-contact-pill.is-email,.cv-contact-pill.is-phone{--cv-pill-accent:var(--accent)}.cv-contact-pill.is-linkedin{--cv-pill-accent:#0a66c2}.cv-contact-pill.is-github{--cv-pill-accent:#333}.cv-contact-pill.is-gitlab{--cv-pill-accent:#fc6d26}.cv-contact-pill.is-orcid{--cv-pill-accent:#a6ce39}.cv-contact-pill.is-pdf{--cv-pill-accent:#c0392b}.cv-skill-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:.85rem;display:grid}.cv-skill-card{align-content:start;gap:.9rem;padding:1rem;display:grid}.cv-skill-card h3{color:var(--ink);letter-spacing:-.02em;align-items:center;gap:.5rem;font-weight:700;display:inline-flex}.cv-skill-card h3 iconify-icon{color:var(--accent)}.cv-skill-card p{color:var(--ink-soft);line-height:1.55}.cv-experience-list,.cv-education-list,.cv-languages-list{gap:.7rem;display:grid}.cv-row-surface{border-radius:var(--radius-md);border:1px solid var(--edge);background:color-mix(in oklab, var(--paper-strong) 84%, transparent);transition:border-color .18s,box-shadow .18s,background-color .18s;position:relative;overflow:hidden}.cv-row-surface:after{content:"";border-radius:inherit;border:2px solid color-mix(in oklab, var(--accent) 88%, white 12%);box-shadow:0 0 0 1px color-mix(in oklab, var(--accent) 52%, transparent), 0 0 18px color-mix(in oklab, var(--accent) 12%, transparent);opacity:0;pointer-events:none;transition:opacity .18s;position:absolute;inset:0}.cv-row-surface:hover{border-color:color-mix(in oklab, var(--accent) 28%, var(--edge));background:color-mix(in oklab, var(--paper-strong) 90%, transparent);box-shadow:0 10px 26px color-mix(in oklab, var(--accent) 8%, transparent), inset 0 1px 0 oklab(100% 0 5.96046e-8/.14)}.cv-row-surface:hover:after{opacity:1}.cv-disclosure{background:0 0;border:0;border-radius:0}.cv-disclosure summary{list-style:none}.cv-disclosure summary::-webkit-details-marker{display:none}.cv-disclosure summary:focus-visible{outline:2px solid color-mix(in oklab, var(--accent) 60%, transparent);outline-offset:-2px}.cv-disclosure-toggle{cursor:pointer;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:.85rem;padding:1rem 1rem .95rem;display:grid}.cv-disclosure-heading{gap:.35rem;min-width:0;display:grid}.cv-disclosure-heading--experience{gap:.55rem}.cv-disclosure-title-row{min-width:0;color:var(--ink);letter-spacing:-.02em;align-items:center;gap:.5rem;font-weight:700;display:inline-flex}.cv-disclosure-title-row iconify-icon{color:var(--accent);transition:transform .18s,color .18s}.cv-disclosure-title-row--stacked{gap:.28rem;display:grid}.cv-disclosure-title{font-size:clamp(1rem,.98rem + .1vw,1.08rem);line-height:1.2;transition:color .18s}.cv-disclosure-preview{color:var(--ink-soft);max-height:4.5rem;line-height:1.55;transition:color .18s,opacity .18s,max-height .22s;overflow:hidden}.cv-disclosure-action{color:var(--ink-soft);text-transform:uppercase;letter-spacing:.08em;align-items:center;gap:.48rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.68rem;display:inline-flex}.cv-disclosure-aside{align-content:start;justify-items:end;gap:.35rem;display:grid}.cv-disclosure-aside--experience{gap:.55rem}.cv-disclosure-state--open,.cv-disclosure[open] .cv-disclosure-state--closed{display:none}.cv-disclosure[open] .cv-disclosure-state--open{display:inline}.cv-disclosure-action:before{content:"";transform-origin:50%;border-bottom:1.5px solid;border-right:1.5px solid;width:.66rem;height:.66rem;transition:transform .22s,color .22s;transform:rotate(45deg)translateY(-2px)}.cv-disclosure[open] .cv-disclosure-action:before{transform:rotate(225deg)translateY(0)}.cv-disclosure-panel{grid-template-rows:0fr;transition:grid-template-rows .26s;display:grid}.cv-disclosure[open] .cv-disclosure-panel{grid-template-rows:1fr}.cv-disclosure-panel-inner{border-top:1px solid color-mix(in oklab, var(--edge) 82%, transparent);gap:.75rem;padding:0 1rem 1rem;display:grid;overflow:hidden}.cv-disclosure-panel-inner p{color:var(--ink-soft)}.cv-row-surface:hover .cv-disclosure-title,.cv-row-surface:hover h4{color:color-mix(in oklab, var(--ink) 88%, var(--accent) 12%)}.cv-row-surface:hover .cv-disclosure-preview{color:color-mix(in oklab, var(--ink-soft) 82%, var(--ink) 18%)}.cv-row-surface:hover .cv-disclosure-title-row iconify-icon{color:color-mix(in oklab, var(--accent) 86%, white 14%);transform:translate(1px)}.cv-controls{gap:.8rem;display:grid}.cv-controls-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 1rem;display:flex}.cv-search{flex:20rem;gap:.35rem;display:grid}.cv-search input{border-radius:var(--radius-sm);border:1px solid var(--edge-strong);background:color-mix(in oklab, var(--paper) 96%, transparent);width:min(30rem,100%);min-height:48px;color:var(--ink);padding:.7rem .85rem}.cv-filter-panel{min-width:min(100%,16rem)}.cv-filter-panel summary{list-style:none}.cv-filter-panel summary::-webkit-details-marker{display:none}.cv-filter-summary{border:1px solid var(--edge);background:color-mix(in oklab, var(--paper) 94%, transparent);min-height:2.7rem;color:var(--ink);cursor:pointer;border-radius:999px;align-items:center;gap:.7rem;padding:.55rem .85rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.75rem;display:inline-flex}.cv-filter-count{color:var(--ink-soft)}.cv-filter-panel-body{padding-top:.8rem}.cv-filter-group{flex-wrap:wrap;gap:.45rem;max-width:100%;display:flex}.cv-filter-chip{appearance:none;border:1px solid var(--edge);background:color-mix(in oklab, var(--paper) 92%, transparent);color:var(--ink-soft);cursor:pointer;border-radius:999px;padding:.55rem .8rem;font-family:IBM Plex Mono,Consolas,monospace;font-size:.78rem;transition:border-color .18s,background-color .18s,color .18s,transform .18s}.cv-filter-chip:hover,.cv-filter-chip:focus-visible{border-color:color-mix(in oklab, var(--accent) 42%, transparent);transform:translateY(-1px)}.cv-filter-chip.is-active{color:var(--ink);border-color:color-mix(in oklab, var(--accent) 48%, transparent);background:color-mix(in oklab, var(--paper-strong) 72%, var(--accent-soft) 28%)}.cv-filter-chip.is-clear{border-style:dashed}.cv-result{color:var(--ink-soft);white-space:nowrap;font-family:IBM Plex Mono,Consolas,monospace;font-size:.78rem}.cv-detail-grid{grid-template-columns:minmax(0,1.45fr) minmax(0,.85fr);gap:1.1rem;display:grid}.cv-detail-column{gap:.75rem;display:grid}.cv-languages-panel{align-content:center}.cv-subsection-heading{text-transform:uppercase;letter-spacing:.08em;color:var(--accent);font-family:IBM Plex Mono,Consolas,monospace;font-size:.78rem}.cv-experience-entry[hidden]{display:none!important}.cv-education-row,.cv-language-row{padding:1rem}.cv-education-row header{justify-content:space-between;gap:.8rem;display:flex}.cv-education-row h4,.cv-language-row h4{letter-spacing:-.01em;font-size:1rem;line-height:1.2;transition:color .18s}.cv-experience-disclosure .cv-disclosure-toggle{align-items:start}.cv-org{width:fit-content;color:var(--accent);align-items:center;gap:.35rem;font-weight:600;display:inline-flex}.cv-timeplace{text-align:right;color:var(--ink-soft);justify-items:end;gap:.18rem;display:grid}.cv-location{align-items:center;gap:.3rem;display:inline-flex}.cv-summary{color:var(--ink-soft)}.cv-experience-panel{gap:.9rem;max-width:82ch}.cv-experience-panel ul,.cv-education-row ul{color:var(--ink-soft);gap:.28rem;padding-left:1.15rem;display:grid}.cv-tag-list{flex-wrap:wrap;gap:.35rem;padding-left:0!important;display:flex!important}.cv-tag-list li{list-style:none}.cv-tag-list--muted li{border-style:dashed;border-color:color-mix(in oklab, var(--edge-strong) 88%, var(--accent) 12%);background:color-mix(in oklab, var(--paper) 96%, transparent)}.cv-language-row{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.cv-language-row p{color:var(--accent);text-align:right;font-weight:600}.cv-language-row span{color:var(--ink-soft);font-size:.88rem}.site-footer{margin-top:.2rem;padding-bottom:2rem}.site-footer-inner{border-top:1px solid var(--edge);justify-content:space-between;align-items:flex-end;gap:1.25rem;padding-top:1.2rem;display:flex}.footer-identity{gap:.35rem;max-width:40rem;display:grid}.footer-kicker{text-transform:uppercase;letter-spacing:.08em;color:var(--accent);font-family:IBM Plex Mono,Consolas,monospace;font-size:.78rem}.footer-identity p:last-of-type{color:var(--ink-soft)}.footer-links{flex-wrap:wrap;gap:.9rem;display:flex}.footer-links a{color:var(--ink);align-items:center;gap:.45rem;font-weight:600;display:inline-flex}.footer-links iconify-icon{color:var(--ink-soft);font-size:.95rem}.footer-links a:hover iconify-icon,.footer-links a:focus-visible iconify-icon{color:var(--accent)}@media (width<=1240px){.quarto-article{width:100%;max-width:none}.quarto-post-layout{gap:1.75rem}.quarto-document>#quarto-content,.quarto-document #quarto-document-content.page-columns,.quarto-document #quarto-document-content .page-columns{width:100%;display:block}.quarto-document #quarto-margin-sidebar{display:none}.quarto-comments-shell{width:100%;display:block}.quarto-comments-shell>.comments-panel{grid-column:auto}}@media (width<=1080px){.hero-grid,.split-layout,.page-intro--split,.cv-hero,.cv-detail-grid,.publication-year-group{grid-template-columns:1fr}.publication-year-label{position:static}.cv-hero h1{white-space:normal}.portrait-panel{justify-items:center}.portrait-stack{width:min(100%,22rem);margin-inline:auto}.site-brand em{display:none}.site-header-inner{gap:.85rem;padding:.85rem 1rem}.header-controls{gap:.35rem}.theme-toggle{padding:.6rem .8rem}.theme-toggle-prefix{display:none}.nav-list{gap:.2rem}.nav-list a{padding:.55rem .8rem}.project-feature{grid-template-columns:minmax(10.5rem,13rem) minmax(0,1fr)}}@media (width<=980px){:root{--header-offset:0px}.site-footer-inner,.editorial-entry{grid-template-columns:1fr}.site-footer-inner{border-radius:var(--radius-xl);display:grid}.site-header{opacity:1;pointer-events:auto;margin-top:.75rem;transition:none;position:static;inset:auto;transform:none}.site-header-inner{border-radius:var(--radius-xl);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.85rem;padding:.75rem .9rem;display:grid}.site-brand{gap:.65rem}.site-brand img{width:52px;height:52px}.site-brand em{display:none}.site-brand strong{font-size:.92rem;line-height:1.1}.header-controls{justify-self:end}.theme-toggle{min-width:44px;padding:.6rem}.menu-toggle{display:inline-flex}.header-actions{grid-column:1/-1;width:100%;padding-top:.2rem;display:none}.header-actions.is-open{display:grid}.header-actions nav{width:100%}.nav-list{grid-template-columns:1fr;gap:.35rem;width:100%;display:grid}.nav-list li,.nav-list a{width:100%}.nav-list a{border-color:var(--edge);background:color-mix(in oklab, var(--paper) 92%, transparent);justify-content:flex-start;min-height:40px;padding:.55rem .8rem}.portrait-panel{justify-items:center}.portrait-stack{width:min(100%,22rem)}.portrait-meta-cloud{width:100%;margin-top:0}.page-intro-stats,.fact-grid{grid-template-columns:1fr}.fact-card p{max-width:none}.cv-skill-grid,.editorial-entry,.cv-controls-bar,.cv-education-row header,.cv-language-row,.cv-experience-disclosure .cv-disclosure-toggle{grid-template-columns:1fr}.cv-disclosure-aside--experience{flex-direction:row-reverse;justify-content:space-between;align-items:center;width:100%;display:flex}.project-feature{grid-template-columns:1fr}.project-feature-media{width:100%}.cv-education-row header{display:grid}.cv-controls-bar{justify-content:stretch;display:grid}.cv-skill-keywords{text-align:left}.cv-language-row{display:grid}.cv-language-row p{text-align:left}.cv-experience-disclosure .cv-disclosure-action span{display:none}.cv-timeplace{text-align:left;justify-items:start}}@media (width<=640px){.shell,body:has(main.page-content--quarto) .site-header-inner,body:has(main.page-content--quarto) .site-footer-inner,.page-content.page-content--quarto{width:min(1180px,94vw)}h1{font-size:clamp(2.35rem,1.9rem + 3vw,3.5rem)}.site-brand{align-items:center;gap:.55rem}.site-brand img{width:46px;height:46px}.site-brand strong,.site-brand em{line-height:1.25}.menu-toggle,.theme-toggle,.cta-link,.cv-contact-pill{min-height:40px}.menu-toggle-label{display:none}.cv-contact-pill{white-space:normal;text-align:center}.hero-actions{grid-template-columns:1fr;display:grid}.timeline{padding-left:.85rem}.timeline-card header{flex-direction:column}.article,.block,.hero-card,.portrait-panel,.cv-hero{padding:1rem}.social-list,.portrait-socials,.footer-links,.chip-list,.hero-proof{gap:.4rem}}@media (prefers-reduced-motion:reduce){.site-header{transition:none!important}*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
