@import "tailwindcss"; @theme { /* Typografie */ --font-sans: var(--font-inter), ui-sans-serif, system-ui, -apple-system, sans-serif; --font-display: var(--font-cormorant), Georgia, serif; /* Farben – Warmes Porzellan-Papier mit sattem Gelb-Grün / Smaragd */ --color-paper: #faf8f3; --color-surface: #ffffff; --color-ink: #111412; --color-ink-soft: #45504a; --color-line: #e0eae4; --color-primary: #111412; --color-primary-strong: #000000; --color-primary-soft: #e6f7f0; /* Glücksspiel & Zufall – Gelb-Grün / Smaragdgrün */ --color-emerald-accent: #0d7a57; --color-emerald-strong: #095c41; --color-emerald-soft: #e6f7f0; --color-emerald-line: #b2e5d1; --color-clay: #b4633f; --color-clay-soft: #f6eae2; /* Schatten */ --shadow-soft: 0 2px 4px rgb(17 20 18 / 0.03), 0 12px 36px rgb(17 20 18 / 0.06); --shadow-lift: 0 4px 12px rgb(17 20 18 / 0.06), 0 24px 52px rgb(17 20 18 / 0.10); --shadow-cta: 0 12px 28px rgb(17 20 18 / 0.22); /* Animationen */ --animate-float: float 7s ease-in-out infinite; --animate-coin-spin: coin-spin 10s linear infinite; --animate-bob: bob 2.4s ease-in-out infinite; @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-16px); } } @keyframes coin-spin { from { transform: rotateY(0deg); } to { transform: rotateY(360deg); } } @keyframes bob { 0%, 100% { transform: translateY(0); opacity: 0.7; } 50% { transform: translateY(6px); opacity: 1; } } @keyframes stream { from { stroke-dashoffset: 1000; } to { stroke-dashoffset: 0; } } @keyframes shootTL { 0% { transform: translate(0, 0); opacity: 0; } 20% { opacity: 0.7; } 80% { opacity: 0.7; } 100% { transform: translate(520px, 180px); opacity: 0; } } @keyframes shootTR { 0% { transform: translate(0, 0); opacity: 0; } 20% { opacity: 0.7; } 80% { opacity: 0.7; } 100% { transform: translate(-520px, 190px); opacity: 0; } } @keyframes shootBL { 0% { transform: translate(0, 0); opacity: 0; } 20% { opacity: 0.65; } 80% { opacity: 0.65; } 100% { transform: translate(480px, -170px); opacity: 0; } } } /* ---------- Basis ---------- */ html { scroll-behavior: smooth; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } } body { background: var(--color-paper); color: var(--color-ink); font-family: var(--font-sans); -webkit-font-smoothing: antialiased; overflow-x: hidden; } /* Der Inline-Check im Root-Layout läuft vor der Hydration. Dadurch blitzt der Preloader bei einem Reload innerhalb derselben Browser-Session nicht auf. */ /* Der Preloader würde auf einem gedrosselten Mobilgerät das LCP-Element verdecken. Die Seite bleibt dort sofort lesbar; Desktop behält den Effekt. */ @media (max-width: 767px) { [data-preloader-overlay] { display: none; } } /* Die Hero-Inhalte sind bereits vor dem Öffnen des Vorhangs im Startzustand. So kann GSAP sie nicht erst sichtbar machen und anschließend zurücksetzen. */ @media (prefers-reduced-motion: no-preference) { html[data-preloader="active"] .hero-el { opacity: 0; transform: translateY(34px); } .reveal { opacity: 0; transform: translateY(var(--reveal-y, 30px)); transition: opacity 0.7s ease var(--reveal-delay, 0s), transform 0.7s cubic-bezier(0.22, 1, 0.36, 1) var(--reveal-delay, 0s); } .reveal--visible { opacity: 1; transform: translateY(0); } } ::selection { background: rgb(22 21 19 / 0.12); } :focus-visible { outline: 2px solid var(--color-primary); outline-offset: 2px; border-radius: 6px; } /* Dezente Scrollbar */ ::-webkit-scrollbar { width: 10px; } ::-webkit-scrollbar-track { background: var(--color-paper); } ::-webkit-scrollbar-thumb { background: #d5d0c2; border-radius: 8px; border: 2px solid var(--color-paper); } ::-webkit-scrollbar-thumb:hover { background: #c1bbab; } /* ---------- Hintergrund-Deko ---------- */ .bg-grid { background-image: linear-gradient(to right, rgb(32 30 25 / 0.045) 1px, transparent 1px), linear-gradient(to bottom, rgb(32 30 25 / 0.045) 1px, transparent 1px); background-size: 46px 46px; mask-image: radial-gradient(ellipse 90% 65% at 50% 0%, black 25%, transparent 78%); -webkit-mask-image: radial-gradient(ellipse 90% 65% at 50% 0%, black 25%, transparent 78%); } .bg-noise { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); opacity: 0.03; } /* ---------- 3D-Münze (gebürstetes Messing, flach) ---------- */ .coin-scene { perspective: 1100px; } .coin { position: relative; width: 100%; height: 100%; transform-style: preserve-3d; will-change: transform; } .coin-face { position: absolute; inset: 0; border-radius: 9999px; display: flex; align-items: center; justify-content: center; backface-visibility: hidden; -webkit-backface-visibility: hidden; } .coin-face--front { transform: translateZ(4px); background: #dec998; box-shadow: inset 0 1px 2px rgb(255 250 235 / 0.5), inset 0 -2px 4px rgb(120 90 40 / 0.12); } .coin-face--back { background: #d6be87; box-shadow: inset 0 1px 2px rgb(255 248 228 / 0.5), inset 0 -2px 4px rgb(110 82 36 / 0.12); } .coin-edge { position: absolute; inset: 0; border-radius: 9999px; background: #8a6f44; backface-visibility: hidden; -webkit-backface-visibility: hidden; } .coin-engraving { position: absolute; inset: 8%; border-radius: 9999px; border: 2px solid rgb(122 94 51 / 0.38); pointer-events: none; } .coin-engraving--inner { inset: 16%; border-width: 1px; border-color: rgb(122 94 51 / 0.26); } .coin-label { font-family: var(--font-display); font-weight: 600; text-transform: uppercase; letter-spacing: 0.16em; color: #6e5533; text-shadow: 0 1px 0 rgb(255 246 224 / 0.8); max-width: 78%; text-align: center; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* ---------- 3D-Würfel ---------- */ .dice-scene { perspective: 900px; } .dice { position: relative; width: 100%; height: 100%; transform-style: preserve-3d; will-change: transform; } .dice-face { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: #fdfcf9; border: 1px solid var(--color-line); border-radius: 18%; box-shadow: inset 0 0 14px rgb(32 30 25 / 0.06); backface-visibility: hidden; -webkit-backface-visibility: hidden; overflow: hidden; padding: 8%; } .dice-face-label { font-family: var(--font-display); font-weight: 600; font-size: clamp(9px, 1.6vw, 13px); line-height: 1.2; text-align: center; color: var(--color-ink); overflow-wrap: anywhere; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } /* ---------- Magic 8-Ball (warmes Anthrazit, flach) ---------- */ .ball-body { background: #1d1b17; box-shadow: inset 0 -18px 42px rgb(0 0 0 / 0.6), inset 0 10px 26px rgb(255 255 255 / 0.07), 0 30px 60px rgb(32 30 25 / 0.28); } .ball-window { background: #12130f; box-shadow: inset 0 4px 18px rgb(0 0 0 / 0.75), 0 0 0 6px rgb(255 255 255 / 0.05); } /* ---------- Diverse ---------- */ .tabular { font-variant-numeric: tabular-nums; } input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; } input[type="number"] { -moz-appearance: textfield; appearance: textfield; }