feat: Premium-Redesign + Fortschritts-UI

- Zentrales Design-Token-System in index.css (Farben/Spacing/Radien/Schatten/Fonts)
- Alle Live-Screens auf Tokens: Karten, BottomNav (aktiver Pill), Feed, Auth
- Auth: DM Sans entfernt, Akzent vereinheitlicht (Braun), Tokens gescoped
- Profil neu: Tagesziel-Ring, Streak-Heatmap, Wochen-Graph, echter Skills-Radar, Eckdaten
- Feed-EP-Badge mit Tagesziel-Ring (ProgressRing-Komponente)
- Game/Pro als gestaltetes 'Bald verfügbar' (ComingSoon)
- Konsumiert neue API: getStats/setDailyGoal, degradiert sauber bei 404

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-13 16:41:09 +02:00
parent 8154f08e04
commit 712f9a243c
16 changed files with 744 additions and 341 deletions

View File

@@ -1,4 +1,65 @@
@import url('https://fonts.googleapis.com/css2?family=Lora:wght@700&family=Nunito:wght@400;500;600;700;800&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,500&family=Nunito:wght@400;500;600;700;800&display=swap');
/* ── Design Tokens ──────────────────────────────────────────────
Single source of truth. Warmes, ruhiges Konzept nur diszipliniert.
Bestehende Palette normalisiert (ein Grün, ein Rot, klare Skalen). */
:root {
/* Flächen & Hintergrund */
--bg: #EDE0CE; /* warmes Creme App-Hintergrund */
--bg-2: #F2E8DA; /* leicht heller, für Sektionen */
--surface: #FBF7F0; /* Karten / Panels */
--surface-2: #F4EEE3; /* eingelassene Flächen, Tracks */
--surface-sunk: #ECE3D4; /* Vertiefungen / Heatmap-Leerzelle */
/* Text */
--text: #4A3728; /* primärer warmer Braunton */
--text-strong: #3A2515; /* Überschriften / Betonung */
--text-muted: #8C7A65; /* sekundär */
--text-soft: #A89F8C; /* tertiär / Hints */
/* Akzente */
--accent: #7A5C3A; /* Aktion / aktiv */
--accent-strong: #5C3D22;
--accent-soft: #EFE6D6; /* heller Akzent-Hintergrund (Pills) */
--gold: #C4A85A; /* EP / Belohnung */
--gold-soft: #F0E4C4;
--success: #3D7055; /* genau ein Grün */
--success-soft: #E4EDE5;
--danger: #C0544A; /* genau ein warmes Rot */
--danger-soft: #FBF0EF;
/* Linien */
--border: #DDD0BF;
--border-soft: #E7DDCD;
/* Spacing-Skala */
--sp-1: 4px;
--sp-2: 8px;
--sp-3: 12px;
--sp-4: 16px;
--sp-5: 24px;
--sp-6: 32px;
/* Radien */
--r-sm: 12px;
--r-md: 16px;
--r-lg: 22px;
--r-pill: 999px;
/* Schatten warm getönt, nie hartes Schwarz */
--shadow-soft: 0 1px 2px rgba(60, 40, 20, 0.05), 0 2px 8px rgba(60, 40, 20, 0.06);
--shadow-card: 0 1px 2px rgba(60, 40, 20, 0.06), 0 4px 16px rgba(60, 40, 20, 0.09), 0 12px 40px rgba(60, 40, 20, 0.06);
--shadow-pop: 0 6px 24px rgba(60, 40, 20, 0.16);
/* Typografie */
--font-ui: 'Nunito', -apple-system, BlinkMacSystemFont, sans-serif;
--font-display: 'Lora', Georgia, serif;
/* Bewegung */
--ease: cubic-bezier(0.22, 0.61, 0.36, 1);
--dur-fast: 0.15s;
--dur: 0.28s;
}
* {
margin: 0;
@@ -7,12 +68,14 @@
}
body {
font-family: 'Nunito', -apple-system, BlinkMacSystemFont, sans-serif;
background: #EDE0CE;
color: #4A3728;
font-family: var(--font-ui);
background: var(--bg);
color: var(--text);
height: 100dvh;
overflow: hidden;
line-height: 1.7;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
#root {
@@ -20,3 +83,30 @@ body {
display: flex;
flex-direction: column;
}
/* Gemeinsamer, ruhiger Loader/Spinner */
@keyframes spin { to { transform: rotate(360deg); } }
.app-spinner {
width: 32px;
height: 32px;
border: 2px solid var(--border-soft);
border-top-color: var(--accent);
border-radius: 50%;
animation: spin 0.7s linear infinite;
}
/* Dezenter Seitenwechsel */
@keyframes pageEnter {
from { opacity: 0; transform: translateY(6px); }
to { opacity: 1; transform: none; }
}
.page-enter { animation: pageEnter var(--dur) var(--ease); }
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: 0.001ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.001ms !important;
}
}