@layer reset{*,:before,:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none}body{-webkit-font-smoothing:antialiased;min-height:100dvh;line-height:1.6}img,picture,video,canvas,svg{max-width:100%;height:auto;display:block}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer tokens{:root{--color-paper:#f5f3ee;--color-paper-alt:#ece8e0;--color-surface:#fff;--color-ink:#16161a;--color-ink-hover:#2c2c33;--color-ink-muted:#55555e;--color-accent:#2a4fd6;--color-accent-strong:#1d3aa6;--color-accent-on-ink:#8aa4ff;--color-on-ink-muted:#b9b6ae;--color-line:#d6d1c7;--color-line-on-ink:#3a3a40;--color-on-ink-subtle:#8a857c;--color-border-input:#8a857c;--color-error:#a3271d;--color-family-web:#2a4fd6;--color-family-software:#2f5d50;--color-family-wordpress:#b23f17;--font-display:"Instrument Serif", "Instrument Serif Fallback", Georgia, serif;--font-text:"Mona Sans", "Mona Sans Fallback", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:ui-monospace, "SF Mono", "Cascadia Code", Menlo, Consolas, monospace;--step--1:clamp(.83rem, .815rem + .067vw, .875rem);--step-0:clamp(1rem, .958rem + .185vw, 1.125rem);--step-1:clamp(1.2rem, 1.133rem + .296vw, 1.4rem);--step-2:clamp(1.44rem, 1.337rem + .459vw, 1.75rem);--step-3:clamp(1.73rem, 1.473rem + 1.141vw, 2.5rem);--step-4:clamp(2.07rem, 1.51rem + 2.489vw, 3.75rem);--step-5:clamp(2.49rem, 1.487rem + 4.459vw, 5.5rem);--step-hero:clamp(3.5rem, 1rem + 11.111vw, 11rem);--space-3xs:.25rem;--space-2xs:.5rem;--space-xs:.75rem;--space-s:1rem;--space-m:1.5rem;--space-l:2rem;--space-xl:3rem;--space-2xl:clamp(4rem, 3.333rem + 2.963vw, 6rem);--space-3xl:clamp(6rem, 4.667rem + 5.926vw, 10rem);--section-gap:var(--space-3xl);--gutter:clamp(1.25rem, 4vw, 3rem);--container-wide:80rem;--measure:68ch;--header-h:4.75rem;--radius-s:4px;--radius-m:8px;--shadow-frame:0 1px 2px #16161a0f, 0 12px 32px -12px #16161a2e;--dur-fast:.15s;--dur-base:.25s;--dur-slow:.45s;--ease-out:cubic-bezier(.2, .7, .2, 1);--ease-in-out:cubic-bezier(.6, 0, .3, 1)}}@layer base{html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;scroll-padding-top:calc(var(--header-h) + 1rem)}body{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-text);font-size:var(--step-0);line-height:1.6}h1,h2,h3,h4,h5,h6{text-wrap:balance;font-weight:600;line-height:1.2}h1,h2{font-family:var(--font-display);letter-spacing:-.01em;font-weight:400;line-height:1.04}h1{font-size:var(--step-4)}h2{font-size:var(--step-3)}h3{font-size:var(--step-1)}h4,h5,h6{font-size:var(--step-0)}p,li{text-wrap:pretty}a{color:var(--color-accent);text-underline-offset:.2em;transition:color var(--dur-fast) var(--ease-out), text-decoration-thickness var(--dur-fast) var(--ease-out);text-decoration-thickness:1px}a:hover{color:var(--color-accent-strong);text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px;border-radius:2px}::selection{background:var(--color-ink);color:var(--color-paper)}strong,b{font-weight:600}em,i{font-style:italic}code,kbd,samp,pre{font-family:var(--font-mono);font-size:.9em}hr{border:0;border-top:1px solid var(--color-line)}blockquote{font-family:var(--font-display);font-size:var(--step-2);line-height:1.25}table{border-collapse:collapse;width:100%}th,td{border-bottom:1px solid var(--color-line);text-align:left;vertical-align:top;padding:.6em .75em}th{font-weight:600}.site-main:focus{outline:none}}@font-face{font-family:Instrument Serif;font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/instrument-serif-400.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Instrument Serif;font-style:italic;font-weight:400;font-display:swap;src:url(../fonts/instrument-serif-400-italic.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Mona Sans;font-style:normal;font-weight:200 900;font-display:swap;src:url(../fonts/mona-sans-variable.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Instrument Serif Fallback;src:local(Georgia),local(Times New Roman);size-adjust:88%;ascent-override:98%;descent-override:26%;line-gap-override:0%}@font-face{font-family:Mona Sans Fallback;src:local(Arial),local(Helvetica Neue),local(Helvetica);size-adjust:102%;ascent-override:92%;descent-override:24%;line-gap-override:0%}.container{width:100%;max-width:calc(var(--container-wide) + 2 * var(--gutter));padding-inline:var(--gutter);margin-inline:auto}.container--text{max-width:calc(var(--measure) + 2 * var(--gutter))}.content-grid{--_wide-extra:max(0px, (var(--container-wide) - var(--measure)) / 2);grid-template-columns:[full-start] minmax(var(--gutter), 1fr) [wide-start] minmax(0, var(--_wide-extra)) [content-start] min(var(--measure), 100% - 2 * var(--gutter)) [content-end] minmax(0, var(--_wide-extra)) [wide-end] minmax(var(--gutter), 1fr) [full-end];display:grid}.content-grid>*,.content-grid>.entry-content>*{grid-column:content}.content-grid>:is(.u-wide,.alignwide),.content-grid>.entry-content>:is(.u-wide,.alignwide){grid-column:wide}.content-grid>:is(.u-full,.alignfull),.content-grid>.entry-content>:is(.u-full,.alignfull){grid-column:full}.section{padding-block:var(--section-gap)}.section--alt{background:var(--color-paper-alt)}.section--tight{padding-block:var(--space-2xl)}.page-header{padding-block:var(--space-2xl) var(--space-xl)}.page-header .archive-description{max-width:var(--measure);margin-top:var(--space-s);color:var(--color-ink-muted)}.entry{padding-block:var(--space-2xl)}.entry>.entry-content{display:contents}.entry-header{margin-bottom:var(--space-l)}.entry-meta{margin-top:var(--space-s);color:var(--color-ink-muted);font-family:var(--font-mono);font-size:var(--step--1)}.entry-footer{margin-top:var(--space-xl);padding-top:var(--space-m);border-top:1px solid var(--color-line);color:var(--color-ink-muted);font-size:var(--step--1)}.entry-footer>*+*{margin-left:var(--space-s)}.post-thumbnail{margin-bottom:var(--space-l)}.post-thumbnail img{border-radius:var(--radius-m)}.entry-list>.entry+.entry{border-top:1px solid var(--color-line)}.entry-list>.entry,.pagination,.post-navigation{padding-block:var(--space-xl)}.nav-links{justify-content:space-between;gap:var(--space-s);flex-wrap:wrap;display:flex}.nav-subtitle{color:var(--color-ink-muted);font-family:var(--font-mono);font-size:var(--step--1);display:block}.button{border-radius:var(--radius-s);min-height:48px;font-family:var(--font-text);font-size:var(--step-0);cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out), color var(--dur-fast) var(--ease-out), border-color var(--dur-fast) var(--ease-out);border:1px solid #0000;justify-content:center;align-items:center;gap:.6em;padding:.7em 1.4em;font-weight:500;line-height:1.2;text-decoration:none;display:inline-flex}.button--primary{background:var(--color-ink);color:var(--color-paper)}.button--primary:hover{background:var(--color-ink-hover);color:var(--color-paper)}.button--on-ink{background:var(--color-paper);color:var(--color-ink)}.button--on-ink:hover{background:var(--color-paper-alt);color:var(--color-ink)}.button--on-ink:focus-visible{outline-color:var(--color-accent-on-ink)}.link-arrow{min-height:44px;color:var(--color-ink);text-underline-offset:.3em;align-items:center;gap:.45em;font-weight:500;text-decoration:underline;text-decoration-thickness:1px;display:inline-flex}.link-arrow:hover{color:var(--color-accent-strong)}.link-arrow--on-ink,.link-arrow--on-ink:hover{color:var(--color-paper)}.arrow{transition:transform var(--dur-fast) var(--ease-out);display:inline-block}@media (hover:hover){:is(.button,.link-arrow):hover .arrow{transform:translate(3px)}}.label{color:var(--color-ink-muted);font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.02em;line-height:1.4}.label--accent{color:var(--color-accent)}.label--on-ink{color:var(--color-accent-on-ink)}.tag-list{gap:var(--space-2xs);flex-wrap:wrap;padding:0;list-style:none;display:flex}.tag-list>li{display:flex}.tag{border:1px solid var(--color-border-input);border-radius:var(--radius-s);color:var(--color-ink);font-family:var(--font-mono);align-items:center;gap:.5em;padding:.2em .6em;font-size:.8125rem;line-height:1.5;text-decoration:none;display:inline-flex}.tag:has(.tag__logo){padding-inline-start:.45em}.tag__logo{object-fit:contain;flex:none;block-size:1.25rem;inline-size:1.25rem}a.tag:hover{border-color:var(--color-accent);color:var(--color-accent-strong)}.stack{color:var(--color-ink-muted);font-family:var(--font-mono);font-size:var(--step--1);flex-wrap:wrap;gap:.25em .9em;padding:0;list-style:none;display:flex}.stack li+li:before{content:"/";color:var(--color-line);margin-right:.9em}.tech-inline{gap:var(--space-3xs) var(--space-s);flex-wrap:wrap;padding:0;list-style:none;display:flex}.tech-inline a{align-items:center;gap:.4em;display:inline-flex}.tech-inline__logo{object-fit:contain;flex:none;block-size:1.125rem;inline-size:1.125rem}.breadcrumbs ol{gap:0 var(--space-2xs);color:var(--color-ink-muted);font-family:var(--font-mono);font-size:var(--step--1);flex-wrap:wrap;padding:0;list-style:none;display:flex}.breadcrumbs li+li:before{content:"/";margin-right:var(--space-2xs);color:var(--color-line)}.breadcrumbs a{color:var(--color-ink-muted);text-decoration:none}.breadcrumbs a:hover{color:var(--color-ink);text-decoration:underline}.metric{align-items:baseline;gap:var(--space-3xs) var(--space-s);flex-wrap:wrap;display:flex}.metric__values{font-family:var(--font-display);font-size:var(--step-5);white-space:nowrap;line-height:1}.metric__before{color:var(--color-ink-muted)}.metric__arrow{vertical-align:.18em;margin-inline:.12em;font-size:.55em}.metric__after{color:var(--color-accent)}.metric__label{color:var(--color-ink-muted);font-family:var(--font-mono);font-size:var(--step--1)}.metric--s .metric__values{font-size:var(--step-3)}.metric-grid{gap:var(--space-l);grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));padding:0;list-style:none;display:grid}.metric-grid>*{padding-top:var(--space-m);border-top:1px solid var(--color-ink)}.metric-grid .metric__description{margin-top:var(--space-xs);color:var(--color-ink-muted);font-size:var(--step--1)}.ficha{gap:var(--space-m);padding-top:var(--space-m);border-top:1px solid var(--color-line);grid-template-columns:repeat(auto-fit,minmax(min(100%,9rem),1fr));margin:0;display:grid}.ficha dt{color:var(--color-ink-muted);font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.02em}.ficha dd{margin:var(--space-3xs) 0 0;font-weight:500}.faq{border-top:1px solid var(--color-line)}.faq details{border-bottom:1px solid var(--color-line)}.faq summary{justify-content:space-between;align-items:center;gap:var(--space-s);min-height:44px;padding-block:var(--space-m);font-size:var(--step-1);cursor:pointer;font-weight:600;line-height:1.3;list-style:none;display:flex}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"+";color:var(--color-accent);font-family:var(--font-mono);transition:transform var(--dur-base) var(--ease-out);flex-shrink:0;font-size:1.25em;font-weight:400}.faq details[open] summary:after{transform:rotate(45deg)}.faq__answer{max-width:var(--measure);padding-bottom:var(--space-m);color:var(--color-ink-muted)}.faq__answer>*+*{margin-top:1em}.form{gap:var(--space-m);display:grid}.field{gap:var(--space-2xs);display:grid}.field label,.field legend{font-weight:500}.field__optional{color:var(--color-ink-muted);font-weight:400}.field__hint{color:var(--color-ink-muted);font-size:var(--step--1)}.field__error{color:var(--color-error);font-size:var(--step--1);font-weight:500}:is(.form,.search-form) :is(input:not([type=checkbox],[type=radio],[type=submit],[type=hidden]),textarea,select){border:1px solid var(--color-border-input);border-radius:var(--radius-s);background:var(--color-surface);width:100%;min-height:48px;color:var(--color-ink);transition:border-color var(--dur-fast) var(--ease-out);padding:.7em .9em}:is(.form,.search-form) textarea{resize:vertical;min-height:9rem}:is(.form,.search-form) :is(input,textarea,select):hover{border-color:var(--color-ink-muted)}:is(.form,.search-form) :is(input,textarea,select):focus-visible{border-color:var(--color-ink);outline-offset:1px}:is(.form,.search-form) [aria-invalid=true]{border-color:var(--color-error)}:is(.form,.search-form) input[type=checkbox]{width:1.25rem;height:1.25rem;accent-color:var(--color-ink)}.field--check{align-items:flex-start;gap:var(--space-xs);display:flex}.search-form{gap:var(--space-2xs);max-width:36rem;display:grid}.search-form__label{font-weight:500}.search-form__row{gap:var(--space-2xs);flex-wrap:wrap;display:flex}.search-form .search-form__input{flex:14rem;width:auto}.search-form__submit{flex:none}.frame{border-radius:var(--radius-m);background:var(--color-surface);box-shadow:var(--shadow-frame);position:relative;overflow:hidden}.frame__bar{border-bottom:1px solid var(--color-paper-alt);background:var(--color-surface);align-items:center;gap:6px;height:1.75rem;padding-inline:.75rem;display:flex}.frame__bar span{background:var(--color-line);border-radius:50%;width:8px;height:8px}.frame__viewport{aspect-ratio:16/10;position:relative;overflow:hidden;container-type:size}.frame__viewport img{width:100%;height:auto}.frame__viewport--scroll{aspect-ratio:auto;overscroll-behavior:contain;scrollbar-width:thin;height:min(80svh,56rem);overflow-y:auto;container-type:normal}.project-card{color:inherit;text-decoration:none;display:block}.project-card:hover{color:inherit}.project-card:focus-visible{outline-offset:8px}.project-card__poster{aspect-ratio:16/10;object-fit:cover;width:100%}.project-card__full{width:100%;height:auto}.project-card__placeholder{aspect-ratio:16/10;background:var(--color-paper-alt);display:block}.project-card__shot{transition:transform .7s var(--ease-out);transform:translateY(0)}@media (hover:hover) and (pointer:fine){.project-card:is(:hover,:focus-visible) .project-card__shot{transition:transform var(--scroll-dur,6s) var(--ease-in-out);transform:translateY(calc(100cqh - 100%))}}@media (prefers-reduced-motion:reduce){.project-card__shot{transition:none!important;transform:none!important}}.project-card__meta{justify-content:space-between;gap:var(--space-2xs) var(--space-s);margin-top:var(--space-m);flex-wrap:wrap;display:flex}.project-card__family{font-family:var(--font-mono);font-size:var(--step--1);letter-spacing:.02em}.project-card--web .project-card__family{color:var(--color-family-web)}.project-card--software .project-card__family{color:var(--color-family-software)}.project-card--wordpress .project-card__family{color:var(--color-family-wordpress)}.project-card__title{margin-top:var(--space-2xs);font-family:var(--font-display);font-size:var(--step-3);font-weight:400;line-height:1.05}.project-card:hover .project-card__title{text-underline-offset:.15em;text-decoration:underline;text-decoration-thickness:1px}.project-card__result{max-width:32em;margin-top:var(--space-xs);color:var(--color-ink-muted)}.project-card .metric{margin-top:var(--space-m);padding-top:var(--space-s);border-top:1px solid var(--color-line)}.project-card .metric__values{font-size:var(--step-3)}.project-grid{gap:var(--space-2xl) var(--space-l);padding:0;list-style:none;display:grid}@media (width>=54em){.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.project-grid>:nth-child(2n){margin-top:var(--space-3xl)}}.project-card__tech{flex-wrap:wrap;align-items:center;gap:.25em .5em;display:flex}.project-card__tech-item{align-items:center;gap:.35em;display:inline-flex}.project-card__tech-item+.project-card__tech-item:before{content:"·" / "";margin-inline-end:.15em}.project-card__logo{object-fit:contain;flex:none;block-size:1rem;inline-size:1rem}.prose>*+*{margin-top:1.25em}.prose>:is(h2,h3,h4){margin-top:2em}.prose>:is(h2,h3,h4)+*{margin-top:.75em}.prose :is(ul,ol){padding-left:1.25em}.prose li+li{margin-top:.4em}.prose li::marker{color:var(--color-ink-muted)}.prose img{border-radius:var(--radius-m)}.prose figcaption{margin-top:var(--space-2xs);color:var(--color-ink-muted);font-size:var(--step--1)}.prose pre{padding:var(--space-m);border-radius:var(--radius-m);background:var(--color-ink);color:var(--color-paper);tab-size:4;font-size:.875rem;line-height:1.6;overflow-x:auto}.prose :not(pre)>code{background:var(--color-paper-alt);border-radius:3px;padding:.1em .35em}.prose blockquote{margin-block:2em}.prose blockquote cite{margin-top:var(--space-xs);color:var(--color-ink-muted);font-family:var(--font-mono);font-size:var(--step--1);font-style:normal;display:block}.prose hr{margin-block:2.5em}.site-header{z-index:10;border-bottom:1px solid var(--color-line);background:var(--color-paper);position:relative}.site-header__inner{justify-content:space-between;align-items:center;gap:var(--space-s) var(--space-m);min-height:var(--header-h);flex-wrap:wrap;display:flex}.site-header__brand{color:var(--color-ink);font-family:var(--font-display);font-size:1.75rem;line-height:1;text-decoration:none}.site-header__brand:hover{color:var(--color-ink)}.site-nav__toggle{border:1px solid var(--color-border-input);border-radius:var(--radius-s);min-height:44px;color:var(--color-ink);cursor:pointer;background:0 0;align-items:center;gap:.6rem;padding-inline:.9rem;display:none}.site-nav__toggle svg{width:18px;height:18px}.site-nav__toggle[aria-expanded=true] .site-nav__icon-open,.site-nav__toggle[aria-expanded=false] .site-nav__icon-close{display:none}.site-nav__panel{align-items:center;gap:var(--space-s) var(--space-l);flex-wrap:wrap;display:flex}.site-nav .menu{gap:0 var(--space-l);flex-wrap:wrap;padding:0;list-style:none;display:flex}.site-nav .menu a{min-height:44px;color:var(--color-ink);align-items:center;text-decoration:none;display:inline-flex}.site-nav .menu a:hover,.site-nav .menu [aria-current=page]{text-underline-offset:.35em;text-decoration:underline;text-decoration-thickness:1px}@media (width<64em){.js .site-nav__toggle{display:inline-flex}.js .site-nav__panel{padding:var(--space-s) var(--gutter) var(--space-l);border-bottom:1px solid var(--color-line);background:var(--color-paper);flex-direction:column;align-items:stretch;display:none;position:absolute;top:100%;left:0;right:0}.js .site-nav.is-open .site-nav__panel{display:flex}.js .site-nav .menu{flex-direction:column}.js .site-nav .menu a{border-bottom:1px solid var(--color-line);width:100%;min-height:52px;font-size:var(--step-1)}.js .site-nav__cta{margin-top:var(--space-s)}}.site-footer{background:var(--color-ink);color:var(--color-paper)}.site-footer a:not(.button){color:var(--color-paper)}.site-footer a:not(.button):hover{color:var(--color-accent-on-ink)}.site-footer :focus-visible{outline-color:var(--color-accent-on-ink)}.footer-cta{padding-block:var(--space-3xl) var(--space-2xl)}.footer-cta__title{max-width:11em;margin-top:var(--space-s);letter-spacing:-.02em;font-size:clamp(3rem,1.611rem + 6.173vw,7.5rem);line-height:.95}.footer-cta__title em{color:var(--color-accent-on-ink)}.footer-cta__text{max-width:32em;margin-top:var(--space-m);color:var(--color-on-ink-muted)}.footer-cta__actions{align-items:center;gap:var(--space-s) var(--space-l);margin-top:var(--space-l);flex-wrap:wrap;display:flex}.site-footer__bottom{justify-content:space-between;gap:var(--space-m) var(--space-xl);padding-block:var(--space-l) var(--space-xl);color:var(--color-on-ink-muted);flex-wrap:wrap;font-size:.9375rem;display:flex}.footer-cta+.site-footer__bottom{border-top:1px solid var(--color-line-on-ink)}.site-footer__brand{color:var(--color-paper);font-family:var(--font-display);font-size:1.5rem;line-height:1.2}.site-footer .menu,.site-footer__social{gap:0 var(--space-m);flex-wrap:wrap;padding:0;list-style:none;display:flex}.site-footer .menu a,.site-footer__social a{align-items:center;min-height:44px;display:inline-flex}.site-footer__copy{color:var(--color-on-ink-subtle);font-family:var(--font-mono);flex-basis:100%;font-size:.75rem}[hidden]:not([hidden=until-found]){display:none!important}.screen-reader-text,.u-sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;overflow:hidden;word-wrap:normal!important;position:absolute!important}.u-nowrap{white-space:nowrap}.skip-link{z-index:100;border-radius:var(--radius-s);background:var(--color-ink);color:var(--color-paper);padding:.75rem 1rem;position:absolute;top:.5rem;left:.5rem;transform:translateY(-200%)}.skip-link:focus{color:var(--color-paper);transform:none}.u-measure{max-width:var(--measure)}.u-muted{color:var(--color-ink-muted)}.u-flow>*+*{margin-top:var(--flow-space,1em)}