/* ══════════════════════════════════════════════════════════════════════
   TOKENS — the design system for every page in this project.

   Two voices on screen: monospace is the machine, serif is the teacher.
   Colour is never decoration here. Each accent means one specific thing,
   and no page borrows another page's meaning for something else.
   ══════════════════════════════════════════════════════════════════════ */
:root{
  /* ── surfaces ─────────────────────────────────────────────────────── */
  --void:      #070b14;
  --substrate: #0d1422;
  --panel:     #101a2b;
  --hairline:  #1e2a40;
  --hairline-2:#2a3a56;
  --dim:       #5a6e93;
  --paper:     #c8d4e8;
  --paper-hi:  #eaf2ff;

  /* ── shared accents ───────────────────────────────────────────────── */
  --cursor:    #ffffff;   /* where the machine is looking right now */
  --danger:    #ff4d4d;   /* freed, dropped, failed */
  --ok:        #4ade80;   /* succeeded, returned, cached */

  /* ── memory-layout meanings ───────────────────────────────────────── */
  --array:     #38e0d0;   /* contiguous array data     */
  --reserved:  #1c6b6a;   /* allocated but unused      */
  --node:      #ff5fa2;   /* linked-list node value    */
  --pointer:   #ffb338;   /* a next-pointer + its arc  */

  /* ── url-journey meanings ─────────────────────────────────────────── */
  --request:   #38bdf8;   /* a packet heading out      */
  --response:  #4ade80;   /* a packet heading home     */
  --dns:       #a78bfa;   /* name lookup traffic       */
  --crypto:    #ffb338;   /* encrypted payload         */
  --store:     #ff5fa2;   /* database                  */

  /* ── neural-net meanings ──────────────────────────────────────────── */
  /* Sign is the colour axis here, because "a weight can be negative" is the
     idea beginners miss. Intensity deliberately gets no token: pixel value
     and neuron activation both ramp --void to --paper-hi, so the scene reads
     in three channels — white is how much, lime helps, rose hurts. */
  --excite:    #a3e635;   /* a positive weight, pushing a neuron up   */
  --inhibit:   #f472b6;   /* a negative weight, pushing a neuron down */

  /* ── type ─────────────────────────────────────────────────────────── */
  --mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --serif: "Newsreader", Georgia, "Times New Roman", serif;

  --ease: cubic-bezier(.22,1,.36,1);
  --r: 4px;
}

*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}

body{
  background:
    radial-gradient(1200px 700px at 50% -10%, #16233d 0%, transparent 60%),
    radial-gradient(900px 600px at 90% 110%, #171029 0%, transparent 55%),
    var(--void);
  color:var(--paper);
  font-family:var(--mono);
  font-variant-numeric:tabular-nums;
  -webkit-font-smoothing:antialiased;
}

:focus-visible{ outline:2px solid var(--array); outline-offset:2px; }

@media (prefers-reduced-motion: reduce){
  *{ transition-duration:.01ms !important; animation-duration:.01ms !important; }
}
