9 Commits
Author SHA1 Message Date
Claude fb7da747ec Frontend: Live-Updates pausieren im Hintergrund-Tab (Akku/Daten sparen)
Abfahrtstafel- und Favoriten-Polling (je 30s) liefen bisher die gesamte
Seitenlebensdauer weiter, egal ob der Tab überhaupt sichtbar war -
anders als LiveMap, das schon länger korrekt über den aktiven Tab
gesteuert wird. Über die Page Visibility API werden beide Intervalle
jetzt pausiert, sobald der Tab in den Hintergrund geht, und beim
Zurückkehren mit einer sofortigen Aktualisierung neu gestartet. Der
Fahrtalarm bleibt bewusst unangetastet, da er sicherheitsrelevant ist.

Zusätzlich: beim Entfernen eines Favoriten wird jetzt auch dessen
gemerkter Störungs-Stand aus dem localStorage entfernt (sonst bleibt
er dort für immer hängen - analog zum seenDisruptions-Leck, das
letzte Runde schon im Backend gefixt wurde).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
2026-09-28 14:45:56 +02:00
Claude abab758a47 Fix: untere Navi-Leiste überlappte Inhalt auf dem Handy
Ein langes Label ("Meine Haltestellen") ist in der 6-spaltigen mobilen
Navigationsleiste auf zwei Zeilen umgebrochen und hat dadurch die ganze
Leiste höher gemacht, als die reservierte body-padding-bottom (84px)
vorgesehen hat - die Leiste hat sich sichtbar über die letzte Abfahrts-
zeile gelegt.

- Labels in der mobilen Navi-Leiste sind jetzt zwangsweise einzeilig
  (nowrap + ellipsis) statt umzubrechen, damit alle 6 Items exakt
  gleich hoch bleiben
- Sicherheitsabstand unten leicht erhöht (84px -> 92px), inkl. der
  abhängigen Toast-/Disclaimer-Offsets

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
2026-09-28 12:42:58 +02:00
Claude 888b96d595 Top-Navigation abgeflacht + Handy-Header verschlankt
Zwei konkrete Punkte aus dem Feedback zum neuen Design:

- Die segmentierte Pillen-Navigation (schwebende Karte mit rundem
  Amber-Button) passte stilistisch nicht zum sonst flachen, scharf-
  kantigen Brutalist-Look. Ersetzt durch eine randlose Signage-Leiste
  direkt unter dem Header: Reiter liegen flach auf der Fläche, der
  aktive Reiter bekommt nur eine dezente Amber-Unterlinie plus
  sanften Flächenton statt eines separaten schwebenden Verlaufs-
  Buttons - wirkt mehr wie eine Zugtafel mit Reitern, weniger wie
  ein UI-Widget.

- Auf dem Handy hatte die Suche praktisch keinen Platz mehr: Marke
  (Icon + "ÖPNV NAVI"-Schriftzug) + Suchfeld + 3 Icon-Buttons mussten
  sich eine Zeile teilen, und die Wortmarke trug durch einen bisher
  nur ab 701px zurückgesetzten Button-Rahmen zusätzlich nativen
  Browser-Rahmen/-Innenabstand. Behoben: Wortmarke ab 700px Breite
  ausgeblendet (nur das Icon bleibt als Home-Button), Button-Reset
  gilt jetzt für alle Breiten, Icon-Buttons und Abstände auf dem
  Handy weiter verkleinert - die Sucheingabe bekommt dadurch wieder
  echten Platz statt auf ein paar Pixel zusammengequetscht zu sein.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
2026-09-28 12:35:00 +02:00
Claude c98b7c22d4 Komplett neues Frontend-Design: Vintage-Reiseplakat statt Solari-Glas
Die letzten Politur-Runden waren dem Nutzer zu ähnlich zur alten
dunklen Glas-Optik ("beeindruckt mich jetzt nicht... muss keine
verwandschaft haben"). Statt weiterer Feinjustierung daher ein
komplett neues Theme ohne visuelle Verwandtschaft zum Vorgänger:

- Helles, cremefarbenes Papier statt dunklem "Bahnsteig bei Nacht"
  (--bg-void/--panel/--ink im Root komplett invertiert)
- Kräftiger Terrakotta-Akzent (#C1440E) statt hellem Signal-Amber -
  gleichzeitig kontraststärker als Fließtext auf hellem Grund
- Dicke 2px-Konturen (--border-w) statt dünner 1px-Linien
- Scharfe 2-4px-Radien statt runder 13-22px-Ecken; Pillen (999px)
  wurden zu rechteckigen Stempeln/Badges
- Harte, unscharfe Versatzschatten (z.B. 5px 5px 0 var(--line))
  statt weicher, geblurrter Schatten
- Kein backdrop-filter/Glassmorphismus mehr (Header, Toasts, mobile
  Navigationsleiste sind jetzt opake, flache Flächen) - passt zum
  bewusst plakativen, flachen Poster-Look
- Alle hartcodierten rgba()-Tints der alten Akzentfarben (Amber/Rot/
  Grün/Blau) auf die neuen, dunkleren (kontraststärkeren) Töne
  umgerechnet, damit kein Bruch zwischen Token- und Literal-Farben
  entsteht
- Feines Punktraster als Hintergrundtextur statt weicher Farbschein-
  Gradienten
- theme-color/manifest.json auf die neue helle Fläche abgestimmt

Named angelehnt an Bauhaus-Fahrplantafeln/Vintage-Reiseplakate -
passt inhaltlich zu einer Berlin-Verkehrs-App, ohne die bisherige
"Solari-Anzeigetafel"-Bildsprache fortzusetzen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
2026-09-28 12:29:52 +02:00
Claude ad6e9467ef Frontend-Umgestaltung: Pill-Navigation, freischwebende Bottom-Bar, fette Abfahrtstafel
Die letzten beiden Commits waren zu zaghaft, um wirklich aufzufallen - unter
anderem, weil zwei der Änderungen durch spätere, unconditioneller stehende
Regeln in der Cascade wieder überschrieben wurden (die Desktop-Breite von
.app-main und die Raster-Spalten von .favorite-cards/.more-grid/
.nearby-preview haben durch die Reihenfolge in der Datei praktisch nichts
bewirkt). Diesmal echte strukturelle Änderungen statt nur zusätzlicher
Schatten, an den tatsächlich wirksamen Stellen im Stylesheet:

- Navigation umgestellt von Unterstrichen-Tabs auf eine segmentierte
  Pill-Leiste (Desktop) - aktiver Tab bekommt den vollen Amber-Verlauf als
  Hintergrund statt nur eine andere Textfarbe.
- Mobile Bottom-Nav ist jetzt eine freischwebende Glas-Leiste (abgesetzt vom
  Rand, abgerundet, Weichzeichner-Hintergrund wie Header/Toasts) statt eines
  am Bildschirmrand klebenden Balkens. Aktiver Eintrag bekommt eine
  Hintergrund-Pille statt nur Textfarbe. Bottom-Offsets von Toast/Footer
  entsprechend angepasst.
- Abfahrtstafel: Uhrzeit deutlich größer/fetter (Kernaussage der Zeile),
  Linien-Badge etwas kräftiger, dickerer farbiger Rand pro Zeile.
- Logo/Marke: kleines Icon-Badge davor, größer und fetter - dabei einen
  echten Bug gefunden und behoben (eine spätere `.brand { font: inherit }`
  -Regel hat die Typografie der Marke bisher komplett überschrieben, sie lief
  also die ganze Zeit in der Browser-Standardschrift statt der eigentlich
  vorgesehenen).
- Eckenradius global etwas großzügiger (10→13px / 18→22px).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
2026-09-28 12:15:11 +02:00
Claude f70a3323ef Weiterer Feinschliff: Primär-CTA, Badges, Kartenakzente
Zweite Polish-Runde nach dem letzten Commit, wieder additiv:

- Primäre Aktion auf der Startseite ("In meiner Nähe") hebt sich jetzt mit
  Amber-Verlauf + Glow von der sekundären ab, statt nur per Rahmenfarbe -
  klarere visuelle Hierarchie auf den ersten Blick.
- Glocken-Badge pulsiert dezent, solange ungelesene Benachrichtigungen
  vorliegen, statt ein statischer Punkt zu sein.
- Favoriten-Stern-Button: aktiver Zustand jetzt mit Hintergrund-Tönung statt
  nur Rahmenfarbe, plus Hover für den inaktiven Zustand.
- Such-Ergebniszeilen mit sanftem Hover-Verschieben statt hartem Wechsel.
- Einstellungen/Verbindungstest-Karten bekommen denselben Amber-Akzentbalken
  wie die Panel-Überschriften - konsistent mit dem Rest der App statt wie
  ein Fremdkörper aus der letzten Runde.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
2026-09-28 12:07:47 +02:00
Claude e1b33f7438 Feinschliff am Frontend: Desktop-Layout, Hover-States, Mikro-Interaktionen
Baut auf dem vorhandenen Design (dunkles "Solari-Anzeigetafel"-Theme) auf,
statt es zu ersetzen - die Grundlage war schon gut, es fehlte vor allem die
Nutzung des Platzes auf breiten Bildschirmen:

- Neuer Breakpoint ab 960px: Karten-Raster (Favoriten, Mehr, In der Nähe)
  bekommen mehr Spalten statt als eine schmale Spalte in der Bildschirmmitte
  zu wirken, Content-Bereich und Formulare etwas großzügiger gepolstert.
- Hover-/Elevation-Effekte für journey-card, notification-item und
  remark-card ergänzt (nutzt dieselben --shadow-Tokens wie die bereits
  vorhandenen Favoriten-/Mehr-Karten) - macht die Maus-Bedienung auf dem
  Desktop greifbarer, ohne Mobile/Touch zu beeinträchtigen.
- Mode-Filter-Chips bekommen jetzt auch im inaktiven Zustand ein Hover.
- Dezentes Fade-in beim Tab-Wechsel statt hartem Springen (respektiert
  prefers-reduced-motion wie der Rest der App).
- Themenfarbener Scrollbalken (Chrome/Firefox) statt Browser-Standardgrau,
  scroll-behavior: smooth für Anker-/Fokussprünge.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
2026-09-28 12:02:44 +02:00
Claude 4da99c913c Navigation an iOS-Tabs angleichen, Benachrichtigungscenter, Einfacher Modus
Phase 2-4 der WebApp-Angleichung an die iOS-App:

- Navigation: Favoriten und Störungen sind jetzt eigene Top-Level-Tabs
  (Desktop-Tableiste + mobile Bottom-Nav) statt nur über das Mehr-Grid bzw.
  den Stern im Header erreichbar. Neue Header-Icons für Einstellungen (⚙)
  und Benachrichtigungen (🔔, mit rotem Punkt bei ungelesenen Einträgen).
  "Mehr" ist jetzt schlanker (In der Nähe, Tickets, Verlauf, App-Info mit
  Verbindungstest gegen /health/full) und die Sprachauswahl in einen neuen
  eigenen "Einstellungen"-Tab umgezogen.

- Benachrichtigungscenter (js/notifications.js, neu): persistenter
  Verlauf über IndexedDB, sowohl vom Service Worker (eingehende Web-Push-
  Nachrichten, auch bei geschlossenem Tab) als auch von der Seite selbst
  (Störungs-Matches bei Favoriten, Fahrtalarm) beschrieben. Neuer
  "Benachrichtigungen"-Tab zeigt den Verlauf, Badge am Glocken-Icon zeigt
  ungelesene Einträge, per postMessage vom Service Worker live aktualisiert.

- Einfacher Modus: neuer Toggle im Einstellungen-Tab, persistiert in
  localStorage, setzt eine .simple-mode-Klasse auf <html> - moderat
  größere Schrift plus Ausblenden von Verkehrsmittel-Filter/Fahrrad-Option/
  "Zwischenhalt hinzufügen" im Routenplaner, analog zur iOS-App (bewusst
  keine Accessibility-Schriftgrößenstufe, die ist für Screenreader gedacht).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
2026-09-28 11:58:15 +02:00
Claude 32c594bc4d Routenplanung auf HAFAS (/journeys) umstellen, Zwischenhalte, Filter, Paginierung
Löst die WebApp aus der eigenen OTP2-Instanz heraus und nutzt dieselbe
HAFAS-Anbindung (VBB + Deutsche Bahn) wie die iOS-App, damit beide Clients
gegen dasselbe Backend-Feature-Set laufen:

- js/api.js: getJourneys() ruft jetzt /journeys statt /otp/journeys auf,
  inkl. via0-2 (Lat/Lon/Name/WaitMinutes), modes, bike, earlierRef/laterRef.
  Gibt die volle Antwort zurück statt nur { journeys }.
- js/app.js: bis zu 3 Zwischenhalte mit eigener Ortssuche und Aufenthaltszeit,
  Verkehrsmittel-Filter (ModeFilter-Komponente wiederverwendet), Fahrrad-
  Toggle, Früher/Später-Buttons zum Nachladen. Share-Link-Format um
  Vias/Modes/Bike erweitert, alter Umstiegszeit-Puffer entfernt (von HAFAS
  nicht unterstützt).
- index.html/styles.css: neue Formularelemente für Zwischenhalte, Filter
  und Paginierung.
- js/i18n.js: neue Übersetzungsschlüssel in DE/EN, alten sourceNote-String
  korrigiert (&amp; wurde per textContent gesetzt und wäre literal
  angezeigt worden statt als &).
- README.md: Feature-Beschreibung aktualisiert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01De7H8hR1Q9DdgyuS2ukN6y
2026-09-28 11:49:14 +02:00