:root{color-scheme:light;--paper:#f5f1e8;--surface:#fffdf8;--ink:#17201d;--muted-ink:#5c625f;--forest:#1f5a46;--forest-deep:#123e31;--forest-soft:#dcece4;--line:#d7d0c2;--focus:#005fcc;--display:Georgia, "Times New Roman", serif;--body:-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, Helvetica, sans-serif;--mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--text-small:.875rem;--shell:72rem;--reading-measure:46rem;--radius:.75rem;--interactive-min-size:2.75rem;--motion:.16s ease}*,:before,:after{box-sizing:border-box}html{background:var(--paper)}body{background:radial-gradient(circle at 88% 3%, color-mix(in srgb, var(--forest-soft) 65%, transparent), transparent 25rem), var(--paper);color:var(--ink);font-family:var(--body);overflow-wrap:anywhere;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;min-height:100vh;margin:0;font-size:1rem;line-height:1.65}a{color:var(--forest);text-underline-offset:.18em;text-decoration-thickness:1px}a:hover{color:var(--forest-deep)}:focus-visible{outline:3px solid var(--focus);outline-offset:3px}::selection{background:var(--forest-soft);color:var(--ink)}img{max-width:100%;display:block}.shell{width:min(calc(100% - 3rem), var(--shell));margin-inline:auto}.skip-link{background:var(--forest-deep);color:#fff;transition:transform var(--motion);z-index:10;padding:.7rem .9rem;font-weight:700;position:fixed;top:1rem;left:1rem;transform:translateY(-200%)}.skip-link:focus{transform:translateY(0)}.site-header{border-bottom:1px solid color-mix(in srgb, var(--forest) 18%, transparent)}.header-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem 2rem;min-height:5.5rem;padding-block:1rem;display:flex}.site-name{color:var(--ink);font-family:var(--display);min-height:var(--interactive-min-size);align-items:center;gap:.75rem;font-size:1.05rem;font-weight:700;text-decoration:none;display:inline-flex}.site-name img{border-radius:.4rem;width:2rem;height:2rem}nav ul,.portfolio-list,.post-list,.footer-links{margin:0;padding:0;list-style:none}nav ul{flex-wrap:wrap;align-items:center;gap:.25rem 1.25rem;display:flex}nav a{color:var(--muted-ink);min-height:var(--interactive-min-size);align-items:center;font-size:.95rem;text-decoration:none;display:inline-flex}nav a:hover,nav a[aria-current=page]{color:var(--ink);text-underline-offset:.32em;text-decoration:underline 1px}main{min-height:65vh}.page{padding-block:clamp(3.75rem,8vw,6.5rem)}.article{max-width:var(--reading-measure);margin-inline:auto}.hero{max-width:62rem;padding-block:clamp(4.5rem,11vw,8rem)}.page-header{max-width:52rem;margin-bottom:clamp(3rem,7vw,5rem)}.eyebrow,.section-kicker,.portfolio-meta{color:var(--forest);font-family:var(--mono);letter-spacing:.095em;text-transform:uppercase;font-size:.76rem;font-weight:700;line-height:1.4}.eyebrow,.section-kicker{margin-bottom:.85rem}.section-kicker{color:var(--muted-ink)}.error-code{color:var(--muted-ink);font-family:var(--mono);font-size:var(--text-small);margin:0 0 .75rem}h1,h2,h3{font-family:var(--display);letter-spacing:-.025em;text-wrap:balance;margin-top:0;font-weight:700;line-height:1.12}h1{max-width:18ch;margin-bottom:1.5rem;font-size:clamp(2.6rem,7vw,5rem)}h2{margin-bottom:1.25rem;font-size:clamp(1.7rem,4vw,2.5rem)}h3{font-size:clamp(1.25rem,3vw,1.55rem)}p{text-wrap:pretty;margin:0 0 1rem}.intro{color:var(--muted-ink);max-width:44rem;font-size:clamp(1.1rem,2.5vw,1.3rem);line-height:1.65}.action-links{flex-wrap:wrap;align-items:center;gap:.4rem .9rem;margin-top:1.75rem;display:flex}.action-links a{min-height:var(--interactive-min-size);align-items:center;display:inline-flex}.section{border-top:1px solid var(--line);padding-block:clamp(3.5rem,8vw,6rem)}.section-heading{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:1rem 2rem;margin-bottom:1.75rem;display:flex}.section-heading h2,.section-heading p{margin-bottom:0}.section-heading>a{min-height:var(--interactive-min-size);align-items:center;display:inline-flex}.portfolio-list{grid-template-columns:repeat(auto-fit,minmax(min(100%,17rem),1fr));gap:1rem;display:grid}.portfolio-card{background:color-mix(in srgb, var(--surface) 76%, transparent);border:1px solid var(--line);border-radius:var(--radius);min-width:0}.portfolio-card article{flex-direction:column;height:100%;padding:clamp(1.35rem,3vw,1.75rem);display:flex}.portfolio-card[data-section=playground]{background:linear-gradient(145deg, color-mix(in srgb, var(--forest-soft) 52%, transparent), transparent 56%), color-mix(in srgb, var(--surface) 84%, transparent)}.portfolio-meta{flex-wrap:wrap;gap:.35rem .55rem;margin-bottom:1.25rem;display:flex}.portfolio-title{margin-bottom:.7rem}.item-description{color:var(--muted-ink)}.portfolio-card .item-description{flex:1}.portfolio-cta{margin-top:1.25rem;margin-bottom:0}.portfolio-cta a{min-height:var(--interactive-min-size);align-items:center;display:inline-flex}.portfolio-details{border-bottom:1px solid var(--line);max-width:56rem}.portfolio-detail{border-top:1px solid var(--line);padding-block:clamp(2.5rem,6vw,4rem)}.portfolio-detail h2{margin-bottom:.8rem}.portfolio-detail>p:not(.portfolio-meta,.portfolio-cta){max-width:46rem}.portfolio-detail ol{padding-left:1.3rem}.external-mark{margin-left:.22em;font-size:.75em;display:inline-block}.post-list{border-bottom:1px solid var(--line);max-width:var(--reading-measure)}.post-list>li{border-top:1px solid var(--line);padding-block:1.5rem}.post-title{margin-bottom:.5rem;font-size:clamp(1.25rem,3vw,1.55rem);line-height:1.3}.post-title a{color:var(--ink)}.post-list time{color:var(--muted-ink);font-family:var(--mono);margin-top:.75rem;font-size:.78rem;display:block}.empty-state{color:var(--muted-ink);font-style:italic}.article-header{border-bottom:1px solid var(--line);margin-bottom:2.5rem;padding-bottom:2.5rem}.article-header h1{max-width:none}.article-meta{color:var(--muted-ink);font-family:var(--mono);flex-wrap:wrap;align-items:center;gap:.3rem .55rem;margin-top:1.25rem;font-size:.78rem;display:flex}.article-image{border-radius:var(--radius);width:100%;height:auto;margin-bottom:2.5rem}.prose{line-height:1.75}.prose h2,.prose h3{margin-top:2.75rem;margin-bottom:.85rem}.prose h2{font-size:clamp(1.55rem,4vw,2rem)}.prose h3{font-size:clamp(1.2rem,3vw,1.45rem)}.prose ul,.prose ol{padding-left:1.35rem}.prose li+li{margin-top:.45rem}.prose a,main p a{text-decoration:underline}.prose blockquote{border-left:3px solid var(--forest);color:var(--muted-ink);margin:2rem 0;padding-left:1.25rem}.prose figure{margin:2.25rem 0}.prose figcaption{color:var(--muted-ink);font-size:var(--text-small);margin-top:.65rem}.prose img,.prose video,.prose iframe{max-width:100%;height:auto}.prose table{border-collapse:collapse;width:max-content;max-width:100%;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--line);text-align:left;padding:.65rem .9rem}.prose pre{background:var(--forest-deep);color:#f7f7f2;border-radius:.45rem;max-width:100%;padding:1rem;overflow-x:auto}.prose code{font-family:var(--mono);font-size:.9em}.prose :not(pre)>code{background:color-mix(in srgb, var(--forest) 10%, transparent);border-radius:.25rem;padding:.12em .3em}.closing-section{max-width:var(--reading-measure)}.site-footer{border-top:1px solid var(--line);color:var(--muted-ink);font-size:var(--text-small)}.footer-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 2rem;padding-block:1.75rem 3rem;display:flex}.footer-inner p{margin:0}.footer-links{flex-wrap:wrap;gap:.25rem 1rem;display:flex}.footer-links a{min-height:var(--interactive-min-size);align-items:center;display:inline-flex}@media (width<=48rem){.header-inner{flex-direction:column;align-items:flex-start;gap:.25rem}nav,nav ul{width:100%}nav ul{justify-content:space-between}.section-heading{flex-direction:column;align-items:flex-start}}@media (width<=32rem){.shell{width:calc(100% - 2rem)}nav ul{justify-content:flex-start;gap:.1rem .75rem}h1{font-size:clamp(2.35rem,12vw,3.25rem)}.hero{padding-block:3.75rem 4.5rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.001ms!important}}@media (forced-colors:active){.portfolio-card{border:1px solid canvastext}}
