Redesign background and UI elements for improved clarity
Replaced the old radial gradient background with a blurred "Marauders Map" image and readability overlay. Removed "PaperCard" components and their torn paper effect in favor of a cleaner, modern card style. Updated styles for better readability, simplifying hover effects and improving status badge design.
This commit is contained in:
BIN
frontend/public/bg/marauders-map.jpg
Normal file
BIN
frontend/public/bg/marauders-map.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 190 KiB |
@@ -19,20 +19,6 @@ function cycleTag(tag) {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* PaperCard: "Pergamentkarte" mit torn edges.
|
|
||||||
* Wir legen die Edges bewusst über die Card, aber dezent.
|
|
||||||
*/
|
|
||||||
function PaperCard({ children, style }) {
|
|
||||||
return (
|
|
||||||
<div className="hp-card" style={{ ...styles.paperCard, ...style }}>
|
|
||||||
<div style={styles.paperEdgeTop} aria-hidden="true" />
|
|
||||||
<div style={styles.paperInner}>{children}</div>
|
|
||||||
<div style={styles.paperEdgeBottom} aria-hidden="true" />
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function AdminPanel() {
|
function AdminPanel() {
|
||||||
const [users, setUsers] = useState([]);
|
const [users, setUsers] = useState([]);
|
||||||
|
|
||||||
@@ -190,7 +176,7 @@ export default function App() {
|
|||||||
if (gs[0] && !gameId) setGameId(gs[0].id);
|
if (gs[0] && !gameId) setGameId(gs[0].id);
|
||||||
};
|
};
|
||||||
|
|
||||||
// ✅ Google Fonts laden (damit es auch am Handy klappt)
|
// ✅ Google Fonts laden
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (document.getElementById("hp-fonts")) return;
|
if (document.getElementById("hp-fonts")) return;
|
||||||
|
|
||||||
@@ -216,7 +202,7 @@ export default function App() {
|
|||||||
document.head.appendChild(link);
|
document.head.appendChild(link);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// ✅ Keyframes / Animationen
|
// ✅ Keyframes
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (document.getElementById("hp-anim-style")) return;
|
if (document.getElementById("hp-anim-style")) return;
|
||||||
const style = document.createElement("style");
|
const style = document.createElement("style");
|
||||||
@@ -237,46 +223,18 @@ export default function App() {
|
|||||||
document.head.appendChild(style);
|
document.head.appendChild(style);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// ✅ Hintergrund + ✅ Performance Fix für Mobile
|
// ✅ Background: Rumtreiberkarte (blurred) + Overlay (lesbar)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const bg = `radial-gradient(circle at 12% 18%, rgba(120,80,30,0.16), rgba(0,0,0,0) 38%),
|
// html/body reset
|
||||||
radial-gradient(circle at 85% 22%, rgba(120,80,30,0.10), rgba(0,0,0,0) 42%),
|
|
||||||
radial-gradient(circle at 35% 82%, rgba(120,80,30,0.08), rgba(0,0,0,0) 45%),
|
|
||||||
radial-gradient(circle at 70% 75%, rgba(90,60,25,0.08), rgba(0,0,0,0) 40%),
|
|
||||||
repeating-linear-gradient(0deg,
|
|
||||||
rgba(255,255,255,0.02),
|
|
||||||
rgba(255,255,255,0.02) 4px,
|
|
||||||
rgba(0,0,0,0.02) 8px
|
|
||||||
),
|
|
||||||
linear-gradient(180deg, #f1e2c2, #e3c996)`;
|
|
||||||
|
|
||||||
document.documentElement.style.height = "100%";
|
document.documentElement.style.height = "100%";
|
||||||
document.body.style.height = "100%";
|
document.body.style.height = "100%";
|
||||||
document.documentElement.style.margin = "0";
|
document.documentElement.style.margin = "0";
|
||||||
document.body.style.margin = "0";
|
document.body.style.margin = "0";
|
||||||
document.documentElement.style.padding = "0";
|
document.documentElement.style.padding = "0";
|
||||||
document.body.style.padding = "0";
|
document.body.style.padding = "0";
|
||||||
|
|
||||||
document.documentElement.style.background = bg;
|
|
||||||
document.body.style.background = bg;
|
|
||||||
|
|
||||||
const isTouch =
|
|
||||||
"ontouchstart" in window || (navigator && navigator.maxTouchPoints > 0);
|
|
||||||
|
|
||||||
if (isTouch) {
|
|
||||||
document.documentElement.style.backgroundAttachment = "scroll";
|
|
||||||
document.body.style.backgroundAttachment = "scroll";
|
|
||||||
}
|
|
||||||
|
|
||||||
const root = document.getElementById("root");
|
|
||||||
if (root) {
|
|
||||||
root.style.minHeight = "100dvh";
|
|
||||||
root.style.background = "transparent";
|
|
||||||
root.style.overflowX = "hidden";
|
|
||||||
}
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// ✅ Global CSS Fixes + moderne Hover-UX
|
// ✅ Global CSS (NO HOVER on rows, NO paper edges)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (document.getElementById("hp-global-style")) return;
|
if (document.getElementById("hp-global-style")) return;
|
||||||
const style = document.createElement("style");
|
const style = document.createElement("style");
|
||||||
@@ -284,24 +242,49 @@ export default function App() {
|
|||||||
style.innerHTML = `
|
style.innerHTML = `
|
||||||
html, body {
|
html, body {
|
||||||
overscroll-behavior-y: none;
|
overscroll-behavior-y: none;
|
||||||
background: transparent;
|
|
||||||
-webkit-text-size-adjust: 100%;
|
-webkit-text-size-adjust: 100%;
|
||||||
text-rendering: optimizeLegibility;
|
text-rendering: optimizeLegibility;
|
||||||
-webkit-font-smoothing: antialiased;
|
-webkit-font-smoothing: antialiased;
|
||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
background: #1c140d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Rumtreiberkarte Layer (Image in /public/bg/marauders-map.jpg) */
|
||||||
|
body::before {
|
||||||
|
content: "";
|
||||||
|
position: fixed;
|
||||||
|
inset: 0;
|
||||||
|
z-index: -2;
|
||||||
|
background-image: url("/bg/marauders-map.jpg");
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
filter: blur(8px) saturate(1.1) contrast(1.05) brightness(0.95);
|
||||||
|
transform: scale(1.05); /* Blur edges vermeiden */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lesbarkeits-Overlay (warm parchment wash) */
|
||||||
|
body::after {
|
||||||
|
content: "";
|
||||||
|
position: fixed;
|
||||||
|
inset: 0;
|
||||||
|
z-index: -1;
|
||||||
|
background:
|
||||||
|
radial-gradient(circle at 15% 20%, rgba(255,220,160,0.18), rgba(0,0,0,0) 40%),
|
||||||
|
radial-gradient(circle at 80% 30%, rgba(255,210,140,0.14), rgba(0,0,0,0) 42%),
|
||||||
|
linear-gradient(180deg, rgba(241,226,194,0.78), rgba(227,201,150,0.78));
|
||||||
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
touch-action: pan-y;
|
touch-action: pan-y;
|
||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
}
|
}
|
||||||
|
|
||||||
#root { background: transparent; }
|
#root { background: transparent; }
|
||||||
|
|
||||||
/* Moderner Hover (perf: nur transform/opacity) */
|
/* WICHTIG: Kein Row-Hover mehr */
|
||||||
.hp-card { transition: transform 160ms ease, box-shadow 160ms ease; }
|
.hp-row:hover { background: inherit !important; }
|
||||||
.hp-card:hover { transform: translateY(-2px); box-shadow: 0 18px 40px rgba(0,0,0,0.18); }
|
|
||||||
.hp-row { transition: background 140ms ease; }
|
|
||||||
.hp-row:hover { background: rgba(255,255,255,0.34) !important; }
|
|
||||||
`;
|
`;
|
||||||
document.head.appendChild(style);
|
document.head.appendChild(style);
|
||||||
}, []);
|
}, []);
|
||||||
@@ -395,7 +378,7 @@ export default function App() {
|
|||||||
return (
|
return (
|
||||||
<div style={styles.loginPage}>
|
<div style={styles.loginPage}>
|
||||||
<div style={styles.candleGlowLayer} aria-hidden="true" />
|
<div style={styles.candleGlowLayer} aria-hidden="true" />
|
||||||
<PaperCard style={styles.loginCard}>
|
<div style={styles.loginCard}>
|
||||||
<div style={styles.loginTitle}>Zauber-Detektiv Notizbogen</div>
|
<div style={styles.loginTitle}>Zauber-Detektiv Notizbogen</div>
|
||||||
|
|
||||||
<div style={styles.loginSubtitle}>
|
<div style={styles.loginSubtitle}>
|
||||||
@@ -445,7 +428,7 @@ export default function App() {
|
|||||||
Deine Notizen bleiben privat – jeder Spieler sieht nur seinen eigenen
|
Deine Notizen bleiben privat – jeder Spieler sieht nur seinen eigenen
|
||||||
Zettel.
|
Zettel.
|
||||||
</div>
|
</div>
|
||||||
</PaperCard>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -463,7 +446,7 @@ export default function App() {
|
|||||||
if (status === 1) return "rgba(255, 0, 0, 0.055)";
|
if (status === 1) return "rgba(255, 0, 0, 0.055)";
|
||||||
if (status === 2) return "rgba(0, 170, 60, 0.06)";
|
if (status === 2) return "rgba(0, 170, 60, 0.06)";
|
||||||
if (status === 3) return "rgba(90, 90, 90, 0.10)";
|
if (status === 3) return "rgba(90, 90, 90, 0.10)";
|
||||||
return "rgba(255,255,255,0.18)";
|
return "rgba(255,255,255,0.16)";
|
||||||
};
|
};
|
||||||
|
|
||||||
const getNameColor = (status) => {
|
const getNameColor = (status) => {
|
||||||
@@ -477,14 +460,14 @@ export default function App() {
|
|||||||
if (status === 2) return "✓";
|
if (status === 2) return "✓";
|
||||||
if (status === 1) return "✕";
|
if (status === 1) return "✕";
|
||||||
if (status === 3) return "?";
|
if (status === 3) return "?";
|
||||||
return "•";
|
return "–";
|
||||||
};
|
};
|
||||||
|
|
||||||
const getStatusSymbolColor = (status) => {
|
const getStatusBadge = (status) => {
|
||||||
if (status === 2) return "#0b6a1e";
|
if (status === 2) return { color: "#0b6a1e", background: "rgba(0,170,60,0.10)" };
|
||||||
if (status === 1) return "#b10000";
|
if (status === 1) return { color: "#b10000", background: "rgba(255,0,0,0.10)" };
|
||||||
if (status === 3) return "#444444";
|
if (status === 3) return { color: "#444444", background: "rgba(120,120,120,0.12)" };
|
||||||
return "rgba(30,20,12,0.55)";
|
return { color: "rgba(30,20,12,0.60)", background: "rgba(255,255,255,0.26)" };
|
||||||
};
|
};
|
||||||
|
|
||||||
const closeHelp = () => setHelpOpen(false);
|
const closeHelp = () => setHelpOpen(false);
|
||||||
@@ -512,7 +495,7 @@ export default function App() {
|
|||||||
|
|
||||||
{/* Spiel + Hilfe */}
|
{/* Spiel + Hilfe */}
|
||||||
<div style={{ marginTop: 14 }}>
|
<div style={{ marginTop: 14 }}>
|
||||||
<PaperCard>
|
<div style={styles.card}>
|
||||||
<div style={styles.sectionHeader}>Spiel</div>
|
<div style={styles.sectionHeader}>Spiel</div>
|
||||||
<div style={styles.cardBody}>
|
<div style={styles.cardBody}>
|
||||||
<select
|
<select
|
||||||
@@ -536,7 +519,7 @@ export default function App() {
|
|||||||
Hilfe
|
Hilfe
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</PaperCard>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Hilfe Modal */}
|
{/* Hilfe Modal */}
|
||||||
@@ -545,13 +528,19 @@ export default function App() {
|
|||||||
<div style={styles.modalCard} onMouseDown={(e) => e.stopPropagation()}>
|
<div style={styles.modalCard} onMouseDown={(e) => e.stopPropagation()}>
|
||||||
<div style={styles.modalHeader}>
|
<div style={styles.modalHeader}>
|
||||||
<div style={{ fontWeight: 1000, color: "#20140c" }}>Hilfe</div>
|
<div style={{ fontWeight: 1000, color: "#20140c" }}>Hilfe</div>
|
||||||
<button onClick={closeHelp} style={styles.modalCloseBtn} aria-label="Schließen">
|
<button
|
||||||
|
onClick={closeHelp}
|
||||||
|
style={styles.modalCloseBtn}
|
||||||
|
aria-label="Schließen"
|
||||||
|
>
|
||||||
✕
|
✕
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style={styles.helpBody}>
|
<div style={styles.helpBody}>
|
||||||
<div style={styles.helpSectionTitle}>1) Namen anklicken (Status)</div>
|
<div style={styles.helpSectionTitle}>
|
||||||
|
1) Namen anklicken (Status)
|
||||||
|
</div>
|
||||||
<div style={styles.helpText}>
|
<div style={styles.helpText}>
|
||||||
Tippe auf einen Namen, um den Status zu wechseln. Reihenfolge:
|
Tippe auf einen Namen, um den Status zu wechseln. Reihenfolge:
|
||||||
</div>
|
</div>
|
||||||
@@ -561,33 +550,25 @@ export default function App() {
|
|||||||
<span style={{ ...styles.helpBadge, background: "rgba(0,170,60,0.12)", color: "#0b6a1e" }}>
|
<span style={{ ...styles.helpBadge, background: "rgba(0,170,60,0.12)", color: "#0b6a1e" }}>
|
||||||
✓
|
✓
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div><b>Grün</b> = bestätigt / fix richtig</div>
|
||||||
<b>Grün</b> = bestätigt / fix richtig
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div style={styles.helpListRow}>
|
<div style={styles.helpListRow}>
|
||||||
<span style={{ ...styles.helpBadge, background: "rgba(255,0,0,0.10)", color: "#b10000" }}>
|
<span style={{ ...styles.helpBadge, background: "rgba(255,0,0,0.10)", color: "#b10000" }}>
|
||||||
✕
|
✕
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div><b>Rot</b> = ausgeschlossen / fix falsch</div>
|
||||||
<b>Rot</b> = ausgeschlossen / fix falsch
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div style={styles.helpListRow}>
|
<div style={styles.helpListRow}>
|
||||||
<span style={{ ...styles.helpBadge, background: "rgba(120,120,120,0.14)", color: "#444" }}>
|
<span style={{ ...styles.helpBadge, background: "rgba(120,120,120,0.14)", color: "#444" }}>
|
||||||
?
|
?
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div><b>Grau</b> = unsicher / „vielleicht“</div>
|
||||||
<b>Grau</b> = unsicher / „vielleicht“
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div style={styles.helpListRow}>
|
<div style={styles.helpListRow}>
|
||||||
<span style={{ ...styles.helpBadge, background: "rgba(255,255,255,0.35)", color: "#20140c" }}>
|
<span style={{ ...styles.helpBadge, background: "rgba(255,255,255,0.30)", color: "#20140c" }}>
|
||||||
•
|
–
|
||||||
</span>
|
</span>
|
||||||
<div>
|
<div><b>Leer</b> = unknown / noch nicht bewertet</div>
|
||||||
<b>Leer</b> = unknown / noch nicht bewertet
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -601,34 +582,27 @@ export default function App() {
|
|||||||
<div style={styles.helpList}>
|
<div style={styles.helpList}>
|
||||||
<div style={styles.helpListRow}>
|
<div style={styles.helpListRow}>
|
||||||
<span style={styles.helpMiniTag}>i</span>
|
<span style={styles.helpMiniTag}>i</span>
|
||||||
<div>
|
<div><b>i</b> = „Ich habe diese Geheimkarte“</div>
|
||||||
<b>i</b> = „Ich habe diese Geheimkarte“
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div style={styles.helpListRow}>
|
<div style={styles.helpListRow}>
|
||||||
<span style={styles.helpMiniTag}>m</span>
|
<span style={styles.helpMiniTag}>m</span>
|
||||||
<div>
|
<div><b>m</b> = „Geheimkarte aus dem mittleren Deck“</div>
|
||||||
<b>m</b> = „Geheimkarte aus dem mittleren Deck“
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div style={styles.helpListRow}>
|
<div style={styles.helpListRow}>
|
||||||
<span style={styles.helpMiniTag}>s</span>
|
<span style={styles.helpMiniTag}>s</span>
|
||||||
<div>
|
<div><b>s</b> = „Ein anderer Spieler hat diese Karte“</div>
|
||||||
<b>s</b> = „Ein anderer Spieler hat diese Karte“
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div style={styles.helpListRow}>
|
<div style={styles.helpListRow}>
|
||||||
<span style={styles.helpMiniTag}>—</span>
|
<span style={styles.helpMiniTag}>—</span>
|
||||||
<div>
|
<div><b>—</b> = keine Notiz</div>
|
||||||
<b>—</b> = keine Notiz
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style={styles.helpDivider} />
|
<div style={styles.helpDivider} />
|
||||||
|
|
||||||
<div style={styles.helpText}>
|
<div style={styles.helpText}>
|
||||||
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.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -638,11 +612,13 @@ export default function App() {
|
|||||||
{/* Sheet */}
|
{/* Sheet */}
|
||||||
<div style={{ marginTop: 14, display: "grid", gap: 14 }}>
|
<div style={{ marginTop: 14, display: "grid", gap: 14 }}>
|
||||||
{sections.map((sec) => (
|
{sections.map((sec) => (
|
||||||
<PaperCard key={sec.key}>
|
<div key={sec.key} style={styles.card}>
|
||||||
<div style={styles.sectionHeader}>{sec.title}</div>
|
<div style={styles.sectionHeader}>{sec.title}</div>
|
||||||
|
|
||||||
<div style={styles.tableWrap}>
|
<div style={{ display: "grid" }}>
|
||||||
{sec.entries.map((e) => (
|
{sec.entries.map((e) => {
|
||||||
|
const badge = getStatusBadge(e.status);
|
||||||
|
return (
|
||||||
<div
|
<div
|
||||||
key={e.entry_id}
|
key={e.entry_id}
|
||||||
className="hp-row"
|
className="hp-row"
|
||||||
@@ -669,8 +645,8 @@ export default function App() {
|
|||||||
<span
|
<span
|
||||||
style={{
|
style={{
|
||||||
...styles.statusBadge,
|
...styles.statusBadge,
|
||||||
color: getStatusSymbolColor(e.status),
|
color: badge.color,
|
||||||
borderColor: "rgba(0,0,0,0.22)",
|
background: badge.background,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{getStatusSymbol(e.status)}
|
{getStatusSymbol(e.status)}
|
||||||
@@ -685,9 +661,10 @@ export default function App() {
|
|||||||
{e.note_tag || "—"}
|
{e.note_tag || "—"}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
))}
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</PaperCard>
|
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -698,50 +675,12 @@ export default function App() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ===== Styles ===== */
|
/* ===== Styles ===== */
|
||||||
|
|
||||||
const PAPER_EDGE_SVG =
|
|
||||||
"data:image/svg+xml;utf8," +
|
|
||||||
encodeURIComponent(`
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="260" height="18" viewBox="0 0 260 18">
|
|
||||||
<!-- torn silhouette -->
|
|
||||||
<path d="M0,14
|
|
||||||
C14,18 26,9 40,14
|
|
||||||
C54,19 68,9 82,14
|
|
||||||
C98,20 110,10 126,14
|
|
||||||
C142,18 156,10 172,14
|
|
||||||
C188,18 202,10 218,14
|
|
||||||
C234,18 246,12 260,14
|
|
||||||
L260,0 L0,0 Z"
|
|
||||||
fill="rgba(255,255,255,0.92)"/>
|
|
||||||
<!-- ink edge -->
|
|
||||||
<path d="M0,14
|
|
||||||
C14,18 26,9 40,14
|
|
||||||
C54,19 68,9 82,14
|
|
||||||
C98,20 110,10 126,14
|
|
||||||
C142,18 156,10 172,14
|
|
||||||
C188,18 202,10 218,14
|
|
||||||
C234,18 246,12 260,14"
|
|
||||||
fill="none" stroke="rgba(0,0,0,0.18)" stroke-width="1.2" stroke-linecap="round"/>
|
|
||||||
</svg>
|
|
||||||
`);
|
|
||||||
|
|
||||||
const styles = {
|
const styles = {
|
||||||
page: {
|
page: {
|
||||||
minHeight: "100dvh",
|
minHeight: "100dvh",
|
||||||
margin: 0,
|
margin: 0,
|
||||||
padding: 0,
|
padding: 0,
|
||||||
background: `
|
background: "transparent",
|
||||||
radial-gradient(circle at 12% 18%, rgba(120,80,30,0.16), rgba(0,0,0,0) 38%),
|
|
||||||
radial-gradient(circle at 85% 22%, rgba(120,80,30,0.10), rgba(0,0,0,0) 42%),
|
|
||||||
radial-gradient(circle at 35% 82%, rgba(120,80,30,0.08), rgba(0,0,0,0) 45%),
|
|
||||||
radial-gradient(circle at 70% 75%, rgba(90,60,25,0.08), rgba(0,0,0,0) 40%),
|
|
||||||
repeating-linear-gradient(0deg,
|
|
||||||
rgba(255,255,255,0.02),
|
|
||||||
rgba(255,255,255,0.02) 4px,
|
|
||||||
rgba(0,0,0,0.02) 8px
|
|
||||||
),
|
|
||||||
linear-gradient(180deg, #f1e2c2, #e3c996)
|
|
||||||
`,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
shell: {
|
shell: {
|
||||||
@@ -764,6 +703,14 @@ const styles = {
|
|||||||
backdropFilter: "blur(4px)",
|
backdropFilter: "blur(4px)",
|
||||||
},
|
},
|
||||||
|
|
||||||
|
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)",
|
||||||
|
},
|
||||||
|
|
||||||
cardBody: {
|
cardBody: {
|
||||||
padding: 12,
|
padding: 12,
|
||||||
display: "flex",
|
display: "flex",
|
||||||
@@ -771,78 +718,17 @@ const styles = {
|
|||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
},
|
},
|
||||||
|
|
||||||
// ===== PAPER CARD =====
|
|
||||||
paperCard: {
|
|
||||||
position: "relative",
|
|
||||||
borderRadius: 18,
|
|
||||||
overflow: "hidden",
|
|
||||||
border: "1px solid rgba(0,0,0,0.16)",
|
|
||||||
background: "rgba(255,255,255,0.28)",
|
|
||||||
boxShadow:
|
|
||||||
"0 18px 40px rgba(0,0,0,0.16), inset 0 1px 0 rgba(255,255,255,0.55)",
|
|
||||||
},
|
|
||||||
paperInner: {
|
|
||||||
position: "relative",
|
|
||||||
zIndex: 1,
|
|
||||||
},
|
|
||||||
paperEdgeTop: {
|
|
||||||
position: "absolute",
|
|
||||||
left: -2,
|
|
||||||
right: -2,
|
|
||||||
top: -1,
|
|
||||||
height: 16,
|
|
||||||
zIndex: 3,
|
|
||||||
pointerEvents: "none",
|
|
||||||
backgroundImage: `url("${PAPER_EDGE_SVG}")`,
|
|
||||||
backgroundRepeat: "repeat-x",
|
|
||||||
backgroundSize: "260px 16px",
|
|
||||||
opacity: 0.75,
|
|
||||||
mixBlendMode: "multiply",
|
|
||||||
},
|
|
||||||
paperEdgeBottom: {
|
|
||||||
position: "absolute",
|
|
||||||
left: -2,
|
|
||||||
right: -2,
|
|
||||||
bottom: -1,
|
|
||||||
height: 16,
|
|
||||||
zIndex: 3,
|
|
||||||
pointerEvents: "none",
|
|
||||||
backgroundImage: `url("${PAPER_EDGE_SVG}")`,
|
|
||||||
backgroundRepeat: "repeat-x",
|
|
||||||
backgroundSize: "260px 16px",
|
|
||||||
opacity: 0.75,
|
|
||||||
mixBlendMode: "multiply",
|
|
||||||
transform: "scaleY(-1)",
|
|
||||||
},
|
|
||||||
|
|
||||||
// Header: weniger 2008, mehr "ink+gold"
|
|
||||||
sectionHeader: {
|
sectionHeader: {
|
||||||
padding: "11px 14px",
|
padding: "11px 14px",
|
||||||
fontWeight: 1000,
|
fontWeight: 1000,
|
||||||
fontFamily: '"Cinzel Decorative", "IM Fell English", system-ui',
|
fontFamily: '"Cinzel Decorative", "IM Fell English", system-ui',
|
||||||
letterSpacing: 1.0,
|
letterSpacing: 1.0,
|
||||||
color: "rgba(25,16,10,0.95)",
|
color: "rgba(25,16,10,0.95)",
|
||||||
background: `
|
background:
|
||||||
linear-gradient(180deg, rgba(210,170,90,0.95), rgba(150,110,35,0.95)),
|
"linear-gradient(180deg, rgba(210,170,90,0.95), rgba(150,110,35,0.95))",
|
||||||
repeating-linear-gradient(90deg, rgba(255,255,255,0.06), rgba(255,255,255,0.06) 6px, rgba(0,0,0,0.03) 10px)
|
|
||||||
`,
|
|
||||||
borderBottom: "1px solid rgba(0,0,0,0.22)",
|
borderBottom: "1px solid rgba(0,0,0,0.22)",
|
||||||
textTransform: "uppercase",
|
textTransform: "uppercase",
|
||||||
textShadow: "0 1px 0 rgba(255,255,255,0.20)",
|
textShadow: "0 1px 0 rgba(255,255,255,0.20)",
|
||||||
position: "relative",
|
|
||||||
},
|
|
||||||
|
|
||||||
// "notebook lines" look
|
|
||||||
tableWrap: {
|
|
||||||
background: `
|
|
||||||
repeating-linear-gradient(
|
|
||||||
180deg,
|
|
||||||
rgba(0,0,0,0.045),
|
|
||||||
rgba(0,0,0,0.045) 1px,
|
|
||||||
rgba(0,0,0,0) 1px,
|
|
||||||
rgba(0,0,0,0) 38px
|
|
||||||
)
|
|
||||||
`,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
row: {
|
row: {
|
||||||
@@ -852,13 +738,11 @@ const styles = {
|
|||||||
padding: "12px 14px",
|
padding: "12px 14px",
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
borderBottom: "1px solid rgba(0,0,0,0.08)",
|
borderBottom: "1px solid rgba(0,0,0,0.08)",
|
||||||
background: "rgba(255,255,255,0.18)",
|
|
||||||
},
|
},
|
||||||
|
|
||||||
name: {
|
name: {
|
||||||
cursor: "pointer",
|
cursor: "pointer",
|
||||||
userSelect: "none",
|
userSelect: "none",
|
||||||
color: "#20140c",
|
|
||||||
fontWeight: 800,
|
fontWeight: 800,
|
||||||
letterSpacing: 0.2,
|
letterSpacing: 0.2,
|
||||||
},
|
},
|
||||||
@@ -868,6 +752,7 @@ const styles = {
|
|||||||
justifyContent: "center",
|
justifyContent: "center",
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
},
|
},
|
||||||
|
|
||||||
statusBadge: {
|
statusBadge: {
|
||||||
width: 34,
|
width: 34,
|
||||||
height: 34,
|
height: 34,
|
||||||
@@ -876,7 +761,6 @@ const styles = {
|
|||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
borderRadius: 999,
|
borderRadius: 999,
|
||||||
border: "1px solid rgba(0,0,0,0.22)",
|
border: "1px solid rgba(0,0,0,0.22)",
|
||||||
background: "rgba(255,255,255,0.38)",
|
|
||||||
fontWeight: 1100,
|
fontWeight: 1100,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
|
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
|
||||||
@@ -920,7 +804,6 @@ const styles = {
|
|||||||
background: "linear-gradient(180deg, rgba(246,226,179,0.95), rgba(202,164,90,0.95))",
|
background: "linear-gradient(180deg, rgba(246,226,179,0.95), rgba(202,164,90,0.95))",
|
||||||
fontWeight: 1000,
|
fontWeight: 1000,
|
||||||
cursor: "pointer",
|
cursor: "pointer",
|
||||||
transition: "transform 140ms ease, box-shadow 140ms ease",
|
|
||||||
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
|
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -931,7 +814,6 @@ const styles = {
|
|||||||
background: "rgba(255,255,255,0.46)",
|
background: "rgba(255,255,255,0.46)",
|
||||||
fontWeight: 900,
|
fontWeight: 900,
|
||||||
cursor: "pointer",
|
cursor: "pointer",
|
||||||
transition: "transform 140ms ease, box-shadow 140ms ease",
|
|
||||||
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
|
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -941,7 +823,7 @@ const styles = {
|
|||||||
padding: 12,
|
padding: 12,
|
||||||
borderRadius: 16,
|
borderRadius: 16,
|
||||||
border: "1px solid rgba(0,0,0,0.16)",
|
border: "1px solid rgba(0,0,0,0.16)",
|
||||||
background: "rgba(255,255,255,0.26)",
|
background: "rgba(255,255,255,0.22)",
|
||||||
boxShadow: "0 12px 28px rgba(0,0,0,0.12)",
|
boxShadow: "0 12px 28px rgba(0,0,0,0.12)",
|
||||||
},
|
},
|
||||||
adminTop: {
|
adminTop: {
|
||||||
@@ -953,7 +835,6 @@ const styles = {
|
|||||||
adminTitle: {
|
adminTitle: {
|
||||||
fontWeight: 1000,
|
fontWeight: 1000,
|
||||||
color: "#20140c",
|
color: "#20140c",
|
||||||
marginBottom: 0,
|
|
||||||
},
|
},
|
||||||
userRow: {
|
userRow: {
|
||||||
display: "grid",
|
display: "grid",
|
||||||
@@ -1072,23 +953,19 @@ const styles = {
|
|||||||
position: "relative",
|
position: "relative",
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
padding: 20,
|
padding: 20,
|
||||||
background: `
|
background: "transparent",
|
||||||
radial-gradient(circle at 12% 18%, rgba(120,80,30,0.16), rgba(0,0,0,0) 38%),
|
|
||||||
radial-gradient(circle at 85% 22%, rgba(120,80,30,0.10), rgba(0,0,0,0) 42%),
|
|
||||||
radial-gradient(circle at 35% 82%, rgba(120,80,30,0.08), rgba(0,0,0,0) 45%),
|
|
||||||
repeating-linear-gradient(0deg,
|
|
||||||
rgba(255,255,255,0.02),
|
|
||||||
rgba(255,255,255,0.02) 4px,
|
|
||||||
rgba(0,0,0,0.02) 8px
|
|
||||||
),
|
|
||||||
linear-gradient(180deg, #f1e2c2, #e3c996)
|
|
||||||
`,
|
|
||||||
},
|
},
|
||||||
loginCard: {
|
loginCard: {
|
||||||
width: "100%",
|
width: "100%",
|
||||||
maxWidth: 420,
|
maxWidth: 420,
|
||||||
padding: 26,
|
padding: 26,
|
||||||
borderRadius: 22,
|
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)",
|
||||||
|
backdropFilter: "blur(8px)",
|
||||||
animation: "popIn 240ms ease-out",
|
animation: "popIn 240ms ease-out",
|
||||||
},
|
},
|
||||||
loginTitle: {
|
loginTitle: {
|
||||||
@@ -1128,7 +1005,6 @@ const styles = {
|
|||||||
fontWeight: 1000,
|
fontWeight: 1000,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
cursor: "pointer",
|
cursor: "pointer",
|
||||||
transition: "transform 140ms ease, box-shadow 140ms ease",
|
|
||||||
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
|
boxShadow: "inset 0 1px 0 rgba(255,255,255,0.55)",
|
||||||
},
|
},
|
||||||
loginHint: {
|
loginHint: {
|
||||||
|
|||||||
Reference in New Issue
Block a user