*,*::before,*::after{margin:0;padding:0;box-sizing:border-box;}

:root{
  --bg:#0B0910;
  --bg-2:#100D18;
  --bg-3:#16121F;
  --bg-card:#1A1525;
  --line:rgba(255,255,255,0.08);
  --line-strong:rgba(124,28,225,0.20);
  --text:#F4F1F7;
  --text-mid:#9D96AB;
  --text-dim:#6B6478;
  --brand:#7C1CE1;
  --accent:#7C1CE1;
  --accent-bright:#9D4EEC;
  --accent-deep:#5A0FB5;
  --champagne:#E8D9B5;
  --champagne-dim:rgba(232,217,181,0.7);
  --accent-glow:rgba(124,28,225,0.25);
  --accent-soft:rgba(124,28,225,0.09);
  --serif:'Instrument Serif',Georgia,serif;
  --sans:'Geist',system-ui,sans-serif;
  --mono:'Geist Mono',monospace;
}

/* ── Light mode overrides ── */
[data-theme="light"]{
  --bg:#FAFAFA;
  --bg-2:#F4F1F8;
  --bg-3:#EDE9F5;
  --bg-card:#FFFFFF;
  --line:rgba(0,0,0,0.08);
  --line-strong:rgba(124,28,225,0.22);
  --text:#0B0910;
  --text-mid:#4A4260;
  --text-dim:#8A7FA0;
  --accent:#7C1CE1;
  --accent-bright:#6B0FD4;
  --accent-deep:#5A0FB5;
  --accent-glow:rgba(124,28,225,0.15);
  --accent-soft:rgba(124,28,225,0.07);
}

[data-theme="light"] body::before{
  background-image:radial-gradient(circle at 1px 1px, rgba(0,0,0,0.055) 1px, transparent 0);
}

html{scroll-behavior:smooth;}

body{
  background:var(--bg);
  color:var(--text);
  font-family:var(--sans);
  font-weight:400;
  overflow-x:hidden;
  font-feature-settings:'ss01','ss02';
  -webkit-font-smoothing:antialiased;
  cursor:none;
  transition:background .35s ease, color .35s ease;
}

a,button,input,select,label,textarea{cursor:none;}

body::before{
  content:'';
  position:fixed;
  inset:0;
  background-image:radial-gradient(circle at 1px 1px, rgba(255,255,255,0.04) 1px, transparent 0);
  background-size:32px 32px;
  pointer-events:none;
  z-index:0;
  mask-image:radial-gradient(ellipse at center, black 0%, transparent 70%);
  transition:background-image .35s ease;
}

.rv{
  opacity:0;
  transform:translateY(30px);
  transition:opacity .8s ease, transform .8s ease;
}
.rv.on{opacity:1;transform:none;}

@media(hover:none){
  body{cursor:auto;}
  a,button,input,select,label,textarea{cursor:auto;}
}