diff --git a/frontend/src/app/(public)/page.tsx b/frontend/src/app/(public)/page.tsx index 16f078b3..075c6f12 100644 --- a/frontend/src/app/(public)/page.tsx +++ b/frontend/src/app/(public)/page.tsx @@ -15,8 +15,11 @@ const API_URL = process.env.NEXT_PUBLIC_API_URL ?? 'http://localhost:5000'; const SCRAMBLE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!<>-_\\/[]{}=+*^?#_"; -const CLUSTER_COLORS = ['#9CA3AF', '#D97706', '#3B82F6', '#8A63D2', '#14B8A6', '#EF4444']; -const OB_STEP_COLORS = ['#D97706', '#8A63D2', '#3B82F6', '#14B8A6', '#EF4444']; +// Hand-tuned atmospheric orb palettes, hardcoded because they feed canvas +// fillStyle where CSS var() doesn't resolve. #3e6f8a mirrors --info in +// globals.css — the muted blue chosen to de-neon the old #3B82F6 (#106). +const CLUSTER_COLORS = ['#9CA3AF', '#D97706', '#3e6f8a', '#8A63D2', '#14B8A6', '#EF4444']; +const OB_STEP_COLORS = ['#D97706', '#8A63D2', '#3e6f8a', '#14B8A6', '#EF4444']; const CLUSTER_SEEDS_BG = [10.0, 11.3, 12.6, 13.9, 15.2, 16.5]; const CLUSTER_INIT_POS = [ { ox: -222, oy: -29, oz: 15 }, @@ -196,8 +199,9 @@ export default function LandingPage() { let rotAngle = 0; let animId: number; + // #3e6f8a mirrors --info (globals.css); literal because canvas can't resolve var(). const palette = [ - { c: '#8A63D2', w: 0.24 }, { c: '#3B82F6', w: 0.24 }, + { c: '#8A63D2', w: 0.24 }, { c: '#3e6f8a', w: 0.24 }, { c: '#D97706', w: 0.20 }, { c: '#14B8A6', w: 0.15 }, { c: '#9CA3AF', w: 0.10 }, { c: '#D1D5DB', w: 0.07 }, ]; diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index be686a94..4938e958 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -526,7 +526,7 @@ body { font-size: 14px; line-height: 1.5; } .landing-intro-orbit-node--green { background: var(--brand-forest); top: -3px; left: 50%; transform: translateX(-50%); } .landing-intro-orbit-node--amber { background: #D97706; right: -3px; top: 45%; transform: translateY(-50%); } -.landing-intro-orbit-node--blue { background: #3B82F6; bottom: -3px; left: 35%; transform: translateX(-50%); } +.landing-intro-orbit-node--blue { background: var(--info); bottom: -3px; left: 35%; transform: translateX(-50%); } .landing-intro-orbit-node--purple { background: #8A63D2; left: -3px; top: 30%; transform: translateY(-50%); } /* ── Button shimmer ────────────────────────────────────────────── */ @@ -862,7 +862,7 @@ input[type="reset"]:disabled { .landing-page .landing-intro-orbit-node { position: absolute; width: 10px; height: 10px; border-radius: 999px; } .landing-page .landing-intro-orbit-node--green { background: var(--brand-forest); top: -3px; left: 50%; transform: translateX(-50%); } .landing-page .landing-intro-orbit-node--amber { background: #D97706; right: -3px; top: 45%; transform: translateY(-50%); } -.landing-page .landing-intro-orbit-node--blue { background: #3B82F6; bottom: -3px; left: 35%; transform: translateX(-50%); } +.landing-page .landing-intro-orbit-node--blue { background: var(--info); bottom: -3px; left: 35%; transform: translateX(-50%); } .landing-page .landing-intro-orbit-node--purple { background: #8A63D2; left: -3px; top: 30%; transform: translateY(-50%); } /* Button shimmer. */ diff --git a/frontend/src/components/Gradebook/AssignmentList.tsx b/frontend/src/components/Gradebook/AssignmentList.tsx index 6fb60462..142e8e6c 100644 --- a/frontend/src/components/Gradebook/AssignmentList.tsx +++ b/frontend/src/components/Gradebook/AssignmentList.tsx @@ -353,6 +353,10 @@ function CategoryGroup({ flexWrap: "wrap", }} > +