:root{--font-display:"Bricolage Grotesque", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-text:"Literata", ui-serif, Georgia, Cambria, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--fs-sm:0.875rem;--fs-base:1.0625rem;--fs-md:1.25rem;--fs-lg:1.5625rem;--fs-xl:clamp(2rem, 1.5rem + 2vw, 2.75rem);--fs-hero:clamp(3.25rem, 1.5rem + 7.5vw, 7.25rem);--container:90rem;--gutter:clamp(1rem, 4vw, 2.5rem);--label:13rem;--gap:3rem;--measure:42rem;--header-h:3.75rem;--bg:#eef1ef;--bg-raised:#f6f8f7;--ink:#1b2421;--muted:#56625d;--rule:#cbd3cf;--accent:#0d7366;--accent-strong:#0a5a50;--on-accent:#ffffff;--t-edtech:#0d7366;--t-infra:#a86f12;--t-eng:#7a3e6a;--code-bg:#e2e8e5}@media(max-width:47.99rem){:root{--label:5.75rem;--gap:0.875rem}}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#121816;--bg-raised:#18201d;--ink:#e4eae7;--muted:#9aa7a1;--rule:#2c3733;--accent:#4fc2b0;--accent-strong:#7fd8ca;--on-accent:#0b1a17;--t-edtech:#4fc2b0;--t-infra:#e2a944;--t-eng:#c27bb0;--code-bg:#1b2421;color-scheme:dark}}:root[data-theme=dark]{--bg:#121816;--bg-raised:#18201d;--ink:#e4eae7;--muted:#9aa7a1;--rule:#2c3733;--accent:#4fc2b0;--accent-strong:#7fd8ca;--on-accent:#0b1a17;--t-edtech:#4fc2b0;--t-infra:#e2a944;--t-eng:#c27bb0;--code-bg:#1b2421;color-scheme:dark}:root[data-theme=light]{color-scheme:light}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:calc(var(--header-h) + 1.5rem)}@media(prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{margin:0;min-height:100vh;display:flex;flex-direction:column;background:var(--bg);color:var(--ink);font-family:var(--font-display);font-size:var(--fs-base);line-height:1.55;-webkit-font-smoothing:antialiased;font-optical-sizing:auto}main{flex:1;outline:none}h1,h2,h3,h4{font-family:var(--font-display);font-weight:650;line-height:1.15;letter-spacing:-.01em;margin:0 0 .75rem}p{margin:0 0 1rem}a{color:var(--accent);text-decoration-line:underline;text-decoration-thickness:1px;text-underline-offset:.2em}a:hover{color:var(--accent-strong);text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}img,svg,video{max-width:100%;height:auto}hr{border:0;border-top:1px solid var(--rule);margin:3rem 0}.muted{color:var(--muted)}.visually-hidden{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip-link{position:absolute;left:1rem;top:-3rem;z-index:100;padding:.5rem 1rem;background:var(--ink);color:var(--bg)}.skip-link:focus{top:.75rem}.icon{width:1.2em;height:1.2em;stroke-width:1.75}.plain-list{list-style:none;margin:0;padding:0}img.blur-up{filter:blur(6px);transition:filter 300ms}img.blur-up.lazyloaded{filter:none}.container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:var(--gutter)}.band-grid{display:grid;grid-template-columns:var(--label)minmax(0,1fr);column-gap:var(--gap);align-items:start}.band-body{grid-column:2}@media(max-width:47.99rem){.band-grid{grid-template-columns:minmax(0,1fr)}.band-body{grid-column:1}}.section-tight{padding-block:1.5rem 4.5rem}.band{border-top:1px solid var(--rule);padding-block:2.75rem}.band-title{font-size:var(--fs-md);margin:0 0 1.25rem}.band-subtitle{font-size:var(--fs-base);margin:2rem 0 .75rem}.group{border-top:1px solid var(--rule);padding-block:1.75rem}.group-label{font-size:var(--fs-base);font-weight:600;margin:0 0 1rem;font-variant-numeric:tabular-nums}.site-header{position:sticky;top:0;z-index:50;background:var(--bg);border-bottom:1px solid var(--rule)}.header-inner{height:var(--header-h);display:flex;align-items:center;gap:1.5rem}.wordmark{margin-right:auto;color:var(--ink);text-decoration:none;font-weight:700;font-size:var(--fs-md);font-variation-settings:"wdth" 85;letter-spacing:-.02em}.wordmark:hover{color:var(--ink)}.site-nav ul{list-style:none;margin:0;padding:0;display:flex;gap:1.5rem}.site-nav a{display:block;padding-block:.4rem;color:var(--ink);text-decoration:none;font-weight:500;border-bottom:2px solid transparent}.site-nav a:hover{color:var(--accent)}.site-nav a[aria-current=page]{border-bottom-color:var(--accent)}.header-actions{display:flex;gap:.25rem}.icon-btn{display:inline-grid;place-items:center;width:2.5rem;height:2.5rem;padding:0;border:0;background:0 0;color:var(--ink);cursor:pointer}.icon-btn:hover{color:var(--accent)}.theme-toggle .icon-moon,.nav-toggle,.nav-toggle .icon-close{display:none}:root[data-theme=dark] .theme-toggle .icon-sun{display:none}:root[data-theme=dark] .theme-toggle .icon-moon{display:inline}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle .icon-sun{display:none}:root:not([data-theme=light]) .theme-toggle .icon-moon{display:inline}}@media(max-width:47.99rem){.nav-toggle{display:inline-grid}.site-nav{display:none;position:absolute;top:var(--header-h);left:0;right:0;background:var(--bg);border-bottom:1px solid var(--rule);padding:.5rem var(--gutter)1.25rem}.site-nav ul{flex-direction:column;gap:0}.site-nav a{padding-block:.75rem;font-size:var(--fs-md);border-bottom:1px solid var(--rule)}.site-nav a[aria-current=page]{color:var(--accent);border-bottom-color:var(--rule)}.nav-open .site-nav{display:block}.nav-open .nav-toggle .icon-open{display:none}.nav-open .nav-toggle .icon-close{display:inline}}.page-header{padding-block:2.75rem 1.25rem}.page-title{font-size:var(--fs-xl);font-weight:700;font-variation-settings:"wdth" 85;letter-spacing:-.025em;line-height:1.05;margin-bottom:1rem}.lead{font-size:var(--fs-md);color:var(--muted);max-width:var(--measure)}.site-footer{border-top:1px solid var(--rule);background:var(--bg-raised);font-size:var(--fs-sm)}.footer-inner{padding-block:1.75rem;row-gap:1rem;align-items:baseline}.footer-id p{margin:0}.footer-name{font-weight:650}.footer-links{display:flex;flex-wrap:wrap;gap:.75rem 2.75rem}.footer-links ul{display:flex;flex-wrap:wrap;gap:.35rem 1.25rem}.footer-links a{color:var(--ink);text-decoration:none}.footer-links a:hover{color:var(--accent);text-decoration:underline}@media(max-width:47.99rem){.footer-links{flex-direction:column}}.btn{display:inline-flex;align-items:center;justify-content:center;padding:.7rem 1.2rem;border:1.5px solid transparent;font:inherit;font-weight:600;line-height:1.1;text-decoration:none;cursor:pointer}.btn-primary{background:var(--accent);color:var(--on-accent)}.btn-primary:hover{background:var(--accent-strong);color:var(--on-accent)}.btn-secondary{border-color:var(--ink);color:var(--ink)}.btn-secondary:hover{background:var(--ink);color:var(--bg)}.hero{padding-block:clamp(2rem,4vw,3.25rem)2.5rem}.hero-name{font-size:var(--fs-hero);font-weight:720;font-variation-settings:"wdth" 82;letter-spacing:-.028em;line-height:.92;margin:0 0 1.75rem;margin-left:-.04em}.hero-intro{row-gap:.75rem}.hero-role{font-weight:600;line-height:1.35;margin:.3rem 0 0}.hero-role a{color:inherit;font-weight:500;text-decoration-color:var(--rule)}.hero-role a:hover{text-decoration-color:initial}.hero-lead{font-family:var(--font-text);font-size:var(--fs-md);line-height:1.5;max-width:52rem;color:var(--muted);margin-bottom:1.25rem}.hero-actions{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem}.text-links{list-style:none;margin:0 0 0 1rem;padding:0;display:flex;flex-wrap:wrap;gap:.5rem 1.25rem}@media(max-width:47.99rem){.text-links{margin-left:0;width:100%}}.tracks{--axis-h:1.75rem;--row-h:2.125rem;position:relative;margin:2.5rem 0 0}.tracks-axis{position:relative;height:var(--axis-h);margin-left:calc(var(--label) + var(--gap));border-bottom:1px solid var(--rule);font-size:.8125rem;color:var(--muted);font-variant-numeric:tabular-nums}.tick{position:absolute;left:var(--x);bottom:0;padding:0 0 .3rem .35rem;border-left:1px solid var(--rule);line-height:1}.tick-short{display:none}@media(max-width:47.99rem){.tick-full{display:none}.tick-short{display:inline}}.tracks-list{list-style:none;margin:0;padding:0}.track{display:grid;grid-template-columns:var(--label)minmax(0,1fr);column-gap:var(--gap);align-items:center;height:var(--row-h);color:var(--ink);text-decoration:none}.track-name{font-size:.9375rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.track-lane{position:relative;height:100%;background-image:linear-gradient(to right,var(--rule) 1px,transparent 1px);background-size:calc(100%/var(--span))100%;background-repeat:repeat-x}.tracks-list li:last-child .track-lane{border-bottom:1px solid var(--rule)}.track-bar{position:absolute;left:var(--l);width:var(--w);top:50%;height:.75rem;transform:translateY(-50%);border-radius:2px;background:var(--track-color);transition:height 120ms ease-out}.track-edtech{--track-color:var(--t-edtech)}.track-infra{--track-color:var(--t-infra)}.track-engineering{--track-color:var(--t-eng)}.track:hover .track-name,.track:focus-visible .track-name{color:var(--accent);text-decoration:underline;text-underline-offset:.2em}.track:hover .track-bar,.track:focus-visible .track-bar{height:1.125rem}.track:focus-visible{outline-offset:0}.tracks-overlay{position:absolute;top:0;bottom:0;left:calc(var(--label) + var(--gap));right:0;pointer-events:none}.playhead{position:absolute;top:calc(var(--axis-h) - .5rem);bottom:-.5rem;left:var(--now);width:2px;margin-left:-1px;background:var(--ink)}.playhead-label{position:absolute;bottom:-1.5rem;left:50%;transform:translateX(-50%);font-size:.8125rem;font-weight:600}.tracks-cover{position:absolute;top:calc(var(--axis-h) + 1px);bottom:0;left:var(--now);right:0;display:none;background:var(--bg)}@media(prefers-reduced-motion:no-preference){.tracks-cover{display:block;animation:tracks-reveal 1.9s cubic-bezier(.3,.6,.2,1).25s both}.playhead{animation:tracks-play 1.9s cubic-bezier(.3,.6,.2,1).25s both}.playhead-label{animation:tracks-label .3s ease-out 2.05s both}}@keyframes tracks-play{from{left:0%}to{left:var(--now)}}@keyframes tracks-reveal{from{left:0%}to{left:calc(var(--now) + 1px)}}@keyframes tracks-label{from{opacity:0}to{opacity:1}}.tracks-key{list-style:none;margin:2rem 0 0 calc(var(--label) + var(--gap));padding:0;display:flex;flex-wrap:wrap;gap:.5rem 1.75rem;font-size:var(--fs-sm);color:var(--muted)}.tracks-key li{display:inline-flex;align-items:center;gap:.5rem}.tracks-key li::before{content:"";width:1.25rem;height:.5rem;border-radius:2px;background:var(--track-color)}.key-edtech{--track-color:var(--t-edtech)}.key-infra{--track-color:var(--t-infra)}.key-engineering{--track-color:var(--t-eng)}@media(max-width:47.99rem){.tracks{--row-h:2rem}.track-name{font-size:.8125rem}.tracks-key{margin-left:0}}.interests{columns:2 14rem;column-gap:2rem}.interests li{break-inside:avoid;padding-block:.15rem}.row-list{display:grid}.row{padding-block:1.25rem;border-top:1px solid var(--rule)}.row:first-child{border-top:0;padding-top:0}.row-when{display:flex;align-items:center;gap:.6rem;margin:0 0 .35rem;font-size:var(--fs-sm);color:var(--muted);font-variant-numeric:tabular-nums}.row-when::before{content:"";flex:none;width:1.25rem;height:.5rem;border-radius:2px;background:var(--track-color)}.row-title{font-size:var(--fs-md);margin-bottom:.15rem}.row-role{font-weight:500;margin-bottom:.6rem}.row-text{max-width:52rem;color:var(--muted);margin-bottom:.6rem}.row-tech{font-size:var(--fs-sm);margin-bottom:.6rem}.row-links{display:flex;flex-wrap:wrap;gap:.25rem 1.25rem;margin:0;font-weight:500}.row-list-full .row{display:grid;grid-template-columns:var(--label)minmax(0,1fr);column-gap:var(--gap);align-items:start;padding-block:2rem}.row-list-full .row:first-child{border-top:1px solid var(--rule)}.row-list-full .row-when{padding-top:.3rem}@media(max-width:47.99rem){.row-list-full .row{grid-template-columns:minmax(0,1fr)}}.pub-list{display:grid;gap:1.5rem}.pub-title{font-size:var(--fs-base);font-weight:600;line-height:1.35;margin-bottom:.3rem}.pub-authors,.pub-venue{margin:0;font-size:.9375rem;color:var(--muted)}.pub-authors strong{color:var(--ink);font-weight:600}.pub-venue cite{font-style:normal}.pub-note{color:var(--accent);font-weight:600}.pub-links{display:flex;gap:1rem;margin:.35rem 0 0;font-size:.9375rem;font-weight:500}.post-list{display:grid;gap:1.75rem}.post-title{font-size:var(--fs-md);line-height:1.25;margin-bottom:.3rem}.post-title a{color:var(--ink);text-decoration:none}.post-title a:hover{color:var(--accent);text-decoration:underline}.post-summary{margin-bottom:.3rem}.post-meta{margin:0;font-size:var(--fs-sm);color:var(--muted)}.about-page{padding-bottom:4.5rem}.about-section{border-top:1px solid var(--rule);padding-block:1.75rem}.about-section:first-child{border-top:0;padding-top:.5rem}.about-section .group-label{margin-top:.2rem}.about-section .prose>:last-child{margin-bottom:0}@media(min-width:72rem){.prose.about-columns{max-width:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));column-gap:var(--gap)}.prose.about-columns>p{margin:0}.prose.about-columns>p>strong:first-child{display:block;margin-bottom:.4rem;font-family:var(--font-display);font-size:var(--fs-md);font-weight:650;line-height:1.2}}.cv-section+.cv-section{margin-top:3rem}.cv-heading{font-size:var(--fs-lg);font-weight:700;font-variation-settings:"wdth" 85;padding-bottom:.6rem;border-bottom:1px solid var(--rule);margin-bottom:1.5rem}.cv-entry{margin-bottom:1.75rem}.cv-when{margin:.2rem 0 .25rem;font-size:var(--fs-sm);color:var(--muted);font-variant-numeric:tabular-nums}.cv-title{font-size:var(--fs-md);margin-bottom:.15rem}.cv-org{color:var(--muted);margin-bottom:.6rem}.cv-points{max-width:52rem;margin:0;padding-left:1.1rem}.cv-points li+li{margin-top:.35rem}.cv-skill{margin:0}.contact-line{max-width:var(--measure);font-family:var(--font-text);font-size:var(--fs-md);line-height:1.5}.contact-email{font-size:var(--fs-lg);font-weight:600;overflow-wrap:anywhere}.not-found{padding-block:5rem}.cv-org a{color:inherit;text-decoration-color:var(--rule)}.cv-org a:hover{color:var(--accent);text-decoration-color:initial}.band .band-body>p:last-child{margin-top:1.5rem;margin-bottom:0}.interests{columns:auto}@media(min-width:72rem){.about-split{display:grid;grid-template-columns:minmax(0,var(--measure))minmax(14rem,1fr);column-gap:var(--gap);align-items:start}.interests-aside{padding-left:var(--gap);border-left:1px solid var(--rule)}.interests-aside .band-subtitle{margin-top:0}.spread-3,.spread-2{display:grid;column-gap:var(--gap);row-gap:2rem}.spread-3{grid-template-columns:repeat(3,minmax(0,1fr))}.spread-2{grid-template-columns:repeat(2,minmax(0,1fr))}.spread-3>.row,.spread-3>.row:first-child{padding:0;border-top:0}}@media(max-width:71.99rem){.interests-aside .band-subtitle{margin-top:2rem}}.prose{max-width:var(--measure);font-family:var(--font-text);font-size:1.0625rem;line-height:1.72;overflow-wrap:break-word}.article-body{font-size:1.125rem;line-height:1.75}.prose>:first-child{margin-top:0}.prose p,.prose ul,.prose ol{margin:0 0 1.15em}.prose strong{font-weight:600}.prose h2,.prose h3,.prose h4,.prose h5{font-family:var(--font-display);line-height:1.2}.prose h2{font-size:var(--fs-lg);font-weight:700;font-variation-settings:"wdth" 85;margin:2.5em 0 .6em}.prose h3{font-size:var(--fs-md);margin:2em 0 .5em}.prose h4,.prose h5{font-size:var(--fs-base);margin:1.75em 0 .5em}.heading-anchor{margin-left:.3rem;color:var(--muted);text-decoration:none;font-weight:400;opacity:0}h2:hover .heading-anchor,h3:hover .heading-anchor,h4:hover .heading-anchor,.heading-anchor:focus-visible{opacity:1}.prose li+li{margin-top:.4em}.prose blockquote{margin:1.5em 0;padding-left:1.25rem;border-left:2px solid var(--accent);color:var(--muted)}.prose img{display:block;margin:1.75em auto}.prose figure{margin:2em 0}.prose figure img{margin:0 auto}.prose figcaption,.prose img+em,.prose p:has(>img:only-child)+p>em:only-child{display:block;font-family:var(--font-display);font-style:normal;font-size:var(--fs-sm);color:var(--muted)}.prose figcaption{margin-top:.5rem}.prose table{display:block;width:100%;overflow-x:auto;border-collapse:collapse;font-family:var(--font-display);font-size:.9375rem;margin:1.5em 0}.prose th,.prose td{padding:.5rem .75rem;border-bottom:1px solid var(--rule);text-align:left}.prose th{font-weight:600}.prose code{font-family:var(--font-mono);font-size:.85em;background:var(--code-bg);padding:.1em .3em}.prose pre{font-size:.875rem;line-height:1.6;overflow-x:auto;padding:1rem 1.25rem;margin:1.5em 0;border-left:2px solid var(--rule)}.prose pre code{background:0 0;padding:0;font-size:inherit}.prose .highlight pre{background:var(--code-bg)}.article-back{margin:.55rem 0 0;font-weight:500}.article-title{font-size:clamp(2rem,1.4rem + 2.6vw,3.25rem)}@media(max-width:47.99rem){.article-back{margin-bottom:1rem}}.toc{font-size:var(--fs-sm);line-height:1.4;min-width:0;overflow-wrap:anywhere}@media(min-width:48rem){.toc{position:sticky;top:calc(var(--header-h) + 1.5rem);max-height:calc(100vh - var(--header-h) - 3rem);overflow-y:auto}}@media(max-width:47.99rem){.toc{margin-bottom:2rem;padding:.75rem 0;border-block:1px solid var(--rule)}}.toc summary{font-weight:600;cursor:pointer;margin-bottom:.5rem}.toc ul{list-style:none;padding-left:0;margin:0}.toc ul ul{padding-left:.75rem}.toc li{margin:.4rem 0}.toc a{color:var(--muted);text-decoration:none}.toc a:hover{color:var(--accent);text-decoration:underline}.article-footer{padding-bottom:4.5rem}.post-nav{border-top:1px solid var(--rule);padding-top:1.5rem}.post-nav p{margin-bottom:.4rem;color:var(--muted)}.gallery{display:grid;gap:2.5rem 2rem}@media(min-width:48rem){.gallery{grid-template-columns:repeat(2,minmax(0,1fr))}}.gallery figure{margin:0}.gallery img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover}.gallery figcaption{margin-top:.6rem;font-size:var(--fs-sm);color:var(--muted)}.chroma .err{color:#a61717}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#000;font-weight:700}.chroma .kc{color:#000;font-weight:700}.chroma .kd{color:#000;font-weight:700}.chroma .kn{color:#000;font-weight:700}.chroma .kp{color:#000;font-weight:700}.chroma .kr{color:#000;font-weight:700}.chroma .kt{color:#458;font-weight:700}.chroma .na{color:teal}.chroma .nb{color:#0086b3}.chroma .bp{color:#999}.chroma .nc{color:#458;font-weight:700}.chroma .no{color:teal}.chroma .nd{color:#3c5d5d;font-weight:700}.chroma .ni{color:purple}.chroma .ne{color:#900;font-weight:700}.chroma .nf{color:#900;font-weight:700}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#555}.chroma .nt{color:navy}.chroma .nv{color:teal}.chroma .vc{color:teal}.chroma .vg{color:teal}.chroma .vi{color:teal}.chroma .s{color:#d14}.chroma .sa{color:#d14}.chroma .sb{color:#d14}.chroma .sc{color:#d14}.chroma .dl{color:#d14}.chroma .sd{color:#d14}.chroma .s2{color:#d14}.chroma .se{color:#d14}.chroma .sh{color:#d14}.chroma .si{color:#d14}.chroma .sx{color:#d14}.chroma .sr{color:#009926}.chroma .s1{color:#d14}.chroma .ss{color:#990073}.chroma .m{color:#099}.chroma .mb{color:#099}.chroma .mf{color:#099}.chroma .mh{color:#099}.chroma .mi{color:#099}.chroma .il{color:#099}.chroma .mo{color:#099}.chroma .o{color:#000;font-weight:700}.chroma .ow{color:#000;font-weight:700}.chroma .c{color:#998;font-style:italic}.chroma .ch{color:#998;font-style:italic}.chroma .cm{color:#998;font-style:italic}.chroma .c1{color:#998;font-style:italic}.chroma .cs{color:#999;font-weight:700;font-style:italic}.chroma .cp{color:#999;font-weight:700;font-style:italic}.chroma .cpf{color:#999;font-weight:700;font-style:italic}.chroma .gd{color:#000}.chroma .ge{color:#000;font-style:italic}.chroma .gr{color:#a00}.chroma .gh{color:#999}.chroma .gi{color:#000}.chroma .go{color:#888}.chroma .gp{color:#555}.chroma .gs{font-weight:700}.chroma .gu{color:#aaa}.chroma .gt{color:#a00}.chroma .gl{text-decoration:underline}.chroma .w{color:#bbb}:root[data-theme=dark] .chroma{color:#e6edf3}:root[data-theme=dark] .bg{color:#e6edf3}:root[data-theme=dark] .chroma{color:#e6edf3}:root[data-theme=dark] .chroma .err{color:#f85149}:root[data-theme=dark] .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}:root[data-theme=dark] .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}:root[data-theme=dark] .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}:root[data-theme=dark] .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}:root[data-theme=dark] .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}:root[data-theme=dark] .chroma .line{display:flex}:root[data-theme=dark] .chroma .k{color:#ff7b72}:root[data-theme=dark] .chroma .kc{color:#79c0ff}:root[data-theme=dark] .chroma .kd{color:#ff7b72}:root[data-theme=dark] .chroma .kn{color:#ff7b72}:root[data-theme=dark] .chroma .kp{color:#79c0ff}:root[data-theme=dark] .chroma .kr{color:#ff7b72}:root[data-theme=dark] .chroma .kt{color:#ff7b72}:root[data-theme=dark] .chroma .nc{color:#f0883e;font-weight:700}:root[data-theme=dark] .chroma .no{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .nd{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .ni{color:#ffa657}:root[data-theme=dark] .chroma .ne{color:#f0883e;font-weight:700}:root[data-theme=dark] .chroma .nf{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .nl{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .nn{color:#ff7b72}:root[data-theme=dark] .chroma .py{color:#79c0ff}:root[data-theme=dark] .chroma .nt{color:#7ee787}:root[data-theme=dark] .chroma .nv{color:#79c0ff}:root[data-theme=dark] .chroma .l{color:#a5d6ff}:root[data-theme=dark] .chroma .ld{color:#79c0ff}:root[data-theme=dark] .chroma .s{color:#a5d6ff}:root[data-theme=dark] .chroma .sa{color:#79c0ff}:root[data-theme=dark] .chroma .sb{color:#a5d6ff}:root[data-theme=dark] .chroma .sc{color:#a5d6ff}:root[data-theme=dark] .chroma .dl{color:#79c0ff}:root[data-theme=dark] .chroma .sd{color:#a5d6ff}:root[data-theme=dark] .chroma .s2{color:#a5d6ff}:root[data-theme=dark] .chroma .se{color:#79c0ff}:root[data-theme=dark] .chroma .sh{color:#79c0ff}:root[data-theme=dark] .chroma .si{color:#a5d6ff}:root[data-theme=dark] .chroma .sx{color:#a5d6ff}:root[data-theme=dark] .chroma .sr{color:#79c0ff}:root[data-theme=dark] .chroma .s1{color:#a5d6ff}:root[data-theme=dark] .chroma .ss{color:#a5d6ff}:root[data-theme=dark] .chroma .m{color:#a5d6ff}:root[data-theme=dark] .chroma .mb{color:#a5d6ff}:root[data-theme=dark] .chroma .mf{color:#a5d6ff}:root[data-theme=dark] .chroma .mh{color:#a5d6ff}:root[data-theme=dark] .chroma .mi{color:#a5d6ff}:root[data-theme=dark] .chroma .il{color:#a5d6ff}:root[data-theme=dark] .chroma .mo{color:#a5d6ff}:root[data-theme=dark] .chroma .o{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .ow{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .c{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .ch{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .cm{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .c1{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .cs{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .cp{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .gd{color:#ffa198}:root[data-theme=dark] .chroma .ge{font-style:italic}:root[data-theme=dark] .chroma .gr{color:#ffa198}:root[data-theme=dark] .chroma .gh{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .gi{color:#56d364}:root[data-theme=dark] .chroma .go{color:#8b949e}:root[data-theme=dark] .chroma .gp{color:#8b949e}:root[data-theme=dark] .chroma .gs{font-weight:700}:root[data-theme=dark] .chroma .gu{color:#79c0ff}:root[data-theme=dark] .chroma .gt{color:#ff7b72}:root[data-theme=dark] .chroma .gl{text-decoration:underline}:root[data-theme=dark] .chroma .w{color:#6e7681}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .chroma{color:#e6edf3}:root:not([data-theme=light]) .bg{color:#e6edf3}:root:not([data-theme=light]) .chroma{color:#e6edf3}:root:not([data-theme=light]) .chroma .err{color:#f85149}:root:not([data-theme=light]) .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}:root:not([data-theme=light]) .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}:root:not([data-theme=light]) .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}:root:not([data-theme=light]) .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}:root:not([data-theme=light]) .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}:root:not([data-theme=light]) .chroma .line{display:flex}:root:not([data-theme=light]) .chroma .k{color:#ff7b72}:root:not([data-theme=light]) .chroma .kc{color:#79c0ff}:root:not([data-theme=light]) .chroma .kd{color:#ff7b72}:root:not([data-theme=light]) .chroma .kn{color:#ff7b72}:root:not([data-theme=light]) .chroma .kp{color:#79c0ff}:root:not([data-theme=light]) .chroma .kr{color:#ff7b72}:root:not([data-theme=light]) .chroma .kt{color:#ff7b72}:root:not([data-theme=light]) .chroma .nc{color:#f0883e;font-weight:700}:root:not([data-theme=light]) .chroma .no{color:#79c0ff;font-weight:700}:root:not([data-theme=light]) .chroma .nd{color:#d2a8ff;font-weight:700}:root:not([data-theme=light]) .chroma .ni{color:#ffa657}:root:not([data-theme=light]) .chroma .ne{color:#f0883e;font-weight:700}:root:not([data-theme=light]) .chroma .nf{color:#d2a8ff;font-weight:700}:root:not([data-theme=light]) .chroma .nl{color:#79c0ff;font-weight:700}:root:not([data-theme=light]) .chroma .nn{color:#ff7b72}:root:not([data-theme=light]) .chroma .py{color:#79c0ff}:root:not([data-theme=light]) .chroma .nt{color:#7ee787}:root:not([data-theme=light]) .chroma .nv{color:#79c0ff}:root:not([data-theme=light]) .chroma .l{color:#a5d6ff}:root:not([data-theme=light]) .chroma .ld{color:#79c0ff}:root:not([data-theme=light]) .chroma .s{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sa{color:#79c0ff}:root:not([data-theme=light]) .chroma .sb{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sc{color:#a5d6ff}:root:not([data-theme=light]) .chroma .dl{color:#79c0ff}:root:not([data-theme=light]) .chroma .sd{color:#a5d6ff}:root:not([data-theme=light]) .chroma .s2{color:#a5d6ff}:root:not([data-theme=light]) .chroma .se{color:#79c0ff}:root:not([data-theme=light]) .chroma .sh{color:#79c0ff}:root:not([data-theme=light]) .chroma .si{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sx{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sr{color:#79c0ff}:root:not([data-theme=light]) .chroma .s1{color:#a5d6ff}:root:not([data-theme=light]) .chroma .ss{color:#a5d6ff}:root:not([data-theme=light]) .chroma .m{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mb{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mf{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mh{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mi{color:#a5d6ff}:root:not([data-theme=light]) .chroma .il{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mo{color:#a5d6ff}:root:not([data-theme=light]) .chroma .o{color:#ff7b72;font-weight:700}:root:not([data-theme=light]) .chroma .ow{color:#ff7b72;font-weight:700}:root:not([data-theme=light]) .chroma .c{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .ch{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .cm{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .c1{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .cs{color:#8b949e;font-weight:700;font-style:italic}:root:not([data-theme=light]) .chroma .cp{color:#8b949e;font-weight:700;font-style:italic}:root:not([data-theme=light]) .chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}:root:not([data-theme=light]) .chroma .gd{color:#ffa198}:root:not([data-theme=light]) .chroma .ge{font-style:italic}:root:not([data-theme=light]) .chroma .gr{color:#ffa198}:root:not([data-theme=light]) .chroma .gh{color:#79c0ff;font-weight:700}:root:not([data-theme=light]) .chroma .gi{color:#56d364}:root:not([data-theme=light]) .chroma .go{color:#8b949e}:root:not([data-theme=light]) .chroma .gp{color:#8b949e}:root:not([data-theme=light]) .chroma .gs{font-weight:700}:root:not([data-theme=light]) .chroma .gu{color:#79c0ff}:root:not([data-theme=light]) .chroma .gt{color:#ff7b72}:root:not([data-theme=light]) .chroma .gl{text-decoration:underline}:root:not([data-theme=light]) .chroma .w{color:#6e7681}}