:root{--forest:#1F4D3A;--deep:#143626;--sage:#A9BFA8;--sage-l:#E6EDE4;--grey:#F3F4F2;--ink:#1B2620;--muted:#53625A;--line:#D5DDD3;--warn:#8A5A00;--warn-bg:#FFF4D6}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:4.5rem}
body{margin:0;font:400 1rem/1.65 "Public Sans",system-ui,sans-serif;color:var(--ink);background:#fff}
h1,h2,h3{font-family:Newsreader,Georgia,serif;font-weight:600;line-height:1.15;margin:0 0 .6rem;color:var(--deep)}
h2{font-size:clamp(1.7rem,3.5vw,2.3rem);margin-bottom:1.4rem}
h3{font-size:1.25rem}
p{margin:0 0 1rem;max-width:68ch}
a{color:var(--forest)}
:focus-visible{outline:3px solid #2E7D5B;outline-offset:3px;border-radius:2px}
.skip{position:absolute;left:-999px;top:0;background:var(--forest);color:#fff;padding:.6rem 1rem;z-index:20}
.skip:focus{left:0}
.wrap{max-width:68rem;margin:0 auto;padding:0 1.5rem}
.block{padding-top:4.5rem;padding-bottom:4.5rem}
.band{background:var(--grey)}
.top{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.8rem 1.5rem;background:rgba(255,255,255,.94);backdrop-filter:blur(6px);border-bottom:1px solid var(--line)}
.brand{font:600 1.15rem Newsreader,Georgia,serif;color:var(--deep);text-decoration:none}
nav{display:flex;gap:1.1rem}
nav a{text-decoration:none;color:var(--ink);font-size:.9rem;padding:.2rem 0;border-bottom:2px solid transparent}
nav a:hover,nav a.on{border-color:var(--forest);color:var(--forest)}
.burger{display:none;font:inherit;background:none;border:1px solid var(--forest);color:var(--forest);padding:.35rem .8rem;border-radius:4px;cursor:pointer}
.hero{position:relative;min-height:82vh;display:flex;align-items:center;background:var(--deep);color:#fff;overflow:hidden}
.hero .wrap{width:100%;position:relative;z-index:1;padding-top:4rem;padding-bottom:4rem}
.hero h1{font-size:clamp(2.8rem,8vw,5.2rem);color:#fff;letter-spacing:-.01em}
.role{font-size:1.2rem;color:var(--sage);margin-bottom:1.2rem}
.lead{font-size:1.1rem;color:#E9F0E7;max-width:48ch}
#contours{position:absolute;inset:0;width:100%;height:100%}
#contours path{fill:none;stroke:var(--sage);stroke-width:1.2;opacity:.38}
.actions{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:1.8rem}
.btn{display:inline-block;padding:.75rem 1.4rem;border-radius:4px;background:var(--sage);color:var(--deep);font-weight:600;text-decoration:none;border:2px solid var(--sage)}
.btn:hover{background:#fff;border-color:#fff}
.btn.ghost{background:transparent;color:#fff;border-color:var(--sage)}
.btn.ghost:hover{background:rgba(255,255,255,.12)}
.btn.light{background:#fff;border-color:#fff}
.btn.ghost-light{background:transparent;color:#fff;border-color:var(--sage)}
.cols{display:grid;grid-template-columns:1fr 1fr;gap:2.5rem}
.skills{display:grid;grid-template-columns:repeat(auto-fit,minmax(18rem,1fr));gap:1.8rem 3rem;margin:0}
.skills dt{font:600 1.1rem Newsreader,Georgia,serif;color:var(--forest);border-bottom:2px solid var(--sage);padding-bottom:.3rem;margin-bottom:.5rem}
.skills dd{margin:0}
.meta{color:var(--muted);font-size:.92rem}
.timeline{list-style:none;margin:0;padding:0 0 0 1.5rem;border-left:2px solid var(--sage)}
.timeline li{position:relative;padding:0 0 1.6rem}
.timeline li::before{content:"";position:absolute;left:-1.95rem;top:.45rem;width:.75rem;height:.75rem;border-radius:50%;background:var(--forest);border:2px solid var(--grey)}
.timeline h3{font-size:1.1rem;margin-bottom:.2rem}
.edu{list-style:none;padding:0;margin:0}
.edu li{padding:1rem 0;border-top:1px solid var(--line)}
.edu span{display:block;color:var(--muted)}
.dark{background:var(--forest);color:#fff}
.dark h2{color:#fff}
footer{background:var(--deep);color:#CFDACB;padding:1.5rem 0;font-size:.9rem}
footer .wrap{display:flex;justify-content:space-between;flex-wrap:wrap;gap:.5rem}
footer p{margin:0}footer a{color:#fff}
@media(max-width:1020px){
 .burger{display:block}
 nav{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:0;background:#fff;border-bottom:1px solid var(--line)}
 nav.open{display:flex}
 nav a{padding:.8rem 1.5rem;border:0}
 .cols,.feature,.grid3{grid-template-columns:minmax(0,1fr)}
 .block{padding-top:3rem;padding-bottom:3rem}
}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

.intro{color:var(--muted);margin-bottom:2rem}
.feature{display:grid;grid-template-columns:minmax(0,1.05fr) 1fr;gap:2.5rem;align-items:stretch;margin-bottom:2.5rem;border:1px solid var(--line);border-radius:6px;overflow:hidden;background:#fff}
.feature .body{padding:2rem 2rem 2rem 0}
.big{font:600 1.5rem/1.25 Newsreader,Georgia,serif;color:var(--forest);margin-bottom:.8rem}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:1.5rem}
.card,.engage{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:6px;padding:0 0 1.4rem;background:#fff}
.card>:not(.viz){margin-left:1.3rem;margin-right:1.3rem}
.card .viz{margin-bottom:1.1rem}
.card .tags{margin-top:auto}
.viz{position:relative;min-height:11rem;background:var(--deep);overflow:hidden}
.feature .viz{min-height:100%}
.viz::before{content:"";position:absolute;inset:0;background:repeating-radial-gradient(ellipse at var(--x,70%) var(--y,40%),transparent 0 14px,rgba(169,191,168,.35) 14px 15px)}
.v1{--x:65%;--y:45%}.v2{--x:20%;--y:60%}.v3{--x:80%;--y:30%}.v4{--x:45%;--y:75%}
.viz .num{position:absolute;left:1.2rem;bottom:.8rem;font:600 2.6rem Newsreader,Georgia,serif;color:#fff}
.viz .flag{position:absolute;left:1.2rem;top:1.2rem;background:var(--sage);color:var(--deep);font-size:.85rem;font-weight:600;padding:.25rem .7rem;border-radius:3px}
.tags,.badges{list-style:none;display:flex;flex-wrap:wrap;gap:.4rem;padding:0;margin:.4rem 0 0}
.tags li{font-size:.82rem;background:var(--sage-l);color:var(--deep);padding:.15rem .6rem;border-radius:3px}
.engage{padding:1.4rem}
.engage svg{width:2.2rem;height:2.2rem;fill:none;stroke:var(--forest);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;margin-bottom:.8rem}
.badges{margin:0 0 .8rem}
.badges li{font-size:.8rem;border:1px solid var(--sage);color:var(--forest);padding:.1rem .6rem;border-radius:99px}
.engage h3{font-size:1.15rem}
.engage p:last-child{margin-bottom:0}
.js .rise{opacity:0;transform:translateY(12px);transition:opacity .6s,transform .6s}
.js .rise.in{opacity:1;transform:none}
@media(max-width:1020px){.feature,.grid3{grid-template-columns:minmax(0,1fr)}.feature .body{padding:0 1.5rem 1.5rem}.feature .viz{min-height:12rem}}
@media(prefers-reduced-motion:reduce){.js .rise{opacity:1;transform:none;transition:none}}
