/* ==========================================================================
   KYTH. — Design Tokens & Brand CSS
   Copy-&-paste-fertiges Design-System. Stand 2026-09-25, abgeglichen mit
   kyth-website origin/main d01cbb8 (src/styles/global.css): alle Tokens und
   alle Brand-Klassen in dieser Datei sind wertgleich mit der Live-Seite.
   Seitenspezifisches (Navbar, Seitenwechsel, Pricing, Formulare) fehlt bewusst.
   Self-hosted Fonts (DSGVO, kein Google Fonts).
   ========================================================================== */

/* --- Fonts (woff2 self-hosten; Pfade anpassen) -------------------------- */
/* Live lädt seit 2026-09-03 Teilmengen-Dateien (…-s1.woff2, nur die Zeichen der
   Seite). Für neue Projekte die vollen Dateien (ohne -s1) nehmen: alle sechs liegen in kyth-website
   public/fonts/; im Kit liegen unter og/fonts/ Bricolage Variable, Jakarta Variable und Plex Regular
   (400), Medium (500), SemiBold (600). Nur Jakarta Italic gibt es ausschließlich im Repo. */
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal; font-weight: 400 800; font-display: swap;
  src: url('/statisch/schriften/bricolagegrotesque-variable.woff2') format('woff2');
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal; font-weight: 200 800; font-display: swap;
  src: url('/statisch/schriften/plusjakartasans-variable.woff2') format('woff2');
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: italic; font-weight: 200 800; font-display: swap;
  src: url('/statisch/schriften/plusjakartasans-italic-variable.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal; font-weight: 400; font-display: swap;
  src: url('/statisch/schriften/ibmplexmono-regular.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal; font-weight: 500; font-display: swap;
  src: url('/statisch/schriften/ibmplexmono-medium.woff2') format('woff2');
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal; font-weight: 600; font-display: swap;
  src: url('/statisch/schriften/ibmplexmono-semibold.woff2') format('woff2');
}

/* --- Tokens ------------------------------------------------------------- */
:root {
  /* Surfaces / Hintergrund */
  --black: #0A0A0B;
  --surface: #141416;
  --surface-2: #1A1A1E;
  --surface-3: #222226;

  /* Text / Weiß-Transparenzen */
  --white: #FFFFFF;
  --white-80: rgba(255,255,255,0.8);
  --white-60: rgba(255,255,255,0.6);
  --white-40: rgba(255,255,255,0.55); /* bewusst 0.55 für WCAG-AA Fließtext */
  --white-20: rgba(255,255,255,0.2);
  --white-10: rgba(255,255,255,0.1);
  --white-08: rgba(255,255,255,0.08);
  --white-05: rgba(255,255,255,0.05);

  /* Akzente */
  --green: #22C55E;          /* Primär-Signal — sparsam einsetzen */
  --green-light: #4ADE80;
  --green-dark: #16A34A;
  --green-on-light: #0F5132; /* Grün auf HELLEM Grund (WCAG) */
  --blue: #3B82F6;           /* Sekundär */
  --blue-light: #60A5FA;
  --purple: #A855F7;         /* Tertiär (Coming-Soon/Bundle) */

  /* Rahmen */
  --border: rgba(255,255,255,0.06);
  --border-hover: rgba(255,255,255,0.12);

  /* Schrift */
  --font-display: 'Bricolage Grotesque', sans-serif;
  --font-body: 'Plus Jakarta Sans', sans-serif;
  --font-mono: 'IBM Plex Mono', monospace;

  /* Glow (grüne Signatur) */
  --glow-green: 0 0 20px rgba(34,197,94,0.4), 0 0 60px rgba(34,197,94,0.15);
  --glow-green-strong: 0 0 20px rgba(34,197,94,0.6), 0 0 60px rgba(34,197,94,0.3), 0 0 100px rgba(34,197,94,0.1);

  /* Rhythmus (live seit 2026-09-03 als Variablen, Werte unverändert) */
  --space-section: 120px;     /* Abstand zwischen Sektionen (globales section) */
  --space-section-sm: 80px;   /* dichter stehende Sektionen + 768px-Umbruch */
  --hero-top: 120px;          /* Oberkante Produkt-Hero (mit min-height: 60vh) */
  --hero-top-lg: 160px;       /* Oberkante Hero ohne min-height (Blog, Vergleich, Landings) */

  /* Typo-Skala Sektionsüberschrift (.section-head h2) */
  --fs-h2: clamp(28px, 4vw, 44px);
  --fs-h2-compact: clamp(28px, 4vw, 40px); /* Überschrift in CTA-Karten, dichten Rastern */

  /* Radien — vier Werte, keine neuen Zahlen in Seiten (live seit 2026-09-04).
     Eigene Geometrie behalten nur abgebildete Gegenstände (Geräteattrappen, Etiketten). */
  --radius-control: 10px;  /* Knöpfe, Eingabefelder, kleine Rahmen und Kacheln */
  --radius-card: 14px;     /* Karten und Panels (.card-quiet) */
  --radius-card-lg: 16px;  /* Inhaltskarten (.glass-card und was darauf aufbaut) */
  --radius-pill: 100px;    /* Chips, Statuspillen, Pill-Links */

  /* Wortmarke — verbindliche Kit-Formel (CLAUDE.md, KYTH-Brand-Identity.md §2),
     live seit 2026-09-03 als Variablen. Die Schriftgröße setzt die aufrufende Regel. */
  --wordmark-weight: 800;
  --wordmark-tracking: -0.08em;       /* Basis-Verengung des ganzen Worts — eigener Wert, NICHT die generische Headline-Verengung (-0.04em); 2026-07-08 pixelgenau gegen Live-Startseite abgeglichen */
  --wordmark-yt-tracking: -0.12em;    /* Y-T-Lücke zusätzlich enger */
  --wordmark-product-weight: 400;     /* Produktname (Karl/Klara/Consulting) NICHT fett — verbindlich seit 2026-07-10 */
  --wordmark-product-tracking: 0;     /* Produktname NICHT mitverengt */
}

/* --- Basis -------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html {
  scroll-behavior: smooth; font-size: 16px;
  scroll-padding-top: 80px; /* fixe Navbar (~70px): Fokus/Sprungziele nicht darunter parken (WCAG 2.4.11) — ohne fixe Navbar weglassen */
}
body {
  font-family: var(--font-body);
  background: var(--black); color: var(--white);
  line-height: 1.6; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-x: hidden;
}
a { color: inherit; text-decoration: none; }

/* --- Typografie --------------------------------------------------------- */
h1, h2, h3 { font-family: var(--font-display); font-weight: 700; letter-spacing: -0.04em; line-height: 1.1; }
h1 { font-size: clamp(36px, 5vw, 64px); }
h2 { font-size: clamp(32px, 4vw, 48px); }
h3 { font-size: 24px; font-weight: 600; letter-spacing: -0.03em; }

/* --- Wortmarke ---------------------------------------------------------- */
/* Setzen als:  <span class="wordmark">K<span class="yt">Y</span>TH<span class="dot-glow">.</span></span>  */
/* Produkt-Wortmarke: <span class="wordmark">K<span class="yt">Y</span>TH<span class="dot-glow">.</span><span class="wordmark-product">Karl</span></span> */
/* Die Werte kommen aus den --wordmark-*-Tokens oben; font-size setzt die Stelle selbst. */
.wordmark { font-family: var(--font-display); font-weight: var(--wordmark-weight); letter-spacing: var(--wordmark-tracking); }
.wordmark-product { font-weight: var(--wordmark-product-weight); letter-spacing: var(--wordmark-product-tracking); }  /* Live-Name, für alles Neue */
/* Alias: .product = früherer Kit-Name, bleibt nur, damit bestehende Assets mit class="product" weiter stimmen. Neu nicht verwenden. */
.product { font-weight: var(--wordmark-product-weight); letter-spacing: var(--wordmark-product-tracking); }
.yt { letter-spacing: var(--wordmark-yt-tracking); display: inline; }
.dot-glow { color: var(--green); margin-left: 0.04em; animation: dotPulse 3s ease-in-out infinite; }  /* margin verhindert Überlappung mit H durch die enge .wordmark-Verengung */
@keyframes dotPulse {
  0%, 100% { text-shadow: 0 0 10px rgba(34,197,94,0.4), 0 0 40px rgba(34,197,94,0.15); }
  50%      { text-shadow: 0 0 20px rgba(34,197,94,0.7), 0 0 60px rgba(34,197,94,0.3), 0 0 100px rgba(34,197,94,0.15); }
}

/* --- Section-Label (Eyebrow) + Sektionskopf ----------------------------- */
.section-label {
  font-family: var(--font-mono); font-size: 12px; font-weight: 500;
  color: var(--green); letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 12px;
}
/* Sektionskopf: Mono-Label über der Überschrift, zentriert. Abweichungen lokal setzen. */
.section-head { text-align: center; max-width: 760px; margin: 0 auto 44px; }
.section-head h2 {
  font-family: var(--font-display); font-size: var(--fs-h2); font-weight: 700;
  letter-spacing: -0.04em; line-height: 1.1; margin-top: 14px;
}
/* Einleitungsabsatz unter dem Sektionskopf: zentriert, gedämpft, max. 680px. */
.section-intro {
  max-width: 680px; margin: 18px auto 0; font-size: 16px;
  line-height: 1.7; color: var(--white-60); text-align: center;
}

/* --- Karten ------------------------------------------------------------- */
/* .glass-card trägt Inhalt (blur, heller Grund, 32px Polster). */
.glass-card {
  background: rgba(255,255,255,0.03); border: 1px solid var(--border);
  border-radius: var(--radius-card-lg); padding: 32px;
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  transition: border-color 0.3s, background 0.3s;
}
.glass-card:hover { border-color: var(--border-hover); background: rgba(255,255,255,0.05); }
/* .card-quiet verweist auf einen anderen Ort (Blog-Liste, „Mehr zum Thema“, Vergleichsziele):
   dunklerer Grund, deutlicherer Rand, grüner Hover mit leichtem Anheben. Innenabstand gehört der Stelle. */
.card-quiet {
  display: block; text-decoration: none; padding: 24px;
  border: 1px solid var(--white-08); border-radius: var(--radius-card);
  background: rgba(255,255,255,0.015);
  transition: border-color 0.2s, transform 0.2s, background 0.2s;
}
.card-quiet:hover { border-color: rgba(34,197,94,0.4); background: rgba(34,197,94,0.04); transform: translateY(-2px); }

/* --- Buttons ------------------------------------------------------------ */
.btn-primary {
  display: inline-block; background: var(--green); color: var(--black);
  font-family: var(--font-body); font-weight: 600; font-size: 14px;
  padding: 12px 24px; border-radius: var(--radius-control); border: none; cursor: pointer;
  transition: background 0.2s, transform 0.2s; text-decoration: none;
}
.btn-primary:hover { background: var(--green-light); transform: translateY(-1px); }
.btn-secondary {
  display: inline-block; background: transparent; color: var(--white);
  border: 1px solid var(--border); font-family: var(--font-body); font-weight: 500; font-size: 14px;
  padding: 12px 24px; border-radius: var(--radius-control); cursor: pointer;
  transition: border-color 0.2s, background 0.2s; text-decoration: none;
}
.btn-secondary:hover { border-color: var(--border-hover); background: var(--white-05); }

/* --- Badge = Hero-Eyebrow ----------------------------------------------- */
/* Status-Zeile über der Hero-Überschrift (kein Pill): Mono-Label, kein Punkt
   (live seit 2026-07-30; der grüne Punkt davor ist auf Wunsch entfallen). */
.badge {
  display: inline-flex; align-items: center; gap: 10px;
  font-family: var(--font-mono); font-size: 12px; font-weight: 500;
  letter-spacing: 0.16em; text-transform: uppercase; color: var(--white-60);
}

/* --- Statuspillen (Produktkarten, Listen) ------------------------------- */
/* <span class="status status--live">Im Shopify App Store</span>
   Nicht in der Nav, nicht als Hero-Eyebrow (dort .badge). Modifier:
     --live      grün gefüllt, schwarze Schrift (im Store gelistet)
     --unlisted  Outline + statischer grüner Punkt (per Direktlink erreichbar, Listing folgt)
     --pending   grau, ohne Punkt (Listing steht aus)
     --planned   grau, ohne Punkt (geplantes Produkt)
   Bewusst kein Puls (ein Status ist ein Zustand, kein Countdown), keine erfundenen „Neu“-Pillen.
   Lange Texte dürfen umbrechen. */
.status {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--font-mono); font-size: 10px; font-weight: 600;
  letter-spacing: 0.08em; text-transform: uppercase; line-height: 1.5;
  padding: 3px 9px; border-radius: var(--radius-pill); border: 1px solid transparent;
  max-width: 100%; white-space: normal; text-align: left;
}
.status--live { color: var(--black); background: var(--green); border-color: var(--green); }
.status--unlisted { color: var(--green); background: rgba(34,197,94,0.06); border-color: rgba(34,197,94,0.35); }
.status--unlisted::before {
  content: ''; flex: none; width: 6px; height: 6px; border-radius: 50%;
  background: var(--green); box-shadow: 0 0 8px rgba(34,197,94,0.8);
}
.status--pending, .status--planned { color: var(--white-60); border-color: var(--white-20); }

/* --- Sections ----------------------------------------------------------- */
section { position: relative; z-index: 1; padding: var(--space-section) 40px; max-width: 1200px; margin: 0 auto; }
@media (max-width: 768px) { section { padding: var(--space-section-sm) 20px; } }
@media (max-width: 480px) { section { padding: 60px 16px; } }

/* --- Keyboard-Fokus (WCAG 2.4.7) --------------------------------------- */
/* Kein border-radius in der Fokusregel: der würde den Radius des fokussierten
   Elements (Buttons 10px, Pills 100px) überschreiben. Der Ring folgt der Form. */
:focus-visible { outline: 2px solid var(--green); outline-offset: 2px; }
a:focus-visible, button:focus-visible, input:focus-visible, summary:focus-visible, [tabindex]:focus-visible { outline: 2px solid var(--green); outline-offset: 2px; }
a:focus:not(:focus-visible), button:focus:not(:focus-visible), input:focus:not(:focus-visible) { outline: none; }

/* --- Skip-Link + Screenreader-Text -------------------------------------- */
.skip-link {
  position: absolute; top: -64px; left: 16px; z-index: 1000;
  background: var(--green); color: var(--black);
  font-family: var(--font-body); font-weight: 600; font-size: 14px;
  padding: 10px 18px; border-radius: var(--radius-control); transition: top 0.2s ease;
}
.skip-link:focus { top: 16px; }
.visually-hidden {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0;
  overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}

/* --- Scroll-Reveal ------------------------------------------------------ */
.reveal {
  opacity: 0; transform: translateY(30px);
  transition: opacity 0.7s cubic-bezier(0.16,1,0.3,1), transform 0.7s cubic-bezier(0.16,1,0.3,1);
}
.reveal.visible { opacity: 1; transform: translateY(0); }
/* Seitenkopf mit der H1 wartet nicht auf JavaScript (liegt immer über der Falz):
   gleiche Bewegung als CSS-Animation ab dem ersten Bild. */
.reveal:has(h1) { opacity: 1; transform: none; animation: revealIn 0.7s cubic-bezier(0.16,1,0.3,1) both; }
@keyframes revealIn {
  from { opacity: 0; transform: translateY(30px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* --- Hintergrund: Dot-Grid (als <div class="dot-grid"> in den Body) ----- */
.dot-grid {
  position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 0; pointer-events: none;
  background-image: radial-gradient(rgba(255,255,255,0.04) 1px, transparent 1px);
  background-size: 24px 24px;
}

/* --- Hintergrund: Aurora Option B „Nordlicht-Vorhänge“ (Live-Default) ---
   Site-weit, genau EINE Aurora; KEINE lokalen ::before-Auroras in Sections.
   Option A (dezente Ambient-Radials, body::after) liegt als Drop-in in
   aurora/AURORA-GUIDE.md — nie beide gleichzeitig.
   Braucht Markup im Body (nach dem .dot-grid), siehe aurora/AURORA-GUIDE.md:
   <div class="aurora" aria-hidden="true">
     <div class="aurora-curtain aurora-c1"></div> … c6 … <div class="aurora-rays"></div>
   </div>
   PFLICHT: (1) Fade nach rgba(farbe,0), NIE nach transparent (sonst dunkler Ring).
            (2) isolation:isolate auf .aurora (sonst mis-compositet mix-blend die Seite). */
.aurora {
  position: fixed; inset: 0; z-index: 0; pointer-events: none; overflow: hidden;
  isolation: isolate;
  animation: auroraHue 30s ease-in-out infinite; will-change: filter;
}
@keyframes auroraHue { 0%, 100% { filter: hue-rotate(-16deg); } 50% { filter: hue-rotate(24deg); } }
.aurora-curtain {
  position: absolute; bottom: -6%; transform-origin: 50% 100%;
  filter: blur(38px); mix-blend-mode: screen; will-change: transform, opacity;
  background: linear-gradient(to top,
    rgba(34,197,94,0) 0%, rgba(34,197,94,0.30) 14%, rgba(45,212,160,0.26) 34%,
    rgba(56,189,248,0.21) 55%, rgba(139,92,246,0.18) 74%, rgba(236,72,153,0.10) 88%, rgba(236,72,153,0) 100%);
}
/* Höhen seit 2026-07-24 (Navbar oben transparent, Aurora ragt ins Menü) */
.aurora-c1 { left: 2%;  width: 22%; height: 92%; animation: auroraSwayA 13s ease-in-out infinite; }
.aurora-c2 { left: 20%; width: 16%; height: 74%; filter: blur(30px); animation: auroraSwayB 16s ease-in-out infinite; animation-delay: -4s; }
.aurora-c3 { left: 33%; width: 26%; height: 98%; animation: auroraSwayA 14s ease-in-out infinite; animation-delay: -8s; }
.aurora-c4 { left: 52%; width: 18%; height: 80%; filter: blur(44px); animation: auroraSwayC 17s ease-in-out infinite; animation-delay: -3s; }
.aurora-c5 { left: 64%; width: 24%; height: 92%; animation: auroraSwayB 15s ease-in-out infinite; animation-delay: -10s; }
.aurora-c6 { left: 80%; width: 20%; height: 78%; filter: blur(32px); animation: auroraSwayC 18s ease-in-out infinite; animation-delay: -6s; }
.aurora-rays {
  position: absolute; inset: 0; mix-blend-mode: screen; opacity: 0.12;
  background: repeating-linear-gradient(to right, rgba(255,255,255,0) 0px, rgba(200,255,235,0.05) 1px, rgba(255,255,255,0) 2px, rgba(255,255,255,0) 5px);
  -webkit-mask-image: linear-gradient(to top, rgba(0,0,0,0) 2%, rgba(0,0,0,1) 30%, rgba(0,0,0,1) 72%, rgba(0,0,0,0) 96%);
  mask-image: linear-gradient(to top, rgba(0,0,0,0) 2%, rgba(0,0,0,1) 30%, rgba(0,0,0,1) 72%, rgba(0,0,0,0) 96%);
  animation: auroraRayDrift 30s linear infinite; will-change: transform;
}
@keyframes auroraSwayA { 0%, 100% { transform: translateX(-34px) translateY(6px) scaleY(0.98) scaleX(1.02); opacity: 0.5; } 50% { transform: translateX(44px) translateY(-12px) scaleY(1.2) scaleX(0.9); opacity: 0.95; } }
@keyframes auroraSwayB { 0%, 100% { transform: translateX(40px) translateY(-6px) scaleY(1.12) scaleX(0.98); opacity: 0.46; } 50% { transform: translateX(-46px) translateY(10px) scaleY(0.86) scaleX(1.14); opacity: 0.86; } }
@keyframes auroraSwayC { 0%, 100% { transform: translateX(-24px) translateY(-4px) scaleY(0.9) scaleX(1.08); opacity: 0.42; } 50% { transform: translateX(36px) translateY(14px) scaleY(1.26) scaleX(0.86); opacity: 0.82; } }
@keyframes auroraRayDrift { 0% { transform: translateX(0); } 100% { transform: translateX(22px); } }

/* --- Reduced Motion ----------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important; animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important; scroll-behavior: auto !important;
  }
  .aurora, .aurora-curtain, .aurora-rays { animation: none; }
  .dot-glow { animation: none; }
  .reveal { opacity: 1; transform: none; }
}

/* --- Windows-Kontrastmodus (forced-colors) ------------------------------ */
/* Hintergründe/box-shadows fallen dort weg: Buttons, die nur über ihren
   Hintergrund sichtbar sind, bekommen einen Rahmen in Systemfarbe. */
@media (forced-colors: active) {
  .btn-primary, .btn-secondary, button { border: 1px solid ButtonText; }
}
