:root{
  --asphalt:#121317;
  --asphalt-2:#1a1c22;
  --panel-border:#2a2d35;
  --headlight:#ffb020;
  --headlight-soft:#ffd873;
  --taillight:#ff5a4e;
  --chalk:#f3f1ea;
  --fog:#9a9da8;
  --green:#4ade80;

  --display:'Space Grotesk', sans-serif;
  --mono:'IBM Plex Mono', monospace;
  --body:'Inter', sans-serif;

  --maxw:1140px;
  --radius:14px;
}

*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *{animation-duration:0.001ms !important; animation-iteration-count:1 !important; transition-duration:0.001ms !important;}
}

body{
  margin:0;
  background:var(--asphalt);
  color:var(--chalk);
  font-family:var(--body);
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
}

::selection{background:var(--headlight); color:var(--asphalt);}

a{color:inherit;}
img,svg{display:block; max-width:100%;}

.wrap{max-width:var(--maxw); margin:0 auto; padding:0 24px;}

a:focus-visible, button:focus-visible{
  outline:2px solid var(--headlight);
  outline-offset:3px;
  border-radius:4px;
}

/* ---------- scroll progress ---------- */
.progress{
  position:fixed; top:0; left:0; height:3px; width:0%;
  background:linear-gradient(90deg, var(--taillight), var(--headlight), var(--headlight-soft));
  z-index:1000;
  transition:width 0.1s linear;
}

/* ---------- nav ---------- */
header.nav{
  position:sticky; top:0; z-index:900;
  background:rgba(18,19,23,0.82);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--panel-border);
}
.nav-inner{
  display:flex; align-items:center; justify-content:space-between;
  padding:16px 24px;
}
.brand{display:flex; align-items:center; gap:10px; text-decoration:none;}
.brand-mark{width:34px; height:34px;}
.brand-name{font-family:var(--display); font-weight:600; font-size:15px; letter-spacing:0.02em;}
.brand-name span{color:var(--fog); font-weight:500;}

nav.links{display:flex; align-items:center; gap:28px;}
nav.links a{
  font-family:var(--mono); font-size:13px; text-decoration:none; color:var(--fog);
  letter-spacing:0.03em;
  transition:color 0.2s ease;
  position:relative;
}
nav.links a:hover, nav.links a.active{color:var(--chalk);}
nav.links a::after{
  content:''; position:absolute; left:0; bottom:-4px; width:0%; height:1px;
  background:var(--headlight); transition:width 0.25s ease;
}
nav.links a:hover::after, nav.links a.active::after{width:100%;}

.status-pill{
  display:flex; align-items:center; gap:7px;
  font-family:var(--mono); font-size:12px; color:var(--fog);
  padding:6px 12px; border:1px solid var(--panel-border); border-radius:999px;
}
.status-dot{
  width:7px; height:7px; border-radius:50%; background:var(--green);
  box-shadow:0 0 0 0 rgba(74,222,128,0.6);
  animation:pulse 2.2s infinite;
}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 rgba(74,222,128,0.55);}
  70%{box-shadow:0 0 0 8px rgba(74,222,128,0);}
  100%{box-shadow:0 0 0 0 rgba(74,222,128,0);}
}

.menu-toggle{display:none;}

@media (max-width:820px){
  nav.links{
    position:fixed; top:65px; left:0; right:0;
    background:var(--asphalt-2); border-bottom:1px solid var(--panel-border);
    flex-direction:column; align-items:flex-start; gap:0;
    padding:8px 24px 18px;
    transform:translateY(-140%); opacity:0;
    transition:transform 0.3s ease, opacity 0.3s ease;
    pointer-events:none;
  }
  nav.links.open{transform:translateY(0); opacity:1; pointer-events:auto;}
  nav.links a{padding:12px 0; width:100%; border-bottom:1px dashed var(--panel-border);}
  .status-pill{display:none;}
  .menu-toggle{
    display:flex; flex-direction:column; gap:4px; background:none; border:none; cursor:pointer;
    padding:8px;
  }
  .menu-toggle span{width:20px; height:2px; background:var(--chalk); border-radius:2px;}
}

/* ---------- hero ---------- */
.hero{
  padding:88px 0 64px;
  position:relative;
  overflow:hidden;
}
.hero::before{
  content:'';
  position:absolute; inset:0;
  background:
    radial-gradient(600px 300px at 85% 10%, rgba(255,176,32,0.10), transparent 70%),
    radial-gradient(500px 260px at 10% 90%, rgba(255,90,78,0.06), transparent 70%);
  pointer-events:none;
}
.hero-grid{
  display:grid; grid-template-columns:1.15fr 0.85fr; gap:56px; align-items:center;
  position:relative; z-index:1;
}
.eyebrow{
  font-family:var(--mono); font-size:12.5px; letter-spacing:0.08em; color:var(--headlight);
  display:flex; align-items:center; gap:10px; margin-bottom:22px; text-transform:uppercase;
}
.eyebrow::before{content:''; width:22px; height:1px; background:var(--headlight);}

h1{
  font-family:var(--display); font-weight:700;
  font-size:clamp(34px, 5vw, 54px);
  line-height:1.08; letter-spacing:-0.01em;
  margin:0 0 22px;
}
h1 em{
  font-style:normal; color:var(--headlight);
}
.hero p.sub{
  font-size:17px; color:var(--fog); max-width:46ch; margin:0 0 34px;
}
.hero-ctas{display:flex; gap:14px; flex-wrap:wrap;}
.btn{
  font-family:var(--mono); font-size:13.5px; letter-spacing:0.02em;
  padding:13px 22px; border-radius:10px; text-decoration:none;
  display:inline-flex; align-items:center; gap:8px;
  transition:transform 0.15s ease, background 0.2s ease, border-color 0.2s ease;
  border:1px solid transparent;
  cursor:pointer;
}
.btn-primary{background:var(--headlight); color:var(--asphalt); font-weight:600;}
.btn-primary:hover{transform:translateY(-2px); background:var(--headlight-soft);}
.btn-ghost{border-color:var(--panel-border); color:var(--chalk);}
.btn-ghost:hover{border-color:var(--headlight); transform:translateY(-2px);}

/* dashboard cluster */
.cluster{
  background:var(--asphalt-2);
  border:1px solid var(--panel-border);
  border-radius:20px;
  padding:28px 26px 22px;
}
.gauge-wrap{display:flex; justify-content:center; margin-bottom:6px;}
.gauge-num{
  text-align:center; font-family:var(--mono); font-size:12px; color:var(--fog);
  letter-spacing:0.08em; margin-bottom:18px; text-transform:uppercase;
}
.needle{
  transform-origin:100px 100px;
  transform:rotate(-90deg);
  transition:transform 1.4s cubic-bezier(.2,.9,.25,1);
}
.gauge-wrap.animated .needle{transform:rotate(48deg);}

.readouts{
  display:grid; grid-template-columns:1fr 1fr; gap:1px;
  background:var(--panel-border); border-radius:12px; overflow:hidden; margin-top:18px;
  border:1px solid var(--panel-border);
}
.readout{background:var(--asphalt-2); padding:14px 16px;}
.readout .label{font-family:var(--mono); font-size:10.5px; color:var(--fog); letter-spacing:0.06em; text-transform:uppercase; margin-bottom:6px;}
.readout .value{font-family:var(--mono); font-size:17px; font-weight:600; color:var(--chalk);}
.readout.wide{grid-column:1 / -1; display:flex; align-items:center; justify-content:space-between;}
.readout.wide .value{display:flex; align-items:center; gap:8px; font-size:14px; color:var(--green);}

@media (max-width:820px){
  .hero-grid{grid-template-columns:1fr; gap:40px;}
  .hero{padding:44px 0 48px;}
}

/* ---------- tech strip ---------- */
.strip{
  border-top:1px solid var(--panel-border);
  border-bottom:1px solid var(--panel-border);
  padding:22px 0;
  overflow:hidden;
}
.strip-track{
  display:flex; gap:14px; flex-wrap:wrap; justify-content:center;
}
.chip{
  font-family:var(--mono); font-size:12.5px; color:var(--fog);
  border:1px solid var(--panel-border); border-radius:999px; padding:8px 16px;
  white-space:nowrap;
}

/* ---------- section shell ---------- */
section{padding:96px 0;}
.section-head{margin-bottom:48px; max-width:60ch;}
.kicker{
  font-family:var(--mono); font-size:12px; color:var(--headlight); letter-spacing:0.08em;
  text-transform:uppercase; margin-bottom:12px; display:block;
}
h2{
  font-family:var(--display); font-weight:600; font-size:clamp(26px,3.4vw,36px);
  margin:0 0 14px; letter-spacing:-0.01em;
}
.section-head p{color:var(--fog); font-size:15.5px; margin:0;}

.reveal{opacity:0; transform:translateY(18px); transition:opacity 0.6s ease, transform 0.6s ease;}
.reveal.in{opacity:1; transform:translateY(0);}

/* ---------- projects / post grid ---------- */
.grid{display:grid; grid-template-columns:repeat(3, 1fr); gap:20px;}
@media (max-width:900px){.grid{grid-template-columns:repeat(2,1fr);}}
@media (max-width:620px){.grid{grid-template-columns:1fr;}}

.card{
  background:var(--asphalt-2); border:1px solid var(--panel-border); border-radius:var(--radius);
  padding:24px; display:flex; flex-direction:column; height:100%;
  transition:border-color 0.2s ease, transform 0.2s ease;
}
.card:hover{border-color:#3a3d47; transform:translateY(-3px);}
.card-top{display:flex; align-items:flex-start; justify-content:space-between; margin-bottom:14px;}
.card-icon{
  width:38px; height:38px; border-radius:9px; background:var(--asphalt);
  border:1px solid var(--panel-border);
  display:flex; align-items:center; justify-content:center;
  font-family:var(--display); font-weight:700; color:var(--headlight); font-size:15px;
}
.badge{
  font-family:var(--mono); font-size:10px; letter-spacing:0.05em; text-transform:uppercase;
  padding:4px 9px; border-radius:999px; border:1px solid var(--panel-border); color:var(--fog);
}
.badge.live{color:var(--green); border-color:rgba(74,222,128,0.35);}
.badge.dev{color:var(--headlight); border-color:rgba(255,176,32,0.35);}
.card h3{font-family:var(--display); font-size:17px; margin:0 0 8px; font-weight:600;}
.card p{font-size:13.8px; color:var(--fog); margin:0 0 16px; flex-grow:1;}
.stack-row{display:flex; flex-wrap:wrap; gap:6px; margin-bottom:16px;}
.tag{font-family:var(--mono); font-size:10.5px; color:var(--fog); background:var(--asphalt); border:1px solid var(--panel-border); padding:3px 8px; border-radius:6px;}
.card-link{
  font-family:var(--mono); font-size:12.5px; color:var(--chalk); text-decoration:none;
  display:inline-flex; align-items:center; gap:6px; margin-top:auto;
  border-top:1px dashed var(--panel-border); padding-top:14px;
}
.card-link:hover{color:var(--headlight);}
.card-link.disabled{color:var(--fog); pointer-events:none;}
.card-links{
  display:flex; gap:18px; margin-top:auto;
  border-top:1px dashed var(--panel-border); padding-top:14px;
}
.card-links .card-link{border:none; padding:0; margin:0;}

/* ---------- routes ---------- */
.road{position:relative; padding-left:44px;}
.road::before{
  content:''; position:absolute; left:14px; top:6px; bottom:6px; width:2px;
  background-image:linear-gradient(var(--headlight) 60%, transparent 40%);
  background-size:2px 18px; background-repeat:repeat-y;
  opacity:0.55;
}
.stop{position:relative; padding-bottom:40px;}
.stop:last-child{padding-bottom:0;}
.stop::before{
  content:''; position:absolute; left:-44px; top:2px; width:14px; height:14px; border-radius:50%;
  background:var(--asphalt); border:2px solid var(--headlight);
}
.stop h3{font-family:var(--display); font-size:17px; margin:0 0 6px; font-weight:600;}
.stop .role{font-family:var(--mono); font-size:12px; color:var(--headlight); margin-bottom:8px; display:block;}
.stop p{color:var(--fog); font-size:14.5px; margin:0; max-width:56ch;}

/* ---------- skills ---------- */
.skills-grid{display:grid; grid-template-columns:1fr 1fr; gap:28px 40px;}
@media (max-width:700px){.skills-grid{grid-template-columns:1fr;}}
.skill-row{}
.skill-top{display:flex; justify-content:space-between; align-items:baseline; margin-bottom:9px;}
.skill-top .name{font-family:var(--display); font-size:15px; font-weight:600;}
.skill-top .anchor{font-family:var(--mono); font-size:11px; color:var(--fog); letter-spacing:0.04em; text-transform:uppercase;}
.gauge-track{height:8px; background:var(--asphalt-2); border:1px solid var(--panel-border); border-radius:999px; overflow:hidden;}
.gauge-fill{
  height:100%; border-radius:999px;
  background:linear-gradient(90deg, var(--taillight), var(--headlight));
  width:0%; transition:width 1.2s cubic-bezier(.2,.9,.25,1);
}
.skill-row.in .gauge-fill{width:var(--fill);}

/* ---------- contact / pit stop ---------- */
.pitstop{
  background:var(--asphalt-2); border:1px solid var(--panel-border); border-radius:20px;
  padding:52px 44px; text-align:center; position:relative; overflow:hidden;
}
.pitstop::after{
  content:''; position:absolute; left:0; right:0; bottom:0; height:4px;
  background-image:linear-gradient(90deg, var(--headlight) 55%, transparent 45%);
  background-size:26px 4px; opacity:0.5;
}
.pitstop h2{margin-bottom:14px;}
.pitstop p{color:var(--fog); max-width:50ch; margin:0 auto 30px; font-size:15.5px;}
.contact-links{display:flex; gap:14px; justify-content:center; flex-wrap:wrap;}

footer{
  padding:36px 0 50px; text-align:center;
}
footer p{
  font-family:var(--mono); font-size:12px; color:var(--fog); margin:0;
}
footer p.note{margin-top:8px; color:#5b5e68;}

/* ================= BLOG-SPECIFIC STYLES ================= */

.page-head{
  padding:64px 0 40px;
  border-bottom:1px solid var(--panel-border);
}
.page-head .eyebrow{margin-bottom:18px;}

/* blog index list */
.post-list{display:flex; flex-direction:column; gap:1px; background:var(--panel-border); border:1px solid var(--panel-border); border-radius:var(--radius); overflow:hidden;}
.post-row{
  background:var(--asphalt-2); padding:26px 28px; text-decoration:none;
  display:flex; flex-direction:column; gap:8px;
  transition:background 0.2s ease;
}
.post-row:hover{background:#20232b;}
.post-row .post-meta{
  font-family:var(--mono); font-size:11.5px; color:var(--headlight);
  letter-spacing:0.05em; text-transform:uppercase; display:flex; gap:10px; align-items:center;
}
.post-row .post-meta .dot{width:3px; height:3px; border-radius:50%; background:var(--fog);}
.post-row h3{font-family:var(--display); font-size:19px; margin:0; font-weight:600; letter-spacing:-0.01em;}
.post-row p{color:var(--fog); font-size:14px; margin:0; max-width:70ch;}
.post-row .read-more{
  font-family:var(--mono); font-size:12px; color:var(--chalk); display:inline-flex; align-items:center; gap:6px; margin-top:4px;
}
.post-row:hover .read-more{color:var(--headlight);}

/* article */
.article{max-width:74ch; margin:0 auto;}
.article-head{padding:56px 0 8px;}
.article-head .post-meta{
  font-family:var(--mono); font-size:12px; color:var(--headlight); letter-spacing:0.06em; text-transform:uppercase;
  display:flex; gap:10px; align-items:center; margin-bottom:18px;
}
.article-head .post-meta .dot{width:3px; height:3px; border-radius:50%; background:var(--fog);}
.article-head h1{font-size:clamp(28px,4.4vw,42px); margin-bottom:16px;}
.article-head .dek{color:var(--fog); font-size:17px; max-width:60ch; margin:0 0 8px;}
.article-tags{display:flex; flex-wrap:wrap; gap:8px; margin-top:22px;}

.prose{padding:24px 0 8px; font-size:16px;}
.prose h2{font-size:24px; margin:44px 0 16px;}
.prose h3{font-family:var(--display); font-size:18px; font-weight:600; margin:32px 0 12px; letter-spacing:-0.005em;}
.prose p{margin:0 0 18px; color:#d9d7ce;}
.prose ul, .prose ol{margin:0 0 18px; padding-left:22px; color:#d9d7ce;}
.prose li{margin-bottom:8px;}
.prose strong{color:var(--chalk); font-weight:600;}
.prose a{color:var(--headlight); text-decoration:underline; text-underline-offset:2px;}
.prose blockquote{
  margin:28px 0; padding:4px 0 4px 20px; border-left:2px solid var(--headlight);
  color:var(--fog); font-style:italic;
}
.prose code{
  font-family:var(--mono); font-size:0.88em; background:var(--asphalt-2);
  border:1px solid var(--panel-border); padding:2px 6px; border-radius:5px; color:var(--headlight-soft);
}
.prose pre{
  background:var(--asphalt-2); border:1px solid var(--panel-border); border-radius:10px;
  padding:18px 20px; overflow-x:auto; margin:0 0 26px;
}
.prose pre code{background:none; border:none; padding:0; color:#d9d7ce; font-size:13px; line-height:1.6;}
.prose hr{border:none; border-top:1px dashed var(--panel-border); margin:40px 0;}

.callout{
  background:var(--asphalt-2); border:1px solid var(--panel-border); border-left:2px solid var(--headlight);
  border-radius:10px; padding:18px 20px; margin:0 0 26px;
}
.callout p{margin:0; color:var(--fog); font-size:14.5px;}
.callout p:not(:last-child){margin-bottom:8px;}

.article-footer{
  border-top:1px solid var(--panel-border); margin-top:48px; padding-top:32px;
  display:flex; flex-wrap:wrap; gap:16px; align-items:center; justify-content:space-between;
}
.article-footer .author{display:flex; gap:12px; align-items:center;}
.author-mark{
  width:40px; height:40px; border-radius:50%; background:var(--asphalt);
  border:1px solid var(--panel-border); display:flex; align-items:center; justify-content:center;
  font-family:var(--display); font-weight:700; color:var(--headlight); font-size:14px; flex-shrink:0;
}
.author-info .name{font-family:var(--display); font-weight:600; font-size:14px;}
.author-info .role{font-family:var(--mono); font-size:11.5px; color:var(--fog);}

.related{margin-top:16px;}
