Weiter gebaut
Some checks failed
Host-Based Deploy (Java 21 Fix) / build-and-run (push) Has been cancelled

This commit is contained in:
2026-04-25 16:56:35 +02:00
parent e4b762f905
commit 4f2048bdc8
242 changed files with 14108 additions and 1770 deletions

View File

@@ -16,9 +16,9 @@
margin-right: 0.5rem;
line-height: 1;
}
.nav-burger:hover { border-color: var(--color-primary); color: var(--color-primary); }
.nav-burger:hover { border-color: var(--color-primary); color: #fff; }
.nav-burger-icon {
font-size: 1.05rem; line-height: 1;
font-size: 1.575rem; line-height: 1;
position: relative;
display: inline-flex; align-items: center; justify-content: center;
width: 1.2em; height: 1.2em;
@@ -91,16 +91,16 @@
}
.nav-col:last-child { border-right: none; }
/* Überschrift: auf Desktop ausgeblendet, auf Mobile als Accordion-Toggle */
.nav-col-header {
display: none;
display: flex;
align-items: center; justify-content: space-between;
padding: 0.75rem 1.1rem;
font-size: 0.85rem; font-weight: 600;
padding: 0.75rem 1.1rem 0.5rem;
font-size: 1.275rem; font-weight: 700;
color: var(--color-text);
cursor: pointer;
cursor: default;
border-bottom: 1px solid var(--color-secondary);
}
.nav-col-arrow { font-size: 0.65rem; transition: transform 0.2s; }
.nav-col-arrow { display: none; font-size: 0.65rem; transition: transform 0.2s; }
.nav-col-body { padding: 0.35rem 0; }
@@ -158,7 +158,8 @@
.nav-col { border-right: none; border-bottom: 1px solid var(--color-secondary); }
.nav-col:last-child { border-bottom: none; }
.nav-col-header { display: flex; }
.nav-col-header { font-size: 0.85rem; font-weight: 600; cursor: pointer; padding: 0.75rem 1.1rem; border-bottom: none; }
.nav-col-arrow { display: block; }
.nav-col.col-open .nav-col-arrow { transform: rotate(90deg); }
.nav-col-body { display: none; padding: 0; }
@@ -256,23 +257,18 @@
${link('/dating/matches.html', '', 'Matches' )}
`;
const bdsmActive = ['/games/bdsm/neubdsm.html', '/games/bdsm/bdsmingame.html', '/games/bdsm/bdsmplayers.html'].some(p => path.startsWith(p)) ? ' active' : '';
const vanillaActive = ['/games/vanilla/neuvanilla.html', '/games/vanilla/vanillaingame.html', '/games/vanilla/vanillawarten.html'].some(p => path.startsWith(p)) ? ' active' : '';
const col4Html = `
${gameGroup('VANILLA', 'Vanilla Game', [
{ href: '/games/vanilla/neuvanilla.html', icon: 'PLAY_NEW', label: 'Neue Session', id: 'navVanillaNeu' },
{ href: '#', icon: 'WAITING', label: 'Aktive Session', id: 'navVanillaAktiv' },
{ href: '/games/vanilla/vanillaingame.html', icon: 'PLAY_ACTIVE', label: 'Im Spiel', id: 'navVanillaImSpiel' },
{ href: '/games/vanilla/aufgaben.html', icon: 'CHECK', label: 'Aufgaben' },
{ href: '/games/vanilla/toys.html', icon: 'TOYS', label: 'Toys' },
{ href: '/games/vanilla/entdecken.html', icon: 'DISCOVER', label: 'Entdecken' },
])}
${gameGroup('BDSM', 'BDSM Game', [
{ href: '/games/bdsm/neubdsm.html', icon: 'PLAY_NEW', label: 'Neue Session', id: 'navBdsmNeu' },
{ href: '#', icon: 'WAITING', label: 'Aktive Session', id: 'navBdsmAktiv' },
{ href: '/games/bdsm/bdsmingame.html', icon: 'PLAY_ACTIVE', label: 'Im Spiel', id: 'navBdsmImSpiel' },
{ href: '/games/bdsm/aufgaben.html', icon: 'CHECK', label: 'Aufgaben' },
{ href: '/games/bdsm/toys.html', icon: 'TOYS', label: 'Toys' },
{ href: '/games/bdsm/entdecken.html', icon: 'DISCOVER', label: 'Entdecken' },
])}
<a href="/games/vanilla/neuvanilla.html" class="nav-link${vanillaActive}" id="navVanillaGame">
<span class="nav-icon">${I('VANILLA') || ''}</span>
<span>Vanilla Game</span>
</a>
<a href="/games/bdsm/neubdsm.html" class="nav-link${bdsmActive}" id="navBdsmGame">
<span class="nav-icon">${I('BDSM') || ''}</span>
<span>BDSM Game</span>
</a>
${gameGroup('CHASTITY', 'Chastity Game', [
{ href: '/games/chastity/neulock.html', icon: 'NEW_LOCK', label: 'Neues Lock', id: 'navChastityNeu' },
{ href: '#', icon: 'ACTIVE_LOCK', label: 'Aktives Lock', id: 'navChastityAktiv' },
@@ -283,6 +279,11 @@
{ href: '/games/chastity/keyholder.html', icon: 'KEY', label: 'Keyholder' },
{ href: '/games/chastity/unlock-history.html', icon: 'HISTORY', label: 'Code-Historie' },
])}
${gameGroup('CHECK', 'Aufgabenverwaltung', [
{ href: '/games/aufgaben/aufgaben.html', icon: 'CHECK', label: 'Aufgaben' },
{ href: '/games/aufgaben/toys.html', icon: 'TOYS', label: 'Toys' },
{ href: '/games/aufgaben/entdecken.html',icon: 'DISCOVER', label: 'Entdecken' },
])}
`;
// ── Dropdown-HTML ────────────────────────────────────────────────────────
@@ -306,7 +307,7 @@
])}
${column('colDating', 'Dating', col3Html, ['/dating/'])}
${column('colGames', 'Games', col4Html, [
'/games/vanilla/', '/games/bdsm/', '/games/chastity/',
'/games/vanilla/', '/games/bdsm/', '/games/chastity/', '/games/aufgaben/',
])}
</div>
<div class="nav-dropdown-footer">
@@ -417,21 +418,16 @@
const hide = id => { const el = document.getElementById(id); if (el) el.style.display = 'none'; };
const show = id => { const el = document.getElementById(id); if (el) el.style.display = ''; };
const href = (id, h) => { const el = document.getElementById(id); if (el) el.href = h; };
hide('navVanillaAktiv'); hide('navVanillaImSpiel');
hide('navBdsmAktiv'); hide('navBdsmImSpiel');
hide('navChastityAktiv');
try {
const r = await fetch('/bdsm/einladung/meine-aktive');
if (r.ok) {
const aktiv = await r.json();
hide('navBdsmNeu'); hide('navBdsmImSpiel');
show('navBdsmAktiv');
href('navBdsmAktiv', aktiv.sessionId ? '/games/bdsm/bdsmingame.html' : '/games/bdsm/neubdsm.html');
href('navBdsmGame', aktiv.sessionId ? '/games/bdsm/bdsmingame.html' : '/games/bdsm/neubdsm.html');
} else {
const sr = await fetch(`/bdsm?userId=${user.userId}`);
if (sr.status === 200) { hide('navBdsmNeu'); show('navBdsmImSpiel'); }
else show('navBdsmNeu');
if (sr.status === 200) href('navBdsmGame', '/games/bdsm/bdsmingame.html');
}
} catch (_) {}
@@ -439,13 +435,10 @@
const r = await fetch('/vanilla/einladung/meine-aktive');
if (r.ok) {
const aktiv = await r.json();
hide('navVanillaNeu'); hide('navVanillaImSpiel');
show('navVanillaAktiv');
href('navVanillaAktiv', aktiv.sessionId ? '/games/vanilla/vanillaingame.html' : '/games/vanilla/neuvanilla.html');
href('navVanillaGame', aktiv.sessionId ? '/games/vanilla/vanillaingame.html' : '/games/vanilla/neuvanilla.html');
} else {
const sr = await fetch(`/vanilla?userId=${user.userId}`);
if (sr.status === 200) { hide('navVanillaNeu'); show('navVanillaImSpiel'); }
else show('navVanillaNeu');
if (sr.status === 200) href('navVanillaGame', '/games/vanilla/vanillaingame.html');
}
} catch (_) {}