:root{--color-warmdusk-red-6:#faf0f0;--color-warmdusk-red-100:#b30a0a;--color-warmdusk-amber-6:#faf4f0;--color-warmdusk-amber-100:#af4f0b;--color-warmdusk-blue-6:#f6f8fb;--color-warmdusk-blue-100:#6192bb;--color-warmdusk-orchid-6:#fcf6fd;--color-warmdusk-orchid-100:#c86dd7;--color-cooldawn-sky-8:#f0faff;--color-cooldawn-mint-8:#f2fffa;--color-cooldawn-cyan-8:#f3fffe;--color-cooldawn-lime-8:#fbfff1;--color-cooldusk-blue-6:#f2f6ff;--color-cooldusk-indigo-6:#f5f4ff;--color-cooldusk-violet-6:#fbf0ff;--color-cooldusk-magenta-6:#fdf4ff;--color-warmdawn-magenta-6:#fff5fe;--color-warmdawn-rose-6:snow;--color-warmdawn-periwinkle-6:#fcfcff;--color-warmdawn-sky-6:#f5fbff;--color-midnight-red-6:#1c1818;--color-midnight-indigo-6:#191823;--color-midnight-orchid-6:#1b181b;--color-midnight-ember-6:#1b1818;--color-label:#313133;--color-heading:#2e3133;--color-link:#2151c2;--color-paper:#fff;--color-shade:#1e1e1e;--color-mute:#828282;--color-coral:#fd6b62;--color-steel:#435e76;--color-mark-warmdusk:#fef6ec;--color-mark-warmdawn:#fbecfe;--color-mark-cooldawn:#d2fcfa;--color-mark-midnight:#202a42;--warmdusk-canvas:var(--color-warmdusk-red-6);--warmdusk-stop-2:var(--color-warmdusk-amber-6);--warmdusk-stop-3:var(--color-warmdusk-blue-6);--warmdusk-stop-4:var(--color-warmdusk-orchid-6);--warmdusk-highlight:var(--color-mark-warmdusk);--warmdusk-code:#b30a0a26;--warmdawn-canvas:var(--color-warmdawn-magenta-6);--warmdawn-stop-2:var(--color-warmdawn-rose-6);--warmdawn-stop-3:var(--color-warmdawn-periwinkle-6);--warmdawn-stop-4:var(--color-warmdawn-sky-6);--warmdawn-highlight:var(--color-mark-warmdawn);--warmdawn-code:#ff58ee26;--cooldusk-canvas:var(--color-cooldusk-blue-6);--cooldusk-stop-2:var(--color-cooldusk-indigo-6);--cooldusk-stop-3:var(--color-cooldusk-violet-6);--cooldusk-stop-4:var(--color-cooldusk-magenta-6);--cooldusk-highlight:var(--color-mark-warmdusk);--cooldusk-code:#2b66ff26;--cooldawn-canvas:var(--color-cooldawn-sky-8);--cooldawn-stop-2:var(--color-cooldawn-mint-8);--cooldawn-stop-3:var(--color-cooldawn-cyan-8);--cooldawn-stop-4:var(--color-cooldawn-lime-8);--cooldawn-highlight:var(--color-mark-cooldawn);--cooldawn-code:#49beff26;--midnight-canvas:var(--color-midnight-red-6);--midnight-stop-2:var(--color-midnight-indigo-6);--midnight-stop-3:var(--color-midnight-orchid-6);--midnight-stop-4:var(--color-midnight-ember-6);--midnight-highlight:var(--color-mark-midnight);--midnight-code:#5b181833;--light-ink-primary:var(--color-label);--light-ink-heading:var(--color-heading);--light-ink-secondary:#1e1e1eb3;--light-ink-tertiary:#828282b3;--light-state-hover:#ffffffb3;--dark-ink-primary:var(--color-paper);--dark-ink-secondary:#fffc;--dark-state-hover:#ffffff14;--both-selection:var(--color-coral);--both-link:var(--color-link);--edge-figure:#435e7612;--edge-accent-1:var(--color-warmdusk-red-100);--edge-accent-2:var(--color-warmdusk-amber-100);--edge-accent-3:var(--color-warmdusk-blue-100);--edge-accent-4:var(--color-warmdusk-orchid-100)}@font-face{font-family:Bitter;src:url(/assets/font/Bitter.woff2)format("woff2-variations");font-stretch:25% 150%;font-weight:100 900;font-display:block}@font-face{font-family:Bitter;src:url(/assets/font/Bitter-Italic.woff2)format("woff2-variations");font-stretch:25% 150%;font-style:italic;font-weight:100 900;font-display:block}@font-face{font-family:Inter Tight;src:url(/assets/font/InterTight.woff2)format("woff2-variations");font-stretch:25% 150%;font-weight:100 900;font-display:block;size-adjust:105%}@font-face{font-family:Inter Tight;src:url(/assets/font/InterTight-Italic.woff2)format("woff2-variations");font-stretch:25% 150%;font-style:italic;font-weight:100 900;font-display:block;size-adjust:105%}@font-face{font-family:JetBrains Mono;src:url(/assets/font/JetBrainsMono.woff2)format("woff2-variations");font-weight:100 800;font-display:block}:root{--canvas:var(--warmdusk-canvas);--canvas-gradient:linear-gradient(178deg, var(--warmdusk-canvas) 0%, var(--warmdusk-stop-2) 16%, var(--warmdusk-stop-3) 50%, var(--warmdusk-stop-4) 87%, var(--warmdusk-canvas) 100%);--canvas-gradient-size:100% 1200px;--highlight:var(--warmdusk-highlight);--code-background:var(--warmdusk-code);--ink-primary:var(--light-ink-primary);--ink-heading:var(--light-ink-heading);--ink-secondary:var(--light-ink-secondary);--ink-tertiary:var(--light-ink-tertiary);--heading-emboss:white;--state-hover:var(--light-state-hover)}[data-theme=warmdawn]{--canvas:var(--warmdawn-canvas);--canvas-gradient:linear-gradient(178deg, var(--warmdawn-canvas) 0%, var(--warmdawn-stop-2) 25%, var(--warmdawn-stop-3) 50%, var(--warmdawn-stop-4) 75%, var(--warmdawn-canvas) 100%);--canvas-gradient-size:auto;--highlight:var(--warmdawn-highlight);--code-background:var(--warmdawn-code)}[data-theme=cooldusk]{--canvas:var(--cooldusk-canvas);--canvas-gradient:linear-gradient(178deg, var(--cooldusk-canvas) 0%, var(--cooldusk-stop-2) 25%, var(--cooldusk-stop-3) 50%, var(--cooldusk-stop-4) 75%, var(--cooldusk-canvas) 100%);--canvas-gradient-size:auto;--highlight:var(--cooldusk-highlight);--code-background:var(--cooldusk-code)}[data-theme=cooldawn]{--canvas:var(--cooldawn-canvas);--canvas-gradient:linear-gradient(178deg, var(--cooldawn-canvas) 0%, var(--cooldawn-stop-2) 16%, var(--cooldawn-stop-3) 50%, var(--cooldawn-stop-4) 87%, var(--cooldawn-canvas) 100%);--canvas-gradient-size:auto;--highlight:var(--cooldawn-highlight);--code-background:var(--cooldawn-code)}[data-theme=dark]{--canvas:var(--midnight-canvas);--canvas-gradient:linear-gradient(178deg, var(--midnight-canvas) 0%, var(--midnight-stop-2) 25%, var(--midnight-stop-3) 50%, var(--midnight-stop-4) 75%, var(--midnight-canvas) 100%);--canvas-gradient-size:auto;--highlight:var(--midnight-highlight);--code-background:var(--midnight-code);--ink-primary:var(--dark-ink-primary);--ink-heading:var(--dark-ink-primary);--ink-secondary:var(--dark-ink-secondary);--heading-emboss:black;--state-hover:var(--dark-state-hover)}[data-theme=dark] mark{color:inherit}[data-theme=dark] .secondary a{color:var(--ink-secondary)}[data-theme=dark] .glitch-word{--glitch-red:#ff003c;--glitch-blue:#00e5ff}[data-theme=dark] .mat-item a:hover{box-shadow:0 0 15px #0006}html{background:var(--canvas-gradient);background-color:var(--canvas);background-size:var(--canvas-gradient-size)}mark{background-color:var(--highlight)}code{background-color:var(--code-background)}.responsive-wide-container{--page-margin-right:var(--baseline-3);min-height:calc(100vh - var(--baseline-3));margin:var(--baseline-2) var(--page-margin-right) var(--baseline) var(--baseline-2);flex-direction:column;display:flex}@media only screen and (width<=767px){.responsive-wide-container{min-height:calc(100vh - var(--baseline-2));margin:var(--baseline) 1rem}}@media only screen and (width>=768px) and (width<=991px){.responsive-wide-container{min-height:calc(100vh - var(--baseline-3));margin:var(--baseline-1-5)}}@media only screen and (width>=1441px){.responsive-wide-container{--page-margin-right:6vw}}@media only screen and (width>=1921px){.responsive-wide-container{--page-margin-right:8vw}}@media only screen and (width>=2257px){.responsive-wide-container{--page-margin-right:10vw}}.responsive-wide-container footer{margin-right:calc(var(--baseline-2) - var(--page-margin-right))}@media only screen and (width<=991px){.responsive-wide-container footer{margin-right:0}}.responsive-wide-container .responsive-wide{column-gap:var(--baseline);row-gap:var(--baseline);flex-grow:1;grid-template-columns:200px 1fr;min-height:80vh;display:grid}@media only screen and (width<=991px){.responsive-wide-container .responsive-wide{grid-template-rows:auto 1fr;grid-template-columns:1fr;justify-items:start}}@media only screen and (width>=1441px){.responsive-wide-container .responsive-wide{grid-template-columns:16% 1fr}}.responsive-wide-container .responsive-wide-content{margin:0 0 var(--baseline);width:100%}.responsive-wide-container .responsive-wide-content header{margin-bottom:var(--baseline-2);grid-area:header}@media only screen and (width>=768px) and (width<=991px){.responsive-wide-container .responsive-wide-content header{margin-bottom:var(--baseline)}}@media only screen and (width<=767px){.responsive-wide-container .responsive-wide-content header{margin-bottom:0}}.home-layout{column-gap:var(--baseline-2);row-gap:var(--baseline-1-5);max-width:calc(var(--max-text-width) * 8 / 5);grid-template:"center left""center right"1fr/5fr 3fr;margin:0 auto;display:grid}@media only screen and (width<=767px),only screen and (width>=992px) and (width<=1199px){.home-layout{grid-template-columns:1fr;grid-template-areas:"center""left""right"}}@media only screen and (width>=992px) and (width<=1199px){.home-layout{max-width:var(--max-text-width);margin:0 auto}}.main{grid-area:center}.introduction{grid-area:left}.details{grid-area:right}.full-frame-content{height:100%}#project-page{row-gap:var(--baseline);grid-template:"header""body"1fr/1fr;display:grid}#project-page #highlights{margin-bottom:var(--baseline-3)}#project-page section.project-section{margin-bottom:var(--baseline)}.grid-container{max-width:1920px;margin:0 auto}.grid-container .grid-highlights{column-gap:var(--baseline);row-gap:var(--baseline-2);grid-template-columns:1fr 1fr 1fr;display:grid}@media only screen and (width<=1440px){.grid-container .grid-highlights{grid-template-columns:1fr 1fr}}@media only screen and (width>=992px) and (width<=1199px){.grid-container .grid-highlights{grid-template-columns:1fr}}@media only screen and (width<=767px){.grid-container .grid-highlights{grid-template-columns:1fr}}.grid-container .grid{column-gap:var(--baseline);row-gap:var(--baseline);grid-template-columns:repeat(3,1fr);display:grid}@media only screen and (width>=1441px){.grid-container .grid{grid-template-columns:repeat(4,1fr)}}@media only screen and (width>=1921px){.grid-container .grid{grid-template-columns:repeat(5,1fr)}}@media only screen and (width<=1199px){.grid-container .grid{grid-template-columns:repeat(2,1fr)}}.sidebar-wide-narrow-grid{row-gap:var(--baseline);column-gap:var(--baseline-2);max-width:var(--max-text-width);grid-template:"header""top-side""hero"1fr"main""bottom-side"/1fr;margin:0 auto;display:grid}.sidebar-wide-narrow-grid.no-hero{grid-template-areas:"header""top-side""main""bottom-side"}@media only screen and (width>=1200px){.sidebar-wide-narrow-grid{column-gap:var(--baseline-3);grid-template:"header header""hero hero""main top-side""main bottom-side"1fr/7fr 3fr;max-width:50rem;margin:0 auto}.sidebar-wide-narrow-grid.no-hero{grid-template-rows:auto auto 1fr;grid-template-areas:"header header""main top-side""main bottom-side"}}@media only screen and (width>=1441px){.sidebar-wide-narrow-grid{grid-template-columns:minmax(auto, var(--max-text-width)) 14rem;grid-template-rows:auto auto auto 1fr;max-width:59rem}}.sidebar-wide-narrow-grid section.introduction{grid-area:top-side}.sidebar-wide-narrow-grid section.introduction hr{display:none}@media only screen and (width>=768px) and (width<=1199px){.sidebar-wide-narrow-grid section.introduction .introduction-content{columns:2}}@media only screen and (width<=1199px){.sidebar-wide-narrow-grid section.introduction hr{display:block}}.sidebar-wide-narrow-grid section.details{margin-top:var(--neg-baseline);grid-area:bottom-side}.sidebar-wide-narrow-grid section.main{max-width:var(--max-text-width);grid-area:main}.sidebar-wide-narrow-grid figure.hero{grid-area:hero}.one-column{grid-template-areas:".header."".content.";grid-template-columns:1fr minmax(auto, var(--max-text-width)) 2fr;row-gap:var(--baseline);grid-template-rows:auto 1fr;display:grid}.one-column header{margin-bottom:var(--baseline-2);grid-area:content}.one-column .main{grid-area:content}.one-column .main article:first-child h2{margin-top:0}#about .main-side-layout{row-gap:var(--baseline);column-gap:var(--baseline);max-width:var(--max-text-width);grid-template-columns:1fr;grid-template-areas:"header""main""sidebar""bottom";margin:0 auto;display:grid}#about .main-side-layout .main-side_main{grid-area:main}#about .main-side-layout .main-side_sidebar{flex-flow:wrap;grid-area:sidebar;align-content:flex-start;align-items:center;display:flex}#about .main-side-layout .main-side_bottom{column-gap:var(--baseline);grid-area:bottom;grid-template-columns:1fr;display:grid}@media only screen and (width<=991px){#about .main-side-layout{margin:0}}@media only screen and (width>=768px) and (width<=991px),only screen and (width>=1200px){#about .main-side-layout{grid-template:"header header""main sidebar""bottom bottom"1fr/2fr 1fr;max-width:50rem}#about .main-side-layout .main-side_main{padding-right:var(--baseline)}#about .main-side-layout .main-side_bottom{grid-template-columns:2fr 1fr}#about .main-side-layout .main-side_bottom #revision{columns:2;column-gap:var(--baseline)}}@media only screen and (width>=1441px){#about .main-side-layout{grid-template-columns:2fr 33rem 17rem 3fr;grid-template-areas:".header header."".main sidebar."".bottom bottom.";max-width:100%}}:root{--font-serif:"Bitter", sans-serif;--font-sans:"Inter Tight", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--baseline:1.5rem;--baseline-half:calc(.5 * var(--baseline));--baseline-1-5:calc(1.5 * var(--baseline));--baseline-2:calc(2 * var(--baseline));--baseline-3:calc(3 * var(--baseline));--neg-baseline-half:calc(-.5 * var(--baseline));--neg-baseline:calc(-1 * var(--baseline));--neg-baseline-2:calc(-2 * var(--baseline));--neg-baseline-3:calc(-3 * var(--baseline));--max-text-width:38em;--font-size-x-small:.8rem;--font-size-small:calc(1rem / 1.125);--font-size-step-half:1.067rem;--font-size-step-1:1.125rem;--font-size-step-2:1.25rem;--font-size-step-3:1.414rem;--font-size-step-5:2rem;--mobile-font-size:16px;--tablet-font-size:17px;--regular-font-size:18px;--wide-font-size:19px;--ultrawide-font-size:21px}html{color:var(--ink-primary);font-family:var(--font-serif);font-weight:460;font-size:var(--regular-font-size);line-height:1.5}@media only screen and (width<=991px){html{font-size:var(--tablet-font-size)}}@media only screen and (width<=767px){html{font-size:var(--mobile-font-size)}}@media only screen and (width>=1441px){html{font-size:var(--wide-font-size)}}@media only screen and (width>=1921px){html{font-size:var(--ultrawide-font-size)}}h1,h2,h3,h4{font-family:var(--font-sans);color:var(--ink-heading);text-shadow:1px 1px 0 var(--heading-emboss);margin:0;font-weight:650}h5,h6{font-family:var(--font-sans);color:var(--ink-heading);text-shadow:1px 1px 0 var(--heading-emboss);margin:0;font-weight:550}h1{font-size:var(--font-size-step-3);line-height:var(--baseline);margin-top:2.6rem;margin-bottom:var(--baseline-2)}h2{font-size:var(--font-size-step-2);line-height:var(--baseline);margin:var(--baseline-2) 0 var(--baseline)}h3{font-size:var(--font-size-step-1);line-height:var(--baseline);margin:var(--baseline) 0}h4{font-size:1rem;line-height:var(--baseline);margin-bottom:var(--baseline)}h5,h6{font-size:1rem;line-height:var(--baseline);margin-top:var(--baseline);margin-bottom:0}h1.title{margin:0 0 calc(var(--baseline) - .2rem) 0;margin-right:1rem}h2.title{margin-top:.05rem;margin-bottom:calc(var(--baseline) + .05rem)}h3.title{margin-top:.1rem;margin-bottom:calc(var(--baseline) + .1rem)}.top-aligned h1:first-child{margin:var(--baseline) 0 var(--baseline) 0}.top-aligned h2:first-child{margin-top:-.1rem;margin-bottom:calc(var(--baseline) + .1rem)}.top-aligned h5:first-child{margin-top:0}h1.baseline{font-size:var(--font-size-step-5);line-height:var(--baseline-2);margin-top:.45rem;margin-bottom:calc(var(--baseline) - .35rem)}article h2,article h3{font-family:var(--font-sans);font-weight:550}article h2{font-size:var(--font-size-step-1);line-height:var(--baseline)}article h3{font-size:var(--font-size-step-half);line-height:var(--baseline)}p{margin-bottom:var(--baseline-half);margin-top:0}p:last-child{margin-bottom:0}.small{font-size:var(--font-size-small);line-height:var(--baseline)}.secondary{color:var(--ink-secondary)}time{font-size:var(--font-size-small);line-height:var(--baseline);font-family:var(--font-sans);color:var(--ink-tertiary);font-weight:550;line-height:1rem}sup,sub{line-height:1}.lead-in{font-variant-caps:small-caps}.constrain-text{max-width:var(--max-text-width)}.no-mt{margin-top:0}.no-mb{margin-bottom:0}.column-wide{column-gap:var(--baseline-1-5);margin-bottom:var(--baseline-2)}@media only screen and (width>=768px){.column-wide{columns:2}}@media only screen and (width>=1441px){.column-wide{columns:3}}@media only screen and (width>=2257px){.column-wide{columns:4}}a{color:var(--ink-primary);text-decoration:underline;-webkit-text-decoration-color:var(--both-link);text-decoration-color:var(--both-link);transition:color .2s}a.no-underline{text-decoration:none}a:hover{color:var(--both-link);text-decoration:underline}a.waypoint:before{content:"➔ ";color:var(--both-link);margin-right:.5rem;text-decoration:none;transition:margin .15s;display:inline-block}a.waypoint:hover:before{margin-left:.25rem;margin-right:.25rem}a.waypoint.reversed:before{transform:scaleX(-1)}a.next:after{content:"➔";margin-left:.25em;font-size:.8em;text-decoration:none;display:inline-block}blockquote{color:var(--ink-secondary);margin-top:0;margin-bottom:var(--baseline);margin-inline:1.5em 0;font-style:italic;position:relative}blockquote:before{content:" ";border-left:2px solid var(--ink-tertiary);height:100%;display:block;position:absolute;left:-1em}:root{--astro-code-background:#fffffa;--astro-code-foreground:#586e75;--astro-code-token-comment:#657b83;--astro-code-token-keyword:#6c71c4;--astro-code-token-string:#859900;--astro-code-token-string-expression:#859900;--astro-code-token-constant:#cb4b16;--astro-code-token-function:#586e75;--astro-code-token-parameter:#586e75;--astro-code-token-punctuation:#93a1a1;--astro-code-token-link:#268bd2}pre.highlight{box-sizing:border-box;border:1px solid #0000000d;max-width:calc(100vw - 2rem);padding:.8rem;font-size:.8em;overflow-x:scroll}code{font-family:var(--font-mono);border-radius:3px;padding:.1rem .2rem;font-size:.875em}pre code{font-size:inherit;background-color:#0000;border-radius:0;padding:0}.glitch-word{--glitch-red:#ff2b4f;--glitch-blue:#006dff;isolation:isolate;display:inline-block;position:relative}.glitch-word:before,.glitch-word:after{content:attr(data-word);opacity:0;pointer-events:none;text-shadow:none;will-change:transform, clip-path, opacity;position:absolute;inset:0}.glitch-word:before{color:var(--glitch-red);z-index:-1}.glitch-word:after{color:var(--glitch-blue);z-index:-2}.glitch-word.is-glitching{color:color-mix(in srgb, currentColor var(--glitch-text-opacity,72%), transparent)}.glitch-word.is-glitching:before,.glitch-word.is-glitching:after{opacity:.9;clip-path:inset(var(--slice-top,12%) 0 var(--slice-bottom,64%) 0)}.glitch-word.is-glitching:before{transform:translate(calc(var(--x,2px) * -1), var(--y,0px))}.glitch-word.is-glitching:after{transform:translate(var(--x,2px), calc(var(--y,0px) * -1))}@media (prefers-reduced-motion:reduce){.glitch-word.is-glitching:before,.glitch-word.is-glitching:after{opacity:0}}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;scroll-behavior:smooth;height:100%;overflow:auto}body{box-sizing:border-box;min-height:100vh;margin:0;padding:.1px 0;position:relative}::selection{color:#fff;background:var(--both-selection)}hr{--dinkus-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 150 24'%3E%3Cpath d='M20 4V20M13.1 8L26.9 16M26.9 8L13.1 16M75 4V20M68.1 8L81.9 16M81.9 8L68.1 16M130 4V20M123.1 8L136.9 16M136.9 8L123.1 16' stroke='%23fff' stroke-width='2.6' stroke-linecap='round' fill='none'/%3E%3C/svg%3E");background-color:var(--ink-tertiary);width:4.375rem;height:.7rem;-webkit-mask-image:var(--dinkus-mask);-webkit-mask-image:var(--dinkus-mask);mask-image:var(--dinkus-mask);border:none;margin:3rem auto;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}footer{font-size:var(--font-size-small);line-height:var(--baseline);color:var(--ink-tertiary);margin:var(--baseline-2) 0 0;flex-direction:column;display:flex}@media only screen and (width>=768px){footer{grid-template-columns:1fr auto 1fr;display:grid}}footer .epigraph{font-style:italic}:is(ul,ol).flat li{margin-right:var(--baseline);display:inline-block}:is(ul,ol).no-bullet{margin-left:0;padding-left:0;list-style:none}:is(ul,ol) li p,:is(ul,ol) li:last-child{margin-bottom:0}ul,ol{margin-top:var(--baseline-half);margin-bottom:var(--baseline-half)}ul:first-child,ol:first-child{margin-top:0}ul li,ol li{margin-bottom:var(--baseline-half)}@media (prefers-reduced-motion:no-preference){nav.main-nav .title a:has(.glitch-word):hover{color:var(--ink-primary);text-decoration:none}}nav.main-nav ul{flex-wrap:wrap}nav.main-nav li{margin-bottom:var(--baseline-half);margin-left:var(--neg-baseline-half);margin-right:var(--baseline-half);max-width:200px}nav.main-nav li a{padding:calc(.25 * var(--baseline)) var(--baseline-half);border-radius:12px;display:block;overflow:hidden}nav.main-nav li a:hover{color:var(--ink-primary);text-decoration:none}@media only screen and (width<=991px){nav.main-nav li{margin-bottom:0}}.title a{text-decoration:none}.title a:hover{text-decoration:underline}nav{margin-bottom:0}nav ul{margin-top:calc(var(--baseline) - .2rem)}nav ul li{margin-bottom:var(--baseline);margin-right:var(--baseline);font-size:1rem;font-family:var(--font-sans);font-weight:425;display:block}nav ul li a{text-decoration:none}nav ul li a:hover{text-decoration:underline}@media only screen and (width<=991px){nav{flex-direction:row;align-items:baseline;display:flex}nav ul{flex-grow:1;margin:0;display:flex}nav ul li{display:inline-block}}@media only screen and (width<=767px){nav{flex-direction:column}nav ul li{margin-right:1rem;display:inline-block}}.bottom-nav{margin-top:var(--baseline-2)}.sidebar-nav{position:sticky;top:0;overflow:hidden}@media only screen and (width<=1199px){.sidebar-nav{display:none}}.sidebar-nav h5{margin-bottom:0}.sidebar-nav ul{margin:0;padding-inline-start:0;list-style:none}.sidebar-nav ul li{font-size:var(--font-size-small);line-height:var(--baseline);font-family:var(--font-serif);margin-bottom:0;font-weight:450;list-style:none}.sidebar-nav ul li a{color:var(--ink-primary);text-decoration:none}.sidebar-nav ul li a:hover{color:var(--both-link);text-decoration:underline}.sidebar-nav ul li a[aria-current=page]:before{content:"➔ ";color:var(--both-link)}.sidebar-nav ul ul{margin:0;padding-inline-start:0}section.content-list:first-of-type{margin-bottom:calc(.75 * var(--baseline))}.short-post{margin-bottom:0;margin-left:var(--neg-baseline-half);margin-right:var(--neg-baseline-half)}.short-post:first-child{margin-top:var(--neg-baseline-half)}.short-post .title{line-height:1}.short-post .rating{color:var(--ink-tertiary);font-size:var(--font-size-small);line-height:var(--baseline);vertical-align:top;margin-right:.5rem}.short-post a{padding:var(--baseline-half);border-radius:12px;text-decoration:none;display:block;overflow:hidden}.short-post a h5{-webkit-text-decoration-color:var(--both-link);text-decoration-color:var(--both-link);margin-top:0;margin-right:.5rem;display:inline}.short-post a p{color:var(--ink-primary)}.short-book{margin-bottom:var(--baseline);grid-template-columns:2fr 1fr 9em;gap:0 5px;display:grid}@media only screen and (width<=767px){.short-book{grid-template-rows:1fr 1fr;grid-template-columns:1fr 180px}}.short-book a{text-decoration:none}@media only screen and (width<=767px){.short-book .title{grid-column:1/-1}}.short-book h5{vertical-align:top;-webkit-text-decoration-color:var(--both-link);text-decoration-color:var(--both-link);margin-top:0;margin-right:.3rem;display:inline}.short-book .author{font-family:var(--font-sans);font-weight:550;font-size:var(--font-size-small);line-height:var(--baseline);color:var(--ink-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.short-book .rating-time{text-align:center}.short-book .rating{font-size:var(--font-size-small);line-height:var(--baseline);color:var(--ink-secondary);margin-right:.3rem}.short-book .rating.unfinished,.short-book .rating.reading{font-family:var(--font-sans);font-weight:550;font-size:var(--font-size-small);line-height:var(--baseline);color:var(--ink-tertiary);text-align:right}.short-book .review{font-size:var(--font-size-small);line-height:var(--baseline);color:var(--ink-secondary);text-decoration:underline;display:inline-block}.portfolio-item img,.portfolio-item .billboard-placeholder{object-fit:cover;border-radius:8px;width:100%;transition:box-shadow .15s,transform .15s,filter .5s}.portfolio-item:not(.featured) img,.portfolio-item .billboard-placeholder{aspect-ratio:21/9;display:block}.portfolio-item:not(.featured) img{filter:brightness(.8)contrast(.9)}.portfolio-item:not(.featured) a:hover img{filter:brightness()contrast()}.portfolio-item.featured img{min-height:380px;max-height:420px}@media only screen and (width<=991px){.portfolio-item.featured img{height:320px;min-height:320px}}@media only screen and (width<=767px){.portfolio-item.featured img{height:270px;min-height:270px}}.portfolio-item .billboard-placeholder{background:linear-gradient(135deg, color-mix(in srgb, var(--edge-accent-1) 22%, transparent), color-mix(in srgb, var(--edge-accent-3) 22%, transparent)), var(--state-hover)}.portfolio-item summary{padding-left:2px}.portfolio-item summary .year,.portfolio-item summary .type-and-year{font-family:var(--font-sans);color:var(--ink-tertiary);font-weight:450}.portfolio-item summary .type-and-year{font-size:var(--font-size-x-small);line-height:var(--baseline);margin-bottom:0}.portfolio-item h5{margin-top:var(--baseline-half)}.portfolio-item p{color:var(--dark-ink-secondary);transition:color .15s}.portfolio-item a{padding:calc(.4 * var(--baseline));margin:0 calc(-.4 * var(--baseline));border-radius:12px;text-decoration:none;transition:background-color .2s ease-in,transform .4s ease-in,box-shadow .23s ease-in;display:block;position:relative;overflow:hidden}.mat-item a{cursor:default;transition:box-shadow .23s ease-in,background-color .2s ease-in,transform .3s ease-in}.mat-item a .mat-item-splash{z-index:-1;background-color:var(--state-hover);width:100%;height:100%;transition:background-color .2s ease-in,transform .3s ease-in;position:absolute;top:0;left:0;transform:scale(0)}.mat-item a.no-js:hover{background-color:var(--state-hover)}.mat-item a:hover{transform:scale(1.015);box-shadow:0 0 15px #0000001a}.mat-item.mat-md:hover a{transform:scale(1.03)}ul.tags{margin:0}ul.tags li{font-size:var(--font-size-small);line-height:var(--baseline);margin:0}@media only screen and (width<=1199px){ul.tags li{margin-right:var(--baseline-half);display:inline-block}}section[data-footnotes]{font-size:var(--font-size-small);line-height:var(--baseline);columns:2;column-fill:balance;column-gap:1rem;margin-top:1rem;padding-top:1rem;padding-right:1rem}@media only screen and (width<=767px){section[data-footnotes]{columns:1}}section[data-footnotes] ol{counter-reset:level1;margin-top:0;padding-inline-start:1.2rem;list-style-type:none}section[data-footnotes] ol li{break-inside:avoid;margin-bottom:var(--baseline)}section[data-footnotes] ol li:before{content:counter(level1) " ";counter-increment:level1;float:left;color:var(--ink-secondary);margin-left:-1.2rem;font-size:.8rem;font-weight:600}section[data-footnotes] #footnote-label{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}aside{margin:0rem var(--neg-baseline-2) var(--baseline) var(--baseline);float:right;max-width:50%;padding-top:1rem;font-size:1.3rem;position:relative}aside:before{content:" ";background-color:var(--both-link);width:2em;height:3px;margin:0;display:block;position:absolute;top:.3rem}aside.left{float:left;margin-left:var(--neg-baseline);margin-right:var(--baseline);text-align:right}aside.left:before{right:0}@media only screen and (width<=767px){aside,aside.left{float:none;text-align:center;margin:var(--baseline) auto;max-width:80%}:is(aside,aside.left):before{left:calc(50% - 1em)}}figcaption{text-align:left;font-family:var(--font-sans);color:var(--ink-secondary);font-weight:450;font-size:var(--font-size-small);line-height:var(--baseline);margin-top:.5rem}figure.image,figure.video,figure.app-frame,figure.sequence,figure.phones,figure.framed-ss{width:calc(100% + var(--baseline-2));margin:2rem var(--neg-baseline)}@media only screen and (width<=767px){figure.image,figure.video,figure.app-frame,figure.sequence,figure.phones,figure.framed-ss{margin:var(--baseline) 0;width:100%;padding:0}figure.image{margin:0;padding:10px 0}}figure.image img,figure.image iframe{border:1px solid var(--edge-figure);box-sizing:border-box;width:100%}figure.image iframe{height:100%;margin:0;display:block}figure.image .embed-frame{width:100%}figure.image a.zoom{cursor:zoom-in}figure.image.framed img,figure.image.framed .embed-frame{outline-offset:-3rem;box-shadow:0 0 0 1px var(--edge-figure);box-sizing:border-box;border:none;outline:3rem solid #fff;padding:3rem}@media only screen and (width<=767px){figure.image.framed img,figure.image.framed .embed-frame{outline-width:0}}figure.image.framed iframe{border:none}figure.image.iframe-embed{line-height:0}figure.image.iframe-embed .embed-frame{overflow:hidden}figure.video{line-height:0}figure.video .video-container{position:relative}figure.video video{width:100%}figure.video .cover{background:#05003540;width:100%;height:100%;transition:opacity .3s ease-in;position:absolute;top:0;left:0}figure.video .play-button{z-index:1;background:url(/assets/images/ui/play-button.svg) 50% no-repeat;width:50px;height:50px;position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}figure.video figcaption{margin-top:1rem}figure.app-frame,figure.sequence{text-align:center;background:#fafafa;border:1px solid #0000000d;line-height:0;display:block}:is(figure.app-frame,figure.sequence) a.app-frame-bg{max-width:90%;margin:var(--baseline-1-5) auto;cursor:zoom-in;display:block}:is(figure.app-frame,figure.sequence) img{width:100%;box-shadow:0 0 2rem #00000014}:is(figure.app-frame,figure.sequence) figcaption{margin:var(--baseline)}figure.sequence,figure.sequence .btn-container{position:relative}figure.sequence .scroll-container{overflow-x:hidden}figure.sequence .bottom-indicator{flex-direction:row;justify-content:center;gap:6px;height:3px;display:flex;position:absolute;bottom:6px;left:10px;right:10px}figure.sequence .bottom-indicator .indicator{background-color:#0000001a;border-radius:1.5px;flex:1;max-width:100px;height:100%}figure.sequence .bottom-indicator .indicator.active{background-color:var(--both-link)}figure.sequence .control{z-index:100;background:0 0;border:none;width:80px;height:160px;padding:0;transition:all .2s;position:absolute;top:calc(50% - 80px)}figure.sequence .control:hover{transform:scale(1.1)}figure.sequence .control:active{transform:scale(1)}figure.sequence .control.prev-button{background:url(/assets/images/ui/left-page.svg) 100% no-repeat;left:0}figure.sequence .control.next-button{background:url(/assets/images/ui/right-page.svg) 0 no-repeat;right:0}figure.sequence .img-container{flex-direction:row;display:flex}figure.sequence .img-container img{width:90%;margin:0 auto}figure.sequence .caption-container{display:none}figure.sequence figcaption{margin-top:0;display:flex}figure.sequence figcaption .counter{flex-grow:0;flex-shrink:0;width:2.5em;display:inline-block}figure.hero{margin:0 0 var(--baseline);display:block}figure.hero img{width:100%}@media only screen and (width>=768px) and (width<=991px){figure.hero{margin:var(--baseline) var(--neg-baseline);width:calc(100% + var(--baseline-2));padding:0}}figure.hero img.border{border:1px solid #0000001a}iframe{margin:3rem auto}figure.phones{justify-content:space-around;display:flex}:is(figure.phones,figure.no-border) img,:is(figure.phones,figure.no-border) iframe,:is(figure.phones,figure.no-border) .embed-frame{border:none}img.mobile{display:none}@media only screen and (width<=767px){img.desktop.mobile-enabled{display:none}img.mobile{display:block}}.phone{position:relative}@media only screen and (width<=767px){.phone{margin:0 5px}}.phone .device{width:100%}@media only screen and (width<=767px){.phone .device{display:none}}.phone .screen{border:1px solid #bbb;border-radius:3px;width:77%;height:72%;line-height:0;position:absolute;top:13%;left:11%;overflow:hidden}@media only screen and (width<=767px){.phone .screen{border-color:#eee;width:100%;height:100%;position:static;box-shadow:0 0 20px #0000000d}}.phone .screen img{width:100%;height:100%}.browser{background:#e1dfe1;border:1px solid #eee;border-radius:10px 10px 3px 3px;overflow:hidden;box-shadow:0 0 20px #0000000d}@media only screen and (width<=767px){.browser{max-width:360px;margin:0 auto}}.browser:before{content:"";background:url(/assets/images/ui/traffic-light.svg) -5px -10px no-repeat;width:100%;height:30px;display:block}.browser .screen{background:#fff;min-height:150px}.browser .screen img{vertical-align:bottom;width:100%}dialog.lightbox{cursor:zoom-out;background:0 0;border:none;outline:none;max-width:none;max-height:none;padding:0;overflow:visible}dialog.lightbox::backdrop{backdrop-filter:blur(12px);cursor:zoom-out;background:#0000001a}dialog.lightbox img{width:min(100vw - var(--baseline-2), (100dvh - var(--baseline-2)) * var(--aspect-ratio));transform-origin:0 0;height:auto;display:block}#contact-info .grid-list{grid-column-gap:var(--baseline-half);grid-row-gap:var(--baseline-half);grid-template-columns:1fr 1fr;max-width:350px;display:grid}#contact-info .grid-list li{display:contents}#contact-info .link-out{color:var(--ink-tertiary);margin-left:.1em;font-weight:450;position:relative;top:.1em}#contact-info a{font-family:var(--font-sans);color:var(--ink-secondary);font-weight:450;font-size:var(--font-size-small);line-height:var(--baseline);text-decoration:none}#contact-info a:hover{color:var(--both-link);text-decoration:underline}#contact-info a:hover .link-out{color:var(--both-link)}#contact-info ul{margin:var(--baseline-half) 0}#contact-info .reading{margin-bottom:var(--baseline)}#four-oh-four{justify-content:center;align-items:center;width:100%;height:100%;display:flex}#four-oh-four h1{color:#fff;font-size:20rem}@media only screen and (width<=1199px){#four-oh-four h1{font-size:12rem}}@media only screen and (width<=767px){#four-oh-four h1{font-size:8rem}}#about-profile-picture{margin-right:var(--baseline)}#micro:before{content:" ";background:linear-gradient(to right, var(--edge-accent-1), var(--edge-accent-2), var(--edge-accent-3), var(--edge-accent-4));width:2.5rem;height:1px;margin-bottom:var(--baseline);opacity:.25;display:block}section.unfiltered{margin-bottom:var(--baseline-3)}section.unfiltered:first-of-type h2{margin-top:0}section.unfiltered .posted{margin-top:var(--baseline)}
