/* ==========================================================================
   FORGE · MOTION
   Ausgangszustaende fuer GSAP-Reveals (kein Aufblitzen vor dem JS-Start),
   Sicherheitsnetz ohne JS / bei reduzierter Bewegung, Spotlight, Glow.
   ========================================================================== */

/* Vor dem Boot unsichtbar - nur wenn JS laeuft und Bewegung erlaubt ist */
html.fg-js:not(.fg-no-motion) [data-reveal],
html.fg-js:not(.fg-no-motion) [data-reveal-stagger] > *,
html.fg-js:not(.fg-no-motion) [data-split],
html.fg-js:not(.fg-no-motion) [data-reveal-img],
html.fg-js:not(.fg-no-motion) [data-forge-hero] [data-hero-kicker],
html.fg-js:not(.fg-no-motion) [data-forge-hero] [data-hero-title],
html.fg-js:not(.fg-no-motion) [data-forge-hero] [data-hero-lead],
html.fg-js:not(.fg-no-motion) [data-forge-hero] [data-hero-cta] > *,
html.fg-js:not(.fg-no-motion) [data-forge-hero] [data-hero-replay],
html.fg-js:not(.fg-no-motion) [data-forge-hero] [data-hero-meta] > *,
html.fg-js:not(.fg-no-motion) [data-forge-hero] [data-hero-visual] {
    opacity: 0;
}

/* Sicherheitsnetz: alles sichtbar */
html.fg-no-motion [data-reveal],
html.fg-no-motion [data-reveal-stagger] > *,
html.fg-no-motion [data-split],
html.fg-no-motion [data-reveal-img] { opacity: 1 !important; transform: none !important; filter: none !important; clip-path: none !important; }

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
    [data-reveal], [data-reveal-stagger] > *, [data-split], [data-reveal-img],
    [data-forge-hero] [data-hero-kicker], [data-forge-hero] [data-hero-title], [data-forge-hero] [data-hero-lead],
    [data-forge-hero] [data-hero-cta] > *, [data-forge-hero] [data-hero-replay], [data-forge-hero] [data-hero-meta] > *, [data-forge-hero] [data-hero-visual] { opacity: 1 !important; }
}

/* SplitText Zeilenmaske */
.fg-line { padding-bottom: .06em; margin-bottom: -.06em; }

/* Lenis */
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-smooth [data-lenis-prevent] { overscroll-behavior: contain; }
.lenis.lenis-stopped { overflow: hidden; }

/* Cursor-Spotlight auf Karten */
.fg-spot { position: relative; isolation: isolate; }
.fg-spot::before {
    content: ""; position: absolute; inset: 0; z-index: 0; border-radius: inherit; pointer-events: none;
    background: radial-gradient(420px circle at var(--mx, 50%) var(--my, 0%), rgba(198,244,50,.09), transparent 60%);
    opacity: 0; transition: opacity .5s var(--fg-ease);
}
.fg-spot:hover::before { opacity: 1; }
.fg-spot::after {
    content: ""; position: absolute; inset: -1px; z-index: 0; border-radius: inherit; pointer-events: none; padding: 1px;
    background: radial-gradient(260px circle at var(--mx, 50%) var(--my, 0%), rgba(198,244,50,.55), transparent 65%);
    -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
    -webkit-mask-composite: xor; mask-composite: exclude;
    opacity: 0; transition: opacity .5s var(--fg-ease);
}
.fg-spot:hover::after { opacity: 1; }
.fg-spot > * { position: relative; z-index: 1; }

/* Atmender Glow (dekorativ) */
@keyframes fg-breathe { 0%, 100% { opacity: .55; transform: scale(1); } 50% { opacity: .9; transform: scale(1.06); } }
@keyframes fg-scan { 0% { transform: translateY(-100%); } 100% { transform: translateY(100%); } }
@keyframes fg-pulse-dot { 0% { box-shadow: 0 0 0 0 rgba(143,224,92,.55); } 70% { box-shadow: 0 0 0 7px rgba(143,224,92,0); } 100% { box-shadow: 0 0 0 0 rgba(143,224,92,0); } }

/* Status-Punkt (Lieferbarkeit) */
.fg-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--fg-success); display: inline-block; flex: 0 0 auto; animation: fg-pulse-dot 2.4s infinite; }
.fg-dot.is-warn { background: var(--fg-warning); animation: none; }
.fg-dot.is-off { background: var(--fg-danger); animation: none; }

/* Grain-Overlay fuer Tiefe (sehr dezent) */
.fg-grain::after {
    content: ""; position: absolute; inset: 0; pointer-events: none; opacity: .05; mix-blend-mode: overlay;
    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='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
