:root{
  --ink:#13203B;
  --cobalt:#2B59FF;
  --mint:#CDEFE0;
  --paper:#F4F6FA;
  --card:#FFFFFF;
  --slate:#566176;
  --line:#D9DEE8;
  --display:"Bricolage Grotesque","Segoe UI",system-ui,sans-serif;
  --body:"IBM Plex Sans","Segoe UI",system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:var(--body);background:var(--paper);color:var(--ink);line-height:1.6;font-size:17px}
a{color:inherit}
:focus-visible{outline:3px solid var(--cobalt);outline-offset:3px;border-radius:4px}
.wrap{max-width:1080px;margin:0 auto;padding:0 24px}

/* nav */
header.nav{position:sticky;top:0;z-index:5;background:rgba(244,246,250,.92);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
.nav .wrap{display:flex;justify-content:space-between;align-items:center;height:60px}
.brand{font-family:var(--display);font-weight:800;text-decoration:none;font-size:1.1rem}
.nav ul{display:flex;gap:22px;list-style:none;font-size:.95rem}
.nav a{text-decoration:none;color:var(--slate)}
.nav a:hover{color:var(--ink)}

/* hero */
.hero{padding:72px 0 80px}
.hero .wrap{display:grid;grid-template-columns:1.25fr .75fr;gap:56px;align-items:center}
h1{font-family:var(--display);font-weight:800;font-size:clamp(2.6rem,6vw,4.6rem);line-height:1.02;letter-spacing:-.02em}
.role{font-family:var(--display);font-weight:500;font-size:1.5rem;color:var(--cobalt);margin:14px 0 22px}
.lede{max-width:56ch;color:var(--slate);font-size:1.08rem}
.cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px}
.btn{display:inline-block;padding:12px 22px;border-radius:999px;font-weight:600;text-decoration:none;font-size:.97rem;border:2px solid var(--ink)}
.btn.primary{background:var(--ink);color:#fff}
.btn.primary:hover{background:var(--cobalt);border-color:var(--cobalt)}
.btn.ghost:hover{background:var(--ink);color:#fff}
.meta{margin-top:28px;font-size:.92rem;color:var(--slate)}

.portrait{position:relative;justify-self:center;width:min(100%,340px)}
.portrait::before{content:"";position:absolute;inset:18px -18px -18px 18px;background:var(--mint);border-radius:170px 170px 18px 18px}
.portrait::after{content:"";position:absolute;right:-18px;top:-10px;width:70px;height:70px;border-radius:50%;background:var(--cobalt)}
.portrait img{position:relative;z-index:1;display:block;width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;object-position:50% 30%;border-radius:170px 170px 18px 18px;background:#e6e9ef}

/* sections */
section{padding:64px 0;border-top:1px solid var(--line)}
h2{font-family:var(--display);font-weight:700;font-size:2rem;letter-spacing:-.01em;margin-bottom:28px}
.two{display:grid;grid-template-columns:220px 1fr;gap:40px}
.two > h2{margin-bottom:0}

/* skills */
.skills{display:grid;gap:0}
.skill{display:grid;grid-template-columns:200px 1fr;gap:20px;padding:16px 0;border-bottom:1px solid var(--line)}
.skill:first-child{padding-top:0}
.skill h3{font-size:1rem;font-weight:600}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chips span{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:3px 12px;font-size:.92rem}

/* project */
.project{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:34px}
.project h3{font-family:var(--display);font-size:1.5rem;font-weight:700}
.project .sub{color:var(--slate);margin:4px 0 18px}
.project ul{padding-left:20px;display:grid;gap:8px;max-width:70ch}
.flow{display:flex;align-items:stretch;gap:0;margin:28px 0 8px;flex-wrap:wrap}
.node{flex:1 1 140px;border:2px solid var(--ink);border-radius:12px;padding:12px 14px;background:var(--paper)}
.node b{display:block;font-family:var(--display);font-size:1.02rem}
.node small{color:var(--slate);font-size:.84rem}
.node.hot{background:var(--ink);color:#fff}
.node.hot small{color:#b9c3da}
.arrow{flex:0 0 34px;display:flex;align-items:center;justify-content:center;color:var(--cobalt);font-weight:700;font-size:1.3rem}
.flowcap{font-size:.85rem;color:var(--slate)}
.link{display:inline-block;margin-top:20px;font-weight:600;color:var(--cobalt)}


/* about */
.about{display:grid;grid-template-columns:.8fr 1.2fr;gap:56px;align-items:center}
.about figure{position:relative;max-width:360px}
.about figure::before{content:"";position:absolute;inset:-14px 14px 14px -14px;border:2px solid var(--cobalt);border-radius:18px}
.about img{position:relative;display:block;width:100%;height:auto;aspect-ratio:4/5;object-fit:cover;object-position:50% 40%;border-radius:18px;background:#e6e9ef}
.about p{max-width:54ch;color:var(--slate);font-size:1.08rem}
.about p + p{margin-top:14px}

/* timeline */
.tl{display:grid;gap:0}
.job{display:grid;grid-template-columns:190px 1fr;gap:20px;padding:18px 0;border-bottom:1px solid var(--line)}
.job:first-child{padding-top:0}
.job time{color:var(--slate);font-size:.93rem}
.job h3{font-size:1.05rem;font-weight:600}
.job p{color:var(--slate);margin-top:4px}

.cols{display:grid;grid-template-columns:1fr 1fr;gap:48px}
.cols h3{font-size:1.05rem;font-weight:600}
.cols p{color:var(--slate)}
.cols .item{margin-bottom:20px}

footer{background:var(--ink);color:#fff;padding:64px 0 40px;border-top:0}
footer h2{color:#fff}
footer a{color:#fff}
.contact{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:20px;margin-top:8px}
.contact div{border-top:2px solid var(--cobalt);padding-top:12px}
.contact span{display:block;color:#b9c3da;font-size:.88rem}
.contact a{font-weight:500;word-break:break-word}
.copy{margin-top:48px;color:#b9c3da;font-size:.88rem}

@media (max-width:820px){
  .hero{padding:40px 0 56px}
  .hero .wrap{grid-template-columns:1fr;gap:48px}
  .portrait{order:-1;width:min(78%,300px);justify-self:start;margin-right:20px}
  .two,.skill,.job,.cols{grid-template-columns:1fr;gap:10px}
  .about{grid-template-columns:1fr;gap:36px}
  .about figure{margin-left:14px;max-width:300px}
  .two > h2{margin-bottom:18px}
  .cols{gap:8px}
  .nav ul{gap:14px;font-size:.88rem}
  .arrow{flex-basis:100%;height:28px;transform:rotate(90deg)}
}

@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}

/* nav toggle + active link */
.nav a.active{color:var(--ink);font-weight:600}
.menu-btn{display:none;background:none;border:2px solid var(--ink);border-radius:8px;padding:6px 12px;font:600 .9rem var(--body);color:var(--ink);cursor:pointer}
@media (max-width:640px){
  .menu-btn{display:inline-block}
  .nav nav{position:absolute;left:0;right:0;top:60px;background:var(--paper);border-bottom:1px solid var(--line);display:none}
  .nav nav.open{display:block}
  .nav nav ul{flex-direction:column;gap:0;padding:8px 24px 16px}
  .nav nav li{display:list-item !important}
  .nav nav a{display:block;padding:10px 0;font-size:1rem}
}

