/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-normal:400;--font-weight-bold:700;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base{:root{--bg:#1a1b26;--bg-dark:#16161e;--panel:#1f2335;--panel-hi:#292e42;--fg:#c0caf5;--fg-dim:#a9b1d6;--comment:#565f89;--line:#2a2e42;--blue:#7aa2f7;--cyan:#7dcfff;--purple:#bb9af7;--green:#9ece6a;--yellow:#e0af68;--orange:#ff9e64;--red:#f7768e;--paper:var(--bg);--card:var(--panel);--ink:var(--fg);--muted:var(--fg-dim);--faint:var(--comment);--accent:var(--blue);--accent-soft:var(--panel-hi);--lorem:var(--comment);--maxw:64rem;--gap:clamp(1.5rem, 4vw, 3rem);--radius:10px;--font:"Fira Code", "Iosevka", "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--serif:var(--font)}:root[data-theme=light]{--bg:#e1e2e7;--bg-dark:#d4d6e3;--panel:#e9e9ed;--panel-hi:#dcdce2;--fg:#3760bf;--fg-dim:#6172b0;--comment:#848cb5;--line:#c4c8da;--blue:#2e7de9;--cyan:#007197;--purple:#9854f1;--green:#587539;--yellow:#8c6c3e;--orange:#b15c00;--red:#f52a65}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;overflow-x:hidden}body{font-family:var(--font);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;max-width:100%;padding-bottom:2rem;font-size:15px;line-height:1.6;overflow-x:hidden}::selection{background:var(--panel-hi);color:var(--cyan)}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}}@layer components{.cv{max-width:var(--maxw);margin:0 auto;padding:0 1.25rem 3rem}section[id]{scroll-margin-top:2rem}.prompt:before{content:"~/ ";color:var(--green)}.kw{color:var(--purple)}.fn{color:var(--blue)}.str{color:var(--green)}.num{color:var(--orange)}.cmt{color:var(--comment);font-style:italic}.cursor{vertical-align:text-bottom;background:var(--cyan);width:.6ch;height:1.05em;margin-left:2px;animation:1.1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.hero{padding:2.75rem 0 1.5rem}.hero__stage{height:56vh;min-height:420px;margin-top:.8rem;position:relative}.hero__inner{z-index:2;pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.hero__inner a{pointer-events:auto}.hero__bg{z-index:0;position:absolute;inset:0}.hero__fg{z-index:1;pointer-events:none;position:absolute;inset:0}.pill{border:1px solid var(--blue);align-items:center;gap:.5rem;padding:.25rem .7rem;font-size:.8rem;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.pill{border:1px solid color-mix(in srgb, var(--blue) 35%, transparent)}}.pill{color:var(--blue);background:var(--blue);border-radius:999px}@supports (color:color-mix(in lab, red, red)){.pill{background:color-mix(in srgb, var(--blue) 10%, transparent)}}.hero__head{letter-spacing:-.01em;color:var(--fg);margin-top:1.25rem;font-size:clamp(2rem,5.5vw,3.25rem);font-weight:700;line-height:1.08}.hero__sub{color:var(--fg-dim);max-width:40rem;margin:1.1rem auto 0;font-size:1.02rem}.hero__meta{text-align:left;grid-template-columns:auto auto;gap:.4rem 1.1rem;margin:0;font-size:.98rem;display:inline-grid}.hero__meta dt{color:var(--comment)}.hero__meta dt:after{content:":"}.hero__meta dd{color:var(--fg);font-weight:600}.hero__cta{flex-wrap:wrap;justify-content:center;gap:.75rem;margin-top:1.6rem;display:flex}.btn{font:inherit;border:1px solid var(--line);color:var(--fg);background:var(--panel);cursor:pointer;border-radius:8px;padding:.5rem 1rem;font-size:.9rem}.btn:hover{border-color:var(--blue);color:var(--blue);text-decoration:none}.btn--primary{background:var(--blue);border-color:var(--blue);color:var(--bg);font-weight:600}.btn--primary:hover{background:var(--cyan);border-color:var(--cyan);color:var(--bg)}.btn--square{border-radius:0}.hero__top{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;display:flex}.win{border:1px solid var(--line);background:var(--bg-dark);border-radius:12px;overflow:hidden;box-shadow:0 20px 50px -20px #00000080}.win__bar{background:var(--panel);border-bottom:1px solid var(--line);align-items:center;gap:.6rem;padding:.55rem .8rem;display:flex}.win__dot{border-radius:999px;width:.7rem;height:.7rem}.win__tab{color:var(--fg-dim);margin-left:auto;font-size:.78rem}.win__body{grid-template-columns:2.5rem 1fr;font-size:.85rem;display:grid}.win__gutter{text-align:right;color:var(--comment);-webkit-user-select:none;user-select:none;border-right:1px solid var(--line);background:var(--bg-dark);padding:1rem .6rem}.win__code{white-space:pre;color:var(--fg-dim);padding:1rem;overflow-x:auto}.win__gutter div,.win__code div{line-height:1.65}.sec{border-top:1px solid var(--line);padding:2.75rem 0}.sec__tag{color:var(--comment);font-size:.85rem}.sec__tag b{color:var(--purple);font-weight:600}.sec__title{color:var(--fg);margin-top:.4rem;font-size:clamp(1.4rem,3vw,1.9rem);font-weight:700}.sec__anchor{color:inherit;text-decoration:none}.sec__anchor:hover{color:var(--blue)}.sec__hash{color:var(--faint)}.sec__anchor:hover .sec__hash{color:var(--blue)}.sec__lead{color:var(--fg-dim);max-width:42rem;margin-top:.5rem}.fade-init{opacity:0;transition:opacity .6s,transform .6s;transform:translateY(18px)}.fade-init.fade-in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){.fade-init{opacity:1;transition:none;transform:none}}.grid3{gap:1rem;margin-top:1.75rem;display:grid}@media (min-width:40rem){.grid3{grid-template-columns:repeat(2,1fr)}}@media (min-width:60rem){.grid3{grid-template-columns:repeat(3,1fr)}}.card{border:1px solid var(--line);background:var(--panel);border-radius:0;padding:1.1rem;transition:border-color .15s,transform .15s}.card:hover{border-color:var(--blue);transform:translateY(-2px)}.card__icon{color:var(--cyan);font-size:1.2rem}.card__title{color:var(--fg);margin-top:.5rem;font-weight:650}.card__body{color:var(--fg-dim);margin-top:.35rem;font-size:.92rem}.proof{border-left:3px solid var(--purple);margin-top:1.5rem;padding:.5rem 0 .5rem 1.1rem}.proof__q{color:var(--fg);font-size:1.15rem}.proof__who{color:var(--comment);margin-top:.6rem;font-size:.9rem}.logos{color:var(--comment);flex-wrap:wrap;gap:.6rem 1.5rem;margin-top:1.5rem;display:flex}.wants{gap:.6rem;margin-top:1.25rem;list-style:none;display:grid}.wants__item{color:var(--fg);padding-left:1.6rem;position:relative}.wants__item:before{content:"▸";color:var(--green);position:absolute;left:0}.cta{text-align:center;border:1px solid var(--line);background:var(--panel);border-radius:0;margin-top:1.5rem;padding:clamp(2rem,5vw,3.5rem)}.cta__head{color:var(--fg);font-size:clamp(1.5rem,3.5vw,2.2rem);font-weight:700}.cta__btn{border-radius:0;margin-top:1.5rem;display:inline-block}.slides{gap:1.5rem;margin-top:2.25rem;display:grid}@keyframes slideInL{0%{opacity:0;transform:translate(-26px)}to{opacity:1;transform:none}}@keyframes slideInR{0%{opacity:0;transform:translate(26px)}to{opacity:1;transform:none}}.slide--ph{opacity:0}.slide--in{animation:1.6s both slideInL}.slide--in.slide--right{animation:1.6s both slideInR}@keyframes flowIn{0%{opacity:0;transform:translate(-28px)}to{opacity:1;transform:none}}.flow--ph{opacity:0}.flow--in{animation:1.6s both flowIn}.slide__card{border:1px solid var(--line);background:var(--panel);border-left-width:3px;border-radius:0;padding:1.4rem 1.5rem;transition:border-color .15s,transform .15s}.slide__card:hover{transform:translateY(-2px)}@media (min-width:56rem){.slide__card{max-width:36rem}.slide--right .slide__card{margin-left:auto}}.slide__idx{color:var(--comment);font-size:.8rem}.slide__name{margin-top:.15rem;font-size:1.3rem;font-weight:700}.slide__kind{color:var(--cyan);margin-top:.1rem;font-size:.82rem}.slide__body{color:var(--fg-dim);margin-top:.7rem;font-size:.93rem}.slide__tags{flex-wrap:wrap;gap:.45rem;margin-top:.9rem;display:flex}.tag{color:var(--comment);border:1px solid var(--line);border-radius:6px;padding:.1rem .5rem;font-size:.76rem}.statusline{z-index:50;background:var(--panel-hi);border-top:1px solid var(--line);inset-inline:0;align-items:center;font-size:.8rem;display:flex;position:fixed;bottom:0}.statusline__hire{background:var(--yellow);color:var(--bg);letter-spacing:.02em;padding:.2rem 1.2rem;font-weight:700;text-decoration:none}.statusline__hire:hover{background:var(--orange);text-decoration:none}.statusline__spacer{flex:1}.statusline__email{text-align:center;color:var(--fg);flex:1;padding:.2rem .9rem;text-decoration:none}.statusline__email:hover{color:var(--cyan);text-decoration:none}.statusline__pdf{color:var(--fg);border-left:1px solid var(--line);padding:.2rem .9rem;font-size:.8rem;text-decoration:none}.statusline__pdf:hover{color:var(--cyan);text-decoration:none}.pdf-doc{color:#15161f;background:#fff;max-width:820px;margin:0 auto;padding:2.25rem 1.5rem 4rem;line-height:1.5}.pdf-dl{z-index:10;color:#fff;background:#2e7de9;border-radius:6px;padding:.45rem .85rem;font-size:.85rem;text-decoration:none;position:fixed;top:1rem;right:1rem;box-shadow:0 4px 14px -4px #0006}.pdf-dl:hover{background:#1a5fc4;text-decoration:none}.pdf-head h1{color:#15161f;font-size:2.1rem;font-weight:700;line-height:1.08}.pdf-title{color:#2e7de9;margin-top:2px;font-size:1.05rem;font-weight:600}.pdf-contact{color:#566083;margin-top:5px;font-size:.82rem}.pdf-contact a{color:#2e7de9}.pdf-summary{color:#2c3350;max-width:64ch;margin-top:.7rem;font-size:.92rem}.pdf-sec{margin-top:1.4rem}.pdf-sec>h2{color:#15161f;text-transform:uppercase;letter-spacing:.05em;border-bottom:2px solid #2e7de9;margin-bottom:.7rem;padding-bottom:3px;font-size:1rem;font-weight:700}.pdf-list{gap:.7rem;display:grid}.pdf-entry{break-inside:avoid}.pdf-entry-top{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.pdf-entry-name{color:#15161f;font-weight:700}.pdf-entry-client{color:#566083;font-weight:400}.pdf-entry-period{color:#566083;white-space:nowrap;font-size:.8rem}.pdf-entry-role{color:#2e7de9;margin-top:1px;font-size:.85rem}.pdf-entry-desc{color:#2c3350;margin-top:3px;font-size:.9rem}.pdf-entry-tech{color:#566083;margin-top:3px;font-size:.8rem}.pdf-skills{gap:.45rem;display:grid}.pdf-skillrow{grid-template-columns:7rem 1fr;align-items:start;gap:.6rem;display:grid}.pdf-skillcat{text-transform:uppercase;letter-spacing:.05em;color:#566083;padding-top:4px;font-size:.72rem}.pdf-blocks{flex-wrap:wrap;gap:4px;display:flex}.pdf-block{color:#15161f;border-radius:5px;padding:2px 8px;font-size:.78rem;font-weight:600;display:inline-block}.pdf-two p{color:#2c3350;font-size:.88rem}.pdf-two b{color:#15161f}.pdf-more{color:#566083;text-align:center;margin-top:1rem;font-weight:700}.pdf-more a{color:#2e7de9}}@layer utilities{.invisible{visibility:hidden}.visible{visibility:visible}.fixed{position:fixed}.static{position:static}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-5{margin-inline:calc(var(--spacing) * -5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-7{margin-top:calc(var(--spacing) * 7)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.h-4{height:calc(var(--spacing) * 4)}.h-\[960px\]{height:960px}.w-4{width:calc(var(--spacing) * 4)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.border{border-style:var(--tw-border-style);border-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-line{border-color:var(--line)}.border-l-accent{border-left-color:var(--accent)}.bg-card{background-color:var(--card)}.p-5{padding:calc(var(--spacing) * 5)}.align-middle{vertical-align:middle}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.text-accent{color:var(--accent)}.text-cyan{color:var(--cyan)}.text-faint{color:var(--faint)}.text-ink{color:var(--ink)}.text-muted{color:var(--muted)}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:opacity-70:hover{opacity:.7}}}@font-face{font-family:Fira Code;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/fira-code-latin-400-normal.woff2)format("woff2")}@font-face{font-family:Fira Code;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/fira-code-latin-500-normal.woff2)format("woff2")}@font-face{font-family:Fira Code;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/fira-code-latin-600-normal.woff2)format("woff2")}@font-face{font-family:Fira Code;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/fira-code-latin-700-normal.woff2)format("woff2")}@media print{.statusline,.win,.hero__cta,.cta__btn,.pdf-dl{display:none!important}body{background:#fff;padding-bottom:0}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}@page{size:A4;margin:12mm}.pdf-doc{color:#15161f;max-width:none;margin:0;padding:0;font-size:10pt;line-height:1.4}.pdf-head h1{font-size:19pt}.pdf-title{font-size:11pt}.pdf-summary{font-size:9.5pt}.pdf-sec{margin-top:.8rem}.pdf-sec>h2{margin-bottom:.4rem;font-size:11pt}.pdf-entry{break-inside:avoid}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}