/* =========================================================
   Rayyan Ahmad — Portfolio
   Design system: "Signal & Node"
   A network-schematic visual language for an IT scholar who
   also works in video/graphic design. Nodes + connecting
   lines run through the whole site as the signature motif.
   ========================================================= */

:root{
  /* Color */
  --bg:        #F5F7FB;
  --surface:   #FFFFFF;
  --surface-alt: #EDF1F9;
  --ink:       #10182B;
  --ink-soft:  #4A5568;
  --ink-faint: #8A93A6;
  --line:      #DCE3EF;
  --accent:    #2F6FED;   /* signal blue */
  --accent-ink:#1B4FC4;
  --accent-2:  #17B8A6;   /* cloud teal  */
  --accent-2-ink:#0E8F82;
  --warn:      #E0563B;

  /* Type */
  --font-display: "Space Grotesk", "Segoe UI", sans-serif;
  --font-body: "Inter", "Segoe UI", sans-serif;
  --font-mono: "IBM Plex Mono", "Courier New", monospace;

  /* Layout */
  --maxw: 1120px;
  --radius: 14px;
  --radius-sm: 8px;
}

*,*::before,*::after{ box-sizing:border-box; }
html{ scroll-behavior:smooth; }
html,body{ margin:0; padding:0; }

body{
  background:var(--bg);
  color:var(--ink);
  font-family:var(--font-body);
  font-size:16px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}

img{ max-width:100%; display:block; }
a{ color:inherit; text-decoration:none; }

h1,h2,h3,h4{
  font-family:var(--font-display);
  font-weight:600;
  line-height:1.15;
  margin:0 0 .5em;
  letter-spacing:-0.01em;
}
h1{ font-size:clamp(2.2rem, 5vw, 3.6rem); }
h2{ font-size:clamp(1.6rem, 3vw, 2.3rem); }
h3{ font-size:1.25rem; }
p{ margin:0 0 1em; color:var(--ink-soft); }

.eyebrow{
  font-family:var(--font-mono);
  font-size:.78rem;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--accent-2-ink);
  display:inline-flex;
  align-items:center;
  gap:.5em;
  margin-bottom:.9em;
}
.eyebrow::before{
  content:"";
  width:7px; height:7px;
  border-radius:50%;
  background:var(--accent-2);
  box-shadow:0 0 0 3px rgba(23,184,166,.18);
}

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

.section{ padding:88px 0; }
.section--tight{ padding:56px 0; }
.section--alt{ background:var(--surface-alt); }

.section-head{
  max-width:640px;
  margin-bottom:48px;
}
.section-head p{ font-size:1.05rem; }

/* ---------- Buttons ---------- */
.btn{
  font-family:var(--font-mono);
  font-size:.85rem;
  letter-spacing:.02em;
  display:inline-flex;
  align-items:center;
  gap:.6em;
  padding:13px 22px;
  border-radius:999px;
  border:1px solid transparent;
  cursor:pointer;
  transition:transform .15s ease, box-shadow .15s ease, background .15s ease, border-color .15s ease;
}
.btn:hover{ transform:translateY(-2px); }
.btn-primary{
  background:var(--ink);
  color:#fff;
}
.btn-primary:hover{ background:var(--accent-ink); }
.btn-outline{
  background:transparent;
  border-color:var(--line);
  color:var(--ink);
}
.btn-outline:hover{ border-color:var(--accent); color:var(--accent-ink); }
.btn-block{ width:100%; justify-content:center; }

/* ---------- Nav ---------- */
.site-header{
  position:sticky; top:0; z-index:50;
  background:rgba(245,247,251,.86);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);
}
.nav{
  display:flex; align-items:center; justify-content:space-between;
  padding:16px 24px;
  max-width:var(--maxw);
  margin:0 auto;
}
.brand{
  display:flex; align-items:center; gap:10px;
  font-family:var(--font-display);
  font-weight:700;
  font-size:1.05rem;
}
.brand .node-dot{
  width:10px;height:10px;border-radius:50%;
  background:var(--accent);
  box-shadow:0 0 0 4px rgba(47,111,237,.15);
}
.nav-links{
  display:flex; align-items:center; gap:6px;
  list-style:none; margin:0; padding:0;
}
.nav-links a{
  font-family:var(--font-mono);
  font-size:.82rem;
  letter-spacing:.03em;
  padding:9px 14px;
  border-radius:999px;
  color:var(--ink-soft);
  transition:background .15s ease, color .15s ease;
}
.nav-links a:hover{ background:var(--surface-alt); color:var(--ink); }
.nav-links a.active{ background:var(--ink); color:#fff; }
.nav-cta{ display:flex; align-items:center; gap:10px; }
.nav-toggle{
  display:none;
  background:none; border:1px solid var(--line); border-radius:10px;
  width:40px; height:40px; cursor:pointer;
  align-items:center; justify-content:center;
}
.nav-toggle span, .nav-toggle span::before, .nav-toggle span::after{
  content:""; display:block; width:18px; height:2px; background:var(--ink);
  position:relative; transition:.2s;
}
.nav-toggle span::before{ position:absolute; top:-6px; }
.nav-toggle span::after{ position:absolute; top:6px; }

@media (max-width: 860px){
  .nav-links{
    position:absolute; top:100%; left:0; right:0;
    background:var(--surface); border-bottom:1px solid var(--line);
    flex-direction:column; align-items:stretch;
    padding:10px 24px 18px;
    display:none;
  }
  .nav-links.open{ display:flex; }
  .nav-links a{ padding:12px 10px; }
  .nav-toggle{ display:flex; }
  .nav-cta .btn-outline{ display:none; }
}

/* ---------- Hero / Node graph ---------- */
.hero{
  padding:72px 0 40px;
  display:grid;
  grid-template-columns:1.05fr .95fr;
  gap:40px;
  align-items:center;
}
@media (max-width: 900px){
  .hero{ grid-template-columns:1fr; }
}
.hero h1{ margin-bottom:.35em; }
.hero .role{
  font-family:var(--font-mono);
  color:var(--accent-ink);
  font-size:1.05rem;
  margin-bottom:1.1em;
}
.hero-lede{ font-size:1.08rem; max-width:52ch; }
.hero-actions{ display:flex; gap:14px; flex-wrap:wrap; margin-top:1.6em; }
.hero-stats{
  display:flex; gap:28px; margin-top:2.4em; flex-wrap:wrap;
}
.stat b{
  display:block; font-family:var(--font-display); font-size:1.5rem; color:var(--ink);
}
.stat span{
  font-family:var(--font-mono); font-size:.72rem; color:var(--ink-faint);
  text-transform:uppercase; letter-spacing:.08em;
}

.node-graph{ position:relative; width:100%; }
.node-graph svg{ width:100%; height:auto; }
.node-graph .line{
  stroke:var(--line);
  stroke-width:1.5;
}
.node-graph .line.active{ stroke:var(--accent-2); stroke-dasharray:4 6; }
.node-graph .pulse{
  fill:var(--accent);
}
.node-graph .node-bubble{
  fill:var(--surface);
  stroke:var(--line);
  stroke-width:1.5;
}
.node-graph .node-bubble.core{ stroke:var(--accent); }
.node-graph text{
  font-family:var(--font-mono);
  font-size:11px;
  fill:var(--ink-soft);
}
.node-graph text.core-label{ fill:var(--ink); font-weight:600; }

@keyframes travel{
  0%{ offset-distance:0%; opacity:0; }
  10%{ opacity:1; }
  90%{ opacity:1; }
  100%{ offset-distance:100%; opacity:0; }
}
.packet{
  offset-rotate:0deg;
  animation:travel 3.2s linear infinite;
}

/* ---------- Cards ---------- */
.grid{ display:grid; gap:24px; }
.grid-3{ grid-template-columns:repeat(3,1fr); }
.grid-2{ grid-template-columns:repeat(2,1fr); }
@media (max-width:860px){
  .grid-3, .grid-2{ grid-template-columns:1fr; }
}

.card{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--radius);
  padding:28px;
  transition:border-color .15s ease, transform .15s ease;
}
.card:hover{ border-color:var(--accent); transform:translateY(-3px); }
.card .icon-node{
  width:42px; height:42px; border-radius:10px;
  background:var(--surface-alt);
  display:flex; align-items:center; justify-content:center;
  margin-bottom:18px;
  color:var(--accent-ink);
}
.card h3{ margin-bottom:.4em; }
.card p{ margin-bottom:0; font-size:.95rem; }

/* ---------- Timeline ---------- */
.timeline{
  position:relative;
  padding-left:28px;
  border-left:1.5px solid var(--line);
}
.timeline-item{ position:relative; padding-bottom:36px; }
.timeline-item:last-child{ padding-bottom:0; }
.timeline-item::before{
  content:"";
  position:absolute; left:-33.5px; top:4px;
  width:10px; height:10px; border-radius:50%;
  background:var(--surface);
  border:2px solid var(--accent);
}
.timeline-date{
  font-family:var(--font-mono);
  font-size:.78rem;
  color:var(--ink-faint);
  text-transform:uppercase;
  letter-spacing:.06em;
  margin-bottom:.3em;
  display:block;
}
.timeline-item h3{ margin-bottom:.2em; }
.timeline-org{ color:var(--accent-2-ink); font-size:.9rem; margin-bottom:.5em; display:block; }

/* ---------- Tags / Skills ---------- */
.tag-group{ margin-bottom:20px; }
.tag-group h4{
  font-family:var(--font-mono);
  font-size:.78rem;
  text-transform:uppercase; letter-spacing:.08em;
  color:var(--ink-faint);
  margin-bottom:.8em;
}
.tags{ display:flex; flex-wrap:wrap; gap:8px; }
.tag{
  font-family:var(--font-mono);
  font-size:.8rem;
  padding:7px 13px;
  background:var(--surface-alt);
  border:1px solid var(--line);
  border-radius:999px;
  color:var(--ink-soft);
}

/* ---------- Image placeholders ---------- */
.img-slot{
  aspect-ratio:4/3;
  border-radius:var(--radius);
  background:
    repeating-linear-gradient(45deg, var(--surface-alt), var(--surface-alt) 10px, var(--surface) 10px, var(--surface) 20px);
  border:1.5px dashed var(--line);
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:6px;
  color:var(--ink-faint);
  text-align:center;
  padding:16px;
  overflow:hidden;
}
.img-slot img{ width:100%; height:100%; object-fit:cover; border-radius:inherit; }
.img-slot .slot-label{
  font-family:var(--font-mono); font-size:.72rem; text-transform:uppercase; letter-spacing:.06em;
}
.img-slot.circle{ aspect-ratio:1/1; border-radius:50%; }
.img-slot.wide{ aspect-ratio:16/9; }

/* ---------- Project cards ---------- */
.project-card{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--radius);
  overflow:hidden;
  display:flex; flex-direction:column;
  transition:transform .15s ease, border-color .15s ease;
}
.project-card:hover{ transform:translateY(-3px); border-color:var(--accent); }
.project-card .img-slot{ border-radius:0; border-width:0 0 1.5px 0; aspect-ratio:16/10; }
.project-card-body{ padding:22px 24px 26px; flex:1; display:flex; flex-direction:column; }
.project-card-body p{ font-size:.93rem; flex:1; }
.project-links{ display:flex; gap:10px; margin-top:16px; }
.project-links a{
  font-family:var(--font-mono); font-size:.78rem;
  padding:8px 14px; border-radius:999px;
  border:1px solid var(--line);
}
.project-links a:hover{ border-color:var(--accent); color:var(--accent-ink); }

/* ---------- Services ---------- */
.service-row{
  display:grid;
  grid-template-columns:44px 1fr auto;
  gap:20px;
  align-items:start;
  padding:26px 0;
  border-bottom:1px solid var(--line);
}
.service-row:first-of-type{ border-top:1px solid var(--line); }
.service-index{
  font-family:var(--font-mono);
  color:var(--ink-faint);
  font-size:.85rem;
  padding-top:.2em;
}
.service-tags{ display:flex; gap:8px; flex-wrap:wrap; margin-top:10px; }
@media (max-width:700px){
  .service-row{ grid-template-columns:1fr; gap:8px; }
}

/* ---------- Form ---------- */
.form{ display:grid; gap:16px; max-width:560px; }
.form-row{ display:grid; gap:16px; grid-template-columns:1fr 1fr; }
@media (max-width:600px){ .form-row{ grid-template-columns:1fr; } }
label{
  font-family:var(--font-mono);
  font-size:.78rem;
  text-transform:uppercase;
  letter-spacing:.06em;
  color:var(--ink-faint);
  display:block;
  margin-bottom:.5em;
}
input, textarea{
  width:100%;
  font-family:var(--font-body);
  font-size:.95rem;
  padding:12px 14px;
  border-radius:var(--radius-sm);
  border:1.5px solid var(--line);
  background:var(--surface);
  color:var(--ink);
}
input:focus, textarea:focus{
  outline:none; border-color:var(--accent);
  box-shadow:0 0 0 3px rgba(47,111,237,.12);
}
textarea{ resize:vertical; min-height:140px; }

/* ---------- Contact list ---------- */
.contact-list{ list-style:none; margin:0; padding:0; display:grid; gap:14px; }
.contact-list li{
  display:flex; align-items:center; gap:14px;
  padding:16px 18px;
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--radius-sm);
  font-family:var(--font-mono);
  font-size:.88rem;
}
.contact-list .k{ color:var(--ink-faint); min-width:74px; text-transform:uppercase; font-size:.72rem; letter-spacing:.06em; }

/* ---------- CTA band ---------- */
.cta-band{
  background:var(--ink);
  color:#fff;
  border-radius:20px;
  padding:56px;
  display:flex; align-items:center; justify-content:space-between; gap:24px;
  flex-wrap:wrap;
}
.cta-band h2{ color:#fff; margin-bottom:.2em; }
.cta-band p{ color:#B9C1D6; margin-bottom:0; }
.cta-band .btn-primary{ background:#fff; color:var(--ink); }
.cta-band .btn-primary:hover{ background:var(--accent-2); color:#fff; }

/* ---------- Footer ---------- */
.site-footer{
  border-top:1px solid var(--line);
  padding:48px 0 32px;
  margin-top:40px;
}
.footer-grid{
  display:flex; justify-content:space-between; gap:24px; flex-wrap:wrap;
  margin-bottom:28px;
}
.footer-links{ display:flex; gap:24px; list-style:none; padding:0; margin:0; flex-wrap:wrap; }
.footer-links a{ font-family:var(--font-mono); font-size:.85rem; color:var(--ink-soft); }
.footer-links a:hover{ color:var(--accent-ink); }
.footer-bottom{
  display:flex; justify-content:space-between; flex-wrap:wrap; gap:10px;
  font-family:var(--font-mono); font-size:.75rem; color:var(--ink-faint);
  padding-top:24px; border-top:1px solid var(--line);
}

/* ---------- Page hero (inner pages) ---------- */
.page-hero{ padding:64px 0 20px; }
.page-hero .eyebrow{ margin-bottom:.6em; }
.page-hero p{ max-width:60ch; font-size:1.05rem; }

/* ---------- Reveal on scroll ---------- */
.reveal{ opacity:0; transform:translateY(16px); transition:opacity .5s ease, transform .5s ease; }
.reveal.in{ opacity:1; transform:translateY(0); }

@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
  .packet{ animation:none; }
  .reveal{ opacity:1; transform:none; transition:none; }
  .btn:hover, .card:hover, .project-card:hover{ transform:none; }
}
