@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; padding: 0; box-sizing: border-box; } html { height: 100%; width: 100%; position: fixed; inset: 0; overflow: hidden; overscroll-behavior: none; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; touch-action: manipulation; } body { font-family: var(--font-ui); background: var(--bg); color: var(--text); height: 100dvh; width: 100%; position: fixed; inset: 0; overflow: hidden; overscroll-behavior: none; line-height: 1.7; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } #root { height: 100dvh; 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; } }