/* ==========================================================================
   NC MOTION 2026 – einheitliches Motion-System fuer nobleclean.at
   Version 1.0 (2026-09-26) · Datei ersetzt KEINE bestehende Datei, sondern
   wird ZULETZT geladen (nach r8.css, siehe BERICHT.md -> Deploy-Anleitung).

   Grundsaetze
   1. Nur transform + opacity werden animiert (Compositor). Farben, Schatten,
      Rahmen wechseln OHNE Transition; weiche Schatten kommen aus einem
      Pseudo-Element, dessen opacity animiert wird.
   2. Progressive Enhancement: ohne JS ist ALLES sichtbar. Verstecken nur,
      wenn html.nc-motion-ready (gesetzt von nc-motion-2026.js) UND das
      Element beim Start unterhalb des Viewports lag (.ncm-reveal, vom JS
      vergeben). Hero / above-the-fold wird nie versteckt.
   3. Scroll-Reveal bevorzugt per CSS animation-timeline: view(); JS-Fallback
      (IntersectionObserver -> .ncm-in) nur ohne Support.
   4. prefers-reduced-motion: keine Bewegung, nichts versteckt.
      Hover-Lifts nur bei (hover:hover) and (pointer:fine).
   5. Spezifitaet: Neutralisierungen nutzen ":root body …:not(.ncm-reveal)"
      um die alten !important-Regeln (Spezifitaet bis 0,2,0) sicher zu
      schlagen. Jede Neutralisierung nennt die alte Quelle (N1 … N12).
   ========================================================================== */

:root {
  --ncm-ease-out: cubic-bezier(0.16, 1, 0.3, 1);   /* expo-out, ruhig   */
  --ncm-ease-std: cubic-bezier(0.2, 0, 0, 1);      /* standard          */
  --ncm-dur-press: 120ms;
  --ncm-dur-fast: 180ms;
  --ncm-dur-hover: 260ms;
  --ncm-dur-reveal: 620ms;
  --ncm-lift-card: -3px;
  --ncm-lift-btn: -2px;
  --ncm-reveal-shift: 18px;
  --ncm-zoom: 1.04;
  --ncm-shadow-hover: 0 18px 38px -14px rgba(11, 27, 43, 0.26), 0 0 0 1px rgba(0, 210, 133, 0.38);
  --ncm-shadow-hover-dark: 0 20px 40px -14px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(0, 210, 133, 0.45);
  --ncm-focus-inner: #FFB800;
  --ncm-focus-outer: #0B1B2B;
}

/* --------------------------------------------------------------------------
   0. HERO / ABOVE-THE-FOLD: niemals verstecken, keine Reveal-Animation
   (Absicherung; zusaetzlich vergibt das JS .ncm-reveal nie im Hero)
   -------------------------------------------------------------------------- */
:root body :is(.nc-hero-wireframe, .nc-hero2, .nc-hero-parallax-bg, .nc-hero-cols, [data-ncm-hero])
  :is(.ncm-reveal, .nc-reveal, .ncx-reveal, .rf-reveal, .nc-motion-reveal, [data-nc-reveal], h1, p) {
  opacity: 1 !important;
  visibility: visible !important;
  filter: none !important;
  animation: none !important;
}

/* --------------------------------------------------------------------------
   1. NEUTRALISIERUNG ALTER VERSTECK-REGELN (Inhalte immer sichtbar)
   N1  .rf-reveal / .nc-motion-reveal      opacity:0; translate3d(0,24px,0)
       -> inline <style id="nc-rf-motion-suite-css">, <style id="nc-gpu-motion-stylesheet">
       -> nc-motion-interactions-css-ce274923b0d8.css (2x, mit !important + blur(3-4px))
   N2  .nc-reveal / .nc-reveal-left        opacity:0; translateY(16px)/translateX(-20px)
       -> components.css (Klassen werden von inline #nc-motion-js an ~28 Kartentypen vergeben)
   N3  .ncx-reveal / .nc-reveal / [data-nc-reveal] :not(.nc-hero-cols *)
       opacity:0; translateY(24px) scale(.99); blur(1.5px)
       -> inline <style id="nc-scroll-hover-master-css">  (Hero-Ausnahme greift nur fuer .nc-hero-cols,
          NICHT fuer den aktuellen Startseiten-Hero .nc-hero-wireframe)
   N4  .nc-step-card                      opacity:0; translateY(40px) -> components.css
   N5  .nc-check-list li                  opacity:0; translateX(-12px) -> components.css
   N6  html.nc-fonts-pending h1/.nc-hero-headline  opacity:0 -> inline <style id="nc-design-system-2026-tokens">
       (Klasse wird von einem WP-Rocket-verzoegerten Script gesetzt – heute wirkungslos, aber Risiko)
   N7  .nc-underline-reveal::after         clip-path inset -> components.css
   -------------------------------------------------------------------------- */
:root body :is(.rf-reveal, .nc-motion-reveal, .nc-reveal, .nc-reveal-left, .ncx-reveal,
              [data-nc-reveal], .nc-scroll-reveal, .nc-step-card, .nc-check-list li):not(.ncm-reveal) {
  opacity: 1 !important;
  visibility: visible !important;
  filter: none !important;
  will-change: auto !important;
  transition-delay: 0s !important;          /* JS setzt inline transitionDelay-Staffelung */
}
:root body :is(.rf-reveal, .nc-motion-reveal, .nc-reveal, .nc-reveal-left, .ncx-reveal,
              [data-nc-reveal], .nc-scroll-reveal, .nc-step-card, .nc-check-list li):not(.ncm-reveal):not(:hover) {
  transform: none !important;               /* :not(:hover) laesst die Hover-Lifts (Abschnitt 4) zu */
}
html.nc-fonts-pending body :is(.wp-block-kadence-advancedheading h1, .nc-hero-headline) {
  opacity: 1 !important;                    /* N6 */
  transform: none !important;
}
:root body .nc-underline-reveal::after { clip-path: none !important; }  /* N7 */

/* N8  Drei Parallax-Systeme schreiben gleichzeitig transform auf Bilder:
       #nc-scrollfx-js (alle img[fetchpriority=high] – trifft auch das 1,1-MB-Eventbild
       im Spotlight-Block!), #nc-design-effects-js (.nc-parallax), #nc-hero-scroll-motion.
       Ausserhalb des Heros wird Parallax neutralisiert. */
:root body :is(.nc-spotlight-banner, .nc-spotlight-visual, main section:not(.nc-hero-wireframe):not(.nc-hero2))
  img:is(.nc-scrollfx-hero-parallax, .nc-parallax) {
  transform: none !important;
  will-change: auto !important;
}

/* N9  Doppelte Lesefortschrittsleiste: #nc-scrollprogress animiert "width"
       (nicht compositor) -> inline <style id="nc-design-effects-css">.
       #nc-scrollfx-progress-bar (scaleX) bleibt als einzige Leiste. */
:root body #nc-scrollprogress { display: none !important; }

/* N10 Farb-Transitions, die Lighthouse als "nicht zusammengesetzte Animationen"
       meldet (6x div#nc-grid-b2b > .nc-service-card > a.nc-btn-ghost-dark > span,
       "Unsupported CSS Property: color"):
       -> nc-master-hero-cta-rhythm-css-2026-189ab6be453c.css
          ":root body .nc-btn-ghost-dark span { transition: color .25s }" u. Gold-/Footer-Varianten
       -> inline <style id="nc-global-footer-2026-css"> .nc-btn-primary-gold span { transition: color .22s }
       Farbwechsel erfolgen jetzt sofort; die weiche Wirkung kommt aus Abschnitt 5. */
:root body .entry-content :is(.nc-btn-ghost-dark, .nc-btn-ghost-mint, .nc-btn-ghost-white, .nc-btn-ghost-gold,
                             .nc-btn-primary-gold, .nc-btn-apply, .nc-btn-submit) span,
:root body :is(#colophon, .site-footer, .nc-footer-wrapper) :is(.nc-footer-cta-btn, .nc-btn-primary-gold) span,
:root body #masthead .nc-btn-header-cta span {
  transition: none !important;
}

/* N11 Endlos-Animationen auf box-shadow (Paint pro Frame, nicht compositor):
       nc-cta-aura (components.css: .nc-cta-primary, .nc-hero-btn-primary, .nc-district-cta-btn),
       nc-pulse (components.css: .nc-top-phone-link::before),
       nc-pulse-beacon (nc-motion-interactions: .nc-beacon-dot),
       nc-pulse-teal (hero-cta-rhythm: .nc-pulse-dot)
       -> ersetzt durch transform/opacity-Puls. */
:root body :is(.nc-cta-primary, .nc-hero-btn-primary, .nc-district-cta-btn):not(:hover) {
  animation: none !important;
}
:root body :is(.nc-beacon-dot, .nc-pulse-dot),
:root body .nc-top-phone-link::before {
  animation: ncm-dot-pulse 2.4s var(--ncm-ease-std) infinite !important;
  box-shadow: none !important;
}
@keyframes ncm-dot-pulse {
  0%, 100% { opacity: 1;    transform: scale(1); }
  50%      { opacity: 0.55; transform: scale(0.82); }
}

/* N12 Button-"Shine" animiert "left" (-120% -> 140%, Layout pro Frame):
       nc-motion-interactions-css: .nc-btn/.nc-btn-ghost-mint/.nc-btn-glow-gold/.nc-btn-header-cta::after
       -> auf transform umgestellt. */
:root body :is(.nc-btn, .nc-btn-ghost-mint, .nc-btn-glow-gold, .nc-btn-header-cta)::after {
  left: 0 !important;
  transform: translate3d(-130%, 0, 0);
  transition: transform 700ms var(--ncm-ease-out) !important;
}
@media (hover: hover) and (pointer: fine) {
  :root body :is(.nc-btn, .nc-btn-ghost-mint, .nc-btn-glow-gold, .nc-btn-header-cta):hover::after {
    left: 0 !important;
    transform: translate3d(180%, 0, 0);
  }
}

/* --------------------------------------------------------------------------
   2. SCROLL-REVEAL (neu) – nur .ncm-reveal, nur mit html.nc-motion-ready
   Das JS vergibt .ncm-reveal ausschliesslich an Elemente, die beim Start
   unterhalb des Viewports liegen und nicht im Hero stehen.
   -------------------------------------------------------------------------- */

/* 2a. Moderne Browser: Scroll-Driven Animation (animation-timeline: view()), kein Observer.
       view() braucht den Dokument-Scroller als naechsten Scroll-Container. Wrapper mit
       overflow-x:hidden (.nc-master-wrap -> hidden/auto, .nc-leadership-section -> hidden/hidden)
       machen sich selbst zum Scroll-Container und legen die Timeline still. Fix: overflow "clip"
       (optisch identisch, erzeugt keinen Scroll-Container). Elemente mit weiteren solchen
       Vorfahren erhalten per JS .ncm-io und laufen ueber den IntersectionObserver-Fallback. */
:root body .nc-master-wrap { overflow-x: clip !important; }
:root body .nc-leadership-section { overflow: clip !important; }
@supports (animation-timeline: view()) {
  :root body .ncm-reveal:not(.ncm-io) {
    animation: ncm-reveal-in linear both;
    animation-timeline: view();
    animation-range: entry 0% entry 55%;
  }
}
@keyframes ncm-reveal-in {
  from { opacity: 0; transform: translate3d(0, var(--ncm-reveal-shift), 0); }
  to   { opacity: 1; transform: none; }
}

/* 2b. Fallback (.ncm-io: kein view()-Support oder Scroll-Container-Vorfahr):
       Klasse + Transition, JS setzt .ncm-in. Transitions haben Vorrang vor !important,
       daher sauber gegen Altregeln. */
:root body .ncm-reveal.ncm-io {
  transition: opacity var(--ncm-dur-reveal) var(--ncm-ease-out),
              transform var(--ncm-dur-reveal) var(--ncm-ease-out) !important;
}
:root body .ncm-reveal.ncm-io:not(.ncm-in):not(.nc-page-wrap *):not(.nc-faq-card) {
  opacity: 0 !important;
  transform: translate3d(0, var(--ncm-reveal-shift), 0) !important;
}
:root body .ncm-reveal.ncm-io.ncm-in {
  opacity: 1 !important;
}

/* 2c. Druck & Barrierefreiheit: nie versteckt */
@media print {
  :root body .ncm-reveal { opacity: 1 !important; transform: none !important; animation: none !important; }
}

/* --------------------------------------------------------------------------
   3. GRUNDLAGE KARTEN: ruhende Transition nur auf transform, Schatten-Layer
   -------------------------------------------------------------------------- */
:root body :is(.nc-service-card, .nc-district-card, .nc-ref-card, .nc-strength-card, .nc-review-card,
              .nc-leader-card, .nc-audience-card, .nc-bento-card, .ncb-card, .nc-why-card, .nc-step-card,
              .nc-card-2026, .nc-blog-card, .nc-feature-card, .nc-pricing-card, [data-ncm-card]) {
  position: relative;
  transition: transform var(--ncm-dur-hover) var(--ncm-ease-out) !important;
  will-change: auto !important;             /* statt dauerhaft will-change auf ~80 Karten */
}
:root body :is(.nc-service-card, .nc-district-card, .nc-ref-card, .nc-strength-card, .nc-review-card,
              .nc-leader-card, .nc-audience-card, .nc-bento-card, .ncb-card, .nc-why-card, .nc-step-card,
              .nc-card-2026, .nc-blog-card, .nc-feature-card, .nc-pricing-card, [data-ncm-card])::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  box-shadow: var(--ncm-shadow-hover);
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--ncm-dur-hover) var(--ncm-ease-out);
  z-index: 0;
}
:root body :is(.nc-card-dark, .nc-ref-card, .nc-why-card, .nc-step-card, .nc-leader-card)::after {
  box-shadow: var(--ncm-shadow-hover-dark);
}

/* --------------------------------------------------------------------------
   4. HOVER nur fuer echte Maus/Trackpad-Geraete
   -------------------------------------------------------------------------- */
@media (hover: hover) and (pointer: fine) {
  /* 4a. Karten-Lift 3 px; Schatten ueber Pseudo-Element-Opacity.
         Die alten Hover-Schatten/Rahmen (components.css, nc-motion-interactions,
         #nc-scroll-hover-master-css, #nobleclean-masterpiece-2026) werden
         nicht mehr transitioniert (siehe Abschnitt 3) – sie wechseln sofort
         und liegen unter dem weichen ::after-Layer. Scale entfaellt (unscharfe Schrift). */
  :root body :is(.nc-service-card, .nc-district-card, .nc-ref-card, .nc-strength-card, .nc-review-card,
                .nc-leader-card, .nc-audience-card, .nc-bento-card, .ncb-card, .nc-why-card, .nc-step-card,
                .nc-card-2026, .nc-blog-card, .nc-feature-card, .nc-pricing-card, [data-ncm-card]):hover {
    transform: translate3d(0, var(--ncm-lift-card), 0) !important;
  }
  :root body :is(.nc-service-card, .nc-district-card, .nc-ref-card, .nc-strength-card, .nc-review-card,
                .nc-leader-card, .nc-audience-card, .nc-bento-card, .ncb-card, .nc-why-card, .nc-step-card,
                .nc-card-2026, .nc-blog-card, .nc-feature-card, .nc-pricing-card, [data-ncm-card]):hover::after {
    opacity: 1;
  }
  /* Icon-Nudge ohne Rotation (vorher scale 1.08-1.12 + rotate 3-5deg aus 3 Quellen) */
  :root body :is(.nc-service-card, .nc-district-card, .nc-bento-card, .ncb-card, .nc-feature-card):hover
    :is(.nc-card-icon, .nc-service-icon, .nc-feature-icon, .ncb-card-icon, .nc-district-badge, .ic) {
    transform: translate3d(0, -2px, 0) !important;
    transition: transform var(--ncm-dur-hover) var(--ncm-ease-out) !important;
  }

  /* 4b. Bild-Zoom 1.04 in overflow-hidden Containern */
  :root body :is(.nc-spotlight-img-link, .nc-spotlight-visual, .nc-ref-img-wrap, .kt-info-box-image,
                .rf-img-zoom, [data-ncm-zoom]) {
    overflow: hidden;
  }
  :root body :is(.nc-spotlight-img-link, .nc-spotlight-visual, .nc-ref-img-wrap, .kt-info-box-image,
                .rf-img-zoom, [data-ncm-zoom]) img {
    transition: transform 700ms var(--ncm-ease-out) !important;
    will-change: auto !important;
  }
  :root body :is(.nc-spotlight-img-link, .nc-spotlight-visual, .nc-ref-img-wrap, .kt-info-box-image,
                .rf-img-zoom, [data-ncm-zoom]):hover img,
  :root body :is(.nc-bento-card, .rf-card, [data-ncm-card]):hover :is(.nc-ref-img-wrap, .kt-info-box-image) img {
    transform: scale(var(--ncm-zoom)) !important;   /* vorher 1.05 !important (#nc-rf-motion-suite-css) */
  }

  /* 4c. Buttons: 2 px Lift + Pfeil-Verschiebung */
  :root body :is(.nc-btn-ghost-dark, .nc-btn-ghost-mint, .nc-btn-ghost-white, .nc-btn-ghost-gold,
                .nc-btn-primary, .nc-btn-primary-gold, .nc-hero-btn, .nc-hero-btn-primary,
                .nc-btn-spot-primary, .nc-btn-spot-secondary, .nc-btn-header-cta, .wp-block-button__link,
                .kt-button, [data-ncm-btn]):hover {
    transform: translate3d(0, var(--ncm-lift-btn), 0) !important;
  }
  :root body :is(.nc-btn-ghost-dark, .nc-btn-ghost-mint, .nc-btn-ghost-white, .nc-btn-ghost-gold,
                .nc-btn-primary, .nc-btn-primary-gold, .nc-hero-btn, .nc-hero-btn-primary,
                .nc-btn-spot-primary, .nc-btn-spot-secondary, .nc-button, .ncb-btn, .kt-button,
                .nc-district-card, [data-ncm-btn]):hover
    :is(.ncm-arrow, .arw, .nc-district-action span, svg:last-child:not(:first-child)) {
    transform: translate3d(4px, 0, 0) !important;   /* vorher 6px (#nc-scroll-hover-master-css) */
  }
}

/* Button-Grundlage (alle Geraete): nur transform transitionieren.
   Vorher: transition auf transform + box-shadow + background-color + border-color
   (#nobleclean-masterpiece-2026, #nc-gpu-motion-stylesheet: 160-180ms). */
:root body :is(.nc-btn-ghost-dark, .nc-btn-ghost-mint, .nc-btn-ghost-white, .nc-btn-ghost-gold,
              .nc-btn-primary, .nc-btn-primary-gold, .nc-hero-btn, .nc-hero-btn-primary,
              .nc-btn-spot-primary, .nc-btn-spot-secondary, .nc-btn-header-cta, .wp-block-button__link,
              .kt-button, .nc-ref-tab-btn, .nc-dist-filter-btn, .nc-mode-tab, .nc-aud-tab-btn, [data-ncm-btn]) {
  transition: transform var(--ncm-dur-fast) var(--ncm-ease-out) !important;
  will-change: auto !important;
}
:root body :is(.nc-btn-ghost-dark, .nc-btn-ghost-mint, .nc-btn-ghost-white, .nc-btn-ghost-gold,
              .nc-btn-primary, .nc-btn-primary-gold, .nc-hero-btn, .nc-hero-btn-primary, .nc-button,
              .ncb-btn, .kt-button, [data-ncm-btn]) :is(.ncm-arrow, .arw, svg:last-child:not(:first-child)) {
  display: inline-block;
  transition: transform var(--ncm-dur-fast) var(--ncm-ease-out) !important;
}
/* Press-Feedback auch auf Touch (kurz, nur transform) */
:root body :is(.nc-btn-ghost-dark, .nc-btn-ghost-mint, .nc-btn-ghost-white, .nc-btn-ghost-gold,
              .nc-btn-primary, .nc-btn-primary-gold, .nc-hero-btn, .nc-hero-btn-primary,
              .nc-btn-mobile-call, .nc-sticky-btn, [data-ncm-btn]):active {
  transform: scale(0.98) !important;
  transition-duration: var(--ncm-dur-press) !important;
}

/* --------------------------------------------------------------------------
   5. GHOST-BUTTON-FUELLUNG ohne background-Transition
   Der dunkle Fill (vorher "background: #0B1B2B" + 160ms background-color-
   Transition) kommt aus ::before und blendet per opacity ein.
   -------------------------------------------------------------------------- */
:root body .entry-content a.nc-btn-ghost-dark {
  position: relative;
  isolation: isolate;
}
:root body .entry-content a.nc-btn-ghost-dark::before {
  content: "";
  position: absolute;
  inset: -2px;                               /* deckt den 2px-Rahmen */
  border-radius: inherit;
  background: #0B1B2B;
  opacity: 0;
  z-index: -1;
  transition: opacity var(--ncm-dur-fast) var(--ncm-ease-std);
  pointer-events: none;
}
@media (hover: hover) and (pointer: fine) {
  :root body .entry-content a.nc-btn-ghost-dark:hover {
    background: transparent !important;
    box-shadow: none !important;
  }
  :root body .entry-content a.nc-btn-ghost-dark:hover::before { opacity: 1; }
}
:root body .entry-content a.nc-btn-ghost-dark:focus-visible::before { opacity: 1; }
:root body .entry-content a.nc-btn-ghost-dark:is(:hover, :focus-visible),
:root body .entry-content a.nc-btn-ghost-dark:is(:hover, :focus-visible) span {
  color: #FFFFFF !important;
  -webkit-text-fill-color: #FFFFFF !important;
}

/* --------------------------------------------------------------------------
   6. FOKUS: immer sichtbar (zweifarbiger Ring, hell & dunkel lesbar)
   -------------------------------------------------------------------------- */
:root body :is(a, button, summary, [role="tab"], [role="button"], input, select, textarea, [tabindex]):focus-visible {
  outline: 3px solid var(--ncm-focus-inner) !important;
  outline-offset: 2px !important;
  box-shadow: 0 0 0 5px var(--ncm-focus-outer) !important;
}
:root body :is(a, button, summary, [role="tab"], [role="button"], input, select, textarea, [tabindex]):focus:not(:focus-visible) {
  outline: none;
}

/* --------------------------------------------------------------------------
   7. BARRIEREFREIHEIT (PageSpeed): Kontrast .nc-btn-mobile-call
   Ursache: hero-cta-rhythm.css Z. ~1672
   ":is(… .nc-hero-form-card …) :is(.text-muted, small, span:not([class*=btn])…)"
   faerbt das klassenlose <span> im gruenen Call-Button #94A3B8 (1,29:1 auf #00D285).
   Fix hier per Spezifitaet (0,7,4); sauberer: <span class="nc-btn-label"> im HTML.
   -------------------------------------------------------------------------- */
:root body .nc-hero-form-card .nc-mobile-direct-call-box a.nc-btn-mobile-call.nc-btn-mobile-call > span:not(.ncm-x):not(.ncm-y):not(.ncm-z) {
  color: #071320 !important;                 /* 9,4:1 auf #00D285 */
  -webkit-text-fill-color: #071320 !important;
}

/* --------------------------------------------------------------------------
   8. REDUCED MOTION: nichts versteckt, nichts bewegt
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  :root body .ncm-reveal,
  :root body .ncm-reveal.ncm-io:not(.ncm-in):not(.nc-page-wrap *):not(.nc-faq-card) {
    opacity: 1 !important;
    transform: none !important;
    animation: none !important;
    transition: none !important;
  }
  :root body :is(.nc-service-card, .nc-district-card, .nc-ref-card, .nc-strength-card, .nc-review-card,
                .nc-leader-card, .nc-audience-card, .nc-bento-card, .ncb-card, .nc-why-card, .nc-step-card,
                .nc-card-2026, .nc-blog-card, .nc-feature-card, .nc-pricing-card, [data-ncm-card]),
  :root body :is(.nc-service-card, .nc-district-card, .nc-ref-card, .nc-strength-card, .nc-review-card,
                .nc-leader-card, .nc-audience-card, .nc-bento-card, .ncb-card, .nc-why-card, .nc-step-card,
                .nc-card-2026, .nc-blog-card, .nc-feature-card, .nc-pricing-card, [data-ncm-card]):hover,
  :root body :is(.nc-btn-ghost-dark, .nc-btn-ghost-mint, .nc-btn-ghost-white, .nc-btn-ghost-gold,
                .nc-btn-primary, .nc-btn-primary-gold, .nc-hero-btn, .nc-hero-btn-primary, [data-ncm-btn]):is(:hover, :active),
  :root body :is(.nc-spotlight-img-link, .nc-spotlight-visual, .nc-ref-img-wrap, .rf-img-zoom, [data-ncm-zoom]):hover img,
  :root body img:is(.nc-scrollfx-hero-parallax, .nc-parallax) {
    transform: none !important;
    transition: none !important;
  }
  :root body :is(.nc-beacon-dot, .nc-pulse-dot), :root body .nc-top-phone-link::before { animation: none !important; }
  :root body :is(.nc-btn, .nc-btn-ghost-mint, .nc-btn-glow-gold, .nc-btn-header-cta)::after { display: none !important; }
  /* Opacity-Ueberblendungen (Schatten-Layer, Button-Fill) bleiben erlaubt: keine Bewegung */
}

/* --------------------------------------------------------------------------
   10. KONTRAST-FIXES Leistungs-/Bezirksseiten (Runde 10c, Lighthouse color-contrast)
   Vergleichstabelle im dunklen Block: eine globale th-Regel faerbt die Koepfe
   #0a6b62 auf #0e1c30 (2,7:1). Nur Tabellen ohne Klasse mit Inline-Stil
   betroffen; die hellen .nc-table-Koepfe bleiben unveraendert.
   -------------------------------------------------------------------------- */
:root body table:not([class]) thead th[style] { color: #CBD5E1 !important; }
:root body table:not([class]) thead th[style*="font-weight: 800"],
:root body table:not([class]) thead th[style*="font-weight: 800"] span { color: #5EEAD4 !important; }
:root body .nc-faq-contact-box span[style*="#64748B"] { color: #475569 !important; }
