Kundenbereich: App-Ansicht fuers Handy (Tab-Leiste, Konto-Sheet, installierbar)

Auf dem Handy (unter 880 px und Handys quer) sieht der Kundenbereich aus wie
eine App; der Desktop bleibt pixelgleich.

- Kopfzeile als App-Leiste: Logo, beim Scrollen der Seitentitel, Avatar
- Navigation als Tab-Leiste unten mit Symbolen und Zaehlern; neuer Tab
  "Wartung" mit der Abo-Karte, Stundenkonto/Bestellung und
  Uebernahmegutschrift als Unterseiten mit Zurueck (auch Android-Geste)
- Konto als Bottom-Sheet (Ansprechpartner, Vertraege kuendigen/widerrufen,
  Rechtliches, Abmelden), am Desktop als Popover unter dem Avatar
- Rechnungen als Karten, Fortschritt als Zeitleiste, Chat fuellt den
  Bildschirm; bei offener Tastatur verschwindet die Tab-Leiste (kommt auch
  nach der Android-Zurueck-Geste wieder)
- Installierbar: Manifest, App-Icons (WEBklar-Logo), Favicon, Hinweis
  "Zum Home-Bildschirm"; Service Worker nur fuer die Offline-Seite,
  Kundendaten werden nicht zwischengespeichert
- Installierte App: Kuendigen/Widerrufen mit Link zurueck in den
  Kundenbereich (nur dort sichtbar, Texte unveraendert); Login-Links zu
  Bedingungen/Datenschutz/Impressum oeffnen wie im Dashboard ein neues Fenster
- Login mit App-Icon und Abstaenden fuer Statusleiste/Home-Balken
- Hinweise "in der Seitenleiste" haben auf dem Handy eine eigene Fassung

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-09-26 14:36:29 +00:00
1 parent 06e9a0fe8d
commit 20bf5afe28
17 files changed
+999 -36

No files matched your search

+46
View File
@@ -0,0 +1,46 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<meta name="theme-color" content="#000000">
<title>Offline – WEBklar Kundenbereich</title>
<!-- Wird vom Service Worker (sw.js) ohne Internet angezeigt: alles inline, keine weiteren Dateien -->
<style>
html, body { height: 100%; margin: 0; }
body {
display: grid; place-items: center; padding: 24px; box-sizing: border-box;
background: radial-gradient(ellipse at 50% 0%, rgba(157, 61, 254, 0.22), transparent 60%), #000;
color: #fff; font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
text-align: center; line-height: 1.5;
}
main { max-width: 340px; }
svg { width: 72px; height: 72px; border-radius: 18px; }
h1 { margin: 22px 0 8px; font-size: 22px; }
p { margin: 0 0 26px; color: rgba(255, 255, 255, 0.6); font-size: 15px; }
button {
padding: 13px 26px; border: none; border-radius: 999px; background: #9d3dfe; color: #fff;
font: inherit; font-weight: 700; font-size: 15px; cursor: pointer;
}
button:active { transform: scale(0.97); }
</style>
</head>
<body>
<main>
<svg viewBox="0 0 512 512" aria-hidden="true">
<rect width="512" height="512" fill="#fff"/>
<g transform="translate(256 256) scale(0.9) translate(-256 -256)">
<ellipse cx="256" cy="256" rx="210" ry="150" fill="#111" transform="rotate(-28 256 256)"/>
<circle cx="356" cy="172" r="18" fill="#fff"/>
<path transform="translate(256 256) rotate(-28)" d="M 0,-170 C 22,-105 60,-72 120,-56 C 60,-40 22,-8 0,64 C -22,-8 -60,-40 -120,-56 C -60,-72 -22,-105 0,-170 Z" fill="#fff"/>
</g>
</svg>
<h1>Keine Internetverbindung</h1>
<p>Der Kundenbereich braucht eine Verbindung. Sobald du wieder online bist, geht es hier weiter.</p>
<button type="button" onclick="location.reload()">Erneut versuchen</button>
</main>
<script>
window.addEventListener('online', () => location.reload())
</script>
</body>
</html>