@font-face{font-family:Kind Sans;src:url(/fonts/kindsans-subset.woff2)format("woff2");font-display:swap}:root{color-scheme:light dark;--bg:#fafafa;--surface:#fff;--surface-soft:#f4f4f5;--surface-hover:#f1f1f1;--panel-soft:var(--surface-soft);--text:#111827;--muted:#6b7280;--line:#e5e7eb;--accent:#f97316;--accent-strong:#ea580c;--accent-contrast:var(--bg);--filled-icon-filter:brightness(0) saturate(100%) invert(99%) sepia(1%) saturate(135%) hue-rotate(318deg) brightness(115%) contrast(96%);--content-width:56rem;font-family:Kind Sans,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}@media (prefers-color-scheme:dark){:root{--bg:#0a0a0a;--surface:#18181b;--surface-soft:#242424;--surface-hover:#2a2a2a;--panel-soft:var(--surface-soft);--text:#f9fafb;--muted:#a3a3a3;--line:#ffffff1f;--accent:#fb923c;--accent-strong:#f97316;--filled-icon-filter:brightness(0) saturate(100%) invert(3%) sepia(5%) saturate(3%) hue-rotate(314deg) brightness(98%) contrast(93%)}.skill-icon[src*=nextdotjs],.skill-icon[src*=opentelemetry],.button-icon[src*=github]{filter:invert()}}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);letter-spacing:-.003em;margin:0;font-size:1.25rem;line-height:1.6}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}img{max-width:100%;height:auto;display:block}.section,.article-wrap{width:min(100% - 2rem,var(--content-width));margin:0 auto;padding:4rem 0}.hero{text-align:center;align-content:center;place-items:center;gap:1rem;min-height:82vh;display:grid}.avatar{object-fit:cover;width:12rem;height:12rem;image-rendering:pixelated;margin:0 auto}h1,h2,h3{margin:0 0 1rem;font-family:Kind Sans,ui-sans-serif,system-ui,sans-serif;line-height:1.12}h1{letter-spacing:-.04em;font-size:clamp(2rem,7vw,4rem)}h2{text-align:center;margin-bottom:2rem;font-size:clamp(1.6rem,4vw,2.6rem)}h3{font-size:1.45rem}.hero h1{max-width:var(--content-width)}.hero h1 span,strong{color:var(--accent);font-weight:700}.actions,.chips{flex-wrap:wrap;justify-content:center;align-items:center;gap:.75rem;padding:0;list-style:none;display:flex}.button,button{border:1px solid var(--line);min-height:2.5rem;color:var(--text);font:inherit;cursor:pointer;background:0 0;border-radius:0;justify-content:center;align-items:center;gap:.4rem;padding:.45rem .75rem;font-weight:600;display:inline-flex}.button:hover,button:hover{background:var(--surface-hover);text-decoration:none}.button.primary,button.primary{background:var(--accent);color:var(--accent-contrast);border-color:var(--accent)}.button.primary:hover,button.primary:hover{background:var(--accent-strong);color:var(--accent-contrast);border-color:var(--accent-strong)}.button-icon,.skill-icon{object-fit:contain;flex:none;width:1em;height:1em}.mask-icon{background:currentColor}.home-icon{mask:url(/icons/home.svg) center/contain no-repeat;-webkit-mask:url(/icons/home.svg) center/contain no-repeat}.mail-icon{mask:url(/icons/mail.svg) center/contain no-repeat;-webkit-mask:url(/icons/mail.svg) center/contain no-repeat}.calendar-icon{mask:url(/icons/calendar.svg) center/contain no-repeat;-webkit-mask:url(/icons/calendar.svg) center/contain no-repeat}.download-icon{mask:url(/icons/download.svg) center/contain no-repeat;-webkit-mask:url(/icons/download.svg) center/contain no-repeat}.button.primary img.button-icon{filter:var(--filled-icon-filter)}.chips li,.project-tech li{align-items:center;gap:.35rem;display:inline-flex}.chips li{padding:.22rem .65rem}.card{--card-accent:var(--accent);border:1px solid var(--line);background:var(--surface);border-radius:.8rem;color:var(--text);transition:background-color .12s ease,border-color .12s ease}.card:hover{background:color-mix(in srgb,var(--card-accent) 12%,var(--surface));border-color:color-mix(in srgb,var(--card-accent) 40%,var(--line))}.experience-row.card:hover{background:var(--surface);border-color:var(--line)}.skill-js{--card-accent:#f7df1e}.skill-ts{--card-accent:#3178c6}.skill-node{--card-accent:#339933}.skill-python{--card-accent:#3776ab}.skill-react{--card-accent:#61dafb}.skill-next{--card-accent:#8a8a8a}.skill-git{--card-accent:#f05032}.skill-gitlab{--card-accent:#fc6d26}.skill-linux{--card-accent:#b89100}.skill-docker{--card-accent:#2496ed}.skill-postgres{--card-accent:#4169e1}.skill-mongo{--card-accent:#47a248}.skill-tailwind{--card-accent:#06b6d4}.skill-cloudflare{--card-accent:#f38020}.skill-otel{--card-accent:#4f62ad}.skill-grafana{--card-accent:#f46800}.skill-prometheus{--card-accent:#e6522c}.project-list,.experience-list,.blog-list{display:grid;gap:1.5rem}.project-row,.experience-row{padding:.25rem 0}.project-row.card{padding:1rem}.experience-row.card{padding:1rem;align-items:start}.project-row a{color:inherit;display:block}.project-row a:hover{text-decoration:none}.project-row>a>img:not(.skill-icon){width:100%;margin-bottom:1rem}.project-tech{flex-wrap:wrap;gap:.75rem;margin:.75rem 0 0;padding:0;list-style:none;display:flex}.project-tech li{color:var(--muted)}.experience-row{grid-template-columns:3.5rem 1fr;align-items:start;gap:1rem;display:grid}.experience-logo{object-fit:contain;width:3.5rem;height:3.5rem}.project-row h3,.experience-row h3,.blog-row h2{margin:0 0 .25rem;font-family:inherit;font-size:1.25rem;line-height:1.25}.project-row p,.experience-row p,.blog-row p{margin:.25rem 0;line-height:1.4}.experience-row p{line-height:1.35}.date,.muted{color:var(--muted)}.date{margin:0 0 .35rem;padding:0;font-size:1rem;line-height:1}.experience-row .date{margin-top:0;padding-top:0}.badge{background:var(--accent);color:var(--accent-contrast);align-items:center;height:1.25em;padding:0 .35rem;font-size:.75rem;font-weight:700;line-height:1;text-transform:uppercase;display:inline-flex}.blog-index{padding-top:1rem}.blog-actions{justify-content:space-between;margin-bottom:1.5rem;display:flex}.blog-row{--thumb-w:10rem;grid-template-columns:var(--thumb-w) 1fr;align-items:start;gap:1rem;padding:.25rem 0;display:grid}.blog-thumb{aspect-ratio:16/9;background:var(--panel-soft);display:block}.blog-thumb img{object-fit:contain;width:100%;height:100%}.blog-summary{min-width:0}.blog-row h2{text-align:left;align-items:center;gap:.4rem;display:flex;flex-wrap:wrap}.blog-row h2 a{color:var(--text)}.blog-row .date{font-size:1rem}.blog-summary p:not(.date){-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.article h1{font-size:clamp(2.625rem,6vw,3.25rem);line-height:1.1}.article-image{aspect-ratio:16/9;background:var(--panel-soft);width:100%;margin:2rem 0}.article-image img{object-fit:contain;width:100%;height:100%}.prose{font-size:1em;line-height:inherit}.prose h2{text-align:left;margin:3rem 0 .75rem;font-size:1.875rem;line-height:1.2}.prose h3{margin-top:2rem}.prose:is(p,ul,ol,pre,blockquote){margin:1rem 0}.prose pre{color:#e6edf3;background:#0d1117;border:1px solid #30363d;padding:1rem;overflow:auto hidden}.prose code{border:1px solid var(--line);background:var(--panel-soft);color:var(--text);padding:.08rem .28rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace;font-size:.9em}.prose pre code{color:inherit;white-space:pre;background:0 0;padding:0;display:block}.prose blockquote{border-left:.25rem solid var(--accent);color:var(--muted);padding-left:1rem}.prose hr{border:0;border-top:1px solid var(--line);margin:2rem 0}@media (width<=900px){.section,.article-wrap{padding:3rem 0}.blog-index{padding-top:1rem}.experience-row{grid-template-columns:3rem 1fr;gap:.85rem}.experience-logo{width:3rem;height:3rem}.blog-row{--thumb-w:6rem;gap:.85rem}}