/*
   Design tokens. The brand-* tokens shift with the theme: in light mode they
   run from "darkest" (-900) to "lightest" (-50); in dark mode they invert,
   so brand-900 is always the highest-contrast brand colour against the
   current background. CSS that uses var(--c-brand-900) for headings or
   primary buttons therefore picks the right tone in both themes
   automatically — no per-component overrides needed.
*/
:root {
  /* Brand greys (derived from logo slate-grey) — light theme */
  --c-brand-900: #2c3645;
  --c-brand-700: #475467;
  --c-brand-500: #6b7f9e;
  --c-brand-300: #a3b0c2;
  --c-brand-100: #e3e7ee;
  --c-brand-50:  #f4f6f9;

  /* Neutrals — light theme */
  --c-bg:         #ffffff;
  --c-bg-alt:     #f7f8fa;
  --c-text:       #1f2937;
  --c-text-mute:  #5b6472;
  --c-border:     #e5e7eb;

  /* Surfaces with intentionally fixed identity (don't follow the theme) */
  --c-header-bg:  rgba(255, 255, 255, 0.92);
  --c-footer-bg:  #2c3645;
  --c-footer-text: #cfd6e1;
  --c-code-bg:    #0f172a;   /* code blocks stay dark in both themes */
  --c-code-fg:    #e2e8f0;

  /* Accent (subtle) */
  --c-accent:     #6b7f9e;

  /* Shadows */
  --shadow-sm: 0 1px 2px rgba(20, 30, 50, 0.04), 0 1px 3px rgba(20, 30, 50, 0.06);
  --shadow-md: 0 4px 12px rgba(20, 30, 50, 0.08);

  /* Type */
  --ff-sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --fs-xs: 0.8125rem;
  --fs-sm: 0.9375rem;
  --fs-base: 1rem;
  --fs-md: 1.125rem;
  --fs-lg: 1.375rem;
  --fs-xl: 1.875rem;
  --fs-2xl: 2.5rem;
  --fs-3xl: 3.25rem;

  /* Layout */
  --container-max: 1180px;
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4rem;
  --space-9: 6rem;

  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 14px;

  --transition: 200ms ease;

  color-scheme: light;
}

/* ------------------- Dark theme -------------------
   Activated via <html data-theme="dark"> by the theme bootstrap script.
   --------------------------------------------------- */
:root[data-theme="dark"] {
  /* Brand palette — inverted lightness ordering so var(--c-brand-900)
     remains the "highest contrast brand colour" in either theme. */
  --c-brand-900: #ebeff5;
  --c-brand-700: #c5cfe0;
  --c-brand-500: #8fa1c0;
  --c-brand-300: #5e6e87;
  --c-brand-100: #2c3645;
  --c-brand-50:  #1c222b;

  /* Neutrals */
  --c-bg:         #0f1218;
  --c-bg-alt:     #161a22;
  --c-text:       #d8dde8;
  --c-text-mute:  #8e9bb0;
  --c-border:     #2c3645;

  /* Header / footer keep an identity that's distinct from the page bg */
  --c-header-bg:  rgba(15, 18, 24, 0.92);
  --c-footer-bg:  #0a0d12;
  --c-footer-text: #cfd6e1;

  --c-accent:     #8fa1c0;

  /* Slightly stronger shadows for dark surfaces */
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.32), 0 1px 3px rgba(0, 0, 0, 0.36);
  --shadow-md: 0 6px 18px rgba(0, 0, 0, 0.42);

  color-scheme: dark;
}

*, *::before, *::after { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  font-family: var(--ff-sans);
  font-size: var(--fs-base);
  line-height: 1.6;
  color: var(--c-text);
  background: var(--c-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

img, svg { max-width: 100%; display: block; }

a {
  color: var(--c-brand-700);
  -webkit-text-decoration: none;
  text-decoration: none;
  transition: color var(--transition);
}
a:hover { color: var(--c-brand-900); }

h1, h2, h3, h4 {
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--c-brand-900);
  margin: 0 0 var(--space-4);
  line-height: 1.2;
}
h1 { font-size: var(--fs-3xl); letter-spacing: -0.02em; }
h2 { font-size: var(--fs-2xl); }
h3 { font-size: var(--fs-xl); }
h4 { font-size: var(--fs-lg); }
p  { margin: 0 0 var(--space-4); color: var(--c-text-mute); }

ul.clean { list-style: none; padding: 0; margin: 0; }

/* ---------- Layout ---------- */
.container {
  width: 100%;
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 var(--space-5);
}

section { padding: var(--space-9) 0; }
section.tight { padding: var(--space-8) 0; }
section.alt { background: var(--c-bg-alt); }

.eyebrow {
  display: inline-block;
  font-size: var(--fs-xs);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--c-brand-500);
  margin-bottom: var(--space-3);
}

/* ---------- Header ---------- */
.site-header {
  position: sticky;
  top: 0;
  z-index: 50;
  background: var(--c-header-bg);
  backdrop-filter: saturate(140%) blur(8px);
  border-bottom: 1px solid var(--c-border);
}
.site-header .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  min-height: 72px;
  gap: var(--space-5);
}
.site-logo {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  font-weight: 700;
  letter-spacing: 0.04em;
  color: var(--c-brand-900);
}
.site-logo img { height: 40px; width: auto; transition: filter var(--transition); }
/* Im Dark-Mode wird das slate-blaue Logo nach hell-weiß umgekehrt,
   damit es auf der dunklen Header-Fläche lesbar bleibt. */
:root[data-theme="dark"] .site-logo img {
  filter: brightness(0) invert(1);
  opacity: 0.92;
}

.site-nav ul {
  display: flex;
  gap: var(--space-6);
  list-style: none;
  margin: 0;
  padding: 0;
}
.site-nav a {
  color: var(--c-text);
  font-weight: 500;
  font-size: var(--fs-sm);
}
.site-nav a.active { color: var(--c-brand-900); }
.site-nav a:hover { color: var(--c-brand-700); }

/* Vertical separator that visually splits the corporate nav items from
   the Blog entry. Acts as a regular flex child in .site-nav ul, so the
   existing `gap` already gives it the right breathing room. On mobile
   (≤720px) the nav stacks vertically and the separator hides. */
.site-nav .nav-divider {
  width: 1px;
  height: 18px;
  background: var(--c-border);
  align-self: center;
  list-style: none;
  flex: 0 0 1px;
}

/* Theme toggle (sun/moon icon button next to the language switcher) */
.theme-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 32px;
  background: transparent;
  border: 1px solid var(--c-border);
  border-radius: var(--radius-md);
  padding: 0;
  cursor: pointer;
  font-size: 16px;
  line-height: 1;
  color: var(--c-text);
  transition: background var(--transition), border-color var(--transition), color var(--transition);
}
.theme-toggle:hover {
  background: var(--c-brand-50);
  border-color: var(--c-brand-300);
  color: var(--c-brand-900);
}
/* The icon switches according to the *target* theme: in light mode show
   the moon (click to go dark); in dark mode show the sun. The flex
   centering on .theme-toggle handles vertical alignment — no manual
   translateY needed (it would only re-introduce the off-by-one drift). */
.theme-toggle::before { content: "☾"; display: inline-block; line-height: 1; }
:root[data-theme="dark"] .theme-toggle::before { content: "☀"; }

/* Theme toggle and language switcher sit inside .header-controls — a
   tight pair that the parent header treats as a single flex child.
   This way the header's space-between distribution doesn't widen the
   gap between the two controls. */
.header-controls {
  display: flex;
  align-items: center;
  gap: 20px;
}

.lang-switcher {
  display: flex;
  align-items: center;
  gap: var(--space-1);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-md);
  padding: 2px;
  background: var(--c-bg);
}
.lang-switcher .lang-link,
.lang-switcher .lang-current {
  display: inline-block;
  padding: 4px 8px;
  font-size: var(--fs-xs);
  font-weight: 600;
  border-radius: var(--radius-sm);
  text-transform: uppercase;
  -webkit-text-decoration: none;
  text-decoration: none;
}
.lang-switcher .lang-link {
  color: var(--c-text-mute);
}
.lang-switcher .lang-link:hover {
  color: var(--c-brand-900);
}
.lang-switcher .lang-current {
  background: var(--c-brand-900);
  color: var(--c-bg);
}

.nav-toggle {
  display: none;
  background: transparent;
  border: 1px solid var(--c-border);
  border-radius: var(--radius-sm);
  padding: 6px 10px;
  cursor: pointer;
  font-size: var(--fs-md);
}

/* ---------- Hero ---------- */
.hero {
  padding: var(--space-9) 0;
  background:
    radial-gradient(ellipse at top right, rgba(107,127,158,0.08), transparent 60%),
    var(--c-bg);
}
.hero h1 {
  max-width: 22ch;
}
.hero p.lead {
  font-size: var(--fs-md);
  max-width: 60ch;
  color: var(--c-text-mute);
}
.hero-actions {
  display: flex;
  gap: var(--space-3);
  margin-top: var(--space-5);
  flex-wrap: wrap;
}

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  padding: 12px 22px;
  font-size: var(--fs-sm);
  font-weight: 600;
  border-radius: var(--radius-md);
  border: 1px solid transparent;
  cursor: pointer;
  transition: background var(--transition), color var(--transition), border-color var(--transition);
  -webkit-text-decoration: none;
  text-decoration: none;
}
.btn-primary {
  background: var(--c-brand-900);
  color: var(--c-bg); /* white in light, dark in dark — tracks the bg colour */
}
.btn-primary:hover { background: var(--c-brand-700); color: var(--c-bg); }
.btn-ghost {
  background: transparent;
  color: var(--c-brand-900);
  border-color: var(--c-border);
}
.btn-ghost:hover { border-color: var(--c-brand-500); color: var(--c-brand-900); }

/* ---------- Cards / Grid ---------- */
.grid {
  display: grid;
  grid-gap: var(--space-5);
  gap: var(--space-5);
}
.grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

.card {
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-lg);
  padding: var(--space-6);
  transition: border-color var(--transition), transform var(--transition), box-shadow var(--transition);
}
.card:hover {
  border-color: var(--c-brand-300);
  box-shadow: var(--shadow-md);
  transform: translateY(-2px);
}
.card h3 { margin-bottom: var(--space-2); font-size: var(--fs-md); }
.card p { font-size: var(--fs-sm); margin-bottom: 0; }
.card .icon {
  width: 44px;
  height: 44px;
  border-radius: var(--radius-md);
  background: var(--c-brand-50);
  color: var(--c-brand-700);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-bottom: var(--space-4);
  font-size: 22px;
  font-weight: 700;
}

.section-head {
  max-width: 720px;
  margin: 0 auto var(--space-7);
  text-align: center;
}
.section-head p { font-size: var(--fs-md); }

/* ---------- Stat band ---------- */
.stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: var(--space-5);
  gap: var(--space-5);
  padding: var(--space-7) 0;
  border-top: 1px solid var(--c-border);
  border-bottom: 1px solid var(--c-border);
}
.stat .num {
  font-size: var(--fs-2xl);
  font-weight: 700;
  color: var(--c-brand-900);
  line-height: 1;
}
.stat .label {
  font-size: var(--fs-sm);
  color: var(--c-text-mute);
  margin-top: var(--space-2);
}

/* ---------- Detail list ---------- */
.detail-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-gap: var(--space-3);
  gap: var(--space-3);
}
.detail-list li {
  padding-left: 26px;
  position: relative;
  color: var(--c-text);
  font-size: var(--fs-sm);
}
.detail-list li::before {
  content: "";
  position: absolute;
  left: 0; top: 9px;
  width: 14px; height: 2px;
  background: var(--c-brand-500);
  border-radius: 2px;
}

/* ============================================
   Footer light-effect & cursor — 1:1 ports of the
   classes from the original simple/src/style.css.
   .light-effect is applied to .footer-bottom; the
   parent .site-footer has overflow:hidden so the
   right→left sweep doesn't push horizontal scroll.
   ============================================ */

.light-effect {
  position: relative;
  display: flex;
  border-radius: 8px;
  cursor: pointer;
  overflow: visible;
}

/* Lichtstrahl */
.light-effect::before {
  content: "";
  position: absolute;
  top: 0;
  left: 100%; /* Start rechts */
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, rgba(255,255,255,0.0) 0%, rgba(255,255,255,0.7) 50%, rgba(255,255,255,0.0) 100%);

  filter: blur(10px);
  opacity: 0;
  pointer-events: none;
  z-index: 2;
  transition: transform 0.1s ease, opacity 2.6s;
}

/* Glow beim Prall */
.light-effect::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 0%; /* Linke Seite */
  width: 20px;
  height: 20px;
  background: radial-gradient(circle, rgba(255,255,255,1) 0%, rgba(255,255,255,1) 100%);
  border-radius: 50%;
  transform: translate(-50%, -50%) scale(1);
  opacity: 0;
  filter: blur(20px);
  z-index: 1;
}

/* Cursor an der linken Seite */
.cursor {
  position: absolute;
  left: 0px;
  top: 50%;
  width: 0.6em;
  height: 1.2em;
  background: white;
  transform: translateY(-50%);
  opacity: 0;

  transition: transform 0.1s ease, opacity 1s ease;
  box-shadow: 0 0 8px rgba(255,255,255,0.8), 0 0 16px rgba(255,255,255,0.5);
}

.light-effect:hover .cursor {
  transition: opacity 0.5s ease;
  animation: blinkGlow 1.5s linear infinite;
  animation-delay: 1.2s;
}

@keyframes blinkGlow {
  0% {
    opacity: 0;
    box-shadow: 0 0 2px rgba(255,255,255,0.2), 0 0 4px rgba(255,255,255,0.1);
  }
  15% {
    opacity: 0.8;
    box-shadow: 0 0 8px rgba(255,255,255,0.8), 0 0 16px rgba(255,255,255,0.5);
  }
  50% {
    opacity: 1;
    box-shadow: 0 0 8px rgba(255,255,255,0.8), 0 0 16px rgba(255,255,255,0.5);
  }
  80% {
    opacity: 0;
    box-shadow: 0 0 2px rgba(255,255,255,0.2), 0 0 4px rgba(255,255,255,0.1);
  }
}

/* Hover Effekt */
.light-effect:hover::before {
  animation: lightSweep 0.8s forwards;
}

.light-effect:hover::after {
  animation: lightImpact 0.8s 0.8s forwards;
}

/* Lichtstrahl wandert von rechts nach links */
@keyframes lightSweep {
  0% {
    left: 100%;
    opacity: 1;
  }
  100% {
    left: -50%;
    opacity: 0.1;
  }
}

/* Prall und kreisförmiger Glow */
@keyframes lightImpact {
  0% {
    transform: translate(-50%, -50%) scale(0);
    opacity: 1;
  }
  50% {
    transform: translate(-50%, -50%) scale(4);
    opacity: 1;
  }
  100% {
    transform: translate(-50%, -50%) scale(1);
    opacity: 0.5;
  }
}

@media (prefers-reduced-motion: reduce) {
  .light-effect:hover::before,
  .light-effect:hover::after,
  .light-effect:hover .cursor {
    animation: none;
    opacity: 0;
  }
}

/* Spacer for the copyright text so it doesn't sit under the cursor —
   matches the simple site's inline style="margin-left:10px" approach. */
.footer-bottom .copyright {
  margin-left: 14px;
}

/* ============================================
   Legal pages (Impressum / Datenschutz)
   ============================================ */

/* Compact hero for legal pages — title only, no lead/eyebrow.
   Reduces the gap between the H1 and the first content section. */
.legal-hero {
  padding: var(--space-8) 0 var(--space-3);
  background:
    radial-gradient(ellipse at top right, rgba(107,127,158,0.08), transparent 60%),
    var(--c-bg);
}
.legal-hero h1 { margin: 0; }
/* The first content section after a legal hero gets a tighter top padding
   so the document flows naturally without a big empty band. */
.legal-hero + section { padding-top: var(--space-6); }
.legal-dl {
  display: grid;
  grid-template-columns: 220px 1fr;
  grid-gap: var(--space-3) var(--space-6);
  gap: var(--space-3) var(--space-6);
  max-width: 760px;
  margin: 0;
}
.legal-dl dt {
  font-weight: 600;
  color: var(--c-text-mute);
  font-size: var(--fs-sm);
  margin: 0;
}
.legal-dl dd {
  margin: 0;
  color: var(--c-text);
  font-size: var(--fs-sm);
}
.legal-dl a {
  color: var(--c-brand-700);
  border-bottom: 1px solid var(--c-brand-100);
}
.legal-dl a:hover {
  color: var(--c-brand-900);
  border-bottom-color: var(--c-brand-300);
}

.legal-section-h {
  font-size: var(--fs-md);
  margin-bottom: var(--space-5);
  max-width: 760px;
}
.legal-prose {
  max-width: 760px;
  margin: 0 auto;
}
.legal-prose h2 {
  font-size: var(--fs-lg);
  margin-bottom: var(--space-4);
}
.legal-prose h3 {
  font-size: var(--fs-md);
  margin-top: var(--space-6);
  margin-bottom: var(--space-2);
}
.legal-prose h2:first-child,
.legal-prose h3:first-child { margin-top: 0; }
.legal-prose p { font-size: var(--fs-sm); }
.legal-prose ul {
  list-style: disc;
  padding-left: 1.5em;
  margin: 0 0 var(--space-4);
}
.legal-prose ul li {
  font-size: var(--fs-sm);
  color: var(--c-text);
  padding: 2px 0;
}
.legal-prose a {
  color: var(--c-brand-700);
  border-bottom: 1px solid var(--c-brand-100);
}

@media (max-width: 720px) {
  .legal-dl { grid-template-columns: 1fr; gap: 2px var(--space-4); }
  .legal-dl dt { margin-top: var(--space-3); }
}

/* ---------- Footer ---------- */
.site-footer {
  background: var(--c-footer-bg);
  color: var(--c-footer-text);
  padding: var(--space-8) 0 var(--space-5);
  margin-top: var(--space-9);
  position: relative;
  overflow: hidden; /* clips the right→left light sweep so it never causes a horizontal page scrollbar */
}
.site-footer h4 {
  color: #fff;
  font-size: var(--fs-sm);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  margin-bottom: var(--space-4);
}
.site-footer a { color: #cfd6e1; font-size: var(--fs-sm); }
.site-footer a:hover { color: #fff; }
.footer-grid {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr 1fr;
  grid-gap: var(--space-6);
  gap: var(--space-6);
  padding-bottom: var(--space-6);
  border-bottom: 1px solid rgba(255,255,255,0.08);
}
.footer-brand p { color: #9aa6b8; font-size: var(--fs-sm); max-width: 36ch; }
.footer-brand img { height: 36px; margin-bottom: var(--space-4); filter: brightness(0) invert(1); opacity: 0.95; }
.footer-bottom {
  /* Equal vertical padding so the box's geometric centre matches the
     flex content centre — the light-effect's ::after impact glow uses
     top:50% of this box, so it must align with the text vertically. */
  padding: var(--space-5) 0;
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--space-3);
  font-size: var(--fs-xs);
  color: #8390a3;
  align-items: center;
  min-height: 28px;
}

/* Subtle ASM-mnemonic easter-egg sitting in place of the redundant
   "Tenvias GmbH · Deutschland" line. Monospace, very small, slightly dimmed. */
.footer-asm {
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: 0.65rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  opacity: 0.55;
}

/* ============================================
   IAM (Identity & Access Management) page
   ============================================ */

/* Two-column layout: sticky table-of-contents + content */
.doc-layout {
  display: grid;
  grid-template-columns: 240px 1fr;
  grid-gap: var(--space-7);
  gap: var(--space-7);
  align-items: start;
}
.doc-toc {
  position: sticky;
  top: 96px;
  align-self: start;
  font-size: var(--fs-sm);
}
.doc-toc h4 {
  font-size: var(--fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--c-text-mute);
  margin-bottom: var(--space-3);
}
.doc-toc ul { list-style: none; padding: 0; margin: 0; display: grid; grid-gap: 6px; gap: 6px; }
.doc-toc a {
  display: block;
  padding: 6px 10px;
  border-left: 2px solid var(--c-border);
  color: var(--c-text-mute);
  font-weight: 500;
  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
  transition: color var(--transition), border-color var(--transition), background var(--transition);
}
.doc-toc a:hover { color: var(--c-brand-900); border-left-color: var(--c-brand-300); background: var(--c-brand-50); }

.doc-content { min-width: 0; }
.doc-section { margin-bottom: var(--space-9); scroll-margin-top: 90px; }
.doc-section:last-child { margin-bottom: 0; }
.doc-section h2 { font-size: var(--fs-xl); margin-bottom: var(--space-3); }
.doc-section h3 { font-size: var(--fs-md); margin-top: var(--space-6); margin-bottom: var(--space-3); }
.doc-section p { font-size: var(--fs-base); }
.doc-section .lead { font-size: var(--fs-md); color: var(--c-text); }

/* Blog overview — categorised layout. Each category is a block with an
   h2 heading and a 3-column card grid. The 200 px gap between categories
   makes the groups visually distinct; on narrow viewports we collapse it
   to a more proportional value. */
.blog-category { margin-bottom: 200px; scroll-margin-top: 90px; }
.blog-category:last-child { margin-bottom: 0; }
.blog-category > h2 {
  font-size: var(--fs-xl);
  margin-bottom: var(--space-5);
  padding-bottom: var(--space-3);
  border-bottom: 1px solid var(--c-border);
}

/* Pill / tag */
.pill {
  display: inline-block;
  font-size: var(--fs-xs);
  font-weight: 600;
  letter-spacing: 0.04em;
  padding: 3px 10px;
  border-radius: 999px;
  background: var(--c-brand-50);
  color: var(--c-brand-700);
  border: 1px solid var(--c-brand-100);
}

/* "When to use" sub-heading inside a protocol card */
.protocol-card .pc-when {
  margin-top: var(--space-4);
  margin-bottom: var(--space-2);
  font-size: var(--fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--c-text-mute);
}

/* Pros / cons grid inside protocol cards */
.protocol-card {
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-lg);
  padding: var(--space-6);
  margin-bottom: var(--space-5);
}
.protocol-card .head {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-3);
  flex-wrap: wrap;
}
.protocol-card h3 {
  margin: 0;
  font-size: var(--fs-lg);
}
.protocol-card .grid-pc {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: var(--space-5);
  gap: var(--space-5);
  margin-top: var(--space-4);
}
.protocol-card .pc-block h4 {
  font-size: var(--fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--c-text-mute);
  margin-bottom: var(--space-2);
}
.protocol-card ul { list-style: none; padding: 0; margin: 0; display: grid; grid-gap: 6px; gap: 6px; }
.protocol-card ul li {
  position: relative;
  padding-left: 20px;
  font-size: var(--fs-sm);
  color: var(--c-text);
  line-height: 1.5;
}
.protocol-card ul.pros li::before { content: "+"; position: absolute; left: 0; top: 0; font-weight: 700; color: #2f7a4d; }
.protocol-card ul.cons li::before { content: "−"; position: absolute; left: 0; top: 0; font-weight: 700; color: #b44a3a; }

/* Step list (Keycloak tutorial) */
.step-list {
  list-style: none;
  padding: 0;
  margin: 0;
  counter-reset: step;
  display: grid;
  grid-gap: var(--space-5);
  gap: var(--space-5);
}
.step {
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-lg);
  padding: var(--space-6);
  position: relative;
  padding-left: 88px;
  counter-increment: step;
}
.step::before {
  content: counter(step, decimal-leading-zero);
  position: absolute;
  left: var(--space-6);
  top: var(--space-6);
  width: 44px; height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--c-brand-900);
  color: #fff;
  border-radius: 50%;
  font-weight: 700;
  font-size: var(--fs-sm);
}
.step h3 {
  margin: 0 0 var(--space-2);
  font-size: var(--fs-md);
}
.step p { font-size: var(--fs-sm); }

/* Code block */
pre.code {
  background: var(--c-code-bg);
  color: var(--c-code-fg);
  border-radius: var(--radius-md);
  padding: var(--space-4) var(--space-5);
  overflow-x: auto;
  font-family: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
  font-size: 0.82rem;
  line-height: 1.55;
  margin: var(--space-3) 0 0;
  border: 1px solid #1e293b;
}
pre.code .c-comment { color: #94a3b8; }
pre.code .c-key     { color: #93c5fd; }
pre.code .c-str     { color: #a7f3d0; }
pre.code .c-cmd     { color: #fbbf24; }

/* Inline article diagrams — SVG figures inside doc-section content.
   Parts of the SVG are styled via classes so they pick up the brand
   tokens and adapt to dark mode without per-mode overrides. */
.diagram {
  margin: var(--space-6) 0;
  text-align: center;
}
.diagram svg {
  max-width: 100%;
  height: auto;
  display: block;
  margin: 0 auto;
}
.diagram figcaption {
  font-size: var(--fs-xs);
  color: var(--c-text-mute);
  margin-top: var(--space-3);
  font-style: italic;
  max-width: 60ch;
  margin-left: auto;
  margin-right: auto;
  line-height: 1.5;
}
.diagram .d-stroke      { stroke: var(--c-brand-700); fill: none; }
.diagram .d-stroke-soft { stroke: var(--c-brand-300); fill: none; }
.diagram .d-fill-soft   { fill: var(--c-brand-50); stroke: var(--c-brand-300); }
.diagram .d-fill-tint   { fill: var(--c-brand-100); stroke: none; }
.diagram .d-accent      { fill: var(--c-brand-900); stroke: var(--c-brand-900); }
.diagram .d-accent-line { stroke: var(--c-brand-900); fill: none; stroke-width: 2; }
.diagram .d-dashed      { stroke-dasharray: 5 4; }
.diagram .d-label       { fill: var(--c-text); font-family: var(--ff-sans); font-weight: 700; }
.diagram .d-label-mute  { fill: var(--c-text-mute); font-family: var(--ff-sans); }

/* Callout box */
.callout {
  border-left: 4px solid var(--c-brand-700);
  background: var(--c-brand-50);
  padding: var(--space-4) var(--space-5);
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
  margin: var(--space-5) 0;
}
.callout p:last-child { margin-bottom: 0; }
.callout .label {
  display: inline-block;
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--c-brand-700);
  margin-bottom: var(--space-2);
}

/* BUND ID specific layout */
.bundid-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: var(--space-6);
  gap: var(--space-6);
  margin-top: var(--space-5);
}
.bundid-card {
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-md);
  padding: var(--space-5);
}
.bundid-card h4 {
  font-size: var(--fs-sm);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--c-brand-700);
  margin-bottom: var(--space-2);
}
.bundid-card p { font-size: var(--fs-sm); margin: 0; }

/* Method-stack: 4 progressive layers visualising the methodology */
.method-stack {
  display: grid;
  grid-gap: var(--space-3);
  gap: var(--space-3);
  margin-top: var(--space-5);
  position: relative;
}
.method-layer {
  display: grid;
  grid-template-columns: 56px 1fr;
  grid-gap: var(--space-4);
  gap: var(--space-4);
  padding: var(--space-4) var(--space-5);
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-left: 3px solid var(--c-brand-700);
  border-radius: var(--radius-md);
  align-items: start;
}
.method-num {
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: var(--fs-md);
  font-weight: 700;
  color: var(--c-brand-300);
  letter-spacing: 0.06em;
}
.method-layer h4 {
  margin: 0 0 var(--space-2);
  font-size: var(--fs-md);
}
.method-layer p { font-size: var(--fs-sm); margin: 0; }

/* Axes hint sitting next to the stack */
.method-axes {
  display: flex;
  justify-content: space-between;
  font-size: var(--fs-xs);
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--c-text-mute);
  font-weight: 600;
  margin-top: var(--space-3);
  padding: 0 var(--space-2);
}

/* Importance section: 4-tile grid */
.importance-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-gap: var(--space-4);
  gap: var(--space-4);
  margin-top: var(--space-5);
}
.importance-tile {
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-md);
  padding: var(--space-5);
}
.importance-tile h4 {
  font-size: var(--fs-sm);
  margin-bottom: var(--space-2);
}
.importance-tile p { font-size: var(--fs-sm); margin: 0; color: var(--c-text-mute); }

/* ============================================
   Globe (Globales Netzwerk)
   ============================================ */
.world-map-wrap {
  display: grid;
  grid-template-columns: 1.2fr 1fr;
  grid-gap: var(--space-7);
  gap: var(--space-7);
  align-items: center;
}
.globe-figure {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--space-5);
}
.globe-stage {
  position: relative;
  width: 440px;
  max-width: 100%;
  aspect-ratio: 1 / 1;
}
.globe-canvas {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
.globe-whirl {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
  pointer-events: none;
}
/* Whirl: concentric rings rotating in alternating directions */
@keyframes globe-spin-cw  { to { transform: rotate(360deg); } }
@keyframes globe-spin-ccw { to { transform: rotate(-360deg); } }
.globe-whirl g { transform-origin: 0 0; transform-box: view-box; }
.globe-whirl .ring.r1 { animation: globe-spin-cw  2.4s linear infinite; }
.globe-whirl .ring.r2 { animation: globe-spin-ccw 5.5s linear infinite; }
.globe-whirl .ring.r3 { animation: globe-spin-cw  8.0s linear infinite; }
.globe-whirl .ring.r4 { animation: globe-spin-ccw 22s  linear infinite; }
@keyframes globe-breathe {
  0%, 100% { opacity: 0.95; }
  50%      { opacity: 0.7; }
}
.globe-whirl { animation: globe-breathe 3s ease-in-out infinite; }

@media (prefers-reduced-motion: reduce) {
  .globe-whirl, .globe-whirl .ring { animation: none; }
}

.locations-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-gap: var(--space-3);
  gap: var(--space-3);
}
.location-item {
  display: grid;
  grid-template-columns: 36px 1fr;
  grid-gap: var(--space-3);
  gap: var(--space-3);
  padding: var(--space-4);
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-md);
  align-items: start;
}
.location-marker {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--c-brand-50);
  display: flex;
  align-items: center;
  justify-content: center;
  position: relative;
}
.location-marker::after {
  content: "";
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--c-brand-900);
}
.location-body .city {
  font-weight: 700;
  color: var(--c-brand-900);
  font-size: var(--fs-md);
}
.location-body .country {
  font-size: var(--fs-xs);
  color: var(--c-text-mute);
  margin-left: 6px;
}
.location-body .role {
  display: block;
  font-size: var(--fs-sm);
  color: var(--c-text-mute);
  margin-top: 2px;
}

/* ============================================
   CityAI product page
   ============================================ */

/* --- Hero with phone mockup --- */
.product-hero {
  padding: var(--space-9) 0 var(--space-8);
  background:
    radial-gradient(ellipse at top right, rgba(107,127,158,0.10), transparent 60%),
    linear-gradient(180deg, var(--c-brand-50) 0%, var(--c-bg) 100%);
}
.product-hero-grid {
  display: grid;
  grid-template-columns: 1.1fr 0.9fr;
  grid-gap: var(--space-8);
  gap: var(--space-8);
  align-items: center;
}
.product-hero h1 {
  font-size: var(--fs-3xl);
  line-height: 1.1;
}
.product-hero h1 .hl {
  color: var(--c-brand-700);
  position: relative;
  white-space: nowrap;
}
.product-hero h1 .hl::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 4px;
  height: 8px;
  background: var(--c-brand-100);
  z-index: -1;
  border-radius: 4px;
}
.product-hero .lead {
  font-size: var(--fs-md);
  max-width: 56ch;
}
.hero-stats {
  display: flex;
  gap: var(--space-7);
  margin-top: var(--space-6);
  flex-wrap: wrap;
}
.hero-stats .stat .num { font-size: var(--fs-xl); font-weight: 700; color: var(--c-brand-900); }
.hero-stats .stat .label { font-size: var(--fs-xs); color: var(--c-text-mute); margin-top: 2px; }

/* --- Phone mockup --- */
.phone-wrap { display: flex; justify-content: center; }
.phone {
  width: 300px;
  height: 600px;
  border-radius: 40px;
  background: #1f2937;
  box-shadow: 0 24px 60px rgba(20,30,50,0.18), 0 4px 14px rgba(20,30,50,0.10);
  padding: 14px;
  position: relative;
}
.phone::before {
  content: "";
  position: absolute;
  top: 14px; left: 50%;
  transform: translateX(-50%);
  width: 130px; height: 24px;
  background: #1f2937;
  border-bottom-left-radius: 14px;
  border-bottom-right-radius: 14px;
  z-index: 2;
}
.phone-screen {
  background: linear-gradient(180deg, var(--c-brand-50) 0%, var(--c-bg) 60%);
  height: 100%;
  border-radius: 28px;
  padding: 44px 14px 18px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  overflow: hidden;
}
.bubble {
  padding: 10px 14px;
  border-radius: 18px;
  max-width: 82%;
  font-size: 0.85rem;
  line-height: 1.45;
  animation: bubble-in 350ms ease both;
}
@keyframes bubble-in {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}
.bubble.user {
  background: var(--c-brand-900);
  color: var(--c-bg);
  align-self: flex-end;
  border-bottom-right-radius: 6px;
}
.bubble.ai {
  background: var(--c-bg);
  color: var(--c-text);
  border: 1px solid var(--c-border);
  align-self: flex-start;
  border-bottom-left-radius: 6px;
  box-shadow: var(--shadow-sm);
}
.typing {
  display: flex;
  gap: 4px;
  padding: 10px 14px;
  background: var(--c-bg);
  border: 1px solid var(--c-border);
  border-radius: 18px;
  width: -moz-fit-content;
  width: fit-content;
  align-self: flex-start;
}
.typing-dot {
  width: 7px; height: 7px;
  background: var(--c-brand-300);
  border-radius: 50%;
  animation: dot-bounce 1.3s infinite ease-in-out;
}
.typing-dot:nth-child(2) { animation-delay: 0.15s; }
.typing-dot:nth-child(3) { animation-delay: 0.3s; }
@keyframes dot-bounce {
  0%, 60%, 100% { transform: translateY(0); opacity: 0.6; }
  30% { transform: translateY(-6px); opacity: 1; }
}

/* --- Feature card variant with gradient top accent --- */
.card.accent { position: relative; overflow: hidden; }
.card.accent::before {
  content: "";
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: linear-gradient(90deg, var(--c-brand-700), var(--c-brand-300));
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 300ms ease;
}
.card.accent:hover::before { transform: scaleX(1); }

/* --- Capability rows (alternating) --- */
.capability {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: var(--space-8);
  gap: var(--space-8);
  align-items: center;
  margin-bottom: var(--space-9);
}
.capability:last-child { margin-bottom: 0; }
.capability.reverse > .capability-content { order: 2; }
.capability.reverse > .capability-visual  { order: 1; }
.capability h3 { font-size: var(--fs-xl); }
.capability .check-list {
  list-style: none;
  padding: 0;
  margin: var(--space-5) 0 0;
  display: grid;
  grid-gap: var(--space-2);
  gap: var(--space-2);
}
.capability .check-list li {
  position: relative;
  padding-left: 28px;
  color: var(--c-text);
  font-size: var(--fs-sm);
}
.capability .check-list li::before {
  content: "✓";
  position: absolute;
  left: 0; top: 0;
  width: 20px; height: 20px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  color: var(--c-brand-700);
  background: var(--c-brand-50);
  border-radius: 50%;
  font-size: 0.8rem;
}
.capability-visual {
  background: var(--c-brand-50);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-lg);
  padding: var(--space-7);
  min-height: 280px;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Visual: waste icon grid */
.waste-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  grid-gap: var(--space-5);
  gap: var(--space-5);
  width: 100%;
}
.waste-tile {
  background: #fff;
  border: 1px solid var(--c-border);
  border-radius: var(--radius-md);
  padding: var(--space-4);
  text-align: center;
  font-size: var(--fs-xs);
  color: var(--c-text-mute);
  font-weight: 600;
  transition: transform var(--transition), box-shadow var(--transition);
}
.waste-tile:hover { transform: translateY(-3px); box-shadow: var(--shadow-sm); }
.waste-tile .swatch {
  width: 38px; height: 38px;
  border-radius: 50%;
  margin: 0 auto var(--space-2);
}
.waste-tile .swatch.yellow { background: #f5c542; }
.waste-tile .swatch.brown  { background: #8b6f47; }
.waste-tile .swatch.blue   { background: #5a7faf; }
.waste-tile .swatch.grey   { background: #9aa3b1; }

/* Visual: transit timeline */
.timeline { width: 100%; display: grid; grid-gap: var(--space-3); gap: var(--space-3); }
.timeline-row {
  background: #fff;
  border: 1px solid var(--c-border);
  border-left: 3px solid var(--c-brand-500);
  border-radius: var(--radius-md);
  padding: var(--space-3) var(--space-4);
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: var(--fs-sm);
  box-shadow: var(--shadow-sm);
}
.timeline-row .eta { font-weight: 700; color: var(--c-brand-700); }
.timeline-row .eta.warn { color: #b44a3a; }

/* Visual: tech badge */
.tech-badge {
  background: linear-gradient(135deg, var(--c-brand-900) 0%, var(--c-brand-700) 100%);
  color: #fff;
  border-radius: var(--radius-lg);
  padding: var(--space-7);
  text-align: center;
  width: 100%;
}
.tech-badge .shield {
  width: 64px; height: 64px;
  margin: 0 auto var(--space-3);
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255,255,255,0.10);
  border-radius: 50%;
  font-size: 28px;
}
.tech-badge h4 { color: #fff; font-size: var(--fs-md); margin-bottom: var(--space-2); }
.tech-badge p  { color: rgba(255,255,255,0.78); font-size: var(--fs-sm); margin: 0; }

/* --- Pricing --- */
.pricing-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: var(--space-5);
  gap: var(--space-5);
  align-items: stretch;
}
.price-card {
  background: #fff;
  border: 1px solid var(--c-border);
  border-radius: var(--radius-lg);
  padding: var(--space-7);
  display: flex;
  flex-direction: column;
  position: relative;
  transition: transform var(--transition), box-shadow var(--transition), border-color var(--transition);
}
.price-card:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-md);
  border-color: var(--c-brand-300);
}
.price-card.featured {
  border-color: var(--c-brand-700);
  box-shadow: var(--shadow-md);
}
.price-card .badge {
  position: absolute;
  top: -12px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--c-brand-900);
  color: #fff;
  padding: 4px 14px;
  font-size: var(--fs-xs);
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border-radius: 999px;
}
.price-card h3 { font-size: var(--fs-md); margin-bottom: var(--space-2); }
.price-card .price-tag {
  font-size: 2.25rem;
  font-weight: 700;
  color: var(--c-brand-900);
  margin: var(--space-3) 0 var(--space-1);
  line-height: 1;
}
.price-card .price-tag .month {
  font-size: var(--fs-sm);
  font-weight: 500;
  color: var(--c-text-mute);
  margin-left: 4px;
}
.price-card .audience {
  font-size: var(--fs-sm);
  color: var(--c-text-mute);
  margin-bottom: var(--space-5);
}
.price-card ul.features {
  list-style: none;
  padding: 0;
  margin: 0 0 var(--space-6);
  display: grid;
  grid-gap: var(--space-2);
  gap: var(--space-2);
  flex-grow: 1;
}
.price-card ul.features li {
  font-size: var(--fs-sm);
  color: var(--c-text);
  padding-left: 22px;
  position: relative;
  border-bottom: 1px solid var(--c-border);
  padding-bottom: var(--space-2);
}
.price-card ul.features li:last-child { border-bottom: none; }
.price-card ul.features li::before {
  content: "✓";
  position: absolute;
  left: 0; top: 0;
  color: var(--c-brand-700);
  font-weight: 700;
}
.price-card .btn { width: 100%; justify-content: center; }

/* --- Final CTA box --- */
.cta-box {
  background: var(--c-brand-50);
  border: 1px solid var(--c-border);
  border-radius: var(--radius-lg);
  padding: var(--space-8);
  text-align: center;
  max-width: 720px;
  margin: 0 auto;
}
.cta-box h3 { font-size: var(--fs-xl); margin-bottom: var(--space-3); }
.cta-box p  { font-size: var(--fs-md); margin-bottom: var(--space-5); }

/* ---------- Responsive ---------- */
@media (max-width: 960px) {
  .grid-3, .grid-4 { grid-template-columns: repeat(2, 1fr); }
  .stats { grid-template-columns: repeat(2, 1fr); }
  .footer-grid { grid-template-columns: 1fr 1fr; }
  h1 { font-size: var(--fs-2xl); }
  h2 { font-size: var(--fs-xl); }
}

@media (max-width: 960px) {
  .doc-layout { grid-template-columns: 1fr; }
  .doc-toc { position: static; margin-bottom: var(--space-5); }
  .protocol-card .grid-pc { grid-template-columns: 1fr; }
  .bundid-grid { grid-template-columns: 1fr; }
  .importance-grid { grid-template-columns: 1fr; }
  .step { padding-left: 76px; }
  .world-map-wrap { grid-template-columns: 1fr; }
  .product-hero-grid { grid-template-columns: 1fr; gap: var(--space-7); }
  .capability { grid-template-columns: 1fr; gap: var(--space-5); margin-bottom: var(--space-7); }
  .capability.reverse > .capability-content,
  .capability.reverse > .capability-visual { order: initial; }
  .pricing-grid { grid-template-columns: 1fr; }
  .blog-category { margin-bottom: 80px; }
}

@media (max-width: 720px) {
  .nav-toggle { display: inline-flex; }
  .site-nav {
    position: absolute;
    top: 72px;
    left: 0; right: 0;
    background: #fff;
    border-bottom: 1px solid var(--c-border);
    display: none;
    padding: var(--space-4) var(--space-5);
  }
  .site-nav.open { display: block; }
  .site-nav .nav-divider { display: none; }
  .site-nav ul { flex-direction: column; gap: var(--space-3); }
  .grid-2, .grid-3, .grid-4 { grid-template-columns: 1fr; }
  .stats { grid-template-columns: 1fr 1fr; }
  .footer-grid { grid-template-columns: 1fr; }
  section { padding: var(--space-7) 0; }
  .hero { padding: var(--space-7) 0; }
}

/* ---------------------------------------------------------------------------
   Hero3d background — scoped to a single `.hero.hero-3d` section. Canvas
   and overlay are `position: absolute` inside the hero, so they scroll
   away with the page (no parallax). Outside the hero, regular page bg
   + tokens take over — keeps the rest of the page on-brand in both
   light and dark mode.
   --------------------------------------------------------------------------- */
.hero-3d {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  /* Panel is visible from the very first paint — no sudden surface shift
     when the canvas actually starts rendering 5 s later. The animation
     itself fades in inside this panel. */
  background: var(--c-bg-alt);
}
.hero-3d .hero3d-canvas {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 0;
  pointer-events: none;
  display: block;
}
.hero-3d .hero3d-overlay {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1;
  pointer-events: none;
  /* Overlay tints to the same color as the section background so where
     there is no composition the user just sees the flat panel — and where
     there is, the composition reads at ~5 % strength on top of it. */
  background: color-mix(in srgb, var(--c-bg-alt) 90%, transparent);
}
.hero-3d > .container {
  position: relative;
  z-index: 2;
}
/* Below the desktop threshold the animation is hidden visually (matches
   the JS gate in hero3d.js / main.js). The section keeps its alt panel
   background so the alternating section rhythm stays intact. */
@media (max-width: 1440px) {
  .hero-3d .hero3d-canvas,
  .hero-3d .hero3d-overlay {
    display: none;
  }
}


