Impressum auf Luxemburg-Recht korrigiert + Zugangsseite auf 2 Kacheln umgebaut
- kontakt.html: Anbieterkennzeichnung zitierte faelschlich deutsches Recht (§5 TMG) trotz Sitz in Luxemburg. Jetzt korrekt Art. 5 der loi modifiee du 14 aout 2000 relative au commerce electronique. Telefonnummer ergaenzt (in Luxemburg fuer die Anbieterkennzeichnung ueblich, in Deutschland nicht zwingend noetig - dort galt bislang keine). Veraltete "§55 Abs.2 RStV"-Zeile entfernt: gilt inhaltlich wie rechtlich nicht (deutsches Landesmedienrecht, Sitzlandprinzip, zudem kein journalistisch-redaktionelles Angebot). EU-OS- Streitschlichtungslink + VSBG-Erklaerung ergaenzt (fehlten bisher, bei bezahltem Supporter-Abo EU-weit vorgeschrieben). - gate.html: gemeinsame Zugangs-Box fuer Dogi/VanVan durch 2 getrennte Kacheln ersetzt (gleiches Muster wie bereits in verwaltung.html), nur die Kacheln selbst neu - Hintergrund/Logo/Buehne unveraendert. Beide Formulare rufen weiterhin denselben /gate-auth-Endpunkt auf, Rollen-Erkennung bleibt serverseitig ueber die Zugangscodes (server/gate.js unveraendert).
This commit is contained in:
@@ -144,6 +144,69 @@
|
||||
.gate-box .btn-holo { width: 100%; justify-content: center; margin-top: .2rem; }
|
||||
.gate-fehler { color: #ff9a9a; font-size: .9rem; margin-top: .9rem; display: none; }
|
||||
.gate-fehler.zeige { display: block; }
|
||||
|
||||
/* ---------- Zwei getrennte Zugangskacheln (Dogi/VanVan) statt einer
|
||||
gemeinsamen Box — Nutzer-Wunsch 07.08.2026 ("Eingang von VanVan wie bei
|
||||
ihrer normalen Seite mit den 2 Kacheln"). Gleiches Muster wie schon in
|
||||
verwaltung.html (.vw-gate-card) etabliert, hier nur farblich an die
|
||||
bereits vorhandene Gold/Babyblau-Optik dieser Seite angepasst. Nur die
|
||||
Kacheln sind neu — Hintergrund/Logo/Bühne bleiben unverändert. ---------- */
|
||||
.gate-cards {
|
||||
position: relative; z-index: 2; display: flex; flex-wrap: wrap; gap: 1.1rem;
|
||||
justify-content: center; width: 100%; margin-top: 1.3rem;
|
||||
}
|
||||
.gate-card {
|
||||
position: relative; isolation: isolate; overflow: hidden;
|
||||
flex: 1 1 220px; max-width: 280px; text-align: center;
|
||||
padding: 1.6rem 1.3rem 1.4rem; border-radius: 18px; border: 1.5px solid transparent;
|
||||
background:
|
||||
linear-gradient(180deg, rgba(20,23,29,.92), rgba(10,12,15,.96)) padding-box,
|
||||
linear-gradient(110deg, #8fd9ea, #38bdf8, #d4af37, #8fd9ea) border-box;
|
||||
background-size: 100% 100%, 320% 100%;
|
||||
box-shadow: 0 30px 70px -25px rgba(0,0,0,.75), 0 0 50px -20px rgba(143,217,234,.3);
|
||||
}
|
||||
/* VanVans Kachel: eigene, femininere Farbwelt (Rosé/Lavendel/Gold statt
|
||||
Babyblau) — gleiches Prinzip wie in verwaltung.html, keine bloße
|
||||
Umfärbung von Dogis Kachel. */
|
||||
.gate-card--vanvan {
|
||||
background:
|
||||
linear-gradient(180deg, rgba(24,15,20,.92), rgba(15,9,13,.96)) padding-box,
|
||||
linear-gradient(110deg, #ff8fc6, #c084fc, #d4af37, #ff8fc6) border-box;
|
||||
box-shadow: 0 30px 70px -25px rgba(0,0,0,.75), 0 0 50px -20px rgba(255,143,198,.35);
|
||||
}
|
||||
.gate-card-icon {
|
||||
display: block; width: 60px; height: 60px; margin: 0 auto .6rem; border-radius: 50%;
|
||||
background-size: cover; background-position: center;
|
||||
border: 2px solid rgba(143,217,234,.6);
|
||||
box-shadow: 0 0 18px rgba(143,217,234,.4), inset 0 0 10px rgba(255,255,255,.08);
|
||||
}
|
||||
.gate-card-icon--dogi { background-image: url('assets/img/vw-gate-dogi.jpg'); }
|
||||
.gate-card-icon--vanvan { background-image: url('assets/img/vw-gate-vanvan.jpg'); }
|
||||
.gate-card--vanvan .gate-card-icon { border-color: rgba(255,143,198,.65); }
|
||||
.gate-card-name { font-size: 1.05rem; font-weight: 800; margin: 0 0 .8rem; color: var(--text); }
|
||||
.gate-card--vanvan .gate-card-name { color: #ffd1e8; }
|
||||
.gate-card input {
|
||||
width: 100%; box-sizing: border-box; padding: .8rem .9rem; border-radius: 12px; text-align: center;
|
||||
letter-spacing: .1em; font-size: 1rem; font-weight: 600; margin-bottom: .9rem;
|
||||
background: rgba(255,255,255,.04); border: 1.5px solid var(--border); color: var(--text);
|
||||
transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
|
||||
}
|
||||
.gate-card input::placeholder { letter-spacing: normal; font-weight: 400; color: rgba(154,164,178,.55); }
|
||||
.gate-card input:focus {
|
||||
outline: none; border-color: rgba(212,175,55,.7); background: rgba(255,255,255,.06);
|
||||
box-shadow: 0 0 0 4px rgba(212,175,55,.14);
|
||||
}
|
||||
.gate-card--vanvan input:focus { border-color: rgba(255,143,198,.7); box-shadow: 0 0 0 4px rgba(255,143,198,.16); }
|
||||
.gate-card .btn-holo.gate-card-btn { width: 100%; justify-content: center; padding: .65rem 1rem; font-size: .88rem; gap: .3rem; }
|
||||
.gate-card-btn--vanvan {
|
||||
background: linear-gradient(120deg, #ff8fc6 0%, #c084fc 30%, #ffd76a 55%, #ff8fc6 80%, #c084fc 100%);
|
||||
background-size: 340% 340%;
|
||||
}
|
||||
.gate-card .gate-fehler { margin-top: .7rem; }
|
||||
@media (max-width: 480px) {
|
||||
.gate-cards { flex-direction: column; align-items: center; }
|
||||
.gate-card { max-width: 300px; width: 100%; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -160,21 +223,38 @@
|
||||
<!-- Nutzer-Wunsch 04.08.2026: Besucher ohne Zugangscode (z.B. über einen
|
||||
gefundenen/geteilten Link) sollen HIER nicht mehr "Noch nicht
|
||||
öffentlich / im Aufbau" lesen — stattdessen ein normal wirkender
|
||||
Link auf die eigene Domain (die spätere, öffentliche Hauptseite).
|
||||
Das Eingabefeld darunter bleibt unverändert für Dogi/VanVan. -->
|
||||
Link auf die eigene Domain (die spätere, öffentliche Hauptseite). -->
|
||||
<h1>DOGFATHER UNIVERSE</h1>
|
||||
<p class="small" style="opacity:.85;">
|
||||
<a href="https://dogfather-universe.com/" style="color:#8fd9ea; font-weight:700; text-decoration: underline; text-underline-offset: .2em;">dogfather-universe.com</a>
|
||||
</p>
|
||||
<form id="gate-form">
|
||||
<input type="text" id="gate-code" placeholder="Zugangscode" autocomplete="off" autocapitalize="off" spellcheck="false" autofocus />
|
||||
<button type="submit" class="btn-holo">
|
||||
<span class="btn-holo-spark" aria-hidden="true">✨</span>
|
||||
<span class="btn-holo-text">Weiter</span>
|
||||
<span class="btn-holo-spark" aria-hidden="true">✨</span>
|
||||
</div>
|
||||
|
||||
<!-- Nutzer-Wunsch 07.08.2026: statt einem gemeinsamen Eingabefeld für
|
||||
Dogi/VanVan jetzt 2 getrennte Kacheln, gleiches Muster wie schon in
|
||||
verwaltung.html — beide Formulare rufen weiterhin denselben
|
||||
/gate-auth-Endpunkt auf, der Zugangscode selbst entscheidet
|
||||
serverseitig, wer sich anmeldet (siehe server/gate.js). -->
|
||||
<div class="gate-cards">
|
||||
<form id="gate-form-dogi" class="gate-card gate-card--dogi" novalidate>
|
||||
<span class="gate-card-icon gate-card-icon--dogi" aria-hidden="true"></span>
|
||||
<h2 class="gate-card-name">Dogi</h2>
|
||||
<input type="text" id="gate-code-dogi" placeholder="Zugangscode" autocomplete="off" autocapitalize="off" spellcheck="false" autofocus />
|
||||
<button type="submit" class="btn-holo gate-card-btn">
|
||||
<span class="btn-holo-text">💙 Öffnen</span>
|
||||
</button>
|
||||
<p class="gate-fehler" id="gate-fehler-dogi"></p>
|
||||
</form>
|
||||
|
||||
<form id="gate-form-vanvan" class="gate-card gate-card--vanvan" novalidate>
|
||||
<span class="gate-card-icon gate-card-icon--vanvan" aria-hidden="true"></span>
|
||||
<h2 class="gate-card-name">VanVan</h2>
|
||||
<input type="text" id="gate-code-vanvan" placeholder="Zugangscode" autocomplete="off" autocapitalize="off" spellcheck="false" />
|
||||
<button type="submit" class="btn-holo gate-card-btn gate-card-btn--vanvan">
|
||||
<span class="btn-holo-text">💗 Öffnen</span>
|
||||
</button>
|
||||
<p class="gate-fehler" id="gate-fehler-vanvan"></p>
|
||||
</form>
|
||||
<p class="gate-fehler" id="gate-fehler"></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -197,31 +277,39 @@
|
||||
|
||||
const params = new URLSearchParams(location.search);
|
||||
const next = params.get("next") || "/index.html";
|
||||
const form = document.getElementById("gate-form");
|
||||
const fehlerEl = document.getElementById("gate-fehler");
|
||||
form.addEventListener("submit", async function (e) {
|
||||
e.preventDefault();
|
||||
fehlerEl.classList.remove("zeige");
|
||||
const code = document.getElementById("gate-code").value.trim();
|
||||
if (!code) return;
|
||||
try {
|
||||
const res = await fetch("/gate-auth", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ code, next }),
|
||||
});
|
||||
const data = await res.json();
|
||||
if (!res.ok || !data.ok) {
|
||||
fehlerEl.textContent = (data && data.error) || "Falscher Zugangscode.";
|
||||
|
||||
// Beide Kacheln (Dogi/VanVan) nutzen dieselbe Logik und denselben
|
||||
// /gate-auth-Endpunkt — nur das jeweils eigene Formular/Eingabefeld/
|
||||
// Fehlerfeld unterscheidet sich.
|
||||
function bindeGateKachel(formId, inputId, fehlerId) {
|
||||
const form = document.getElementById(formId);
|
||||
const fehlerEl = document.getElementById(fehlerId);
|
||||
form.addEventListener("submit", async function (e) {
|
||||
e.preventDefault();
|
||||
fehlerEl.classList.remove("zeige");
|
||||
const code = document.getElementById(inputId).value.trim();
|
||||
if (!code) return;
|
||||
try {
|
||||
const res = await fetch("/gate-auth", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ code, next }),
|
||||
});
|
||||
const data = await res.json();
|
||||
if (!res.ok || !data.ok) {
|
||||
fehlerEl.textContent = (data && data.error) || "Falscher Zugangscode.";
|
||||
fehlerEl.classList.add("zeige");
|
||||
return;
|
||||
}
|
||||
location.href = data.next || "/index.html";
|
||||
} catch {
|
||||
fehlerEl.textContent = "Verbindung fehlgeschlagen. Bitte nochmal versuchen.";
|
||||
fehlerEl.classList.add("zeige");
|
||||
return;
|
||||
}
|
||||
location.href = data.next || "/index.html";
|
||||
} catch {
|
||||
fehlerEl.textContent = "Verbindung fehlgeschlagen. Bitte nochmal versuchen.";
|
||||
fehlerEl.classList.add("zeige");
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
bindeGateKachel("gate-form-dogi", "gate-code-dogi", "gate-fehler-dogi");
|
||||
bindeGateKachel("gate-form-vanvan", "gate-code-vanvan", "gate-fehler-vanvan");
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
+5
-3
@@ -54,13 +54,15 @@
|
||||
<h2 data-i18n="kt_impressum_h2">Impressum</h2>
|
||||
<p class="small muted" data-i18n="kt_impressum_hinweis">Rechtstexte werden auf Deutsch bereitgestellt, um Übersetzungsfehler bei rechtlich verbindlichen Angaben zu vermeiden. / Legal texts are provided in German only to avoid translation errors in legally binding information.</p>
|
||||
<p class="small muted">
|
||||
Angaben gemäß Anbieterkennzeichnung (u.a. § 5 TMG bzw. vergleichbare Vorschriften)<br>
|
||||
Angaben gemäß Art. 5 der loi modifiée du 14 août 2000 relative au commerce électronique (Luxemburg)<br>
|
||||
Filipe Pereira Queiroz<br>
|
||||
3, rue Arthur Thinnes<br>
|
||||
L-3919 Mondercange<br>
|
||||
Luxemburg<br><br>
|
||||
Kontakt: <a href="mailto:[email protected]">[email protected]</a><br><br>
|
||||
Verantwortlich für den Inhalt (auch i.S.v. § 55 Abs. 2 RStV bzw. vergleichbarer Vorschriften): Filipe Pereira Queiroz, Anschrift wie oben.<br><br>
|
||||
Telefon: +49 177 3292805<br>
|
||||
E-Mail: <a href="mailto:[email protected]">[email protected]</a><br><br>
|
||||
<strong>EU-Streitschlichtung:</strong> Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit: <a href="https://ec.europa.eu/consumers/odr/" target="_blank" rel="noopener">https://ec.europa.eu/consumers/odr/</a>. Unsere E-Mail-Adresse finden Sie oben im Impressum.<br><br>
|
||||
<strong>Verbraucherstreitbeilegung:</strong> Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.<br><br>
|
||||
DOGFATHER UNIVERSE ist ein persönliches Content-/Community-Projekt von Filipe Pereira Queiroz (Künstlername „Dogfather"). Es besteht keine Verbindung dieser Angaben zu Namen weiterer auf der Seite gezeigter Personen (z. B. Team-/Community-Mitglieder), die ausschließlich mit ihren Spitz-/Künstlernamen auftreten.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user