- {hint}
+ /**
+ * ✅ Unified Placeholder system
+ * Variants:
+ * - "compact": small top / dice (low height)
+ * - "tile": normal cards (HUD, decks, etc.)
+ * - "panel": large container (Board)
+ */
+ const PlaceholderCard = ({
+ title,
+ subtitle = "(placeholder)",
+ variant = "tile",
+ icon = null,
+ children = null,
+ }) => {
+ const v = variant;
+
+ const pad = v === "compact" ? 10 : v === "panel" ? 14 : 12;
+ const titleSize = v === "compact" ? 12.5 : v === "panel" ? 14.5 : 13;
+ const subSize = v === "compact" ? 11.5 : 12;
+ const dashHeight = v === "compact" ? 46 : v === "panel" ? null : 64;
+
+ const base = {
+ borderRadius: 18,
+ border: `1px solid ${stylesTokens.panelBorder}`,
+ background: stylesTokens.panelBg,
+ boxShadow: v === "panel" ? "0 20px 70px rgba(0,0,0,0.45)" : "0 12px 30px rgba(0,0,0,0.35)",
+ backdropFilter: "blur(10px)",
+ padding: pad,
+ overflow: "hidden",
+ minWidth: 0,
+ position: "relative",
+ };
+
+ const headerRow = {
+ display: "flex",
+ alignItems: "center",
+ justifyContent: "space-between",
+ gap: 10,
+ };
+
+ const titleStyle = {
+ fontWeight: 900,
+ color: stylesTokens.textMain,
+ fontSize: titleSize,
+ letterSpacing: 0.2,
+ lineHeight: 1.15,
+ };
+
+ const subStyle = {
+ marginTop: 6,
+ color: stylesTokens.textDim,
+ fontSize: subSize,
+ opacity: 0.95,
+ lineHeight: 1.25,
+ };
+
+ const dashStyle = {
+ marginTop: v === "compact" ? 8 : 10,
+ height: dashHeight,
+ borderRadius: 14,
+ border: `1px dashed ${stylesTokens.panelBorder}`,
+ opacity: 0.75,
+ };
+
+ const glowLine = v === "panel"
+ ? {
+ content: '""',
+ position: "absolute",
+ inset: 0,
+ background: `linear-gradient(90deg, transparent, ${stylesTokens.goldLine}, transparent)`,
+ opacity: 0.18,
+ pointerEvents: "none",
+ }
+ : null;
+
+ return (
+
+ {v === "panel" ?
: null}
+
+
+
+
+ {icon ?
{icon}
: null}
+
+ {title}
+
+
+
+
+ {subtitle ?
{subtitle}
: null}
+
+ {/* Content area */}
+ {children ? (
+
{children}
+ ) : v === "panel" ? null : (
+
+ )}
- ) : null}
-
-
- );
+
+ );
+ };
// Player rail placeholder (rechts vom Board, vor Notizen)
const players = [
@@ -303,69 +372,44 @@ export default function App() {