:root{
  --paper:#EFF0EC;
  --paper-2:#F7F8F4;
  --ink:#15171B;
  --muted:#63676C;
  --faint:#8B8F94;
  --line:#DADCD5;
  --accent:#2645E6;
  --accent-press:#1B34C0;
  --maxw:1080px;
  --nav-h:64px;
}
*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:"Hanken Grotesk",system-ui,sans-serif;
  font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;overflow-x:hidden;
}
a{color:inherit;}
::selection{background:var(--accent);color:#fff;}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 34px;}

/* progress */
.progress{position:fixed;top:0;left:0;height:2px;width:0;background:var(--accent);z-index:60;transition:width .08s linear;}

/* nav */
header.nav{
  position:fixed;top:0;left:0;right:0;z-index:50;height:var(--nav-h);
  display:flex;align-items:center;background:var(--paper);
  border-bottom:1px solid transparent;transition:border-color .25s ease;
}
header.nav.scrolled{border-color:var(--line);}
.nav .wrap{display:flex;align-items:center;justify-content:space-between;width:100%;}
.brand{text-decoration:none;font-weight:600;font-size:16.5px;letter-spacing:-.01em;}
.brand .dot{color:var(--accent);}
nav.tabs{display:flex;gap:2px;}
nav.tabs a{
  text-decoration:none;color:var(--muted);font-size:14.5px;font-weight:500;
  padding:8px 14px;position:relative;transition:color .18s ease;
}
nav.tabs a:hover{color:var(--ink);}
nav.tabs a.active{color:var(--ink);}
nav.tabs a.active::after{content:"";position:absolute;left:14px;right:14px;bottom:0;height:2px;background:var(--accent);}
.menu-btn{display:none;background:none;border:1px solid var(--line);border-radius:2px;padding:8px 13px;font:inherit;font-size:14px;cursor:pointer;color:var(--ink);}

/* hero */
.hero{min-height:100vh;display:flex;align-items:center;padding:var(--nav-h) 0 60px;}
.hero .kicker{color:var(--accent);font-size:14px;font-weight:600;letter-spacing:.02em;margin:0 0 24px;}
h1.name{
  font-family:"Fraunces",serif;font-weight:400;font-optical-sizing:auto;
  font-size:clamp(52px,9vw,96px);line-height:.98;letter-spacing:-.025em;margin:0 0 30px;
}
.hero .sub{font-size:clamp(20px,2.6vw,26px);line-height:1.4;max-width:22ch;margin:0 0 20px;font-weight:500;}
.hero .focus{color:var(--muted);font-size:17px;max-width:52ch;margin:0 0 38px;}
.cta-row{display:flex;gap:13px;align-items:center;flex-wrap:wrap;}
.btn{text-decoration:none;font-weight:600;font-size:15px;padding:13px 22px;border-radius:2px;display:inline-flex;transition:transform .12s ease,background .18s ease,border-color .18s ease;}
.btn-solid{background:var(--accent);color:#fff;}
.btn-solid:hover{background:var(--accent-press);}
.btn-ghost{background:transparent;color:var(--ink);border:1px solid var(--line);}
.btn-ghost:hover{border-color:var(--ink);}
.btn:active{transform:translateY(1px);}
.social{display:flex;gap:18px;margin-left:6px;}
.social a{color:var(--muted);text-decoration:none;font-size:14.5px;font-weight:500;}
.social a:hover{color:var(--accent);}

/* sections */
section{padding:96px 0;scroll-margin-top:var(--nav-h);}
.kick{color:var(--accent);font-size:13.5px;font-weight:600;margin:0 0 14px;}
h2{font-family:"Fraunces",serif;font-weight:400;font-size:clamp(29px,3.8vw,42px);line-height:1.05;letter-spacing:-.02em;margin:0;}
.lead{color:var(--muted);font-size:18px;max-width:58ch;margin:16px 0 0;}

/* about */
.about-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:60px;margin-top:44px;align-items:start;}
.about-grid p{margin:0 0 20px;max-width:54ch;}
.about-grid p:last-child{margin-bottom:0;}
.edu{border:1px solid var(--line);border-radius:3px;padding:26px;background:var(--paper-2);}
.edu .school{font-family:"Fraunces",serif;font-size:21px;line-height:1.15;margin:0 0 5px;}
.edu .deg{color:var(--muted);font-size:15px;margin:0 0 20px;}
.edu-meta{display:flex;gap:30px;padding:16px 0;border-top:1px solid var(--line);margin-bottom:18px;}
.edu-meta span{display:block;font-size:12px;color:var(--faint);letter-spacing:.02em;margin-bottom:2px;}
.edu-meta b{font-size:20px;font-weight:600;}
.edu .clabel{font-size:12px;color:var(--faint);margin:0 0 11px;letter-spacing:.02em;}
.courses{display:flex;flex-wrap:wrap;gap:7px;}
.courses span{font-size:13px;padding:5px 11px;border:1px solid var(--line);border-radius:2px;}

/* interests */
.interests{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin-top:48px;}
.interests .col h3{font-family:"Fraunces",serif;font-weight:400;font-size:21px;line-height:1.2;margin:0 0 12px;}
.interests .col p{color:var(--muted);font-size:15.5px;line-height:1.55;margin:0;}
.interests .col{padding-top:22px;border-top:2px solid var(--ink);}

/* projects */
.proj{margin-top:44px;border-top:1px solid var(--line);}
.prow{display:grid;grid-template-columns:1fr 260px;gap:36px;padding:36px 0;border-bottom:1px solid var(--line);align-items:start;transition:padding-left .28s ease;}
.prow:hover{padding-left:12px;}
.prow h3{font-family:"Fraunces",serif;font-weight:400;font-size:25px;line-height:1.12;margin:0 0 6px;}
.prow h3 a{text-decoration:none;background-image:linear-gradient(var(--accent),var(--accent));background-size:0 1.5px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .3s ease;}
.prow h3 a:hover{background-size:100% 1.5px;color:var(--accent);}
.prow .meta{color:var(--faint);font-size:13.5px;margin:0 0 14px;}
.prow p{margin:0 0 12px;color:var(--muted);font-size:16px;line-height:1.55;max-width:60ch;}
.repo{text-decoration:none;color:var(--accent);font-size:14px;font-weight:600;border-bottom:1px solid transparent;transition:border-color .2s ease;}
.repo:hover{border-color:var(--accent);}
.stack{display:flex;flex-wrap:wrap;gap:7px;padding-top:4px;}
.stack span{font-size:12.5px;padding:5px 10px;border:1px solid var(--line);border-radius:2px;color:var(--ink);}

/* experience */
.exp{margin-top:44px;border-top:1px solid var(--line);}
.erow{display:grid;grid-template-columns:280px 1fr;gap:44px;padding:32px 0;border-bottom:1px solid var(--line);}
.erow .role{font-family:"Fraunces",serif;font-size:21px;line-height:1.15;margin:0 0 5px;}
.erow .org{color:var(--accent);font-weight:600;font-size:15px;margin:0 0 4px;}
.erow .when{color:var(--faint);font-size:13.5px;}
.erow p{margin:0;color:var(--muted);font-size:16px;line-height:1.6;max-width:60ch;}

/* skills */
.skills-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:44px;margin-top:44px;}
.skills-grid h4{font-size:13px;color:var(--faint);font-weight:600;letter-spacing:.02em;margin:0 0 14px;}
.skills-grid ul{list-style:none;margin:0;padding:0;}
.skills-grid li{font-size:16.5px;padding:8px 0;border-bottom:1px solid var(--line);}
.skills-grid li:last-child{border-bottom:none;}

/* contact */
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:56px;margin-top:40px;align-items:start;}
.contact-grid .big{font-family:"Fraunces",serif;font-weight:400;font-size:clamp(24px,3vw,32px);line-height:1.25;margin:0;max-width:18ch;}
.links a{display:flex;justify-content:space-between;align-items:center;text-decoration:none;padding:19px 0;border-top:1px solid var(--line);font-size:18px;font-weight:500;transition:padding-left .25s ease,color .2s ease;}
.links a:last-child{border-bottom:1px solid var(--line);}
.links a:hover{padding-left:9px;color:var(--accent);}
.links a .v{color:var(--faint);font-size:14.5px;font-weight:500;}
.links a:hover .v{color:var(--accent);}

footer{padding:36px 0 52px;color:var(--faint);font-size:13.5px;}
footer .wrap{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;}

.reveal{opacity:0;transform:translateY(14px);transition:opacity .65s cubic-bezier(.2,.7,.2,1),transform .65s cubic-bezier(.2,.7,.2,1);}
.reveal.in{opacity:1;transform:none;}

@media (max-width:880px){
  .wrap{padding:0 22px;}
  nav.tabs{display:none;}
  .menu-btn{display:inline-flex;}
  .about-grid,.contact-grid{grid-template-columns:1fr;gap:34px;}
  .interests{grid-template-columns:1fr;gap:30px;}
  .prow{grid-template-columns:1fr;gap:16px;}
  .erow{grid-template-columns:1fr;gap:12px;}
  .skills-grid{grid-template-columns:1fr;gap:28px;}
  section{padding:66px 0;}
  .hero{min-height:auto;padding:calc(var(--nav-h) + 40px) 0 60px;}
}

.mobile-menu{position:fixed;inset:0;background:var(--paper);z-index:70;display:none;flex-direction:column;justify-content:center;gap:4px;padding:40px;}
.mobile-menu.open{display:flex;}
.mobile-menu a{text-decoration:none;color:var(--ink);font-family:"Fraunces",serif;font-size:32px;padding:9px 0;}
.mobile-menu .close{position:absolute;top:22px;right:22px;background:none;border:none;font-size:30px;cursor:pointer;color:var(--ink);}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  .reveal{transition:none;opacity:1;transform:none;}
  .prow,.links a{transition:none;}
}
