@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(/_next/static/media/3d165c286d94e27c-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(/_next/static/media/e54d16b9f2c4535b-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(/_next/static/media/7c21074d9bafed1b-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(/_next/static/media/916860560b9a2bc2-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(/_next/static/media/591e43f23f51e5a5-s.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:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(/_next/static/media/97ac91773d3121b2-s.p.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:"Source Serif 4 Fallback";src:local("Times New Roman");ascent-override:87.87%;descent-override:28.41%;line-gap-override:0.00%;size-adjust:117.91%}.__className_25ee46{font-family:"Source Serif 4","Source Serif 4 Fallback";font-style:normal}.__variable_25ee46{--font-source-serif:"Source Serif 4","Source Serif 4 Fallback"}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/886030b0b59bc5a7-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/0aa834ed78bf6d07-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/67957d42bae0796d-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/f911b923c6adde36-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/939c4f875ee75fbb-s.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:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(/_next/static/media/bb3ef058b751a6ad-s.p.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:JetBrains Mono Fallback;src:local("Arial");ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.00%;size-adjust:134.59%}.__className_3c557b{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.__variable_3c557b{--font-jetbrains-mono:"JetBrains Mono","JetBrains Mono Fallback"}:root{color-scheme:light;--jm-bg:#fdfcf9;--jm-bg-soft:#f4f0e7;--jm-bg-alt:#eee9de;--jm-text:#292722;--jm-subtle:#5d584f;--jm-accent:#426d4f;--jm-link:#405f70;--jm-link-hover:#294958;--jm-border:#d8d1c5;--jm-border-strong:#aaa194;--jm-shell-width:1040px;--jm-serif:var(--font-source-serif),"Palatino Linotype","Book Antiqua",serif;--jm-mono:var(--font-jetbrains-mono),"Courier New",monospace}*,:after,:before{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;overflow-x:hidden;background:var(--jm-bg);color:var(--jm-text);font-family:var(--jm-serif);line-height:1.65}a{color:var(--jm-link);text-underline-offset:.18em;transition:color .14s ease,border-color .14s ease,background-color .14s ease}a:hover{color:var(--jm-link-hover)}[tabindex]:focus-visible,a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--jm-accent);outline-offset:3px}button{font:inherit}button:disabled{cursor:not-allowed;opacity:.62}img{max-width:100%;height:auto}main>section[id]{scroll-margin-top:4.5rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.site-shell{width:min(100%,var(--jm-shell-width));margin:0 auto;padding-inline:clamp(1rem,3vw,2rem)}.site-header{position:sticky;top:0;z-index:50;border-bottom:1px solid var(--jm-border);background:var(--jm-bg)}.site-header-inner{display:flex;align-items:center;justify-content:space-between;gap:1.5rem;min-height:4rem;padding-block:.7rem}.site-mark{color:var(--jm-text);font-family:var(--jm-mono);font-size:.92rem;font-weight:650;letter-spacing:.16em;line-height:1;text-decoration:none;text-transform:uppercase}.site-nav{display:flex;align-items:center;justify-content:flex-end;gap:clamp(.85rem,2vw,1.5rem)}.site-nav-link{border-bottom:1px solid transparent;padding-block:.25rem;color:var(--jm-subtle);font-family:var(--jm-mono);font-size:.78rem;letter-spacing:.04em;text-decoration:none}.site-nav-link:hover,.site-nav-link[aria-current=page]{border-bottom-color:currentColor;color:var(--jm-text)}.button-link,.button-primary,.button-secondary{display:inline-flex;min-height:2.75rem;align-items:center;justify-content:center;border:1px solid var(--jm-border-strong);border-radius:0;padding:.65rem 1rem;background:transparent;color:var(--jm-text);cursor:pointer;font-family:var(--jm-mono);font-size:.8rem;font-weight:550;letter-spacing:.02em;text-decoration:none}.button-primary{border-color:var(--jm-accent);background:var(--jm-accent);color:#fffdf8}.button-primary:hover{background:#31573d;color:#fffdf8}.button-link:hover,.button-secondary:hover{border-color:var(--jm-text);background:var(--jm-bg-soft);color:var(--jm-text)}.site-section{padding-block:clamp(3.5rem,7vw,5.75rem)}.site-section-accent{border-block:1px solid var(--jm-border);background:var(--jm-bg-soft)}.hero{padding-block:clamp(3.75rem,8vw,6.5rem);border-bottom:1px solid var(--jm-border)}.hero-inner{display:grid;justify-items:start}.article-card-meta,.blog-eyebrow,.section-label{color:var(--jm-subtle);font-family:var(--jm-mono);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase}.hero h1{max-width:21ch;margin:0 0 1.35rem;font-size:clamp(2.45rem,6vw,4.4rem);line-height:1.04;letter-spacing:-.018em}.hero h1 em{color:var(--jm-accent);font-style:italic;font-weight:500}.hero-copy{max-width:64ch;margin:0;color:var(--jm-subtle);font-size:1.04rem}.hero-actions{display:flex;flex-wrap:wrap;gap:.7rem;margin-top:1.65rem}.section-heading{max-width:72ch;margin-bottom:clamp(1.5rem,3vw,2.25rem)}.section-heading-center{margin-inline:auto;text-align:center}.section-label{display:flex;align-items:center;gap:.85rem;margin-bottom:.85rem}.section-label:after{content:"";width:3rem;height:1px;background:var(--jm-border-strong)}.section-heading-center .section-label{justify-content:center}.section-heading-center .section-label:before{content:"";width:3rem;height:1px;background:var(--jm-border-strong)}.article-card-title,.blog-title,.project-title,.section-heading h2{margin:0 0 .7rem;color:var(--jm-text);font-size:clamp(1.55rem,3vw,2.15rem);line-height:1.15}.hero-line{display:block}.section-heading-title-link{color:inherit;text-decoration:none}.section-heading-title-link:hover{color:inherit;text-decoration:underline;text-decoration-thickness:1px}.section-intro{max-width:62ch;margin:0;color:var(--jm-subtle)}.projects-list{display:grid;gap:clamp(1.5rem,3vw,2.75rem)}.project-card{display:flex;flex-direction:column;min-width:0;padding-top:1.35rem;border-top:1px solid var(--jm-border)}.project-title{margin-bottom:1rem;font-size:clamp(1.45rem,2.4vw,1.85rem)}.project-body{max-width:68ch}.blog-header-card p,.contact-card p,.project-body p{margin:0 0 1rem;color:var(--jm-subtle)}.project-links{display:flex;flex-wrap:wrap;gap:1rem;margin-top:1.25rem}.project-card .project-links{margin-top:auto;padding-top:1.25rem}.project-links a,.text-link{color:var(--jm-accent);font-family:var(--jm-mono);font-size:.8rem;text-decoration:underline;text-decoration-thickness:1px}.embed-frame{margin-block:1.75rem;padding-block:1.5rem;border-block:1px solid var(--jm-border)}.footnote-embed-container{width:100%}.footnote-embed-wrapper{width:100%;overflow:visible;border:1px solid var(--jm-border-strong);border-radius:0;background:var(--jm-bg)}.footnote-iframe{display:block;width:100%;border:0;overflow:auto}.footnote-embed-placeholder{border:1px solid var(--jm-border);border-radius:0;padding:1.4rem;background:var(--jm-bg-soft)}.footnote-embed-placeholder>div{max-width:60ch}.footnote-embed-placeholder h3{margin:0 0 .75rem;font-size:1.2rem}.footnote-embed-placeholder li,.footnote-embed-placeholder p{color:var(--jm-subtle)}.blog-markdown-body code,.footnote-embed-placeholder code{border:1px solid var(--jm-border);border-radius:0;padding:.12rem .3rem;background:var(--jm-bg-alt);font-family:var(--jm-mono);font-size:.9em}.footnote-embed-placeholder code{overflow-wrap:anywhere;word-break:break-word}.footnote-embed-note{padding:1rem;border-left:2px solid var(--jm-border-strong);background:var(--jm-bg)}.footnote-embed-link{display:inline-flex;align-items:center;border-bottom:1px solid;padding-block:.3rem;color:var(--jm-accent);font-family:var(--jm-mono);font-size:.8rem;text-decoration:none}.about-copy{max-width:84ch}.about-copy p{margin:0 0 1.15rem;color:var(--jm-subtle)}.about-copy p:last-child{margin-bottom:0}.articles-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));align-items:start;gap:clamp(1.5rem,3vw,2.5rem)}.article-card{min-width:0}.article-card-link{display:block;text-decoration:none}.article-card-link,.article-card-link:hover{color:var(--jm-text)}.article-card-link:focus-visible{outline-offset:5px}.article-card-image-wrap{position:relative;display:block;aspect-ratio:16/10;overflow:hidden;border:1px solid var(--jm-border);border-radius:0;background:var(--jm-bg-alt)}.article-card-image{object-fit:cover;transition:opacity .14s ease}.article-card-link:hover .article-card-image{opacity:.88}.article-card-body{padding-top:1rem}.article-card-meta{display:flex;flex-wrap:wrap;gap:.45rem .75rem;margin-bottom:.65rem}.article-card-title{margin:0 0 .55rem;font-size:1.3rem}.article-card-link:hover .article-card-title{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.15em}.article-card-excerpt{margin:0 0 .75rem;color:var(--jm-subtle)}.blog-header{padding-block:clamp(3rem,6vw,5rem) 2rem}.blog-header-card{padding-block:1.5rem;border-block:1px solid var(--jm-border)}.blog-header-card p{max-width:68ch;margin-bottom:0}.blog-title{margin:0 0 .45rem}.blog-post-list-items{border-bottom:1px solid var(--jm-border)}.article-card-archive{padding-block:1.5rem;border-top:1px solid var(--jm-border)}.article-card-archive .article-card-link{display:grid;grid-template-columns:minmax(220px,.8fr) minmax(0,1.7fr);align-items:start;gap:clamp(1.25rem,3vw,2.5rem)}.article-card-archive .article-card-body{padding-top:.15rem}.blog-post-list-footer{display:flex;justify-content:center;padding-top:2rem}.blog-post-layout{padding-block:clamp(2.5rem,6vw,5rem)}.blog-markdown-content{max-width:72ch;margin-inline:auto}.blog-post-header{margin-bottom:2.5rem;padding-bottom:2rem;border-bottom:1px solid var(--jm-border)}.blog-post-header h1{margin:0 0 1rem;font-size:clamp(2.2rem,6vw,3.5rem);line-height:1.08;letter-spacing:-.015em}.blog-post-meta{display:flex;flex-wrap:wrap;gap:.5rem .8rem;color:var(--jm-subtle);font-family:var(--jm-mono);font-size:.76rem;letter-spacing:.08em;text-transform:uppercase}.blog-feed-status{justify-content:center;padding:2rem}.blog-feed-loading{display:inline-flex;align-items:center;gap:.5rem}.blog-feed-spinner{width:18px;height:18px;border:2px solid color-mix(in srgb,var(--jm-accent) 25%,transparent 75%);border-top-color:var(--jm-accent);border-radius:50%;animation:blog-feed-spin 1s linear infinite}.blog-feed-end{margin-top:2rem;border-top:1px solid var(--jm-border)}@keyframes blog-feed-spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.blog-feed-spinner{animation:none}}.blog-post-cover{margin:1.75rem 0 0;border:1px solid var(--jm-border);border-radius:0;background:var(--jm-bg-alt)}.blog-post-cover img{display:block;width:100%;height:auto}.blog-markdown-body h1,.blog-markdown-body h2,.blog-markdown-body h3,.blog-markdown-body h4,.blog-markdown-body h5,.blog-markdown-body h6{margin:2rem 0 .8rem;line-height:1.2}.blog-markdown-body blockquote,.blog-markdown-body ol,.blog-markdown-body p,.blog-markdown-body pre,.blog-markdown-body ul{margin:0 0 1.15rem}.blog-markdown-body img{display:block;max-width:100%;margin:1.5rem auto;border:1px solid var(--jm-border)}.blog-markdown-body pre{padding:1rem;overflow-x:auto;border:1px solid var(--jm-border);border-radius:0;background:var(--jm-bg-soft)}.blog-markdown-body pre code{border:0;background:transparent;padding:0}.blog-markdown-body blockquote{padding-left:1rem;border-left:2px solid var(--jm-accent);color:var(--jm-subtle)}.contact-card{padding-top:1.5rem;border-top:1px solid var(--jm-border-strong)}.contact-layout{max-width:880px}.contact-layout .section-heading{margin-bottom:clamp(1.5rem,3vw,2.25rem)}.contact-form{display:grid;gap:1rem}.contact-field{display:grid;gap:.35rem}.contact-field span{color:var(--jm-subtle);font-family:var(--jm-mono);font-size:.75rem;letter-spacing:.08em;text-transform:uppercase}.contact-field input,.contact-field textarea{width:100%;border:1px solid var(--jm-border-strong);border-radius:0;padding:.85rem .9rem;background:var(--jm-bg);color:var(--jm-text);font:inherit}.contact-field input:focus,.contact-field textarea:focus{border-color:var(--jm-accent)}.honeypot-field{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}.form-status{padding:.8rem .9rem;border-left:2px solid;font-family:var(--jm-mono);font-size:.82rem}.form-status.success{border-color:var(--jm-accent);background:#edf3ec;color:#31573d}.form-status.error{border-color:#9b4040;background:#f7ece8;color:#7a2d2d}.site-footer{padding-block:2.25rem;border-top:1px solid var(--jm-border)}.site-footer-inner{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1rem 2rem}.site-footer-copy,.site-footer-mark{margin:0;color:var(--jm-subtle)}.site-footer-mark{font-style:italic}.site-footer-links{display:flex;flex-wrap:wrap;gap:.75rem 1rem;font-family:var(--jm-mono);font-size:.78rem}@media (min-width:900px){.projects-list{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card-featured{grid-column:1/-1}}@media (max-width:700px){.site-header-inner{display:grid;justify-content:stretch;gap:.55rem;padding-block:.65rem .55rem}.site-nav{display:grid;grid-template-columns:repeat(4,max-content);justify-content:space-between;gap:.75rem;width:100%}.site-nav-link{font-size:.72rem}.hero{padding-top:3rem}.hero h1{font-size:clamp(2.3rem,11vw,3.25rem)}.projects-list{gap:2.5rem}.article-card-archive .article-card-link{display:block}.article-card-archive .article-card-body{padding-top:1rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.article-card-image,a,button{transition:none}}