diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index 18d87dc..7925ec8 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -1,3 +1,4 @@
+// frontend/src/App.jsx
import React, { useEffect, useRef, useState } from "react";
import { api } from "./api/client";
@@ -241,6 +242,7 @@ export default function App() {
variant = "tile",
icon = null,
children = null,
+ overflow = "hidden", // ✅ FIX: allow some tiles to not clip neighbors
}) => {
const v = variant;
@@ -256,7 +258,7 @@ export default function App() {
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",
+ overflow, // ✅ FIX: default hidden, but can be visible where needed
minWidth: 0,
position: "relative",
};
@@ -292,16 +294,17 @@ export default function App() {
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;
+ const glowLine =
+ v === "panel"
+ ? {
+ content: '""',
+ position: "absolute",
+ inset: 0,
+ background: `linear-gradient(90deg, transparent, ${stylesTokens.goldLine}, transparent)`,
+ opacity: 0.18,
+ pointerEvents: "none",
+ }
+ : null;
return (
@@ -424,306 +427,295 @@ export default function App() {
};
const HogwartsPointsCard = ({ value = 0 }) => {
- const GOLD = "#f2d27a";
+ const GOLD = "#f2d27a";
- return (
-
- {/* Dünnes Pergament */}
-
- {/* Papier-Flecken */}
-
-
- {/* Innere Goldlinie */}
-
-
- {/* Wert */}
-
-
- {value}
-
-
-
- HP
-
-
-
- {/* Siegel */}
-
- SCORE
-
-
-
- );
-};
-
- const PlayerIdentityCard = ({
- name = "Harry Potter",
- houseLabel = "Gryffindor",
- borderColor = "#7c4dff",
- img = "/player_cards/harry.png",
-}) => {
- return (
-
- {/* Slot-Container: bleibt ruhig, Karte darf drüber schauen */}
+ return (
- {/* Die Karte selbst (kleiner als Container) */}
{
- // einfacher Tilt ohne extra libs
- const rect = e.currentTarget.getBoundingClientRect();
- const x = (e.clientX - rect.left) / rect.width; // 0..1
- const y = (e.clientY - rect.top) / rect.height; // 0..1
- const rx = (0.5 - y) * 6; // tilt range
- const ry = (x - 0.5) * 8;
-
- e.currentTarget.style.transform = `translateY(-16px) rotate(-0.6deg) perspective(700px) rotateX(${rx}deg) rotateY(${ry}deg)`;
- }}
- onMouseLeave={(e) => {
- e.currentTarget.style.transform = "translateY(-10px) rotate(-0.6deg)";
- }}
- onMouseEnter={(e) => {
- e.currentTarget.style.transform = "translateY(-18px) rotate(-0.6deg)";
- e.currentTarget.style.boxShadow = `0 26px 70px rgba(0,0,0,0.62), 0 0 34px ${borderColor}`;
+ overflow: "hidden",
+ display: "grid",
+ placeItems: "center",
+ padding: "14px 16px",
}}
>
- {/* Image */}
-

-
- {/* Gloss */}
- {/* Bottom label glass */}
+ />
+
+
- {name}
+ {value}
-
- {houseLabel}
+ HP
- {/* Corner tag */}
- Identity
+ SCORE
-
- );
-};
+ );
+ };
+ const PlayerIdentityCard = ({
+ name = "Harry Potter",
+ houseLabel = "Gryffindor",
+ borderColor = "#7c4dff",
+ img = "/player_cards/harry.png",
+ }) => {
+ return (
+
+
+
{
+ const rect = e.currentTarget.getBoundingClientRect();
+ const x = (e.clientX - rect.left) / rect.width;
+ const y = (e.clientY - rect.top) / rect.height;
+ const rx = (0.5 - y) * 6;
+ const ry = (x - 0.5) * 8;
+ e.currentTarget.style.transform = `translateY(-16px) rotate(-0.6deg) perspective(700px) rotateX(${rx}deg) rotateY(${ry}deg)`;
+ }}
+ onMouseLeave={(e) => {
+ e.currentTarget.style.transform = "translateY(-10px) rotate(-0.6deg)";
+ e.currentTarget.style.boxShadow = `0 18px 55px rgba(0,0,0,0.55), 0 0 26px rgba(124,77,255,0.22)`;
+ }}
+ onMouseEnter={(e) => {
+ e.currentTarget.style.transform = "translateY(-18px) rotate(-0.6deg)";
+ e.currentTarget.style.boxShadow = `0 26px 70px rgba(0,0,0,0.62), 0 0 34px ${borderColor}`;
+ }}
+ >
+

+
+
+
+
+
+ {name}
+
+
+
+
+ {houseLabel}
+
+
+
+
+ Identity
+
+
+
+
+ );
+ };
return (
@@ -757,7 +749,6 @@ export default function App() {
subtitle="Platzhalter – hier kommt später das Board + Figuren rein."
variant="panel"
>
- {/* 👇 DAS ist neu */}
- {/* Dice overlay bleibt gleich */}
@@ -799,8 +789,9 @@ export default function App() {
/>
-
-
+ {/* ✅ FIX: these were clipping your hovering/overlapping player card */}
+
+
@@ -820,9 +811,7 @@ export default function App() {
}}
>
-
- Notizen
-
+
Notizen
Nur die 3 Tabellen (Verdächtige / Gegenstände / Orte).
@@ -846,11 +835,7 @@ export default function App() {
-
+
);
}
diff --git a/frontend/src/AppLayout.css b/frontend/src/AppLayout.css
index 6ecb1a1..efbf971 100644
--- a/frontend/src/AppLayout.css
+++ b/frontend/src/AppLayout.css
@@ -1,3 +1,4 @@
+/* frontend/src/AppLayout.css */
html, body, #root {
height: 100%;
}
@@ -100,14 +101,14 @@ body {
justify-items: center;
gap: 10px;
- overflow: visible; /* 🔥 wichtig */
+ overflow: visible;
}
.playerRailInner {
width: 100%;
height: 100%;
- overflow: visible; /* hier wird wieder sauber gecropped */
- border-radius: 18px; /* etwas kleiner als außen */
+ overflow: visible;
+ border-radius: 18px;
display: grid;
justify-items: center;
}