erdo 1 місяць тому
батько
коміт
a075dbc9e8
1 змінених файлів з 41 додано та 29 видалено
  1. 41 29
      besitz.php

+ 41 - 29
besitz.php

@@ -66,6 +66,12 @@ foreach ($alleSpieleRaw as $s) {
         $spieleBaum[$reihe][] = $s;
     }
 }
+
+// Hilfsfunktion für Bild-URL
+function getImgPath($url) {
+    if (empty($url)) return 'https://via.placeholder.com/150x150?text=Kein+Bild';
+    return (strpos($url, 'http') === 0) ? $url : IMG_URL . $url;
+}
 ?>
 <!DOCTYPE html>
 <html lang="de">
@@ -74,21 +80,12 @@ foreach ($alleSpieleRaw as $s) {
     <title>EXIT - Bestand & Besitz</title>
     <style>
         :root { 
-            --bg: #f4f7f6; 
-            --card: #ffffff; 
-            --text: #333; 
-            --border: #ddd; 
-            --accent: #e67e22; 
-            --reihe-bg: #2c3e50; /* Dunkel für starken Kontrast */
-            --child-bg: #fdf2e9; /* Deutliches Hell-Orange/Beige */
+            --bg: #f4f7f6; --card: #ffffff; --text: #333; --border: #ddd; --accent: #e67e22; 
+            --reihe-bg: #2c3e50; --child-bg: #fdf2e9; 
         }
         .dark-theme { 
-            --bg: #121212; 
-            --card: #1e1e1e; 
-            --text: #e0e0e0; 
-            --border: #333; 
-            --reihe-bg: #000000; 
-            --child-bg: #252525; /* Deutlich heller als der Standard-Hintergrund */
+            --bg: #121212; --card: #1e1e1e; --text: #e0e0e0; --border: #333; 
+            --reihe-bg: #000000; --child-bg: #252525; 
         }
         
         body { font-family: 'Segoe UI', sans-serif; background: var(--bg); color: var(--text); padding: 20px; transition: 0.3s; }
@@ -96,11 +93,10 @@ foreach ($alleSpieleRaw as $s) {
         header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }
         .btn-nav { background: var(--accent); color: white; padding: 10px 15px; border-radius: 6px; text-decoration: none; font-weight: bold; }
         
-        table { width: 100%; border-collapse: collapse; background: var(--card); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; table-layout: fixed; }
-        th, td { padding: 12px; border-bottom: 1px solid var(--border); text-align: left; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
-        th:first-child, td:first-child { width: 35%; white-space: normal; }
+        table { width: 100%; border-collapse: collapse; background: var(--card); border: 1px solid var(--border); border-radius: 8px; overflow: visible; table-layout: fixed; }
+        th, td { padding: 12px; border-bottom: 1px solid var(--border); text-align: left; }
+        th:first-child, td:first-child { width: 35%; position: relative; }
 
-        /* Kategorien-Trenner */
         .reihe-divider { background: var(--reihe-bg); color: #fff; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; font-size: 0.85em; }
         
         select { padding: 6px; border-radius: 4px; border: 1px solid var(--border); background: var(--card); color: var(--text); width: 100%; cursor: pointer; font-size: 0.85em; }
@@ -110,18 +106,24 @@ foreach ($alleSpieleRaw as $s) {
 
         /* UNTERPUNKTE */
         .is-child { background-color: var(--child-bg) !important; }
-        .is-child td:first-child { padding-left: 45px; position: relative; }
+        .is-child td:first-child { padding-left: 45px; }
         .is-child td:first-child::before { 
-            content: "↳"; 
-            position: absolute; 
-            left: 20px; 
-            color: var(--accent); 
-            font-weight: 900; 
-            font-size: 1.2em;
+            content: "↳"; position: absolute; left: 20px; color: var(--accent); font-weight: 900; font-size: 1.2em;
         }
         
+        /* HOVER PREVIEW LOGIK */
+        .preview-trigger { cursor: help; border-bottom: 1px dotted var(--accent); position: relative; display: inline-block; }
+        .preview-box { 
+            display: none; position: absolute; left: 100%; top: 0; z-index: 1000;
+            width: 150px; height: 150px; background: #000; border: 2px solid var(--accent);
+            border-radius: 8px; box-shadow: 0 10px 25px rgba(0,0,0,0.3); overflow: hidden;
+            margin-left: 15px; pointer-events: none;
+        }
+        .preview-box img { width: 100%; height: 100%; object-fit: cover; }
+        .preview-trigger:hover .preview-box { display: block; }
+
         .child-label { font-size: 0.95em; font-weight: 500; }
-        small { display: block; line-height: 1.2; margin-top: 2px; }
+        small { display: block; line-height: 1.2; margin-top: 2px; opacity: 0.6; }
     </style>
 </head>
 <body>
@@ -152,8 +154,13 @@ foreach ($alleSpieleRaw as $s) {
                 <?php foreach ($hauptSpiele as $sp): ?>
                     <tr class="is-parent">
                         <td>
-                            <strong><?= htmlspecialchars($sp['titel']) ?></strong>
-                            <small style="opacity:0.6"><?= htmlspecialchars($sp['typ_name']) ?></small>
+                            <div class="preview-trigger">
+                                <strong><?= htmlspecialchars($sp['titel']) ?></strong>
+                                <div class="preview-box">
+                                    <img src="<?= getImgPath($sp['bild_url']) ?>" alt="Cover">
+                                </div>
+                            </div>
+                            <small><?= htmlspecialchars($sp['typ_name']) ?></small>
                         </td>
                         <?php foreach ($spieler as $s): 
                             $curr = $statusMapping[$sp['id']][$s['id']] ?? 'nicht besitzt';
@@ -177,8 +184,13 @@ foreach ($alleSpieleRaw as $s) {
                         <?php foreach ($childrenMap[$sp['id']] as $child): ?>
                             <tr class="is-child">
                                 <td>
-                                    <span class="child-label"><?= htmlspecialchars($child['titel']) ?></span>
-                                    <small style="opacity:0.5"><?= htmlspecialchars($child['typ_name']) ?></small>
+                                    <div class="preview-trigger">
+                                        <span class="child-label"><?= htmlspecialchars($child['titel']) ?></span>
+                                        <div class="preview-box">
+                                            <img src="<?= getImgPath($child['bild_url']) ?>" alt="Cover">
+                                        </div>
+                                    </div>
+                                    <small><?= htmlspecialchars($child['typ_name']) ?></small>
                                 </td>
                                 <?php foreach ($spieler as $s): 
                                     $curr = $statusMapping[$child['id']][$s['id']] ?? 'nicht besitzt';