:root{--c-bg:#fbfbfb;--c-surface:#fff;--c-text:#141414;--c-muted:#6b6b6b;--c-code-muted:#616161;--c-border:#eaeaea;--c-code:#f3f3f3;--c-hover:#f5f5f5;--c-ink:#141414;--c-ink-hover:#3a3a3a;--c-on-ink:#fff;--c-accent:#1d5fa8;--c-accent-light:#e6effa;--c-accent-light-text:#174e8c;--c-fk:#854f0b;--c-error:#a32d2d;--h-green:#0f6e56;--h-green-bg:#e3f4ec;--h-blue:#1d5fa8;--h-blue-bg:#e6effa;--h-violet:#5b4bb7;--h-violet-bg:#eeebfa;--h-amber:#8a5a0b;--h-amber-bg:#faf0dd;--logo-lift:0%;--art-dim:1;color-scheme:light;--font-sans:"Inter", "Inter Fallback", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono", "JetBrains Mono Fallback", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--fw-regular:400;--fw-medium:500;--fs-xs:.75rem;--fs-sm:.8125rem;--fs-base:.9375rem;--fs-lg:clamp(1.625rem, 1.3rem + 1vw, 2rem);--fs-hero:clamp(1.75rem, 1.1rem + 2vw, 2.75rem);--fs-number:2rem;--lh-tight:1.2;--lh-base:1.65;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--sp-8:80px;--wrap:1080px;--gutter:24px;--radius:6px;--radius-lg:8px;--bw:1px;--dur:.16s}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--c-bg:#1e1e1e;--c-surface:#242424;--c-text:#ededed;--c-muted:#a0a0a0;--c-code-muted:#a0a0a0;--c-border:#343434;--c-code:#282828;--c-hover:#2b2b2b;--c-ink:#ededed;--c-ink-hover:#fff;--c-on-ink:#141414;--c-accent:#7fb2ee;--c-accent-light:#14273d;--c-accent-light-text:#b5d3f7;--c-fk:#e5a657;--c-error:#f09a9a;--h-green:#5dcaa5;--h-green-bg:#12352b;--h-blue:#7fb2ee;--h-blue-bg:#14273d;--h-violet:#a99bf0;--h-violet-bg:#241f43;--h-amber:#e5a657;--h-amber-bg:#3a2a12;--logo-lift:30%;--art-dim:.8;color-scheme:dark}}:root[data-theme=dark]{--c-bg:#1e1e1e;--c-surface:#242424;--c-text:#ededed;--c-muted:#a0a0a0;--c-code-muted:#a0a0a0;--c-border:#343434;--c-code:#282828;--c-hover:#2b2b2b;--c-ink:#ededed;--c-ink-hover:#fff;--c-on-ink:#141414;--c-accent:#7fb2ee;--c-accent-light:#14273d;--c-accent-light-text:#b5d3f7;--c-fk:#e5a657;--c-error:#f09a9a;--h-green:#5dcaa5;--h-green-bg:#12352b;--h-blue:#7fb2ee;--h-blue-bg:#14273d;--h-violet:#a99bf0;--h-violet-bg:#241f43;--h-amber:#e5a657;--h-amber-bg:#3a2a12;--logo-lift:30%;--art-dim:.8;color-scheme:dark}@font-face{font-family:Inter Fallback;src:local(Arial);size-adjust:107.4%;ascent-override:90.2%;descent-override:22.5%;line-gap-override:0%}@font-face{font-family:JetBrains Mono Fallback;src:local(Courier New);size-adjust:100%;ascent-override:102%;descent-override:30%;line-gap-override:0%}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{color:var(--c-text);font-family:var(--font-sans);font-size:var(--fs-base);font-weight:var(--fw-regular);line-height:var(--lh-base);-webkit-font-smoothing:antialiased;margin:0;overflow-x:hidden}h1,h2,h3,p,ul,ol,dl,dd,pre,figure{margin:0}h1,h2,h3{font-weight:var(--fw-regular);line-height:var(--lh-tight)}ul,ol{padding:0;list-style:none}a{color:var(--c-text);text-underline-offset:3px}a:hover{color:var(--c-muted)}:focus-visible{outline:2px solid var(--c-text);outline-offset:2px;border-radius:4px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{left:var(--sp-4);padding:var(--sp-2) var(--sp-3);background:var(--c-ink);color:var(--c-on-ink);border-radius:var(--radius);z-index:30;position:absolute;top:-100px}.skip-link:focus{top:var(--sp-3);color:var(--c-on-ink)}.placeholder{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--c-fk)}.wrap{max-width:calc(var(--wrap) + 2 * var(--gutter));padding-inline:var(--gutter);margin-inline:auto}main.wrap{padding-top:calc(var(--sp-8) + 5px)}.section{padding-block:calc(var(--sp-8) + var(--sp-4))}@media (width>=721px){.section{min-height:100svh;padding-block:var(--sp-8);align-content:center}body:before,body:after{content:"";z-index:10;height:var(--sp-7);pointer-events:none;position:fixed;left:0;right:0}body:before{background:linear-gradient(var(--c-bg) 30%, transparent);top:0}body:after{background:linear-gradient(transparent, var(--c-bg) 70%);bottom:0}}.section-title{font-size:var(--fs-lg);letter-spacing:-.02em;margin-bottom:var(--sp-5)}.section-lead{max-width:620px;color:var(--c-muted);margin-top:calc(-1 * var(--sp-4));margin-bottom:var(--sp-7);text-wrap:pretty;font-size:1.1875rem;line-height:1.6}.section-outro{color:var(--c-muted);max-width:62ch;margin-top:var(--sp-6)}.sub-title{font-size:var(--fs-base);font-weight:var(--fw-medium);margin:var(--sp-7) 0 var(--sp-3)}.arrow-link{font-size:var(--fs-sm);font-weight:var(--fw-medium);color:var(--c-text);align-items:center;gap:6px;text-decoration:none;display:inline-flex}.arrow-link:hover{color:var(--c-muted)}.arrow-link span{font-size:1.15em;line-height:1}.links{gap:var(--sp-2) var(--sp-5);margin-top:var(--sp-5);flex-wrap:wrap;display:flex}.intro{min-height:100svh;margin-top:calc(-1 * (var(--sp-8) + 5px));grid-template-columns:240px minmax(0,1fr);grid-template-rows:minmax(calc(var(--sp-8) + 5px), 1fr) repeat(4, auto) minmax(calc(var(--sp-8) + 5px), 1fr);align-items:start;gap:0 var(--sp-8);grid-template-areas:". ."".status""portrait text""portrait actions""facts facts""cue cue";display:grid}.intro-text,.intro .status{text-box:trim-both cap alphabetic}.intro .status{margin-bottom:var(--sp-6)}.intro-text{grid-area:text}.intro .portrait{align-self:center}.scroll-cue{padding:var(--sp-2);color:var(--c-muted);transition:color var(--dur);grid-area:cue;place-self:center}.scroll-cue:hover{color:var(--c-text)}.scroll-cue-mouse{border:1.5px solid;border-radius:11px;width:22px;height:34px;display:block;position:relative}.scroll-cue-mouse:before{content:"";background:currentColor;border-radius:2px;width:3px;height:7px;margin-left:-1.5px;animation:1.8s ease-in-out infinite scroll-cue;position:absolute;top:6px;left:50%}@keyframes scroll-cue{0%{opacity:0;transform:translateY(0)}20%{opacity:1}70%{opacity:0;transform:translateY(11px)}to{opacity:0;transform:translateY(11px)}}.portrait{object-fit:cover;background:var(--c-code);-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none;border-radius:50%;grid-area:portrait;width:240px;height:240px;display:block}.portrait-badge{--p:240px;--s:64px;width:var(--s);height:var(--s);padding:calc(var(--s) * .19);transform:translate(calc(var(--p) * .854 - var(--s) / 2), calc(var(--p) * .354));background:var(--c-surface);box-shadow:0 0 0 4px var(--c-bg), 0 6px 16px #00000014;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none;border-radius:50%;grid-area:portrait;place-self:center start;display:block}.iceberg{float:right;aspect-ratio:194/289;width:212px;height:auto;margin:6px 0 var(--sp-5) var(--sp-7);shape-outside:polygon(31% 0, 100% 0, 100% 100%, 44.3% 100%, 35.1% 91.3%, 20.6% 85.2%, 12.4% 76.1%, 2.1% 67.8%, 5.2% 60.2%, 0 52.6%, 6.2% 42.9%, 17.5% 35.3%, -15.5% 32.5%, -15.5% 30.1%, 31.2% 30.1%, 37.6% 22.8%) content-box;shape-margin:var(--sp-4);stroke-linecap:round;stroke-linejoin:round;-webkit-user-select:none;user-select:none;overflow:visible}.iceberg stop{stop-color:var(--h-blue)}.iceberg-line{fill:none;stroke-width:1.4px}.iceberg-below path{fill:url(#ib-depth);fill-opacity:calc(.76 + var(--o));stroke:#fff;stroke-opacity:.22;stroke-width:1px}.iceberg-tip path{fill:#b5d3f7}.iceberg-tip .iceberg-shade{fill:#7fb2ee}.iceberg-labels text{font-family:var(--font-mono);fill:var(--h-blue);text-anchor:middle;font-size:11px}.iceberg-labels text:nth-child(n+3){fill:#fff;fill-opacity:.92}.about-art{float:right;clear:right;height:auto;margin:6px 0 var(--sp-5) var(--sp-6);shape-margin:var(--sp-2)}.about-figure{float:none;clear:both;width:var(--w);max-width:100%;margin:var(--sp-6) 0 var(--sp-6) max(0px, calc((min(100%, 640px) - var(--w)) / 2));display:block}.about-art,.flow{stroke-linecap:round;stroke-linejoin:round;-webkit-user-select:none;user-select:none;overflow:visible}.robot{aspect-ratio:108/168;width:172px}.oop{aspect-ratio:200/186;shape-outside:polygon(31% 0, 100% 0, 100% 100%, 5% 100%, 5% 70%, 14% 57%, 31% 46%);width:230px}.pyperl{--w:414px;aspect-ratio:408/98}.flow{clear:right;width:100%;height:auto;margin-block:var(--sp-6);display:block}.art-shape{fill:var(--hue-bg);stroke:var(--hue);stroke-width:1.4px}.art-face{fill:var(--hue);fill-opacity:var(--o);stroke:var(--hue);stroke-width:1.2px}.art-line{fill:none;stroke:var(--hue);stroke-width:1.4px}.art-grain{fill:none;stroke:var(--hue);stroke-opacity:.45;stroke-width:1px}.art-dot{fill:var(--hue)}.art-tube{fill:none;stroke:var(--hue);stroke-width:10px}.art-tube-in{fill:none;stroke:var(--hue-bg);stroke-width:7.2px}.art-tube--thin{stroke-width:5.6px}.art-tube-in.art-tube--thin{stroke-width:2.8px}.art-label{font-family:var(--font-mono);fill:var(--hue);text-anchor:middle;font-size:11px}.art-base{fill:var(--c-bg)}.robot-body path:not(.art-base){fill:var(--c-muted);fill-opacity:var(--o);stroke:var(--c-text);stroke-opacity:.6;stroke-width:1.2px}.leaf-dots{fill:var(--hue);fill-opacity:calc(.45 * var(--art-dim))}.about-art .hue-green{--hue:color-mix(in srgb, var(--h-green) calc(var(--art-dim) * 100%), var(--c-bg))}.about-art .hue-blue{--hue:color-mix(in srgb, var(--h-blue) calc(var(--art-dim) * 100%), var(--c-bg))}.about-art .hue-violet{--hue:color-mix(in srgb, var(--h-violet) calc(var(--art-dim) * 100%), var(--c-bg))}.about-art .hue-amber{--hue:color-mix(in srgb, var(--h-amber) calc(var(--art-dim) * 100%), var(--c-bg))}.about-art .art-face{fill-opacity:calc(var(--o) * var(--art-dim))}.log-cracks{fill:none;stroke:color-mix(in srgb, var(--h-amber) 25%, #000);stroke-width:1.3px;stroke-linejoin:miter}.log-chips{fill:var(--h-amber)}.robot-axe path{stroke:currentColor;stroke-width:.35px;fill:currentColor}.axe-handle{color:color-mix(in srgb, var(--h-amber) 80%, var(--c-bg))}.axe-handle-dark{color:var(--h-amber)}.axe-blade{color:color-mix(in srgb, var(--h-green) 75%, var(--c-bg))}.axe-shine{color:var(--h-green-bg)}.axe-edge{color:var(--h-green)}.robot-tag rect{fill:var(--c-ink);fill-opacity:.6}.robot-tag text{font-family:var(--font-mono);fill:var(--c-on-ink);text-anchor:middle;font-size:7.5px}.art-arrow{fill:none;stroke:var(--c-muted);stroke-width:1.4px}.oop-grid{fill:none;stroke:var(--hue);stroke-opacity:.16;stroke-width:.8px}.oop-dash{stroke-dasharray:3 2.4}.oop-measure{stroke-width:1px;stroke-opacity:.55}.oop-smoke{stroke-opacity:.55}.oop-new{fill:var(--c-muted)}.snake-spots{fill:none;stroke:var(--hue);stroke-opacity:.5;stroke-width:2.4px;stroke-dasharray:0 6}.perl-logo{fill:color-mix(in srgb, var(--h-blue) 55%, var(--c-text))}.flow-sub{stroke-dasharray:3.4 3.4}.flow-title{text-anchor:start;font-size:12px}.flow-icon{stroke-width:2.6px}.outro{max-width:720px;display:flow-root}.outro-art{float:right;aspect-ratio:356/108;width:310px;max-width:100%;height:auto;margin:2px 0 0 var(--sp-5);stroke-linecap:round;stroke-linejoin:round;-webkit-user-select:none;user-select:none;overflow:visible}.outro-icon{stroke-width:2.24px}.outro-label{text-anchor:start}@media (width<=720px){.outro-art{float:none;margin:var(--sp-4) 0;display:block}}.status{font-size:var(--fs-xs);letter-spacing:.04em;text-transform:uppercase;color:var(--c-muted);white-space:nowrap;grid-area:status}.status-dot{width:7px;height:7px;margin-right:var(--sp-2);vertical-align:middle;background:var(--c-accent);border-radius:50%;display:inline-block}.status.is-unavailable .status-dot{background:var(--c-fk)}.intro-title{font-size:var(--fs-hero);letter-spacing:-.02em;line-height:1.18}.intro-sub{display:block}.intro-lead{max-width:520px;margin:var(--sp-4) 0 var(--sp-5);font-size:var(--fs-base);color:var(--c-muted);text-wrap:pretty}.intro .intro-title{font-size:clamp(2.5rem,1rem + 3.4vw,3.75rem)}.intro .intro-lead{max-width:620px;margin:var(--sp-6) 0 0;font-size:1.1875rem;line-height:1.6}.intro-actions{align-items:center;gap:var(--sp-3) var(--sp-6);margin-top:var(--sp-6);flex-wrap:wrap;grid-area:actions;display:flex}.intro-actions .btn{min-height:48px;font-size:var(--fs-base);padding-inline:28px;text-decoration:none}.btn.btn-go{gap:var(--sp-2);color:var(--c-bg);background:var(--c-accent);transition:background-color var(--dur), transform .2s ease, box-shadow .2s ease}.btn.btn-go:hover{color:var(--c-bg);background:color-mix(in srgb, var(--c-accent), var(--c-text) 14%);box-shadow:0 10px 24px -10px color-mix(in srgb, var(--c-accent) 70%, transparent);transform:translateY(-2px)}.btn.btn-go:active{box-shadow:none;transform:translateY(0)}.btn.btn-go:focus-visible{outline:2px solid var(--c-accent);outline-offset:3px}.btn-arrow{transition:transform .2s;display:inline-block}.btn-go:hover .btn-arrow{transform:translate(4px)}.intro-facts{margin:var(--sp-8) 0 0;padding-top:var(--sp-6);border-top:var(--bw) solid var(--c-border);grid-area:facts;grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.intro-facts>div{padding:0 var(--sp-4) 0 var(--sp-6);border-left:var(--bw) solid var(--c-border)}.intro-facts>div:first-child{border-left:0;padding-left:0}.intro-facts dt{font-size:var(--fs-xs);letter-spacing:.04em;text-transform:uppercase;color:var(--c-muted)}.intro-facts dd{margin:var(--sp-2) 0 0;font-size:var(--fs-base);color:var(--c-text);text-wrap:balance;line-height:1.4}.fact{position:relative}.fact-link{color:inherit;transition:color var(--dur);text-decoration:none}.fact-link:after{content:"";position:absolute;inset:0}.fact-arrow{color:var(--c-muted);transition:transform var(--dur), color var(--dur);margin-left:6px;display:inline-block}.fact:hover .fact-link{color:var(--c-muted)}.fact:hover .fact-arrow{color:var(--c-text);transform:translateY(2px)}@media (width<=720px){.intro-facts{gap:var(--sp-5);grid-template-columns:minmax(0,1fr)}.intro-facts>div{border-left:0;padding:0}}.about{gap:var(--sp-8);grid-template-columns:minmax(0,1fr) 280px;align-items:start;display:grid}.about>div{max-width:640px}.about>div>p:not(.links),.about-more>p{color:var(--c-muted);max-width:640px}.about>div>p~p,.about-more>p{margin-top:var(--sp-3)}.js .about-more:not(.is-open):not([hidden]),.no-js .more{display:none}.about>div>.more{margin-top:var(--sp-4)}.more-toggle{cursor:pointer;background:0 0;border:0;padding:0;font-family:inherit}.more-toggle .more-label{font-size:inherit}.more-toggle:hover .more-label{transform:none}.more-toggle:hover .more-arrow{transform:translateY(2px)}.more-toggle[aria-expanded=true]:hover .more-arrow{transform:translateY(-2px)}.aside-title{font-size:var(--fs-base);font-weight:var(--fw-medium);margin-bottom:var(--sp-4);padding-top:4px}.experience ol{gap:var(--sp-4);display:grid}.experience li{padding-left:24px;position:relative}.experience li:before{content:"";z-index:1;border:1.5px solid var(--c-muted);background:var(--c-bg);border-radius:50%;width:11px;height:11px;position:absolute;top:4px;left:0}.experience li:after{content:"";top:15px;left:5px;bottom:calc(-1 * var(--sp-4) - 4px);background:var(--c-border);width:1px;position:absolute}.experience li:last-child:after{display:none}.experience li.is-current:before{background:var(--c-accent);border-color:var(--c-accent)}.exp-role{font-size:var(--fs-sm);font-weight:var(--fw-medium);line-height:1.4}.exp-org{font-size:var(--fs-sm);color:var(--c-muted)}@media (width>=721px){:root:not(.js) .experience,.about:has(.about-more.is-open) .experience{top:var(--sp-6);position:sticky}}.exp-role,.exp-org{transition:opacity .25s}.experience.has-active li:not(.is-active) :is(.exp-role,.exp-org){opacity:.4}.experience li.is-active:before{box-shadow:0 0 0 3px var(--c-border)}.experience li.is-active:not(.is-current):before{border-color:var(--c-text)}.cards{gap:var(--sp-3);display:grid}.cards--2{grid-template-columns:repeat(2,minmax(0,1fr))}.cards--4{grid-template-columns:repeat(4,minmax(0,1fr))}.cards--3{grid-template-columns:repeat(3,minmax(0,1fr))}.card{gap:var(--sp-2);padding:var(--sp-5);background:var(--c-surface);border:var(--bw) solid var(--c-border);border-radius:var(--radius-lg);color:var(--c-muted);font-size:var(--fs-sm);flex-direction:column;display:flex}.card-title{font-size:var(--fs-base);font-weight:var(--fw-medium);color:var(--c-text)}.cards--lines>.card{grid-row:span 5;grid-template-rows:subgrid;row-gap:var(--sp-2);align-content:start;display:grid}.cards--lines{--arm:6px;--mark:var(--c-muted);gap:0;position:relative}.cards--lines.cards--2>.card{grid-row:span 4}.cards--lines>.card{background:0 0;border:0;border-radius:0;position:relative}.cards--lines>.card:before,.cards--lines>.card:after{content:"";pointer-events:none;position:absolute}.cards--lines>.card:before{top:0;left:calc(-1 * var(--arm));height:var(--bw);background:linear-gradient(var(--mark), var(--mark)) 0 0 / calc(2 * var(--arm)) 100% no-repeat, var(--c-border);right:0}.cards--lines>.card:after{left:0;top:calc(-1 * var(--arm));width:var(--bw);background:linear-gradient(var(--mark), var(--mark)) top / 100% calc(2 * var(--arm)) no-repeat, var(--c-border);bottom:0}.cards--lines>.card:first-child:before{display:none}.cards--lines>.card:first-child:after{background:var(--c-border);top:0}@media (width>=721px){.cards--lines.cards--2>.card:nth-child(-n+2):before,.cards--lines.cards--3>.card:nth-child(-n+3):before{display:none}.cards--lines.cards--2>.card:nth-child(-n+2):after,.cards--lines.cards--3>.card:nth-child(-n+3):after{background:var(--c-border);top:0}}@media (width>=721px) and (width<=1100px){.cards--lines:is(.cards--4,.cards--5)>.card:nth-child(-n+2):before{display:none}.cards--lines:is(.cards--4,.cards--5)>.card:nth-child(-n+2):after{background:var(--c-border);top:0}}@media (width>=1101px){.cards--lines.cards--4>.card:nth-child(-n+4):before,.cards--lines.cards--5>.card:nth-child(-n+3):before{display:none}.cards--lines.cards--4>.card:nth-child(-n+4):after,.cards--lines.cards--5>.card:nth-child(-n+3):after{background:var(--c-border);top:0}.cards--lines.cards--4>.card:nth-child(4n+1){padding-left:0}.cards--lines.cards--4>.card:nth-child(4n+1):before{background:var(--c-border);left:0}.cards--lines.cards--4>.card:nth-child(4n+1):after{display:none}}@media (width>=721px) and (width<=1100px){.cards--lines.cards--4>.card:nth-child(odd){padding-left:0}.cards--lines.cards--4>.card:nth-child(odd):before{background:var(--c-border);left:0}.cards--lines.cards--4>.card:nth-child(odd):after{display:none}}@media (width>=721px){.cards--lines.cards--3>.card:nth-child(3n+1){padding-left:0}.cards--lines.cards--3>.card:nth-child(3n+1):before{background:var(--c-border);left:0}.cards--lines.cards--3>.card:nth-child(3n+1):after{display:none}.cards--lines.cards--2>.card:nth-child(odd){padding-left:0}.cards--lines.cards--2>.card:nth-child(odd):before{background:var(--c-border);left:0}.cards--lines.cards--2>.card:nth-child(odd):after{display:none}}@media (width<=720px){.cards--lines>.card{padding-inline:0}.cards--lines>.card:before{background:var(--c-border);left:0}.cards--lines>.card:after{display:none}}.cards--4 .tags,.cards--5 .tags{padding-top:var(--sp-2);border-top:0;margin-top:0}.cards--5{grid-template-columns:repeat(3,minmax(0,1fr))}.cards--lines.cards--5>.card{grid-row:span 3}.card-head{align-items:center;gap:var(--sp-3);display:flex}.card-head .icon{margin-bottom:0}.cards--lines.cards--5:after{content:"";pointer-events:none;top:calc(-1 * var(--arm));left:calc(-1 * var(--arm));background:linear-gradient(var(--mark), var(--mark)) var(--arm) 0 / var(--bw) calc(2 * var(--arm)) no-repeat, linear-gradient(var(--c-border), var(--c-border)) var(--arm) 0 / var(--bw) 100% no-repeat, linear-gradient(var(--mark), var(--mark)) 0 var(--arm) / calc(2 * var(--arm)) var(--bw) no-repeat, linear-gradient(var(--c-border), var(--c-border)) 0 var(--arm) / 100% var(--bw) no-repeat;grid-area:4/3/span 3;position:absolute;bottom:0;right:0}@media (width>=1101px){.cards--lines.cards--5>.card:nth-child(3n+1){padding-left:0}.cards--lines.cards--5>.card:nth-child(3n+1):before{background:var(--c-border);left:0}.cards--lines.cards--5>.card:nth-child(3n+1):after{display:none}}@media (width>=721px) and (width<=1100px){.cards--5{grid-template-columns:repeat(2,minmax(0,1fr))}.cards--lines.cards--5:after{grid-area:7/2/span 3}.cards--lines.cards--5>.card:nth-child(odd){padding-left:0}.cards--lines.cards--5>.card:nth-child(odd):before{background:var(--c-border);left:0}.cards--lines.cards--5>.card:nth-child(odd):after{display:none}}.card-example{color:var(--c-text)}.card-more{margin-top:var(--sp-1)}.card-more>summary{cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;list-style:none}.card-more>summary:focus:not(:focus-visible){outline:none}.card-more>summary::-webkit-details-marker{display:none}.card-more .more-arrow{transition:transform var(--dur)}.card-more[open] .more-arrow{transform:rotate(180deg)}.card-more[open]>summary{margin-bottom:var(--sp-3)}.tags,.card-meta{padding-top:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--c-muted);margin-top:auto}.tags{border-top:var(--bw) solid var(--c-border)}.tags li{white-space:nowrap;display:inline}.tags li:not(:last-child):after{content:", ";white-space:normal}.result-number{font-size:var(--fs-number);letter-spacing:-.02em;color:var(--c-text);line-height:1.1}.result-label{color:var(--c-text);font-weight:var(--fw-medium);margin-bottom:var(--sp-1)}.skill-groups{gap:var(--sp-7) var(--sp-6);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.skill-groups .sub-title{margin:0 0 var(--sp-4)}.skill-groups+.section-outro{margin-top:var(--sp-7)}.skill-list{gap:var(--sp-2);flex-wrap:wrap;display:flex}.skill{align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);background:var(--c-surface);border:var(--bw) solid var(--c-border);border-radius:999px;padding:6px 12px;display:inline-flex}.skill:has(.skill-icon){padding-left:9px}.skill-icon{width:16px;height:16px;color:color-mix(in srgb, var(--brand,var(--c-text)), #fff var(--logo-lift));flex-shrink:0;place-items:center;display:inline-grid}.skill-icon svg{fill:currentColor;width:100%;height:100%}.skill-icon--line{color:var(--c-muted)}.skill-icon--line svg{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round}@media (width<=720px){.skill-groups{gap:var(--sp-6);grid-template-columns:minmax(0,1fr)}}.project-list li{padding:var(--sp-3) 0;font-size:var(--fs-sm)}.project-list li+li{border-top:var(--bw) solid color-mix(in srgb, var(--c-border) 60%, var(--c-bg))}.dev-card{transition:border-color var(--dur);text-decoration:none}.dev-card:hover{border-color:var(--c-muted);color:var(--c-muted)}.dev-card .arrow-link{margin-top:var(--sp-2)}.dev-text{flex:1}.dev-code{margin-bottom:var(--sp-3);padding:var(--sp-3) var(--sp-4);font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--c-text);background:var(--c-code);border-radius:var(--radius);white-space:pre;line-height:1.7;overflow:hidden}.dev-code .kw{color:var(--c-accent);font-weight:var(--fw-medium)}.dev-code .muted{color:var(--c-code-muted)}.dev-code .get{background:var(--c-accent-light);color:var(--c-accent-light-text);font-weight:var(--fw-medium);border-radius:4px;padding:0 4px}.dev-code .ok{color:var(--c-accent)}.dev-code .num{color:var(--c-fk)}.contact{gap:var(--sp-7);grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);display:grid}.contact-list{gap:var(--sp-4);display:grid}.contact-list dt{font-size:var(--fs-sm);color:var(--c-muted)}.contact-list dd{align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);overflow-wrap:anywhere;flex-wrap:wrap;display:flex}.form{gap:var(--sp-4);align-content:start;display:grid}.field{gap:6px;display:grid}.field label{font-size:var(--fs-sm);font-weight:var(--fw-medium)}.field input,.field select,.field textarea{width:100%;padding:10px var(--sp-3);font:inherit;color:var(--c-text);background:var(--c-surface);border:var(--bw) solid var(--c-border);border-radius:var(--radius-lg);transition:border-color var(--dur);font-size:1rem}.field textarea{resize:vertical;min-height:120px}.field input:hover,.field select:hover,.field textarea:hover{border-color:var(--c-muted)}.field input:focus-visible,.field select:focus-visible,.field textarea:focus-visible{border-color:var(--c-text);outline:none}.field [aria-invalid=true]{border-color:var(--c-error)}.select{position:relative}.select-btn{justify-content:space-between;align-items:center;gap:var(--sp-2);padding:10px var(--sp-3);color:var(--c-text);background:var(--c-surface);border:var(--bw) solid var(--c-border);border-radius:var(--radius-lg);cursor:pointer;-webkit-user-select:none;user-select:none;transition:border-color var(--dur);font-size:1rem;display:flex}.select-btn:hover{border-color:var(--c-muted)}.select-btn:focus-visible,.select-btn[aria-expanded=true]{border-color:var(--c-text);outline:none}.select-chevron,.select-check{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:16px;height:16px}.select-chevron{color:var(--c-muted);transition:transform var(--dur)}.select-btn[aria-expanded=true] .select-chevron{transform:rotate(180deg)}.select-list{z-index:20;max-height:240px;padding:var(--sp-1);background:var(--c-surface);border:var(--bw) solid var(--c-border);border-radius:var(--radius-lg);margin:0;list-style:none;position:absolute;top:calc(100% + 6px);left:0;right:0;overflow-y:auto;box-shadow:0 12px 32px #00000014}.select-list [role=option]{justify-content:space-between;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);font-size:var(--fs-base);border-radius:var(--radius);cursor:pointer;display:flex}.select-list .is-active{background:var(--c-hover)}.select-list [aria-selected=true]{font-weight:var(--fw-medium)}.select-check{visibility:hidden}.select-list [aria-selected=true] .select-check{visibility:visible}.field-error{font-size:var(--fs-sm);color:var(--c-error)}.btn{min-height:40px;padding:var(--sp-2) var(--sp-5);font:inherit;font-size:var(--fs-sm);font-weight:var(--fw-medium);border-radius:var(--radius-lg);border:var(--bw) solid transparent;cursor:pointer;transition:background-color var(--dur), border-color var(--dur);justify-content:center;align-items:center;display:inline-flex}.btn-primary{background:var(--c-ink);color:var(--c-on-ink);justify-self:start}.btn-primary:hover{background:var(--c-ink-hover)}.btn-primary[disabled]{opacity:.6;cursor:progress}.btn-small{min-height:26px;padding:2px var(--sp-3);font-size:var(--fs-sm);font-weight:var(--fw-regular);color:var(--c-text);background:var(--c-surface);border-color:var(--c-border);border-radius:var(--radius)}.btn-small:hover{border-color:var(--c-muted)}.form-status{font-size:var(--fs-sm);line-height:1.55}.form-actions{align-items:center;gap:var(--sp-2) var(--sp-4);flex-wrap:wrap;display:flex}.form-privacy{max-width:40ch;font-size:var(--fs-xs);color:var(--c-muted);text-wrap:pretty;flex:22ch;line-height:1.5}.form-privacy a{color:inherit;text-underline-offset:2px;text-decoration:underline}.form-privacy a:hover{color:var(--c-text)}.form-callout{align-items:flex-start;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);color:var(--c-text);background:var(--c-surface);border:var(--bw) solid color-mix(in srgb, var(--hue) 35%, var(--c-border));border-radius:var(--radius-lg);text-wrap:pretty;animation:.4s form-fade;display:flex}.form-callout .icon{margin-top:-2px}.form-callout a{color:inherit;text-underline-offset:2px;text-decoration:underline}.contact-form{align-content:start;display:grid}.form[hidden],.form-done[hidden]{display:none}.form-done{justify-content:center;align-items:center;gap:var(--sp-3);padding:var(--sp-7) var(--sp-5);text-align:center;background:var(--c-surface);border:var(--bw) solid var(--c-border);border-radius:var(--radius-lg);outline:none;flex-direction:column;animation:.6s form-fade;display:flex}.form-done .icon{margin:0 0 var(--sp-1)}.form-done-title{color:var(--c-text);font-size:1.375rem}.form-done-text{max-width:40ch;font-size:var(--fs-base);color:var(--c-muted);text-wrap:pretty}.form-done-text strong{font-weight:var(--fw-medium);color:var(--c-text);overflow-wrap:anywhere}.form-done .btn-small{margin-top:var(--sp-2)}@keyframes form-fade{0%{opacity:0}}.hp{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.site-footer{justify-content:space-between;gap:var(--sp-3) var(--sp-5);padding-top:var(--sp-6);padding-bottom:var(--sp-7);border-top:var(--bw) solid var(--c-border);font-size:var(--fs-sm);color:var(--c-muted);flex-wrap:wrap;align-items:flex-end;display:flex}.footer-sign{padding-left:calc(2lh + var(--sp-3));position:relative}.footer-mark{width:2lh;height:2lh;position:absolute;top:0;left:0}.footer-links,#legal{gap:var(--sp-2) var(--sp-4);flex-wrap:wrap;display:flex}.footer-links a{color:var(--c-muted)}.footer-links a:hover{color:var(--c-text)}.page:has(>.notfound){flex-direction:column;min-height:100dvh;display:flex}.page:has(>.notfound)>.wrap{width:100%}.notfound{align-content:center;align-items:center;gap:var(--sp-7);padding-bottom:var(--sp-8);flex:1;grid-template-columns:minmax(0,1fr) 320px;display:grid}.notfound-meta{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--c-muted);margin-bottom:var(--sp-3)}.notfound .notfound-meta,.legal .notfound-meta{gap:0 var(--sp-5);flex-wrap:wrap;display:flex}.legal .notfound-meta{gap:0 var(--sp-3)}.notfound .links{margin-top:var(--sp-6)}.nf-art{padding-top:var(--sp-6);position:relative}.nf-berg{cursor:pointer;border-radius:var(--radius-lg);-webkit-tap-highlight-color:transparent;background:0 0;border:0;width:100%;padding:0;display:block}.nf-berg:focus-visible{outline:2px solid var(--h-blue);outline-offset:4px}.nf-berg svg{aspect-ratio:234/290;stroke-linecap:round;stroke-linejoin:round;width:100%;height:auto;display:block;overflow:visible}.nf-berg stop{stop-color:var(--h-blue)}.nf-below path{fill:var(--h-blue);fill-opacity:var(--o);stroke:var(--h-blue);stroke-opacity:.45;stroke-width:1.2px}.nf-labels text{font-family:var(--font-mono);fill:var(--h-blue);text-anchor:middle;font-size:11px}.nf-labels .nf-missing{fill:var(--c-error);font-size:10px;text-decoration:line-through}.nf-wave path{fill:none;stroke:var(--h-blue);stroke-width:1.4px}.nf-tip path{fill:var(--h-blue-bg);stroke:var(--h-blue);stroke-width:1.4px}.nf-tip .nf-shade{fill:var(--h-blue);fill-opacity:.22}.nf-face path,.nf-arm{fill:none;stroke:var(--h-blue);stroke-width:1.6px}.nf-eye{fill:var(--h-blue)}.nf-arm,.nf-head,.nf-brows{transition:transform .35s cubic-bezier(.34,1.56,.64,1)}.nf-arm--l{transform-origin:92px 69px;transform:rotate(-20deg)}.nf-arm--r{transform-origin:150px 69px;transform:rotate(20deg)}.is-shrugging .nf-arm{transform:rotate(0)}.is-shrugging .nf-head{transform:translateY(-3px)}.is-shrugging .nf-brows{transform:translateY(-2.5px)}.nf-body{animation:4.5s ease-in-out infinite nf-bob}.nf-wave path{animation:1.6s linear infinite nf-wave}.nf-eye{transform-box:fill-box;transform-origin:50%;animation:5s infinite nf-blink}@keyframes nf-bob{50%{transform:translateY(2px)}}@keyframes nf-wave{to{transform:translate(8px)}}@keyframes nf-blink{0%,94%,to{transform:none}97%{transform:scaleY(.1)}}.nf-bubble{top:var(--sp-7);width:max-content;max-width:240px;font-family:var(--font-mono);font-size:var(--fs-xs);text-align:center;color:var(--f-tip-text);background:var(--f-tip-bg);border-radius:var(--radius-lg);opacity:0;transform-origin:50% 100%;pointer-events:none;padding:5px 10px;line-height:1.5;position:absolute;left:50%;translate:-50% -50%}.nf-bubble:after{content:"";border:5px solid #0000;border-top-color:var(--f-tip-bg);margin-left:-5px;position:absolute;top:100%;left:50%}.nf-bubble:empty{display:none}.nf-bubble.is-visible{opacity:1;animation:.35s cubic-bezier(.34,1.56,.64,1) nf-pop}@keyframes nf-pop{0%{opacity:0;transform:scale(.6)rotate(-6deg)}}.nf-hint{margin-top:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--c-muted);text-align:center;text-wrap:balance}.no-js .nf-hint{display:none}.legal{padding-bottom:var(--sp-8)}.legal-text{max-width:680px;margin-top:var(--sp-6);color:var(--c-muted)}.legal-text section+section{margin-top:var(--sp-6)}.legal-text h2{font-size:var(--fs-base);font-weight:var(--fw-medium);color:var(--c-text);margin-bottom:var(--sp-2)}.legal-text p+p,.legal-text ul+p,.legal-text p+ul{margin-top:var(--sp-3)}.legal-text ul{padding-left:1.25em;list-style:outside}.legal-text li+li{margin-top:var(--sp-1)}.legal-text strong{font-weight:var(--fw-medium);color:var(--c-text)}.legal-text code{font-family:var(--font-mono);background:var(--c-code);border-radius:4px;padding:1px 4px;font-size:.9em}.legal-text a{overflow-wrap:anywhere}.legal-lead{font-size:var(--fs-base);color:var(--c-text);text-wrap:pretty}.legal-meta{font-family:var(--font-mono);font-size:var(--fs-xs)}.hue-green{--hue:var(--h-green);--hue-bg:var(--h-green-bg)}.hue-blue{--hue:var(--h-blue);--hue-bg:var(--h-blue-bg)}.hue-violet{--hue:var(--h-violet);--hue-bg:var(--h-violet-bg)}.hue-amber{--hue:var(--h-amber);--hue-bg:var(--h-amber-bg)}.icon{width:40px;height:40px;margin-bottom:var(--sp-2);color:var(--hue,var(--c-text));background:var(--hue-bg,var(--c-code));border-radius:var(--radius-lg);flex-shrink:0;place-items:center;transition:transform .26s cubic-bezier(.2,.7,.3,1);display:inline-grid}.icon svg{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;width:20px;height:20px}.icon--sm{border-radius:var(--radius);width:24px;height:24px;margin:0}.icon--sm svg{width:14px;height:14px}.card-title--icon{align-items:center;gap:var(--sp-2);display:inline-flex}.contact-list dt{align-items:center;gap:var(--sp-2);margin-bottom:4px;display:flex}.result-number{font-variant-numeric:tabular-nums}.card{transition:border-color var(--dur), transform .26s cubic-bezier(.2, .7, .3, 1)}.card[class*=hue-]:hover{border-color:color-mix(in srgb, var(--hue) 35%, var(--c-border));transform:translateY(-2px)}.card:hover .icon{transform:translateY(-1px)rotate(-5deg)}.cards--lines>.card:hover,.cards--lines>.card:hover .icon{transform:none}.arrow-link span{transition:transform var(--dur);display:inline-block}.arrow-link:hover span,.dev-card:hover .arrow-link span{transform:translate(2px,-2px)}.arrow-link--down:hover span{transform:translateY(2px)}.reveal{opacity:0;transition:opacity .8s;transition-delay:calc(var(--i,0) * 60ms)}.reveal.is-in{opacity:1}@media (width<=1100px){.cards--4{grid-template-columns:repeat(2,minmax(0,1fr))}.about{gap:var(--sp-7);grid-template-columns:minmax(0,1fr) 220px}.intro{column-gap:var(--sp-7);grid-template-columns:200px minmax(0,1fr)}.portrait{width:200px;height:200px}.portrait-badge{--p:200px;--s:56px}.intro .intro-title{font-size:clamp(2rem,.8rem + 2.6vw,2.75rem)}.intro-facts>div{padding:0 var(--sp-4)}}@media (width<=720px){:root{--gutter:20px}main.wrap{padding-top:calc(var(--sp-7) + 5px)}.section{padding-block:var(--sp-7)}.intro{min-height:0;padding-bottom:calc(var(--sp-7) + 5px);grid-template-rows:none;grid-template-columns:minmax(0,1fr);grid-template-areas:"portrait""status""text""actions""facts";gap:0;margin-top:0}.scroll-cue{display:none}.intro .intro-title{font-size:var(--fs-hero)}.intro .intro-lead,.section-lead{font-size:var(--fs-base)}.intro .portrait{align-self:start}.portrait{width:112px;height:112px;margin-bottom:var(--sp-5)}.portrait-badge{--p:112px;--s:36px;transform:translate(calc(var(--p) * .854 - var(--s) / 2), calc(var(--p) * .854 - var(--s) / 2));box-shadow:0 0 0 3px var(--c-bg);align-self:start}.intro .status{margin-bottom:var(--sp-5)}.intro-facts>div{padding:0}.about,.contact{gap:var(--sp-6);grid-template-columns:minmax(0,1fr)}.cards--2,.cards--3,.cards--4,.cards--5{grid-template-columns:minmax(0,1fr)}.cards--lines.cards--5:after{display:none}}@media (width>=721px) and (width<=900px),(width<=560px){.iceberg,.about-art{display:none}}@media (width<=720px){.notfound{gap:var(--sp-5);grid-template-columns:minmax(0,1fr)}.nf-art{order:-1;width:240px;margin-inline:auto}.page:has(>.notfound){min-height:calc(100dvh - 112px)}}.has-cursor-emoji [data-cursor],.has-cursor-emoji [data-cursor] *{cursor:none}.cursor-emoji{z-index:1000;pointer-events:none;transform:translate(calc(var(--x,-100px) - 50%), calc(var(--y,-100px) - 50%)) scale(0);opacity:0;font-size:28px;line-height:1;transition:opacity .15s,transform .15s;position:fixed;top:0;left:0}.cursor-emoji.is-visible{opacity:1;transform:translate(calc(var(--x) - 50%), calc(var(--y) - 50%)) scale(1);transition:opacity .15s;animation:.35s cubic-bezier(.34,1.56,.64,1) cursor-emoji-pop}@keyframes cursor-emoji-pop{0%{transform:translate(calc(var(--x) - 50%), calc(var(--y) - 50%)) scale(.2) rotate(-20deg)}to{transform:translate(calc(var(--x) - 50%), calc(var(--y) - 50%)) scale(1) rotate(0)}}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation:none!important}.reveal{opacity:1}}
