/* heox.at – Kirby-Stylesheet (assets/css/main.css)
   Quelle: prototype/v5-live/assets/css/site.css (Stand 2026-09-29) OHNE die Regeln der
   Vergleichsseiten (.cv-, .cv2-, .lx-, .lv-); am Ende die Kirby-Ergänzungen
   (Block-Anschluss, Figure, Skip-Link des Plugin-Layouts). Bauvertrag: docs/blocks-contract.md § 8.
   Seit 2026-10-02 ist diese Datei die Quelle (Prototyp eingefroren): Layoutkorrekturen nach Typografie-/Raster-Audit direkt hier. */

/* HEOX — Umsetzung der Claude-Design-Vorlage "HEOX Website.dc.html", Runde 3 / 3a
   (Archivo · #cfff3a · Originallogo mit X in Akzentfarbe · Burgermenü · Gliederung je Element ohne Trennlinien, Entscheidung 2026-09-25).
   Vorlage ist ein 1280px-Canvas; hier responsiv übersetzt, Proportionen beibehalten. */

@import url("tokens.css");

@font-face { font-family: "Archivo"; font-style: normal; font-weight: 100 900; font-stretch: 62% 125%; font-display: swap;
  src: url("../fonts/archivo-var-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }
@font-face { font-family: "Archivo"; font-style: normal; font-weight: 100 900; font-stretch: 62% 125%; font-display: swap;
  src: url("../fonts/archivo-var-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }

:root {
  color-scheme: light;
  --bg: #fbfbf8;            /* fast weiß (James 2026-10-09) */
  --ink: #141412;
  --accent: #35e0ff;        /* Neonblau = Standard (James 2026-10-10) */
  --on-accent: #141412;     /* Text auf Akzentfläche */
  --accent-dark: #35e0ff;   /* Akzent auf dunklem Grund (Text/Wort) */
  --muted: #55524c;
  --muted-dark: #b8b6ae;
  --panel: #2a2926;
  --tone: #efeee8;          /* getönte Fläche statt Linie (Karten, Zebra) */


  /* Wortabstand gleicht die negative Laufweite der Überschriften aus (Typografie-Audit 2026-10-02) */
  --ws-display: .08em;
  --ws-head: .05em;
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body { margin: 0; background: var(--bg); color: var(--ink); font-family: "Archivo", Helvetica, Arial, sans-serif; font-size: var(--text-base); line-height: var(--leading-body); -webkit-font-smoothing: antialiased; font-synthesis: none; }
h1, h2, h3, h4, p { margin: 0; }
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; height: auto; }
button { font: inherit; color: inherit; }
:focus-visible { outline: 3px solid var(--ink); outline-offset: 3px; }
.on-dark :focus-visible { outline-color: var(--accent-dark); }
::selection { background: var(--accent); color: var(--on-accent); }

.skip { position: absolute; left: var(--space-pad); top: -5rem; z-index: 50; background: var(--ink); color: var(--bg); padding: var(--space-3) var(--space-4); }
.skip:focus { top: .5rem; }

.wrap { max-width: var(--container); margin-inline: auto; padding-inline: var(--space-pad); }
.muted { color: var(--muted); }
.mark { background: var(--accent); color: var(--on-accent); padding: 0 var(--mark-pad); -webkit-box-decoration-break: clone; box-decoration-break: clone; }
.on-dark { background: var(--ink); color: var(--bg); }
.on-dark .muted { color: var(--muted-dark); }

/* Buttons wie Vorlage: eckig, 20/32 */
.btn { display: inline-flex; align-items: center; justify-content: center; padding: var(--space-3) var(--space-5); font-weight: 700; font-size: var(--text-base); white-space: nowrap; min-height: var(--space-6); border: 1px solid transparent; transition: background-color .2s, color .2s; }
.btn-dark { background: var(--ink); color: var(--bg); }
.btn-dark:hover { background: var(--accent); color: var(--on-accent); }
.btn-line { border-color: var(--ink); }
.btn-line:hover { background: var(--ink); color: var(--bg); }
.btn-accent { background: var(--accent); color: var(--on-accent); }
.btn-accent:hover { background: var(--ink); color: var(--bg); }

/* Kopf */
.nav { display: flex; justify-content: space-between; align-items: center; padding-block: var(--space-4); }
.brand { display: flex; align-items: center; gap: var(--space-3); font-size: var(--text-base); font-weight: 700; letter-spacing: var(--tracking-sub); }
.brand img, .brand .logo { height: var(--space-7); width: auto; display: block; } /* 2026-10-09: Logo 64 px (James) */
.site-header .brand .logo { height: var(--space-8); } /* 2026-10-10: Kopf 96 px (James) */
.brand .logo { color: var(--ink); }
.on-dark .brand .logo, .footer .brand .logo, .menu .brand .logo { color: var(--bg); }
/* Akzent-Umschalter im Kopf (James 2026-10-09): drei Punkte, Wahl per data-accent am <html> */
.accent-switch { display: flex; gap: var(--space-2); }
.accent-switch button { all: unset; cursor: pointer; width: var(--space-3); height: var(--space-3); border-radius: 50%; box-sizing: border-box; outline-offset: 2px; transition: transform .2s; }
.accent-switch button:focus-visible { outline: 3px solid var(--ink); }
.on-dark .accent-switch button:focus-visible { outline-color: var(--accent-dark); }
.menu-accent { display: flex; flex-direction: column; gap: var(--space-2); margin-top: var(--space-3); }
.accent-switch [data-accent="blau"] { background: #35e0ff; }
.accent-switch [data-accent="pink"] { background: #ff2d9a; }
.accent-switch [data-accent="orange"] { background: #ff7a1a; }
.accent-switch [aria-pressed="true"] { transform: scale(1.25); } /* aktiv: etwas größer, keine Kontur (James 2026-10-09) */
:root[data-accent="pink"] { --accent: #ff2d9a; --accent-dark: #ff2d9a; }
:root[data-accent="orange"] { --accent: #ff7a1a; --accent-dark: #ff7a1a; }
/* Sticky-Kopfzeile, per JS beim Scrollen nach unten ausgeblendet (menu.js) */
.site-header { position: sticky; top: 0; z-index: 30; background: var(--bg); transition: transform .28s ease; }
.site-header.is-hidden { transform: translateY(-100%); }
@media (prefers-reduced-motion: reduce) { .site-header { transition: none; } }
.nav-right { display: flex; align-items: center; gap: var(--space-5); }
.nav-right .talk { font-weight: 700; font-size: var(--text-base); }
.burger { all: unset; cursor: pointer; display: flex; flex-direction: column; justify-content: center; align-items: flex-end; gap: var(--space-2); width: var(--space-6); height: var(--space-6); }
.burger span { display: block; width: var(--space-5); height: 3px; background: currentColor; }   /* 2026-10-10: dicker und größer (James) */
.burger span:last-child { width: var(--space-4); }
.burger:focus-visible { outline: 3px solid var(--ink); outline-offset: 3px; }

/* Menü-Overlay (Vorlage: dunkle Fläche 820px über der Seite) */
.menu { position: fixed; inset: 0; z-index: 40; background: var(--ink); color: var(--bg); display: none; flex-direction: column; justify-content: space-between; padding: var(--space-4) var(--space-pad) var(--space-7); overflow: auto; }
.menu.is-open { display: flex; }
.menu .close { all: unset; cursor: pointer; position: relative; width: var(--space-6); height: var(--space-6); }
.menu .close span { position: absolute; left: calc(50% - var(--space-5) / 2); top: calc(50% - 1px); width: var(--space-5); height: 3px; background: var(--bg); transform: rotate(45deg); }
.menu .close span + span { transform: rotate(-45deg); }
.menu .close:focus-visible { outline: 3px solid var(--accent-dark); outline-offset: 3px; }
.menu-inner { max-width: var(--container); margin-inline: auto; width: 100%; }
.menu-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--gutter); align-items: end; margin-top: var(--space-6); }
.menu-main { display: flex; flex-direction: column; gap: var(--space-3); font-size: var(--text-h2); font-weight: 800; letter-spacing: var(--tracking-head); line-height: var(--leading-tight); }
.menu-main a:hover { text-decoration: underline; text-decoration-color: var(--accent-dark); text-decoration-thickness: 6px; text-underline-offset: 10px; }
.menu-main a[aria-current="page"] { color: var(--accent-dark); }   /* 2026-10-10: nur der aktive Punkt in der Akzentfarbe (James) */
.menu-sub { display: flex; flex-direction: column; gap: var(--space-6); }
.menu-services { display: flex; flex-direction: column; gap: var(--space-2); font-size: var(--text-base); font-weight: 600; }
.menu-services a:hover, .menu-services a[aria-current="page"] { color: var(--accent-dark); }
.menu-contact { display: flex; flex-direction: column; gap: var(--space-2); font-size: var(--text-base); color: var(--muted-dark); }
body.menu-open { overflow: hidden; }

/* Hero Startseite: Text links, Hochformat-Fläche rechts (480px) */
.hero { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--gutter); padding-top: var(--space-4); align-items: stretch; }
.hero-text { min-width: 0; padding: var(--space-5) 0 var(--space-6); display: flex; flex-direction: column; gap: var(--space-5); justify-content: flex-start; }
.hero-text > .kicker { margin-bottom: calc(var(--space-4) - var(--space-5)); }   /* Kicker → H1 24 px wie auf den Unterseiten */
.hero-text > .hero-sub { margin-top: 0; }   /* 2026-10-10: kein Loch zwischen Titel und Text (James) */
.hero h1 { font-size: var(--text-h1-home); line-height: var(--leading-display); font-weight: 800; letter-spacing: var(--tracking-display); text-wrap: balance; }
.hero-sub { display: flex; flex-direction: column; gap: var(--space-5); max-width: 560px; }
.lead { font-size: var(--text-lead); line-height: var(--leading-body); font-weight: 500; text-wrap: pretty; }
.actions { display: flex; gap: var(--space-3); flex-wrap: wrap; }
.hero-media { background: var(--accent); color: var(--on-accent); display: flex; align-items: flex-end; padding: var(--space-4); min-height: clamp(360px, 50vw, 640px); }
.placeholder { font-family: ui-monospace, "JetBrains Mono", Menlo, monospace; font-size: var(--text-xs); }

/* Hero Leistungsseite */
.hero-page { padding-top: clamp(var(--space-6), 6.9vw, var(--space-8)); display: flex; flex-direction: column; gap: var(--space-stack); }
.hero-page h1 { font-size: var(--text-h1-page); line-height: var(--leading-display); font-weight: 800; letter-spacing: var(--tracking-display); }
.hero-page-row { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--gutter); align-items: start; }
.hero-page-row .actions { justify-content: flex-end; }

/* Sektionen */
.section { padding-top: var(--space-section); }
/* 2026-10-09 (James): Einleitung steht UNTER der Ueberschrift, sitewide */
.section-head { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gutter); row-gap: var(--space-4); }
.section-head > * { grid-column: span 8; }
.section-head h2, .h2 { font-size: var(--text-h2); font-weight: 800; letter-spacing: var(--tracking-head); line-height: var(--leading-tight); }
.section-head p { font-size: var(--text-lead); line-height: var(--leading-body); font-weight: 500; color: var(--muted); text-wrap: pretty; }

/* Leistungszeilen mit Hover = Akzentfläche */
/* Entscheidung 2026-09-25 (01 B): Titel in Überschriftgröße dicht gesetzt, Kurztext auf Desktop beim Überfahren, mobil klein darunter; keine Linien */
.rows { display: grid; grid-auto-rows: 1fr; }   /* 2026-10-10: alle Zeilen so hoch wie die mit dem längsten Kurztext (James) */
.row { display: grid; grid-template-columns: auto 1fr var(--space-6); column-gap: var(--gutter); align-items: center; padding: var(--space-2) 0; transition: background-color .2s, padding .2s; }
.row h3 { font-size: var(--text-row); font-weight: 800; letter-spacing: var(--tracking-head); line-height: var(--leading-tight); } /* 2026-10-09: kleiner als die H2 „Leistungen“ (James) */
.row p { font-size: var(--text-base); line-height: var(--leading-body); color: var(--muted); max-width: 40ch; }
@media (hover: hover) and (min-width: 901px) {
  .row p { opacity: 0; transform: translateX(-8px); transition: opacity .2s, transform .2s; }
  .row:hover p, .row:focus-visible p { opacity: 1; transform: none; }
}
.row .arrow { font-size: var(--text-xl); font-weight: 300; text-align: right; line-height: var(--leading-tight); }
/* Zwischen 901 und 1399 px passt der Kurztext nicht neben den Titel und macht die Zeilen ungleich hoch (Raster-Audit 2026-10-02) */
.row:hover, .row:focus-visible { background: var(--accent); color: var(--on-accent); padding-left: var(--space-4); padding-right: var(--space-4); }
.row:hover p, .row:focus-visible p { color: inherit; }

/* Think. Think. Do. */
.steps-intro { font-size: var(--text-lead); line-height: var(--leading-body); font-weight: 500; max-width: 560px; text-wrap: pretty; }
.steps { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-5) var(--gutter); align-items: start; }
.step { display: flex; flex-direction: column; gap: var(--space-4); }
.step-word { font-size: var(--text-step); font-weight: 800; letter-spacing: var(--tracking-display); line-height: var(--leading-display); align-self: flex-start; }
.step-word.do { background: var(--accent); color: var(--on-accent); padding: 0 var(--mark-pad); }
.on-dark .step-word.do { background: none; padding: 0; color: var(--accent-dark); }
.step h3 { font-size: var(--text-h3); font-weight: 800; letter-spacing: var(--tracking-sub); line-height: var(--leading-tight); }
.step p { font-size: var(--text-base); line-height: var(--leading-body); color: var(--muted); text-wrap: pretty; }
.step-text { display: flex; flex-direction: column; gap: var(--space-2); }

/* Team-Band (dunkel) */
.team { margin-top: var(--space-section); display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); }
.team-text { padding: clamp(var(--space-7), 7.5vw, var(--space-8)) var(--space-pad); display: flex; flex-direction: column; gap: var(--space-5); justify-content: center; }
.team-text p { font-size: var(--text-base); line-height: var(--leading-body); max-width: 520px; text-wrap: pretty; }
.team-text a { font-weight: 700; font-size: var(--text-base); color: var(--accent-dark); }
.team-text a:hover { text-decoration: underline; text-underline-offset: 6px; }
.portraits { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-1); background: var(--bg); }
.portrait { background: var(--panel); display: flex; align-items: flex-end; padding: var(--space-4); min-height: clamp(320px, 43.75vw, 560px); color: var(--muted-dark); }

/* Bausteine (Leistungsseite) */
/* Entscheidung 2026-09-25 (03 A): Begriff über der Erklärung, nur Abstand */
/* 2026-10-10 (James): Bausteine wie die Case-Karten – dunkle Flächen, Negativschrift, Rollover in der gewählten Akzentfarbe; Fuge 4 px wie das Bento */
.blocks { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-1); }
.block { background: var(--tone); color: var(--ink); padding: var(--space-5); display: flex; flex-direction: column; gap: var(--space-2); transition: background-color .2s, color .2s; }
.block a { color: inherit; }
@media (hover: hover) { .block:hover { background: var(--accent); color: var(--on-accent); } .block:hover p, .block:hover a { color: inherit; } }
/* ohne Maus: Rollover am Scrollen (assets/js/tiles.js setzt .is-active auf der Kachel in der Bildmitte) */
@media (hover: none) {
  .block.is-active, .bento-card.is-active { background: var(--accent); color: var(--on-accent); }
  .block.is-active p, .block.is-active a, .bento-card.is-active p, .bento-card.is-active .link-arrow { color: inherit; }
  .bento-card.is-active .tag { border-color: var(--ink); }
}
.block h3 { font-size: var(--text-md); font-weight: 800; letter-spacing: var(--tracking-sub); line-height: var(--leading-snug); }
.block p { margin-top: 0; font-size: var(--text-base); line-height: var(--leading-body); color: var(--muted); max-width: 44ch; }

/* Entscheidung 2026-09-25 (02 A): Lab-Programme als Absätze mit fettem Vorspann */
.programmes { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-5) var(--gutter); margin-top: var(--gutter); }
.programmes p { font-size: var(--text-base); line-height: var(--leading-body); max-width: 52ch; text-wrap: pretty; }
.programmes b { font-weight: 800; letter-spacing: var(--tracking-sub); }
.programmes a:hover b, .programmes a:focus-visible b { background: var(--accent); color: var(--on-accent); }

/* Prozess-Band dunkel */
.process { margin-top: var(--space-section); padding: clamp(var(--space-7), 7.5vw, var(--space-8)) 0; }
.process h2 { max-width: 900px; text-wrap: balance; }
.process .steps { margin-top: clamp(var(--space-6), 5.6vw, var(--space-7)); }
.process .step p { color: var(--muted-dark); }

/* Kontakt */
.contact { padding-block: var(--space-section); display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--gutter); align-items: end; }
.contact h2 { font-size: var(--text-h2-xxl); font-weight: 800; letter-spacing: var(--tracking-display); line-height: var(--leading-display); }
.contact-col { display: flex; flex-direction: column; gap: var(--space-4); }
.contact-col > p { font-size: var(--text-md); line-height: var(--leading-body); font-weight: 500; max-width: 440px; text-wrap: pretty; }
/* Entscheidung 2026-09-25 (08 A): E-Mail in Zeilengröße, Adresse klein, keine Liste */
.contact-list { display: flex; flex-direction: column; gap: var(--space-2); }
.contact-list a { display: block; font-size: var(--text-row); font-weight: 800; letter-spacing: var(--tracking-head); line-height: var(--leading-tight); padding: var(--space-1) 0; overflow-wrap: anywhere; }
.contact-list a [aria-hidden] { display: none; }
.contact-list a:hover { background: var(--accent); color: var(--on-accent); }
.contact-list .note-line { margin: var(--space-1) 0 0; font-size: var(--text-md); font-weight: 500; line-height: var(--leading-body); }
.contact-list .addr { display: flex; flex-direction: column; gap: var(--space-1); margin-top: var(--space-4); font-size: var(--text-base); font-weight: 500; line-height: var(--leading-body); color: var(--muted); }
/* Kontakt mit Globus (James 2026-10-09, Lieferung 0daten/kontakt-globus):
   links die Kugel (7 Spalten), rechts Überschrift + Kontaktdaten (5),
   oben ausgerichtet; mobil Globus zuerst, beides volle Breite */
.contact-globus { align-items: start; }
.contact-globus .globus-col { grid-column: span 7; display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-3); }
.contact-globus .contact-text { grid-column: span 5; display: flex; flex-direction: column; gap: var(--space-5); }
.contact-globus h2 { font-size: var(--text-h2); }
.contact-globus .contact-col > p { max-width: none; }
.contact-globus .contact-list { gap: var(--space-3); }
.contact-globus .contact-list .addr { margin-top: 0; font-style: normal; }
.contact-route { align-self: flex-start; }
/* Fläche hinter der Kugel in der Seitenfarbe, nicht getönt (James 2026-10-10: „grauer Hintergrund weg“); die Komponente füllt den Canvas selbst, transparent geht nicht */
/* Bis das Modul geladen ist, hält das noch undefinierte Element seinen Platz (Seitenverhältnis 5:4 wie im Shadow-CSS der
   Komponente), sonst springt der Text rechts nach unten, sobald die Kugel erscheint. */
kontakt-globus:not(:defined) { display: block; aspect-ratio: 5 / 4; }
kontakt-globus { width: 100%; --globus-bg: var(--bg); --globus-sphere: var(--bg); --globus-ink: var(--ink); --globus-muted: var(--muted-dark); }

/* CTA-Block Leistungsseite */
.cta { padding-block: var(--space-section); display: flex; flex-direction: column; gap: var(--space-6); }
.cta h2 { font-size: var(--text-h2-xl); font-weight: 800; letter-spacing: var(--tracking-display); line-height: var(--leading-display); text-wrap: balance; }
.cta-row { display: flex; justify-content: space-between; align-items: center; gap: var(--space-6); margin-top: var(--space-2); flex-wrap: wrap; }
.cta-row p { font-size: var(--text-md); font-weight: 500; }

/* Fuß */
/* Entscheidung 2026-09-25 (Sektionsgrenzen 1): Fuß als dunkle Fläche, CTA-Zeile hängt am Abstand */
.footer { background: var(--ink); color: var(--bg); margin-top: var(--space-section); }
.footer .brand { color: var(--bg); }
/* Fuss (James 2026-10-09): Logo-Zeile, darunter vier Spalten auf einer
   Grundlinie (Tagline | Kontakt | Leistungen | HEOX); Ueberschriften und
   Tagline grau, alle anderen Texte weiss; unten Social-Icons ueber dem
   grauen Copyright, kein Trennstrich */
.footer-inner { padding-block: var(--space-7) var(--space-6); font-size: var(--text-base); }
.footer-logo { margin-bottom: var(--space-6); }
.footer-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-6) var(--gutter); align-items: baseline; }
.footer-col h2 { font-size: var(--text-xs); font-weight: 700; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--muted-dark); margin-bottom: var(--space-3); }
.footer-col a, .footer-col p { display: block; color: var(--bg); font-weight: 600; line-height: var(--leading-body); margin: 0 0 var(--space-2); }
.footer-col a:hover { text-decoration: underline; text-underline-offset: 4px; }
.footer-social { display: flex; gap: var(--space-4); margin-bottom: var(--space-4); }
.footer-social a { display: inline-flex; color: var(--bg); margin: 0; }
.footer-social a:hover { color: var(--accent); text-decoration: none; }
.footer-social svg { width: var(--space-4); height: var(--space-4); fill: currentColor; }
.footer-bottom { margin-top: var(--space-7); }
/* Copyright-Zeile: links Copyright, rechts „Cookie-Einstellungen“ (James 2026-10-09) */
.footer-meta { display: flex; justify-content: space-between; align-items: baseline; gap: var(--space-4); flex-wrap: wrap; }
.footer-copy { display: block; font-size: var(--text-xs); font-weight: 500; color: var(--muted-dark); }
.footer-col .footer-tagline { margin: 0; font-size: var(--text-xs); font-weight: 500; color: var(--muted-dark); max-width: 36ch; } /* Ranking-Signal „Unternehmensberatung Innsbruck“ (fakten U25), Wortlaut Live-Site */


@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { transition: none !important; } }

/* Tablet/Mobil — Vorlage ist nur 1280 gezeichnet; hier stapeln sich die Spalten */
@media (max-width: 900px) {
  .hero-media { min-height: 60vw; order: 2; }
  .hero-text { padding-top: var(--space-3); gap: var(--space-5); }
  .hero-text > .kicker { margin-bottom: calc(-1 * var(--space-2)); }
  .hero-page-row .actions { justify-content: flex-start; }
  .row { grid-template-columns: 1fr var(--space-6); row-gap: var(--space-2); padding-block: var(--space-3); }
  .row p { grid-column: 1 / -1; font-size: var(--text-base); }
  .row .arrow { grid-column: 2; grid-row: 1; }
  .portraits .portrait { min-height: 70vw; }
  .nav-right .talk { display: none; }
}
@media (max-width: 520px) {
  .actions .btn { flex: 1 1 auto; }
}

/* ===================== Ergänzende Elemente (Elementeübersicht) ===================== */

/* Kleinüberschrift / Label */
.kicker { font-size: var(--text-xs); font-weight: 700; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--muted); }
.on-dark .kicker { color: var(--muted-dark); }
.tag { display: inline-flex; align-items: center; padding: var(--space-2) var(--space-2); font-size: var(--text-xs); font-weight: 600; border: 1px solid var(--ink); line-height: var(--leading-tight); }
.tag-fill { background: var(--ink); color: var(--bg); border-color: var(--ink); }
.tag-accent { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }
.tags { display: flex; flex-wrap: wrap; gap: var(--space-2); }

/* Textlinks */
.link { font-weight: 700; text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 6px; }
.link:hover { text-decoration-color: var(--accent); }
.link-arrow { font-weight: 700; }
.link-arrow::after { content: " →"; }
.link-arrow:hover { text-decoration: underline; text-underline-offset: 6px; }

/* Fließtext-Bausteine */
.prose { max-width: 66ch; font-size: var(--text-base); line-height: var(--leading-body); }
.prose p + p { margin-top: var(--space-3); }
.prose h3 { font-size: var(--text-h3); font-weight: 800; letter-spacing: var(--tracking-sub); line-height: var(--leading-snug); margin: var(--space-6) 0 var(--space-3); }
.prose ul { padding-left: var(--space-4); }
.prose li + li { margin-top: var(--space-2); }
/* .list-check (Neon-Quadrat): ersetzt durch .list-x (Entscheidung James 2026-09-29); greift auf keiner Seite mehr, bleibt als Referenz */
.list-check { list-style: none; padding: 0; margin: 0; display: grid; gap: var(--space-2); }
.list-check li { display: grid; grid-template-columns: 24px 1fr; gap: var(--space-2); align-items: start; }
.list-check li::before { content: ""; width: 18px; height: 18px; margin-top: var(--space-1); background: var(--accent); border: 1px solid var(--ink); }
.list-arrow { list-style: none; padding: 0; margin: 0; display: grid; gap: var(--space-2); font-weight: 600; }
.list-arrow li::before { content: "→ "; }

/* Zitat */
.quote { border-left: 6px solid var(--accent); padding-left: var(--space-5); max-width: 760px; }
.quote p { font-size: var(--text-h3); line-height: var(--leading-snug); font-weight: 700; letter-spacing: var(--tracking-sub); text-wrap: pretty; }
.quote footer { margin-top: var(--space-3); font-size: var(--text-base); color: var(--muted); }
.quote-big { font-size: var(--text-h2); font-weight: 800; letter-spacing: var(--tracking-head); line-height: var(--leading-tight); max-width: 20ch; text-wrap: balance; }
.quote-big em { font-style: normal; background: var(--accent); color: var(--on-accent); padding: 0 var(--mark-pad); -webkit-box-decoration-break: clone; box-decoration-break: clone; }

/* Kennzahlen */
/* Entscheidung 2026-09-25 (04 A): Zahlen im Satz, neon markiert */
.stat-text { font-size: var(--text-h3); line-height: var(--leading-body); font-weight: 600; letter-spacing: var(--tracking-sub); max-width: 34ch; text-wrap: pretty; }
.stat-text .mark { font-weight: 800; }
.h2 + .stat-text, .kicker + .stat-text { margin-top: var(--space-4); }
.stats { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-5) var(--gutter); }
.stat b { display: block; font-size: var(--text-h2); font-weight: 800; letter-spacing: var(--tracking-head); line-height: var(--leading-display); font-variant-numeric: lining-nums; }
.stat span { display: block; margin-top: var(--space-2); font-size: var(--text-base); color: var(--muted); line-height: var(--leading-body); }
.on-dark .stat span { color: var(--muted-dark); }
.stat-rows { display: flex; flex-direction: column; }
.stat-row { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-4); align-items: baseline; padding: var(--space-4) 0; }
.stat-row b { font-size: var(--text-row); font-weight: 800; letter-spacing: var(--tracking-head); line-height: var(--leading-tight); }
.stat-row p { color: var(--muted); }

/* Cases: Teaser überall als Bento-Karte (siehe .bento unten; James 2026-10-07 – Dreispalten-Liste und Neon-Kasten „Nächster Case“ abgelöst) */
/* Entscheidung 2026-09-25 (10 A): Karten im Ton, 4 px Luft statt Tinte-Fuge */
.cards { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-1); }
.card { background: var(--tone); padding: var(--space-5); display: flex; flex-direction: column; gap: var(--space-3); min-height: 260px; }
.card h3 { font-size: var(--text-lg); font-weight: 800; letter-spacing: var(--tracking-sub); line-height: var(--leading-snug); }
.card p { color: var(--muted); }
.card .link-arrow { margin-top: auto; }
.card-accent { background: var(--accent); color: var(--on-accent); }
.card-accent p { color: inherit; }
.card-dark { background: var(--ink); color: var(--bg); }
.card-dark p { color: var(--muted-dark); }

/* Medien-Platzhalter */
.media { background: var(--panel); color: var(--muted-dark); display: flex; align-items: flex-end; padding: var(--space-4); }
.media-accent { background: var(--accent); color: var(--on-accent); }
.media-light { background: #e4e3dc; color: var(--muted); }
.ratio-169 { aspect-ratio: 16 / 9; }
.ratio-45 { aspect-ratio: 4 / 5; }
.ratio-11 { aspect-ratio: 1; }
.media-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-1); }
figure { margin: 0; }
figcaption { margin-top: var(--space-2); font-size: var(--text-xs); color: var(--muted); }

/* FAQ */
/* Entscheidung 2026-09-25 (06 C): Akkordeon ohne Linien, nur Abstand und Plus */
.faq details { padding: 0; }
.faq summary { list-style: none; cursor: pointer; display: grid; grid-template-columns: 1fr var(--space-6); gap: var(--space-4); align-items: center; padding: var(--space-3) 0; font-size: var(--text-md); font-weight: 700; letter-spacing: var(--tracking-sub); line-height: var(--leading-snug); }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; font-size: var(--text-xl); font-weight: 300; text-align: right; line-height: var(--leading-tight); transition: transform .2s; }
.faq details[open] summary::after { content: "–"; }
.faq summary:hover { text-decoration: underline; text-decoration-color: var(--accent); text-decoration-thickness: 4px; text-underline-offset: 6px; }
.faq .answer { padding: 0 0 var(--space-3); max-width: 66ch; font-size: var(--text-base); line-height: var(--leading-body); color: var(--muted); }

/* Formular */
.form { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-4) var(--gutter); max-width: 880px; }
.field { display: flex; flex-direction: column; gap: var(--space-2); }
.field.full { grid-column: 1 / -1; }
.field label { font-size: var(--text-xs); font-weight: 700; }
.field input, .field textarea, .field select { font: inherit; font-size: var(--text-base); padding: var(--space-3) var(--space-3); background: transparent; border: 1px solid var(--ink); color: var(--ink); min-height: 52px; border-radius: 0; -webkit-appearance: none; appearance: none; }
.field select { background: transparent url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='10' viewBox='0 0 16 10'><path d='M1 1l7 7 7-7' fill='none' stroke='%23141412' stroke-width='2'/></svg>") no-repeat right 16px center; padding-right: var(--space-6); }
.field textarea { min-height: 160px; resize: vertical; }
.field input:focus, .field textarea:focus, .field select:focus { outline: none; box-shadow: 0 0 0 3px var(--accent); }
.field .hint { font-size: var(--text-xs); color: var(--muted); }
.field.error input { border-color: #b3261e; }
.field .msg { font-size: var(--text-xs); color: #b3261e; font-weight: 600; }
.check { display: grid; grid-template-columns: 24px 1fr; gap: var(--space-2); align-items: start; font-size: var(--text-base); line-height: var(--leading-body); }
.check input { width: 22px; height: 22px; margin: var(--space-1) 0 0; accent-color: var(--ink); }
.form-actions { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: var(--space-3) var(--space-4); align-items: center; }

/* Tabelle */
/* Entscheidung 2026-09-25 (07 A): jede zweite Zeile im Ton; unter 900px wird jede Zeile eine Karte (kein seitliches Scrollen) */
.table { width: 100%; border-collapse: collapse; font-size: var(--text-base); }
.table th, .table td { text-align: left; padding: var(--space-3) var(--space-3); vertical-align: top; }
.table th { font-size: var(--text-xs); font-weight: 700; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--muted); }
.table tbody tr:nth-child(odd) { background: var(--tone); }
.table td:first-child { font-weight: 700; white-space: nowrap; }
.table td:last-child { color: var(--muted); }
@media (max-width: 900px) {
  .table, .table tbody, .table tr, .table td { display: block; }
  .table thead { display: none; }
  .table tr { padding: var(--space-2) var(--space-3); }
  .table td { padding: var(--space-1) 0; }
  .table td:first-child { padding-bottom: var(--space-1); white-space: normal; }
  .table td:last-child { font-size: var(--text-xs); padding-top: var(--space-2); }
}
.table-wrap { overflow-x: auto; }

/* Hinweise / Notizen */
.note { border: 1px solid var(--ink); padding: var(--space-4) var(--space-4); max-width: 720px; display: grid; grid-template-columns: auto 1fr; gap: var(--space-3); align-items: start; }
.note::before { content: "i"; width: 28px; height: 28px; display: grid; place-items: center; font-weight: 800; background: var(--accent); color: var(--on-accent); }
.note-dark { background: var(--ink); color: var(--bg); border-color: var(--ink); }
.callout { background: var(--accent); color: var(--on-accent); padding: var(--gutter); display: grid; grid-template-columns: 1fr auto; gap: var(--space-4); align-items: center; }
.callout p { font-size: var(--text-h3); font-weight: 800; letter-spacing: var(--tracking-sub); line-height: var(--leading-snug); max-width: 26ch; }

/* Laufband (zurückhaltend) */
.ticker { border-block: 1px solid var(--ink); overflow: hidden; white-space: nowrap; padding: var(--space-3) 0; font-weight: 700; font-size: var(--text-base); }
.ticker span { display: inline-block; padding-inline: var(--space-4); }
.ticker span::after { content: "·"; margin-left: var(--space-6); color: var(--muted); }

/* Breadcrumb, Pagination, Seitennav */
.crumbs { display: flex; flex-wrap: wrap; gap: var(--space-2); font-size: var(--text-xs); font-weight: 600; color: var(--muted); }
.crumbs a:hover { color: var(--ink); text-decoration: underline; }
.crumbs li + li::before { content: "/"; margin-right: var(--space-2); }
.crumbs, .pager { list-style: none; margin: 0; padding: 0; }
.pager { display: flex; gap: var(--space-1); }
.pager a, .pager span { display: grid; place-items: center; min-width: 44px; height: 44px; padding: 0 var(--space-2); border: 1px solid var(--ink); font-weight: 700; }
.pager [aria-current] { background: var(--ink); color: var(--bg); }
.pager a:hover { background: var(--accent); color: var(--on-accent); }
.subnav { display: flex; flex-wrap: wrap; gap: var(--space-1); }
.subnav a { padding: var(--space-2) var(--space-3); border: 1px solid var(--ink); font-weight: 600; font-size: var(--text-base); }
.subnav a[aria-current], .subnav a:hover { background: var(--ink); color: var(--bg); }

/* Team */
.people { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-5) var(--gutter); }
.person .media { margin-bottom: var(--space-3); }
.person h3 { font-size: var(--text-md); font-weight: 800; letter-spacing: var(--tracking-sub); line-height: var(--leading-snug); }
.person p { color: var(--muted); font-size: var(--text-base); }

/* Logos (Partner/Tools) */
.logos { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-1); }
.logos div { background: var(--tone); min-height: 96px; display: grid; place-items: center; font-weight: 700; color: var(--muted); }

/* Prozess-Timeline */
/* Entscheidung 2026-09-25 (09 A, ohne Nummern): Schritte mit Pfeil nach rechts im Spaltenabstand; mobil untereinander mit Pfeil nach unten */
.timeline { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-5) var(--space-6); /* Pfeil braucht mehr als den Gutter */ }
/* 2026-10-10 (James): Schritte im Stil des TDX-Schaubilds – Kästen im Ton, Pfeil dazwischen;
   Hierarchie wie im Schaubild: erster Schritt klein, vorletzter dunkel (Knoten), letzter im Akzent (Ergebnis) */
.timeline { align-items: center; }   /* Kästen auf einer Achse zentriert wie im TDX-Schaubild */
.timeline > div { position: relative; background: var(--tone); padding: var(--space-4); }   /* eckig (James 2026-10-10) */
.timeline > div:first-child { padding: var(--space-3); }
.timeline > div:nth-last-child(2) { background: var(--ink); color: var(--bg); padding: var(--space-5); }
.timeline > div:nth-last-child(2) p { color: var(--muted-dark); }
.timeline > div:nth-last-child(2) h3 { font-size: var(--text-md); }
.timeline > div:last-child { background: var(--accent); color: var(--on-accent); padding: var(--space-5); }
.timeline > div:last-child p { color: inherit; }
.timeline > div:last-child h3 { font-size: var(--text-md); }
.timeline > div + div::before { content: ""; position: absolute; left: calc(-1 * var(--space-6)); width: var(--space-6); height: 2px; top: 50%; transform: translateY(-50%); background: var(--muted); }
.timeline > div + div::after { content: ""; position: absolute; left: calc(-1 * var(--space-2) - 2px); top: 50%; transform: translateY(-50%); border-left: calc(var(--space-2) + 2px) solid var(--muted); border-top: 6px solid transparent; border-bottom: 6px solid transparent; }
.on-dark .timeline > div + div::before { background: var(--accent-dark); }
.timeline h3 { font-size: var(--text-base); font-weight: 800; letter-spacing: var(--tracking-sub); line-height: var(--leading-snug); margin-bottom: var(--space-2); }
.timeline p { color: var(--muted); font-size: var(--text-xs); line-height: var(--leading-body); }

/* Übersichtsseite */
.spec { padding-block: var(--space-section) 0; }
.spec-head { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--gutter); padding-bottom: var(--space-4); border-bottom: 1px solid var(--ink); margin-bottom: var(--space-6); align-items: end; }
.spec-head h2 { font-size: var(--text-h2); font-weight: 800; letter-spacing: var(--tracking-head); line-height: var(--leading-tight); }
.spec-head p { color: var(--muted); max-width: 60ch; }
.spec-grid { display: grid; gap: var(--space-6); }
.spec-item > .kicker { display: block; margin-bottom: var(--space-3); }
.swatches { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: var(--space-1); }
.swatch { aspect-ratio: 4 / 3; padding: var(--space-3); display: flex; flex-direction: column; justify-content: flex-end; gap: var(--space-1); font-size: var(--text-xs); font-weight: 700; border: 1px solid var(--ink); }
.swatch small { font-weight: 500; opacity: .8; }
.type-row { display: grid; grid-template-columns: 200px 1fr; gap: var(--space-5); align-items: baseline; padding: var(--space-4) 0; border-bottom: 1px solid var(--ink); }
.type-row .kicker { margin: 0; }
.toc { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); font-weight: 600; font-size: var(--text-base); border-block: 1px solid var(--ink); padding: var(--space-3) 0; }
.toc a:hover { text-decoration: underline; text-underline-offset: 6px; }
.demo-dark { padding: var(--gutter); }
.hero-b { display: grid; grid-template-columns: 1fr; gap: var(--space-6); padding: var(--gutter) 0; }
.hero-b h1, .hero-b .h1 { font-size: var(--text-h1-page); line-height: var(--leading-display); font-weight: 800; letter-spacing: var(--tracking-display); }
.hero-c { padding: var(--gutter); display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--gutter); align-items: end; min-height: 480px; }
.hero-c .h1 { font-size: var(--text-h1-home); line-height: var(--leading-display); font-weight: 800; letter-spacing: var(--tracking-display); }

@media (max-width: 900px) {
  .type-row { grid-template-columns: 1fr; gap: var(--space-2); }
  .timeline > div + div::before { left: 50%; right: auto; top: calc(-1 * var(--space-5)); width: 2px; height: var(--space-5); transform: translateX(-50%); }
  .timeline > div + div::after { left: 50%; top: calc(-1 * var(--space-2) - 2px); transform: translateX(-50%); border-left: 6px solid transparent; border-right: 6px solid transparent; border-top: calc(var(--space-2) + 2px) solid var(--muted); border-bottom: 0; }
  .timeline > div + div { margin-top: var(--space-5); }
  .timeline { row-gap: 0; }
}
/* Übersicht: Grid-Kinder dürfen schrumpfen (nowrap-Inhalte wie Laufband/Tabelle sonst Überlauf) */
.spec-grid > .spec-item { min-width: 0; }
.ticker { max-width: 100%; }
.stats, .cards, .people, .logos { min-width: 0; }
.table-wrap { min-width: 0; max-width: 100%; }
.spec-item > * { max-width: 100%; }

/* ===================== Ergänzungen aus dem Seitenbau (2026-09-25) ===================== */
/* Abstände zwischen gestapelten Bausteinen (ersetzt Inline-margin-top in den Seiten) */
.kicker + .stat-rows, .kicker + .stats { margin-top: var(--space-4); }
.card-dark a { color: var(--accent); }
.hero-c .h1 .accent { color: var(--accent); }
/* Lab: fünfstufige Methode */
/* Befund-Block (Lab): einspaltig, Aufbau/Befund/Grenze nebeneinander */
.finding-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-4) var(--gutter); margin-top: var(--space-4); }
/* Abstand nach Sektionskopf, wo vorher die Linie oben den Abstand gab */
/* 2026-09-25: Trennlinien je Element ersetzt (docs/research/21-trenner-alternativen.md) — Linien nur noch an Fuß und CTA-Zeile (offen) */

/* === v5-live: Ergänzungen === */
/* Grundlage: docs/research/23-v5-bausteine.md; Anlass: Live-Texte (docs/research/live-text/) im V5-Design. Oben nichts geändert. */

/* Fehlende Abstandsregeln (Katalog 3.2) und wiederkehrende Stapel der Live-Sektionen */
.prose + .list-check, .prose + .list-x { margin-top: var(--space-5); }
.list-check + .actions, .list-x + .actions, .prose + .actions { margin-top: var(--space-5); }
/* Button nach dem Sektionskopf (Einleitung ist ein Absatz): dieselben 32 px wie nach Fließtext
   (Abstands-Prüfung 2026-10-09: Start „HEOX Lab“ 48, Über uns „HEOX Lab“ 32 – jetzt gleich) */
.section-head + .actions { margin-top: var(--space-5); }
/* Fließtext direkt nach dem Sektionskopf gehört zur Textgruppe (Überschrift → Einleitung → Absatz) und
   bekommt den Innenabstand des Kopfes (24), nicht den Stapelabstand (48): sonst steht der Absatz so weit
   von der Einleitung weg wie der nächste Baustein vom Absatz, und die Hierarchie innen < zwischen kippt
   (James 2026-10-10, Startseite „So arbeiten wir“ → Think. Think. Do.). Steht am Dateiende hinter
   .section > * + *, damit der Innenabstand gewinnt. */

/* Bausteine dreispaltig (Live-Kachelreihen mit 3, 5 oder 6 Kacheln) */

/* Hero A: zweiter Absatz der Live-Heros, 16 px unter dem Lead (hero-sub hat gap 32) */
.hero .lead + .lead-2 { margin-top: calc(-1 * var(--space-3)); color: var(--muted); }

/* Hero Unterseite: Live-Titel, die ein Satz sind („KI Beratung. Klar priorisiert.“) */
.hero-page h1.h1-sentence { font-size: var(--text-h1-home); line-height: var(--leading-tight); max-width: 14ch; }
/* Kicker (Eyebrow-Text der Live-Site) direkt über der H1: 20 px statt Spaltenabstand */
.hero-page > .kicker { margin-bottom: calc(var(--space-4) - var(--space-stack)); }
/* Zweiter Hero-Absatz: im Raster rechte Spalte (Abstand = Spaltenabstand), gestapelt 16 px */
.hero-page .lead + .lead-2 { margin-top: var(--space-3); color: var(--muted); }
.hero-page-row > .lead + .lead-2 { margin-top: 0; }

/* Hero C (Case-Kopf): zweiter Absatz unter dem Lead (beide in einem gemeinsamen <div>) */
.hero-c .lead + p { margin-top: var(--space-3); }
.hero-c .kicker { display: block; margin-bottom: var(--space-3); }

/* (Kontakt-Sektion: V5-Original ohne Formular – Entscheidung 2026-09-29) */

/* Menü: Überschrift „Leistungen“ und Social-Links */
.menu-services .kicker { margin-bottom: var(--space-1); }
.menu-social { display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-4); margin-top: var(--space-3); font-weight: 600; color: var(--bg); }
.menu-contact a:hover, .menu-social a:hover { color: var(--accent-dark); }

/* Seiten Über uns, Impressum, Datenschutz: Bild und Text unter dem Sektionskopf, Absätze in Kacheln, lange Akkordeon-Antworten */
/* H1 mit langem Einzelwort („Datenschutz&shy;erklärung“): mobil kleiner, damit „Datenschutz“ in die Zeile passt */
.hero-page h1.h1-long { font-size: min(var(--text-h1-page), 15vw); }
.prose > h3:first-child { margin-top: 0; }
.section-head h2:only-child { grid-column: 1 / -1; }
.block p + p { margin-top: var(--space-2); }
.faq .answer > * + * { margin-top: var(--space-3); }
.faq .answer ul { padding-left: var(--space-4); }
.faq .answer li + li { margin-top: var(--space-2); }
.faq .answer b { color: var(--ink); }
.faq .answer a { text-decoration: underline; text-underline-offset: 3px; }
.block a { text-decoration: underline; text-underline-offset: 3px; }

@media (max-width: 900px) {
}

/* Cases als Bento-Raster (Entscheidung James 2026-09-29, Variante E aus _case-varianten-2.html; seit 2026-10-07 überall: Übersicht, Leistungsseiten, „Nächster Case“)
   Je Dreiergruppe eine große dunkle Karte (.bento-card-large, 2×2, Teasertext sichtbar) + zwei kleine Ton-Karten; jede zweite Gruppe mit
   großer Karte rechts (.bento-card-right). Die Klassen stehen im Markup für „Alle“ und werden von cases-filter.js nach jedem Filterlauf
   für die sichtbaren Karten neu gesetzt; data-slot (0/1/2) = Position in der Gruppe, steuert die Staffelung beim Einblenden. */
.bento { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); grid-auto-flow: row dense; gap: var(--space-1); }
.bento-card { min-height: 0; transition: background-color .2s, color .2s; }
.bento-card[hidden] { display: none; }
.bento-card h3 { overflow-wrap: break-word; hyphens: auto; hyphenate-limit-chars: 12 5 5; }
.bento-teaser { margin-top: auto; font-size: var(--text-base); line-height: var(--leading-body); }
.bento-teaser + .link-arrow { margin-top: 0; }
/* Rest am Ende (Leistungsseiten mit 1, 2 oder 4 Cases, „Nächster Case“, Filtertreffer): große Karte allein → volle Breite statt Loch;
   kleine Karte allein neben der großen → beide Zeilen hoch. Ohne JS über :last-child, nach einem Filterlauf setzt cases-filter.js die Klassen. */
.bento-card-large:last-child, .bento-card-wide { grid-column: 1 / -1; }
.bento-card-large + .bento-card:last-child, .bento-card-tall { grid-row: span 2; }
.bento-card-large h3 { margin-top: auto; font-size: var(--text-row); letter-spacing: var(--tracking-head); line-height: var(--leading-tight); max-width: 18ch; text-wrap: balance; }
.bento-card-large .bento-teaser { margin-top: 0; font-size: var(--text-lead); line-height: var(--leading-body); max-width: 44ch; }
.bento-card-large .bento-teaser + .link-arrow { margin-top: var(--space-2); color: var(--accent); }
.bento-card-large .tag { border-color: var(--muted-dark); }
.bento-card:hover, .bento-card:focus-visible { background: var(--accent); color: var(--on-accent); }
.bento-card:hover p, .bento-card:focus-visible p, .bento-card:hover .link-arrow, .bento-card:focus-visible .link-arrow { color: inherit; }
.bento-card:hover .tag, .bento-card:focus-visible .tag { border-color: var(--ink); }
.bento-card:focus-visible { outline-offset: -3px; }
.bento-card-large:focus-visible { outline-color: var(--ink); }
/* Teasertext der kleinen Karten: nur bei Maus-Geräten ab 901 px zunächst unsichtbar (Platz bleibt reserviert, Text bleibt im Link) */
@media (hover: hover) and (min-width: 901px) {
  .bento-card:not(.bento-card-large) .bento-teaser { opacity: 0; transform: translateY(16px); transition: opacity .3s, transform .3s; }
  .bento-card:hover .bento-teaser, .bento-card:focus-visible .bento-teaser { opacity: 1; transform: none; }
}
/* Scroll-Einblendung (reveal.js setzt .is-armed nur ohne prefers-reduced-motion) */
.bento.is-armed .bento-card { opacity: 0; transform: translateY(40px); transition: opacity .6s ease, transform .6s cubic-bezier(.2, .7, .2, 1), background-color .2s, color .2s; }
.bento.is-armed .bento-card[data-slot="1"] { transition-delay: .12s, .12s, 0s, 0s; }
.bento.is-armed .bento-card[data-slot="2"] { transition-delay: .24s, .24s, 0s, 0s; }
.bento.is-armed .bento-card.is-in { opacity: 1; transform: none; }
@media (max-width: 900px) {
  .bento-card-large, .bento-card-large.bento-card-right { grid-column: auto; grid-row: auto; padding: var(--space-4); }
  .bento-card, .bento-card-large + .bento-card:last-child, .bento-card-tall { grid-row: auto; padding: var(--space-4); }
  .bento-card-large h3 { margin-top: var(--space-2); }
}

/* === Aufzählungen: .list-x (Entscheidung James 2026-09-29: Variante J „X als Marker“, X in Neon mit Tintenkontur; ersetzt .list-check) ===
   Werte 1:1 aus .lx-marker + .lx-marker-neon (_listen-varianten-2.html). Linkes X-Bein ergänzt (James 2026-10-01): Pfad symmetrisch, viewBox beginnt bei −1,62.
   Markup: <ul class="list-x" role="list"><li><svg class="x" aria-hidden="true" focusable="false"><use href="#heox-x"/></svg>Text</li></ul>
   Symbol: <svg class="sprite">…<symbol id="heox-x">…</symbol></svg> einmal direkt nach <body> (Pfad mit vector-effect="non-scaling-stroke").
   role="list", weil Safari Listen mit list-style: none sonst nicht als Liste ansagt. */
.sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.list-x { list-style: none; padding: 0; margin: 0; font-size: var(--text-lead); font-weight: 600; line-height: var(--leading-snug); letter-spacing: var(--tracking-sub); }
/* hängender Einzug 0,7 em + 12 px, 12 px Abstand zwischen den Punkten */
.list-x li { padding: 0 0 var(--space-2) calc(.7em + var(--space-2)); break-inside: avoid; overflow-wrap: break-word; }
.list-x li:last-child { padding-bottom: 0; }
/* X 0,7 em breit (Höhe .656 em); Neon auf Papier hat nur Kontrast 1,07, daher 1 px Tintenkontur.
   Archivo 600: x-Höhe .526 em → Mitte des X auf die Mitte der Kleinbuchstaben: vertical-align (.263 − .328) em */
.list-x .x { display: inline-block; overflow: visible; width: .7em; height: .656em; margin: 0 var(--space-2) 0 calc(-.7em - var(--space-2)); vertical-align: -.065em;
  fill: var(--accent); stroke: var(--ink); stroke-width: 1px; stroke-linejoin: miter; }
@media (min-width: 901px) {
  .list-x { columns: 2; column-gap: var(--gutter); margin-bottom: calc(-1 * var(--space-2)); }
  .list-x li:last-child { padding-bottom: var(--space-2); }
}

/* Lange Wörter in Sektionsüberschriften nur auf schmalen Bildschirmen trennen (Überlauf „Wettbewerbsvorteil“ bei 375 px) */
@media (max-width: 520px) { .section-head h2, .h2 { hyphens: auto; hyphenate-limit-chars: 14 6 6; overflow-wrap: anywhere; } }

/* ===================== Kirby-Ergänzungen (docs/blocks-contract.md § 5/§ 8) ===================== */
/* Skip-Link des Plugin-Layouts (heox.site/layout, Ziel #content) im Design von .skip */
.heox-skip-link { position: absolute; left: var(--space-pad); top: -5rem; z-index: 50; background: var(--ink); color: var(--bg); padding: var(--space-3) var(--space-4); }
.heox-skip-link:focus { top: .5rem; }

/* Block-Anschluss: Toggle „An vorherigen Baustein anschließen“ – Sektionsabstand wird zum Spaltenabstand,
   das erste Element der angeschlossenen Sektion bringt keinen eigenen Zusatzabstand mit */
.section.section-attach { padding-top: var(--space-stack); }

/* Bild-Block (Core image, Snippet-Override): Abbildung in Satzbreite, Bildunterschrift gedämpft */
.figure { margin: 0; }
.figure img { width: 100%; height: auto; }
/* Schaubild (Block heox-figure): inline-SVG, Farben aus den Variablen,
   Desktop-Variante .sd / Mobil-Variante .sm */
.schema svg { display: block; width: 100%; height: auto; font-family: inherit; }
.schema .sm { display: none; }
.schema rect.n { fill: var(--tone); }
.schema rect.na { fill: var(--accent); }
.schema text { fill: var(--ink); }
.schema .t { font-size: var(--text-base); font-weight: 800; letter-spacing: var(--tracking-sub); }
.schema .tl { font-size: var(--text-md); font-weight: 800; letter-spacing: var(--tracking-sub); }
.schema .tx { font-size: var(--text-lg); font-weight: 800; letter-spacing: var(--tracking-sub); fill: var(--bg); }
.schema .s { font-size: var(--text-xs); fill: var(--muted); }
.schema .sa { fill: var(--on-accent); }
.schema .sk { font-size: var(--text-xs); fill: var(--muted-dark); }
.schema rect.nk { fill: var(--ink); }
.schema path, .schema line { stroke: var(--muted); stroke-width: 2; fill: none; }
.schema .ah { fill: var(--muted); stroke: none; }
.section .schema { margin-top: var(--space-stack); }
@media (max-width: 760px) {
  .schema .sd { display: none; }
  .schema .sm { display: block; max-width: 420px; }
}

/* Hero A mit echtem Bild statt Platzhalterfläche */
.hero-media.has-image { padding: 0; background: var(--tone); overflow: hidden; }
.hero-media.has-image img { width: 100%; height: 100%; object-fit: cover; }

/* Kontakt-Sektion als letzter Baustein: Fuß schließt direkt an (im Prototyp .contact + .footer; in Kirby liegt <main> dazwischen) */
.heox-main:has(> .contact:last-child) + .footer, .heox-main:has(> .cta:last-child) + .footer { margin-top: 0; }

/* Core-Blöcke heading/text/quote (Fließtext in .wrap.section > .prose) */
.prose h2 { font-size: var(--text-h3); font-weight: 800; letter-spacing: var(--tracking-sub); line-height: var(--leading-snug); margin: var(--space-6) 0 var(--space-3); }
.prose > h2:first-child { margin-top: 0; }
.prose a { text-decoration: underline; text-underline-offset: 3px; }

/* Themenfelder (Block heox-topics, HEOX Lab): Rubrik + Frage, darunter Testumgebung / Ergebnis nebeneinander */
.topics { display: grid; gap: var(--gutter); }
.topic h3 { font-size: var(--text-h3); font-weight: 800; letter-spacing: var(--tracking-sub); line-height: var(--leading-snug); margin-top: var(--space-2); }
.topic-cols { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--space-4) var(--gutter); margin-top: var(--space-4); }
.topic-cols p { margin-top: var(--space-2); font-size: var(--text-base); line-height: var(--leading-body); color: var(--muted); max-width: 66ch; }
.topic-link { margin-top: var(--space-3); }

/* ===================== Überschriften: Wortabstand, Umbruch, Trennung (Typografie-Audit 2026-10-02) =====================
   Die negative Laufweite der Vorlage bleibt; sie zieht aber auch das Leerzeichen zusammen („Wirsind“, „Redenwir.“).
   word-spacing gleicht das aus. Trennung nur bei langen Wörtern und an sinnvollen Stellen (mindestens 14 Zeichen, 6 vor/nach). */
.hero h1, .hero-page h1, .hero-b h1, .hero-b .h1, .hero-c .h1, .section-head h2, .h2, .spec-head h2, .row h3, .step-word, .menu-main, .contact h2, .cta h2, .quote-big, .stat b { word-spacing: var(--ws-display); }
.step h3, .prose h2, .prose h3, .topic h3, .card h3, .callout p, .contact-list a, .stat-row b, .bento-card-large h3 { word-spacing: var(--ws-head); }
.hero-page h1, .section-head h2, .h2, .contact h2, .hero-c .h1, .faq summary, .timeline h3, .block h3, .step h3, .prose h2, .prose h3, .topic h3, .card h3 { text-wrap: balance; }
.hero-c h1.h1 { font-size: var(--text-h2); line-height: var(--leading-tight); hyphens: auto; hyphenate-limit-chars: 14 6 6; overflow-wrap: anywhere; }

/* ===================== Abstände im Sektionsinneren (Raster-Audit 2026-10-02) =====================
   Eine Stufe für Kopf → Inhalt und Baustein → Baustein (--stack), 32 px für Fortsetzungen im Text (Liste/Button nach Absatz,
   Regeln mit zwei Klassen oben). Muss am Dateiende stehen, damit sie Einzelabstände gleicher Spezifität ersetzt. */
.section > * + * { margin-top: var(--space-stack); }
.section > :first-child { margin-top: 0; }
.section > .section-head + .prose { margin-top: var(--space-4); }   /* Textgruppe, Begründung bei .section-head + .actions */
/* Leistungszeilen (Start): alle Zeilen sind so hoch wie der längste Kurztext (James 2026-10-10), der auf dem Desktop
   erst beim Überfahren erscheint; der Titel sitzt mittig. Dadurch stand über dem ersten und unter dem letzten Titel
   unsichtbare Luft (Zeilenpolster 8 + halbe Differenz Kurztext − Titel), die Kopf → Zeilen und Zeilen → nächste Sektion
   sichtbar vergrößerte (gemessen 68/148 statt 48/128; Abstands-Prüfung 2026-10-09). Der Kurztext reserviert deshalb
   fix drei Zeilen, und genau diese Luft wird aus dem Stapel- und Sektionsabstand herausgerechnet – alles aus Tokens,
   keine neuen Werte. Mobil ist der Kurztext sichtbar: Zeilen so hoch wie ihr Inhalt, nur das Polster (16) herausrechnen. */
.rows { --row-air: calc(var(--space-2) + (3 * var(--text-base) * var(--leading-body) - var(--text-row)) / 2); }
.row p { min-height: calc(3 * var(--text-base) * var(--leading-body)); }
.section > .rows { margin-top: calc(var(--space-stack) - var(--row-air)); margin-bottom: calc(-1 * var(--row-air)); }
@media (max-width: 900px) {
  .rows { --row-air: var(--space-3); grid-auto-rows: auto; }
  .row p { min-height: 0; }
}
/* FAQ: 20 px Innenabstand der ersten/letzten Frage aus dem sichtbaren Abstand herausrechnen */
.faq { margin-bottom: calc(-1 * var(--space-3)); }
.section > * + .faq { margin-top: calc(var(--space-stack) - var(--space-3)); }


/* Live-Büro (Block heox-live-buero, Web Component assets/js/live-buero.js):
   Ecken und Farben ans Design, Sprechblasen in der Site-Schrift */
live-buero { display: block; mix-blend-mode: multiply; --lb-radius: 0; --lb-ink: var(--ink); --lb-sticky: var(--accent); --lb-hand-font: inherit; } /* Sprechblasen in der Site-Schrift (James 2026-10-09) */
live-buero::part(status) { font-family: inherit; font-weight: 600; }
.live-buero-figure figcaption { font-size: var(--text-xs); }

/* ===================== 12-Spalten-Raster (James 2026-10-09) =====================
   Alle Layout-Raster laufen auf repeat(12, minmax(0, 1fr)) mit Gutter 24; die Kinder
   belegen Spaltenspannen. Ausnahmen: Timeline-5 (fünf Schritte passen nicht in 12),
   Bento mit 4-px-Fuge (Entscheidung 2026-09-25), Bauteil-innere Raster (Zeile, FAQ, Notiz). */
.menu-grid > *, .hero-page-row > *, .contact > *, .team > *, .programmes > *, .blocks > *, .form .field, .hero-c > *, .topic-cols > * { grid-column: span 6; }
.hero-text { grid-column: span 8; }
.hero-media { grid-column: span 4; }
.steps > *, .blocks.blocks-3 > *, .cards > *, .finding-grid > *, .timeline > * { grid-column: span 4; }
.timeline > * { grid-column: span 3; }
.stats > *, .people > * { grid-column: span 3; }
.logos > * { grid-column: span 2; }
.footer-grid > :first-child { grid-column: span 4; }
.footer-grid > * { grid-column: span 3; }
.footer-grid > :last-child { grid-column: span 2; }
.stat-row > b { grid-column: span 3; }
.stat-row > p { grid-column: span 9; }
.media-grid > :first-child { grid-column: span 6; }
.media-grid > * { grid-column: span 3; }
.spec-head > :first-child { grid-column: span 4; }
.spec-head > :last-child { grid-column: span 8; }
.form .field.full, .form .form-actions { grid-column: 1 / -1; }
.bento-card { grid-column: span 4; }
.bento-card-large { grid-column: span 8; grid-row: span 2; padding: clamp(var(--space-5), 4vw, var(--space-7)); }
.bento-card-large.bento-card-right { grid-column: 5 / span 8; }
.bento-card-large:last-child, .bento-card-wide { grid-column: 1 / -1; }
@media (min-width: 901px) { .timeline-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); } .timeline-5 > * { grid-column: auto; } }
@media (max-width: 900px) {
  .section-head > *, .menu-grid > *, .hero-text, .hero-media, .hero-page-row > *, .contact > *, .team > *, .programmes > *, .blocks > *, .blocks.blocks-3 > *, .steps > *, .cards > *, .finding-grid > *, .timeline > *, .stats > *, .people > *, .form .field, .hero-c > *, .topic-cols > *, .stat-row > b, .stat-row > p, .media-grid > *, .spec-head > * { grid-column: 1 / -1; }
  .logos > * { grid-column: span 4; }
  .footer-grid > *, .footer-grid > :first-child, .footer-grid > :last-child { grid-column: span 6; }
  .contact-globus .globus-col, .contact-globus .contact-text { grid-column: 1 / -1; }
  .bento-card, .bento-card-large, .bento-card-large.bento-card-right, .bento-card-large:last-child, .bento-card-wide { grid-column: 1 / -1; grid-row: auto; }
  .steps, .menu-grid { row-gap: var(--space-6); }
  .timeline { column-gap: var(--gutter); }
  .programmes { row-gap: var(--space-4); }
}
@media (max-width: 560px) { .footer-grid > *, .footer-grid > :first-child, .footer-grid > :last-child { grid-column: 1 / -1; } .brand img, .brand .logo { height: var(--space-6); } .site-header .brand .logo { height: var(--space-7); } }

/* Think-Think-Do-Loop im Hero (Block heox-hero-home ohne Bild, Web Component
   assets/js/heox-loop.js): füllt die Akzentfläche, Farben über Variablen, damit
   der Akzent-Umschalter greift; ohne JS bleibt die Fläche */
.hero-media-loop { padding: 0; display: block; }
heox-loop { display: block; width: 100%; height: 100%; aspect-ratio: auto; min-height: clamp(360px, 50vw, 640px);
  --heox-loop-bg: var(--accent); --heox-loop-ink: var(--ink); --heox-loop-do-bg: var(--ink); --heox-loop-do-fg: var(--accent);
  --heox-loop-font-weight: 800; --heox-loop-letter-spacing: var(--tracking-head); }
heox-loop:not(:defined) { background: var(--accent); }
@media (max-width: 900px) { heox-loop { min-height: 0; aspect-ratio: 4 / 3; } }
/* Kopf mobil: Claim neben dem Logo weg, damit Umschalter und Burger Platz haben */
@media (max-width: 560px) { .site-header .brand > span { display: none; } }

/* Audit 2026-10-10: Klassen statt Inline-Styles */
.nav-flat { padding-block: 0; }
.bento + .more { margin-top: var(--space-5); }
.accent-text { color: var(--accent); }

/* Cookiebanner (heox/kirby-cookiebanner → orestbida/cookieconsent v3) im Site-Design:
   Leiste unten, eckig, Archivo, Buttons wie .btn, Toggle in der Akzentfarbe (James 2026-10-10) */
#cc-main { --cc-font-family: "Archivo", Helvetica, Arial, sans-serif; --cc-bg: var(--bg); --cc-primary-color: var(--ink); --cc-secondary-color: var(--muted); --cc-link-color: var(--ink);
  --cc-btn-primary-bg: var(--ink); --cc-btn-primary-color: var(--bg); --cc-btn-primary-border-color: var(--ink); --cc-btn-primary-hover-bg: var(--accent); --cc-btn-primary-hover-color: var(--on-accent); --cc-btn-primary-hover-border-color: var(--accent);
  --cc-btn-secondary-bg: transparent; --cc-btn-secondary-color: var(--ink); --cc-btn-secondary-border-color: var(--ink); --cc-btn-secondary-hover-bg: var(--ink); --cc-btn-secondary-hover-color: var(--bg); --cc-btn-secondary-hover-border-color: var(--ink);
  --cc-btn-border-radius: 0; --cc-modal-border-radius: 0; --cc-pm-toggle-border-radius: 0; --cc-modal-margin: 0; --cc-overlay-bg: rgba(20, 20, 18, .5);
  --cc-toggle-on-bg: var(--accent); --cc-toggle-on-knob-bg: var(--ink); --cc-toggle-off-bg: var(--tone); --cc-toggle-off-knob-bg: var(--muted); --cc-toggle-readonly-bg: var(--ink); --cc-toggle-readonly-knob-bg: var(--bg);
  --cc-cookie-category-block-bg: var(--tone); --cc-cookie-category-block-border: var(--tone); --cc-cookie-category-block-hover-bg: var(--tone); --cc-cookie-category-block-hover-border: var(--tone); --cc-cookie-category-expanded-block-bg: var(--bg); --cc-cookie-category-expanded-block-hover-bg: var(--bg);
  --cc-section-category-border: var(--tone); --cc-separator-border-color: var(--tone); --cc-footer-bg: var(--bg); --cc-footer-border-color: var(--tone); --cc-footer-color: var(--muted); }
#cc-main .cm { border-top: 1px solid var(--ink); box-shadow: none; }
#cc-main .cm__title, #cc-main .pm__title { font-weight: 800; letter-spacing: var(--tracking-sub); }
#cc-main .cm__btn, #cc-main .pm__btn { font-weight: 700; text-transform: none; }
#cc-main .pm { box-shadow: none; border: 1px solid var(--ink); }
.footer-cookies { all: unset; cursor: pointer; margin-left: auto; font-size: var(--text-xs); font-weight: 600; color: var(--bg); }
.footer-cookies:hover { text-decoration: underline; text-underline-offset: 4px; }
