:root {
  --bg:      #0a0a14;
  --bg-2:    #111122;
  --bg-3:    #181830;
  --line:    #252545;
  --line-2:  #343462;
  --ink:     #f5f3ee;
  --ink-2:   #a8a3b8;
  --ink-3:   #6a6580;
  --purple:  #a78bfa;
  --purple-2:#7c5cff;
  --purple-3:#c4b5fd;
  --green:   #3dd07a;
  --red:     #ef4b5c;
  --wally:   #e8a63a;
}
* { box-sizing: border-box; }
html, body { margin:0; padding:0; background: var(--bg); color: var(--ink); font-family: 'Inter', system-ui, sans-serif; -webkit-font-smoothing: antialiased; }
.serif  { font-family: 'Fraunces', Georgia, serif; }
.italic { font-family: 'Instrument Serif', Georgia, serif; font-style: italic; font-weight: 400; }
.mono   { font-family: 'Geist Mono', ui-monospace, monospace; font-weight: 400; }
.g { text-transform: none; }
a { color: inherit; text-decoration: none; }
button, input { font-family: inherit; }

@keyframes tickerScroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes pulseDot     { 0%,100%{opacity:1;transform:scale(1);} 50%{opacity:0.4;transform:scale(1.4);} }
@keyframes pulseGlow    { 0%,100%{box-shadow:0 0 0 6px rgba(124,92,255,0.15),0 0 40px rgba(124,92,255,0.4);} 50%{box-shadow:0 0 0 10px rgba(124,92,255,0.1),0 0 60px rgba(124,92,255,0.6);} }
@keyframes fadeUp       { from{opacity:0;transform:translateY(8px);} to{opacity:1;transform:translateY(0);} }
@keyframes sparkDraw    { from { stroke-dashoffset: 400; } to { stroke-dashoffset: 0; } }
@keyframes slideIn      { from{opacity:0;transform:translateY(-6px);} to{opacity:1;transform:translateY(0);} }
