:root{color-scheme:light dark;--color-paper:oklch(98% .006 85);--color-paper-2:oklch(95.5% .007 85);--color-paper-3:oklch(93% .008 85);--color-ink:oklch(19% .01 60);--color-ink-2:oklch(31% .01 60);--color-muted:oklch(45% .01 60);--color-rule:oklch(88% .008 85);--color-rule-2:oklch(78% .01 85);--color-accent:oklch(50% .13 70);--color-accent-ink:oklch(98.5% .005 85);--color-accent-soft:oklch(93% .05 80);--color-focus:oklch(50% .13 70);--color-cool:oklch(48% .14 250);--font-display:"Host Grotesk", ui-sans-serif, system-ui, sans-serif;--font-body:var(--font-display);--font-outlier:"Atkinson Hyperlegible Mono", ui-monospace, monospace;--radius-card:10px;--radius-pill:6px;--radius-chip:4px;--rule-hair:1px;--tracking-display:-.03em;--display-weight:500;--text-display:clamp(3rem, 2rem + 4.2vw, 5.25rem);--text-display-s:clamp(2.25rem, 1.6rem + 2.9vw, 3.75rem);--text-section:clamp(2rem, 1.4rem + 2.4vw, 3.25rem);--text-title:clamp(1.25rem, 1.1rem + .5vw, 1.5625rem);--text-lead:clamp(1.125rem, 1.05rem + .35vw, 1.3125rem);--text-prose:1.0625rem;--text-md:1rem;--text-sm:.875rem;--space-2xs:4px;--space-xs:8px;--space-sm:12px;--space-md:16px;--space-lg:24px;--space-xl:32px;--space-2xl:48px;--space-3xl:64px;--space-4xl:96px;--section-gap-s:120px;--container:1440px;--gutter:64px;--measure:68ch;--dur-short:.16s;--ease-out:cubic-bezier(.16, 1, .3, 1)}@media (prefers-color-scheme:dark){:root{--color-paper:oklch(17% .008 250);--color-paper-2:oklch(21% .009 250);--color-paper-3:oklch(13.5% .007 250);--color-ink:oklch(95% .005 250);--color-ink-2:oklch(83% .008 250);--color-muted:oklch(71% .01 250);--color-rule:oklch(31% .01 250);--color-rule-2:oklch(42% .012 250);--color-accent:oklch(82% .15 80);--color-accent-ink:oklch(18% .04 75);--color-accent-soft:oklch(29% .05 80);--color-focus:oklch(82% .15 80);--color-cool:oklch(77% .12 245)}}@media (width<=60rem){:root{--gutter:24px;--section-gap-s:80px}}@media (width<=40rem){:root{--gutter:16px;--section-gap-s:56px}}body{background:var(--color-paper);color:var(--color-ink);font:400 var(--text-md)/1.6 var(--font-body);font-synthesis:none;-webkit-font-smoothing:antialiased;margin:0}*,:before,:after{box-sizing:border-box}.container{width:100%;max-width:var(--container);padding-inline:var(--gutter);margin-inline:auto}h1,h2,h3{font-family:var(--font-display);font-weight:var(--display-weight);letter-spacing:var(--tracking-display);overflow-wrap:break-word;text-wrap:balance;min-width:0;color:var(--color-ink);margin:0;line-height:1.05}h1{font-size:var(--text-display-s)}.display{font-size:var(--text-display)}h2{font-size:var(--text-section)}h3{font-size:var(--text-title)}.measured{font-family:var(--font-outlier);font-variant-numeric:tabular-nums slashed-zero}.cool{color:var(--color-cool)}.person{color:var(--color-accent);font-weight:500}.muted{color:var(--color-muted)}a{color:inherit;text-decoration-color:var(--color-rule-2);text-underline-offset:.2em;transition:color var(--dur-short) var(--ease-out), text-decoration-color var(--dur-short) var(--ease-out)}@media (hover:hover){a:hover{color:var(--color-accent);text-decoration-color:var(--color-accent)}}a:active{color:var(--color-accent)}.chip:active{background:var(--color-paper-3)}::selection{background:var(--color-accent-soft);color:var(--color-ink)}html{scrollbar-color:var(--color-rule-2) var(--color-paper)}:focus-visible{outline:2px solid var(--color-focus);outline-offset:3px}.chip:focus-visible{outline-offset:-3px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.skip-link{z-index:1;padding:var(--space-xs) var(--space-md);background:var(--color-paper-2);color:var(--color-ink);position:absolute;top:-100vh;left:0}.skip-link:focus{top:0;left:0}.panels{gap:var(--rule-hair);background:var(--color-rule);color:var(--color-ink);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);display:grid;overflow:hidden}.panels>*{background:var(--color-paper-2);color:var(--color-ink)}.chip{font-size:var(--text-sm);padding:var(--space-2xs) var(--space-xs);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-chip);background:var(--color-paper-2);color:var(--color-ink-2);white-space:nowrap;line-height:1.4;text-decoration:none;display:inline-block}.prose{max-width:var(--measure);font-size:var(--text-prose);color:var(--color-ink-2);overflow-wrap:break-word;line-height:1.7}.prose>*+*{margin-top:1.1em}.prose h2{margin-top:2.2em;font-size:1.75rem}.prose h3{margin-top:1.8em;font-size:1.375rem}.prose strong{color:var(--color-ink);font-weight:700}.prose a{text-decoration:underline}.prose img{vertical-align:middle;border-radius:var(--radius-chip);max-width:100%;height:auto}.prose :is(p>img:only-child,p>a:only-child>img){border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);background:var(--color-paper-3);margin-inline:auto;display:block}.prose :not(pre)>code{font-family:var(--font-outlier);background:var(--color-paper-3);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-chip);padding:.1em .35em;font-size:.9em}.prose blockquote{border-inline-start:2px solid var(--color-rule-2);color:var(--color-ink);margin-inline:0;padding-inline-start:var(--space-lg)}.prose table{border-collapse:collapse;max-width:100%;display:block;overflow-x:auto}.prose th,.prose td{border:var(--rule-hair) solid var(--color-rule);padding:var(--space-xs) var(--space-sm)}.prose th{background:var(--color-paper-2);text-align:start;font-weight:500}.prose iframe{border:0;max-width:100%}.prose iframe[src*=youtube]{aspect-ratio:16/9;width:100%;height:auto}.prose hr{border:0;border-top:var(--rule-hair) solid var(--color-rule)}.prose .expressive-code{margin-block:1.6em}.site-header__inner{justify-content:space-between;align-items:center;gap:var(--space-xs) var(--space-lg);border-bottom:var(--rule-hair) solid var(--color-rule);flex-wrap:wrap;min-height:4.5rem;display:flex}.wordmark{letter-spacing:var(--tracking-display);color:var(--color-ink);font-size:1.25rem;font-weight:500;text-decoration:none}.site-header nav ul{gap:var(--space-lg);margin:0;padding:0;list-style:none;display:flex}.site-header nav a{color:var(--color-ink-2);white-space:nowrap;font-size:.9375rem;text-decoration:none}.site-header nav a[aria-current=page]{color:var(--color-ink);text-decoration:underline 2px var(--color-accent)}@media (pointer:coarse){.site-header nav a{align-items:center;min-height:44px;display:inline-flex}}.site-footer{border-top:var(--rule-hair) solid var(--color-rule)}.site-footer__inner{gap:var(--space-xl);padding-block:var(--space-3xl);grid-template-columns:minmax(0,1fr) auto;display:grid}.site-footer__block p{margin:var(--space-md) 0 0;max-width:36rem}.site-footer__links{align-content:start;gap:var(--space-md) var(--space-lg);white-space:nowrap;flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.site-footer__legal{font-size:var(--text-sm);grid-column:1/-1;margin:0}@media (width<=60rem){.site-footer__inner{grid-template-columns:minmax(0,1fr)}}@media (width<=40rem){.site-header__inner{padding-block:var(--space-sm)}.site-header nav ul{gap:var(--space-md)}}.lead{font-size:var(--text-lead);color:var(--color-ink-2);max-width:36ch;margin:0}.hero{padding-block:var(--space-4xl) var(--section-gap-s);text-align:center}.hero .display{margin:0}.hero .lead{margin:var(--space-lg) auto 0}.hero-links{gap:var(--space-lg);margin-top:var(--space-2xl);flex-wrap:wrap;justify-content:center;display:flex}.button{padding:var(--space-sm) var(--space-xl);background:var(--color-accent);color:var(--color-accent-ink);border:var(--rule-hair) solid var(--color-accent);border-radius:var(--radius-pill);transition:background var(--dur-short) var(--ease-out), color var(--dur-short) var(--ease-out), border-color var(--dur-short) var(--ease-out);font-weight:500;text-decoration:none;display:inline-block}.button:hover{background:var(--color-ink);border-color:var(--color-ink);color:var(--color-paper)}.button--secondary{color:var(--color-accent);background:0 0}.button--secondary:hover{background:var(--color-accent-soft);border-color:var(--color-accent);color:var(--color-accent)}.home-section{padding-block:var(--section-gap-s);border-top:var(--rule-hair) solid var(--color-rule)}.home-section h2{margin-bottom:var(--space-2xl)}.project-grid{gap:var(--space-xl);margin-block:var(--space-2xl);grid-template-columns:repeat(auto-fill,minmax(min(100%,320px),1fr));display:grid}.project-card{padding:var(--space-xl);background:var(--color-paper-2);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card)}.project-card h3{margin:0 0 var(--space-sm)}.project-card h3 a{text-decoration:none}.project-card time{font-size:var(--text-sm);margin-bottom:var(--space-md);display:block}.project-card p{margin:0 0 var(--space-md)}.project-tags{gap:var(--space-xs);margin-bottom:var(--space-md);flex-wrap:wrap;display:flex}.project-links{gap:var(--space-md);margin-top:var(--space-lg);flex-wrap:wrap;display:flex}.project-link{color:var(--color-accent);font-weight:500}.project-header{padding-bottom:var(--space-2xl);border-bottom:var(--rule-hair) solid var(--color-rule);margin-bottom:var(--space-2xl)}.project-header h1{margin-bottom:var(--space-md)}.project-header time{margin-bottom:var(--space-lg);display:block}.project-header .project-tags{margin-bottom:var(--space-lg)}.project-nav{margin-top:var(--space-4xl);padding-top:var(--space-2xl);border-top:var(--rule-hair) solid var(--color-rule)}.resume-section{margin-bottom:var(--space-4xl)}.resume-section h2{margin-bottom:var(--space-2xl);padding-bottom:var(--space-md);border-bottom:var(--rule-hair) solid var(--color-rule)}.resume-item{margin-bottom:var(--space-2xl)}.resume-item h3{margin-bottom:var(--space-xs)}.resume-item p{margin:0 0 var(--space-sm)}.resume-item p:last-child{margin-bottom:0}.skill-grid{gap:var(--space-xl);grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));display:grid}.skill-category h3{font-size:var(--text-md);margin-bottom:var(--space-sm)}.skill-category p{margin:0}.links-list{gap:var(--space-lg);margin-top:var(--space-2xl);max-width:56rem;display:grid}.link-card{padding:var(--space-xl);background:var(--color-paper-2);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);color:inherit;transition:border-color var(--dur-short) var(--ease-out);text-decoration:none;display:block}.link-card:hover{border-color:var(--color-accent);color:inherit}.link-card h3{margin:0 0 var(--space-xs);color:var(--color-accent)}.link-card p{color:var(--color-muted);margin:0}.page-body{padding-block:var(--space-4xl)}.page-body h1{margin-bottom:var(--space-2xl)}@media (width<=60rem){.page-body{padding-block:var(--space-2xl)}}.readmore{color:var(--color-accent);font-weight:500;display:inline-block}.project-hero{max-width:56rem;margin:0 0 var(--space-2xl)}.project-hero img{object-fit:contain;background:var(--color-paper-3);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);width:100%;max-height:36rem;display:block}.about-avatar{width:100%;max-width:32rem;height:auto;margin-bottom:var(--space-2xl);border-radius:var(--radius-card);display:block}.about-note{font-size:var(--text-sm)}.badge-grid{gap:var(--space-lg);grid-template-columns:repeat(auto-fill,minmax(min(100%,200px),1fr));margin:0;padding:0;list-style:none;display:grid}.badge-card{align-items:center;gap:var(--space-xs);height:100%;padding:var(--space-lg);text-align:center;background:var(--color-paper-2);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);color:var(--color-ink);transition:border-color var(--dur-short) var(--ease-out);flex-direction:column;text-decoration:none;display:flex}a.badge-card:hover{border-color:var(--color-accent);color:var(--color-ink)}.badge-card img{object-fit:contain;border-radius:var(--radius-card);background:#fff;width:120px;height:120px}.badge-card span{font-weight:500}.badge-card .muted{font-weight:400;font-size:var(--text-sm)}html,body{overflow-x:clip}
