/*
	Theme Name: Child of Hello Elementor
    Template: hello-elementor
    */



    /* 
=====================================================
KREATIVBOX DESIGN SYSTEM
=====================================================
Ein modulares CSS-System für Elementor.
Kombiniere Klassen nach Bedarf.

INHALT:
1. Variablen
2. Farben (Hintergrund & Text)
3. Typografie (Schriftarten & Größen)
4. Border-Radius
5. Abstände (Spacing)
6. Glass-Effekte
7. Buttons 

VERWENDUNG:
  class="bg-website text-white fs-lg radius-24 mb-md"
=====================================================
*/


/* 
=====================================================
1. VARIABLEN
=====================================================
*/
:root {
  /* ===== FARBEN ===== */
  /* Bereichsfarben */
  --kb-design: #FDE962;
  --kb-content: #00e962;
  --kb-marke: #234BFF;
  --kb-kreativbox: #e51f75;
  --kb-website: #8221D8;
  --kb-strategie: #ff9648;
  --kb-somedia: #DD4342;

  /* Grautöne */
  --kb-gray-900: #0A0A0A;
  --kb-gray-800: #343838;
  --kb-gray-700: #525453;
  --kb-gray-500: #8a8b89;
  --kb-gray-300: #c4c2c0;
  --kb-gray-200: #e0dedb;
  --kb-gray-100: #fdf9f6;
  --kb-white: #ffffff;

  /* Glass Basis */
  --glass-blur: 12px;
  --glass-radius: 24px;
  
  /* Weiß-Abstufungen für Glass */
  --white-0: hsla(0, 0%, 100%, 0);
  --white-5: hsla(0, 0%, 100%, 0.05);
  --white-10: hsla(0, 0%, 100%, 0.1);
  --white-20: hsla(0, 0%, 100%, 0.2);
  --white-30: hsla(0, 0%, 100%, 0.3);
  --white-40: hsla(0, 0%, 100%, 0.4);
  --white-50: hsla(0, 0%, 100%, 0.5);
  --white-100: hsla(0, 0%, 100%, 1);
  
  /* Standard Akzentfarbe (kann überschrieben werden) */
  --glass-accent: var(--white-50, #e0dedb);
  
  /* ===== TYPOGRAFIE ===== */
  /* Schriftarten */
  --font-body: 'Avenir', 'Montserrat', 'Poppins', Arial, sans-serif;
  --font-headline: 'Brown', 'Avenir', Arial, sans-serif;
  
  /* Schriftgrößen mit Clamp (responsive) */
    /* ===== SCHRIFTGRÖSSEN ===== */
  
  /* XXXL - Hero Headlines (180px max → 48px min) */
  /* 11.25rem auf Desktop, ~3rem auf Mobile */
  --fs-xxxl: clamp(3rem, 1.5rem + 7.5vw, 11.25rem);
  
  /* XXL - Große Section Headlines (120px max → 36px min) */
  /* 7.5rem auf Desktop, ~2.25rem auf Mobile */
  --fs-xxl: clamp(2.25rem, 1rem + 5vw, 7.5rem);
  
  /* XL - Section Headlines (80px max → 28px min) */
  /* 5rem auf Desktop, ~1.75rem auf Mobile */
  --fs-xl: clamp(1.75rem, 0.875rem + 3.5vw, 5rem);
  
  /* LG - Subheadlines (48px max → 22px min)
     Vorher 60px max: als H2 neben 19px-Fließtext zu plakatig. */
  --fs-lg: clamp(1.375rem, 0.85rem + 2vw, 3rem);

  /* MD - Lead Text / große Absätze (24px max → 18px min)
     Vorher 36px max: Lead soll ~1.25x Fließtext sein, keine Headline. */
  --fs-md: clamp(1.125rem, 1rem + 0.55vw, 1.5rem);
  
  /* BASE - Fließtext Standard (19px max → 16px min)
     Bewusst flache Kurve: Lesetext soll auf Desktop nicht über
     ~19px wachsen (vorher 24px, das war zu viel). */
  --fs-base: clamp(1rem, 0.93rem + 0.3vw, 1.1875rem);
  
  /* SM - Kleinerer Text (17px max → 15px min)
     Vorher 16-18px: kollidierte mit dem neuen fs-base (16-19px). */
  --fs-sm: clamp(0.9375rem, 0.9rem + 0.2vw, 1.0625rem);
  
  /* XS - Captions, Labels (14px max → 12px min) */
  /* 0.875rem auf Desktop, ~0.75rem auf Mobile */
  --fs-xs: clamp(0.75rem, 0.7rem + 0.2vw, 0.875rem);
  
  /* ===== BORDER RADIUS ===== */
  --radius-sm: 8px;
  --radius-12: 12px;
  --radius-24: 24px;
  --radius-32: 32px;
  --radius-full: 100vmax;
  
  /* ===== SPACING ===== */
  --space-xs: clamp(0.25rem, 0.2rem + 0.25vw, 0.5rem);
  --space-sm: clamp(0.5rem, 0.4rem + 0.5vw, 0.75rem);
  --space-md: clamp(1rem, 0.8rem + 1vw, 1.5rem);
  --space-lg: clamp(1.5rem, 1.25rem + 1.25vw, 2rem);
  --space-xl: clamp(2rem, 1.5rem + 2.5vw, 3rem);
  --space-xxl: clamp(3rem, 2.5rem + 2.5vw, 5rem);
  --space-xxxl: clamp(5rem, 4rem + 5vw, 8rem);
  
  /* ===== GLASS EFFEKTE ===== */
  --glass-blur: 12px;
  --glass-bg: rgba(255, 255, 255, 0.12);
  --glass-border: rgba(255, 255, 255, 0.3);
  --glass-shine: rgba(255, 255, 255, 0.5);

  /* ===== GLOBALE EINSTELLUNGEN ===== */
  /* Akzentfarbe für Selektion, Links, etc. */
  --kb-accent: var(--kb-kreativbox);
  --kb-accent-hover: var(--kb-gray-300);

  /* Link-Farben */
  --kb-link-color: var(--kb-kreativbox);
  --kb-link-hover: var(--kb-gray-300);
  --kb-link-underline: currentColor;

  /* Selektion */
  --kb-selection-bg: var(--kb-kreativbox);
  --kb-selection-text: var(--kb-white);

  /* Cursor */
  --kb-cursor-color: var(--kb-kreativbox);
}


/* ============================================
   GLOBALE BASIS-STYLES
   ============================================ */

/* ===== TEXT SELECTION / MARKIERUNG ===== */
::selection {
  background-color: var(--kb-selection-bg);
  color: var(--kb-selection-text);
}

::-moz-selection {
  background-color: var(--kb-selection-bg);
  color: var(--kb-selection-text);
}

/* Varianten für verschiedene Bereiche */
.selection-design::selection,
.selection-design ::-moz-selection {
  background-color: var(--kb-design);
  color: var(--kb-gray-900);
}

.selection-content::selection,
.selection-content ::-moz-selection {
  background-color: var(--kb-content);
  color: var(--kb-gray-900);
}

.selection-marke::selection,
.selection-marke ::-moz-selection {
  background-color: var(--kb-marke);
  color: var(--kb-white);
}

.selection-website::selection,
.selection-website ::-moz-selection {
  background-color: var(--kb-website);
  color: var(--kb-white);
}

.selection-strategie::selection,
.selection-strategie ::-moz-selection {
  background-color: var(--kb-strategie);
  color: var(--kb-gray-900);
}

.selection-somedia::selection,
.selection-somedia ::-moz-selection {
  background-color: var(--kb-somedia);
  color: var(--kb-white);
}

html {
	scrollbar-gutter: stable;
}

/* ============================================
   KB ICON (Leistungs-Icons als Inline-SVG)
   ============================================
   Wird vom Shortcode [kb_leistung_icon] gerendert. Farbe steuert das ACF-Feld
   "icon_color" via Modifier-Klasse, SVG erbt sie über currentColor. */
.kb-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 0;
  color: currentColor; /* erbt von Eltern, falls keine Farbklasse gesetzt */
}
.kb-icon svg {
  width: 100%;
  height: 100%;
  display: block;
}
.kb-icon--marke      { color: var(--kb-marke); }
.kb-icon--website    { color: var(--kb-website); }
.kb-icon--design     { color: var(--kb-design); }
.kb-icon--content    { color: var(--kb-content); }
.kb-icon--strategie  { color: var(--kb-strategie); }
.kb-icon--somedia    { color: var(--kb-somedia); }
.kb-icon--kreativbox { color: var(--kb-kreativbox); }
.kb-icon--black      { color: var(--kb-gray-900, #101414); }
.kb-icon--white      { color: var(--kb-white, #ffffff); }

/* ============================================
   Z-INDEX SCALE (Single Source of Truth)
   ============================================
   Statt verstreuter 99999-Werte ein klares Layer-System.
   Reihenfolge: niedrig (unten) → hoch (oben).
   Lokale z-index Werte (1, 2, 3) für Stacking innerhalb
   einer Komponente bleiben wie sie sind. */
:root {
  --z-base:         0;      /* normaler Content */
  --z-raised:       10;     /* leichte Erhebungen */
  --z-floating:     100;    /* tooltips, popovers */
  --z-dropdown-bg:  105;    /* filter click-outside overlay (unter dropdown!) */
  --z-dropdown:     110;    /* filter container mit dropdown */
  --z-badge:        200;    /* floating badges, sticky indicators */
  --z-nav-overlay:  300;    /* dimming-overlay für mobile menu */
  --z-section-fly:  390;    /* mitfliegende Section-Elemente knapp unter Nav */
  --z-nav:          400;    /* Hauptnav, Tabbar, Tabsheet */
  --z-nav-top:      410;    /* Hamburger, liegt über der Nav */
  /* Cursor liegt über ALLEM, auch über Plugin-Overlays (Borlabs-Dialog
     rendert mit z-index 999999 und würde die Maus sonst verdecken).
     Werte nahe int-max, damit kein Overlay je darüber landet. */
  --z-cursor:       2147483644;  /* Custom Cursor Follower */
  --z-cursor-top:   2147483646;  /* Custom Cursor (Pointer-Spitze) */
}

/* ===== GLOBALE LINK STYLES ===== */
a {
  color: var(--kb-link-color);
  text-decoration: none;
  transition: color 0.3s ease, opacity 0.3s ease;
}

a:hover {
  color: var(--kb-link-hover);
}

/* Link mit Underline Animation */
.kb-link {
  position: relative;
  color: var(--kb-link-color);
  text-decoration: none;
}

.kb-link::after {
  content: '';
  position: absolute;
  bottom: -2px;
  left: 0;
  width: 0;
  height: 2px;
  background: var(--kb-link-hover);
  transition: width 0.3s ease;
}

.kb-link:hover::after {
  width: 100%;
}

/* Link Varianten */
.kb-link-white {
  --kb-link-color: var(--kb-white);
  --kb-link-hover: var(--kb-gray-200);
}

.kb-link-subtle {
  --kb-link-color: var(--kb-gray-300);
  --kb-link-hover: var(--kb-white);
}

.kb-link-design { --kb-link-color: var(--kb-design); --kb-link-hover: var(--kb-design); }
.kb-link-content { --kb-link-color: var(--kb-content); --kb-link-hover: var(--kb-content); }
.kb-link-marke { --kb-link-color: var(--kb-marke); --kb-link-hover: var(--kb-marke); }
.kb-link-website { --kb-link-color: var(--kb-website); --kb-link-hover: var(--kb-website); }
.kb-link-strategie { --kb-link-color: var(--kb-strategie); --kb-link-hover: var(--kb-strategie); }
.kb-link-somedia { --kb-link-color: var(--kb-somedia); --kb-link-hover: var(--kb-somedia); }

/* Underline immer sichtbar */
.kb-link-underline::after {
  width: 100%;
  opacity: 0.3;
}

.kb-link-underline:hover::after {
  opacity: 1;
}


/* ===== CURSOR STYLES ===== */
/* Standard Cursor anpassen */
body {
  cursor: default;
}

/* Pointer für interaktive Elemente */
a,
button,
[role="button"],
input[type="submit"],
input[type="button"],
.kb-clickable,
.kb-pointer {
  cursor: pointer;
}

/* Custom Cursor (optional - aktivieren mit Klasse auf body) */
body.kb-custom-cursor {
  cursor: none;
}

body.kb-custom-cursor * {
  cursor: none !important;
}

/* Cursor Element für Custom Cursor (via JS) */
/* mix-blend-mode: difference invertiert die Farbe je nach Hintergrund */
/* Weiß auf dunklem Hintergrund → bleibt weiß */
/* Weiß auf hellem Hintergrund → wird schwarz */
.kb-cursor {
  position: fixed;
  top: 0;
  left: 0;
  width: 26px;
  height: 26px;
  background-color: transparent;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='26' viewBox='0 0 24 24'%3E%3Cpath fill='white' stroke='rgba(0,0,0,0.5)' stroke-width='0.75' d='M5.5 3.21V20.8c0 .45.54.67.85.35l4.86-4.86a.5.5 0 0 1 .35-.15h6.87a.5.5 0 0 0 .35-.85L6.35 2.85a.5.5 0 0 0-.85.35Z'/%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
  border-radius: 0;
  pointer-events: none;
  z-index: var(--z-cursor-top);
  transform: translate(0, 0);
  /* Wichtig: KEINE Transition auf transform. JS setzt die Position auf jedem
     mousemove, die CSS-Transition würde 120ms hinterherschwimmen und die Maus
     wirkt träge. Width/Height/Filter dürfen weiter animieren (Hover-States). */
  transition: width 0.2s ease, height 0.2s ease, filter 0.2s ease, opacity 0.15s ease;
  filter: drop-shadow(0 1px 3px rgba(0, 0, 0, 0.5));
  mix-blend-mode: normal;
}

.kb-cursor.is-hovering {
  width: 30px;
  height: 30px;
  filter: drop-shadow(0 2px 8px rgba(255, 255, 255, 0.35));
}

.kb-cursor.is-clicking {
  transform: scale(0.85);
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.3));
}

/* Cursor Follower (zweiter Kreis) */
.kb-cursor-follower {
  position: fixed;
  top: 0;
  left: 0;
  width: 36px;
  height: 36px;
  border: 1px solid rgba(255, 255, 255, 0.25);
  border-radius: 50%;
  pointer-events: none;
  z-index: var(--z-cursor);
  transform: translate(-50%, -50%);
  /* KEINE Transition auf transform. Der Follower hat schon eine JS-lerp-
     basierte Verzögerung in cursor.js. Eine zusätzliche CSS-Transition oben
     drauf würde das zu einem doppelten Lag machen. */
  transition: width 0.2s ease, height 0.2s ease, opacity 0.2s ease, border-color 0.2s ease;
  opacity: 0.6;
  mix-blend-mode: normal;
}

.kb-cursor-follower.is-hovering {
  width: 50px;
  height: 50px;
  opacity: 0.2;
  border-color: rgba(255, 255, 255, 0.3);
}

/* ===== LOGO MARQUEE Shortcode [kb_logo_marquee] =====
   Eigenständige Marquee, unabhängig vom Elementor Loop-Carousel.
   Wird via Shortcode in PHP gerendert und in kb-logo-marquee.js (Funktion
   runEngine) animiert. CSS-Variablen werden aus dem Shortcode gesetzt:
     --kb-mq-h    Slide-Höhe
     --kb-mq-w    Logo-Breite Default
     --kb-mq-w-mob, --kb-mq-w-desk    Breakpoint-Varianten
     --kb-mq-gap, --kb-mq-gap-mob, --kb-mq-gap-desk   Abstand */
.kb-logo-marquee {
  overflow: hidden;
  width: 100%;
  position: relative;
  height: var(--kb-mq-h, 120px);
  cursor: grab;
  touch-action: pan-y;
}
.kb-logo-marquee:active { cursor: grabbing; }

.kb-logo-marquee__track {
  display: flex;
  align-items: center;
  width: max-content;
  height: 100%;
  will-change: transform;
}

.kb-logo-marquee__slide {
  flex: 0 0 auto;
  width: var(--kb-mq-w, 220px);
  height: 100%;
  margin-right: var(--kb-mq-gap, 220px);
  display: flex;
  align-items: center;
  justify-content: center;
  text-decoration: none;
  color: inherit;
  -webkit-user-drag: none;
  user-select: none;
}

.kb-logo-marquee__img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
  pointer-events: none; /* Klick fängt der umschließende <a> */
  -webkit-user-drag: none;
}

@media (max-width: 767px) {
  .kb-logo-marquee__slide {
    width: var(--kb-mq-w-mob, 150px);
    margin-right: var(--kb-mq-gap-mob, 150px);
  }
}
@media (min-width: 1200px) {
  .kb-logo-marquee__slide {
    width: var(--kb-mq-w-desk, 260px);
    margin-right: var(--kb-mq-gap-desk, 260px);
  }
}

/* ===== LOGO MARQUEE (Legacy: Elementor Loop-Carousel Takeover) =====
   Sobald .kb-marquee gesetzt ist, hat kb-logo-marquee.js Swiper
   zerstört. Wir stellen Flex-Layout + Overflow sicher, damit die
   rAF-translate-Animation sauber durch den Container scrollt. */
.swiper.kb-marquee {
  overflow: hidden;
  cursor: grab;
  touch-action: pan-y; /* vertikales Page-Scroll erhalten, horizontal wir */
}
.swiper.kb-marquee:active { cursor: grabbing; }
.swiper.kb-marquee .swiper-wrapper {
  display: flex !important;
  width: max-content;
  transform: translate3d(0, 0, 0);
  transition: none !important;
}
.swiper.kb-marquee .swiper-slide {
  flex: 0 0 auto !important;
  /* Slide-Breite je Breakpoint normiert — sonst greift Swiper's inline
     width:auto und Logos werden viewport-abhängig zu breit (war 1032px).
     !important nötig, weil Swiper inline styles setzt. */
  width: 220px !important;
  /* Spacing zwischen Logos = Logo-Breite (1:1 visuelles Atmen). Wird in
     kb-logo-marquee.js via slideFootprint() im Wrap-Modulo mitgerechnet. */
  margin-right: 220px !important;
  /* Bilder im Slide gegen unbeabsichtigtes Browser-Drag schützen */
  -webkit-user-drag: none;
  user-select: none;
}

/* Größere Logos auf Tablet/Desktop, kleinere auf Mobile.
   margin-right immer = width (1:1 Spacing). */
@media (max-width: 767px) {
  .swiper.kb-marquee .swiper-slide {
    width: 150px !important;
    margin-right: 150px !important;
  }
}
@media (min-width: 1200px) {
  .swiper.kb-marquee .swiper-slide {
    width: 260px !important;
    margin-right: 260px !important;
  }
}
.swiper.kb-marquee .swiper-slide img {
  -webkit-user-drag: none;
  pointer-events: none; /* Klick fängt das umschließende <a> */
}

/* ===== SWIPE CURSOR =====
   Auf swipebaren Containern (kb-slider, kb-collage, Elementor Swiper):
   Pfeil-Cursor ausblenden, Follower wird zu schlankem Outline-Kreis mit
   zwei kb-Pfeilen drin (links + rechts), beide weiß. Logik via
   .is-swipe in animationen.js (initCustomCursor). */
.kb-cursor.is-swipe {
  opacity: 0;
}

.kb-cursor-follower.is-swipe {
  width: 62px;
  height: 62px;
  opacity: 1;
  background: transparent;
  border: 1px solid #fff;
  /* Ein einzelner kb-Arrow nach rechts, weiß, mittig. */
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='13' viewBox='0 0 15 13' fill='%23ffffff'%3E%3Cpath d='M8.378 0C8.378 3.159 10.934 5.743 14.121 5.743V6.743C10.378 6.743 7.378 3.708 7.378 0H8.378Z'/%3E%3Cpath d='M14.121 6.775C10.962 6.775 8.378 9.331 8.378 12.518H7.378C7.378 8.775 10.413 5.775 14.121 5.775V6.775Z'/%3E%3Cpath d='M14.121 5.743V6.743L0 6.744V5.744L14.121 5.743Z'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: center;
  background-size: 22px auto;
  mix-blend-mode: normal;
}

/* is-hovering soll den Swipe-Cursor nicht überschreiben, falls man ein
   Kind-<a> im Slider berührt. */
.kb-cursor-follower.is-swipe.is-hovering {
  width: 62px;
  height: 62px;
  opacity: 1;
  border-color: #fff;
}

/* Alternative: Fester schwarzer Cursor (ohne Blend-Mode) */
.kb-cursor-black .kb-cursor {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='26' viewBox='0 0 24 24'%3E%3Cpath fill='%23101414' stroke='rgba(255,255,255,0.3)' stroke-width='0.75' d='M5.5 3.21V20.8c0 .45.54.67.85.35l4.86-4.86a.5.5 0 0 1 .35-.15h6.87a.5.5 0 0 0 .35-.85L6.35 2.85a.5.5 0 0 0-.85.35Z'/%3E%3C/svg%3E");
}

.kb-cursor-black .kb-cursor-follower {
  border-color: rgba(16, 20, 20, 0.4);
}

/* Alternative: Fester weißer Cursor */
.kb-cursor-white .kb-cursor {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='26' viewBox='0 0 24 24'%3E%3Cpath fill='white' stroke='rgba(0,0,0,0.4)' stroke-width='0.75' d='M5.5 3.21V20.8c0 .45.54.67.85.35l4.86-4.86a.5.5 0 0 1 .35-.15h6.87a.5.5 0 0 0 .35-.85L6.35 2.85a.5.5 0 0 0-.85.35Z'/%3E%3C/svg%3E");
}

.kb-cursor-white .kb-cursor-follower {
  border-color: rgba(255, 255, 255, 0.3);
}

/* Alternative: Akzentfarbe Cursor */
.kb-cursor-accent .kb-cursor {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='26' height='26' viewBox='0 0 24 24'%3E%3Cpath fill='%23e51f75' stroke='rgba(0,0,0,0.3)' stroke-width='0.75' d='M5.5 3.21V20.8c0 .45.54.67.85.35l4.86-4.86a.5.5 0 0 1 .35-.15h6.87a.5.5 0 0 0 .35-.85L6.35 2.85a.5.5 0 0 0-.85.35Z'/%3E%3C/svg%3E");
  filter: drop-shadow(0 2px 6px rgba(229, 31, 117, 0.5));
}

.kb-cursor-accent .kb-cursor-follower {
  border-color: rgba(229, 31, 117, 0.4);
}


/* ===== FOCUS STYLES (Accessibility) ===== */
:focus-visible {
  outline: 2px solid var(--kb-accent);
  outline-offset: 3px;
}

/* Focus ring für dunkle Hintergründe */
.focus-light :focus-visible,
.bg-gray-900 :focus-visible,
.bg-gray-800 :focus-visible {
  outline-color: var(--kb-white);
}


/* ===== SCROLLBAR STYLING ===== */
/* Webkit Scrollbar */
::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}

::-webkit-scrollbar-track {
  background: var(--kb-gray-900);
}

::-webkit-scrollbar-thumb {
  background: var(--kb-gray-700);
  border-radius: 5px;
  border: 2px solid var(--kb-gray-900);
}

::-webkit-scrollbar-thumb:hover {
  background: var(--kb-gray-500);
}

/* Firefox Scrollbar */
* {
  scrollbar-width: thin;
  scrollbar-color: var(--kb-gray-700) var(--kb-gray-900);
}

/* Scrollbar Varianten */
.scrollbar-accent::-webkit-scrollbar-thumb {
  background: var(--kb-accent);
}

.scrollbar-hidden::-webkit-scrollbar {
  display: none;
}

.scrollbar-hidden {
  -ms-overflow-style: none;
  scrollbar-width: none;
}


/* ===== SMOOTH SCROLL ===== */
html {
  scroll-behavior: smooth;
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
}


/* ===== BODY RESET & DEFAULTS ===== */
body {
  font-family: var(--font-body);
  font-size: var(--fs-base);
  line-height: 1.6;
  color: var(--kb-white);
  background-color: var(--kb-gray-900);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}


/* ===== HEADLINE DEFAULTS ===== */
h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
  font-family: var(--font-headline);
  font-weight: 700;
  line-height: 1.25;
  margin: 0;
}


/* ===== IMAGE DEFAULTS ===== */
img {
  max-width: 100%;
  height: auto;
  display: block;
}


/* ===== HORIZONTAL RULE ===== */
hr {
  border: none;
  height: 1px;
  background: var(--kb-gray-800);
  margin: var(--space-lg) 0;
}

hr.hr-accent {
  background: var(--kb-accent);
}

hr.hr-gradient {
  height: 2px;
  background: linear-gradient(90deg, transparent, var(--kb-accent), transparent);
}


/*
=====================================================
2. FARBEN - HINTERGRUND
=====================================================
*/

/* Bereichsfarben */
.bg-design { background-color: var(--kb-design) !important; }
.bg-content { background-color: var(--kb-content) !important; }
.bg-marke { background-color: var(--kb-marke) !important; }
.bg-kreativbox { background-color: var(--kb-kreativbox) !important; }
.bg-website { background-color: var(--kb-website) !important; }
.bg-strategie { background-color: var(--kb-strategie) !important; }
.bg-somedia { background-color: var(--kb-somedia) !important; }

/* Grautöne */
.bg-gray-900 { background-color: var(--kb-gray-900) !important; }
.bg-gray-800 { background-color: var(--kb-gray-800) !important; }
.bg-gray-700 { background-color: var(--kb-gray-700) !important; }
.bg-gray-500 { background-color: var(--kb-gray-500) !important; }
.bg-gray-300 { background-color: var(--kb-gray-300) !important; }
.bg-gray-200 { background-color: var(--kb-gray-200) !important; }
.bg-gray-100 { background-color: var(--kb-gray-100) !important; }
.bg-white { background-color: var(--kb-white) !important; }
.bg-transparent { background-color: transparent !important; }

/* Alias für Dark/Light */
.bg-dark { background-color: var(--kb-gray-900) !important; }
.bg-light { background-color: var(--kb-gray-100) !important; }


/* ============================================================
   SECTION-CURVE: Manuelle Top-/Bottom-Rundung für Sektionen
   ============================================================
   Manuell per Klasse setzen. Keine Auto-Erkennung mehr — die hat
   bei Bild-Sektionen und Edge-Cases zu Inkonsistenzen geführt.
     .kb-curve-top    → obere Ecken runden
     .kb-curve-bottom → untere Ecken runden
   ============================================================ */
.kb-curve-top {
  border-top-left-radius: var(--radius-32, 32px) !important;
  border-top-right-radius: var(--radius-32, 32px) !important;
}
.kb-curve-bottom {
  border-bottom-left-radius: var(--radius-32, 32px) !important;
  border-bottom-right-radius: var(--radius-32, 32px) !important;
}

@media (max-width: 640px) {
  .kb-curve-top {
    border-top-left-radius: var(--radius-24, 24px) !important;
    border-top-right-radius: var(--radius-24, 24px) !important;
  }
  .kb-curve-bottom {
    border-bottom-left-radius: var(--radius-24, 24px) !important;
    border-bottom-right-radius: var(--radius-24, 24px) !important;
  }
}


/* 
=====================================================
2. FARBEN - TEXT
=====================================================
*/

/* Bereichsfarben */
.text-design { color: var(--kb-design) !important; }
.text-content { color: var(--kb-content) !important; }
.text-marke { color: var(--kb-marke) !important; }
.text-kreativbox { color: var(--kb-kreativbox) !important; }
.text-website { color: var(--kb-website) !important; }
.text-strategie { color: var(--kb-strategie) !important; }
.text-somedia { color: var(--kb-somedia) !important; }

/* Grautöne */
.text-gray-900 { color: var(--kb-gray-900) !important; }
.text-gray-800 { color: var(--kb-gray-800) !important; }
.text-gray-700 { color: var(--kb-gray-700) !important; }
.text-gray-500 { color: var(--kb-gray-500) !important; }
.text-gray-300 { color: var(--kb-gray-300) !important; }
.text-gray-200 { color: var(--kb-gray-200) !important; }
.text-gray-100 { color: var(--kb-gray-100) !important; }
.text-white { color: var(--kb-white) !important; }

/* Alias für Dark/Light */
.text-dark { color: var(--kb-gray-900) !important; }
.text-light { color: var(--kb-gray-100) !important; }


/* 
=====================================================
3. TYPOGRAFIE - SCHRIFTARTEN
=====================================================
*/

/* Fließtext - Avenir Normal */
.font-body,
.text-body {
  font-family: var(--font-body) !important;
  font-weight: 400 !important;
}

/* Fließtext mit Auszeichnung - Avenir Fett */
.font-body-bold,
.text-body-bold,
.text-bold {
  font-family: var(--font-body) !important;
  font-weight: 700 !important;
}

/* Headlines - Brown Bold */
.font-headline,
.text-headline {
  font-family: var(--font-headline) !important;
  font-weight: 700 !important;
}

/* Für Elementor Widgets */
.kb-body .elementor-widget-container,
.kb-body .elementor-widget-container p,
.kb-body .elementor-widget-container span {
  font-family: var(--font-body) !important;
  font-weight: 400 !important;
}

.kb-body-bold .elementor-widget-container,
.kb-body-bold .elementor-widget-container p,
.kb-body-bold .elementor-widget-container span {
  font-family: var(--font-body) !important;
  font-weight: 700 !important;
}

.kb-headline .elementor-widget-container,
.kb-headline .elementor-heading-title,
.kb-headline h1,
.kb-headline h2,
.kb-headline h3,
.kb-headline h4,
.kb-headline h5,
.kb-headline h6 {
  font-family: var(--font-headline) !important;
  font-weight: 700 !important;
}


/* 
=====================================================
3. TYPOGRAFIE - SCHRIFTGRÖSSEN
=====================================================
*/
/* 
=====================================================
TYPOGRAFIE - SCHRIFTGRÖSSEN (für Elementor)
=====================================================
*/

/* Extra Small */
.fs-xs,
.fs-xs p,
.fs-xs a,
.fs-xs span,
.fs-xs div,
.elementor-widget .elementor-widget-text-editor .fs-xs p, 
.fs-xs.elementor-widget .elementor-widget-text-editor p,
.fs-xs.elementor-widget .elementor-widget-container,
.fs-xs.elementor-widget .elementor-widget-container p,
.fs-xs.elementor-widget .elementor-widget-container span,
.fs-xs.elementor-widget .elementor-heading-title,
.fs-xs.elementor-widget h1.elementor-heading-title,
.fs-xs.elementor-widget h2.elementor-heading-title,
.fs-xs.elementor-widget h3.elementor-heading-title,
.fs-xs.elementor-widget h4.elementor-heading-title,
.fs-xs.elementor-widget h5.elementor-heading-title,
.fs-xs.elementor-widget h6.elementor-heading-title,
.elementor-widget.fs-xs .elementor-heading-title {
  font-size: var(--fs-xs) !important;
}

/* Small */
.fs-sm,
.fs-sm p,
.fs-sm a,
.fs-sm span,
.fs-sm div,
.elementor-widget.elementor-widget .fs-sm p,
.elementor-widget .elementor-widget-text-editor .fs-sm p
.fs-sm.elementor-widget .elementor-widget-text-editor p,
.fs-sm.elementor-widget .elementor-widget-container,
.fs-sm.elementor-widget .elementor-widget-container p,
.fs-sm.elementor-widget .elementor-widget-container span,
.fs-sm.elementor-widget .elementor-heading-title,
.fs-sm.elementor-widget h1.elementor-heading-title,
.fs-sm.elementor-widget h2.elementor-heading-title,
.fs-sm.elementor-widget h3.elementor-heading-title,
.fs-sm.elementor-widget h4.elementor-heading-title,
.fs-sm.elementor-widget h5.elementor-heading-title,
.fs-sm.elementor-widget h6.elementor-heading-title,
.elementor-widget.fs-sm .elementor-heading-title {
  font-size: var(--fs-sm) !important;
}



/* Base */
.fs-base,
.fs-base p,
.fs-base a,
.fs-base span,
.fs-base div,
.elementor-widget.elementor-widget .fs-base p,
.elementor-widget .elementor-widget-text-editor .fs-base p
.fs-base.elementor-widget .elementor-widget-text-editor p,
.fs-base.elementor-widget .elementor-widget-container,
.fs-base.elementor-widget .elementor-widget-container p,
.fs-base.elementor-widget .elementor-widget-container span,
.fs-base.elementor-widget .elementor-heading-title,
.fs-base.elementor-widget h1.elementor-heading-title,
.fs-base.elementor-widget h2.elementor-heading-title,
.fs-base.elementor-widget h3.elementor-heading-title,
.fs-base.elementor-widget h4.elementor-heading-title,
.fs-base.elementor-widget h5.elementor-heading-title,
.fs-base.elementor-widget h6.elementor-heading-title,
.elementor-widget.fs-base .elementor-heading-title {
  font-size: var(--fs-base) !important;
}

/* Medium */
.fs-md.elementor-widget .elementor-widget-container,
.fs-md.elementor-widget .elementor-widget-container p,
.fs-md.elementor-widget .elementor-widget-container span,
.fs-md.elementor-widget .elementor-heading-title,
.fs-md.elementor-widget h1.elementor-heading-title,
.fs-md.elementor-widget h2.elementor-heading-title,
.fs-md.elementor-widget h3.elementor-heading-title,
.fs-md.elementor-widget h4.elementor-heading-title,
.fs-md.elementor-widget h5.elementor-heading-title,
.fs-md.elementor-widget h6.elementor-heading-title,
.elementor-widget.fs-md .elementor-heading-title {
  font-size: var(--fs-md) !important;
}

/* Large */
.fs-lg.elementor-widget .elementor-widget-container,
.fs-lg.elementor-widget .elementor-widget-container p,
.fs-lg.elementor-widget .elementor-widget-container span,
.fs-lg.elementor-widget .elementor-heading-title,
.fs-lg.elementor-widget h1.elementor-heading-title,
.fs-lg.elementor-widget h2.elementor-heading-title,
.fs-lg.elementor-widget h3.elementor-heading-title,
.fs-lg.elementor-widget h4.elementor-heading-title,
.fs-lg.elementor-widget h5.elementor-heading-title,
.fs-lg.elementor-widget h6.elementor-heading-title,
.elementor-widget.fs-lg .elementor-heading-title {
  font-size: var(--fs-lg) !important;
}

/* XL */
.fs-xl.elementor-widget .elementor-widget-container,
.fs-xl.elementor-widget .elementor-widget-container p,
.fs-xl.elementor-widget .elementor-widget-container span,
.fs-xl.elementor-widget .elementor-heading-title,
.fs-xl.elementor-widget h1.elementor-heading-title,
.fs-xl.elementor-widget h2.elementor-heading-title,
.fs-xl.elementor-widget h3.elementor-heading-title,
.fs-xl.elementor-widget h4.elementor-heading-title,
.fs-xl.elementor-widget h5.elementor-heading-title,
.fs-xl.elementor-widget h6.elementor-heading-title,
.elementor-widget.fs-xl .elementor-heading-title {
  font-size: var(--fs-xl) !important;
  line-height: 0.95 !important;
}

/* XXL */
.fs-xxl.elementor-widget .elementor-widget-container,
.fs-xxl.elementor-widget .elementor-widget-container p,
.fs-xxl.elementor-widget .elementor-widget-container span,
.fs-xxl.elementor-widget .elementor-heading-title,
.fs-xxl.elementor-widget h1.elementor-heading-title,
.fs-xxl.elementor-widget h2.elementor-heading-title,
.fs-xxl.elementor-widget h3.elementor-heading-title,
.fs-xxl.elementor-widget h4.elementor-heading-title,
.fs-xxl.elementor-widget h5.elementor-heading-title,
.fs-xxl.elementor-widget h6.elementor-heading-title,
.elementor-widget.fs-xxl .elementor-heading-title {
  font-size: var(--fs-xxl) !important;
  line-height: 0.9 !important;
}

/* XXXL */
.fs-xxxl.elementor-widget .elementor-widget-container,
.fs-xxxl.elementor-widget .elementor-widget-container p,
.fs-xxxl.elementor-widget .elementor-widget-container span,
.fs-xxxl.elementor-widget .elementor-heading-title,
.fs-xxxl.elementor-widget h1.elementor-heading-title,
.fs-xxxl.elementor-widget h2.elementor-heading-title,
.fs-xxxl.elementor-widget h3.elementor-heading-title,
.fs-xxxl.elementor-widget h4.elementor-heading-title,
.fs-xxxl.elementor-widget h5.elementor-heading-title,
.fs-xxxl.elementor-widget h6.elementor-heading-title,
.elementor-widget.fs-xxxl .elementor-heading-title {
  font-size: var(--fs-xxxl) !important;
  line-height: 0.85 !important;
}


/* 
=====================================================
TYPOGRAFIE - SCHRIFTARTEN (korrigiert)
=====================================================
*/

/* Fließtext - Avenir Normal */
.kb-body.elementor-widget .elementor-widget-container,
.kb-body.elementor-widget .elementor-widget-container p,
.kb-body.elementor-widget .elementor-widget-container span,
.elementor-widget.kb-body .elementor-widget-container {
  font-family: var(--font-body) !important;
  font-weight: 400 !important;
}

/* Fließtext mit Auszeichnung - Avenir Fett */
.kb-body-bold.elementor-widget .elementor-widget-container,
.kb-body-bold.elementor-widget .elementor-widget-container p,
.kb-body-bold.elementor-widget .elementor-widget-container span,
.elementor-widget.kb-body-bold .elementor-widget-container {
  font-family: var(--font-body) !important;
  font-weight: 700 !important;
}

/* Headlines - Brown Bold */
.kb-headline.elementor-widget .elementor-widget-container,
.kb-headline.elementor-widget .elementor-heading-title,
.kb-headline.elementor-widget h1.elementor-heading-title,
.kb-headline.elementor-widget h2.elementor-heading-title,
.kb-headline.elementor-widget h3.elementor-heading-title,
.kb-headline.elementor-widget h4.elementor-heading-title,
.kb-headline.elementor-widget h5.elementor-heading-title,
.kb-headline.elementor-widget h6.elementor-heading-title,
.elementor-widget.kb-headline .elementor-heading-title {
  font-family: var(--font-headline) !important;
  font-weight: 700 !important;
}


/* 
=====================================================
TEXT-FARBEN (korrigiert für Elementor)
=====================================================
*/

/* Bereichsfarben */
.text-design.elementor-widget .elementor-widget-container,
.text-design.elementor-widget .elementor-widget-container *,
.text-design.elementor-widget .elementor-heading-title,
.elementor-widget.text-design .elementor-heading-title {
  color: var(--kb-design) !important;
}

.text-content.elementor-widget .elementor-widget-container,
.text-content.elementor-widget .elementor-widget-container *,
.text-content.elementor-widget .elementor-heading-title,
.elementor-widget.text-content .elementor-heading-title {
  color: var(--kb-content) !important;
}

.text-marke.elementor-widget .elementor-widget-container,
.text-marke.elementor-widget .elementor-widget-container *,
.text-marke.elementor-widget .elementor-heading-title,
.elementor-widget.text-marke .elementor-heading-title {
  color: var(--kb-marke) !important;
}

.text-kreativbox.elementor-widget .elementor-widget-container,
.text-kreativbox.elementor-widget .elementor-widget-container *,
.text-kreativbox.elementor-widget .elementor-heading-title,
.elementor-widget.text-kreativbox .elementor-heading-title {
  color: var(--kb-kreativbox) !important;
}

.text-website.elementor-widget .elementor-widget-container,
.text-website.elementor-widget .elementor-widget-container *,
.text-website.elementor-widget .elementor-heading-title,
.elementor-widget.text-website .elementor-heading-title {
  color: var(--kb-website) !important;
}

.text-strategie.elementor-widget .elementor-widget-container,
.text-strategie.elementor-widget .elementor-widget-container *,
.text-strategie.elementor-widget .elementor-heading-title,
.elementor-widget.text-strategie .elementor-heading-title {
  color: var(--kb-strategie) !important;
}

.text-somedia.elementor-widget .elementor-widget-container,
.text-somedia.elementor-widget .elementor-widget-container *,
.text-somedia.elementor-widget .elementor-heading-title,
.elementor-widget.text-somedia .elementor-heading-title {
  color: var(--kb-somedia) !important;
}

/* ============================================================
   A11Y: Akzentfarben-Override auf hellen Section-BGs
   ------------------------------------------------------------
   Pink/Lila/Blau-Eyebrows liegen auf Sand (`--kb-gray-200`) bzw.
   weißem BG bei ~3:1 Kontrast (WCAG 1.4.3 AA fail). Auf hellen
   Bereichen ersetzen wir die Akzent-Textfarben durch
   `--kb-gray-900` (Contrast ≥ 16:1 auf #e0dedb → AAA).
   Markenfarben bleiben dort als Hover/Bg/Hervorhebungs-
   Akzent erhalten (nur reiner Text wird dunkel).
   ============================================================ */
:is(.bg-white, .bg-gray-100, .bg-gray-200, .bg-light)
  :is(.text-kreativbox, .text-marke, .text-website, .text-strategie, .text-somedia, .text-content),
:is(.bg-white, .bg-gray-100, .bg-gray-200, .bg-light)
  :is(.text-kreativbox, .text-marke, .text-website, .text-strategie, .text-somedia, .text-content) *,
:is(.bg-white, .bg-gray-100, .bg-gray-200, .bg-light)
  :is(.text-kreativbox, .text-marke, .text-website, .text-strategie, .text-somedia, .text-content) .elementor-heading-title {
  color: var(--kb-gray-900) !important;
}

/* Icon-Box-Beschreibungen auf hellem BG: harter schwarzer Body-Text
   (gleicher Grund: durchgereichte Akzentfarbe / dünnes Grau bricht
   sonst AA-Kontrast). */
:is(.bg-white, .bg-gray-100, .bg-gray-200, .bg-light)
  .elementor-icon-box-description {
  color: var(--kb-gray-900) !important;
}

/* ============================================================
   A11Y: Bereichsfarben als Section-/Card-BG mit zu hellem Wert
   ------------------------------------------------------------
   Pink (#e51f75), Rot (#dd4342) und Orange (#ff9648) ergeben mit
   weißem Text < 4.5:1 → WCAG 1.4.3 AA fail. Daher: wenn diese
   drei Farben als BG-Klasse verwendet werden, läuft der Text
   (Headings, Buttons, Body) auf `--kb-gray-900` (≥ 4.79:1 AA ✓).
   Marke-Blau (5.51:1) und Website-Lila (5.65:1) bleiben weiß.
   ============================================================ */
/* Spezifität bewusst auf 4 Classes erhöht, weil `.text-white.elementor-widget
   .elementor-heading-title` (Spec 0,3,0) in Z. ~1170 später steht und sonst
   bei gleicher Spez+Important gewinnen würde. 4 Classes garantieren Override. */
:is(.bg-kreativbox, .bg-somedia, .bg-strategie),
:is(.bg-kreativbox, .bg-somedia, .bg-strategie) .elementor-element.elementor-widget .elementor-heading-title,
:is(.bg-kreativbox, .bg-somedia, .bg-strategie) .elementor-element.elementor-widget .elementor-heading-title *,
:is(.bg-kreativbox, .bg-somedia, .bg-strategie) .elementor-element.elementor-widget .elementor-widget-container *,
:is(.bg-kreativbox, .bg-somedia, .bg-strategie) .elementor-element.elementor-widget .elementor-button-text,
:is(.bg-kreativbox, .bg-somedia, .bg-strategie) .elementor-element.elementor-widget .elementor-icon-box-description,
:is(.bg-kreativbox, .bg-somedia, .bg-strategie) p,
:is(.bg-kreativbox, .bg-somedia, .bg-strategie) li {
  color: var(--kb-gray-900) !important;
}

/* Ausnahme: Outline-/Ghost-Buttons invertieren beim Hover ihre Pille auf
   dunkel. Der obige Schwarz-Fix würde den Text schwarz-auf-schwarz lassen
   (unsichtbar). Beim Hover folgt der Button-Text daher wieder seiner eigenen
   --btn-text-Logik (weiß auf dunkler Füllung). Nur Hover, nur Outline/Ghost,
   höhere Spezifität als der Fix oben. Filled-Buttons bleiben unberührt. */
:is(.bg-kreativbox, .bg-somedia, .bg-strategie) :is(.kb-btn.outline, .kb-btn.ghost) .elementor-button:hover .elementor-button-text {
  color: var(--btn-text) !important;
}

/* Dunkle Akzentflächen (Marke-Blau, Website-Lila) tragen helle Schrift.
   Neutrale Outline-/Ghost-Buttons müssen dort WEISS sein statt schwarz
   (Blau/Lila sind zu dunkel für schwarzen Text). Idle: weißer Rahmen +
   weißer Text; Hover: weisse Füllung + schwarzer Text (wie .outline.dark). */
:is(.bg-marke, .bg-website) .kb-btn.outline,
:is(.bg-marke, .bg-website) .kb-btn.ghost {
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-white);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-gray-900);
  --btn-glow: rgba(255, 255, 255, 0.22);
}
:is(.bg-marke, .bg-website) .kb-btn.outline .elementor-button:hover,
:is(.bg-marke, .bg-website) .kb-btn.ghost .elementor-button:hover {
  --btn-bg: var(--kb-white);
  --btn-text: var(--kb-gray-900);
  --btn-border: var(--kb-white);
  --btn-accent: var(--kb-gray-900);
}

/* Primary-CTA-Buttons (`.kb-btn.kreativbox` etc.) bleiben bewusst mit
   weißem Text auf Pink/Rot/Orange-BG — Brand-Konsistenz wichtiger als
   die letzten 0.12 Punkte zur AA-Schwelle (Pink: 4.38:1 vs Soll 4.5:1).
   Card-/Section-BGs (`.bg-kreativbox` etc.) sind dagegen oben gefixt. */

/* ============================================================
   KB WEBGL HEADING — Liquid-Pull-Shader auf Display-Headlines
   ============================================================
   Klasse .kb-webgl-heading auf das Heading-Widget setzen.
   Das JS rendert den Text in ein WebGL-Canvas und wendet einen
   Custom-Shader an, der Pixel zum Cursor zieht.
   Original-Text bleibt im DOM (color:transparent) → Screen-Reader
   und SEO sehen weiterhin den Text.
   ============================================================ */
.kb-webgl-heading .elementor-heading-title {
  position: relative;
  /* Wenn JS noch nicht initialisiert hat, zeigt der Browser den
     normalen Text — kein FOUC-Flash mit transparentem Loch. */
}
.kb-webgl-heading__canvas {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  display: block;
  pointer-events: auto;
}

/* ============================================================
   KB MAGNETIC HEADING — Cursor zieht Buchstaben-für-Buchstaben
   ============================================================
   Klasse .kb-magnetic-heading auf ein Heading-Widget setzen.
   Das JS (assets/js/magnetic-heading.js) splittet den Text in
   einzelne <span class="kb-mag-letter"> und animiert deren
   Position abhängig von der Cursor-Distanz.
   ============================================================ */
.kb-magnetic-heading,
.kb-magnetic-heading .elementor-heading-title {
  display: inline-block;
}
.kb-mag-letter {
  display: inline-block;
  /* Kein will-change: transform. Würde jeden Letter-Span in einen
     Compositing-Layer schieben und Firefox' Subpixel-Antialiasing für
     den Text deaktivieren. Der Browser entscheidet das selbst bei Bedarf. */
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}

/* ============================================================
   KB ATOMIC LIQUID — Display-Headline mit Wisch- und Liquid-FX
   ============================================================
   Klasse .kb-atomic-liquid auf ein Heading-Widget setzen.
   Kombiniert:
     1) Background-Clip-Text mit Marke-Gelb-Shine, der diagonal wischt
     2) SVG-Turbulence-Distortion (subtiles Liquid-Wobble)
   Default-Highlight = Marke-Gelb (kontrastiert auf weißer Schrift gut).
   Override pro Element via --liquid-shine: <css-color>.
   ============================================================ */
.kb-atomic-liquid .elementor-heading-title,
.kb-atomic-liquid.elementor-widget .elementor-heading-title {
  --liquid-shine: var(--kb-marke, #ffd84d);
  background-image: linear-gradient(
    110deg,
    currentColor 22%,
    color-mix(in srgb, var(--liquid-shine) 70%, currentColor) 40%,
    var(--liquid-shine) 50%,
    color-mix(in srgb, var(--liquid-shine) 70%, currentColor) 60%,
    currentColor 78%
  ) !important;
  background-size: 220% 100% !important;
  background-position: 200% 0;
  -webkit-background-clip: text !important;
          background-clip: text !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
  display: inline-block;
  filter: url(#kb-liquid);
  animation: kb-atomic-liquid-shine 4.5s ease-in-out infinite;
  -webkit-font-smoothing: antialiased;
  will-change: background-position, filter;
}

/* Wipe-Direction: Highlight zieht von rechts nach links durch den Text */
@keyframes kb-atomic-liquid-shine {
  0%   { background-position: 220% 0; }
  100% { background-position: -120% 0; }
}

/* Reduced-Motion: Effekt beruhigen, statisches Highlight */
@media (prefers-reduced-motion: reduce) {
  .kb-atomic-liquid .elementor-heading-title,
  .kb-atomic-liquid.elementor-widget .elementor-heading-title {
    animation: none !important;
    filter: none !important;
    background-position: 50% 0;
  }
}

/* Grautöne */
.text-gray-900.elementor-widget .elementor-widget-container,
.text-gray-900.elementor-widget .elementor-widget-container *,
.text-gray-900.elementor-widget .elementor-heading-title,
.elementor-widget.text-gray-900 .elementor-heading-title {
  color: var(--kb-gray-900) !important;
}

.text-gray-800.elementor-widget .elementor-widget-container,
.text-gray-800.elementor-widget .elementor-widget-container *,
.text-gray-800.elementor-widget .elementor-heading-title,
.elementor-widget.text-gray-800 .elementor-heading-title {
  color: var(--kb-gray-800) !important;
}

.text-gray-700.elementor-widget .elementor-widget-container,
.text-gray-700.elementor-widget .elementor-widget-container *,
.text-gray-700.elementor-widget .elementor-heading-title,
.elementor-widget.text-gray-700 .elementor-heading-title {
  color: var(--kb-gray-700) !important;
}

.text-gray-500.elementor-widget .elementor-widget-container,
.text-gray-500.elementor-widget .elementor-widget-container *,
.text-gray-500.elementor-widget .elementor-heading-title,
.elementor-widget.text-gray-500 .elementor-heading-title {
  color: var(--kb-gray-500) !important;
}

.text-gray-300.elementor-widget .elementor-widget-container,
.text-gray-300.elementor-widget .elementor-widget-container *,
.text-gray-300.elementor-widget .elementor-heading-title,
.elementor-widget.text-gray-300 .elementor-heading-title {
  color: var(--kb-gray-300) !important;
}

.text-gray-200.elementor-widget .elementor-widget-container,
.text-gray-200.elementor-widget .elementor-widget-container *,
.text-gray-200.elementor-widget .elementor-heading-title,
.elementor-widget.text-gray-200 .elementor-heading-title {
  color: var(--kb-gray-200) !important;
}

.text-gray-100.elementor-widget .elementor-widget-container,
.text-gray-100.elementor-widget .elementor-widget-container *,
.text-gray-100.elementor-widget .elementor-heading-title,
.elementor-widget.text-gray-100 .elementor-heading-title {
  color: var(--kb-gray-100) !important;
}

.text-white.elementor-widget .elementor-widget-container,
.text-white.elementor-widget .elementor-widget-container *,
.text-white.elementor-widget .elementor-heading-title,
.elementor-widget.text-white .elementor-heading-title {
  color: var(--kb-white) !important;
}

.text-dark.elementor-widget .elementor-widget-container,
.text-dark.elementor-widget .elementor-widget-container *,
.text-dark.elementor-widget .elementor-heading-title,
.elementor-widget.text-dark .elementor-heading-title {
  color: var(--kb-gray-900) !important;
}

.text-light.elementor-widget .elementor-widget-container,
.text-light.elementor-widget .elementor-widget-container *,
.text-light.elementor-widget .elementor-heading-title,
.elementor-widget.text-light .elementor-heading-title {
  color: var(--kb-gray-100) !important;
}
/* 
=====================================================
4. BORDER RADIUS
=====================================================
*/

.radius-none { border-radius: 0 !important; }
.radius-sm { border-radius: var(--radius-sm) !important; }
.radius-12 { border-radius: var(--radius-12) !important; }
.radius-24 { border-radius: var(--radius-24) !important; }
.radius-32 { border-radius: var(--radius-32) !important; }
.radius-full { border-radius: var(--radius-full) !important; }

/* Alias */
.rounded { border-radius: var(--radius-12) !important; }
.rounded-lg { border-radius: var(--radius-24) !important; }
.rounded-xl { border-radius: var(--radius-32) !important; }
.rounded-full { border-radius: var(--radius-full) !important; }

/* Für Elementor Container/Sections */
.kb-radius-12 > .elementor-widget-container,
.kb-radius-12 > .elementor-container {
  border-radius: var(--radius-12) !important;
  overflow: hidden;
}

.kb-radius-24 > .elementor-widget-container,
.kb-radius-24 > .elementor-container {
  border-radius: var(--radius-24) !important;
  overflow: hidden;
}

.kb-radius-32 > .elementor-widget-container,
.kb-radius-32 > .elementor-container {
  border-radius: var(--radius-32) !important;
  overflow: hidden;
}


/* 
=====================================================
5. SPACING - MARGIN BOTTOM
=====================================================
*/

.mb-0 { margin-bottom: 0 !important; }
.mb-xs { margin-bottom: var(--space-xs) !important; }
.mb-sm { margin-bottom: var(--space-sm) !important; }
.mb-md { margin-bottom: var(--space-md) !important; }
.mb-lg { margin-bottom: var(--space-lg) !important; }
.mb-xl { margin-bottom: var(--space-xl) !important; }
.mb-xxl { margin-bottom: var(--space-xxl) !important; }
.mb-xxxl { margin-bottom: var(--space-xxxl) !important; }


/* 
=====================================================
5. SPACING - MARGIN TOP
=====================================================
*/

.mt-0 { margin-top: 0 !important; }
.mt-xs { margin-top: var(--space-xs) !important; }
.mt-sm { margin-top: var(--space-sm) !important; }
.mt-md { margin-top: var(--space-md) !important; }
.mt-lg { margin-top: var(--space-lg) !important; }
.mt-xl { margin-top: var(--space-xl) !important; }
.mt-xxl { margin-top: var(--space-xxl) !important; }
.mt-xxxl { margin-top: var(--space-xxxl) !important; }


/* 
=====================================================
5. SPACING - MARGIN LEFT
=====================================================
*/

.ml-0 { margin-left: 0 !important; }
.ml-xs { margin-left: var(--space-xs) !important; }
.ml-sm { margin-left: var(--space-sm) !important; }
.ml-md { margin-left: var(--space-md) !important; }
.ml-lg { margin-left: var(--space-lg) !important; }
.ml-xl { margin-left: var(--space-xl) !important; }
.ml-xxl { margin-left: var(--space-xxl) !important; }
.ml-xxxl { margin-left: var(--space-xxxl) !important; }


/* 
=====================================================
5. SPACING - MARGIN RIGHT
=====================================================
*/

.mr-0 { margin-right: 0 !important; }
.mr-xs { margin-right: var(--space-xs) !important; }
.mr-sm { margin-right: var(--space-sm) !important; }
.mr-md { margin-right: var(--space-md) !important; }
.mr-lg { margin-right: var(--space-lg) !important; }
.mr-xl { margin-right: var(--space-xl) !important; }
.mr-xxl { margin-right: var(--space-xxl) !important; }
.mr-xxxl { margin-right: var(--space-xxxl) !important; }


/* 
=====================================================
5. SPACING - MARGIN X (Links + Rechts)
=====================================================
*/

.mx-0 { margin-left: 0 !important; margin-right: 0 !important; }
.mx-xs { margin-left: var(--space-xs) !important; margin-right: var(--space-xs) !important; }
.mx-sm { margin-left: var(--space-sm) !important; margin-right: var(--space-sm) !important; }
.mx-md { margin-left: var(--space-md) !important; margin-right: var(--space-md) !important; }
.mx-lg { margin-left: var(--space-lg) !important; margin-right: var(--space-lg) !important; }
.mx-xl { margin-left: var(--space-xl) !important; margin-right: var(--space-xl) !important; }
.mx-auto { margin-left: auto !important; margin-right: auto !important; }


/* 
=====================================================
5. SPACING - MARGIN Y (Oben + Unten)
=====================================================
*/

.my-0 { margin-top: 0 !important; margin-bottom: 0 !important; }
.my-xs { margin-top: var(--space-xs) !important; margin-bottom: var(--space-xs) !important; }
.my-sm { margin-top: var(--space-sm) !important; margin-bottom: var(--space-sm) !important; }
.my-md { margin-top: var(--space-md) !important; margin-bottom: var(--space-md) !important; }
.my-lg { margin-top: var(--space-lg) !important; margin-bottom: var(--space-lg) !important; }
.my-xl { margin-top: var(--space-xl) !important; margin-bottom: var(--space-xl) !important; }


/* 
=====================================================
5. SPACING - PADDING
=====================================================
*/

/* Padding All */
.p-0 { padding: 0 !important; }
.p-xs { padding: var(--space-xs) !important; }
.p-sm { padding: var(--space-sm) !important; }
.p-md { padding: var(--space-md) !important; }
.p-lg { padding: var(--space-lg) !important; }
.p-xl { padding: var(--space-xl) !important; }
.p-xxl { padding: var(--space-xxl) !important; }

/* Padding Top */
.pt-0 { padding-top: 0 !important; }
.pt-xs { padding-top: var(--space-xs) !important; }
.pt-sm { padding-top: var(--space-sm) !important; }
.pt-md { padding-top: var(--space-md) !important; }
.pt-lg { padding-top: var(--space-lg) !important; }
.pt-xl { padding-top: var(--space-xl) !important; }
.pt-xxl { padding-top: var(a--space-xxl) !important; }

/* Padding Bottom */
.pb-0 { padding-bottom: 0 !important; }
.pb-xs { padding-bottom: var(--space-xs) !important; }
.pb-sm { padding-bottom: var(--space-sm) !important; }
.pb-md { padding-bottom: var(--space-md) !important; }
.pb-lg { padding-bottom: var(--space-lg) !important; }
.pb-xl { padding-bottom: var(--space-xl) !important; }
.pb-xxl { padding-bottom: var(--space-xxl) !important; }

/* Padding Left */
.pl-0 { padding-left: 0 !important; }
.pl-xs { padding-left: var(--space-xs) !important; }
.pl-sm { padding-left: var(--space-sm) !important; }
.pl-md { padding-left: var(--space-md) !important; }
.pl-lg { padding-left: var(--space-lg) !important; }
.pl-xl { padding-left: var(--space-xl) !important; }

/* Padding Right */
.pr-0 { padding-right: 0 !important; }
.pr-xs { padding-right: var(--space-xs) !important; }
.pr-sm { padding-right: var(--space-sm) !important; }
.pr-md { padding-right: var(--space-md) !important; }
.pr-lg { padding-right: var(--space-lg) !important; }
.pr-xl { padding-right: var(--space-xl) !important; }

/* Padding X */
.px-0 { padding-left: 0 !important; padding-right: 0 !important; }
.px-xs { padding-left: var(--space-xs) !important; padding-right: var(--space-xs) !important; }
.px-sm { padding-left: var(--space-sm) !important; padding-right: var(--space-sm) !important; }
.px-md { padding-left: var(--space-md) !important; padding-right: var(--space-md) !important; }
.px-lg { padding-left: var(--space-lg) !important; padding-right: var(--space-lg) !important; }
.px-xl { padding-left: var(--space-xl) !important; padding-right: var(--space-xl) !important; }

/* Padding Y */
.py-0 { padding-top: 0 !important; padding-bottom: 0 !important; }
.py-xs { padding-top: var(--space-xs) !important; padding-bottom: var(--space-xs) !important; }
.py-sm { padding-top: var(--space-sm) !important; padding-bottom: var(--space-sm) !important; }
.py-md { padding-top: var(--space-md) !important; padding-bottom: var(--space-md) !important; }
.py-lg { padding-top: var(--space-lg) !important; padding-bottom: var(--space-lg) !important; }
.py-xl { padding-top: var(--space-xl) !important; padding-bottom: var(--space-xl) !important; }


/* 
=====================================================
GLASS BASIS
=====================================================
*/

.glass {
  --accent: var(--glass-accent);
  
  position: relative;
  border-radius: var(--glass-radius);
  
  /* Backdrop Blur */
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
  
  /* Gradient Background: links heller, rechts dunkler */
  background-image: linear-gradient(
    135deg,
    var(--white-20),
    var(--white-5)
  );
  
  /* Schatten für Tiefe */
  box-shadow: 0 0.5em 1.5em hsla(0, 0%, 0%, 0.1);
  
  /* Overflow für Border-Effekt */
  overflow: hidden;
}

/* Maskierter Rahmen - Weiß (oben links) */
.glass::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid var(--white-100);
  mask-image: linear-gradient(
    135deg,
    var(--white-100),
    var(--white-0) 50%
  );
  -webkit-mask-image: linear-gradient(
    135deg,
    var(--white-100),
    var(--white-0) 50%
  );
  pointer-events: none;
}

/* Maskierter Rahmen - Akzentfarbe (unten rechts) */
.glass::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid var(--accent);
  mask-image: linear-gradient(
    135deg,
    var(--white-0) 50%,
    var(--white-100)
  );
  -webkit-mask-image: linear-gradient(
    135deg,
    var(--white-0) 50%,
    var(--white-100)
  );
  pointer-events: none;
}

/* Content muss über den Pseudo-Elementen sein */
.glass > * {
  position: relative;
  z-index: 1;
}


/* 
=====================================================
AKZENTFARBEN
=====================================================
*/

.glass-design { --accent: var(--kb-design, #FDE962); }
.glass-content { --accent: var(--kb-content, #00e962); }
.glass-marke { --accent: var(--kb-marke, #234BFF); }
.glass-kreativbox { --accent: var(--kb-kreativbox, #e51f75); }
.glass-website { --accent: var(--kb-website, #8221D8); }
.glass-strategie { --accent: var(--kb-strategie, #ff9648); }
.glass-somedia { --accent: var(--kb-somedia, #DD4342); }
.glass-white { --accent: var(--white-100); }
.glass-gray { --accent: var(--kb-gray-500, #8a8b89); }


/* 
=====================================================
BLUR VARIANTEN
=====================================================
*/

.glass-blur-sm { --glass-blur: 6px; }
.glass-blur-md { --glass-blur: 12px; }
.glass-blur-lg { --glass-blur: 20px; }
.glass-blur-xl { --glass-blur: 30px; }


/* 
=====================================================
RADIUS VARIANTEN
=====================================================
*/

.glass-radius-sm { --glass-radius: 12px; border-radius: 12px; }
.glass-radius-md { --glass-radius: 24px; border-radius: 24px; }
.glass-radius-lg { --glass-radius: 32px; border-radius: 32px; }
.glass-radius-xl { --glass-radius: 48px; border-radius: 48px; }
.glass-radius-full { --glass-radius: 100vmax; border-radius: 100vmax; }


/* 
=====================================================
BACKGROUND VARIANTEN
=====================================================
*/

/* Stärker sichtbar */
.glass-strong {
  background-image: linear-gradient(
    135deg,
    var(--white-30),
    var(--white-10)
  );
}

/* Sehr subtle */
.glass-subtle {
  background-image: linear-gradient(
    135deg,
    var(--white-10),
    var(--white-5)
  );
}

/* Dunkles Glass */
.glass-dark {
  background-image: linear-gradient(
    135deg,
    hsla(0, 0%, 0%, 0.3),
    hsla(0, 0%, 0%, 0.1)
  );
}

.glass-dark::before {
  border-color: var(--white-30);
}

/*
=====================================================
GLASS MIT FARBIGEM HINTERGRUND
Glass-Effekt mit transparenter Markenfarbe als Basis
=====================================================
*/

/* Design (Gelb) */
.glass-bg-design {
  background-image: linear-gradient(
    135deg,
    hsla(54, 98%, 69%, 0.25),
    hsla(54, 98%, 69%, 0.1)
  ) !important;
}
.glass-bg-design::before {
  border-color: hsla(54, 98%, 69%, 0.4) !important;
}

/* Content (Grün) */
.glass-bg-content {
  background-image: linear-gradient(
    135deg,
    hsla(151, 100%, 46%, 0.25),
    hsla(151, 100%, 46%, 0.1)
  ) !important;
}
.glass-bg-content::before {
  border-color: hsla(151, 100%, 46%, 0.4) !important;
}

/* Marke (Blau) */
.glass-bg-marke {
  background-image: linear-gradient(
    135deg,
    hsla(228, 100%, 57%, 0.25),
    hsla(228, 100%, 57%, 0.1)
  ) !important;
}
.glass-bg-marke::before {
  border-color: hsla(228, 100%, 57%, 0.4) !important;
}

/* Kreativbox (Pink) */
.glass-bg-kreativbox {
  background-image: linear-gradient(
    135deg,
    hsla(333, 78%, 51%, 0.25),
    hsla(333, 78%, 51%, 0.1)
  ) !important;
}
.glass-bg-kreativbox::before {
  border-color: hsla(333, 78%, 51%, 0.4) !important;
}

/* Website (Lila) - Default */
.glass-bg-website {
  background-image: linear-gradient(
    135deg,
    hsla(268, 74%, 49%, 0.25),
    hsla(268, 74%, 49%, 0.1)
  ) !important;
}
.glass-bg-website::before {
  border-color: hsla(268, 74%, 49%, 0.4) !important;
}

/* Strategie (Orange) */
.glass-bg-strategie {
  background-image: linear-gradient(
    135deg,
    hsla(30, 100%, 64%, 0.25),
    hsla(30, 100%, 64%, 0.1)
  ) !important;
}
.glass-bg-strategie::before {
  border-color: hsla(30, 100%, 64%, 0.4) !important;
}

/* Somedia (Rot) */
.glass-bg-somedia {
  background-image: linear-gradient(
    135deg,
    hsla(1, 69%, 56%, 0.25),
    hsla(1, 69%, 56%, 0.1)
  ) !important;
}
.glass-bg-somedia::before {
  border-color: hsla(1, 69%, 56%, 0.4) !important;
}

/* Stärkere Varianten (-strong) */
.glass-bg-design-strong {
  background-image: linear-gradient(135deg, hsla(54, 98%, 69%, 0.4), hsla(54, 98%, 69%, 0.2)) !important;
}
.glass-bg-content-strong {
  background-image: linear-gradient(135deg, hsla(151, 100%, 46%, 0.4), hsla(151, 100%, 46%, 0.2)) !important;
}
.glass-bg-marke-strong {
  background-image: linear-gradient(135deg, hsla(228, 100%, 57%, 0.4), hsla(228, 100%, 57%, 0.2)) !important;
}
.glass-bg-kreativbox-strong {
  background-image: linear-gradient(135deg, hsla(333, 78%, 51%, 0.4), hsla(333, 78%, 51%, 0.2)) !important;
}
.glass-bg-website-strong {
  background-image: linear-gradient(135deg, hsla(268, 74%, 49%, 0.4), hsla(268, 74%, 49%, 0.2)) !important;
}
.glass-bg-strategie-strong {
  background-image: linear-gradient(135deg, hsla(30, 100%, 64%, 0.4), hsla(30, 100%, 64%, 0.2)) !important;
}
.glass-bg-somedia-strong {
  background-image: linear-gradient(135deg, hsla(1, 69%, 56%, 0.4), hsla(1, 69%, 56%, 0.2)) !important;
}

/* Dezentere Varianten (-subtle) */
.glass-bg-design-subtle {
  background-image: linear-gradient(135deg, hsla(54, 98%, 69%, 0.12), hsla(54, 98%, 69%, 0.05)) !important;
}
.glass-bg-content-subtle {
  background-image: linear-gradient(135deg, hsla(151, 100%, 46%, 0.12), hsla(151, 100%, 46%, 0.05)) !important;
}
.glass-bg-marke-subtle {
  background-image: linear-gradient(135deg, hsla(228, 100%, 57%, 0.12), hsla(228, 100%, 57%, 0.05)) !important;
}
.glass-bg-kreativbox-subtle {
  background-image: linear-gradient(135deg, hsla(333, 78%, 51%, 0.12), hsla(333, 78%, 51%, 0.05)) !important;
}
.glass-bg-website-subtle {
  background-image: linear-gradient(135deg, hsla(268, 74%, 49%, 0.12), hsla(268, 74%, 49%, 0.05)) !important;
}
.glass-bg-strategie-subtle {
  background-image: linear-gradient(135deg, hsla(30, 100%, 64%, 0.12), hsla(30, 100%, 64%, 0.05)) !important;
}
.glass-bg-somedia-subtle {
  background-image: linear-gradient(135deg, hsla(1, 69%, 56%, 0.12), hsla(1, 69%, 56%, 0.05)) !important;
}

/* Horizontaler Gradient (statt diagonal) */
.glass-horizontal {
  background-image: linear-gradient(
    90deg,
    var(--white-20),
    var(--white-5)
  );
}

.glass-horizontal::before {
  mask-image: linear-gradient(
    90deg,
    var(--white-100),
    var(--white-0) 50%
  );
  -webkit-mask-image: linear-gradient(
    90deg,
    var(--white-100),
    var(--white-0) 50%
  );
}

.glass-horizontal::after {
  mask-image: linear-gradient(
    90deg,
    var(--white-0) 50%,
    var(--white-100)
  );
  -webkit-mask-image: linear-gradient(
    90deg,
    var(--white-0) 50%,
    var(--white-100)
  );
}

/* Vertikaler Gradient */
.glass-vertical {
  background-image: linear-gradient(
    180deg,
    var(--white-20),
    var(--white-5)
  );
}

.glass-vertical::before {
  mask-image: linear-gradient(
    180deg,
    var(--white-100),
    var(--white-0) 50%
  );
  -webkit-mask-image: linear-gradient(
    180deg,
    var(--white-100),
    var(--white-0) 50%
  );
}

.glass-vertical::after {
  mask-image: linear-gradient(
    180deg,
    var(--white-0) 50%,
    var(--white-100)
  );
  -webkit-mask-image: linear-gradient(
    180deg,
    var(--white-0) 50%,
    var(--white-100)
  );
}


/* 
=====================================================
BORDER VARIANTEN
=====================================================
*/

/* Dickerer Rahmen */
.glass-border-2::before,
.glass-border-2::after {
  border-width: 2px;
}

/* Kein weißer Rahmen (nur Akzent) */
.glass-border-accent-only::before {
  display: none;
}

/* Kein Akzent-Rahmen (nur weiß) */
.glass-border-white-only::after {
  display: none;
}

/* Vollständiger Rahmen (nicht maskiert) */
.glass-border-full::before {
  mask-image: none;
  -webkit-mask-image: none;
  border-color: var(--white-30);
}

.glass-border-full::after {
  display: none;
}


/* 
=====================================================
SCHATTEN VARIANTEN
=====================================================
*/

.glass-shadow-none {
  box-shadow: none;
}

.glass-shadow-sm {
  box-shadow: 0 0.25em 0.5em hsla(0, 0%, 0%, 0.08);
}

.glass-shadow-lg {
  box-shadow: 
    0 1em 2em hsla(0, 0%, 0%, 0.12),
    0 0.5em 1em hsla(0, 0%, 0%, 0.08);
}

.glass-shadow-glow {
  box-shadow: 
    0 0.5em 1.5em hsla(0, 0%, 0%, 0.1),
    0 0 30px color-mix(in srgb, var(--accent) 20%, transparent);
}


/* 
=====================================================
HOVER EFFEKTE
=====================================================
*/

.glass-hover {
  /* Spring-Easing: leichter Overshoot beim Hover ("Pop"-Gefühl) */
  transition:
    transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.4s ease,
    background-image 0.3s ease;
}

.glass-hover:hover {
  transform: translateY(-4px);
  box-shadow:
    0 1em 2.5em hsla(0, 0%, 0%, 0.15),
    0 0 40px color-mix(in srgb, var(--accent) 25%, transparent);
}

/* Active/Click feedback – schnelles Einsinken */
.glass-hover:active {
  transform: translateY(-1px) scale(0.98);
  transition: transform 0.12s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Hover mit verstärktem Background */
.glass-hover-strong:hover {
  background-image: linear-gradient(
    135deg,
    var(--white-30),
    var(--white-10)
  );
}

/* Scale Hover */
.glass-hover-scale {
  transition:
    transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.4s ease;
}

.glass-hover-scale:hover {
  transform: scale(1.04);
}

.glass-hover-scale:active {
  transform: scale(0.98);
  transition: transform 0.12s cubic-bezier(0.4, 0, 0.2, 1);
}

/*
=====================================================
ICON-BOUNCE in Glass-Elementen
Wenn ein Icon (z. B. Pfeil) in einem .glass-hover oder
.glass-hover-scale steckt, bekommt es eine eigene
Spring-Bewegung diagonal nach oben-rechts (typischer
"Outgoing-Link"-Move). Funktioniert mit Elementor Icon-
Widgets und einfachen <svg>-Elementen.
=====================================================
*/
.glass-hover .elementor-icon svg,
.glass-hover-scale .elementor-icon svg,
.glass-hover > svg,
.glass-hover-scale > svg {
  transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 0.04s;
}

.glass-hover:hover .elementor-icon svg,
.glass-hover-scale:hover .elementor-icon svg,
.glass-hover:hover > svg,
.glass-hover-scale:hover > svg {
  transform: translate(3px, -3px);
}


/* 
=====================================================
FÜR ELEMENTOR
=====================================================
*/

/* Container */
.kb-glass.e-con,
.kb-glass > .e-con-inner {
  --accent: var(--glass-accent);
  
  position: relative;
  border-radius: var(--glass-radius) !important;
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
  background-image: linear-gradient(
    135deg,
    var(--white-20),
    var(--white-5)
  ) !important;
  background-color: transparent !important;
  box-shadow: 0 0.5em 1.5em hsla(0, 0%, 0%, 0.1) !important;
  overflow: hidden;
}

.kb-glass.e-con::before,
.kb-glass > .e-con-inner::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid var(--white-100);
  mask-image: linear-gradient(135deg, var(--white-100), var(--white-0) 50%);
  -webkit-mask-image: linear-gradient(135deg, var(--white-100), var(--white-0) 50%);
  pointer-events: none;
  z-index: 0;
}

.kb-glass.e-con::after,
.kb-glass > .e-con-inner::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid var(--accent);
  mask-image: linear-gradient(135deg, var(--white-0) 50%, var(--white-100));
  -webkit-mask-image: linear-gradient(135deg, var(--white-0) 50%, var(--white-100));
  pointer-events: none;
  z-index: 0;
}

/* Elementor Akzentfarben */
.kb-glass.kb-glass-design { --accent: var(--kb-design, #FDE962); }
.kb-glass.kb-glass-content { --accent: var(--kb-content, #00e962); }
.kb-glass.kb-glass-marke { --accent: var(--kb-marke, #234BFF); }
.kb-glass.kb-glass-kreativbox { --accent: var(--kb-kreativbox, #e51f75); }
.kb-glass.kb-glass-website { --accent: var(--kb-website, #8221D8); }
.kb-glass.kb-glass-strategie { --accent: var(--kb-strategie, #ff9648); }

/* Elementor Widget */
.kb-glass.elementor-widget > .elementor-widget-container {
  position: relative;
  border-radius: var(--glass-radius);
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
  background-image: linear-gradient(135deg, var(--white-20), var(--white-5));
  box-shadow: 0 0.5em 1.5em hsla(0, 0%, 0%, 0.1);
  overflow: hidden;
}


/* 
=====================================================
MIT GRAIN (optional)
=====================================================
*/

.glass-grain::before {
  /* Grain über dem weißen Border */
}

.glass-grain > *:first-child::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
  opacity: 0.04;
  pointer-events: none;
  z-index: 2;
  border-radius: inherit;
  mix-blend-mode: overlay;
}


/*
=====================================================
FLAT CARDS
Solide Karten ohne Blur/Glass-Effekt
=====================================================
*/

/* Basis Flat Card */
.card {
  position: relative;
  border-radius: var(--glass-radius, 24px);
  background-color: var(--kb-gray-800);
  box-shadow: 0 4px 20px hsla(0, 0%, 0%, 0.15);
  overflow: hidden;
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

/* Content über allem */
.card > * {
  position: relative;
  z-index: 1;
}

/* ===== BEREICHSFARBEN ===== */

/* Design - Gelb */
.card-design {
  background-color: var(--kb-design, #FDE962);
  color: var(--kb-gray-900) !important;
}
.card-design * { color: inherit !important; }

/* Content - Grün */
.card-content {
  background-color: var(--kb-content, #00e962);
  color: var(--kb-gray-900) !important;
}
.card-content * { color: inherit !important; }

/* Marke - Blau */
.card-marke {
  background-color: var(--kb-marke, #234BFF);
  color: var(--kb-white) !important;
}
.card-marke * { color: inherit !important; }

/* Kreativbox - Pink */
.card-kreativbox {
  background-color: var(--kb-kreativbox, #e51f75);
  color: var(--kb-white) !important;
}
.card-kreativbox * { color: inherit !important; }

/* Website - Lila */
.card-website {
  background-color: var(--kb-website, #8221D8);
  color: var(--kb-white) !important;
}
.card-website * { color: inherit !important; }

/* Strategie - Orange */
.card-strategie {
  background-color: var(--kb-strategie, #ff9648);
  color: var(--kb-gray-900) !important;
}
.card-strategie * { color: inherit !important; }

/* SoMedia - Rot */
.card-somedia {
  background-color: var(--kb-somedia, #DD4342);
  color: var(--kb-white) !important;
}
.card-somedia * { color: inherit !important; }

/* ===== NEUTRALE FARBEN ===== */

/* Dark - Fast Schwarz */
.card-dark {
  background-color: var(--kb-gray-900, #101414);
  color: var(--kb-white) !important;
}
.card-dark * { color: inherit !important; }

/* Gray 800 - Dunkelgrau (Default) */
.card-gray-800 {
  background-color: var(--kb-gray-800, #343838);
  color: var(--kb-white) !important;
}
.card-gray-800 * { color: inherit !important; }

/* Gray 700 - Mittelgrau */
.card-gray-700 {
  background-color: var(--kb-gray-700, #525453);
  color: var(--kb-white) !important;
}
.card-gray-700 * { color: inherit !important; }

/* Gray 500 - Grau */
.card-gray-500 {
  background-color: var(--kb-gray-500, #8a8b89);
  color: var(--kb-white) !important;
}
.card-gray-500 * { color: inherit !important; }

/* Gray 300 - Hellgrau */
.card-gray-300 {
  background-color: var(--kb-gray-300, #c4c2c0);
  color: var(--kb-gray-900) !important;
}
.card-gray-300 * { color: inherit !important; }

/* Gray 200 - Sehr hell */
.card-gray-200 {
  background-color: var(--kb-gray-200, #e0dedb);
  color: var(--kb-gray-900) !important;
}
.card-gray-200 * { color: inherit !important; }

/* Gray 100 - Fast weiß */
.card-gray-100 {
  background-color: var(--kb-gray-100, #fdf9f6);
  color: var(--kb-gray-900) !important;
}
.card-gray-100 * { color: inherit !important; }

/* White - Weiß */
.card-white {
  background-color: var(--kb-white, #ffffff);
  color: var(--kb-gray-900) !important;
}
.card-white * { color: inherit !important; }

/* Light - Standard heller Hintergrund */
.card-light {
  background-color: var(--kb-gray-100, #fdf9f6);
  color: var(--kb-gray-900) !important;
}
.card-light * { color: inherit !important; }


/* ===== MUTED VARIANTEN (Transparent) ===== */

.card-design-muted {
  background-color: hsla(53, 97%, 69%, 0.15);
  color: var(--kb-design) !important;
}

.card-content-muted {
  background-color: hsla(147, 100%, 46%, 0.15);
  color: var(--kb-content) !important;
}

.card-marke-muted {
  background-color: hsla(228, 100%, 57%, 0.15);
  color: var(--kb-marke) !important;
}

.card-kreativbox-muted {
  background-color: hsla(335, 79%, 51%, 0.15);
  color: var(--kb-kreativbox) !important;
}

.card-website-muted {
  background-color: hsla(268, 74%, 49%, 0.15);
  color: var(--kb-website) !important;
}

.card-strategie-muted {
  background-color: hsla(28, 100%, 64%, 0.15);
  color: var(--kb-strategie) !important;
}

.card-somedia-muted {
  background-color: hsla(1, 70%, 56%, 0.15);
  color: var(--kb-somedia) !important;
}

.card-dark-muted {
  background-color: hsla(180, 6%, 7%, 0.5);
  color: var(--kb-white) !important;
}


/* ===== BORDER VARIANTEN ===== */

.card-border {
  border: 1px solid hsla(0, 0%, 100%, 0.1);
}

.card-border-strong {
  border: 2px solid hsla(0, 0%, 100%, 0.2);
}

.card-border-design { border: 2px solid var(--kb-design) !important; }
.card-border-content { border: 2px solid var(--kb-content) !important; }
.card-border-marke { border: 2px solid var(--kb-marke) !important; }
.card-border-kreativbox { border: 2px solid var(--kb-kreativbox) !important; }
.card-border-website { border: 2px solid var(--kb-website) !important; }
.card-border-strategie { border: 2px solid var(--kb-strategie) !important; }
.card-border-somedia { border: 2px solid var(--kb-somedia) !important; }


/* ===== RADIUS VARIANTEN ===== */

.card-radius-none { border-radius: 0 !important; }
.card-radius-sm { border-radius: 12px !important; }
.card-radius-md { border-radius: 24px !important; }
.card-radius-lg { border-radius: 32px !important; }
.card-radius-xl { border-radius: 48px !important; }
.card-radius-full { border-radius: 100vmax !important; }


/* ===== SCHATTEN VARIANTEN ===== */

.card-shadow-none { box-shadow: none !important; }
.card-shadow-sm { box-shadow: 0 2px 8px hsla(0, 0%, 0%, 0.1) !important; }
.card-shadow-md { box-shadow: 0 4px 20px hsla(0, 0%, 0%, 0.15) !important; }
.card-shadow-lg { box-shadow: 0 8px 40px hsla(0, 0%, 0%, 0.2) !important; }
.card-shadow-xl { box-shadow: 0 16px 60px hsla(0, 0%, 0%, 0.25) !important; }


/* ===== HOVER EFFEKTE ===== */

.card-hover:hover {
  transform: translateY(-4px);
  box-shadow: 0 8px 30px hsla(0, 0%, 0%, 0.2);
}

.card-hover-lift:hover {
  transform: translateY(-8px);
  box-shadow: 0 12px 40px hsla(0, 0%, 0%, 0.25);
}

.card-hover-scale:hover {
  transform: scale(1.02);
}

.card-hover-glow:hover {
  box-shadow: 0 0 30px hsla(268, 74%, 49%, 0.4);
}

/* Farbspezifische Glow-Hover */
.card-design.card-hover-glow:hover { box-shadow: 0 0 30px hsla(53, 97%, 69%, 0.5) !important; }
.card-content.card-hover-glow:hover { box-shadow: 0 0 30px hsla(147, 100%, 46%, 0.5) !important; }
.card-marke.card-hover-glow:hover { box-shadow: 0 0 30px hsla(228, 100%, 57%, 0.5) !important; }
.card-kreativbox.card-hover-glow:hover { box-shadow: 0 0 30px hsla(335, 79%, 51%, 0.5) !important; }
.card-website.card-hover-glow:hover { box-shadow: 0 0 30px hsla(268, 74%, 49%, 0.5) !important; }
.card-strategie.card-hover-glow:hover { box-shadow: 0 0 30px hsla(28, 100%, 64%, 0.5) !important; }
.card-somedia.card-hover-glow:hover { box-shadow: 0 0 30px hsla(1, 70%, 56%, 0.5) !important; }


/* ===== GRADIENT VARIANTEN ===== */

.card-gradient-design {
  background: linear-gradient(135deg, var(--kb-design) 0%, hsla(53, 97%, 69%, 0.7) 100%);
  color: var(--kb-gray-900) !important;
}

.card-gradient-content {
  background: linear-gradient(135deg, var(--kb-content) 0%, hsla(147, 100%, 46%, 0.7) 100%);
  color: var(--kb-gray-900) !important;
}

.card-gradient-marke {
  background: linear-gradient(135deg, var(--kb-marke) 0%, hsla(228, 100%, 57%, 0.7) 100%);
  color: var(--kb-white) !important;
}

.card-gradient-kreativbox {
  background: linear-gradient(135deg, var(--kb-kreativbox) 0%, hsla(335, 79%, 51%, 0.7) 100%);
  color: var(--kb-white) !important;
}

.card-gradient-website {
  background: linear-gradient(135deg, var(--kb-website) 0%, hsla(268, 74%, 49%, 0.7) 100%);
  color: var(--kb-white) !important;
}

.card-gradient-strategie {
  background: linear-gradient(135deg, var(--kb-strategie) 0%, hsla(28, 100%, 64%, 0.7) 100%);
  color: var(--kb-gray-900) !important;
}

.card-gradient-somedia {
  background: linear-gradient(135deg, var(--kb-somedia) 0%, hsla(1, 70%, 56%, 0.7) 100%);
  color: var(--kb-white) !important;
}

.card-gradient-dark {
  background: linear-gradient(135deg, var(--kb-gray-900) 0%, var(--kb-gray-800) 100%);
  color: var(--kb-white) !important;
}


/*
=====================================================
BUTTON-SYSTEM
=====================================================
API (vier Grundvarianten, sauber, kein globaler Swap, kein Override-Hack):

  .kb-btn               → WEISS  (default: weißer BG, schwarzer Text)
  .kb-btn.dark          → SCHWARZ (schwarzer BG, weißer Text)
  .kb-btn.outline       → Outline schwarz (transparent + schwarzer Border)
  .kb-btn.outline.dark  → Outline weiß    (transparent + weißer Border)
                          Alias: .outline-white

Bereich-Modifier (additiv): .marke .design .content .strategie .somedia .website .kreativbox
  - Auf gefüllten Buttons: BG + Border = Bereich-Farbe, Pille kontrastiert
  - Auf Outline-Buttons:   Border + Text + Pille = Bereich, Hover füllt sich

Layout:
  (default)        → mit Icon-Pille rechts
  .no-icon         → Pille aus, symmetrisches Padding
  .icon-only       → nur Pille, kein Text
  .icon-right      → explizit (Default ist schon rechts)
  .small / .large  → Größenstufen

Mobile (< 768px):
  - Cap auf 360px Breite (kein voll-breit)
  - Text 16px (kein iOS Auto-Zoom)
  - Icon-Pille wird zu echtem Kreis (32x32)

Variable-Modell (jede Variante setzt komplett, keine Swaps):
  --btn-bg      Container-BG (idle + Hover-Regel überschreibt)
  --btn-text    Text-Farbe
  --btn-border  Border-Farbe
  --btn-accent  Icon-Pille (SVG rect/circle fill)
  --icon-fill   Pfeil im Icon (SVG path fill)
  --btn-glow    Hover-Glow-Farbe
=====================================================
*/

/* === BASE: WEISS (default) === */
.kb-btn {
  --btn-bg: var(--kb-white);
  --btn-text: var(--kb-gray-900);
  --btn-border: var(--kb-white);
  --btn-accent: var(--kb-gray-900);   /* Icon-Pille schwarz */
  --icon-fill: var(--kb-white);       /* Pfeil weiß im schwarzen Pill */
  --btn-glow: rgba(0, 0, 0, 0.18);
  --icon-width: 100px;
  --icon-height: 49px;
  line-height: 0;
}

/* === DARK: SCHWARZ ===
   Weißer Border wie im Original-System — sonst ist der Button auf
   dunklen Flächen (Magazin, dunkle Sections) unsichtbar. */
.kb-btn.dark {
  --btn-bg: var(--kb-gray-900);
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-white);
  --btn-accent: var(--kb-white);      /* Icon-Pille weiß */
  --icon-fill: var(--kb-gray-900);    /* Pfeil schwarz im weißen Pill */
  --btn-glow: rgba(255, 255, 255, 0.22);
}

/* === OUTLINE (schwarz, auf hellem BG) ===
   Idle:  transparent + schwarzer Border, schwarze Pille, weißer Pfeil
   Hover: füllt schwarz, weißer Text, weiße Pille, schwarzer Pfeil */
.kb-btn.outline {
  --btn-bg: transparent;
  --btn-text: var(--kb-gray-900);
  --btn-border: var(--kb-gray-900);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-white);
  --btn-glow: rgba(0, 0, 0, 0.18);
}
.kb-btn.outline .elementor-button:hover {
  --btn-bg: var(--kb-gray-900);
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-gray-900);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-gray-900);
}

/* === OUTLINE DARK / .outline-white (weiß, auf dunklem BG) ===
   Idle:  transparent + weißer Border, weiße Pille, schwarzer Pfeil
   Hover: füllt weiß, schwarzer Text, schwarze Pille, weißer Pfeil */
.kb-btn.outline.dark,
.kb-btn.outline-white {
  --btn-bg: transparent;
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-white);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-gray-900);
  --btn-glow: rgba(255, 255, 255, 0.22);
}
.kb-btn.outline.dark .elementor-button:hover,
.kb-btn.outline-white .elementor-button:hover {
  --btn-bg: var(--kb-white);
  --btn-text: var(--kb-gray-900);
  --btn-border: var(--kb-white);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-white);
}

/* === Legacy-Alias: .ghost (= outline) === */
.kb-btn.ghost:not(.dark) {
  --btn-bg: transparent;
  --btn-text: var(--kb-gray-900);
  --btn-border: var(--kb-gray-900);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-white);
  --btn-glow: rgba(0, 0, 0, 0.18);
}
.kb-btn.ghost:not(.dark) .elementor-button:hover {
  --btn-bg: var(--kb-gray-900);
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-gray-900);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-gray-900);
}
.kb-btn.ghost.dark {
  --btn-bg: transparent;
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-white);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-gray-900);
  --btn-glow: rgba(255, 255, 255, 0.22);
}
.kb-btn.ghost.dark .elementor-button:hover {
  --btn-bg: var(--kb-white);
  --btn-text: var(--kb-gray-900);
  --btn-border: var(--kb-white);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-white);
}

/*
=====================================================
BEREICH-MODIFIER
- Vollflächig (.kb-btn[.dark][.filled].<bereich>): BG = Bereich, Pille kontrastiert
- Outline (.kb-btn.outline.<bereich>): Border+Text+Pille = Bereich, Hover füllt sich
=====================================================
*/

/* --- Marke (Blau, dunkel) --- */
.kb-btn.marke:not(.outline):not(.ghost):not(.outline-white) {
  --btn-bg: var(--kb-marke);
  --btn-border: var(--kb-marke);
  --btn-text: var(--kb-white);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-marke);
  --btn-glow: rgba(35, 75, 255, 0.40);
}
.kb-btn.outline.marke,
.kb-btn.ghost.marke {
  --btn-bg: transparent;
  --btn-text: var(--kb-marke);
  --btn-border: var(--kb-marke);
  --btn-accent: var(--kb-marke);
  --icon-fill: var(--kb-white);
  --btn-glow: rgba(35, 75, 255, 0.40);
}
.kb-btn.outline.marke .elementor-button:hover,
.kb-btn.ghost.marke .elementor-button:hover {
  --btn-bg: var(--kb-marke);
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-marke);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-marke);
}

/* --- Design (Gelb, hell) --- */
.kb-btn.design:not(.outline):not(.ghost):not(.outline-white) {
  --btn-bg: var(--kb-design);
  --btn-border: var(--kb-design);
  --btn-text: var(--kb-gray-900);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-design);
  --btn-glow: rgba(253, 233, 98, 0.55);
}
.kb-btn.outline.design,
.kb-btn.ghost.design {
  --btn-bg: transparent;
  --btn-text: var(--kb-design);
  --btn-border: var(--kb-design);
  --btn-accent: var(--kb-design);
  --icon-fill: var(--kb-gray-900);
  --btn-glow: rgba(253, 233, 98, 0.55);
}
.kb-btn.outline.design .elementor-button:hover,
.kb-btn.ghost.design .elementor-button:hover {
  --btn-bg: var(--kb-design);
  --btn-text: var(--kb-gray-900);
  --btn-border: var(--kb-design);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-design);
}

/* --- Content (Grün, hell) --- */
.kb-btn.content:not(.outline):not(.ghost):not(.outline-white) {
  --btn-bg: var(--kb-content);
  --btn-border: var(--kb-content);
  --btn-text: var(--kb-gray-900);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-content);
  --btn-glow: rgba(0, 233, 98, 0.45);
}
.kb-btn.outline.content,
.kb-btn.ghost.content {
  --btn-bg: transparent;
  --btn-text: var(--kb-content);
  --btn-border: var(--kb-content);
  --btn-accent: var(--kb-content);
  --icon-fill: var(--kb-gray-900);
  --btn-glow: rgba(0, 233, 98, 0.45);
}
.kb-btn.outline.content .elementor-button:hover,
.kb-btn.ghost.content .elementor-button:hover {
  --btn-bg: var(--kb-content);
  --btn-text: var(--kb-gray-900);
  --btn-border: var(--kb-content);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-content);
}

/* --- Strategie (Orange, hell) --- */
.kb-btn.strategie:not(.outline):not(.ghost):not(.outline-white) {
  --btn-bg: var(--kb-strategie);
  --btn-border: var(--kb-strategie);
  --btn-text: var(--kb-gray-900);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-strategie);
  --btn-glow: rgba(255, 150, 72, 0.45);
}
.kb-btn.outline.strategie,
.kb-btn.ghost.strategie {
  --btn-bg: transparent;
  --btn-text: var(--kb-strategie);
  --btn-border: var(--kb-strategie);
  --btn-accent: var(--kb-strategie);
  --icon-fill: var(--kb-gray-900);
  --btn-glow: rgba(255, 150, 72, 0.45);
}
.kb-btn.outline.strategie .elementor-button:hover,
.kb-btn.ghost.strategie .elementor-button:hover {
  --btn-bg: var(--kb-strategie);
  --btn-text: var(--kb-gray-900);
  --btn-border: var(--kb-strategie);
  --btn-accent: var(--kb-gray-900);
  --icon-fill: var(--kb-strategie);
}

/* --- Somedia (Rot, dunkel) --- */
.kb-btn.somedia:not(.outline):not(.ghost):not(.outline-white) {
  --btn-bg: var(--kb-somedia);
  --btn-border: var(--kb-somedia);
  --btn-text: var(--kb-white);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-somedia);
  --btn-glow: rgba(221, 67, 66, 0.40);
}
.kb-btn.outline.somedia,
.kb-btn.ghost.somedia {
  --btn-bg: transparent;
  --btn-text: var(--kb-somedia);
  --btn-border: var(--kb-somedia);
  --btn-accent: var(--kb-somedia);
  --icon-fill: var(--kb-white);
  --btn-glow: rgba(221, 67, 66, 0.40);
}
.kb-btn.outline.somedia .elementor-button:hover,
.kb-btn.ghost.somedia .elementor-button:hover {
  --btn-bg: var(--kb-somedia);
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-somedia);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-somedia);
}

/* --- Website (Lila, dunkel) --- */
.kb-btn.website:not(.outline):not(.ghost):not(.outline-white) {
  --btn-bg: var(--kb-website);
  --btn-border: var(--kb-website);
  --btn-text: var(--kb-white);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-website);
  --btn-glow: rgba(130, 33, 216, 0.40);
}
.kb-btn.outline.website,
.kb-btn.ghost.website {
  --btn-bg: transparent;
  --btn-text: var(--kb-website);
  --btn-border: var(--kb-website);
  --btn-accent: var(--kb-website);
  --icon-fill: var(--kb-white);
  --btn-glow: rgba(130, 33, 216, 0.40);
}
.kb-btn.outline.website .elementor-button:hover,
.kb-btn.ghost.website .elementor-button:hover {
  --btn-bg: var(--kb-website);
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-website);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-website);
}

/* --- Kreativbox (Pink, dunkel) --- */
.kb-btn.kreativbox:not(.outline):not(.ghost):not(.outline-white) {
  --btn-bg: var(--kb-kreativbox);
  --btn-border: var(--kb-kreativbox);
  --btn-text: var(--kb-white);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-kreativbox);
  --btn-glow: rgba(229, 31, 117, 0.40);
}
.kb-btn.outline.kreativbox,
.kb-btn.ghost.kreativbox {
  --btn-bg: transparent;
  --btn-text: var(--kb-kreativbox);
  --btn-border: var(--kb-kreativbox);
  --btn-accent: var(--kb-kreativbox);
  --icon-fill: var(--kb-white);
  --btn-glow: rgba(229, 31, 117, 0.40);
}
.kb-btn.outline.kreativbox .elementor-button:hover,
.kb-btn.ghost.kreativbox .elementor-button:hover {
  --btn-bg: var(--kb-kreativbox);
  --btn-text: var(--kb-white);
  --btn-border: var(--kb-kreativbox);
  --btn-accent: var(--kb-white);
  --icon-fill: var(--kb-kreativbox);
}

/* === Legacy-Alias .filled
   = wie default + Bereich (Bereich-Klassen liefern BG bereits ohne .filled).
   Ohne Bereich-Modifier fällt .filled auf default zurück (kein Spezial-Setup nötig). */

/*
=====================================================
LAYOUT (Container, Wrapper, Text, Icon)
=====================================================
*/
.kb-btn .elementor-widget-container,
.kb-btn .elementor-button-wrapper {
  line-height: 0;
}

.kb-btn .elementor-button {
  position: relative;
  overflow: hidden;
  display: inline-flex !important;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  padding: 12px 30px 12px 12px !important;
  gap: 16px;

  background-color: var(--btn-bg) !important;
  border: 1px solid var(--btn-border) !important;
  border-radius: 56px !important;

  line-height: normal;

  /* Spring-Easing: leichter Overshoot beim Hover */
  transition:
    transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.4s ease,
    border-color 0.3s ease,
    background-color 0.3s ease;
}

/* Universal-Hover: Scale + Glow.
   Variant-spezifische :hover-Regeln (outline / outline.dark / outline.<bereich>)
   ändern darüber hinaus die Variablen (BG, Text, Pille).
   Gefüllte Buttons behalten ihre Farbe → nur Glow. */
.kb-btn .elementor-button:hover {
  transform: scale(1.05);
  box-shadow:
    0 0 20px var(--btn-glow),
    0 0 40px var(--btn-glow),
    0 0 60px var(--btn-glow);
}

/* Icon-Push beim Hover */
.kb-btn .elementor-button-icon {
  transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 0.04s;
}
.kb-btn .elementor-button:hover .elementor-button-icon {
  transform: translateX(6px);
}

/* Active/Click */
.kb-btn .elementor-button:active {
  transform: scale(0.98);
  transition: transform 0.12s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Tablet/Mobile Transition-Tuning */
body[data-elementor-device-mode="tablet"] .kb-btn .elementor-button {
  transition-duration: 0.15s;
}
body[data-elementor-device-mode="tablet"] .kb-btn .elementor-button:hover {
  transform: scale(1.02);
}
body[data-elementor-device-mode="mobile"] .kb-btn .elementor-button {
  transition-duration: 0s;
}
body[data-elementor-device-mode="mobile"] .kb-btn .elementor-button:hover {
  transform: none;
}

/* Content Wrapper */
.kb-btn .elementor-button-content-wrapper {
  position: relative;
  z-index: 10;
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 16px;
}

/* Icon (Desktop: SVG-Pille mit rect/circle als Background) */
.kb-btn .elementor-button-icon {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-shrink: 0;
  color: var(--btn-accent);
}
.kb-btn .elementor-button-icon svg {
  width: var(--icon-width) !important;
  height: var(--icon-height) !important;
  display: block;
}
.kb-btn .elementor-button-icon svg rect,
.kb-btn .elementor-button-icon svg circle {
  fill: var(--btn-accent) !important;
  transition: fill 0.3s ease;
}
.kb-btn .elementor-button-icon svg path {
  fill: var(--icon-fill) !important;
  transition: fill 0.3s ease;
}

/* Text */
.kb-btn .elementor-button-text {
  position: relative;
  z-index: 10;
  font-family: 'Avenir LT Std', 'Avenir', 'Montserrat', 'Poppins', Arial, sans-serif;
  font-weight: 700;
  font-size: 1.1rem;
  line-height: 1.25;
  color: var(--btn-text) !important;
  transition: color 0.3s ease;
}

/*
=====================================================
GRÖSSEN
=====================================================
*/
.kb-btn.small {
  --icon-width: 70px;
  --icon-height: 34px;
}
.kb-btn.small .elementor-button {
  padding: 8px 24px 8px 8px !important;
}
.kb-btn.small.no-icon .elementor-button {
  padding: 8px 24px !important;
}
.kb-btn.small .elementor-button-content-wrapper {
  gap: 12px;
}
.kb-btn.small .elementor-button-text {
  font-size: 0.95rem;
}

.kb-btn.large {
  --icon-width: 130px;
  --icon-height: 64px;
}
.kb-btn.large .elementor-button {
  padding: 14px 36px 14px 14px !important;
}
.kb-btn.large.no-icon .elementor-button {
  padding: 14px 36px !important;
}
.kb-btn.large .elementor-button-content-wrapper {
  gap: 20px;
}
.kb-btn.large .elementor-button-text {
  font-size: 1.25rem;
}

/*
=====================================================
ICON-POSITION / OHNE ICON / NO-HOVER
=====================================================
*/
.kb-btn.icon-right .elementor-button {
  padding: 12px 12px 12px 30px !important;
}
.kb-btn.icon-right .elementor-button-content-wrapper {
  flex-direction: row-reverse;
}

.kb-btn.icon-only .elementor-button {
  padding: 12px !important;
}
.kb-btn.icon-only .elementor-button-text {
  display: none;
}

/* Kein Icon — Pille ausblenden + symmetrisches Padding rundum */
.kb-btn.no-icon .elementor-button {
  padding: 12px 30px !important;
}
.kb-btn.no-icon .elementor-button-icon {
  display: none !important;
}

/* Kein Hover */
.kb-btn.no-hover .elementor-button {
  transition: none !important;
}
.kb-btn.no-hover .elementor-button:hover {
  transform: none !important;
  box-shadow: none !important;
}

/*
=====================================================
MOBILE (< 768px)
- Cap auf 360px, Text 16px, Icon-Pille → echter Kreis (32x32)
=====================================================
*/
@media (max-width: 767px) {
  .kb-btn,
  .kb-btn .elementor-button {
    max-width: 360px !important;
    width: auto !important;
    box-sizing: border-box;
  }

  .kb-btn .elementor-button {
    padding: 8px 20px 8px 8px !important;
  }
  .kb-btn.no-icon .elementor-button {
    padding: 10px 22px !important;
  }
  .kb-btn.icon-right .elementor-button {
    padding: 8px 8px 8px 20px !important;
  }

  .kb-btn .elementor-button-content-wrapper {
    gap: 12px;
    min-width: 0;
  }

  .kb-btn .elementor-button-text {
    font-size: 16px !important;  /* kein iOS-Auto-Zoom */
    line-height: 1.25;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
  }

  /* Icon-Pille → echter Kreis (CSS-Background, SVG-Rect aus).
     Pillen-Farbe + Pfeil flippen weiter über --btn-accent / --icon-fill. */
  .kb-btn .elementor-button-icon {
    width: 32px !important;
    height: 32px !important;
    border-radius: 50% !important;
    background: var(--btn-accent) !important;
    flex-shrink: 0;
    overflow: hidden;
    transition: background-color 0.3s ease;
  }
  .kb-btn .elementor-button-icon svg {
    width: 100% !important;
    height: 100% !important;
  }
  .kb-btn .elementor-button-icon svg rect {
    display: none !important;
  }
  .kb-btn .elementor-button-icon svg path {
    transform-origin: center;
    transform: scale(1.4) translate(0, 1px);
  }
}

/* 
=====================================================
Gaps
=====================================================
*/
/* Gap (beide Richtungen) */
/* Auch auf .e-con-inner für Elementor Boxed Container */
.gap-0, .gap-0 > .e-con-inner { gap: 0 !important; }
.gap-xs, .gap-xs > .e-con-inner { gap: var(--space-xs) !important; }
.gap-sm, .gap-sm > .e-con-inner { gap: var(--space-sm) !important; }
.gap-md, .gap-md > .e-con-inner { gap: var(--space-md) !important; }
.gap-lg, .gap-lg > .e-con-inner { gap: var(--space-lg) !important; }
.gap-xl, .gap-xl > .e-con-inner { gap: var(--space-xl) !important; }
.gap-xxl, .gap-xxl > .e-con-inner { gap: var(--space-xxl) !important; }
.gap-xxxl, .gap-xxxl > .e-con-inner { gap: var(--space-xxxl) !important; }

/* Feste Pixel-Werte (wie in deinem Beispiel 80px) */
.gap-40, .gap-40 > .e-con-inner { gap: 40px !important; }
.gap-60, .gap-60 > .e-con-inner { gap: 60px !important; }
.gap-80, .gap-80 > .e-con-inner { gap: 80px !important; }
.gap-100, .gap-100 > .e-con-inner { gap: 100px !important; }
.gap-120, .gap-120 > .e-con-inner { gap: 120px !important; }

/* Row Gap (vertikal) */
.row-gap-0 { row-gap: 0 !important; }
.row-gap-xs { row-gap: var(--space-xs) !important; }
.row-gap-sm { row-gap: var(--space-sm) !important; }
.row-gap-md { row-gap: var(--space-md) !important; }
.row-gap-lg { row-gap: var(--space-lg) !important; }
.row-gap-xl { row-gap: var(--space-xl) !important; }
.row-gap-xxl { row-gap: var(--space-xxl) !important; }

/* Row Gap feste Werte */
.row-gap-40 { row-gap: 40px !important; }
.row-gap-60 { row-gap: 60px !important; }
.row-gap-80 { row-gap: 80px !important; }

/* Column Gap (horizontal) */
.col-gap-0 { column-gap: 0 !important; }
.col-gap-xs { column-gap: var(--space-xs) !important; }
.col-gap-sm { column-gap: var(--space-sm) !important; }
.col-gap-md { column-gap: var(--space-md) !important; }
.col-gap-lg { column-gap: var(--space-lg) !important; }
.col-gap-xl { column-gap: var(--space-xl) !important; }
.col-gap-xxl { column-gap: var(--space-xxl) !important; }

/* Column Gap feste Werte */
.col-gap-40 { column-gap: 40px !important; }
.col-gap-60 { column-gap: 60px !important; }
.col-gap-80 { column-gap: 80px !important; }


/* 
=====================================================
ELEMENTOR CONTAINER GAP (mit CSS Variables)
=====================================================
Für Elementor Container die --gap Variable nutzen
*/

.kb-gap-0 { --gap: 0 !important; }
.kb-gap-xs { --gap: var(--space-xs) !important; }
.kb-gap-sm { --gap: var(--space-sm) !important; }
.kb-gap-md { --gap: var(--space-md) !important; }
.kb-gap-lg { --gap: var(--space-lg) !important; }
.kb-gap-xl { --gap: var(--space-xl) !important; }
.kb-gap-xxl { --gap: var(--space-xxl) !important; }

/* Feste Werte für Elementor */
.kb-gap-40 { --gap: 40px 40px !important; --row-gap: 40px !important; --column-gap: 40px !important; }
.kb-gap-60 { --gap: 60px 60px !important; --row-gap: 60px !important; --column-gap: 60px !important; }
.kb-gap-80 { --gap: 80px 80px !important; --row-gap: 80px !important; --column-gap: 80px !important; }
.kb-gap-100 { --gap: 100px 100px !important; --row-gap: 100px !important; --column-gap: 100px !important; }
.kb-gap-120 { --gap: 120px 120px !important; --row-gap: 120px !important; --column-gap: 120px !important; }


/*
=====================================================
SECTION PRESETS (häufig genutzte Kombinationen)
=====================================================
Fluid responsive padding mit clamp():
- Mobile min: 64px
- Desktop max: 112px (Standard), 160px (lg)
- Skaliert fluid zwischen 375px und 1440px Viewport
*/

/* Standard Section - 64px (mobile) bis 112px (desktop) */
.kb-section {
  --padding-top: clamp(64px, 5vw + 40px, 112px) !important;
  --padding-bottom: clamp(64px, 5vw + 40px, 112px) !important;
  --padding-left: 5% !important;
  --padding-right: 5% !important;
}

@media (min-width: 768px) {
  .kb-section {
    --content-width: 1400px !important;
  }
}

/* Mobile: vertikales Padding halbiert (64px → 32px), damit Sections kompakter
   sitzen und der Inhalt schneller in den sichtbaren Bereich kommt. */
@media (max-width: 767px) {
  .kb-section {
    --padding-top: 32px !important;
    --padding-bottom: 32px !important;
  }
}

/* Hero-Section: inneres e-con-inner darf seinen Inhalt ausquellen lassen,
   damit Hover-Glows, Box-Shadows und GSAP-Bewegungen der Cards nicht am
   Padding-Rand des Inners abgeschnitten werden. Die äußere
   .kb-glow-container Section behält ihren eigenen overflow:hidden für die
   Glow-Balls, nur der Inhaltsbereich darin atmet jetzt frei. */
.kb-section-top > .e-con-inner,
.kb-section-top .e-con-inner {
  overflow: visible !important;
}

/* Hero Section - mind. 100vh.
   Logo + Nav sind jetzt position:fixed (out of flow), deshalb muss
   die Hero-Section selbst genug Top-Padding haben, um nicht unter
   dem Logo/Nav zu starten. Negativer margin-top entfernt.
   +130px on top vs. vorher, damit nichts unterm fixed Header klebt. */
.kb-section-top {
  min-height: 100vh;
  height: auto;
  margin-top: 0;
  --padding-top: clamp(180px, 5vw + 120px, 220px) !important;
  --padding-bottom: clamp(64px, 5vw + 40px, 112px) !important;
  --padding-left: 5% !important;
  --padding-right: 5% !important;
}

@media (min-width: 768px) {
  .kb-section-top {
    --content-width: 1400px !important;
  }
}

/* ============================================================
   MOBILE HERO-LAYOUT (.kb-section-top auf < 1024px)
   Generisch: greift auf ALLE Heros mit dieser Klasse, ohne dass
   du jeden einzeln im Elementor anpassen musst.
   - Section wird zu Spalten-Layout (Inhalt untereinander)
   - Float/Blur-Background-Bilder werden ausgeblendet
   - Hauptbild rutscht unter den Text, nicht zu hoch, mit Radius
   - Padding oben und unten kompakter
   - Headlines kleiner skaliert
   ============================================================ */
@media (max-width: 1023px) {

  .kb-section-top {
    min-height: auto !important;
    --padding-top: clamp(100px, 16vw, 140px) !important;
    --padding-bottom: clamp(40px, 8vw, 72px) !important;
    --padding-left: clamp(20px, 6vw, 32px) !important;
    --padding-right: clamp(20px, 6vw, 32px) !important;
    --flex-direction: column !important;
    --flex-gap: clamp(24px, 5vw, 40px) row !important;
  }

  /* WICHTIG: Elementor setzt häufig position:absolute + Offsets auf
     Hero-Bilder. Das brechen wir auf Mobile auf, damit die Bilder
     wieder in den Layout-Flow kommen und sauber unter dem Text landen. */
  .kb-section-top > .elementor-widget,
  .kb-section-top > .elementor-element {
    position: relative !important;
    left: auto !important;
    right: auto !important;
    top: auto !important;
    bottom: auto !important;
    transform: none !important;
  }

  /* Inhalts-Container (Texte/Buttons) volle Breite */
  .kb-section-top > .e-con,
  .kb-section-top > .elementor-element[data-element_type="container"] {
    width: 100% !important;
    max-width: 100% !important;
  }

  /* Hinweis: Float/Parallax/Glow werden NICHT mehr automatisch versteckt.
     Wenn du ein Element auf Mobile ausblenden willst, hängst du die Utility-
     Klasse `kb-hide-mobile` ans Widget (siehe Definition weiter unten). */

  /* Hauptbild voll-breit, kompakte Höhe, sanfter Radius */
  .kb-section-top > .elementor-widget-image,
  .kb-section-top > .elementor-element[data-widget_type^="image"] {
    width: 100% !important;
    max-width: 100% !important;
    margin-inline: 0 !important;
    margin-top: clamp(16px, 4vw, 32px) !important;
  }

  .kb-section-top .elementor-widget-image img {
    width: 100% !important;
    height: auto !important;
    aspect-ratio: 4 / 5;
    object-fit: cover;
    border-radius: 24px;
  }

  /* Headlines kompakter */
  .kb-section-top .kb-headline.fs-xxxl,
  .kb-section-top .fs-xxxl {
    font-size: clamp(2.5rem, 12vw, 4.2rem) !important;
    line-height: 1.05 !important;
  }
  .kb-section-top .kb-headline.fs-xxl,
  .kb-section-top .fs-xxl {
    font-size: clamp(2rem, 9vw, 3.2rem) !important;
    line-height: 1.1 !important;
  }

  /* Highlight-Word: leicht kompakter, aber noch klar als Pille erkennbar.
     Auf Mobile zu klobig wirken die Desktop-Werte, daher proportional verkleinert. */
  .kb-section-top [class*="kb-text-highlight-"] {
    padding: 0.15em 0.5em !important;
    border-radius: 12px !important;
  }
  /* radius-32 wird auf Mobile zu 16px (statt 0). Padding-Helper-Klassen
     bleiben aktiv – ihre --space-xl ist eh ein clamp() und skaliert auf
     Mobile automatisch auf ~2rem. */
  .kb-section-top .kb-headline[class*="radius-32"] {
    border-radius: 16px !important;
  }
}

/* Section XS - minimales Padding (z.B. für Spacer) */
.kb-section-xs {
  height: 100px;
  --padding-top: clamp(8px, 1vw, 12px) !important;
  --padding-bottom: clamp(8px, 1vw, 12px) !important;
  --padding-left: 5% !important;
  --padding-right: 5% !important;
}

@media (min-width: 768px) {
  .kb-section-xs {
    --content-width: 1400px !important;
  }
}

/* Section SM - 40px (mobile) bis 60px (desktop) */
.kb-section-sm {
  --padding-top: clamp(40px, 3vw + 24px, 60px) !important;
  --padding-bottom: clamp(40px, 3vw + 24px, 60px) !important;
  --padding-left: 5% !important;
  --padding-right: 5% !important;
}

@media (min-width: 768px) {
  .kb-section-sm {
    --content-width: 1400px !important;
  }
}

/* Section LG - 80px (mobile) bis 160px (desktop) */
.kb-section-lg {
  --padding-top: clamp(80px, 8vw + 40px, 160px) !important;
  --padding-bottom: clamp(80px, 8vw + 40px, 160px) !important;
  --padding-left: 5% !important;
  --padding-right: 5% !important;
}

@media (min-width: 768px) {
  .kb-section-lg {
    --content-width: 1400px !important;
  }
}

/* Section Max ohne rechtes Padding */
.kb-section-max-nopr {
  --padding-top: clamp(80px, 10vw + 20px, 15%) !important;
  --padding-bottom: clamp(80px, 8vw + 40px, 160px) !important;
  --padding-left: 5% !important;
  --padding-right: 0% !important;
}

@media (min-width: 768px) {
  .kb-section-max-nopr {
    --content-width: 1400px !important;
  }
}

/* Section ohne vertikales Padding */
.kb-section-flat {
  --padding-top: 0 !important;
  --padding-bottom: 0 !important;
  --padding-left: 5% !important;
  --padding-right: 5% !important;
}

@media (min-width: 768px) {
  .kb-section-flat {
    --content-width: 1400px !important;
  }
}

/* Fullwidth Section (kein max-width) */
.kb-section-full {
  --padding-top: clamp(64px, 5vw + 40px, 112px) !important;
  --padding-bottom: clamp(64px, 5vw + 40px, 112px) !important;
  --padding-left: 5% !important;
  --padding-right: 5% !important;
  --content-width: 100% !important;
}

/* Schmale Section (z.B. für Text-Blöcke) */
.kb-section-narrow {
  --padding-top: clamp(64px, 5vw + 40px, 112px) !important;
  --padding-bottom: clamp(64px, 5vw + 40px, 112px) !important;
  --padding-left: 5% !important;
  --padding-right: 5% !important;
}

@media (min-width: 768px) {
  .kb-section-narrow {
    --content-width: 900px !important;
  }
}

/* Große Screens (2400px+) - Padding wächst nicht weiter */
@media (min-width: 2400px) {
  .kb-section,
  .kb-section-top,
  .kb-section-full,
  .kb-section-narrow {
    --padding-top: 112px !important;
    --padding-bottom: 112px !important;
  }

  .kb-section-sm {
    --padding-top: 60px !important;
    --padding-bottom: 60px !important;
  }

  .kb-section-lg {
    --padding-top: 160px !important;
    --padding-bottom: 160px !important;
  }

  .kb-section-max-nopr {
    --padding-top: 15% !important;
    --padding-bottom: 160px !important;
  }
}


/*
=====================================================
ASYMMETRIC SECTIONS (Slider/Overflow Container)
=====================================================
Container die auf einer Seite zum Bildschirmrand gehen,
aber auf der anderen Seite die 1400px Content-Breite einhalten.
Perfekt für Slider, Bilder oder Elemente die aus dem Container ragen.

Berechnung:
- Große Screens: (100vw - 1400px) / 2 = Abstand zum zentrierten Content
- Kleine Screens: 5% Padding auf der geschlossenen Seite
*/

/* Basis-Variablen für asymmetrische Container */
:root {
  --kb-content-max: 1400px;
  --kb-side-padding: 5%;
  --kb-asymmetric-offset: max(5%, calc((100vw - var(--kb-content-max)) / 2));
}

/* Section mit Inhalt links, offen nach rechts (für Slider die rechts rausragen) */
.kb-section-bleed-right {
  --padding-top: clamp(64px, 4vw + 48px, 112px) !important;
  --padding-bottom: clamp(64px, 4vw + 48px, 112px) !important;
  --padding-left: var(--kb-asymmetric-offset) !important;
  --padding-right: 0 !important;
  --content-width: 100% !important;
}

/* Section mit Inhalt rechts, offen nach links (für Slider die links rausragen) */
.kb-section-bleed-left {
  --padding-top: clamp(64px, 4vw + 48px, 112px) !important;
  --padding-bottom: clamp(64px, 4vw + 48px, 112px) !important;
  --padding-left: 0 !important;
  --padding-right: var(--kb-asymmetric-offset) !important;
  --content-width: 100% !important;
}

/* Varianten mit kleinerem vertikalen Padding */
.kb-section-bleed-right-sm {
  --padding-top: clamp(40px, 3vw + 24px, 60px) !important;
  --padding-bottom: clamp(40px, 3vw + 24px, 60px) !important;
  --padding-left: var(--kb-asymmetric-offset) !important;
  --padding-right: 0 !important;
  --content-width: 100% !important;
}

.kb-section-bleed-left-sm {
  --padding-top: clamp(40px, 3vw + 24px, 60px) !important;
  --padding-bottom: clamp(40px, 3vw + 24px, 60px) !important;
  --padding-left: 0 !important;
  --padding-right: var(--kb-asymmetric-offset) !important;
  --content-width: 100% !important;
}

/* Varianten mit größerem vertikalen Padding */
.kb-section-bleed-right-lg {
  --padding-top: clamp(80px, 6vw + 48px, 160px) !important;
  --padding-bottom: clamp(80px, 6vw + 48px, 160px) !important;
  --padding-left: var(--kb-asymmetric-offset) !important;
  --padding-right: 0 !important;
  --content-width: 100% !important;
}

.kb-section-bleed-left-lg {
  --padding-top: clamp(80px, 6vw + 48px, 160px) !important;
  --padding-bottom: clamp(80px, 6vw + 48px, 160px) !important;
  --padding-left: 0 !important;
  --padding-right: var(--kb-asymmetric-offset) !important;
  --content-width: 100% !important;
}

/* Varianten ohne vertikales Padding (flat) */
.kb-section-bleed-right-flat {
  --padding-top: 0 !important;
  --padding-bottom: 0 !important;
  --padding-left: var(--kb-asymmetric-offset) !important;
  --padding-right: 0 !important;
  --content-width: 100% !important;
}

.kb-section-bleed-left-flat {
  --padding-top: 0 !important;
  --padding-bottom: 0 !important;
  --padding-left: 0 !important;
  --padding-right: var(--kb-asymmetric-offset) !important;
  --content-width: 100% !important;
}

/* Laptop Breakpoint (1366px) - etwas weniger Offset */
@media (min-width: 1366px) and (max-width: 1599px) {
  :root {
    --kb-asymmetric-offset: max(4%, calc((100vw - var(--kb-content-max)) / 2));
  }
}

/* Desktop Standard (1600px+) */
@media (min-width: 1600px) {
  :root {
    --kb-asymmetric-offset: calc((100vw - var(--kb-content-max)) / 2);
  }
}

/* Große Screens (2400px+) - Offset wächst nicht weiter, bleibt proportional */
@media (min-width: 2400px) {
  :root {
    --kb-asymmetric-offset: calc((100vw - var(--kb-content-max)) / 2);
  }

  /* Vertikales Padding wächst auf großen Screens nicht weiter */
  .kb-section-bleed-right,
  .kb-section-bleed-left {
    --padding-top: 112px !important;
    --padding-bottom: 112px !important;
  }

  .kb-section-bleed-right-sm,
  .kb-section-bleed-left-sm {
    --padding-top: 60px !important;
    --padding-bottom: 60px !important;
  }

  .kb-section-bleed-right-lg,
  .kb-section-bleed-left-lg {
    --padding-top: 160px !important;
    --padding-bottom: 160px !important;
  }
}


/*
=====================================================
SLIDER EDGE FADE (Offset Slider)
=====================================================
Erzeugt einen sanften Fade-Out-Effekt am Rand von Slidern,
die aus dem Container ragen. Verhindert harte Kanten.

Anwendung: Klasse auf den .swiper Container setzen
*/

/* Fade über mask-Shorthand statt einzelner Longhands.
   Grund: Firefox interpretiert separate mask-* Longhands manchmal nicht
   konsistent (besonders mask-mode), während die Shorthand alle Sub-Properties
   atomar setzt. Format: <image> <position> / <size> <repeat>.
   Mode bleibt match-source (Default), das resolved für Gradients zu alpha. */
.offset-right {
  -webkit-mask: linear-gradient(
    to right,
    #000 0%,
    #000 calc(100% - 120px),
    transparent 100%
  ) center / 100% 100% no-repeat;
          mask: linear-gradient(
    to right,
    #000 0%,
    #000 calc(100% - 120px),
    transparent 100%
  ) center / 100% 100% no-repeat;
}

.offset-left {
  -webkit-mask: linear-gradient(
    to left,
    #000 0%,
    #000 calc(100% - 120px),
    transparent 100%
  ) center / 100% 100% no-repeat;
          mask: linear-gradient(
    to left,
    #000 0%,
    #000 calc(100% - 120px),
    transparent 100%
  ) center / 100% 100% no-repeat;
}

.offset-both {
  -webkit-mask: linear-gradient(
    to right,
    transparent 0%,
    #000 120px,
    #000 calc(100% - 120px),
    transparent 100%
  ) center / 100% 100% no-repeat;
          mask: linear-gradient(
    to right,
    transparent 0%,
    #000 120px,
    #000 calc(100% - 120px),
    transparent 100%
  ) center / 100% 100% no-repeat;
}

/* Responsive: Kleinerer Fade auf Mobile */
@media (max-width: 767px) {
  .offset-right {
    -webkit-mask: linear-gradient(to right, #000 0%, #000 calc(100% - 60px), transparent 100%) center / 100% 100% no-repeat;
            mask: linear-gradient(to right, #000 0%, #000 calc(100% - 60px), transparent 100%) center / 100% 100% no-repeat;
  }
  .offset-left {
    -webkit-mask: linear-gradient(to left, #000 0%, #000 calc(100% - 60px), transparent 100%) center / 100% 100% no-repeat;
            mask: linear-gradient(to left, #000 0%, #000 calc(100% - 60px), transparent 100%) center / 100% 100% no-repeat;
  }
  .offset-both {
    -webkit-mask: linear-gradient(to right, transparent 0%, #000 60px, #000 calc(100% - 60px), transparent 100%) center / 100% 100% no-repeat;
            mask: linear-gradient(to right, transparent 0%, #000 60px, #000 calc(100% - 60px), transparent 100%) center / 100% 100% no-repeat;
  }
}


/*
=====================================================
CONTENT WIDTH UTILITIES
=====================================================
*/

.kb-w-900 { --content-width: 900px !important; }
.kb-w-1000 { --content-width: 1000px !important; }
.kb-w-1200 { --content-width: 1200px !important; }
.kb-w-1400 { --content-width: 1400px !important; }
.kb-w-1600 { --content-width: 1600px !important; }
.kb-w-full { --content-width: 100% !important; }


/*
=====================================================
RESPONSIVE VISIBILITY UTILITIES
=====================================================
Klassen die du auf jedes Elementor-Widget oder jeden Container im
"CSS-Klassen"-Feld setzen kannst. Breakpoints matchen die Standard-
Elementor-Breakpoints (Mobile <768, Tablet 768–1024, Desktop ≥1025).
*/

/* Komplett ausblenden auf Mobile (<768px) */
@media (max-width: 767px) {
  .kb-hide-mobile { display: none !important; }
}

/* Komplett ausblenden auf Tablet (768–1024px) */
@media (min-width: 768px) and (max-width: 1024px) {
  .kb-hide-tablet { display: none !important; }
}

/* Komplett ausblenden auf Desktop (≥1025px) */
@media (min-width: 1025px) {
  .kb-hide-desktop { display: none !important; }
}

/* Nur auf Mobile zeigen (auf Tablet/Desktop ausgeblendet) */
@media (min-width: 768px) {
  .kb-only-mobile { display: none !important; }
}

/* Nur auf Tablet zeigen */
@media (max-width: 767px), (min-width: 1025px) {
  .kb-only-tablet { display: none !important; }
}

/* Nur auf Desktop zeigen */
@media (max-width: 1024px) {
  .kb-only-desktop { display: none !important; }
}


/*
=====================================================
ASPECT-RATIO UTILITIES
=====================================================
Setze die Klasse im Elementor unter "CSS-Klassen" auf einen Container.
Funktioniert auch innerhalb von Loop Grids mit "Gleiche Höhe": das
`height: auto !important` neutralisiert Elementors `height: 100%`-Cell-
Stretch, sodass die aspect-ratio durchschlagen kann.
*/

[class*="kb-aspect-"] {
  height: auto !important;
}

.kb-aspect-square { aspect-ratio: 1 / 1; }
.kb-aspect-1-1    { aspect-ratio: 1 / 1; }
.kb-aspect-4-5    { aspect-ratio: 4 / 5; }    /* portrait soft    */
.kb-aspect-5-6    { aspect-ratio: 5 / 6; }    /* portrait sanft   */
.kb-aspect-3-4    { aspect-ratio: 3 / 4; }    /* portrait         */
.kb-aspect-2-3    { aspect-ratio: 2 / 3; }    /* portrait kräftig */
.kb-aspect-4-3    { aspect-ratio: 4 / 3; }    /* landscape        */
.kb-aspect-3-2    { aspect-ratio: 3 / 2; }    /* landscape        */
.kb-aspect-16-9   { aspect-ratio: 16 / 9; }   /* wide             */
.kb-aspect-21-9   { aspect-ratio: 21 / 9; }   /* ultra-wide       */

/* Höhen-Caps für Cards in Loop-Grids, falls Equal-Height die Zeile
   zu hoch zieht. Auf Mobile (1 Spalte) automatisch entfernt. */
.kb-card-cap-720 { max-height: 720px; }
.kb-card-cap-840 { max-height: 840px; }
.kb-card-cap-900 { max-height: 900px; }
@media (max-width: 1024px) {
  .kb-card-cap-720,
  .kb-card-cap-840,
  .kb-card-cap-900 { max-height: none; }
}


/*
=====================================================
EDGE-FADE UTILITIES (für Bilder, Videos, Container)
=====================================================
Maskiert die Kanten eines Elements weich aus (transparent → sichtbar).
Funktioniert auf <img>, <video>, Elementor-Containern, ACF-Galerien etc.
Steuerbar per Variable: --kb-fade-size (default 80px) und --kb-fade-stop
(wo die Vollsichtbarkeit beginnt – default 0%).

Einsatz in Elementor: Klasse im "CSS-Klassen"-Feld am Widget oder am
Container setzen. Bei Image-Widgets reicht es, die Klasse am Widget
einzutragen – die Mask wird auf den Container vererbt.
*/
[class*="kb-fade-"] {
  --kb-fade-size: 80px;
  -webkit-mask-mode: alpha;
          mask-mode: alpha;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: 100% 100%;
          mask-size: 100% 100%;
}

/* Vertikal */
.kb-fade-top {
  -webkit-mask-image: linear-gradient(to bottom,
    transparent 0,
    #000 var(--kb-fade-size),
    #000 100%);
          mask-image: linear-gradient(to bottom,
    transparent 0,
    #000 var(--kb-fade-size),
    #000 100%);
}
.kb-fade-bottom {
  -webkit-mask-image: linear-gradient(to bottom,
    #000 0,
    #000 calc(100% - var(--kb-fade-size)),
    transparent 100%);
          mask-image: linear-gradient(to bottom,
    #000 0,
    #000 calc(100% - var(--kb-fade-size)),
    transparent 100%);
}
.kb-fade-y {
  -webkit-mask-image: linear-gradient(to bottom,
    transparent 0,
    #000 var(--kb-fade-size),
    #000 calc(100% - var(--kb-fade-size)),
    transparent 100%);
          mask-image: linear-gradient(to bottom,
    transparent 0,
    #000 var(--kb-fade-size),
    #000 calc(100% - var(--kb-fade-size)),
    transparent 100%);
}

/* Horizontal (Pendant zu den .offset-* Sliders, aber generisch nutzbar) */
.kb-fade-left {
  -webkit-mask-image: linear-gradient(to right,
    transparent 0,
    #000 var(--kb-fade-size),
    #000 100%);
          mask-image: linear-gradient(to right,
    transparent 0,
    #000 var(--kb-fade-size),
    #000 100%);
}
.kb-fade-right {
  -webkit-mask-image: linear-gradient(to right,
    #000 0,
    #000 calc(100% - var(--kb-fade-size)),
    transparent 100%);
          mask-image: linear-gradient(to right,
    #000 0,
    #000 calc(100% - var(--kb-fade-size)),
    transparent 100%);
}
.kb-fade-x {
  -webkit-mask-image: linear-gradient(to right,
    transparent 0,
    #000 var(--kb-fade-size),
    #000 calc(100% - var(--kb-fade-size)),
    transparent 100%);
          mask-image: linear-gradient(to right,
    transparent 0,
    #000 var(--kb-fade-size),
    #000 calc(100% - var(--kb-fade-size)),
    transparent 100%);
}

/* Alle 4 Seiten (intersect von vertikal + horizontal Mask) */
.kb-fade-all {
  -webkit-mask:
    linear-gradient(to bottom, transparent 0, #000 var(--kb-fade-size), #000 calc(100% - var(--kb-fade-size)), transparent 100%),
    linear-gradient(to right,  transparent 0, #000 var(--kb-fade-size), #000 calc(100% - var(--kb-fade-size)), transparent 100%);
  -webkit-mask-composite: source-in;
          mask:
    linear-gradient(to bottom, transparent 0, #000 var(--kb-fade-size), #000 calc(100% - var(--kb-fade-size)), transparent 100%),
    linear-gradient(to right,  transparent 0, #000 var(--kb-fade-size), #000 calc(100% - var(--kb-fade-size)), transparent 100%);
          mask-composite: intersect;
}

/* Größen-Modifier: lassen sich mit jedem kb-fade-* kombinieren */
.kb-fade-size-sm { --kb-fade-size: 40px; }
.kb-fade-size-md { --kb-fade-size: 80px; }   /* default */
.kb-fade-size-lg { --kb-fade-size: 140px; }
.kb-fade-size-xl { --kb-fade-size: 200px; }


/*
=====================================================
BACKGROUND-COVER UTILITY (für Elementor-Container)
=====================================================
Workaround für ein Elementor-Verhalten: bei dynamischen
Beitragsbildern als Container-Hintergrund werden die im Editor
gesetzten Werte für „Position" und „Größe" (Ausfüllen/Cover)
im Frontend gelegentlich nicht angewendet, sodass das Bild
in Originalgröße erscheint.

Anwendung in Elementor:
  Container → Erweitert → CSS-Klassen → „kb-bg-cover"
optional kombinierbar mit Positions-Modifiern:
  „kb-bg-cover kb-bg-top"     (Bild oben verankert)
  „kb-bg-cover kb-bg-bottom"  (Bild unten verankert)
  „kb-bg-cover kb-bg-left"    (Bild links verankert)
  „kb-bg-cover kb-bg-right"   (Bild rechts verankert)
*/
.kb-bg-cover {
  background-size: cover !important;
  background-position: center center !important;
  background-repeat: no-repeat !important;
}

/* Optionale Positions-Modifier */
.kb-bg-cover.kb-bg-top    { background-position: center top    !important; }
.kb-bg-cover.kb-bg-bottom { background-position: center bottom !important; }
.kb-bg-cover.kb-bg-left   { background-position: left center   !important; }
.kb-bg-cover.kb-bg-right  { background-position: right center  !important; }

/* Variante: „contain" statt cover, falls das Bild komplett sichtbar bleiben soll */
.kb-bg-contain {
  background-size: contain !important;
  background-position: center center !important;
  background-repeat: no-repeat !important;
}


/*
=====================================================
FLEXBOX DIRECTION & ALIGNMENT (optional)
=====================================================
*/

/* Flex Direction */
.flex-row { --flex-direction: row !important; flex-direction: row !important; }
.flex-col { --flex-direction: column !important; flex-direction: column !important; }

@media (max-width: 767px) {
  .flex-col-mobile { --flex-direction: column !important; flex-direction: column !important; }
  .flex-row-mobile { --flex-direction: row !important; flex-direction: row !important; }
}

@media (max-width: 1024px) {
  .flex-col-tablet { --flex-direction: column !important; flex-direction: column !important; }
  .flex-row-tablet { --flex-direction: row !important; flex-direction: row !important; }
}

/* Justify Content */
.justify-start { --justify-content: flex-start !important; justify-content: flex-start !important; }
.justify-center { --justify-content: center !important; justify-content: center !important; }
.justify-end { --justify-content: flex-end !important; justify-content: flex-end !important; }
.justify-between { --justify-content: space-between !important; justify-content: space-between !important; }
.justify-around { --justify-content: space-around !important; justify-content: space-around !important; }

/* Align Items */
.items-start { --align-items: flex-start !important; align-items: flex-start !important; }
.items-center { --align-items: center !important; align-items: center !important; }
.items-end { --align-items: flex-end !important; align-items: flex-end !important; }
.items-stretch { --align-items: stretch !important; align-items: stretch !important; }

/* Flex Wrap */
.flex-wrap { flex-wrap: wrap !important; --flex-wrap: wrap !important; }
.flex-nowrap { flex-wrap: nowrap !important; --flex-wrap: nowrap !important; }


/* 
=====================================================
RESPONSIVE GAP
=====================================================
Gap der sich auf Mobile verkleinert
*/

/* Standard responsive Gap - 24px (mobile) bis 48px (desktop) */
.gap-responsive,
.gap-responsive > .e-con-inner {
  gap: clamp(24px, 3vw + 12px, 48px);
}

/* Große responsive Gap - 40px (mobile) bis 80px (desktop) */
.gap-responsive-lg,
.gap-responsive-lg > .e-con-inner {
  gap: clamp(40px, 5vw + 16px, 80px);
}


/* 
=====================================================
RESPONSIVE PADDING (Section-Style)
=====================================================
*/

.py-section {
  padding-top: 112px;
  padding-bottom: 112px;
}

@media (max-width: 1024px) {
  .py-section {
    padding-top: 80px;
    padding-bottom: 80px;
  }
}

@media (max-width: 767px) {
  .py-section {
    padding-top: 60px;
    padding-bottom: 60px;
  }
}

/* Für Elementor Container */
.kb-py-section {
  --padding-top: 112px !important;
  --padding-bottom: 112px !important;
}

@media (max-width: 1024px) {
  .kb-py-section {
    --padding-top: 80px !important;
    --padding-bottom: 80px !important;
  }
}

@media (max-width: 767px) {
  .kb-py-section {
    --padding-top: 60px !important;
    --padding-bottom: 60px !important;
  }
}


:root {
  /* Text/Content Max-Widths */
  --max-w-xs: 400px;
  --max-w-sm: 500px;
  --max-w-md: 600px;
  --max-w-base: 700px;
  --max-w-lg: 800px;
  --max-w-xl: 900px;
  --max-w-xxl: 1000px;
  --max-w-content: 1200px;
  --max-w-wide: 1400px;
}


/* 
=====================================================
MAX-WIDTH KLASSEN (Standard)
=====================================================
*/

.max-w-xs { max-width: var(--max-w-xs); width: 100%; }
.max-w-sm { max-width: var(--max-w-sm); width: 100%; }
.max-w-md { max-width: var(--max-w-md); width: 100%; }
.max-w-base { max-width: var(--max-w-base); width: 100%; }
.max-w-lg { max-width: var(--max-w-lg); width: 100%; }
.max-w-xl { max-width: var(--max-w-xl); width: 100%; }
.max-w-xxl { max-width: var(--max-w-xxl); width: 100%; }
.max-w-content { max-width: var(--max-w-content); width: 100%; }
.max-w-wide { max-width: var(--max-w-wide); width: 100%; }
.max-w-full { max-width: 100%; width: 100%; }
.max-w-none { max-width: none; }


/*
=====================================================
LOOP-GRID STRETCH FIX
=====================================================
Elementor Loop-Grid Widgets schrumpfen in Flex-Column-Containern
auf max-content ihrer Kinder, sobald ein Kind eine intrinsische
Min-Width hat (z. B. kb-slider mit aspect-ratio + min-height).
Wir erzwingen volle Container-Breite, damit das Loop-Layout
nicht von einer Slider-/Bild-Mindestbreite gesteuert wird.
*/
.elementor-widget-loop-grid {
  width: 100% !important;
}
.elementor-widget-loop-grid .elementor-loop-container.elementor-grid {
  width: 100%;
}

/*
=====================================================
LOGO-WALL: unvollständige letzte Reihe zentrieren
=====================================================
CSS-Grid kann eine Teil-Reihe nicht mittig setzen. Wir stellen den
Loop-Container auf Flexbox um: volle Reihen füllen 100% (bleiben also
randbündig wie zuvor), nur die letzte, nicht volle Reihe zentriert
sich über justify-content:center.

Item-Breite = (100% - (cols-1)*gap) / cols, damit cols Items + Gaps
exakt 100% ergeben. Spaltenzahl je Breakpoint als Variable, spiegelt
die Elementor-Settings des Widgets (Desktop 6 / Tablet 2 / Mobile 1).
Klasse wird per Elementor CSS-Klassen-Feld an das Loop-Grid gehängt. */
.kb-logo-wall .elementor-loop-container.elementor-grid {
  --kb-logo-cols: 6;
  --kb-logo-gap: 30px;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--kb-logo-gap);
}
.kb-logo-wall .elementor-loop-container.elementor-grid > * {
  width: calc((100% - (var(--kb-logo-cols) - 1) * var(--kb-logo-gap)) / var(--kb-logo-cols));
}
@media (max-width: 1024px) {
  .kb-logo-wall .elementor-loop-container.elementor-grid { --kb-logo-cols: 2; }
}
@media (max-width: 767px) {
  .kb-logo-wall .elementor-loop-container.elementor-grid { --kb-logo-cols: 1; }
}


/*
=====================================================
MAX-WIDTH FÜR ELEMENTOR WIDGETS
=====================================================
*/

/* Begrenzt Widget UND inneren Container auf max-width.
   Kein margin-inline:auto — das Widget bleibt linksbündig / behält
   sein Container-Alignment (z.B. justify-content im Parent-Flex).
   Wenn zentriert sein soll: justify-content:center auf den Parent
   stellen, oder die separate Klasse .kb-center mit dranhängen. */
.kb-max-xs.elementor-widget,
.kb-max-xs.elementor-widget .elementor-widget-container {
  max-width: var(--max-w-xs) !important;
}

.kb-max-sm.elementor-widget,
.kb-max-sm.elementor-widget .elementor-widget-container {
  max-width: var(--max-w-sm) !important;
}

.kb-max-md.elementor-widget,
.kb-max-md.elementor-widget .elementor-widget-container {
  max-width: var(--max-w-md) !important;
}

.kb-max-base.elementor-widget,
.kb-max-base.elementor-widget .elementor-widget-container {
  max-width: var(--max-w-base) !important;
}

.kb-max-lg.elementor-widget,
.kb-max-lg.elementor-widget .elementor-widget-container {
  max-width: var(--max-w-lg) !important;
}

.kb-max-xl.elementor-widget,
.kb-max-xl.elementor-widget .elementor-widget-container {
  max-width: var(--max-w-xl) !important;
}

.kb-max-xxl.elementor-widget,
.kb-max-xxl.elementor-widget .elementor-widget-container {
  max-width: var(--max-w-xxl) !important;
}

.kb-max-content.elementor-widget,
.kb-max-content.elementor-widget .elementor-widget-container {
  max-width: var(--max-w-content) !important;
}

.kb-max-wide.elementor-widget,
.kb-max-wide.elementor-widget .elementor-widget-container {
  max-width: var(--max-w-wide) !important;
}

/* Optionaler Modifier: explizit zentrieren (Auto-Margin links/rechts).
   Funktioniert in Block- und Flex-Column-Parents. In Flex-Row besser
   das Parent justify-content:center geben. */
.kb-center.elementor-widget {
  margin-inline: auto !important;
}


/* 
=====================================================
MAX-WIDTH FÜR ELEMENTOR CONTAINER
=====================================================
*/

/* Begrenzt jeden Elementor-Container (boxed UND e-con-full) auf max-width.
   --content-width für den Boxed-Inner-Wrapper, max-width für e-con-full.
   KEIN margin-inline:auto — Container bleibt da wo Parent-Layout ihn
   platziert (Flex-Justify, Grid etc.). Wenn explizit zentriert sein soll:
   .kb-center dazuhängen oder Parent justify-content:center geben. */
.kb-container-xs,
.kb-container-xs.e-con      { --content-width: var(--max-w-xs)      !important; max-width: var(--max-w-xs)      !important; }
.kb-container-sm,
.kb-container-sm.e-con      { --content-width: var(--max-w-sm)      !important; max-width: var(--max-w-sm)      !important; }
.kb-container-md,
.kb-container-md.e-con      { --content-width: var(--max-w-md)      !important; max-width: var(--max-w-md)      !important; }
.kb-container-base,
.kb-container-base.e-con    { --content-width: var(--max-w-base)    !important; max-width: var(--max-w-base)    !important; }
.kb-container-lg,
.kb-container-lg.e-con      { --content-width: var(--max-w-lg)      !important; max-width: var(--max-w-lg)      !important; }
.kb-container-xl,
.kb-container-xl.e-con      { --content-width: var(--max-w-xl)      !important; max-width: var(--max-w-xl)      !important; }
.kb-container-xxl,
.kb-container-xxl.e-con     { --content-width: var(--max-w-xxl)     !important; max-width: var(--max-w-xxl)     !important; }
.kb-container-content,
.kb-container-content.e-con { --content-width: var(--max-w-content) !important; max-width: var(--max-w-content) !important; }
.kb-container-wide,
.kb-container-wide.e-con    { --content-width: var(--max-w-wide)    !important; max-width: var(--max-w-wide)    !important; }
.kb-container-full,
.kb-container-full.e-con    { --content-width: 100% !important; max-width: 100% !important; }

/* .kb-center auch auf Containern: zentriert via Auto-Margin. */
.kb-center.e-con,
.kb-center { margin-inline: auto !important; }


/* 
=====================================================
ÜBERSICHT MAX-WIDTH
=====================================================

| Klasse         | Breite   | Verwendung                    |
|----------------|----------|-------------------------------|
| kb-max-xs      | 400px    | Schmale Labels, Captions      |
| kb-max-sm      | 500px    | Kurze Absätze                 |
| kb-max-md      | 600px    | Standard Textblöcke           |
| kb-max-base    | 700px    | Optimale Lesebreite           |
| kb-max-lg      | 800px    | Breitere Textblöcke           |
| kb-max-xl      | 900px    | Große Textbereiche            |
| kb-max-xxl     | 1000px   | Sehr breite Inhalte           |
| kb-max-content | 1200px   | Content-Container             |
| kb-max-wide    | 1400px   | Volle Content-Breite          |

=====================================================
*/


/* 
=====================================================
ÜBERLAPPUNGS-SEKTIONEN (Overlap Effect)
=====================================================
Schwarze Balken oben/unten für Überlappungseffekt
ohne negative Margins.

Verwendung:
- kb-overlap-top    → Schwarzer Balken oben
- kb-overlap-bottom → Schwarzer Balken unten
- kb-overlap-both   → Beide Balken

Die Balken sind 120px hoch und liegen hinter dem Content.
Der Content überlappt visuell in die angrenzende Sektion.
=====================================================
*/

:root {
  --overlap-height: 120px;
  --overlap-color: var(--kb-gray-900);
}


/* Overlap Top - Schwarzer Balken oben */
.kb-overlap-top {
  position: relative;
}

.kb-overlap-top::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: var(--overlap-height);
  background-color: var(--overlap-color);
  z-index: 0;
  pointer-events: none;
}

/* Content über den Balken */
.kb-overlap-top > .elementor-container,
.kb-overlap-top > .e-con-inner,
.kb-overlap-top > .elementor-widget-container {
  position: relative;
  z-index: 1;
}


/* Overlap Bottom - Schwarzer Balken unten */
.kb-overlap-bottom {
  position: relative;
}

.kb-overlap-bottom::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: var(--overlap-height);
  background-color: var(--overlap-color);
  z-index: 0;
  pointer-events: none;
}

/* Content über den Balken */
.kb-overlap-bottom > .elementor-container,
.kb-overlap-bottom > .e-con-inner,
.kb-overlap-bottom > .elementor-widget-container {
  position: relative;
  z-index: 1;
}


/* Overlap Both - Beide Balken */
.kb-overlap-both {
  position: relative;
}

.kb-overlap-both::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: var(--overlap-height);
  background-color: var(--overlap-color);
  z-index: 0;
  pointer-events: none;
}

.kb-overlap-both::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: var(--overlap-height);
  background-color: var(--overlap-color);
  z-index: 0;
  pointer-events: none;
}

.kb-overlap-both > .elementor-container,
.kb-overlap-both > .e-con-inner,
.kb-overlap-both > .elementor-widget-container {
  position: relative;
  z-index: 1;
}


/* 
=====================================================
OVERLAP HÖHEN-VARIANTEN
=====================================================
*/

/* Kleiner Overlap (80px) */
.kb-overlap-sm { --overlap-height: 80px; }

/* Standard Overlap (120px) */
.kb-overlap-md { --overlap-height: 120px; }

/* Großer Overlap (160px) */
.kb-overlap-lg { --overlap-height: 160px; }

/* Extra großer Overlap (200px) */
.kb-overlap-xl { --overlap-height: 200px; }


/* 
=====================================================
OVERLAP FARB-VARIANTEN
=====================================================
*/

/* Weiß */
.kb-overlap-white { --overlap-color: var(--kb-white); }

/* Hellgrau */
.kb-overlap-light { --overlap-color: var(--kb-gray-100); }

/* Dunkelgrau */
.kb-overlap-dark { --overlap-color: var(--kb-gray-900); }

/* Bereichsfarben */
.kb-overlap-design { --overlap-color: var(--kb-design); }
.kb-overlap-content { --overlap-color: var(--kb-content); }
.kb-overlap-marke { --overlap-color: var(--kb-marke); }
.kb-overlap-kreativbox { --overlap-color: var(--kb-kreativbox); }
.kb-overlap-website { --overlap-color: var(--kb-website); }
.kb-overlap-strategie { --overlap-color: var(--kb-strategie); }


/* 
=====================================================
RESPONSIVE OVERLAP
=====================================================
Auf Mobile kleinere Overlap-Höhe
*/

@media (max-width: 767px) {
  :root {
    --overlap-height: 60px;
  }
  
  .kb-overlap-sm { --overlap-height: 40px; }
  .kb-overlap-md { --overlap-height: 60px; }
  .kb-overlap-lg { --overlap-height: 80px; }
  .kb-overlap-xl { --overlap-height: 100px; }
}

@media (max-width: 1024px) and (min-width: 768px) {
  :root {
    --overlap-height: 80px;
  }
  
  .kb-overlap-sm { --overlap-height: 60px; }
  .kb-overlap-md { --overlap-height: 80px; }
  .kb-overlap-lg { --overlap-height: 120px; }
  .kb-overlap-xl { --overlap-height: 160px; }
}


:root {
  /* Glass Basis */
  --glass-bg: rgba(255, 255, 255, 0.12);
  --glass-bg-strong: rgba(255, 255, 255, 0.25);
  --glass-bg-dark: rgba(0, 0, 0, 0.3);
  
  --glass-blur: 12px;
  --glass-blur-strong: 20px;
  --glass-blur-light: 6px;
  
  --glass-border: rgba(255, 255, 255, 0.3);
  --glass-border-strong: rgba(255, 255, 255, 0.5);
  
  --glass-shine: rgba(255, 255, 255, 0.5);
  --glass-shine-strong: rgba(255, 255, 255, 0.75);
  
  --glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
  --glass-shadow-lg: 0 12px 48px rgba(0, 0, 0, 0.2);
  
  --glass-radius: 24px;
}


/* 
=====================================================
1. GLASS LIQUID (mit Distortion Animation)
=====================================================
*/

.glass-liquid {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: var(--glass-radius);
}

/* Filter Layer */
.glass-liquid::before {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 1;
  backdrop-filter: blur(var(--glass-blur)) saturate(120%) brightness(1.15);
  -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(120%) brightness(1.15);
  border-radius: inherit;
}

/* Distortion Overlay mit Animation */
.glass-liquid::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: 2;
  background: 
    radial-gradient(circle at 20% 30%, rgba(255,255,255,0.08) 0%, transparent 50%),
    radial-gradient(circle at 80% 70%, rgba(255,255,255,0.08) 0%, transparent 50%),
    radial-gradient(circle at 50% 50%, rgba(255,255,255,0.05) 0%, transparent 70%);
  background-size: 200% 200%;
  animation: liquidDistort 8s infinite ease-in-out;
  mix-blend-mode: overlay;
  pointer-events: none;
  border-radius: inherit;
}

@keyframes liquidDistort {
  0%, 100% { background-position: 0% 0%; }
  25% { background-position: 100% 0%; }
  50% { background-position: 100% 100%; }
  75% { background-position: 0% 100%; }
}

/* Inner Container für Content */
.glass-liquid > * {
  position: relative;
  z-index: 3;
}

/* Overlay Background */
.glass-liquid-overlay {
  position: absolute;
  inset: 0;
  z-index: 2;
  background: var(--glass-bg-strong);
  border-radius: inherit;
}

/* Specular Highlight */
.glass-liquid-specular {
  position: absolute;
  inset: 0;
  z-index: 3;
  box-shadow: 
    inset 1px 1px 1px var(--glass-shine-strong),
    inset -1px -1px 1px rgba(255, 255, 255, 0.1);
  border-radius: inherit;
  pointer-events: none;
}

/* Für Elementor */
.kb-glass-liquid.e-con,
.kb-glass-liquid > .elementor-widget-container {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  border-radius: var(--glass-radius) !important;
  background: var(--glass-bg-strong) !important;
  backdrop-filter: blur(var(--glass-blur)) saturate(120%) brightness(1.15);
  -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(120%) brightness(1.15);
  border: 1px solid var(--glass-border) !important;
  box-shadow: var(--glass-shadow-lg), inset 1px 1px 1px var(--glass-shine-strong) !important;
}

.kb-glass-liquid.e-con::after,
.kb-glass-liquid > .elementor-widget-container::after {
  content: '';
  position: absolute;
  inset: 0;
  background: 
    radial-gradient(circle at 20% 30%, rgba(255,255,255,0.08) 0%, transparent 50%),
    radial-gradient(circle at 80% 70%, rgba(255,255,255,0.08) 0%, transparent 50%);
  background-size: 200% 200%;
  animation: liquidDistort 8s infinite ease-in-out;
  mix-blend-mode: overlay;
  pointer-events: none;
  border-radius: inherit;
  z-index: 0;
}


/* 
=====================================================
2. GLASS FROST (Mattiert)
=====================================================
*/

.glass-frost,
.kb-glass-frost.e-con,
.kb-glass-frost > .elementor-widget-container {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  
  background: rgba(255, 255, 255, 0.6) !important;
  backdrop-filter: blur(var(--glass-blur-strong)) saturate(180%);
  -webkit-backdrop-filter: blur(var(--glass-blur-strong)) saturate(180%);
  
  border: 1px solid rgba(255, 255, 255, 0.7) !important;
  border-radius: var(--glass-radius) !important;
  
  box-shadow: 
    0 4px 24px rgba(0, 0, 0, 0.08),
    inset 0 1px 2px rgba(255, 255, 255, 0.9),
    inset 0 -1px 1px rgba(255, 255, 255, 0.3) !important;
}

/* Frost Textur */
.glass-frost::before,
.kb-glass-frost.e-con::before {
  content: '';
  position: absolute;
  inset: 0;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAAUVBMVEWFhYWDg4N3d3dtbW17e3t1dXWBgYGHh4d5eXlzc3OLi4ubm5uVlZWPj4+NjY19fX2JiYl/f39ra2uRkZGZmZlpaWmXl5dvb29xcXGTk5NnZ2c8TV1mAAAAG3RSTlNAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAvEOwtAAAFVklEQVR4XpWWB67c2BUFb3g557T/hRo9/WUMZHlgr4Bg8Z4qQgQJlHI4A8SzFVrapvmTF9O7dmYRFZ60YiBhJRCgh1FYhiLAmdvX0CzTOpNE77ME0Zty/nWWzchDtiqrmQDeuv3powQ5ta2eN0FY0InkqDD73lT9c9lEzwUNqgFHs9VQce3TVClFCQrSTfOiYkVJQBmpbq2L6iZavPnAPcoU0dSw0SUTqz/GtrGuXfbyyBniKykOWQWGqwwMA7QiYAxi+IlPdqo+hYHnUt5ZPfnsHJyNiDtnpJyayNBkF6cWoYGAMY92U2hXHF/C1M8uP/ZtYdiuj26UdAdQQSXQErwSOMzt/XWRWAz5GuSBIkwG1H3FabJ2OsUOUhGC6tK4EMtJO0ttC6IBD3kM0ve0tJwMdSfjZo+EEISaeTr9P3wYrGjXqyC1krcKdhMpxEnt5JetoulscpyzhXN5FRpuPHvbeQaKxFAEB6EN+cYN6xD7RYGpXpNndMmZgM5Dcs3YSNFDHUo2LGfZuukSWyUYirJAdYbF3MfqEKmjM+I2EfhA94iG3L7uKrR+GdWD73ydlIB+6hgref1QTlmgmbM3/LeX5GI1Ux1RWpgxpLuZ2+I+IjzZ8wqE4nilvQdkUdfhzI5QDWy+kw5Wgg2pGpeEVeCCA7b85BO3F9DzxB3cdqvBzWcmzbyMiqhzuYqtHRVG2y4x+KOlnyqla8AoWWpuBoYRxzXrfKuILl6SfiWCbjxoZJUaCBj1CjH7GIaDbc9kqBY3W/Rgjda1iqQcOJu2WW+76pZC9QG7M00dffe9hNnseupFL53r8F7YHSwJWUKP2q+k7RdsxyOB11n0xtOvnW4irMMFNV4H0uqwS5ExsmP9AxbDTc9JwgneAT5vTiUSm1E7BSflSt3bfa1tv8Di3R8n3Af7MNWzs49hmauE2wP+ttrq+AsWpFG2awvsuOqbipWHgtuvuaAE+A1Z/7gC9hesnr+7wqCwG8c5yAg3AL1fm8T9AZtp/bbJGwl1pNrE7RuOX7PeMRUERVaPpEs+yqeoSmuOlokqw49pgomjLeh7icHNlG19yjs6XXOMedYm5xH2YxpV2tc0Ro2jJfxC50ApuxGob7lMsxfTbeUv07TyYxpeLucEH1gNd4IKH2LAg5TdVhlCafZvpskfncCfx8pOhJzd76bJWeYFnFciwcYfubRc12Ip/ppIhA1/mSZ/RxjFDrJC5xifFjJpY2Xl5zXdguFqYyTR1zSp1Y9p+tktDYYSNflcxI0iyO4TPBdlRcpeqjK/piF5bklq77VSEaA+z8qmJTFzIWiitbnzR794USKBUaT0NTEsVjZqLaFVqJoPN9ODG70IPbfBHKK+/q/AWR0tJzYHRULOa4MP+W/HfGadZUbfw177G7j/OGbIs8TahLyynl4X4RinF793Oz+BU0saXtUHrVBFT/DnA3ctNPoGbs4hRIjTok8i+algT1lTHi4SxFvONKNrgQFAq2/gFnWMXgwffgYMJpiKYkmW3tTg3ZQ9Jq+f8XN+A5eeUKHWvJWJ2sgJ1Sop+wwhqFVijqWaJhwtD8MNlSBeWNNWTa5Z5kPZw5+LbVT99wqTdx29lMUH4OIG/D86ruKEauBjvH5xy6um/Sfj7ei6UUVk4AIl3MyD4MSSTOFgSwsH/QJWaQ5as7ZcmgBZkzjjU1UrQ74ci1gWBCSGHtuV1H2mhSnO3Wp/3fEV5a+4wz//6qy8JxjZsmxxy5+4w9CDNJY09T072iKG0EnOS0arEYgXqYnXcYHwjTtUNAcMelOd4xpkoqiTYICWFq0JSiPfPDQdnt+4/wuqcXY47QILbgAAAABJRU5ErkJggg==);
  opacity: 0.3;
  border-radius: inherit;
  pointer-events: none;
  z-index: 0;
}

/* Frost für dunkle Hintergründe */
.glass-frost-dark,
.kb-glass-frost-dark.e-con,
.kb-glass-frost-dark > .elementor-widget-container {
  background: rgba(0, 0, 0, 0.4) !important;
  border: 1px solid rgba(255, 255, 255, 0.15) !important;
  box-shadow: 
    0 4px 24px rgba(0, 0, 0, 0.2),
    inset 0 1px 1px rgba(255, 255, 255, 0.1) !important;
}


/* 
=====================================================
3. GLASS CRYSTAL (Stark reflektierend)
=====================================================
*/

.glass-crystal,
.kb-glass-crystal.e-con,
.kb-glass-crystal > .elementor-widget-container {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  
  background: linear-gradient(
    135deg,
    rgba(255, 255, 255, 0.4) 0%,
    rgba(255, 255, 255, 0.1) 50%,
    rgba(255, 255, 255, 0.3) 100%
  ) !important;
  
  backdrop-filter: blur(var(--glass-blur)) saturate(150%);
  -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(150%);
  
  border: 1px solid rgba(255, 255, 255, 0.5) !important;
  border-radius: var(--glass-radius) !important;
  
  box-shadow: 
    0 8px 32px rgba(0, 0, 0, 0.1),
    inset 2px 2px 4px rgba(255, 255, 255, 0.8),
    inset -2px -2px 4px rgba(255, 255, 255, 0.2) !important;
}

/* Crystal Glanz */
.glass-crystal::before,
.kb-glass-crystal.e-con::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 50%;
  background: linear-gradient(
    180deg,
    rgba(255, 255, 255, 0.4) 0%,
    rgba(255, 255, 255, 0.1) 50%,
    transparent 100%
  );
  border-radius: inherit;
  pointer-events: none;
  z-index: 1;
}

/* Crystal Prisma-Effekt */
.glass-crystal::after,
.kb-glass-crystal.e-con::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(
    45deg,
    transparent 30%,
    rgba(255, 100, 100, 0.05) 35%,
    rgba(100, 255, 100, 0.05) 40%,
    rgba(100, 100, 255, 0.05) 45%,
    transparent 50%
  );
  border-radius: inherit;
  pointer-events: none;
  z-index: 2;
  mix-blend-mode: overlay;
}


/* 
=====================================================
4. GLASS DARK (Dunkles Glas)
=====================================================
*/

.glass-dark,
.kb-glass-dark.e-con,
.kb-glass-dark > .elementor-widget-container {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  
  background: rgba(0, 0, 0, 0.5) !important;
  
  backdrop-filter: blur(var(--glass-blur)) saturate(120%) brightness(0.9);
  -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(120%) brightness(0.9);
  
  border: 1px solid rgba(255, 255, 255, 0.1) !important;
  border-radius: var(--glass-radius) !important;
  
  box-shadow: 
    0 8px 32px rgba(0, 0, 0, 0.3),
    inset 0 1px 1px rgba(255, 255, 255, 0.1),
    inset 0 -1px 1px rgba(0, 0, 0, 0.2) !important;
}

/* Dezenter Glanz oben */
.glass-dark::before,
.kb-glass-dark.e-con::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 1px;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(255, 255, 255, 0.2),
    transparent
  );
  z-index: 1;
}


/* 
=====================================================
5. GLASS GRADIENT (Mit Farbverlauf)
=====================================================
*/

.glass-gradient,
.kb-glass-gradient.e-con,
.kb-glass-gradient > .elementor-widget-container {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  
  background: linear-gradient(
    135deg,
    rgba(130, 33, 216, 0.2) 0%,
    rgba(229, 31, 117, 0.2) 50%,
    rgba(255, 150, 72, 0.2) 100%
  ) !important;
  
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
  
  border: 1px solid rgba(255, 255, 255, 0.3) !important;
  border-radius: var(--glass-radius) !important;
  
  box-shadow: 
    0 8px 32px rgba(130, 33, 216, 0.15),
    inset 0 1px 1px rgba(255, 255, 255, 0.4) !important;
}


/* 
=====================================================
6. GLASS NEON (Mit Neon-Glow)
=====================================================
*/

.glass-neon,
.kb-glass-neon.e-con,
.kb-glass-neon > .elementor-widget-container {
  --neon-color: var(--kb-website);
  
  position: relative;
  isolation: isolate;
  overflow: hidden;
  
  background: rgba(0, 0, 0, 0.4) !important;
  
  backdrop-filter: blur(var(--glass-blur));
  -webkit-backdrop-filter: blur(var(--glass-blur));
  
  border: 1px solid var(--neon-color) !important;
  border-radius: var(--glass-radius) !important;
  
  box-shadow: 
    0 0 20px color-mix(in srgb, var(--neon-color) 40%, transparent),
    0 0 40px color-mix(in srgb, var(--neon-color) 20%, transparent),
    inset 0 0 20px color-mix(in srgb, var(--neon-color) 10%, transparent) !important;
  
  animation: neonPulse 3s infinite ease-in-out;
}

@keyframes neonPulse {
  0%, 100% {
    box-shadow: 
      0 0 20px color-mix(in srgb, var(--neon-color) 40%, transparent),
      0 0 40px color-mix(in srgb, var(--neon-color) 20%, transparent),
      inset 0 0 20px color-mix(in srgb, var(--neon-color) 10%, transparent);
  }
  50% {
    box-shadow: 
      0 0 30px color-mix(in srgb, var(--neon-color) 60%, transparent),
      0 0 60px color-mix(in srgb, var(--neon-color) 30%, transparent),
      inset 0 0 30px color-mix(in srgb, var(--neon-color) 15%, transparent);
  }
}

/* Neon Farb-Varianten */
.glass-neon.neon-design { --neon-color: var(--kb-design); }
.glass-neon.neon-content { --neon-color: var(--kb-content); }
.glass-neon.neon-marke { --neon-color: var(--kb-marke); }
.glass-neon.neon-kreativbox { --neon-color: var(--kb-kreativbox); }
.glass-neon.neon-website { --neon-color: var(--kb-website); }
.glass-neon.neon-strategie { --neon-color: var(--kb-strategie); }
.glass-neon.neon-white { --neon-color: var(--kb-white); }
.glass-neon.neon-cyan { --neon-color: #00f0ff; }


/* 
=====================================================
7. GLASS MODIFIERS (für alle Varianten)
=====================================================
*/

/* Blur Stärke */
.glass-blur-light { --glass-blur: 6px !important; }
.glass-blur-strong { --glass-blur: 20px !important; }
.glass-blur-extra { --glass-blur: 30px !important; }

/* Border Radius */
.glass-square { --glass-radius: 8px !important; border-radius: 8px !important; }
.glass-rounded { --glass-radius: 16px !important; border-radius: 16px !important; }
.glass-pill { --glass-radius: 100vmax !important; border-radius: 100vmax !important; }

/* Kein Rahmen */
.glass-no-border { border: none !important; }

/* Kein Schatten */
.glass-no-shadow { box-shadow: none !important; }

/* Stärkerer Schatten */
.glass-shadow-lg {
  box-shadow: 
    0 12px 48px rgba(0, 0, 0, 0.2),
    inset 0 1px 1px rgba(255, 255, 255, 0.5) !important;
}

/* Keine Animation */
.glass-no-anim,
.glass-no-anim::before,
.glass-no-anim::after {
  animation: none !important;
}


/* 
=====================================================
8. HOVER EFFEKTE FÜR GLASS
=====================================================
*/

/* Hover Lift */
.glass-hover-lift {
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.glass-hover-lift:hover {
  transform: translateY(-8px);
  box-shadow: 
    0 20px 60px rgba(0, 0, 0, 0.2),
    inset 0 1px 1px rgba(255, 255, 255, 0.5) !important;
}

/* Hover Glow */
.glass-hover-glow {
  transition: box-shadow 0.3s ease;
}
.glass-hover-glow:hover {
  box-shadow:
    0 0 40px rgba(255, 255, 255, 0.4),
    0 8px 32px rgba(0, 0, 0, 0.15),
    inset 0 1px 1px rgba(255, 255, 255, 0.3) !important;
}

/* Hover Scale */
.glass-hover-scale {
  transition: transform 0.3s ease;
}
.glass-hover-scale:hover {
  transform: scale(1.02);
}

/* Hover Border */
.glass-hover-border {
  transition: border-color 0.3s ease;
}
.glass-hover-border:hover {
  border-color: var(--accent, rgba(255, 255, 255, 0.4)) !important;
}

/* Hover Rotating Glow Ring */
@property --glow-ring-angle {
  syntax: "<angle>";
  inherits: false;
  initial-value: 0deg;
}

.glass-hover-ring {
  position: relative;
}

.glass-hover-ring::before,
.glass-hover-ring::after {
  transition: opacity 0.4s ease;
}

/* Ring Container - überlagert die bestehenden Pseudo-Elemente */
.glass-hover-ring-glow {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: inherit;
  background: conic-gradient(
    from var(--glow-ring-angle),
    transparent 0deg,
    transparent 60deg,
    var(--accent, rgba(255, 255, 255, 0.4)) 120deg,
    transparent 180deg,
    transparent 240deg,
    var(--accent, rgba(255, 255, 255, 0.4)) 300deg,
    transparent 360deg
  );
  mask: conic-gradient(#000 0 0) content-box exclude, conic-gradient(#000 0 0);
  -webkit-mask: conic-gradient(#000 0 0) content-box exclude, conic-gradient(#000 0 0);
  padding: 1px;
  opacity: 0;
  z-index: 2;
  pointer-events: none;
  animation: glass-ring-rotate 3s linear infinite paused;
}

.glass-hover-ring:hover .glass-hover-ring-glow {
  opacity: 0.4;
  animation-play-state: running;
}

@keyframes glass-ring-rotate {
  0% { --glow-ring-angle: 0deg; }
  100% { --glow-ring-angle: 360deg; }
}

/* Alternative: Selbstständiger Ring ohne zusätzliches Element */
.glass-ring-auto {
  position: relative;
  overflow: visible;
}

.glass-ring-auto::before {
  content: "";
  position: absolute;
  inset: 0;                              /* Ring sitzt bündig, nicht überstehend */
  border-radius: inherit;
  background: conic-gradient(
    from var(--glow-ring-angle),
    transparent 0deg,
    transparent 70deg,
    var(--accent, rgba(255, 255, 255, 0.25)) 110deg,
    var(--accent, rgba(255, 255, 255, 0.4)) 130deg,
    var(--accent, rgba(255, 255, 255, 0.25)) 150deg,
    transparent 200deg,
    transparent 360deg                   /* nur ein Trail statt zwei */
  );
  mask: conic-gradient(#000 0 0) content-box exclude, conic-gradient(#000 0 0);
  -webkit-mask: conic-gradient(#000 0 0) content-box exclude, conic-gradient(#000 0 0);
  padding: 1px;
  opacity: 0;
  z-index: -1;
  pointer-events: none;
  transition: opacity 0.6s ease;         /* sanfter Ein-/Ausblenden */
  animation: glass-ring-rotate 5s linear infinite paused;  /* langsamer = ruhiger */
}

.glass-ring-auto:hover::before {
  opacity: 0.35;                          /* dezent statt voll */
  animation-play-state: running;
}

/* Ring mit Blur-Glow Effekt */
.glass-ring-glow-blur {
  position: relative;
  overflow: visible;
}

.glass-ring-glow-blur::before {
  content: "";
  position: absolute;
  inset: -2px;
  border-radius: inherit;
  background: conic-gradient(
    from var(--glow-ring-angle),
    transparent 0deg,
    transparent 60deg,
    var(--accent, rgba(255, 255, 255, 0.4)) 120deg,
    transparent 180deg,
    transparent 240deg,
    var(--accent, rgba(255, 255, 255, 0.4)) 300deg,
    transparent 360deg
  );
  filter: blur(12px);
  opacity: 0;
  z-index: -1;
  pointer-events: none;
  transition: opacity 0.4s ease;
  animation: glass-ring-rotate 3s linear infinite paused;
}

.glass-ring-glow-blur:hover::before {
  opacity: 0.4;
  animation-play-state: running;
}

/* Schnellere Rotation */
.glass-ring-fast { --ring-duration: 2s; }
.glass-ring-fast::before { animation-duration: var(--ring-duration); }
.glass-ring-fast .glass-hover-ring-glow { animation-duration: var(--ring-duration); }

/* Langsamere Rotation */
.glass-ring-slow { --ring-duration: 5s; }
.glass-ring-slow::before { animation-duration: var(--ring-duration); }
.glass-ring-slow .glass-hover-ring-glow { animation-duration: var(--ring-duration); }


:root {
  /* Timing */
  --anim-duration-fast: 0.2s;
  --anim-duration: 0.4s;
  --anim-duration-slow: 0.8s;
  --anim-duration-slower: 1.2s;
  
  /* Easing */
  --ease-out: cubic-bezier(0.25, 0.46, 0.45, 0.94);
  --ease-out-back: cubic-bezier(0.34, 1.56, 0.64, 1);
  --ease-in-out: cubic-bezier(0.645, 0.045, 0.355, 1);
  --ease-bounce: cubic-bezier(0.68, -0.55, 0.265, 1.55);
  
  /* Distances */
  --anim-distance-sm: 20px;
  --anim-distance: 40px;
  --anim-distance-lg: 80px;
}


/* 
=====================================================
2. KEYFRAME ANIMATIONEN
=====================================================
*/

/* Fade */
@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes fadeOut {
  from { opacity: 1; }
  to { opacity: 0; }
}

/* Fade + Slide */
@keyframes fadeInUp {
  from { 
    opacity: 0; 
    transform: translateY(var(--anim-distance)); 
  }
  to { 
    opacity: 1; 
    transform: translateY(0); 
  }
}

@keyframes fadeInDown {
  from { 
    opacity: 0; 
    transform: translateY(calc(var(--anim-distance) * -1)); 
  }
  to { 
    opacity: 1; 
    transform: translateY(0); 
  }
}

@keyframes fadeInLeft {
  from { 
    opacity: 0; 
    transform: translateX(calc(var(--anim-distance) * -1)); 
  }
  to { 
    opacity: 1; 
    transform: translateX(0); 
  }
}

@keyframes fadeInRight {
  from { 
    opacity: 0; 
    transform: translateX(var(--anim-distance)); 
  }
  to { 
    opacity: 1; 
    transform: translateX(0); 
  }
}

/* Scale */
@keyframes scaleIn {
  from { 
    opacity: 0; 
    transform: scale(0.8); 
  }
  to { 
    opacity: 1; 
    transform: scale(1); 
  }
}

@keyframes scaleInUp {
  from { 
    opacity: 0; 
    transform: scale(0.8) translateY(var(--anim-distance)); 
  }
  to { 
    opacity: 1; 
    transform: scale(1) translateY(0); 
  }
}

/* Rotate */
@keyframes rotateIn {
  from { 
    opacity: 0; 
    transform: rotate(-10deg) scale(0.9); 
  }
  to { 
    opacity: 1; 
    transform: rotate(0) scale(1); 
  }
}

/* Bounce */
@keyframes bounce {
  0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
  40% { transform: translateY(-20px); }
  60% { transform: translateY(-10px); }
}

/* Pulse */
@keyframes pulse {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.05); }
}

@keyframes pulseGlow {
  0%, 100% {
    box-shadow: 0 0 20px rgba(255, 255, 255, 0.3);
  }
  50% {
    box-shadow: 0 0 40px rgba(255, 255, 255, 0.6);
  }
}

/* Shake */
@keyframes shake {
  0%, 100% { transform: translateX(0); }
  10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
  20%, 40%, 60%, 80% { transform: translateX(5px); }
}

/* Float */
@keyframes float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
}

/* Spin */
@keyframes spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* Shimmer */
@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

/* Glow Pulse */
@keyframes glowPulse {
  0%, 100% { 
    filter: drop-shadow(0 0 5px currentColor); 
  }
  50% { 
    filter: drop-shadow(0 0 20px currentColor); 
  }
}

/* Blur In */
@keyframes blurIn {
  from { 
    opacity: 0; 
    filter: blur(10px); 
  }
  to { 
    opacity: 1; 
    filter: blur(0); 
  }
}

/* Slide + Blur */
@keyframes slideBlurIn {
  from { 
    opacity: 0; 
    filter: blur(10px);
    transform: translateY(30px);
  }
  to { 
    opacity: 1; 
    filter: blur(0);
    transform: translateY(0);
  }
}


/* 
=====================================================
3. ANIMATION KLASSEN (sofort abspielen)
=====================================================
*/

/* Fade */
.anim-fade-in {
  animation: fadeIn var(--anim-duration) var(--ease-out) forwards;
}

.anim-fade-in-up {
  animation: fadeInUp var(--anim-duration) var(--ease-out) forwards;
}

.anim-fade-in-down {
  animation: fadeInDown var(--anim-duration) var(--ease-out) forwards;
}

.anim-fade-in-left {
  animation: fadeInLeft var(--anim-duration) var(--ease-out) forwards;
}

.anim-fade-in-right {
  animation: fadeInRight var(--anim-duration) var(--ease-out) forwards;
}

/* Scale */
.anim-scale-in {
  animation: scaleIn var(--anim-duration) var(--ease-out-back) forwards;
}

.anim-scale-in-up {
  animation: scaleInUp var(--anim-duration) var(--ease-out-back) forwards;
}

/* Rotate */
.anim-rotate-in {
  animation: rotateIn var(--anim-duration) var(--ease-out-back) forwards;
}

/* Blur */
.anim-blur-in {
  animation: blurIn var(--anim-duration-slow) var(--ease-out) forwards;
}

.anim-slide-blur-in {
  animation: slideBlurIn var(--anim-duration-slow) var(--ease-out) forwards;
}

/* Loop Animationen */
.anim-bounce {
  animation: bounce 2s infinite;
}

.anim-pulse {
  animation: pulse 2s infinite var(--ease-in-out);
}

.anim-pulse-glow {
  animation: pulseGlow 2s infinite var(--ease-in-out);
}

.anim-shake {
  animation: shake 0.5s;
}

.anim-float {
  animation: float 3s infinite var(--ease-in-out);
}

.anim-spin {
  animation: spin 1s linear infinite;
}

.anim-shimmer {
  background: linear-gradient(
    90deg,
    transparent,
    rgba(255, 255, 255, 0.2),
    transparent
  );
  background-size: 200% 100%;
  animation: shimmer 2s infinite;
}


/* 
=====================================================
4. ANIMATION DELAYS
=====================================================
*/

.anim-delay-100 { animation-delay: 0.1s; }
.anim-delay-200 { animation-delay: 0.2s; }
.anim-delay-300 { animation-delay: 0.3s; }
.anim-delay-400 { animation-delay: 0.4s; }
.anim-delay-500 { animation-delay: 0.5s; }
.anim-delay-600 { animation-delay: 0.6s; }
.anim-delay-700 { animation-delay: 0.7s; }
.anim-delay-800 { animation-delay: 0.8s; }
.anim-delay-1000 { animation-delay: 1s; }


/* 
=====================================================
5. ANIMATION DURATION MODIFIERS
=====================================================
*/

.anim-fast { animation-duration: var(--anim-duration-fast) !important; }
.anim-slow { animation-duration: var(--anim-duration-slow) !important; }
.anim-slower { animation-duration: var(--anim-duration-slower) !important; }


/* 
=====================================================
6. SCROLL-TRIGGERED ANIMATIONEN
=====================================================
Startzustand: unsichtbar
Wird sichtbar durch JavaScript (Intersection Observer)
oder durch CSS :has() / :target (eingeschränkte Unterstützung)
=====================================================
*/

/* Startzustand - unsichtbar */
.scroll-fade-in,
.scroll-fade-up,
.scroll-fade-down,
.scroll-fade-left,
.scroll-fade-right,
.scroll-scale-in,
.scroll-scale-up,
.scroll-rotate-in,
.scroll-blur-in {
  opacity: 0;
  transition: 
    opacity var(--anim-duration-slow) var(--ease-out),
    transform var(--anim-duration-slow) var(--ease-out),
    filter var(--anim-duration-slow) var(--ease-out);
}

.scroll-fade-up { transform: translateY(var(--anim-distance)); }
.scroll-fade-down { transform: translateY(calc(var(--anim-distance) * -1)); }
.scroll-fade-left { transform: translateX(calc(var(--anim-distance) * -1)); }
.scroll-fade-right { transform: translateX(var(--anim-distance)); }
.scroll-scale-in { transform: scale(0.8); }
.scroll-scale-up { transform: scale(0.8) translateY(var(--anim-distance)); }
.scroll-rotate-in { transform: rotate(-10deg) scale(0.9); }
.scroll-blur-in { filter: blur(10px); }

/* Aktivierter Zustand - sichtbar */
.scroll-fade-in.is-visible,
.scroll-fade-up.is-visible,
.scroll-fade-down.is-visible,
.scroll-fade-left.is-visible,
.scroll-fade-right.is-visible,
.scroll-scale-in.is-visible,
.scroll-scale-up.is-visible,
.scroll-rotate-in.is-visible,
.scroll-blur-in.is-visible {
  opacity: 1;
  transform: translateY(0) translateX(0) scale(1) rotate(0);
  filter: blur(0);
}


/* 
=====================================================
7. STAGGER DELAYS (für Listen/Gruppen)
=====================================================
*/

.stagger > *:nth-child(1) { transition-delay: 0.1s; }
.stagger > *:nth-child(2) { transition-delay: 0.2s; }
.stagger > *:nth-child(3) { transition-delay: 0.3s; }
.stagger > *:nth-child(4) { transition-delay: 0.4s; }
.stagger > *:nth-child(5) { transition-delay: 0.5s; }
.stagger > *:nth-child(6) { transition-delay: 0.6s; }
.stagger > *:nth-child(7) { transition-delay: 0.7s; }
.stagger > *:nth-child(8) { transition-delay: 0.8s; }
.stagger > *:nth-child(9) { transition-delay: 0.9s; }
.stagger > *:nth-child(10) { transition-delay: 1s; }


/*
=====================================================
7b. ELEMENTOR LOOP CAROUSEL - SMOOTH/MARQUEE
Verwandelt abgehackten Slider in flüssigen Marquee
=====================================================
*/

/*
 * kb-slider-smooth
 * Macht Elementor Loop Carousel flüssig statt abgehackt
 *
 * Anwendung: Klasse auf den CONTAINER des Loop Carousel Widgets setzen
 *
 * Varianten:
 * - kb-slider-smooth: Standard (30s für einen Durchlauf)
 * - kb-slider-smooth-slow: Langsamer (50s)
 * - kb-slider-smooth-fast: Schneller (15s)
 *
 * WICHTIG: Im Elementor Widget folgende Einstellungen:
 * - Autoplay: AUS (wird durch CSS übernommen)
 * - Infinite Loop: AN
 * - Speed: egal (wird überschrieben)
 */

/* Basis: Flüssige Animation statt Slide-by-Slide */
.kb-slider-smooth .swiper-wrapper {
  transition-timing-function: linear !important;
  transition-duration: 0ms !important;
}

/* CSS Animation für durchgängige Bewegung */
.kb-slider-smooth .swiper-wrapper {
  animation: kb-marquee-scroll 30s linear infinite !important;
}

.kb-slider-smooth-slow .swiper-wrapper {
  animation: kb-marquee-scroll 50s linear infinite !important;
}

.kb-slider-smooth-fast .swiper-wrapper {
  animation: kb-marquee-scroll 15s linear infinite !important;
}

/* Pause bei Hover ist OPT-IN. Standard: Slider läuft durch.
   Aktivieren mit zusätzlicher Klasse `.kb-slider-pause-hover`. */
.kb-slider-pause-hover:hover .swiper-wrapper {
  animation-play-state: paused !important;
}

/* Richtungsvarianten */
.kb-slider-reverse .swiper-wrapper {
  animation-direction: reverse !important;
}

/* Keyframes - berechnet basierend auf Slide-Breite */
@keyframes kb-marquee-scroll {
  0% {
    transform: translate3d(0, 0, 0);
  }
  100% {
    /* Bewegt sich um die Breite aller Original-Slides (nicht Duplikate) */
    transform: translate3d(calc(-100% / 2), 0, 0);
  }
}

/*
 * kb-slider-linear
 * Alternative: Swiper-native lineare Animation MIT manueller Steuerung
 *
 * Anwendung: Klasse auf den CONTAINER des Loop Carousel Widgets setzen
 *
 * WICHTIG: Im Elementor Widget folgende Einstellungen:
 * - Autoplay: AN
 * - Autoplay Speed: 1 (oder sehr niedrig)
 * - Speed (Transition Duration): 5000 - 15000 ms (je langsamer, desto flüssiger)
 * - Infinite Loop: AN
 * - Pause on Hover: optional
 *
 * Vorteil gegenüber kb-slider-smooth:
 * - Manuelle Vor/Zurück Navigation funktioniert noch!
 * - Pagination funktioniert noch
 * - Touch/Swipe funktioniert noch
 */
.kb-slider-linear .swiper-wrapper {
  transition-timing-function: linear !important;
}

/* Geschwindigkeits-Varianten für kb-slider-linear */
/* Nutze diese ZUSÄTZLICH zu kb-slider-linear */
.kb-slider-linear-slow .swiper-wrapper {
  transition-duration: 10000ms !important;
}

.kb-slider-linear-medium .swiper-wrapper {
  transition-duration: 6000ms !important;
}

.kb-slider-linear-fast .swiper-wrapper {
  transition-duration: 3000ms !important;
}

/*
 * kb-slider-fade
 * Crossfade statt Slide-by-Slide. Slides werden übereinandergestapelt und
 * via Opacity ein- und ausgeblendet. Pagination, Navigation und Touch
 * funktionieren weiter.
 *
 * Anwendung: Klasse auf den CONTAINER des Loop Carousel Widgets setzen.
 *
 * Empfohlene Widget-Settings:
 * - Slides To Show: 1 (Crossfade mit mehreren Slides parallel ergibt kein Bild)
 * - Autoplay: AN, Autoplay Speed: 5000ms (Sichtbarkeitsdauer pro Slide)
 * - Speed (Übergangsdauer): egal, der Fade nutzt CSS-Transition mit 600ms
 * - Infinite Loop: AN
 *
 * Geschwindigkeits-Varianten:
 * - kb-slider-fade-slow: 1000ms Übergang
 * - kb-slider-fade-fast: 300ms Übergang
 *
 * Hinweis: Der erste Slide bleibt im Layout-Fluss als Höhen-Anker. Slide-
 * Inhalte sollten daher ähnlich hoch sein, sonst springt die Container-Höhe.
 */
.kb-slider-fade .swiper-wrapper {
  transform: none !important;
  transition: none !important;
}

.kb-slider-fade .swiper-slide {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity 600ms ease;
  pointer-events: none;
  z-index: 1;
}

/* Erster Slide bleibt im Layout-Fluss, damit der Container Höhe behält */
.kb-slider-fade .swiper-slide:first-child {
  position: relative;
}

.kb-slider-fade .swiper-slide-active {
  opacity: 1;
  pointer-events: auto;
  z-index: 2;
}

/* Geschwindigkeits-Varianten – ZUSÄTZLICH zu .kb-slider-fade setzen */
.kb-slider-fade-slow .swiper-slide {
  transition-duration: 1000ms;
}
.kb-slider-fade-fast .swiper-slide {
  transition-duration: 300ms;
}


/*
 * kb-pagination-pill
 * ----------------------------------------------------------
 * Elegante Pill-Pagination für Elementor Loop Carousels und
 * andere Swiper-basierte Slider. Reines CSS, kein JS – stylt
 * die nativen Swiper-Bullets so um, dass der aktive Bullet
 * eine längliche Pille wird. Beim Wechsel verschmälert sich
 * die alte Pille zum Punkt, die neue dehnt sich aus – sieht
 * aus, als rutscht ein Indikator zur nächsten Position.
 *
 * Anwendung: Klasse am SLIDER-Container (Erweitert → CSS-Klassen).
 * Funktioniert mit Standard-Slide-Effekt, Fade, Loop Carousel.
 *
 * Theming-Hooks:
 *   --kb-pp-track     Bullet-Hintergrund (inaktiv & Track aktiv)
 *   --kb-pp-fill      Aktive Füllfarbe
 *   --kb-pp-pill-w    Breite der aktiven Pille (Default 56px)
 *   --kb-pp-pill-h    Höhe der Pille (Default 4px)
 *   --kb-pp-gap       Abstand zwischen Pillen (Default 8px)
 */

.kb-pagination-pill {
  --kb-pp-track: rgba(16, 20, 20, 0.2);
  --kb-pp-fill: var(--kb-kreativbox, #e51f75);
  --kb-pp-pill-w: 56px;
  --kb-pp-pill-h: 4px;
  --kb-pp-gap: 8px;
}

/* Auf dunklem Hintergrund (automatisch via bg-dark/bg-gray-9xx) */
.bg-dark .kb-pagination-pill,
.bg-gray-900 .kb-pagination-pill,
.bg-gray-800 .kb-pagination-pill,
.kb-pagination-pill.is-on-dark {
  --kb-pp-track: rgba(255, 255, 255, 0.25);
  --kb-pp-fill: #ffffff;
}

/* Pagination-Container: flex-Layout mit Gap */
.kb-pagination-pill .swiper-pagination {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--kb-pp-gap);
  position: relative;
  width: auto;
  bottom: auto;
  left: auto;
  right: auto;
  margin-top: clamp(16px, 2vw, 28px);
  padding: 0;
}

/* Bullets: schmaler Punkt, weicher Übergang */
.kb-pagination-pill .swiper-pagination-bullet {
  width: var(--kb-pp-pill-h);
  height: var(--kb-pp-pill-h);
  background: var(--kb-pp-track);
  opacity: 1;
  margin: 0 !important;
  border-radius: 999px;
  cursor: pointer;
  position: relative;
  transition:
    width 550ms cubic-bezier(0.65, 0, 0.35, 1),
    background 250ms ease;
}

/* Größerer Hit-Bereich für Touch ohne visuelles Wachstum */
.kb-pagination-pill .swiper-pagination-bullet::before {
  content: "";
  position: absolute;
  inset: -10px;
}

/* Hover: subtil aufhellen */
.kb-pagination-pill .swiper-pagination-bullet:hover {
  background: color-mix(in srgb, var(--kb-pp-track) 50%, var(--kb-pp-fill) 50%);
}

/* Aktiver Bullet: dehnt sich zur Pille, nimmt Akzentfarbe an */
.kb-pagination-pill .swiper-pagination-bullet-active {
  width: var(--kb-pp-pill-w);
  background: var(--kb-pp-fill);
}

/* Reduced Motion: harter Wechsel statt Width-Animation */
@media (prefers-reduced-motion: reduce) {
  .kb-pagination-pill .swiper-pagination-bullet {
    transition: none;
  }
}


/*
 * kb-pagination-pill-progress  (Modifier, ZUSÄTZLICH zu .kb-pagination-pill)
 * ----------------------------------------------------------
 * Optionaler Progress-Fill: Die aktive Pille füllt sich von
 * links nach rechts während der Autoplay-Dauer.
 *
 * WICHTIG: Die Animationsdauer muss zur Autoplay-Speed im
 * Widget passen. Default ist 5000ms. Pro Slider überschreibbar
 * im Erweitert-Tab → Custom-CSS:
 *   selector { --kb-pp-autoplay: 7000ms; }
 *
 * Hover pausiert die Animation (passt zu pause_on_hover im Widget).
 */

.kb-pagination-pill-progress {
  --kb-pp-autoplay: 5000ms;
}

.kb-pagination-pill-progress .swiper-pagination-bullet-active {
  background: var(--kb-pp-track);
  overflow: hidden;
}

.kb-pagination-pill-progress .swiper-pagination-bullet-active::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--kb-pp-fill);
  border-radius: inherit;
  transform: scaleX(0);
  transform-origin: left center;
  animation: kb-pp-fill var(--kb-pp-autoplay) linear forwards;
  pointer-events: none;
}

@keyframes kb-pp-fill {
  to { transform: scaleX(1); }
}

/* Pause der Progress-Animation während Hover */
.kb-pagination-pill-progress:hover .swiper-pagination-bullet-active::after {
  animation-play-state: paused;
}

/* Reduced Motion: kein Fill-Effekt, statisch gefüllt */
@media (prefers-reduced-motion: reduce) {
  .kb-pagination-pill-progress .swiper-pagination-bullet-active::after {
    animation: none;
    transform: scaleX(1);
  }
}


/*
 * kb-slider [Shortcode]
 * ============================================================
 * Custom Stack-Slider, eigene JS-Logik (kein Swiper).
 * PHP: /inc/kb-slider.php  |  JS: /assets/js/kb-slider.js
 *
 * State-Klassen pro Slide (vom JS gesetzt):
 *   .is-active   – Karte vorne, voll sichtbar
 *   .is-next     – nächste Karte, 8px rechts versetzt + leicht skaliert
 *   .is-next-2   – übernächste Karte, 16px rechts versetzt
 *   .is-next-3   – dritte Karte im Stack, 24px rechts versetzt
 *   .is-prev     – alle anderen, unsichtbar (kein Stack links)
 *
 * Theming-Hooks:
 *   --kb-slider-radius     Eckenradius (Default 24px)
 *   --kb-slider-aspect     Seitenverhältnis (Default 16/10)
 *   --kb-slider-max-h      max-height Slider (Default 80vh)
 *   --kb-slider-progress-h Höhe der Indikator-Linie (Default 96px)
 */

.kb-slider {
  --kb-slider-radius: 24px;
  --kb-slider-aspect: 16 / 10;
  --kb-slider-max-h: 80vh;
  --kb-slider-min-h: 400px;
  --kb-slider-progress-h: 96px;
  /* Stack-Reservoir wächst mit dem Slider, damit der Versatz auch bei
     großen Auflösungen sichtbar bleibt. */
  --kb-slider-stack-reserve: clamp(48px, 9vh, 140px);
  --kb-slider-overlay: linear-gradient(
    to top,
    rgba(0, 0, 0, 0.72) 0%,
    rgba(0, 0, 0, 0.28) 45%,
    rgba(0, 0, 0, 0) 70%
  );
  position: relative;
  /* Garantiert 100% Breite – überschreibt Elementor's Widget-Constraints,
     die sonst je nach Container Spalten-/Auto-Width setzen können. */
  display: block;
  width: 100% !important;
  max-width: 100% !important;
  /* Höhe direkt am Slider-Element selbst – damit Elementor's Container
     die Höhe sicher erkennt (Stage und Slides sind absolut positioniert
     und tragen sonst nichts zum Layout-Flow bei). */
  aspect-ratio: var(--kb-slider-aspect);
  max-height: var(--kb-slider-max-h);
  min-height: var(--kb-slider-min-h);
  box-sizing: border-box;
}

/* Stage spannt sich über den ganzen Slider auf */
.kb-slider__stage {
  position: absolute;
  inset: 0;
  cursor: grab;
  /* verhindert Browser-Native Image/Text-Drag während Pointer-Drag */
  touch-action: pan-y;
  user-select: none;
  -webkit-user-select: none;
}

.kb-slider__stage.is-dragging {
  cursor: grabbing;
}

/* Browser-natives Image-Drag deaktivieren – wir handhaben Drag selbst */
.kb-slider__image {
  -webkit-user-drag: none;
  user-drag: none;
}

/* Slide nimmt die obere Stage-Fläche ein und lässt unten ein Reservoir
   frei, in das die Stack-Karten hereinragen. Wir nutzen explizit height
   statt bottom, das ist robuster gegen externe inset-Resets. */
.kb-slider__slide {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: calc(100% - var(--kb-slider-stack-reserve));
  border-radius: var(--kb-slider-radius);
  overflow: hidden;
  background: var(--kb-gray-200, #e0dedb);
  /* Default: außerhalb sichtbarer Position (entspricht is-prev) */
  opacity: 0;
  transform: translate(0, -24px) scale(0.96);
  transform-origin: center top;
  transition:
    transform 700ms cubic-bezier(0.65, 0, 0.35, 1),
    opacity 500ms ease;
  /* will-change entfernt: zwingt sonst Slide-Inhalt (Text) in Compositing-Layer,
     Firefox rendert Text dann ohne Subpixel-AA → unscharf. */
  pointer-events: none;
  z-index: 0;
}

/* Aktive Karte: vorne, voll sichtbar, klickbar */
.kb-slider__slide.is-active {
  opacity: 1;
  transform: translate(0, 0) scale(1);
  z-index: 4;
  pointer-events: auto;
  box-shadow: 0 24px 50px -22px rgba(0, 0, 0, 0.4);
}

/* Stack-Karten dahinter – Versatz und Skalierung proportional zum
   Stack-Reservoir, damit es auch bei großen Slidern sichtbar bleibt. */
.kb-slider__slide.is-next {
  opacity: 1;
  transform: translate(0, calc(var(--kb-slider-stack-reserve) * 0.5)) scale(0.95);
  z-index: 3;
}
.kb-slider__slide.is-next-2 {
  opacity: 1;
  transform: translate(0, var(--kb-slider-stack-reserve)) scale(0.9);
  z-index: 2;
}
/* .is-next-3 wird vom JS gesetzt, ist aber visuell unsichtbar */
.kb-slider__slide.is-next-3 {
  opacity: 0;
  transform: translate(0, var(--kb-slider-stack-reserve)) scale(0.9);
  z-index: 1;
}

/* prev-Karten komplett aus dem Bild – kein Stack links */
.kb-slider__slide.is-prev {
  opacity: 0;
  transform: translate(0, calc(var(--kb-slider-stack-reserve) * -1)) scale(0.96);
  z-index: 0;
}


/* ===== MEDIA + CONTENT ===== */
.kb-slider__media {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
}

.kb-slider__image {
  width: 100% !important;
  height: 100% !important; /* gegen Elementor's globales img { height: auto } */
  object-fit: cover;
  display: block;
  color: #fff; /* damit Slide-Texte weiß sind, da kein <a>-Wrapper mehr */
  transition: transform 800ms cubic-bezier(0.2, 0.8, 0.2, 1);
}

/* Lese-Gradient für Text-Lesbarkeit */
.kb-slider__media::after {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--kb-slider-overlay);
  z-index: 1;
  pointer-events: none;
}

.kb-slider__content {
  position: absolute;
  inset: auto 0 0 0;
  padding: clamp(20px, 4vw, 56px);
  z-index: 2;
  color: #fff;
}

/* Tags sitzen ÜBER der Überschrift, beides linksbündig */
.kb-slider__title-row {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 12px;
  margin-bottom: 14px;
}

.kb-slider__title {
  font-size: clamp(1.5rem, 2.4vw, 2.4rem);
  line-height: 1.25;
  margin: 0;
  color: #fff;
  font-family: var(--e-global-typography-primary-font-family, inherit);
  font-weight: 600;
  min-width: 0;
  /* harte Grenze auf ~28 Zeichen erzwingt zweizeiligen Umbruch
     bei längeren Titeln, ohne fixe Pixel-Werte */
  max-width: 28ch;
  text-wrap: balance;
}

.kb-slider__pills {
  flex: 0 0 auto;
}

@media (max-width: 600px) {
  .kb-slider__title-row {
    gap: 10px;
  }
  .kb-slider__title {
    max-width: 100%;
  }
}

.kb-slider__excerpt {
  margin: 0 0 18px 0;
  max-width: 56ch;
  color: rgba(255, 255, 255, 0.88);
  font-size: clamp(0.95rem, 1.1vw, 1.05rem);
  line-height: 1.5;
}

/* Galerie-Slider (Gutenberg core/gallery mit .kb-gallery-slider):
   Bildunterschrift als dezente Zeile statt großem Titel/CTA-Block */
.kb-slider__content--caption {
  padding: 16px 24px;
}
.kb-slider__caption {
  margin: 0;
  color: rgba(255, 255, 255, 0.88);
  font-family: var(--font-body);
  font-size: var(--fs-sm);
  line-height: 1.25;
}


/* =====================================================
   MONO-LABEL — Eyebrow im Glass-Folder-Tab-Stil
   (gleiche Typo wie .kb-glass-folder__tab-label, als
   wiederverwendbare Utility für Sektions-Label)
   ===================================================== */
.kb-mono-label,
.kb-mono-label p {
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace !important;
  font-size: 12px !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  color: rgba(255, 255, 255, 0.72) !important; /* >= 7:1 auf gray-900 (WCAG AAA) */
  font-weight: 400 !important;
}

/* Dunkle Variante auf hellen Flächen: >= 7:1 auf gray-100/200/weiß (WCAG AAA) */
:is(.bg-white, .bg-gray-100, .bg-gray-200, .bg-gray-300) .kb-mono-label,
:is(.bg-white, .bg-gray-100, .bg-gray-200, .bg-gray-300) .kb-mono-label p {
  color: rgba(10, 10, 10, 0.8) !important;
}

/* =====================================================
   KUNDENSTIMMEN — [kb_testimonials]
   Chat-Analogie: jede Stimme ist eine Nachricht, die uns
   der Kunde schreibt. Mono-Absender über der Glas-Bubble
   (Gruppenchat-Stil), Avatar unten links am Bubble-Tail,
   Name/Rolle darunter. Karten vertikal versetzt für den
   lockeren Verlaufs-Rhythmus.
   ===================================================== */
.kb-testimonials {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: var(--space-lg) var(--space-lg);
  width: 100%;
  align-items: start;
}
/* Versatz wie in einem Chat-Verlauf (nur ab Tablet) */
@media (min-width: 768px) {
  .kb-testimonials > .kb-chat-voice:nth-child(3n + 2) { margin-top: 48px; }
  .kb-testimonials > .kb-chat-voice:nth-child(3n)     { margin-top: 20px; }
}
/* Single-Layout: eine breite, zentrierte Stimme */
.kb-testimonials--single {
  grid-template-columns: minmax(0, 760px);
  justify-content: center;
}

.kb-chat-voice {
  display: block;
  text-decoration: none;
  color: inherit;
}

/* Absender in Mono über der Bubble, eingerückt auf Bubble-Kante */
.kb-chat-voice__company {
  display: block;
  margin: 0 0 10px 68px;
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.55);
}

.kb-chat-voice__row {
  display: flex;
  align-items: flex-end;   /* Avatar sitzt unten am Bubble-Tail */
  gap: 16px;
}

.kb-chat-voice__avatar {
  flex: 0 0 auto;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  overflow: hidden;
  border: 2px solid rgba(255, 255, 255, 0.18);
}
.kb-chat-voice__avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
  display: block;
}

/* Die Nachricht: Glas-Bubble, Tail-Ecke zeigt zum Avatar */
.kb-chat-voice__bubble {
  position: relative;
  flex: 1 1 auto;
  min-width: 0;
  padding: clamp(1.25rem, 2vw, 1.75rem) clamp(1.25rem, 2vw, 2rem);
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 24px 24px 24px 6px;
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  transition:
    transform 0.45s cubic-bezier(0.34, 1.56, 0.64, 1),
    border-color 0.3s ease,
    background 0.3s ease;
}

.kb-chat-voice__quote {
  margin: 0;
  font-family: var(--font-headline);
  font-weight: 500;
  font-size: var(--fs-md);
  line-height: 1.25;
  color: var(--kb-white);
}

/* Name/Rolle unter der Bubble, eingerückt auf Bubble-Kante */
.kb-chat-voice__person {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0 0.5rem;
  margin: 10px 0 0 68px;
  line-height: 1.25;
}
.kb-chat-voice__name {
  font-family: var(--font-body);
  font-weight: 700;
  color: var(--kb-white);
  font-size: var(--fs-sm);
}
.kb-chat-voice__meta {
  color: var(--kb-gray-500);
  font-size: var(--fs-xs);
}

/* Hover nur bei verlinkten Stimmen: Bubble hebt kurz ab */
a.kb-chat-voice:hover .kb-chat-voice__bubble {
  transform: translateY(-3px);
  background: rgba(255, 255, 255, 0.09);
  border-color: rgba(255, 255, 255, 0.22);
}

@media (max-width: 767px) {
  .kb-chat-voice__company,
  .kb-chat-voice__person { margin-left: 0; }
}

/* =====================================================
   FEATURED CASE HERO — [kb_featured_case]
   Längliches Split-Layout, hart auf max 90vh gedeckelt:
   links Editorial-Content, rechts Glass-Folder mit den
   Projektbildern des Cases als auffächernde Papers.
   ===================================================== */
.kb-featured-hero {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 4fr);
  gap: clamp(2rem, 5vw, 5rem);
  align-items: center;
  width: 100%;
  max-height: 90vh;
  min-height: min(62vh, 640px);
}

.kb-featured-hero__content {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-md);
  min-width: 0;
}

.kb-featured-hero__branche {
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 12px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.55);
}

.kb-featured-hero__title {
  margin: 0;
  font-family: var(--font-headline);
  font-weight: 700;
  font-size: var(--fs-lg);
  line-height: 1.25;
  color: var(--kb-white);
  text-wrap: balance;
}

.kb-featured-hero__excerpt {
  margin: 0;
  max-width: 52ch;
  font-family: var(--font-body);
  font-size: var(--fs-base);
  line-height: 1.6;
  color: var(--kb-gray-300);
}

/* Folder-Spalte: Folder skaliert in die Zelle, capped über die Zeile */
.kb-featured-hero__folder {
  display: flex;
  justify-content: center;
  min-width: 0;
}
.kb-featured-hero__folder .kb-glass-folder {
  --gf-w: 100%;
  --gf-h: min(56vh, 520px);
  width: 100%;
  max-width: 560px;
}

/* Wide-Folder (Querformat): eigene clipPath-Variante mit
   entzerrten Radien und breiter Tab-Nase (bis ~50% Breite) */
.kb-glass-folder--wide .kb-glass-folder__shell {
  clip-path: url(#kb-folder-shape-wide);
  -webkit-clip-path: url(#kb-folder-shape-wide);
}
/* Label sicher in der breiten Nase halten */
.kb-glass-folder--wide .kb-glass-folder__tab-label {
  max-width: 44%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Papers-Verhalten im Featured-Hero (nur hier, Startseite bleibt):
   IDLE  — der Bilderstapel schaut oben sichtbar aus dem Folder raus
           (Teil außerhalb der Folder-Form ist klar, Rest milchig
           hinterm Glas — Original-Prinzip der Shell).
   HOVER — Papers wandern komplett nach VORNE vor die Glasfront
           (z-index über der Shell) und fächern weit auf. */
.kb-featured-hero .kb-glass-folder__paper {
  opacity: 1;
  transform:
    translate(calc(var(--i) * 6px), calc(var(--i) * -4px - 90px))
    rotate(calc(var(--i) * 1.5deg));
}
.kb-featured-hero .kb-glass-folder:hover .kb-glass-folder__papers {
  z-index: 4; /* vor Shell (2) und Tab-Label (3) */
}
.kb-featured-hero .kb-glass-folder:hover .kb-glass-folder__paper {
  transform:
    translate(calc(var(--i) * 34px), calc(var(--i) * 7px - 175px))
    rotate(calc(var(--i) * 5deg))
    scale(1.1);
  box-shadow:
    0 32px 64px rgba(0, 0, 0, 0.5),
    0 0 0 1px rgba(255, 255, 255, 0.12);
}
/* Genug Luft nach oben, damit der Fächer nicht an der Sektion clippt */
.kb-featured-hero__folder {
  padding-top: 72px;
}

@media (max-width: 1023px) {
  .kb-featured-hero {
    grid-template-columns: 1fr;
    max-height: none;
    min-height: 0;
    gap: var(--space-xl);
  }
  .kb-featured-hero__folder .kb-glass-folder {
    --gf-h: min(48vh, 420px);
  }
}

.kb-testimonial-card__quote {
  margin: 0;
  font-family: var(--font-headline);
  font-weight: 500;
  font-size: var(--fs-md);
  line-height: 1.25;
  color: var(--kb-white);
  /* Zitat schiebt die Person-Zeile nach unten (Card-Boden bündig) */
  flex: 1 1 auto;
}
.kb-testimonials--single .kb-testimonial-card__quote {
  font-size: var(--fs-lg);
  text-wrap: balance;
}

.kb-testimonial-card__person {
  display: flex;
  align-items: center;
  gap: 0.875rem;
}
.kb-testimonial-card__avatar {
  flex: 0 0 auto;
  width: 52px;
  height: 52px;
  border-radius: 50%;
  overflow: hidden;
  border: 2px solid rgba(255, 255, 255, 0.18);
}
.kb-testimonial-card__avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
  display: block;
}
.kb-testimonial-card__ident {
  display: flex;
  flex-direction: column;
  line-height: 1.25;
}
.kb-testimonial-card__name {
  font-family: var(--font-body);
  font-weight: 700;
  color: var(--kb-white);
  font-size: var(--fs-sm);
}
.kb-testimonial-card__meta {
  color: var(--kb-gray-500);
  font-size: var(--fs-xs);
}

@media (max-width: 767px) {
  .kb-testimonial-card { padding: var(--space-md); }
}


/* ===== CTA "zum Projekt" – outlined Pill, weiß ===== */
.kb-slider__cta {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 10px 20px 9px;
  border: 1px solid rgba(255, 255, 255, 0.7);
  border-radius: 999px;
  background: transparent;
  color: #fff;
  font-size: 0.95rem;
  font-weight: 500;
  font-family: var(--e-global-typography-secondary-font-family, inherit);
  letter-spacing: 0.01em;
  text-decoration: none;
  cursor: pointer;
  transition:
    background 250ms cubic-bezier(0.22, 1, 0.36, 1),
    color 250ms cubic-bezier(0.22, 1, 0.36, 1),
    border-color 250ms cubic-bezier(0.22, 1, 0.36, 1),
    gap 300ms cubic-bezier(0.22, 1, 0.36, 1);
}

/* Pfeil = gleicher Pfeil wie .kb-kontakt-pill__arrow (oben rechts).
   Das "→" Textzeichen im Markup wird über text-indent ausgeblendet,
   die Pfeilform kommt als SVG-Mask. background-color folgt currentColor,
   d.h. Pfeil-Farbe wechselt automatisch mit dem Link-Color im Hover. */
.kb-slider__cta-arrow {
  display: inline-block;
  width: 15px;
  height: 13px;
  overflow: hidden;
  text-indent: 100%;
  white-space: nowrap;
  vertical-align: -1px;
  background-color: currentColor;
  color: inherit;
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 13' fill='none'><path d='M8.37796 0C8.37796 3.1593 10.9339 5.74297 14.1211 5.74316V6.74316C10.3784 6.74297 7.37796 3.70833 7.37796 0H8.37796Z' fill='black'/><path d='M14.1211 6.77475C10.962 6.77494 8.37815 9.33082 8.37796 12.5179H7.37796C7.37815 8.77528 10.413 5.77494 14.1211 5.77475V6.77475Z' fill='black'/><path d='M14.1211 5.74316V6.74316L0 6.74359V5.74359L14.1211 5.74316Z' fill='black'/></svg>") center / contain no-repeat;
          mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 13' fill='none'><path d='M8.37796 0C8.37796 3.1593 10.9339 5.74297 14.1211 5.74316V6.74316C10.3784 6.74297 7.37796 3.70833 7.37796 0H8.37796Z' fill='black'/><path d='M14.1211 6.77475C10.962 6.77494 8.37815 9.33082 8.37796 12.5179H7.37796C7.37815 8.77528 10.413 5.77494 14.1211 5.77475V6.77475Z' fill='black'/><path d='M14.1211 5.74316V6.74316L0 6.74359V5.74359L14.1211 5.74316Z' fill='black'/></svg>") center / contain no-repeat;
  transition: transform 300ms cubic-bezier(0.22, 1, 0.36, 1);
}

.kb-slider__cta:hover {
  background: #fff;
  color: var(--kb-gray-900, #101414);
  border-color: #fff;
  gap: 14px;
}

.kb-slider__cta:hover .kb-slider__cta-arrow {
  transform: translateX(2px);
}

.kb-slider__cta:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 4px;
}


/* ===== NAVIGATION (oben rechts, nur Pfeil) ===== */
.kb-slider__nav,
.kb-slider__nav:hover,
.kb-slider__nav:focus,
.kb-slider__nav:active {
  position: absolute;
  top: clamp(16px, 2.5vw, 28px);
  right: clamp(16px, 2.5vw, 28px);
  z-index: 30;
  padding: 8px;
  border: 0 !important;
  background: transparent !important;
  background-color: transparent !important;
  box-shadow: none !important;
  cursor: pointer;
  display: inline-block;
  appearance: none;
  -webkit-appearance: none;
}

.kb-slider__nav-icon {
  width: 56px;
  height: 56px;
  display: block;
  filter: brightness(0) invert(1) drop-shadow(0 2px 4px rgba(0, 0, 0, 0.4));
  transition: transform 350ms cubic-bezier(0.22, 1, 0.36, 1);
}

.kb-slider__nav:hover .kb-slider__nav-icon {
  transform: translateX(6px);
}

.kb-slider__nav:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 4px;
  border-radius: 2px;
}

@media (max-width: 600px) {
  .kb-slider__nav { top: 12px; right: 12px; padding: 6px; }
  .kb-slider__nav-icon { width: 40px; height: 40px; }
  .kb-slider__content { padding: 20px; }
}


/* ===== INDIKATOR-LINIE mit laufendem Punkt (oben links) ===== */
.kb-slider__progress {
  position: absolute;
  top: clamp(20px, 2vw, 32px);
  left: clamp(20px, 3vw, 40px);
  transform: none;
  width: 16px;                      /* Hit-Area, optisch nur 1px sichtbar */
  height: clamp(48px, 6vw, 96px);
  z-index: 20;
  pointer-events: none;
}

.kb-slider__progress-track {
  position: absolute;
  top: 0;
  left: 50%;
  width: 1px;
  height: 100%;
  background: rgba(255, 255, 255, 0.32);
  transform: translateX(-50%);
}

.kb-slider__progress-dot {
  position: absolute;
  top: 0;
  left: 50%;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #fff;
  transform: translate(-50%, 0);
  transition: transform 90ms linear;
  will-change: transform;
}

@media (max-width: 600px) {
  /* Mobiler Slider: moderat hoeher als das 16/10-Default, aber nicht
     viewport-fuellend. Aspect 4/5 sorgt fuer leichtes Hochformat,
     Stack-Reserve reduziert, Bilder via object-fit: cover. */
  .kb-slider {
    --kb-slider-aspect: 4 / 5;
    --kb-slider-min-h: 480px;
    --kb-slider-max-h: 70vh;
    --kb-slider-stack-reserve: 32px;
  }

  /* Slide-Bild explizit mittig im Cover-Crop (default, hier als Sicherheit
     gegen Theme-/Plugin-Overrides). */
  .kb-slider__image {
    object-position: center center;
  }

  /* Animierter Strich nach oben-links, ungefaehr auf Hoehe vom Nav-Pfeil
     (Pfeil sitzt bei top: 12px, ~40px Icon-Hoehe → Center ~32px).
     transform: none deaktiviert das vertikale Mitte-Centering. */
  .kb-slider__progress {
    top: 18px;
    left: 18px;
    height: 48px;
    transform: none;
  }
}

@media (min-width: 601px) and (max-width: 1023px) {
  /* Tablet-Slider: leicht hoeher als Default, weniger portrait als Mobile.
     5/6 ist nahezu quadratisch und passt zu Tablet-Proportionen in
     portrait wie landscape. */
  .kb-slider {
    --kb-slider-aspect: 5 / 6;
    --kb-slider-min-h: 560px;
    --kb-slider-max-h: 75vh;
    --kb-slider-stack-reserve: 48px;
  }

  .kb-slider__image {
    object-position: center center;
  }

  /* Strich auch hier oben-links, etwas mehr Abstand zum Rand als Mobile. */
  .kb-slider__progress {
    top: 24px;
    left: 24px;
    height: 64px;
    transform: none;
  }
}


/* Reduced Motion: keine Stack-Übergänge */
@media (prefers-reduced-motion: reduce) {
  .kb-slider__slide,
  .kb-slider__image,
  .kb-slider__progress-dot {
    transition: none !important;
  }
}


/* Pagination ausblenden für Marquee-Style */
.kb-slider-smooth .swiper-pagination,
.kb-slider-smooth-slow .swiper-pagination,
.kb-slider-smooth-fast .swiper-pagination {
  display: none !important;
}

/* Pagination sichtbar lassen (optional) */
.kb-slider-show-pagination .swiper-pagination {
  display: flex !important;
}

/* Navigation ausblenden */
.kb-slider-smooth .elementor-swiper-button,
.kb-slider-smooth-slow .elementor-swiper-button,
.kb-slider-smooth-fast .elementor-swiper-button {
  display: none !important;
}

/* Fade-Effekt an den Seiten */
.kb-slider-fade-edges {
  position: relative;
}
.kb-slider-fade-edges::before,
.kb-slider-fade-edges::after {
  content: '';
  position: absolute;
  top: 0;
  bottom: 0;
  width: 80px;
  z-index: 10;
  pointer-events: none;
}
.kb-slider-fade-edges::before {
  left: 0;
  background: linear-gradient(to right, var(--kb-dark, #101414), transparent);
}
.kb-slider-fade-edges::after {
  right: 0;
  background: linear-gradient(to left, var(--kb-dark, #101414), transparent);
}

/* Fade auf hellem Hintergrund */
.kb-slider-fade-edges-light::before {
  background: linear-gradient(to right, var(--kb-light, #F3F3F3), transparent) !important;
}
.kb-slider-fade-edges-light::after {
  background: linear-gradient(to left, var(--kb-light, #F3F3F3), transparent) !important;
}

/* Fade auf weißem Hintergrund */
.kb-slider-fade-edges-white::before {
  background: linear-gradient(to right, #FFFFFF, transparent) !important;
}
.kb-slider-fade-edges-white::after {
  background: linear-gradient(to left, #FFFFFF, transparent) !important;
}


/*
=====================================================
8. HOVER ANIMATIONEN
=====================================================
*/

/* Hover Lift */
.hover-lift {
  transition: transform var(--anim-duration-fast) var(--ease-out);
}
.hover-lift:hover {
  transform: translateY(-5px);
}

/* Hover Scale */
.hover-scale {
  transition: transform var(--anim-duration-fast) var(--ease-out-back);
}
.hover-scale:hover {
  transform: scale(1.05);
}

/* Hover Glow */
.hover-glow {
  transition: box-shadow var(--anim-duration) var(--ease-out);
}
.hover-glow:hover {
  box-shadow: 0 0 30px rgba(255, 255, 255, 0.4);
}

/* Hover Rotate */
.hover-rotate {
  transition: transform var(--anim-duration) var(--ease-out);
}
.hover-rotate:hover {
  transform: rotate(5deg);
}

/* Hover Shine */
.hover-shine {
  position: relative;
  overflow: hidden;
}
.hover-shine::after {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 50%;
  height: 100%;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(255, 255, 255, 0.3),
    transparent
  );
  transform: skewX(-20deg);
  transition: left 0.6s ease;
}
.hover-shine:hover::after {
  left: 150%;
}

/* Hover Border */
.hover-border {
  position: relative;
}
.hover-border::before {
  content: '';
  position: absolute;
  inset: 0;
  border: 2px solid transparent;
  border-radius: inherit;
  transition: border-color var(--anim-duration) ease;
}
.hover-border:hover::before {
  border-color: rgba(255, 255, 255, 0.8);
}


/* 
=====================================================
9. REDUCED MOTION (Barrierefreiheit)
=====================================================
*/

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  
  .scroll-fade-in,
  .scroll-fade-up,
  .scroll-fade-down,
  .scroll-fade-left,
  .scroll-fade-right,
  .scroll-scale-in,
  .scroll-scale-up,
  .scroll-rotate-in,
  .scroll-blur-in {
    opacity: 1;
    transform: none;
    filter: none;
  }
}


/* 
=====================================================
10. ELEMENTOR ANIMATION KLASSEN
=====================================================
*/

/* Für Elementor Widgets */
.kb-anim-fade-up.elementor-widget {
  opacity: 0;
  transform: translateY(var(--anim-distance));
  transition: 
    opacity var(--anim-duration-slow) var(--ease-out),
    transform var(--anim-duration-slow) var(--ease-out);
}

.kb-anim-fade-up.elementor-widget.is-visible {
  opacity: 1;
  transform: translateY(0);
}

.kb-anim-scale.elementor-widget {
  opacity: 0;
  transform: scale(0.9);
  transition: 
    opacity var(--anim-duration-slow) var(--ease-out),
    transform var(--anim-duration-slow) var(--ease-out-back);
}

.kb-anim-scale.elementor-widget.is-visible {
  opacity: 1;
  transform: scale(1);
}


/*
=====================================================
=====================================================
TEXT EFFEKTE & ANIMATIONEN
=====================================================
=====================================================
*/


/*
=====================================================
1. TEXT OUTLINE / STROKE
=====================================================
Nur Kontur, kein Fill - modern für Headlines.
Verwendung: text-outline, text-outline-website etc.
=====================================================
*/

/* Basis Outline */
.text-outline,
.text-outline.elementor-widget .elementor-heading-title,
.text-outline.elementor-widget .elementor-widget-container,
.text-outline.elementor-widget .elementor-widget-container h1,
.text-outline.elementor-widget .elementor-widget-container h2,
.text-outline.elementor-widget .elementor-widget-container h3,
.text-outline.elementor-widget .elementor-widget-container h4,
.text-outline.elementor-widget .elementor-widget-container h5,
.text-outline.elementor-widget .elementor-widget-container h6,
.text-outline.elementor-widget .elementor-widget-container p,
.text-outline.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 1px currentColor;
  -webkit-text-fill-color: transparent;
  color: transparent !important;
}

/* Outline mit Bereichsfarben */
.text-outline-design,
.text-outline-design.elementor-widget .elementor-heading-title,
.text-outline-design.elementor-widget .elementor-widget-container h1,
.text-outline-design.elementor-widget .elementor-widget-container h2,
.text-outline-design.elementor-widget .elementor-widget-container h3,
.text-outline-design.elementor-widget .elementor-widget-container h4,
.text-outline-design.elementor-widget .elementor-widget-container h5,
.text-outline-design.elementor-widget .elementor-widget-container h6,
.text-outline-design.elementor-widget .elementor-widget-container p,
.text-outline-design.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 2px var(--kb-design) !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}

.text-outline-content,
.text-outline-content.elementor-widget .elementor-heading-title,
.text-outline-content.elementor-widget .elementor-widget-container h1,
.text-outline-content.elementor-widget .elementor-widget-container h2,
.text-outline-content.elementor-widget .elementor-widget-container h3,
.text-outline-content.elementor-widget .elementor-widget-container h4,
.text-outline-content.elementor-widget .elementor-widget-container h5,
.text-outline-content.elementor-widget .elementor-widget-container h6,
.text-outline-content.elementor-widget .elementor-widget-container p,
.text-outline-content.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 2px var(--kb-content) !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}

.text-outline-marke,
.text-outline-marke.elementor-widget .elementor-heading-title,
.text-outline-marke.elementor-widget .elementor-widget-container h1,
.text-outline-marke.elementor-widget .elementor-widget-container h2,
.text-outline-marke.elementor-widget .elementor-widget-container h3,
.text-outline-marke.elementor-widget .elementor-widget-container h4,
.text-outline-marke.elementor-widget .elementor-widget-container h5,
.text-outline-marke.elementor-widget .elementor-widget-container h6,
.text-outline-marke.elementor-widget .elementor-widget-container p,
.text-outline-marke.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 2px var(--kb-marke) !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}

.text-outline-kreativbox,
.text-outline-kreativbox.elementor-widget .elementor-heading-title,
.text-outline-kreativbox.elementor-widget .elementor-widget-container h1,
.text-outline-kreativbox.elementor-widget .elementor-widget-container h2,
.text-outline-kreativbox.elementor-widget .elementor-widget-container h3,
.text-outline-kreativbox.elementor-widget .elementor-widget-container h4,
.text-outline-kreativbox.elementor-widget .elementor-widget-container h5,
.text-outline-kreativbox.elementor-widget .elementor-widget-container h6,
.text-outline-kreativbox.elementor-widget .elementor-widget-container p,
.text-outline-kreativbox.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 2px var(--kb-kreativbox) !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}

.text-outline-website,
.text-outline-website.elementor-widget .elementor-heading-title,
.text-outline-website.elementor-widget .elementor-widget-container h1,
.text-outline-website.elementor-widget .elementor-widget-container h2,
.text-outline-website.elementor-widget .elementor-widget-container h3,
.text-outline-website.elementor-widget .elementor-widget-container h4,
.text-outline-website.elementor-widget .elementor-widget-container h5,
.text-outline-website.elementor-widget .elementor-widget-container h6,
.text-outline-website.elementor-widget .elementor-widget-container p,
.text-outline-website.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 2px var(--kb-website) !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}

.text-outline-strategie,
.text-outline-strategie.elementor-widget .elementor-heading-title,
.text-outline-strategie.elementor-widget .elementor-widget-container h1,
.text-outline-strategie.elementor-widget .elementor-widget-container h2,
.text-outline-strategie.elementor-widget .elementor-widget-container h3,
.text-outline-strategie.elementor-widget .elementor-widget-container h4,
.text-outline-strategie.elementor-widget .elementor-widget-container h5,
.text-outline-strategie.elementor-widget .elementor-widget-container h6,
.text-outline-strategie.elementor-widget .elementor-widget-container p,
.text-outline-strategie.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 2px var(--kb-strategie) !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}

.text-outline-somedia,
.text-outline-somedia.elementor-widget .elementor-heading-title,
.text-outline-somedia.elementor-widget .elementor-widget-container h1,
.text-outline-somedia.elementor-widget .elementor-widget-container h2,
.text-outline-somedia.elementor-widget .elementor-widget-container h3,
.text-outline-somedia.elementor-widget .elementor-widget-container h4,
.text-outline-somedia.elementor-widget .elementor-widget-container h5,
.text-outline-somedia.elementor-widget .elementor-widget-container h6,
.text-outline-somedia.elementor-widget .elementor-widget-container p,
.text-outline-somedia.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 2px var(--kb-somedia) !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}

.text-outline-white,
.text-outline-white.elementor-widget .elementor-heading-title,
.text-outline-white.elementor-widget .elementor-widget-container h1,
.text-outline-white.elementor-widget .elementor-widget-container h2,
.text-outline-white.elementor-widget .elementor-widget-container h3,
.text-outline-white.elementor-widget .elementor-widget-container h4,
.text-outline-white.elementor-widget .elementor-widget-container h5,
.text-outline-white.elementor-widget .elementor-widget-container h6,
.text-outline-white.elementor-widget .elementor-widget-container p,
.text-outline-white.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 2px var(--kb-white) !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}

.text-outline-dark,
.text-outline-dark.elementor-widget .elementor-heading-title,
.text-outline-dark.elementor-widget .elementor-widget-container h1,
.text-outline-dark.elementor-widget .elementor-widget-container h2,
.text-outline-dark.elementor-widget .elementor-widget-container h3,
.text-outline-dark.elementor-widget .elementor-widget-container h4,
.text-outline-dark.elementor-widget .elementor-widget-container h5,
.text-outline-dark.elementor-widget .elementor-widget-container h6,
.text-outline-dark.elementor-widget .elementor-widget-container p,
.text-outline-dark.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke: 2px var(--kb-gray-900) !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}

/* Stroke Thickness - für alle Textelemente */
.text-outline-thin,
.text-outline-thin.elementor-widget .elementor-heading-title,
.text-outline-thin.elementor-widget .elementor-widget-container h1,
.text-outline-thin.elementor-widget .elementor-widget-container h2,
.text-outline-thin.elementor-widget .elementor-widget-container h3,
.text-outline-thin.elementor-widget .elementor-widget-container h4,
.text-outline-thin.elementor-widget .elementor-widget-container h5,
.text-outline-thin.elementor-widget .elementor-widget-container h6,
.text-outline-thin.elementor-widget .elementor-widget-container p,
.text-outline-thin.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke-width: 1px !important;
}

.text-outline-thick,
.text-outline-thick.elementor-widget .elementor-heading-title,
.text-outline-thick.elementor-widget .elementor-widget-container h1,
.text-outline-thick.elementor-widget .elementor-widget-container h2,
.text-outline-thick.elementor-widget .elementor-widget-container h3,
.text-outline-thick.elementor-widget .elementor-widget-container h4,
.text-outline-thick.elementor-widget .elementor-widget-container h5,
.text-outline-thick.elementor-widget .elementor-widget-container h6,
.text-outline-thick.elementor-widget .elementor-widget-container p,
.text-outline-thick.elementor-widget .elementor-widget-container span {
  -webkit-text-stroke-width: 3px !important;
}

/* Outline mit Hover Fill */
.text-outline-hover,
.text-outline-hover.elementor-widget .elementor-heading-title,
.text-outline-hover.elementor-widget .elementor-widget-container h1,
.text-outline-hover.elementor-widget .elementor-widget-container h2,
.text-outline-hover.elementor-widget .elementor-widget-container h3,
.text-outline-hover.elementor-widget .elementor-widget-container h4,
.text-outline-hover.elementor-widget .elementor-widget-container h5,
.text-outline-hover.elementor-widget .elementor-widget-container h6,
.text-outline-hover.elementor-widget .elementor-widget-container p,
.text-outline-hover.elementor-widget .elementor-widget-container span {
  transition: -webkit-text-fill-color 0.3s ease;
}

.text-outline-hover:hover,
.text-outline-hover.elementor-widget:hover .elementor-heading-title,
.text-outline-hover.elementor-widget:hover .elementor-widget-container h1,
.text-outline-hover.elementor-widget:hover .elementor-widget-container h2,
.text-outline-hover.elementor-widget:hover .elementor-widget-container h3,
.text-outline-hover.elementor-widget:hover .elementor-widget-container h4,
.text-outline-hover.elementor-widget:hover .elementor-widget-container h5,
.text-outline-hover.elementor-widget:hover .elementor-widget-container h6,
.text-outline-hover.elementor-widget:hover .elementor-widget-container p,
.text-outline-hover.elementor-widget:hover .elementor-widget-container span {
  -webkit-text-fill-color: currentColor !important;
}


/*
=====================================================
5. ANIMATED UNDERLINE
=====================================================
Animierte Unterstreichung bei Hover.
Verwendung: text-underline-grow, text-underline-slide etc.
=====================================================
*/

/* Basis */
[class*="text-underline-"] {
  --underline-color: var(--kb-website);
  --underline-height: 2px;
  position: relative;
  display: inline-block;
  text-decoration: none !important;
}

[class*="text-underline-"]::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  height: var(--underline-height);
  background-color: var(--underline-color);
  transition: all 0.3s ease;
}

/* Grow - von links wachsen */
.text-underline-grow::after {
  width: 0;
}

.text-underline-grow:hover::after {
  width: 100%;
}

/* Slide - von links reinschieben */
.text-underline-slide::after {
  width: 100%;
  transform: scaleX(0);
  transform-origin: left;
}

.text-underline-slide:hover::after {
  transform: scaleX(1);
}

/* Center - von Mitte wachsen */
.text-underline-center::after {
  width: 100%;
  left: 50%;
  transform: translateX(-50%) scaleX(0);
}

.text-underline-center:hover::after {
  transform: translateX(-50%) scaleX(1);
}

/* Underline immer sichtbar, verdickt bei Hover */
.text-underline-thick::after {
  width: 100%;
  height: 1px;
}

.text-underline-thick:hover::after {
  height: var(--underline-height);
}

/* Farb-Varianten */
.text-underline-design { --underline-color: var(--kb-design); }
.text-underline-content { --underline-color: var(--kb-content); }
.text-underline-marke { --underline-color: var(--kb-marke); }
.text-underline-kreativbox { --underline-color: var(--kb-kreativbox); }
.text-underline-website { --underline-color: var(--kb-website); }
.text-underline-strategie { --underline-color: var(--kb-strategie); }
.text-underline-white { --underline-color: var(--kb-white); }
.text-underline-dark { --underline-color: var(--kb-gray-900); }

/* Dicke Varianten */
.text-underline-thin { --underline-height: 1px; }
.text-underline-medium { --underline-height: 3px; }
.text-underline-bold { --underline-height: 4px; }

/* Elementor Support */
.kb-underline-grow.elementor-widget .elementor-heading-title,
.kb-underline-grow.elementor-widget a {
  position: relative;
  display: inline-block;
  text-decoration: none !important;
}

.kb-underline-grow.elementor-widget .elementor-heading-title::after,
.kb-underline-grow.elementor-widget a::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 0;
  height: 2px;
  background-color: var(--kb-website);
  transition: width 0.3s ease;
}

.kb-underline-grow.elementor-widget:hover .elementor-heading-title::after,
.kb-underline-grow.elementor-widget a:hover::after {
  width: 100%;
}


/*
=====================================================
=====================================================
3. SANFTE CSS-ANIMATIONEN (Pulse, Float, Breathe)
=====================================================
=====================================================
Dezente Loop-Animationen für Eye-Catcher.
Funktionieren ohne JavaScript.
=====================================================
*/

/* ===== PULSE - Sanftes Pulsieren ===== */

/* Opacity Pulse - sehr dezent */
.kb-pulse,
.kb-pulse.elementor-widget,
.kb-pulse.elementor-widget .elementor-widget-container {
  animation: kbPulseOpacity 3s ease-in-out infinite;
}

@keyframes kbPulseOpacity {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.85; }
}

/* Scale Pulse - sanftes Größenpulsieren */
.kb-pulse-scale,
.kb-pulse-scale.elementor-widget,
.kb-pulse-scale.elementor-widget .elementor-widget-container {
  animation: kbPulseScale 4s ease-in-out infinite;
}

@keyframes kbPulseScale {
  0%, 100% { transform: scale(1); }
  50% { transform: scale(1.02); }
}

/* Glow Pulse - pulsierender Schatten */
.kb-pulse-glow,
.kb-pulse-glow.elementor-widget .elementor-widget-container {
  animation: kbPulseGlow 3s ease-in-out infinite;
}

@keyframes kbPulseGlow {
  0%, 100% {
    filter: drop-shadow(0 0 0px transparent);
  }
  50% {
    filter: drop-shadow(0 0 15px rgba(255, 255, 255, 0.3));
  }
}

/* Pulse Varianten nach Farbe */
.kb-pulse-glow.glow-design { --pulse-color: rgba(253, 233, 98, 0.4); }
.kb-pulse-glow.glow-content { --pulse-color: rgba(0, 233, 98, 0.4); }
.kb-pulse-glow.glow-marke { --pulse-color: rgba(35, 75, 255, 0.4); }
.kb-pulse-glow.glow-kreativbox { --pulse-color: rgba(229, 31, 117, 0.4); }
.kb-pulse-glow.glow-website { --pulse-color: rgba(130, 33, 216, 0.4); }
.kb-pulse-glow.glow-strategie { --pulse-color: rgba(255, 150, 72, 0.4); }
.kb-pulse-glow.glow-somedia { --pulse-color: rgba(221, 67, 66, 0.4); }

.kb-pulse-glow.glow-design,
.kb-pulse-glow.glow-content,
.kb-pulse-glow.glow-marke,
.kb-pulse-glow.glow-kreativbox,
.kb-pulse-glow.glow-website,
.kb-pulse-glow.glow-strategie,
.kb-pulse-glow.glow-somedia {
  animation: kbPulseGlowColor 3s ease-in-out infinite;
}

@keyframes kbPulseGlowColor {
  0%, 100% { filter: drop-shadow(0 0 0px transparent); }
  50% { filter: drop-shadow(0 0 20px var(--pulse-color)); }
}


/* ===== FLOAT - Schwebeeffekt ===== */

/* Sanftes Schweben nach oben/unten */
.kb-float,
.kb-float.elementor-widget,
.kb-float.elementor-widget .elementor-widget-container {
  animation: kbFloat 5s ease-in-out infinite;
}

@keyframes kbFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-8px); }
}

/* Langsameres Schweben */
.kb-float-slow,
.kb-float-slow.elementor-widget .elementor-widget-container {
  animation: kbFloat 8s ease-in-out infinite;
}

/* Schnelleres Schweben */
.kb-float-fast,
.kb-float-fast.elementor-widget .elementor-widget-container {
  animation: kbFloat 3s ease-in-out infinite;
}

/* Minimales Schweben (sehr dezent) */
.kb-float-subtle,
.kb-float-subtle.elementor-widget .elementor-widget-container {
  animation: kbFloatSubtle 6s ease-in-out infinite;
}

@keyframes kbFloatSubtle {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-4px); }
}

/* Horizontales Schweben */
.kb-float-x,
.kb-float-x.elementor-widget .elementor-widget-container {
  animation: kbFloatX 6s ease-in-out infinite;
}

@keyframes kbFloatX {
  0%, 100% { transform: translateX(0); }
  50% { transform: translateX(8px); }
}

/* Diagonales Schweben */
.kb-float-diagonal,
.kb-float-diagonal.elementor-widget .elementor-widget-container {
  animation: kbFloatDiagonal 7s ease-in-out infinite;
}

@keyframes kbFloatDiagonal {
  0%, 100% { transform: translate(0, 0); }
  25% { transform: translate(4px, -4px); }
  50% { transform: translate(0, -8px); }
  75% { transform: translate(-4px, -4px); }
}


/* ===== BREATHE - Atmeneffekt ===== */

/* Kombiniert Scale + Opacity */
.kb-breathe,
.kb-breathe.elementor-widget,
.kb-breathe.elementor-widget .elementor-widget-container {
  animation: kbBreathe 5s ease-in-out infinite;
}

@keyframes kbBreathe {
  0%, 100% {
    transform: scale(1);
    opacity: 1;
  }
  50% {
    transform: scale(1.015);
    opacity: 0.92;
  }
}

/* Breathe Slow - noch langsamer */
.kb-breathe-slow,
.kb-breathe-slow.elementor-widget .elementor-widget-container {
  animation: kbBreathe 8s ease-in-out infinite;
}


/* ===== SWAY - Sanftes Wiegen ===== */

.kb-sway,
.kb-sway.elementor-widget .elementor-widget-container {
  animation: kbSway 6s ease-in-out infinite;
  transform-origin: center bottom;
}

@keyframes kbSway {
  0%, 100% { transform: rotate(0deg); }
  25% { transform: rotate(1deg); }
  75% { transform: rotate(-1deg); }
}


/* ===== ANIMATION MODIFIERS ===== */

/* Verzögerungen für gestaffelte Animationen */
.kb-anim-delay-1 { animation-delay: 0.2s; }
.kb-anim-delay-2 { animation-delay: 0.4s; }
.kb-anim-delay-3 { animation-delay: 0.6s; }
.kb-anim-delay-4 { animation-delay: 0.8s; }
.kb-anim-delay-5 { animation-delay: 1s; }

/* Pause bei Hover */
.kb-anim-pause-hover:hover,
.kb-anim-pause-hover:hover .elementor-widget-container {
  animation-play-state: paused;
}

/* Reduced Motion - Barrierefreiheit */
@media (prefers-reduced-motion: reduce) {
  .kb-pulse,
  .kb-pulse-scale,
  .kb-pulse-glow,
  .kb-float,
  .kb-float-slow,
  .kb-float-fast,
  .kb-float-subtle,
  .kb-float-x,
  .kb-float-diagonal,
  .kb-breathe,
  .kb-breathe-slow,
  .kb-sway,
  [class*="kb-pulse"],
  [class*="kb-float"],
  [class*="kb-breathe"] {
    animation: none !important;
  }
}


/*
=====================================================
=====================================================
4. GSAP ANIMATIONEN (JavaScript erforderlich)
=====================================================
=====================================================
GSAP muss in WordPress eingebunden werden.
Diese Klassen definieren die Startzustände.
Das JavaScript initialisiert die Animationen.

INSTALLATION:
1. GSAP CDN in WordPress einbinden (functions.php oder Plugin)
2. Das JavaScript am Ende dieser Datei in eine .js Datei kopieren
3. Die .js Datei in WordPress einbinden
=====================================================
*/

/* GSAP Startzustände - Elemente sind initial unsichtbar */
.gsap-fade-up,
.gsap-fade-down,
.gsap-fade-left,
.gsap-fade-right,
.gsap-scale-in,
.gsap-rotate-in {
  opacity: 0;
  visibility: hidden;
}

/* Scroll-getriggerte Elemente */
[data-gsap="fade-up"] { opacity: 0; transform: translateY(40px); }
[data-gsap="fade-down"] { opacity: 0; transform: translateY(-40px); }
[data-gsap="fade-left"] { opacity: 0; transform: translateX(-40px); }
[data-gsap="fade-right"] { opacity: 0; transform: translateX(40px); }
[data-gsap="scale-in"] { opacity: 0; transform: scale(0.9); }
[data-gsap="rotate-in"] { opacity: 0; transform: rotate(-5deg) scale(0.95); }

/* Permanent animierte Elemente (Loop) */
[data-gsap-loop="float"] { }
[data-gsap-loop="pulse"] { }
[data-gsap-loop="breathe"] { }
[data-gsap-loop="sway"] { }

/* Elementor-spezifische Selektoren */
.kb-gsap-float.elementor-widget { }
.kb-gsap-pulse.elementor-widget { }
.kb-gsap-breathe.elementor-widget { }


/*
=====================================================
5. TEXT SHIMMER EFFECT (GSAP)
=====================================================
Animierter Schimmer-Effekt für Text in Kreativbox-Farben.
Verwendet CSS background-clip: text mit GSAP Animation.

Verwendung:
- kb-text-shimmer              → Standard (kreativbox pink)
- kb-text-shimmer-design       → Gelb Schimmer
- kb-text-shimmer-content      → Grün Schimmer
- kb-text-shimmer-marke        → Blau Schimmer
- kb-text-shimmer-kreativbox   → Pink Schimmer
- kb-text-shimmer-website      → Lila Schimmer
- kb-text-shimmer-strategie    → Orange Schimmer
- kb-text-shimmer-somedia      → Rot Schimmer
- kb-text-shimmer-rainbow      → Regenbogen (alle Farben)

Optionale Modifikatoren:
- kb-text-shimmer-slow         → Langsamere Animation
- kb-text-shimmer-fast         → Schnellere Animation
- kb-text-shimmer-hover        → Nur bei Hover animieren
=====================================================
*/

/* Basis Shimmer Styles */
.kb-text-shimmer,
.kb-text-shimmer.elementor-widget .elementor-heading-title,
.kb-text-shimmer.elementor-widget .elementor-widget-container h1,
.kb-text-shimmer.elementor-widget .elementor-widget-container h2,
.kb-text-shimmer.elementor-widget .elementor-widget-container h3,
.kb-text-shimmer.elementor-widget .elementor-widget-container h4,
.kb-text-shimmer.elementor-widget .elementor-widget-container h5,
.kb-text-shimmer.elementor-widget .elementor-widget-container h6,
.kb-text-shimmer.elementor-widget .elementor-widget-container p,
.kb-text-shimmer.elementor-widget .elementor-widget-container span,
[class*="kb-text-shimmer-"].elementor-widget .elementor-heading-title,
[class*="kb-text-shimmer-"].elementor-widget .elementor-widget-container h1,
[class*="kb-text-shimmer-"].elementor-widget .elementor-widget-container h2,
[class*="kb-text-shimmer-"].elementor-widget .elementor-widget-container h3,
[class*="kb-text-shimmer-"].elementor-widget .elementor-widget-container h4,
[class*="kb-text-shimmer-"].elementor-widget .elementor-widget-container h5,
[class*="kb-text-shimmer-"].elementor-widget .elementor-widget-container h6,
[class*="kb-text-shimmer-"].elementor-widget .elementor-widget-container p,
[class*="kb-text-shimmer-"].elementor-widget .elementor-widget-container span {
  --shimmer-color-1: var(--kb-kreativbox);
  --shimmer-color-2: var(--kb-white);
  --shimmer-color-3: var(--kb-kreativbox);
  background: linear-gradient(
    90deg,
    var(--shimmer-color-1) 0%,
    var(--shimmer-color-1) 40%,
    var(--shimmer-color-2) 50%,
    var(--shimmer-color-3) 60%,
    var(--shimmer-color-3) 100%
  );
  background-size: 200% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}

/* Farb-Varianten */
.kb-text-shimmer-design,
.kb-text-shimmer-design.elementor-widget .elementor-heading-title,
.kb-text-shimmer-design.elementor-widget .elementor-widget-container h1,
.kb-text-shimmer-design.elementor-widget .elementor-widget-container h2,
.kb-text-shimmer-design.elementor-widget .elementor-widget-container h3,
.kb-text-shimmer-design.elementor-widget .elementor-widget-container h4,
.kb-text-shimmer-design.elementor-widget .elementor-widget-container h5,
.kb-text-shimmer-design.elementor-widget .elementor-widget-container h6,
.kb-text-shimmer-design.elementor-widget .elementor-widget-container p,
.kb-text-shimmer-design.elementor-widget .elementor-widget-container span {
  --shimmer-color-1: var(--kb-design);
  --shimmer-color-2: var(--kb-white);
  --shimmer-color-3: var(--kb-design);
}

.kb-text-shimmer-content,
.kb-text-shimmer-content.elementor-widget .elementor-heading-title,
.kb-text-shimmer-content.elementor-widget .elementor-widget-container h1,
.kb-text-shimmer-content.elementor-widget .elementor-widget-container h2,
.kb-text-shimmer-content.elementor-widget .elementor-widget-container h3,
.kb-text-shimmer-content.elementor-widget .elementor-widget-container h4,
.kb-text-shimmer-content.elementor-widget .elementor-widget-container h5,
.kb-text-shimmer-content.elementor-widget .elementor-widget-container h6,
.kb-text-shimmer-content.elementor-widget .elementor-widget-container p,
.kb-text-shimmer-content.elementor-widget .elementor-widget-container span {
  --shimmer-color-1: var(--kb-content);
  --shimmer-color-2: var(--kb-white);
  --shimmer-color-3: var(--kb-content);
}

.kb-text-shimmer-marke,
.kb-text-shimmer-marke.elementor-widget .elementor-heading-title,
.kb-text-shimmer-marke.elementor-widget .elementor-widget-container h1,
.kb-text-shimmer-marke.elementor-widget .elementor-widget-container h2,
.kb-text-shimmer-marke.elementor-widget .elementor-widget-container h3,
.kb-text-shimmer-marke.elementor-widget .elementor-widget-container h4,
.kb-text-shimmer-marke.elementor-widget .elementor-widget-container h5,
.kb-text-shimmer-marke.elementor-widget .elementor-widget-container h6,
.kb-text-shimmer-marke.elementor-widget .elementor-widget-container p,
.kb-text-shimmer-marke.elementor-widget .elementor-widget-container span {
  --shimmer-color-1: var(--kb-marke);
  --shimmer-color-2: var(--kb-white);
  --shimmer-color-3: var(--kb-marke);
}

.kb-text-shimmer-kreativbox,
.kb-text-shimmer-kreativbox.elementor-widget .elementor-heading-title,
.kb-text-shimmer-kreativbox.elementor-widget .elementor-widget-container h1,
.kb-text-shimmer-kreativbox.elementor-widget .elementor-widget-container h2,
.kb-text-shimmer-kreativbox.elementor-widget .elementor-widget-container h3,
.kb-text-shimmer-kreativbox.elementor-widget .elementor-widget-container h4,
.kb-text-shimmer-kreativbox.elementor-widget .elementor-widget-container h5,
.kb-text-shimmer-kreativbox.elementor-widget .elementor-widget-container h6,
.kb-text-shimmer-kreativbox.elementor-widget .elementor-widget-container p,
.kb-text-shimmer-kreativbox.elementor-widget .elementor-widget-container span {
  --shimmer-color-1: var(--kb-kreativbox);
  --shimmer-color-2: var(--kb-white);
  --shimmer-color-3: var(--kb-kreativbox);
}

.kb-text-shimmer-website,
.kb-text-shimmer-website.elementor-widget .elementor-heading-title,
.kb-text-shimmer-website.elementor-widget .elementor-widget-container h1,
.kb-text-shimmer-website.elementor-widget .elementor-widget-container h2,
.kb-text-shimmer-website.elementor-widget .elementor-widget-container h3,
.kb-text-shimmer-website.elementor-widget .elementor-widget-container h4,
.kb-text-shimmer-website.elementor-widget .elementor-widget-container h5,
.kb-text-shimmer-website.elementor-widget .elementor-widget-container h6,
.kb-text-shimmer-website.elementor-widget .elementor-widget-container p,
.kb-text-shimmer-website.elementor-widget .elementor-widget-container span {
  --shimmer-color-1: var(--kb-website);
  --shimmer-color-2: var(--kb-white);
  --shimmer-color-3: var(--kb-website);
}

.kb-text-shimmer-strategie,
.kb-text-shimmer-strategie.elementor-widget .elementor-heading-title,
.kb-text-shimmer-strategie.elementor-widget .elementor-widget-container h1,
.kb-text-shimmer-strategie.elementor-widget .elementor-widget-container h2,
.kb-text-shimmer-strategie.elementor-widget .elementor-widget-container h3,
.kb-text-shimmer-strategie.elementor-widget .elementor-widget-container h4,
.kb-text-shimmer-strategie.elementor-widget .elementor-widget-container h5,
.kb-text-shimmer-strategie.elementor-widget .elementor-widget-container h6,
.kb-text-shimmer-strategie.elementor-widget .elementor-widget-container p,
.kb-text-shimmer-strategie.elementor-widget .elementor-widget-container span {
  --shimmer-color-1: var(--kb-strategie);
  --shimmer-color-2: var(--kb-white);
  --shimmer-color-3: var(--kb-strategie);
}

.kb-text-shimmer-somedia,
.kb-text-shimmer-somedia.elementor-widget .elementor-heading-title,
.kb-text-shimmer-somedia.elementor-widget .elementor-widget-container h1,
.kb-text-shimmer-somedia.elementor-widget .elementor-widget-container h2,
.kb-text-shimmer-somedia.elementor-widget .elementor-widget-container h3,
.kb-text-shimmer-somedia.elementor-widget .elementor-widget-container h4,
.kb-text-shimmer-somedia.elementor-widget .elementor-widget-container h5,
.kb-text-shimmer-somedia.elementor-widget .elementor-widget-container h6,
.kb-text-shimmer-somedia.elementor-widget .elementor-widget-container p,
.kb-text-shimmer-somedia.elementor-widget .elementor-widget-container span {
  --shimmer-color-1: var(--kb-somedia);
  --shimmer-color-2: var(--kb-white);
  --shimmer-color-3: var(--kb-somedia);
}

/* Rainbow Shimmer - alle Kreativbox Farben */
.kb-text-shimmer-rainbow,
.kb-text-shimmer-rainbow.elementor-widget .elementor-heading-title,
.kb-text-shimmer-rainbow.elementor-widget .elementor-widget-container h1,
.kb-text-shimmer-rainbow.elementor-widget .elementor-widget-container h2,
.kb-text-shimmer-rainbow.elementor-widget .elementor-widget-container h3,
.kb-text-shimmer-rainbow.elementor-widget .elementor-widget-container h4,
.kb-text-shimmer-rainbow.elementor-widget .elementor-widget-container h5,
.kb-text-shimmer-rainbow.elementor-widget .elementor-widget-container h6,
.kb-text-shimmer-rainbow.elementor-widget .elementor-widget-container p,
.kb-text-shimmer-rainbow.elementor-widget .elementor-widget-container span {
  background: linear-gradient(
    90deg,
    var(--kb-strategie) 0%,
    var(--kb-design) 14%,
    var(--kb-content) 28%,
    var(--kb-marke) 42%,
    var(--kb-website) 56%,
    var(--kb-kreativbox) 70%,
    var(--kb-somedia) 84%,
    var(--kb-strategie) 100%
  );
  background-size: 300% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}


/*
=====================================================
TEXT EFFEKTE - ÜBERSICHT
=====================================================

| Effekt | Klasse | Varianten |
|--------|--------|-----------|
| OUTLINE | text-outline-{farbe} | -thin, -thick, -hover |
| UNDERLINE | text-underline-{typ} | -grow, -slide, -center |

CSS ANIMATIONEN (kein JS):
| Animation | Klasse | Varianten |
|-----------|--------|-----------|
| PULSE | kb-pulse | -scale, -glow |
| FLOAT | kb-float | -slow, -fast, -subtle, -x, -diagonal |
| BREATHE | kb-breathe | -slow |
| SWAY | kb-sway | - |

GSAP ANIMATIONEN (mit JS):
| Trigger | data-gsap="" | Werte |
|---------|--------------|-------|
| Scroll | data-gsap | fade-up, fade-down, fade-left, fade-right, scale-in, rotate-in |
| Loop | data-gsap-loop | float, pulse, breathe, sway |

=====================================================
*/


/*
=====================================================
=====================================================
RAINBOW BORDER BUTTON
=====================================================
=====================================================
Button mit Regenbogen-Farbverlauf auf dem Rahmen.
Alle Bereichsfarben im Gradient.

Verwendung: kb-btn rainbow
Der Rainbow-Button hat das Icon RECHTS und eigene Abstände.
=====================================================
*/

/* Rainbow Button Basis */
.kb-btn.rainbow {
  /* Gradient mit allen Bereichsfarben + Wiederholung für nahtlose Animation */
  --rainbow-gradient: linear-gradient(
    90deg,
    var(--kb-strategie),
    var(--kb-design),
    var(--kb-content),
    var(--kb-marke),
    var(--kb-website),
    var(--kb-kreativbox),
    var(--kb-somedia),
    var(--kb-strategie),
    var(--kb-design),
    var(--kb-content)
  );
  --rainbow-border-width: 4px;
  --btn-bg: var(--kb-white);
  --btn-text: var(--kb-gray-900);
  --btn-ring: rgba(255, 255, 255, 0.1);
  --btn-glow: transparent;
  --icon-fill: var(--kb-gray-900);
}

/* Button Grundstruktur - Icon RECHTS */
.kb-btn.rainbow .elementor-button {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 1rem !important;

  /* Eigene Padding-Logik: links mehr Platz für Text, rechts weniger für Icon */
  padding: 10px 14px 10px 28px !important;
  min-width: 280px;

  position: relative;
  border-radius: 999px !important;
  box-sizing: border-box;

  /* Gradient Border via background-clip Technik */
  border: var(--rainbow-border-width) solid transparent !important;
  background:
    linear-gradient(var(--btn-bg), var(--btn-bg)) padding-box,
    var(--rainbow-gradient) border-box !important;
  background-size: 300% 100%, 300% 100% !important;
  background-position: 0% 50%, 0% 50% !important;

  /* Subtiler innerer Schatten */
  box-shadow:
    0 0 0 1px var(--btn-ring),
    inset 0 0 0 1px rgba(255, 255, 255, 0.06);

  transition:
    transform 0.3s ease,
    box-shadow 0.3s ease,
    background-position 0.8s ease !important;
}

/* Hover: Gradient bewegt sich */
.kb-btn.rainbow .elementor-button:hover {
  background-position: 100% 50%, 100% 50% !important;
  transform: scale(1.02);
  box-shadow:
    0 0 0 1px var(--btn-ring),
    0 0 25px rgba(253, 233, 98, 0.2),
    0 0 25px rgba(130, 33, 216, 0.2),
    0 0 25px rgba(229, 31, 117, 0.2),
    inset 0 0 0 1px rgba(255, 255, 255, 0.08);
}

/* Content Wrapper - Reihenfolge umkehren für Icon rechts */
.kb-btn.rainbow .elementor-button-content-wrapper {
  display: flex !important;
  flex-direction: row-reverse !important;
  align-items: center !important;
  justify-content: space-between !important;
  width: 100% !important;
  gap: 16px !important;
}

/* Icon Container */
.kb-btn.rainbow .elementor-button-icon {
  order: -1;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  background: var(--btn-bg);
  border-radius: 50%;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

.kb-btn.rainbow .elementor-button-icon svg {
  width: 24px;
  height: 24px;
  fill: var(--icon-fill) !important;
}

/* Text */
.kb-btn.rainbow .elementor-button-text {
  flex-grow: 1;
  text-align: left !important;
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 18px;
  line-height: 1.25;
  color: var(--btn-text) !important;
}


/*
=====================================================
RAINBOW VARIANTEN
=====================================================
*/

/* Animierter Rainbow - Gradient läuft dauerhaft */
.kb-btn.rainbow.rainbow-animated .elementor-button {
  animation: rainbowShift 4s linear infinite;
}

@keyframes rainbowShift {
  0% { background-position: 0% 50%, 0% 50%; }
  100% { background-position: 300% 50%, 300% 50%; }
}

/* Dunkler Hintergrund */
.kb-btn.rainbow.rainbow-dark {
  --btn-bg: var(--kb-gray-900);
  --btn-text: var(--kb-white);
  --btn-ring: rgba(255, 255, 255, 0.15);
  --icon-fill: var(--kb-white);
}

.kb-btn.rainbow.rainbow-dark .elementor-button-icon {
  background: var(--kb-gray-800);
}

/* Transparenter / Glass Hintergrund */
.kb-btn.rainbow.rainbow-transparent {
  --btn-bg: rgba(255, 255, 255, 0.08);
  --btn-text: var(--kb-white);
  --icon-fill: var(--kb-white);
}

.kb-btn.rainbow.rainbow-transparent .elementor-button {
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
}

.kb-btn.rainbow.rainbow-transparent .elementor-button-icon {
  background: rgba(255, 255, 255, 0.1);
}

/* Border-Dicke Varianten */
.kb-btn.rainbow.rainbow-thin {
  --rainbow-border-width: 2px;
}

.kb-btn.rainbow.rainbow-thick {
  --rainbow-border-width: 5px;
}

/* Rainbow mit permanentem Glow */
.kb-btn.rainbow.rainbow-glow .elementor-button {
  box-shadow:
    0 0 0 1px var(--btn-ring),
    0 0 20px rgba(253, 233, 98, 0.15),
    0 0 20px rgba(130, 33, 216, 0.15),
    0 0 20px rgba(229, 31, 117, 0.15),
    inset 0 0 0 1px rgba(255, 255, 255, 0.06);
}

.kb-btn.rainbow.rainbow-glow .elementor-button:hover {
  box-shadow:
    0 0 0 1px var(--btn-ring),
    0 0 35px rgba(253, 233, 98, 0.25),
    0 0 35px rgba(130, 33, 216, 0.25),
    0 0 35px rgba(229, 31, 117, 0.25),
    inset 0 0 0 1px rgba(255, 255, 255, 0.1);
}

/* Pulsierender Glow */
.kb-btn.rainbow.rainbow-pulse .elementor-button {
  animation: rainbowPulseGlow 2.5s ease-in-out infinite;
}

@keyframes rainbowPulseGlow {
  0%, 100% {
    box-shadow:
      0 0 0 1px var(--btn-ring),
      0 0 15px rgba(253, 233, 98, 0.1),
      0 0 15px rgba(130, 33, 216, 0.1),
      inset 0 0 0 1px rgba(255, 255, 255, 0.06);
  }
  50% {
    box-shadow:
      0 0 0 1px var(--btn-ring),
      0 0 30px rgba(253, 233, 98, 0.25),
      0 0 30px rgba(130, 33, 216, 0.25),
      0 0 30px rgba(229, 31, 117, 0.2),
      inset 0 0 0 1px rgba(255, 255, 255, 0.1);
  }
}


/*
=====================================================
RAINBOW GRÖSSEN
=====================================================
*/

/* Klein */
.kb-btn.rainbow.rainbow-sm .elementor-button {
  min-width: 200px;
  padding: 8px 10px 8px 20px !important;
}

.kb-btn.rainbow.rainbow-sm .elementor-button-icon {
  width: 40px;
  height: 40px;
}

.kb-btn.rainbow.rainbow-sm .elementor-button-icon svg {
  width: 18px;
  height: 18px;
}

.kb-btn.rainbow.rainbow-sm .elementor-button-text {
  font-size: 15px;
}

/* Groß */
.kb-btn.rainbow.rainbow-lg .elementor-button {
  min-width: 360px;
  padding: 14px 18px 14px 36px !important;
}

.kb-btn.rainbow.rainbow-lg .elementor-button-icon {
  width: 64px;
  height: 64px;
}

.kb-btn.rainbow.rainbow-lg .elementor-button-icon svg {
  width: 28px;
  height: 28px;
}

.kb-btn.rainbow.rainbow-lg .elementor-button-text {
  font-size: 20px;
}


/*
=====================================================
RAINBOW BUTTON - ÜBERSICHT
=====================================================

Basis:
  kb-btn rainbow

WICHTIG: Icon ist RECHTS, eigene Abstände!

Varianten:
  rainbow-animated    → Gradient läuft dauerhaft
  rainbow-dark        → Dunkler Hintergrund
  rainbow-transparent → Glass-Effekt
  rainbow-thin        → 2px Border
  rainbow-thick       → 5px Border
  rainbow-glow        → Permanenter Glow
  rainbow-pulse       → Pulsierender Glow

Größen:
  rainbow-sm          → Kleiner
  rainbow-lg          → Größer

Kombinationen:
  kb-btn rainbow rainbow-animated rainbow-glow
  kb-btn rainbow rainbow-dark rainbow-pulse
  kb-btn rainbow rainbow-transparent rainbow-lg

=====================================================
*/


/*
=====================================================
AMBIENT GLOW - Schwebende Leucht-Kugeln im Hintergrund
=====================================================
Animierte, verschwommene Farbkugeln die sanft durch
den Hintergrund schweben. Perfekt für Hero-Sections.

STRUKTUR IN ELEMENTOR:
  1. Äußerer Container mit class="kb-glow-container"
  2. Innere Divs (HTML-Widget) mit class="kb-glow-ball"

HTML-BEISPIEL (in Elementor HTML-Widget einfügen):
  <div class="kb-glow-ball glow-website"></div>
  <div class="kb-glow-ball glow-kreativbox" style="--ball-delay:-12s;--ball-size:0.35;--ball-speed:25s;"></div>
  <div class="kb-glow-ball glow-marke" style="--ball-delay:-8s;--ball-size:0.3;--ball-speed:18s;"></div>

FARB-VARIANTEN:
  glow-design      → Gelb
  glow-content     → Grün
  glow-marke       → Blau
  glow-kreativbox  → Pink
  glow-website     → Lila
  glow-strategie   → Orange
  glow-somedia     → Rot

ANPASSBARE VARIABLEN (per inline style):
  --ball-delay     → Animations-Verzögerung (z.B. -12s)
  --ball-size      → Größen-Faktor (0.2 bis 0.5)
  --ball-speed     → Animations-Dauer (15s bis 30s)
  --ball-opacity   → Deckkraft (0.3 bis 0.8)
  --ball-blur      → Weichzeichner (8vw bis 15vw)

VARIANTEN-KLASSEN:
  kb-glow-ball-sm      → Kleinere Kugel
  kb-glow-ball-lg      → Größere Kugel
  kb-glow-ball-fast    → Schnellere Animation
  kb-glow-ball-slow    → Langsamere Animation
  kb-glow-ball-intense → Stärker sichtbar
  kb-glow-ball-subtle  → Dezenter
=====================================================
*/

/* Glow Container - für Elementor Sections.
   overflow: visible damit Kinder (Hover-Glows, GSAP-Animationen, ausragende
   Cards) nicht am Section-Rand abgeschnitten werden. Falls Glow-Balls oder
   andere absolute Dekorationen über die Section hinausragen sollen sie das
   selbst per Sizing/Positionierung lösen, nicht über den Container-Clip. */
.kb-glow-container,
.kb-glow-container.e-con {
  position: relative;
  overflow: visible;
}

/* Glow Container für fixen Hintergrund (wie Hero) */
.kb-glow-container-fixed {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100vh;
  overflow: hidden;
  pointer-events: none;
  z-index: 0;
}

/* Basis Glow Ball */
.kb-glow-ball {
  --ball-delay: 0s;
  --ball-size: 0.4;
  --ball-speed: 20s;
  --ball-opacity: 0.5;
  --ball-blur: 10vw;
  --ball-color: var(--kb-website);

  position: absolute;
  top: 0;
  left: 0;

  /* Feste viewport-basierte Größe - löst das 0x0 Problem */
  width: calc(100vw * var(--ball-size));
  height: calc(100vw * var(--ball-size));

  background: radial-gradient(
    circle at center,
    var(--ball-color) 0%,
    transparent 70%
  );
  filter: blur(var(--ball-blur));
  border-radius: 50%;

  opacity: var(--ball-opacity);
  pointer-events: none;
  z-index: 0;

  animation: kbGlowLoop var(--ball-speed) infinite linear;
  animation-delay: var(--ball-delay);
  transform-origin: 50% 50%;
  will-change: transform;
}

/* Alternative: Gradient statt einfarbig */
.kb-glow-ball-gradient {
  background: linear-gradient(
    259deg,
    var(--ball-color) 0%,
    var(--ball-color-secondary, var(--ball-color)) 100%
  );
}

/* Animation Keyframes */
@keyframes kbGlowLoop {
  0% { transform: translate3d(0%, 51%, 0) rotate(0deg); }
  5% { transform: translate3d(8%, 31%, 0) rotate(18deg); }
  10% { transform: translate3d(22%, 13%, 0) rotate(36deg); }
  15% { transform: translate3d(40%, 2%, 0) rotate(54deg); }
  20% { transform: translate3d(46%, 21%, 0) rotate(72deg); }
  25% { transform: translate3d(50%, 47%, 0) rotate(90deg); }
  30% { transform: translate3d(53%, 80%, 0) rotate(108deg); }
  35% { transform: translate3d(59%, 98%, 0) rotate(125deg); }
  40% { transform: translate3d(84%, 89%, 0) rotate(144deg); }
  45% { transform: translate3d(92%, 68%, 0) rotate(162deg); }
  50% { transform: translate3d(99%, 47%, 0) rotate(180deg); }
  55% { transform: translate3d(97%, 21%, 0) rotate(198deg); }
  60% { transform: translate3d(80%, 7%, 0) rotate(216deg); }
  65% { transform: translate3d(68%, 25%, 0) rotate(234deg); }
  70% { transform: translate3d(59%, 41%, 0) rotate(251deg); }
  75% { transform: translate3d(50%, 63%, 0) rotate(270deg); }
  80% { transform: translate3d(38%, 78%, 0) rotate(288deg); }
  85% { transform: translate3d(21%, 92%, 0) rotate(306deg); }
  90% { transform: translate3d(3%, 79%, 0) rotate(324deg); }
  100% { transform: translate3d(0%, 51%, 0) rotate(360deg); }
}

/* Alternative sanftere Animation */
@keyframes kbGlowFloat {
  0%, 100% { transform: translate3d(10%, 20%, 0); }
  25% { transform: translate3d(80%, 10%, 0); }
  50% { transform: translate3d(70%, 80%, 0); }
  75% { transform: translate3d(20%, 70%, 0); }
}

.kb-glow-ball-float {
  animation-name: kbGlowFloat;
  animation-timing-function: ease-in-out;
}


/* ===== BEREICHSFARBEN ===== */

.kb-glow-ball.glow-design,
.glow-design.kb-glow-ball {
  --ball-color: var(--kb-design, #FDE962);
}

.kb-glow-ball.glow-content,
.glow-content.kb-glow-ball {
  --ball-color: var(--kb-content, #00e962);
}

.kb-glow-ball.glow-marke,
.glow-marke.kb-glow-ball {
  --ball-color: var(--kb-marke, #234BFF);
}

.kb-glow-ball.glow-kreativbox,
.glow-kreativbox.kb-glow-ball {
  --ball-color: var(--kb-kreativbox, #e51f75);
}

.kb-glow-ball.glow-website,
.glow-website.kb-glow-ball {
  --ball-color: var(--kb-website, #8221D8);
}

.kb-glow-ball.glow-strategie,
.glow-strategie.kb-glow-ball {
  --ball-color: var(--kb-strategie, #ff9648);
}

.kb-glow-ball.glow-somedia,
.glow-somedia.kb-glow-ball {
  --ball-color: var(--kb-somedia, #DD4342);
}

.kb-glow-ball.glow-white,
.glow-white.kb-glow-ball {
  --ball-color: rgba(255, 255, 255, 0.8);
}


/* ===== GRÖSSEN-VARIANTEN ===== */

.kb-glow-ball-sm,
.kb-glow-ball.ball-sm {
  --ball-size: 0.25;
  --ball-blur: 6vw;
}

.kb-glow-ball-lg,
.kb-glow-ball.ball-lg {
  --ball-size: 0.5;
  --ball-blur: 12vw;
}

.kb-glow-ball-xl,
.kb-glow-ball.ball-xl {
  --ball-size: 0.65;
  --ball-blur: 15vw;
}


/* ===== GESCHWINDIGKEITS-VARIANTEN ===== */

.kb-glow-ball-fast,
.kb-glow-ball.ball-fast {
  --ball-speed: 12s;
}

.kb-glow-ball-slow,
.kb-glow-ball.ball-slow {
  --ball-speed: 30s;
}

.kb-glow-ball-very-slow,
.kb-glow-ball.ball-very-slow {
  --ball-speed: 45s;
}


/* ===== INTENSITÄTS-VARIANTEN ===== */

.kb-glow-ball-intense,
.kb-glow-ball.ball-intense {
  --ball-opacity: 0.7;
  --ball-blur: 8vw;
}

.kb-glow-ball-subtle,
.kb-glow-ball.ball-subtle {
  --ball-opacity: 0.3;
  --ball-blur: 14vw;
}

.kb-glow-ball-very-subtle,
.kb-glow-ball.ball-very-subtle {
  --ball-opacity: 0.2;
  --ball-blur: 18vw;
}


/* ===== VORDEFINIERTE KOMBINATIONEN ===== */

/* Für dunkle Hintergründe - mehrere Kugeln */
.kb-glow-preset-dark .kb-glow-ball:nth-child(1) {
  --ball-size: 0.4;
  --ball-speed: 20s;
  --ball-delay: 0s;
}

.kb-glow-preset-dark .kb-glow-ball:nth-child(2) {
  --ball-size: 0.35;
  --ball-speed: 25s;
  --ball-delay: -12s;
}

.kb-glow-preset-dark .kb-glow-ball:nth-child(3) {
  --ball-size: 0.3;
  --ball-speed: 18s;
  --ball-delay: -8s;
}


/* ===== RESPONSIVE ANPASSUNGEN ===== */

@media (max-width: 767px) {
  .kb-glow-ball {
    --ball-blur: 15vw;
    --ball-opacity: 0.4;
  }

  .kb-glow-ball-intense,
  .kb-glow-ball.ball-intense {
    --ball-opacity: 0.5;
  }
}

/* Reduzierte Bewegung für Barrierefreiheit */
@media (prefers-reduced-motion: reduce) {
  .kb-glow-ball {
    animation-play-state: paused;
    transform: translate3d(50%, 50%, 0);
  }
}


/* ============================================
   SCROLL-TRIGGERED ANIMATIONS
   CSS Classes für scroll-basierte Animationen
   mit animation-timeline: view()
   ============================================ */

/* --- Custom Properties für Animation --- */
@property --kb-scroll-progress {
  syntax: "<number>";
  initial-value: 0;
  inherits: false;
}

@property --kb-rotation-progress {
  syntax: "<number>";
  initial-value: 0;
  inherits: false;
}

@property --kb-radial-progress {
  syntax: "<percentage>";
  initial-value: 0%;
  inherits: false;
}

@property --kb-clip-progress {
  syntax: "<percentage>";
  initial-value: 0%;
  inherits: false;
}


/* ===== FADE & SLIDE ANIMATIONS ===== */

/* Fade In beim Scrollen */
.kb-scroll-fade-in {
  animation: kb-scroll-fade-in linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 50%;
}

@keyframes kb-scroll-fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

/* Fade In von unten */
.kb-scroll-fade-up {
  animation: kb-scroll-fade-up linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 60%;
}

@keyframes kb-scroll-fade-up {
  from {
    opacity: 0;
    transform: translateY(60px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Fade In von links */
.kb-scroll-fade-left {
  animation: kb-scroll-fade-left linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 60%;
}

@keyframes kb-scroll-fade-left {
  from {
    opacity: 0;
    transform: translateX(-60px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* Fade In von rechts */
.kb-scroll-fade-right {
  animation: kb-scroll-fade-right linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 60%;
}

@keyframes kb-scroll-fade-right {
  from {
    opacity: 0;
    transform: translateX(60px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}


/* ===== SCALE ANIMATIONS ===== */

/* Scale Up beim Eintreten */
.kb-scroll-scale-up {
  animation: kb-scroll-scale-up linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 70%;
}

@keyframes kb-scroll-scale-up {
  from {
    opacity: 0;
    transform: scale(0.8);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* Scale Down beim Verlassen */
.kb-scroll-scale-down {
  animation: kb-scroll-scale-down linear both;
  animation-timeline: view();
  animation-range: exit 0% exit 100%;
}

@keyframes kb-scroll-scale-down {
  from {
    opacity: 1;
    transform: scale(1);
  }
  to {
    opacity: 0;
    transform: scale(0.8);
  }
}


/* ===== 3D PERSPECTIVE ANIMATIONS ===== */

/* 3D Rotate X (Kippen von oben) */
.kb-scroll-rotate-x {
  perspective: 1000px;
  transform-style: preserve-3d;
  animation: kb-scroll-rotate-x linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 80%;
}

@keyframes kb-scroll-rotate-x {
  from {
    opacity: 0;
    transform: rotateX(45deg) translateY(30px);
  }
  to {
    opacity: 1;
    transform: rotateX(0deg) translateY(0);
  }
}

/* 3D Rotate Y (Drehen seitlich) */
.kb-scroll-rotate-y {
  perspective: 1000px;
  transform-style: preserve-3d;
  animation: kb-scroll-rotate-y linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 80%;
}

@keyframes kb-scroll-rotate-y {
  from {
    opacity: 0;
    transform: rotateY(-30deg) translateX(-30px);
  }
  to {
    opacity: 1;
    transform: rotateY(0deg) translateX(0);
  }
}

/* 3D Calendar/Card Flip Effekt */
.kb-scroll-flip {
  perspective: 1200px;
  transform-style: preserve-3d;
  animation: kb-scroll-flip linear both;
  animation-timeline: view();
  animation-range: entry 0% cover 50%;
}

@keyframes kb-scroll-flip {
  from {
    opacity: 0;
    transform: rotateX(-90deg) translateZ(100px);
  }
  to {
    opacity: 1;
    transform: rotateX(0deg) translateZ(0);
  }
}


/* ===== CARD FAN EFFECT ===== */

/* Container für gestaffelte Karten */
.kb-scroll-card-fan {
  perspective: 1500px;
  transform-style: preserve-3d;
}

/* Einzelne Karten im Fan-Layout */
.kb-scroll-card-fan > * {
  --card-index: 0;
  --card-count: 5;
  --rotation-base: calc((var(--card-index) - (var(--card-count) - 1) / 2));

  animation: kb-card-fan-in linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 80%;
  transform-origin: center bottom;
}

/* Manuelle Index-Zuweisung (für Browser ohne sibling-index) */
.kb-scroll-card-fan > *:nth-child(1) { --card-index: 0; }
.kb-scroll-card-fan > *:nth-child(2) { --card-index: 1; }
.kb-scroll-card-fan > *:nth-child(3) { --card-index: 2; }
.kb-scroll-card-fan > *:nth-child(4) { --card-index: 3; }
.kb-scroll-card-fan > *:nth-child(5) { --card-index: 4; }
.kb-scroll-card-fan > *:nth-child(6) { --card-index: 5; }
.kb-scroll-card-fan > *:nth-child(7) { --card-index: 6; }
.kb-scroll-card-fan > *:nth-child(8) { --card-index: 7; }

@keyframes kb-card-fan-in {
  from {
    opacity: 0;
    transform: rotateZ(calc(var(--rotation-base) * 15deg)) translateY(100px);
  }
  to {
    opacity: 1;
    transform: rotateZ(calc(var(--rotation-base) * 3deg)) translateY(0);
  }
}


/* ===== STAGGERED ENTRY ===== */

/* Container für gestaffelte Eintritte */
.kb-scroll-stagger {
  --stagger-delay: 0.1s;
}

.kb-scroll-stagger > * {
  animation: kb-stagger-in linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 70%;
}

/* Gestaffelte Verzögerungen */
.kb-scroll-stagger > *:nth-child(1) { animation-delay: calc(var(--stagger-delay) * 0); }
.kb-scroll-stagger > *:nth-child(2) { animation-delay: calc(var(--stagger-delay) * 1); }
.kb-scroll-stagger > *:nth-child(3) { animation-delay: calc(var(--stagger-delay) * 2); }
.kb-scroll-stagger > *:nth-child(4) { animation-delay: calc(var(--stagger-delay) * 3); }
.kb-scroll-stagger > *:nth-child(5) { animation-delay: calc(var(--stagger-delay) * 4); }
.kb-scroll-stagger > *:nth-child(6) { animation-delay: calc(var(--stagger-delay) * 5); }
.kb-scroll-stagger > *:nth-child(7) { animation-delay: calc(var(--stagger-delay) * 6); }
.kb-scroll-stagger > *:nth-child(8) { animation-delay: calc(var(--stagger-delay) * 7); }

@keyframes kb-stagger-in {
  from {
    opacity: 0;
    transform: translateY(40px) scale(0.95);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}


/* ===== CLIP-PATH REVEAL ===== */

/* Reveal von unten */
.kb-scroll-reveal-up {
  animation: kb-reveal-up linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 60%;
}

@keyframes kb-reveal-up {
  from {
    clip-path: inset(100% 0 0 0);
  }
  to {
    clip-path: inset(0 0 0 0);
  }
}

/* Reveal von links */
.kb-scroll-reveal-left {
  animation: kb-reveal-left linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 60%;
}

@keyframes kb-reveal-left {
  from {
    clip-path: inset(0 100% 0 0);
  }
  to {
    clip-path: inset(0 0 0 0);
  }
}

/* Reveal von rechts */
.kb-scroll-reveal-right {
  animation: kb-reveal-right linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 60%;
}

@keyframes kb-reveal-right {
  from {
    clip-path: inset(0 0 0 100%);
  }
  to {
    clip-path: inset(0 0 0 0);
  }
}

/* Reveal circular (von Mitte aus) */
.kb-scroll-reveal-circle {
  animation: kb-reveal-circle linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 70%;
}

@keyframes kb-reveal-circle {
  from {
    clip-path: circle(0% at 50% 50%);
  }
  to {
    clip-path: circle(100% at 50% 50%);
  }
}

/* Reveal diagonal */
.kb-scroll-reveal-diagonal {
  animation: kb-reveal-diagonal linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 70%;
}

@keyframes kb-reveal-diagonal {
  from {
    clip-path: polygon(0 0, 0 0, 0 0);
  }
  to {
    clip-path: polygon(0 0, 200% 0, 0 200%);
  }
}


/* ===== IMAGE MORPH ANIMATIONS ===== */

/* Bild morpht von rund zu eckig */
.kb-scroll-morph-square {
  animation: kb-morph-square linear both;
  animation-timeline: view();
  animation-range: entry 0% cover 50%;
}

@keyframes kb-morph-square {
  from {
    border-radius: 50%;
    transform: scale(0.8);
  }
  to {
    border-radius: var(--kb-radius-lg, 16px);
    transform: scale(1);
  }
}

/* Bild morpht von eckig zu rund */
.kb-scroll-morph-circle {
  animation: kb-morph-circle linear both;
  animation-timeline: view();
  animation-range: entry 0% cover 50%;
}

@keyframes kb-morph-circle {
  from {
    border-radius: var(--kb-radius-lg, 16px);
    transform: scale(0.8);
  }
  to {
    border-radius: 50%;
    transform: scale(1);
  }
}


/* ===== RADIAL PROGRESS ===== */

/* Radial Progress Container */
.kb-scroll-progress-radial {
  --progress-size: 120px;
  --progress-stroke: 8px;
  --progress-color: var(--kb-primary, #0066FF);
  --progress-bg: var(--kb-border-muted, rgba(255,255,255,0.1));

  width: var(--progress-size);
  height: var(--progress-size);
  border-radius: 50%;
  background: conic-gradient(
    var(--progress-color) calc(var(--kb-radial-progress) * 3.6deg),
    var(--progress-bg) calc(var(--kb-radial-progress) * 3.6deg)
  );
  animation: kb-radial-progress linear both;
  animation-timeline: view();
  animation-range: entry 20% cover 80%;
}

.kb-scroll-progress-radial::before {
  content: '';
  position: absolute;
  inset: var(--progress-stroke);
  border-radius: 50%;
  background: var(--kb-bg-primary, #0A0A0A);
}

@keyframes kb-radial-progress {
  from {
    --kb-radial-progress: 0%;
  }
  to {
    --kb-radial-progress: 100%;
  }
}


/* ===== PARALLAX SCROLL ===== */

/* Langsamer Parallax */
.kb-scroll-parallax-slow {
  animation: kb-parallax-slow linear both;
  animation-timeline: view();
  animation-range: entry 0% exit 100%;
}

@keyframes kb-parallax-slow {
  from {
    transform: translateY(-50px);
  }
  to {
    transform: translateY(50px);
  }
}

/* Schneller Parallax */
.kb-scroll-parallax-fast {
  animation: kb-parallax-fast linear both;
  animation-timeline: view();
  animation-range: entry 0% exit 100%;
}

@keyframes kb-parallax-fast {
  from {
    transform: translateY(-100px);
  }
  to {
    transform: translateY(100px);
  }
}


/* ===== BLUR ANIMATIONS ===== */

/* Blur In */
.kb-scroll-blur-in {
  animation: kb-blur-in linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 60%;
}

@keyframes kb-blur-in {
  from {
    opacity: 0;
    filter: blur(20px);
  }
  to {
    opacity: 1;
    filter: blur(0);
  }
}

/* Blur Out beim Verlassen */
.kb-scroll-blur-out {
  animation: kb-blur-out linear both;
  animation-timeline: view();
  animation-range: exit 0% exit 100%;
}

@keyframes kb-blur-out {
  from {
    opacity: 1;
    filter: blur(0);
  }
  to {
    opacity: 0;
    filter: blur(20px);
  }
}


/* ===== ANIMATION MODIFIERS ===== */

/* Langsamere Animation */
.kb-scroll-slow {
  animation-range: entry 0% cover 80% !important;
}

/* Schnellere Animation */
.kb-scroll-fast {
  animation-range: entry 0% entry 40% !important;
}

/* Animation startet später */
.kb-scroll-delay {
  animation-range: entry 20% entry 80% !important;
}

/* Animation bleibt während Sichtbarkeit */
.kb-scroll-hold {
  animation-range: entry 0% exit 0% !important;
}


/* ===== RESPONSIVE & ACCESSIBILITY ===== */

/* Reduzierte Bewegung */
@media (prefers-reduced-motion: reduce) {
  [class*="kb-scroll-"] {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
    filter: none !important;
    clip-path: none !important;
  }
}

/* Mobile: Vereinfachte Animationen */
@media (max-width: 767px) {
  .kb-scroll-card-fan > * {
    animation-range: entry 0% entry 50%;
  }

  .kb-scroll-parallax-slow,
  .kb-scroll-parallax-fast {
    animation: none;
  }

  .kb-scroll-stagger {
    --stagger-delay: 0.05s;
  }
}


/* ============================================
   TEXT REVEAL EFFECTS
   Scroll-basierte Text-Animationen
   ============================================ */

/* ===== TEXT FILL EFFECT ===== */
/* Text füllt sich beim Scrollen mit Farbe */

.kb-text-fill {
  --fill-color: var(--kb-gray-300);
  --fill-color-muted: rgba(182, 182, 182, 0.2);

  color: var(--fill-color-muted);
  background: linear-gradient(to right, var(--fill-color), var(--fill-color)) no-repeat;
  -webkit-background-clip: text;
  background-clip: text;
  background-size: 0%;
  transition: background-size cubic-bezier(.1, .5, .5, 1) 0.5s;
}

/* CSS-only Version mit scroll-timeline */
.kb-text-fill-scroll {
  --fill-color: var(--kb-gray-300);
  --fill-color-muted: rgba(182, 182, 182, 0.2);

  color: var(--fill-color-muted);
  background: linear-gradient(to right, var(--fill-color), var(--fill-color)) no-repeat;
  -webkit-background-clip: text;
  background-clip: text;
  animation: kb-text-fill-anim linear both;
  animation-timeline: view();
  animation-range: entry 30% cover 50%;
}

@keyframes kb-text-fill-anim {
  from {
    background-size: 0%;
  }
  to {
    background-size: 100%;
  }
}

/* Farbvarianten */
.kb-text-fill-white,
.kb-text-fill-scroll.kb-text-fill-white {
  --fill-color: var(--kb-white);
  --fill-color-muted: rgba(255, 255, 255, 0.15);
}

.kb-text-fill-design,
.kb-text-fill-scroll.kb-text-fill-design {
  --fill-color: var(--kb-design);
  --fill-color-muted: rgba(253, 233, 98, 0.15);
}

.kb-text-fill-content,
.kb-text-fill-scroll.kb-text-fill-content {
  --fill-color: var(--kb-content);
  --fill-color-muted: rgba(0, 233, 98, 0.15);
}

.kb-text-fill-marke,
.kb-text-fill-scroll.kb-text-fill-marke {
  --fill-color: var(--kb-marke);
  --fill-color-muted: rgba(35, 75, 255, 0.15);
}

.kb-text-fill-kreativbox,
.kb-text-fill-scroll.kb-text-fill-kreativbox {
  --fill-color: var(--kb-kreativbox);
  --fill-color-muted: rgba(229, 31, 117, 0.15);
}

.kb-text-fill-website,
.kb-text-fill-scroll.kb-text-fill-website {
  --fill-color: var(--kb-website);
  --fill-color-muted: rgba(130, 33, 216, 0.15);
}

.kb-text-fill-strategie,
.kb-text-fill-scroll.kb-text-fill-strategie {
  --fill-color: var(--kb-strategie);
  --fill-color-muted: rgba(255, 150, 72, 0.15);
}

.kb-text-fill-somedia,
.kb-text-fill-scroll.kb-text-fill-somedia {
  --fill-color: var(--kb-somedia);
  --fill-color-muted: rgba(221, 67, 66, 0.15);
}


/* ===== TEXT HOVER REVEAL ===== */
/* Text mit Hover-Effekt - farbiger Overlay clippt auf */

.kb-text-reveal {
  --reveal-bg: var(--kb-kreativbox);
  --reveal-text: var(--kb-gray-900);

  position: relative;
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  cursor: pointer;
}

.kb-text-reveal span {
  position: absolute;
  width: 100%;
  height: 100%;
  left: 0;
  top: 0;
  background-color: var(--reveal-bg);
  color: var(--reveal-text);
  clip-path: polygon(0 50%, 100% 50%, 100% 50%, 0 50%);
  transform-origin: center;
  transition: clip-path cubic-bezier(.1, .5, .5, 1) 0.4s;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  padding: inherit;
}

.kb-text-reveal:hover span {
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
}

/* Hover von unten */
.kb-text-reveal-up span {
  clip-path: polygon(0 100%, 100% 100%, 100% 100%, 0 100%);
}

.kb-text-reveal-up:hover span {
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
}

/* Hover von oben */
.kb-text-reveal-down span {
  clip-path: polygon(0 0, 100% 0, 100% 0, 0 0);
}

.kb-text-reveal-down:hover span {
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
}

/* Farbvarianten für Reveal */
.kb-text-reveal-design {
  --reveal-bg: var(--kb-design);
  --reveal-text: var(--kb-gray-900);
}

.kb-text-reveal-content {
  --reveal-bg: var(--kb-content);
  --reveal-text: var(--kb-gray-900);
}

.kb-text-reveal-marke {
  --reveal-bg: var(--kb-marke);
  --reveal-text: var(--kb-white);
}

.kb-text-reveal-kreativbox {
  --reveal-bg: var(--kb-kreativbox);
  --reveal-text: var(--kb-white);
}

.kb-text-reveal-website {
  --reveal-bg: var(--kb-website);
  --reveal-text: var(--kb-white);
}

.kb-text-reveal-strategie {
  --reveal-bg: var(--kb-strategie);
  --reveal-text: var(--kb-gray-900);
}

.kb-text-reveal-somedia {
  --reveal-bg: var(--kb-somedia);
  --reveal-text: var(--kb-white);
}

.kb-text-reveal-white {
  --reveal-bg: var(--kb-white);
  --reveal-text: var(--kb-gray-900);
}

.kb-text-reveal-dark {
  --reveal-bg: var(--kb-gray-900);
  --reveal-text: var(--kb-white);
}

/* Richtungsvarianten - von links */
.kb-text-reveal-left span {
  clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
}

.kb-text-reveal-left:hover span {
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
}

/* Richtungsvarianten - von rechts */
.kb-text-reveal-right span {
  clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
}

.kb-text-reveal-right:hover span {
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
}

/* Richtungsvarianten - von oben */
.kb-text-reveal-top span {
  clip-path: polygon(0 0, 100% 0, 100% 0, 0 0);
}

.kb-text-reveal-top:hover span {
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
}

/* Richtungsvarianten - von unten */
.kb-text-reveal-bottom span {
  clip-path: polygon(0 100%, 100% 100%, 100% 100%, 0 100%);
}

.kb-text-reveal-bottom:hover span {
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
}

/* ===== ELEMENTOR SPEZIFISCH ===== */
/* Für Elementor Heading Widgets */

.kb-text-reveal.elementor-widget,
.kb-text-reveal.elementor-widget .elementor-widget-container,
.kb-text-reveal.elementor-widget .elementor-heading-title,
[class*="kb-text-reveal-"].elementor-widget,
[class*="kb-text-reveal-"].elementor-widget .elementor-widget-container,
[class*="kb-text-reveal-"].elementor-widget .elementor-heading-title {
  position: relative;
  display: block;
  overflow: hidden;
}

/* Der Reveal-Span für Elementor wird via JavaScript erstellt */
.kb-text-reveal.elementor-widget .kb-reveal-overlay,
[class*="kb-text-reveal-"].elementor-widget .kb-reveal-overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: var(--reveal-bg, var(--kb-website));
  color: var(--reveal-text, var(--kb-gray-900));
  clip-path: polygon(0 50%, 100% 50%, 100% 50%, 0 50%);
  transition: clip-path cubic-bezier(.1, .5, .5, 1) 0.4s;
  display: flex;
  align-items: center;
  justify-content: inherit;
  text-align: inherit;
  padding: inherit;
  pointer-events: none;
  z-index: 1;
  font-size: inherit;
  font-family: inherit;
  font-weight: inherit;
  line-height: inherit;
  letter-spacing: inherit;
}

.kb-text-reveal.elementor-widget:hover .kb-reveal-overlay,
[class*="kb-text-reveal-"].elementor-widget:hover .kb-reveal-overlay {
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
}

/* Elementor Farbvarianten */
.kb-text-reveal-design.elementor-widget .kb-reveal-overlay {
  background-color: var(--kb-design);
  color: var(--kb-gray-900);
}

.kb-text-reveal-content.elementor-widget .kb-reveal-overlay {
  background-color: var(--kb-content);
  color: var(--kb-gray-900);
}

.kb-text-reveal-marke.elementor-widget .kb-reveal-overlay {
  background-color: var(--kb-marke);
  color: var(--kb-white);
}

.kb-text-reveal-kreativbox.elementor-widget .kb-reveal-overlay {
  background-color: var(--kb-kreativbox);
  color: var(--kb-white);
}

.kb-text-reveal-website.elementor-widget .kb-reveal-overlay {
  background-color: var(--kb-website);
  color: var(--kb-white);
}

.kb-text-reveal-strategie.elementor-widget .kb-reveal-overlay {
  background-color: var(--kb-strategie);
  color: var(--kb-gray-900);
}

.kb-text-reveal-somedia.elementor-widget .kb-reveal-overlay {
  background-color: var(--kb-somedia);
  color: var(--kb-white);
}

.kb-text-reveal-white.elementor-widget .kb-reveal-overlay {
  background-color: var(--kb-white);
  color: var(--kb-gray-900);
}

.kb-text-reveal-dark.elementor-widget .kb-reveal-overlay {
  background-color: var(--kb-gray-900);
  color: var(--kb-white);
}

/* Elementor Richtungsvarianten */
.kb-text-reveal-left.elementor-widget .kb-reveal-overlay {
  clip-path: polygon(0 0, 0 0, 0 100%, 0 100%);
}

.kb-text-reveal-right.elementor-widget .kb-reveal-overlay {
  clip-path: polygon(100% 0, 100% 0, 100% 100%, 100% 100%);
}

.kb-text-reveal-top.elementor-widget .kb-reveal-overlay {
  clip-path: polygon(0 0, 100% 0, 100% 0, 0 0);
}

.kb-text-reveal-bottom.elementor-widget .kb-reveal-overlay {
  clip-path: polygon(0 100%, 100% 100%, 100% 100%, 0 100%);
}


/* ===== TEXT LIST WITH DIVIDERS ===== */
/* Wie im Beispiel - Text-Liste mit Trennlinien */

.kb-text-list {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  width: 100%;
}

.kb-text-list-item {
  width: 100%;
  border-bottom: 1px solid var(--kb-gray-800);
  padding: clamp(0.5rem, 1vw, 1rem) 0;
}

.kb-text-list-item:first-child {
  border-top: 1px solid var(--kb-gray-800);
}


/* ===== TEXT HIGHLIGHT (STATIC) ===== */
/* Statische Farbfläche hinter Text mit Padding */
/* Anwendung: .kb-text-highlight-{farbe} auf Inline-Elemente oder Headings */

.kb-text-highlight,
[class*="kb-text-highlight-"] {
  display: inline;
  padding: 0.15em 0.4em;
  border-radius: 0.15em;
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
  transition: background-color 0.3s ease, color 0.3s ease, transform 0.2s ease;
}

/* Padding-Varianten */
.kb-text-highlight-sm,
[class*="kb-text-highlight-"].kb-text-highlight-sm {
  padding: 0.1em 0.25em;
}

.kb-text-highlight-lg,
[class*="kb-text-highlight-"].kb-text-highlight-lg {
  padding: 0.25em 0.6em;
}

.kb-text-highlight-xl,
[class*="kb-text-highlight-"].kb-text-highlight-xl {
  padding: 0.35em 0.8em;
}

/* Farbvarianten. !important auf color, weil das umschließende Widget oft
   .text-white !important trägt und sonst die Highlight-Text-Farbe übersteuert. */
.kb-text-highlight-design {
  background-color: var(--kb-design);
  color: var(--kb-gray-900) !important;
}

.kb-text-highlight-content {
  background-color: var(--kb-content);
  color: var(--kb-gray-900) !important;
}

.kb-text-highlight-marke {
  background-color: var(--kb-marke);
  color: var(--kb-white);
}

.kb-text-highlight-kreativbox {
  background-color: var(--kb-kreativbox);
  /* AA: Weiß auf Pink #e51f75 = 4.38:1 (fail). gray-900 = 4.79:1 ✓
     !important nötig, weil parallel .text-white !important am Element
     sitzen kann (Z. 643). */
  color: var(--kb-gray-900) !important;
}

.kb-text-highlight-website {
  background-color: var(--kb-website);
  color: var(--kb-white);
}

.kb-text-highlight-strategie {
  background-color: var(--kb-strategie);
  /* AA: Weiß auf Orange #ff9648 = 2.16:1 (fail). gray-900 = 8.6:1 ✓
     !important nötig (s. kreativbox-Variante). */
  color: var(--kb-gray-900) !important;
}

.kb-text-highlight-somedia {
  background-color: var(--kb-somedia);
  /* AA: Weiß auf Rot #dd4342 = 4.23:1 (fail). gray-900 = 4.95:1 ✓
     !important nötig, weil parallel .text-white !important am Element
     sitzen kann (Z. 643). */
  color: var(--kb-gray-900) !important;
}

/* Spezifitäts-Override: `.text-white.elementor-widget .elementor-widget-container *`
   (Z. 1160) hat spec 0,3,0 + !important und schlägt damit die 0,1,0-Highlight-Regeln
   oben. Mit 0,4,0 + !important gewinnen wir zurück. */
.text-white.elementor-widget .elementor-widget-container .kb-text-highlight-strategie,
.text-white.elementor-widget .elementor-widget-container .kb-text-highlight-kreativbox,
.text-white.elementor-widget .elementor-widget-container .kb-text-highlight-somedia,
.text-white.elementor-widget .elementor-widget-container .kb-text-highlight-design,
.text-white.elementor-widget .elementor-widget-container .kb-text-highlight-content,
.text-white.elementor-widget .elementor-widget-container .kb-text-highlight-marke {
  color: var(--kb-gray-900) !important;
}

.kb-text-highlight-white {
  background-color: var(--kb-white);
  color: var(--kb-gray-900);
}

.kb-text-highlight-dark {
  background-color: var(--kb-gray-900);
  color: var(--kb-white);
}

/* Transparente/Muted Varianten */
.kb-text-highlight-design-muted {
  background-color: rgba(253, 233, 98, 0.2);
  color: var(--kb-design);
}

.kb-text-highlight-content-muted {
  background-color: rgba(0, 233, 98, 0.2);
  color: var(--kb-content);
}

.kb-text-highlight-marke-muted {
  background-color: rgba(35, 75, 255, 0.2);
  color: var(--kb-marke);
}

.kb-text-highlight-kreativbox-muted {
  background-color: rgba(229, 31, 117, 0.2);
  color: var(--kb-kreativbox);
}

.kb-text-highlight-website-muted {
  background-color: rgba(130, 33, 216, 0.2);
  color: var(--kb-website);
}

.kb-text-highlight-strategie-muted {
  background-color: rgba(255, 150, 72, 0.2);
  color: var(--kb-strategie);
}

.kb-text-highlight-somedia-muted {
  background-color: rgba(221, 67, 66, 0.2);
  color: var(--kb-somedia);
}

/* ===== TEXT HIGHLIGHT HOVER EFFECTS ===== */
/* Einfache Hover-Effekte ohne komplexe Clip-Path Animation */

/* Hover: Farbe intensivieren */
.kb-text-highlight-hover:hover,
[class*="kb-text-highlight-"].kb-text-highlight-hover:hover {
  filter: brightness(1.1);
  transform: scale(1.02);
}

/* Hover: Farbe wechselt zu Muted */
.kb-text-highlight-design.kb-text-highlight-hover-muted:hover {
  background-color: rgba(253, 233, 98, 0.3);
}

.kb-text-highlight-content.kb-text-highlight-hover-muted:hover {
  background-color: rgba(0, 233, 98, 0.3);
}

.kb-text-highlight-marke.kb-text-highlight-hover-muted:hover {
  background-color: rgba(35, 75, 255, 0.3);
}

.kb-text-highlight-kreativbox.kb-text-highlight-hover-muted:hover {
  background-color: rgba(229, 31, 117, 0.3);
}

.kb-text-highlight-website.kb-text-highlight-hover-muted:hover {
  background-color: rgba(130, 33, 216, 0.3);
}

.kb-text-highlight-strategie.kb-text-highlight-hover-muted:hover {
  background-color: rgba(255, 150, 72, 0.3);
}

.kb-text-highlight-somedia.kb-text-highlight-hover-muted:hover {
  background-color: rgba(221, 67, 66, 0.3);
}

/* Hover: Glow-Effekt */
.kb-text-highlight-glow:hover,
[class*="kb-text-highlight-"].kb-text-highlight-glow:hover {
  box-shadow: 0 0 15px currentColor;
}

/* Hover: Underline erscheint */
.kb-text-highlight-underline {
  position: relative;
}

.kb-text-highlight-underline::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0.4em;
  right: 0.4em;
  height: 2px;
  background-color: currentColor;
  transform: scaleX(0);
  transform-origin: right;
  transition: transform 0.3s ease;
}

.kb-text-highlight-underline:hover::after {
  transform: scaleX(1);
  transform-origin: left;
}

/* Hover: Invert - Farben tauschen */
.kb-text-highlight-design.kb-text-highlight-invert:hover {
  background-color: var(--kb-gray-900);
  color: var(--kb-design);
}

.kb-text-highlight-content.kb-text-highlight-invert:hover {
  background-color: var(--kb-gray-900);
  color: var(--kb-content);
}

.kb-text-highlight-marke.kb-text-highlight-invert:hover {
  background-color: var(--kb-white);
  color: var(--kb-marke);
}

.kb-text-highlight-kreativbox.kb-text-highlight-invert:hover {
  background-color: var(--kb-white);
  color: var(--kb-kreativbox);
}

.kb-text-highlight-website.kb-text-highlight-invert:hover {
  background-color: var(--kb-white);
  color: var(--kb-website);
}

.kb-text-highlight-strategie.kb-text-highlight-invert:hover {
  background-color: var(--kb-gray-900);
  color: var(--kb-strategie);
}

.kb-text-highlight-somedia.kb-text-highlight-invert:hover {
  background-color: var(--kb-white);
  color: var(--kb-somedia);
}

/* Hover: Slide-In Background von links */
.kb-text-highlight-slide {
  --slide-bg: var(--kb-gray-900);
  --slide-text: var(--kb-white);
  background: linear-gradient(90deg, var(--slide-bg) 50%, transparent 50%);
  background-size: 200% 100%;
  background-position: 100% 0;
  transition: background-position 0.4s ease, color 0.4s ease;
}

.kb-text-highlight-slide:hover {
  background-position: 0 0;
  color: var(--slide-text);
}

/* Slide Farbvarianten */
.kb-text-highlight-slide-design {
  --slide-bg: var(--kb-design);
  --slide-text: var(--kb-gray-900);
}

.kb-text-highlight-slide-content {
  --slide-bg: var(--kb-content);
  --slide-text: var(--kb-gray-900);
}

.kb-text-highlight-slide-marke {
  --slide-bg: var(--kb-marke);
  --slide-text: var(--kb-white);
}

.kb-text-highlight-slide-kreativbox {
  --slide-bg: var(--kb-kreativbox);
  --slide-text: var(--kb-white);
}

.kb-text-highlight-slide-website {
  --slide-bg: var(--kb-website);
  --slide-text: var(--kb-white);
}

.kb-text-highlight-slide-strategie {
  --slide-bg: var(--kb-strategie);
  --slide-text: var(--kb-gray-900);
}

.kb-text-highlight-slide-somedia {
  --slide-bg: var(--kb-somedia);
  --slide-text: var(--kb-white);
}

.kb-text-highlight-slide-white {
  --slide-bg: var(--kb-white);
  --slide-text: var(--kb-gray-900);
}

.kb-text-highlight-slide-dark {
  --slide-bg: var(--kb-gray-900);
  --slide-text: var(--kb-white);
}

/* Slide Richtungsvarianten */
.kb-text-highlight-slide-right {
  background: linear-gradient(90deg, transparent 50%, var(--slide-bg) 50%);
  background-size: 200% 100%;
  background-position: 0 0;
}

.kb-text-highlight-slide-right:hover {
  background-position: 100% 0;
}

.kb-text-highlight-slide-up {
  background: linear-gradient(180deg, var(--slide-bg) 50%, transparent 50%);
  background-size: 100% 200%;
  background-position: 0 100%;
}

.kb-text-highlight-slide-up:hover {
  background-position: 0 0;
}

.kb-text-highlight-slide-down {
  background: linear-gradient(180deg, transparent 50%, var(--slide-bg) 50%);
  background-size: 100% 200%;
  background-position: 0 0;
}

.kb-text-highlight-slide-down:hover {
  background-position: 0 100%;
}

/* Elementor-Kompatibilität */
.elementor-widget .kb-text-highlight,
.elementor-widget [class*="kb-text-highlight-"],
.elementor-heading-title.kb-text-highlight,
.elementor-heading-title [class*="kb-text-highlight-"] {
  display: inline;
}


/* ===== OFF-CANVAS / POPUP SLIDE ANIMATIONS ===== */
/* CSS-basierte Slide-Animationen für Elementor Off-Canvas und Popups */

/* Keyframes für Slide-Animationen */
@keyframes kb-slide-in-left {
  from {
    opacity: 0;
    transform: translateX(-30px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes kb-slide-in-right {
  from {
    opacity: 0;
    transform: translateX(30px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes kb-slide-in-up {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes kb-slide-in-down {
  from {
    opacity: 0;
    transform: translateY(-30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes kb-slide-out-left {
  from {
    opacity: 1;
    transform: translateX(0);
  }
  to {
    opacity: 0;
    transform: translateX(-30px);
  }
}

@keyframes kb-slide-out-right {
  from {
    opacity: 1;
    transform: translateX(0);
  }
  to {
    opacity: 0;
    transform: translateX(30px);
  }
}

@keyframes kb-fade-slide-in {
  from {
    opacity: 0;
    transform: translateY(20px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* Basis-Klassen für manuelle Anwendung */
.kb-slide-in-left {
  animation: kb-slide-in-left 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

.kb-slide-in-right {
  animation: kb-slide-in-right 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

.kb-slide-in-up {
  animation: kb-slide-in-up 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

.kb-slide-in-down {
  animation: kb-slide-in-down 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* Stagger Delays für Listen/Menüs */
.kb-slide-stagger > *:nth-child(1) { animation-delay: 0.05s; }
.kb-slide-stagger > *:nth-child(2) { animation-delay: 0.1s; }
.kb-slide-stagger > *:nth-child(3) { animation-delay: 0.15s; }
.kb-slide-stagger > *:nth-child(4) { animation-delay: 0.2s; }
.kb-slide-stagger > *:nth-child(5) { animation-delay: 0.25s; }
.kb-slide-stagger > *:nth-child(6) { animation-delay: 0.3s; }
.kb-slide-stagger > *:nth-child(7) { animation-delay: 0.35s; }
.kb-slide-stagger > *:nth-child(8) { animation-delay: 0.4s; }
.kb-slide-stagger > *:nth-child(9) { animation-delay: 0.45s; }
.kb-slide-stagger > *:nth-child(10) { animation-delay: 0.5s; }

/* Elementor Off-Canvas / Popup Trigger */
/* Wenn Off-Canvas geöffnet wird (Elementor fügt Klassen hinzu) */

/* Variante 1: Für Elementor Menu Cart / Off-Canvas Widget */
.elementor-menu-cart--shown .kb-offcanvas-slide,
.elementor-popup-modal .kb-offcanvas-slide,
[data-elementor-open-lightbox] .kb-offcanvas-slide {
  animation: kb-slide-in-right 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* Variante 2: Für Hamburger Menu / Nav Menu Off-Canvas */
.elementor-nav-menu--dropdown.elementor-nav-menu__container .kb-offcanvas-slide,
.elementor-nav-menu--dropdown .kb-offcanvas-slide {
  animation: kb-slide-in-left 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* Standard Popup Modal Animationen */
.elementor-popup-modal.dialog-lightbox-widget .kb-offcanvas-slide {
  animation: kb-fade-slide-in 0.5s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

/* Stagger für Menü-Items im Off-Canvas */
.elementor-nav-menu--dropdown .menu-item.kb-offcanvas-slide-item,
.elementor-popup-modal .menu-item.kb-offcanvas-slide-item {
  opacity: 0;
  animation: kb-slide-in-left 0.4s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards;
}

.elementor-nav-menu--dropdown .menu-item.kb-offcanvas-slide-item:nth-child(1),
.elementor-popup-modal .menu-item.kb-offcanvas-slide-item:nth-child(1) { animation-delay: 0.1s; }
.elementor-nav-menu--dropdown .menu-item.kb-offcanvas-slide-item:nth-child(2),
.elementor-popup-modal .menu-item.kb-offcanvas-slide-item:nth-child(2) { animation-delay: 0.15s; }
.elementor-nav-menu--dropdown .menu-item.kb-offcanvas-slide-item:nth-child(3),
.elementor-popup-modal .menu-item.kb-offcanvas-slide-item:nth-child(3) { animation-delay: 0.2s; }
.elementor-nav-menu--dropdown .menu-item.kb-offcanvas-slide-item:nth-child(4),
.elementor-popup-modal .menu-item.kb-offcanvas-slide-item:nth-child(4) { animation-delay: 0.25s; }
.elementor-nav-menu--dropdown .menu-item.kb-offcanvas-slide-item:nth-child(5),
.elementor-popup-modal .menu-item.kb-offcanvas-slide-item:nth-child(5) { animation-delay: 0.3s; }
.elementor-nav-menu--dropdown .menu-item.kb-offcanvas-slide-item:nth-child(6),
.elementor-popup-modal .menu-item.kb-offcanvas-slide-item:nth-child(6) { animation-delay: 0.35s; }
.elementor-nav-menu--dropdown .menu-item.kb-offcanvas-slide-item:nth-child(7),
.elementor-popup-modal .menu-item.kb-offcanvas-slide-item:nth-child(7) { animation-delay: 0.4s; }
.elementor-nav-menu--dropdown .menu-item.kb-offcanvas-slide-item:nth-child(8),
.elementor-popup-modal .menu-item.kb-offcanvas-slide-item:nth-child(8) { animation-delay: 0.45s; }

/* Universelle Klasse für beliebige Elemente im Off-Canvas */
.kb-offcanvas-animate {
  opacity: 0;
  transform: translateX(-20px);
  transition: opacity 0.4s ease, transform 0.4s ease;
}

.elementor-popup-modal.dialog-widget-content .kb-offcanvas-animate,
.elementor-menu-cart--shown .kb-offcanvas-animate,
body.elementor-popup-open .kb-offcanvas-animate {
  opacity: 1;
  transform: translateX(0);
}

/* Richtungsvarianten */
.kb-offcanvas-animate-right {
  transform: translateX(20px);
}

.kb-offcanvas-animate-up {
  transform: translateY(20px);
}

.kb-offcanvas-animate-down {
  transform: translateY(-20px);
}

body.elementor-popup-open .kb-offcanvas-animate-right,
body.elementor-popup-open .kb-offcanvas-animate-up,
body.elementor-popup-open .kb-offcanvas-animate-down {
  transform: translate(0);
}

/* Stagger Delays für kb-offcanvas-animate */
.kb-offcanvas-animate[data-delay="1"] { transition-delay: 0.1s; }
.kb-offcanvas-animate[data-delay="2"] { transition-delay: 0.15s; }
.kb-offcanvas-animate[data-delay="3"] { transition-delay: 0.2s; }
.kb-offcanvas-animate[data-delay="4"] { transition-delay: 0.25s; }
.kb-offcanvas-animate[data-delay="5"] { transition-delay: 0.3s; }
.kb-offcanvas-animate[data-delay="6"] { transition-delay: 0.35s; }
.kb-offcanvas-animate[data-delay="7"] { transition-delay: 0.4s; }
.kb-offcanvas-animate[data-delay="8"] { transition-delay: 0.45s; }


/* ===== RESPONSIVE ===== */

@media (max-width: 767px) {
  .kb-text-fill,
  .kb-text-fill-scroll {
    transition-duration: 0.3s;
  }

  .kb-text-reveal span {
    transition-duration: 0.3s;
  }
}

@media (prefers-reduced-motion: reduce) {
  .kb-text-fill,
  .kb-text-fill-scroll {
    background-size: 100% !important;
    animation: none !important;
  }

  .kb-text-reveal span {
    clip-path: none !important;
    opacity: 0;
    transition: opacity 0.2s;
  }

  .kb-text-reveal:hover span {
    opacity: 1;
  }
}




/* ============================================================
   KB GLASS NAV – Wrapper + Mobile Hamburger + Overlay
   ============================================================ */

/* Wrapper umschließt Hamburger + Nav. Auf Desktop unsichtbar
   transparent, auf Mobile als slide-in Layer aktiv. */
.kb-nav-wrapper {
  display: contents; /* Auf Desktop: kein eigener Layout-Effekt */
}

/* Overlay (für Mobile-Backdrop & Desktop-Dropdown-Schließer) */
.kb-nav-overlay {
  position: fixed;
  inset: 0;
  z-index: var(--z-nav-overlay);
  background: rgba(16, 20, 23, 0.55);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  opacity: 0;
  pointer-events: none;
  transition: opacity 350ms cubic-bezier(0.22, 1, 0.36, 1);
}
.kb-nav-overlay.is-active {
  opacity: 1;
  pointer-events: auto;
}

/* Hamburger-Button: nur auf Mobile sichtbar */
.kb-nav-hamburger {
  display: none;
  position: fixed;
  top: 24px;
  right: 5%;
  z-index: var(--z-nav-top);
  width: 48px;
  height: 48px;
  padding: 0;
  border: 1px solid rgba(255, 255, 255, 0.25);
  border-radius: 999px;
  background: rgba(16, 20, 23, 0.55);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
  align-items: center;
  justify-content: center;
  gap: 5px;
  flex-direction: column;
  transition: background 200ms ease, border-color 200ms ease;
}

.kb-nav-hamburger__bar {
  display: block;
  width: 22px;
  height: 1.5px;
  background: #fff;
  border-radius: 2px;
  transition: transform 350ms cubic-bezier(0.65, 0, 0.35, 1),
              opacity 200ms ease;
  transform-origin: center;
}

/* Hamburger → X Animation wenn Menü offen */
.is-mobile-open .kb-nav-hamburger__bar:nth-child(1) {
  transform: translateY(6.5px) rotate(45deg);
}
.is-mobile-open .kb-nav-hamburger__bar:nth-child(2) {
  opacity: 0;
}
.is-mobile-open .kb-nav-hamburger__bar:nth-child(3) {
  transform: translateY(-6.5px) rotate(-45deg);
}

/* Body-Scroll-Lock wenn Mobile-Menü offen */
html.kb-nav-locked,
html.kb-nav-locked body {
  overflow: hidden;
}


/* ============================================================
   MOBILE BREAKPOINT (< 1024px)
   ============================================================ */
@media (max-width: 1023px) {

  /* Auf Mobile übernimmt die Tab-Bar (unten) die Navigation komplett –
     das Desktop-Top-Nav, der Hamburger und das Slide-In Panel sind
     alle nicht mehr nötig und werden ausgeblendet. */
  .kb-nav,
  .kb-nav-hamburger {
    display: none !important;
  }

  .kb-nav__indicator {
    display: none;
  }

  /* Items vollbreit, größere Klickfläche */
  .kb-nav__item {
    width: 100%;
  }

  .kb-nav__link {
    width: 100%;
    padding: 14px 16px;
    font-size: 1.15rem;
    border-radius: 12px;
    justify-content: space-between;
  }

  /* Submenu wird zu Akkordeon (kein floating Dropdown) */
  .kb-nav__dropdown {
    position: static !important;
    transform: none !important;
    opacity: 1 !important;
    visibility: visible !important;
    pointer-events: auto;
    width: 100%;
    margin: 0;
    padding: 0;
    background: transparent !important;
    backdrop-filter: none !important;
    border: 0 !important;
    box-shadow: none !important;
    max-height: 0;
    overflow: hidden;
    transition: max-height 400ms cubic-bezier(0.65, 0, 0.35, 1);
  }

  .kb-nav__item.is-open .kb-nav__dropdown {
    max-height: 600px;
  }

  .kb-nav__dropdown-link {
    padding: 12px 16px 12px 32px;
    font-size: 1rem;
    border-radius: 8px;
  }

  /* Chevron rotiert beim Aufklappen */
  .kb-nav__chevron {
    transition: transform 300ms ease;
  }
  .kb-nav__item.is-open .kb-nav__chevron {
    transform: rotate(180deg);
  }

  /* CTA-Item bekommt mehr visuellen Abstand und volle Breite */
  .kb-nav__link--cta {
    margin-top: 24px;
    text-align: center;
    justify-content: center;
  }
}

/* Reduced Motion: keine Slide-Animationen */
@media (prefers-reduced-motion: reduce) {
  .kb-nav,
  .kb-nav__dropdown,
  .kb-nav-hamburger__bar,
  .kb-nav-overlay {
    transition: none !important;
  }
}


/* ============================================================
   HEADER-LOGO Positioning
   ============================================================
   Das Header-Template (kreativbox-header) enthält nur das Logo.
   Damit es vertikal exakt mit der fixed-positionierten .kb-nav
   (top:2rem, height:60px → center y≈62px) fluchtet, fixieren
   wir hier auch den Logo-Container auf gleicher Höhe.
   Logo-Höhe: 38px, vertikal zentriert im 60px-Container.
   ============================================================ */
.kb-section-small.kb-scroll-hide {
  position: fixed !important;
  top: 2rem !important;
  /* Logo bündig zum normalen Section-Content:
     unter ~1556px Viewport sitzen Sections bei 5% Side-Padding,
     darüber bei (100vw − 1400px) / 2 (zentrierter 1400er Frame).
     max() greift automatisch den jeweils größeren Wert. */
  left: max(5%, calc((100vw - var(--kb-content-max, 1400px)) / 2)) !important;
  z-index: var(--z-section-fly); /* knapp unter .kb-nav, damit Dropdowns überlagern */
  height: 60px !important;
  display: inline-flex !important;
  align-items: center !important;
  padding-block: 0 !important;
  padding-inline: 0 !important;
  margin: 0 !important;
  width: auto !important;
  max-width: none !important;
  /* Difference-Blend gehoert hierher, nicht ans Logo selbst:
     der fixed+z-index-Wrapper ist ein eigener Stacking-Context, in dem
     das Logo allein liegt. Erst auf dieser Ebene blendet das Logo gegen
     den Body-Render (Sections, Bilder etc.) und bleibt automatisch lesbar. */
  mix-blend-mode: difference;
}
.kb-section-small.kb-scroll-hide > .e-con-inner {
  height: 100%;
  display: inline-flex;
  align-items: center;
  width: auto;
  padding: 0;
  margin: 0;
}
.kb-section-small.kb-scroll-hide .elementor-widget-theme-site-logo,
.kb-section-small.kb-scroll-hide .elementor-widget-theme-site-logo > .elementor-widget-container,
.kb-section-small.kb-scroll-hide .elementor-widget-theme-site-logo a,
.kb-section-small.kb-scroll-hide .elementor-widget-theme-site-logo img {
  display: block;
  height: 38px !important;
  width: auto !important;
  max-width: none !important;
}

/* Inline-SVG-Logo: nutzt mix-blend-mode: difference, damit es auf jedem
   Hintergrund automatisch lesbar bleibt (weiß auf dunkel, dunkel auf hell).
   Damit entfaellt die hell/dunkel-Umschaltung per .is-dark.
   color bleibt auf #fff fixiert, auch im Hover, sonst kippt der Differenz-Effekt. */
.kb-logo {
  display: inline-block;
  color: #fff;
  line-height: 0;
}
.kb-logo:hover,
.kb-logo:focus,
.kb-logo:focus-visible,
.kb-logo:active,
.kb-logo.is-dark {
  color: #fff;
}
.kb-logo svg {
  display: block;
  height: 38px;
  width: auto;
}
/* Elementor Site-Logo Widget: img-Variante ausblenden, Inline-SVG zeigen */
.elementor-widget-theme-site-logo .kb-logo svg {
  height: 38px;
}

/* Mobile: Logo etwas kleiner, damit es im schmalen Header nicht dominiert. */
@media (max-width: 767px) {
  .kb-logo svg,
  .elementor-widget-theme-site-logo .kb-logo svg {
    height: 28px;
  }
}

/* Mobile: Logo-Container auf gleiche Höhe wie die Kontakt-Pille setzen,
   sonst sitzt das Logo (top:2rem) sichtbar tiefer als die Pille
   (top:12px). Höhe auf 48px anpassen, damit die Mitten fluchten. */
@media (max-width: 1023px) {
  .kb-section-small.kb-scroll-hide {
    top: max(12px, env(safe-area-inset-top, 0px)) !important;
    left: 16px !important;
    height: 48px !important;
  }
}

/* Auto-Hide on Scroll (Wrapper-Klasse, gilt auf allen Breakpoints).
   Wichtig: .kb-nav nutzt translateX(-50%) für Zentrierung. Bei is-hidden
   muss die X-Verschiebung mitgesetzt werden, sonst springt das Nav nach links. */
.kb-nav {
  transition: transform 350ms cubic-bezier(0.65, 0, 0.35, 1);
}
.kb-nav-wrapper.is-hidden .kb-nav {
  transform: translate(-50%, -200%);
}
.kb-nav-wrapper.is-hidden .kb-nav-hamburger {
  transform: translateY(-200%);
  transition: transform 350ms cubic-bezier(0.65, 0, 0.35, 1);
}

/* Helper-Klasse: Element läuft mit Nav-Auto-Hide mit.
   Setze sie an einem beliebigen Widget (z.B. Logo) – beim Scroll-down
   verschwindet es, beim Scroll-up kommt es zurück. Funktioniert über
   die globale body.kb-scroll-hidden Klasse vom Nav-JS. */
.kb-scroll-hide {
  transition:
    opacity 350ms cubic-bezier(0.65, 0, 0.35, 1),
    transform 350ms cubic-bezier(0.65, 0, 0.35, 1);
  /* will-change entfernt: das Logo (Inline-SVG mit currentColor) sitzt hier
     drin und ein Compositing-Layer am Eltern-Element kann sonst SVG-Kanten
     und Text in der Logo-Nähe weichzeichnen. */
}
body.kb-scroll-hidden .kb-scroll-hide {
  opacity: 0;
  transform: translateY(-24px);
  pointer-events: none;
}

/* Mobile: Tab-Bar UNTEN ausblenden beim Scroll nach unten,
   einblenden beim Scroll nach oben */
@media (max-width: 1023px) {
  .kb-tabbar {
    transition: transform 350ms cubic-bezier(0.65, 0, 0.35, 1);
  }
  .kb-nav-wrapper.is-hidden .kb-tabbar {
    transform: translate(-50%, 180%);
  }
}


/* ============================================================
   KB MOBILE TAB-BAR (unten fixiert, < 1024px sichtbar)
   ============================================================ */

/* ============================================================
   KB MOBILE TAB-BAR (Glas-Stil, konsistent zur Desktop-Nav)
   ============================================================ */

.kb-tabbar {
  display: none;
  position: fixed;
  left: 50%;
  right: auto;
  bottom: max(16px, env(safe-area-inset-bottom, 0px));
  transform: translateX(-50%);
  z-index: var(--z-nav);
  padding: 6px;
  width: calc(100% - 32px);
  max-width: 480px;
  border-radius: var(--radius-full, 100vmax);
  /* Glas-Hintergrund analog zur Desktop-Nav.
     Opazität auf 0.88 erhöht, damit Text auch über hellen Page-Inhalten
     verlässlich AAA-Kontrast erreicht (variable Backdrop sonst nicht garantiert). */
  background: rgba(10, 13, 13, 0.88);
  backdrop-filter: blur(20px) saturate(140%);
  -webkit-backdrop-filter: blur(20px) saturate(140%);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.28);
  align-items: stretch;
  justify-content: space-between;
  gap: 2px;
  /* Maskierter Rahmen wie .kb-nav (white oben-links, accent unten-rechts) */
  position: fixed;
}

/* Maskierter Rahmen: Weiß oben-links */
.kb-tabbar::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid hsla(0, 0%, 100%, 0.2);
  mask-image: linear-gradient(135deg, hsla(0,0%,100%,1), hsla(0,0%,100%,0) 50%);
  -webkit-mask-image: linear-gradient(135deg, hsla(0,0%,100%,1), hsla(0,0%,100%,0) 50%);
  pointer-events: none;
  z-index: 0;
}

/* Maskierter Rahmen: Akzent unten-rechts (sehr dezent) */
.kb-tabbar::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid hsla(0, 0%, 100%, 0.08);
  mask-image: linear-gradient(135deg, hsla(0,0%,100%,0) 50%, hsla(0,0%,100%,1));
  -webkit-mask-image: linear-gradient(135deg, hsla(0,0%,100%,0) 50%, hsla(0,0%,100%,1));
  pointer-events: none;
  z-index: 0;
}

@media (max-width: 1023px) {
  .kb-tabbar { display: flex; }
  .kb-nav-hamburger { display: none !important; }
  body { padding-bottom: calc(96px + env(safe-area-inset-bottom, 0px)); }
}

.kb-tabbar__item {
  flex: 1 1 0;
  min-width: 0;
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 4px;
  padding: 10px 8px;
  border: 0;
  background: transparent;
  /* AAA: ~16:1 auf rgba(10,13,13,0.88) Glas-Backdrop, statt vorher ~6.7:1 */
  color: rgba(255, 255, 255, 0.94);
  cursor: pointer;
  text-decoration: none;
  font-family: var(--font-body, 'Avenir', 'Montserrat', sans-serif);
  font-size: 0.82rem;
  /* Vorher 500 (zu dünn). 600 liest auf kleinen Größen klar lesbar */
  font-weight: 600;
  letter-spacing: 0.01em;
  border-radius: var(--radius-full, 100vmax);
  transition: color 300ms cubic-bezier(0.22, 1, 0.36, 1),
              background 300ms cubic-bezier(0.22, 1, 0.36, 1);
  appearance: none;
  -webkit-appearance: none;
  -webkit-tap-highlight-color: transparent;
}

.kb-tabbar__item:hover,
.kb-tabbar__item:focus-visible {
  color: #fff;
  background: hsla(0, 0%, 100%, 0.08);
  outline: none;
}

/* Sichtbarer Fokus-Ring (AAA: Fokus muss deutlich erkennbar sein) */
.kb-tabbar__item:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 2px;
}

.kb-tabbar__item.is-active,
.kb-tabbar__item[aria-current="page"] {
  color: #fff;
  background: hsla(0, 0%, 100%, 0.18);
}

.kb-tabbar__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  /* Icons voll deckend für klare Lesbarkeit */
  opacity: 1;
}

.kb-tabbar__icon svg {
  width: 26px;
  height: 26px;
  display: block;
  stroke-width: 1.5;
}

.kb-tabbar__label {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

/* CTA: weißer Outline-Stil statt Pink, passt zum Theme-CTA-Pattern */
.kb-tabbar__item--cta {
  color: #fff;
  background: hsla(0, 0%, 100%, 0.1);
  flex: 0 1 auto;
  padding: 8px 14px;
}
.kb-tabbar__item--cta:hover,
.kb-tabbar__item--cta:focus-visible,
.kb-tabbar__item--cta.is-active {
  background: hsla(0, 0%, 100%, 0.18);
}


/* ============================================================
   KB BOTTOM-SHEET (Submenu für Tab-Bar Items mit Children)
   ============================================================ */

/* Bottom-Sheet: Glas-Look konsistent mit der Desktop-Dropdown-Spache */
.kb-tabsheet {
  position: fixed;
  left: 16px;
  right: 16px;
  bottom: max(96px, calc(80px + env(safe-area-inset-bottom, 0px)));
  z-index: var(--z-nav);
  display: none;
  background: rgba(16, 20, 20, 0.94);
  backdrop-filter: blur(28px);
  -webkit-backdrop-filter: blur(28px);
  border: 1px solid hsla(0, 0%, 100%, 0.08);
  border-radius: 18px;
  padding: 8px;
  box-shadow:
    0 24px 60px rgba(0, 0, 0, 0.45),
    inset 0 1px 0 hsla(0, 0%, 100%, 0.06);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(8px);
  transition:
    opacity 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    visibility 0s 0.3s;
  max-height: 70vh;
  overflow-y: auto;
  overscroll-behavior: contain;
}

@media (max-width: 1023px) {
  .kb-tabsheet { display: block; }
}

.kb-tabsheet.is-open {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateY(0);
  transition:
    opacity 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    visibility 0s 0s;
}

/* Handle weg – wir öffnen via Tab-Button, nicht per Drag-Geste */
.kb-tabsheet__handle { display: none; }

/* Section-Title diskret als Eyebrow, aber AAA-konform lesbar.
   Element ist <h2>; margin-Reset gegen Default-User-Agent-Style */
.kb-tabsheet .kb-tabsheet__title {
  margin: 0;
  font-family: var(--font-body, 'Avenir', 'Montserrat', sans-serif);
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  /* Vorher 0.4 (~3:1, fiel sogar AA durch). 0.78 erreicht AAA */
  color: rgba(255, 255, 255, 0.78);
  padding: 12px 16px 8px;
}

.kb-tabsheet__list {
  display: flex;
  flex-direction: column;
  gap: 0;
}

/* Links exakt wie .kb-nav__dropdown-link auf Desktop */
.kb-tabsheet__link {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 16px;
  border-radius: 12px;
  /* AAA: helleres Grau (~11:1 auf rgba(16,20,20,0.94)) statt #c4c2c0 */
  color: var(--kb-white, #f3f5f7);
  text-decoration: none;
  font-family: var(--font-body, 'Avenir', 'Montserrat', sans-serif);
  font-size: 1rem;
  font-weight: 500;
  transition: background 0.2s ease, color 0.2s ease;
  -webkit-tap-highlight-color: transparent;
}

.kb-tabsheet__link:focus-visible {
  outline: 2px solid #fff;
  outline-offset: -2px;
  background: hsla(0, 0%, 100%, 0.08);
}

.kb-tabsheet__link svg {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  opacity: 0.4;
  transition: opacity 0.2s ease, transform 0.2s ease;
}

.kb-tabsheet__link:hover svg,
.kb-tabsheet__link:active svg {
  opacity: 0.9;
  transform: translateX(2px);
}

/* Bereichsfarben EXAKT wie auf Desktop (background-tint + colored text) */
.kb-tabsheet__link[data-color="marke"]:hover,
.kb-tabsheet__link[data-color="marke"]:active {
  background: rgba(35, 75, 255, 0.18);
  color: #92abff;
}
.kb-tabsheet__link[data-color="website"]:hover,
.kb-tabsheet__link[data-color="website"]:active {
  background: rgba(130, 33, 216, 0.2);
  color: #c88ef5;
}
.kb-tabsheet__link[data-color="content"]:hover,
.kb-tabsheet__link[data-color="content"]:active {
  background: rgba(0, 233, 98, 0.15);
  color: #6cffb3;
}
.kb-tabsheet__link[data-color="somedia"]:hover,
.kb-tabsheet__link[data-color="somedia"]:active {
  background: rgba(221, 67, 66, 0.18);
  color: #ff9b9a;
}
.kb-tabsheet__link[data-color="strategie"]:hover,
.kb-tabsheet__link[data-color="strategie"]:active {
  background: rgba(255, 150, 72, 0.18);
  color: #ffc78a;
}
.kb-tabsheet__link[data-color="kreativbox"]:hover,
.kb-tabsheet__link[data-color="kreativbox"]:active {
  background: rgba(229, 31, 117, 0.18);
  color: #ff8ec0;
}
.kb-tabsheet__link[data-color="design"]:hover,
.kb-tabsheet__link[data-color="design"]:active {
  background: rgba(253, 233, 98, 0.15);
  color: #fde962;
}

/* Default ohne data-color */
.kb-tabsheet__link:not([data-color]):hover,
.kb-tabsheet__link:not([data-color]):active {
  background: hsla(0, 0%, 100%, 0.08);
  color: var(--kb-white, #fff);
}

.kb-tabsheet__sep {
  height: 1px;
  background: hsla(0, 0%, 100%, 0.06);
  margin: 6px 16px;
}


/* ===== NAV CONTAINER ===== */
.kb-nav {
  /* Neutrale Accent-Fallback-Kette: erst glass-accent, sonst gedämpftes Weiß.
     KEIN Magenta-Fallback, sonst leakt im Editor- oder Inheritance-Kontext
     ungewollt kb-kreativbox in den Indikator und die Diagonal-Border. */
  --accent: var(--glass-accent, hsla(0, 0%, 100%, 0.25));
  position: fixed;
  top: 2rem;
  left: 50%;
  /* 2D-Transform statt translate3d: jede 3D-Transformation (oder
     will-change: transform) zwingt die Kinder in einen GPU-Compositing-Layer,
     in dem Firefox kein Subpixel-Antialiasing macht → Text wirkt unscharf.
     2D-translate erzeugt keinen Compositing-Layer, Text bleibt knackig. */
  transform: translateX(-50%);
  z-index: var(--z-nav);
  display: inline-flex;
  align-items: center;
  gap: 3px;
  height: 60px;
  padding: 6px;
  border-radius: var(--radius-full, 100vmax);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  background: rgba(16, 20, 20, 0.75);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
  overflow: visible;
}
 
/* Maskierter Rahmen – Weiß (oben links) */
.kb-nav::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid hsla(0, 0%, 100%, 0.2);
  mask-image: linear-gradient(135deg, hsla(0,0%,100%,1), hsla(0,0%,100%,0) 50%);
  -webkit-mask-image: linear-gradient(135deg, hsla(0,0%,100%,1), hsla(0,0%,100%,0) 50%);
  pointer-events: none;
  z-index: 0;
}
 
/* Maskierter Rahmen – Akzentfarbe (unten rechts) */
.kb-nav::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid var(--accent);
  mask-image: linear-gradient(135deg, hsla(0,0%,100%,0) 50%, hsla(0,0%,100%,1));
  -webkit-mask-image: linear-gradient(135deg, hsla(0,0%,100%,0) 50%, hsla(0,0%,100%,1));
  pointer-events: none;
  z-index: 0;
}
 
/* ===== SLIDING PILL INDICATOR =====
   Hinweis: dezenter Weiß-Tint plus eigener Backdrop-Blur, damit die Pille
   auch über magenta-/farbintensiven Sections neutral bleibt und sich nicht
   vom Page-Hintergrund einfärbt. !important sichert gegen mögliche
   Elementor-/Theme-Overrides. */
.kb-nav__indicator {
  position: absolute;
  top: 50%;
  left: 6px;
  height: 48px;
  background: rgba(255, 255, 255, 0.08) !important;
  -webkit-backdrop-filter: blur(10px) saturate(0.6) brightness(1.1);
          backdrop-filter: blur(10px) saturate(0.6) brightness(1.1);
  box-shadow: inset 0 1px 0 hsla(0, 0%, 100%, 0.08);
  border-radius: var(--radius-full, 100vmax);
  z-index: 1;
  pointer-events: none;
  transform: translateY(-50%) scaleX(0.95);
  opacity: 0;
  transition-property: width, left, transform, opacity;
  transition-duration: 500ms;
  transition-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
}
 
.kb-nav:hover .kb-nav__indicator,
.kb-nav:focus-within .kb-nav__indicator {
  transform: translateY(-50%) scaleX(1);
  opacity: 1;
}
 
/* ===== NAV ITEMS ===== */
.kb-nav__item {
  position: relative;
  z-index: 2;
}
 
.kb-nav__link {
  display: flex;
  align-items: center;
  gap: 8px;
  height: 48px;
  padding: 0 1.4rem;
  border-radius: var(--radius-full, 100vmax);
  font-family: var(--font-body, 'Avenir', 'Montserrat', sans-serif);
  font-size: 1rem;
  font-weight: 600;
  letter-spacing: 0.01em;
  color: var(--kb-white, #fff);
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  background: none;
  border: none;
  transition: color 0.3s ease;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
}
 
.kb-nav__link:hover,
.kb-nav__link:focus {
  color: var(--kb-white, #fff);
  outline: none;
}
 
/* Chevron */
.kb-nav__chevron {
  width: 14px;
  height: 14px;
  transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1);
  opacity: 0.5;
  flex-shrink: 0;
}
 
.kb-nav__item.is-open .kb-nav__chevron {
  transform: rotate(180deg);
  opacity: 0.8;
}
 
/* Active Page Indicator – dezente Glas-Pille statt Magenta-Punkt.
   Liegt unter den Texten (über dem Nav-Hintergrund) und hat einen sanften
   weißen Tint plus Inset-Highlight, der zum restlichen Glas-Look passt. */
.kb-nav__link.is-active {
  background: hsla(0, 0%, 100%, 0.06);
  box-shadow: inset 0 1px 0 hsla(0, 0%, 100%, 0.06);
  -webkit-backdrop-filter: blur(6px);
          backdrop-filter: blur(6px);
}
.kb-nav__link.is-active:hover,
.kb-nav__link.is-active:focus {
  background: hsla(0, 0%, 100%, 0.1);
}
 
/* ===== DROPDOWN =====
   2D-Transform statt translate3d, damit Firefox keinen GPU-Compositing-Layer
   für die Kinder erzeugt und Subpixel-Antialiasing nutzt (knackiger Text). */
.kb-nav__dropdown {
  position: absolute;
  top: calc(100% + 10px);
  left: 50%;
  transform: translate(-50%, -6px);
  min-width: 260px;
  border-radius: 18px;
  backdrop-filter: blur(28px);
  -webkit-backdrop-filter: blur(28px);
  background: rgba(16, 20, 20, 0.94);
  border: 1px solid hsla(0, 0%, 100%, 0.08);
  box-shadow:
    0 24px 60px rgba(0, 0, 0, 0.45),
    inset 0 1px 0 hsla(0, 0%, 100%, 0.06);
  padding: 8px;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition:
    opacity 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    visibility 0s 0.3s;
}

.kb-nav__item.is-open .kb-nav__dropdown {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translate(-50%, 0);
  transition:
    opacity 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    visibility 0s 0s;
}
 
/* Dropdown Links */
.kb-nav__dropdown-link {
  display: flex;
  align-items: center;
  padding: 12px 16px;
  border-radius: 12px;
  color: var(--kb-gray-300, #c4c2c0);
  text-decoration: none;
  font-family: var(--font-body, 'Avenir', 'Montserrat', sans-serif);
  font-size: 1rem;
  font-weight: 500;
  transition: background 0.2s ease, color 0.2s ease;
  -webkit-tap-highlight-color: transparent;
}
 
/* Farbige Hover pro Bereich */
.kb-nav__dropdown-link[data-color="marke"]:hover,
.kb-nav__dropdown-link[data-color="marke"]:focus {
  background: rgba(35, 75, 255, 0.18);
  color: #92abff;
}
.kb-nav__dropdown-link[data-color="website"]:hover,
.kb-nav__dropdown-link[data-color="website"]:focus {
  background: rgba(130, 33, 216, 0.2);
  color: #c88ef5;
}
.kb-nav__dropdown-link[data-color="content"]:hover,
.kb-nav__dropdown-link[data-color="content"]:focus {
  background: rgba(0, 233, 98, 0.15);
  color: #6cffb3;
}
.kb-nav__dropdown-link[data-color="somedia"]:hover,
.kb-nav__dropdown-link[data-color="somedia"]:focus {
  background: rgba(221, 67, 66, 0.18);
  color: #ff9b9a;
}
.kb-nav__dropdown-link[data-color="strategie"]:hover,
.kb-nav__dropdown-link[data-color="strategie"]:focus {
  background: rgba(255, 150, 72, 0.18);
  color: #ffc78a;
}
.kb-nav__dropdown-link[data-color="kreativbox"]:hover,
.kb-nav__dropdown-link[data-color="kreativbox"]:focus {
  background: rgba(229, 31, 117, 0.18);
  color: #ff8ec0;
}
.kb-nav__dropdown-link[data-color="design"]:hover,
.kb-nav__dropdown-link[data-color="design"]:focus {
  background: rgba(253, 233, 98, 0.15);
  color: #fde962;
}
 
/* Default hover */
.kb-nav__dropdown-link:not([data-color]):hover,
.kb-nav__dropdown-link:not([data-color]):focus {
  background: hsla(0, 0%, 100%, 0.08);
  color: var(--kb-white, #fff);
}
 
/* Separator */
.kb-nav__dropdown-sep {
  height: 1px;
  background: hsla(0, 0%, 100%, 0.06);
  margin: 6px 16px;
}
 
/* CTA Button */
.kb-nav__link--cta {
  background: hsla(0, 0%, 100%, 0.1);
  border: 1px solid hsla(0, 0%, 100%, 0.18);
}
.kb-nav__link--cta:hover {
  background: hsla(0, 0%, 100%, 0.18);
}
 
/* ===== MOBILE ===== */
@media (max-width: 767px) {
  .kb-nav {
    top: auto;
    bottom: 1rem;
    height: 54px;
    gap: 2px;
    padding: 4px;
    max-width: calc(100vw - 2rem);
  }
 
  .kb-nav__link {
    height: 46px;
    padding: 0 1rem;
    font-size: 0.92rem;
    font-weight: 600;
  }
 
  .kb-nav__indicator {
    height: 46px;
  }
 
  /* Dropdown auf Mobile: volle Breite, zentriert */
  .kb-nav__dropdown {
    top: auto;
    bottom: calc(100% + 10px);
    left: 50%;
    transform: translateX(-50%) translateY(6px);
    min-width: 220px;
    width: max-content;
    max-width: calc(100vw - 2rem);
  }
 
  .kb-nav__item.is-open .kb-nav__dropdown {
    transform: translateX(-50%) translateY(0);
  }
 
  .kb-nav__dropdown-link {
    font-size: 0.95rem;
    padding: 12px 14px;
  }
}
 
/* ===== CLICK OVERLAY (schliesst Dropdown bei Klick ausserhalb) ===== */
.kb-nav-overlay {
  display: none;
  position: fixed;
  inset: 0;
  z-index: var(--z-nav-overlay);
}
.kb-nav-overlay.is-active {
  display: block;
}


/*
=====================================================
ELEMENTOR NESTED ACCORDION EXTENSIONS
Erweitert alle Utility-Klassen auf .e-n-accordion
Titel-Elemente (.e-n-accordion-item-title-text)
=====================================================
*/

/* ===== SCHRIFTGRÖSSEN ===== */

.fs-xs.elementor-widget .e-n-accordion-item-title-text { font-size: var(--fs-xs) !important; }
.fs-sm.elementor-widget .e-n-accordion-item-title-text { font-size: var(--fs-sm) !important; }
.fs-base.elementor-widget .e-n-accordion-item-title-text { font-size: var(--fs-base) !important; }
.fs-md.elementor-widget .e-n-accordion-item-title-text { font-size: var(--fs-md) !important; }
.fs-lg.elementor-widget .e-n-accordion-item-title-text { font-size: var(--fs-lg) !important; }
.fs-xl.elementor-widget .e-n-accordion-item-title-text { font-size: var(--fs-xl) !important; }
.fs-xxl.elementor-widget .e-n-accordion-item-title-text { font-size: var(--fs-xxl) !important; }
.fs-xxxl.elementor-widget .e-n-accordion-item-title-text { font-size: var(--fs-xxxl) !important; }


/* ===== SCHRIFTARTEN ===== */

.kb-body.elementor-widget .e-n-accordion-item-title-text,
.kb-body.elementor-widget .e-n-accordion-item-title-header {
  font-family: var(--font-body) !important;
  font-weight: 400 !important;
}

.kb-body-bold.elementor-widget .e-n-accordion-item-title-text,
.kb-body-bold.elementor-widget .e-n-accordion-item-title-header {
  font-family: var(--font-body) !important;
  font-weight: 700 !important;
}

.kb-headline.elementor-widget .e-n-accordion-item-title-text,
.kb-headline.elementor-widget .e-n-accordion-item-title-header {
  font-family: var(--font-headline) !important;
  font-weight: 700 !important;
}


/* ===== TEXTFARBEN ===== */

.text-white.elementor-widget .e-n-accordion-item-title-text,
.text-white.elementor-widget .e-n-accordion-item-title-header { color: var(--kb-white) !important; }

.text-dark.elementor-widget .e-n-accordion-item-title-text,
.text-dark.elementor-widget .e-n-accordion-item-title-header { color: var(--kb-gray-900) !important; }

.text-gray-900.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-gray-900) !important; }
.text-gray-700.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-gray-700) !important; }
.text-gray-500.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-gray-500) !important; }
.text-gray-300.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-gray-300) !important; }
.text-gray-200.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-gray-200) !important; }
.text-gray-100.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-gray-100) !important; }

.text-design.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-design) !important; }
.text-content.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-content) !important; }
.text-marke.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-marke) !important; }
.text-kreativbox.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-kreativbox) !important; }
.text-website.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-website) !important; }
.text-strategie.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-strategie) !important; }
.text-somedia.elementor-widget .e-n-accordion-item-title-text { color: var(--kb-somedia) !important; }


/* ============================================
   ACF PILLS / TAGS – Metadaten / Randinfo
   ============================================ */

.kb-pills {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  align-items: center;
}

.kb-pill {
  display: inline-flex;
  align-items: center;
  padding: 0.4em 0.75em 0.28em;
  border-radius: var(--radius-full);
  font-family: var(--font-body);
  font-size: var(--fs-xs);
  font-weight: 400;
  letter-spacing: 0.03em;
  line-height: 1.25;
  white-space: nowrap;
  user-select: none;
  transition:
    opacity 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    background-color 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    border-color 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    color 0.4s cubic-bezier(0.22, 1, 0.36, 1);

  /* Fallback: outline dark */
  background: transparent;
  color: var(--kb-gray-900);
  border: 1px solid var(--kb-gray-300);
}

/* ===== OUTLINE DARK (Default) ===== */
.kb-pill--outline-dark {
  background: transparent;
  color: var(--kb-gray-800);
  border: 1px solid var(--kb-gray-300);
}
.kb-pill--outline-dark:hover {
  border-color: var(--kb-gray-700);
  color: var(--kb-gray-900);
}

/* ===== OUTLINE LIGHT (für dunkle BGs UND helle Bilder) =====
   Kein backdrop-filter: würde den zoomenden BG-Layer der Case-Card
   samplen und einen Doppler/Halo erzeugen. Stattdessen subtiler
   dunkler Tint + Text-Shadow für Legibilität auf hellen Bildern.
   Transition auf den 1.2s Card-Zoom synchronisiert. */
.kb-pill--outline-light {
  background: rgba(16, 20, 23, 0.28);
  color: var(--kb-white);
  border: 1px solid hsla(0, 0%, 100%, 0.2);
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
  opacity: 1;
  transition:
    background-color 1.2s cubic-bezier(0.22, 1, 0.36, 1),
    border-color 1.2s cubic-bezier(0.22, 1, 0.36, 1);
}
.kb-pill--outline-light:hover {
  background: rgba(16, 20, 23, 0.42);
  border-color: hsla(0, 0%, 100%, 0.35);
}

/* ===== SOLID DARK ===== */
.kb-pill--solid-dark {
  background: var(--kb-gray-900);
  color: var(--kb-white);
  border: 1px solid var(--kb-gray-900);
}
.kb-pill--solid-dark:hover {
  background: var(--kb-gray-800);
  border-color: var(--kb-gray-800);
}

/* ===== SOLID LIGHT ===== */
.kb-pill--solid-light {
  background: var(--kb-white);
  color: var(--kb-gray-900);
  border: 1px solid var(--kb-white);
}
.kb-pill--solid-light:hover {
  background: var(--kb-gray-100);
  border-color: var(--kb-gray-100);
}


/* ============================================
   KB CASE FILTER BAR
   Stilistisch an kb-nav angelehnt, eingebettet
   ============================================ */

.kb-filter {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 2px;
  padding: 6px;
  border-radius: var(--radius-full);
  backdrop-filter: blur(22px);
  -webkit-backdrop-filter: blur(22px);
  background: rgba(16, 20, 20, 0.85);
  border: 1px solid hsla(0, 0%, 100%, 0.08);
  box-shadow:
    0 12px 40px rgba(0, 0, 0, 0.25),
    inset 0 1px 0 hsla(0, 0%, 100%, 0.06);
  /* Filter liegt unter Nav/Tab-Bar (--z-nav), aber über dem Click-outside-
     Overlay (--z-dropdown-bg), damit die Dropdown-Optionen klickbar sind. */
  z-index: var(--z-dropdown);
}

.kb-filter__item { position: relative; }

.kb-filter__link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 44px;
  padding: 0 1.3rem;
  border-radius: var(--radius-full);
  background: transparent;
  border: none;
  cursor: pointer;
  color: var(--kb-white);
  font-family: var(--font-body);
  font-size: 1rem;
  font-weight: 600;
  letter-spacing: 0.01em;
  white-space: nowrap;
  transition: background 0.25s ease, color 0.25s ease;
  -webkit-tap-highlight-color: transparent;
}

.kb-filter__link:hover,
.kb-filter__item.is-open .kb-filter__link,
.kb-filter__item.has-active .kb-filter__link {
  background: hsla(0, 0%, 100%, 0.08);
}

.kb-filter__count {
  display: none;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  background: var(--kb-kreativbox);
  color: var(--kb-white);
  border-radius: var(--radius-full);
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 20px;
  text-align: center;
}
.kb-filter__item.has-active .kb-filter__count { display: inline-block; }

.kb-filter__chevron {
  width: 12px;
  height: 12px;
  opacity: 0.5;
  transition: transform 0.3s cubic-bezier(0.22, 1, 0.36, 1);
  flex-shrink: 0;
}
.kb-filter__item.is-open .kb-filter__chevron {
  transform: rotate(180deg);
  opacity: 0.85;
}

/* Dropdown */
.kb-filter__dropdown {
  position: absolute;
  top: calc(100% + 10px);
  left: 0;
  min-width: 280px;
  max-height: 440px;
  overflow-y: auto;
  padding: 8px;
  border-radius: 18px;
  backdrop-filter: blur(28px);
  -webkit-backdrop-filter: blur(28px);
  background: rgba(16, 20, 20, 0.96);
  border: 1px solid hsla(0, 0%, 100%, 0.08);
  box-shadow:
    0 24px 60px rgba(0, 0, 0, 0.45),
    inset 0 1px 0 hsla(0, 0%, 100%, 0.06);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(-6px);
  transition:
    opacity 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    visibility 0s 0.3s;
  z-index: 1;
}
.kb-filter__item.is-open .kb-filter__dropdown {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateY(0);
  transition:
    opacity 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    visibility 0s 0s;
}

.kb-filter__dropdown::-webkit-scrollbar { width: 6px; }
.kb-filter__dropdown::-webkit-scrollbar-thumb {
  background: hsla(0, 0%, 100%, 0.15);
  border-radius: 4px;
}
.kb-filter__dropdown::-webkit-scrollbar-track { background: transparent; }

/* Option Row */
.kb-filter__option {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border-radius: 10px;
  cursor: pointer;
  color: var(--kb-gray-300);
  font-family: var(--font-body);
  font-size: 0.95rem;
  font-weight: 500;
  transition: background 0.2s ease, color 0.2s ease;
  -webkit-tap-highlight-color: transparent;
  position: relative;
  user-select: none;
}
.kb-filter__option * {
  pointer-events: none;
}
.kb-filter__checkbox {
  pointer-events: auto;
}
.kb-filter__option:hover {
  background: hsla(0, 0%, 100%, 0.06);
  color: var(--kb-white);
}
.kb-filter__option.is-checked {
  color: var(--kb-white);
}

/* Custom Checkbox */
.kb-filter__checkbox {
  appearance: none;
  -webkit-appearance: none;
  width: 18px;
  height: 18px;
  border: 1.5px solid hsla(0, 0%, 100%, 0.3);
  border-radius: 5px;
  margin: 0;
  cursor: pointer;
  position: relative;
  flex-shrink: 0;
  transition: all 0.2s ease;
  background: transparent;
}
.kb-filter__checkbox:hover {
  border-color: hsla(0, 0%, 100%, 0.6);
}
.kb-filter__checkbox:checked {
  background: var(--kb-kreativbox);
  border-color: var(--kb-kreativbox);
}
.kb-filter__checkbox:checked::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 5px;
  width: 4px;
  height: 8px;
  border: solid var(--kb-white);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

.kb-filter__option-text { flex: 1; }
.kb-filter__option-count {
  font-size: 0.78rem;
  font-weight: 400;
  color: var(--kb-gray-500);
  opacity: 0.7;
  font-variant-numeric: tabular-nums;
}

/* Reset Button */
.kb-filter__reset[hidden] { display: none !important; }

.kb-filter__reset {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  height: 38px;
  padding: 0 1rem;
  margin-left: 6px;
  border-radius: var(--radius-full);
  background: hsla(0, 0%, 100%, 0.06);
  border: 1px solid hsla(0, 0%, 100%, 0.1);
  color: hsla(0, 0%, 100%, 0.75);
  font-family: var(--font-body);
  font-size: 0.88rem;
  font-weight: 500;
  cursor: pointer;
  transition: color 0.2s ease, background 0.2s ease, border-color 0.2s ease;
}
.kb-filter__reset:hover {
  color: var(--kb-white);
  background: hsla(0, 0%, 100%, 0.12);
  border-color: hsla(0, 0%, 100%, 0.2);
}
.kb-filter__reset svg {
  width: 10px;
  height: 10px;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  fill: none;
}

/* Overlay (click-outside close).
   Liegt UNTER dem Filter-Container, damit Klicks auf die Optionen die Labels
   treffen und nicht das Overlay. */
.kb-filter-overlay {
  display: none;
  position: fixed;
  inset: 0;
  z-index: var(--z-dropdown-bg);
}
.kb-filter-overlay.is-active { display: block; }

/* Hidden State für Loop-Items */
.kb-filter-hidden { display: none !important; }

/* Mobile */
@media (max-width: 767px) {
  .kb-filter {
    flex-wrap: wrap;
    max-width: 100%;
  }
  .kb-filter__link {
    height: 40px;
    padding: 0 1rem;
    font-size: 0.9rem;
  }
  .kb-filter__dropdown {
    position: fixed;
    top: auto;
    bottom: 0;
    left: 0;
    right: 0;
    min-width: 100%;
    max-height: 72vh;
    border-radius: 20px 20px 0 0;
    padding: 16px;
  }
  .kb-filter__option { padding: 14px 12px; font-size: 1rem; }
  .kb-filter__option-count { font-size: 0.85rem; }
}


/*
=====================================================
CASE-CARDS – Background-Hover-System
=====================================================
Cinematic Hover-Varianten für Case-Karten (Loop Grid).
Standard ist "cinematic" (Ken Burns + Saturation Lift).
Optional via Modifier-Klassen am Loop-Container austauschen:
  .kb-cards-cinematic  (Default)
  .kb-cards-tint       (Color-Wash verschwindet)
  .kb-cards-reveal     (Diagonaler Curtain-Reveal)
=====================================================
*/

/* Frame, Clipping & Pseudo-Layer-Setup wirken NUR, wenn eines der Hover-Systeme
   am Loop-Container explizit aktiviert wurde (.kb-cards-tint / .kb-cards-reveal
   / .kb-cards-cinematic). Ohne Modifier bleiben Case-Cards "flat" – kein
   ungewollter Radius oder Clipping bei Slidern und Standard-Grids. */
:is(.kb-cards-tint, .kb-cards-reveal, .kb-cards-cinematic) .e-loop-item.type-case .e-con-full,
:is(.kb-cards-tint, .kb-cards-reveal, .kb-cards-cinematic) .e-loop-item.type-case .e-con.e-parent {
  position: relative;
  overflow: hidden;
  background-size: cover !important;
  background-position: center !important;
}

/* Inhalte (alle direkten Kinder) liegen ÜBER eventuellen Pseudo-Layern */
:is(.kb-cards-tint, .kb-cards-reveal, .kb-cards-cinematic) .e-loop-item.type-case .e-con-full > *,
:is(.kb-cards-tint, .kb-cards-reveal, .kb-cards-cinematic) .e-loop-item.type-case .e-con.e-parent > * {
  position: relative;
  z-index: 1;
}

/* Loop-Item Frame: Clipping + Standard-Radius nur unter Modifier-Klasse */
:is(.kb-cards-tint, .kb-cards-reveal, .kb-cards-cinematic) .e-loop-item.type-case {
  overflow: hidden;
  border-radius: 32px;
}


/*
-----------------------------------------------------
VARIANTE 2: COLOR-WASH (Modifier)
Initial liegt ein farbiger Vorhang (Brand-Akzent) über
dem Bild – verschwindet beim Hover. Wirkt wie eine
"Enthüllung" der Story.
Aktivieren: Klasse .kb-cards-tint am Loop Grid Container.
-----------------------------------------------------
*/
.kb-cards-tint .e-loop-item.type-case .e-con-full::after,
.kb-cards-tint .e-loop-item.type-case .e-con.e-parent::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(
    135deg,
    color-mix(in srgb, var(--accent, var(--kb-gray-900)) 70%, transparent),
    color-mix(in srgb, var(--accent, var(--kb-gray-900)) 30%, transparent)
  );
  mix-blend-mode: multiply;
  opacity: 1;
  pointer-events: none;
  transition: opacity 0.6s ease;
  z-index: 1;
}
.kb-cards-tint .e-loop-item.type-case:hover .e-con-full::after,
.kb-cards-tint .e-loop-item.type-case:hover .e-con.e-parent::after {
  opacity: 0;
}
/* Sicherstellen, dass Inhalte über dem Tint liegen */
.kb-cards-tint .e-loop-item.type-case .e-con-full > *,
.kb-cards-tint .e-loop-item.type-case .e-con.e-parent > * {
  position: relative;
  z-index: 2;
}


/*
-----------------------------------------------------
VARIANTE 3: DIAGONAL CURTAIN-REVEAL (Modifier)
Eine schwarze Diagonale (von oben-rechts nach unten-links)
fährt beim Hover heraus. Sehr filmisch.
Aktivieren: Klasse .kb-cards-reveal am Loop Grid Container.
-----------------------------------------------------
*/
.kb-cards-reveal .e-loop-item.type-case .e-con-full::before,
.kb-cards-reveal .e-loop-item.type-case .e-con.e-parent::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: linear-gradient(
    135deg,
    rgba(0, 0, 0, 0.55) 0%,
    rgba(0, 0, 0, 0.35) 50%,
    rgba(0, 0, 0, 0.55) 100%
  );
  pointer-events: none;
  transition: transform 0.8s cubic-bezier(0.77, 0, 0.175, 1), opacity 0.6s ease;
  z-index: 1;
}
.kb-cards-reveal .e-loop-item.type-case:hover .e-con-full::before,
.kb-cards-reveal .e-loop-item.type-case:hover .e-con.e-parent::before {
  transform: translate(110%, -110%);
  opacity: 0;
}
.kb-cards-reveal .e-loop-item.type-case .e-con-full > *,
.kb-cards-reveal .e-loop-item.type-case .e-con.e-parent > * {
  position: relative;
  z-index: 2;
}


/* Reduced Motion respektieren */
@media (prefers-reduced-motion: reduce) {
  .e-loop-item.type-case .e-con-full,
  .e-loop-item.type-case .e-con.e-parent,
  .e-loop-item.type-case {
    transition: none !important;
    background-size: cover !important;
    filter: none !important;
    transform: none !important;
  }
}

/* ============================================================
   CASE-CARD BACKGROUND DEFAULT
   ============================================================
   Elementor setzt background-image per Inline-<style>-Block direkt im
   Loop-Markup (loop-dynamic-256), die background-size:cover Regel liegt
   aber in der externen post-1414.css. Race-Condition beim ersten Render:
   Bild ist da, cover noch nicht → Bild zeigt Original-Pixelgröße.

   Theme-CSS lädt deterministisch früh und sichert hier das Default-Verhalten
   für ALLE Case-Cards ab. Damit gibt's nie ein nicht-cover-gerendertes Bild,
   egal ob in Loop-Grid, Carousel oder Single-View. */
.e-loop-item.type-case > .e-con,
.e-loop-item.type-case > .e-con-full,
.e-loop-item.type-case > .e-con.e-parent {
  background-size: cover;
  background-position: center center;
  background-repeat: no-repeat;
}


/*
=====================================================
TEAM-CARDS – Editorial-Style mit B/W → Color Hover
=====================================================
Längliches Hochformat. Name oben groß, Position klein.
Bild ist standardmäßig grayscale + dramatischer Bottom-Glow
(Akzentfarbe aus erstem Bereich-Term der Person), gewinnt
beim Hover Farbe – Glow verschwindet (Bild bringt Farbe selbst).
Custom-Cursor-Badge mit Fakt + Bereich-Pills folgt der Maus.
*/

/* Akzent-Variable pro Person: aus erstem Bereich-Term */
.kb-team-accent-marke           { --team-accent: var(--kb-marke); }
.kb-team-accent-design          { --team-accent: var(--kb-design); }
.kb-team-accent-website         { --team-accent: var(--kb-website); }
.kb-team-accent-content-creation{ --team-accent: var(--kb-content); }
.kb-team-accent-social-media    { --team-accent: var(--kb-somedia); }
.kb-team-accent-strategie       { --team-accent: var(--kb-strategie); }
/* Fallback wenn kein Bereich gesetzt */
.kb-team-card                   { --team-accent: var(--kb-kreativbox); }

.kb-team-card {
  position: relative;
}

/* Hidden Data-Container – wird von JS ausgelesen, niemals sichtbar */
.kb-team-card .kb-team-data,
.kb-team-card .elementor-widget-html:has(.kb-team-data) {
  display: none !important;
}

.kb-team-card .kb-team-img-wrap {
  position: relative;
  overflow: hidden;
  border-radius: 24px;
  aspect-ratio: 4 / 5;
  background-color: rgba(255, 255, 255, 0.04);
  isolation: isolate;            /* eigener Stacking-Context für blend-modes */
}

/* Höhen-Enforcement: alle Inner-Container des Image-Widgets füllen die Card */
.kb-team-card .kb-team-img-wrap .elementor-widget-image,
.kb-team-card .kb-team-img-wrap .elementor-widget-image .elementor-widget-container,
.kb-team-card .kb-team-img-wrap .elementor-widget-image figure,
.kb-team-card .kb-team-img-wrap .elementor-widget-image .e-image-loaded,
.kb-team-card .kb-team-img-wrap .elementor-widget-image .e-loaded {
  height: 100% !important;
  margin: 0 !important;
}

.kb-team-card .kb-team-img-wrap .elementor-widget-image {
  height: 100%;
}

.kb-team-card .kb-team-img-wrap .elementor-widget-image .elementor-widget-container,
.kb-team-card .kb-team-img-wrap .elementor-widget-image figure,
.kb-team-card .kb-team-img-wrap .elementor-widget-image .e-image-loaded {
  height: 100%;
}

.kb-team-card .kb-team-img-wrap img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  filter: grayscale(100%) contrast(1.02);
  transition:
    filter 0.7s cubic-bezier(0.22, 1, 0.36, 1),
    transform 1s cubic-bezier(0.22, 1, 0.36, 1);
  will-change: filter, transform;
  /* Eigene Border-Radius, damit der View-Transition-Snapshot (kb-team-img-<id>)
     beim Manga-Switch nicht für einen Frame quadratische Ecken zeigt. Der Wrapper
     hat overflow:hidden, aber das clipt nur den Live-Render – die Transition-
     Snapshots werden in einer eigenen Layer rendered, ohne Parent-Clipping. */
  border-radius: 24px;
}

/* View-Transition-Snapshots der Team-Bilder beim Manga-Switch:
   eigener Border-Radius, damit zwischen Old- und New-Snapshot keine Ecken
   aufblitzen. * matcht alle aktiven kb-team-img-<id> Transitions. */
::view-transition-group(*),
::view-transition-image-pair(*),
::view-transition-old(*),
::view-transition-new(*) {
  border-radius: 24px;
  overflow: clip;
}

.kb-team-card:hover .kb-team-img-wrap img {
  filter: grayscale(0%) contrast(1);
  transform: scale(1.04);
}

/* Inner-Glow: Akzentfarbe leuchtet IM Bild von unten nach oben.
   mix-blend-mode: screen → wirkt wie ein gefärbtes Licht, nicht wie eine Tönung.
   Liegt INNERHALB des Bild-Wraps (overflow:hidden) → keine Außen-Schatten,
   sondern echtes Bild-Licht. */
.kb-team-card .kb-team-img-wrap::after {
  content: "";
  position: absolute;
  inset: 30% 0 0 0;
  background: linear-gradient(
    to top,
    var(--team-accent) 0%,
    color-mix(in srgb, var(--team-accent) 50%, transparent) 40%,
    transparent 100%
  );
  mix-blend-mode: screen;
  opacity: 0.7;
  pointer-events: none;
  transition: opacity 0.7s cubic-bezier(0.22, 1, 0.36, 1);
  z-index: 2;          /* über dem Bild, unter dem Wrapper-Border */
}

.kb-team-card:hover .kb-team-img-wrap::after {
  opacity: 0;          /* Glow weg → echte Farbe übernimmt */
}

/* Cursor verstecken auf der Card – wir zeigen unseren eigenen Badge */
@media (hover: hover) and (pointer: fine) {
  .kb-team-card:hover {
    cursor: none;
  }
  .kb-team-card:hover * {
    cursor: none;
  }
}

/*
-----------------------------------------------------
FLOATING-BADGE (Cursor-Replacement bei Team-Card-Hover)
-----------------------------------------------------
Glass-Card im bestehenden System. Globale Singleton im <body>.
*/
.kb-floating-badge {
  position: fixed;
  top: 0;
  left: 0;
  width: 280px;
  pointer-events: none;
  z-index: var(--z-badge);
  opacity: 0;
  /* 2D-Transform: positioniert das Badge initial off-screen ohne GPU-Layer. */
  transform: translate(-9999px, -9999px) scale(0.96);
  transition: opacity 0.32s cubic-bezier(0.22, 1, 0.36, 1),
              transform 0.32s cubic-bezier(0.22, 1, 0.36, 1);
  padding: 20px 22px;
  border-radius: 16px;
  /* Stark transparent + intensives Blur (Glas-Look) */
  background: rgba(16, 20, 23, 0.32);
  backdrop-filter: blur(40px) saturate(1.4);
  -webkit-backdrop-filter: blur(40px) saturate(1.4);
  box-shadow:
    0 16px 64px rgba(0, 0, 0, 0.35),
    0 0 0 1px rgba(255, 255, 255, 0.1) inset;
  /* will-change entfernt: das Badge enthält Text und Compositing-Layer
     würde Subpixel-AA in Firefox abschalten. */
}

.kb-floating-badge.is-active {
  opacity: 1;
}

.kb-floating-badge__label {
  font-family: 'Avenir LT Std', 'Avenir', 'Montserrat', sans-serif;
  font-size: 0.65rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 2px;
  color: rgba(255, 255, 255, 0.4);
  margin-bottom: 10px;
}

.kb-floating-badge__fakt {
  font-family: 'brown', 'Avenir', sans-serif;
  font-size: 1.05rem;
  font-weight: 500;
  line-height: 1.25;
  color: rgba(255, 255, 255, 0.95);
  letter-spacing: -0.2px;
  margin-bottom: 16px;
}

/* Wenn kein Fakt vorhanden: Margin weg, sodass Pills sauber anschließen */
.kb-floating-badge__fakt:empty {
  display: none;
}

.kb-floating-badge__pills {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

/* Komplett monochromer Pill-Look – kein Dot, keine Bereichsfarben.
   Nur Text in einer dezenten Outline-Pille. */
.kb-floating-badge .kb-pill {
  display: inline-block;
  padding: 4px 10px;
  border-radius: 100vmax;
  font-family: 'Avenir LT Std', 'Avenir', sans-serif;
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 0.2px;
  background: transparent;
  color: rgba(255, 255, 255, 0.85);
  border: 1px solid rgba(255, 255, 255, 0.22);
}

/* Touch-Geräte: Badge wird statisch in Card-Ecke statt Cursor-Follow */
@media (hover: none) {
  .kb-floating-badge { display: none; }
}

/* Text reagiert subtil mit – Position wird beim Hover ausdrucksstärker */
.kb-team-card .kb-team-position .elementor-heading-title,
.kb-team-card .kb-team-position {
  transition: color 0.5s ease;
}

.kb-team-card:hover .kb-team-position .elementor-heading-title {
  color: rgba(255, 255, 255, 0.85) !important;
}

/* Auf hellen Sektionen: Text-Farben automatisch angepasst über Section-Klasse
   z. B. .bg-gray-100 .kb-team-card .kb-team-name → dunkler Text */
.bg-gray-100 .kb-team-card .kb-team-name .elementor-heading-title,
.bg-gray-200 .kb-team-card .kb-team-name .elementor-heading-title,
.bg-white   .kb-team-card .kb-team-name .elementor-heading-title {
  color: #101417 !important;
}
.bg-gray-100 .kb-team-card .kb-team-position .elementor-heading-title,
.bg-gray-200 .kb-team-card .kb-team-position .elementor-heading-title,
.bg-white   .kb-team-card .kb-team-position .elementor-heading-title {
  color: rgba(16, 20, 23, 0.55) !important;
}
.bg-gray-100 .kb-team-card:hover .kb-team-position .elementor-heading-title,
.bg-gray-200 .kb-team-card:hover .kb-team-position .elementor-heading-title,
.bg-white   .kb-team-card:hover .kb-team-position .elementor-heading-title {
  color: rgba(16, 20, 23, 0.9) !important;
}

@media (prefers-reduced-motion: reduce) {
  .kb-team-card .kb-team-img-wrap img {
    transition: filter 0.3s ease !important;
    transform: none !important;
  }
  .kb-team-card:hover .kb-team-img-wrap img {
    transform: none !important;
  }
}

/*
-----------------------------------------------------
TEAM-CARD SOCIALS – Kontakt-Icons unter dem Bild
Versteckt by default, fadet bei Hover ein.
Reserviert Höhe (kein Layout-Jump).
-----------------------------------------------------
*/
.kb-team-card .kb-team-socials {
  display: flex;
  gap: 8px;
  align-items: center;
  height: 28px;
  opacity: 0;
  transform: translateY(6px);
  transition:
    opacity 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.4s cubic-bezier(0.22, 1, 0.36, 1);
  pointer-events: none;
}

.kb-team-card:hover .kb-team-socials {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

/* Stagger: Icons leuchten nacheinander auf */
.kb-team-card .kb-team-social {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  color: rgba(255, 255, 255, 0.65);
  text-decoration: none;
  border-radius: 50%;
  transition:
    color 0.3s ease,
    background-color 0.3s ease,
    transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.kb-team-card .kb-team-social svg {
  width: 32px;
  height: 32px;
}

/* Stagger-Delays */
.kb-team-card:hover .kb-team-social:nth-child(1) { transition-delay: 0.05s; }
.kb-team-card:hover .kb-team-social:nth-child(2) { transition-delay: 0.10s; }
.kb-team-card:hover .kb-team-social:nth-child(3) { transition-delay: 0.15s; }
.kb-team-card:hover .kb-team-social:nth-child(4) { transition-delay: 0.20s; }
.kb-team-card:hover .kb-team-social:nth-child(5) { transition-delay: 0.25s; }

/* Hover auf Icon selbst – wird in Akzentfarbe + leichter Pop */
.kb-team-card .kb-team-social:hover {
  color: var(--team-accent);
  transform: translateY(-2px) scale(1.1);
}

/* Fokus-Ring für Tastatur-Nav */
.kb-team-card .kb-team-social:focus-visible {
  outline: 2px solid var(--team-accent);
  outline-offset: 3px;
  color: var(--team-accent);
}

/* Auf hellen Sektionen: Standard-Farbe dunkel */
.bg-gray-100 .kb-team-card .kb-team-social,
.bg-gray-200 .kb-team-card .kb-team-social,
.bg-white   .kb-team-card .kb-team-social {
  color: rgba(16, 20, 23, 0.5);
}


/*
=====================================================
MISSION-SECTION (Editorial 8VC-Style)
=====================================================
Two-Col-Layout, dunkler BG, Border-Linien oben/unten
und Vertikal-Linie zwischen den Spalten. Tag mit Bullet,
Headline mit Italic-Mix.
*/
.kb-mission-section {
  position: relative;
  /* Borders entfernt – fließt nahtlos in benachbarte dunkle Sektionen */
}

/* Vertikale Trennlinie zwischen den beiden Spalten */
.kb-mission-section::before {
  content: "";
  position: absolute;
  top: 10%;
  bottom: 10%;
  left: 50%;
  width: 1px;
  background: rgba(255, 255, 255, 0.08);
  pointer-events: none;
}
@media (max-width: 1024px) {
  .kb-mission-section::before { display: none; }
}

/* Tag mit Bullet (• unsere mission) */
.kb-mission-tag {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  font-family: 'Avenir LT Std', 'Avenir', 'Montserrat', sans-serif;
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 2.5px;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.55);
}
.kb-mission-tag__dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--kb-marke);          /* Akzentfarbe – matcht dem Brand */
  display: inline-block;
}

/* Headline – Italic-Teil bekommt Serif (oder italische Brown-Variante) */
.kb-mission-headline em,
.kb-mission-headline i {
  font-style: italic;
  font-family: 'Times New Roman', 'Brown Italic', Georgia, serif;
  font-weight: 400;
  letter-spacing: -0.5px;
  /* Subtile Akzent-Farbe für den italischen Part */
  color: rgba(255, 255, 255, 0.92);
}

/* Animations-Platzhalter: minimaler gestrichelter Frame */
.kb-mission-placeholder {
  width: 100%;
  max-width: 380px;
  aspect-ratio: 1 / 1;
  border: 1px dashed rgba(255, 255, 255, 0.12);
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
  /* Sanftes Atmen, damit's nicht tot aussieht */
  animation: kb-mission-placeholder-breathe 4s ease-in-out infinite;
}

.kb-mission-placeholder::before,
.kb-mission-placeholder::after {
  content: "";
  position: absolute;
  background: rgba(255, 255, 255, 0.06);
}
/* Diagonale Linien als Platzhalter-Optik */
.kb-mission-placeholder::before {
  inset: 20% 30%;
  border: 1px dashed rgba(255, 255, 255, 0.08);
}
.kb-mission-placeholder::after {
  inset: 35% 45%;
  border: 1px dashed rgba(255, 255, 255, 0.08);
}

.kb-mission-placeholder__caption {
  position: absolute;
  bottom: -28px;
  left: 0;
  right: 0;
  text-align: center;
  font-family: 'Avenir LT Std', 'Avenir', monospace;
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.3);
}

@keyframes kb-mission-placeholder-breathe {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.7; }
}

@media (prefers-reduced-motion: reduce) {
  .kb-mission-placeholder { animation: none; }
}


/*
=====================================================
KB CUBE ANIMATION (wiederverwendbar via [kb_cube_animation])
=====================================================
Linien wachsen → Würfel formt sich → rotiert + multipliziert → zurück zu Linien.
JS steuert die Phasen via GSAP Timeline (initCubeAnimation).
*/
.kb-cube-animation {
  position: relative;
  perspective: 1400px;
  display: block;
  margin: 0 auto;
}

/* SVG-Linien-Layer */
.kb-cube-animation__lines {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 50%;
  height: 60%;
  transform: translate(-50%, -50%);
  overflow: visible;
  z-index: 2;
  pointer-events: none;
}

.kb-cube__line {
  fill: none;
  stroke: rgba(255, 255, 255, 0.85);
  stroke-width: 1.2;
  stroke-miterlimit: 10;
  stroke-linecap: round;
  /* Initial: Lines komplett unsichtbar, JS setzt strokeDashoffset = length */
  vector-effect: non-scaling-stroke;
}

/* 3D-Scene */
.kb-cube-animation__scene {
  position: absolute;
  inset: 0;
  transform-style: preserve-3d;
  /* Default-Tilt damit Würfel räumlich wirkt – wird vom JS rotiert */
  transform: rotateX(-18deg) rotateY(-25deg);
}

/* Einzelner Würfel (3 verschachtelt: main + 2 echoes) */
.kb-cube {
  position: absolute;
  /* Würfel-Größe: 50% der Container-Größe → translateZ-Offsets relativ darauf */
  inset: 25%;
  transform-style: preserve-3d;
  opacity: 0;                 /* Default unsichtbar – JS aktiviert in Phase 2 */
}

.kb-cube__face {
  position: absolute;
  width: 100%;
  height: 100%;
  border: 1px solid rgba(255, 255, 255, 0.85);
  background: transparent;
  backface-visibility: visible;
}

/* Würfel-Geometrie: 6 Faces (Container-Breite = 50% Parent → translateZ = 25% Parent).
   Bei size=280px: cube=140px, half=70px → translateZ(70px) */
.kb-cube__face--front  { transform: translateZ(50%); }
.kb-cube__face--back   { transform: rotateY(180deg) translateZ(50%); }
.kb-cube__face--right  { transform: rotateY( 90deg) translateZ(50%); }
.kb-cube__face--left   { transform: rotateY(-90deg) translateZ(50%); }
.kb-cube__face--top    { transform: rotateX( 90deg) translateZ(50%); }
.kb-cube__face--bottom { transform: rotateX(-90deg) translateZ(50%); }

/* Echos (Kopien) – größer + transparenter, leicht versetzt für "Tiefen-Echo" */
.kb-cube--1 { transform: scale3d(1.4, 1.4, 1.4); }
.kb-cube--2 { transform: scale3d(1.85, 1.85, 1.85); }

.kb-cube--1 .kb-cube__face,
.kb-cube--2 .kb-cube__face {
  border-color: rgba(255, 255, 255, 0.4);
}
.kb-cube--2 .kb-cube__face {
  border-color: rgba(255, 255, 255, 0.18);
}

@media (prefers-reduced-motion: reduce) {
  .kb-cube-animation__scene { animation: none !important; transform: rotateX(-18deg) rotateY(-25deg); }
  .kb-cube { opacity: 1; }
  .kb-cube__line { stroke-dashoffset: 0 !important; }
}

/* =====================================================
   KB DOT MATRIX ANIMATION
   99 Punkte im 9x11 Grid. Cube-Linien wachsen aus Vertex-Dots heraus.
   3D-Iso-Rotation mit mitlaufenden Cube-Vertex-Dots, dann Retract zurueck.
   ===================================================== */
.kb-dot-matrix {
  position: relative;
  display: block;
  margin: 0 auto;
  width: 100%;
  max-width: 600px;
  aspect-ratio: 802 / 924;
}
.kb-dot-matrix__svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
}
.kb-dm-cube line {
  fill: none;
  stroke: #fff;
  stroke-width: 1.75;
  stroke-linecap: round;
  vector-effect: non-scaling-stroke;
}
.kb-dm-dots circle {
  fill: #fff;
  opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
  .kb-dot-matrix * { animation: none !important; }
}


/*
=====================================================
KONTAKT-CIRCLES (Stats-Style, aber mit Icons + Werten)
=====================================================
Wiederverwendet die Stats-Circle-Geometrie (Venn-Layout, Orbit-Punkte),
zeigt aber Icons + Kontakt-Werte statt Counter.
*/
.kb-stats-circles a.kb-stat-circle.kb-contact-circle {
  text-decoration: none;
  cursor: pointer;
  transition: border-color 0.4s ease, transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.kb-stats-circles a.kb-stat-circle.kb-contact-circle:hover {
  border-color: rgba(255, 255, 255, 0.6);
  transform: scale(1.03);
  z-index: 6;
}

.kb-contact-icon {
  width: 32px;
  height: 32px;
  margin-bottom: 14px;
  color: rgba(255, 255, 255, 0.55);
  display: inline-flex;
}
.kb-contact-icon svg { width: 100%; height: 100%; }

.kb-contact-circle:hover .kb-contact-icon {
  color: #FFFFFF;
}

.kb-contact-label-top {
  font-family: 'Avenir LT Std', 'Avenir', sans-serif;
  font-size: 0.65rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 2px;
  color: rgba(255, 255, 255, 0.4);
  margin-bottom: 10px;
}

.kb-contact-value {
  font-family: 'brown', 'Avenir', sans-serif;
  font-size: 1.15rem;
  font-weight: 500;
  letter-spacing: -0.3px;
  color: #FFFFFF;
  text-align: center;
  max-width: 200px;
  line-height: 1.25;
}

@media (max-width: 1024px) {
  .kb-contact-value { font-size: 1rem; }
}


/*
=====================================================
SOCIAL-LIST (Editorial Big-Text-Links)
=====================================================
Marquee-style Links mit Hover-Highlight.
Item füllt komplette Breite, drei Spalten:
  Name (groß) – Handle (dezent) – Pfeil (rechts)
Auf Hover: italic + Pfeil bewegt sich + Name "lebt".
*/
.kb-social-list {
  display: flex;
  flex-direction: column;
  width: 100%;
}

.kb-social-list__item {
  display: grid;
  grid-template-columns: 1fr auto 32px;
  align-items: center;
  gap: 24px;
  padding: 28px 0;
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  text-decoration: none;
  color: #FFFFFF;
  transition: padding-left 0.45s cubic-bezier(0.22, 1, 0.36, 1);
}

.kb-social-list__item:first-child {
  border-top: 1px solid rgba(255, 255, 255, 0.08);
}

.kb-social-list__item:hover {
  padding-left: 16px;
}

.kb-social-list__name {
  font-family: 'brown', 'Avenir', sans-serif;
  font-size: 2rem;
  font-weight: 500;
  letter-spacing: -0.5px;
  line-height: 1;
  transition: font-style 0.3s ease, color 0.3s ease;
}

.kb-social-list__item:hover .kb-social-list__name {
  font-style: italic;
  font-family: 'Times New Roman', Georgia, serif;
  font-weight: 400;
}

.kb-social-list__handle {
  font-family: 'Avenir LT Std', 'Avenir', sans-serif;
  font-size: 0.85rem;
  font-weight: 400;
  color: rgba(255, 255, 255, 0.45);
  letter-spacing: 0.2px;
}

.kb-social-list__arrow {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 1.3rem;
  color: rgba(255, 255, 255, 0.5);
  transition: transform 0.45s cubic-bezier(0.34, 1.56, 0.64, 1), color 0.3s ease;
}

.kb-social-list__item:hover .kb-social-list__arrow {
  transform: translate(6px, -6px);
  color: #FFFFFF;
}

@media (max-width: 768px) {
  .kb-social-list__name { font-size: 1.5rem; }
  .kb-social-list__handle { display: none; }
}


/*
=====================================================
STATS-SECTION (Editorial 8VC-Style mit Venn-Kreisen)
=====================================================
Tag-Spalte schmal links, Headline + Body breit rechts.
Darunter 4 sich überlappende Animations-Kreise mit Stats.
*/
.kb-stats-section {
  position: relative;
  /* Borders entfernt – fließt nahtlos in Mission-Sektion */
}

/* Tag links: Nummer + Label (wie 8VC "05. About M6 Labs") */
.kb-stats-tag {
  display: flex;
  flex-direction: column;
  gap: 2px;
  font-family: 'Avenir LT Std', 'Avenir', monospace;
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 1px;
  color: rgba(255, 255, 255, 0.5);
}
.kb-stats-tag__num {
  color: rgba(255, 255, 255, 0.85);
  font-weight: 600;
}

/* Outline-Style auf einzelnen Wörtern in der Headline (transparent fill + stroke) */
.kb-stats-headline .kb-stats-outline {
  color: transparent;
  -webkit-text-stroke: 1px rgba(255, 255, 255, 0.7);
  font-weight: 500;
}

/* ===== KREIS-ANORDNUNG ===== */
.kb-stats-circles {
  width: 100%;
  position: relative;
  /* Flex sorgt dafür dass Kreise auch in plain-div-Wrappern (z.B. via
     [kb_case_facts] Shortcode) horizontal angeordnet sind. Auf Elementor-
     Containers mit eigenem flex_direction-Setting greift dieser Default
     ohnehin nicht (Elementor setzt inline-style). */
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
}

/* Jeder Kreis */
.kb-stat-circle {
  position: relative;
  width: 280px;
  height: 280px;
  border-radius: 50%;
  /* Statischer Ring sehr dezent — Trail-::after liefert die Brillanz */
  border: 1px solid rgba(255, 255, 255, 0.06);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  flex: none;
  /* Negative margin → Überlappung */
  margin-left: -50px;
  /* Sanftes Atmen, leicht versetzt pro Kreis */
  animation: kb-circle-breathe 6s ease-in-out infinite;
}
.kb-stat-circle:first-child   { margin-left: 0; }
.kb-stat-circle--1            { animation-delay: 0s;    --orbit-dur: 12s; --orbit-delay: 0s; }
.kb-stat-circle--2            { animation-delay: -1.2s; --orbit-dur: 16s; --orbit-delay: -3s; }
.kb-stat-circle--3            { animation-delay: -2.4s; --orbit-dur: 14s; --orbit-delay: -7s; }
.kb-stat-circle--4            { animation-delay: -3.6s; --orbit-dur: 18s; --orbit-delay: -10s; }
.kb-stat-circle--5            { animation-delay: -4.8s; --orbit-dur: 15s; --orbit-delay: -5s; }

/* Trail-Ring: konischer Gradient, dreht synchron mit dem Orbit-Dot.
   Hellster Punkt sitzt am Dot, fadet rückwärts aus, Lücke auf
   Gegenseite, dann faint wieder anwachsend bis zum Dot. */
.kb-stat-circle::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  pointer-events: none;
  background: conic-gradient(
    from 90deg,
    rgba(255, 255, 255, 0.65) 0deg,
    rgba(255, 255, 255, 0.45) 40deg,
    rgba(255, 255, 255, 0.18) 110deg,
    rgba(255, 255, 255, 0.04) 170deg,
    rgba(255, 255, 255, 0)    210deg,
    rgba(255, 255, 255, 0)    270deg,
    rgba(255, 255, 255, 0.10) 320deg,
    rgba(255, 255, 255, 0.65) 360deg
  );
  /* Ring-Maske (1px dünn) via xor-Composite */
  -webkit-mask:
    linear-gradient(#fff 0 0) content-box,
    linear-gradient(#fff 0 0);
          mask:
    linear-gradient(#fff 0 0) content-box,
    linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
          mask-composite: exclude;
  z-index: 4;
  animation: kb-stat-trail-rotate var(--orbit-dur, 14s) linear infinite;
  animation-delay: var(--orbit-delay, 0s);
  will-change: transform;
}
@keyframes kb-stat-trail-rotate {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

/* Orbit-Punkt: rotiert kontinuierlich um jeden Kreis */
.kb-stat-circle::before {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 8px;
  height: 8px;
  margin: -4px;                  /* zentriert die Punkt-Mitte auf Kreis-Mitte */
  border-radius: 50%;
  background: #FFFFFF;
  box-shadow: 0 0 12px rgba(255, 255, 255, 0.7);
  z-index: 5;
  animation: kb-orbit var(--orbit-dur, 14s) linear infinite;
  animation-delay: var(--orbit-delay, 0s);
  will-change: transform;
}

/* Orbit-Keyframe: rotate dreht die Achse, translateX schiebt Punkt auf Kreisrand
   (140px = 280px / 2 = Kreisradius) */
@keyframes kb-orbit {
  from { transform: rotate(0deg) translateX(140px); }
  to   { transform: rotate(360deg) translateX(140px); }
}

/* Stat-Inhalte */
.kb-stat-value {
  font-family: 'brown', 'Avenir', sans-serif;
  font-size: 3.5rem;
  font-weight: 500;
  color: #FFFFFF;
  letter-spacing: -2px;
  line-height: 1;
  display: inline-flex;
  align-items: baseline;
  gap: 2px;
}
.kb-stat-suffix {
  font-size: 0.6em;
  font-weight: 500;
  color: rgba(255, 255, 255, 0.7);
  letter-spacing: -1px;
}
.kb-stat-label {
  margin-top: 12px;
  font-family: 'Avenir LT Std', 'Avenir', sans-serif;
  font-size: 0.78rem;
  font-weight: 500;
  letter-spacing: 0.3px;
  color: rgba(255, 255, 255, 0.55);
  line-height: 1.25;
  max-width: 140px;
}

/* Animations */
@keyframes kb-circle-breathe {
  0%, 100% {
    border-color: rgba(255, 255, 255, 0.05);
    transform: scale(1);
  }
  50% {
    border-color: rgba(255, 255, 255, 0.10);
    transform: scale(1.015);
  }
}

@keyframes kb-dot-pulse {
  0%, 100% {
    opacity: 1;
    box-shadow: 0 0 12px rgba(255, 255, 255, 0.4);
  }
  50% {
    opacity: 0.6;
    box-shadow: 0 0 20px rgba(255, 255, 255, 0.7);
  }
}

/* Responsive: Kreise stack vertical, Überlappung + Orbit weg */
@media (max-width: 1024px) {
  .kb-stats-circles {
    flex-direction: column;
    gap: 16px;
  }
  .kb-stat-circle {
    width: 220px;
    height: 220px;
    margin-left: 0;
  }
  .kb-stat-circle::before {
    display: none;
  }
  .kb-stat-value { font-size: 2.8rem; }
}

@media (prefers-reduced-motion: reduce) {
  .kb-stat-circle,
  .kb-stat-circle::before {
    animation: none !important;
  }
  /* Bei Reduced Motion: Punkt fix oben am Kreis */
  .kb-stat-circle::before {
    transform: translateY(-140px);
  }
}


/*
=====================================================
KONTAKT – EDITORIAL LAYOUT
Kompakt, typografisch, eine Bildschirmhöhe.
Verwendet das bestehende Designsystem (kb-headline,
fs-*, text-white, --space-*) – nur was fehlt
wird hier ergänzt.
=====================================================
*/

.kb-contact-editorial {
  position: relative;
  min-height: 100svh;
}

.kb-contact-editorial__inner {
  max-width: 1600px;
  margin-inline: auto;
  width: 100%;
}

/* ----- Hero Zeile ----- */
.kb-contact-hero-row {
  align-items: flex-end;
  padding-bottom: var(--space-md);
  column-gap: var(--space-xl);
}

.kb-contact-hero-row .kb-contact-hero-left .elementor-heading-title,
.kb-contact-hero-row .kb-contact-hero-right .elementor-heading-title {
  line-height: 0.88;
  letter-spacing: -0.03em;
  margin: 0;
}

/* Copyright-Zeile leicht kleiner als der Haupttitel,
   damit "Lass uns reden" klar dominiert. */
.kb-contact-hero-row .kb-contact-hero-right .elementor-heading-title {
  font-size: clamp(2.5rem, 1.25rem + 6vw, 9rem) !important;
  letter-spacing: -0.02em;
}

/* ----- Trennlinie ----- */
.kb-contact-divider {
  height: 1px;
  background: rgba(255, 255, 255, 0.85);
  width: 100%;
  margin-block: var(--space-lg);
}

.kb-contact-divider--soft {
  background: rgba(255, 255, 255, 0.18);
  margin-block: var(--space-xl);
}

/* ----- Info Reihe ----- */
.kb-contact-info-row {
  align-items: flex-start;
}

.kb-contact-info-label-col {
  flex: 0 0 auto;
  min-width: 120px;
}

.kb-contact-label .elementor-heading-title,
.kb-contact-label.elementor-widget .elementor-heading-title {
  font-family: var(--font-headline) !important;
  font-size: 0.78rem !important;
  font-weight: 700 !important;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  line-height: 1;
  margin: 0 0 0.6rem 0;
}

.kb-contact-info-grid {
  display: grid !important;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-lg) var(--space-xl);
  flex: 1 1 auto;
}

.kb-contact-info-grid > .e-con-inner {
  display: contents;
}

.kb-contact-item {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  min-width: 0;
}

.kb-contact-item .kb-contact-value-text,
.kb-contact-item .kb-contact-value-text p {
  font-family: var(--font-body) !important;
  font-size: 0.85rem !important;
  line-height: 1.5;
  color: var(--kb-white);
  margin: 0;
}

.kb-contact-item a {
  color: var(--kb-white);
  text-decoration: none;
  background-image: linear-gradient(currentColor, currentColor);
  background-position: 0 100%;
  background-repeat: no-repeat;
  background-size: 0% 1px;
  transition: background-size 0.35s ease, opacity 0.25s ease;
}

.kb-contact-item a:hover {
  background-size: 100% 1px;
  color: var(--kb-white);
}

/* ----- Form Reihe ----- */
.kb-contact-form-row {
  align-items: flex-end;
  margin-top: var(--space-lg);
}

.kb-contact-form-lead {
  flex: 0 1 45%;
}

.kb-contact-form-lead__text .elementor-heading-title {
  text-transform: uppercase;
  font-weight: 700;
  letter-spacing: -0.005em;
  line-height: 1.25;
  max-width: 26ch;
  margin: 0;
}

/* Form-Felder: minimalistisch, nur Unterstrich */
.kb-contact-form .elementor-form .elementor-field-group {
  margin-bottom: 0 !important;
  padding: 0 !important;
}

.kb-contact-form .elementor-form .elementor-field-group + .elementor-field-group {
  margin-top: 0 !important;
}

.kb-contact-form .elementor-form .elementor-field {
  background: transparent !important;
  border: 0 !important;
  border-bottom: 1px solid rgba(255, 255, 255, 0.35) !important;
  border-radius: 0 !important;
  color: var(--kb-white) !important;
  padding: 0.9rem 0 0.7rem 0 !important;
  font-family: var(--font-headline) !important;
  font-size: 0.78rem !important;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  line-height: 1.25;
  box-shadow: none !important;
  width: 100%;
}

.kb-contact-form .elementor-form .elementor-field-textual:focus {
  outline: none !important;
  border-bottom-color: var(--kb-white) !important;
}

.kb-contact-form .elementor-form .elementor-field::placeholder {
  color: rgba(255, 255, 255, 0.5);
  font-family: var(--font-headline);
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.kb-contact-form .elementor-form textarea.elementor-field {
  resize: none;
  min-height: 3.4rem;
}

.kb-contact-form .elementor-form .elementor-field-label {
  display: none !important;
}

/* Submit-Button: identisch zu den Haupt-CTA Buttons (.kb-btn.kreativbox.dark.pt-xs).
   Form-Widget liefert keinen .elementor-button-icon Span — Pille + Pfeil
   werden als ::after Pseudo-Element exakt wie die Standard-Button-SVG gerendert
   (100x49 Pille mit Akzentfarbe + weißer Pfeil).
   Hinweis: Margin-top auf das Wrapper-Field-Group greift nicht (Elementor-Spezifität),
   deshalb sitzt der Abstand zum letzten Feld direkt am Button. */
.kb-contact-form.kb-btn .elementor-form .elementor-button {
  margin-top: 24px !important;
  padding: 12px 16px 12px 24px !important;
  gap: 16px !important;
  border: 1px solid var(--btn-border) !important;
  border-radius: 56px !important;
  background-color: var(--btn-bg) !important;
  color: var(--btn-text) !important;
  font-family: 'Avenir LT Std', 'Avenir', 'Montserrat', 'Poppins', Arial, sans-serif !important;
  font-weight: 700 !important;
  font-size: 1.1rem !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  line-height: normal !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  position: relative;
  overflow: visible;
  box-shadow: none !important;
  transition:
    transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.4s ease,
    border-color 0.3s ease,
    background-color 0.3s ease;
}

.kb-contact-form.kb-btn .elementor-form .elementor-button .elementor-button-content-wrapper {
  display: inline-flex !important;
  align-items: center !important;
  gap: 16px !important;
}

.kb-contact-form.kb-btn .elementor-form .elementor-button .elementor-button-text {
  color: var(--btn-text) !important;
  font-family: 'Avenir LT Std', 'Avenir', 'Montserrat', 'Poppins', Arial, sans-serif !important;
  font-weight: 700 !important;
  font-size: 1.1rem !important;
  line-height: 1.25 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  transition: color 0.4s ease;
}

/* Icon-Pille mit Pfeil — komplette SVG inline (Akzentfarbe für Pille,
   weißer Pfeil) als background-image. Maske ergibt sauberes Layering. */
.kb-contact-form.kb-btn .elementor-form .elementor-button .elementor-button-content-wrapper::after {
  content: "";
  flex-shrink: 0;
  width: 100px;
  height: 49px;
  background-color: var(--btn-accent);
  border-radius: 56px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='49' viewBox='0 0 100 49'><path d='M62.1221 31.6182H61.1221V13.6953L38.584 36.2334L37.877 35.5254L60.4033 13H42.6055V12H62.1221V31.6182Z' fill='white'/></svg>");
  background-position: center;
  background-repeat: no-repeat;
  transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 0.04s;
}

/* Helle Akzentfarben (gelb/grün/orange): schwarzer Pfeil für besseren Kontrast */
.kb-contact-form.kb-btn.design .elementor-form .elementor-button .elementor-button-content-wrapper::after,
.kb-contact-form.kb-btn.content .elementor-form .elementor-button .elementor-button-content-wrapper::after,
.kb-contact-form.kb-btn.strategie .elementor-form .elementor-button .elementor-button-content-wrapper::after {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='49' viewBox='0 0 100 49'><path d='M62.1221 31.6182H61.1221V13.6953L38.584 36.2334L37.877 35.5254L60.4033 13H42.6055V12H62.1221V31.6182Z' fill='%23101414'/></svg>");
}

/* Hover: Spring-Pop + Glow + Pfeil schiebt sich nach rechts */
.kb-contact-form.kb-btn .elementor-form .elementor-button:hover {
  transform: scale(1.05);
  border-color: var(--btn-accent) !important;
  box-shadow:
    0 0 20px var(--btn-glow),
    0 0 40px var(--btn-glow),
    0 0 60px var(--btn-glow);
}

.kb-contact-form.kb-btn .elementor-form .elementor-button:hover .elementor-button-content-wrapper::after {
  transform: translateX(6px);
}

.kb-contact-form.kb-btn .elementor-form .elementor-button:active {
  transform: scale(0.98);
  transition: transform 0.12s cubic-bezier(0.4, 0, 0.2, 1);
}

@media (max-width: 767px) {
  .kb-contact-form.kb-btn .elementor-form .elementor-button:hover { transform: none; }
}

/* ============= RESPONSIVE ============= */
@media (max-width: 1024px) {
  .kb-contact-info-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 767px) {
  .kb-contact-editorial { min-height: 0; }

  .kb-contact-hero-row {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-sm);
  }

  .kb-contact-hero-row .kb-contact-hero-right .elementor-heading-title {
    text-align: left !important;
    font-size: clamp(1.75rem, 1rem + 5vw, 3rem) !important;
  }

  .kb-contact-info-row {
    flex-direction: column;
    gap: var(--space-md);
  }

  .kb-contact-info-grid {
    grid-template-columns: 1fr;
    gap: var(--space-md);
  }

  .kb-contact-form-row {
    flex-direction: column;
    align-items: stretch;
  }

  .kb-contact-form-lead { flex: 1 1 auto; }

  /* GSAP-Animationen auf Mobile neutralisieren. JS-Init hat zwar schon
     Mobile-Guards (animationen.js), aber GSAP-Float setzt sonst beim
     ersten Frame Transform-Werte. CSS-Override hält das Element ruhig. */
  .kb-gsap-float,
  .kb-gsap-img-zoom,
  .kb-gsap-img-zoom img {
    transform: none !important;
    animation: none !important;
  }

  /* Datenschutz-Checkbox-Zeile: das Acceptance-Label ist im Default
     inline-flex und bricht den Text mit Inline-Link nicht natürlich um.
     Block-Layout mit Checkbox links als Float lässt den Text um die
     Checkbox herumfließen. */
  .elementor-field-type-acceptance label {
    display: block;
    line-height: 1.55;
  }
  .elementor-field-type-acceptance label input[type="checkbox"] {
    float: left;
    margin: 4px 10px 0 0;
  }
}


/*
=====================================================
FOOTER – EDITORIAL (Sundown-Inspired, v2)
Soft Brand-Color-Gradient als Background-Blob,
Wordmark "kreativbox" massiv in Weiß auf dem Verlauf,
Logo + einfache vertikale Nav links, Newsletter rechts,
Bottom-Bar mit Copyright/Standort/Social.
=====================================================
*/

/* Footer nutzt das kb-grad System — siehe weiter unten "KB-GRAD".
   Im Footer-Container reicht jetzt z.B. die Klassen-Kombi:
   "kb-footer kb-grad kb-grad-twin kreativbox kb-grad-grain kb-grad-animate"
   Alle Verlauf-Logik kommt aus dem Utility-System. */
.kb-footer {
  position: relative;
  background: #0A0A0A !important;
  overflow: hidden;
  isolation: isolate;
}

/* ---------- Logo (top-left) ---------- */
.kb-footer-logo .elementor-widget-container {
  display: block;
}

.kb-footer-logo .elementor-widget-container img {
  height: auto;
  max-width: 100%;
  display: block;
}

/* ---------- kb-logo: fluide Wortmarken / breite SVG-Logos ----------
   Anwenden auf das Elementor-Icon-Widget (Feld "CSS Classes"), wenn
   das eingesetzte SVG ein breites Seitenverhältnis hat. Das Widget
   ignoriert sonst die Container-Breite und rutscht seitlich raus.
   Optional: --kb-logo-max steuert die maximale Breite pro Instanz.   */
.kb-logo {
  --kb-logo-max: 100%;
  display: block;
  width: 100%;
  max-width: var(--kb-logo-max);
}

.kb-logo .elementor-widget-container,
.kb-logo .elementor-icon-wrapper,
.kb-logo .elementor-icon {
  display: block;
  width: 100%;
  max-width: 100%;
  line-height: 0;
}

.kb-logo .elementor-icon svg,
.kb-logo svg {
  display: block;
  width: 100%;
  height: auto;
  max-width: 100%;
}

/* ---------- Top-Row: Logo+Nav links | Newsletter rechts ---------- */
.kb-footer-top-row {
  width: 100%;
  position: relative;
  z-index: 2;
}

.kb-footer-top-left {
  flex: 1 1 320px;
  min-width: 0;
  max-width: 480px;
}

.kb-footer-newsletter {
  flex: 1 1 320px;
  min-width: 0;
  max-width: 420px;
}

/* Vertikale Nav — Float-Hover ohne Layout-Shift:
   Link hebt sich leicht an (Spring-Easing wie .kb-btn, überschwingt
   dezent), Farbe wandert auf kreativbox-Pink, und eine feine Akzent-
   Linie wischt von links unter dem Link entlang (Underline-DNA der
   Magazin-Links). Alles via transform — nichts schiebt sich weg. */
.kb-footer-nav {
  --kb-nav-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
}

.kb-footer-nav .elementor-icon-list-items {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.kb-footer-nav .elementor-icon-list-item {
  position: relative;
  display: flex;
  align-items: center;
}

.kb-footer-nav .elementor-icon-list-item a {
  position: relative;
  color: var(--kb-white);
  font-family: var(--font-headline);
  font-size: 1.25rem;
  font-weight: 500;
  line-height: 1.25;
  display: inline-flex;
  align-items: center;
  padding-bottom: 2px;
  transform: translateY(0);
  transition:
    color 0.3s ease,
    transform 0.45s var(--kb-nav-spring);
  will-change: transform;
}

/* Akzent-Unterlinie: wischt von links rein */
.kb-footer-nav .elementor-icon-list-item a::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 1px;
  background-color: var(--kb-kreativbox);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform 0.4s cubic-bezier(0.65, 0, 0.35, 1);
  pointer-events: none;
}

.kb-footer-nav .elementor-icon-list-item:hover a,
.kb-footer-nav .elementor-icon-list-item a:hover,
.kb-footer-nav .elementor-icon-list-item a:focus-visible {
  color: var(--kb-kreativbox);
  transform: translateY(-3px);
}

.kb-footer-nav .elementor-icon-list-item:hover a::after,
.kb-footer-nav .elementor-icon-list-item a:hover::after,
.kb-footer-nav .elementor-icon-list-item a:focus-visible::after {
  transform: scaleX(1);
}

/* Reduced motion: kein Schwung, nur Farbwechsel + Linie */
@media (prefers-reduced-motion: reduce) {
  .kb-footer-nav .elementor-icon-list-item a,
  .kb-footer-nav .elementor-icon-list-item a::after {
    transition: color 0.2s ease;
  }
  .kb-footer-nav .elementor-icon-list-item:hover a,
  .kb-footer-nav .elementor-icon-list-item a:hover {
    transform: none;
  }
}

/* Newsletter-Form: minimaler Underline-Stil + kb-btn Pille fürs Submit */
.kb-footer-newsletter-lead p {
  color: var(--kb-gray-300);
  margin: 0;
}

.kb-footer-form .elementor-form .elementor-field {
  background: transparent !important;
  border: 0 !important;
  border-bottom: 1px solid rgba(255, 255, 255, 0.35) !important;
  border-radius: 0 !important;
  color: var(--kb-white) !important;
  padding: 0.7rem 0 0.6rem 0 !important;
  font-family: var(--font-headline) !important;
  font-size: 0.78rem !important;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  line-height: 1.25;
  box-shadow: none !important;
  width: 100%;
}

.kb-footer-form .elementor-form .elementor-field:focus {
  outline: none !important;
  border-bottom-color: var(--kb-white) !important;
}

.kb-footer-form .elementor-form .elementor-field::placeholder {
  color: rgba(255, 255, 255, 0.5);
}

.kb-footer-form .elementor-form .elementor-field-label {
  display: none !important;
}

.kb-footer-form .elementor-form .elementor-field-type-submit {
  margin-top: 0;
}

/* Submit-Button: gleiche Pille wie kb-btn.kreativbox.dark, kompakter (kein pt-xs) */
.kb-footer-form.kb-btn .elementor-form .elementor-button {
  margin-top: 16px !important;
  padding: 12px 16px 12px 24px !important;
  gap: 16px !important;
  border: 1px solid var(--btn-border) !important;
  border-radius: 56px !important;
  background-color: var(--btn-bg) !important;
  color: var(--btn-text) !important;
  font-family: 'Avenir LT Std', 'Avenir', 'Montserrat', 'Poppins', Arial, sans-serif !important;
  font-weight: 700 !important;
  font-size: 1rem !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  line-height: normal !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  position: relative;
  overflow: visible;
  box-shadow: none !important;
  transition:
    transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1),
    box-shadow 0.4s ease,
    border-color 0.3s ease,
    background-color 0.3s ease;
}

.kb-footer-form.kb-btn .elementor-form .elementor-button .elementor-button-content-wrapper {
  display: inline-flex !important;
  align-items: center !important;
  gap: 16px !important;
}

.kb-footer-form.kb-btn .elementor-form .elementor-button .elementor-button-text {
  color: var(--btn-text) !important;
  font-family: 'Avenir LT Std', 'Avenir', 'Montserrat', 'Poppins', Arial, sans-serif !important;
  font-weight: 700 !important;
  font-size: 1rem !important;
}

.kb-footer-form.kb-btn .elementor-form .elementor-button .elementor-button-content-wrapper::after {
  content: "";
  flex-shrink: 0;
  width: 90px;
  height: 44px;
  background-color: var(--btn-accent);
  border-radius: 56px;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100' height='49' viewBox='0 0 100 49'><path d='M62.1221 31.6182H61.1221V13.6953L38.584 36.2334L37.877 35.5254L60.4033 13H42.6055V12H62.1221V31.6182Z' fill='white'/></svg>");
  background-position: center;
  background-repeat: no-repeat;
  transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 0.04s;
}

.kb-footer-form.kb-btn .elementor-form .elementor-button:hover {
  transform: scale(1.04);
  border-color: var(--btn-accent) !important;
  box-shadow:
    0 0 20px var(--btn-glow),
    0 0 40px var(--btn-glow);
}

.kb-footer-form.kb-btn .elementor-form .elementor-button:hover .elementor-button-content-wrapper::after {
  transform: translateX(6px);
}

/* ---------- Wordmark-Row: massiv weiß, sitzt auf dem Gradient-BG ---------- */
.kb-footer-wordmark-row {
  width: 100%;
  position: relative;
  z-index: 2;
  margin-block: clamp(24px, 4vw, 56px);
  /* Wordmark läuft bewusst rechts aus dem Container raus (Sundown-Effekt).
     Da .kb-footer schon overflow:hidden hat, wird sauber abgeschnitten. */
}

.kb-footer-wordmark .elementor-heading-title {
  font-family: var(--font-headline) !important;
  font-weight: 700 !important;
  font-size: clamp(5rem, 26vw, 22rem) !important;
  line-height: 0.85 !important;
  letter-spacing: -0.045em;
  white-space: nowrap;
  margin: 0;
  margin-left: -0.04em; /* optisches Hängen am linken Rand */
  text-align: left;
  user-select: none;
  color: var(--kb-white) !important;
}

/* ---------- Bottom-Bar ---------- */
.kb-footer-bottom {
  width: 100%;
  position: relative;
  z-index: 2;
}

.kb-footer-bottom-left {
  flex: 1 1 auto;
  min-width: 0;
}

.kb-footer-meta .elementor-heading-title {
  font-family: var(--font-body) !important;
  font-weight: 400 !important;
  font-size: 0.78rem !important;
  letter-spacing: 0.04em;
  color: var(--kb-gray-500) !important;
  line-height: 1.25;
  margin: 0;
}

/* Social-Icons: dezent, weiß auf Hover pink */
.kb-footer-social .elementor-social-icon {
  border: 1px solid rgba(255, 255, 255, 0.18) !important;
  transition: border-color 0.25s ease, background-color 0.25s ease;
}

.kb-footer-social .elementor-social-icon:hover {
  border-color: var(--kb-kreativbox) !important;
  background-color: var(--kb-kreativbox) !important;
}

/* ---------- Responsive ---------- */
@media (max-width: 1024px) {
  .kb-footer-newsletter {
    flex-basis: 100%;
    max-width: 480px;
    order: 2;
  }
}

@media (max-width: 767px) {
  .kb-footer-top-row {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-lg);
  }

  .kb-footer-col,
  .kb-footer-newsletter {
    flex: 1 1 auto;
    width: 100%;
    max-width: 100%;
  }

  .kb-footer-wordmark .elementor-heading-title,
  .kb-footer-wordmark .elementor-widget-container {
    font-size: clamp(4rem, 32vw, 8rem) !important;
  }

  .kb-footer-bottom {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-md);
  }
}


/*
=====================================================
KB-GRAD — GRADIENT UTILITY SYSTEM
=====================================================
Cinematische Verläufe für beliebige Container.
Dunkler Look, körnige Textur, Markenfarben. Kombinierbar.

NUTZUNG:
  class="kb-grad kb-grad-orb-tr kreativbox"            // Pink Orb oben rechts
  class="kb-grad kb-grad-aurora marke"                 // Blauer Diagonal-Sweep
  class="kb-grad kb-grad-glow-b strategie kb-grad-grain"  // Orange Bottom-Glow + Korn
  class="kb-grad kb-grad-comet kreativbox kb-grad-bold"   // Pinker Komet, intensiv

SHAPES (genau eines pro Container):
  .kb-grad-orb-c   .kb-grad-orb-tl  .kb-grad-orb-tr
  .kb-grad-orb-bl  .kb-grad-orb-br
  .kb-grad-glow-t  .kb-grad-glow-b  .kb-grad-glow-l  .kb-grad-glow-r
  .kb-grad-aurora  .kb-grad-comet
  .kb-grad-arch    .kb-grad-wave
  .kb-grad-twin    .kb-grad-spotlight

FARBEN (genau eine pro Container):
  .design  .content  .marke  .kreativbox  .website
  .strategie  .somedia  .white

MODIFIER (kombinierbar):
  .kb-grad-soft     – sanftere Opacities (-30%)
  .kb-grad-bold     – intensiver (+25%)
  .kb-grad-grain    – körnige Filmtextur drüber (analog/cinematisch)
  .kb-grad-animate  – langsame Drift/Atmen-Bewegung

WICHTIG: Container muss Hintergrundfarbe haben (i.d.R. dunkel),
damit die Verläufe sich abheben. .bg-gray-900 oder bg-color:#0A0A0A.
=====================================================
*/

/* === @PROPERTY REGISTRATIONS ===
   Registrieren der Position-Variablen, damit sie sauber als <percentage>
   interpoliert werden können (sonst fallback auf "discrete" im Keyframe).
   Damit kann die Animation den Gradient-Peak smooth verschieben, OHNE
   das Pseudo-Element selbst zu transformieren — Maske bleibt fix. */
@property --kb-grad-dx  { syntax: '<percentage>'; inherits: true; initial-value: 0%; }
@property --kb-grad-dy  { syntax: '<percentage>'; inherits: true; initial-value: 0%; }
@property --kb-grad-dx2 { syntax: '<percentage>'; inherits: true; initial-value: 0%; }
@property --kb-grad-dy2 { syntax: '<percentage>'; inherits: true; initial-value: 0%; }
@property --kb-grad-rot { syntax: '<angle>'; inherits: true; initial-value: 0deg; }

/* === BASIS === */
.kb-grad {
  position: relative;
  overflow: hidden;
  isolation: isolate;

  /* Default-Farbe = kreativbox (Pink). Wird per Color-Klasse überschrieben. */
  --kb-grad-h: 333;
  --kb-grad-s: 78%;
  --kb-grad-l: 51%;
  /* Intensitätsfaktor für Bold/Soft-Modifier */
  --kb-grad-strength: 1;
  /* Default Peak-Position (wird von Shape-Klassen überschrieben) */
  --kb-grad-x: 50%;
  --kb-grad-y: 50%;
  --kb-grad-x2: 50%;
  --kb-grad-y2: 50%;
}

.kb-grad::before {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: -1;
  /* Default-Position falls keine Shape-Klasse aktiv ist */
  background: transparent;
  will-change: transform;
}

/* === COLOR MODIFIER ===
   Setzen die HSL-Komponenten für die Verlaufs-Stops. */
.kb-grad.design     { --kb-grad-h:  54; --kb-grad-s:  98%; --kb-grad-l: 69%; }
.kb-grad.content    { --kb-grad-h: 151; --kb-grad-s: 100%; --kb-grad-l: 46%; }
.kb-grad.marke      { --kb-grad-h: 228; --kb-grad-s: 100%; --kb-grad-l: 57%; }
.kb-grad.kreativbox { --kb-grad-h: 333; --kb-grad-s:  78%; --kb-grad-l: 51%; }
.kb-grad.website    { --kb-grad-h: 268; --kb-grad-s:  74%; --kb-grad-l: 49%; }
.kb-grad.strategie  { --kb-grad-h:  20; --kb-grad-s: 100%; --kb-grad-l: 64%; }
.kb-grad.somedia    { --kb-grad-h:   0; --kb-grad-s:  67%; --kb-grad-l: 56%; }
.kb-grad.white      { --kb-grad-h:   0; --kb-grad-s:   0%; --kb-grad-l: 95%; }

/* === SHAPES (overflow-safe v3) ===
   Alle Pseudo-Elemente bleiben innerhalb des Containers (inset: 0)
   UND statisch (kein transform-Animation). Der Gradient-Peak wandert
   per CSS-Variablen, das Pseudo bewegt sich nicht — damit bleiben
   eventuelle Maske (kb-grad-soft-*) und Position absolut fix. */

.kb-grad-orb-c::before,
.kb-grad-orb-tl::before, .kb-grad-orb-tr::before,
.kb-grad-orb-bl::before, .kb-grad-orb-br::before,
.kb-grad-glow-t::before, .kb-grad-glow-b::before,
.kb-grad-glow-l::before, .kb-grad-glow-r::before,
.kb-grad-aurora::before,
.kb-grad-comet::before,
.kb-grad-arch::before,
.kb-grad-wave::before,
.kb-grad-twin::before,
.kb-grad-spotlight::before {
  inset: 0;
}

/* Initial-Positionen je Shape (auf dem Parent, nicht dem Pseudo,
   damit die Animation-Variablen über den Cascade wirken). */
.kb-grad-orb-c     { --kb-grad-x:  50%; --kb-grad-y:  50%; }
.kb-grad-orb-tr    { --kb-grad-x: 110%; --kb-grad-y: -10%; }
.kb-grad-orb-tl    { --kb-grad-x: -10%; --kb-grad-y: -10%; }
.kb-grad-orb-br    { --kb-grad-x: 110%; --kb-grad-y: 110%; }
.kb-grad-orb-bl    { --kb-grad-x: -10%; --kb-grad-y: 110%; }
.kb-grad-glow-t    { --kb-grad-x:  50%; --kb-grad-y: -10%; }
.kb-grad-glow-b    { --kb-grad-x:  50%; --kb-grad-y: 110%; }
.kb-grad-glow-l    { --kb-grad-x: -10%; --kb-grad-y:  50%; }
.kb-grad-glow-r    { --kb-grad-x: 110%; --kb-grad-y:  50%; }
.kb-grad-aurora    { --kb-grad-x: 100%; --kb-grad-y:  30%; }
.kb-grad-comet     { --kb-grad-x:  95%; --kb-grad-y:  35%; }
.kb-grad-arch      { --kb-grad-x:  50%; --kb-grad-y: 130%; }
.kb-grad-spotlight { --kb-grad-x:  50%; --kb-grad-y:  50%; }
.kb-grad-wave      { --kb-grad-x:  20%; --kb-grad-y:  85%; --kb-grad-x2: 80%; --kb-grad-y2: 25%; }
.kb-grad-twin      { --kb-grad-x: -10%; --kb-grad-y: -10%; --kb-grad-x2: 110%; --kb-grad-y2: 110%; }

/* Single-Blob Shapes (orb-*, glow-*, arch, aurora, comet, spotlight)
   verwenden alle dieselbe Variablen-basierte Position:
     at calc(--kb-grad-x + --kb-grad-dx) calc(--kb-grad-y + --kb-grad-dy)
   Initial-Position kommt aus der Shape-Klasse, Animation moduliert die dx/dy. */

.kb-grad-orb-c::before,
.kb-grad-orb-tl::before, .kb-grad-orb-tr::before,
.kb-grad-orb-bl::before, .kb-grad-orb-br::before {
  background: radial-gradient(
    ellipse 90% 90% at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
    hsla(var(--kb-grad-h), var(--kb-grad-s), 92%, calc(0.30 * var(--kb-grad-strength))) 0%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.62 * var(--kb-grad-strength))) 12%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.30 * var(--kb-grad-strength))) 38%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.10 * var(--kb-grad-strength))) 65%,
    transparent 90%
  );
  filter: blur(40px);
}
.kb-grad-orb-c::before {
  /* Center-Variant: kompakter, mit weicherem Falloff */
  background: radial-gradient(
    ellipse 70% 70% at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
    hsla(var(--kb-grad-h), var(--kb-grad-s), 92%, calc(0.32 * var(--kb-grad-strength))) 0%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.62 * var(--kb-grad-strength))) 12%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.30 * var(--kb-grad-strength))) 35%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.10 * var(--kb-grad-strength))) 60%,
    transparent 88%
  );
}

/* GLOW — gerichtete Verläufe (gleiches Setup wie Orb, andere ellipse-Maße) */
.kb-grad-glow-t::before, .kb-grad-glow-b::before {
  background: radial-gradient(
    ellipse 90% 80% at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
    hsla(var(--kb-grad-h), var(--kb-grad-s), 92%, calc(0.34 * var(--kb-grad-strength))) 0%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.65 * var(--kb-grad-strength))) 14%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.28 * var(--kb-grad-strength))) 42%,
    transparent 78%
  );
  filter: blur(50px);
}
.kb-grad-glow-l::before, .kb-grad-glow-r::before {
  background: radial-gradient(
    ellipse 80% 90% at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
    hsla(var(--kb-grad-h), var(--kb-grad-s), 92%, calc(0.34 * var(--kb-grad-strength))) 0%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.65 * var(--kb-grad-strength))) 14%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.28 * var(--kb-grad-strength))) 42%,
    transparent 78%
  );
  filter: blur(50px);
}

/* AURORA — diagonaler Lichtbalken. Statische Rotation, Peak via Vars. */
.kb-grad-aurora::before {
  background: radial-gradient(
    ellipse 130% 25% at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
    hsla(var(--kb-grad-h), var(--kb-grad-s), 92%, calc(0.30 * var(--kb-grad-strength))) 0%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.62 * var(--kb-grad-strength))) 18%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.22 * var(--kb-grad-strength))) 50%,
    transparent 78%
  );
  filter: blur(45px);
  transform: rotate(-18deg);   /* statisch — keine Animation hier */
  transform-origin: center;
}

/* COMET — schmaler Streifen mit Schweif */
.kb-grad-comet::before {
  background: radial-gradient(
    ellipse 110% 14% at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
    hsla(var(--kb-grad-h), var(--kb-grad-s), 95%, calc(0.42 * var(--kb-grad-strength))) 0%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.78 * var(--kb-grad-strength))) 8%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.32 * var(--kb-grad-strength))) 38%,
    transparent 72%
  );
  filter: blur(35px);
  transform: rotate(-16deg);
}

/* ARCH — konkaver Bogen */
.kb-grad-arch::before {
  background: radial-gradient(
    ellipse 80% 110% at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
    hsla(var(--kb-grad-h), var(--kb-grad-s), 92%, calc(0.32 * var(--kb-grad-strength))) 0%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.65 * var(--kb-grad-strength))) 18%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.25 * var(--kb-grad-strength))) 55%,
    transparent 85%
  );
  filter: blur(50px);
}

/* SPOTLIGHT — fokussierter Brennpunkt mit weißem Core */
.kb-grad-spotlight::before {
  background: radial-gradient(
    circle at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
    hsla(var(--kb-grad-h), var(--kb-grad-s), 95%, calc(0.55 * var(--kb-grad-strength))) 0%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), 80%, calc(0.45 * var(--kb-grad-strength))) 6%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.55 * var(--kb-grad-strength))) 18%,
    hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.18 * var(--kb-grad-strength))) 45%,
    transparent 78%
  );
  filter: blur(30px);
}

/* === DOUBLE-BLOB Shapes (wave, twin) ===
   Zwei radial-gradients gestackt, jeder mit eigenem Position-Variablen-Paar. */
.kb-grad-wave::before {
  background:
    radial-gradient(
      ellipse 50% 55% at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
      hsla(var(--kb-grad-h), var(--kb-grad-s), 92%, calc(0.30 * var(--kb-grad-strength))) 0%,
      hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.62 * var(--kb-grad-strength))) 16%,
      hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.18 * var(--kb-grad-strength))) 50%,
      transparent 80%
    ),
    radial-gradient(
      ellipse 50% 55% at calc(var(--kb-grad-x2) + var(--kb-grad-dx2)) calc(var(--kb-grad-y2) + var(--kb-grad-dy2)),
      hsla(var(--kb-grad-h), var(--kb-grad-s), 90%, calc(0.25 * var(--kb-grad-strength))) 0%,
      hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.55 * var(--kb-grad-strength))) 20%,
      hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.15 * var(--kb-grad-strength))) 50%,
      transparent 80%
    );
  filter: blur(50px);
}

.kb-grad-twin::before {
  background:
    radial-gradient(
      ellipse 80% 80% at calc(var(--kb-grad-x) + var(--kb-grad-dx)) calc(var(--kb-grad-y) + var(--kb-grad-dy)),
      hsla(var(--kb-grad-h), var(--kb-grad-s), 92%, calc(0.28 * var(--kb-grad-strength))) 0%,
      hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.60 * var(--kb-grad-strength))) 14%,
      hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.20 * var(--kb-grad-strength))) 45%,
      transparent 80%
    ),
    radial-gradient(
      ellipse 80% 80% at calc(var(--kb-grad-x2) + var(--kb-grad-dx2)) calc(var(--kb-grad-y2) + var(--kb-grad-dy2)),
      hsla(var(--kb-grad-h), var(--kb-grad-s), 92%, calc(0.28 * var(--kb-grad-strength))) 0%,
      hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.60 * var(--kb-grad-strength))) 14%,
      hsla(var(--kb-grad-h), var(--kb-grad-s), var(--kb-grad-l), calc(0.20 * var(--kb-grad-strength))) 45%,
      transparent 80%
    );
  filter: blur(50px);
}

/* === INTENSITÄT-MODIFIER === */
.kb-grad.kb-grad-soft { --kb-grad-strength: 0.65; }
.kb-grad.kb-grad-bold { --kb-grad-strength: 1.35; }

/* === SOFT-EDGE MODIFIER ===
   Maskieren die ::before Pseudo-Edges weich aus, damit der Verlauf
   nahtlos in angrenzende (gleichfarbene) Sektionen blendet — kein Hard-Cut.
   Hilft besonders, wenn Section overflow:hidden hat und der Gradient-Peak
   nahe der Edge liegt. Wert (15%) = wie viel der Edge weich ausläuft. */
.kb-grad-soft-t::before {
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 15%, #000 100%);
          mask-image: linear-gradient(to bottom, transparent 0%, #000 15%, #000 100%);
}
.kb-grad-soft-b::before {
  -webkit-mask-image: linear-gradient(to bottom, #000 0%, #000 85%, transparent 100%);
          mask-image: linear-gradient(to bottom, #000 0%, #000 85%, transparent 100%);
}
.kb-grad-soft-l::before {
  -webkit-mask-image: linear-gradient(to right, transparent 0%, #000 15%, #000 100%);
          mask-image: linear-gradient(to right, transparent 0%, #000 15%, #000 100%);
}
.kb-grad-soft-r::before {
  -webkit-mask-image: linear-gradient(to right, #000 0%, #000 85%, transparent 100%);
          mask-image: linear-gradient(to right, #000 0%, #000 85%, transparent 100%);
}
/* Top + Bottom kombiniert (typisch für Sektionen sandwiched zwischen anderen) */
.kb-grad-soft-tb::before {
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 12%, #000 88%, transparent 100%);
          mask-image: linear-gradient(to bottom, transparent 0%, #000 12%, #000 88%, transparent 100%);
}
/* Alle 4 Edges weich — Mask aus 2 Linearen, Composite via intersect */
.kb-grad-soft-all::before {
  -webkit-mask:
    linear-gradient(to bottom, transparent 0%, #000 12%, #000 88%, transparent 100%),
    linear-gradient(to right,  transparent 0%, #000 12%, #000 88%, transparent 100%);
  -webkit-mask-composite: source-in;
          mask:
    linear-gradient(to bottom, transparent 0%, #000 12%, #000 88%, transparent 100%),
    linear-gradient(to right,  transparent 0%, #000 12%, #000 88%, transparent 100%);
          mask-composite: intersect;
}

/* === GRAIN-OVERLAY ===
   Echtes SVG-Filter-Grain via globalem #kb-grain (in functions.php injected).
   Auflösungsunabhängig (knackig auf Retina), keine PNG-Tiles, weniger Bytes.
   ::after rendert eine Fläche, die per filter:url() prozedural mit Rauschen
   überlagert wird. mix-blend-mode hebt das Korn auf dunklem Untergrund hervor. */
.kb-grad-grain::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: -1;
  background-color: hsla(0, 0%, 100%, 0.04);
  filter: url(#kb-grain) contrast(140%);
  opacity: 0.55;
  mix-blend-mode: overlay;
}

/* Auf sehr hellen Hintergründen ist overlay zu hart — Modifier */
.kb-grad-grain.kb-grad-grain-soft::after {
  opacity: 0.32;
}
.kb-grad-grain.kb-grad-grain-bold::after {
  opacity: 0.85;
}


/*
=====================================================
KB-AWARDS — DOCUMENTS-STYLE LISTE
=====================================================
Editorial Tabelle für Auszeichnungen, dunkler Look.
Logo erscheint per JS am Cursor wenn man eine Zeile hovert.

Es gibt ZWEI Render-Pfade:
  A) Shortcode [kb_awards]      (Legacy/Fallback) — Markup .kb-awards__row
  B) Loop Grid + kb-Award-Card  (Standard)        — Markup .kb-award-card

Beide nutzen die gleiche Cursor-Hover-Logo-Mechanik (awards.js).
*/

.kb-awards {
  --kb-aw-border: rgba(255, 255, 255, 0.12);
  --kb-aw-text:   var(--kb-white);
  --kb-aw-muted:  var(--kb-gray-300);
  --kb-aw-tiny:   var(--kb-gray-500);
  --kb-aw-grid: minmax(140px, 1fr) minmax(110px, 1fr) minmax(0, 4fr) minmax(60px, 0.6fr) minmax(70px, 0.6fr);
  position: relative;
  width: 100%;
  color: var(--kb-aw-text);
  font-family: var(--font-body);
}

/* === Header-Zeile === */
.kb-awards__head {
  display: grid;
  grid-template-columns: var(--kb-aw-grid);
  gap: var(--space-md);
  padding: 0 0 var(--space-sm) 0;
  border-bottom: 1px solid var(--kb-aw-border);
  margin-bottom: 0;
}

.kb-awards__head .kb-awards__col {
  font-family: var(--font-headline);
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--kb-aw-tiny);
}

/* === Liste === */
.kb-awards__list {
  list-style: none;
  margin: 0;
  padding: 0;
  counter-reset: none;
}

.kb-awards__row {
  display: grid;
  grid-template-columns: var(--kb-aw-grid);
  gap: var(--space-md);
  padding: var(--space-md) 0;
  border-bottom: 1px solid var(--kb-aw-border);
  align-items: start;
  position: relative;
  cursor: pointer;
  transition: background-color 0.3s ease;
}

.kb-awards__row::before {
  /* sanfter Hover-Hintergrund (volle Breite über Padding hinaus) */
  content: "";
  position: absolute;
  inset: 0 -1.2rem;
  background: rgba(255, 255, 255, 0.025);
  opacity: 0;
  transition: opacity 0.3s ease;
  pointer-events: none;
  z-index: -1;
}

.kb-awards__row:hover::before { opacity: 1; }

/* === Spalten === */
.kb-awards__col {
  font-size: 0.85rem;
  line-height: 1.25;
  min-width: 0;
}

.kb-awards__col--num {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.kb-awards__num {
  font-family: var(--font-headline);
  font-weight: 600;
  letter-spacing: 0.04em;
  color: var(--kb-aw-text);
}

.kb-awards__id {
  font-family: var(--font-headline);
  font-size: 0.65rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--kb-aw-tiny);
}

.kb-awards__col--date {
  font-family: var(--font-headline);
  font-weight: 500;
  letter-spacing: 0.04em;
  color: var(--kb-aw-text);
}

.kb-awards__col--name {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.kb-awards__name {
  font-family: var(--font-headline);
  font-weight: 700;
  font-size: 0.9rem;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--kb-aw-text);
  line-height: 1.25;
}

.kb-awards__sub {
  font-family: var(--font-body);
  font-size: 0.78rem;
  font-weight: 400;
  letter-spacing: 0.02em;
  color: var(--kb-aw-muted);
  line-height: 1.5;
}

.kb-awards__col--cat {
  font-family: var(--font-headline);
  font-size: 0.7rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--kb-aw-muted);
}

.kb-awards__col--link {
  text-align: right;
}

.kb-awards__link {
  display: inline-block;
  font-family: var(--font-headline);
  font-size: 0.7rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--kb-aw-text);
  text-decoration: underline;
  text-underline-offset: 4px;
  transition: color 0.25s ease;
}
.kb-awards__link:hover { color: var(--kb-kreativbox); }
.kb-awards__link--disabled { color: var(--kb-aw-tiny); text-decoration: none; cursor: default; }

/* === MORE-Zeile (CTA am Ende der Liste) === */
.kb-awards__more-row {
  display: flex;
  justify-content: flex-end;
  padding: var(--space-md) 0 0 0;
}

.kb-awards__more {
  font-family: var(--font-headline);
  font-size: 0.75rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--kb-aw-text);
  text-decoration: underline;
  text-underline-offset: 4px;
  transition: color 0.25s ease, transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.kb-awards__more:hover {
  color: var(--kb-kreativbox);
  transform: translateX(4px);
}

/* === CURSOR-IMAGE (folgt der Maus über der Liste) === */
.kb-awards__cursor-image {
  position: absolute;
  top: 0;
  left: 0;
  width: 220px;
  height: 220px;
  pointer-events: none;
  opacity: 0;
  z-index: 30;
  transition: opacity 0.35s ease;
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.06);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 18px;
}

.kb-awards__cursor-image img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}

/* === Empty State === */
.kb-awards-empty {
  font-size: 0.9rem;
  color: var(--kb-aw-muted);
  font-style: italic;
}

/* === Responsive: Mobile collapses zu Card-Layout === */
@media (max-width: 767px) {
  .kb-awards__head { display: none; }

  .kb-awards__row {
    grid-template-columns: 1fr;
    gap: 6px;
    padding: var(--space-md) 0;
  }
  .kb-awards__col { font-size: 0.85rem; }

  .kb-awards__col--num,
  .kb-awards__col--date,
  .kb-awards__col--cat {
    display: inline-flex;
    flex-direction: row;
    gap: 8px;
    color: var(--kb-aw-muted);
    font-size: 0.7rem;
  }

  .kb-awards__col--num { order: 1; }
  .kb-awards__col--date { order: 2; }
  .kb-awards__col--name { order: 3; }
  .kb-awards__col--cat  { order: 4; }
  .kb-awards__col--link { order: 5; text-align: left; }

  .kb-awards__id { display: none; }
  .kb-awards__cursor-image { display: none; }
}


/*
=====================================================
KB-AWARD-CARD — Loop Item Template Styling
=====================================================
Wird gerendert via Elementor Loop Grid (Template ID: kb-Award-Card).
Spalten: NUM (CSS counter, dezent) · YEAR (groß, fett) · AWARD (Titel + Sub) · TYPE
Kein LINK-Spalte mehr.

Wrapper-Klasse auf dem Loop-Grid-Widget: .kb-awards-loop
Item-Klasse (am Container im Template):  .kb-award-card
*/

/* Loop Grid Wrapper: wird wie ein Tabellen-Stack gerendert */
.kb-awards-loop {
  position: relative;
  width: 100%;
  counter-reset: kb-awards 0;
}

/* Loop Grid Container in Single-Column Modus → einfacher vertikaler Stack */
.kb-awards-loop .elementor-loop-container,
.kb-awards-loop .e-loop-item {
  width: 100%;
}

/* Kein Tabellen-Header mehr — Spalten erklären sich aus dem Inhalt selbst. */

/* Card (Loop Item Container) — die eigentliche Zeile */
.kb-award-card {
  --kb-aw-grid: minmax(80px, 0.6fr) minmax(110px, 1fr) minmax(0, 5fr) minmax(70px, 0.7fr);
  display: grid !important;
  grid-template-columns: var(--kb-aw-grid) !important;
  align-items: center !important;
  gap: var(--space-md) !important;
  padding: var(--space-md) 0 !important;
  border-bottom: 1px solid rgba(255, 255, 255, 0.12);
  position: relative;
  cursor: pointer;
  counter-increment: kb-awards;
  transition: background-color 0.3s ease;
}

.kb-award-card::before {
  /* sanfter Hover-Background */
  content: "";
  position: absolute;
  inset: 0 -1.2rem;
  background: rgba(255, 255, 255, 0.025);
  opacity: 0;
  transition: opacity 0.3s ease;
  pointer-events: none;
  z-index: 0;
}
.kb-award-card:hover::before { opacity: 1; }

.kb-award-card > * {
  position: relative;
  z-index: 1;
  min-width: 0;
}

/* === Spalten === */

/* NR — sehr dezent, dünn, rechtsbündig. Zahl kommt aus CSS counter. */
.kb-award-card__col--num {
  display: flex;
  align-items: center;
  justify-content: flex-end; /* rechtsbündig — passt zum NR. Header */
}
.kb-award-card__num {
  font-family: var(--font-headline);
  font-weight: 200;
  font-size: 0.85rem;
  letter-spacing: 0.05em;
  color: var(--kb-gray-500);
  opacity: 0.7;
  text-align: right;
}
.kb-award-card__num::before {
  content: counter(kb-awards, decimal-leading-zero) ".";
}

/* YEAR — groß, fett, dominant, linksbündig (= JAHR. Header) */
.kb-award-card__col--year {
  display: flex;
  align-items: center;
  justify-content: flex-start;
}
.kb-award-card__year .elementor-heading-title,
.kb-award-card__year {
  font-family: var(--font-headline) !important;
  font-weight: 700 !important;
  font-size: 1.6rem !important;
  letter-spacing: -0.005em;
  color: var(--kb-white) !important;
  line-height: 1;
  margin: 0 !important;
  text-align: left !important;
}

/* AWARD — Titel oben (uppercase bold) + Untertitel (Org/Desc), linksbündig */
.kb-award-card__col--name {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 4px;
}
.kb-award-card__name .elementor-heading-title,
.kb-award-card__name {
  font-family: var(--font-headline) !important;
  font-weight: 700 !important;
  font-size: 0.95rem !important;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--kb-white) !important;
  line-height: 1.25;
  margin: 0 !important;
  text-align: left !important;
}
.kb-award-card__sub,
.kb-award-card__sub p {
  font-family: var(--font-body) !important;
  font-size: 0.78rem !important;
  font-weight: 400;
  letter-spacing: 0.02em;
  color: var(--kb-gray-300) !important;
  line-height: 1.5;
  margin: 0 !important;
  text-align: left !important;
}

/* TYPE — klein, uppercase, gedämpft, RECHTSBÜNDIG (= TYPE. Header) */
.kb-award-card__col--type {
  display: flex;
  align-items: center;
  justify-content: flex-end;
}
.kb-award-card__type .elementor-heading-title,
.kb-award-card__type {
  font-family: var(--font-headline) !important;
  font-weight: 500 !important;
  font-size: 0.7rem !important;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--kb-gray-300) !important;
  line-height: 1;
  margin: 0 !important;
  text-align: right !important;
}

/* Featured Image im Loop Item: NICHT direkt anzeigen — nur als Quelle für
   das Cursor-Hover-Bild via JS. Visuell unsichtbar, aber DOM-präsent. */
.kb-award-card__hover-image {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  opacity: 0 !important;
  pointer-events: none !important;
  overflow: hidden;
}

/* === Floating Cursor-Image für Loop Grid Wrapper === */
.kb-awards-loop .kb-awards__cursor-image,
.kb-awards-loop__cursor-image {
  position: absolute;
  top: 0; left: 0;
  width: 220px;
  height: 220px;
  pointer-events: none;
  opacity: 0;
  z-index: 30;
  transition: opacity 0.35s ease;
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.06);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 18px;
}

.kb-awards-loop .kb-awards__cursor-image img,
.kb-awards-loop__cursor-image img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}

/* === Mobile === */
@media (max-width: 767px) {
  .kb-awards-loop .elementor-loop-container::before { display: none; }

  .kb-award-card {
    grid-template-columns: 1fr !important;
    gap: 4px !important;
    padding: var(--space-md) 0 !important;
  }

  /* Alle Spalten linksbündig stacken — sonst bleibt NUM und TYPE
     auf ihren Desktop-Alignments und zerreissen den Stack. */
  .kb-award-card__col--num,
  .kb-award-card__col--year,
  .kb-award-card__col--name,
  .kb-award-card__col--type {
    justify-content: flex-start !important;
    align-items: flex-start !important;
  }

  /* NUM als kleine Meta-Zeile oben, dezent. */
  .kb-award-card__num {
    text-align: left !important;
    font-size: 0.75rem !important;
  }

  /* YEAR bleibt dominant, aber kompakter. */
  .kb-award-card__year .elementor-heading-title,
  .kb-award-card__year {
    font-size: 1.4rem !important;
    text-align: left !important;
  }

  /* TYPE als linksbündige Meta-Zeile am Ende. */
  .kb-award-card__type .elementor-heading-title,
  .kb-award-card__type {
    text-align: left !important;
  }

  /* NAME-Spalte etwas mehr Luft zur Year-Zeile drüber. */
  .kb-award-card__col--name { margin-top: 4px; }
  .kb-award-card__col--type { margin-top: 2px; }

  .kb-awards-loop__cursor-image { display: none; }
}

/* === ANIMATION-MODIFIER (property-basiert) ===
   Animation läuft NICHT mehr auf dem Pseudo-Element (sonst würden Maske
   und Position mitwandern), sondern auf dem Parent. Animiert werden die
   --kb-grad-dx/dy Offsets, die der Pseudo via calc(x + dx) konsumiert.

   → Pseudo bleibt geometrisch fix, Maske bleibt am Container-Rand,
     Soft-Edge wandert nicht mit. Nur der Gradient-Peak driftet sanft. */
.kb-grad.kb-grad-animate {
  animation: kb-grad-drift 18s ease-in-out infinite;
}

@keyframes kb-grad-drift {
  0%, 100% {
    --kb-grad-dx:  0%; --kb-grad-dy:  0%;
    --kb-grad-dx2: 0%; --kb-grad-dy2: 0%;
  }
  33% {
    --kb-grad-dx:  4%; --kb-grad-dy: -3%;
    --kb-grad-dx2:-4%; --kb-grad-dy2: 3%;
  }
  66% {
    --kb-grad-dx: -3%; --kb-grad-dy:  4%;
    --kb-grad-dx2: 3%; --kb-grad-dy2:-3%;
  }
}

/* Aurora/Comet eigene Drift-Range (subtiler, da rotiert wirkt's größer) */
.kb-grad-aurora.kb-grad-animate { animation: kb-grad-drift-narrow 24s ease-in-out infinite; }
.kb-grad-comet.kb-grad-animate  { animation: kb-grad-drift-narrow 22s ease-in-out infinite; }

@keyframes kb-grad-drift-narrow {
  0%, 100% { --kb-grad-dx:  0%; --kb-grad-dy:  0%; }
  50%      { --kb-grad-dx:  3%; --kb-grad-dy: -2%; }
}

/* Reduced motion: Drift aus, Verlauf bleibt */
@media (prefers-reduced-motion: reduce) {
  .kb-grad.kb-grad-animate,
  .kb-grad-aurora.kb-grad-animate,
  .kb-grad-comet.kb-grad-animate { animation: none !important; }
}


/* ============================================================
   KB COLLAGE — Brutalist Image Composition
   ============================================================
   Reusable image-collage module for hero/about/agency sections.
   Two layouts via [data-layout]: "strip" (horizontal axis) and
   "scatter" (radial cluster). Positions are computed in JS via
   seeded PRNG → stable across reloads. Animations are CSS-only.
   ============================================================ */

.kb-collage {
  --kb-collage-bg: var(--kb-gray-100, #F4F2EE);
  --kb-collage-axis: rgba(0, 0, 0, 0.08);
  --kb-collage-marker: rgba(0, 0, 0, 0.55);
  --mx: 0;
  --my: 0;
  position: relative;
  width: 100%;
  max-width: 100%;
  background: var(--kb-collage-bg);
  /* Strikte Containment: kein Element darf nach außen rendern. */
  overflow: hidden;
  overflow: clip;            /* moderner als hidden, kein Scroll-Container */
  overflow-clip-margin: 0;
  contain: paint;            /* Layout-/Paint-Effekte bleiben drin */
  isolation: isolate;
}

/* Globaler Schutz: niemals horizontale Scrollbar auf <html>/<body>.
   Off-screen-Elemente (kbFloatingBadge bei translate(-9999), Carousel-
   Edges, etc.) können dadurch keine Page-Scroll-Verschiebung mehr
   triggern. Vertikales Scrollen bleibt wie gehabt. */
html,
body {
  overflow-x: clip;
}

/* Utility: einzelnen Container clippen falls intern Overflow erzeugt wird */
.kb-clip-x { overflow-x: clip; }

/* Utility: Overflow am Container freischalten. Nützlich wenn ein Eltern-
   Element (z.B. .kb-glow-container mit overflow:hidden) Hover-Glows,
   Box-Shadows oder GSAP-Animationen der Kinder abschneidet. Die Klasse muss
   am betroffenen ELTERN-Container sitzen, nicht am Kind – overflow ist vom
   Parent aus blockiert, ein Kind kann das nicht selbst aufheben. */
.kb-overflow-visible   { overflow: visible !important; }
.kb-overflow-x-visible { overflow-x: visible !important; }
.kb-overflow-y-visible { overflow-y: visible !important; }

/* Während aktivem Drag zusätzlich Overscroll-Bubble blockieren */
body.kb-collage-dragging {
  overscroll-behavior-x: none;
}

.kb-collage--dark {
  --kb-collage-bg: var(--kb-gray-900, #101414);
  --kb-collage-axis: rgba(255, 255, 255, 0.10);
  --kb-collage-marker: rgba(255, 255, 255, 0.62);
  color: var(--kb-white, #fff);
}

.kb-collage__viewport {
  position: relative;
  height: clamp(380px, 65vh, 720px);
  margin: 0 auto;
  max-width: 1600px;
}

/* ----- Crosshair axes ----- */
.kb-collage__axis-v,
.kb-collage__axis-h {
  position: absolute;
  background: var(--kb-collage-axis);
  pointer-events: none;
  z-index: 0;
}
.kb-collage__axis-v {
  top: 0; bottom: 0; left: 50%;
  width: 1px;
  transform: translateX(-0.5px);
}
.kb-collage__axis-h {
  left: 0; right: 0; top: 50%;
  height: 1px;
  transform: translateY(-0.5px);
  opacity: 0;
}
.kb-collage[data-layout="scatter"] .kb-collage__axis-h {
  opacity: 1;
}

/* ----- Captions (centered, monospaced labels) ----- */
.kb-collage__caption {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', 'Consolas', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--kb-collage-marker);
  white-space: nowrap;
  z-index: 5;
  font-weight: 500;
}
.kb-collage__caption--top    { top: 18px; }
.kb-collage__caption--bottom { bottom: 18px; }

/* ----- Corner coordinate-style markers ----- */
.kb-collage__marker {
  position: absolute;
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', 'Consolas', monospace;
  font-size: 9px;
  letter-spacing: 0.16em;
  color: var(--kb-collage-marker);
  z-index: 4;
  text-transform: uppercase;
}
.kb-collage__marker--tl { top: 16px; left: 20px; }
.kb-collage__marker--tr { top: 16px; right: 20px; }
.kb-collage__marker--bl { bottom: 16px; left: 20px; }
.kb-collage__marker--br { bottom: 16px; right: 20px; }

/* ----- Items container ----- */
.kb-collage__items {
  position: absolute;
  inset: 0;
  z-index: 2;
}

/* ----- Single item (image fragment) ----- */
.kb-collage__item {
  --x: 0px;
  --y: 0px;
  --rot: 0deg;
  --w: 200px;
  --ratio: 1;
  --z: 1;
  --depth: 0.5;
  --drift-x: 6px;
  --drift-y: 4px;
  --drift-r: 0.5deg;
  --duration: 8s;
  --index: 0;
  --parallax-strength: 22px;

  position: absolute;
  left: 50%;
  top: 50%;
  width: var(--w);
  aspect-ratio: var(--ratio);
  transform:
    translate(
      calc(-50% + var(--x) + var(--mx) * var(--parallax-strength) * var(--depth)),
      calc(-50% + var(--y) + var(--my) * var(--parallax-strength) * var(--depth))
    )
    rotate(var(--rot));
  z-index: calc(var(--z) + 0);
  filter: grayscale(1) contrast(1.04) brightness(0.98);
  mix-blend-mode: multiply;
  transition: transform 0.7s cubic-bezier(0.22, 1, 0.36, 1), filter 0.6s ease;
  will-change: transform;
  animation: kb-collage-float var(--duration) ease-in-out infinite;
  animation-delay: calc(var(--index) * -0.7s);
  pointer-events: none;
}

.kb-collage--dark .kb-collage__item {
  mix-blend-mode: screen;
  filter: grayscale(1) contrast(0.95) brightness(1.05);
}

.kb-collage__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  user-select: none;
  -webkit-user-drag: none;
  border-radius: var(--radius-16, 16px);
  overflow: hidden;
}

/* Radius am Wrapper, damit auch eventuelle Schatten/Filter sauber clippen */
.kb-collage__item {
  border-radius: var(--radius-16, 16px);
  overflow: hidden;
}

/* ----- Float animation (subtle drift) ----- */
@keyframes kb-collage-float {
  0%, 100% {
    transform:
      translate(
        calc(-50% + var(--x) + var(--mx) * var(--parallax-strength) * var(--depth)),
        calc(-50% + var(--y) + var(--my) * var(--parallax-strength) * var(--depth))
      )
      rotate(var(--rot));
  }
  50% {
    transform:
      translate(
        calc(-50% + var(--x) + var(--drift-x) + var(--mx) * var(--parallax-strength) * var(--depth)),
        calc(-50% + var(--y) + var(--drift-y) + var(--my) * var(--parallax-strength) * var(--depth))
      )
      rotate(calc(var(--rot) + var(--drift-r)));
  }
}

/* ----- Hover: slightly de-saturate restraint ----- */
.kb-collage:hover .kb-collage__item {
  filter: grayscale(0.82) contrast(1.06) brightness(1);
}
.kb-collage--dark:hover .kb-collage__item {
  filter: grayscale(0.80) contrast(0.97) brightness(1.05);
}

/* ----- Layout: Scatter — stronger parallax + edge fade ----- */
.kb-collage[data-layout="scatter"] .kb-collage__item {
  --parallax-strength: 38px;
}

/* ----- Empty state for editors ----- */
.kb-collage__empty {
  padding: 60px 24px;
  text-align: center;
  background: #f5f4ef;
  border: 1px dashed #c2bbab;
  font-family: 'SFMono-Regular', monospace;
  font-size: 13px;
  color: #7a7466;
}

/* ----- Mobile: simplify both layouts ----- */
@media (max-width: 768px) {
  .kb-collage__viewport {
    height: clamp(320px, 60vh, 520px);
  }
  .kb-collage__item {
    --parallax-strength: 10px;
  }
  /* Scatter: hide overflow at edges on small screens */
  .kb-collage[data-layout="scatter"] .kb-collage__item:nth-child(n+9) {
    display: none;
  }
  .kb-collage__caption {
    font-size: 9px;
    letter-spacing: 0.18em;
  }
  .kb-collage__marker {
    display: none;
  }
}

/* ----- Reduced motion ----- */
@media (prefers-reduced-motion: reduce) {
  .kb-collage__item {
    animation: none;
    transition: none;
  }
}


/* ============================================================
   KB COLLAGE — Wheel Layout
   ============================================================
   Drag-/Scroll-driven horizontal carousel with strong size
   contrast (center BIG, edges TINY) and SVG rays converging
   at viewport center. Designed for dark backgrounds.
   ============================================================ */

.kb-collage[data-layout="wheel"] {
  --kb-collage-bg: var(--kb-gray-900, #0a0a0a);
  --kb-collage-axis: rgba(255, 255, 255, 0.08);
  --kb-collage-marker: rgba(255, 255, 255, 0.55);
  --kb-collage-ray: rgba(255, 255, 255, 0.22);

  background: var(--kb-collage-bg);
  color: var(--kb-white, #fff);
  cursor: grab;
  user-select: none;
  -webkit-user-select: none;
  touch-action: pan-y;
  /* Verhindert horizontales Page-Scroll-Bubble durch Geste */
  overscroll-behavior-x: contain;
  /* Innere Atemluft oben/unten */
  padding-block: clamp(72px, 9vh, 128px);
}

/* Native HTML5-Image-Drag komplett unterbinden — Pointer-Events
   landen auf .kb-collage__item, nicht direkt auf <img>, damit der
   Browser keinen Drag-Ghost startet. */
.kb-collage[data-layout="wheel"] .kb-collage__item img {
  pointer-events: none;
  -webkit-user-drag: none;
  user-select: none;
  -webkit-user-select: none;
}

.kb-collage[data-layout="wheel"].is-dragging,
.kb-collage[data-layout="wheel"].is-dragging * {
  cursor: grabbing !important;
  touch-action: none;
}

.kb-collage[data-layout="wheel"] .kb-collage__viewport {
  height: clamp(440px, 72vh, 780px);
  cursor: inherit;
}

/* SVG rays layer */
.kb-collage[data-layout="wheel"] .kb-collage__rays {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 1;
  overflow: visible;
}

.kb-collage[data-layout="wheel"] .kb-collage__rays line {
  stroke: var(--kb-collage-ray);
  stroke-width: 1;
  vector-effect: non-scaling-stroke;
}

/* Center convergence dot */
.kb-collage[data-layout="wheel"] .kb-collage__convergence {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.5);
  transform: translate(-50%, -50%);
  z-index: 4;
  pointer-events: none;
}

/* Vertical center line emphasized in wheel mode */
.kb-collage[data-layout="wheel"] .kb-collage__axis-v {
  background: rgba(255, 255, 255, 0.12);
  z-index: 2;
}

.kb-collage[data-layout="wheel"] .kb-collage__items {
  z-index: 3;
}

/* Item: position via JS (--x, --y, --scale, --opacity, --w, --ratio) */
.kb-collage[data-layout="wheel"] .kb-collage__item {
  position: absolute;
  left: 50%;
  top: 50%;
  width: var(--w, 360px);
  aspect-ratio: var(--ratio, 0.75);
  transform: translate(
      calc(-50% + var(--x, 0px)),
      calc(-50% + var(--y, 0px))
    )
    scale(var(--scale, 1));
  transform-origin: center center;
  opacity: var(--opacity, 1);
  z-index: var(--z, 1);
  filter: grayscale(1) contrast(1.06) blur(var(--blur, 0));
  mix-blend-mode: normal;
  pointer-events: auto;
  will-change: transform, opacity, filter;
  animation: none;
  transition: filter 0.5s ease;
}

/* Subtile Anhebung im idle-Hover-Zustand (Cursor in der Sektion, aber nicht auf einem Bild) */
.kb-collage[data-layout="wheel"]:hover .kb-collage__item {
  filter: grayscale(0.78) contrast(1.05) blur(var(--blur, 0));
}

/* Volle Farbe auf direktem Hover über einem Bild — nur wenn nicht gerade gezogen wird */
.kb-collage[data-layout="wheel"]:not(.is-dragging) .kb-collage__item:hover {
  filter: grayscale(0) contrast(1.04) saturate(1.05) blur(0);
  transition: filter 0.45s cubic-bezier(0.22, 1, 0.36, 1);
}

/* Edge vignette for depth (uses kb-gray-900 = #0a0a0a) */
.kb-collage[data-layout="wheel"] .kb-collage__viewport::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: radial-gradient(
    ellipse 90% 80% at center,
    transparent 30%,
    rgba(10, 10, 10, 0.55) 75%,
    rgba(10, 10, 10, 0.95) 100%
  );
  z-index: 5;
}

/* Drag-hint label (floating "drag" cue) */
.kb-collage[data-layout="wheel"] .kb-collage__hint {
  position: absolute;
  left: 50%;
  bottom: 44px;
  transform: translateX(-50%);
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.45);
  z-index: 6;
  pointer-events: none;
  transition: opacity 0.4s ease;
}

.kb-collage[data-layout="wheel"].is-dragging .kb-collage__hint {
  opacity: 0;
}

/* Captions/markers in wheel mode use white tone */
.kb-collage[data-layout="wheel"] .kb-collage__caption,
.kb-collage[data-layout="wheel"] .kb-collage__marker {
  color: rgba(255, 255, 255, 0.55);
  z-index: 6;
}

@media (max-width: 768px) {
  .kb-collage[data-layout="wheel"] .kb-collage__viewport {
    height: clamp(360px, 65vh, 540px);
  }
  .kb-collage[data-layout="wheel"] .kb-collage__hint {
    bottom: 32px;
    font-size: 9px;
  }
}


/* ============================================================
   KB BRUTALIST FRAME — wraps any Elementor section/carousel in
   the same brutalist visual language as the kb-collage wheel.
   ============================================================
   Usage:
     1. Auf der Elementor-Section "CSS Klassen" → kb-brutalist-frame
        (optionale Modifier: kb-brutalist-frame--light)
     2. Optional: in einem HTML-Widget innerhalb der Section den
        Shortcode [kb_markers tl="…" tr="…" bl="…" br="…" t="…" b="…"]
        einfügen.
     3. Slide-Counter "01/04" wird automatisch aus den Swiper-
        Slides erzeugt (CSS-Counter, keine JS nötig).
   ============================================================ */

.kb-brutalist-frame {
  --kbbf-bg: var(--kb-gray-900, #0a0a0a);
  --kbbf-axis: rgba(255, 255, 255, 0.08);
  --kbbf-marker: rgba(255, 255, 255, 0.6);
  --kbbf-vignette: rgba(0, 0, 0, 0.55);

  position: relative;
  background: var(--kbbf-bg);
  color: var(--kb-white, #fff);
  /* Innere Atemluft — passt zur Wheel-Sektion */
  padding-block: clamp(96px, 11vh, 160px) !important;
  /* Strikt clippen */
  overflow: clip !important;
  overflow-clip-margin: 0;
  isolation: isolate;
}

.kb-brutalist-frame--light {
  --kbbf-bg: var(--kb-gray-100, #F4F2EE);
  --kbbf-axis: rgba(0, 0, 0, 0.08);
  --kbbf-marker: rgba(0, 0, 0, 0.55);
  --kbbf-vignette: rgba(255, 255, 255, 0.4);
  color: var(--kb-gray-900, #0a0a0a);
}

/* Vertikale Mittel-Achse */
.kb-brutalist-frame::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 50%;
  width: 1px;
  background: var(--kbbf-axis);
  pointer-events: none;
  z-index: 1;
  transform: translateX(-0.5px);
}

/* Horizontale Mittel-Achse + Vignette in einem (durch radial-gradient
   im after-Element). */
.kb-brutalist-frame::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  z-index: 6;
  background:
    /* Vignette */
    radial-gradient(
      ellipse 95% 85% at center,
      transparent 45%,
      var(--kbbf-vignette) 100%
    ),
    /* Horizontale Linie */
    linear-gradient(
      to bottom,
      transparent calc(50% - 0.5px),
      var(--kbbf-axis) calc(50% - 0.5px),
      var(--kbbf-axis) calc(50% + 0.5px),
      transparent calc(50% + 0.5px)
    );
}

/* Eckmarker-Spans (per [kb_markers] Shortcode oder manuell) */
.kb-brutalist-frame .kb-bf-marker {
  position: absolute;
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', 'Consolas', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--kbbf-marker);
  z-index: 10;
  pointer-events: none;
  white-space: nowrap;
  font-weight: 500;
}
.kb-brutalist-frame .kb-bf-marker--tl { top: 24px; left: 32px; }
.kb-brutalist-frame .kb-bf-marker--tr { top: 24px; right: 32px; }
.kb-brutalist-frame .kb-bf-marker--bl { bottom: 24px; left: 32px; }
.kb-brutalist-frame .kb-bf-marker--br { bottom: 24px; right: 32px; }
.kb-brutalist-frame .kb-bf-marker--t  { top: 24px; left: 50%; transform: translateX(-50%); }
.kb-brutalist-frame .kb-bf-marker--b  { bottom: 24px; left: 50%; transform: translateX(-50%); }

/* ----- Swiper-Innereien (Loop-Carousel) ----- */
/* Achsen sollen vor dem Swiper liegen, aber Swiper-Inhalt drüber */
.kb-brutalist-frame .e-loop-carousel,
.kb-brutalist-frame .swiper {
  position: relative;
  z-index: 2;
}

/* Slide-Counter "01 / 04" via CSS-Counter aus aria-Attributen.
   Wir lesen aria-label="2 / 4" vom aktiven Slide via attr() —
   funktioniert in modernen Browsern für ::after content. */
.kb-brutalist-frame .swiper {
  counter-reset: kb-bf-slides;
}

.kb-brutalist-frame .swiper-slide-active::before {
  content: attr(aria-label);
  position: absolute;
  top: -52px;
  left: 50%;
  transform: translateX(-50%);
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 11px;
  letter-spacing: 0.3em;
  color: var(--kbbf-marker, rgba(255, 255, 255, 0.6));
  z-index: 8;
  pointer-events: none;
  white-space: nowrap;
}

/* Pagination-Bullets (von Swiper rendert) auf Mono-Marker reduzieren */
.kb-brutalist-frame .swiper-pagination-bullet {
  background: rgba(255, 255, 255, 0.25);
  width: 24px;
  height: 1px;
  border-radius: 0;
  opacity: 1;
  transition: background 0.4s ease, height 0.4s ease;
  margin: 0 6px !important;
}

.kb-brutalist-frame .swiper-pagination-bullet-active {
  background: var(--kbbf-marker);
  height: 2px;
}

/* Pfeile (Swiper-Navigation): brutalist-mono */
.kb-brutalist-frame .swiper-button-prev,
.kb-brutalist-frame .swiper-button-next,
.kb-brutalist-frame .elementor-swiper-button {
  color: var(--kbbf-marker);
  z-index: 10;
}

.kb-brutalist-frame .swiper-button-prev::after,
.kb-brutalist-frame .swiper-button-next::after,
.kb-brutalist-frame .elementor-swiper-button-prev::after,
.kb-brutalist-frame .elementor-swiper-button-next::after {
  font-size: 18px;
  font-weight: 300;
}

/* Mobile: Innenabstand etwas reduzieren */
@media (max-width: 768px) {
  .kb-brutalist-frame {
    padding-block: clamp(64px, 8vh, 96px) !important;
  }
  .kb-brutalist-frame .kb-bf-marker {
    font-size: 9px;
  }
  .kb-brutalist-frame .kb-bf-marker--tl,
  .kb-brutalist-frame .kb-bf-marker--bl { left: 16px; }
  .kb-brutalist-frame .kb-bf-marker--tr,
  .kb-brutalist-frame .kb-bf-marker--br { right: 16px; }
}


/* ============================================================
   KB SERVICES STACK — „Hart Glas Ordner" für die Leistungs-Übersicht
   ============================================================
   Sechs gestapelte Glas-Slabs (eines pro Bereich), brutalist-
   typografisch. Harte 0°-Ecken, dezenter Glas-Gradient mit
   inset-Shadow als Lichtkante, monospace-Marker, große Display-
   Typografie. Hover-Indikator: Bereichsfarbe slidet als Bar von
   links rein, Slab schiebt sich nach rechts, Title färbt sich um.
   ============================================================ */

.kb-services-stack {
  --kss-bg: var(--kb-gray-900, #0a0a0a);
  --kss-text: rgba(255, 255, 255, 0.95);
  --kss-mono: rgba(255, 255, 255, 0.5);
  --kss-glass-light: rgba(255, 255, 255, 0.055);
  --kss-glass-dark: rgba(255, 255, 255, 0.012);
  --kss-glass-light-hover: rgba(255, 255, 255, 0.1);
  --kss-glass-dark-hover: rgba(255, 255, 255, 0.03);
  --kss-border: rgba(255, 255, 255, 0.09);
  --kss-border-hover: rgba(255, 255, 255, 0.22);

  position: relative;
  background:
    radial-gradient(ellipse 80% 60% at 30% 10%, rgba(255, 255, 255, 0.025) 0%, transparent 60%),
    radial-gradient(ellipse 60% 50% at 80% 90%, rgba(255, 255, 255, 0.015) 0%, transparent 60%),
    var(--kss-bg);
  color: var(--kss-text);
  padding-block: clamp(80px, 10vh, 140px);
  padding-inline: clamp(20px, 4vw, 64px);
  overflow: clip;
}

.kb-services-stack__inner {
  max-width: 1400px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

/* ----- Single slab (folder) ----- */
.kb-slab {
  position: relative;
  display: grid;
  grid-template-columns: 90px 1fr auto;
  align-items: center;
  gap: 32px;
  padding: 36px 32px 36px 32px;
  /* Glass-Look: schräger Gradient für Lichtbrechung */
  background: linear-gradient(
    135deg,
    var(--kss-glass-light) 0%,
    var(--kss-glass-dark) 100%
  );
  /* Subtiles Frost falls hinter dem Slab ein Bild/Text liegt */
  backdrop-filter: blur(20px) saturate(1.2);
  -webkit-backdrop-filter: blur(20px) saturate(1.2);
  border: 1px solid var(--kss-border);
  /* Lichtkante oben + Schattenkante unten = echter Glas-Slab-Look */
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.10),
    inset 0 -1px 0 rgba(0, 0, 0, 0.20);
  border-radius: 0;            /* harte Brutalist-Ecken */
  color: var(--kss-text);
  text-decoration: none;
  cursor: pointer;
  isolation: isolate;
  overflow: hidden;
  transition:
    background 0.55s cubic-bezier(0.22, 1, 0.36, 1),
    border-color 0.55s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.55s cubic-bezier(0.22, 1, 0.36, 1);
}

.kb-slab:hover {
  background: linear-gradient(
    135deg,
    var(--kss-glass-light-hover) 0%,
    var(--kss-glass-dark-hover) 100%
  );
  border-color: var(--kss-border-hover);
  transform: translateX(8px);
}

/* Bereichsfarbe-Bar (slidet beim Hover von links rein) */
.kb-slab::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 0;
  background: var(--kss-accent, #fff);
  transition: width 0.55s cubic-bezier(0.22, 1, 0.36, 1);
  z-index: 1;
}

.kb-slab:hover::before {
  width: 4px;
}

/* Coord-Label in Top-Right Ecke */
.kb-slab__coord {
  position: absolute;
  top: 14px;
  right: 18px;
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', 'Consolas', monospace;
  font-size: 9px;
  letter-spacing: 0.2em;
  color: var(--kss-mono);
  text-transform: uppercase;
  z-index: 2;
  pointer-events: none;
}

/* Mono-Nummer links */
.kb-slab__num {
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', 'Consolas', monospace;
  font-size: 11px;
  letter-spacing: 0.22em;
  color: var(--kss-mono);
  text-transform: uppercase;
}

/* Title-Block: huge title + small tagline */
.kb-slab__title-wrap {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}

.kb-slab__title {
  margin: 0;
  font-family: var(--font-headline, 'Brown', 'Inter', sans-serif);
  font-size: clamp(34px, 5.4vw, 78px);
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 0.95;
  color: var(--kss-text);
  transition: color 0.5s cubic-bezier(0.22, 1, 0.36, 1);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.kb-slab:hover .kb-slab__title {
  color: var(--kss-accent, var(--kss-text));
}

.kb-slab__tagline {
  margin: 0;
  font-family: var(--font-body, 'Avenir', 'Inter', sans-serif);
  font-size: 14px;
  letter-spacing: 0.04em;
  color: var(--kss-mono);
  font-weight: 400;
}

/* Right cluster: dot + arrow */
.kb-slab__meta {
  display: flex;
  align-items: center;
  gap: 22px;
}

.kb-slab__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--kss-accent, #fff);
  box-shadow: 0 0 12px var(--kss-accent, transparent);
  transition: transform 0.5s cubic-bezier(0.22, 1, 0.36, 1);
  flex-shrink: 0;
}

.kb-slab:hover .kb-slab__dot {
  transform: scale(1.5);
}

.kb-slab__arrow {
  font-family: 'SFMono-Regular', monospace;
  font-size: 24px;
  color: var(--kss-mono);
  transition:
    transform 0.55s cubic-bezier(0.22, 1, 0.36, 1),
    color 0.4s ease;
  flex-shrink: 0;
  line-height: 1;
}

.kb-slab:hover .kb-slab__arrow {
  color: var(--kss-text);
  transform: translateX(8px);
}

/* ----- Bereich-Farben (CSS Custom Property pro Modifier) ----- */
.kb-slab--marke     { --kss-accent: var(--kb-marke); }
.kb-slab--design    { --kss-accent: var(--kb-design); }
.kb-slab--strategie { --kss-accent: var(--kb-strategie); }
.kb-slab--content   { --kss-accent: var(--kb-content); }
.kb-slab--somedia   { --kss-accent: var(--kb-somedia); }
.kb-slab--website   { --kss-accent: var(--kb-website); }

/* ----- Mobile ----- */
@media (max-width: 768px) {
  .kb-services-stack {
    padding-inline: clamp(16px, 5vw, 28px);
    padding-block: clamp(60px, 8vh, 100px);
  }
  .kb-slab {
    grid-template-columns: 56px 1fr auto;
    gap: 16px;
    padding: 22px 18px;
  }
  .kb-slab__title {
    font-size: clamp(26px, 8vw, 44px);
  }
  .kb-slab__tagline {
    font-size: 12px;
  }
  .kb-slab__num {
    font-size: 10px;
    letter-spacing: 0.16em;
  }
  .kb-slab__coord {
    display: none;          /* zu eng auf Mobile */
  }
  .kb-slab__arrow {
    font-size: 20px;
  }
  .kb-slab__meta {
    gap: 14px;
  }
  /* Touch-Hover hat keinen Sinn → kein Translate */
  .kb-slab:hover {
    transform: none;
  }
}

/* ----- Reduced Motion ----- */
@media (prefers-reduced-motion: reduce) {
  .kb-slab,
  .kb-slab::before,
  .kb-slab__title,
  .kb-slab__dot,
  .kb-slab__arrow {
    transition: none !important;
  }
  .kb-slab:hover {
    transform: none;
  }
}


/* ============================================================
   KB GLASS FOLDER — „Hart Glas Ordner" mit echter Folder-Form
   ============================================================
   Real folder shape (Tab + Body via clip-path). Innen:
     • Stack aus Project-Hero-Bildern hinter der Glas-Front
     • Orb (radial gradient) im Background
     • Title + Meta + (hover) Description
   Hover = öffnet sich:
     • Papers gleiten aus dem Folder raus, fächern leicht auf
     • Orb fadet ein und skaliert von 0.5 auf 1
     • Description erscheint
   ============================================================ */

.kb-glass-folder-stage {
  --gf-stage-bg: var(--kb-gray-900, #0a0a0a);
  position: relative;
  background: var(--gf-stage-bg);
  padding-block: clamp(80px, 10vh, 160px);
  padding-inline: clamp(20px, 4vw, 64px);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: visible;                    /* Folder-Hover darf über Stage hinaus */
}

.kb-glass-folder {
  /* ---- Configurable variables ---- */
  --gf-w: clamp(320px, 32vw, 480px);
  --gf-h: clamp(360px, 36vw, 540px);
  --gf-tab-w: 150px;
  --gf-tab-h: 42px;
  --gf-tab-slope: 24px;
  /* Folder-Rundung matcht --radius-32 des Theme-Card-Systems */
  --gf-radius: var(--radius-32, 32px);
  --gf-orb-color: var(--kb-content, #00e962);
  --gf-text: rgba(255, 255, 255, 0.95);
  --gf-mono: rgba(255, 255, 255, 0.55);

  position: relative;
  display: block;
  width: var(--gf-w);
  height: var(--gf-h);
  text-decoration: none;
  color: var(--gf-text);
  cursor: pointer;
  isolation: isolate;
  transition: transform 0.7s cubic-bezier(0.22, 1, 0.36, 1);
  /* will-change entfernt: würde permanenten Compositing-Layer erzeugen und
     Text-Labels im Folder weichzeichnen. Hover-Transform ist ein One-Shot,
     der Browser schaltet bei Bedarf trotzdem auf GPU-Compositing. */
}

/* Hover: leichter Tilt — gibt dem Folder „pickup"-Feel */
.kb-glass-folder:hover {
  transform: rotate(-2deg) translateY(-4px);
}

/* Im Grid: alternierend tilten (gerade Cards drehen rechts, ungerade links)
   — gibt mehr Dynamik und matcht den brutalist Card-Stack-Look */
.kb-glass-folder-grid .kb-glass-folder:nth-child(even):hover {
  transform: rotate(2deg) translateY(-4px);
}

/* ----- Layer 0: Orb (Kugel) — dezenter Bereich-Hint im Idle, voll bei Hover ----- */
.kb-glass-folder__orb {
  position: absolute;
  width: 78%;
  aspect-ratio: 1;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) scale(0.7);
  background: radial-gradient(
    circle at 35% 35%,
    var(--gf-orb-color) 0%,
    var(--gf-orb-color) 28%,
    transparent 72%
  );
  filter: blur(36px);
  opacity: 0.22;          /* dezent — nur Hint */
  transition:
    opacity 0.7s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.7s cubic-bezier(0.22, 1, 0.36, 1),
    filter 0.7s cubic-bezier(0.22, 1, 0.36, 1);
  z-index: 0;
  pointer-events: none;
  will-change: transform, opacity, filter;
  /* Kein mix-blend-mode → kein Bloom-Effekt */
}

.kb-glass-folder:hover .kb-glass-folder__orb {
  opacity: 1;
  transform: translate(-50%, -50%) scale(1);
  filter: blur(28px);
}

/* ----- Layer 1: Papers (project hero images) ----- */
.kb-glass-folder__papers {
  position: absolute;
  /* Sitzt im Folder, etwas tiefer unter dem Tab → mehr Raum,
     nicht hochgedrückt durchs Orb-Gefühl */
  top: calc(var(--gf-tab-h) + 28px);
  left: 50%;
  transform: translateX(-50%);
  /* Breiter (85% statt 78%) → Bilder sind prominenter
     im kompakten Folder-Format */
  width: 85%;
  aspect-ratio: 4 / 3;
  z-index: 1;
  pointer-events: none;
}

.kb-glass-folder__paper {
  position: absolute;
  inset: 0;
  border-radius: 12px;
  overflow: hidden;
  box-shadow:
    0 8px 32px rgba(0, 0, 0, 0.35),
    0 0 0 1px rgba(255, 255, 255, 0.06);
  transition:
    transform 0.75s cubic-bezier(0.22, 1, 0.36, 1),
    box-shadow 0.5s ease,
    opacity 0.55s cubic-bezier(0.22, 1, 0.36, 1);
  will-change: transform, opacity;
  /* Idle: unsichtbar — kommen erst beim Hover raus */
  opacity: 0;
  --i: 0;
  transform:
    translate(calc(var(--i) * 4px), calc(var(--i) * -3px))
    rotate(calc(var(--i) * 1deg));
  z-index: calc(20 - var(--idx, 0));
}

.kb-glass-folder:hover .kb-glass-folder__paper {
  opacity: 1;
}

.kb-glass-folder__paper img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  filter: saturate(1.05);
}

/* Centered index per paper (set as inline custom property) */
.kb-glass-folder__paper[data-idx="0"] { --i: -2; }
.kb-glass-folder__paper[data-idx="1"] { --i: -1; }
.kb-glass-folder__paper[data-idx="2"] { --i:  0; }
.kb-glass-folder__paper[data-idx="3"] { --i:  1; }
.kb-glass-folder__paper[data-idx="4"] { --i:  2; }
.kb-glass-folder__paper[data-idx="5"] { --i:  3; }

/* Hover: Papers fächern aus, schieben sich nach oben aus dem Folder raus */
.kb-glass-folder:hover .kb-glass-folder__paper {
  transform:
    translate(calc(var(--i) * 28px), calc(var(--i) * 6px - 110px))
    rotate(calc(var(--i) * 4deg))
    scale(1.06);
  box-shadow:
    0 24px 48px rgba(0, 0, 0, 0.45),
    0 0 0 1px rgba(255, 255, 255, 0.1);
}

/* ----- Layer 2: Folder-Shell — EIN Element mit SVG-clipPath ----- */
/* Single-Shell Approach: clip-path: url(#kb-folder-shape) erzeugt
   die durchgehende Folder-Form (Tab + Slope + Body) als eine Form,
   ohne sichtbare Naht zwischen Tab und Body. Plus rounded outer
   corners durch curves im SVG-Path (siehe wp_footer Defs). */

.kb-glass-folder__shell {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    155deg,
    rgba(255, 255, 255, 0.10) 0%,
    rgba(255, 255, 255, 0.04) 45%,
    rgba(255, 255, 255, 0.015) 100%
  );
  backdrop-filter: blur(24px) saturate(1.3);
  -webkit-backdrop-filter: blur(24px) saturate(1.3);
  /* SVG-clipPath aus den wp_footer-Defs */
  clip-path: url(#kb-folder-shape);
  -webkit-clip-path: url(#kb-folder-shape);
  z-index: 2;
  pointer-events: none;
  transition: background 0.6s ease;
}

/* Stroke-Layer: SVG mit non-scaling-stroke, gleiche Form wie Shell */
.kb-glass-folder__stroke {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 3;
  pointer-events: none;
  color: rgba(255, 255, 255, 0.13);
  transition: color 0.6s ease;
}

.kb-glass-folder:hover .kb-glass-folder__shell {
  background: linear-gradient(
    155deg,
    rgba(255, 255, 255, 0.14) 0%,
    rgba(255, 255, 255, 0.06) 45%,
    rgba(255, 255, 255, 0.02) 100%
  );
}

.kb-glass-folder:hover .kb-glass-folder__stroke {
  color: rgba(255, 255, 255, 0.22);
}

/* ----- Layer 3: Projekt-Logo mittig auf dem Glas -----
   Optional (nur wenn logo="…" gesetzt). Sitzt auf der Glasfront
   (über der Shell), im Featured-Hover schieben sich die Papers
   davor (z-index 4). Deckkraft bewusst leicht reduziert, damit es
   auf dem Glas ruht statt aufzukleben. */
.kb-glass-folder__logo {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 55%;
  height: 42%;
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 3;
  opacity: 0.9;
  pointer-events: none;
}
.kb-glass-folder__logo img {
  max-width: 100%;
  max-height: 100%;
  width: auto;
  height: auto;
  object-fit: contain;
  display: block;
}

/* ----- Layer 3: Content (Title, meta, description, coords) ----- */
.kb-glass-folder__content {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  /* Top spacing braucht es nicht — content sitzt unten im Folder */
  padding: 28px 28px 28px 28px;
  z-index: 3;
  display: flex;
  flex-direction: column;
  pointer-events: none;
  color: var(--gf-text);
}

.kb-glass-folder__title {
  margin: 0 0 6px 0;
  font-family: var(--font-headline, 'Brown', 'Inter', sans-serif);
  font-size: clamp(26px, 2.8vw, 36px);
  font-weight: 700;
  letter-spacing: -0.02em;
  line-height: 1;
}

.kb-glass-folder__meta {
  margin: 0;
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 12px;
  letter-spacing: 0.2em;
  color: var(--gf-mono);
  text-transform: uppercase;
}

.kb-glass-folder__description {
  margin: 16px 0 0 0;
  font-family: var(--font-body, 'Avenir', 'Inter', sans-serif);
  font-size: 16px;        /* Fließtext-Standard */
  line-height: 1.55;
  color: rgba(255, 255, 255, 0.82);
  max-width: 360px;
  opacity: 0;
  transform: translateY(8px);
  transition:
    opacity 0.55s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.55s cubic-bezier(0.22, 1, 0.36, 1);
}

.kb-glass-folder:hover .kb-glass-folder__description {
  opacity: 1;
  transform: translateY(0);
}

/* Bottom-row coord marker (e.g. "06 / DOC") */
.kb-glass-folder__coord {
  position: absolute;
  bottom: 18px;
  right: 24px;
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 10px;
  letter-spacing: 0.18em;
  color: var(--gf-mono);
  z-index: 3;
  pointer-events: none;
  text-transform: uppercase;
}

/* Bereich-Icon — sitzt top-right im Body, in Weiß via CSS mask. */
.kb-glass-folder__icon {
  position: absolute;
  /* Mehr Atemluft nach oben weg vom Tab */
  top: calc(var(--gf-tab-h) + 36px);
  right: 26px;
  width: 38px;
  height: 38px;
  background-color: rgba(255, 255, 255, 0.92);
  -webkit-mask-image: var(--icon-url);
  mask-image: var(--icon-url);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-position: center;
  mask-position: center;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  z-index: 4;
  pointer-events: none;
  transition: transform 0.6s cubic-bezier(0.22, 1, 0.36, 1), opacity 0.4s ease;
}

.kb-glass-folder:hover .kb-glass-folder__icon {
  transform: rotate(15deg) scale(1.08);
}

@media (max-width: 768px) {
  .kb-glass-folder__icon {
    width: 32px;
    height: 32px;
    top: calc(var(--gf-tab-h) + 28px);
    right: 18px;
  }
}

/* Tab-Label (sitzt in der Tab-Area top-left) */
.kb-glass-folder__tab-label {
  position: absolute;
  top: 12px;
  left: 18px;
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  color: var(--gf-mono);
  z-index: 3;
  pointer-events: none;
  text-transform: uppercase;
}

/* ----- Mobile ----- */
@media (max-width: 768px) {
  .kb-glass-folder {
    --gf-w: clamp(280px, 80vw, 360px);
    --gf-h: clamp(320px, 90vw, 420px);
    --gf-tab-w: 120px;
    --gf-tab-h: 36px;
  }
  .kb-glass-folder:hover .kb-glass-folder__paper {
    transform:
      translate(calc(var(--i) * 14px), calc(var(--i) * 3px - 72px))
      rotate(calc(var(--i) * 3deg))
      scale(1.04);
  }
}

/* ----- Reduced Motion ----- */
@media (prefers-reduced-motion: reduce) {
  .kb-glass-folder *,
  .kb-glass-folder *::before {
    transition: none !important;
  }
}


/* ============================================================
   KB GLASS FOLDER FORM — Anfrageformular im EXAKTEN Glas-Folder-Stil
   ============================================================
   Visual matched 1:1 mit .kb-glass-folder: gleicher Linear-Gradient,
   gleicher Backdrop-Filter, gleiche Inset-Lichtkante, gleicher Border,
   gleicher --radius-32, gleiche Mono-Marker. Bereich-Auswahl als Pill-
   Checkboxen mit Bereich-Color-Akzenten beim :checked.
   ============================================================ */

.kb-glass-folder-form {
  --gff-text: rgba(255, 255, 255, 0.95);
  /* WCAG AA: 0.62 alpha auf #0a0a0a → ~6.4:1 für 10px-Mono-Labels */
  --gff-mono: rgba(255, 255, 255, 0.62);
  --gff-input-bg: rgba(255, 255, 255, 0.04);
  --gff-input-bg-focus: rgba(255, 255, 255, 0.08);
  /* Border etwas kontrastreicher → besser sichtbar als Form-Begrenzung */
  --gff-input-border: rgba(255, 255, 255, 0.18);
  --gff-input-border-focus: rgba(255, 255, 255, 0.42);

  position: relative;
  width: 100%;
  isolation: isolate;
}

/* Form-Container = Glas-Slab im EXAKT gleichen Stil wie kb-glass-folder__shell */
.kb-glass-folder-form .elementor-form,
.kb-glass-folder-form form {
  position: relative;
  padding: clamp(28px, 4vw, 56px);
  /* Identische Glas-Linear-Gradient-Werte wie kb-glass-folder__shell */
  background: linear-gradient(
    155deg,
    rgba(255, 255, 255, 0.10) 0%,
    rgba(255, 255, 255, 0.04) 45%,
    rgba(255, 255, 255, 0.015) 100%
  );
  backdrop-filter: blur(24px) saturate(1.3);
  -webkit-backdrop-filter: blur(24px) saturate(1.3);
  border: 1px solid rgba(255, 255, 255, 0.12);
  /* Inset Light/Shadow exakt wie Folder */
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.16),
    inset 0 -1px 0 rgba(0, 0, 0, 0.18),
    0 24px 64px rgba(0, 0, 0, 0.25);
  border-radius: var(--radius-32, 32px);
  color: var(--gff-text);
}

/* Orb entfernt — kein blauer Schein hinter dem Form */

/* Mono-Coord-Marker top-right (matched Folder-Coord) — deaktiviert.
   Falls wieder gewünscht: content auf "INQUIRY · 01" zurücksetzen. */
.kb-glass-folder-form .elementor-form::before {
  content: none;
}

/* Field-Labels im Mono-Brutalist-Stil (matched Folder __tab-label) */
.kb-glass-folder-form .elementor-field-group > label,
.kb-glass-folder-form .elementor-field-label {
  display: block;
  color: var(--gff-mono);
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 10px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  font-weight: 500;
  margin-bottom: 10px;
}

/* Field-Group: vertikales Spacing wiederherstellen (alte kb-contact-form
   hatte mit !important reingegrätscht und Margin/Padding genullt) */
.kb-glass-folder-form .elementor-form .elementor-field-group {
  margin-bottom: 14px !important;
  padding: 0 !important;
  position: relative !important;       /* für Required-Asterisk-Positionierung */
}

/* Pflichtfeld-Marker: Asterisk top-right im Field-Group bei required Feldern.
   Funktioniert ohne Labels via :has() — moderne Browser only. */
.kb-glass-folder-form .elementor-form .elementor-field-group:has(.elementor-field[required])::after {
  content: "*";
  position: absolute;
  top: 14px;
  right: 18px;
  color: rgba(255, 255, 255, 0.55);
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 16px;
  line-height: 1;
  pointer-events: none;
  z-index: 2;
}

/* Bei Checkbox/Acceptance-Gruppen Asterisk nicht im Input — direkt neben
   die erste Pille pinnen. */
.kb-glass-folder-form .elementor-field-type-checkbox::after,
.kb-glass-folder-form .elementor-field-type-acceptance::after {
  display: none !important;
}

.kb-glass-folder-form .elementor-form .elementor-field-type-checkbox.elementor-field-required > .elementor-field-subgroup::before,
.kb-glass-folder-form .elementor-form .elementor-field-group:has(.elementor-field-type-checkbox > input[required])::before {
  content: "* Pflichtauswahl";
  display: block;
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 10px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.55);
  margin-bottom: 8px;
}

/* Padding-Right anheben damit Asterisk nicht auf Text-Eingabe sitzt */
.kb-glass-folder-form .elementor-form .elementor-field-group:has(.elementor-field[required]) .elementor-field {
  padding-right: 36px !important;
}

/* Custom Validation Error State — nach Submit oder JS-Trigger */
.kb-glass-folder-form .elementor-form .elementor-field-group.kb-has-error .elementor-field {
  border-color: rgba(255, 130, 130, 0.7) !important;
  background: rgba(255, 100, 100, 0.06) !important;
}

.kb-glass-folder-form .kb-form-error {
  display: block;
  margin-top: 8px;
  padding-left: 4px;
  font-family: var(--font-body, inherit);
  font-size: 13px;
  line-height: 1.25;
  color: rgba(255, 150, 150, 0.95);
  letter-spacing: 0;
  text-transform: none;
  animation: kb-form-error-in 0.35s cubic-bezier(0.22, 1, 0.36, 1);
}

/* Elementors eigene Validation-UI komplett ausblenden — wir nutzen
   ausschließlich kb-form-error für ein einheitliches Look. */
.kb-glass-folder-form .elementor-message,
.kb-glass-folder-form .elementor-message-danger,
.kb-glass-folder-form .elementor-message-success,
.kb-glass-folder-form .elementor-message-svg,
.kb-glass-folder-form .elementor-error,
.kb-glass-folder-form .elementor-error-message,
.kb-glass-folder-form .elementor-form-help-inline,
.kb-glass-folder-form .elementor-form-error,
.kb-glass-folder-form [class*="elementor-error-message"],
.kb-glass-folder-form [class*="elementor-message-danger"] {
  display: none !important;
  visibility: hidden !important;
}

/* Erfolgs-Message NACH Submit zeigen wir hingegen, aber im eigenen Stil */
.kb-glass-folder-form .elementor-message.kb-allow-success,
.kb-glass-folder-form .elementor-message-success.kb-allow-success {
  display: block !important;
  visibility: visible !important;
  background: rgba(0, 255, 100, 0.08) !important;
  border: 1px solid rgba(0, 255, 100, 0.3) !important;
  border-radius: 12px !important;
  color: rgba(255, 255, 255, 0.95) !important;
  padding: 14px 18px !important;
  margin-top: 16px !important;
  font-family: var(--font-body, inherit) !important;
  font-size: 15px !important;
}

@keyframes kb-form-error-in {
  from { opacity: 0; transform: translateY(-4px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Labels SICHTBAR machen — alte kb-contact-form hatte display:none erzwungen */
.kb-glass-folder-form .elementor-form .elementor-field-label {
  display: block !important;
  color: var(--gff-mono) !important;
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace !important;
  font-size: 10px !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  font-weight: 500 !important;
  margin-bottom: 8px !important;
  line-height: 1.25 !important;
}

/* Glas-Inputs mit radius-12 (matched Folder __paper border-radius).
   Hohe Spezifität + !important nötig um pre-existierende kb-contact-form
   Override-Regeln zu schlagen. */
.kb-glass-folder-form .elementor-form .elementor-field,
.kb-glass-folder-form input[type="text"],
.kb-glass-folder-form input[type="email"],
.kb-glass-folder-form input[type="tel"],
.kb-glass-folder-form input[type="url"],
.kb-glass-folder-form input[type="number"],
.kb-glass-folder-form textarea,
.kb-glass-folder-form select {
  width: 100% !important;
  background: var(--gff-input-bg) !important;
  border: 1px solid var(--gff-input-border) !important;
  border-bottom: 1px solid var(--gff-input-border) !important;
  color: var(--gff-text) !important;
  border-radius: 12px !important;
  padding: 14px 18px !important;
  font-size: 16px !important;
  font-family: var(--font-body, inherit) !important;
  font-weight: 400 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  line-height: 1.25 !important;
  box-shadow: none !important;
  transition:
    background 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    border-color 0.4s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.kb-glass-folder-form input::placeholder,
.kb-glass-folder-form textarea::placeholder,
.kb-glass-folder-form .elementor-form .elementor-field::placeholder {
  /* WCAG AA: weiß @ 0.62 alpha auf #0a0a0a → ~#9d9d9d → 6.4:1 ✓ */
  color: rgba(255, 255, 255, 0.62) !important;
  font-family: var(--font-body, inherit) !important;
  font-size: 16px !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  opacity: 1 !important;
}

.kb-glass-folder-form input:focus,
.kb-glass-folder-form textarea:focus,
.kb-glass-folder-form select:focus,
.kb-glass-folder-form .elementor-form .elementor-field:focus {
  background: var(--gff-input-bg-focus) !important;
  border-color: var(--gff-input-border-focus) !important;
  border-bottom-color: var(--gff-input-border-focus) !important;
  outline: none !important;
}

/* Textarea braucht etwas mehr Höhe und Resize */
.kb-glass-folder-form .elementor-form textarea.elementor-field {
  min-height: 130px !important;
  resize: vertical !important;
}

/* Select Dropdown */
.kb-glass-folder-form select {
  appearance: none;
  -webkit-appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'><path d='M3 5l4 4 4-4' stroke='rgba(255,255,255,0.55)' fill='none' stroke-width='1.5'/></svg>");
  background-repeat: no-repeat;
  background-position: right 16px center;
  padding-right: 44px;
}
.kb-glass-folder-form select option {
  background: var(--kb-gray-900, #0a0a0a);
  color: var(--gff-text);
}

.kb-glass-folder-form textarea {
  min-height: 130px;
  resize: vertical;
}

/* Bereich-Field als Pill-Checkboxen — IN ZEILE NEBENEINANDER, mit Wrap. */
.kb-glass-folder-form .elementor-field-type-checkbox .elementor-field-subgroup {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 8px !important;
  margin-top: 4px !important;
  width: 100% !important;
}

.kb-glass-folder-form .elementor-field-type-checkbox .elementor-field-option {
  position: relative;
  margin: 0 !important;
  display: inline-flex !important;
  width: auto !important;
  flex: 0 0 auto !important;
}

/* Visually-hidden Pattern: Input ist klickbar via for/id ODER direkt
   (keine pointer-events:none mehr — DAS war der Click-Killer). */
.kb-glass-folder-form .elementor-field-type-checkbox input[type="checkbox"] {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
  opacity: 0 !important;
  /* WICHTIG: pointer-events bleibt auto, sonst greift label-for-id-Toggle nicht */
}

.kb-glass-folder-form .elementor-field-type-checkbox .elementor-field-option label {
  display: inline-flex !important;
  align-items: center !important;
  padding: 10px 18px !important;
  background: var(--gff-input-bg) !important;
  border: 1px solid var(--gff-input-border) !important;
  border-radius: var(--radius-full, 100vmax) !important;
  color: rgba(255, 255, 255, 0.85) !important;
  font-family: var(--font-body, inherit) !important;
  font-size: 14px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  cursor: pointer !important;
  pointer-events: auto !important;
  user-select: none;
  margin: 0 !important;
  width: auto !important;
  white-space: nowrap;
  transition:
    background 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    border-color 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    color 0.4s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.kb-glass-folder-form .elementor-field-type-checkbox .elementor-field-option label:hover {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.28);
  color: var(--gff-text);
}

.kb-glass-folder-form .elementor-field-type-checkbox input[type="checkbox"]:checked + label {
  background: var(--kb-white, #fff) !important;
  border-color: var(--kb-white, #fff) !important;
  color: var(--kb-gray-900, #0a0a0a) !important;
}

/* Hover-Feedback auf Pillen für Tastatur-Navigation */
.kb-glass-folder-form .elementor-field-type-checkbox .elementor-field-option label:hover {
  background: rgba(255, 255, 255, 0.10) !important;
  border-color: rgba(255, 255, 255, 0.45) !important;
  color: rgba(255, 255, 255, 1) !important;
}

/* Focus-Ring wenn Checkbox via Tab fokussiert ist */
.kb-glass-folder-form .elementor-field-type-checkbox input[type="checkbox"]:focus-visible + label {
  box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.25);
  outline: none;
}

/* DSGVO Acceptance — Custom-Checkbox passend zum Glas-Stil */
.kb-glass-folder-form .elementor-field-type-acceptance {
  margin-top: 16px !important;
}

.kb-glass-folder-form .elementor-field-type-acceptance .elementor-field-subgroup {
  display: flex !important;
  flex-direction: row !important;
  align-items: flex-start !important;
  gap: 14px !important;
  margin-top: 0 !important;
}

/* Native Checkbox visuell verstecken (a11y bleibt erhalten via Label-Wrap) */
.kb-glass-folder-form .elementor-field-type-acceptance input[type="checkbox"] {
  position: absolute !important;
  opacity: 0 !important;
  pointer-events: none !important;
  width: 22px !important;
  height: 22px !important;
  margin: 0 !important;
}

.kb-glass-folder-form .elementor-field-type-acceptance label {
  position: relative !important;
  display: inline-flex !important;
  align-items: flex-start !important;
  gap: 14px !important;
  cursor: pointer !important;
  color: rgba(255, 255, 255, 0.78) !important;
  font-size: 13px !important;
  line-height: 1.55 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  font-family: var(--font-body, inherit) !important;
  font-weight: 400 !important;
  margin: 0 !important;
  padding-left: 0 !important;
}

/* Custom Glas-Box vor dem Label */
.kb-glass-folder-form .elementor-field-type-acceptance label::before {
  content: "";
  display: inline-block;
  flex-shrink: 0;
  width: 22px;
  height: 22px;
  margin-top: 1px;
  border: 1.5px solid rgba(255, 255, 255, 0.32);
  background: rgba(255, 255, 255, 0.04);
  border-radius: 6px;
  transition:
    background 0.35s cubic-bezier(0.22, 1, 0.36, 1),
    border-color 0.35s cubic-bezier(0.22, 1, 0.36, 1);
  position: relative;
}

/* Checkmark als ::after (positioniert auf dem Label, der vor der Box sitzt) */
.kb-glass-folder-form .elementor-field-type-acceptance label::after {
  content: "";
  position: absolute;
  left: 5px;
  top: 8px;
  width: 11px;
  height: 6px;
  border-left: 2px solid var(--kb-gray-900, #0a0a0a);
  border-bottom: 2px solid var(--kb-gray-900, #0a0a0a);
  transform: rotate(-45deg) scale(0);
  transform-origin: center center;
  transition: transform 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
  pointer-events: none;
}

/* Hover auf Box */
.kb-glass-folder-form .elementor-field-type-acceptance label:hover::before {
  border-color: rgba(255, 255, 255, 0.55);
  background: rgba(255, 255, 255, 0.08);
}

/* Checked-State: Box weiß, Checkmark sichtbar */
.kb-glass-folder-form .elementor-field-type-acceptance input[type="checkbox"]:checked + label::before {
  background: var(--kb-white, #fff);
  border-color: var(--kb-white, #fff);
}

.kb-glass-folder-form .elementor-field-type-acceptance input[type="checkbox"]:checked + label::after {
  transform: rotate(-45deg) scale(1);
}

/* Focus-Ring für Tastatur-Navigation */
.kb-glass-folder-form .elementor-field-type-acceptance input[type="checkbox"]:focus-visible + label::before {
  box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.25);
}

/* Datenschutz-Link in Bereich-Bekömmlich */
.kb-glass-folder-form .elementor-field-type-acceptance label a {
  color: rgba(255, 255, 255, 0.95) !important;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
  text-decoration-color: rgba(255, 255, 255, 0.4);
  transition: text-decoration-color 0.3s ease;
}
.kb-glass-folder-form .elementor-field-type-acceptance label a:hover {
  text-decoration-color: rgba(255, 255, 255, 1);
}

/* Submit-Button — weißer Pill-CTA (matched Folder-CTA-Style) */
.kb-glass-folder-form .elementor-form .elementor-button,
.kb-glass-folder-form button[type="submit"] {
  background: var(--kb-white, #fff) !important;
  color: var(--kb-gray-900, #0a0a0a) !important;
  border: 1px solid var(--kb-white, #fff) !important;
  padding: 16px 32px !important;
  border-radius: var(--radius-full, 100vmax) !important;
  font-family: var(--font-headline, inherit) !important;
  font-weight: 600 !important;
  font-size: 16px !important;
  letter-spacing: 0.02em !important;
  text-transform: none !important;
  cursor: pointer;
  margin-top: 16px !important;
  box-shadow: none !important;
  transition:
    background 0.45s cubic-bezier(0.22, 1, 0.36, 1),
    color 0.45s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.45s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.kb-glass-folder-form .elementor-form .elementor-button:hover,
.kb-glass-folder-form button[type="submit"]:hover {
  background: transparent !important;
  color: var(--kb-white, #fff) !important;
  transform: translateY(-2px);
}

.kb-glass-folder-form .elementor-form .elementor-button .elementor-button-text {
  color: inherit !important;
  font-family: inherit !important;
  font-size: inherit !important;
  font-weight: inherit !important;
  text-transform: none !important;
  letter-spacing: inherit !important;
}

/* Required-Marker (*) in dezentem Akzent */
.kb-glass-folder-form .elementor-mark-required {
  color: rgba(255, 255, 255, 0.5);
  font-weight: 400;
}

/* ------------------------------------------------------------
   FriendlyCaptcha — an den Glas-Form-Stil angeglichen
   ------------------------------------------------------------
   Das Plugin injiziert seine Styles zur Laufzeit als
   <style id="frc-style"> in den <head>, also NACH style.css.
   Deshalb hier durchgehend höhere Spezifität (Wrapper-Klasse
   vorangestellt) plus !important, sonst gewinnt das Plugin.
   Markup (friendly-challenge v1):
     .frc-captcha > .frc-container > .frc-icon + .frc-content
                                      > .frc-text + .frc-button + .frc-progress
     .frc-captcha > .frc-banner
   Status-Klassen liegen auf .frc-container (.frc-success),
   der Fehler-Zustand auf dem Icon (.frc-warning).
   ------------------------------------------------------------ */

/* Box = exakt der Input-Look (bg, border, radius-12, padding) */
.kb-glass-folder-form .frc-captcha {
  position: relative !important;
  display: block !important;
  width: 100% !important;
  min-width: 0 !important;
  max-width: none !important;
  background: var(--gff-input-bg) !important;
  border: 1px solid var(--gff-input-border) !important;
  border-radius: 12px !important;
  padding: 14px 18px 30px !important;
  box-shadow: none !important;
  transition:
    background 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    border-color 0.4s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

/* Plugin-Reset (.frc-captcha * { color:#222 }) neutralisieren.
   Bewusst OHNE font-family, sonst überschreibt diese Regel die
   Mono-Vererbung an <b> und <a> innerhalb von .frc-text. */
.kb-glass-folder-form .frc-captcha * {
  color: inherit !important;
}

.kb-glass-folder-form .frc-captcha .frc-container {
  display: flex !important;
  align-items: flex-start !important;
  gap: 13px !important;
  min-height: 0 !important;
}

.kb-glass-folder-form .frc-captcha .frc-icon {
  flex-shrink: 0 !important;
  width: 24px !important;
  height: 24px !important;
  margin: -1px 0 0 !important;
  /* stroke muss gesetzt bleiben: der Lade-Spinner ist ein Kreis mit
     fill="none", der die Strichfarbe vom <svg> erbt. */
  fill: var(--gff-mono) !important;
  stroke: var(--gff-mono) !important;
  transition:
    fill 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    stroke 0.4s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.kb-glass-folder-form .frc-captcha .frc-content {
  display: flex !important;
  flex-direction: column !important;
  align-items: flex-start !important;
  gap: 8px !important;
  margin: 0 !important;
  overflow: visible !important;
  white-space: normal !important;
  flex-grow: 1 !important;
  min-width: 0 !important;
}

/* Statustext im Mono-Label-Stil wie die Field-Labels */
.kb-glass-folder-form .frc-captcha .frc-text {
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace !important;
  font-size: 11px !important;
  font-weight: 500 !important;
  letter-spacing: 0.16em !important;
  text-transform: uppercase !important;
  line-height: 1.25 !important;
  color: var(--gff-mono) !important;
  white-space: normal !important;
}

/* Fehler-Überschrift bleibt im Mono-Raster, nur eine Nuance heller */
.kb-glass-folder-form .frc-captcha .frc-text b {
  font-family: inherit !important;
  font-size: inherit !important;
  font-weight: 600 !important;
  letter-spacing: inherit !important;
  text-transform: inherit !important;
  line-height: inherit !important;
  color: rgba(255, 255, 255, 0.85) !important;
}

/* URLs in Fehlermeldungen lesbar lassen */
.kb-glass-folder-form .frc-captcha .frc-err-url {
  text-transform: none !important;
  letter-spacing: 0 !important;
  text-decoration: underline !important;
  text-underline-offset: 3px !important;
}

/* Button = Pille wie die Bereich-Checkboxen, eine Stufe leiser
   als der weiße Submit-CTA */
.kb-glass-folder-form .frc-captcha .frc-button {
  align-self: flex-start !important;
  display: inline-flex !important;
  align-items: center !important;
  padding: 9px 18px !important;
  background: rgba(255, 255, 255, 0.10) !important;
  border: 1px solid rgba(255, 255, 255, 0.28) !important;
  border-radius: var(--radius-full, 100vmax) !important;
  color: rgba(255, 255, 255, 0.92) !important;
  font-family: var(--font-body, inherit) !important;
  font-size: 13px !important;
  font-weight: 500 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  line-height: 1.25 !important;
  cursor: pointer !important;
  transition:
    background 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    border-color 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    color 0.4s cubic-bezier(0.22, 1, 0.36, 1) !important;
}

.kb-glass-folder-form .frc-captcha .frc-button:hover {
  background: var(--kb-white, #fff) !important;
  border-color: var(--kb-white, #fff) !important;
  color: var(--kb-gray-900, #0a0a0a) !important;
}

.kb-glass-folder-form .frc-captcha .frc-button:focus,
.kb-glass-folder-form .frc-captcha .frc-button:focus-visible {
  border-color: var(--gff-input-border-focus) !important;
  box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.25) !important;
  outline: none !important;
}

/* Fortschrittsbalken: dünn, weiß, ohne Chrome-Default-Look */
.kb-glass-folder-form .frc-captcha .frc-progress {
  -webkit-appearance: none !important;
  -moz-appearance: none !important;
  appearance: none !important;
  width: 100% !important;
  max-width: 220px !important;
  height: 3px !important;
  margin: 2px 0 !important;
  border: none !important;
  border-radius: var(--radius-full, 100vmax) !important;
  overflow: hidden !important;
  background-color: rgba(255, 255, 255, 0.14) !important;
  color: var(--kb-white, #fff) !important;
}
.kb-glass-folder-form .frc-captcha .frc-progress::-webkit-progress-bar {
  background: rgba(255, 255, 255, 0.14) !important;
}
.kb-glass-folder-form .frc-captcha .frc-progress::-webkit-progress-value {
  background: var(--kb-white, #fff) !important;
}
.kb-glass-folder-form .frc-captcha .frc-progress::-moz-progress-bar {
  background: var(--kb-white, #fff) !important;
}

/* Anbieter-Hinweis unten rechts, so leise wie möglich */
.kb-glass-folder-form .frc-captcha .frc-banner {
  position: absolute !important;
  right: 18px !important;
  bottom: 9px !important;
  line-height: 1 !important;
}

.kb-glass-folder-form .frc-captcha .frc-banner a,
.kb-glass-folder-form .frc-captcha .frc-banner b {
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace !important;
  font-size: 9px !important;
  font-weight: 500 !important;
  letter-spacing: 0.18em !important;
  text-transform: uppercase !important;
  text-decoration: none !important;
  opacity: 1 !important;
  color: rgba(255, 255, 255, 0.34) !important;
  transition: color 0.3s ease !important;
}

.kb-glass-folder-form .frc-captcha .frc-banner a:hover,
.kb-glass-folder-form .frc-captcha .frc-banner a:hover b {
  color: rgba(255, 255, 255, 0.6) !important;
}

/* Gelöst: Box hebt sich wie ein fokussiertes Feld, Icon und Text weiß.
   Kein Farbeinsatz, gleiche Logik wie die aktive Bereich-Pille. */
.kb-glass-folder-form .frc-captcha:has(.frc-success) {
  background: var(--gff-input-bg-focus) !important;
  border-color: var(--gff-input-border-focus) !important;
}

.kb-glass-folder-form .frc-captcha .frc-success .frc-icon {
  fill: var(--kb-white, #fff) !important;
  stroke: var(--kb-white, #fff) !important;
}

.kb-glass-folder-form .frc-captcha .frc-success .frc-text {
  color: var(--gff-text) !important;
}

/* Fehler: gleicher Rot-Ton wie .kb-has-error und .kb-form-error */
.kb-glass-folder-form .frc-captcha:has(.frc-icon.frc-warning) {
  border-color: rgba(255, 130, 130, 0.7) !important;
  background: rgba(255, 100, 100, 0.06) !important;
}

.kb-glass-folder-form .frc-captcha .frc-icon.frc-warning {
  fill: rgba(255, 150, 150, 0.95) !important;
  stroke: rgba(255, 150, 150, 0.95) !important;
}

@media (prefers-reduced-motion: reduce) {
  .kb-glass-folder-form .frc-captcha,
  .kb-glass-folder-form .frc-captcha * {
    transition: none !important;
  }
}

/* Mobile */
@media (max-width: 768px) {
  .kb-glass-folder-form .frc-captcha {
    padding: 12px 16px 28px !important;
  }
  .kb-glass-folder-form .frc-captcha .frc-banner {
    right: 16px !important;
  }
  .kb-glass-folder-form .elementor-form,
  .kb-glass-folder-form form {
    padding: 24px 22px;
    border-radius: var(--radius-24, 24px);
  }
  .kb-glass-folder-form input,
  .kb-glass-folder-form textarea,
  .kb-glass-folder-form select {
    padding: 12px 16px;
  }
}


/* ----- LEGACY: kb-glass-form (vom ersten falschen Build, wird nicht mehr
   verwendet, lass ich aber drin damit nichts bricht falls noch genutzt) ----- */

.kb-glass-form-stage {
  position: relative;
  isolation: isolate;
  overflow: clip;
}

/* Subtiler Bereich-Color-Orb hinter dem Form-Panel (Bereich neutral) */
.kb-glass-form-stage::before {
  content: "";
  position: absolute;
  width: 60%;
  aspect-ratio: 1;
  top: 30%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: radial-gradient(
    circle,
    var(--kb-marke, #234bff) 0%,
    transparent 70%
  );
  filter: blur(80px);
  opacity: 0.2;
  z-index: 0;
  pointer-events: none;
}

/* Das Form-Widget selbst → Glas-Panel */
.kb-glass-form {
  position: relative;
  z-index: 1;
}

.kb-glass-form .elementor-form,
.kb-glass-form form {
  position: relative;
  padding: clamp(28px, 4vw, 48px) clamp(24px, 4vw, 44px);
  background: linear-gradient(
    155deg,
    rgba(255, 255, 255, 0.07) 0%,
    rgba(255, 255, 255, 0.025) 50%,
    rgba(255, 255, 255, 0.01) 100%
  );
  backdrop-filter: blur(28px) saturate(1.3);
  -webkit-backdrop-filter: blur(28px) saturate(1.3);
  border: 1px solid rgba(255, 255, 255, 0.12);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.14),
    inset 0 -1px 0 rgba(0, 0, 0, 0.20),
    0 24px 64px rgba(0, 0, 0, 0.25);
  border-radius: var(--radius-32, 32px);
  isolation: isolate;
}

/* Field-Labels: hell, monospace-anmutung */
.kb-glass-form .elementor-field-group > label,
.kb-glass-form .elementor-field-label {
  color: rgba(255, 255, 255, 0.78);
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  font-weight: 500;
  margin-bottom: 10px;
}

/* Glas-Inputs: Text, Email, Tel, Textarea, Select */
.kb-glass-form input[type="text"],
.kb-glass-form input[type="email"],
.kb-glass-form input[type="tel"],
.kb-glass-form input[type="url"],
.kb-glass-form input[type="number"],
.kb-glass-form textarea,
.kb-glass-form select {
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.12);
  color: rgba(255, 255, 255, 0.95);
  border-radius: var(--radius-12, 12px);
  padding: 14px 18px;
  font-size: 16px;
  font-family: var(--font-body, inherit);
  width: 100%;
  transition: background 0.3s ease, border-color 0.3s ease;
}

.kb-glass-form input::placeholder,
.kb-glass-form textarea::placeholder {
  color: rgba(255, 255, 255, 0.42);
}

.kb-glass-form input:focus,
.kb-glass-form textarea:focus,
.kb-glass-form select:focus {
  background: rgba(255, 255, 255, 0.07);
  border-color: rgba(255, 255, 255, 0.30);
  outline: none;
  box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.05);
}

/* Select dropdown mit dunkler Option-Liste */
.kb-glass-form select {
  appearance: none;
  -webkit-appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14'><path d='M3 5l4 4 4-4' stroke='rgba(255,255,255,0.5)' fill='none' stroke-width='1.5'/></svg>");
  background-repeat: no-repeat;
  background-position: right 16px center;
  padding-right: 44px;
}

.kb-glass-form select option {
  background: var(--kb-gray-900, #0a0a0a);
  color: rgba(255, 255, 255, 0.95);
}

.kb-glass-form textarea {
  min-height: 120px;
  resize: vertical;
  line-height: 1.5;
}

/* Bereich-Field als Pill-Checkboxen ausspielen */
.kb-glass-form .elementor-field-type-checkbox .elementor-field-subgroup {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.kb-glass-form .elementor-field-type-checkbox .elementor-field-option {
  position: relative;
}

.kb-glass-form .elementor-field-type-checkbox input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  pointer-events: none;
  width: 1px;
  height: 1px;
}

.kb-glass-form .elementor-field-type-checkbox .elementor-field-option label {
  display: inline-flex;
  align-items: center;
  padding: 11px 18px;
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: var(--radius-full, 100vmax);
  color: rgba(255, 255, 255, 0.78);
  font-family: var(--font-body, inherit);
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
  user-select: none;
  text-transform: none;
  letter-spacing: 0;
  margin-bottom: 0;
  transition:
    background 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    border-color 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    color 0.3s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}

.kb-glass-form .elementor-field-type-checkbox .elementor-field-option label:hover {
  background: rgba(255, 255, 255, 0.08);
  border-color: rgba(255, 255, 255, 0.28);
  color: rgba(255, 255, 255, 0.95);
}

.kb-glass-form .elementor-field-type-checkbox input[type="checkbox"]:checked + label {
  background: var(--kb-white, #ffffff);
  border-color: var(--kb-white, #ffffff);
  color: var(--kb-gray-900, #0a0a0a);
  transform: scale(1.02);
}

.kb-glass-form .elementor-field-type-checkbox input[type="checkbox"]:focus-visible + label {
  outline: 2px solid rgba(255, 255, 255, 0.5);
  outline-offset: 2px;
}

/* DSGVO-Acceptance: einfacher Checkbox-Look */
.kb-glass-form .elementor-field-type-acceptance {
  margin-top: 12px;
}

.kb-glass-form .elementor-field-type-acceptance .elementor-field-subgroup {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}

.kb-glass-form .elementor-field-type-acceptance label {
  color: rgba(255, 255, 255, 0.65);
  font-size: 13px;
  letter-spacing: 0;
  text-transform: none;
  font-family: var(--font-body, inherit);
  font-weight: 400;
  line-height: 1.5;
}

.kb-glass-form .elementor-field-type-acceptance input[type="checkbox"] {
  width: 18px;
  height: 18px;
  margin-top: 2px;
  accent-color: var(--kb-marke, #234bff);
}

/* Submit-Button: solider Look mit Hover */
.kb-glass-form .elementor-button,
.kb-glass-form button[type="submit"] {
  background: var(--kb-white, #ffffff);
  color: var(--kb-gray-900, #0a0a0a);
  border: 1px solid var(--kb-white, #ffffff);
  padding: 16px 36px;
  border-radius: var(--radius-full, 100vmax);
  font-family: var(--font-headline, inherit);
  font-weight: 600;
  font-size: 16px;
  letter-spacing: 0.02em;
  cursor: pointer;
  transition:
    background 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    color 0.4s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.4s cubic-bezier(0.22, 1, 0.36, 1);
}

.kb-glass-form .elementor-button:hover,
.kb-glass-form button[type="submit"]:hover {
  background: transparent;
  color: var(--kb-white, #ffffff);
  transform: translateY(-2px);
}

/* Required-Marker (*) */
.kb-glass-form .elementor-mark-required {
  color: var(--kb-marke, #234bff);
}

/* Mobile Anpassungen */
@media (max-width: 768px) {
  .kb-glass-form .elementor-form,
  .kb-glass-form form {
    padding: 24px 20px;
    border-radius: var(--radius-24, 24px);
  }
  .kb-glass-form input,
  .kb-glass-form textarea,
  .kb-glass-form select {
    font-size: 16px;        /* iOS: kein Auto-Zoom */
    padding: 12px 16px;
  }
}


/* ============================================================
   KB GLASS FOLDER GRID — 6 Folder als Bereichs-Übersicht (3×2)
   ============================================================ */

.kb-glass-folder-grid {
  position: relative;
  width: 100%;                          /* sicher full-width im Elementor-Flex-Parent */
  flex: 1 1 100%;                       /* Elementor flex-children-Verhalten */
  background: var(--kb-gray-900, #0a0a0a);
  padding-block: clamp(80px, 10vh, 140px);
  padding-inline: 0;                    /* horizontales Padding kommt vom Eltern-Container */
  overflow: visible;                    /* Folder-Hover darf über Container hinaus */
  box-sizing: border-box;
}

.kb-glass-folder-grid__inner {
  width: 100%;
  max-width: 1400px;
  margin: 0 auto;
  display: grid !important;             /* gegen Elementor-Override-Risiko */
  grid-template-columns: repeat(3, 1fr) !important;
  gap: 28px !important;
  box-sizing: border-box;
}

/* Gegen versehentliches Inline-Stacking durch Elementor's flex-Container:
   stelle sicher dass jedes Folder-Element ein eigenes Grid-Item ist */
.kb-glass-folder-grid .kb-glass-folder {
  display: block;
  position: relative;
  min-width: 0;                          /* erlaubt grid-shrink wenn nötig */
}

/* Folder im Grid: kompakte Größe (Original) */
.kb-glass-folder-grid .kb-glass-folder {
  --gf-w: 100%;
  --gf-h: clamp(360px, 30vw, 460px);
  --gf-tab-w: 110px;
  --gf-tab-h: 36px;
}

/* Tablet: 2 Spalten */
@media (max-width: 1024px) {
  .kb-glass-folder-grid__inner {
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 22px !important;
  }
  .kb-glass-folder-grid .kb-glass-folder {
    --gf-h: clamp(340px, 50vw, 440px);
  }
}

/* Mobile: 1 Spalte */
@media (max-width: 640px) {
  .kb-glass-folder-grid__inner {
    grid-template-columns: 1fr !important;
    gap: 16px !important;
  }
  .kb-glass-folder-grid .kb-glass-folder {
    --gf-h: clamp(360px, 90vw, 460px);
    --gf-w: 100%;
    max-width: 100%;
  }
}


/* ============================================================
   KB MAGAZIN — Editorial Single-Article Styles (DARK)
   ============================================================
   Komplett-dunkles Layout. Recycelt bestehende Tokens
   (kb-headline, fs-*, kb-section-lg). Hero im Stil einer
   Projekt-Einzelseite, Body als 720px-Lese-Spalte mit
   white-on-dark Prose.
   ============================================================ */

/* Mono-Eyebrow ("Wissen", "Next Step") — passt zum Site-System */
.kb-mono-eyebrow,
.kb-mono-eyebrow .elementor-heading-title {
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace !important;
  font-size: 11px !important;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  font-weight: 500;
}

/* Magazin-Headline groß aber nicht so monumental wie Bereich-Hero */
.kb-headline-magazin .elementor-heading-title {
  font-size: clamp(2rem, 1.4rem + 2.5vw, 3.5rem) !important;
  line-height: 1.25;
  letter-spacing: -0.01em;
  max-width: 18ch;
  margin-inline: auto;
}

/* Datum / Meta unter der Headline */
.kb-magazin-meta {
  font-family: 'SFMono-Regular', 'JetBrains Mono', 'Menlo', monospace;
  font-size: 12px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
}
.kb-magazin-meta .elementor-icon-list-text,
.kb-magazin-meta span,
.kb-magazin-meta .elementor-post-info__item {
  color: inherit !important;
  font-family: inherit !important;
  font-size: inherit !important;
  letter-spacing: inherit !important;
}
.kb-magazin-meta .elementor-icon-list-icon { display: none !important; }

/* Hero Featured Image — als großes Card auf dunklem BG */
.kb-magazin-image-wrap .elementor-widget-theme-post-featured-image,
.kb-magazin-image-wrap img,
.kb-magazin-hero-image img {
  border-radius: var(--radius-32, 32px) !important;
  overflow: hidden;
  width: 100%;
  height: auto;
  display: block;
}

/* Body-Spalte: 720px schmal, zentriert, dunkler Hintergrund */
.kb-magazin-prose {
  max-width: 720px !important;
  width: 100% !important;
  margin-inline: auto !important;
}

/* Prose-Typografie auf dunkel */
.kb-prose,
.kb-prose--dark,
.kb-magazin-body .elementor-widget-theme-post-content {
  font-family: var(--font-body);
  font-size: clamp(1rem, 0.92rem + 0.45vw, 1.125rem);
  line-height: 1.75;
  color: var(--kb-gray-100, #F4F2EE);
}
.kb-magazin-body .elementor-widget-theme-post-content p {
  margin-block: 0 1.4em;
  color: var(--kb-gray-100);
}
.kb-magazin-body .elementor-widget-theme-post-content h2 {
  font-family: var(--font-headline);
  font-size: clamp(1.5rem, 1.2rem + 1vw, 2rem);
  line-height: 1.25;
  font-weight: 700;
  margin-block: 2.5em 0.6em;
  color: var(--kb-white, #ffffff);
}
.kb-magazin-body .elementor-widget-theme-post-content h3 {
  font-family: var(--font-headline);
  font-size: clamp(1.25rem, 1rem + 0.8vw, 1.5rem);
  line-height: 1.25;
  font-weight: 700;
  margin-block: 2em 0.5em;
  color: var(--kb-white, #ffffff);
}
.kb-magazin-body .elementor-widget-theme-post-content h4 {
  font-family: var(--font-headline);
  font-size: 1.125rem;
  line-height: 1.25;
  font-weight: 700;
  margin-block: 1.6em 0.4em;
  color: var(--kb-white);
}
.kb-magazin-body .elementor-widget-theme-post-content ul,
.kb-magazin-body .elementor-widget-theme-post-content ol {
  margin-block: 1em 1.5em;
  padding-inline-start: 1.25em;
  color: var(--kb-gray-100);
}
.kb-magazin-body .elementor-widget-theme-post-content li {
  margin-block: 0.4em;
}
.kb-magazin-body .elementor-widget-theme-post-content blockquote {
  border-left: 3px solid var(--kb-marke, #ffd84d);
  padding: 0.25em 0 0.25em 1.25em;
  margin: 1.75em 0;
  font-family: var(--font-headline);
  font-size: clamp(1.125rem, 1rem + 0.4vw, 1.375rem);
  line-height: 1.45;
  font-style: italic;
  color: var(--kb-white, #ffffff);
}
.kb-magazin-body .elementor-widget-theme-post-content a {
  color: var(--kb-marke, #ffd84d);
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1px;
}
.kb-magazin-body .elementor-widget-theme-post-content a:hover {
  color: var(--kb-white);
}
.kb-magazin-body .elementor-widget-theme-post-content img {
  max-width: 100%;
  height: auto;
  border-radius: var(--radius-16, 16px);
  margin-block: 1.5em;
}
.kb-magazin-body .elementor-widget-theme-post-content hr {
  border: 0;
  border-top: 1px solid rgba(255,255,255,0.12);
  margin-block: 2.5em;
}

/* Mobile */
@media (max-width: 640px) {
  .kb-magazin-prose {
    max-width: 100% !important;
    padding-inline: 16px;
  }
  .kb-magazin-image-wrap img,
  .kb-magazin-hero-image img {
    border-radius: var(--radius-24, 24px) !important;
  }
}

}


/* ============================================================
   KB ORBIT STATS — Center-Bild + 4 Stat-Circles + Hintergrund-Linien
   ============================================================
   Greift auf bestehende `.kb-stat-circle`-Animation (Breathing +
   Orbit-Dot). Nur die ANORDNUNG ist neu: 4 Kreise an Ecken (TL/TR
   /BL/BR), Bild im Zentrum, SVG-Linien dazwischen. Auf Mobile
   stacken die Kreise unter dem Bild als 2x2 Grid.
   ============================================================ */
.kb-orbit-stats {
  position: relative;
  width: 100%;
  max-width: 1200px;
  margin: 0 auto;
  /* Eigene Höhe über die Breite erzwingen (1.5:1 Ratio) — funktioniert
     auch in Flex-Containern mit align-items:stretch, wo aspect-ratio
     ignoriert wird. */
  flex-shrink: 0;
  align-self: stretch;
}
.kb-orbit-stats::before {
  content: "";
  display: block;
  padding-bottom: 66.6667%; /* 1 / 1.5 = 0.6667 */
}

/* Center-Bild — Größe via CSS-Variable steuerbar (siehe Shortcode-Attribute
   image_size + image_max) */
.kb-orbit-stats__image {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: var(--kb-orbit-image-w, 30%);
  max-width: var(--kb-orbit-image-max, 360px);
  z-index: 2;
  border-radius: var(--radius-32, 32px);
  overflow: hidden;
}
.kb-orbit-stats__image img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: inherit;
}

/* Hintergrund-Linien (SVG) */
.kb-orbit-stats__lines {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
  pointer-events: none;
}
.kb-orbit-stats__lines line {
  stroke: var(--kb-orbit-line, rgba(255, 255, 255, 0.16));
  stroke-width: 1;
  stroke-dasharray: 2 6;
  vector-effect: non-scaling-stroke;
}

/* 4 Kreise — absolute Position an Ecken.
   Reuse von .kb-stat-circle (Breathing-Animation, Orbit-Dot kommen mit). */
.kb-orbit-stats .kb-stat-circle {
  position: absolute;
  margin: 0 !important;     /* override negative margin aus Stack-Layout */
  z-index: 3;
}
.kb-orbit-stats__circle--tl { top: 0;    left: 0; }
.kb-orbit-stats__circle--tr { top: 0;    right: 0; }
.kb-orbit-stats__circle--bl { bottom: 0; left: 0; }
.kb-orbit-stats__circle--br { bottom: 0; right: 0; }

/* Auf etwas kleineren Desktops Kreise schrumpfen damit alle reinpassen */
@media (max-width: 1100px) {
  .kb-orbit-stats .kb-stat-circle {
    width: 220px;
    height: 220px;
  }
  .kb-orbit-stats .kb-stat-circle::before {
    /* Orbit-Dot Radius an kleineren Kreis anpassen */
    animation: kb-orbit-small 14s linear infinite;
  }
  @keyframes kb-orbit-small {
    from { transform: rotate(0deg) translateX(110px); }
    to   { transform: rotate(360deg) translateX(110px); }
  }
  .kb-orbit-stats .kb-stat-value { font-size: 2.6rem; }
}

/* Mobile: alles staffeln, Linien aus, Bild oben */
@media (max-width: 768px) {
  .kb-orbit-stats {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    place-items: center;
  }
  .kb-orbit-stats::before {
    display: none; /* Padding-Hack auf Mobile aus, Grid bestimmt Höhe */
  }
  .kb-orbit-stats__lines {
    display: none;
  }
  .kb-orbit-stats__image {
    position: static;
    transform: none;
    grid-column: span 2;
    width: 60%;
    max-width: 280px;
    margin-bottom: 8px;
  }
  .kb-orbit-stats .kb-stat-circle {
    position: static;
    width: 160px;
    height: 160px;
  }
  .kb-orbit-stats .kb-stat-circle::before {
    display: none; /* Orbit-Dots auf Mobile zu eng */
  }
  .kb-orbit-stats .kb-stat-value { font-size: 2rem; }
  .kb-orbit-stats .kb-stat-label {
    font-size: 0.7rem;
    max-width: 130px;
  }
}

/* Optional: Akzent-Farben pro Bereich (wenn accent="marke" etc.) */
.kb-orbit-stats--accent-marke      { --kb-orbit-line: color-mix(in srgb, var(--kb-marke) 35%, transparent); }
.kb-orbit-stats--accent-design     { --kb-orbit-line: color-mix(in srgb, var(--kb-design) 35%, transparent); }
.kb-orbit-stats--accent-website    { --kb-orbit-line: color-mix(in srgb, var(--kb-website) 35%, transparent); }
.kb-orbit-stats--accent-content    { --kb-orbit-line: color-mix(in srgb, var(--kb-content) 35%, transparent); }
.kb-orbit-stats--accent-strategie  { --kb-orbit-line: color-mix(in srgb, var(--kb-strategie) 35%, transparent); }
.kb-orbit-stats--accent-somedia    { --kb-orbit-line: color-mix(in srgb, var(--kb-somedia) 35%, transparent); }

/* ============================================================
   KB LEISTUNGEN-GRAFIK (animiertes Inline-SVG, Shortcode [kb_leistungen_grafik])
   ============================================================ */
.kb-leistungen-grafik {
  position: relative;
  width: 100%;
  max-width: 777px;
  aspect-ratio: 777 / 529;
  margin-inline: auto;
  isolation: isolate;
  overflow: visible;
}

.kb-leistungen-grafik__svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
}

/* Dezenter blauer Glow hinter der Glass-Card (analog zu .kb-glass-folder__orb) */
.kb-leistungen-grafik::before {
  content: '';
  position: absolute;
  inset: 28% 38% 38% 12%;
  background: radial-gradient(
    circle at 50% 50%,
    var(--kb-marke, #234BFF) 0%,
    var(--kb-marke, #234BFF) 28%,
    transparent 72%
  );
  filter: blur(36px);
  opacity: 0.18;
  z-index: -1;
  pointer-events: none;
}

/* Subtle hover: Glass-Card hebt sich leicht an */
.kb-leistungen-grafik:hover .kbg-glass__rect {
  filter: drop-shadow(0 12px 40px rgba(35, 75, 255, 0.25));
  transition: filter 0.6s ease;
}

.kbg-glass__rect {
  transition: filter 0.6s ease;
}

/* Cursor: das ganze SVG ist interaktiv */
.kb-leistungen-grafik {
  cursor: default;
}

/* Mobile: weniger Glow */
@media (max-width: 768px) {
  .kb-leistungen-grafik::before {
    opacity: 0.12;
  }
}

/* ============================================================
   KB DESIGN-GRAFIK (animiertes Inline-SVG, Shortcode [kb_design_grafik])
   ============================================================ */
.kb-design-grafik {
  position: relative;
  width: 100%;
  max-width: 777px;
  aspect-ratio: 777 / 529;
  margin-inline: auto;
  isolation: isolate;
  overflow: visible;
}
.kb-design-grafik__svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
}
.kb-design-grafik::before {
  content: '';
  position: absolute;
  inset: 18% 18% 32% 28%;
  background: radial-gradient(
    circle at 50% 50%,
    var(--kb-design, #FDE962) 0%,
    var(--kb-design, #FDE962) 28%,
    transparent 72%
  );
  filter: blur(36px);
  opacity: 0.18;
  z-index: -1;
  pointer-events: none;
}
.kb-design-grafik:hover .kbd-glass__rect {
  filter: drop-shadow(0 12px 40px rgba(253, 233, 98, 0.25));
}
.kbd-glass__rect {
  transition: filter 0.6s ease;
}
@media (max-width: 768px) {
  .kb-design-grafik::before { opacity: 0.12; }
}

/* ============================================================
   KB STRATEGIE-GRAFIK (animiertes Inline-SVG, Shortcode [kb_strategie_grafik])
   ============================================================ */
.kb-strategie-grafik {
  position: relative;
  width: 100%;
  max-width: 777px;
  aspect-ratio: 777 / 529;
  margin-inline: auto;
  isolation: isolate;
  overflow: visible;
}
.kb-strategie-grafik__svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
}
.kb-strategie-grafik::before {
  content: '';
  position: absolute;
  inset: 18% 18% 32% 28%;
  background: radial-gradient(
    circle at 50% 50%,
    var(--kb-strategie, #ff9648) 0%,
    var(--kb-strategie, #ff9648) 28%,
    transparent 72%
  );
  filter: blur(36px);
  opacity: 0.18;
  z-index: -1;
  pointer-events: none;
}
.kb-strategie-grafik:hover .kbs-glass__rect {
  filter: drop-shadow(0 12px 40px rgba(255, 150, 72, 0.25));
}
.kbs-glass__rect {
  transition: filter 0.6s ease;
}
@media (max-width: 768px) {
  .kb-strategie-grafik::before { opacity: 0.12; }
}

/* ============================================================
   KB CONTENT-CREATION-GRAFIK (Shortcode [kb_content_grafik])
   ============================================================ */
.kb-content-grafik {
  position: relative;
  width: 100%;
  max-width: 777px;
  aspect-ratio: 777 / 529;
  margin-inline: auto;
  isolation: isolate;
  overflow: visible;
  perspective: 1200px;
  perspective-origin: 50% 50%;
}
.kb-content-grafik__svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
  transform-style: preserve-3d;
}
/* 3D-Rotation um Z-Achse: transform-box view-box → transformOrigin in SVG-Koords */
.kbc-coord__rotating {
  transform-box: view-box;
  transform-origin: 305.509px 241.67px;
  transform-style: preserve-3d;
}
/* Plus-Icon: aus der 3D-Perspective-Vererbung herausnehmen, sonst entsteht beim Scale
   eine Perspective-Distortion die wie "Reinkommen von unten rechts" aussieht.
   Pivot fest auf Bbox-Mitte damit es echt aus der Mitte heraus wächst. */
.kbc-plus {
  transform-box: fill-box;
  transform-origin: 50% 50%;
  transform-style: flat;
}
.kb-content-grafik::before {
  content: '';
  position: absolute;
  inset: 18% 18% 32% 28%;
  background: radial-gradient(
    circle at 50% 50%,
    var(--kb-content, #00E962) 0%,
    var(--kb-content, #00E962) 28%,
    transparent 72%
  );
  filter: blur(36px);
  opacity: 0.18;
  z-index: -1;
  pointer-events: none;
}
.kb-content-grafik:hover .kbc-glass__rect {
  filter: drop-shadow(0 12px 40px rgba(0, 233, 98, 0.25));
}
.kbc-glass__rect {
  transition: filter 0.6s ease;
}
/* Kamera signalisiert Interaktivität (Shutter-Hover) */
.kbc-camera {
  cursor: crosshair;
}
@media (max-width: 768px) {
  .kb-content-grafik::before { opacity: 0.12; }
}

/* ============================================================
   KB WEBSITE-GRAFIK (Shortcode [kb_website_grafik])
   ============================================================ */
.kb-website-grafik {
  position: relative;
  width: 100%;
  max-width: 777px;
  aspect-ratio: 777 / 529;
  margin-inline: auto;
  isolation: isolate;
  overflow: visible;
}
.kb-website-grafik__svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
}
.kb-website-grafik::before {
  content: '';
  position: absolute;
  inset: 18% 18% 32% 28%;
  background: radial-gradient(
    circle at 50% 50%,
    var(--kb-website, #8221D8) 0%,
    var(--kb-website, #8221D8) 28%,
    transparent 72%
  );
  filter: blur(36px);
  opacity: 0.22;
  z-index: -1;
  pointer-events: none;
}
.kb-website-grafik:hover .kbw-window__glass,
.kb-website-grafik:hover .kbw-card__glass-rect {
  filter: drop-shadow(0 12px 40px rgba(130, 33, 216, 0.3));
}
.kbw-window__glass,
.kbw-card__glass-rect {
  transition: filter 0.6s ease;
}
@media (max-width: 768px) {
  .kb-website-grafik::before { opacity: 0.15; }
}

/* ============================================================
   KB SOCIAL-MEDIA-GRAFIK (Shortcode [kb_social_grafik])
   ============================================================ */
.kb-social-grafik {
  position: relative;
  width: 100%;
  max-width: 777px;
  aspect-ratio: 777 / 529;
  margin-inline: auto;
  isolation: isolate;
  overflow: visible;
}
.kb-social-grafik__svg {
  width: 100%;
  height: 100%;
  display: block;
  overflow: visible;
}
.kb-social-grafik::before {
  content: '';
  position: absolute;
  inset: 18% 18% 32% 28%;
  background: radial-gradient(
    circle at 50% 50%,
    var(--kb-somedia, #DD4342) 0%,
    var(--kb-somedia, #DD4342) 28%,
    transparent 72%
  );
  filter: blur(36px);
  opacity: 0.2;
  z-index: -1;
  pointer-events: none;
}
.kb-social-grafik:hover .kbsm-glass__rect,
.kb-social-grafik:hover .kbsm-phone__frame-rect {
  filter: drop-shadow(0 12px 40px rgba(221, 67, 66, 0.28));
}
.kbsm-glass__rect,
.kbsm-phone__frame-rect {
  transition: filter 0.6s ease;
}
@media (max-width: 768px) {
  .kb-social-grafik::before { opacity: 0.14; }
}


/* =====================================================================
   KB KONTAKT-PILL – separater Button rechts neben der Nav
   ===================================================================== */

/* Desktop: fixed top-right, eigene Glas-Pille (Label + Pfeil)
   Bündig zur kb-section content-edge:
   .kb-section hat padding 5% + content-width 1400px. Die rechte Content-
   Kante ist also max(5% vom Viewport, (Viewport - 1400) / 2). */
.kb-kontakt-pill {
  position: fixed;
  top: 2rem;
  right: max(5%, calc((100vw - 1400px) / 2));
  z-index: var(--z-nav, 999);
  display: inline-flex;
  align-items: center;
  gap: 12px;
  height: 60px;
  padding: 6px 22px;
  border-radius: var(--radius-full, 100vmax);
  text-decoration: none;
  color: var(--kb-white, #fff);
  font-family: var(--font-body, 'Avenir', sans-serif);
  font-size: 0.95rem;
  font-weight: 500;
  letter-spacing: 0.01em;
  /* Glas-Look identisch zur .kb-nav */
  background: rgba(16, 20, 20, 0.75);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
  overflow: visible;
  transition: transform 350ms cubic-bezier(0.22, 1, 0.36, 1),
              background 300ms ease,
              padding-right 300ms ease;
}

/* Maskierter Rahmen analog zur Nav */
.kb-kontakt-pill::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid hsla(0, 0%, 100%, 0.2);
  mask-image: linear-gradient(135deg, hsla(0,0%,100%,1), hsla(0,0%,100%,0) 50%);
  -webkit-mask-image: linear-gradient(135deg, hsla(0,0%,100%,1), hsla(0,0%,100%,0) 50%);
  pointer-events: none;
}
.kb-kontakt-pill::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  border: 1px solid var(--kb-kreativbox, #E51F75);
  mask-image: linear-gradient(135deg, hsla(0,0%,100%,0) 50%, hsla(0,0%,100%,1));
  -webkit-mask-image: linear-gradient(135deg, hsla(0,0%,100%,0) 50%, hsla(0,0%,100%,1));
  pointer-events: none;
  opacity: 0.6;
  transition: opacity 300ms ease;
}

.kb-kontakt-pill:hover,
.kb-kontakt-pill:focus-visible {
  outline: none;
  color: var(--kb-white, #fff);
  background: rgba(16, 20, 20, 0.85);
  transform: translateY(-2px);
}
.kb-kontakt-pill:hover::after {
  opacity: 1;
}

/* Label + Arrow */
.kb-kontakt-pill__label {
  position: relative;
  z-index: 1;
  line-height: 1;
  white-space: nowrap;
}
.kb-kontakt-pill__arrow {
  position: relative;
  z-index: 1;
  width: 16px;
  height: auto;
  margin-left: -4px;
  opacity: 0.7;
  transform: translateX(0);
  transition: transform 350ms cubic-bezier(0.22, 1, 0.36, 1),
              opacity 300ms ease;
}
.kb-kontakt-pill:hover .kb-kontakt-pill__arrow,
.kb-kontakt-pill:focus-visible .kb-kontakt-pill__arrow {
  transform: translateX(4px);
  opacity: 1;
}

/* Active-State (aktuell auf /kontakt) */
.kb-kontakt-pill.is-active {
  background: rgba(229, 31, 117, 0.18);
}
.kb-kontakt-pill.is-active::after { opacity: 1; }

/* Versteckt mitscrollen wenn Nav versteckt ist */
.kb-nav-wrapper.is-hidden .kb-kontakt-pill {
  transform: translateY(-140%);
  opacity: 0;
  pointer-events: none;
  transition: transform 350ms cubic-bezier(0.65, 0, 0.35, 1),
              opacity 200ms ease;
}

/* Mobile: kompakte CTA-Pille oben-rechts (ersetzt das Kontakt-Item in der Tabbar) */
@media (max-width: 1023px) {
  .kb-kontakt-pill {
    top: max(12px, env(safe-area-inset-top, 0px));
    right: 16px;
    height: 48px;
    padding: 4px 16px;
    gap: 8px;
    font-size: 0.88rem;
  }
  .kb-kontakt-pill__arrow {
    display: none;
  }
}

/* =====================================================================
   HELLO ELEMENTOR RESET-OVERRIDE
   Parent-Theme (Hello Elementor reset.css) setzt einen 1px-Grau-Border
   auf alle Standard-Form-Inputs. Wir nehmen ihn raus – Elementor & Forms
   bringen ihre eigenen Styles mit.
   ===================================================================== */
input[type="date"],
input[type="email"],
input[type="number"],
input[type="password"],
input[type="search"],
input[type="tel"],
input[type="text"],
input[type="url"],
select,
textarea {
  border: 0;
}

input[type="date"]:focus,
input[type="email"]:focus,
input[type="number"]:focus,
input[type="password"]:focus,
input[type="search"]:focus,
input[type="tel"]:focus,
input[type="text"]:focus,
input[type="url"]:focus,
select:focus,
textarea:focus {
  border-color: transparent;
  outline: none;
}

/* ============================================================
   AWARD DETAIL + GALLERY SLIDER  (Shortcode [kb_award_detail])
   ============================================================ */

.kb-award-detail {
  display: flex;
  flex-direction: column;
  gap: clamp(1.25rem, 2vw + 0.5rem, 2.25rem);
  width: 100%;
}

.kb-award-detail__head {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

.kb-award-detail__title {
  font-size: var(--fs-xl, clamp(1.75rem, 2.5vw + 1rem, 3.25rem));
  line-height: 1.05;
  letter-spacing: -0.01em;
  margin: 0;
  color: inherit;
}

.kb-award-detail__meta {
  font-family: var(--ff-mono, "IBM Plex Mono", ui-monospace, monospace);
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  opacity: 0.7;
  margin: 0;
}

.kb-award-detail__body {
  font-size: var(--fs-md, clamp(1rem, 0.4vw + 0.95rem, 1.125rem));
  line-height: 1.55;
  max-width: 68ch;
}

.kb-award-detail__body p { margin: 0 0 0.85em; }
.kb-award-detail__body p:last-child { margin-bottom: 0; }

/* Gallery nutzt .kb-slider System (siehe inc/kb-slider.php).
   Button nutzt .kb-btn .elementor-button Kaskade (siehe oben in style.css).
   Kein eigenes CSS für Slider oder Button. */

/* =========================================================================
 * KUNDE LOOP LINK
 * Klickbarer Logo-Wrap im Kunden-Carousel, wenn das Kunde-ACF-Feld
 * "kunde_projekt_ref" einen Case verknüpft. Markup wird in functions.php
 * via elementor/widget/render_content erzeugt.
 * ========================================================================= */
.kb-kunde-projekt-link {
  display: block;
  text-decoration: none !important;
  color: inherit;
  cursor: pointer;
  transition: transform 320ms cubic-bezier(0.22, 0.61, 0.36, 1),
              filter 320ms ease,
              opacity 320ms ease;
  will-change: transform;
}
.kb-kunde-projekt-link:hover,
.kb-kunde-projekt-link:focus-visible {
  transform: translateY(-2px) scale(1.03);
  filter: brightness(1.05);
}
.kb-kunde-projekt-link:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 6px;
  border-radius: 8px;
}
/* Bild selbst nicht doppelt clippen, falls Elementor eine eigene Link-Wrapper anlegen würde */
.kb-kunde-projekt-link > .elementor-widget-container,
.kb-kunde-projekt-link .elementor-image,
.kb-kunde-projekt-link img {
  pointer-events: none;
}

/* =========================================================================
 * KUNDE LOOP CAROUSEL — Interaktiv
 * Marker-Klasse `kb-slider-kunde` am Loop-Carousel Container.
 * Kombiniert mit `kb-slider-linear` für Swiper-natives Autoplay + Hover-Pause
 * + Touch/Mouse-Drag + funktionierende Klicks auf die Logos.
 * ========================================================================= */
.kb-slider-kunde .swiper {
  cursor: grab;
}
.kb-slider-kunde .swiper.swiper-grabbing,
.kb-slider-kunde .swiper:active {
  cursor: grabbing;
}
.kb-slider-kunde .swiper-slide a.kb-kunde-projekt-link {
  /* Während Drag wird native Klick-Action von Swiper unterdrückt;
     ohne Drag ist es ein normaler Tap-Link. */
  -webkit-user-drag: none;
  user-select: none;
}
/* Hover-Lift soll nur greifen wenn der Slider tatsächlich pausiert wird.
   Swiper setzt keine Klasse beim Pause, aber :hover am Container reicht. */
.kb-slider-kunde:hover .swiper-wrapper {
  transition-timing-function: linear !important;
}

/* ==========================================================================
   404 Fehlerseite  (Template: 404.php)
   Heller, reduzierter Look: warmes Off-White, grosses unscharfes "404",
   Headline, Subtext, kb-btn.dark als CTA. Bewusst gegen den dunklen
   Site-Default gesetzt, daher eigener Hintergrund auf der Section.
   ========================================================================== */
.kb-404 {
  min-height: 82vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: var(--kb-gray-100); /* #fdf9f6 warmes Off-White */
  padding: var(--space-xxxl) var(--space-lg);
  overflow: hidden;
}

.kb-404__inner {
  width: 100%;
  max-width: 60rem;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* Grosses, komplett unscharfes 404 wie in der Referenz */
.kb-404__code {
  font-family: var(--font-headline);
  font-weight: 800;
  color: var(--kb-gray-900);
  font-size: clamp(9rem, 4rem + 30vw, 24rem);
  line-height: 0.85;
  letter-spacing: -0.03em;
  filter: blur(clamp(6px, 1.6vw, 18px));
  user-select: none;
  margin-bottom: clamp(1rem, 2vw, 2.5rem);
  animation: kb-404-focus 900ms cubic-bezier(0.22, 1, 0.36, 1) both;
}

/* Sanftes Scharfstellen beim Laden, danach bleibt die Unschaerfe stehen */
@keyframes kb-404-focus {
  from { filter: blur(clamp(14px, 4vw, 40px)); opacity: 0; transform: translateY(0.4rem); }
  to   { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
  .kb-404__code { animation: none; }
}

.kb-404__title {
  font-family: var(--font-headline);
  font-weight: 700;
  color: var(--kb-gray-900);
  font-size: var(--fs-lg);
  line-height: 1.25;
  margin: 0 0 var(--space-md);
}

.kb-404__text {
  color: var(--kb-gray-500);
  font-size: var(--fs-md);
  line-height: 1.5;
  max-width: 30ch;
  margin: 0 0 var(--space-xl);
}

.kb-404__cta {
  display: flex;
  justify-content: center;
}

/* kb-btn.dark hat einen weissen Border (fuer dunkle Sections gedacht).
   Auf dem hellen 404-BG waere der unsichtbar, daher hier auf schwarz
   angeglichen, damit die Pille sauber gegen das Off-White steht. */
.kb-404 .kb-btn.dark {
  --btn-border: var(--kb-gray-900);
}
