From a460fd8e401a619991c23b4039d4e7734ea6cf09 Mon Sep 17 00:00:00 2001 From: Christian Heubaum Date: Fri, 17 Apr 2026 12:24:07 +0000 Subject: [PATCH] Multi-Chapter-Support: Aktivierungscode, Gitea-Sync, Auto-Update --- index.html | 690 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 612 insertions(+), 78 deletions(-) diff --git a/index.html b/index.html index d14cd12..2d9a1bd 100644 --- a/index.html +++ b/index.html @@ -43,7 +43,8 @@ background: linear-gradient(160deg, #0f1f45 0%, #1a2744 40%, #0d1b35 100%); flex-direction: column; align-items: center; - justify-content: center; + justify-content: flex-start; + padding-top: clamp(90px, 12vh, 160px); position: relative; overflow: hidden; } @@ -84,14 +85,15 @@ #fullscreen-btn:hover { background: rgba(255,255,255,0.18); color: white; } .display-header { position: absolute; - top: 32px; left: 40px; + top: clamp(14px, 2vh, 32px); left: 40px; display: flex; align-items: center; - gap: 14px; + gap: clamp(10px, 1.5vh, 18px); + z-index: 10; } .bni-badge { - height: 52px; + height: clamp(44px, 6vh, 80px); width: auto; display: block; object-fit: contain; @@ -99,22 +101,23 @@ .chapter-name { color: rgba(255,255,255,0.7); - font-size: 1.1rem; + font-size: clamp(1rem, 1.8vh, 2rem); font-weight: 300; letter-spacing: 1px; } .progress-indicator { position: absolute; - top: 36px; right: 40px; + top: clamp(28px, 4vh, 50px); right: 40px; color: rgba(255,255,255,0.5); - font-size: 0.95rem; + font-size: clamp(0.85rem, 1.5vh, 1.8rem); letter-spacing: 1px; + z-index: 10; } .round-badge { position: absolute; - top: 70px; right: 40px; + top: 96px; right: 40px; background: var(--red); color: white; font-size: 0.8rem; @@ -131,16 +134,18 @@ display: flex; flex-direction: row; align-items: center; - gap: 56px; + gap: clamp(40px, 5vw, 100px); background: rgba(255,255,255,0.07); backdrop-filter: blur(24px); border: 1px solid rgba(255,255,255,0.12); - border-radius: 28px; - padding: 52px 60px; - max-width: 1000px; - width: 92%; + border-radius: clamp(20px, 3vh, 36px); + padding: clamp(32px, 5vh, 80px) clamp(40px, 5vw, 100px); + max-width: none; + width: 96vw; + flex: 1; position: relative; z-index: 1; + margin-bottom: clamp(16px, 2.5vh, 40px); } .photo-section { @@ -152,8 +157,8 @@ } .member-photo-wrap { - width: 220px; - height: 220px; + width: 100%; + height: 100%; border-radius: 50%; border: 4px solid var(--red); overflow: hidden; @@ -171,36 +176,42 @@ } .initials-avatar { - font-size: 4rem; + font-size: clamp(4rem, 12vh, 12rem); font-weight: 700; color: white; } - .qr-wrap { + .qr-corner { + position: absolute; + top: clamp(102px, 14vh, 180px); + right: clamp(24px, 3vw, 60px); + z-index: 3; background: white; - padding: 10px; - border-radius: 12px; + padding: clamp(8px, 1vh, 14px); + border-radius: 14px; + box-shadow: 0 4px 24px rgba(0,0,0,0.35); } .qr-label { - color: rgba(255,255,255,0.4); - font-size: 0.7rem; + color: #1a2744; + font-size: clamp(0.6rem, 1vh, 0.9rem); text-align: center; - margin-top: 6px; + margin-top: 5px; text-transform: uppercase; letter-spacing: 1px; + font-weight: 600; } .info-section { flex: 1; display: flex; flex-direction: column; - gap: 14px; + gap: clamp(14px, 2.5vh, 36px); } .substitute-label { color: rgba(255,255,255,0.5); - font-size: 0.85rem; + font-size: clamp(0.75rem, 1.5vh, 1.5rem); text-transform: uppercase; letter-spacing: 2px; border-left: 3px solid var(--red); @@ -208,14 +219,14 @@ } .display-name { - font-size: clamp(2rem, 4vw, 3.2rem); + font-size: clamp(3rem, max(5vw, 7vh), 10rem); font-weight: 800; color: white; line-height: 1.1; } .display-company { - font-size: clamp(1.1rem, 2vw, 1.6rem); + font-size: clamp(1.6rem, max(2.8vw, 4vh), 6rem); color: rgba(255,255,255,0.75); font-weight: 400; } @@ -225,8 +236,8 @@ background: rgba(204,0,0,0.25); border: 1px solid rgba(204,0,0,0.5); color: #ff8080; - font-size: 1rem; - padding: 8px 18px; + font-size: clamp(1rem, 2.2vh, 2.4rem); + padding: clamp(6px, 1vh, 14px) clamp(12px, 1.8vw, 28px); border-radius: 30px; align-self: flex-start; } @@ -236,8 +247,8 @@ background: rgba(234,179,8,0.2); border: 1px solid rgba(234,179,8,0.4); color: #fcd34d; - font-size: 0.85rem; - padding: 4px 14px; + font-size: clamp(0.8rem, 1.6vh, 1.6rem); + padding: clamp(4px, 0.8vh, 10px) clamp(10px, 1.5vw, 20px); border-radius: 20px; align-self: flex-start; margin-top: 4px; @@ -255,13 +266,13 @@ } .presenter-avatar { - width: 44px; height: 44px; + width: clamp(36px, 4.5vh, 64px); height: clamp(36px, 4.5vh, 64px); border-radius: 50%; overflow: hidden; flex-shrink: 0; border: 2px solid rgba(255,255,255,0.2); display: flex; align-items: center; justify-content: center; - font-size: 0.9rem; font-weight: 700; color: white; + font-size: clamp(0.8rem, 1.4vh, 1.4rem); font-weight: 700; color: white; } .presenter-avatar img { @@ -269,7 +280,7 @@ } .presenter-label { - font-size: 0.7rem; + font-size: clamp(0.65rem, 1.2vh, 1.2rem); text-transform: uppercase; letter-spacing: 1.5px; color: rgba(255,255,255,0.4); @@ -277,13 +288,13 @@ } .presenter-name { - font-size: 0.95rem; + font-size: clamp(0.9rem, 1.8vh, 1.8rem); font-weight: 600; color: rgba(255,255,255,0.85); } .presenter-company { - font-size: 0.8rem; + font-size: clamp(0.75rem, 1.4vh, 1.4rem); color: rgba(255,255,255,0.5); } @@ -296,53 +307,60 @@ /* Next Bar */ .next-bar { position: absolute; - bottom: 0; left: 0; right: 0; - background: rgba(0,0,0,0.55); + top: 0; left: 0; right: 0; + background: rgba(0,0,0,0.6); backdrop-filter: blur(12px); - border-top: 1px solid rgba(255,255,255,0.08); - padding: 18px 40px; + border-bottom: 1px solid rgba(255,255,255,0.1); + padding: clamp(12px, 1.8vh, 24px) 40px; display: flex; align-items: center; - gap: 20px; + gap: clamp(16px, 2.5vh, 36px); + z-index: 5; } - .next-bar-label { - color: rgba(255,255,255,0.4); - font-size: 0.8rem; - text-transform: uppercase; - letter-spacing: 2px; - white-space: nowrap; + #next-bar { + padding-left: 320px; } + + .next-bar-divider { width: 1px; - height: 30px; + height: clamp(40px, 7vh, 96px); background: rgba(255,255,255,0.15); } .next-photo-small { - width: 44px; height: 44px; + width: clamp(56px, 8.5vh, 120px); height: clamp(56px, 8.5vh, 120px); border-radius: 50%; object-fit: cover; - border: 2px solid rgba(255,255,255,0.2); + border: 2px solid rgba(255,255,255,0.3); background: rgba(255,255,255,0.1); } .next-info .next-name-text { color: white; - font-size: 1.15rem; - font-weight: 600; + font-size: clamp(1.5rem, 3.8vh, 4.2rem); + font-weight: 700; } .next-info .next-company-text { + color: rgba(255,255,255,0.6); + font-size: clamp(1rem, 2.5vh, 2.8rem); + } + + .next-bar-label { color: rgba(255,255,255,0.5); - font-size: 0.9rem; + font-size: clamp(0.8rem, 1.8vh, 2rem); + text-transform: uppercase; + letter-spacing: 2px; + white-space: nowrap; } .next-bar-end-text { - color: rgba(255,255,255,0.3); + color: rgba(255,255,255,0.4); font-style: italic; - font-size: 1rem; + font-size: clamp(1.2rem, 2.5vh, 2.8rem); } /* ============================================================ @@ -709,13 +727,13 @@ ============================================================ */ .photo-timer-wrap { position: relative; - width: 220px; height: 220px; + width: min(42vh, 45vmin); height: min(42vh, 45vmin); flex-shrink: 0; } .timer-ring-svg { position: absolute; top: -14px; left: -14px; - width: 248px; height: 248px; + width: calc(min(42vh, 45vmin) + 28px); height: calc(min(42vh, 45vmin) + 28px); transform: rotate(-90deg); pointer-events: none; display: none; @@ -738,7 +756,7 @@ @keyframes timerBlink { to { opacity: 0.15; } } #display-timer-text { - font-size: 2.6rem; font-weight: 700; + font-size: clamp(2rem, 4vh, 5rem); font-weight: 700; color: rgba(255,255,255,0.95); font-variant-numeric: tabular-nums; letter-spacing: 3px; @@ -986,6 +1004,59 @@ } .btn-save:hover { background: var(--red-dark); } + /* Profile Extras Section in Modal */ + .extras-section-divider { + border: none; + border-top: 1px solid var(--border); + margin: 16px 0 12px; + } + .extras-section-title { + font-size: 0.72rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 1.5px; + color: var(--muted); + margin-bottom: 12px; + } + .offline-photo-row { + display: flex; + align-items: center; + gap: 12px; + padding: 10px 12px; + background: var(--bg); + border-radius: 8px; + border: 1px solid var(--border); + margin-bottom: 8px; + } + .offline-photo-thumb { + width: 52px; height: 52px; + border-radius: 50%; + object-fit: cover; + border: 2px solid var(--border); + flex-shrink: 0; + } + .offline-photo-actions { + display: flex; + gap: 8px; + flex-wrap: wrap; + align-items: center; + } + .btn-file-label { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 5px 12px; + font-size: 0.82rem; + font-weight: 600; + cursor: pointer; + border-radius: 6px; + border: 1px solid var(--border); + background: white; + color: var(--muted); + transition: all 0.15s; + } + .btn-file-label:hover { background: white; color: var(--text); } + /* Import/Export */ .import-export-panel { padding: 16px; @@ -1049,12 +1120,16 @@
- BNI Sonne Ulm -
Vorstellungsrunde
+ +
Vorstellungsrunde
⚙ Steuerung
+
2. Runde – Besucher
@@ -1074,7 +1149,7 @@
- BNI Sonne Ulm + BNI
@@ -1091,10 +1166,6 @@
-
@@ -1121,7 +1192,7 @@
—
- +
@@ -1142,8 +1213,8 @@
- BNI Sonne Ulm -
Vorstellungsrunde steuern
+ +
Vorstellungsrunde steuern
@@ -1188,6 +1259,7 @@
Besucher
Mitglieder
Vertretungen
+
Admin
@@ -1232,6 +1304,10 @@
+
+ +
+
Mitglied als vertreten markieren:
@@ -1289,13 +1365,32 @@ - + +
+
Dauerhaft gespeichert (bleibt nach BNI-Sync erhalten)
+ + + + + +
+ +
+ + + +
+
+ + +
+
Profildaten (Kurzlinks + Offline-Fotos)
+

+ Kurzlinks und lokale Fotos werden getrennt gespeichert und bleiben nach jedem BNI-Sync erhalten. + Diese Datei im Projektordner ablegen und nach einem Browser-Reset wieder importieren. +

+
+ + + +
@@ -1505,7 +1615,7 @@
Schritt 2 – Daten exportieren
  1. BNI-Mitgliederliste öffnen: - bni-ulm.com → Chapter Sonne + bni-ulm.com → Chapter Sonne
  2. Warten bis alle Mitglieder geladen sind
  3. Bookmarklet "BNI Mitglieder exportieren" klicken
  4. @@ -1533,10 +1643,32 @@
+ + +
+ +
+
BNI Vorstellungsrunde
+
Bitte gib deinen Lizenzcode ein, um dein Chapter freizuschalten.
+ +
+ +
+
+