@font-face { font-family: Inter; src: url(/assets/fonts/730e8169368baf37-s.p.woff2) format("woff2"); font-display: swap }
@font-face { font-family: Inter; src: url(/assets/fonts/f1f0c35b32161446-s.p.woff2) format("woff2"); font-display: swap; font-weight: 400; font-style: normal }
@font-face { font-family: Inter; src: url(/assets/fonts/d593a8df799d4ab1-s.p.woff2) format("woff2"); font-display: swap; font-weight: 400; font-style: italic }
@font-face { font-family: Inter; src: url(/assets/fonts/dc792b508e6f91c7-s.p.woff2) format("woff2"); font-display: swap; font-weight: 500; font-style: normal }
@font-face { font-family: Inter; src: url(/assets/fonts/84d3493a9fd22f1c-s.p.woff2) format("woff2"); font-display: swap; font-weight: 500; font-style: italic }
@font-face { font-family: Inter; src: url(/assets/fonts/fcb100c7607696fd-s.p.woff2) format("woff2"); font-display: swap; font-weight: 600; font-style: normal }
@font-face { font-family: Inter; src: url(/assets/fonts/d90f295d0c348006-s.p.woff2) format("woff2"); font-display: swap; font-weight: 600; font-style: italic }
@font-face { font-family: Inter; src: url(/assets/fonts/579e0f95cacfae57-s.p.woff2) format("woff2"); font-display: swap; font-weight: 700; font-style: normal }
@font-face { font-family: Inter; src: url(/assets/fonts/828a494e04a45cbd-s.p.woff2) format("woff2"); font-display: swap; font-weight: 700; font-style: italic }
@font-face { font-family: "Inter Fallback"; src: local("Arial"); ascent-override: 90.00%; descent-override: 22.43%; line-gap-override: 0.00%; size-adjust: 107.64% }
/* Restored from original Next.js build (css/93d15fcb46b04baa.css, commit b88f701): Tailwind slate/teal palette */
:root{color-scheme:dark}
*{box-sizing:border-box}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{transition:none!important}}
body{margin:0;background:#0f172a;color:#94a3b8;line-height:1.625;font-family:Inter,"Inter Fallback",ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-feature-settings:"ss03","cv02","cv11";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
::selection{background:#5eead4;color:#134e4a}
a{color:#e2e8f0;text-decoration:none;transition:color .15s cubic-bezier(.4,0,.2,1)}a:hover,a:focus-visible{color:#5eead4}
p a{font-weight:500}
:focus-visible{outline:2px solid #5eead4;outline-offset:3px;border-radius:4px}
.skip{position:absolute;left:-999px;top:0;background:linear-gradient(to bottom right,#2dd4bf,#3b82f6);color:#fff;padding:.75rem 1rem;font-weight:700;font-size:.875rem;border-radius:.25rem;z-index:50}.skip:focus{left:1rem;top:1rem}
.spot{pointer-events:none;position:fixed;inset:0;z-index:30;transition:background .3s cubic-bezier(.4,0,.2,1)}
@media(min-width:1024px){.spot{background:radial-gradient(600px circle at var(--x,-1000px) var(--y,-1000px),rgba(29,78,216,.15),transparent 80%)}}
.wrap{max-width:1280px;margin:0 auto;min-height:100vh;padding:3rem 1.5rem}
@media(min-width:768px){.wrap{padding:4rem 3rem}}
@media(min-width:1024px){.wrap{padding-top:0;padding-bottom:0}.split{display:flex;gap:1rem;justify-content:space-between}.side{position:sticky;top:0;max-height:100vh;width:48%;display:flex;flex-direction:column;justify-content:space-between;padding:6rem 0}.main{width:52%;padding:6rem 0}}
.main{padding-top:6rem}
h1{color:#e2e8f0;font-size:2.25rem;line-height:2.5rem;font-weight:700;letter-spacing:-.025em;margin:0}@media(min-width:640px){h1{font-size:3rem;line-height:1}}
h1 a{color:inherit}.role{color:#e2e8f0;font-size:1.125rem;font-weight:500;letter-spacing:-.025em;margin:.75rem 0 0}@media(min-width:640px){.role{font-size:1.25rem}}.tag{max-width:20rem;margin:1rem 0 0;line-height:1.5}
nav.toc{display:none;margin-top:4rem}@media(min-width:1024px){nav.toc{display:block}}
nav.toc ul{width:max-content}
nav.toc a{display:flex;align-items:center;padding:.75rem 0}
.nav-indicator{margin-right:1rem;height:1px;width:2rem;background:#475569;transition:all .15s cubic-bezier(.4,0,.2,1)}
.nav-text{font-size:.75rem;line-height:1rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#64748b;transition:color .15s}
nav.toc a:hover .nav-indicator,nav.toc a:focus-visible .nav-indicator,nav.toc a.active .nav-indicator{width:4rem;background:#e2e8f0}
nav.toc a:hover .nav-text,nav.toc a:focus-visible .nav-text,nav.toc a.active .nav-text{color:#e2e8f0}
.social{display:flex;gap:1.25rem;align-items:center;margin:2rem 0 0 .25rem;list-style:none;padding:0}.social svg{width:24px;height:24px;fill:currentColor}.social a{color:#94a3b8}.social a:hover{color:#e2e8f0}
section{margin-bottom:4rem;scroll-margin-top:4rem}@media(min-width:768px){section{margin-bottom:6rem}}@media(min-width:1024px){section{margin-bottom:9rem;scroll-margin-top:6rem}}
h2{font-size:.875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#e2e8f0;position:sticky;top:0;z-index:20;margin:0 -1.5rem 1rem;padding:1.25rem 1.5rem;width:100vw;background:rgba(15,23,42,.75);backdrop-filter:blur(8px)}
@media(min-width:768px){h2{margin:0 -3rem 1rem;padding:1.25rem 3rem}}
@media(min-width:1024px){h2{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0)}}
h3{color:#e2e8f0;font-size:1rem;font-weight:500;margin:0;line-height:1.25}
.track{font-size:.75rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#5eead4;margin:2.5rem 0 1rem}
.list{list-style:none;margin:0;padding:0}
.group-list>.card{margin-bottom:3rem}
.card{position:relative;display:grid;padding-bottom:.25rem;transition:all .15s cubic-bezier(.4,0,.2,1)}
@media(min-width:640px){.card{grid-template-columns:repeat(8,minmax(0,1fr));gap:2rem}.card>.meta{grid-column:span 2}.card>.body{grid-column:span 6}}
@media(min-width:768px){.card{gap:1rem}}
.card>.hl{position:absolute;inset:-1rem;z-index:0;display:none;border-radius:.375rem;transition:all .15s cubic-bezier(.4,0,.2,1)}
.card>.meta,.card>.body{z-index:10;position:relative}
@media(min-width:1024px){.card>.hl{display:block;inset:-1rem -1.5rem}
.group-list:hover>.card{opacity:.5}.group-list>.card:hover{opacity:1}
.card:hover>.hl{background:rgba(30,41,59,.5);box-shadow:inset 0 1px 0 0 rgba(148,163,184,.1);filter:drop-shadow(0 10px 8px rgba(0,0,0,.04)) drop-shadow(0 4px 3px rgba(0,0,0,.1))}}
.meta{font-size:.75rem;line-height:1rem;font-weight:600;letter-spacing:.025em;text-transform:uppercase;color:#64748b;margin:.25rem 0 .5rem}
.card p{margin:.5rem 0 0;font-size:.875rem;line-height:1.5}
.card h3 a{display:inline-flex;align-items:baseline;line-height:1.25;font-weight:500}
.card:hover h3 a,.card h3 a:focus-visible,.card:hover h3.plain{color:#5eead4}
.card h3 a::after{content:"";position:absolute;inset:-1rem;border-radius:.375rem;display:block}@media(min-width:768px){.card h3 a::after{inset:-1rem -1.5rem}}
.arrow{display:inline-block;width:1rem;height:1rem;margin-left:.25rem;flex-shrink:0;transform:translateY(1px);transition:transform .15s cubic-bezier(.4,0,.2,1)}
.card:hover .arrow,.card h3 a:focus-visible .arrow{transform:translate(.25rem,-.25rem)}
.arrow.r{transform:translateY(-1px)}.card:hover .arrow.r{transform:translate(.5rem,-1px)}
.chips{display:flex;flex-wrap:wrap;margin:.5rem 0 0;padding:0;list-style:none}.chips li{margin:.5rem .375rem 0 0;background:rgba(45,212,191,.1);color:#5eead4;border-radius:9999px;padding:.25rem .75rem;font-size:.75rem;line-height:1.25rem;font-weight:500}
.more{display:inline-flex;align-items:center;margin-top:1rem;font-weight:600;color:#e2e8f0}.more:hover{color:#e2e8f0}
.more .u{border-bottom:1px solid transparent;padding-bottom:1px;transition:border-color .15s}.more:hover .u,.more:focus-visible .u{border-color:#5eead4}
.more svg{margin-left:.25rem;width:1rem;height:1rem;transition:transform .15s}.more:hover svg{transform:translateX(.5rem)}
footer{font-size:.875rem;color:#64748b;max-width:28rem;padding-bottom:4rem}
.post{position:relative;max-width:48rem;margin:0 auto;padding:4rem 1.5rem}
.post h1{font-size:2.25rem;line-height:1.15}.post .meta{margin:1rem 0 2.5rem}
.post h2{position:static;width:auto;height:auto;margin:2.5rem 0 .75rem;padding:0;clip:auto;overflow:visible;background:none;backdrop-filter:none;font-size:1.25rem;letter-spacing:-.01em;text-transform:none}
.post strong{color:#e2e8f0}
code{font:.875em ui-monospace,SFMono-Regular,Menlo,monospace;background:#1e293b;color:#e2e8f0;padding:.1rem .35rem;border-radius:4px}
pre{background:#1e293b;padding:1rem;border-radius:.375rem;overflow-x:auto;box-shadow:inset 0 1px 0 0 rgba(148,163,184,.1)}pre code{background:none;padding:0}
table{border-collapse:collapse;width:100%;font-size:.875rem;margin:1rem 0}th,td{border-bottom:1px solid #1e293b;padding:.5rem;text-align:left}th{color:#e2e8f0}
.top{position:relative;z-index:40;max-width:48rem;margin:0 auto;padding:3rem 1.5rem 0}
.top a{display:inline-flex;align-items:center;font-weight:600;color:#5eead4}.top svg{width:1rem;height:1rem;margin-right:.5rem;transition:transform .15s}.top a:hover svg{transform:translateX(-.5rem)}
.skills{margin-top:1rem}.skills>strong{font-size:1.125rem;font-weight:500;color:#e2e8f0}
.skills ul{list-style:none;padding:0;margin:.5rem 0 0}.skills li{font-size:.875rem;line-height:1.5;color:#94a3b8;margin-top:.5rem}
.skills li strong{font-weight:500;color:#e2e8f0;transition:color .15s}.skills ul:hover li strong{color:#5eead4}
.post-fig{margin:1.25rem 0;padding:0}.post-fig img{display:block;width:auto;height:auto;max-width:100%;margin:0 auto;border-radius:.5rem;border:1px solid rgba(148,163,184,.18);background:#0b1220;box-shadow:0 1px 0 0 rgba(148,163,184,.06)}.post-fig figcaption{margin-top:.5rem;font-size:.8rem;line-height:1.4;color:#94a3b8;text-align:center}

main p strong,main p b,main li>strong,main p em,.post strong,.post b{color:#e2e8f0;font-weight:500}
main p a{font-weight:500;color:#e2e8f0}main p a:hover,main p a:focus-visible{color:#5eead4}
footer .term{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}footer .term a{font-weight:500;color:#94a3b8}footer .term a:hover,footer .term a:focus-visible{color:#5eead4}
.morelist{font-size:.875rem;line-height:1.75;margin:0 0 1rem}.morelist a{font-weight:500;white-space:nowrap}
.back{margin:0 0 1.5rem}.back a{display:inline-flex;align-items:center;font-weight:600;font-size:.875rem;color:#5eead4}.back svg{width:1rem;height:1rem;margin-right:.5rem;transition:transform .15s}.back a:hover svg{transform:translateX(-.25rem)}
.home{min-height:100vh;min-height:100svh;display:flex;flex-direction:column;justify-content:center;max-width:34rem;margin:0 auto;padding:3rem 1.5rem;box-sizing:border-box}.home .roles{list-style:none;padding:0;margin:2rem 0 0}.home .roles li{margin:.5rem 0}.home .roles a{display:inline-flex;align-items:center;gap:.25rem;font-weight:500;color:#e2e8f0}.home .roles a:hover{color:#5eead4}.home .roles .arrow,.bloglink .arrow{width:1rem;height:1rem}.home .social{margin:2rem 0 0}.bloglink{margin:1.5rem 0 0;font-size:.875rem}.bloglink a{display:inline-flex;align-items:center;gap:.25rem;color:#94a3b8;font-weight:500}.bloglink a:hover{color:#5eead4}.home footer{padding:2.5rem 0 0;max-width:none}
/* homepage: centred both axes, fluid sizing */
main.home{min-height:100vh;min-height:100svh;width:100%;max-width:none;margin:0;padding:clamp(1.5rem,4vw,4rem) clamp(1rem,4vw,3rem);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;box-sizing:border-box}
main.home h1{font-size:clamp(2.25rem,1.6rem + 3.2vw,5rem);line-height:1.05;margin:0}
main.home .role{color:#e2e8f0;font-size:clamp(1rem,.9rem + .6vw,1.6rem);line-height:1.4;margin:clamp(.6rem,1.2vw,1.25rem) 0 0;max-width:40ch}
main.home .social{justify-content:center;flex-wrap:wrap;gap:clamp(1rem,1.6vw,2rem);margin:clamp(1.5rem,3vw,3rem) 0 0}
main.home .social svg{width:clamp(22px,1.2rem + .5vw,36px);height:clamp(22px,1.2rem + .5vw,36px)}
main.home footer{padding:clamp(1.75rem,3.5vw,3.5rem) 0 0;max-width:none;font-size:clamp(.8rem,.75rem + .25vw,1.05rem);text-align:center}
