/* ============================================================
   Ashish Kumar Thakur — Portfolio
   Classic editorial. One stylesheet, no framework.
   ============================================================ */

:root{
  --paper:      #fbf9f5;
  --paper-alt:  #f4f0e8;
  --ink:        #1c1a17;
  --ink-soft:   #55504a;
  --ink-faint:  #8b847a;
  --rule:       #ddd6c8;
  --accent:     #7c2d26;
  --accent-soft:#a9564c;

  --serif: "Fraunces", "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
  --sans:  "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;

  --wrap: 1140px;
  --gut: clamp(1.25rem, 5vw, 3.5rem);
}

@media (prefers-color-scheme: dark){
  :root{
    --paper:      #16150f;
    --paper-alt:  #1e1c16;
    --ink:        #f0ece2;
    --ink-soft:   #b5aea1;
    --ink-faint:  #8a8377;
    --rule:       #34302a;
    --accent:     #d9836f;
    --accent-soft:#c47160;
  }
}

*,*::before,*::after{ box-sizing:border-box; }

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

body{
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--serif);
  font-size:clamp(1rem, 0.96rem + 0.2vw, 1.115rem);
  line-height:1.72;
  font-weight:400;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}

img{ max-width:100%; height:auto; display:block; }

a{ color:inherit; }

.wrap{
  max-width:var(--wrap);
  margin-inline:auto;
  padding-inline:var(--gut);
}

.skip{
  position:absolute; left:-9999px; top:0;
  background:var(--ink); color:var(--paper);
  padding:.7rem 1.1rem; z-index:100; font-family:var(--sans); font-size:.9rem;
}
.skip:focus{ left:.5rem; top:.5rem; }

/* ── Header ───────────────────────────────────────────── */
.site-header{
  position:sticky; top:0; z-index:50;
  background:color-mix(in srgb, var(--paper) 88%, transparent);
  backdrop-filter:saturate(180%) blur(12px);
  -webkit-backdrop-filter:saturate(180%) blur(12px);
  border-bottom:1px solid transparent;
  transition:border-color .3s ease;
}
.site-header.scrolled{ border-bottom-color:var(--rule); }

.header-inner{
  display:flex; align-items:center; justify-content:space-between;
  gap:1.5rem; min-height:70px;
}

.wordmark{
  font-family:var(--serif);
  font-weight:500;
  font-size:1.02rem;
  letter-spacing:.02em;
  text-decoration:none;
  white-space:nowrap;
}
.wordmark:hover{ color:var(--accent); }

.nav{ display:flex; gap:2rem; }
.nav a{
  font-family:var(--sans);
  font-size:.83rem;
  letter-spacing:.06em;
  text-transform:uppercase;
  text-decoration:none;
  color:var(--ink-soft);
  padding-block:.3rem;
  position:relative;
  transition:color .2s ease;
}
.nav a::after{
  content:""; position:absolute; left:0; right:100%; bottom:0;
  height:1px; background:var(--accent); transition:right .3s ease;
}
.nav a:hover{ color:var(--ink); }
.nav a:hover::after{ right:0; }

.menu-btn{
  display:none; flex-direction:column; gap:5px;
  background:none; border:0; cursor:pointer; padding:.5rem;
}
.menu-btn span{
  display:block; width:22px; height:1.5px; background:var(--ink);
  transition:transform .3s ease, opacity .2s ease;
}
.menu-btn[aria-expanded="true"] span:nth-child(1){ transform:translateY(6.5px) rotate(45deg); }
.menu-btn[aria-expanded="true"] span:nth-child(2){ opacity:0; }
.menu-btn[aria-expanded="true"] span:nth-child(3){ transform:translateY(-6.5px) rotate(-45deg); }

@media (max-width:820px){
  .menu-btn{ display:flex; }
  .nav{
    position:absolute; top:100%; left:0; right:0;
    flex-direction:column; gap:0;
    background:var(--paper);
    border-block:1px solid var(--rule);
    padding:.5rem var(--gut) 1.25rem;
    display:none;
  }
  .nav.open{ display:flex; }
  .nav a{ padding-block:.85rem; border-bottom:1px solid var(--rule); font-size:.9rem; }
  .nav a:last-child{ border-bottom:0; }
}

/* ── Typography primitives ────────────────────────────── */
.eyebrow{
  font-family:var(--sans);
  font-size:.78rem; letter-spacing:.16em; text-transform:uppercase;
  color:var(--ink-faint);
  margin:0 0 1.5rem;
}

.display{
  font-family:var(--serif);
  font-weight:300;
  font-size:clamp(3rem, 11vw, 7.5rem);
  line-height:.94;
  letter-spacing:-0.025em;
  margin:0 0 2rem;
  font-variation-settings:"opsz" 144;
}

.lede{
  font-size:clamp(1.2rem, 1.05rem + .7vw, 1.6rem);
  line-height:1.55;
  font-weight:300;
  max-width:34ch;
  color:var(--ink);
  margin:0 0 2.75rem;
}
.lede em{ font-style:italic; color:var(--accent); }

.big{
  font-size:clamp(1.15rem, 1.05rem + .45vw, 1.4rem);
  line-height:1.6;
  font-weight:300;
  margin-top:0;
}

/* ── Hero ─────────────────────────────────────────────── */
.hero{
  padding-block:clamp(4.5rem, 12vh, 9rem) 0;
  border-bottom:1px solid var(--rule);
}

.hero-actions{ display:flex; flex-wrap:wrap; gap:.9rem; margin-bottom:clamp(3.5rem,9vh,6rem); }

.btn{
  font-family:var(--sans);
  font-size:.86rem; letter-spacing:.05em;
  text-decoration:none;
  padding:.9rem 1.7rem;
  border:1px solid var(--ink);
  transition:background .25s ease, color .25s ease, border-color .25s ease;
  display:inline-block;
}
.btn-primary{ background:var(--ink); color:var(--paper); }
.btn-primary:hover{ background:var(--accent); border-color:var(--accent); }
.btn-ghost{ background:transparent; color:var(--ink); }
.btn-ghost:hover{ background:var(--ink); color:var(--paper); }

.stats{
  list-style:none; margin:0; padding:0;
  display:grid;
  grid-template-columns:repeat(4, 1fr);
  border-top:1px solid var(--rule);
}
.stats li{
  padding:1.9rem 1.5rem 2.1rem 0;
  border-right:1px solid var(--rule);
}
.stats li:last-child{ border-right:0; }
.stats li:not(:first-child){ padding-left:1.5rem; }
.stats strong{
  display:block;
  font-family:var(--serif); font-weight:300;
  font-size:clamp(2rem, 4.5vw, 3.1rem);
  line-height:1; letter-spacing:-.02em;
  color:var(--accent);
  margin-bottom:.5rem;
}
.stats .plus{ font-size:.55em; vertical-align:.35em; }
.stats span{
  font-family:var(--sans); font-size:.76rem;
  letter-spacing:.08em; text-transform:uppercase;
  color:var(--ink-faint);
}
@media (max-width:760px){
  .stats{ grid-template-columns:repeat(2,1fr); }
  .stats li{ border-bottom:1px solid var(--rule); padding-block:1.4rem; }
  .stats li:nth-child(2n){ border-right:0; }
  .stats li:nth-last-child(-n+2){ border-bottom:0; }
}

/* ── Sections ─────────────────────────────────────────── */
.section{
  padding-block:clamp(4rem, 10vh, 7.5rem);
  border-bottom:1px solid var(--rule);
}
.section.alt{ background:var(--paper-alt); }

.grid-2{
  display:grid;
  grid-template-columns:minmax(0,15rem) minmax(0,1fr);
  gap:clamp(2rem, 6vw, 5rem);
  align-items:start;
}
@media (max-width:880px){
  .grid-2{ grid-template-columns:1fr; gap:2rem; }
}

.col-label{ position:sticky; top:100px; }
@media (max-width:880px){ .col-label{ position:static; } }

.col-label h2{
  font-family:var(--sans);
  font-size:.8rem; font-weight:600;
  letter-spacing:.16em; text-transform:uppercase;
  color:var(--ink-faint);
  margin:0;
}
.col-label .rule{
  display:block; width:2.5rem; height:1px;
  background:var(--accent); margin-bottom:1rem;
}

.col-body > p{ max-width:66ch; color:var(--ink-soft); }
.col-body > p.big{ color:var(--ink); }

.subhead{
  font-family:var(--sans);
  font-size:.78rem; font-weight:600;
  letter-spacing:.14em; text-transform:uppercase;
  color:var(--ink-faint);
  margin:3.5rem 0 1.5rem;
  padding-bottom:.7rem;
  border-bottom:1px solid var(--rule);
}

/* ── Facts list ───────────────────────────────────────── */
.facts{
  margin:2.75rem 0 0; padding:0;
  border-top:1px solid var(--rule);
}
.facts > div{
  display:grid; grid-template-columns:minmax(0,10rem) minmax(0,1fr);
  gap:1rem;
  padding:.95rem 0;
  border-bottom:1px solid var(--rule);
}
.facts dt{
  font-family:var(--sans); font-size:.76rem;
  letter-spacing:.09em; text-transform:uppercase;
  color:var(--ink-faint);
  padding-top:.2rem;
}
.facts dd{ margin:0; font-size:1rem; }
@media (max-width:520px){
  .facts > div{ grid-template-columns:1fr; gap:.2rem; }
}

/* ── Timeline ─────────────────────────────────────────── */
.timeline{ list-style:none; margin:0; padding:0; }
.timeline > li{
  padding:0 0 2.75rem 0;
  margin-bottom:2.75rem;
  border-bottom:1px solid var(--rule);
}
.timeline > li:last-child{ border-bottom:0; margin-bottom:0; padding-bottom:0; }

.timeline .years{
  font-family:var(--sans); font-size:.76rem;
  letter-spacing:.1em; text-transform:uppercase;
  color:var(--accent);
  margin:0 0 .6rem;
}
.timeline h3{
  font-family:var(--serif); font-weight:500;
  font-size:clamp(1.25rem, 1.1rem + .5vw, 1.55rem);
  line-height:1.25; letter-spacing:-.01em;
  margin:0 0 .35rem;
}
.timeline .org{
  font-family:var(--sans); font-size:.9rem;
  color:var(--ink-faint);
  margin:0 0 1rem;
}
.timeline > li > p:not(.years):not(.org){ color:var(--ink-soft); margin:0; max-width:64ch; }

.timeline.compact > li{ padding-bottom:2rem; margin-bottom:2rem; }

.bullets{ margin:0; padding-left:1.15rem; max-width:64ch; }
.bullets li{
  color:var(--ink-soft);
  margin-bottom:.6rem;
  padding-left:.35rem;
}
.bullets li::marker{ color:var(--accent-soft); }

.teaching{ padding-left:0; }

/* ── Cases / publications ─────────────────────────────── */
.cases{ display:grid; gap:0; }
.case{
  padding:2rem 0;
  border-bottom:1px solid var(--rule);
}
.case:first-child{ padding-top:0; }
.case:last-child{ border-bottom:0; }

.case-meta{
  font-family:var(--sans); font-size:.74rem;
  letter-spacing:.11em; text-transform:uppercase;
  color:var(--accent);
  margin:0 0 .6rem;
}
.case h3{
  font-family:var(--serif); font-weight:500;
  font-size:clamp(1.35rem, 1.15rem + .7vw, 1.8rem);
  line-height:1.2; letter-spacing:-.015em;
  margin:0 0 .4rem;
}
.case-sub{
  font-style:italic;
  color:var(--ink);
  margin:0 0 .9rem;
  max-width:56ch;
}
.case p:not(.case-meta):not(.case-sub){
  color:var(--ink-soft); margin:0; max-width:62ch;
}
.case-result{ margin-top:.8rem !important; }
.case-result strong{
  font-family:var(--sans); font-size:.8rem;
  letter-spacing:.08em; text-transform:uppercase;
  color:var(--ink-faint);
}

.link{
  display:inline-block; margin-top:1rem;
  font-family:var(--sans); font-size:.85rem;
  color:var(--accent); text-decoration:none;
  border-bottom:1px solid currentColor;
  padding-bottom:1px;
}
.link:hover{ color:var(--ink); }

/* ── Tag list ─────────────────────────────────────────── */
.tags{
  list-style:none; margin:0; padding:0;
  display:flex; flex-wrap:wrap; gap:.6rem;
}
.tags li{
  font-family:var(--sans); font-size:.82rem;
  padding:.45rem 1rem;
  border:1px solid var(--rule);
  border-radius:999px;
  color:var(--ink-soft);
  transition:border-color .2s ease, color .2s ease;
}
.tags li:hover{ border-color:var(--accent); color:var(--accent); }

/* ── Applications ─────────────────────────────────────── */
.apps{
  margin:0; padding:0;
  border-top:1px solid var(--rule);
}
.apps > div{
  display:grid;
  grid-template-columns:minmax(0,13rem) minmax(0,1fr);
  gap:1.5rem;
  padding:1.15rem 0;
  border-bottom:1px solid var(--rule);
}
.apps dt{
  font-family:var(--sans); font-size:.83rem; font-weight:600;
  letter-spacing:.02em;
  color:var(--ink);
  padding-top:.24rem;
}
.apps dd{
  margin:0;
  color:var(--ink-soft);
  max-width:56ch;
}
@media (max-width:620px){
  .apps > div{ grid-template-columns:1fr; gap:.3rem; }
  .apps dt{ color:var(--accent); }
}

/* ── Skills ───────────────────────────────────────────── */
.skills{
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(210px, 1fr));
  gap:2.5rem 2.5rem;
}
.skill-group h3{
  font-family:var(--sans); font-size:.76rem; font-weight:600;
  letter-spacing:.11em; text-transform:uppercase;
  color:var(--ink-faint);
  margin:0 0 .9rem; padding-bottom:.65rem;
  border-bottom:1px solid var(--rule);
}
.skill-group ul{ list-style:none; margin:0; padding:0; }
.skill-group li{
  font-size:.98rem;
  color:var(--ink-soft);
  padding:.28rem 0;
}
.skill-group li em{ font-style:italic; color:var(--ink-faint); font-size:.88em; }

/* ── Credentials ──────────────────────────────────────── */
.creds{ list-style:none; margin:0; padding:0; }

.cred{
  display:grid;
  grid-template-columns:112px minmax(0,1fr);
  gap:1.75rem;
  align-items:start;
  padding:1.9rem 0;
  border-bottom:1px solid var(--rule);
}
.cred:last-child{ border-bottom:0; padding-bottom:0; }

.cred-badge{
  display:block;
  line-height:0;
  border:1px solid var(--rule);
  transition:border-color .25s ease, transform .25s ease;
}
.cred-badge:hover{ border-color:var(--accent); transform:translateY(-2px); }
.cred-badge img{ width:100%; height:auto; }

.cred-body h4{
  font-family:var(--serif); font-weight:500;
  font-size:clamp(1.1rem, 1rem + .45vw, 1.35rem);
  line-height:1.25; letter-spacing:-.01em;
  margin:0 0 .3rem;
}
.cred-issuer{
  font-family:var(--sans); font-size:.82rem;
  letter-spacing:.03em;
  color:var(--accent);
  margin:0 0 .7rem;
}
.cred-body p:not(.cred-issuer){
  color:var(--ink-soft); margin:0; max-width:58ch;
}
.cred-body .link{ margin-top:.9rem; }


@media (max-width:600px){
  .cred{ grid-template-columns:88px minmax(0,1fr); gap:1.15rem; }
}

/* ── Pull quote ───────────────────────────────────────── */
.pull{
  padding-block:clamp(4.5rem, 11vh, 8rem);
  background:var(--ink);
  color:var(--paper);
  border-bottom:1px solid var(--rule);
}
.pull blockquote{ margin:0; max-width:min(100%, 44ch); }
.pull p{
  font-family:var(--serif); font-weight:300;
  font-size:clamp(1.3rem, 1.05rem + 1.15vw, 2.05rem);
  line-height:1.38; letter-spacing:-.015em;
  margin:0 0 2rem;
}
.pull p em{ font-style:italic; }
.pull cite{
  font-family:var(--sans); font-style:normal;
  font-size:.8rem; letter-spacing:.11em; text-transform:uppercase;
  color:color-mix(in srgb, var(--paper) 55%, transparent);
}
@media (prefers-color-scheme: dark){
  .pull{ background:var(--paper-alt); color:var(--ink); }
  .pull cite{ color:var(--ink-faint); }
}

/* ── Contact ──────────────────────────────────────────── */
.contact-list{
  list-style:none; margin:2.5rem 0 0; padding:0;
  border-top:1px solid var(--rule);
}
.contact-list li{
  display:grid; grid-template-columns:minmax(0,8rem) minmax(0,1fr);
  gap:1rem; align-items:baseline;
  padding:1.05rem 0;
  border-bottom:1px solid var(--rule);
}
.contact-list span:first-child{
  font-family:var(--sans); font-size:.76rem;
  letter-spacing:.09em; text-transform:uppercase;
  color:var(--ink-faint);
}
.contact-list a{
  text-decoration:none;
  border-bottom:1px solid var(--rule);
  padding-bottom:2px;
  transition:color .2s ease, border-color .2s ease;
  word-break:break-word;
}
.contact-list a:hover{ color:var(--accent); border-color:var(--accent); }
@media (max-width:520px){
  .contact-list li{ grid-template-columns:1fr; gap:.25rem; }
}

/* ── Footer ───────────────────────────────────────────── */
.site-footer{ padding-block:2.5rem; }
.footer-inner{
  display:flex; justify-content:space-between; align-items:center;
  flex-wrap:wrap; gap:1rem;
  font-family:var(--sans); font-size:.82rem;
  color:var(--ink-faint);
}
.footer-inner p{ margin:0; }
.footer-inner a{ text-decoration:none; }
.footer-inner a:hover{ color:var(--accent); }

/* ── Reveal on scroll ─────────────────────────────────── */
/* Visible by default: if JS never runs, nothing is hidden.
   The .js-reveal class is added by the script, so only then do we
   hide the not-yet-revealed items. */
.reveal{ opacity:1; transform:none; }

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

@media (prefers-reduced-motion:reduce){
  html.js-reveal .reveal{ opacity:1; transform:none; transition:none; }
}

/* ── Print ────────────────────────────────────────────── */
@media print{
  .site-header,.menu-btn,.hero-actions,.site-footer{ display:none; }
  body{ background:#fff; color:#000; font-size:11pt; }
  .reveal{ opacity:1; transform:none; }
  .section{ break-inside:avoid; padding-block:1.5rem; }
  .pull{ background:#fff; color:#000; }
}
