// frontend/src/styles/themes.js export const THEMES = { default: { label: "Standard", tokens: { pageBg: "#0b0b0c", panelBg: "rgba(20, 20, 22, 0.55)", panelBorder: "rgba(233, 216, 166, 0.14)", textMain: "rgba(245, 239, 220, 0.92)", textDim: "rgba(233, 216, 166, 0.70)", textGold: "#e9d8a6", goldLine: "rgba(233, 216, 166, 0.18)", // Section header (wie TopBar, aber leicht “tiefer”) headerBgTop: "rgba(32,32,36,0.92)", headerBgBottom: "rgba(14,14,16,0.92)", headerBorder: "rgba(233, 216, 166, 0.18)", // Row colors (fix falsch bleibt rot in ALLEN themes) rowNoBg: "rgba(255, 35, 35, 0.16)", rowNoText: "#ffb3b3", rowNoBorder: "rgba(255,35,35,0.55)", rowOkBg: "rgba(0, 190, 80, 0.16)", rowOkText: "#baf3c9", rowOkBorder: "rgba(0,190,80,0.55)", rowMaybeBg: "rgba(140, 140, 140, 0.12)", rowMaybeText: "rgba(233,216,166,0.85)", rowMaybeBorder: "rgba(233,216,166,0.22)", rowEmptyBg: "rgba(255,255,255,0.06)", rowEmptyText: "rgba(233,216,166,0.75)", rowEmptyBorder: "rgba(0,0,0,0)", // Background bgImage: "url('/bg/marauders-map-blur.jpg')", }, }, gryffindor: { label: "Gryffindor", tokens: { pageBg: "#0b0b0c", panelBg: "rgba(20, 14, 14, 0.58)", panelBorder: "rgba(255, 190, 120, 0.16)", textMain: "rgba(245, 239, 220, 0.92)", textDim: "rgba(255, 210, 170, 0.70)", textGold: "#ffb86b", goldLine: "rgba(255, 184, 107, 0.18)", headerBgTop: "rgba(42,18,18,0.92)", headerBgBottom: "rgba(18,10,10,0.92)", headerBorder: "rgba(255, 184, 107, 0.22)", rowNoBg: "rgba(255, 35, 35, 0.16)", rowNoText: "#ffb3b3", rowNoBorder: "rgba(255,35,35,0.55)", rowOkBg: "rgba(255, 184, 107, 0.16)", rowOkText: "#ffd2a8", rowOkBorder: "rgba(255,184,107,0.55)", rowMaybeBg: "rgba(140, 140, 140, 0.12)", rowMaybeText: "rgba(255,210,170,0.85)", rowMaybeBorder: "rgba(255,184,107,0.22)", rowEmptyBg: "rgba(255,255,255,0.06)", rowEmptyText: "rgba(255,210,170,0.75)", rowEmptyBorder: "rgba(0,0,0,0)", // Background bgImage: "url('/bg/gryffindor.png')", }, }, slytherin: { label: "Slytherin", tokens: { pageBg: "#070a09", panelBg: "rgba(12, 20, 16, 0.58)", panelBorder: "rgba(120, 255, 190, 0.12)", textMain: "rgba(235, 245, 240, 0.92)", textDim: "rgba(175, 240, 210, 0.70)", textGold: "#7CFFB6", goldLine: "rgba(124, 255, 182, 0.18)", headerBgTop: "rgba(14,28,22,0.92)", headerBgBottom: "rgba(10,14,12,0.92)", headerBorder: "rgba(124, 255, 182, 0.22)", rowNoBg: "rgba(255, 35, 35, 0.16)", rowNoText: "#ffb3b3", rowNoBorder: "rgba(255,35,35,0.55)", rowOkBg: "rgba(124, 255, 182, 0.16)", rowOkText: "rgba(190,255,220,0.92)", rowOkBorder: "rgba(124,255,182,0.55)", rowMaybeBg: "rgba(120, 255, 190, 0.10)", rowMaybeText: "rgba(175,240,210,0.85)", rowMaybeBorder: "rgba(120,255,190,0.22)", rowEmptyBg: "rgba(255,255,255,0.06)", rowEmptyText: "rgba(175,240,210,0.75)", rowEmptyBorder: "rgba(0,0,0,0)", // Background bgImage: "url('/bg/slytherin.png')", }, }, ravenclaw: { label: "Ravenclaw", tokens: { pageBg: "#07080c", panelBg: "rgba(14, 16, 24, 0.60)", panelBorder: "rgba(140, 180, 255, 0.14)", textMain: "rgba(235, 240, 250, 0.92)", textDim: "rgba(180, 205, 255, 0.72)", textGold: "#8FB6FF", goldLine: "rgba(143, 182, 255, 0.18)", headerBgTop: "rgba(18,22,40,0.92)", headerBgBottom: "rgba(10,12,20,0.92)", headerBorder: "rgba(143, 182, 255, 0.22)", rowNoBg: "rgba(255, 35, 35, 0.16)", rowNoText: "#ffb3b3", rowNoBorder: "rgba(255,35,35,0.55)", rowOkBg: "rgba(143, 182, 255, 0.16)", rowOkText: "rgba(210,230,255,0.92)", rowOkBorder: "rgba(143,182,255,0.55)", rowMaybeBg: "rgba(140, 180, 255, 0.10)", rowMaybeText: "rgba(180,205,255,0.85)", rowMaybeBorder: "rgba(143,182,255,0.22)", rowEmptyBg: "rgba(255,255,255,0.06)", rowEmptyText: "rgba(180,205,255,0.78)", rowEmptyBorder: "rgba(0,0,0,0)", // Background bgImage: "url('/bg/ravenclaw.png')", }, }, hufflepuff: { label: "Hufflepuff", tokens: { pageBg: "#0b0b0c", panelBg: "rgba(18, 18, 14, 0.60)", panelBorder: "rgba(255, 230, 120, 0.16)", textMain: "rgba(245, 239, 220, 0.92)", textDim: "rgba(255, 240, 180, 0.70)", textGold: "#FFE27A", goldLine: "rgba(255, 226, 122, 0.18)", headerBgTop: "rgba(34,30,14,0.92)", headerBgBottom: "rgba(16,14,8,0.92)", headerBorder: "rgba(255, 226, 122, 0.22)", rowNoBg: "rgba(255, 35, 35, 0.16)", rowNoText: "#ffb3b3", rowNoBorder: "rgba(255,35,35,0.55)", rowOkBg: "rgba(255, 226, 122, 0.16)", rowOkText: "rgba(255,240,190,0.92)", rowOkBorder: "rgba(255,226,122,0.55)", rowMaybeBg: "rgba(255, 226, 122, 0.10)", rowMaybeText: "rgba(255,240,180,0.85)", rowMaybeBorder: "rgba(255,226,122,0.22)", rowEmptyBg: "rgba(255,255,255,0.06)", rowEmptyText: "rgba(255,240,180,0.78)", rowEmptyBorder: "rgba(0,0,0,0)", // Background bgImage: "url('/bg/hufflepuff.png')", }, }, }; export const DEFAULT_THEME_KEY = "default"; export function applyTheme(themeKey) { const t = THEMES[themeKey] || THEMES[DEFAULT_THEME_KEY]; const root = document.documentElement; for (const [k, v] of Object.entries(t.tokens)) { root.style.setProperty(`--hp-${k}`, v); } } export function themeStorageKey(email) { return `hpTheme:${(email || "guest").toLowerCase()}`; } export function loadThemeKey(email) { try { return localStorage.getItem(themeStorageKey(email)) || DEFAULT_THEME_KEY; } catch { return DEFAULT_THEME_KEY; } } export function saveThemeKey(email, key) { try { localStorage.setItem(themeStorageKey(email), key); } catch {} }