-
{me.email}
-
{me.role}
+
{me.email}
+
+ {me.role}
+
@@ -535,12 +487,7 @@ export default function App() {
))}
- setHelpOpen(true)}
- style={styles.helpBtn}
- title="Hilfe"
- aria-label="Hilfe"
- >
+ setHelpOpen(true)} style={styles.helpBtn} title="Hilfe">
Hilfe
@@ -549,130 +496,77 @@ export default function App() {
{helpOpen && (
-
e.stopPropagation()}
- >
+
e.stopPropagation()}>
-
- 1) Namen anklicken (Status)
-
+
1) Namen anklicken (Status)
Tippe auf einen Namen, um den Status zu wechseln. Reihenfolge:
-
+
✓
-
- Grün = bestätigt / fix richtig
-
+ Grün = bestätigt / fix richtig
-
+
✕
-
- Rot = ausgeschlossen / fix falsch
-
+ Rot = ausgeschlossen / fix falsch
-
+
?
-
- Grau = unsicher / „vielleicht“
-
+ Grau = unsicher / „vielleicht“
-
+
–
-
- Leer = unknown / noch nicht bewertet
-
+ Leer = unknown / noch nicht bewertet
-
- 2) i / m / s Button (Notiz)
-
+
2) i / m / s Button (Notiz)
- Rechts pro Zeile gibt es einen Button, der durch diese Werte
- rotiert:
+ Rechts pro Zeile gibt es einen Button, der durch diese Werte rotiert:
i
-
- i = „Ich habe diese Geheimkarte“
-
+
i = „Ich habe diese Geheimkarte“
m
-
- m = „Geheimkarte aus dem mittleren Deck“
-
+
m = „Geheimkarte aus dem mittleren Deck“
s
-
- s = „Ein anderer Spieler hat diese Karte“
-
+
s = „Ein anderer Spieler hat diese Karte“
—
-
- — = keine Notiz
-
+
— = keine Notiz
- Tipp: Jeder Spieler sieht nur seine eigenen Notizen – andere
- Spieler können nicht in deinen Zettel schauen.
+ Tipp: Jeder Spieler sieht nur seine eigenen Notizen – andere Spieler können nicht in deinen Zettel schauen.
@@ -694,14 +588,11 @@ export default function App() {
style={{
...styles.row,
background: getRowBg(e.status),
- animation:
- pulseId === e.entry_id
- ? "rowPulse 220ms ease-out"
- : "none",
+ animation: pulseId === e.entry_id ? "rowPulse 220ms ease-out" : "none",
borderLeft:
e.status === 2 ? "4px solid rgba(0,190,80,0.55)" :
e.status === 1 ? "4px solid rgba(255,35,35,0.55)" :
- e.status === 3 ? "4px solid rgba(90,90,90,0.55)" :
+ e.status === 3 ? "4px solid rgba(233,216,166,0.22)" :
"4px solid rgba(0,0,0,0)",
}}
>
@@ -709,10 +600,9 @@ export default function App() {
onClick={() => cycleStatus(e)}
style={{
...styles.name,
- textDecoration:
- e.status === 1 ? "line-through" : "none",
+ textDecoration: e.status === 1 ? "line-through" : "none",
color: getNameColor(e.status),
- opacity: e.status === 1 ? 0.75 : 1,
+ opacity: e.status === 1 ? 0.8 : 1,
}}
title="Klick: Grün → Rot → Grau → Leer"
>
@@ -720,22 +610,12 @@ export default function App() {
-
+
{getStatusSymbol(e.status)}
-
toggleTag(e)}
- style={styles.tagBtn}
- title="i → m → s → leer"
- >
+ toggleTag(e)} style={styles.tagBtn} title="i → m → s → leer">
{e.note_tag || "—"}
@@ -752,6 +632,19 @@ export default function App() {
);
}
+/* ===== Theme Tokens ===== */
+const stylesTokens = {
+ 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)",
+};
+
/* ===== Styles ===== */
const styles = {
page: {
@@ -775,19 +668,18 @@ const styles = {
gap: 10,
padding: 12,
borderRadius: 16,
- background: "rgba(255,255,255,0.30)",
- border: "1px solid rgba(0,0,0,0.14)",
- boxShadow: "0 12px 28px rgba(0,0,0,0.14)",
- backdropFilter: "blur(4px)",
+ background: stylesTokens.panelBg,
+ border: `1px solid ${stylesTokens.panelBorder}`,
+ boxShadow: "0 12px 30px rgba(0,0,0,0.45)",
+ backdropFilter: "blur(6px)",
},
card: {
borderRadius: 18,
overflow: "hidden",
- border: "1px solid rgba(0,0,0,0.16)",
- background: "rgba(255,255,255,0.26)",
- boxShadow:
- "0 18px 40px rgba(0,0,0,0.16), inset 0 1px 0 rgba(255,255,255,0.55)",
+ border: `1px solid ${stylesTokens.panelBorder}`,
+ background: "rgba(18, 18, 20, 0.50)",
+ boxShadow: "0 18px 40px rgba(0,0,0,0.50), inset 0 1px 0 rgba(255,255,255,0.06)",
},
cardBody: {
@@ -802,12 +694,11 @@ const styles = {
fontWeight: 1000,
fontFamily: '"Cinzel Decorative", "IM Fell English", system-ui',
letterSpacing: 1.0,
- color: "rgba(25,16,10,0.95)",
- background:
- "linear-gradient(180deg, rgba(210,170,90,0.95), rgba(150,110,35,0.95))",
- borderBottom: "1px solid rgba(0,0,0,0.22)",
+ color: stylesTokens.textGold,
+ background: "linear-gradient(180deg, rgba(32,32,36,0.92), rgba(14,14,16,0.92))",
+ borderBottom: `1px solid ${stylesTokens.goldLine}`,
textTransform: "uppercase",
- textShadow: "0 1px 0 rgba(255,255,255,0.20)",
+ textShadow: "0 1px 0 rgba(0,0,0,0.6)",
},
row: {
@@ -816,8 +707,8 @@ const styles = {
gap: 10,
padding: "12px 14px",
alignItems: "center",
- borderBottom: "1px solid rgba(0,0,0,0.08)",
- borderLeft: "4px solid rgba(0,0,0,0)", // default
+ borderBottom: "1px solid rgba(233,216,166,0.08)",
+ borderLeft: "4px solid rgba(0,0,0,0)",
},
name: {
@@ -825,6 +716,7 @@ const styles = {
userSelect: "none",
fontWeight: 800,
letterSpacing: 0.2,
+ color: stylesTokens.textMain,
},
statusCell: {
@@ -840,39 +732,42 @@ const styles = {
justifyContent: "center",
alignItems: "center",
borderRadius: 999,
- border: "1px solid rgba(0,0,0,0.22)",
+ border: `1px solid rgba(233,216,166,0.18)`,
fontWeight: 1100,
fontSize: 16,
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
+ boxShadow: "inset 0 1px 0 rgba(255,255,255,0.06)",
},
tagBtn: {
padding: "8px 0",
fontWeight: 1000,
borderRadius: 12,
- border: "1px solid rgba(0,0,0,0.22)",
- background: "rgba(255,255,255,0.42)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "rgba(255,255,255,0.06)",
+ color: stylesTokens.textGold,
cursor: "pointer",
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
+ boxShadow: "inset 0 1px 0 rgba(255,255,255,0.06)",
},
helpBtn: {
padding: "10px 12px",
borderRadius: 12,
- border: "1px solid rgba(0,0,0,0.22)",
- background: "rgba(255,255,255,0.46)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "rgba(255,255,255,0.06)",
+ color: stylesTokens.textGold,
fontWeight: 1000,
cursor: "pointer",
whiteSpace: "nowrap",
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
+ boxShadow: "inset 0 1px 0 rgba(255,255,255,0.06)",
},
input: {
width: "100%",
padding: 10,
borderRadius: 12,
- border: "1px solid rgba(0,0,0,0.20)",
- background: "rgba(255,255,255,0.55)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "rgba(10,10,12,0.55)",
+ color: stylesTokens.textMain,
outline: "none",
fontSize: 16,
},
@@ -880,31 +775,34 @@ const styles = {
primaryBtn: {
padding: "10px 12px",
borderRadius: 12,
- border: "1px solid rgba(0,0,0,0.22)",
- background:
- "linear-gradient(180deg, rgba(246,226,179,0.95), rgba(202,164,90,0.95))",
+ border: `1px solid rgba(233,216,166,0.28)`,
+ background: "linear-gradient(180deg, rgba(233,216,166,0.24), rgba(233,216,166,0.10))",
+ color: stylesTokens.textGold,
fontWeight: 1000,
cursor: "pointer",
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
+ boxShadow: "inset 0 1px 0 rgba(255,255,255,0.08)",
},
secondaryBtn: {
padding: "10px 12px",
borderRadius: 12,
- border: "1px solid rgba(0,0,0,0.20)",
- background: "rgba(255,255,255,0.46)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "rgba(255,255,255,0.05)",
+ color: stylesTokens.textMain,
fontWeight: 900,
cursor: "pointer",
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
+ boxShadow: "inset 0 1px 0 rgba(255,255,255,0.06)",
},
+ // Admin
adminWrap: {
marginTop: 14,
padding: 12,
borderRadius: 16,
- border: "1px solid rgba(0,0,0,0.16)",
- background: "rgba(255,255,255,0.22)",
- boxShadow: "0 12px 28px rgba(0,0,0,0.12)",
+ border: `1px solid rgba(233,216,166,0.14)`,
+ background: "rgba(18, 18, 20, 0.40)",
+ boxShadow: "0 12px 30px rgba(0,0,0,0.45)",
+ backdropFilter: "blur(6px)",
},
adminTop: {
display: "flex",
@@ -914,7 +812,7 @@ const styles = {
},
adminTitle: {
fontWeight: 1000,
- color: "#20140c",
+ color: stylesTokens.textGold,
},
userRow: {
display: "grid",
@@ -922,14 +820,15 @@ const styles = {
gap: 8,
padding: 10,
borderRadius: 12,
- background: "rgba(255,255,255,0.50)",
- border: "1px solid rgba(0,0,0,0.08)",
+ background: "rgba(255,255,255,0.06)",
+ border: `1px solid rgba(233,216,166,0.10)`,
},
+ // Modal
modalOverlay: {
position: "fixed",
inset: 0,
- background: "rgba(0,0,0,0.45)",
+ background: "rgba(0,0,0,0.65)",
display: "flex",
alignItems: "center",
justifyContent: "center",
@@ -941,13 +840,13 @@ const styles = {
width: "100%",
maxWidth: 560,
borderRadius: 18,
- border: "1px solid rgba(0,0,0,0.25)",
- background:
- "linear-gradient(180deg, rgba(255,255,255,0.72), rgba(255,255,255,0.42))",
- boxShadow: "0 18px 50px rgba(0,0,0,0.35)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "linear-gradient(180deg, rgba(20,20,24,0.92), rgba(12,12,14,0.86))",
+ boxShadow: "0 18px 55px rgba(0,0,0,0.70)",
padding: 14,
backdropFilter: "blur(6px)",
animation: "popIn 160ms ease-out",
+ color: stylesTokens.textMain,
},
modalHeader: {
display: "flex",
@@ -959,14 +858,16 @@ const styles = {
width: 38,
height: 38,
borderRadius: 12,
- border: "1px solid rgba(0,0,0,0.25)",
- background: "rgba(255,255,255,0.60)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "rgba(255,255,255,0.06)",
+ color: stylesTokens.textGold,
fontWeight: 1000,
cursor: "pointer",
lineHeight: "38px",
textAlign: "center",
},
+ // Help
helpBody: {
marginTop: 10,
paddingTop: 4,
@@ -975,13 +876,13 @@ const styles = {
},
helpSectionTitle: {
fontWeight: 1000,
- color: "#20140c",
+ color: stylesTokens.textGold,
marginTop: 10,
marginBottom: 6,
},
helpText: {
- color: "#20140c",
- opacity: 0.9,
+ color: stylesTokens.textMain,
+ opacity: 0.92,
lineHeight: 1.35,
},
helpList: {
@@ -994,6 +895,7 @@ const styles = {
gridTemplateColumns: "42px 1fr",
gap: 10,
alignItems: "center",
+ color: stylesTokens.textMain,
},
helpBadge: {
display: "inline-flex",
@@ -1002,7 +904,7 @@ const styles = {
width: 38,
height: 38,
borderRadius: 12,
- border: "1px solid rgba(0,0,0,0.18)",
+ border: `1px solid rgba(233,216,166,0.18)`,
fontWeight: 1100,
fontSize: 18,
},
@@ -1013,16 +915,18 @@ const styles = {
width: 38,
height: 38,
borderRadius: 12,
- border: "1px solid rgba(0,0,0,0.18)",
- background: "rgba(255,255,255,0.55)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "rgba(255,255,255,0.06)",
+ color: stylesTokens.textGold,
fontWeight: 1100,
},
helpDivider: {
margin: "14px 0",
height: 1,
- background: "rgba(0,0,0,0.12)",
+ background: "rgba(233,216,166,0.12)",
},
+ // Login
loginPage: {
minHeight: "100dvh",
display: "flex",
@@ -1041,24 +945,26 @@ const styles = {
borderRadius: 22,
position: "relative",
zIndex: 2,
- border: "1px solid rgba(0,0,0,0.20)",
- background: "rgba(255,255,255,0.28)",
- boxShadow: "0 18px 55px rgba(0,0,0,0.28)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "rgba(18, 18, 20, 0.55)",
+ boxShadow: "0 18px 60px rgba(0,0,0,0.70)",
backdropFilter: "blur(8px)",
animation: "popIn 240ms ease-out",
+ color: stylesTokens.textMain,
},
loginTitle: {
fontFamily: '"Cinzel Decorative", "IM Fell English", system-ui',
fontWeight: 1000,
fontSize: 26,
- color: "#20140c",
+ color: stylesTokens.textGold,
textAlign: "center",
letterSpacing: 0.6,
},
loginSubtitle: {
marginTop: 6,
textAlign: "center",
- opacity: 0.85,
+ color: stylesTokens.textMain,
+ opacity: 0.9,
fontSize: 15,
lineHeight: 1.4,
},
@@ -1071,27 +977,29 @@ const styles = {
width: "100%",
padding: 10,
borderRadius: 12,
- border: "1px solid rgba(0,0,0,0.20)",
- background: "rgba(255,255,255,0.55)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "rgba(10,10,12,0.60)",
+ color: stylesTokens.textMain,
outline: "none",
fontSize: 16,
},
loginBtn: {
padding: "12px 14px",
borderRadius: 14,
- border: "1px solid rgba(0,0,0,0.26)",
- background:
- "linear-gradient(180deg, rgba(246,226,179,0.95), rgba(202,164,90,0.95))",
+ border: `1px solid rgba(233,216,166,0.28)`,
+ background: "linear-gradient(180deg, rgba(233,216,166,0.24), rgba(233,216,166,0.10))",
+ color: stylesTokens.textGold,
fontWeight: 1000,
fontSize: 16,
cursor: "pointer",
- boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
+ boxShadow: "inset 0 1px 0 rgba(255,255,255,0.08)",
},
loginHint: {
marginTop: 18,
fontSize: 13,
- opacity: 0.72,
+ opacity: 0.78,
textAlign: "center",
+ color: stylesTokens.textDim,
lineHeight: 1.35,
},
@@ -1100,9 +1008,9 @@ const styles = {
inset: 0,
pointerEvents: "none",
background: `
- radial-gradient(circle at 20% 25%, rgba(255, 200, 120, 0.22), rgba(0,0,0,0) 40%),
- radial-gradient(circle at 80% 30%, rgba(255, 210, 140, 0.18), rgba(0,0,0,0) 42%),
- radial-gradient(circle at 55% 75%, rgba(255, 180, 100, 0.12), rgba(0,0,0,0) 45%)
+ radial-gradient(circle at 20% 25%, rgba(255, 200, 120, 0.16), rgba(0,0,0,0) 40%),
+ radial-gradient(circle at 80% 30%, rgba(255, 210, 140, 0.12), rgba(0,0,0,0) 42%),
+ radial-gradient(circle at 55% 75%, rgba(255, 180, 100, 0.08), rgba(0,0,0,0) 45%)
`,
animation: "candleGlow 3.8s ease-in-out infinite",
mixBlendMode: "multiply",
@@ -1117,8 +1025,9 @@ const styles = {
flex: 1,
padding: 10,
borderRadius: "12px 0 0 12px",
- border: "1px solid rgba(0,0,0,0.20)",
- background: "rgba(255,255,255,0.55)",
+ border: `1px solid rgba(233,216,166,0.18)`,
+ background: "rgba(10,10,12,0.60)",
+ color: stylesTokens.textMain,
outline: "none",
minWidth: 0,
fontSize: 16,
@@ -1129,22 +1038,23 @@ const styles = {
alignItems: "center",
justifyContent: "center",
borderRadius: "0 12px 12px 0",
- border: "1px solid rgba(0,0,0,0.20)",
+ border: `1px solid rgba(233,216,166,0.18)`,
borderLeft: "none",
- background: "rgba(255,255,255,0.60)",
+ background: "rgba(255,255,255,0.06)",
+ color: stylesTokens.textGold,
cursor: "pointer",
fontWeight: 900,
padding: 0,
},
- // ✅ Background (FIXED) — unter Content (zIndex -1) und ohne blur() Filter
+ // Background
bgFixed: {
position: "fixed",
top: 0,
left: 0,
width: "100vw",
height: "100dvh",
- zIndex: -1, // ✅ war 0
+ zIndex: -1,
pointerEvents: "none",
transform: "translateZ(0)",
backfaceVisibility: "hidden",
@@ -1158,5 +1068,7 @@ const styles = {
backgroundSize: "cover",
backgroundPosition: "center",
backgroundRepeat: "no-repeat",
+ /* kleines Dark-Wash, damit Schwarz/Gold lesbar ist */
+ filter: "saturate(0.9) contrast(1.05) brightness(0.55)",
},
};