:root{
  --bg:#0B1220;
  --surface:#101A2D;
  --surface-2:#15213A;
  --line:#22314D;
  --text:#E7EEF9;
  --muted:#8CA0BC;
  --faint:#5C6F8C;
  --method:#6CA8FF;   /* GET / HTTP methods */
  --ok:#4ADE80;       /* 200 OK / success */
  --string:#FFB454;   /* strings & highlights */
  --key:#9DB8FF;      /* JSON keys */
  --post:#C792EA;     /* POST */
  --radius:10px;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --sans:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:var(--bg);color:var(--text);font-family:var(--sans);
  font-size:16px;line-height:1.65;-webkit-font-smoothing:antialiased;
}
::selection{background:rgba(255,180,84,.28)}
a{color:inherit}
.mono{font-family:var(--mono)}

/* ---------- scroll progress ---------- */
#progress{position:fixed;top:0;left:0;height:2px;width:100%;background:var(--string);
  transform-origin:0 50%;transform:scaleX(0);z-index:60}

/* ---------- layout: API-docs shell ---------- */
.shell{display:grid;grid-template-columns:280px 1fr;min-height:100vh}
.sidebar{
  position:sticky;top:0;height:100vh;padding:36px 26px;
  border-right:1px solid var(--line);background:rgba(11,18,32,.9);
  display:flex;flex-direction:column;gap:28px;
}
.brand .name{font-weight:700;font-size:1.05rem;letter-spacing:.01em}
.brand .role{font-family:var(--mono);font-size:.74rem;color:var(--muted);margin-top:4px}
.brand .base-url{font-family:var(--mono);font-size:.7rem;color:var(--faint);margin-top:12px;
  padding:6px 9px;border:1px solid var(--line);border-radius:6px;background:var(--surface);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
nav{display:flex;flex-direction:column;gap:2px}
nav .group-label{font-family:var(--mono);font-size:.66rem;text-transform:uppercase;
  letter-spacing:.14em;color:var(--faint);margin:10px 0 6px}
nav a{
  display:flex;align-items:center;gap:9px;text-decoration:none;
  font-family:var(--mono);font-size:.8rem;color:var(--muted);
  padding:7px 9px;border-radius:7px;border:1px solid transparent;
  transition:color .15s,background .15s,border-color .15s;
}
nav a .m{font-size:.62rem;font-weight:600;letter-spacing:.05em;width:34px;color:var(--method)}
nav a .m.post{color:var(--post)}
nav a:hover{color:var(--text);background:var(--surface)}
nav a.active{color:var(--text);background:var(--surface);border-color:var(--line)}
.side-foot{margin-top:auto;font-family:var(--mono);font-size:.7rem;color:var(--faint);
  display:flex;flex-direction:column;gap:6px}
.status-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--ok);
  margin-right:7px;box-shadow:0 0 0 0 rgba(74,222,128,.5);animation:pulse 2.4s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(74,222,128,.45)}70%{box-shadow:0 0 0 7px rgba(74,222,128,0)}100%{box-shadow:0 0 0 0 rgba(74,222,128,0)}}

main{padding:0 clamp(24px,5vw,76px) 90px;max-width:1060px}
section{padding-top:84px}

/* ---------- endpoint headers ---------- */
.endpoint{
  display:flex;flex-wrap:wrap;align-items:baseline;gap:12px;
  font-family:var(--mono);margin-bottom:8px;
}
.endpoint .verb{font-size:.78rem;font-weight:600;color:var(--method);
  border:1px solid rgba(108,168,255,.35);background:rgba(108,168,255,.08);
  padding:2px 8px;border-radius:5px;letter-spacing:.06em}
.endpoint .verb.post{color:var(--post);border-color:rgba(199,146,234,.35);background:rgba(199,146,234,.08)}
.endpoint .path{font-size:clamp(1.35rem,2.6vw,1.9rem);font-weight:600;color:var(--text)}
.endpoint .code200{font-size:.74rem;color:var(--ok)}
.endpoint .ms{font-size:.74rem;color:var(--faint)}
.section-sub{color:var(--muted);max-width:62ch;margin-bottom:34px}

/* ---------- hero ---------- */
.hero{padding-top:70px}
.hero .eyebrow{font-family:var(--mono);font-size:.72rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--string);margin-bottom:18px}
.hero h1{font-size:clamp(2rem,4.4vw,3.1rem);line-height:1.12;font-weight:700;
  letter-spacing:-.015em;max-width:19ch}
.hero h1 .dim{color:var(--muted);font-weight:500}
.hero p.lede{margin-top:18px;color:var(--muted);max-width:58ch}
.hero .cta-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:26px}
.btn{font-family:var(--mono);font-size:.8rem;text-decoration:none;padding:10px 16px;
  border-radius:8px;border:1px solid var(--line);color:var(--text);background:var(--surface);
  transition:transform .15s,border-color .15s,background .15s;display:inline-flex;align-items:center;gap:8px}
.btn:hover{transform:translateY(-1px);border-color:var(--string)}
.btn.primary{background:var(--string);border-color:var(--string);color:#20160A;font-weight:600}
.btn.primary:hover{background:#FFC26E}

/* ---------- terminal ---------- */
.terminal{
  margin-top:46px;background:#0A101D;border:1px solid var(--line);border-radius:var(--radius);
  overflow:hidden;box-shadow:0 24px 60px -30px rgba(0,0,0,.7);
}
.term-bar{display:flex;align-items:center;gap:8px;padding:11px 14px;
  border-bottom:1px solid var(--line);background:var(--surface)}
.term-bar .dot{width:11px;height:11px;border-radius:50%}
.term-bar .dot:nth-child(1){background:#F87171}
.term-bar .dot:nth-child(2){background:#FBBF24}
.term-bar .dot:nth-child(3){background:#34D399}
.term-bar .title{margin-left:10px;font-family:var(--mono);font-size:.7rem;color:var(--faint)}
.term-body{padding:20px 22px;font-family:var(--mono);font-size:.8rem;line-height:1.75;
  min-height:335px;white-space:pre-wrap;word-break:break-word}
.term-body .prompt{color:var(--ok)}
.term-body .cmd{color:var(--text)}
.term-body .k{color:var(--key)}
.term-body .s{color:var(--string)}
.term-body .p{color:var(--faint)}
.term-body .ok{color:var(--ok)}
.term-body .err{color:#F87171}
.term-body{cursor:text}
#term-input{position:absolute;opacity:0;width:1px;height:1px;border:0;padding:0;
  pointer-events:none}
.caret{display:inline-block;width:8px;height:15px;background:var(--string);
  vertical-align:-2px;animation:blink 1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}

/* ---------- experience: deploy log ---------- */
.deploys{position:relative;margin-left:6px;padding-left:30px;border-left:1px solid var(--line)}
.deploy{position:relative;padding:0 0 44px}
.deploy:last-child{padding-bottom:6px}
.deploy::before{
  content:"";position:absolute;left:-35.5px;top:7px;width:10px;height:10px;border-radius:50%;
  background:var(--bg);border:2px solid var(--faint);
}
.deploy.current::before{border-color:var(--ok);background:var(--ok);
  box-shadow:0 0 0 4px rgba(74,222,128,.14)}
.deploy .tagline{display:flex;flex-wrap:wrap;gap:10px;align-items:baseline;font-family:var(--mono)}
.deploy .vtag{font-size:.7rem;color:var(--string);border:1px solid rgba(255,180,84,.3);
  background:rgba(255,180,84,.07);padding:1px 8px;border-radius:20px}
.deploy .dates{font-size:.72rem;color:var(--faint)}
.deploy .env{font-size:.7rem;color:var(--ok)}
.deploy h3{margin-top:8px;font-size:1.12rem;font-weight:600}
.deploy .org{color:var(--muted);font-size:.9rem}
.deploy ul{margin:12px 0 0;padding-left:18px;color:var(--muted);font-size:.92rem}
.deploy ul li{margin-bottom:7px}
.deploy ul li::marker{color:var(--string)}

/* ---------- projects ---------- */
.proj-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.proj{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:24px;display:flex;flex-direction:column;gap:12px;
  transition:transform .18s,border-color .18s;
}
.proj:hover{transform:translateY(-3px);border-color:#33507D}
.proj.featured{grid-column:1/-1}
.proj .proj-top{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}
.proj h3{font-size:1.15rem;font-weight:600}
.proj .where{font-family:var(--mono);font-size:.7rem;color:var(--faint)}
.proj p{color:var(--muted);font-size:.93rem}
.chips{display:flex;flex-wrap:wrap;gap:7px}
.chip{font-family:var(--mono);font-size:.68rem;color:var(--muted);
  border:1px solid var(--line);border-radius:20px;padding:3px 10px;background:var(--bg)}
.chip.hot{color:var(--string);border-color:rgba(255,180,84,.35)}
.proj details{margin-top:2px}
.proj summary{cursor:pointer;font-family:var(--mono);font-size:.72rem;color:var(--method);
  list-style:none;display:inline-flex;align-items:center;gap:7px;user-select:none}
.proj summary::before{content:"▸";transition:transform .15s;display:inline-block}
.proj details[open] summary::before{transform:rotate(90deg)}
.proj summary:hover{color:var(--text)}
.resp{
  margin-top:12px;background:#0A101D;border:1px solid var(--line);border-radius:8px;
  padding:16px 18px;font-family:var(--mono);font-size:.74rem;line-height:1.8;
  white-space:pre-wrap;word-break:break-word;color:var(--muted);
}
.resp .k{color:var(--key)}.resp .s{color:var(--string)}.resp .p{color:var(--faint)}.resp .ok{color:var(--ok)}

/* ---------- skills ---------- */
.skill-groups{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.skill-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:22px}
.skill-card.primary{grid-column:1/-1;border-color:rgba(255,180,84,.25)}
.skill-card h3{font-family:var(--mono);font-size:.74rem;letter-spacing:.12em;text-transform:uppercase;
  color:var(--string);margin-bottom:14px;display:flex;align-items:baseline;gap:10px}
.skill-card h3 .note{color:var(--faint);letter-spacing:0;text-transform:none;font-size:.68rem}
.skill-card .chips .chip{font-size:.72rem;padding:5px 12px}

/* ---------- education ---------- */
.edu-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.edu-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:22px}
.edu-card .when{font-family:var(--mono);font-size:.7rem;color:var(--faint)}
.edu-card h3{font-size:1.02rem;margin-top:6px}
.edu-card p{color:var(--muted);font-size:.9rem;margin-top:6px}

/* ---------- contact ---------- */
.contact-card{
  background:linear-gradient(180deg,var(--surface),var(--surface-2));
  border:1px solid var(--line);border-radius:var(--radius);padding:clamp(26px,4vw,44px);
}
.contact-card h3{font-size:clamp(1.3rem,2.4vw,1.7rem);font-weight:700;max-width:24ch}
.contact-card p{color:var(--muted);margin-top:10px;max-width:52ch}
/* contact form — styled like a request body */
#contact-form{margin-top:28px;padding-top:26px;border-top:1px dashed var(--line)}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.field{display:flex;flex-direction:column;gap:7px}
.field.wide{grid-column:1/-1}
.field label{font-family:var(--mono);font-size:.68rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--faint)}
.field label .req{color:var(--string)}
.field label .opt{color:var(--faint);text-transform:none;letter-spacing:0;opacity:.7}
.field label .count{float:right;font-size:.66rem}
.field input,.field select,.field textarea{
  font-family:var(--mono);font-size:.84rem;color:var(--text);
  background:var(--bg);border:1px solid var(--line);border-radius:7px;
  padding:11px 13px;outline:none;transition:border-color .15s;width:100%}
.field textarea{resize:vertical;min-height:110px;line-height:1.6;font-family:var(--sans);font-size:.9rem}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--string)}
.field select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--faint) 50%),
  linear-gradient(135deg,var(--faint) 50%,transparent 50%);
  background-position:calc(100% - 18px) 50%,calc(100% - 13px) 50%;
  background-size:5px 5px;background-repeat:no-repeat;cursor:pointer}
.field.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.form-foot{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin-top:18px}
.form-foot .btn{cursor:pointer}
.form-status{font-size:.74rem;color:var(--faint)}
.form-status.ok{color:var(--ok)}
.form-status.err{color:#F87171}
@media (max-width:640px){.form-grid{grid-template-columns:1fr}}

.contact-row{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}
.contact-links{display:flex;flex-wrap:wrap;gap:18px;margin-top:26px;
  font-family:var(--mono);font-size:.76rem}
.contact-links a{color:var(--muted);text-decoration:none;border-bottom:1px solid var(--line);
  padding-bottom:2px;transition:color .15s,border-color .15s}
.contact-links a:hover{color:var(--string);border-color:var(--string)}
#copy-email.copied{border-color:var(--ok);color:var(--ok)}

footer{margin-top:80px;padding-top:26px;border-top:1px solid var(--line);
  font-family:var(--mono);font-size:.7rem;color:var(--faint);
  display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}

/* ---------- cross-document view transitions (page switching) ---------- */
@view-transition{navigation:auto}
main{view-transition-name:page-main}
.sidebar{view-transition-name:page-sidebar}
.rail{view-transition-name:page-rail}
::view-transition-old(page-main){animation:vt-out .22s ease both}
::view-transition-new(page-main){animation:vt-in .42s cubic-bezier(.22,1,.36,1) both}
@keyframes vt-out{to{opacity:0;transform:translateY(-14px)}}
@keyframes vt-in{from{opacity:0;transform:translateY(20px)}}
@media (prefers-reduced-motion:reduce){
  ::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}
}

/* ---------- sidebar hire link ---------- */
.side-hire{
  display:flex;align-items:center;gap:9px;text-decoration:none;
  font-family:var(--mono);font-size:.74rem;color:var(--ok);
  border:1px solid rgba(74,222,128,.3);background:rgba(74,222,128,.06);
  padding:9px 12px;border-radius:8px;transition:background .15s,border-color .15s;
}
.side-hire:hover{background:rgba(74,222,128,.12);border-color:rgba(74,222,128,.55)}

/* ---------- right rail: ops monitor ---------- */
.rail{display:none}
@media (min-width:1440px){
  .shell{grid-template-columns:280px minmax(0,1fr) 320px}
  .rail{
    display:flex;flex-direction:column;gap:14px;
    position:sticky;top:0;height:100vh;overflow-y:auto;
    padding:36px 26px 36px 0;
  }
}
.rail-card{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px 18px;font-family:var(--mono);
}
.rail-label{font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--faint);margin-bottom:10px}
.rail-card.hire{border-color:rgba(74,222,128,.35);
  background:linear-gradient(180deg,rgba(74,222,128,.07),var(--surface))}
.rail-card.hire .headline{display:flex;align-items:center;gap:9px;font-size:.78rem;
  font-weight:600;color:var(--ok);letter-spacing:.08em}
.rail-card.hire p{font-family:var(--sans);font-size:.8rem;color:var(--muted);margin:10px 0 14px}
.rail-card.hire .btn{width:100%;justify-content:center}
.rail-clock{font-size:1.45rem;font-weight:600;letter-spacing:.02em}
.rail-sub{font-size:.68rem;color:var(--faint);margin-top:4px}
.rail-uptime{font-size:.72rem;color:var(--string);margin-top:10px}
#rail-spark{width:100%;height:56px;display:block}
.rail-lat{display:flex;justify-content:space-between;font-size:.66rem;color:var(--faint);margin-top:6px}
.rail-lat .v{color:var(--text)}
#rail-log{display:flex;flex-direction:column;gap:2px;min-height:196px}
.log-line{
  display:flex;gap:8px;align-items:baseline;font-size:.68rem;color:var(--muted);
  padding:4px 7px;border-radius:5px;cursor:pointer;text-decoration:none;
  animation:log-in .3s ease both;
}
.log-line:hover{background:var(--surface-2);color:var(--text)}
.log-line .lm{color:var(--method);width:30px;font-weight:600;font-size:.6rem}
.log-line .lm.post{color:var(--post)}
.log-line .lp{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.log-line .lc{color:var(--ok)}
.log-line .lt{color:var(--faint)}
@keyframes log-in{from{opacity:0;transform:translateX(10px)}}
.rail-hint{font-size:.62rem;color:var(--faint);margin-top:8px}

/* ---------- reveal ---------- */
.reveal{opacity:0;transform:translateY(22px)}
@media (prefers-reduced-motion:reduce){
  .reveal{opacity:1;transform:none}
  *{animation:none!important;transition:none!important}
  html{scroll-behavior:auto}
}

/* ---------- responsive ---------- */
@media (max-width:960px){
  .shell{grid-template-columns:1fr}
  .sidebar{position:relative;height:auto;border-right:none;border-bottom:1px solid var(--line);
    padding:22px 20px;gap:16px}
  nav{flex-direction:row;flex-wrap:wrap;gap:4px}
  nav .group-label{display:none}
  nav a{padding:6px 8px}
  nav a .m{width:auto}
  .side-foot{display:none}
  .proj-grid,.skill-groups,.edu-grid{grid-template-columns:1fr}
  section{padding-top:64px}
  .term-body{min-height:0}
}