@font-face{font-family:DM Mono;font-style:normal;font-weight:300;font-display:swap;src:url(/_next/static/media/8d0a1832fd3be0c8-s.p.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:DM Mono;font-style:normal;font-weight:300;font-display:swap;src:url(/_next/static/media/d7df244fe7b07b95-s.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:DM Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/64418ffc17e50301-s.p.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:DM Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/0e96d314a90a6138-s.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:DM Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/ba43ea3467e29870-s.p.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:DM Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/b7ea2ab4a8ad1f81-s.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:DM Mono Fallback;src:local("Arial");ascent-override:73.71%;descent-override:23.03%;line-gap-override:0.00%;size-adjust:134.59%}.__className_d5830f{font-family:DM Mono,DM Mono Fallback;font-style:normal}:root{color-scheme:dark;--bg:#122738;--bg-raised:#193549;--fg:#ffffff;--fg-soft:#d5e3f0;--fg-dim:#8fa8c2;--accent:#ffc600;--accent-soft:rgba(255,198,0,0.16);--accent-2:#80fcff;--blue:#0088ff;--green:#3ad900;--pink:#ff628c;--magenta:#fb94ff;--warn:var(--pink);--hold:var(--magenta);--rule:#1f4a6e;--selection:#0050a4;--font-mono:"DM Mono",ui-monospace,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;--fs:clamp(14px,0.85rem + 0.25vw,16px);--lh:1.6;--gutter:clamp(16px,5vw,96px);--maxw:110ch}*,:after,:before{box-sizing:border-box}html{background:var(--bg);-webkit-text-size-adjust:100%;scroll-padding-bottom:2rem}body{margin:0;min-height:100dvh;display:flex;flex-direction:column;font-family:var(--font-mono);font-size:var(--fs);line-height:var(--lh);color:var(--fg);background:radial-gradient(120% 70% at 50% -10%,rgba(0,136,255,.1),transparent 60%),var(--bg);padding-block:clamp(20px,4vh,44px) calc(112px + env(safe-area-inset-bottom));padding-inline:var(--gutter);-webkit-font-smoothing:antialiased}::selection{background:var(--selection);color:var(--fg)}a{color:var(--accent-2)}.masthead{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.5rem 2ch;padding-bottom:1rem;margin-bottom:1.5rem;border-bottom:1px solid var(--rule);position:relative}.masthead:after{content:"";position:absolute;left:0;bottom:-1px;width:6ch;height:1px;background:var(--accent)}.masthead__identity{display:flex;flex-direction:column;gap:.15rem;min-width:0}.masthead__name{margin:0;font-size:clamp(1.35rem,1rem + 1.6vw,2rem);font-weight:500;letter-spacing:-.01em;line-height:1.15;color:var(--fg);text-decoration:none}.masthead__name:focus-visible,.masthead__name:hover{color:var(--accent);outline:none}.masthead__tagline{color:var(--fg-dim);font-size:.95em}.masthead__tagline:before{content:"// ";color:var(--accent)}.masthead__status{display:flex;align-items:center;gap:1ch;color:var(--fg-dim);font-size:.8em;letter-spacing:.04em;text-transform:lowercase;white-space:nowrap}.masthead__status:before{content:"";width:.55em;height:.55em;border-radius:50%;background:var(--green);box-shadow:0 0 0 3px rgba(58,217,0,.18);animation:status-pulse 2.6s ease-in-out infinite}@media(max-width:520px){.masthead__status{display:none}}@keyframes status-pulse{0%,to{opacity:1;box-shadow:0 0 0 3px rgba(58,217,0,.18)}50%{opacity:.55;box-shadow:0 0 0 5px rgba(58,217,0,.08)}}.not-found{color:var(--fg-dim)}.not-found__err{color:var(--warn)}.not-found__cmd{color:var(--accent)}.ask{position:fixed;right:var(--ask-edge);bottom:calc(var(--ask-edge) + env(safe-area-inset-bottom, 0px));z-index:20;display:none;flex-direction:column;align-items:flex-end;gap:.6rem;cursor:auto;--ask-edge:clamp(12px,3vw,24px)}.ask--ready{display:flex;animation:ask-appear .48s ease-out both}.ask__launcher{order:2;-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0;padding:0;border:0;background:none;font:inherit;color:inherit;cursor:pointer;display:flex;flex-direction:column;align-items:flex-end;gap:.4rem}.ask__launcher:focus-visible{outline:none}.ask__label{padding:.3rem .7rem;border:1px solid var(--accent);border-radius:3px;background:var(--bg-raised);color:var(--accent);font-size:.85em;font-weight:500;letter-spacing:.02em;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none;box-shadow:0 4px 14px rgba(0,0,0,.35);transition:background-color .12s ease,color .12s ease;position:relative}.ask__label:after{content:"";position:absolute;right:18px;bottom:-5px;width:8px;height:8px;background:var(--bg-raised);border-right:1px solid var(--accent);border-bottom:1px solid var(--accent);transform:rotate(45deg)}.ask__button{position:relative;display:flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:50%;background:var(--accent);color:var(--bg);font-size:1em;font-weight:500;line-height:1;box-shadow:0 6px 22px rgba(255,198,0,.3),0 2px 8px rgba(0,0,0,.4);transition:transform .12s ease,box-shadow .12s ease}.ask__button:before{content:"";position:absolute;inset:0;border-radius:50%;border:2px solid var(--accent);animation:ask-ping 2.4s ease-out 3;pointer-events:none}.ask__launcher:hover .ask__button{transform:translateY(-2px);box-shadow:0 10px 28px rgba(255,198,0,.45),0 2px 8px rgba(0,0,0,.4)}.ask__launcher:focus-visible .ask__button{transform:translateY(-2px);box-shadow:0 0 0 3px var(--bg),0 0 0 5px var(--accent)}.ask__launcher:focus-visible .ask__label,.ask__launcher:hover .ask__label{background:var(--accent);color:var(--bg)}.ask__launcher:focus-visible .ask__label:after,.ask__launcher:hover .ask__label:after{background:var(--accent)}.ask--discovered .ask__button:before{animation:none}.ask--open .ask__label{display:none}.ask__panel{order:1;display:flex;flex-direction:column;width:min(400px,100vw - 2*var(--ask-edge));height:min(60vh,520px);border:1px solid var(--rule);border-radius:4px;background:var(--bg-raised);box-shadow:0 18px 48px rgba(0,0,0,.45);overflow:hidden;animation:ask-in .16s ease-out both}.ask__panel[hidden]{display:none}.ask__bar{justify-content:space-between;gap:1ch;padding:.5rem .75rem;border-bottom:1px solid var(--rule);font-size:.85em;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ask__actions,.ask__bar{display:flex;align-items:center}.ask__actions{gap:1.5ch}.ask__action{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;padding:.4rem;margin:-.4rem;font:inherit;font-size:inherit;color:var(--fg-dim);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:color .12s ease}.ask__action:focus-visible,.ask__action:hover{color:var(--accent);outline:none}.ask__action--close{font-size:1.3em;line-height:1}.ask__log{flex:1 1;overflow-y:auto;overscroll-behavior:contain;padding:.75rem;gap:.7rem;white-space:pre-wrap;overflow-wrap:anywhere;font-size:.9em}.ask__intro,.ask__log{display:flex;flex-direction:column}.ask__intro{gap:.75rem}.ask__line{margin:0}.ask__suggestions{display:flex;flex-direction:column;align-items:flex-start;gap:.4rem}.ask__suggestion{-webkit-appearance:none;-moz-appearance:none;appearance:none;max-width:100%;text-align:left;padding:.3rem .6rem;border:1px solid var(--rule);border-radius:3px;background:rgba(0,80,164,.18);color:var(--accent-2);font:inherit;font-size:inherit;cursor:pointer;transition:border-color .12s ease,color .12s ease}.ask__suggestion:before{content:"▸ ";color:var(--fg-dim)}.ask__suggestion:focus-visible,.ask__suggestion:hover{border-color:var(--accent);color:var(--accent);outline:none}.ask__msg{display:flex;gap:1ch;color:var(--fg-soft)}.ask__msg--user{color:var(--fg);font-weight:500}.ask__msg--error{color:var(--warn)}.ask__sigil{color:var(--green);font-weight:500;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ask__text{min-width:0}.ask__cursor{display:inline-block;width:1ch;height:1em;margin-left:1px;vertical-align:text-bottom;background:var(--fg);animation:caret-blink 1s step-end infinite}.ask__row{display:flex;align-items:flex-end;gap:1ch;padding:.5rem .75rem;border-top:1px solid var(--rule)}.ask__row:focus-within{border-top-color:var(--accent)}.ask__input{flex:1 1;min-width:0;min-height:1.5em;margin:0;padding:0;border:0;outline:none;resize:none;background:rgba(0,0,0,0);font:inherit;font-size:.9em;line-height:1.5;color:var(--fg)}.ask__input::placeholder{color:var(--fg-dim)}.ask__input::selection{background:var(--selection)}.ask__input:disabled{color:var(--fg-dim)}.ask__sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.ask__meta{display:flex;justify-content:flex-start;min-height:1.1em;padding:.2rem .75rem 0;font-size:.75em}.ask__count{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;color:var(--fg-dim);-webkit-user-select:none;-moz-user-select:none;user-select:none}.ask__count--full{color:var(--accent)}.ask__send{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;padding:0 0 .15rem;font:inherit;font-size:.85em;color:var(--accent-2);cursor:pointer;text-decoration:underline;text-underline-offset:.25em;-webkit-text-decoration-color:rgba(128,252,255,.4);text-decoration-color:rgba(128,252,255,.4);transition:color .12s ease,-webkit-text-decoration-color .12s ease;transition:color .12s ease,text-decoration-color .12s ease;transition:color .12s ease,text-decoration-color .12s ease,-webkit-text-decoration-color .12s ease}.ask__send:focus-visible:not(:disabled),.ask__send:hover:not(:disabled){color:var(--accent);-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;outline:none}.ask__send:disabled{color:var(--fg-dim);cursor:default;-webkit-text-decoration-color:rgba(0,0,0,0);text-decoration-color:rgba(0,0,0,0)}.ask__foot{margin:0;padding:0 .75rem .6rem;font-size:.72em;opacity:.8;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media(max-width:520px){.ask{left:var(--ask-edge)}.ask__panel{width:100%;height:min(70vh,560px)}.ask__input{font-size:max(16px,.9em)}}@keyframes ask-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes ask-appear{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes ask-ping{0%{opacity:.7;transform:scale(1)}70%,to{opacity:0;transform:scale(1.5)}}@media(prefers-reduced-motion:reduce){.ask--ready,.ask__cursor,.ask__panel{animation:none}.ask__launcher:focus-visible .ask__button,.ask__launcher:hover .ask__button{transform:none}.ask__button:before{animation:none}}.terminal{width:100%;max-width:var(--maxw);flex:1 0 auto;white-space:pre-wrap;overflow-wrap:anywhere;cursor:text}.terminal,.terminal__log{display:flex;flex-direction:column}.terminal__log{gap:.35rem}.terminal__boot{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 1ch;color:var(--fg);cursor:default}.terminal__boot-dots:after{content:"";display:inline-block;width:3ch;text-align:left;color:var(--fg-dim);animation:boot-dots .6s step-end infinite}.terminal--booting .terminal__hint,.terminal--booting .terminal__log,.terminal--booting .terminal__row{display:none}.terminal--revealing .terminal__hint,.terminal--revealing .terminal__log>.entry,.terminal--revealing .terminal__row{animation:boot-reveal .52s ease-out both}.terminal--revealing .terminal__log>.entry:first-child{animation-delay:0s}.terminal--revealing .terminal__log>.entry:nth-child(2){animation-delay:.14s}.terminal--revealing .terminal__log>.entry:nth-child(3){animation-delay:.28s}.terminal--revealing .terminal__log>.entry:nth-child(4){animation-delay:.42s}.terminal--revealing .terminal__log>.entry:nth-child(5){animation-delay:.56s}.terminal--revealing .terminal__log>.entry:nth-child(6){animation-delay:.7s}.terminal--revealing .terminal__row{animation-delay:.42s}.terminal--revealing .terminal__hint{animation-delay:.62s}.terminal__row{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 1ch;margin-top:.6rem;padding:.35rem 0;min-height:44px}.terminal__row .terminal__field{font-size:max(16px,1em)}.terminal__prompt{cursor:text;-webkit-user-select:none;-moz-user-select:none;user-select:none}.terminal__field{position:relative;flex:1 1 12ch;min-width:12ch;min-height:1.55em}.terminal__mirror{display:block;white-space:pre-wrap;overflow-wrap:anywhere;color:var(--fg);pointer-events:none;min-height:1.55em}.terminal__caret{display:inline-block;min-width:1ch;background:var(--fg-dim);color:var(--bg);line-height:1.3;border-radius:1px;transition:background-color .12s ease;background:rgba(0,0,0,0);color:var(--fg);box-shadow:inset 0 0 0 1px var(--fg-dim)}.terminal__row--focused .terminal__caret{background:var(--fg);color:var(--bg);box-shadow:none;animation:caret-blink 1s step-end infinite}.terminal__row--focused .prompt__sigil{color:var(--green)}.terminal__input{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:0;outline:none;background:rgba(0,0,0,0);font:inherit;line-height:inherit;letter-spacing:inherit;color:rgba(0,0,0,0);caret-color:rgba(0,0,0,0)}.terminal__input::selection{background:var(--selection)}.terminal__hint{margin:.25rem 0 0;color:var(--fg-dim);font-size:.8em;opacity:.8}.terminal__hint span{color:var(--accent-2)}@media(hover:none)and (pointer:coarse){.terminal__hint{display:none}}.terminal__end{height:1px;scroll-margin-bottom:1rem}@keyframes boot-dots{0%{content:""}25%{content:"."}50%{content:".."}75%{content:"..."}}@keyframes boot-reveal{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes caret-blink{0%,50%{background:var(--fg);color:var(--bg)}50.01%,to{background:rgba(0,0,0,0);color:var(--fg)}}.prompt{white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.prompt__user{color:var(--green)}.prompt__path{color:var(--accent-2)}.prompt__path:before{content:":";color:var(--fg-dim)}.prompt__sigil{color:var(--fg-dim);margin-left:1ch;font-weight:500;transition:color .12s ease}@media(max-width:640px){.prompt__path:before,.prompt__user{display:none}}.entry--command{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 1ch;margin-top:.6rem}.entry__text{color:var(--fg);font-weight:500}.entry__time{margin-left:auto;color:var(--fg-dim);font-size:.8em;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;opacity:.7}@media(max-width:420px){.entry__time{display:none}}.entry--output,.entry--system{color:var(--fg)}.entry--page{margin-top:.5rem;padding-bottom:.75rem}.entry--page:first-child,.entry--page:first-child .entry__rule{margin-top:0}.entry__rule{display:flex;align-items:center;gap:1ch;margin:.5rem 0 1.25rem;color:var(--accent);font-size:.85em;letter-spacing:.08em;text-transform:lowercase;-webkit-user-select:none;-moz-user-select:none;user-select:none}.entry__rule:before{content:"";width:2ch;height:1px;background:var(--accent)}.entry__rule:after{content:"";flex:1 1;height:1px;background:var(--rule)}.out__cmd{color:var(--accent)}.out__dim{color:var(--fg-dim)}.out__err{color:var(--warn)}.out__dir{color:var(--accent-2)}.out__ls{display:flex;flex-wrap:wrap;gap:0 3ch}.out__table{margin:0;display:grid;grid-template-columns:max-content 1fr;grid-column-gap:3ch;column-gap:3ch;grid-row-gap:.1rem;row-gap:.1rem}.out__table dd,.out__table dt{margin:0}@media(max-width:480px){.out__table{grid-template-columns:1fr}.out__table dd{padding-left:2ch;color:var(--fg-dim);margin-bottom:.3rem}}.out__row{display:contents}.page{padding-bottom:.5rem}.page__title{margin:0 0 .75rem;font-size:1.25em;font-weight:500;line-height:1.3;color:var(--fg);max-width:60ch}.page__p{margin:0 0 .75rem;max-width:72ch;color:var(--fg-soft)}.page__section{margin-top:1.6rem}.page__h{margin:0 0 .6rem;font-size:1em;font-weight:500;color:var(--accent)}.page__h:before{content:"## ";color:var(--fg-dim);font-weight:400}.page code,.page__highlight{color:var(--accent)}.page code{font-family:inherit}.page__list{list-style:none;margin:0 0 .9rem;padding-left:2ch;color:var(--fg-soft)}.page__list--work{margin-top:.9rem;margin-bottom:0}.page__list li{margin-bottom:.4rem}.page__list li:before{content:"▸ ";color:var(--accent-2)}.kv{margin:0;display:grid;grid-template-columns:max-content minmax(0,1fr);grid-column-gap:3ch;column-gap:3ch;grid-row-gap:.55rem;row-gap:.55rem}.kv--compact{row-gap:.35rem}.kv__row{display:contents}.kv__key{margin:0;color:var(--fg-dim);white-space:nowrap}.kv__key:after{content:":"}.kv__val{margin:0;color:var(--fg-soft);max-width:72ch}@media(max-width:560px){.kv{grid-template-columns:1fr;row-gap:0}.kv__key{margin-top:.55rem;font-size:.85em;letter-spacing:.04em}.kv__val{margin-bottom:.15rem}}.chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.5rem}.chips li{padding:0 .7ch;border:1px solid rgba(128,252,255,.35);border-radius:3px;color:var(--fg-soft);font-size:.9em;line-height:1.7;background:rgba(0,50,100,.4)}.work{list-style:none;margin:1.5rem 0 0;padding:0;display:flex;flex-direction:column;gap:1.75rem}.work__item{position:relative;padding:.9rem 0 .9rem 2ch;border-left:2px solid var(--rule);transition:border-color .16s ease}.work__item:hover{border-color:var(--accent)}.work__head{display:flex;flex-direction:column;gap:.25rem;margin-bottom:.6rem}.work__role{margin:0;font-size:1.1em;font-weight:500;color:var(--accent)}.work__meta{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem 1.5ch}.work__company{color:var(--fg-soft)}.work__badge{font-size:.78em;letter-spacing:.06em;padding:.05em .7ch;border:1px solid;border-radius:3px;line-height:1.5;white-space:nowrap;color:var(--accent-2)}.contact__link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;padding:0;margin:0;font:inherit;color:var(--accent-2);cursor:pointer;text-decoration:underline;text-underline-offset:.25em;-webkit-text-decoration-color:rgba(128,252,255,.4);text-decoration-color:rgba(128,252,255,.4);transition:color .12s ease,-webkit-text-decoration-color .12s ease;transition:color .12s ease,text-decoration-color .12s ease;transition:color .12s ease,text-decoration-color .12s ease,-webkit-text-decoration-color .12s ease}.contact__link:focus-visible,.contact__link:hover{color:var(--accent);-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;outline:none}.contact__note{display:block;color:var(--fg-dim);font-size:.85em}.projects{list-style:none;margin:1.5rem 0 0;padding:0;display:flex;flex-direction:column;gap:1.75rem}.projects__item{position:relative;padding:.9rem 0 .9rem 2ch;border-left:2px solid var(--rule);transition:border-color .16s ease}.projects__item:hover{border-color:var(--accent)}.projects__head{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem 1.5ch;margin-bottom:.6rem}.projects__index{color:var(--fg-dim);font-size:.85em}.projects__name{margin:0;font-size:1.1em;font-weight:500;color:var(--accent)}.projects__status{font-size:.78em;letter-spacing:.06em;padding:.05em .7ch;border:1px solid;border-radius:3px;line-height:1.5;white-space:nowrap}.projects__status--working{color:var(--green)}.projects__status--finished{color:var(--accent-2)}.projects__status--onhold{color:var(--hold)}.projects__status--abandoned{color:var(--warn)}.projects__desc{margin:0 0 .9rem;max-width:72ch;color:var(--fg-soft)}