:root{--bg:#F5F6F2;--ink:#1b1f1a;--mute:#6b7168;--line:#d8dbd1;--accent:#0c7d5e;--mono:"IBM Plex Mono",ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;box-sizing:border-box;color-scheme:light}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;src:url('/assets/fonts/ibm-plex-mono-400-latin.woff2') format('woff2')}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;src:url('/assets/fonts/ibm-plex-mono-500-latin.woff2') format('woff2')}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){--bg:#101311;--ink:#e9ece6;--mute:#8f978f;--line:#272c27;--accent:#4be0a0;color-scheme:dark}}
:root[data-theme="dark"]{--bg:#101311;--ink:#e9ece6;--mute:#8f978f;--line:#272c27;--accent:#4be0a0;color-scheme:dark}
*,*::before,*::after{box-sizing:border-box}html{height:100%}body{margin:0;height:100%;background:var(--bg);color:var(--ink);font:400 .94rem/1.7 var(--mono);-webkit-font-smoothing:antialiased}a{color:inherit}button,input{font:inherit;color:inherit}button{background:none;border:0;padding:0;cursor:pointer;text-align:left}button:disabled{opacity:.35;cursor:default}:focus-visible{outline:2px solid var(--accent);outline-offset:5px}button,a{-webkit-tap-highlight-color:transparent}img{max-width:100%} [hidden]{display:none!important}
#field{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}.page{position:relative;z-index:1;min-height:100%;display:flex;flex-direction:column;padding:calc(env(safe-area-inset-top,0px) + clamp(1.1rem,3vw,2rem)) clamp(1.1rem,4vw,3rem) calc(env(safe-area-inset-bottom,0px) + clamp(1.1rem,3vw,2rem))}.bar{display:flex;justify-content:space-between;gap:1rem}.bar b{font-weight:500}.lang{color:var(--mute);text-decoration:none}.lang:hover{color:var(--ink)}.mid{margin-top:clamp(2.5rem,11vh,7rem);animation:appear .9s .6s both}.bio{margin:0 0 1.75rem;max-width:31rem;color:var(--mute)}.list{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem}.list button{font-size:1.15rem;font-weight:500;padding:.15rem 0;transition:color .15s}.list button:hover{color:var(--accent)}.foot{margin-top:auto;display:flex;flex-wrap:wrap;gap:.25rem 1.5rem;color:var(--mute)}.foot a{text-decoration:none}.foot a:hover,.foot button:hover{color:var(--ink)}.foot button{color:var(--mute)}.foot button[aria-pressed=true]{color:var(--accent)}#ro{margin-left:auto;font-variant-numeric:tabular-nums;color:var(--accent)}
.panel{position:fixed;inset:0;z-index:10;overflow:auto;background:var(--bg);visibility:hidden;clip-path:circle(0 at var(--x,50%) var(--y,50%));transition:clip-path .45s cubic-bezier(.7,0,.2,1),visibility 0s .45s;overscroll-behavior:contain}.panel.open{visibility:visible;clip-path:circle(150% at var(--x,50%) var(--y,50%));transition:clip-path .55s cubic-bezier(.7,0,.2,1),visibility 0s}.pin{max-width:70rem;margin:0 auto;padding:calc(env(safe-area-inset-top,0px) + 1.25rem) clamp(1.1rem,4vw,2rem) calc(env(safe-area-inset-bottom,0px) + 4rem)}.pin.narrow{max-width:54rem}.panel-nav{position:sticky;top:0;z-index:2;display:flex;align-items:center;gap:1.25rem;min-height:3rem;padding:.5rem 0;background:var(--bg);border-bottom:1px solid var(--line)}.panel-nav .lang{margin-left:auto}.x,.back{color:var(--mute)}.x:hover,.back:hover{color:var(--ink)}.back{text-decoration:none}.x{white-space:nowrap}h1,h2{font-weight:500;line-height:1.25;letter-spacing:-.035em}h2{font-size:clamp(1.7rem,4vw,2.3rem);margin:2.5rem 0 .8rem}h1{font-size:clamp(1.7rem,4vw,2.55rem);margin:.55rem 0 1rem;max-width:28ch}.intro{margin:0 0 2.5rem;color:var(--mute);max-width:54ch}.article-meta,.eyebrow{font-size:.8rem;color:var(--mute)}.article-head{padding:2.6rem 0 2rem;border-bottom:1px solid var(--line);margin-bottom:2.5rem}.article-meta{display:flex;flex-wrap:wrap;gap:.3rem 1.2rem}.eyebrow{margin:0;letter-spacing:.07em;text-transform:uppercase}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2.5rem 1.5rem}.project-card{text-decoration:none;display:block;min-width:0}.project-cover{aspect-ratio:16/10;overflow:hidden;border:1px solid var(--line);border-radius:3px;background:color-mix(in srgb,var(--ink) 3%,var(--bg));margin:0 0 1rem}.project-cover img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s}.project-card:hover .project-cover img{transform:scale(1.035)}.project-card h3{font-size:1rem;line-height:1.55;font-weight:500;margin:.45rem 0}.project-card:hover h3{color:var(--accent)}.project-card p{font-size:.84rem;color:var(--mute);margin:.65rem 0;line-height:1.65}.read-link{display:inline-block;color:var(--accent);font-size:.82rem;margin-top:.4rem}.rows{list-style:none;padding:0;margin:2rem 0}.rows li{display:grid;grid-template-columns:10rem 1fr;gap:1rem;padding:.9rem 0;border-top:1px solid var(--line)}.rows li:last-child{border-bottom:1px solid var(--line)}.rows span{color:var(--mute)}
.article-body{overflow-wrap:anywhere}.article-body>*{max-width:46rem;margin-left:auto;margin-right:auto}.article-body p{margin-top:0;margin-bottom:1.5rem}.article-body h2,.article-body h3,.article-body h4,.article-body h5,.article-body h6{font-weight:500;font-size:1.2rem;line-height:1.45;letter-spacing:-.02em;margin-top:3rem;margin-bottom:1rem}.article-body h2{font-size:1.45rem}.article-body a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:3px}.article-body ul,.article-body ol{padding-left:1.5rem;margin-top:1rem;margin-bottom:1.7rem}.article-body li{margin:.4rem 0}.article-body figure,.article-body .wp-block-gallery,.article-body .wp-block-columns{max-width:100%;margin-top:2rem;margin-bottom:2.5rem}.article-body figure{margin-left:auto;margin-right:auto}.article-body img{display:block;max-width:100%;height:auto;object-fit:contain;max-height:56rem;margin:0 auto;border-radius:3px}.article-body .wp-block-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.2rem;align-items:start}.article-body .wp-block-gallery>figure{margin:0;width:100%}.article-body .wp-block-gallery img{width:100%;height:auto}.article-body figcaption{font-size:.78rem;line-height:1.55;color:var(--mute);margin:.7rem auto 0;text-align:center;max-width:65ch}.article-body video{display:block;max-width:100%;width:100%;max-height:45rem;background:#101311;border-radius:3px}.article-body .wp-block-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem}.article-body .wp-block-column{min-width:0}.article-body pre{font-size:.8rem;line-height:1.65;background:color-mix(in srgb,var(--ink) 4%,var(--bg));border:1px solid var(--line);border-radius:3px;padding:1.25rem;overflow-x:auto;white-space:pre;overflow-wrap:normal}.article-body code{font-family:var(--mono)}.article-body :not(pre)>code{padding:.1rem .25rem;background:color-mix(in srgb,var(--ink) 5%,var(--bg));border-radius:2px}.article-body table{border-collapse:collapse;width:100%;font-size:.8rem}.article-body th,.article-body td{border:1px solid var(--line);padding:.7rem .8rem;text-align:left}.table-scroll{overflow-x:auto}.article-body blockquote{padding-left:1.5rem;border-left:2px solid var(--accent);color:var(--mute)}.article-body hr{border:0;border-top:1px solid var(--line);margin:3rem auto}.screen-reader-text,.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.image-open{display:block;width:100%;cursor:zoom-in}.image-open img{transition:opacity .2s}.image-open:hover img{opacity:.88}.image-open:focus-visible{outline-offset:6px}.article-next{max-width:46rem;margin:3rem auto 0;padding:1.5rem 0 0;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:2rem}.article-next a{color:var(--accent);font-size:.84rem;text-decoration:none}.section-jumps{display:flex;flex-wrap:wrap;gap:.5rem 1.2rem;padding:1rem 0 1.5rem;margin-bottom:1.5rem;border-bottom:1px solid var(--line);font-size:.8rem}.section-jumps a{color:var(--mute);text-decoration:none}.section-jumps a:hover{color:var(--accent)}.article-body [id]{scroll-margin-top:5rem}.cv-frame{width:100%;height:calc(100dvh - 11rem);min-height:30rem;border:1px solid var(--line);background:#fff}.download-link{color:var(--accent);font-size:.85rem}
#lightbox{background:var(--bg);color:var(--ink);border:1px solid var(--line);border-radius:4px;padding:1rem;max-width:96vw;width:80rem;max-height:96dvh}#lightbox::backdrop{background:rgba(0,0,0,.8)}.lightbox-top{display:flex;gap:1rem;align-items:center;margin-bottom:.9rem}.lightbox-top span{color:var(--mute);font-size:.8rem}.lightbox-top button:last-child{margin-left:auto}#lightbox figure{margin:0}#lightbox img{display:block;max-width:100%;max-height:77dvh;width:auto;height:auto;margin:auto;object-fit:contain}#lightbox figcaption{max-width:70ch;margin:.8rem auto 0;text-align:center;color:var(--mute);font-size:.8rem}.lightbox-arrows{display:flex;gap:1.25rem}.lightbox-arrows button{font-size:1.3rem;line-height:1}
#cmd{position:fixed;inset:0;z-index:30;display:flex;align-items:flex-end;justify-content:center;padding:1rem 1rem calc(env(safe-area-inset-bottom,0px) + 1rem);background:color-mix(in srgb,var(--bg) 55%,transparent)}.cb{width:min(34rem,100%);background:var(--bg);border:1px solid var(--line);border-radius:6px;overflow:hidden}.cb ul{margin:0;padding:.35rem 0;list-style:none;max-height:40vh;overflow:auto;border-bottom:1px solid var(--line)}.cb ul:empty{display:none}.cb li{padding:.3rem 1rem;color:var(--mute);cursor:pointer}.cb li.on{color:var(--accent)}.cb label{display:flex;gap:.6rem;padding:.8rem 1rem;color:var(--mute)}.cb input{flex:1;min-width:0;border:0;outline:0;background:none;color:var(--ink);font:inherit;font-size:1rem}@keyframes appear{from{opacity:0}}
@media(max-width:640px){.project-grid{grid-template-columns:1fr;gap:2.2rem}.rows li{grid-template-columns:1fr;gap:.25rem}.article-body .wp-block-columns{grid-template-columns:1fr}.article-body .wp-block-gallery{gap:.7rem}.article-body .wp-block-gallery img{max-height:none}#ro{display:none}.pin{padding-top:calc(env(safe-area-inset-top,0px) + .7rem)}.panel-nav{gap:1rem;font-size:.85rem}.article-head{padding-top:2rem}#lightbox{padding:.7rem}.lightbox-top{font-size:.8rem}.cv-frame{min-height:24rem}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}

.article-body>section{max-width:100%}.article-body>section>p,.article-body>section>h2,.article-body>section>h3,.article-body>section>h4,.article-body>section>h5,.article-body>section>h6{max-width:46rem;margin-left:auto;margin-right:auto}.article-body .wp-block-columns:has(>.wp-block-column:only-child){grid-template-columns:minmax(0,1fr)}
