371 lines
7.9 KiB
CSS
371 lines
7.9 KiB
CSS
@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;
|
||
}
|