.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}:root{--color-bg:#000;--color-fg:#f2f2f2;--color-text:#b8b8b8;--color-muted:#8a8a8a;--color-faint:#555;--color-rule:#ffffff29;--header-backing:#000000e6;--color-surface:#0d0d0d;--color-surface-line:#ffffff1a;--color-placeholder:#141414;--color-focus:#fff;--color-todo-bg:#ffcc0024;--color-todo-border:#c9a200;--color-strip-fg:#fff;--strip-scrim:linear-gradient(90deg, #0000008c 0%, #00000026 45%, #0000 70%), radial-gradient(9rem 3.5rem at 100% 100%, #0000008c, #0000);--strip-text-shadow:0 1px 12px #00000059;--strip-year-shadow:0 0 3px #0009, 0 1px 12px #00000080;--font-sans:var(--font-instrument-sans);--font-serif:var(--font-instrument-serif);--font-mono:var(--font-jetbrains-mono);--font-digits:var(--font-roboto-flex-digits);--fs-body:1.0625rem;--fs-small:.875rem;--fs-mono:.75rem;--fs-nav:1rem;--fs-home-nav:1.25rem;--fs-logo:1.5rem;--fs-logo-home:clamp(2.1rem, 6.5vw, 3.25rem);--fs-title:clamp(1.9rem, 5.5vw, 3.25rem);--fs-work-title:clamp(2rem, 4.4vw, 3.25rem);--fs-strip-title:clamp(1.35rem, 2.4vw, 1.9rem);--fs-step-title:clamp(1.3rem, 1.8vw, 1.75rem);--lh-body:1.65;--ls-title:.2em;--ls-mono:.04em;--fw-logo:500;--work-title-style:italic;--gutter:clamp(1rem, 3vw, 2.5rem);--content-max:1760px;--prose-max:68ch;--radius-strip:0px;--strip-cols:28;--strip-rows:4;--sidebar-cols:6;--sidebar-gap-cols:1;--header-rows:2;--heading-rows:3;--about-photo-cols:12;--overlay-width:78vw;--overlay-max-width:1100px;--overlay-gap-y:6vh;--overlay-blur:8px;--overlay-dim-strength:.55;--overlay-dim:rgb(0 0 0/var(--overlay-dim-strength));--dur-blur:1s;--dur-unblur:.65s;--ease-blur:cubic-bezier(.4, 0, .2, 1);--radius-panel:14px;--radius-media:4px;--panel-pad:clamp(1.25rem, 4vw, 3.5rem);--hero-max-height:70vh;--dur-title:.7s;--ease-title:cubic-bezier(.65, 0, .2, 1);--dur-cover:.65s;--ease-cover:cubic-bezier(.7, 0, .15, 1);--dur-fade:.38s;--ease-fade:ease;--dur-panel-in:.56s;--dur-panel-out:.32s;--dur-swap:.56s;--ease-swap:cubic-bezier(.65, 0, .25, 1);--swap-shift:64px;--panel-offset:48px;--dur-enter:.56s;--stagger-step:60ms;--stagger-max:10;--stagger-wait:.55;--index-scroll-min:.7s;--index-scroll-max:1.6s;--index-hold:.9s;--strip-dim:grayscale(.85) brightness(.55);--dur-strip-dim:.9s;--ease-strip-dim:cubic-bezier(.4, 0, .2, 1);--dur-guide:.8s;--guide-alpha:55%;--strip-hover-linger:.16s;--dur-hover:.35s;--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in:cubic-bezier(.5, 0, .75, 0);--dur-reduced:.16s;--bp-color:#fff;--bp-cell:40px;--bp-grid-alpha:14%;--page-grid-alpha:6%;--dur-blueprint:.72s;--ease-blueprint:cubic-bezier(.45, 0, .2, 1);--bp-hold:.15s;--bp-fade:1s;--scan-steps:14;--scramble-glyphs:"01<>/\\|=+*#_:;{}[]";--dur-scramble:.9s;--scramble-tick:70ms;--cursor-color:#fff;--cursor-cross:13px;--cursor-frame:30px;--cursor-frame-pad:8px;--cursor-bracket:9px;--cursor-lag:.2;--cursor-snap:6px;--field-radius:170px;--field-strength:34px;--field-swirl:.65;--field-dot:1.3px;--field-color:#ffffff52;--field-line-color:#ffffff80;--dur-home-slide:2.2s;--dur-home-morph:1.1s;--home-morph-strength:.14;--home-zoom:1.06;--home-loop-dim:#000c;--dur-home-loop-in:1.4s;--dur-cv-in:.8s;--dur-cv-out:.55s;--crack-color:#ffffffd9;--crack-glint:#ffffff73;--crack-count:22;--crack-shift:6px;--crack-reach:200px;--dur-crack:.3s;--ease-crack:cubic-bezier(.15, .9, .3, 1);--dur-heal:.75s;--ease-heal:cubic-bezier(.4, 0, .2, 1)}@media (width<=1024px){:root{--strip-cols:20;--about-photo-cols:9}}@media (width<=640px){:root{--strip-cols:10;--header-rows:3;--fs-body:1rem;--fs-title:clamp(1.6rem, 7.2vw, 1.9rem)}}@media (width<=1023px),(orientation:portrait) and (width<=1366px){:root{--sidebar-cols:0;--sidebar-gap-cols:0}}@property --row{syntax:"<length>";inherits:true;initial-value:40px}@property --col-w{syntax:"<length>";inherits:true;initial-value:0}@property --col-left{syntax:"<length>";inherits:true;initial-value:0}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scrollbar-gutter:stable;color-scheme:dark;background:var(--color-bg)}html[data-overlay-open]{overflow:hidden}body{isolation:isolate;min-height:100dvh;font-family:var(--font-sans);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--color-fg);background:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;margin:0;position:relative}img,video,iframe,svg{max-width:100%;display:block}img,video{height:auto}a{color:inherit;text-decoration:none}h1,h2,h3,p,figure,blockquote,dl,dd{margin:0}ul[role=list],ol[role=list]{margin:0;padding:0;list-style:none}:focus-visible{outline:2px solid var(--color-focus);outline-offset:3px;border-radius:2px}[data-quiet-focus]:focus-visible{outline:none}[data-vt-hidden]{visibility:hidden!important}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.skip-link{left:var(--gutter);z-index:100;background:var(--color-fg);color:var(--color-bg);padding:.5rem .9rem;position:absolute;top:.5rem;transform:translateY(-200%)}.skip-link:focus-visible{transform:none}.page{min-height:100dvh;position:relative;container-type:inline-size}.page>*{--col-w:calc(min(100cqi, var(--content-max)) - 2 * var(--gutter));--col-left:calc((100cqi - var(--col-w)) / 2);--row:calc(var(--col-w) / (2 * (var(--sidebar-cols) + var(--sidebar-gap-cols)) + var(--strip-cols)))}.page-grid{--grid-line:color-mix(in srgb, var(--bp-color) var(--page-grid-alpha), transparent);z-index:-1;pointer-events:none;background-image:linear-gradient(to right, var(--grid-line) 1px, transparent 1px), linear-gradient(to bottom, var(--grid-line) 1px, transparent 1px);background-size:var(--row) var(--row);background-position:var(--col-left) 0;position:absolute;inset:0}.todo{background:var(--color-todo-bg);outline:1px dashed var(--color-todo-border);outline-offset:2px;padding:0 .3em}[data-enter=stagger] .enter-item{animation:enter-scan var(--dur-enter) steps(var(--scan-steps), end) both;animation-delay:calc(var(--dur-title) * var(--stagger-wait) + min(var(--i,0), var(--stagger-max)) * var(--stagger-step))}[data-enter=stagger] .enter-rule{animation:enter-rule var(--dur-title) steps(var(--scan-steps), end) both;animation-delay:calc(var(--dur-title) * var(--stagger-wait) * .6)}@keyframes enter-scan{0%{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}@keyframes enter-rule{0%{transform:scaleX(0)}}::view-transition-group(*){animation-duration:var(--dur-title);animation-timing-function:var(--ease-title)}::view-transition-old(root),::view-transition-new(root){animation-duration:var(--dur-fade);animation-timing-function:var(--ease-fade)}::view-transition-old(.title),::view-transition-new(.title),::view-transition-old(.nav),::view-transition-new(.nav),::view-transition-old(.chrome),::view-transition-new(.chrome){height:100%}@property --vt-line{syntax:"<length>";inherits:false;initial-value:0}html[data-vt=chrome]::view-transition-old(root){mix-blend-mode:normal;animation:none}html[data-vt=chrome]::view-transition-new(root){mix-blend-mode:normal;-webkit-mask-image:linear-gradient(to right, #000 var(--vt-line), transparent var(--vt-line)), linear-gradient(to bottom, #000 var(--vt-line), transparent var(--vt-line));mask-image:linear-gradient(to right, #000 var(--vt-line), transparent var(--vt-line)), linear-gradient(to bottom, #000 var(--vt-line), transparent var(--vt-line));-webkit-mask-size:var(--bp-cell-w,var(--bp-cell)) var(--bp-cell-h,var(--bp-cell));mask-size:var(--bp-cell-w,var(--bp-cell)) var(--bp-cell-h,var(--bp-cell));-webkit-mask-position:var(--bp-x0,0px) var(--bp-y0,0px);mask-position:var(--bp-x0,0px) var(--bp-y0,0px);animation:vt-grid-build var(--dur-blueprint) var(--ease-blueprint) both}@keyframes vt-grid-build{0%{--vt-line:0px}12%{--vt-line:1px}to{--vt-line:max(var(--bp-cell-w,var(--bp-cell)), var(--bp-cell-h,var(--bp-cell)))}}::view-transition-group(.blueprint){z-index:10;animation:none}::view-transition-new(.blueprint),::view-transition-old(.blueprint){animation:none}::view-transition-group(.title),::view-transition-group(.nav),::view-transition-group(.chrome),::view-transition-group(.content){z-index:30}::view-transition-new(.content),::view-transition-old(.content){animation:none}html[data-vt=open]::view-transition-old(root){animation:vt-blur-in var(--dur-blur) var(--ease-blur) both;mix-blend-mode:normal}html[data-vt=open]::view-transition-new(root),html[data-vt=close]::view-transition-old(root){opacity:0;animation:none}html[data-vt=close]::view-transition-new(root){animation:vt-blur-out var(--dur-unblur) var(--ease-blur) both;mix-blend-mode:normal}@keyframes vt-blur-in{to{filter:blur(var(--overlay-blur)) brightness(calc(1 - var(--overlay-dim-strength)))}}@keyframes vt-blur-out{0%{filter:blur(var(--overlay-blur)) brightness(calc(1 - var(--overlay-dim-strength)))}}::view-transition-group(.cover){z-index:10;animation-duration:var(--dur-cover);animation-timing-function:var(--ease-cover)}::view-transition-old(.cover),::view-transition-new(.cover){object-fit:cover;height:100%;overflow:clip}::view-transition-new(.panel):only-child{animation:vt-scan-down var(--dur-panel-in) steps(var(--scan-steps), end) both, vt-panel-in var(--dur-panel-in) var(--ease-out) both}::view-transition-old(.panel):only-child{animation:vt-scan-up var(--dur-panel-out) steps(var(--scan-steps), end) both, vt-panel-out var(--dur-panel-out) var(--ease-in) both}@keyframes vt-scan-down{0%{clip-path:inset(0 0 100%)}to{clip-path:inset(0)}}@keyframes vt-scan-up{0%{clip-path:inset(0)}to{clip-path:inset(0 0 100%)}}::view-transition-group(.close){z-index:11}::view-transition-new(.close):only-child{animation:vt-fade-in var(--dur-panel-out) var(--ease-out) both;animation-delay:calc(var(--dur-cover) * .3)}::view-transition-old(.close):only-child{animation:vt-fade-out calc(var(--dur-panel-out) * .6) var(--ease-in) both}@keyframes vt-fade-in{0%{opacity:0}}@keyframes vt-fade-out{to{opacity:0}}@keyframes vt-panel-in{0%{opacity:0;transform:translateY(var(--panel-offset))}}@keyframes vt-panel-out{to{opacity:0;transform:translateY(var(--panel-offset))}}html[data-vt=swap]{--swap-dx:var(--swap-shift)}html[data-vt=swap][data-vt-dir=prev]{--swap-dx:calc(-1 * var(--swap-shift))}html[data-vt=swap]::view-transition-old(root),html[data-vt=swap]::view-transition-new(root){animation-duration:var(--dur-swap)}@media (width>=641px){html[data-vt=swap]::view-transition-old(work-backdrop),html[data-vt=swap]::view-transition-new(work-backdrop){opacity:0;animation:none}html[data-vt=swap]::view-transition-group(work-backdrop){backdrop-filter:none;animation:none}html[data-vt=swap]::view-transition-old(root),html[data-vt=swap]::view-transition-new(root){filter:blur(var(--overlay-blur)) brightness(calc(1 - var(--overlay-dim-strength)))}}::view-transition-group(.swap){z-index:10}html[data-vt=swap]::view-transition-old(.swap){animation:vt-swap-out var(--dur-swap) var(--ease-swap) both}html[data-vt=swap]::view-transition-new(.swap){animation:vt-swap-in var(--dur-swap) var(--ease-swap) both}html[data-vt=swap]::view-transition-new(.close){animation:none}@keyframes vt-swap-out{to{opacity:0;transform:translateX(calc(-1 * var(--swap-dx)))}}@keyframes vt-swap-in{0%{opacity:0;transform:translateX(var(--swap-dx))}}.bp{--bp-line:color-mix(in srgb, var(--bp-color) 80%, transparent);--bp-fade-start:calc(var(--dur-blueprint) + var(--bp-hold));z-index:-1;pointer-events:none;color:var(--bp-color);font-family:var(--font-mono);letter-spacing:var(--ls-mono);font-size:10px;line-height:1;position:fixed;inset:0}.bp-grid{--grid-line:color-mix(in srgb, var(--bp-color) var(--bp-grid-alpha), transparent);background-image:linear-gradient(to right, var(--grid-line) 1px, transparent 1px), linear-gradient(to bottom, var(--grid-line) 1px, transparent 1px);background-size:var(--bp-cell-w,var(--bp-cell)) var(--bp-cell-h,var(--bp-cell));background-position:var(--bp-x0,0px) var(--bp-y0,0px);animation:bp-in calc(var(--dur-blueprint) * .25) ease both, bp-out var(--bp-fade) ease-in-out var(--bp-fade-start) forwards;position:absolute;inset:0}.bp-svg{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.bp-svg .bp-draw{fill:none;stroke:var(--bp-line);stroke-width:1px;shape-rendering:crispedges;stroke-dasharray:1;stroke-dashoffset:1px;animation:bp-draw calc(var(--dur-blueprint) * .55) var(--ease-blueprint) var(--d,0s) both, bp-out var(--bp-fade) ease-in-out var(--bp-fade-start) forwards}.bp-svg .bp-faint{stroke:color-mix(in srgb, var(--bp-color) 30%, transparent);shape-rendering:geometricprecision}.bp-label{white-space:nowrap;animation:bp-in calc(var(--dur-blueprint) * .3) ease calc(var(--dur-blueprint) * .3 + var(--d,0s)) both, bp-out var(--bp-fade) ease-in-out var(--bp-fade-start) forwards;position:absolute}@keyframes bp-draw{0%{stroke-dashoffset:1px}to{stroke-dashoffset:0}}@keyframes bp-in{0%{opacity:0}}@keyframes bp-out{to{opacity:0}}@media (prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation-duration:var(--dur-reduced)!important;animation-delay:0s!important}[data-enter=stagger] .enter-item,[data-enter=stagger] .enter-rule{animation:none}*,:before,:after{transition-duration:.01ms!important}}.cursor[data-astro-cid-qmueewfo]{z-index:1000;pointer-events:none;mix-blend-mode:difference;color:var(--cursor-color);opacity:0;transition:opacity .2s;position:fixed;inset:0}.cursor[data-astro-cid-qmueewfo][data-active][data-visible]{opacity:1}.cursor[data-astro-cid-qmueewfo]>[data-astro-cid-qmueewfo]{will-change:transform;position:absolute;top:0;left:0}.cursor-corner[data-astro-cid-qmueewfo]{width:var(--cursor-bracket);height:var(--cursor-bracket);border:0 solid}.cursor-corner[data-astro-cid-qmueewfo][data-corner=tl]{border-top-width:1px;border-left-width:1px}.cursor-corner[data-astro-cid-qmueewfo][data-corner=tr]{border-top-width:1px;border-right-width:1px}.cursor-corner[data-astro-cid-qmueewfo][data-corner=bl]{border-bottom-width:1px;border-left-width:1px}.cursor-corner[data-astro-cid-qmueewfo][data-corner=br]{border-bottom-width:1px;border-right-width:1px}.cursor-cross[data-astro-cid-qmueewfo]{width:var(--cursor-cross);height:var(--cursor-cross);margin:calc(var(--cursor-cross) / -2) 0 0 calc(var(--cursor-cross) / -2)}.cursor-cross[data-astro-cid-qmueewfo]:before{content:"";transition:rotate .3s var(--ease-out);background:linear-gradient(currentColor,currentColor) 50%/1px 100% no-repeat,linear-gradient(currentColor,currentColor) 50%/100% 1px no-repeat;position:absolute;inset:0}.cursor[data-astro-cid-qmueewfo][data-pressed] .cursor-cross[data-astro-cid-qmueewfo]:before{rotate:45deg}.cursor-readout[data-astro-cid-qmueewfo]{font-family:var(--font-mono);letter-spacing:var(--ls-mono);white-space:nowrap;margin:14px 0 0 14px;font-size:10px;line-height:1}html:has(.cursor[data-active]),html:has(.cursor[data-active]) *{cursor:none!important}.logo[data-astro-cid-f7espo7c]{align-items:center;gap:.4em;font-weight:400;display:inline-flex}.logo-mark[data-astro-cid-f7espo7c]{text-align:left;flex-direction:column;align-items:flex-start;line-height:1.1;display:inline-flex}.logo--header[data-astro-cid-f7espo7c]{font-size:var(--fs-logo)}.logo--home[data-astro-cid-f7espo7c]{font-size:var(--fs-logo-home);position:relative}.logo-emblem[data-astro-cid-f7espo7c]{flex:none;width:auto;height:1.55em}.logo-mark[data-astro-cid-f7espo7c][data-cracked]{opacity:0}.logo--home[data-astro-cid-f7espo7c] .crack{pointer-events:none;position:absolute;inset:0}.logo--home[data-astro-cid-f7espo7c] .crack-shard{transition:transform var(--dur-heal) var(--ease-heal), filter var(--dur-heal) var(--ease-heal);margin:0;position:absolute}.logo--home[data-astro-cid-f7espo7c] .crack[data-open] .crack-shard{transform:translate(var(--shard-x), var(--shard-y)) rotate(var(--shard-rot));filter:brightness(var(--shard-light));transition-duration:var(--dur-crack);transition-timing-function:var(--ease-crack);transition-delay:var(--d,0s)}.logo--home[data-astro-cid-f7espo7c] .crack-lines{max-width:none;filter:drop-shadow(0 0 1.5px var(--crack-glint));--fade-x:linear-gradient(to right, transparent, #000 var(--crack-reach), #000 calc(100% - var(--crack-reach)), transparent);--fade-y:linear-gradient(to bottom, transparent, #000 var(--crack-reach), #000 calc(100% - var(--crack-reach)), transparent);-webkit-mask-image:var(--fade-x), var(--fade-y);-webkit-mask-composite:source-in;mask-image:var(--fade-x), var(--fade-y);opacity:0;transition:opacity var(--dur-heal) var(--ease-heal);position:absolute;overflow:visible;mask-composite:intersect}.logo--home[data-astro-cid-f7espo7c] .crack[data-open] .crack-lines{opacity:1;transition-duration:0s}.logo--home[data-astro-cid-f7espo7c] .crack-lines path{fill:none;stroke:var(--crack-color);stroke-width:var(--w,1);stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1px;transition:stroke-dashoffset var(--dur-heal) var(--ease-heal)}.logo--home[data-astro-cid-f7espo7c] .crack[data-open] .crack-lines path{stroke-dashoffset:0;transition:stroke-dashoffset var(--t,var(--dur-crack)) var(--ease-crack) var(--d,0s)}.logo--home[data-astro-cid-f7espo7c] .crack-lines circle{opacity:0;transition:opacity var(--dur-heal) var(--ease-heal)}.logo--home[data-astro-cid-f7espo7c] .crack[data-open] .crack-lines circle{opacity:1;transition:opacity calc(var(--dur-crack) / 3) var(--ease-crack)}.logo-word[data-astro-cid-f7espo7c]{font-weight:var(--fw-logo);letter-spacing:-.01em}.logo-sub[data-astro-cid-f7espo7c]{font-family:var(--font-mono);color:var(--color-muted);letter-spacing:var(--ls-mono);margin-top:.55em;font-size:.45em}@media (width<=640px){.logo--header[data-astro-cid-f7espo7c] .logo-sub[data-astro-cid-f7espo7c]{display:none}.logo--header[data-astro-cid-f7espo7c] .logo-emblem[data-astro-cid-f7espo7c]{height:.95em}}
