/* GDG Africa University
   Type: Bricolage Grotesque (display), Geist (body), Geist Mono (labels)
   Shape rule: cards/tiles 24px (rounded-3xl), buttons + chips full pill, inputs 12px (rounded-xl).
   Colour rule: Google blue is the only CTA colour. Red/yellow/green are role colours, never buttons.
   Z-index scale: nav 40, mobile menu 41, back-to-top 30, modal 60. */

:root {
  --bg-primary: 225 20% 97%;
  --bg-secondary: 225 18% 93%;
  --bg-tertiary: 0 0% 100%;
  --text-primary: 225 22% 9%;
  --text-secondary: 225 9% 34%;
  --border-color: 225 14% 86%;
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  color-scheme: light;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg-primary: 225 14% 7%;
    --bg-secondary: 225 12% 10%;
    --bg-tertiary: 225 11% 13%;
    --text-primary: 225 20% 95%;
    --text-secondary: 225 9% 70%;
    --border-color: 225 9% 21%;
    color-scheme: dark;
  }
}

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

body {
  background: hsl(var(--bg-primary));
  color: hsl(var(--text-primary));
  overflow-x: clip;
}

::selection { background: #1A73E8; color: #fff; }

:focus-visible { outline: 2px solid #1A73E8; outline-offset: 3px; border-radius: 6px; }

.font-display { font-optical-sizing: auto; letter-spacing: -0.035em; }

/* ── Nav ─────────────────────────────────────────── */
#main-nav { transition: background-color .3s, border-color .3s; border-bottom: 1px solid transparent; }
#main-nav.scrolled {
  background: hsl(var(--bg-primary) / .86);
  backdrop-filter: blur(14px) saturate(160%);
  -webkit-backdrop-filter: blur(14px) saturate(160%);
  border-bottom-color: hsl(var(--border-color));
}
.nav-link { position: relative; }
.nav-link::after {
  content: ""; position: absolute; left: 12px; right: 12px; bottom: 4px; height: 2px;
  background: currentColor; transform: scaleX(0); transform-origin: left;
  transition: transform .35s var(--ease-out);
}
.nav-link:hover::after, .nav-link[aria-current="page"]::after { transform: scaleX(1); }

.hamburger-icon span { display: block; width: 18px; height: 2px; background: currentColor; border-radius: 2px; transition: transform .3s var(--ease-out), opacity .2s; }
.hamburger-icon span + span { margin-top: 4px; }
.hamburger-icon.active span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
.hamburger-icon.active span:nth-child(2) { opacity: 0; }
.hamburger-icon.active span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

/* ── Buttons: press scale + spring release ───────── */
.btn-press { transition: transform .45s cubic-bezier(.34,1.56,.64,1), background-color .2s, color .2s, border-color .2s; }
.btn-press:active { transform: scale(.97); transition-duration: .08s; }
.btn-press:disabled { opacity: .6; cursor: progress; }

/* Arrow nudges on hover; text never shifts layout */
.btn-arrow { transition: transform .35s var(--ease-out); }
a:hover > .btn-arrow, button:hover > .btn-arrow { transform: translateX(3px); }

/* ── Cards ───────────────────────────────────────── */
.card-hover { transition: border-color .25s; }
.card-hover:hover { border-color: hsl(var(--text-primary) / .35); }
.img-zoom { overflow: hidden; }
.img-zoom img { transition: transform .8s var(--ease-out); }
.img-zoom:hover img, .group:hover .img-zoom img { transform: scale(1.05); }

/* ── Hero ────────────────────────────────────────── */
#hero-canvas { touch-action: pan-y; }
#hero-canvas.grabbable { cursor: grab; }
#hero-canvas.grabbing { cursor: grabbing; }

.hero-line { display: block; overflow: hidden; padding-bottom: .06em; }
.hero-line > span { display: inline-block; }
@media (prefers-reduced-motion: no-preference) {
  .hero-line > span { animation: rise 1s var(--ease-out) both; }
  .hero-line:nth-child(2) > span { animation-delay: .08s; }
  .hero-fade { animation: fade 1s var(--ease-out) .25s both; }
}
@keyframes rise { from { transform: translateY(105%); } }
@keyframes fade { from { opacity: 0; transform: translateY(12px); } }

/* ── Photo marquee (the one marquee on the page) ── */
.marquee { mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent); }
.marquee-track { display: flex; gap: 12px; width: max-content; }
@media (prefers-reduced-motion: no-preference) {
  .marquee-track { animation: marquee 60s linear infinite; }
  .marquee:hover .marquee-track { animation-play-state: paused; }
}
@keyframes marquee { to { transform: translateX(-50%); } }

/* ── Scroll reveal (IntersectionObserver adds .revealed) ── */
@media (prefers-reduced-motion: no-preference) {
  .js .scroll-reveal { opacity: 0; transform: translateY(24px); transition: opacity .9s var(--ease-out), transform .9s var(--ease-out); transition-delay: calc(var(--i, 0) * 70ms); }
  .js .scroll-reveal.revealed { opacity: 1; transform: none; }
}

/* ── Teach rows: image follows hover ────────────── */
.teach-row .teach-img { opacity: 0; transform: scale(.94) rotate(-3deg); transition: opacity .35s, transform .6s var(--ease-out); }
.teach-row:hover .teach-img { opacity: 1; transform: none; }

/* ── Horizontal scroller ─────────────────────────── */
.h-scroll { scroll-snap-type: x mandatory; scrollbar-width: none; overscroll-behavior-x: contain; }
.h-scroll::-webkit-scrollbar { display: none; }
.h-scroll > * { scroll-snap-align: start; }

/* ── Modals ──────────────────────────────────────── */
.modal-overlay {
  position: fixed; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center;
  padding: 16px; background: hsl(225 30% 4% / .6); backdrop-filter: blur(6px);
  opacity: 0; visibility: hidden; transition: opacity .3s, visibility .3s;
}
.modal-overlay.active { opacity: 1; visibility: visible; }
.modal-content {
  width: 100%; max-width: 520px; max-height: calc(100dvh - 32px); overflow-y: auto;
  background: hsl(var(--bg-tertiary)); border: 1px solid hsl(var(--border-color)); border-radius: 24px;
  transform: translateY(16px) scale(.98); transition: transform .45s var(--ease-out);
}
.modal-overlay.active .modal-content { transform: none; }

/* ── Forms ───────────────────────────────────────── */
.field {
  width: 100%; border-radius: 12px; padding: 12px 14px; font-size: 15px;
  background: hsl(var(--bg-primary)); color: hsl(var(--text-primary));
  border: 1px solid hsl(var(--border-color)); transition: border-color .2s, box-shadow .2s;
}
.field::placeholder { color: hsl(var(--text-secondary) / .8); }
.field:focus { outline: none; border-color: #1A73E8; box-shadow: 0 0 0 3px rgb(26 115 232 / .2); }
.label { display: block; font-size: 13px; font-weight: 600; margin-bottom: 6px; color: hsl(var(--text-primary)); }

/* ── Stats ───────────────────────────────────────── */
.stat-number { font-variant-numeric: tabular-nums; }

/* ── Long-form content (blog + project pages) ───── */
.prose { line-height: 1.75; }
.prose h2, .prose h3 { font-family: 'Bricolage Grotesque', sans-serif; letter-spacing: -0.02em; font-weight: 700; margin: 1.6em 0 .5em; }
.prose h2 { font-size: 1.6rem; } .prose h3 { font-size: 1.25rem; }
.prose p, .prose ul, .prose ol { margin: 0 0 1.1em; }
.prose ul { list-style: disc; padding-left: 1.3em; } .prose ol { list-style: decimal; padding-left: 1.3em; }
.prose a { color: #1A73E8; text-decoration: underline; text-underline-offset: 3px; }
.prose img { border-radius: 16px; margin: 1.5em 0; }
.prose pre { background: hsl(var(--bg-secondary)); padding: 1em; border-radius: 12px; overflow-x: auto; font-family: 'Geist Mono', monospace; font-size: .9em; }
.prose blockquote { border-left: 3px solid #1A73E8; padding-left: 1em; color: hsl(var(--text-secondary)); }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
}
