@layer base{:root{--background0:#fff;--background1:#ddd;--background2:#bbb;--background3:#999;--foreground0:#000;--foreground1:#444;--foreground2:#888;--font-size:16px;--line-height:1.3;--font-weight-bold:700;--font-weight-normal:400;--font-family:monospace;--box-border-color:var(--foreground0)}[data-webtui-theme=dark]{--background0:#000;--background1:#222;--background2:#444;--background3:#666;--foreground0:#fff;--foreground1:#ccc;--foreground2:#999}body,html{background-color:var(--background0);color:var(--foreground0);font-family:var(--font-family);font-size:var(--font-size);font-weight:var(--font-weight-normal);line-height:var(--line-height,1.5);font-variant-ligatures:common-ligatures;word-break:break-all}*{box-sizing:border-box;outline:none;margin:0;padding:0}:root,[data-webtui-theme=caelus]{--caelus-background:#0f0f0f;--caelus-surface:#1e1f1e;--caelus-surface-hover:#272a28;--caelus-foreground:#f4decd;--caelus-muted:#d9cdb5;--caelus-border:#3b403c;--caelus-accent:#ef934d;--caelus-warning:#f4b585;--caelus-error:#f16e65;--caelus-green:#7ec97e;--caelus-blue:#71b4d6;--caelus-magenta:#e28dc6;--caelus-cyan:#7ec9a3;--background0:var(--caelus-background);--background1:var(--caelus-surface);--background2:var(--caelus-surface-hover);--background3:var(--caelus-border);--foreground0:var(--caelus-foreground);--foreground1:var(--caelus-muted);--foreground2:var(--caelus-muted);--box-border-color:var(--caelus-border);--separator-color:var(--caelus-border);--table-border-color:var(--caelus-border);--red:var(--caelus-error);--green:var(--caelus-green);--yellow:var(--caelus-accent);--blue:var(--caelus-blue);--magenta:var(--caelus-magenta);--cyan:var(--caelus-cyan)}@font-face{font-family:Symbols Nerd Font;src:url(/fonts/SymbolsNerdFont-Regular.woff2)format("woff2");font-style:normal;font-weight:400;font-display:swap}:root{--font-family:"JetBrains Mono", ui-monospace, "Cascadia Code", Menlo, Monaco, Consolas, monospace, "Symbols Nerd Font";--font-size:16px;--line-height:1.5;--font-weight-normal:400;--font-weight-bold:700;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{scroll-behavior:auto}body{overflow-wrap:break-word;word-break:normal;background:var(--background0);min-width:20rem;min-height:100vh;color:var(--foreground0);font-variant-ligatures:none;margin:0;padding:2lh 2ch}h1,h2,h3,p,ul,pre,address{margin-block:0}h1,h2,h3{color:var(--foreground0);line-height:1.2}ul{padding:0;list-style:none}address{font-style:normal}a{color:var(--caelus-accent);text-underline-offset:.2em;text-decoration-thickness:.08em}a:hover{color:var(--caelus-warning)}a:focus-visible{outline:2px solid var(--caelus-accent);outline-offset:.25ch}::selection{background:var(--caelus-accent);color:var(--background0)}}@layer utils{@property --box-rounded-radius{syntax:"<length>";inherits:false;initial-value:4px}@property --box-border-width{syntax:"<length>";inherits:false;initial-value:2px}@property --box-double-border-width{syntax:"<length>";inherits:false;initial-value:1px}[box-=square],[box-=round],[box-=double]{isolation:isolate;padding:1lh 1ch;position:relative}[box-=square]:before,[box-=round]:before,[box-=double]:before{content:"";width:calc(100% - 1ch - var(--box-border-width));height:calc(100% - 1lh - var(--box-border-width));border:solid var(--box-border-width) var(--box-border-color);z-index:-1;position:absolute;top:50%;left:50%;translate:-50% -50%}[box-=square][box-=round]:before,[box-=round][box-=round]:before,[box-=double][box-=round]:before{border-radius:var(--box-rounded-radius)}[box-=square][box-=round]:after,[box-=round][box-=round]:after,[box-=double][box-=round]:after{border-radius:calc(var(--box-rounded-radius) + 2px)}[box-=square][box-=double]:before,[box-=round][box-=double]:before,[box-=double][box-=double]:before{border-width:var(--box-double-border-width)}[box-=square][box-=double]:after,[box-=round][box-=double]:after,[box-=double][box-=double]:after{content:"";width:calc(100% - 1ch + var(--box-double-border-width) * 2);height:calc(100% - 1lh + var(--box-double-border-width) * 2);border:solid var(--box-double-border-width) var(--box-border-color);z-index:-1;position:absolute;top:50%;left:50%;translate:-50% -50%}[box-=square][shear-=both],[box-=round][shear-=both],[box-=double][shear-=both]{padding-top:0;padding-bottom:0}[box-=square][shear-=top],[box-=round][shear-=top],[box-=double][shear-=top]{padding-top:0}[box-=square][shear-=bottom],[box-=round][shear-=bottom],[box-=double][shear-=bottom]{padding-bottom:0}}@layer components{[is-~=badge]{color:var(--badge-text);background-image:linear-gradient(90deg,transparent 0,transparent calc(1ch - 1px),var(--badge-color) calc(1ch - 1px),var(--badge-color) calc(100% - 1ch + 1px),transparent calc(100% - 1ch + 1px),transparent);vertical-align:top;white-space:nowrap;height:1lh;line-height:1lh;display:inline-flex}[is-~=badge][variant-=foreground0],[is-~=badge]:not([variant-]){--badge-color:var(--foreground0);--badge-text:var(--background0)}[is-~=badge][variant-=foreground1]{--badge-color:var(--foreground1);--badge-text:var(--background0)}[is-~=badge][variant-=foreground2]{--badge-color:var(--foreground2);--badge-text:var(--background0)}[is-~=badge][variant-=background0]{--badge-color:var(--background0);--badge-text:var(--foreground0)}[is-~=badge][variant-=background1]{--badge-color:var(--background1);--badge-text:var(--foreground0)}[is-~=badge][variant-=background2]{--badge-color:var(--background2);--badge-text:var(--foreground0)}[is-~=badge][variant-=background3]{--badge-color:var(--background3);--badge-text:var(--foreground0)}[is-~=badge]:before,[is-~=badge]:after{content:"";vertical-align:middle;background-color:var(--badge-color);width:1ch;height:1lh;display:inline-block;overflow:hidden}[is-~=badge][cap-^=round]:before{border-top-left-radius:1lh;border-bottom-left-radius:1lh}[is-~=badge][cap-$=round]:after{border-top-right-radius:1lh;border-bottom-right-radius:1lh}[is-~=badge][cap-^=triangle]:before{clip-path:polygon(100% 0,100% 100%,0 50%)}[is-~=badge][cap-$=triangle]:after{clip-path:polygon(0 0,0 100%,100% 50%)}[is-~=badge][cap-^=slant-top]:before{clip-path:polygon(0 0,100% 0,100% 100%)}[is-~=badge][cap-$=slant-top]:after{clip-path:polygon(0 0,100% 0,0 100%)}[is-~=badge][cap-^=slant-bottom]:before{clip-path:polygon(100% 0,100% 100%,0 100%)}[is-~=badge][cap-$=slant-bottom]:after{clip-path:polygon(0 0,100% 100%,0 100%)}[is-~=badge][cap-^=ribbon]:before{clip-path:polygon(0 0,100% 0,100% 100%,0 100%,100% 50%)}[is-~=badge][cap-$=ribbon]:after{clip-path:polygon(0 0,100% 0,0% 50%,100% 100%,0% 100%)}h1,h2,h3,h4,h5,h6{font-family:var(--font-family);font-size:var(--font-size);line-height:var(--line-height);font-weight:var(--font-weight-bold)}h1 code,h2 code,h3 code,h4 code,h5 code,h6 code{color:inherit;background-color:var(--background1);padding:0 1ch}ol{list-style-position:inside}ol li>ol{margin-left:2ch}ul{list-style-type:none}ul li:before{color:var(--list-marker-color,inherit);content:"- "}ul[marker-=bullet] li:before{content:"• "}ul[marker-~=tree] li:before{content:"├ "}ul[marker-~=tree]:not([marker-^=open]) li:first-of-type:before{content:"┌ "}ul[marker-~=tree]:not([marker-$=open]) li:last-of-type:before{content:"└ "}ul[marker-~=round-tree] li:before{content:"├ "}ul[marker-~=round-tree]:not([marker-^=open]) li:first-of-type:before{content:"╭ "}ul[marker-~=round-tree]:not([marker-$=open]) li:last-of-type:before{content:"╰ "}ul li>ul{margin-left:2ch}p,blockquote,li,[is-~=typography-block]{font-family:var(--font-family);font-size:var(--font-size);line-height:var(--line-height);color:var(--foreground1)}p:is(blockquote),blockquote:is(blockquote),li:is(blockquote),[is-~=typography-block]:is(blockquote){padding-left:2ch;position:relative}p:is(blockquote):before,blockquote:is(blockquote):before,li:is(blockquote):before,[is-~=typography-block]:is(blockquote):before{content:"";width:var(--box-border-width,2px);background-color:var(--blockquote-indent-color,var(--background2));height:100%;position:absolute;top:0;left:.5ch;translate:-50%}p strong,blockquote strong,li strong,[is-~=typography-block] strong{font-weight:var(--font-weight-bold);color:var(--foreground0)}p a,blockquote a,li a,[is-~=typography-block] a{color:var(--foreground2);text-decoration:underline}p code,blockquote code,li code,[is-~=typography-block] code{background-color:var(--background1);padding-left:1ch;padding-right:1ch;display:inline-block}.skip-link{z-index:10;background:var(--caelus-accent);color:var(--background0);padding:.5lh 1ch;position:fixed;inset-block-start:1lh;inset-inline-start:1ch;translate:0 -200%}.skip-link:focus{translate:0}.site-shell{flex-direction:column;width:min(100%,80ch);min-height:calc(100vh - 4lh);margin-inline:auto;display:flex}.site-header{margin-block-end:3lh}.site-nav{justify-content:space-between;align-items:baseline;gap:1lh 3ch;display:flex}.nav-label{color:var(--foreground0);font-weight:var(--font-weight-bold);text-decoration:none}.nav-links,.inline-links{flex-wrap:wrap;gap:.5lh 2ch;display:flex}.nav-links a{color:var(--foreground1);text-decoration:none}.nav-links a:hover,.nav-links a:focus-visible{color:var(--caelus-accent)}main{flex-direction:column;flex:1;gap:3lh;display:flex}.introduction{flex-direction:column;align-items:flex-start;gap:1lh;padding-block:1lh;display:flex}.introduction h1{letter-spacing:.04em;max-width:100%;font-size:clamp(2rem,8vw,3.5rem)}.introduction-summary{max-width:66ch;color:var(--foreground1)}.section-label{color:var(--caelus-accent)}.ascii-art{max-width:100%;color:var(--caelus-accent);font:inherit;white-space:pre;line-height:1;overflow-x:auto}.inline-links a{text-decoration:none}.open-section{gap:1lh;display:grid}.open-section-header,.section-box-header{justify-content:space-between;align-items:baseline;gap:2ch;display:flex}.open-section-header h2,.section-box-header h2{font-size:1em}.open-section-header span,.section-box-header span,.entry-meta,.credential{color:var(--foreground1)}.prose{max-width:72ch;color:var(--foreground1);gap:1lh;display:grid}.section-box{scroll-margin-block-start:1lh}.section-box-header{padding-inline:1ch}.section-box-header>*{background:var(--background0);padding-inline:1ch}.entry-list{flex-direction:column;display:flex}.entry{border-block-end:1px solid var(--caelus-border);gap:.5lh;padding:1lh 2ch;display:grid}.entry:last-child{border-block-end:0}.entry-header{justify-content:space-between;align-items:flex-start;gap:1lh 2ch;display:flex}.entry h3{font-size:1em}.entry h3 a{color:var(--foreground0)}.entry p:not(.credential),.highlight-list{color:var(--foreground1)}.entry-meta{text-align:end;flex:none;align-items:center;gap:1ch;display:flex}[is-~=badge]{--badge-color:var(--caelus-accent);--badge-text:var(--background0)}.education-meta{flex-direction:column;align-items:flex-end;gap:0}.highlight-list{gap:.25lh;margin-block-start:.5lh;display:grid}.highlight-list li:before,.stack-category li:before{content:"— ";color:var(--caelus-accent)}.stack-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,17ch),1fr));display:grid}.stack-category{border-block-end:1px solid var(--caelus-border);border-inline-end:1px solid var(--caelus-border);min-width:0;padding:1lh 2ch}.stack-category h3{color:var(--caelus-accent);margin-block-end:.5lh;font-size:1em}.stack-category ul{color:var(--foreground1);gap:.25lh;display:grid}.contact{flex-direction:column;align-items:flex-start;gap:1lh;max-width:66ch;padding-block:1lh;display:flex}.contact h2{font-size:1.5em}.contact>p:not(.section-label){color:var(--foreground1)}.contact-email{font-weight:var(--font-weight-bold);display:inline-block}.site-footer{border-block-start:1px solid var(--caelus-border);color:var(--foreground1);justify-content:space-between;align-items:baseline;gap:1lh 2ch;margin-block-start:3lh;padding-block-start:1lh;display:flex}.site-footer a{flex:none}}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/jetbrains-mono-latin-400-normal.V6pRDFza.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-400-normal.6-qcROiO.woff)format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/jetbrains-mono-latin-700-normal.BYuf6tUa.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-700-normal.D3wTyLJW.woff)format("woff")}@media (width<=60ch){body{padding:1lh 1ch}.site-shell{min-height:calc(100vh - 2lh)}.site-nav,.entry-header,.site-footer{flex-direction:column;align-items:flex-start}.entry-meta,.education-meta{text-align:start;align-items:flex-start}.entry-meta:not(.education-meta){flex-direction:row}}
