@font-face{font-family:Inter;src:url(/fonts/InterVariable.woff2)format("woff2");font-weight:100 900;font-display:swap}:root{color-scheme:light;--bg:#f7f7f3;--bg-strong:#efefe8;--surface:#fff;--text:#171717;--muted:#66665f;--subtle:#8a8a83;--border:#dfdfd6;--accent:#2945b8;--code-bg:#111318;--radius:8px;--max-width:1120px;--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", serif;--font-mono:ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;font-family:var(--font-sans)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:#101214;--bg-strong:#191d20;--surface:#181b1f;--text:#f2f4f0;--muted:#b5b8b1;--subtle:#868c84;--border:#2d3230;--accent:#8fb7ff;--code-bg:#090b0f}}:root[data-theme=dark]{color-scheme:dark;--bg:#101214;--bg-strong:#191d20;--surface:#181b1f;--text:#f2f4f0;--muted:#b5b8b1;--subtle:#868c84;--border:#2d3230;--accent:#8fb7ff;--code-bg:#090b0f}*{box-sizing:border-box}html{background:var(--bg)}body{background:var(--bg);color:var(--text);margin:0;font-size:16px;line-height:1.6}a{color:inherit;text-decoration-color:color-mix(in srgb, currentColor 35%, transparent);text-underline-offset:.18em}a:hover{color:var(--accent)}:where(a,button):focus-visible{outline:2px solid var(--accent);outline-offset:2px}h1,h2,h3{text-wrap:balance}code{font-family:var(--font-mono)}.skip-link{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:focus-visible{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);clip:auto;color:var(--text);white-space:normal;z-index:100;width:auto;height:auto;padding:.55rem .85rem;position:fixed;top:.75rem;left:.75rem}img,video{max-width:100%;height:auto}figure{margin:2rem 0}figcaption{color:var(--muted);text-align:center;margin-top:.65rem;font-size:.92rem}pre{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius);color:#f5f7ff;padding:1rem;overflow-x:auto}.astro-code,.astro-code span{background-color:var(--shiki-light-bg);color:var(--shiki-light)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .astro-code,:root:not([data-theme=light]) .astro-code span{background-color:var(--shiki-dark-bg);color:var(--shiki-dark)}}:root[data-theme=dark] .astro-code,:root[data-theme=dark] .astro-code span{background-color:var(--shiki-dark-bg);color:var(--shiki-dark)}code{font-size:.92em}:not(pre)>code{background:var(--bg-strong);border:1px solid var(--border);border-radius:5px;padding:.12rem .3rem}blockquote{border-left:3px solid var(--accent);color:var(--muted);margin:2rem 0;padding-left:1.1rem}.site-shell{max-width:var(--max-width);margin:0 auto;padding:0 1.2rem}.site-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding:1.1rem 0;display:flex}.brand{color:var(--text);align-items:center;gap:.6rem;font-weight:700;text-decoration:none;display:inline-flex}.brand:hover{color:var(--text)}.brand-mark{background:var(--text);color:var(--surface);border-radius:7px;justify-content:center;align-items:center;width:2rem;height:2rem;font-size:.78rem;display:inline-flex}.nav{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.2rem;display:flex}.header-actions{align-items:center;gap:.45rem;display:flex}.nav a{color:var(--muted);border-radius:999px;padding:.45rem .75rem;font-size:.94rem;text-decoration:none}.nav a:hover,.nav a[aria-current=page]{background:var(--surface);color:var(--text)}.theme-toggle{background:var(--surface);border:1px solid var(--border);color:var(--muted);cursor:pointer;border-radius:999px;flex:none;justify-content:center;align-items:center;width:2.25rem;height:2.25rem;padding:0;display:inline-flex}.theme-toggle:hover{background:var(--bg-strong);color:var(--text)}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.theme-icon{width:1.05rem;height:1.05rem;display:none}:root[data-theme=light] .theme-icon-moon,:root:not([data-theme]) .theme-icon-moon,:root[data-theme=dark] .theme-icon-sun{display:block}@media (prefers-color-scheme:dark){:root:not([data-theme]) .theme-icon-moon{display:none}:root:not([data-theme]) .theme-icon-sun{display:block}}.hero{text-align:center;flex-direction:column;align-items:center;gap:1rem;padding:3.5rem 0 3rem;display:flex}.hero-avatar{aspect-ratio:1;border:1px solid var(--border);box-shadow:0 0 0 4px var(--surface);filter:brightness(1.15);object-fit:cover;object-position:center 28%;border-radius:999px;width:5.25rem;height:5.25rem}.hero h1{color:var(--text);letter-spacing:-.02em;margin:0;font-size:clamp(2rem,4vw,3.25rem);font-weight:700;line-height:1}.hero-copy{color:var(--muted);max-width:48rem;margin:0;font-size:clamp(1.05rem,1.8vw,1.35rem);line-height:1.45}.actions{flex-wrap:wrap;justify-content:center;gap:.7rem;margin-top:.25rem;display:flex}.button{border:1px solid var(--border);border-radius:999px;justify-content:center;align-items:center;min-height:2.55rem;padding:.6rem 1rem;font-size:.95rem;font-weight:650;text-decoration:none;display:inline-flex}.button.primary{background:var(--text);border-color:var(--text);color:var(--surface)}.button.primary:hover{background:var(--accent);border-color:var(--accent);color:var(--surface)}.button.secondary{background:var(--surface);color:var(--text)}.button.secondary:hover{border-color:color-mix(in srgb, var(--accent) 35%, var(--border));color:var(--accent)}.section{border-top:1px solid var(--border);padding:2.5rem 0}.section-heading{justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:1.2rem;display:flex}.section-heading h2{letter-spacing:-.015em;margin:0;font-size:clamp(1.5rem,3vw,2.2rem);line-height:1}.muted{color:var(--muted)}.project-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:.8rem;display:grid}.project-card,.page-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.project-card{grid-template-columns:5rem minmax(0,1fr);align-items:center;gap:.75rem;padding:.75rem;display:grid;overflow:hidden}.project-card h3,.post-row h2,.page-card h2{margin:0}.post-list{display:grid}.post-row{border-bottom:1px solid var(--border);border-radius:var(--radius);grid-template-columns:minmax(0,1fr) auto;gap:.15rem;margin:0 -.9rem;padding:1.35rem .9rem;text-decoration:none;display:grid}.post-row:first-child{border-top:1px solid var(--border)}.post-row h2,.post-row h3{letter-spacing:-.01em;font-size:1.25rem;line-height:1.3}.post-excerpt{-webkit-line-clamp:2;-webkit-box-orient:vertical;max-width:68ch;margin:.3rem 0 0;display:-webkit-box;overflow:hidden}@media (hover:hover) and (pointer:fine){.post-row:hover{background:var(--surface)}}.project-card h3 a{text-decoration-thickness:1px}.project-card p{margin:.35rem 0 0;font-size:.95rem;line-height:1.45}.project-feedback-link{color:var(--accent);margin-top:.65rem;font-size:.9rem;font-weight:650;text-decoration:none;display:inline-block}.project-feedback-link:hover{text-decoration:underline}.project-preview{aspect-ratio:4/3;background:var(--bg-strong);border:1px solid var(--border);border-radius:calc(var(--radius) - 2px);justify-content:center;align-items:center;width:5rem;display:flex;overflow:hidden}.project-preview img{object-fit:cover;width:100%;height:100%;display:block}.project-preview img[src$=\.svg]{box-sizing:border-box;object-fit:contain;padding:1rem}.project-preview img[data-fit=contain]{box-sizing:border-box;object-fit:contain;padding:.6rem}.project-preview-fallback{background:var(--text);color:var(--surface);border-radius:999px;justify-content:center;align-items:center;width:2.25rem;height:2.25rem;font-size:.92rem;font-weight:750;display:inline-flex}.project-body{min-width:0;padding:0}.project-meta,.post-meta{color:var(--subtle);font-size:.88rem}.post-row .post-meta{text-align:right;white-space:nowrap;padding-top:.2rem}.article{max-width:760px;margin:0 auto;padding:3rem 0 5rem}.article-header{margin-bottom:2rem}.article h1{letter-spacing:-.02em;margin:0 0 1rem;font-size:clamp(2rem,4.5vw,3.25rem);line-height:1.05}.article-description{color:var(--muted);font-size:1.12rem}.article-content{font-size:1.05rem}.article-content.prose{font-family:var(--font-serif);font-size:1.12rem;line-height:1.7}.article-content.prose h2,.article-content.prose h3,.article-content.prose h4{font-family:var(--font-sans);letter-spacing:-.015em}.article-content.prose blockquote{font-style:italic}.article-content h2,.article-content h3,.article-content h4{margin-top:2.5rem;line-height:1.15}.article-content a{color:var(--accent)}.article-content img{border-radius:var(--radius)}.related-writing{border-top:1px solid var(--border);margin-top:3rem;padding-top:2rem}.related-writing>h2{margin:0 0 1rem;font-size:clamp(1.4rem,3vw,1.9rem)}.article:has(.about-hero){max-width:920px}.article:has(.portfolio-section){max-width:1040px}.portfolio-section{padding:2rem 0}.portfolio-section+.portfolio-section{border-top:1px solid var(--border)}.portfolio-section h2{margin:0 0 1.1rem;font-size:clamp(1.45rem,3vw,2.05rem)}.portfolio-featured-grid,.portfolio-archive-grid,.portfolio-older-archive-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;display:grid}.portfolio-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);grid-template-rows:auto 1fr;display:grid;overflow:hidden}.article-content a.portfolio-card{color:inherit;text-decoration:none}.portfolio-card[href]:hover{border-color:color-mix(in srgb, var(--accent) 35%, var(--border))}.portfolio-card[href] h3{color:var(--accent)}.portfolio-card-media{aspect-ratio:16/9;background:var(--bg-strong);border-bottom:1px solid var(--border);justify-content:center;align-items:center;display:flex}.portfolio-card-media img{object-fit:cover;width:100%;height:100%;display:block}.portfolio-card-media img[src$=\.svg]{box-sizing:border-box;object-fit:contain;padding:2.2rem}.portfolio-card-media img[data-fit=contain]{box-sizing:border-box;object-fit:contain;padding:1.4rem}.portfolio-card-compact .portfolio-card-media img[data-fit=contain],.portfolio-card-small .portfolio-card-media img[data-fit=contain]{padding:.7rem}.portfolio-card-fallback{background:var(--text);color:var(--surface);border-radius:999px;justify-content:center;align-items:center;width:3rem;height:3rem;font-size:1rem;font-weight:750;display:inline-flex}.portfolio-card-body{padding:1rem}.portfolio-meta{color:var(--subtle);letter-spacing:.06em;text-transform:uppercase;margin:0 0 .45rem;font-size:.82rem;font-weight:700}.portfolio-card h3{margin:0;font-size:1.25rem}.portfolio-card p{margin:.55rem 0 0}.portfolio-contribution{color:var(--muted)}.feedback-page{padding:3rem 0 5rem}.feedback-hero{max-width:46rem;margin-bottom:2.75rem}.feedback-hero h1{letter-spacing:-.035em;margin:0 0 1rem;font-size:clamp(2.3rem,5vw,4rem);line-height:1}.feedback-hero p{color:var(--muted);margin:0;font-size:clamp(1.05rem,1.8vw,1.25rem)}.feedback-section{border-top:1px solid var(--border);padding:2.5rem 0}.feedback-section-heading{justify-content:space-between;align-items:end;gap:1.5rem;margin-bottom:1.25rem;display:flex}.feedback-section-heading h2{letter-spacing:-.02em;margin:0;font-size:clamp(1.5rem,3vw,2.2rem);line-height:1.1}.feedback-section-heading p{color:var(--muted);max-width:46rem;margin:.55rem 0 0}.feedback-form{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);gap:1.15rem;max-width:760px;padding:clamp(1rem,3vw,1.6rem);display:grid}.feedback-field-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;display:grid}.feedback-field{gap:.42rem;display:grid}.feedback-field>span,.feedback-filter>span{color:var(--text);font-size:.9rem;font-weight:700}.feedback-field small{color:var(--subtle);font-size:.8rem;font-weight:500}.feedback-field :where(input,select,textarea),.feedback-filter select{appearance:none;background:var(--bg);border:1px solid var(--border);color:var(--text);font:inherit;border-radius:7px;width:100%;padding:.7rem .78rem;font-size:.96rem;line-height:1.35}.feedback-field select,.feedback-filter select{background-image:linear-gradient(45deg, transparent 50%, var(--muted) 50%), linear-gradient(135deg, var(--muted) 50%, transparent 50%);background-position:calc(100% - 16px) calc(50% - 2px),calc(100% - 11px) calc(50% - 2px);background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-right:2.25rem}.feedback-field textarea{resize:vertical;min-height:10rem}.feedback-field :where(input,select,textarea):focus,.feedback-filter select:focus{border-color:var(--accent);outline:2px solid color-mix(in srgb, var(--accent) 20%, transparent);outline-offset:1px}.feedback-field :where(input,textarea)::placeholder{color:var(--subtle)}.feedback-field select:disabled{color:var(--muted);cursor:not-allowed;opacity:.8}.feedback-context{border-top:1px solid var(--border);padding-top:1rem}.feedback-context summary{color:var(--muted);cursor:pointer;font-size:.92rem;font-weight:650}.feedback-context[open] summary{margin-bottom:1rem}.feedback-honeypot{width:1px;height:1px;position:absolute;left:-10000px;overflow:hidden}.feedback-config-note{background:var(--bg-strong);color:var(--muted);border-radius:7px;margin:0;padding:.7rem .8rem;font-size:.9rem}.feedback-form-footer{flex-wrap:wrap;align-items:center;gap:.85rem;display:flex}.feedback-submit{cursor:pointer}.feedback-submit:disabled{cursor:wait;opacity:.58}.feedback-form-status{color:var(--muted);margin:0;font-size:.92rem}.feedback-form-status[data-kind=error]{color:#b42318}.feedback-form-status[data-kind=success]{color:#217a45}:root[data-theme=dark] .feedback-form-status[data-kind=error]{color:#ff9b91}:root[data-theme=dark] .feedback-form-status[data-kind=success]{color:#7fdda8}.feedback-roadmap-heading{align-items:end}.feedback-filter{flex:0 0 12rem;gap:.35rem;display:grid}.feedback-board-state{color:var(--muted);margin:0 0 .9rem;font-size:.9rem}.feedback-board{grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;display:grid}.feedback-column{background:var(--bg-strong);border:1px solid var(--border);border-radius:var(--radius);min-width:0;padding:.75rem}.feedback-column-header{justify-content:space-between;align-items:center;gap:.7rem;margin-bottom:.7rem;display:flex}.feedback-column-header h3{letter-spacing:-.01em;margin:0;font-size:.95rem}.feedback-column-header span{background:var(--surface);border:1px solid var(--border);color:var(--muted);border-radius:999px;justify-content:center;align-items:center;min-width:1.5rem;height:1.5rem;padding:0 .35rem;font-size:.76rem;display:inline-flex}.feedback-ticket-list{gap:.6rem;display:grid}.feedback-ticket{background:var(--surface);border:1px solid var(--border);border-radius:7px;padding:.75rem}.feedback-ticket-meta{color:var(--subtle);letter-spacing:.045em;text-transform:uppercase;margin:0 0 .38rem;font-size:.72rem;font-weight:700}.feedback-ticket h4{margin:0;font-size:.96rem;line-height:1.35}.feedback-ticket-description{color:var(--muted);-webkit-line-clamp:4;-webkit-box-orient:vertical;margin:.55rem 0 0;font-size:.84rem;line-height:1.45;display:-webkit-box;overflow:hidden}.feedback-ticket-updated{color:var(--subtle);margin-top:.65rem;font-size:.75rem;display:block}.feedback-column-empty{color:var(--subtle);text-align:center;margin:0;padding:.65rem .2rem;font-size:.82rem}.portfolio-card-compact{grid-template-rows:auto;grid-template-columns:8rem minmax(0,1fr)}.portfolio-card-compact .portfolio-card-media{aspect-ratio:auto;border-bottom:0;border-right:1px solid var(--border);min-height:100%}.portfolio-card-small{grid-template-columns:6rem minmax(0,1fr)}.portfolio-card-small .portfolio-card-body{padding:.75rem}.portfolio-card-small .portfolio-meta{font-size:.72rem}.portfolio-card-small h3{font-size:1.05rem}.portfolio-card-small p{font-size:.92rem}.project-detail{max-width:920px}.project-back-link{margin-bottom:1rem;font-size:.92rem;font-weight:750;display:inline-block}.project-gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-top:2rem;display:grid}.project-gallery img{aspect-ratio:16/10;background:var(--bg-strong);border:1px solid var(--border);object-fit:cover;width:100%}.project-gallery img[data-fit=contain]{box-sizing:border-box;object-fit:contain;padding:1rem}.about-hero{grid-template-columns:minmax(0,1fr) minmax(12rem,15rem);align-items:center;gap:2rem;margin-bottom:2.5rem;display:grid}.about-kicker{color:var(--subtle);letter-spacing:.08em;text-transform:uppercase;margin:0 0 .75rem;font-size:.82rem;font-weight:750}.about-lede{color:var(--text);margin-top:0;font-size:clamp(1.15rem,2vw,1.32rem);line-height:1.45}.about-photo{aspect-ratio:1;border:1px solid var(--border);object-fit:cover;width:100%;display:block}.about-links{flex-wrap:wrap;gap:.6rem;margin-top:1.3rem;display:flex}.about-links a{background:var(--surface);border:1px solid var(--border);color:var(--text);border-radius:999px;padding:.48rem .78rem;font-size:.94rem;font-weight:650;text-decoration:none}.about-links a:hover{border-color:color-mix(in srgb, var(--accent) 35%, var(--border));color:var(--accent)}.about-section{border-top:1px solid var(--border);padding:2.35rem 0}.about-section h2{margin:0 0 1.15rem;font-size:clamp(1.45rem,3vw,2.05rem);line-height:1.05}.about-list,.about-notes,.timeline-group ul{margin:0;padding:0;list-style:none}.about-list{gap:.9rem;display:grid}.about-list li>span{color:var(--subtle);letter-spacing:.08em;text-transform:uppercase;margin-bottom:.18rem;font-size:.78rem;font-weight:750;line-height:1.2;display:block}.about-list p,.timeline-group li span{margin:0}.about-list-compact{color:var(--muted);gap:.35rem;padding-left:1.25rem;list-style:outside}.about-stats{grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;margin-bottom:1.1rem;display:grid}.about-stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:.9rem}.about-stat strong{margin-bottom:.35rem;font-size:1.85rem;line-height:1;display:block}.about-stat span{color:var(--muted);font-size:.9rem;line-height:1.35;display:block}.about-timeline{gap:1.7rem;display:grid}.timeline-group h3{color:var(--muted);margin:0 0 .65rem;font-size:1rem}.timeline-group li{border-top:1px solid var(--border);grid-template-columns:5.8rem minmax(0,1fr);gap:1rem;padding:.58rem 0;display:grid}.timeline-group time{color:var(--subtle);font-size:.86rem;font-weight:750}.about-notes{color:var(--muted);columns:2;column-gap:2rem}.about-notes li{break-inside:avoid;margin-bottom:.55rem;padding-left:1rem;position:relative}.about-notes li:before{background:var(--accent);content:"";border-radius:999px;width:.35rem;height:.35rem;position:absolute;top:.7rem;left:0}.site-footer{border-top:1px solid var(--border);color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 1.5rem;padding:2rem 0 3rem;font-size:.9rem;display:flex}.footer-links{flex-wrap:wrap;gap:.4rem 1.1rem;display:flex}.footer-links a{color:var(--muted);text-decoration:none}.footer-links a:hover{color:var(--accent)}@media (prefers-reduced-motion:no-preference){body,a,.button,.theme-toggle,.project-card,.post-row,.page-card,.about-links a,.about-stat{transition:background-color .16s,border-color .16s,color .16s}.button{transition:background-color .16s,border-color .16s,color .16s,transform .16s ease-out}.button:active{transform:scale(.97)}}@media (width<=780px){.site-header{align-items:flex-start;gap:1rem}.header-actions{justify-content:space-between;align-items:flex-start;width:100%}.nav{justify-content:flex-start;max-width:calc(100% - 3rem)}.hero{padding-top:2.5rem}.project-grid,.portfolio-featured-grid,.portfolio-archive-grid,.portfolio-older-archive-grid,.portfolio-card-compact{grid-template-columns:minmax(0,1fr)}.portfolio-card-compact .portfolio-card-media{aspect-ratio:16/9;border-bottom:1px solid var(--border);border-right:0}.project-gallery,.post-row{grid-template-columns:minmax(0,1fr)}.post-row .post-meta{text-align:left}.about-hero{grid-template-columns:minmax(0,1fr)}.about-photo{max-width:14rem}.about-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.about-notes{columns:1}.feedback-section-heading{flex-direction:column;align-items:stretch}.feedback-filter{flex-basis:auto;max-width:18rem}.feedback-board{scroll-snap-type:x proximity;grid-template-columns:none;grid-auto-columns:minmax(16rem,82vw);grid-auto-flow:column;margin-right:-1.2rem;padding-bottom:.5rem;padding-right:1.2rem;overflow-x:auto}.feedback-column{scroll-snap-align:start}}@media (width<=520px){.about-stats,.timeline-group li{grid-template-columns:minmax(0,1fr)}.timeline-group li{gap:.15rem}.feedback-page{padding-top:2.25rem}.feedback-field-row{grid-template-columns:minmax(0,1fr)}.feedback-form-footer{flex-direction:column;align-items:stretch}.feedback-submit{width:100%}}
