:root{color-scheme:dark;--slate:#19262f;--maroon:#2e151b;--pink:#da7b93;--teal:#376e6f;--forest:#1c3334;--selection:rgba(218,123,147,0.4);--header-bg:rgba(47,68,84,0.85);--overlay:rgba(14,26,27,0.65);--glow-pink:rgba(218,123,147,0.22);--glow-teal:rgba(55,110,111,0.5);--grid-line:rgba(218,123,147,0.08);--grain-opacity:0.16;--canvas-opacity:0.4;--canvas-opacity-wide:0.75;--bg:var(--slate);--bg-light:color-mix(in srgb,var(--forest) 55%,var(--slate));--bg-lighter:color-mix(in srgb,var(--teal) 32%,var(--slate));--shadow:rgba(10,18,20,0.6);--paper:color-mix(in srgb,var(--pink) 8%,white);--text:color-mix(in srgb,var(--paper) 78%,white);--text-strong:var(--paper);--text-dim:color-mix(in srgb,var(--paper) 62%,var(--slate));--accent:color-mix(in srgb,var(--pink) 72%,white);--accent-2:color-mix(in srgb,var(--teal) 55%,white);--accent-tint:rgba(218,123,147,0.16);--font:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;--header-h:150px;--header-h-small:70px;--pad:1.5rem}:root[data-theme=light]{color-scheme:light;--cream:#f8ede6;--rose:#d6bdb5;--mint:#d1dbd4;--sage:#ced5ce;--sage-gray:#b7c2bf;--bg:var(--cream);--bg-light:#fdf8f4;--bg-lighter:var(--sage);--shadow:rgba(74,102,95,0.18);--text:#3f4d4a;--text-strong:#1f2927;--text-dim:#5b6965;--accent:#8c4f48;--accent-2:#4a665f;--accent-tint:rgba(140,79,72,0.1);--teal:#55736f;--selection:rgba(214,189,181,0.65);--header-bg:rgba(248,237,230,0.9);--overlay:rgba(31,41,39,0.4);--glow-pink:rgba(214,189,181,0.55);--glow-teal:rgba(183,194,191,0.5);--grid-line:rgba(74,102,95,0.08);--grain-opacity:0.08;--canvas-opacity:0.6;--canvas-opacity-wide:0.85}@media (min-width:768px){:root{--pad:100px}}@media (min-width:1100px){:root{--pad:150px}}*,:after,:before{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:1.05rem;line-height:1.6;-webkit-font-smoothing:antialiased}::selection{background:var(--selection);color:var(--text-strong)}a{color:inherit;text-decoration:none}body:after{content:"";position:fixed;inset:0;z-index:1000;pointer-events:none;opacity:var(--grain-opacity);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");background-size:220px 220px}ol,ul{list-style:none;padding:0}h1,h2,h3,h4,ol,p,ul{margin:0}button{font:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}.skip-link{position:absolute;left:-9999px;top:0;background:var(--accent);color:var(--bg);padding:.5rem 1rem;z-index:100}.skip-link:focus{left:0}.container{width:100%;max-width:calc(1000px + 2 * var(--pad));margin:0 auto;padding-left:var(--pad);padding-right:var(--pad)}.button{display:inline-block;padding:1.1rem 1.75rem;border:1px solid var(--accent);border-radius:.25rem;background:transparent;color:var(--accent);font-family:var(--mono);font-size:.85rem;line-height:1;cursor:pointer;transition:background .2s ease,transform .2s ease}.button:hover{background:var(--accent-tint);transform:translateY(-2px)}.button.small{padding:.75rem 1rem;font-size:.75rem;margin-left:1rem}.eyebrow{font-family:var(--mono);font-size:.85rem;color:var(--accent)}.eyebrow.centered{margin-bottom:1rem;font-size:1rem}.tags{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.25rem}.tag{padding:.25rem .75rem;border-radius:999px;background:var(--accent-tint);color:var(--accent);font-family:var(--mono);font-size:.72rem}.header{position:fixed;top:0;left:0;right:0;z-index:11;height:var(--header-h);display:flex;align-items:center;justify-content:space-between;padding:0 clamp(1.25rem,4vw,3rem);transition:transform .25s ease,height .25s ease,background .25s ease,box-shadow .25s ease}.header.scrolled{height:var(--header-h-small);background:var(--header-bg);box-shadow:0 10px 30px -10px var(--shadow)}.header.hidden{transform:translateY(calc(var(--header-h-small) * -1))}.logo{display:block;width:42px;height:42px;color:var(--accent);font-family:var(--font);transition:transform .2s ease}.logo:hover{transform:rotate(-8deg) scale(1.05)}.logo svg{display:block;width:100%;height:100%}.nav{display:none}.nav-list{display:flex;align-items:center}.nav-link{display:block;padding:.75rem 1rem;font-family:var(--mono);font-size:.8rem;color:var(--text-strong);transition:color .2s ease}.nav-link span{margin-right:.35rem}.nav-link span,.nav-link:hover{color:var(--accent)}@media (min-width:768px){.nav{display:block}.menu-button{display:none}}.menu-button{position:relative;width:44px;height:44px;border:0;background:none;color:var(--accent);cursor:pointer}.menu-button span{position:absolute;left:10px;right:10px;height:2px;border-radius:2px;background:currentColor}.menu-button span:first-child{top:14px}.menu-button span:nth-child(2){top:21px}.menu-button span:nth-child(3){top:28px}.backdrop{position:fixed;inset:0;z-index:12;background:var(--overlay);opacity:0;pointer-events:none;transition:opacity .25s ease}.backdrop.open{opacity:1;pointer-events:auto}.mobile-menu{position:fixed;top:0;right:0;bottom:0;z-index:13;width:min(75vw,400px);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2rem;background:var(--bg-light);box-shadow:-10px 0 30px -15px var(--shadow);transform:translateX(100%);visibility:hidden;transition:transform .25s ease,visibility .25s}.mobile-menu.open{transform:none;visibility:visible}.mobile-menu ol{gap:1.5rem}.mobile-menu li a,.mobile-menu ol{display:flex;flex-direction:column;align-items:center}.mobile-menu li a{gap:.25rem;color:var(--text-strong);font-size:1.1rem}.mobile-menu li a span{font-family:var(--mono);font-size:.8rem;color:var(--accent)}.menu-close{position:absolute;top:1.5rem;right:1.25rem;width:44px;height:44px;border:0;background:none;color:var(--accent);font-size:1.25rem;cursor:pointer}.side{display:none;position:fixed;bottom:0;z-index:10;width:40px}.side-left{left:40px}.side-right{right:40px}@media (min-width:1100px){.side{display:block}}.side-list{display:flex;flex-direction:column;align-items:center;gap:1.25rem}.side-list:after{content:"";display:block;width:1px;height:90px;background:var(--text-dim)}.side-link{display:block;writing-mode:vertical-rl;font-family:var(--mono);font-size:.75rem;letter-spacing:.1em;transition:color .2s ease,transform .2s ease}.side-link:hover{color:var(--accent);transform:translateY(-3px)}.hero{position:relative;display:flex;align-items:center;padding:var(--header-h) 0 0;overflow:hidden}.bg-canvas{position:fixed;inset:0;z-index:0;opacity:var(--canvas-opacity)}.bg-canvas,.bg-canvas *{pointer-events:none}.footer,main{position:relative;z-index:1}.hero:before{content:"";position:absolute;inset:0;background:radial-gradient(45% 55% at 78% 40%,var(--glow-pink),transparent 70%),radial-gradient(60% 70% at 70% 60%,var(--glow-teal),transparent 70%);pointer-events:none}@media (min-width:768px){.bg-canvas{opacity:var(--canvas-opacity-wide)}}.hero-inner{position:relative;z-index:1}.hello{margin-bottom:1.25rem;font-family:var(--mono);font-size:clamp(.9rem,2vw,1rem);color:var(--accent)}.hero-name{font-size:clamp(2.5rem,8vw,5rem);color:var(--text-strong)}.hero-name,.hero-sub{line-height:1.1;font-weight:700;letter-spacing:-.02em}.hero-sub{margin-top:.5rem;font-size:clamp(1.8rem,6vw,4rem);color:var(--text-dim)}.hero-text{max-width:540px;margin-top:1.5rem}.hero .button{margin-top:3rem}.section{padding-top:100px;padding-bottom:100px;scroll-margin-top:20px}.numbered-heading{display:flex;align-items:center;gap:.75rem;margin-bottom:2.5rem;white-space:nowrap;font-size:clamp(1.5rem,5vw,2rem);font-weight:600;color:var(--text-strong)}.numbered-heading .num{font-family:var(--mono);font-size:clamp(1rem,3vw,1.25rem);font-weight:400;color:var(--accent)}.numbered-heading:after{content:"";display:block;flex:1 1;max-width:300px;height:1px;margin-left:.75rem;background:var(--bg-lighter)}.prose+.prose{margin-top:1rem}.subhead{scroll-margin-top:100px;margin:3rem 0 1rem;font-size:1.1rem;font-weight:600;color:var(--text-strong)}.reveal{opacity:0;transform:translateY(20px);transition:opacity .6s ease,transform .6s ease}.reveal.visible{opacity:1;transform:none}.assistant-toggle{display:inline-flex;align-items:center;gap:.6rem;padding:0;border:0;background:none;color:inherit;font:inherit;cursor:pointer}.assistant-toggle:hover{color:var(--accent)}.assistant-caret{display:inline-block;transition:transform .25s ease}.assistant-toggle[aria-expanded=true] .assistant-caret{transform:rotate(-90deg)}.assistant-collapse{display:grid;grid-template-rows:0fr;transition:grid-template-rows .3s ease}.assistant-collapse.open{grid-template-rows:1fr}.assistant-collapse-inner{min-height:0;overflow:hidden}.typed{display:grid}.typed-live,.typed-sizer{grid-area:1/1}.typed-sizer{visibility:hidden}.typed-caret{display:inline-block;width:.06em;height:.9em;margin-left:.08em;vertical-align:-.05em;background:var(--accent);animation:caret-blink 1s steps(1) infinite}@keyframes caret-blink{50%{opacity:0}}.about-grid{display:grid;grid-gap:3rem;gap:3rem}@media (min-width:768px){.about-grid{grid-template-columns:3fr 2fr}}.skills-list{display:grid;grid-template-columns:repeat(2,minmax(140px,220px));grid-gap:.25rem 1rem;gap:.25rem 1rem;margin-top:1.25rem;font-family:var(--mono);font-size:.8rem}.skills-list li{position:relative;padding-left:1.25rem}.skills-list li:before{content:"▹";position:absolute;left:0;color:var(--accent)}.about-pic{position:relative;width:100%;max-width:300px}@media (max-width:767px){.about-pic{margin:0 auto}}.about-pic-inner{position:relative;z-index:1;display:grid;place-items:center;aspect-ratio:1;border-radius:.25rem;background:var(--bg-lighter);color:var(--accent);font-size:4rem;font-weight:700}.about-pic:after{content:"";position:absolute;inset:0;z-index:0;border:2px solid var(--accent);border-radius:.25rem;transform:translate(20px,20px);transition:transform .2s ease}.about-pic:hover:after{transform:translate(12px,12px)}.skill-group+.skill-group{margin-top:1rem}.skill-group-name{font-size:.9rem;font-weight:500;color:var(--text-strong)}.skill-group .tags{margin-top:.5rem}.jobs{display:flex;flex-direction:column;min-height:340px}@media (min-width:600px){.jobs{flex-direction:row}}.tablist{--tab-h:42px;--tab-w:160px;position:relative;z-index:3;display:flex;overflow-x:auto;margin:0 calc(var(--pad) * -1) 1.5rem;padding:0 var(--pad);border-bottom:2px solid var(--bg-lighter);scrollbar-width:none}.tablist::-webkit-scrollbar{display:none}@media (min-width:600px){.tablist{flex-direction:column;flex-shrink:0;width:max-content;margin:0 2rem 0 0;padding:0;overflow:visible;border-bottom:0;border-left:2px solid var(--bg-lighter)}}.tab{flex:0 0 var(--tab-w);height:var(--tab-h);display:flex;align-items:center;padding:0 1.25rem;border:0;background:transparent;color:var(--text);font-family:var(--mono);font-size:.8rem;white-space:nowrap;text-align:left;cursor:pointer;transition:background .2s ease,color .2s ease}@media (min-width:600px){.tab{flex:0 0 var(--tab-h);width:100%}}.tab:hover{background:var(--bg-light)}.tab.active,.tab:hover{color:var(--accent)}.tab-highlight{position:absolute;left:var(--pad);bottom:0;width:var(--tab-w);height:2px;background:var(--accent);transform:translateX(calc(var(--i) * var(--tab-w)));transition:transform .25s ease}@media (min-width:600px){.tab-highlight{top:0;bottom:auto;left:-2px;width:2px;height:var(--tab-h);transform:translateY(calc(var(--i) * var(--tab-h)))}}.tabpanel{flex:1 1;padding-top:.5rem;animation:fade-in .3s ease}@keyframes fade-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.job-title{font-size:1.2rem;font-weight:500;line-height:1.35;color:var(--text-strong)}.job-company{color:var(--accent)}.job-range{margin:.35rem 0 1.5rem;font-family:var(--mono);font-size:.8rem;color:var(--text-dim)}.bullets{display:flex;flex-direction:column;gap:.6rem;font-size:.95rem}.bullets li{position:relative;padding-left:1.5rem}.bullets li:before{content:"▹";position:absolute;left:0;color:var(--accent)}.featured{grid-template-columns:repeat(12,1fr);align-items:center;margin-bottom:6rem}.featured,.featured-image{position:relative;display:grid}.featured-image{grid-column:1/7;grid-row:1/-1;z-index:1;place-items:center;aspect-ratio:16/10;overflow:hidden;border-radius:.25rem;background:repeating-linear-gradient(0deg,transparent 0 39px,var(--grid-line) 39px 40px),repeating-linear-gradient(90deg,transparent 0 39px,var(--grid-line) 39px 40px),linear-gradient(135deg,var(--bg-lighter),var(--bg-light))}.featured-image span{font-size:clamp(3rem,8vw,5rem);font-weight:700;letter-spacing:-.03em;color:var(--accent)}.featured-content{grid-column:7/-1;grid-row:1/-1;position:relative;z-index:2;text-align:right;padding-left:1.25rem}.featured.reverse .featured-image{grid-column:7/-1}.featured.reverse .featured-content{grid-column:1/7;text-align:left;padding-left:0;padding-right:1.25rem}.featured-title{margin:.4rem 0 1rem;font-size:clamp(1.4rem,3vw,1.75rem);font-weight:600;color:var(--text-strong)}.featured-description{font-size:.95rem}.featured-tags{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.25rem 1.25rem;font-family:var(--mono);font-size:.75rem;color:var(--text);margin-top:1.75rem}.featured-tags.start,.featured.reverse .featured-tags{justify-content:flex-start}.project-links{display:flex;gap:1rem;justify-content:flex-end;margin-top:.75rem;font-family:var(--mono);font-size:.8rem}.featured.reverse .project-links,.project-card .project-links{justify-content:flex-start}.project-links a:hover{color:var(--accent)}@media (max-width:767px){.featured{display:flex;flex-direction:column;overflow:hidden;margin-bottom:1.5rem;padding:1.75rem;border-radius:.25rem;background:var(--bg-light)}.featured-image{position:absolute;inset:0;z-index:0;aspect-ratio:auto;opacity:.18}.featured-content,.featured.reverse .featured-content{text-align:left}.featured-description{padding:0;background:transparent;box-shadow:none}.featured-tags,.project-links{justify-content:flex-start}}.featured-image .project-img{object-fit:cover;transition:transform .4s ease,filter .3s ease}.featured-image:after{content:"";position:absolute;inset:0;mix-blend-mode:multiply;opacity:.5;transition:opacity .3s ease;pointer-events:none}a.featured-image:hover:after{opacity:0}a.featured-image:hover .project-img{transform:scale(1.03)}.project-thumb{position:relative;aspect-ratio:16/10;margin:-.5rem -.5rem 0;overflow:hidden;border-radius:.25rem}.project-thumb img{object-fit:cover}.pan{position:absolute;inset:0;display:block;overflow:hidden;container-type:size}.pan-img{display:block;width:100%;height:auto;will-change:transform;animation:pan-down var(--pan,14s) ease-in-out infinite alternate;animation-play-state:paused}.pan.playing .pan-img{animation-play-state:running}@keyframes pan-down{0%,8%{transform:translateY(0)}92%,to{transform:translateY(calc(-100% + 100cqh))}}.featured-image.tall:after{content:none}.other-title{margin:5rem 0 2rem;text-align:center;font-size:1.5rem;font-weight:600;color:var(--text-strong)}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));grid-gap:1rem;gap:1rem}.project-card{display:flex;flex-direction:column;justify-content:space-between;gap:1.5rem;min-height:220px;padding:1.75rem;border-radius:.25rem;background:var(--bg-light);transition:transform .2s ease,box-shadow .2s ease}.project-card:hover{transform:translateY(-6px);box-shadow:0 20px 30px -15px var(--shadow)}.project-card-title{margin-bottom:.6rem;font-size:1.1rem;font-weight:600;color:var(--text-strong)}.project-card:hover .project-card-title{color:var(--accent)}.project-card-text{font-size:.9rem}.contact{max-width:calc(600px + 2 * var(--pad));margin:0 auto 4rem;padding-top:100px;padding-bottom:100px;text-align:center}.contact-title{font-size:clamp(2.5rem,6vw,3.75rem);font-weight:700;letter-spacing:-.02em;color:var(--text-strong)}.contact p:not(.eyebrow){margin-top:1.25rem}.contact .button{margin-top:3rem}.footer{padding:1.5rem;text-align:center;font-family:var(--mono);font-size:.75rem}.footer-sub{margin-top:.35rem;color:var(--text-dim)}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.assistant{padding-top:2rem;padding-bottom:2rem;scroll-margin-top:80px}.assistant-title{display:inline-block;margin-bottom:1rem;padding-bottom:.25rem;border-bottom:1px dashed var(--accent-2);font-family:var(--mono);font-size:1.1rem;font-weight:700;color:var(--accent-2)}.assistant-panel{padding:1.5rem;border:1px solid var(--bg-lighter);border-left:3px solid var(--accent);border-radius:.75rem;background:var(--bg-light);box-shadow:0 20px 40px -25px var(--shadow)}.assistant-intro{font-family:var(--mono);font-size:.9rem;color:var(--text-dim)}.chips{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:1rem}.chip{padding:.55rem 1rem;border:1px solid var(--text-dim);border-radius:999px;background:transparent;color:var(--text);font-family:var(--mono);font-size:.82rem;cursor:pointer;transition:border-color .2s ease,color .2s ease,background .2s ease}.chip:hover,.chip[aria-pressed=true]{border-color:var(--accent);color:var(--accent)}.chip[aria-pressed=true]{background:var(--accent-tint)}.assistant-answer{min-height:5.5rem;margin-top:1.25rem;padding-top:1.25rem;border-top:1px solid var(--bg-lighter)}.assistant-answer-body{animation:fade-in .3s ease}.assistant-answer-body p{color:var(--text-strong)}.assistant-empty{font-family:var(--mono);font-size:.85rem;color:var(--text-dim)}.button.small.cta{margin-top:1rem;margin-left:0}.assistant-form{display:flex;gap:.6rem;margin-top:1.25rem}.assistant-input{flex:1 1;min-width:0;padding:.85rem 1rem;border:1px solid var(--bg-lighter);border-radius:.5rem;background:var(--bg);color:var(--text-strong);font-family:var(--mono);font-size:.9rem}.assistant-input::placeholder{color:var(--text-dim)}.assistant-input:focus{border-color:var(--accent)}.assistant-send{width:3.2rem;border:1px solid var(--teal);border-radius:.5rem;background:var(--teal);color:#fff;font-size:1.2rem;cursor:pointer;transition:background .2s ease,border-color .2s ease}.assistant-send:hover{border-color:var(--accent)}.assistant-note{margin-top:.9rem;font-family:var(--mono);font-size:.75rem;color:var(--text-dim)}.assistant-note a{color:var(--accent)}.assistant-note a:hover{text-decoration:underline}.assistant-mic{width:3.2rem;border:1px solid var(--bg-lighter);border-radius:.5rem;background:var(--bg);color:var(--text-strong);font-size:1.1rem;cursor:pointer;transition:border-color .2s ease,background .2s ease}.assistant-mic.listening,.assistant-mic:hover{border-color:var(--accent)}.assistant-mic.listening{background:var(--accent-tint);animation:mic-pulse 1.2s ease-in-out infinite}@keyframes mic-pulse{0%,to{box-shadow:0 0 0 0 rgba(218,123,147,.5)}50%{box-shadow:0 0 0 8px rgba(218,123,147,0)}}.assistant-voice{margin-top:.9rem}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:after,:before{transition:none!important;animation:none!important}.reveal{opacity:1;transform:none}}.theme-toggle{display:grid;place-items:center;width:40px;height:40px;margin-left:.5rem;border:1px solid transparent;border-radius:50%;background:none;color:var(--text-strong);cursor:pointer;transition:color .2s ease,border-color .2s ease,background .2s ease}.theme-toggle:hover{color:var(--accent);border-color:var(--accent);background:var(--accent-tint)}.mobile-menu .theme-toggle{margin-left:0}.cert-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));grid-gap:1rem;gap:1rem}.cert-card{display:flex;flex-direction:column;overflow:hidden;border-radius:.25rem;background:var(--bg-light);transition:transform .2s ease,box-shadow .2s ease}.cert-card:hover{transform:translateY(-6px);box-shadow:0 20px 30px -15px var(--shadow)}.cert-thumb{position:relative;display:grid;place-items:center;aspect-ratio:4/3;background:linear-gradient(135deg,var(--bg-lighter),var(--bg-light))}.cert-thumb img{object-fit:contain;padding:.5rem}.cert-thumb span{font-size:2.5rem;font-weight:700;letter-spacing:-.02em;color:var(--accent);opacity:.55}.cert-body{display:flex;flex-direction:column;gap:.25rem;padding:1.25rem 1.5rem 1.5rem}.cert-title{font-size:1.05rem;font-weight:600;line-height:1.35;color:var(--text-strong)}.cert-card:hover .cert-title{color:var(--accent)}.cert-issuer{font-size:.9rem}.cert-meta{font-size:.75rem;color:var(--text-dim)}.cert-link,.cert-meta{font-family:var(--mono)}.cert-link{margin-top:.5rem;font-size:.8rem;color:var(--text-strong)}.cert-link:hover{color:var(--accent)}