@import"https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap";.intro{padding:96px 0 72px}.intro .availability{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:12px;color:var(--muted);margin-bottom:28px}.intro .availability .dot{width:7px;height:7px;border-radius:50%;background:#45b164}.intro .availability .dot--current{background:var(--accent)}.intro .availability a:hover{color:var(--accent)}.intro h1{margin:0;font-size:clamp(36px,6vw,52px);font-weight:500;letter-spacing:-.025em;line-height:1.05}.intro .bio{margin:20px 0 0;max-width:560px;font-size:19px;line-height:1.55;color:var(--muted);text-wrap:pretty}.intro-links{display:flex;flex-wrap:wrap;gap:20px;margin-top:32px;font-size:14px}.intro-links a{border-bottom:1px solid var(--rule);padding-bottom:2px}.intro-links a:hover{color:var(--accent);border-color:var(--accent)}.topbar{position:sticky;top:0;z-index:5;background:var(--topbar-bg);display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 0;border-bottom:1px solid var(--rule)}.topbar .brand{font-family:var(--mono);font-size:13px;font-weight:500;letter-spacing:.02em;color:var(--ink)}.topbar .brand:hover{color:var(--accent)}.topbar .nav{display:flex;align-items:center;gap:20px;font-size:14px}.topbar .nav a{color:var(--muted)}.topbar .nav a:hover{color:var(--ink)}@media(max-width:480px){.topbar .nav{gap:14px}}.work{display:flex;flex-wrap:wrap;gap:12px 32px;padding:48px 0;border-top:1px solid var(--rule)}.work-list{flex:1 1 420px;display:flex;flex-direction:column;gap:40px}.work-item{display:flex;flex-direction:column;gap:10px}.work-item h3{margin:0;font-size:17px;font-weight:600}.work-item .subtitle{margin:-6px 0 0;font-size:13px;color:var(--muted)}.work-item p{margin:0;font-size:15px;line-height:1.6;color:var(--muted);text-wrap:pretty}.work-stack{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px;font-family:var(--mono);font-size:11px;color:var(--muted)}.work-stack span{background:var(--card-bg);padding:3px 8px;border-radius:4px}.work-links{display:flex;flex-wrap:wrap;gap:16px;margin-top:4px;font-size:13px}.work-links a{border-bottom:1px solid var(--rule);padding-bottom:2px}.work-links a:hover{color:var(--accent);border-color:var(--accent)}.experience{display:flex;flex-wrap:wrap;gap:12px 32px;padding:48px 0;border-top:1px solid var(--rule)}.experience-list{flex:1 1 420px;display:flex;flex-direction:column;gap:36px}.job{display:flex;flex-direction:column;gap:8px}.job-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 16px}.job-head h3{margin:0;font-size:17px;font-weight:600}.job-head h3 a{border-bottom:1px solid transparent}.job-head h3 a:hover{color:var(--accent);border-color:var(--accent)}.job-head .when{font-family:var(--mono);font-size:12px;color:var(--muted);white-space:nowrap}.job p{margin:0;font-size:15px;line-height:1.6;color:var(--muted);text-wrap:pretty}.skills{display:flex;flex-wrap:wrap;gap:12px 32px;padding:48px 0;border-top:1px solid var(--rule)}.skills-list{flex:1 1 420px;margin:0;display:grid;grid-template-columns:minmax(0,1fr);gap:18px;font-size:15px;line-height:1.55}.skills-list dt{font-weight:600;margin-bottom:2px}.skills-list dd{margin:0;color:var(--muted)}.contact{display:flex;flex-wrap:wrap;gap:12px 32px;padding:48px 0 96px;border-top:1px solid var(--rule)}.contact-body{flex:1 1 420px;display:flex;flex-direction:column;gap:20px}.contact-body .pitch{margin:0;font-size:24px;line-height:1.35;font-weight:500;letter-spacing:-.01em;text-wrap:pretty}.contact-actions{display:flex;flex-wrap:wrap;gap:12px}.btn-primary,.btn-secondary{font-size:14px;font-weight:500;border-radius:6px;padding:11px 18px}.btn-primary{background:var(--ink);color:var(--paper)}.btn-primary:hover{opacity:.85;color:var(--paper)}.btn-secondary{display:flex;align-items:center;gap:8px;border:1px solid var(--rule);padding:10px 18px}.btn-secondary:hover{border-color:var(--ink)}.btn-secondary .ico{width:14px;height:14px;flex:0 0 auto}.contact-meta{font-family:var(--mono);font-size:12px;color:var(--muted);display:flex;flex-wrap:wrap;gap:16px}.site-footer{padding:24px 0 40px;border-top:1px solid var(--rule);font-family:var(--mono);font-size:12px;color:var(--muted)}.writing{display:flex;flex-wrap:wrap;gap:12px 32px;padding:48px 0;border-top:1px solid var(--rule)}.writing-list{flex:1 1 420px;display:flex;flex-direction:column}.writing-list .post{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 16px;padding:16px 0;border-bottom:1px solid var(--rule)}.writing-list .post:hover{color:var(--accent)}.writing-list .post .title{flex:1 1 280px;font-size:16px;font-weight:500;line-height:1.4}.writing-list .post .when{font-family:var(--mono);font-size:12px;color:var(--muted);white-space:nowrap}.writing-list .all-posts{margin-top:20px;font-size:14px;color:var(--muted)}.writing-list .all-posts:hover{color:var(--ink)}.page{max-width:760px;margin:0 auto;padding:0 24px}.sec-label{flex:0 0 140px;margin:0;font-family:var(--mono);font-size:12px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding-top:4px}@media(max-width:560px){.sec-label{flex-basis:100%}}:root{--paper: oklch(.985 .004 85);--paper-2: oklch(.95 .006 85);--ink: oklch(.22 .01 85);--ink-2: oklch(.35 .01 85);--muted: oklch(.5 .01 85);--rule: oklch(.9 .006 85);--rule-strong: oklch(.8 .008 85);--accent: oklch(.55 .13 250);--accent-ink: #ffffff;--accent-soft: oklch(.55 .13 250 / 12%);--halo-1: var(--paper);--halo-2: var(--paper);--pill-bg: var(--paper-2);--card-bg: var(--paper-2);--band-bg: var(--paper-2);--topbar-bg: var(--paper);--invert: #ffffff;--contact-bg: var(--ink);--contact-ink: var(--paper);--serif: "Hanken Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--sans: "Hanken Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--clr-bg: var(--paper);--clr-bg-two: var(--paper-2);--clr-primary: var(--ink);--clr-muted: var(--ink-2);--clr-fade: var(--muted);--clr-accent: var(--accent);--clr-border: var(--rule);--clr-border-strong: var(--rule-strong);--font-display: var(--serif);--font-body: var(--sans);--font-mono: var(--mono);--fs-body-two: .95rem;--fs-title: 1.4rem;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 18px;--shadow-card: 0 10px 30px -18px rgba(20, 19, 18, .18);--glow-accent: 0 0 0 1px var(--accent-soft);--gradient-shadow: linear-gradient(90deg, var(--accent), var(--ink));--gradient-shadow-two: linear-gradient(135deg, var(--accent) 0%, var(--ink) 100%)}@media(prefers-color-scheme:dark){:root{--paper: oklch(.17 .006 85);--paper-2: oklch(.23 .006 85);--ink: oklch(.93 .006 85);--ink-2: oklch(.8 .008 85);--muted: oklch(.66 .008 85);--rule: oklch(.28 .006 85);--rule-strong: oklch(.38 .008 85);--accent: oklch(.75 .11 250);--accent-ink: oklch(.17 .006 85);--accent-soft: oklch(.75 .11 250 / 16%);--halo-1: var(--paper);--halo-2: var(--paper);--pill-bg: var(--paper-2);--card-bg: var(--paper-2);--band-bg: var(--paper-2);--topbar-bg: var(--paper);--invert: oklch(.1 0 0);--contact-bg: var(--ink);--contact-ink: var(--paper);--shadow-card: 0 16px 40px -24px rgba(0, 0, 0, .7);--glow-accent: 0 0 0 1px var(--accent-soft);--gradient-shadow: linear-gradient(90deg, var(--accent), var(--ink));--gradient-shadow-two: linear-gradient(135deg, var(--accent) 0%, var(--ink) 100%)}}*,*:before,*:after{box-sizing:border-box}html{transition:background-color .2s ease,color .2s ease;scroll-behavior:smooth}body{margin:0;padding:0;min-height:100vh;font-family:var(--sans);color:var(--ink);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;background-color:var(--paper);transition:background-color .2s ease,color .2s ease}a{color:inherit;text-decoration:none}img{display:block;max-width:100%}button{font-family:inherit}::selection{background:var(--accent);color:var(--accent-ink)}section{scroll-margin-top:80px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}
