thats-me/frontend/src/css/app.scss
Kevin Adametz 83c6c5813d Frontend: Offline-Warteschlange, PWA, Event-Panel und Markenauftritt
Offline
- Alle Schreibzugriffe von API-Nutzern laufen über eine Warteschlange in
  IndexedDB (services/syncQueue.js): FIFO, zusammengefasste Updates,
  Wiederholung bei Netz/Sichtbarkeit/Backoff, 4xx wird als Fehler gemeldet.
- Medien-Uploads liegen mit Bytes in der Queue, erscheinen sofort mit
  Marker und werden nach dem Upload durch das Server-Objekt ersetzt.
- PWA-Modus mit Service Worker für die App-Hülle; API nie gecacht.
  npm run build erzeugt dist/pwa.
- Speicherzustand im Panel: ausstehend / Fehler mit Wiederholen-Knopf,
  Verbindungsanzeige im Header.

Event
- Event entsteht erst mit dem ersten Eintrag; jede Löschung fragt nach.
- Key Image als 4:3-Rahmen, Galerie mit Video, mehrere Sprachnotizen mit
  Notiz, Live-Pegel beim Aufnehmen, WAV-Umwandlung für lokale Aufnahmen.
- Neue Felder: Zeitraum, Kategorie, Personen, Meilenstein; Stimmung als
  kompakte Zeile mit ausklappbarer Punktfarbe.

Oberfläche
- Untere Leiste: Darstellung und Zoom links, Jahres-Pille mittig, Plus rechts.
- Logos und Goldpalette, Login neu, zehn Wellen-Presets mit Vorschau,
  Hintergrundbilder als Kacheln, Kontomenü und Einstellungen bereinigt,
  Escape schließt Ebenen, größere Touch-Ziele.
- Alten Sync-Service und ungenutzte Legacy-Seiten entfernt.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-25 07:00:35 +00:00

74 lines
1.7 KiB
SCSS

:root {
// Brand palette (from the logo): gold accent, ink for text on light
// ground, paper for text on dark ground.
--tm-gold: #f5c26b;
--tm-gold-dark: #d59040;
--tm-gold-rgb: 245, 194, 107;
--tm-gold-gradient: linear-gradient(135deg, #f5c26b, #d59040);
--tm-ink: #292a2b;
--tm-ink-rgb: 41, 42, 43;
--tm-paper: #f7f3ea;
--tm-paper-rgb: 247, 243, 234;
// Selected accent; the settings store overrides these at runtime.
--tm-accent: #f5c26b;
--tm-accent-rgb: 245, 194, 107;
--q-primary: #f5c26b;
--q-secondary: #d59040;
--q-accent: #f5c26b;
}
// Glass button style
.glass--button {
background: rgba(128, 128, 128, 0.1);
border: 1px solid rgba(var(--tm-accent-rgb), 0.24);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
transition: background 0.2s ease;
&:hover {
background: rgba(128, 128, 128, 0.18);
}
&:active {
transform: scale(0.95);
}
}
// Glass panel style — strong blur for slide-up panels
.glass--panel {
background: rgba(var(--tm-paper-rgb), 0.78);
border-top: 1px solid rgba(var(--tm-accent-rgb), 0.24);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
color: var(--tm-ink);
.body--dark & {
background: rgba(var(--tm-ink-rgb), 0.74);
border-top-color: rgba(var(--tm-paper-rgb), 0.1);
color: var(--tm-paper);
}
}
// GlowDot animations — soft opacity pulse on the glow aura
@keyframes glowPulse {
0%, 100% {
opacity: 0.85;
transform: scale(1);
}
50% {
opacity: 1;
transform: scale(1.06);
}
}
@keyframes ghostPulse {
0%, 100% {
opacity: 0.5;
transform: scale(1);
}
50% {
opacity: 0.9;
transform: scale(1.12);
}
}