/* ==========================================================================
   OVERRIDES — the fix layer. Loads last, wins on purpose.
   Each block names the issue it resolves so it can be traced back.
   Rule of thumb: only touch what was asked for. The reference look is the
   baseline; site.css and custom.css carry it and are left to do their job.
   ========================================================================== */

:root {
  --brand: #fe5000;
  --brand-dark: #7a1e00;
  --brand-light: #ff8a4c;
  --ink: #212121;
  --canvas: #fafafa;
  --plate: #e9e9e9;
  --arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 11'%3E%3Cpath d='M9.3.3l4.9 4.9a.6.6 0 010 .9L9.3 11l-.8-.8 3.9-3.9H.6V5.2h11.8L8.5 1.1z' fill='%23000'/%3E%3C/svg%3E");
}

/* --------------------------------------------------------------------------
   1. GLOBAL SCALE
   The layout is drawn against a 1920px reference and scaled with `zoom` on the
   two big desktop bands.
   -------------------------------------------------------------------------- */
@media (min-width: 1365px) and (max-width: 1850px) {
  .page-wrapper { zoom: .8; }
}
@media (min-width: 992px) and (max-width: 1365px) {
  .page-wrapper { zoom: .7; }
}

/* --------------------------------------------------------------------------
   2. FIX — every hero, and the footer, is exactly one viewport tall
   Two things distort this. Inside a `zoom`ed subtree `100vh` is multiplied by
   the zoom factor, which is why the reference wrote 125vh / 143vh and still
   drifted. And on the pages where the navbar is `sticky` rather than `fixed`
   it takes 80px out of the flow above the hero, so a hero of a full viewport
   pushed the fold 80px down. `--hero-min` carries the answer to both: main.js
   sets it to `(viewport - navbar in flow) / zoom`, in the authored units the
   hero is measured in. The band values below are the pre-JS fallback.
   -------------------------------------------------------------------------- */
:root { --hero-min: 100vh; --hero-min: 100svh; }
@media (min-width: 1365px) and (max-width: 1850px) { :root { --hero-min: 125vh; --hero-min: 125svh; } }      /* zoom .8 */
@media (min-width: 992px) and (max-width: 1365px)  { :root { --hero-min: 142.857vh; --hero-min: 142.857svh; } }  /* zoom .7 */

.section_hero,
.section_hero.d-flex,
.hero-sec2,
.hero-sec2.py-100,
.profile-hero_inner,
.team-hero,
.team-hero-inner {
  min-height: var(--hero-min) !important;
  height: auto;
}
/* the footer is exactly one viewport tall, on every device — whatever cannot
   fit yields: on the phone that is the in-flow drawing, which shrinks to the
   space the copy and the legal block leave over */
.section-2 { height: 100vh !important; height: 100svh !important; min-height: 0 !important; max-height: 100vh; max-height: 100svh; }
@media (min-width: 1365px) and (max-width: 1850px) { .section-2 { height: 125vh !important; height: 125svh !important; max-height: 125vh; max-height: 125svh; } }
@media (min-width: 992px) and (max-width: 1365px)  { .section-2 { height: 142.857vh !important; height: 142.857svh !important; max-height: 142.857vh; max-height: 142.857svh; } }
/* the copy and the legal block never shrink — their overflow:hidden would
   clip the text; on the phone only the in-flow drawing yields */
.section-2 > .section_footer-cta,
.section-2 > .footer-bottom { flex-shrink: 0; }
/* the claim sits clear of the sticky navbar and deeper in the plate — the
   export's 120px put it right under the bar on the desktop; large screens
   push it further down still */
@media (min-width: 768px) {
  .section-2 > .overflow-hidden.section_footer-cta { padding-top: 240px !important; }
}
@media (min-width: 1200px) {
  .section-2 > .overflow-hidden.section_footer-cta { padding-top: 300px !important; }
}
@media (min-width: 1850px) {
  .section-2 > .overflow-hidden.section_footer-cta { padding-top: 340px !important; }
}
@media (max-width: 767px) {
  /* the claim block sits high in the footer like the hero headline does —
     that frees the middle of the screen for a hero-sized drawing */
  .section-2 > .overflow-hidden.section_footer-cta { padding-top: 12vh !important; padding-top: 12svh !important; }
  .section-2 > .code-embed.lottie.absolute2.block {
    /* the drawing lives between the copy and the legal block, like the hero:
       the band takes the leftover space, the swoosh draws at its natural
       ratio pinned to the bottom-left of the band (xMinYMax from main.js) —
       with the claim raised the band is large enough for full Webflow size,
       and on short phones the drawing scales down instead of clipping */
    flex: 1 1 auto;
    min-height: 90px;
    overflow: hidden;
    display: flex;
    align-items: flex-end;
    justify-content: flex-start;
    padding-top: 0 !important;
  }
  .section-2 > .code-embed.lottie.absolute2.block > svg {
    width: 100% !important;
    height: 100% !important;
    max-width: 100%;
  }
}
@media (min-width: 480px) and (max-width: 767px) {
  .section-2 > .code-embed.lottie.absolute2.block { width: 80% !important; }
}
/* the legal row keeps the same clearance to the screen edge as to the sides:
   60px on the desktop (the inner container's side inset), 20px on the phone.
   NACHTRAG (Desktop-Runde): 60px `padding-bottom` ergaben *sichtbar* 71,6px —
   die Copyright-Zeile endet 9,9px über der Innenkante, und unter ihren Glyphen
   liegt noch der Rest der Zeilenbox. Gemessen wird jetzt die Tinte: 48px
   Innenabstand ergeben 59,6px Luft und damit dieselben 60px wie nach links. */
.footer-bottom.pt-480 { padding-bottom: 48px !important; }
@media (max-width: 767px) { .footer-bottom.pt-480 { padding-bottom: 20px !important; } }
/* The footer is one viewport too. It is a flex column of three blocks — CTA,
   swoosh, bottom plate — and the swoosh is the one that may give: it absorbs
   whatever space is left over instead of dictating the height, so the copyright
   plate always lands on the bottom edge of the screen. The two text blocks
   never shrink, so a very short viewport overflows visibly rather than
   squeezing the type. */
.image-26.h-vh, .hero-sec2 .image-26 { height: 100%; min-height: 0; object-fit: cover; }

/* --------------------------------------------------------------------------
   3. FIX — the hairline seam at the right and bottom of the viewport
   `zoom` on the page wrapper makes every length fractional, so the wrapper
   paints ~1px short of the right edge and whatever sits behind the page shows
   through as a line. Rather than pick one colour to hide it, every band bleeds
   a few pixels past its own right edge in its own colour (`background-color:
   inherit` on a pseudo-element resolves to the band's colour), so the gap is
   always filled with the colour it should have been. Bands without a colour
   inherit `transparent` on purpose and fall through to the body canvas.
   Below the last band there is only the dark footer, so the html canvas is ink.
   -------------------------------------------------------------------------- */
html { background-color: var(--ink); }
body { background-color: var(--canvas); }
.page-wrapper,
.page-wrapper.hidden { background-color: var(--canvas); overflow-x: clip; }

.page-wrapper section { position: relative; }
.page-wrapper section::after {
  content: "";
  position: absolute;
  z-index: 0;
  top: 0; bottom: 0; right: -6px;
  width: 6px;
  background-color: inherit;
  pointer-events: none;
}
/* the footer plate is a div inside the last section, and it is the band that
   reaches the very bottom of the document */
.footer-bottom { position: relative; }
.footer-bottom::after {
  content: "";
  position: absolute;
  left: -6px; right: -6px; bottom: -6px;
  height: 6px;
  background-color: inherit;
  pointer-events: none;
}

/* --------------------------------------------------------------------------
   4. FIX — the menu button outline got thinner over dark sections
   The inverted state redeclared the border at 1px. It stays 2px; only the
   colour flips.
   -------------------------------------------------------------------------- */
.navbar_menu-button { border: 2px solid var(--ink); }
.navbar_wrapper.is-on-dark .navbar_brand-text,
.navbar_wrapper.is-on-dark .text-color-primary { color: #fff !important; }
.navbar_wrapper.is-on-dark .navbar_menu-button { border: 2px solid #fff !important; }
/* the language switch keeps its orange contour over dark bands — only the
   label and the dot invert, so the one orange accent in the header stays */
.navbar_wrapper.is-on-dark .navbar_lang-button { border-color: var(--brand) !important; color: #fff; }
.navbar_wrapper.is-on-dark .div-block {
  border-color: #fff !important; background-color: transparent !important;
}
.navbar_wrapper.is-on-dark .image-3 { filter: brightness(0) invert(1) !important; }

/* --------------------------------------------------------------------------
   5. FIX — the DE switch is a contour only, no fill
   -------------------------------------------------------------------------- */
.navbar_lang-button,
.navbar_lang-button:hover,
.navbar_lang-button:focus {
  background: transparent !important;
  background-color: transparent !important;
}
.navbar_lang-button {
  border: 2px solid var(--brand);
  border-radius: 8px;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 16px;
  color: var(--ink);
  transition: border-color .3s ease, color .3s ease;
}
.navbar_lang-button:hover { color: var(--brand); }
.navbar_lang-button .div-block { transition: border-color .3s ease, background-color .3s ease; }
.navbar_lang-button:hover .div-block { border-color: var(--brand); background: var(--brand); }

/* FIX — the switcher rendered already expanded inside the menu: the list was
   display:block with only opacity hiding it. Real closed/open state now. */
.langswitch-list {
  display: block;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(8px) scale(.98);
  transform-origin: top;
  transition: opacity .2s cubic-bezier(.4, 0, .2, 1),
              transform .2s cubic-bezier(.4, 0, .2, 1),
              visibility .2s;
  background-color: var(--ink);
  border: 1px solid rgba(255, 255, 255, .16);
  border-radius: 12px;
  margin-top: 6px;
  padding: 10px;
  min-width: 140px;
  z-index: 30;
}
.langswitch-list.is-open {
  opacity: 1; visibility: visible; pointer-events: auto; transform: none;
}
.langswitch-list .dropdown-link {
  color: #fff;
  border: 1px solid var(--brand);
  border-radius: 6px;
  margin-bottom: 6px;
  padding: 8px 12px;
  font-size: 15px;
  font-weight: 600;
  transition: all .25s ease;
}
.langswitch-list .dropdown-link:last-child { margin-bottom: 0; }
.langswitch-list .dropdown-link:hover { color: #fff; background-color: var(--brand); }
.langswitch--menu { display: none; }
@media (max-width: 767px) {
  .langswitch--nav { display: none; }
  .langswitch--menu { display: inline-block; margin-top: 20px; }
  .navbar_lang-button.block { color: #fff; }
  .navbar_lang-button.block:hover { color: var(--brand); }
}

/* --------------------------------------------------------------------------
   6. FIX — slider arrows
   One spec everywhere (they ranged 36/56/66/96px with mixed glyphs): a 36px
   orange hairline circle with a dark arrow. A button that cannot advance stays
   fully opaque — it just stops responding.
   -------------------------------------------------------------------------- */
[class*="swiper-button-"] {
  position: static !important;
  width: 36px !important;
  height: 36px !important;
  min-width: 36px;
  margin: 0 !important;
  padding: 0 !important;
  box-sizing: border-box !important;
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  border: 1.5px solid var(--brand) !important;
  border-radius: 999px !important;
  background: transparent;
  cursor: pointer;
  transition: background-color .25s ease, border-color .25s ease;
  overflow: visible !important;
  inset: auto;
  opacity: 1 !important;
}
[class*="swiper-button-"]::after { content: none !important; }
[class*="swiper-button-"] svg,
[class*="swiper-button-"] img { display: none !important; }
[class*="swiper-button-"]::before {
  content: "";
  width: 15px; height: 11px;
  background-color: var(--ink);
  -webkit-mask: var(--arrow) center / 15px 11px no-repeat;
          mask: var(--arrow) center / 15px 11px no-repeat;
  transition: background-color .25s ease;
}
[class*="swiper-button-prev"]::before { transform: rotate(180deg); }
[class*="swiper-button-"]:hover { background-color: var(--brand); }
[class*="swiper-button-"]:hover::before { background-color: #fff; }
[class*="swiper-button-"].swiper-button-disabled {
  cursor: default; pointer-events: none; opacity: 1 !important;
}

/* the indicator bar was pushed off centre by `margin-left:auto` on the next
   button — arrows and bar form one centred group under the cards */
.arrow-wrapper {
  display: flex !important;
  gap: clamp(24px, 4vw, 60px) !important;
  align-items: center !important;
  justify-content: center !important;
  width: 100%;
  margin: 42px 0 0 !important;
}
.arrow-wrapper > [class*="pagination"],
.arrow-wrapper > .swiper-pagination {
  position: static !important;
  flex: 0 1 200px;
  width: 200px;
  max-width: 200px;
  margin: 0 !important;
  align-self: center;
}
.arrow-box { width: 36px !important; height: 36px !important; margin-left: 0 !important; }
/* square ends, not pills */
.swiper-pagination {
  height: 4px; border-radius: 0; overflow: hidden;
  background: rgba(254, 80, 0, .25) !important;
}
.swiper-pagination-progressbar-fill { background: var(--brand) !important; border-radius: 0; }

/* Two of the three client panels carry a 5px bottom padding, the third none, so
   switching tabs shifted the section by 4px. All three the same. */
.client-sec .swiper, .client-sec [class*="myswiper"] { padding-bottom: 5px; }

/* The client slider has no arrow row, so Swiper's own
   `.swiper-pagination-progressbar` styling applied: absolute, full width, at
   the top of the panel — a stray orange rule above the "Clients" heading.
   It becomes the same 200px bar the other sliders have, centred below the
   logos. */
.client-sec .swiper-pagination,
.client-sec [class*="pagination"].swiper-pagination-progressbar {
  position: static !important;
  width: 200px; max-width: 200px;
  margin: 60px auto 0 !important;
  inset: auto !important;
}

/* --------------------------------------------------------------------------
   7. FIX — button hovers
   One spec for every pill row instead of the reference's per-page wiring, which
   left some rows with no hover at all and others only tinting their dot. On
   hover: orange plate, orange inner (the Learn-more row's inner carries a grey
   plate that used to stay grey and hide the fill), white label, filled white
   dot. Timing is the reference's — the plate snaps, the dot eases `all .5s`.

   Nothing in these rows is "current": they are links, not tabs, so no pill
   renders lit. The one exception is `.tab-btn2`, which really does switch the
   panel underneath it and keeps its active state.
   -------------------------------------------------------------------------- */
.tab-btn:hover,
.tab-btn2:hover,
.tab-btn3:hover,
.hero-sec2 .tab-btn:hover,
.profile-hero_tab:hover { background-color: var(--brand); }

.tab-btn:hover .tab-inner-btn,
.tab-btn2:hover .tab-inner-btn,
.tab-btn3:hover .tab-inner-btn,
.hero-sec2 .tab-btn:hover .tab-inner-btn {
  background: var(--brand);
  border-color: var(--brand);
}
.tab-btn:hover .tab-inner-btn, .tab-btn:hover .tab-inner-btn *,
.tab-btn2:hover .tab-inner-btn, .tab-btn2:hover .tab-inner-btn *,
.tab-btn3:hover .tab-inner-btn, .tab-btn3:hover .tab-inner-btn *,
.hero-sec2 .tab-btn:hover .tab-inner-btn,
.hero-sec2 .tab-btn:hover .tab-inner-btn *,
.profile-hero_tab:hover, .profile-hero_tab:hover * { color: #fff; }

.tab-btn:hover .circle-orange,
.tab-btn2:hover .circle-orange,
.tab-btn2.active .circle-orange,
.tab-btn3:hover .circle-orange,
.hero-sec2 .tab-btn:hover .circle-orange,
.profile-hero_tab:hover .circle-orange { background: #fff; border-color: #fff; }

/* case-study button */
.btn-case:hover { background: var(--brand); }
.btn-case:hover .circle-orange { background: #fff; border-color: #fff; }

.button.is-secondary:hover .circle-orange { border-color: #fff; background: #fff; }

/* --------------------------------------------------------------------------
   8. FIX — Track Record: the orange box grows out of its own baseline while
   the figure counts up, instead of fading in from below. Size, ratio, margins
   and type stay exactly as the reference has them.
   -------------------------------------------------------------------------- */
.box-2 { transform-origin: bottom center; }
/* One KPI = a label box and the orange plate under it, and they animate as one
   unit (same trigger, no offset). But only the plate *grows* — that is the
   signature the client asked for in round one, „scale up from the bottom while
   the numbers count". Having the contour label boxes scale too meant every box
   on the band inflated at once, which read as restless. The label box just
   settles in: a short fade with a small rise, on the same clock as its plate.
   So the pair moves together, and only one thing on the band is scaling. */
.box-2.js-grow { transform: scaleY(0); transform-origin: 50% 100%; opacity: 1; }
.box-2.js-grow > * { opacity: 0; }
.box-2.js-grow.is-grown {
  transform: scaleY(1);
  transition: transform .9s cubic-bezier(.16, .84, .44, 1);
}
.box-2.js-grow.is-grown > * { opacity: 1; transition: opacity .45s ease .25s; }

.box-wrapper .box-1.js-grow,
.track-sec .box-1.js-grow { opacity: 0; transform: translateY(20px); }
.box-wrapper .box-1.js-grow.is-grown,
.track-sec .box-1.js-grow.is-grown {
  opacity: 1;
  transform: none;
  transition: opacity .6s ease, transform .6s cubic-bezier(.16, .84, .44, 1);
}

/* The KPI frame, pinned to the Figma spec: a 1px inside stroke carrying
   #7A1E00 0% → #FE5000 50% → #FF8A4C 100% left to right. The generated layer
   already emits exactly this; declaring it here keeps it from drifting when
   that layer is regenerated. */
.box-wrapper .box-1::after,
.track-sec .box-1::after {
  background: linear-gradient(90deg, #7A1E00 0%, #FE5000 50%, #FF8A4C 100%);
}

/* …and it is a real border now, not a masked pseudo-element behind the box.
   Two things were wrong. `site.css` put a 560×320 PNG of a thin orange rectangle
   behind every `.box-1` and stretched it to whatever size the cell happened to
   be — blurred lines, a grey bottom edge. And the gradient stroke that was
   supposed to replace it lives on `::after` at `z-index: -1`, i.e. *behind* the
   box; with the bitmap gone it stopped showing on part of the cells altogether.
   The frame is two background layers on the box itself: transparent over the
   padding box, the gradient over the border box. A border cannot be hidden by
   paint order, and it is the same gradient the set-up strip carries. */
.box-1 {
  border: 1px solid transparent;
  background-image:
    linear-gradient(rgba(255, 255, 255, 0), rgba(255, 255, 255, 0)),
    linear-gradient(90deg, var(--brand-dark), var(--brand) 50%, var(--brand-light)) !important;
  background-origin: padding-box, border-box !important;
  background-clip: padding-box, border-box !important;
  background-repeat: no-repeat, no-repeat !important;
  background-size: 100% 100%, 100% 100% !important;
}
.box-1::after { content: none !important; }
/* the client logo plates never had a frame — the generated layer strips it there
   and that has to keep working */
#client .tab-body .box-1,
#client .tab-content2 .box-1 {
  border: none !important;
  background-image: none !important;
}

/* The framed cell and the solid orange plate have to line up exactly. They did
   it by accident: the frame is drawn 1px outside the box and the plate pulled
   itself 1px wider with negative margins — which cancelled out on desktop and
   drifted apart below 992px, where the reference drops the margins. Both now
   sit on the grid cell itself: no negative margins, frame drawn on the edge. */
.box-wrapper .box-1::after,
.track-sec .box-1::after { inset: 0 !important; }
.box-wrapper .box-2,
.track-sec .box-2 { margin-left: 0 !important; margin-right: 0 !important; }

/* …and the two columns have to end on the same line. The left column is a label
   cell plus the orange plate; the right one is a 2×2 grid that comes out taller,
   so the flex row stretched the left column and left dark space under the plate
   (30–72px, depending on the width). The plate absorbs the remainder now. Its
   4:2 ratio stays its minimum: where there is nothing to absorb — stacked below
   992px, and the homepage, which uses a different wrapper — nothing changes. */
.box-wrapper > .div-block-21 { display: flex; flex-direction: column; }
.box-wrapper > .div-block-21 > .box-1 { flex: 0 0 auto; }
.box-wrapper > .div-block-21 > .box-2 {
  flex: 1 1 auto;
  /* a definite width, or `aspect-ratio` derives one from the stretched height
     and the plate grows wider than its column into the grid beside it */
  width: 100%;
  max-width: 100%;
}

/* the orange plate is a 4:2 band, and everything inside a KPI cell sits on the
   bottom edge. The side padding is the reference's and differs per band, so the
   bottom clearance is matched to it band by band rather than pinned to one
   value — the only cell that needed correcting is the caption, which carried
   32px top and bottom against 40px sides. */
.box-wrapper .box-2,
.track-sec .box-2 { aspect-ratio: 4 / 2 !important; }
/* "bottom" is a different axis depending on the box: the orange plate and the
   column cells stack downwards, the caption cell is a row — using
   justify-content on that one pushed the caption to the right edge instead */
.box-wrapper .box-2,
.track-sec .box-2,
/* label on the top edge, figure on the bottom one, both on the same inset —
   they used to sit together at the foot of the cell */
.box-wrapper .box-1 > .box-inner.flex-col,
.track-sec .box-1 > .box-inner.flex-col,
.complex-sec .box-1 > .box-inner.flex-col,
.project-box .box-1 > .box-inner.flex-col { justify-content: space-between; }
.box-wrapper .box-1 > .box-inner:not(.flex-col),
.track-sec .box-1 > .box-inner:not(.flex-col) { align-items: flex-end; }
/* the cell's inset is the same on every side, so the label sits as far from the
   top edge as the figure does from the bottom one. It used to carry a smaller,
   band-matched bottom padding, which made sense only while both sat at the foot
   of the cell. */
.box-wrapper .box-1 > .box-inner,
.track-sec .box-1 > .box-inner,
.complex-sec .box-1 > .box-inner,
.project-box .box-1 > .box-inner { padding: 40px; }
@media (min-width: 992px) and (max-width: 1199px) {
  .box-wrapper .box-1 > .box-inner,
  .track-sec .box-1 > .box-inner,
  .complex-sec .box-1 > .box-inner,
  .project-box .box-1 > .box-inner { padding: 25px; }
}
@media (max-width: 991px) {
  .box-wrapper .box-1 > .box-inner,
  .track-sec .box-1 > .box-inner,
  .complex-sec .box-1 > .box-inner,
  .project-box .box-1 > .box-inner { padding: 20px; }
  .box-wrapper .box-2,
  .track-sec .box-2 { padding-bottom: 20px; }
}

/* --------------------------------------------------------------------------
   9. FIX — value-creation lever cards: the text touched the card edge
   Desktop insets the content 40px; below 992px the reference dropped the left
   padding to 0, so the label and the heading sat flush against the plate.
   -------------------------------------------------------------------------- */
.scope-sec .focus_card-content { box-sizing: border-box; }
/* the inset has to read the same on all four sides, so the last block carries no
   extra bottom padding of its own — the content box's own padding is the spacing */
.scope-sec .focus_card-content > *:last-child { padding-bottom: 0; margin-bottom: 0; }
.focus_card-heading, .focus_card-content p { overflow-wrap: break-word; }
@media (max-width: 991px) {
  .scope-sec .focus_card-content,
  .impact-card .focus_card-content { padding: 24px !important; }
}

/* Impact on /approach: the same card language as the value levers — black
   plate, `/` label, the bc_lines artwork — as a static four-up row at 2:1.
   One grid definition, so this row and the value-lever slider line up: four
   columns, 60px gutter, the same gutter every other grid on the site uses. */
.impact-grid {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 60px;
  margin-top: 60px;
}
.impact-grid .impact-card.focus_card.aspect-ratio2 { aspect-ratio: 2 / 1 !important; }
/* the line artwork spans the whole plate, not just the bottom 80% of it — the
   size and offset come from the artwork block further down */
.impact-grid .impact-card::after { background-size: 100% 100% !important; }

/* Card artwork: a four-step pattern that repeats. Andre signed off on the first
   four cards on /for-lenders — 0°, 75°, 150°, 45° — so those four angles are the
   whole cycle now and card five starts over at 0°. Within the group of four no
   two neighbours share a drawing (a fan of straight lines is symmetric under a
   half turn, so the four are genuinely distinct), and the seam between one group
   and the next — 45° back to 0° — is a 45° step, still a clear change. The
   generated layer carries the reference's own sequence, hence the !important. */
.scope-sec .swiper-slide:nth-child(4n+1) .focus_card::after,
.impact-grid .impact-card:nth-child(4n+1)::after { transform: rotate(0deg) !important; }

.scope-sec .swiper-slide:nth-child(4n+2) .focus_card::after,
.impact-grid .impact-card:nth-child(4n+2)::after { transform: rotate(75deg) !important; }

.scope-sec .swiper-slide:nth-child(4n+3) .focus_card::after,
.impact-grid .impact-card:nth-child(4n+3)::after { transform: rotate(150deg) !important; }

.scope-sec .swiper-slide:nth-child(4n) .focus_card::after,
.impact-grid .impact-card:nth-child(4n)::after { transform: rotate(45deg) !important; }

/* turning a plate-sized drawing leaves the corners bare, and at 60–135° it is
   the vertical extent that runs out first — so the layer is oversized in both
   directions and centred on the plate */
.scope-sec .focus_card::after,
.impact-grid .impact-card::after {
  width: 190% !important;
  height: 190% !important;
  left: -45% !important;
  top: -45% !important;
  right: auto !important;
  bottom: auto !important;
}
/* …and the drawing keeps its own proportions. The layer copied the card's ratio
   and `background-size: 100% 100%` stretched the artwork into it: on the 2:1
   Impact cards that is a 560×335 drawing at 2:1 — barely a stretch, which is why
   that row reads well. On the 4:3 value-lever cards it was squeezed from 1.67 to
   1.33, and a fan of near-parallel lines splayed until only two or three crossed
   the card. The layer takes the artwork's ratio there, so both rows carry the
   same drawing at the same density.
   The vertical offset is the arithmetic for a 4:3 card, which `custom.css` locks
   these cards to: layer height = 190% / 1.672 = 113.6% of the card *width*, and
   centring it on a card 75% as tall as it is wide puts its top at −25.7%. */
.scope-sec .swiper-slide .focus_card::after {
  height: auto !important;
  aspect-ratio: 560 / 335 !important;
  top: -25.7% !important;
}

/* …and a wash from the top of the plate so the label stays legible whatever the
   artwork does underneath it. `::before` paints before `::after`, so the artwork
   drops to z-index 0 to sit under the wash — the label is on 2 and stays on top
   of both. */
.scope-sec .focus_card::after,
.impact-grid .impact-card::after { z-index: 0 !important; }
.scope-sec .focus_card::before,
.impact-grid .impact-card::before {
  content: "";
  position: absolute;
  inset: 0 0 auto;
  /* taller and heavier than before: the label and the heading were competing
     with the line artwork. Opaque behind the text, then a long tail out so the
     drawing is still visible in the lower half of the plate. */
  /* shorter and lighter than before — on flat cards the old 78% plate hid the
     line artwork almost completely */
  height: 64%;
  background-image: linear-gradient(180deg,
    #212121 0%,
    #212121 26%,
    rgba(33, 33, 33, .72) 52%,
    rgba(33, 33, 33, .30) 78%,
    rgba(33, 33, 33, 0) 100%);
  pointer-events: none;
  z-index: 1;
}
@media (max-width: 1199px) {
  .impact-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
}
@media (max-width: 767px) {
  .impact-grid { grid-template-columns: minmax(0, 1fr); gap: 20px; margin-top: 40px; }
}

/* The `/` label sat on the heading's line box — its ink even overlapped the
   cap line by 2px. One gap now, on every label that carries the mark: section
   openers, focus cards, value levers, Impact cards. In `em`, so it holds at
   every type size. The gap is `em` of the slash itself, not px: at a flat 12px
   the ratio drifted from .31em on the desktop bands to .5em on the phone, where
   the slash is 24px — that is what read as different spacing. .25em everywhere
   now, about what a line break gives. */
.focus_card-label,
.focus_label,
.about_label { margin-bottom: 0; }
.focus_card-label > span,
.focus_label > span,
.about_label > span { display: block; margin-bottom: 0; line-height: 1; }

/* the contact details hovered to #ff8a4c; brand orange */
.text-size-large.text-color-primary.mb-0:hover,
a.text-size-large.text-color-primary:hover { color: var(--brand); }

/* --------------------------------------------------------------------------
   10. FIX — the team grid overlay comes in on hover, not on scroll
   Values and timing are the reference's own: height 0 → 280px over .4s ease,
   160px below 768px. Applied to every card grid that uses the overlay, since
   the reference only wired it on the team page.
   -------------------------------------------------------------------------- */
.about_photos-overlay,
.executives_photos-overlay {
  height: 0;
  transition: height .4s ease;
}

/* portrait grids: on hover */
.team-card:hover .executives_photos-overlay,
.team-card-header:hover .executives_photos-overlay,
.insight-card:hover .executives_photos-overlay { height: 280px; }

/* the wide photo blocks keep the reference's scroll reveal */
.about_photos > .about_photos-overlay.animate,
.about_photos > .executives_photos-overlay.animate,
.executives_photos > .about_photos-overlay.animate,
.executives_photos > .executives_photos-overlay.animate { height: 280px; }

@media screen and (max-width: 768px) {
  .team-card:hover .executives_photos-overlay,
  .team-card-header:hover .executives_photos-overlay,
  .insight-card:hover .executives_photos-overlay { height: 160px; }
  .about_photos > .about_photos-overlay.animate,
  .about_photos > .executives_photos-overlay.animate,
  .executives_photos > .about_photos-overlay.animate,
  .executives_photos > .executives_photos-overlay.animate { height: 60px; }
}

/* --------------------------------------------------------------------------
   11. FIX — profile hero, rebuilt to the reference design
   White at the top fading into brand orange, cut-out portrait bottom-right,
   name / role / section pills bottom-left. The portrait sits ~38% closer than
   the source crop.
   -------------------------------------------------------------------------- */
.profile-hero { position: relative; background: var(--canvas); overflow: hidden; }
.profile-hero_inner {
  position: relative;
  display: flex;
  align-items: flex-end;
  background-image: linear-gradient(180deg,
      #fafafa 0%, #fafafa 34%, #fde3d6 58%, #fb8f5f 82%, var(--brand) 100%);
}
.profile-hero_media {
  position: absolute;
  right: 0; bottom: 0;
  width: 56%;
  max-width: 1000px;
  height: 100%;
  display: flex;
  align-items: flex-end;
  justify-content: flex-end;
  overflow: visible;
  pointer-events: none;
}
.profile-hero_media img {
  display: block;
  width: auto; max-width: none;
  height: 100%; max-height: none;
  object-fit: contain;
  object-position: 100% 100%;
  /* the crop tightens ~38% on the face. The origin sits at the top, not the
     bottom: scaling about the bottom pushed the head off the top edge. 82%
     horizontally keeps the far shoulder inside the frame. */
  transform: scale(1.38);
  transform-origin: 82% 0%;
}
/* The type and the rhythm are the subpage hero's, not a second scale: name =
   `.text-size-xlarge` (40/48, 20px below it), role = `.heading-style-h5`
   (32/36), pill row 40px under that, and the block sits the same distance off
   the bottom edge as `.hero-sec2.py-100` puts its column. */
.profile-hero_content { position: relative; z-index: 2; width: 100%; padding-bottom: 106px; }
.profile-hero_name {
  margin: 0 0 20px;
  color: var(--ink);
  font-size: 40px;
  font-weight: 700;
  line-height: 48px;
}
.profile-hero_role {
  margin: 0;
  color: var(--ink);
  font-size: 32px;
  font-weight: 600;
  line-height: 36px;
}
.profile-hero_tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  width: fit-content;
  margin-top: 40px;
  padding: 10px;
  border-radius: 16px;
  background: rgba(255, 255, 255, .28);
  -webkit-backdrop-filter: blur(20px);
          backdrop-filter: blur(20px);
}
.profile-hero_tab {
  display: inline-flex;
  align-items: center;
  gap: 20px;
  padding: 13px 18px;
  border: 1px solid var(--ink);
  border-radius: 8px;
  color: #fff;
  font-size: 18px;
  font-weight: 600;
  line-height: 20px;
  text-decoration: none;
  background: transparent;
  transition: background-color .35s ease, border-color .35s ease, color .35s ease;
}
.profile-hero_tab .circle-orange {
  width: 18px; height: 18px; flex: none;
  border: 1px solid var(--brand);
  border-radius: 999px;
  transition: background-color .5s, border-color .5s;
}
/* exactly the subpage hero pills: white label over an #212121 contour. The
   hover lives in the shared block in §7. */
.profile-hero_tab, .profile-hero_tab * { color: #fff; }
.profile-hero_tab:hover { border-color: var(--brand); }

@media (max-width: 991px) {
  .profile-hero_media { width: 66%; }
  .profile-hero_content { padding-bottom: 60px; }
  .profile-hero_name { font-size: 26px; line-height: 30px; margin-bottom: 12px; }
  .profile-hero_role { font-size: 24px; line-height: 28px; }
}
@media (max-width: 767px) {
  .profile-hero_tabs { display: none; }
  /* On the phone the frame is far taller than it is wide, so sizing the cut-out
     by height throws the face out of frame. It is sized by width here and sits
     on the bottom edge, whole. */
  .profile-hero_media { width: 92%; }
  /* 9 % nach rechts (Kundenwunsch 7.8.). Eingemessen über den Alphakanal der
     dreizehn Freistellungen: rechts vom Körper steht unterschiedlich viel
     leerer Rand — 18,0 % der Dateibreite bei Rami, 32,4 % bei Johann. Der
     Kasten trägt `overflow: hidden` und endet an der Bildschirmkante, weiter
     als der engste Rand geht also niemand ohne Anschnitt. 9 % ist der halbe
     Weg: Rami behält 9 % Luft, Johann 23 %, und eine künftig engere
     Freistellung hat noch Reserve. Links entsteht nichts Sichtbares — dort hat
     jede Freistellung mindestens 8,5 % eigenen Rand. */
  .profile-hero_media img {
    width: 100%; height: auto; max-height: 100%;
    transform: translateX(9%);
  }
  .profile-hero_content { padding-bottom: 40px; }
  .profile-hero_name { font-size: 24px; line-height: 28px; }
  .profile-hero_role { font-size: 20px; line-height: 24px; }
  .profile-hero_name, .profile-hero_role { text-shadow: 0 1px 14px rgba(250, 250, 250, .85); }
}

/* --------------------------------------------------------------------------
   12. FIX — fullscreen menu
   The wordmark and the close button used to move and resize with every
   breakpoint (two nested `zoom` factors). They now sit at exactly the position
   and size of the sticky navbar: brand centred, close button where the burger is.
   -------------------------------------------------------------------------- */
.menu-item {
  z-index: 9999;
  background-color: var(--ink);
  width: 100%;
  /* the panel is pinned to all four viewport edges instead of carrying its
     own height: every vh flavour (svh gap after scrolling, dvh mid-animation
     jump, lvh top/bottom drift) left page content peeking past an edge on
     iOS — the fixed-position containing block itself always covers. */
  top: 0; right: 0; bottom: 0; left: 0;
  height: auto;
  padding: 0;
  display: flex;
  flex-direction: column;
  position: fixed;
  inset: 0;
  overflow: hidden auto;
  visibility: hidden;
  /* opacity is declared here as well as on `.active`: the reference zeroes it
     in three separate `max-width` rules and only restores it on desktop, so
     below 991px the panel used to slide in fully transparent — it opened, you
     just could not see it */
  opacity: 0;
  transform: translateY(-100%);
  /* NACHTRAG (6. August, Kundenfilm): die Deckkraft darf nicht MITLAUFEN.
     Vorher lief sie 0,35s von 0 auf 1, während der Vorhang schon herunterfuhr —
     gemessen bei 390px: nach 50ms erst 0,58, nach 150ms 0,91, dabei überdeckte
     das Blatt bereits den oberen Rand. In diesem Fenster scheint der Inhalt
     durch das Blatt und durch dessen eigene Leiste („BICKEL & COMPANY"), im
     Film zwischen 2,425s und 2,50s als oranger Schimmer zu sehen.
     Jetzt springt sie beim ÖFFNEN sofort auf 1 (`.active`, opacity 0s) und
     fällt beim SCHLIESSEN erst NACH dem Vorhang (`opacity 0s .6s`) — die
     Bewegung bleibt in beide Richtungen dieselbe, das Blatt ist nur nie mehr
     halbdurchsichtig. Auf 0 kann sie nicht verzichten: die Vorlage nullt sie in
     drei `max-width`-Regeln und stellt sie nur auf dem Desktop wieder her. */
  transition: transform .6s cubic-bezier(.76, 0, .24, 1), opacity 0s linear .6s, visibility .6s;
}
.menu-item.active {
  transform: translateY(0);
  visibility: visible;
  opacity: 1;
  transition: transform .6s cubic-bezier(.76, 0, .24, 1), opacity 0s, visibility 0s;
}
/* focus lands on the panel so the keyboard follows the dialog; it must not
   draw a ring, or the panel reads as a boxed element */
.menu-item:focus, .menu-item:focus-visible { outline: none; }

.menu-item_bar {
  flex: none;
  position: relative;
  height: 100px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  padding: 0 60px;
  zoom: 1 !important;
}
.menu-item_brand {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  color: #fff;
  font-size: 40px;
  font-weight: 700;
  line-height: 1.2;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
}
.cross-icon {
  flex: none;
  width: 60px; height: 60px;
  display: flex; align-items: center; justify-content: center;
  border: 2px solid #fff;
  border-radius: 999px;
  background: transparent;
  color: #fff;
  cursor: pointer;
  position: static;
  zoom: 1 !important;
  transition: background-color .25s ease, border-color .25s ease;
}
.cross-icon:hover { background: var(--brand); border-color: var(--brand); }
.cross-icon .code-embed-4 { width: 20px; height: 20px; display: block; color: inherit; }
.cross-icon svg { width: 100%; height: 100%; display: block; }

.menu-item_body {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 0 60px 60px;
}
.list, .list.start {
  zoom: 1 !important;
  gap: clamp(6px, 1.1vh, 18px);
  display: flex;
  flex-flow: column;
  align-items: flex-start;
  padding: 0;
  margin: 24px 0 0;
}
.navbar-link {
  display: block;
  color: #fff;
  font-size: clamp(26px, 3.4vw, 48px);
  line-height: 1.3;
  font-weight: 600;
  text-decoration: none;
}
/* the label stays white; only the leading slash turns orange on hover */
.navbar-link span { color: #fff; transition: color .3s ease; }
.menu-item .list-item:hover .navbar-link { transform: none !important; color: #fff; }
.menu-item .list-item:hover .navbar-link span { color: var(--brand); }
.navbar-link.active { color: #fff; }
.navbar-link.active span { color: var(--brand); }
.menu-item .flex-col.list-item,
.menu-item .flex-col.list-item.gap-0,
.menu-item .flex-col.list-item.gap-0.start { max-height: none; overflow: visible; }
.menu-item .list-item { margin: 0 !important; padding: 0 !important; }

/* stagger: each entry rises as the panel opens */
.menu-item .list-item, .menu-item .langswitch--menu {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity .5s ease, transform .6s cubic-bezier(.16, .84, .44, 1);
}
.menu-item.active .list-item, .menu-item.active .langswitch--menu {
  opacity: 1; transform: translateY(0);
}
.menu-item.active .langswitch--menu { transition-delay: .18s; }
.menu-item.active .list-item:nth-child(1) { transition-delay: .24s; }
.menu-item.active .list-item:nth-child(2) { transition-delay: .30s; }
.menu-item.active .list-item:nth-child(3) { transition-delay: .36s; }
.menu-item.active .list-item:nth-child(4) { transition-delay: .42s; }
.menu-item.active .list-item:nth-child(5) { transition-delay: .48s; }
.menu-item.active .list-item:nth-child(6) { transition-delay: .54s; }
.menu-item.active .list-item:nth-child(7) { transition-delay: .60s; }
/* Der achte Eintrag ist „Contact" (Deck 04.08., S3). Die Liste war fest bis
   sieben — der neue Eintrag bekam dadurch keine Verzögerung, stand also schon
   da, bevor die anderen loslegten, und wirkte, als würde er nicht mitlaufen.
   Bis zwölf vorgehalten, damit derselbe Fehler beim nächsten Eintrag nicht
   wieder passiert. */
.menu-item.active .list-item:nth-child(8)  { transition-delay: .66s; }
.menu-item.active .list-item:nth-child(9)  { transition-delay: .72s; }
.menu-item.active .list-item:nth-child(10) { transition-delay: .78s; }
.menu-item.active .list-item:nth-child(11) { transition-delay: .84s; }
.menu-item.active .list-item:nth-child(12) { transition-delay: .90s; }

/* height, brand size, close-button size and its right offset are mirrored from
   the sticky header at runtime (see main.js §8) so they can never drift apart */
@media (max-width: 991px) { .menu-item_body { padding: 0 20px 40px; } }

/* --------------------------------------------------------------------------
   13. FIX — focus cards
   Portrait 3/4 on desktop, label pinned bottom, description on hover. On touch
   the card opens by itself: tapping navigated away before the text appeared.
   -------------------------------------------------------------------------- */
@media (max-width: 1600px) {
  /* the fixed 473px floor fought the 4:3 ratio the cards carry now */
  .focus_card.aspect-ratio { height: unset; min-height: 0; }
  .focus_card-image { min-height: 0; }
}
/* 4:3 wherever it fits. Below 992px the card shows label, heading *and*
   description at once — that needs 460px in a 350px-wide card, so the ratio
   would cut 160–290px of text off inside `overflow: hidden`. There the height
   comes from the content. */
@media (min-width: 992px) {
  .section_focus .focus_card.aspect-ratio { aspect-ratio: 1 / 1 !important; }
}
@media (max-width: 991px) {   /* NACHTRAG: das mobile Kartenlayout endet bei 991 — ab 992 laufen drei Karten (§107) */
  /* Every child of the card is absolutely positioned, so dropping the ratio
     alone collapsed it to nothing. The content block goes back into the flow and
     becomes what gives the card its height; picture, wash and arrow stay
     absolute over it. */
  .section_focus .focus_card.aspect-ratio,
  .section_focus .focus_card {
    aspect-ratio: auto !important;
    height: auto !important;
    min-height: 0 !important;
  }
  .section_focus .focus_card > .focus_card-content,
  .section_focus .focus_card > .focus_card-content.translate-45 {
    position: relative !important;
    inset: auto !important;
    transform: none !important;
    max-height: none !important;
    /* one inset on all four sides, so the arrow can share it */
    padding: 24px !important;
    /* heading directly above the copy, both gathered at the bottom of the
       card — not spread apart by space-between */
    justify-content: flex-end !important;
  }
  .section_focus .focus_card > .focus_card-content > *:last-child {
    max-height: none !important;
    opacity: 1 !important;
    overflow: visible !important;
    padding-top: 20px !important;
  }
  .section_focus .focus_card > .focus_card-image,
  .section_focus .focus_card > picture.focus_card-image {
    position: absolute !important;
    inset: 0 !important;
    width: 100% !important;
    height: 100% !important;
    object-fit: cover;
  }
  .section_focus .focus_card > .focus_card-overlay { position: absolute !important; }
  /* …and the disc keeps the same distance from the bottom edge as the text */
  .section_focus .link-block-2 {
    position: absolute !important;
    bottom: 24px !important;
    right: 24px !important;
    top: auto !important;
    left: auto !important;
  }
}
@media (min-width: 992px) {
  .section_focus .focus_card.aspect-ratio { aspect-ratio: 1 / 1 !important; min-height: 0 !important; }
  .section_focus .link-block-2 { bottom: 40px !important; right: 40px !important; }
}
@media (min-width: 768px) {
  .section_focus .focus_card-content.translate-45 {
    transform: none !important; justify-content: flex-end !important;
  }
  .section_focus .focus_card-content.translate-45 > *:last-child {
    max-height: 0 !important; opacity: 0 !important; overflow: hidden !important;
    margin: 0 !important; padding-top: 0 !important; box-sizing: border-box !important;
    transition: max-height .35s ease, opacity .35s ease, padding-top .35s ease !important;
  }
  .section_focus .focus_card:hover .focus_card-content.translate-45 > *:last-child,
  .section_focus .focus_card.is-open .focus_card-content.translate-45 > *:last-child {
    max-height: 420px !important; opacity: 1 !important; padding-top: 20px !important;
  }
  .section_focus .swiper-button-next,
  .section_focus .swiper-button-prev,
  .section_focus .pagination,
  .section_focus .swiper-pagination { display: none !important; }
}
@media (min-width: 768px) and (hover: none) {
  .section_focus .focus_card-content.translate-45 > *:last-child {
    max-height: 420px !important; opacity: 1 !important; padding-top: 20px !important;
  }
}
/* The arrow disc is as tall as the description beside it. main.js §19 measures
   the paragraph and hands the height over in `--card-arrow`; 69px is what the
   reference used and stays the fallback if the script never runs. */
.focus_card { --card-arrow: 69px; }
/* on the desktop the slider controls are hidden but their wrapper still added
   its 42px top margin, and the section's own 60px bottom padding stacked onto
   the team band's 100px top padding — the gap to the Team section now matches
   the 100px rhythm of every other section boundary */
@media (min-width: 992px) {   /* die mobilen Pfeile fallen mit dem mobilen Layout (§107) */
  .section_focus .arrow-wrapper { display: none !important; }
}
@media (min-width: 1200px) {
  html.page-index .section_focus { padding-bottom: 0; }
}
/* the sublines under the slash headlines run one leading — the export gave
   the set-up box's slash list 48px against its sibling copy's 36px */
.heading-style-h5.fs-24.leading-26 { line-height: 36px !important; }

/* the profile Learn-more pill always shows its own label: the export hides
   `.text-block.block` from 992px up, and an obsolete rename hack in custom.css
   zeroed the type and stamped "Interview" over it */
.profile-learnmore .text-block,
.profile-learnmore .text-block.block {
  display: block !important;
  font-size: 18px !important;
  line-height: 20px !important;
}
.profile-learnmore .tab-inner-btn > div:first-child::after { content: none !important; }

/* the role tiles under the experience logos: the slash sits centred above the
   role text, the tile fills from the top — so every slash in a row reads from
   the same line whatever the copy below it does */
:where(html[class*="page-teams-"]) .client-sec .box-1 > .box-inner.h-auto.center {
  flex-direction: column !important;
  justify-content: flex-start !important;
  align-items: center !important;
  gap: 6px !important;
  padding: 20px !important;
}
:where(html[class*="page-teams-"]) .client-sec .box-inner.h-auto.center > .div-block-31 { width: 100%; }
:where(html[class*="page-teams-"]) .client-sec .box-inner.h-auto.center > .text-block-10 { text-align: center; }
:where(html[class*="page-teams-"]) .client-sec .box-inner.h-auto.center .text-block-10.left {
  text-align: center !important;
}

/* profile pages: the Selected-Experiences and Educational-Background tiles
   carry no contour — the frame was a gradient painted behind the tile */
:where(html[class*="page-teams-"]) .client-sec .box-1,
:where(html[class*="page-teams-"]) .education-bg .box-1 {
  background-image: none !important;
}

/* Selected-Experiences rows: the controls main.js injects under the row show
   where the row actually slides — phone and tablet; the desktop 6-up marquee
   stays clean */
@media (min-width: 1200px) { .arrow-wrapper.exp-arrows { display: none !important; } }
.arrow-wrapper.exp-arrows { margin-top: 28px !important; }
/* the progress bar sits on the arrows' centre line — it inherited a 60px top
   margin from the export's pagination */
.arrow-wrapper.exp-arrows .exp-progress { margin: 0 23px !important; align-self: center !important; }
/* every tile in the row is as tall as the tallest: the slide stretches, the
   role cell soaks up the difference */
:where(html[class*="page-teams-"]) .client-sec .swiper-slide > .div-block-25 {
  height: 100%;
  display: flex;
  flex-direction: column;
}
:where(html[class*="page-teams-"]) .client-sec .swiper-slide > .div-block-25 > .box-1.mt-1 {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
}
:where(html[class*="page-teams-"]) .client-sec .swiper-slide > .div-block-25 > .box-1.mt-1 > .box-inner {
  flex: 1 1 auto;
  height: auto !important;
  /* the tile grows with its copy — hidden overflow guillotined the long role
     names on Safari, whose line breaks differ from Chrome's */
  overflow: visible !important;
}
/* the slides really stretch to the tallest of the row (swiper's own
   height:100% pinned them to a circular auto height on Safari) */
:where(html[class*="page-teams-"]) .client-sec .swiper-slide {
  height: auto !important;
  align-self: stretch;
}
/* the ≥768 grid mirrors the slider: every cell a column, the role tile soaks
   up the row difference, nothing clipped, bottoms flush */
.client-sec .client-box-wrapper > * {
  display: flex;
  flex-direction: column;
}
.client-sec .client-box-wrapper > * > .box-1.mt-1 {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
}
.client-sec .client-box-wrapper > * > .box-1.mt-1 > .box-inner {
  flex: 1 1 auto;
  height: auto !important;
  overflow: visible !important;
}
.section_focus .image-39,
.section_focus .image-40,
.section_focus .image-41 {
  display: inline-block !important;
  width: var(--card-arrow) !important;
  height: var(--card-arrow) !important;
}
@media (min-width: 480px) {
  .section_focus .link-block-2 { width: auto !important; }
}
@media (max-width: 767px) {
  .section_focus .focus_card-content.translate-45 {
    transition: transform .55s cubic-bezier(.16, .84, .44, 1), background .3s ease;
  }

}

/* --------------------------------------------------------------------------
   14. FIX — headline claims on one line
   -------------------------------------------------------------------------- */
@media (min-width: 768px) {
  .footer-cta_headline {
    font-size: min(96px, 4.3vw) !important;
    line-height: 1.05 !important;
    white-space: nowrap !important;
    max-width: 100% !important;
  }
  .heading-style-h2.text-color-primary.hero_heading,
  .hero_heading {
    max-width: none !important;
    white-space: nowrap;
    font-size: min(72px, 8.1vw) !important;
    line-height: 1.1 !important;
  }
}
@media (max-width: 767px) { .hero_heading { max-width: 18ch; } }
.section_hero .container { z-index: 20; }
.hero_subtitle-wrapper { position: relative; z-index: 20; }

/* --------------------------------------------------------------------------
   15. FIX — digit roll-up height derived from the type, not hard-coded
   -------------------------------------------------------------------------- */
.digit { position: relative; display: inline-block; height: 1.05em; overflow: hidden; }
.digit-inner { display: flex; flex-direction: column; }
.digit-inner div { height: 1.05em; display: flex; align-items: center; justify-content: center; }
.track-sec .digit, .track-sec .digit-inner div { height: 1.05em; }

/* --------------------------------------------------------------------------
   16. RESPONSIVE — the iPad band
   The reference scale only had a 991px step, so headings jumped 72 → 48px with
   nothing in between and overlapped. Fluid ramps close 768–1364px. Text sizes
   only; no boxes, no spacing, no borders.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 1364px) {
  .heading-style-h2 { font-size: clamp(34px, 5vw, 72px); line-height: 1.08; }
  .heading-style-h3 { font-size: clamp(28px, 4.2vw, 64px); line-height: 1.1; }
  .heading-style-h5,
  .heading-style-h5.text-color-primary,
  .heading-style-h5.text-color-white { font-size: clamp(18px, 2.1vw, 32px); line-height: 1.3; }
  .text-size-xlarge { font-size: clamp(22px, 2.5vw, 40px); line-height: 1.2; }
  .text-size-large { font-size: clamp(16px, 1.7vw, 24px); line-height: 1.35; }
  .text-size-large.text-color-primary.hero_subtitle.fs-normal { font-size: clamp(18px, 2.2vw, 32px); }
  .heading-7 { font-size: clamp(18px, 1.9vw, 24px); line-height: 1.3; }
  .paragraph-2, .paragraph-2 p { font-size: clamp(15px, 1.5vw, 24px); line-height: 1.5; }
  .text-block-2, .text-block-2.fs-60 { font-size: clamp(38px, 4.4vw, 72px); line-height: 1.05; }
  .footer-cta_description { font-size: clamp(16px, 1.7vw, 24px); }

  /* pill labels: 18px overflowed the pill once the row wrapped */
  .tab-inner-btn, .tab-inner-btn.bg-gray, .tab-inner-btn.bg-black,
  .tab-inner-btn.bg-gray-copy, .tab-inner-btn.active {
    font-size: clamp(14px, 1.5vw, 18px);
    line-height: 1.2;
  }
}
.tab-inner-btn strong, .tab-inner-btn .text-block strong {
  font-weight: 600; font-size: inherit;
}

/* --------------------------------------------------------------------------
   17. RESPONSIVE — tablet and phone
   -------------------------------------------------------------------------- */
@media (max-width: 991px) {
  .executives_photos, .executives_photos.mt-60,
  .about_photos, .img-holder { padding-left: 0 !important; padding-right: 0 !important; }
  .image-2, .image-26 { width: 100%; }

  .track-sec .box-2 { aspect-ratio: 4 / 3 !important; }
  .box-2 { height: auto !important; }
  .box-inner.h-110 { height: auto !important; min-height: 72px; }

  .tab-box, .tab-box.wrap-no {
    display: flex !important;
    flex-flow: row wrap !important;
    justify-content: flex-start;
    gap: 8px !important;
    width: 100%;
  }
  .tab-box > a { flex: 1 1 auto; min-width: 0; }
  .tab-btn2.rotate._w-full, .tab-btn3.rotate._w-full, .tab-btn.rotate._w-full {
    width: auto !important; max-width: none !important;
  }
  .tab-inner-btn { justify-content: center; }
  .tab-btn-wrapper, .tab-btn-wrapper.mx-0 { width: 100%; }
}
@media (max-width: 479px) {
  .tab-box > a { flex: 1 1 calc(50% - 4px); }
  .arrow-wrapper { gap: 16px !important; }
}

/* --------------------------------------------------------------------------
   18. Decorative Lottie layers must not inflate the layout with their aspect
   -------------------------------------------------------------------------- */
[data-animation-type="lottie"] > svg {
  width: 100% !important; height: 100% !important; display: block;
}
.animation-wrapper {
  width: 100%; height: 100vh; overflow: hidden;
  position: absolute; top: 0; left: 0;
  pointer-events: none;
}
.animation-wrapper.z-11 { z-index: 11; }
.animation-wrapper [data-animation-type="lottie"] {
  position: absolute !important;
  top: 50% !important; left: 50% !important;
  transform: translate(-50%, -50%) !important;
  min-width: 100% !important; min-height: 100% !important;
  width: 177.78vh !important; height: 56.25vw !important;
}

/* --------------------------------------------------------------------------
   19. FIX — the brand wave is a very soft glow that barely moves
   -------------------------------------------------------------------------- */
.wave-canvas {
  position: absolute;
  bottom: 0; left: 0;
  width: 100%; height: 240px;
  /* Decoration, and it must behave like it: at z-index 1 it tied with the hero's
     own content block and won on document order, so it veiled the pill row and —
     being a real element — swallowed every click aimed at those buttons. */
  z-index: 0;
  pointer-events: none;
  filter: blur(46px) saturate(115%);
  transform-origin: bottom center;
  animation: waveBreathe 18s ease-in-out infinite alternate;
  will-change: transform;
}
@keyframes waveBreathe {
  from { transform: scaleY(1);    opacity: .78; }
  to   { transform: scaleY(1.05); opacity: .9; }
}

/* --------------------------------------------------------------------------
   20. Scroll reveals and the word-by-word claim scrub
   -------------------------------------------------------------------------- */
[data-reveal] {
  transition: opacity 1s cubic-bezier(.165, .84, .44, 1) .2s,
              transform 1s cubic-bezier(.165, .84, .44, 1) .2s;
}
[data-reveal="fade-in"] { opacity: 0; }
[data-reveal="slide-up"] { opacity: 0; transform: translateY(100px); }
[data-reveal].is-revealed { opacity: 1; transform: translateY(0); }
.text-animate .wf-w { display: inline-block; white-space: nowrap; }

/* --------------------------------------------------------------------------
   21. Preloader
   -------------------------------------------------------------------------- */
.scene {
  /* sized to the VISIBLE viewport, not the layout viewport: with inset:0 the
     scene ran under Safari's floating toolbar (landscape especially) and the
     flex centre sat below the visible middle. dvh tracks the real visible
     height; vh stays as the fallback for engines without it, and main.js
     sharpens it to window.innerHeight at init. */
  top: 0; left: 0; right: 0; bottom: auto;
  height: 100vh;
  height: 100dvh;
  background: #000;
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  opacity: 1; visibility: visible;
  transition: opacity .5s ease-in-out, visibility .5s ease-in-out;
  z-index: 10000;
  position: fixed;
}
.scene.exit { opacity: 0; visibility: hidden; }
.scene.exit .preload-inner { opacity: 0; visibility: hidden; }
.preload-inner { z-index: 3; position: relative; }
.logo-wrap { position: relative; width: min(343px, 62vw); aspect-ratio: 391 / 30; z-index: 3; }
.logo-layer { position: absolute; inset: 0; }
.logo-layer svg { width: 100%; height: 100%; display: block; }
.logo-base { opacity: .12; }
.logo-wipe {
  clip-path: inset(0 100% 0 0);
  transition: clip-path 2s cubic-bezier(.65, .01, .05, .99);
}
.logo-wipe.reveal { clip-path: inset(0 0% 0 0); }
/* On the phone the generated layer sets `top: 50%` on this block. It is
   `position: relative`, so that is not centring — it pushes the wordmark half
   a viewport down, onto the bottom edge. The scene is a centred flex box at
   every width; the offset just has to go. */
.preload-inner { top: auto !important; margin-top: 0 !important; }
html.is-preloading, html.is-preloading body { overflow: hidden !important; }
/* …and nothing of the page itself shows through it. The header carries a
   `backdrop-filter`, which puts it in its own compositing layer and let it paint
   over the scene despite z-index 1000 against 10000. Hiding the wrapper is not
   subject to that, and `visibility` keeps the layout — so no scrollbar appears
   and none is taken away when the scene goes. The class is set by the script, so
   a page whose JavaScript never runs is visible, not blank. */
html.is-preloading .page-wrapper,
html.is-preloading .menu-item { visibility: hidden !important; }
html.menu-open .animation-wrapper,
html.menu-open .lottie-animation,
html.menu-open .bottom-shape,
html.menu-open .scene { z-index: 0 !important; }
html.menu-open, html.menu-open body { overflow: hidden; }

/* --------------------------------------------------------------------------
   22. Cookie consent — a real component in the brand's own language:
   dark plate, orange accent, hairline buttons, three explicit choices.
   -------------------------------------------------------------------------- */
/* Bis zum 11.8. war der Banner abgeschaltet („switched off for now, your
   call"). Er ist jetzt an: Google Analytics 4 laeuft (Mess-ID G-N7EQJGFC3C),
   und ohne Einwilligung waere das nicht zulaessig. main.js §15 laedt gtag.js
   erst nach „Accept all" — nachgewiesen im Netzwerkmitschnitt. */

.consent {
  position: fixed;
  z-index: 10001;
  left: 24px; right: 24px; bottom: 24px;
  max-width: 560px;
  /* links unten verankert (11.8.) — `margin-left: auto` hatte sie an die
     rechte Kante gedrückt. */
  margin-right: auto;
  /* Polsterung rundum gleich (11.8.): vorher 28px oben/unten gegen 30px
     seitlich — unter den Knöpfen sah es dadurch enger aus als daneben. */
  padding: 30px;
  /* Glas statt Platte (11.8.): dasselbe Mittel wie die Menüleiste und die
     Kopfzeile — `backdrop-filter: blur(28px)` über einem durchscheinenden
     Grund. Der Grund ist hier aber DUNKEL statt hell: die Leisten liegen über
     dem dunklen Menü und tragen deshalb `rgba(217,217,217,.1)`; die Cookiebox
     steht über der hellen Seite, und weiße Schrift auf hellem Glas wäre nicht
     zu lesen. Ink auf 72 % ergibt über Weiß einen Grund von #5f5f5f — weiße
     Schrift darauf kommt auf 5,9:1 und besteht damit WCAG AA.

     Ohne `backdrop-filter` (ältere Engines) greift die volle Platte, sonst
     stünde die Schrift auf 72 % Deckung ohne jede Weichzeichnung. */
  background: var(--ink);
  color: #fff;
  /* eckig und ohne Schlagschatten (11.8.). Die Seite führt sonst nirgends
     Rundungen oder Schatten; §148 hat die Kontaktkarte aus demselben Grund
     auf `border-radius: 0` gesetzt. */
  border-radius: 0;
  opacity: 0;
  visibility: hidden;
  transform: translateY(16px);
  transition: opacity .4s ease, transform .5s cubic-bezier(.16, .84, .44, 1), visibility .4s;
}
.consent.is-visible { opacity: 1; visibility: visible; transform: none; }
/* Netz unter der Regel in main.js §15: solange der Vorspann läuft, bleibt
   die Box unsichtbar — auch wenn das Skript sie aus irgendeinem Grund
   früher einblendet. Sie liegt auf z-index 10001 über der Szene (10000). */
html.is-preloading .consent { opacity: 0 !important; visibility: hidden !important; }
@supports ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  .consent {
    background: rgba(33, 33, 33, .72);
    -webkit-backdrop-filter: blur(28px);
            backdrop-filter: blur(28px);
  }
}
/* Die Zeile „/ Privacy" ist entfallen (11.8.) — der Schrägstrich steht jetzt
   direkt vor dem Titel, orange, das Wort daneben weiß. Dasselbe Muster wie die
   Abschnittsmarken der ganzen Seite (`.about_slash`, `.focus_label`), nur
   einzeilig statt gestapelt. Die alten `.consent_label`-Regeln bleiben ohne
   Wirkung stehen, falls die Zeile je zurückkommt. */
.consent_slash { color: var(--brand) !important; }
.consent_label {
  display: flex; align-items: center; gap: 4px;
  font-size: 20px; font-weight: 600; line-height: 1;
  color: #fff;
  margin-bottom: 10px;
}
.consent_label > span[aria-hidden] { color: var(--brand) !important; }
.consent_title { margin: 0 0 10px; font-size: 22px; font-weight: 600; line-height: 1.2; color: #fff; }
.consent_text {
  margin: 0 0 22px;
  font-size: 15px; font-weight: 400; line-height: 1.55;
  color: rgba(255, 255, 255, .72);
}
.consent_text a { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
.consent_actions { display: flex; flex-wrap: wrap; gap: 10px; }
.consent_btn {
  display: inline-flex; align-items: center; gap: 20px;
  padding: 14px 18px;
  border-radius: 8px;
  border: 1px solid var(--brand);
  background: transparent;
  color: #fff;
  font-family: inherit;
  font-size: 16px; font-weight: 600; line-height: 1;
  cursor: pointer;
  transition: background-color .35s ease, color .35s ease, border-color .35s ease;
}
.consent_btn .circle-orange {
  width: 18px; height: 18px; flex: none;
  border: 1px solid var(--brand); border-radius: 999px;
}
.consent_btn:hover { background: var(--brand); border-color: var(--brand); color: #fff; }
.consent_btn:hover .circle-orange { background: #fff; border-color: #fff; }
/* Beide Knoepfe gleich gewichtet (11.8.). Annehmen war orange gefuellt,
   Ablehnen nur umrandet — die Aufsichtsbehoerden lesen genau das als Nudging:
   die Orientierungshilfe der DSK verlangt, dass Ablehnen nicht durch
   Gestaltung benachteiligt wird, nicht nur, dass es gleich schnell erreichbar
   ist. Gleiche Groesse, gleiche Position, gleiche Farbe; der Unterschied liegt
   nur in der Beschriftung. Beim Hover fuellen sich beide gleich. */
.consent_btn--accept,
.consent_btn--quiet { background: transparent; border-color: rgba(255, 255, 255, .45); }
.consent_btn--accept .circle-orange,
.consent_btn--quiet .circle-orange { border-color: rgba(255, 255, 255, .45); }
.consent_btn--accept:hover,
.consent_btn--quiet:hover { background: #fff; border-color: #fff; color: var(--ink); }
.consent_btn--accept:hover .circle-orange,
.consent_btn--quiet:hover .circle-orange { background: var(--brand); border-color: var(--brand); }
/* ---- Variant B: full-width bar along the bottom edge -------------------- */
.consent--bar {
  left: 0; right: 0; bottom: 0;
  max-width: none;
  margin: 0;
  border-radius: 0;
  padding: 22px 60px;
  display: flex; align-items: center; gap: 40px;
  transform: translateY(100%);
}
.consent--bar.is-visible { transform: none; }
.consent--bar .consent_label { display: none; }
.consent--bar .consent_title { display: none; }
.consent--bar .consent_text { margin: 0; flex: 1 1 auto; }
.consent--bar .consent_actions { flex: none; }
@media (max-width: 767px) {
  .consent--bar { flex-direction: column; align-items: stretch; gap: 14px; padding: 18px 20px; }
}

/* ---- Variant C: centred dialog with a dimmed page behind it ------------- */
.consent--modal {
  left: 50%; right: auto; bottom: auto; top: 50%;
  margin: 0;
  width: min(560px, calc(100vw - 40px));
  transform: translate(-50%, -46%);
  text-align: center;
}
.consent--modal.is-visible { transform: translate(-50%, -50%); }
.consent--modal .consent_label { justify-content: center; }
.consent--modal .consent_actions { justify-content: center; }
.consent--modal::before {
  content: "";
  position: fixed;
  inset: -100vh -100vw;
  background: rgba(0, 0, 0, .45);
  z-index: -1;
  pointer-events: auto;
}

/* on a phone this is a bottom sheet, so it has to stay a strip rather than
   swallow the whole first screen */
@media (max-width: 560px) {
  /* eckig auch hier (11.8.), und Polsterung rundum gleich wie oben */
  .consent { left: 12px; right: 12px; bottom: 12px; padding: 20px; border-radius: 0; }
  .consent_label { font-size: 16px; margin-bottom: 6px; }
  .consent_title { font-size: 18px; margin-bottom: 6px; }
  .consent_text { font-size: 13.5px; line-height: 1.5; margin-bottom: 16px; }
  .consent_actions { gap: 8px; }
  .consent_btn {
    flex: 1 1 0; min-width: 0;
    justify-content: space-between; gap: 10px;
    padding: 12px 14px; font-size: 14px;
  }
  .consent_btn .circle-orange { width: 15px; height: 15px; }
}

/* --------------------------------------------------------------------------
   23. FIX — the scroll indicator
   Two things were wrong. The line was authored 60 units long, which at the
   hero's foot reads as a bar rather than a hint, so it is 40 now — the whole
   SVG is scaled, keeping the stroke weight it had (4.5 × 40/60 = 3px). And the
   stroke colours only ever existed in the homepage's own <head>, so on the 31
   other heroes the markup was present and painted nothing at all. One spec for
   every hero, the homepage included.
   -------------------------------------------------------------------------- */
.hero_indicator .scroll-indicator {
  height: 40px;
  width: auto;
}
.scroll-indicator .bg-line {
  stroke: var(--brand);
  stroke-opacity: .25;
  stroke-width: 4.5;
}
.scroll-indicator .progress-line {
  stroke: var(--brand);
  stroke-width: 4.5;
  stroke-dasharray: 60;
  stroke-dashoffset: 60;
  animation: wipeDown 2.2s cubic-bezier(.76, 0, .3, 1) forwards infinite;
}
/* Below 992px the hero's own content reaches the foot of the section, so the
   line — which nobody could see there before — landed on the CTA and the pill
   row. The content keeps clear of its footprint instead of the hint going away. */
@media (max-width: 991px) {
  .hero-sec2 .container-large { padding-bottom: 44px; }
  .profile-hero_content { padding-bottom: 120px; }
}
@media (max-width: 767px) {
  .profile-hero_content { padding-bottom: 92px; }
}

/* --------------------------------------------------------------------------
   24. FIX — "Bickel & Company set-up" (case studies)
   A fixed 440px card held two to four lines of text: a quarter copy, the rest
   empty white on light grey. What it lists is roles, and the count differs per
   case study — so it is one strip now, the roles separated by the brand slash,
   inside the same gradient stroke the KPI boxes above it carry. Two roles and
   four come out the same height: the section is 265 / 295px instead of 550.
   The alternatives are side by side in tools/setup-alternatives.html.
   -------------------------------------------------------------------------- */
.setup-box {
  max-width: none;
  min-height: 0;
  padding: 40px;
  /* one plate for every set-up box: white ground, no contour — the same
     surface the explainer boxes use, so the row reads consistently */
  background: #fff;
  display: block;
  border: 0;
  position: relative;
}
.setup-strip {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0 18px;
  font-size: 24px;
  line-height: 34px;
  font-weight: 600;
  color: var(--ink);
}
/* every role carries its slash — the first one too */
.setup-item::before {
  content: "/";
  color: var(--brand);
  margin-right: .5em;
}

@media (max-width: 991px) {
  .setup-box { padding: 25px; }
  .setup-strip { font-size: 20px; line-height: 28px; gap: 0 14px; }
}
@media (max-width: 559px) {
  .setup-box { padding: 16px 18px; }
  .setup-strip { font-size: 17px; line-height: 24px; gap: 0 11px; }
}

/* --------------------------------------------------------------------------
   25. FIX — the three case-study section labels were two different sizes
   `Challenge` carries a span the generated layer sizes at 40px, `Approach` and
   `Impact` are the bare `.heading-style-h5` at 32. All three are section labels
   and read as one row, so they take the 40/32 ramp of the span — which is also
   what every other section label on the page uses.
   -------------------------------------------------------------------------- */
.complex-sec .heading-style-h5,
.complex-sec .text-span-28 { font-size: 40px; line-height: 1.2; }
@media (max-width: 991px) {
  .complex-sec .heading-style-h5,
  .complex-sec .text-span-28 { font-size: 32px; }
}
/* the body copy inside those sections is not a label and keeps its own size */
.complex-sec .heading-style-h5.leading-30,
.complex-sec p.heading-style-h5 { font-size: 32px; line-height: 30px; }
@media (max-width: 991px) {
  .complex-sec .heading-style-h5.leading-30,
  .complex-sec p.heading-style-h5 { font-size: 24px; line-height: 28px; }
}

/* --------------------------------------------------------------------------
   26. FIX — the scroll hint belongs to the homepage hero only
   It was added to all 32 heroes last round; on the subpages it competes with
   the pill row and the CTA, which is why it comes back out. The homepage keeps
   it — that is where the reference has it.
   -------------------------------------------------------------------------- */
.hero_indicator { display: none !important; }
.section_hero .hero_indicator { display: inline-block !important; }
/* …and with it the clearance the subpage heroes were given for its footprint */
@media (max-width: 991px) {
  .hero-sec2 .container-large { padding-bottom: 0; }
  .profile-hero_content { padding-bottom: 60px; }
}
@media (max-width: 767px) {
  .profile-hero_content { padding-bottom: 40px; }
}

/* --------------------------------------------------------------------------
   27. FIX — hero pill rows ran the full width on the phone
   `._w-full` makes sense for a stack of equal buttons, not for one CTA: at
   390px the button spanned the whole screen and read as a banner. It is as wide
   as its label now, as on every other row.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .hero-sec2 .tab-btn._w-full,
  .hero-sec2 .tab-btn,
  .section_hero .tab-btn._w-full { width: auto !important; }
  .hero-sec2 .tab-btn-wrapper,
  .hero-sec2 .tab-box { justify-content: flex-start !important; }
  .hero-sec2 .tab-inner-btn { justify-content: space-between; }
}

/* --------------------------------------------------------------------------
   28. RESPONSIVE — the wordmark on the tablet in portrait
   Below 992px the reference drops it from 40px to 20px, which is far smaller
   than the tablet needs. 1.75× on the portrait tablet band.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) and (orientation: portrait) {
  /* the generated layer sizes this with three classes at 20px, so matching it
     takes four — otherwise specificity wins over source order */
  .navbar_wrapper .text-weight-bold.text-color-primary.navbar_brand-text,
  .navbar_wrapper .navbar_brand-text { font-size: 35px; }
  .navbar_container { height: 96px; }
}

/* --------------------------------------------------------------------------
   29. FIX — the footer mandate line breaks mid-sentence
   The wrapper is capped at 800px, so the German sentence — longer than the
   English — wrapped into three lines. On desktop the first sentence holds one
   line; the explicit <br> after it still starts the second one.
   -------------------------------------------------------------------------- */
@media (min-width: 992px) {
  .footer-cta_description-wrapper { max-width: none; }
  .footer-cta_description .bold-text-24 { white-space: nowrap; }
}

/* --------------------------------------------------------------------------
   30. Footer swoosh: the export's own rules draw it. Only two crutches remain —
   our lottie mount stretches svgs to the container, the footer copies keep
   their intrinsic ratio instead; and the copy stays above the drawing.
   -------------------------------------------------------------------------- */
.section-2 { position: relative; }
.section-2 > .code-embed.lottie.absolute2 > svg { height: auto !important; }
/* the export's own widths for the in-flow phone copy — a generic
   `.code-embed { width: 50% }` from the export undercut them here */
@media (min-width: 480px) and (max-width: 767px) {
  .section-2 > .code-embed.lottie.absolute2.block { width: 80% !important; }
}
@media (max-width: 479px) {
  .section-2 > .code-embed.lottie.absolute2.block { width: 95% !important; }
}
.section-2 > .section_footer-cta,
.section-2 > .footer-bottom { position: relative; z-index: 1; }

/* --------------------------------------------------------------------------
   31. FIX — the project slides were not the same height
   The KPI labels wrap differently per card, so the slides ranged 280–589px and
   the arrow row kept its distance from the *tallest* one — up to 160px of empty
   light ground under the card actually on screen. Every slide takes the row
   height now, so the arrows sit the same 42/34px under every card, exactly as
   they do under the value levers.
   -------------------------------------------------------------------------- */
/* every card carries the same box geometry — photo, then two equal KPI rows.
   A card with a case-study button adds the button as its own row BELOW that
   box, so it stands out past the neighbouring cards' bottom edge, exactly as
   the reference build had it. Nothing stretches to the tallest card anymore. */
.projects-sec .swiper-wrapper { align-items: flex-start; }
.projects-sec .swiper-slide { height: auto !important; }
.projects-sec .swiper-slide > .project-box {
  height: auto !important;
  display: flex;
  flex-direction: column;
}
.projects-sec .project-box > .logo-header2 { flex: 0 0 auto; }
.projects-sec .project-box > .project-box-wrapper2 {
  flex: 0 0 auto;
  align-content: start;
  /* two KPI rows at the shared height; the button row sizes to the button */
  grid-template-rows: repeat(2, minmax(137px, auto));
  grid-auto-rows: max-content;
}
/* on the phone the rows run at the reference's flat 70px floor instead */
@media (max-width: 767px) {
  .projects-sec .project-box > .project-box-wrapper2,
  .project-box > .project-box-wrapper2 {
    grid-template-rows: repeat(2, minmax(70px, auto)) !important;
  }
}
.projects-sec .project-box-wrapper2 > .btn-case { grid-column: 1 / -1; }

/* --------------------------------------------------------------------------
   32. FIX — the case-study heroes had no orange wash
   The subpage heroes get theirs baked into the photo (`sektion-01…`), and the
   profile heroes draw it in CSS — the four case studies had neither, so white
   type sat on a bright factory photo. Same ramp as the profile hero, as a wash
   over the photo: neutral at the top so the picture reads, brand at the bottom
   where the label, headline and button are.
   -------------------------------------------------------------------------- */
:where(html.page-lenzing, html.page-kuka, html.page-treofan, html.page-idt-biologika,
       html.page-private-equity, html.page-for-lenders, html.page-for-companies,
       html.page-expertise, html.page-team, html.page-approach,
       html.page-about-us, html.page-contact)
.hero-sec2.py-100::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  /* quieter than before: less opacity throughout, and the brand ramp starts
     lower so more of the photo reads */
  background-image: linear-gradient(180deg,
    rgba(33, 33, 33, .22) 0%,
    rgba(33, 33, 33, .30) 44%,
    rgba(251, 143, 95, .38) 82%,
    rgba(254, 80, 0, .62) 100%);
  pointer-events: none;
}
/* one rule for every hero: the copy is above the wash and the wave, whatever
   order the decorative layers happen to sit in */
.hero-sec2 > .container,
.section_hero > .container,
.profile-hero_content,
.video-banner-sec > .container { position: relative; z-index: 2; }

/* --------------------------------------------------------------------------
   33. FIX — the Track Record label did not match its own sub-headline
   The label in the contour box („Average project exit vs. entry adj. EBITDA")
   sat at 16/18 — 13/13 on the phone — inherited from `.paragraph._w-400`, while
   the sub-headline of the same band („Measurable impact from international
   transformation projects.", `.heading-style-h5.leading-30`) runs 32/36 on the
   desktop and 16/20 on the phone. Andre asked for the two to read as one size,
   so the label carries exactly that element's ramp — at every breakpoint, not
   only where the two happened to agree.
   The hook is the box, not the class: the label is `.paragraph._w-400` on the
   homepage, `.paragraph._w-full` on the subpages and `.heading-6.fs-semibold` on
   /private-equity, but always the only <p> in a `.box-inner.h-110` — the
   label-only contour box. The `h-195` boxes pair a caption with a figure and
   keep their own sizes.
   Follow-up: on the desktop 32px next to the huge plate read too big, so there
   the label is 24/28; the phone keeps the „Measurable impact" size (16/20),
   which is what Andre asked to match. Every big-box label carries this one ramp,
   so they are all the same size as each other. */
.track-sec .box-1 > .box-inner.h-110 > p,
.box-wrapper .box-1 > .box-inner.h-110 > p {
  font-size: 24px;
  line-height: 28px;
  letter-spacing: normal;
}
/* the zoomed range: scale with the viewport, capped at the desktop 24 */
@media (min-width: 992px) and (max-width: 1364px) {
  .track-sec .box-1 > .box-inner.h-110 > p,
  .box-wrapper .box-1 > .box-inner.h-110 > p {
    font-size: clamp(18px, 1.9vw, 24px);
    line-height: 1.3;
  }
}
@media (max-width: 991px) {
  .track-sec .box-1 > .box-inner.h-110 > p,
  .box-wrapper .box-1 > .box-inner.h-110 > p {
    font-size: 18px;
    line-height: 24px;
  }
}
@media (max-width: 479px) {
  .track-sec .box-1 > .box-inner.h-110 > p,
  .box-wrapper .box-1 > .box-inner.h-110 > p {
    font-size: 16px;
    line-height: 20px;
  }
}

/* --------------------------------------------------------------------------
   34. RESPONSIVE — cheaper glass on the phone
   The sticky header and the pill bars are drawn with `backdrop-filter:
   blur(100px)`. A blur that wide over a bar that stays on screen has to be
   recomposited on every frame of every scroll, which is one of the few reliable
   ways to make a mobile browser stutter. At 390px wide, 28px of blur is visually
   the same wash; it is only the desktop that ever shows enough backdrop for the
   difference to be legible.
   -------------------------------------------------------------------------- */
@media (max-width: 991px) {
  .navbar_wrapper,
  .tab-box {
    -webkit-backdrop-filter: blur(28px);
            backdrop-filter: blur(28px);
  }
}

/* --------------------------------------------------------------------------
   35. FIX — the header visual is a full-screen background on every size
   It was a 16/9 band: 1080px tall at 1920 but only 259px on the phone, where the
   label sat on a strip rather than on a picture. It fills one viewport at every
   width now, with the photo covering it and the label block staying where it is,
   100px off the bottom edge. The band values are the `zoom` compensation §2
   explains — `100svh` inside a scaled subtree paints at `svh × zoom`.
   -------------------------------------------------------------------------- */
#video-sec.section_about {
  min-height: 100vh;
  min-height: 100svh;
  display: flex;
  align-items: flex-end;
}
@media (min-width: 1365px) and (max-width: 1850px) { #video-sec.section_about { min-height: 125vh; min-height: 125svh; } }
@media (min-width: 992px) and (max-width: 1365px)  { #video-sec.section_about { min-height: 142.857vh; min-height: 142.857svh; } }

#video-sec .img-holder {
  position: absolute;
  inset: 0;
  z-index: 0;
}
#video-sec .img-holder picture,
#video-sec .img-holder img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
}
/* The wash on the header band is the one the heroes carry, and it is flush with
   the bottom edge. `inset: 0` was wrong twice: the authored rule anchors the
   overlay at the bottom (`inset: auto 0 0`) and caps it at 200px, so overriding
   the inset while leaving the cap in place pinned a 200px orange fade to the
   *top* of the band — under the header, with the white copy standing on the
   bright picture below it. It is the §32 ramp now: clear at the top so the
   picture reads, brand at the foot where the label and the copy sit. */
#video-sec .focus_card-overlay {
  position: absolute;
  inset: auto 0 0;
  width: 100%;
  height: 100%;
  max-height: none;
  opacity: 1;
  z-index: 1;
  /* the same quieter ramp as the subpage heroes (§32) */
  background-image: linear-gradient(180deg,
    rgba(33, 33, 33, 0) 0%,
    rgba(33, 33, 33, .22) 44%,
    rgba(251, 143, 95, .38) 82%,
    rgba(254, 80, 0, .62) 100%);
}
#video-sec > .container.absolute { position: relative; z-index: 2; width: 100%; }

/* --------------------------------------------------------------------------
   36. The footer is the export's own — section flex column with space-between,
   the swoosh drawn by the export's .absolute2 rules (desktop: the `.hidden`
   copy, absolute bottom-left; phone: the `.block` copy in flow). Nothing of
   ours on top.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   37. Accessibility and polish
   -------------------------------------------------------------------------- */
/* the normalize layer declares `section { display: block }`, which overrides the
   UA rule for [hidden] — so `hidden` silently did nothing on a section */
[hidden] { display: none !important; }

:focus-visible { outline: 2px solid var(--brand); outline-offset: 3px; }
.navbar_wrapper.is-on-dark :focus-visible { outline-color: #fff; }
a, button { -webkit-tap-highlight-color: transparent; }
img, picture > img { max-width: 100%; }

/* every slider clips its own track, or the slides run past the right edge */
.swiper, [class*="myswiper"] { overflow: hidden; }
.focus_card-overlay, .code-embed-5 { max-width: 100%; overflow: hidden; }

@media (prefers-reduced-motion: reduce) {
  [data-reveal] { opacity: 1 !important; transform: none !important; transition: none !important; }
  .box-2.js-grow, .box-1.js-grow { transform: none !important; }
  .box-2.js-grow > *, .box-1.js-grow > * { opacity: 1 !important; }
  .menu-item .list-item, .menu-item .langswitch--menu { opacity: 1 !important; transform: none !important; }
  .wave-canvas, .progress-line { animation: none !important; }
}

/* --------------------------------------------------------------------------
   38. FIX — the sticky bar disappeared while the menu was open
   The panel is an opaque #212121 sheet over the page, so the sticky header —
   which sits below it — went with it. Its own top row already mirrors the
   header's geometry (§8 measures height, wordmark size and the close button's
   position), it just had no surface: the wordmark and the X floated on the
   sheet. The row now carries the header's own glass, so the bar reads as the
   same bar, only with an X where the burger was.
   -------------------------------------------------------------------------- */
.menu-item .menu-item_bar {
  background-color: rgba(217, 217, 217, .1);
  -webkit-backdrop-filter: blur(28px);
          backdrop-filter: blur(28px);
}

/* --------------------------------------------------------------------------
   39. The six subpage heroes carry their own photograph
   They all shared one generic header picture (`sektion-01-header`) with the
   wash baked into the pixels. Each page has its own frame from the shoot now,
   and because those are un-washed, they take §32's wash — the same ramp the
   case studies use, so every hero on the site is built the same way.
   Three width bands, each with a 1x and a 2x candidate: a phone never loads a
   2560px file and a 5K display never gets a soft one.

   The `?v=` on every address below is not decoration. `/assets/media/` is served
   `immutable, max-age=1 year`, and build.py stamps the content hash only onto
   media paths **in the markup** — these live in the stylesheet, so a file swap
   alone would never reach a reader who has been here before. Whoever re-exports
   the photographs with `tools/fotos.py` raises this number in the same commit.
   v2 = 5 August 2026, re-encoded at WebP quality 90 (was 78).
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  :where(html.page-private-equity) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-private-equity-768.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-private-equity-768.webp?v=2") 1x, url("/assets/media/bc-hero-private-equity-1280.webp?v=2") 2x);
  }
}
@media (max-width: 767px) {
  :where(html.page-for-lenders) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-for-lenders-768.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-for-lenders-768.webp?v=2") 1x, url("/assets/media/bc-hero-for-lenders-1280.webp?v=2") 2x);
  }
}
@media (max-width: 767px) {
  :where(html.page-for-companies) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-for-companies-768.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-for-companies-768.webp?v=2") 1x, url("/assets/media/bc-hero-for-companies-1280.webp?v=2") 2x);
  }
}
@media (max-width: 767px) {
  :where(html.page-expertise) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-expertise-768.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-expertise-768.webp?v=2") 1x, url("/assets/media/bc-hero-expertise-1280.webp?v=2") 2x);
  }
}
@media (max-width: 767px) {
  :where(html.page-team) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-team-768.jpg?v=3");
    background-image: image-set(url("/assets/media/bc-hero-team-768.webp?v=3") 1x, url("/assets/media/bc-hero-team-1280.webp?v=3") 2x);
  }
}
@media (max-width: 767px) {
  :where(html.page-approach) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-approach-768.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-approach-768.webp?v=2") 1x, url("/assets/media/bc-hero-approach-1280.webp?v=2") 2x);
  }
}
@media (min-width: 768px) and (max-width: 1279px) {
  :where(html.page-private-equity) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-private-equity-1280.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-private-equity-1280.webp?v=2") 1x, url("/assets/media/bc-hero-private-equity-2560.webp?v=2") 2x);
  }
}
@media (min-width: 768px) and (max-width: 1279px) {
  :where(html.page-for-lenders) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-for-lenders-1280.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-for-lenders-1280.webp?v=2") 1x, url("/assets/media/bc-hero-for-lenders-2560.webp?v=2") 2x);
  }
}
@media (min-width: 768px) and (max-width: 1279px) {
  :where(html.page-for-companies) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-for-companies-1280.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-for-companies-1280.webp?v=2") 1x, url("/assets/media/bc-hero-for-companies-2560.webp?v=2") 2x);
  }
}
@media (min-width: 768px) and (max-width: 1279px) {
  :where(html.page-expertise) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-expertise-1280.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-expertise-1280.webp?v=2") 1x, url("/assets/media/bc-hero-expertise-2560.webp?v=2") 2x);
  }
}
@media (min-width: 768px) and (max-width: 1279px) {
  :where(html.page-team) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-team-1280.jpg?v=3");
    background-image: image-set(url("/assets/media/bc-hero-team-1280.webp?v=3") 1x, url("/assets/media/bc-hero-team-2560.webp?v=3") 2x);
  }
}
@media (min-width: 768px) and (max-width: 1279px) {
  :where(html.page-approach) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-approach-1280.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-approach-1280.webp?v=2") 1x, url("/assets/media/bc-hero-approach-2560.webp?v=2") 2x);
  }
}
@media (min-width: 1280px) {
  :where(html.page-private-equity) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-private-equity-1920.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-private-equity-1920.webp?v=2") 1x, url("/assets/media/bc-hero-private-equity-2560.webp?v=2") 2x);
  }
}
@media (min-width: 1280px) {
  :where(html.page-for-lenders) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-for-lenders-1920.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-for-lenders-1920.webp?v=2") 1x, url("/assets/media/bc-hero-for-lenders-2560.webp?v=2") 2x);
  }
}
@media (min-width: 1280px) {
  :where(html.page-for-companies) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-for-companies-1920.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-for-companies-1920.webp?v=2") 1x, url("/assets/media/bc-hero-for-companies-2560.webp?v=2") 2x);
  }
}
@media (min-width: 1280px) {
  :where(html.page-expertise) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-expertise-1920.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-expertise-1920.webp?v=2") 1x, url("/assets/media/bc-hero-expertise-2560.webp?v=2") 2x);
  }
}
@media (min-width: 1280px) {
  :where(html.page-team) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-team-1920.jpg?v=3");
    background-image: image-set(url("/assets/media/bc-hero-team-1920.webp?v=3") 1x, url("/assets/media/bc-hero-team-2560.webp?v=3") 2x);
  }
}
@media (min-width: 1280px) {
  :where(html.page-approach) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-approach-1920.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-approach-1920.webp?v=2") 1x, url("/assets/media/bc-hero-approach-2560.webp?v=2") 2x);
  }
}

/* --------------------------------------------------------------------------
   40. The phone: four things that were sized for the desktop
   -------------------------------------------------------------------------- */

/* (a) The figures in the Impact bands („> 40 ppts") were 16px on the phone
   against 40px on the desktop — the smallest type in a box that exists to show
   one number. They are twice that now, and the caption above them comes up from
   10px, which no longer reads as a caption to a 32px figure. Same rule for every
   band built this way — the /for pages and the case studies. */
@media (max-width: 767px) {
  .box-1 > .box-inner.h-195 > h2.text-size-xlarge,
  .box-1 > .box-inner.h-195 > .text-size-xlarge {
    font-size: 32px !important;
    line-height: 34px !important;
  }
  /* the same slot written in words rather than digits — it takes two or three
     lines, so it lands between caption and figure */
  .box-1 > .box-inner.h-195 > .heading-010 {
    font-size: 22px !important;
    line-height: 24px !important;
  }
  .box-1 > .box-inner.h-195 > h6.heading-6 {
    font-size: 14px !important;
    line-height: 16px !important;
  }
}

/* (b) Clients: the logo tiles keep a 131px floor from the desktop layout, so a
   40px logo sat in the middle of a tall empty tile, and the slider bar hung 60px
   under the track while every other slider on the site puts its bar row half
   that far away. */
@media (max-width: 767px) {
  #client .tab-content2 .box-inner.flex-col.bg-gray2 { min-height: 84px !important; }
  #client .tab-content2 .swiper-pagination { margin-top: 28px !important; }
  #client .executives_header,
  #client .client-header { margin-bottom: 20px !important; }
}

/* (c) The hero subtitle was capped at 220px inside a 310px column, which broke
   „C-level execution: High-speed transformation with accountability for results."
   into three lines where two fit. It uses the column it is in. */
@media (max-width: 767px) {
  .hero_subtitle-wrapper .hero_subtitle,
  .hero_subtitle-wrapper .hero_subtitle._w-400 { max-width: none !important; }
  /* the cap was not the whole story: the hero block carries a 20px inset inside
     the container's own 20px gutter, so the line box was 310px of a 390px screen
     — 20px short of holding „…High-speed transformation" on the first line. The
     inset goes on the phone; the block is centred, so it only gets wider. */
  .section_hero .hero_content.px-40 {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }
  .hero_subtitle-wrapper._w-1105 { max-width: none !important; }
}

/* (d) Andre: the pictures in the Approach sections run edge to edge on the
   phone. They sat inside the 20px container gutter, which on a 390px screen is
   10% of the width given to a margin either side of a photograph. */
@media (max-width: 767px) {
  .approch-sec .div-block-22 {
    margin-left: -20px !important;
    margin-right: -20px !important;
    width: auto !important;
    max-width: none !important;
  }
  .approch-sec .div-block-22 > picture,
  .approch-sec .div-block-22 > picture > img {
    width: 100% !important;
    max-width: none !important;
  }
}

/* --------------------------------------------------------------------------
   41. The header band plays the film
   It was a still (`header-video.jpg`) with the wash and the wave over it. The
   still stays exactly where it was and keeps doing its job — it is what shows
   while the file loads, on a metered connection, and under
   `prefers-reduced-motion`. The video lies over it inside the same holder, so
   §35's full-screen geometry covers both, and it fades in on its first frame
   rather than flashing black over the picture.
   -------------------------------------------------------------------------- */
#video-sec .img-holder video.bg-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
  z-index: 1;
  opacity: 0;
  transition: opacity .8s ease;
  pointer-events: none;
}
#video-sec .img-holder video.bg-video.is-playing { opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  #video-sec .img-holder video.bg-video { display: none; }
}

/* --------------------------------------------------------------------------
   42. Where each hero photograph is cropped
   `background-size: cover` on a 390×844 hero takes a narrow vertical slice out
   of a 3:2 landscape frame, and the default `50% 50%` put that slice on a wall
   on several of them. Each page names the part of its own picture that has to
   stay in frame; the value is the point the crop keeps, so it reads as
   „hold this spot" rather than „shift by this much".
   -------------------------------------------------------------------------- */
:where(html.page-private-equity) .hero-sec2.py-100 { background-position: 45% 42% !important; }
:where(html.page-for-lenders)    .hero-sec2.py-100 { background-position: 62% 10% !important; }
:where(html.page-for-companies)  .hero-sec2.py-100 { background-position: 58% 18% !important; }
:where(html.page-expertise)      .hero-sec2.py-100 { background-position: 52% 40% !important; }
:where(html.page-team)           .hero-sec2.py-100 { background-position: 45% 20% !important; }
:where(html.page-approach)       .hero-sec2.py-100 { background-position: 45% 52% !important; }

/* and on the phone the wash may not swallow the picture it sits on: the top
   stop comes down, the bottom keeps the brand ramp the copy needs */
@media (max-width: 767px) {
  :where(html.page-lenzing, html.page-kuka, html.page-treofan, html.page-idt-biologika,
         html.page-private-equity, html.page-for-lenders, html.page-for-companies,
         html.page-expertise, html.page-team, html.page-approach,
         html.page-about-us, html.page-contact)
  .hero-sec2.py-100::before {
    background-image: linear-gradient(180deg,
      rgba(33, 33, 33, .18) 0%,
      rgba(33, 33, 33, .34) 38%,
      rgba(251, 143, 95, .56) 74%,
      rgba(254, 80, 0, .84) 100%) !important;
  }
}

/* --------------------------------------------------------------------------
   43. Section labels are one size — including the ones on the dark band
   „Team", „Projects", „Clients", „Focus" are `.text-size-xlarge`; „Track Record"
   and „Impact" sit in the dark track-sec and used `.heading-style-h5`, a size
   smaller. They are `.text-size-xlarge` now too. Above 992 that already matches;
   below it the `.text-color-primary.my-0` variant drops to 26/26 while the white
   variant fell through to the 24/22 base, so the dark-band label is pinned to
   the same 26/26 the light labels use. */
@media (max-width: 991px) {
  .track-sec .about_label-text .text-size-xlarge.text-color-white {
    font-size: 26px;
    line-height: 26px;
  }
}

/* --------------------------------------------------------------------------
   44. The menu language switcher is the same size as the burger/close button
   The pill was 60px tall against the round button's 40 (48 on desktop). The
   height and the stroke width are mirrored from the button in JS (§8's
   mirrorHeader), so here the vertical padding is dropped and the box sized from
   that height — the pill keeps its width for „EN" and the dot, but its height
   and border now match the circle at every breakpoint.
   -------------------------------------------------------------------------- */
.langswitch--menu .navbar_lang-button {
  padding-top: 0;
  padding-bottom: 0;
  box-sizing: border-box;
}

/* --------------------------------------------------------------------------
   45. The KPI caption over each figure was the smallest type on the band
   „Average adj. EBITDA margin uplift", „Average reduction of net leverage
   ratio" and the rest sat at 16/18 (14/16 on the phone) over a 40px figure.
   Andre asked for them a touch bigger and, above all, consistent — so every
   caption in the top row of KPI boxes takes one ramp: 20/24 on the desktop,
   18/22 in the zoomed band, 16/18 on the phone.
   -------------------------------------------------------------------------- */
.track-sec .box-1 > .box-inner.h-195 > h6.heading-6,
.box-wrapper .box-1 > .box-inner.h-195 > h6.heading-6 {
  font-size: 20px;
  line-height: 24px;
}
@media (min-width: 992px) and (max-width: 1364px) {
  .track-sec .box-1 > .box-inner.h-195 > h6.heading-6,
  .box-wrapper .box-1 > .box-inner.h-195 > h6.heading-6 {
    font-size: 18px;
    line-height: 22px;
  }
}
@media (max-width: 991px) {
  .track-sec .box-1 > .box-inner.h-195 > h6.heading-6,
  .box-wrapper .box-1 > .box-inner.h-195 > h6.heading-6 {
    font-size: 16px;
    line-height: 18px;
  }
}

/* --------------------------------------------------------------------------
   46. Round seventeen — the phone pass and the card headers
   -------------------------------------------------------------------------- */
/* The client logos on the project-card photos are dark marks on a dark
   photograph. One filter turns any of them pure white — the same treatment on
   every card, no per-logo files. */
.logo-header2 .div-block-29 img { filter: brightness(0) invert(1); }

/* every logo slider carries the same tile: the profile experience sliders kept
   the 131px desktop floor on the phone while #client was already at 84 */
@media (max-width: 767px) {
  .swiper .box-inner.flex-col.bg-gray { min-height: 84px !important; }
}

/* the two subpage hero photographs that were still the generic header */
@media (max-width: 767px) {
  :where(html.page-about-us) .hero-sec2.py-100 { background-image: url("/assets/media/bc-hero-about-768.jpg?v=4"); background-image: image-set(url("/assets/media/bc-hero-about-768.webp?v=4") 1x, url("/assets/media/bc-hero-about-1280.webp?v=4") 2x); }
  :where(html.page-contact)  .hero-sec2.py-100 { background-image: url("/assets/media/bc-hero-contact-768.jpg?v=2");  background-image: image-set(url("/assets/media/bc-hero-contact-768.webp?v=2") 1x, url("/assets/media/bc-hero-contact-1280.webp?v=2") 2x); }
}
@media (min-width: 768px) and (max-width: 1279px) {
  :where(html.page-about-us) .hero-sec2.py-100 { background-image: url("/assets/media/bc-hero-about-1280.jpg?v=4"); background-image: image-set(url("/assets/media/bc-hero-about-1280.webp?v=4") 1x, url("/assets/media/bc-hero-about-2560.webp?v=4") 2x); }
  :where(html.page-contact)  .hero-sec2.py-100 { background-image: url("/assets/media/bc-hero-contact-1280.jpg?v=2");  background-image: image-set(url("/assets/media/bc-hero-contact-1280.webp?v=2") 1x, url("/assets/media/bc-hero-contact-2560.webp?v=2") 2x); }
}
@media (min-width: 1280px) {
  :where(html.page-about-us) .hero-sec2.py-100 { background-image: url("/assets/media/bc-hero-about-1920.jpg?v=4"); background-image: image-set(url("/assets/media/bc-hero-about-1920.webp?v=4") 1x, url("/assets/media/bc-hero-about-2560.webp?v=4") 2x); }
  :where(html.page-contact)  .hero-sec2.py-100 { background-image: url("/assets/media/bc-hero-contact-1920.jpg?v=2");  background-image: image-set(url("/assets/media/bc-hero-contact-1920.webp?v=2") 1x, url("/assets/media/bc-hero-contact-2560.webp?v=2") 2x); }
}
:where(html.page-about-us) .hero-sec2.py-100 { background-position: 55% 35% !important; }
:where(html.page-contact)  .hero-sec2.py-100 { background-position: 40% 0% !important; } /* S27: Kopf nicht anschneiden — die Kante hält die Bildoberkante, das Bild steht maximal unten */

/* the hero "Learn more" pill spanned the whole container on the phone */
@media (max-width: 767px) {
  .hero-sec2 .tab-btn._w-full.block,
  .profile-learnmore { width: auto !important; min-width: 220px; }
  .hero-sec2 .tab-box { display: inline-flex !important; width: auto !important; }
}

/* Clients pills and the Learn-more row: one line of three on the phone */
@media (max-width: 767px) {
  #client .tab-box,
  .contact-sec .tab-box {
    display: flex !important;
    flex-wrap: nowrap !important;
    gap: 6px;
  }
  #client .tab-box .tab-btn2,
  .contact-sec .tab-box .tab-btn3 { flex: 1 1 0; min-width: 0; width: auto !important; }
  #client .tab-box .tab-inner-btn,
  .contact-sec .tab-box .tab-inner-btn { padding: 10px 8px !important; justify-content: center; gap: 5px; }
  #client .tab-box .text-block,
  .contact-sec .tab-box .text-block { font-size: 11px; line-height: 13px; white-space: nowrap; }
  #client .tab-box .circle-orange,
  .contact-sec .tab-box .circle-orange { width: 9px; height: 9px; flex: 0 0 auto; }
}

/* the figures at the foot of the project cards were the smallest type there */
@media (max-width: 767px) {
  .project-box .heading-010 { font-size: 19px !important; line-height: 22px !important; }
  .project-box .box-heading { font-size: 12px !important; line-height: 14px !important; }
}

/* the case-study Approach copy boxes end on the same edges as every other box
   on the page — only the photograph runs edge to edge */
@media (max-width: 767px) {
  .complex-sec .box-3,
  .complex-sec [class*="box-3"] { width: 100% !important; max-width: none !important; margin-left: 0 !important; margin-right: 0 !important; }
}

/* Profile hero on the phone: a second brand wash over the lower half — behind
   the copy, in front of the portrait — instead of effects on the text, and the
   same single Learn-more pill the other subpage heroes carry. */
.profile-learnmore { display: none; }
@media (max-width: 1199px) {
  .profile-hero_inner::after {
    content: "";
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 40%;
    background: linear-gradient(180deg, rgba(254, 80, 0, 0) 0%, rgba(251, 143, 95, .40) 45%, rgba(254, 80, 0, .72) 100%);
    z-index: 1;
    pointer-events: none;
  }
  .profile-hero_content { position: relative; z-index: 2; }
  .profile-hero_name, .profile-hero_role { text-shadow: none !important; }
}
/* the profile hero carries the same single Learn-more pill as every other
   subpage hero — at every size; the tab row is gone */
@media (max-width: 1199px) {
  .profile-hero_tabs { display: none !important; }
  .profile-learnmore { display: inline-block !important; margin-top: 24px; }
}
@media (min-width: 1200px) {
  .profile-learnmore { display: none !important; }
}

/* the brand wordmark link is only as wide as the wordmark — an absolute block
   without a width stretched its hit area toward the burger */
.navbar_brand { width: max-content; }

/* the arrow disc sits on the content's own inset — flush with the text block's
   bottom edge at every width. The export had four different anchors (40/20/30/24)
   while the copy's padding walked its own ramp. §19 measures the real padding. */
.section_focus .link-block-2 {
  bottom: var(--card-arrow-inset, 40px) !important;
  right: var(--card-arrow-inset, 40px) !important;
}

/* the third card's headline broke mid-word („…Unternehme / n") inside its
   210px cap, and the arrow — sized to the headline — grew with the extra line.
   The heading gets its width back; the explicit <br> alone sets the two lines. */
.heading-style-h5.text-color-white.focus_card-heading._w-100,
.heading-style-h5.text-color-white.focus_card-heading._w-100:lang(de-de) {
  max-width: none;
  overflow-wrap: normal;
  word-break: normal;
  hyphens: manual;
}

/* --------------------------------------------------------------------------
   47. Round eighteen — the band from the screenshots
   -------------------------------------------------------------------------- */
/* (a) The contour label box: the text overflowed the fixed 110px frame upward
   on the German homepage. The frame follows its text — 110px stays the floor,
   the plate below still absorbs the leftover column height, so the flush bottom
   edge holds. And no more per-word breaks inside these boxes. */
.track-sec .box-1 > .box-inner.h-110,
.box-wrapper .box-1 > .box-inner.h-110 {
  height: auto !important;
  min-height: 110px;
}
.track-sec .box-1 .box-inner > *,
.box-wrapper .box-1 .box-inner > * {
  overflow-wrap: normal;
  word-break: normal;
  hyphens: manual;
}

/* (b) one stroke weight for every contour box — the project-card tiles carried
   the export's own 1px border on top of ours, which painted as 2px */
.project-box .box-1,
.project-box .box-1 > .box-inner { border-width: 0 !important; }
.project-box .box-1 { border: 1px solid transparent !important; }

/* (c) the figures in the KPI boxes step up a size — desktop too */
.track-sec .box-1 > .box-inner.h-195 > h2.text-size-xlarge,
.box-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge { font-size: 48px; line-height: 52px; }
.track-sec .box-1 > .box-inner.h-195 > .heading-010,
.box-wrapper .box-1 > .box-inner.h-195 > .heading-010 { font-size: 30px; line-height: 36px; }
@media (min-width: 992px) and (max-width: 1364px) {
  .track-sec .box-1 > .box-inner.h-195 > h2.text-size-xlarge,
  .box-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge { font-size: clamp(30px, 3vw, 48px); line-height: 1.1; }
}

/* (d) the value-lever cards clip their copy when it outgrows the 4:3 frame:
   the content was absolute, so the card never learned its height. It is in
   flow now; 4:3 stays the preferred ratio and the card grows past it. */
.scope-sec .focus_card .focus_card-content {
  position: relative !important;
  top: auto !important;
  min-height: 0;
}
.scope-sec .focus_card,
.scope-sec .focus_card.aspect-ratio2 {
  height: auto !important;
  /* the frame may grow past 4:3 but never clip: max-content wins against the
     ratio when the copy is the taller of the two — important, because
     custom.css pins these cards to min-height:0 !important */
  min-height: max-content !important;
}
.scope-sec .swiper-slide { height: auto !important; }

/* (e) the footer bands must not paint over the swoosh — the section owns the
   background, the rows sit on it glass-clear */
.section-2 > .footer-bottom,
.section-2 > .section_footer-cta { background: transparent !important; }
.section-2 > .footer-bottom::after,
.section-2 > .section_footer-cta::after { content: none !important; }

/* (f) the three focus-card headlines take the section's own leading, not the
   heading default — and the arrow, sized to the headline, comes down with it.
   (Der Wert steht ab §65 einmal für alle Kartenüberschriften.) */

/* (g) dark photo heroes start with the inverted bar */
html.page-for-companies .hero-sec2.py-100,
html.page-for-lenders .hero-sec2.py-100 { --hero-dark: 1; }

/* --------------------------------------------------------------------------
   48. Round nineteen — iPad pass, focus cards, preloader, KPI plates
   -------------------------------------------------------------------------- */


/* the wordmark is centred on the phone too — below 992 the brand link fell out
   of the absolute centring */
@media (max-width: 991px) {
  .navbar_brand {
    position: absolute !important;
    left: 50% !important;
    transform: translateX(-50%) !important;
    width: max-content;
  }
}

/* preloader wordmark a size smaller on the phone — the wordmark only, never
   the lines animation behind it */
@media (max-width: 767px) {
  #scene .logo-wrap { width: min(220px, 62vw) !important; }
}

/* the claim takes two lines on the tablet, as designed.
   Das Band endete bei 1199 und traf damit das iPad-QUERFORMAT (1194) mit —
   dort deckelte `18ch` den Claim auf 829px, obwohl er 1206px braucht und im
   gezoomten Layout 1506px Platz hat. Ergebnis: zwei Zeilen, und die
   Swoosh-Zeichnung schnitt durch die zweite. Genau die Falle aus dem Handoff:
   ab 992px ist die Seite ein gezoomter Desktop, Tablet-Regeln enden bei 991.
   Das 12.9" quer (1366) lag ohnehin außerhalb und war deshalb schon einzeilig. */
@media (min-width: 768px) and (max-width: 991px) {
  .section_hero .hero_heading,
  .section_hero .heading-style-h2.hero_heading {
    max-width: 18ch !important;
    /* §14 pins the claim to one line on the desktop — on the tablet it breaks
       after „drive", as designed; flush left like every other block */
    white-space: normal !important;
  }
}

/* menu wordmark near-double on the tablet */
@media (min-width: 768px) and (max-width: 1199px) {
  .menu-item .menu-item_brand { font-size: 34px !important; }
}

/* the nav language pill is exactly as tall as the burger circle — the burger is
   40px within 992, 48 above; the pill loses its vertical padding and takes the
   circle's height */
.navbar_lang-button { padding-top: 0; padding-bottom: 0; height: 48px; box-sizing: border-box; }
@media (max-width: 991px) { .navbar_lang-button { height: 40px; } }

/* Focus cards: the three-up band clips its copy from tablet widths down, so the
   stacked full-width variant takes over below 1200 instead of 768. The arrow
   sits bottom-left on the content inset, never over the copy, and is capped. */
/* bottom-right on the content inset — bottom-left put the disc behind the
   copy on the phone */
.section_focus .link-block-2 {
  right: var(--card-arrow-inset, 40px) !important;
  left: auto !important;
}
.focus_card { --card-arrow-cap: 69px; }
/* below 1200 the swiper runs one card per view (main.js §6) — the in-flow
   mobile card layout applies there too */
/* the pop-in no longer flickers: the blur backdrop composited a new layer the
   moment the text faded in — the wash alone reads the same and stays cheap */
.section_focus .focus_card.is-open .focus_card-content.translate-45 {
  -webkit-backdrop-filter: none !important;
          backdrop-filter: none !important;
}

/* the orange plate is a band, not a monolith: on the phone it stops at 2:1 */
@media (max-width: 767px) {
  .box-wrapper .box-2 {
    aspect-ratio: 2 / 1;
    height: auto !important;
    min-height: 0 !important;
    flex: 0 0 auto !important;
  }
}

/* Walter's wide logo marks (Syntegon, Lenzing, Treofan) rendered tiny at the
   tile's uniform cap — wide marks get their height back.
   NACHTRAG (Andre 02.08., S8): nur auf den PROFILEN. Die Regel griff auch in die
   Kundenreihen der Startseite (die Sektion trägt dieselbe Klasse) und machte
   Lenzing und Syntegon dort auf 58 % — also kleiner als alle anderen, genau die
   Rückmeldung „Logos von Lenzing und Syntegon sind sehr klein". */
:where(html[class*="page-teams-"]) .client-sec .box-inner img[src*="treofan-logo"],
:where(html[class*="page-teams-"]) .client-sec .box-inner img[src*="syntegon"],
:where(html[class*="page-teams-"]) .client-sec .box-inner img[src*="images203"],
:where(html[class*="page-teams-"]) .client-sec .box-inner img[src*="6-lenzing"] {
  width: 58% !important;
  height: auto !important;
  max-height: none !important;
  object-fit: contain;
}

/* --------------------------------------------------------------------------
   49. Round twenty — the slash system, flush KPI columns, footer space
   -------------------------------------------------------------------------- */
/* One rule for every slash-over-headline pair on the site: the slash is the
   same size as its headline and sits over it like a first line at line-height
   1.0 — no extra gap, anywhere. */
.about_label, .focus_label, .focus_card-label {
  margin: 0 !important;
  padding: 0 !important;
  line-height: 1 !important;
}
.about_label .about_slash,
.focus_label .about_slash,
.focus_label .focus_slash,
.focus_card-label .focus_slash {
  font-size: 40px;
  line-height: 1 !important;
  display: inline-block;
}
.about_label-text, .focus_label-text { margin-top: 0 !important; }
.about_label-text > h2, .about_label-text > h3,
.focus_label-text > h2, .focus_label-text > h3 { margin-top: 0 !important; }
@media (max-width: 991px) {
  .about_label .about_slash,
  .focus_label .about_slash,
  .focus_label .focus_slash,
  .focus_card-label .focus_slash { font-size: 26px; }
}

/* KPI band: the three columns end flush top and bottom — each column is a
   flex stack and its plate absorbs the leftover, nothing carries a fixed
   ratio on the desktop */
.box-wrapper { align-items: stretch !important; }
/* only the label+plate pairs become flex stacks — the 2x2 tile grids of the
   subpage bands keep the export's own layout */
@media (min-width: 768px) {
  .box-wrapper > div:has(> .box-2) { display: flex; flex-direction: column; min-height: 0; }
  /* neither the label cell nor the plate may be squeezed by the stretch —
     a shrunken label cell was exactly the offset the row showed */
  .box-wrapper > div:has(> .box-2) > .box-1 { flex: 0 0 auto; }
  .box-wrapper > div:has(> .box-2) > .box-1 > .box-inner { flex-shrink: 0; }
  .box-wrapper > div:has(> .box-2) > .box-2 { flex-shrink: 0; }
}
/* the plates keep their strict ratio — the columns end flush because main.js
   levels the label cells above them to one height per row (§ equalKpiLabels) */
/* the orange plates: 4:3 on the desktop, the flatter 4:2 in the tablet band */
@media (min-width: 1200px) {
  .box-wrapper .box-2,
  .track-sec .box-2 { height: auto !important; }   /* Verhältnis: §95 als Boden */
}
@media (min-width: 768px) and (max-width: 1199px) {
  .box-wrapper .box-2,
  .track-sec .box-2 { height: auto !important; }   /* Verhältnis: §72 als Boden */
}

/* one size for every figure in the KPI boxes — sitewide, wherever it sits in
   the box, and no orphaned words („… & / CAGRs"); one weight too — the
   heading-010 figures came out bolder than the text-size-xlarge ones */
.box-inner.h-195 .text-size-xlarge,
.box-inner.h-195 .heading-010 {
  font-size: 48px !important;
  line-height: 52px !important;
  font-weight: 500 !important;
  text-wrap: balance;
}
@media (min-width: 992px) and (max-width: 1364px) {
  .box-inner.h-195 .text-size-xlarge,
  .box-inner.h-195 .heading-010 { font-size: clamp(28px, 2.9vw, 48px) !important; line-height: 1.1 !important; }
}
@media (max-width: 991px) {
  .box-inner.h-195 .text-size-xlarge,
  .box-inner.h-195 .heading-010 { font-size: 32px !important; line-height: 36px !important; }
}

/* project-card tiles: the value is one size in all four tiles — the size
   „Machinery" runs at */
.project-box .box-inner .heading-010,
.project-box .box-inner .text-size-xlarge,
.project-box .box-inner .text-block-2 {
  font-size: 24px !important;
  line-height: 28px !important;
  text-wrap: balance;
}
@media (max-width: 767px) {
  .project-box .box-inner .heading-010,
  .project-box .box-inner .text-size-xlarge,
  .project-box .box-inner .text-block-2 { font-size: 20px !important; line-height: 24px !important; }
}
/* …and the contour is the same 1px everywhere, whatever the export layered */
.project-box .box-1, .project-box .box-1 > .box-inner { box-shadow: none !important; }

/* footer: the swoosh spans exactly the lower-left quarter again — tail in the
   screen corner, tip on the centre of the footer, the geometry that was signed
   off. The copy block sits closer to the legal row. */
.section-2 > .code-embed.lottie.absolute2 {
  width: 50% !important;
  height: 50% !important;
  aspect-ratio: auto !important;
}
.footer-bottom .mb-94 { margin-bottom: 40px !important; }

/* team and expertise start on dark photos too */
html.page-team .hero-sec2.py-100,
html.page-expertise .hero-sec2.py-100 { --hero-dark: 1; }

/* The wordmark is centred by the scene itself (flex, both axes) — the earlier
   rule here aimed at the wrong element and shoved the lines animation off
   screen instead. The lines layer keeps its own authored position. */

/* the team picture ends on its own edge. Two hairline sources, both closed:
   the inline gap under the img (display block), and the sub-pixel strip the
   zoom rounding leaves between the picture and the dark band that follows —
   the wrapper carries that band's colour and tucks 1px under it, so any
   rounding seam is dark on dark. */
/* height:auto, or the width/height attributes (there for the pre-load layout
   height) pin the rendered height and distort the composite */
.executives_photos img.image-2 { display: block; width: 100%; height: auto; }
.executives_photos { line-height: 0; }
/* the sub-pixel seam the zoom rounding leaves between the picture and the dark
   band: a 2px strip in the band's colour closes it — dark on dark, invisible;
   the wrapper itself stays transparent, the PNG keeps the section's white
   behind its transparency */
/* the composite's own bottom edge carries resampling artefacts (a light
   hairline row): the wrapper clips the last 2px of the picture away — no
   strips, no borders, nothing added */
.executives_photos { overflow: hidden; }
.executives_photos img.image-2 { margin-top: -2px; margin-bottom: -2px; }

/* case studies: the white Approach copy boxes run as wide as the photograph
   below them on the phone — edge to edge */
@media (max-width: 767px) {
  .complex-sec .box-3 {
    margin-left: -20px !important;
    margin-right: -20px !important;
    width: auto !important;
    max-width: none !important;
  }
}

/* accordions: paragraphs read as paragraphs */
.accordion-body p { line-height: 1.5 !important; margin-bottom: 14px; }
.accordion-body p:last-child { margin-bottom: 0; }

/* case studies: one distance between a section head and what follows it */
.complex-sec .focus_left,
.feedback-sec2 .focus_left,
.setup-sec .px-40 .focus_left { margin-bottom: 40px !important; }

/* client feedback card: same width, same insets, copy left-aligned — like
   every other box on the page */
@media (max-width: 767px) {
  .feedback-sec2 .feedback-row { width: 100% !important; margin: 0 !important; display: block; }
  .feedback-sec2 ._w-34, .feedback-sec2 ._w-66 { width: 100% !important; }
  .feedback-sec2 .team-body2, .feedback-sec2 .team-body2 * ,
  .feedback-sec2 .feedback-row p { text-align: left !important; }
}

/* the wash is the heroes' own ramp over the whole picture — no blur; the
   blurred panel arrives with the hover */
.section_focus .focus_card > .focus_card-overlay {
  inset: 0 !important;
  height: auto !important;
  max-height: none !important;
  opacity: 1 !important;
  /* the same quieter ramp as the heroes (§32) */
  background-image: linear-gradient(180deg,
    rgba(33, 33, 33, .10) 0%,
    rgba(33, 33, 33, .22) 44%,
    rgba(251, 143, 95, .38) 82%,
    rgba(254, 80, 0, .62) 100%) !important;
}
@media (min-width: 1200px) {
  .section_focus .focus_card:hover .focus_card-content.translate-45 {
    -webkit-backdrop-filter: blur(50px);
            backdrop-filter: blur(50px);
  }
}
/* on the phone the card holds at least a square — cards with shorter copy get
   the taller picture instead of a flat band; longer copy still grows past it */
@media (max-width: 767px) {
  .section_focus .focus_card,
  .section_focus .focus_card.aspect-ratio {
    aspect-ratio: 1 / 1 !important;
    height: auto !important;
  }
}

/* expertise: the two filter pills share one row on the phone */
@media (max-width: 767px) {
  html.page-expertise .tab-box {
    display: flex !important;
    flex-wrap: nowrap !important;
    gap: 6px;
  }
  html.page-expertise .tab-box > a { flex: 1 1 0; min-width: 0; width: auto !important; }
  html.page-expertise .tab-box .tab-inner-btn { padding: 10px 8px !important; justify-content: center; gap: 5px; }
  html.page-expertise .tab-box .text-block { font-size: 11px; line-height: 13px; white-space: nowrap; }
}

/* people without a finished profile do not link out and do not light up —
   their cards carry no href at all */
a.team-card:not([href]) {
  pointer-events: none;
  cursor: default;
}
a.team-card:not([href]) .team-card_overlay,
a.team-card:not([href]) [class*="overlay"],
a.team-card:not([href]):hover .team-card_overlay,
a.team-card:not([href]):hover [class*="overlay"] {
  opacity: 0 !important;
  height: 0 !important;
}

/* the homepage project cards are exhibits, not links */
html.page-index .projects-sec a.project-box,
html.page-index .projects-sec .project-box { pointer-events: none; cursor: default; }

/* project-card values a size up on the desktop */
@media (min-width: 1200px) {
  .project-box .box-inner .heading-010,
  .project-box .box-inner .text-size-xlarge,
  .project-box .box-inner .text-block-2 { font-size: 30px !important; line-height: 34px !important; }
}

/* --------------------------------------------------------------------------
   50. iPad pass
   -------------------------------------------------------------------------- */
/* focus cards in the tablet band: one card per view at the desktop's 4:3, and
   the slider controls that the export only drew on the phone come along */
@media (min-width: 768px) and (max-width: 1199px) {
  .section_focus .focus_card.aspect-ratio,
  .section_focus .focus_card {
    aspect-ratio: 4 / 3 !important;
    height: auto !important;
  }
  .section_focus .swiper-pagination { display: block !important; }
  .section_focus .swiper-button-prev,
  .section_focus .swiper-button-next { display: flex !important; }
}

/* the white explainer box carries one inset on all sides */
.box-wrapper .box-3 { padding: 40px !important; }
@media (max-width: 991px) { .box-wrapper .box-3 { padding: 25px !important; } }

/* fullscreen menu: larger entries on the tablet */
@media (min-width: 768px) and (max-width: 1199px) {
  .menu-item .list-item .navbar-link,
  .menu-item .navbar-link { font-size: 44px !important; line-height: 1.35 !important; }
}

/* while the menu is open nothing composites over it: the pill bars and the
   sticky header carry backdrop-filters that otherwise paint above the sheet —
   the sheet's own bar mirrors the header, so nothing is lost.
   Der Vorhang braucht 0,6s (§12). SOFORT versteckt wirkte das wie ein Schaden:
   Text, Rahmen und Glas der Hero-Pillen verschwanden, bevor der Vorhang sie
   erreicht hatte, und die orangen Punkte hingen mit ihrer eigenen transition
   sichtbar nach (Kundenfilm 5.8., 21:19, /team). Jetzt fällt nur der Filter
   sofort (der Compositing-Grund), versteckt wird erst, wenn der Vorhang das
   Element überdeckt hat: Leiste nach 0,1s, Pillenreihe nach 0,45s (überdeckt
   bei ~390ms, im Band gemessen). Beim Schließen gilt der Grundzustand ohne
   Verzögerung — alles steht wieder, bevor der Vorhang den Blick freigibt. */
html.menu-open .navbar_wrapper,
html.menu-open .tab-box { visibility: hidden !important; }
html.menu-open .navbar_wrapper, html.menu-open .navbar_wrapper *,
html.menu-open .tab-box, html.menu-open .tab-box * {
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}
html.menu-open .navbar_wrapper { transition: visibility 0s .1s; }
html.menu-open .tab-box { transition: visibility 0s .45s; }

/* expertise cards are square, at every size */
.experience-card { aspect-ratio: 1 / 1 !important; height: auto !important; }
/* secondary industry tags feed the filter only, they never render on the card */
.experience-card .industry-tag.hidden { display: none !important; }
/* the photo always covers the whole square — with the card's own aspect the
   image's natural ratio otherwise leaves bands above and below */
.experience-card > picture.image-34,
.experience-card > .image-34 {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  min-height: 0 !important;
}
.experience-card picture.image-34 > img.image-34 {
  width: 100% !important;
  height: 100% !important;
  min-height: 0 !important;
  object-fit: cover;
}

/* iPad: the portrait keeps to the right edge, the hero pill stays content-wide,
   and the big plate figures double up */
@media (min-width: 768px) and (max-width: 1199px) {
  .profile-hero_media { width: 70%; right: 0; justify-content: flex-end; }
  .hero-sec2 .tab-btn._w-full.block,
  .profile-learnmore { width: auto !important; min-width: 220px; }
  .hero-sec2 .tab-box { display: inline-flex !important; width: auto !important; }
  .box-2 .text-block-2 { font-size: 64px !important; line-height: 1.05 !important; }
}

/* the white Webasto mark vanished on the white expertise card — it reads in
   ink there like every other mark */
.experience-card img[src*="webasto-logo-white"] { filter: brightness(0); }

/* Tablet band 768–991: the type order holds — section headlines above their
   sub-lines, never inverted. The KPI figures keep their own later rules. */
@media (min-width: 768px) and (max-width: 991px) {
  .text-size-xlarge { font-size: 34px; line-height: 1.2; }
  .heading-style-h5 { font-size: 22px; line-height: 1.35; }
}

/* --------------------------------------------------------------------------
   52. KPI label cells: the label starts on the top inset, the cell hugs its
   copy with the same inset on every side, and the two label boxes of a row
   read from one top line (the row itself is levelled by equalKpiLabels).
   -------------------------------------------------------------------------- */
.box-wrapper .box-1 > .box-inner.h-110,
.track-sec .box-1 > .box-inner.h-110 {
  height: auto !important;
  min-height: 0 !important;
  align-items: flex-start !important;
  justify-content: flex-start !important;
}
/* the label wraps on the cell's own width — the export capped it at 200px,
   which forced a third line */
.box-wrapper .box-1 > .box-inner.h-110 > p,
.track-sec .box-1 > .box-inner.h-110 > p { max-width: none !important; width: auto !important; }
/* „Over an average of 3 years" runs the same ramp as the label above it —
   here and in every KPI band on the subpages */
.box-wrapper .box-2 > .heading-6,
.track-sec .box-2 > .heading-6 {
  font-size: 24px !important;
  line-height: 28px !important;
}
@media (min-width: 992px) and (max-width: 1364px) {
  .box-wrapper .box-2 > .heading-6,
  .track-sec .box-2 > .heading-6 { font-size: clamp(18px, 1.9vw, 24px) !important; line-height: 1.3 !important; }
}
@media (max-width: 991px) {
  .box-wrapper .box-2 > .heading-6,
  .track-sec .box-2 > .heading-6 { font-size: 18px !important; line-height: 24px !important; }
}
/* on the Impact bands the plate's label and its „Over an average …" line match
   the small boxes' caption ramp (20/18/16) and read from the same top line —
   only rows that actually pair the plate with caption boxes.
   Größen only — die Zeilenhöhe kommt aus §65, sonst gälten für dieselbe
   Beschriftung je nach Nachbarkasten zwei verschiedene Werte. */
.box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p,
.box-wrapper:has(.box-inner.h-195) .box-2 > .heading-6 {
  font-size: 20px !important;
}
@media (min-width: 992px) and (max-width: 1364px) {
  .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p,
  .box-wrapper:has(.box-inner.h-195) .box-2 > .heading-6 { font-size: 18px !important; }
}
@media (max-width: 991px) {
  .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p,
  .box-wrapper:has(.box-inner.h-195) .box-2 > .heading-6 { font-size: 16px !important; }
}
/* team headline → photo: half the old air, homepage only */
html.page-index .executives_photos.mt-60 { margin-top: 30px !important; }

/* --------------------------------------------------------------------------
   51. Short windows: the stacked 4:3 plate outgrew screens like 705×600 —
   on low viewports (split screen, landscape phones) the plates run 4:2.
   Height-gated, so portrait phones and full-height screens keep their ratio.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) and (max-height: 750px) {
  .box-wrapper .box-2,
  .track-sec .box-2 { aspect-ratio: 4 / 2 !important; }
}

/* --------------------------------------------------------------------------
   37. Landscape phones (short viewports): one screen is not enough.
   The hero stacks — copy on the first screen, the swoosh drawing below it,
   the scroll indicator at the very end; subpage heroes get room too.
   -------------------------------------------------------------------------- */
@media (orientation: landscape) and (max-height: 550px) and (max-width: 991px) {
  .section_hero,
  .section_hero.d-flex {
    /* 11.8.: von 170vh auf 110vh — der Keil schließt jetzt bündig mit der
       Hero-Unterkante ab (Kundenwunsch „unten bündig"), der zweite Schirm
       ist nur noch der Rest des Keils. */
    min-height: 110vh !important;
    align-items: flex-start !important;
  }
  .section_hero > .container { margin-top: 0; }
  /* the claim at desktop size does not fit a 430px-tall screen above the
     drawing — a size down keeps copy and swoosh apart */
  .section_hero .hero_heading,
  .section_hero .heading-style-h2.hero_heading { font-size: 44px !important; line-height: 1.15 !important; }
  /* NEU 11.8., dritte Fassung (Kundenwünsche iPhone quer: „nicht linksbündig,
     riesiger weißer Abstand" → „unten bündig"): die Telefon-Zeichnung ist ein
     1080×1920-HOCHFORMAT-SVG — mit `meet` stand sie quer als 242px schmaler
     Streifen mittig, und jeder `slice`-Ausschnitt ließ Leerraum unter dem
     Keil (der YMid-Ausschnitt kann nie unter die Bildmitte). Deshalb jetzt
     GEOMETRISCH: die Zeichnung läuft in ihrem ECHTEN Seitenverhältnis
     (100vw × 177,78vw — dann gibt es keinerlei Einpass-Verschiebung mehr,
     preserveAspectRatio ist wirkungslos) und wird so verankert, dass die
     KEIL-UNTERKANTE exakt auf der Hero-Unterkante liegt: die Tinte endet
     89,6vw über dem unteren Bildrand (am stehenden Endbild vermessen).
     Das 21vw hohe Band umschließt den ganzen Keil samt Spitze und schneidet
     den Rest der (transparenten bzw. beim Laden matten) Fläche ab.
     Anker: die Positionierungs-Box des Wrappers ist 100vh hoch, der Hero
     80px Kopfleiste + 110vh — daher calc(-10vh − 80px). Nachgemessen bei
     932×430, 844×390, 812×375: Bandunterkante == Oberkante section_about,
     auf den Pixel. main.js §16 (slice) bleibt — bei exaktem Verhältnis ohne
     Wirkung, schadet nicht. */
  html.page-index .animation-wrapper.z-11 {
    top: auto !important; bottom: calc(-10vh - 80px) !important;
    height: 21vw !important; overflow: hidden !important;
  }
  html.page-index .animation-wrapper .code-embed-13 .lottie-animation_2 {
    width: 100vw !important; height: 177.78vw !important;
    left: 0 !important; top: auto !important; bottom: -89.6vw !important;
    position: absolute !important; transform: none !important;
  }
  /* a landscape phone is 768+ wide, so the export switches to the DESKTOP
     swoosh — the matte version with the dark ground. Lying down it must stay
     the transparent phone drawing, whatever the width says */
  .animation-wrapper .code-embed-12 { display: none !important; }
  .animation-wrapper .code-embed-13 { display: block !important; }
  /* photo heroes on the subpages: 100vh is too flat lying down */
  .hero-sec2, .hero-sec2.py-100,
  .profile-hero_inner,
  .team-hero, .team-hero-inner {
    min-height: 150vh !important;
  }
  /* NEU 11.8. (Kundenbefunde iPhone quer): „Wir treiben Transformationen."
     lief beidseitig über den Schirmrand, ohne Randabstand. Zwei Ursachen:
     (a) die Sektion trägt flex-shrink:0 und nimmt sich die Breite ihrer
     EINZEILIGEN Überschrift (1052px bei 932px Fenster — min-width:auto der
     Flex-Kette), (b) die Überschrift selbst steht auf white-space:nowrap
     und kann gar nicht umbrechen. Beides nur in diesem Fenster gelöst:
     Breitenkette geklemmt und Umbruch erlaubt — der deutsche Satz läuft
     zweizeilig („Wir treiben / Transformationen."), der englische passt
     einzeilig. Vorher/nachher bei 932×430 gemessen: DE 2 Zeilen 40..892,
     EN 1 Zeile 47..885, kein Überlauf. */
  /* 11.8. spät: diese drei Regeln sind zu §203 ans Dateiende gewandert —
     GLOBAL statt nur im Querformat-Fenster. Der Kunde traf den Überlauf auch
     in einem hohen ~780px-Fenster („der text läuft immer noch über den
     bildschirm raus"). */
  /* the drawing sits between the subline and the Contact button (main.js
     moves the node there); the desktop corner copy stays off */
  .section-2 .code-embed.lottie.absolute2.hidden { display: none !important; }
  .section-2 .div-block-2 > .code-embed.lottie.absolute2.block {
    display: block;
    position: static;
    /* 11.8.: von 50 % auf 78 % — „lottie viel zu klein" (Kunde); nachts
       zurück auf LINKSBÜNDIG statt mittig (Kundenfoto: „im footer ist die
       lottie nicht mehr linksbündig"). */
    width: 78% !important;
    height: auto !important;
    margin: 24px 0 !important;
    padding-top: 0 !important;
  }
  .section-2 .div-block-2 > .code-embed.lottie.absolute2.block > svg {
    display: block;
    width: 100% !important;
    height: auto !important;
  }
  /* ZURÜCKGENOMMEN (Rückmeldung 3. August): hier stand `transform: scale(1.35)`
     auf den Referenzlogos. Ein Transform vergrößert das Bild, ohne dass die
     Kachel davon weiß — breite Wortmarken liefen deshalb über ihren Rahmen und
     wurden von `overflow: hidden` beschnitten (FRESHFIELDS auf Boris' Profil,
     sichtbar in Firefox und Safari ab 1365px). Die Logos laufen jetzt in ihrer
     eigenen Größe, so wie die Ausgangsdateien es vorgeben. */
}

/* --------------------------------------------------------------------------
   38. Round 31 — consistency pass from the phone review
   -------------------------------------------------------------------------- */
/* "Client feedback" sat 110px above its row on tablet widths while every
   other section runs ~40 — the export's 70px desktop padding stops at 992 */
@media (max-width: 991px) {
  .feedback-row { padding-top: 20px !important; }
}

/* case studies, phone: the white Approach boxes span the same width as the
   photograph used to (the 20px inset), and the photograph itself now runs
   edge to edge */
@media (max-width: 767px) {
  .complex-sec .div-block-23 { padding-right: 0 !important; }
  .complex-sec .div-block-22 {
    margin-left: -20px !important;
    margin-right: -20px !important;
    width: calc(100% + 40px) !important;
    max-width: none !important;
  }
  .complex-sec .div-block-22 .image-29 { width: 100% !important; }
}

/* the interview banner keeps the same clearance to the section above as to
   the screen edges (the page inset), on the phone that is 20px */
@media (max-width: 767px) {
  .video-banner-sec { padding-top: 20px !important; }
}

/* the photograph that opens the section right under a subpage hero sits
   flush against the hero on the phone — no white gap between the two */
@media (max-width: 767px) {
  .hero-sec2 + .approch-sec { padding-top: 0 !important; }
}

/* subpage heroes: the translucent plate behind the Learn-more button is part
   of the design at every size — phones and lying-down phones included */
@media (max-width: 991px) {
  .hero-sec2 .tab-btn-wrapper .tab-box {
    background-color: rgba(217, 217, 217, .5);
    border-radius: 16px;
    padding: 10px;
  }
}

/* profile heroes, phone: the orange ground ran to full brand and swallowed
   the photo — it stays a wash like the other page overlays (never deeper
   than the mid tone), on every profile alike */
@media (max-width: 767px) {
  .profile-hero_inner {
    background-image: linear-gradient(180deg,
        #fafafa 0%, #fafafa 40%, #fde3d6 72%, #fb8f5f 100%) !important;
  }
}

/* accordion copy: the intro paragraph breathes a bit less, the slash list a
   lot more — the two ran on the same leading and read wrong both ways */
.accordion-body h3.fs-24 { line-height: 1.4 !important; }
.accordion-body h3.fs-24.leading-26 { line-height: 1.9 !important; }

/* any flat landscape viewport — a phone lying down or a squat desktop
   window — cannot hold the footer copy in one screen height: the footer
   grows with its content instead (main.js skips the 100svh clamp under the
   same query), and the claim moves up so the copy leads the plate */
@media (orientation: landscape) and (max-height: 500px) and (max-width: 991px) {
  .section-2 {
    height: auto !important;
    max-height: none !important;
    min-height: 100vh !important;
  }
  .section-2 > .overflow-hidden.section_footer-cta { padding-top: 120px !important; }
}

/* footer on tablets: the claim reads at desktop presence (the zoom bands
   shrank the vw size to a whisper), the subline wraps instead of cropping,
   and the wordmark keeps its own proportions, centred — it was stretched
   to the container width in the bands */
@media (min-width: 992px) and (max-width: 1364px) {
  .footer-cta_headline { font-size: min(130px, 9vw) !important; }
}
@media (min-width: 1365px) and (max-width: 1849px) {
  .footer-cta_headline { font-size: min(110px, 6.5vw) !important; }
}
@media (max-width: 1849px) {
  .footer-cta_description .bold-text-24,
  .footer-cta_description .bold-text-25 { white-space: normal !important; }
}
@media (min-width: 768px) {
  .footer-bottom img.mb-94 {
    display: block;
    width: auto;
    max-width: 100%;
    margin-left: auto;
    margin-right: auto;
  }
}

/* reference logos on tablets: the page zoom shrank the tuned intrinsic sizes
   by 20-30% — a uniform counter-scale restores them without touching their
   relative weights (no per-logo widths, no distortion) */
/* ZURÜCKGENOMMEN (3. August): scale(1.43) im Tablet-Band — siehe §37. */
/* ZURÜCKGENOMMEN (3. August): scale(1.25) im 0,8-Band — siehe §37. Genau diese
   Stufe schnitt FRESHFIELDS auf Boris' Profil an beiden Seiten ab. */

/* team grid on the tablet: a vw rule shrank the names under their role
   labels (21px vs 24px caps) — the name always leads */
@media (min-width: 992px) and (max-width: 1199px) {
  html.page-team h2.heading-style-h5.text-color-primary {
    font-size: 28px !important;
    line-height: 1.25 !important;
  }
}

/* the full-width focus card on the tablet: a roomier inset, and the copy
   starts on the same left edge as the body text outside the card.
   NACHTRAG: die 56px oben/unten stammen aus der Zeit, in der hier EINE Karte über
   die ganze Breite lief. Seit §107 stehen es drei, und der Abstand unter der
   Überschrift las damit 56px gegen 40px links — bei 1440 waren beide schon 40.
   Rundum 40, also überall unten wie links. */
@media (min-width: 992px) and (max-width: 1199px) {
  .section_focus .focus_card > .focus_card-content,
  .section_focus .focus_card > .focus_card-content.translate-45 {
    padding: 40px !important;
  }
  .section_focus .link-block-2 { bottom: 40px !important; right: 40px !important; }
}

/* KPI plates on the tablet: the export pins their height (100% - 113px), so
   the big figure ran out of the plate — the plate grows with its figure, and
   the figure itself takes one size down in the band */
@media (min-width: 992px) and (max-width: 1199px) {
  .box-wrapper .box-2,
  .track-sec .box-2 {
    height: auto !important;
    min-height: 240px;
  }
  .box-wrapper .box-2 .text-block-2.fs-60,
  .track-sec .box-2 .text-block-2.fs-60 {
    font-size: 48px !important;
    line-height: 1.15 !important;
  }
}

/* the card contour paints ~1px at every size: in the 0.7 band the old
   1px border + 1.3px padding ring stacked to 2.3px CSS and read fat on the
   iPad — one 1.5px border stroke survives the zoom rounding instead */
@media (min-width: 992px) and (max-width: 1365px) {
  .box-1 { padding: 0 !important; border-width: 1.5px !important; }
}

/* typography in the 0.7/0.8 bands (tablets): the slash labels ran a size
   larger than the headline they belong to — they are always 1:1 with it; and
   the body copy kept desktop pixel line-heights against vw-shrunk faces,
   which squeezed the lines — a relative leading breathes at every width */
@media (min-width: 992px) and (max-width: 1365px) {
  /* Keine eigene Größe für den Slash mehr: main.js misst ihn aus der echten
     Headline daneben. Solange hier zusätzlich 2.1vw stand, galt bei jedem
     resize (auf dem iPad reicht das Ein- und Ausfahren der Adressleiste) erst
     der CSS-Wert und danach der gemessene — der Slash sprang sichtbar hin und
     her. Eine Quelle, kein Springen. */
  .text-color-brand.about_slash,
  .text-color-brand.focus_slash,
  .text-color-brand.complex-slash,
  .text-color-brand.complex-slash.fs-40 {
    line-height: 1 !important;
  }
  .paragraph-5, .paragraph-3, .paragrapgh,
  .approch-sec p, .scope-sec p,
  p.text-size-large {
    line-height: 1.45 !important;
  }
}

/* profile hero on tablets: name/role/button take exactly the subpage-hero
   scale (h2 2.5vw / h3 2.1vw / pill 1.5vw + 16px inset) instead of their
   fixed desktop pixels */
@media (min-width: 992px) and (max-width: 1365px) {
  .profile-hero_name { font-size: 2.49vw !important; line-height: 1.2 !important; }
  .profile-hero_role { font-size: 2.1vw !important; line-height: 1.2 !important; }
  .profile-hero_tab,
  .profile-hero_tab .text-block,
  .profile-hero_tab div { font-size: 1.5vw !important; }
  .profile-hero_tab { padding: 16px !important; }
}

/* --------------------------------------------------------------------------
   39. Re-check round: the 768-991 band (iPad portrait) missed the tablet
   fixes, and the experience tiles had a hidden third clipper.
   -------------------------------------------------------------------------- */
/* THE text clipper in the experience tiles: the role text sits in a
   70px-capped scroll container (.custom-scrollbar) — long roles scrolled
   behind an invisible bar instead of showing. It grows with its text now,
   the tile equal-height machinery above does the rest. */
.client-sec .div-block-31.custom-scrollbar {
  max-height: none !important;
  height: auto !important;
  overflow: visible !important;
  flex-shrink: 0;
}
/* the dyn-built grid nests one level deeper than the export grid — the
   equal-height chain runs through .div-block-25, not the cell itself */
.client-sec .client-box-wrapper .div-block-25 {
  height: 100%;
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
}
.client-sec .client-box-wrapper .div-block-25 > .box-1.mt-1 {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
}
.client-sec .client-box-wrapper .div-block-25 > .box-1.mt-1 > .box-inner {
  flex: 1 1 auto;
  height: auto !important;
  overflow: visible !important;
}
/* iPad portrait is 768-991 wide — the tablet type fixes apply here too */
@media (min-width: 768px) and (max-width: 991px) {
  .footer-cta_headline { font-size: min(96px, 7.5vw) !important; }
  html.page-team h2.heading-style-h5.text-color-primary {
    font-size: 24px !important;
    line-height: 1.25 !important;
  }
}

/* --------------------------------------------------------------------------
   40. Tablet pass II. One root cause up front: inside the zoom bands Safari
   and Chrome disagree on vw (Safari does not scale it by the zoom factor),
   so band-scoped type is sized in px from here on — px scales with zoom
   identically in every engine.
   -------------------------------------------------------------------------- */
/* footer claim: fixed px per band, never wider than the screen */
@media (min-width: 992px) and (max-width: 1364px) {
  .footer-cta_headline { font-size: 100px !important; }
}
@media (min-width: 1365px) and (max-width: 1849px) {
  .footer-cta_headline { font-size: 84px !important; }
}
/* project-grid tags: both chips a size down on tablets so "BY BICKEL &
   COMPANY" and "Case Study" never meet in the middle of a card */
@media (min-width: 768px) and (max-width: 1365px) {
  .tag { font-size: 12px; padding: 6px 8px; line-height: 12px; }
}
/* accordion titles sat at desktop size inside the tablet boxes */
@media (min-width: 992px) and (max-width: 1365px) {
  .accordion-btn, .accordion-btn div { font-size: 26px !important; line-height: 30px !important; }
}
/* KPI plates: the label in the contour box starts on the same left edge as
   the figure in the filled plate below — the export gave them different
   insets in the bands; and the labels take one size down */
@media (min-width: 992px) and (max-width: 1849px) {
  .box-wrapper .box-1 > .box-inner,
  .track-sec .box-1 > .box-inner { padding-left: 32px !important; }
  .box-wrapper .box-2,
  .track-sec .box-2 { padding-left: 32px !important; padding-right: 32px !important; }
  .box-wrapper .box-1 > .box-inner .paragraph,
  .track-sec .box-1 > .box-inner .paragraph,
  .box-wrapper .box-1 > .box-inner p,
  .track-sec .box-1 > .box-inner p { font-size: 24px !important; line-height: 1.35 !important; }
}
/* experience tiles: the role line is centred under its slash, with real
   clearance to the bottom edge — KUKA's wrapped role touched the border */
.client-sec .box-1.mt-1 .box-inner {
  text-align: center !important;
  padding-bottom: 24px !important;
}
.client-sec .box-1.mt-1 .box-inner .text-block-10,
.client-sec .box-1.mt-1 .box-inner .text-block-10.left,
.client-sec .box-1.mt-1 .box-inner .div-block-31 {
  text-align: center !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
/* team grid: the role labels stay one line and clearly under the name —
   they outgrew the names in the bands (and wrapped into the next line) */
@media (min-width: 768px) and (max-width: 1365px) {
  html.page-team .focus_label .text-color-brand.fs-24 {
    font-size: 17px !important;
    line-height: 1.2 !important;
    white-space: nowrap;
  }
  html.page-team h2.heading-style-h5.text-color-primary {
    font-size: 28px !important;
    line-height: 1.25 !important;
  }
}
/* profile heroes: the portrait pins to the right screen edge on tablets —
   the person sits left of centre inside the source frame, so the frame
   shifts right until the figure reads right-bound */
@media (min-width: 768px) and (max-width: 1365px) {
  .profile-hero_media { right: 0 !important; justify-content: flex-end !important; overflow: hidden !important; }
  .profile-hero_media img {
    object-position: 100% 100%;
    transform: translateX(28%) scale(1.38) !important;
    transform-origin: 100% 0%;
  }
}

/* project cards: the KPI grid can never outgrow its card — plain 1fr tracks
   keep a min-content floor and Safari let long labels push the columns out
   over the neighbouring slide; minmax(0,1fr) removes the floor */
.project-box-wrapper2 {
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important;
  max-width: 100%;
}
.project-box-wrapper2 .box-1 { min-width: 0; }

/* --------------------------------------------------------------------------
   41. Phone pass (portrait + landscape) from the device review.
   -------------------------------------------------------------------------- */
/* the footer drawing takes the hero's presence on the phone: full width in
   its band (the raised claim leaves it the room) */
@media (max-width: 767px) {
  .section-2 > .code-embed.lottie.absolute2.block { width: 100% !important; }
  /* focus card: the heading sits as close to its copy as the slash headings
     in the sections below do */
  .section_focus .focus_card > .focus_card-content > *:last-child { padding-top: 12px !important; }
  /* KPI plates: the contour-box label reads at the same size as the labels
     in the small plates (heading-6), not a size up */
  .box-wrapper .box-1 > .box-inner p,
  .track-sec .box-1 > .box-inner p { font-size: 18px !important; line-height: 24px !important; }
}
/* project cards: the four KPI tiles share one size (the tallest of the row)
   and keep the reference's flat proportions — never squares */
.project-box .project-box-wrapper2 { grid-auto-rows: 1fr; }
.project-box .project-box-wrapper2 .box-1 { min-width: 0; height: 100%; }
.project-box .project-box-wrapper2 .box-1 > .box-inner {
  aspect-ratio: auto !important;
  height: 100% !important;
  min-height: 0 !important;
}
/* die Kachel selbst trägt das Verhältnis — quer, nie quadratisch. Es muss auf
   dem Grid-Element sitzen: auf der Innenplatte gewann das `height: 100%` des
   Exports immer, dann kam die Höhe aus dem Text. */
@media (min-width: 768px) {
  .project-box .project-box-wrapper2 { grid-auto-rows: auto !important; }
  .project-box .project-box-wrapper2 .box-1 {
    aspect-ratio: 2.6 / 1;
    height: auto !important;
  }
}
/* profile hero: the Learn-more pill is the hero tab button, plate included —
   it had drifted into its own look */
@media (max-width: 991px) {
  .profile-hero_tabs {
    display: inline-flex;
    background-color: rgba(217, 217, 217, .5);
    border-radius: 16px;
    padding: 10px;
  }
  .profile-hero_tab,
  .profile-hero_tab .text-block,
  .profile-hero_tab div { font-size: 18px !important; }
  .profile-hero_tab { padding: 14px 18px !important; border-radius: 8px; }
}
/* lying-down phones */
@media (orientation: landscape) and (max-height: 550px) and (max-width: 991px) {
  /* the preloader's line animation was hidden by the 768-991 export rules */
    /* the hero band drawing sits on the left half of the screen */
  html.page-index .animation-wrapper.z-11 [data-animation-type="lottie"] {
    top: 0 !important;
    left: 0 !important;
    transform: none !important;
    min-width: 0 !important;
    min-height: 0 !important;
    width: 50vw !important;
    height: 100% !important;
  }
  /* the footer drawing too: left-bound to the SCREEN edge, half the screen
     wide — it escapes its centred column like the hero band does */
  .section-2 .div-block-2 > .code-embed.lottie.absolute2.block {
    width: 50vw !important;
    margin: 32px 0;
    align-self: flex-start;
    /* the column is a fixed 500px, centred — this pulls the drawing's left
       edge onto the screen edge at any landscape width */
    margin-left: calc((500px - 100vw) / 2);
  }
  /* and the Contact button keeps clear air above the wordmark */
  .section-2 > .overflow-hidden.section_footer-cta { padding-bottom: 48px; }
  /* the background video runs 16:9 instead of a viewport crop */
  .section_about .image-26.h-vh,
  .section_about video.image-26 {
    height: auto !important;
    aspect-ratio: 16 / 9;
  }
  .section_about .img-holder { height: auto !important; }
}

/* project-card KPI tiles on the phone: the reference geometry — flat 2:1
   tiles (min 70px), 12px inset, 12/17px type, 20px gap — instead of the
   padded squares they had grown into */
@media (max-width: 767px) {
  .project-box .project-box-wrapper2 { gap: 20px !important; }
  .project-box .project-box-wrapper2 .box-1 > .box-inner {
    padding: 12px !important;
    min-height: 70px !important;
  }
  .project-box .project-box-wrapper2 .box-heading { font-size: 12px !important; line-height: 1.2 !important; }
  .project-box .project-box-wrapper2 .box-inner p,
  .project-box .project-box-wrapper2 .box-inner .heading-010,
  .project-box .project-box-wrapper2 .box-inner .text-size-xlarge,
  .project-box .project-box-wrapper2 .box-inner .text-block-2 {
    font-size: 17px !important;
    line-height: 17px !important;
  }
}

/* KPI contour-box labels: one weight everywhere — the plates over the orange
   figure ran semibold (.paragraph is 600) while the small plates' heading-6
   runs 400 */
.box-wrapper .box-1 > .box-inner .paragraph,
.track-sec .box-1 > .box-inner .paragraph,
.box-wrapper .box-1 > .box-inner p,
.track-sec .box-1 > .box-inner p { font-weight: 400 !important; }

/* experience-tile logos: every file now lives on the same 560x494 canvas —
   one render rule makes every tile identical (plain img and picture-wrapped
   alike): the canvas fills the tile, the scale lifts the artwork to its
   presence; canvas margins are transparent, so the overflow is invisible */
.client-sec .div-block-25 .box-1 .box-inner img.image-7,
.client-sec .div-block-25 .box-1 .box-inner picture.image-7,
.client-sec .div-block-25 .box-1 .box-inner picture.image-7 img {
  width: 100% !important;
  height: auto !important;
  max-height: none !important;
}
.client-sec .div-block-25 .box-1 .box-inner img.image-7,
.client-sec .div-block-25 .box-1 .box-inner picture.image-7 {
  display: block;
}
/* ZURÜCKGENOMMEN (Rückmeldung 3. August): hier stand `transform: scale(1.55)`.
   Die Annahme darüber — „die Ränder der Zeichenfläche sind durchsichtig, der
   Überstand fällt also nicht auf" — gilt nur für Logos, deren Tinte klein gegen
   die 560×494-Fläche ist. FRESHFIELDS füllt die Fläche fast ganz aus: gemessen
   bei 1600px 274px Logo in einer 209px-Kachel, 65px Überstand, den
   `overflow: hidden` abschneidet. In Firefox und Safari war das Wortzeichen
   dadurch an beiden Seiten ab. Die Logos laufen jetzt in der Größe, die ihre
   Dateien vorgeben. */
.client-sec .div-block-25 .box-1 .box-inner picture.image-7 img { transform: none; }

/* --------------------------------------------------------------------------
   42. Round 33 — self-review pass
   -------------------------------------------------------------------------- */
/* section headings all carry the same weight: the reference left „How we do
   it" and „Impact" at 500 while every other one runs 600, which read as a
   smaller headline (and made its slash look oversized beside it) */
h2.text-size-xlarge,
h2.text-size-xlarge strong { font-weight: 600 !important; }
/* the footer claim never fades in — it is part of the plate, not a reveal */
.footer-inner, .footer-cta_headline, .footer-cta_headline-wrapper {
  opacity: 1 !important;
  transform: none !important;
}
/* THE cap on the experience role tiles: the export pins `.box-inner.h-auto`
   to `max-height: 76px`. A wrapping role needs ~78px, so it spilled past the
   tile edge — no padding could fix that, the ceiling had to go. The tile now
   grows with its text and keeps a real 20px floor; the row's equal-height
   chain lifts every sibling to the same height. */
.client-sec .box-1 .box-inner.h-auto,
.client-sec .box-1 .box-inner.h-auto.center {
  max-height: none !important;
  min-height: 76px !important;
  height: auto !important;
  padding-top: 20px !important;
  padding-bottom: 20px !important;
}
/* Section headings are one size per band. The export staffs `.text-size-xlarge`
   by whatever utility classes a heading happens to carry — below 992 the same
   section-heading role rendered at 20px (`.text-color-primary`), 26px (`+.my-0`)
   or 32px, which is why „Impact" read much smaller than „Specialized Bickel &
   Company team" right next to it. Hero titles keep their own scale. */
@media (min-width: 768px) and (max-width: 991px) {
  h2.text-size-xlarge:not(.text-color-white),
  .focus_label-text h2.text-size-xlarge,
  .about_label-text h2.text-size-xlarge { font-size: 26px !important; }
}
@media (max-width: 767px) {
  h2.text-size-xlarge:not(.text-color-white),
  .focus_label-text h2.text-size-xlarge,
  .about_label-text h2.text-size-xlarge { font-size: 24px !important; }
}

/* --------------------------------------------------------------------------
   47. The interview video. It takes the exact box the portrait had — the page's
   own image class still carries width, ratio and cover — and adds only what a
   player needs: a black ground while it buffers, and the decorative layers of
   the block stepping aside during playback so the native control bar is
   reachable and the picture is not veiled.
   -------------------------------------------------------------------------- */
video.bc-interview {
  display: block;
  width: 100%;
  object-fit: cover;
  background-color: #000;
}
/* `visibility`, nicht nur `opacity`: eine laufende opacity-Transition steht in
   der Kaskade über jeder !important-Angabe — bleibt sie hängen (gedrosselte
   Tabs), hielte sie die Deckschicht sichtbar über dem Film. */
.video-banner.is-playing .focus_card-overlay,
.video-banner.is-playing .video-text,
.video-banner.is-playing .video-btn,
.div-block-22.is-playing .link-block-4 {
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
}
/* the play affordance is a button, not a link target — the click starts the
   film, it never navigates */
.video-banner .video-btn,
.div-block-22 .link-block-4 { cursor: pointer; }

/* --------------------------------------------------------------------------
   48. „Wer wir sind" liest im Schriftschnitt des Ansatz-Fließtextes (400 statt
   500). Nur der Schnitt — Größe und Zeilenhöhe des Blocks bleiben.
   -------------------------------------------------------------------------- */
html.page-about-us .heading-style-h5.text-color-primary.fs-medium.text-start {
  /* identisch zum Ansatz-Fließtext (.paragraph-5), gemessen 24px/400/28px —
     „Wer wir sind" lief auf 32px/500/36px */
  font-size: 24px !important;
  line-height: 28px !important;
  font-weight: 400 !important;
}
@media (min-width: 992px) and (max-width: 1365px) {
  /* im Zoom-Band führt .paragraph-5 eine relative Zeilenhöhe (1.45) */
  html.page-about-us .heading-style-h5.text-color-primary.fs-medium.text-start {
    line-height: 1.45 !important;
  }
}
@media (max-width: 767px) {
  html.page-about-us .heading-style-h5.text-color-primary.fs-medium.text-start {
    font-size: 16px !important;
    line-height: 20px !important;
  }
}

/* --------------------------------------------------------------------------
   49. Rein technische Korrekturen aus den zurückgedrehten Runden. Jede behebt
   ein defektes Verhalten, keine ändert Typo, Abstände, Größen oder Raster.
   -------------------------------------------------------------------------- */

/* (a) Die Pfeile der Selected Experiences gehören zum Slider — und der lebt nur
   unter 780px (ab dort übernimmt das Grid, gemessen). Vorher entschied JS aus
   einer Messung, die zu früh lief und deren Urteil hängen blieb: die Pfeile
   standen unter einem Grid ohne Slider. */
@media (min-width: 780px) {
  .arrow-wrapper.exp-arrows { display: none !important; }
}

/* (b) Der Preloader deckt jeden Bildschirm voll ab. Der Export macht die Szene
   unter 992px transparent (weißer Balken) und schaltet die Linien-Animation
   dort ganz ab; und die Regeln, die die Hero-Zeichnung je Band verschieben,
   trafen über den geteilten Klassennamen auch die Preloader-Ebene. */
/* Die Fläche des Preloaders bleibt DURCHSICHTIG, das Schwarz liegt darunter.
   Sie stand auf `background-color: #000` bei z-index 10000 — und deckte damit die
   Swoosh-Zeichnung ab, die bei z-index 11 dahinter läuft. Auf dem Telefon ist das
   die einzige Animation des Ladeschirms: `code-embed-14` (die Linien des Desktops)
   ist unter 480px ausgeblendet, `code-embed-13` (der mobile Swoosh) läuft.
   Am eingefrorenen ersten Rebuild bei 390px nachgemessen: dort war die Fläche
   `rgba(0,0,0,0)` und der Swoosh 1500×844 sichtbar — genau der Stand, den es
   „schon mal" gab. Das Schwarz kommt jetzt von `html`, also unter der Zeichnung;
   die Wortmarke sitzt im Scene und bleibt darüber. Die Seite selbst ist ohnehin
   nicht zu sehen: `.page-wrapper` steht während des Ladens auf
   `visibility: hidden` — dafür brauchte es die deckende Fläche nie. */
html.is-preloading,
html.is-preloading body { background-color: #000 !important; }
.preloader.scene,
#scene.preloader.scene { background-color: transparent !important; }
/* Die Linien-Animation läuft auf jedem Schirm — der Export schaltet sie unter
   992px ab. Auf dem Handy aber nicht in der Desktop-Komposition: die Ebene ist
   dort auf „cover" gerechnet (177vh breit), vom X-Muster wäre nur ein schmaler
   Streifen der Mitte zu sehen. Unter 992px passt die Zeichnung deshalb
   vollständig ins Bild. */
#scene .animation-wrapper {
  top: 0 !important;
  left: 0 !important;
  height: 100% !important;
}

/* (c) Ein flaches Desktop-Fenster ist kein liegendes Handy: die Landschafts-
   Regeln greifen nur noch bis 991px Breite. Bei 1100x500 wurde sonst der
   Handy-Sonderfall aktiv (Hero 170vh, Zeichnung um 90vh verschoben). */

/* (d) Jede Marke füllt genau ihre Slide. Die Gegen-Skalierung, die vorher in den
   Zoom-Bändern lag, schob die Grafik 25px darüber hinaus — die Platte der
   Nachbar-Slide malte darüber, was als „Logos abgeschnitten" ankam. */
.myswiper3 .swiper-slide img,
.myswiper5 .swiper-slide img,
.myswiper6 .swiper-slide img {
  transform: none !important;
  width: 100% !important;
  height: auto !important;
  max-width: 100% !important;
  max-height: 100% !important;
  object-fit: contain;
}

/* --------------------------------------------------------------------------
   50. KPI-Boxen: Höhe der beiden Kontur-Boxen auf den Case-Seiten.
   (Die Typografie-Vereinheitlichung, die hier stand — Label auf Sublinen-Maß,
   Werte 64px, halbierte Wortwerte — ist zurückgenommen: sie hat das iPad-Raster
   auseinandergezogen. Die Größen kommen wieder vollständig aus dem Export.)
   -------------------------------------------------------------------------- */
/* (c) Höhe: der Export pinnt eine dieser Boxen auf 440px, die Nachbarbox zieht
   per height:100% mit — und weil der Block als Grid-Zeile neben der hohen
   orangenen Platte steht, streckte er sich auf 486px. `align-self: start`
   nimmt die Streckung heraus, die Box kommt aus ihrem Inhalt (~250px, wie auf
   den anderen Case-Seiten) und ist damit knapp halb so hoch. */
.box-inner-wrapper .box-1.h-440,
.box-inner-wrapper .box-1.h-full {
  height: auto !important;
  align-self: start;
}
.box-inner-wrapper .box-1.h-440 > .box-inner,
.box-inner-wrapper .box-1.h-full > .box-inner { height: auto !important; }

/* --------------------------------------------------------------------------
   51. Aus der Änderungsliste: Nr. 9 — Abstand Sektions-Headline zum Inhalt
   beim Client-Feedback auf das Maß der übrigen Sektionen (40 statt 70px).
   -------------------------------------------------------------------------- */
.feedback-row { padding-top: 40px !important; }
@media (max-width: 991px) { .feedback-row { padding-top: 20px !important; } }

/* --------------------------------------------------------------------------
   52. Footer wie im abgenommenen Stand: der Claim bleibt einzeilig und passt
   in die Breite, Subline und Button sitzen höher, und der Inhalt passt in
   einen Screen (main.js §2 nimmt zuerst die Oberkante, dann skaliert es).
   Die Bandgrößen stehen in px: Safari skaliert vw im Zoom-Wrapper nicht, dort
   malte `4.3vw` den Claim rund 1.4x zu groß — daher lief er zu breit.
   -------------------------------------------------------------------------- */
@media (min-width: 992px) and (max-width: 1365px) {   /* zoom .7 */
  .footer-cta_headline { font-size: 66px !important; white-space: nowrap !important; }
  .section-2 .div-block-2 { padding-top: 24px !important; }
}
@media (min-width: 1365px) and (max-width: 1850px) {  /* zoom .8 */
  .footer-cta_headline { font-size: 76px !important; white-space: nowrap !important; }
  .section-2 .div-block-2 { padding-top: 28px !important; }
}
@media (min-width: 1851px) {
  .footer-cta_headline { font-size: 86px !important; white-space: nowrap !important; }
}




/* --------------------------------------------------------------------------
   56. KPI-SEKTIONEN = EXPORT (Webflow-Referenz).
   Über viele Runden sind hier 135 eigene Regelzeilen für die KPI-Boxen
   entstanden. Statt sie einzeln zu entfernen (und dabei eine zu übersehen),
   werden die Boxen an dieser Stelle geschlossen auf die Werte des Exports
   gesetzt — site.css IST das CSS der Referenz, die Werte stammen daraus.
   Gemessen an der Referenz bei 1194px, Startseite Track Record:
   Label 16px/600/18px, Label-Box 110px mit 32/40-Inset, Platte 40px-Inset,
   Figur 72px/600/72px, weiße Box 40px, Zellen 482/482/482.
   -------------------------------------------------------------------------- */
/* NACHTRAG: rundum 40px statt `32px 40px`. Der Text stand oben 32px vom Rahmen,
   links 40 — die weiße Box daneben führt 40 auf allen Seiten, und genau dieser
   Unterschied war sichtbar. Die Kästen werden dadurch 16px höher; die Reihe
   gleicht sich über das Raster aus. */
.box-wrapper .box-1 > .box-inner,
.track-sec .box-1 > .box-inner { padding: 40px !important; }
.box-wrapper .box-1 > .box-inner.h-110,
.track-sec .box-1 > .box-inner.h-110 { height: 110px !important; }
.box-wrapper .box-1 > .box-inner.h-195,
.track-sec .box-1 > .box-inner.h-195 { height: 195px !important; }

.box-wrapper .box-1 > .box-inner .paragraph,
.track-sec .box-1 > .box-inner .paragraph {
  font-size: 16px !important;
  line-height: 18px !important;
  font-weight: 600 !important;
}
.box-wrapper .box-1 > .box-inner h6.heading-6,
.track-sec .box-1 > .box-inner h6.heading-6,
.box-wrapper .box-2 > h6.heading-6,
.track-sec .box-2 > h6.heading-6 {
  font-size: 16px !important;
  line-height: normal !important;
  font-weight: 400 !important;
}
.box-wrapper .box-1 > .box-inner h6.heading-6.fs-semibold,
.track-sec .box-1 > .box-inner h6.heading-6.fs-semibold { font-weight: 600 !important; }
.box-wrapper .box-1 > .box-inner .text-size-xlarge,
.track-sec .box-1 > .box-inner .text-size-xlarge {
  font-size: 48px !important;
  line-height: 52px !important;
  font-weight: 500 !important;
}
.track-sec .box-1 > .box-inner .heading-010 {
  font-size: 26px !important;
  line-height: 26px !important;
  font-weight: 600 !important;
}
.box-wrapper .box-2,
.track-sec .box-2 { padding: 40px !important; }
.box-wrapper .box-2 .text-block-2,
.track-sec .box-2 .text-block-2,
.box-wrapper .box-2 .text-block-2.fs-60,
.track-sec .box-2 .text-block-2.fs-60 {
  font-size: 72px !important;
  line-height: 72px !important;
  font-weight: 600 !important;
}
.box-wrapper .box-3 { padding: 40px !important; }

/* die Bänder des Exports */
@media (max-width: 991px) {
  .box-wrapper .box-2, .track-sec .box-2 { padding-left: 20px !important; padding-right: 20px !important; }
  .box-wrapper .box-3 { padding-left: 20px !important; padding-right: 20px !important; }
}
@media (max-width: 767px) {
  .box-wrapper .box-2 .text-block-2.fs-60._w-400,
  .track-sec .box-2 .text-block-2.fs-60._w-400 { font-size: 48px !important; line-height: 48px !important; }
  .box-wrapper .box-1 > .box-inner .heading-010,
  .track-sec .box-1 > .box-inner .heading-010 { font-size: 26px !important; line-height: 26px !important; }
  .box-wrapper .box-3 { padding-left: 24px !important; padding-right: 20px !important; }
}
@media (max-width: 479px) {
  .box-wrapper .box-1 > .box-inner,
  .track-sec .box-1 > .box-inner { padding: 20px !important; }
  .box-wrapper .box-2, .track-sec .box-2 { padding: 20px !important; }
  .box-wrapper .box-3 { padding: 20px !important; }
  .box-wrapper .box-1 > .box-inner .paragraph,
  .track-sec .box-1 > .box-inner .paragraph { font-size: 13px !important; line-height: 13px !important; }
  .box-wrapper .box-2 .text-block-2,
  .track-sec .box-2 .text-block-2 { font-size: 44px !important; }
  .box-wrapper .box-2 .text-block-2.fs-60,
  .track-sec .box-2 .text-block-2.fs-60 { font-size: 40px !important; line-height: 56px !important; }
  .box-wrapper .box-1 > .box-inner .heading-010,
  .track-sec .box-1 > .box-inner .heading-010 { font-size: 17px !important; line-height: 17px !important; }
}

/* --------------------------------------------------------------------------
   57. ZWEI GETRENNTE ZUSTÄNDIGKEITEN.
   Die KPI-Boxen und die Projektkarten teilen sich im Export dieselben Klassen
   (.box-1, .box-inner, .heading-010, .text-size-xlarge). Über die Runden haben
   sich deshalb Regeln gegenseitig getroffen. Ab hier gilt: alles, was die KPI
   betrifft, hängt an `.box-wrapper` / `.track-sec` — alles, was die Karten
   betrifft, an `.project-box`. Keine Regel spricht beide an.
   -------------------------------------------------------------------------- */

/* (a) KPI: eine Beschriftung für beide Kastentypen.
   Gemessen vorher auf for-lenders: „Bankability secured" 18px/600/22px in der
   h-110-Box gegen „Average adj. EBITDA margin uplift" 16px/600 in der h-195-Box. */
.box-wrapper .box-1 > .box-inner .paragraph,
.box-wrapper .box-1 > .box-inner > h6.heading-6,
.box-wrapper .box-1 > .box-inner.h-110 > p,
.track-sec .box-1 > .box-inner .paragraph,
.track-sec .box-1 > .box-inner > h6.heading-6,
.track-sec .box-1 > .box-inner.h-110 > p {
  font-size: 16px !important;
  line-height: 18px !important;
  font-weight: 600 !important;
}

/* (b) Die Kästen tragen die Höhe des Exports als MINDESTmaß, nicht als festes.
   So bleibt die Referenzhöhe, aber ein längeres deutsches Label läuft nicht
   über den Rahmen — es macht den Kasten auf. */
.box-wrapper .box-1 > .box-inner.h-110,
.track-sec .box-1 > .box-inner.h-110 { height: auto !important; min-height: 110px !important; }
.box-wrapper .box-1 > .box-inner.h-195,
.track-sec .box-1 > .box-inner.h-195 { height: auto !important; min-height: 195px !important; }

/* (c) Zellen einer Reihe enden bündig — und die Platte füllt dabei ihren
   Rahmen vollständig aus. Genau das verhindert die Farbbalken: sichtbar wird
   der Verlauf nur dort, wo die Innenfläche kürzer ist als ihr Rahmen. */
.box-wrapper > *:has(> .box-2),
.track-sec .box-wrapper > *:has(> .box-2) { display: flex; flex-direction: column; }
.box-wrapper > *:has(> .box-2) > .box-2,
.track-sec .box-wrapper > *:has(> .box-2) > .box-2 {
  flex: 1 1 auto;
  height: auto !important;
  min-height: 0 !important;
}
.box-wrapper .box-1,
.track-sec .box-1 { display: flex; }
.box-wrapper .box-1 > .box-inner,
.track-sec .box-1 > .box-inner { flex: 1 1 auto; width: 100%; }

/* (d) Die Zeile über dem Wert bleibt lesbar — der Export setzt sie unter 480px
   auf 10px/10px. */
@media (max-width: 479px) {
  .box-wrapper .box-2 > h6.heading-6,
  .track-sec .box-2 > h6.heading-6 { font-size: 16px !important; line-height: 20px !important; }
}

/* (e) Projektkarten: eigener Bereich. Die KPI-Regeln oben greifen hier nicht
   (sie hängen an .box-wrapper / .track-sec), und die Kartenregeln greifen
   nicht in die KPI. */
.project-box .project-box-wrapper2 .box-1 > .box-inner .box-heading { font-size: 16px !important; line-height: 20px !important; }
/* …und die eine ältere Regel mit `:has()`, die durch ihre höhere Spezifität
   noch 18px erzwang (deshalb las „Bankability secured" größer als die Label
   der Nachbarkästen) */
/* Nur die Größe, nicht die Zeilenhöhe: durch das `:has()` hatte diese Regel die
   höchste Spezifität im Feld und erzwang 18px Zeilenhöhe, während dieselben
   Label ohne h-195-Nachbarn bei §62 landeten. Daher las das Label über der
   orangenen Platte anders als die Label der Kästen daneben. Die Zeilenhöhe hat
   ab §65 genau eine Quelle. */
.box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p,
.box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
.track-sec:has(.box-inner.h-195) .box-1 > .box-inner .paragraph {
  font-size: 16px !important;
  font-weight: 600 !important;
}

/* --------------------------------------------------------------------------
   58. Kontaktbox: flacher. 4:2 ist das Ziel; wird der Text darin länger,
   wächst die Box (min-height 0, height auto) statt ihn abzuschneiden.
   -------------------------------------------------------------------------- */
.contact-box {
  aspect-ratio: 4 / 2;
  height: auto !important;
  min-height: 0 !important;
  justify-content: space-between;
}
@media (max-width: 991px) { .contact-box { aspect-ratio: 4 / 3; } }

/* --------------------------------------------------------------------------
   59. Fließtexte auf Ansatz und Über uns: ein Schnitt, eine Größe, ein
   Zeilenabstand — über alle Geräte. Light (300), auf dem iPad eine Spur
   kleiner als zuvor (24 -> 22px) und überall 1.6 Zeilenhöhe für die
   Lesbarkeit; vorher liefen sie auf 400 mit 28px festem Zeilenabstand.
   -------------------------------------------------------------------------- */
.paragraph-5,
html.page-about-us .heading-style-h5.text-color-primary.fs-medium.text-start {
  font-size: 24px !important;
  line-height: 1.6 !important;
  font-weight: 300 !important;
}
@media (min-width: 992px) and (max-width: 1365px) {
  .paragraph-5,
  html.page-about-us .heading-style-h5.text-color-primary.fs-medium.text-start {
    font-size: 22px !important;
    line-height: 1.6 !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .paragraph-5,
  html.page-about-us .heading-style-h5.text-color-primary.fs-medium.text-start {
    font-size: 20px !important;
    line-height: 1.6 !important;
  }
}
@media (max-width: 767px) {
  .paragraph-5,
  html.page-about-us .heading-style-h5.text-color-primary.fs-medium.text-start {
    font-size: 16px !important;
    line-height: 1.6 !important;
  }
}



/* --------------------------------------------------------------------------
   61. Profilseiten: kein Learn-more-Button mehr — die Pillenreihe darüber
   führt bereits in jede Sektion. Der Text rückt dafür nach unten auf, und der
   Hero ist auf Smartphones rund 40% flacher (weniger Luft über den Köpfen).
   -------------------------------------------------------------------------- */
.profile-hero .profile-learnmore { display: none !important; }
@media (max-width: 767px) {
  .profile-hero,
  .profile-hero_inner { min-height: 60vh !important; min-height: 60svh !important; }
  .profile-hero_content { padding-bottom: 24px !important; }
}

/* --------------------------------------------------------------------------
   62. KPI-Boxen und Projektkarten: ein System für alle Zahlen und Schlagworte.
   (1) Zahlenwerte sind immer größer als Kategorien und Schlagworte.
   (2) Lange Wörter brechen um und weiten die Spalte nie — das Raster bleibt.
   (3) Beschriftungen laufen eng (1.1), mehr Zeilenhöhe brauchen sie nicht.
   -------------------------------------------------------------------------- */
.box-wrapper .box-1 > .box-inner .paragraph,
.box-wrapper .box-1 > .box-inner > h6.heading-6,
.box-wrapper .box-2 > h6.heading-6,
.track-sec .box-1 > .box-inner .paragraph,
.track-sec .box-1 > .box-inner > h6.heading-6,
.track-sec .box-2 > h6.heading-6 { line-height: 1.1 !important; }

/* kein langes Wort weitet je eine Spalte */
.box-wrapper, .track-sec .box-wrapper, .box-inner-wrapper,
.project-box .project-box-wrapper2 { min-width: 0; }
.box-wrapper > *, .box-inner-wrapper > *,
.project-box .project-box-wrapper2 > * { min-width: 0; }
.box-wrapper .box-1 > .box-inner *,
.track-sec .box-1 > .box-inner *,
.project-box .project-box-wrapper2 .box-inner * {
  min-width: 0;
  /* `anywhere` ist das Einzige, was auch die *Mindestbreite* senkt: mit
     `break-word` ragte „Prozesstechnologie" bei 390px 4,2px aus der Kachel.
     Und die Silbentrennung bleibt an — im Deutschen trägt sie: ohne sie brechen
     „Gesundheitswese|n", „Kapitalerhöhun|gen", „Wiederkehrende|r" und ein
     Dutzend weitere Komposita hart um. Wo sie falsch gesetzt hat, steht sie
     gezielt ab (§101), nicht pauschal. */
  overflow-wrap: anywhere;
  hyphens: auto;
}

/* Projektkarten: die Kategorie ist ein Schlagwort, kein Wert — sie liest
   kleiner als die Zahl daneben (30px), und die Karte wird dichter. */
.project-box .project-box-wrapper2 .box-inner p.heading-010 {
  font-size: 17px !important;
  line-height: 1.0 !important;
}
.project-box .project-box-wrapper2 { gap: 12px !important; }
.project-box.p-0 { padding-bottom: 12px !important; }
@media (min-width: 992px) and (max-width: 1365px) {
  .project-box .project-box-wrapper2 .box-inner p.heading-010 { font-size: 15px !important; }
}
@media (max-width: 991px) {
  .project-box .project-box-wrapper2 .box-inner p.heading-010 { font-size: 14px !important; }
  .project-box .project-box-wrapper2 { gap: 10px !important; }
}

/* --------------------------------------------------------------------------
   63. Nach dem Wachstum kein Transform mehr auf der Platte.
   Die Platte wächst per `scaleY()`. Solange ein Transform auf dem Element
   liegt, rastert der Browser den Inhalt in einem eigenen, vertikal skalierten
   Layer — große Buchstabenstriche überstehen das, ein Dezimalpunkt von drei
   Pixeln nicht. Genau das ist die verschluckte „3.5x"-Kommastelle bei IDT.
   Ist das Wachstum durch, fällt das Transform weg und der Text wird wieder
   normal gerastert.
   -------------------------------------------------------------------------- */
.box-2.js-grow.is-grown,
.box-1.js-grow.is-grown {
  transform: none !important;
  will-change: auto !important;
}

/* --------------------------------------------------------------------------
   64. iPad-Hochformat: der Text in den KPI-Boxen steht auf derselben linken
   Kante wie die Sektionsüberschrift darüber. Gemessen lag er dort 21px weiter
   rechts (Raster bei 40, Innenabstand 40, Überschrift bei 60) — in allen
   anderen Bändern stimmte es bereits auf 1px genau.
   -------------------------------------------------------------------------- */
/* NACHTRAG: nur im HOCHformat. iPhone-Querformat (844×390) fällt nach Breite
   in dasselbe Band, hat aber keine Sektionsüberschrift auf dieser Kante — dort
   las der linke Innenabstand 19px gegen 32px oben, und der Text stand sichtbar
   dichter am Rand als am Deckel. Querformat behält die symmetrischen 40px. */
@media (min-width: 768px) and (max-width: 991px) and (orientation: portrait) {
  /* …und wo links 19 steht, steht oben auch 19: der Abstand zum Rahmen ist auf
     beiden Seiten derselbe, wie in der weißen Box. */
  .box-wrapper .box-1 > .box-inner,
  .track-sec .box-1 > .box-inner { padding-left: 19px !important; padding-top: 19px !important; padding-bottom: 19px !important; }
  .box-wrapper .box-2,
  .track-sec .box-2 { padding-left: 19px !important; }
  .box-wrapper .box-3 { padding-left: 19px !important; }
}

/* --------------------------------------------------------------------------
   65. ZEILENHÖHE, WO TEXT NUR AUS PLATZMANGEL UMBRICHT.

   Aeonik braucht gemessen 1.108 × Schriftgröße, damit sich zwei Zeilen nicht
   berühren — actualBoundingBox (Ascent + Descent) über Text mit Ober- und
   Unterlängen; die volle Fontbox liegt bei 1.167. Genau daran lief
   `line-height: 1.0`, der Wert des Exports auf Werten und Schlagworten, in sich
   hinein: 0.108 em Überschneidung, bei 72px knapp 8px. „> 3x Entry EBITDA",
   „Über Markt und historischen CAGRs", „Vorsitzender des Aufsichtsrats …" waren
   alle derselbe Fehler, nicht drei.

   Die Untergrenze ist 1.0. 1.108 ist der Worst Case — zwei Zeilen, die beide
   Ober- UND Unterlängen tragen. Die Zeilen in diesen Kästen tun das fast nie:
   „EBITDA margin" endet auf „n", „(at entry)" beginnt mit einer Klammer.
   Deshalb wird hier nicht die Regel geprüft, sondern jedes real gesetzte
   Zeilenpaar — Tinte gegen Tinte, an der Stelle, an der es steht. Wer den Wert
   anfasst, misst neu; die Sonde steht im Handoff.
   Sie gilt NUR in Kästen — dort bricht Text, weil der Kasten schmal ist, nicht
   weil der Satz es will. Fließtext behält seine eigene Ramp (§59 läuft auf 1.6).

   Ab hier hat die Zeilenhöhe in diesen Kästen genau EINE Quelle: §52, §56 und
   §57 setzen nur noch Größen. Zwei Quellen für eine Größe waren in diesem
   Projekt schon einmal die Ursache (siehe Handoff §2).
   -------------------------------------------------------------------------- */

/* (a) Beschriftungen — bisher 1.1 (§62) bzw. 18px (§57e), je nach Nachbarkasten */
.box-wrapper .box-1 > .box-inner .paragraph,
.box-wrapper .box-1 > .box-inner > h6.heading-6,
.box-wrapper .box-1 > .box-inner.h-110 > p,
.box-wrapper .box-1 > .box-inner .box-heading,
.box-wrapper .box-2 > h6.heading-6,
.box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p,
.box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
.box-wrapper:has(.box-inner.h-195) .box-2 > .heading-6,
.track-sec .box-1 > .box-inner .paragraph,
.track-sec .box-1 > .box-inner > h6.heading-6,
.track-sec .box-1 > .box-inner.h-110 > p,
.track-sec .box-2 > h6.heading-6,
.track-sec:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
.project-box .project-box-wrapper2 .box-inner .box-heading {
  line-height: 1.0 !important;
}

/* (b) Werte — Zahlen wie Schlagworte. Als Verhältnis, damit die Größen der
   Bänder (§56 setzt auf dem Telefon 48/44/40px) unangetastet bleiben und
   trotzdem überall dieselbe Untergrenze gilt. */
.box-wrapper .box-1 > .box-inner .heading-010,
.box-wrapper .box-1 > .box-inner .text-size-xlarge,
.box-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge,
.box-wrapper .box-2 .text-block-2,
.box-wrapper .box-2 .text-block-2.fs-60,
.box-wrapper .box-2 .text-block-2.fs-60._w-400,
.track-sec .box-1 > .box-inner .text-size-xlarge,
.track-sec .box-2 .text-block-2,
.track-sec .box-2 .text-block-2.fs-60,
.track-sec .box-2 .text-block-2.fs-60._w-400,
.project-box .project-box-wrapper2 .box-inner .text-size-xlarge,
.project-box .box-inner .text-block-2 {
  line-height: 1.0 !important;
}

/* (c) Der Setup-Streifen ist ein umbrechendes Flexband: seine Zeilen stießen mit
   `row-gap: 0` aneinander, die Zeilenhöhe der Einzelposten half dort nichts.
   (Die weiße Erklärbox stand hier einmal auf 1.4. Das war zu viel: sie ist die
   höchste Spalte der KPI-Reihe, die anderen Spalten strecken sich auf ihr Maß,
   und die Platten schoben die gewonnene Höhe als Lücke zwischen Untertitel und
   Wert. Ihr Text liegt im Band ohnehin auf 1.3 und damit klar über der
   Kollisionsgrenze von 1.108 — er braucht hier keine eigene Regel.) */
.setup-box .setup-strip {
  row-gap: 10px;
  line-height: 1.4;
}
.setup-box .setup-item { line-height: 1.4; }

/* (d) Kundenfeedback: die Rolle unter dem Namen. `.bold-text-14` ist 24px
   (20px auf dem Telefon) und erbte die 20px Zeilenhöhe seines <p> — Verhältnis
   0.83, der schlechteste Wert der ganzen Seite. Deshalb lief „Vorsitzender des
   Aufsichtsrats der KUKA AG" ineinander. */
.feedback-row .team-body2 p,
.feedback-row .team-body2 p .bold-text-14,
.feedback-sec2 .team-body2 p,
.feedback-sec2 .team-body2 p .bold-text-14 { line-height: 1.15 !important; }

/* (e) Profilseiten: die Rollenkachel unter dem Erfahrungslogo lief auf 1.05 */
.client-sec .box-1 .box-inner .text-block-10,
.client-sec .box-1 .box-inner .text-block-10.left { line-height: 1.0 !important; }

/* --------------------------------------------------------------------------
   66. Kein Wert läuft mehr aus seinem Kasten.
   §62 gibt jedem Wert in einer Kontur-Box `overflow-wrap: anywhere` — die
   orange Platte war nie dabei, weil die Regel an `.box-1 > .box-inner *` hängt.
   „Aktienkurs" und „übertroffen" konnten darum nicht brechen und standen über
   dem rechten Rand. Die Platte bekommt dieselbe Behandlung.
   -------------------------------------------------------------------------- */
.box-wrapper .box-2,
.track-sec .box-2 { min-width: 0; }
.box-wrapper .box-2 *,
.track-sec .box-2 * {
  min-width: 0;
  /* `anywhere` ist das Einzige, was auch die *Mindestbreite* senkt: mit
     `break-word` ragte „Prozesstechnologie" bei 390px 4,2px aus der Kachel.
     Und die Silbentrennung bleibt an — im Deutschen trägt sie: ohne sie brechen
     „Gesundheitswese|n", „Kapitalerhöhun|gen", „Wiederkehrende|r" und ein
     Dutzend weitere Komposita hart um. Wo sie falsch gesetzt hat, steht sie
     gezielt ab (§101), nicht pauschal. */
  overflow-wrap: anywhere;
  hyphens: auto;
}

/* --------------------------------------------------------------------------
   67. Die Kästen einer Reihe enden auf einer Linie.
   Der Export pinnt `.box-1.h-440` auf `min-height: 440px` (site.css). §50 nahm
   nur die Streckung heraus (`height: auto`), das Mindestmaß blieb — auf Lenzing
   stand deshalb eine 440px-Zelle neben einer 198px-Zelle in derselben Reihe.
   Das Mindestmaß fällt; die Höhe kommt aus dem Inhalt, und die Reihe gleicht
   sich über das Raster aus.
   -------------------------------------------------------------------------- */
/* Das Mindestmaß des INNEREN Kastens (`.h-195`, §57b) bleibt — sonst kommt die
   Zelle allein aus ihrem Text und liest kleiner als ihre Nachbarin.
   Die 440px des Exports waren der Versuch, „so hoch wie die Platte daneben" in
   einer festen Zahl auszudrücken. Die Zahl stimmt aber nur für eine Plattengröße:
   auf Lenzing steht die Reihe aus zwei Kästen neben einer 367px-Platte, und die
   Reihe hat dort nur eine belegte Rasterzeile von zwei. Ergebnis war ein 84px
   leeres Feld unter den Kästen — sie endeten hoch, die Platte tief.
   Statt einer Zahl also die Beziehung: eine Zeile, und die Kästen füllen sie. */
.box-inner-wrapper:has(> .box-1.h-440) {
  grid-template-rows: 1fr !important;
  grid-auto-rows: 1fr;
}
.box-inner-wrapper > .box-1.h-440,
.box-inner-wrapper > .box-1.h-full {
  min-height: 0 !important;
  height: auto !important;
  align-self: stretch !important;
}
.box-inner-wrapper > .box-1.h-440 > .box-inner,
.box-inner-wrapper > .box-1.h-full > .box-inner { height: auto !important; }

/* --------------------------------------------------------------------------
   68. Projektkarten: der Rahmen wächst mit seinem Inhalt.
   §57(c) gibt das den KPI-Boxen, hängt aber an `.box-wrapper`/`.track-sec` und
   erreicht die Karten nie. Im iPad-Hochformat war der Rahmen 50px hoch, während
   Label und Wert 108px brauchten — Label und Wert hingen unter dem Rahmen, die
   Rahmenlinie lief mitten durch die Schrift. Dieselbe Mechanik wie bei den KPI:
   die Zelle ist ein Flexcontainer, ihr Inneres füllt sie.
   -------------------------------------------------------------------------- */
.project-box .project-box-wrapper2 .box-1 { display: flex; }
.project-box .project-box-wrapper2 .box-1 > .box-inner {
  flex: 1 1 auto;
  width: 100%;
  height: auto !important;
}
/* Der Überhang darf nur dort sichtbar werden, wo die Kachel auch wachsen kann:
   unter 992px. Ab 992 deckelt `aspect-ratio: 2.6 / 1` (§40) die Höhe hart —
   bei 224px Spaltenbreite auf 86px — und das Verhältnis gewinnt gegen jedes
   `min-height` (die Höhe ist damit definit). Dort bleibt es beim Beschnitt des
   Exports, damit die Kartenproportion auf dem Desktop unangetastet bleibt.
   Der Beschnitt ist ein eigener, älterer Befund: bei 1440 braucht ein
   zweizeiliges Label plus 30px-Wert 114px in einer 86px-Kachel. Steht als
   offener Punkt im Handoff. */
@media (max-width: 991px) {
  .project-box .project-box-wrapper2 .box-1 > .box-inner { overflow: visible; }
}

/* Der Abstand unter dem Button ist derselbe wie links und rechts (30px aus dem
   Innenabstand des Rasters). Die 12px extra aus §62 kamen oben drauf. */
.project-box.p-0 { padding-bottom: 0 !important; }

/* --------------------------------------------------------------------------
   69. Startseite: „/ Bickel & Company" ist eine Sektionsüberschrift wie
   „/ Fokus" — kein eigener Rang.
   Im Band 768–991 las der Block eine Stufe größer: Überschrift 34/40.8 gegen
   26/26, Text darunter 26/26 gegen 18/24. Ursache: die Überschrift trägt
   `.text-color-white` und steht nicht in `.focus_label-text`, also griff keine
   der Bandregeln aus §46; und der Export gibt `.text-base` nur einen Wert für
   ≤767 und einen ab 992 — die Tabletlücke war nie gefüllt.
   -------------------------------------------------------------------------- */
/* Größe UND Zeilenhöhe müssen zusammen angeglichen werden: die Nachbarn liefen
   auf 26/26 (Verhältnis 1.0), die Ausnahme auf 34/40.8. Beides auf 26 und
   dieselbe Zeilenhöhe wie in den Kästen — damit sitzen Slash, Überschrift und
   Text darunter in allen sechs Sektionen im gleichen Rhythmus. Nebeneffekt, der
   zum selben Befund gehört: der dreizeilige Claim „Volle Kapazität. / Volle
   Fokussierung. / Keine Parallelmandate." stand hier ebenfalls auf 1.0 und
   berührte sich zwischen „Fokussierung" und „Keine". */
@media (min-width: 768px) and (max-width: 991px) {
  /* :is(h1, h2), seit die Hero-Überschrift eine h1 ist (11.8.): die Regel
     hing am Tag und fiel beim Umstufen aus — der Titel sprang am Telefon
     von 24 auf 26px. Das Aussehen trägt die Klasse, nicht das Tag. */
  .focus_label + :is(h1, h2).text-size-xlarge,
  h2.text-size-xlarge:not(.text-color-white),
  .focus_label-text h2.text-size-xlarge,
  .about_label-text h2.text-size-xlarge { font-size: 26px !important; line-height: 1.15 !important; }
  .heading-style-h5.text-base { font-size: 18px !important; line-height: 24px !important; }
}
@media (max-width: 767px) {
  .focus_label + :is(h1, h2).text-size-xlarge,
  h2.text-size-xlarge:not(.text-color-white),
  .focus_label-text h2.text-size-xlarge,
  .about_label-text h2.text-size-xlarge { font-size: 24px !important; line-height: 1.15 !important; }
}

/* --------------------------------------------------------------------------
   70. Case Studies: die numerierten Sektionsüberschriften sind so groß wie
   jede andere Slash-Überschrift ihrer Seite. Nur die Zahl darüber ist groß.
   Gemessen auf KUKA bei 1194: „Wirkung" (h3.heading-style-h5) 40/40 gegen
   „Kundenfeedback" und „Unternehmensinformationen" (h2.text-size-xlarge)
   29.85/35.82 — ein Drittel größer. Die Ramp ist die von `.text-size-xlarge`
   (§21/§46), damit beide in jedem Band zusammen laufen. Erkannt wird die
   numerierte Variante an der Zahl daneben, nicht an einer Seitenklasse.
   -------------------------------------------------------------------------- */
.focus_left:has(.number-text) > h3.heading-style-h5 {
  font-size: 40px !important;
  line-height: 1.2 !important;
}
@media (min-width: 768px) and (max-width: 1364px) {
  .focus_left:has(.number-text) > h3.heading-style-h5 { font-size: clamp(22px, 2.5vw, 40px) !important; }
}
@media (min-width: 768px) and (max-width: 991px) {
  .focus_left:has(.number-text) > h3.heading-style-h5 { font-size: 26px !important; }
}
@media (max-width: 767px) {
  .focus_left:has(.number-text) > h3.heading-style-h5 { font-size: 24px !important; }
}

/* --------------------------------------------------------------------------
   71. Dieselbe Untergrenze für die übrigen Kästen, die der Scan gefunden hat.
   Der Durchlauf über alle Seiten in 390/834/1194/1440 („bricht um UND
   Zeilenhöhe unter 1.11") war nach §65 nur noch hier fündig:

   - Wertsteigerungs-Hebel („Target Operating Model", „Liquiditätsmanagement",
     „Verhandlungen mit Arbeitnehmervertretern"): Kartenüberschriften auf 32/32
     bzw. 20/20. Die Karten der Startseite hatten über §46(f) längst 1.125 —
     die Hebel auf den /für-Seiten liegen in einer anderen Sektion und fielen
     durch. Ab hier tragen alle Kartenüberschriften denselben Wert.
   - Die Bildunterschrift über dem Interview („Dr. Walter Bickel – Founder
     speaking") auf 20/20.
   -------------------------------------------------------------------------- */
.focus_card-heading { line-height: 1.15 !important; }
.banner-text .bold-text-2,
.banner-text { line-height: 1.15 !important; }

/* --------------------------------------------------------------------------
   72. Die Platte: 2:1 ist eine UNTERGRENZE, kein Deckel.
   Auf Lenzing endet die Wirkungs-Reihe genau auf der Höhe, die das Verhältnis
   der Platte hergibt — sie streckt sich dort also nicht, und ihr Inhalt braucht
   mehr: 277px in einer 254px-Platte. „Ziele übertroffen" stand deshalb 22px
   tiefer als sein Innenabstand, also sichtbar aus der Platte heraus.
   `aspect-ratio` erzeugt eine DEFINITE Höhe; kein `min-height` — auch nicht
   `auto`, `min-content` oder `max-content` — holt sie auf (dieselbe Falle wie
   bei den Kartenkacheln, siehe Handoff). Das Verhältnis wandert deshalb in ein
   `min-height` in Container-Einheiten: `50cqw` ist die halbe Breite der Zelle
   und damit exakt 2:1 — aber als Boden, den der Inhalt überschreiten darf.
   -------------------------------------------------------------------------- */
.box-wrapper > *:has(> .box-2),
.track-sec .box-wrapper > *:has(> .box-2) { container-type: inline-size; }
.box-wrapper .box-2,
.track-sec .box-2 {
  aspect-ratio: auto !important;
  min-height: 50cqw !important;
}
/* der Kurzwindow-Fall aus §51 bleibt: dort läuft die Platte 4:2 statt 4:3 */
@media (max-width: 767px) and (max-height: 750px) {
  .box-wrapper .box-2,
  .track-sec .box-2 { min-height: 50cqw; }
}

/* --------------------------------------------------------------------------
   73. Der Wert der Platte sitzt auf derselben Grundlinie wie die Werte der
   Kästen daneben. Die Spalten enden seit §67 bündig; nur die Innenabstände
   liefen auseinander — die Platte 40px, die Kontur-Kästen 32px plus 1px Rahmen.
   Gemessen bei 1366: Plattenwert 8px höher als die Werte der Nachbarreihe.
   -------------------------------------------------------------------------- */
/* NACHTRAG (Desktop-Runde): der Abstand unter dem Wert soll in jeder Box so
   groß sein wie der Abstand nach links — dieselbe Regel wie bei den Kontur-Boxen.
   Die 33px hatten die Grundlinie mit den Nachbarfiguren geteilt, waren aber
   sichtbar knapper als der linke Innenabstand. Der Boden kommt jetzt aus dem
   symmetrischen `padding` des Bandes; hier bleibt nur die Klammer stehen. */

/* --------------------------------------------------------------------------
   74. Focus-Karten: 4:3 bis an das Ende des Tablet-Zooms.
   §50 endete bei 1199, das iPad Pro 12.9 quer misst aber 1366 — dort fielen die
   Karten auf das Quadrat des Desktops zurück. Gemessen: 1194 -> 4:3, ab 1200
   -> 1:1.
   -------------------------------------------------------------------------- */
@media (min-width: 1200px) and (max-width: 1366px) {
  .section_focus .focus_card.aspect-ratio,
  .section_focus .focus_card {
    aspect-ratio: 4 / 3 !important;
    height: auto !important;
  }
}

/* --------------------------------------------------------------------------
   75. Sektionstexte unter den Slash-Überschriften: eine Zeilenhöhe.
   Fünf Sublinen, drei Werte — „Bickel & Company setzt …" lief auf 25/36,
   „In komplexen …" auf 25/32.6, weil der Export sie über verschiedene
   Utility-Klassen (`text-base`, `fs-medium`, `leading-30`) staffelt. Maßgabe
   ist „In komplexen …", also 1.3.

   NACHTRAG 11.8.: die drei Selektoren hingen am Tag. Seit die Hero-Unterzeile
   eine h2 ist (h1-Umbau, 71a86ad), fiel die Regel dort aus und der
   Zeilenabstand sprang auf 15 Seiten in beiden Sprachen — bei 1024 von 27,96
   auf 36px. Dass in derselben Regel schon `h2.heading-style-h5.fs-medium`
   stand, zeigt: beide Tags waren immer gemeint. Gemessen gegen den Stand
   davor: 20 von 20 Stichproben wieder exakt auf dem alten Wert.
   -------------------------------------------------------------------------- */
:is(h2, h3).heading-style-h5.text-base,
:is(h2, h3).heading-style-h5.fs-medium,
:is(h2, h3).heading-style-h5.leading-30 { line-height: 1.3 !important; }

/* --------------------------------------------------------------------------
   76. Ein Button, eine Höhe. `.btn-case` („Ansatz", „Case Study ansehen") lief
   56px hoch, `.button.is-secondary` („Team ansehen", „Kontakt") 58px — bei
   gleicher Schriftgröße, nur mit 10px statt 16px vertikalem Innenabstand.
   Die Höhe steht dort als feste Zahl (`height: 56px`), gegen die ein
   Innenabstand nichts ausrichtet — `.button` kommt auf 58px aus 16px Abstand,
   18px/1.33 Schrift und dem 1px-Rahmen von `.is-secondary`. Also dieselbe Zahl.
   -------------------------------------------------------------------------- */
.btn-case { height: 58px !important; }

/* --------------------------------------------------------------------------
   76b. Die weiße Erklärbox: oben derselbe Innenabstand wie links.
   Der Export gibt ihr rundum 40px, §64 zieht den linken im iPad-Hochformat auf
   19px (Textkante = Kante der Sektionsüberschrift) — oben blieben 40. Dazu kam
   der Ausgleich aus main.js, der ihn im gestapelten Raster auf 0 gezogen hat:
   der Text klebte an der Oberkante. Der Ausgleich läuft jetzt nur noch, wo die
   Box wirklich neben den Label-Kästen steht, und hier kommen die beiden
   Innenabstände je Band auf dieselbe Zahl.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) {
  .box-wrapper .box-3 { padding-top: 19px !important; }
}
@media (min-width: 480px) and (max-width: 767px) {
  .box-wrapper .box-3 { padding-top: 24px !important; }
}

/* --------------------------------------------------------------------------
   77. Projektkarten auf dem Tablet: eine Karte füllt die Ansicht, die Spalten
   sind rund 350px breit — die Zahlen standen dort mit 24px so klein wie in der
   Dreier-Ansicht des Desktops. Sie laufen jetzt eine halbe Stufe größer; die
   Kategorie im ersten Kasten bleibt das Schlagwort, das sie ist.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) {
  .project-box .project-box-wrapper2 .box-inner .text-size-xlarge,
  .project-box .project-box-wrapper2 .box-inner .text-block-2 { font-size: 36px !important; }
}

/* --------------------------------------------------------------------------
   78. Die Größe muss den Knoten erreichen, der WIRKLICH malt.
   §70 hat die numerierten Sektionsüberschriften auf das Maß der übrigen
   Slash-Überschriften gesetzt — aber auf dem `h3`. Der Text steckt dort in
   `<span class="text-span-28"><strong>…</strong></span>`, und `.text-span-28`
   trägt eigene 40px (site.css). Gemalt wurden also weiter 40px, während der
   Block 29.9px meldete: „/ Herausforderung" las auf allen vier Case Studies
   ein Drittel größer als „/ Unternehmensinformationen" daneben — bei 390, 834,
   1194 und 1366.

   Das ist auch die Ursache der springenden Slashes: `slashSync` (main.js §…)
   misst korrekt den malenden Knoten. Es bekam für diese eine Überschrift 40px
   und für alle anderen 29.9px, also 32px Slash gegen 23.9px — beim Scrollen
   wurden die Slashes größer und kleiner.

   Inline-Kinder dieser Überschriften erben ab hier ihre Größe. Damit kann keine
   Utility-Klasse im Inneren die Bandgröße mehr aushebeln — und die Prüfung muss
   den gemalten Knoten messen, nicht den Block. (Meine erste Prüfung hat den
   Block gemessen und deshalb „alle gleich" gemeldet.)
   -------------------------------------------------------------------------- */
.focus_left:has(.number-text) > h3.heading-style-h5 * {
  font-size: inherit !important;
  line-height: inherit !important;
}

/* ==========================================================================
   TELEFON-RUNDE
   Alles hier ist auf ≤767px begrenzt, außer §86 (ein echter Fehler in jeder
   Größe) und §87/§88 (Preloader und Herobild). iPad und Desktop bleiben, wie
   sie in den Runden davor abgenommen wurden.
   ========================================================================== */

/* --------------------------------------------------------------------------
   79. Die Kontur-Kästen umschließen auf dem Telefon ihren Inhalt.
   Sie tragen die Mindesthöhen des Exports (110 / 195px). Auf dem Telefon ist
   der Inhalt aber kurz und `justify-content: space-between` schiebt die
   Differenz als Loch in die Mitte. Gemessen auf der Startseite und IDT:
     „Bankability gesichert"            Kasten 110, Inhalt  18  →  72px Luft
     „Eigentümer / Familie"             Kasten 195, Inhalt  38  → 117px Luft
     „Vollständige Refinanzierung"      Kasten 326, Inhalt  57  → 230px Luft
   Ohne Mindesthöhe kommt die Höhe aus dem Inhalt: der Abstand unter dem Text
   ist damit derselbe wie über ihm und links — 20px auf allen Seiten. Die Zellen
   einer Reihe bleiben über das Raster gleich hoch.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .box-wrapper .box-1 > .box-inner.h-110,
  .box-wrapper .box-1 > .box-inner.h-195,
  .track-sec .box-1 > .box-inner.h-110,
  .track-sec .box-1 > .box-inner.h-195,
  .box-inner-wrapper .box-1 > .box-inner.h-110,
  .box-inner-wrapper .box-1 > .box-inner.h-195 { min-height: 0 !important; }
}

/* --------------------------------------------------------------------------
   80. Beschriftung und Wert auf dem Telefon: weniger Zeilen.
   §41 hatte die Beschriftung auf 18px gehoben — größer als die 16px des
   Desktops. „Durchschnittliche Verbesserung der Cash Conversion (% des adj.
   EBITDA)" braucht damit vier Zeilen in einer 125px breiten Zelle. 15px ist die
   Stufe, die zwei bis drei Zeilen daraus macht, ohne kleiner zu lesen als die
   Kartenbeschriftung daneben.
   Und die langen Zahlenausdrücke: „Von -3 % auf +8 %" stand auf 48px und lief
   über VIER Zeilen (4 × 55,2px = 221px Wert in einem 326px-Kasten). Die
   Infoboxen derselben Seite zeigen ihre Zahlen längst auf 32px — das gilt jetzt
   für alle Werte der Kontur-Kästen, damit dieselbe Regel überall greift.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .box-wrapper .box-1 > .box-inner p.paragraph,
  .box-wrapper .box-1 > .box-inner > p,
  .box-wrapper .box-1 > .box-inner > h6.heading-6,
  .track-sec .box-1 > .box-inner p.paragraph,
  .track-sec .box-1 > .box-inner > p,
  .track-sec .box-1 > .box-inner > h6.heading-6,
  .box-inner-wrapper .box-1 > .box-inner > h6.heading-6 { font-size: 15px !important; }

  .box-wrapper .box-1 > .box-inner .text-size-xlarge,
  .box-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge,
  .track-sec .box-1 > .box-inner .text-size-xlarge,
  .track-sec .box-1 > .box-inner.h-195 > .text-size-xlarge,
  .box-inner-wrapper .box-1 > .box-inner .text-size-xlarge,
  .box-inner-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge { font-size: 32px !important; }
}

/* --------------------------------------------------------------------------
   81. Projektkarten auf dem Telefon: die Zahl liest deutlich größer als ihre
   Beschriftung — dasselbe Verhältnis wie im iPad-Hochformat (§77).
   Beschriftung 16px, Wert vorher 17px: praktisch gleich groß. 24px ist die
   größte Stufe, die jede Zahl einzeilig hält — gemessen an der schmalsten
   Zelle (124px Textbreite): „500 Mio. €" braucht dort 118px, bei 26px wären es
   128px und die Zeile bräche.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .project-box .project-box-wrapper2 .box-inner .text-size-xlarge,
  .project-box .project-box-wrapper2 .box-inner .text-block-2 { font-size: 24px !important; }
}

/* --------------------------------------------------------------------------
   82. Expertise-Filter: alle drei in eine Reihe.
   Das Raster hatte zwei Spalten à 160px, die dritte Pille rutschte in eine
   zweite Zeile. Drei Spalten auf der Breite der Learn-more-Pillen (103px)
   passen genau: 3 × 103 + 2 × 10 Abstand = 329px in 330px Innenmaß.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .filter-box {
    display: grid !important;
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    gap: 10px !important;
  }
  .filter-box .dropdown-2 { min-width: 0; }
  .filter-box .dropdown-toggle { padding-left: 10px !important; padding-right: 10px !important; }
  .filter-box .dropdown-toggle > div { font-size: 13px !important; white-space: nowrap; }
}

/* --------------------------------------------------------------------------
   83. Die Learn-more-Pille im Hero ist überall dieselbe.
   Auf Expertise las sie 35px hoch und 270px breit, auf Team und Über uns 46px
   und 220px. Ursache: die Regel, die auf der Expertise-Seite die Filterpillen
   in eine Reihe zwingt, hängt an `html.page-expertise .tab-box` und trifft
   damit auch die Pille im Hero. Der Hero bekommt seine Geometrie zurück.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .hero-sec2 .tab-box {
    display: inline-flex !important;
    flex-wrap: nowrap !important;
    gap: 0 !important;
  }
  .hero-sec2 .tab-box .tab-btn { flex: 0 0 auto !important; width: auto !important; }
  .hero-sec2 .tab-box .tab-inner-btn { padding: 12px !important; gap: 10px; }
  .hero-sec2 .tab-box .text-block { font-size: 16px !important; line-height: 1.4 !important; }
  .hero-sec2 .tab-box .circle-orange { width: 14px; height: 14px; }
}

/* --------------------------------------------------------------------------
   84. Kontaktbox auf dem Telefon: so hoch wie ihr Inhalt.
   §58 gibt ihr unter 992px das Verhältnis 4:3. Bei 350px Breite sind das 263px
   für 126px Inhalt — 137px Luft. `aspect-ratio` erzeugt eine definite Höhe,
   gegen die kein `min-height` ankommt (siehe Handoff), also fällt hier das
   Verhältnis. (768–991 bleibt unangetastet: dort ist der Wert abgenommen.)
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .contact-box {
    aspect-ratio: auto !important;
    min-height: 0 !important;
    height: auto !important;
  }
}

/* --------------------------------------------------------------------------
   85. Die Kundenfeedback-Box liegt auf denselben Kanten wie jede andere Box.
   Das Markup schachtelt die Feedback-Reihe IN den Überschriftenblock
   (`.focus_left.pl-40`), und der trägt seinen Innenabstand ein zweites Mal:
   gemessen bei 390px stand die Box bei x=40 mit 310px Breite, während jede
   andere Box der Seite bei x=20 mit 350px liegt. Die Überschriften bleiben, wo
   sie sind (x=40 ist dort das Maß aller Slash-Überschriften).
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .feedback-sec2 .focus_left > .feedback-row,
  .feedback-sec .focus_left > .feedback-row {
    margin-left: -20px;
    margin-right: -20px;
  }
}

/* --------------------------------------------------------------------------
   86. Die Rollenkachel auf den Profilen ist wirklich zentriert.
   `.text-block-10.left` trägt aus dem Export `padding-right: 15px` — ein Rest
   der linksbündigen Variante. Wir haben die Kachel auf zentriert umgestellt
   (§39), den Innenabstand aber stehen gelassen: der Kasten ist zentriert, der
   Text darin sitzt 7,5px links davon. Gemessen auf jeder Kachel und in jeder
   Breite genau -7px, unabhängig von der Textlänge — deshalb fiel es auf.
   Gilt in allen Größen, es ist kein Telefon-Thema.
   -------------------------------------------------------------------------- */
.client-sec .text-block-10.left,
.client-sec .div-block-31 .text-block-10 { padding-right: 0 !important; }

/* --------------------------------------------------------------------------
   87. ZURÜCKGENOMMEN — der Preloader auf dem Telefon bleibt, wie er war.
   Hier stand eine Regel, die `.code-embed-14` (die Linienzeichnung des
   Desktops) unter 480px sichtbar geschaltet hat, weil auf dem schwarzen Schirm
   „die Linienanimation fehlte".

   Das war die falsche Diagnose. Die Ausblendung unter 480px steht seit dem
   ersten Rebuild in `custom.css` und ist so gewollt: die Animation auf dem
   schwarzen Schirm ist der WORTMARKEN-WIPE (`#logoWipe`, clip-path über 2s,
   main.js §…), nicht die Linienzeichnung. Sichtbar geschaltet lief auf dem
   Telefon also die Zeichnung des Desktops — die falsche Animation.
   Nichts zu tun: der Export hat hier recht.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   88. Die Herofotos auf Über uns und Kontakt sind auf dem Telefon scharf.
   Sie liegen als Hintergrund mit `cover` auf einem hochformatigen Kasten: bei
   390pt Breite und rund 500pt Höhe deckt das Bild 1170 × 1500 Gerätepixel ab.
   Die 768er-Variante (1x) und die 1280er (2x) müssen dafür hochskaliert werden,
   quer über ein Motiv, das selbst Landschaft ist — daher der Unschärfe-Eindruck.
   Eine Stufe höher: 1280 als 1x, 2560 als 2x.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  :where(html.page-about-us) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-about-1280.jpg?v=4");
    background-image: image-set(url("/assets/media/bc-hero-about-1280.webp?v=4") 1x, url("/assets/media/bc-hero-about-2560.webp?v=4") 2x);
  }
  :where(html.page-contact) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-hero-contact-1280.jpg?v=2");
    background-image: image-set(url("/assets/media/bc-hero-contact-1280.webp?v=2") 1x, url("/assets/media/bc-hero-contact-2560.webp?v=2") 2x);
  }
}

/* --------------------------------------------------------------------------
   89. Drei Nachzieher aus der Messung von §80/§83/§85.
   (a) Die Beschriftung im h-110-Kasten ist auf einigen Seiten ein
       `p.heading-6` statt `p.paragraph` und lag deshalb weiter auf 16px —
       jetzt greift die Regel über die Klasse, nicht über die Position.
   (b) Die Learn-more-Pille auf Expertise blieb bei 44px: die Seitenregel
       `html.page-expertise .tab-box .tab-inner-btn` trägt durch das
       `html`-Element eine Spezifität höher als `.hero-sec2 .tab-box …`. Mit
       demselben Element davor gewinnt die spätere Regel.
   (c) Die Feedback-Reihe braucht ihre negativen Außenkanten mit Nachdruck —
       ein `margin: 0` aus dem Export stand davor.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .box-wrapper .box-1 > .box-inner .heading-6,
  .box-wrapper .box-1 > .box-inner .paragraph,
  .track-sec .box-1 > .box-inner .heading-6,
  .track-sec .box-1 > .box-inner .paragraph,
  .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
  .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p,
  .track-sec:has(.box-inner.h-195) .box-1 > .box-inner .paragraph { font-size: 15px !important; }

  html .hero-sec2 .tab-box .tab-inner-btn { padding: 12px !important; gap: 10px !important; }
  html .hero-sec2 .tab-box .text-block { font-size: 16px !important; line-height: 1.4 !important; }

  .feedback-sec2 .focus_left > .feedback-row,
  .feedback-sec .focus_left > .feedback-row {
    margin-left: -20px !important;
    margin-right: -20px !important;
    /* Auf Treofan ist der Überschriftenblock ein Flexcontainer: die negativen
       Kanten verschieben die Reihe dort, dehnen sie aber nicht — sie behielt
       ihre 310px Flex-Basis. Mit `flex: 1 1 auto` füllt sie die Breite. */
    flex: 1 1 auto !important;
    width: auto !important;
  }
}

/* --------------------------------------------------------------------------
   90. Telefon-Nachlese.

   (a) Kartenbeschriftung 16 -> 14px. „Adj. EBITDA-Marge bei Einstieg" brauchte
       drei Zeilen in einer 124px-Zelle; mit 14px und dem geschützten
       Leerzeichen in „Adj. EBITDA-Marge" sind es zwei, und der Umbruch fällt
       vor „bei Einstieg" (im Englischen vor „(at entry)").

   (b) Das Zitat im Kundenfeedback klebte an der weißen Box: Boxunterkante und
       Zitatoberkante lagen bei 390px auf demselben Pixel. Es bekommt denselben
       Abstand, den die Seite überall als Rhythmus nutzt.

   (c) Die Glasplatte hinter der Learn-more-Pille war 290px breit bei einer
       220px-Pille — sie stand also 35px je Seite über. Sie umschließt die Pille
       jetzt: Breite aus dem Inhalt, nicht aus der Spalte.

   (d) Die Filterleiste hatte eine leere zweite Rasterzeile (die verborgenen
       Auswahllisten): `grid-template-rows: 52px 0px` plus 10px Zeilenabstand
       ergaben unten 20px gegen 10px an den Seiten. Ohne Zeilenabstand sind alle
       vier Kanten 10px.

   (e) Im Profil-Hero steht die Berufsbezeichnung 24px über der Unterkante, ihr
       linker Abstand ist 40px. Beides auf 40.

   (f) Die Kontaktbox: 263px waren zu viel, 166px zu wenig. Die Mitte, und als
       Verhältnis zur Breite statt als feste Zahl — bei 350px sind das 210px.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  /* §57(e) setzt die Beschriftung über `.box-1 > .box-inner .box-heading` auf
     16px — eine Klasse mehr als hier, also mit derselben Kette dagegen. */
  .project-box .project-box-wrapper2 .box-1 > .box-inner .box-heading { font-size: 14px !important; }

  .feedback-row ._w-66 > .paragraph-3,
  .feedback-row .paragraph-3 { margin-top: 20px !important; }

  html .hero-sec2 .tab-box {
    width: -moz-fit-content !important;
    width: fit-content !important;
    align-self: flex-start !important;
    flex: 0 0 auto !important;
  }

  .filter-box { row-gap: 0 !important; column-gap: 10px !important; }

  .profile-hero .profile-hero_content { padding-bottom: 40px !important; }

  /* 263px waren zu viel, 166px zu wenig — die Mitte. Als flache Zahl, nicht als
     Verhältnis: der Kasten ist auf dem Telefon immer rund 350px breit, und eine
     Container-Einheit hätte hier nur eine zweite Quelle für dieselbe Höhe. */
  .contact-box { min-height: 215px !important; }
}

/* --------------------------------------------------------------------------
   91. Die großen Zahlenwerte laufen enger: 1.05 statt 1.15.

   §65 hat 1.15 als Untergrenze gesetzt, weil Aeonik im WORST CASE 1.108 ×
   Schriftgröße belegt — gemessen an Text mit voller Oberlänge UND Unterlänge
   („Ä" über „gjq"). Für die Werte in den Platten stimmt dieser Worst Case nicht:
   sie sind Zahlen und kurze Wortpaare, und ihre tatsächliche Ink-Summe je
   Zeilenpaar liegt bei rund 0.93 em.

   Pro Zeilenpaar gemessen (72px, Zeilenhöhe 82.8px = 1.15):
     „> 3x" / „Entry EBITDA"            32.0px Luft   ← „> 3x" hat keine Unterlänge
     „Ziele" / „übertroffen"            30.5px
     „3,5x" / „Entry EBITDA"            22.1px
     „6,0x" / „Aktienkurs"              20.7px
     „Entry EBITDA" / „Entry EBITDA"    18.0px       ← engstes echtes Paar („y" über „E")

   Bei 1.05 fällt jedes dieser Paare um 7.2px: das engste behält 10.8px Luft.
   Sichtbar dichter, ohne dass sich etwas berührt.

   Die Beschriftungen bleiben auf 1.15. Sie sind Lesetext, dort ist die Enge
   kein Gewinn — und sie tragen Umlaute und Unterlängen in beliebiger Kombination,
   also gilt für sie weiter der Worst Case.
   -------------------------------------------------------------------------- */
.box-wrapper .box-2 .text-block-2,
.box-wrapper .box-2 .text-block-2.fs-60,
.box-wrapper .box-2 .text-block-2.fs-60._w-400,
.track-sec .box-2 .text-block-2,
.track-sec .box-2 .text-block-2.fs-60,
.track-sec .box-2 .text-block-2.fs-60._w-400,
.box-wrapper .box-1 > .box-inner .text-size-xlarge,
.box-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge,
.box-wrapper .box-1 > .box-inner .heading-010,
.track-sec .box-1 > .box-inner .text-size-xlarge,
.track-sec .box-1 > .box-inner.h-195 > .text-size-xlarge,
.track-sec .box-1 > .box-inner .heading-010,
.box-inner-wrapper .box-1 > .box-inner .text-size-xlarge,
.box-inner-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge,
.project-box .project-box-wrapper2 .box-inner .text-size-xlarge,
.project-box .project-box-wrapper2 .box-inner p.heading-010,
.project-box .box-inner .text-block-2 { line-height: 1.0 !important; }

/* Nachtrag zu §91, zweite Fassung: die Wortklasse geht mit auf 1.0.
   Sie stand hier eine Runde lang auf 1.15, weil die engsten echten Zeilenpaare
   Schlagworte auf 17px waren („3 Kapitalerh/öhungen") — dort bricht der Satz
   mitten im Wort und Unterlänge trifft Oberlänge. Der Kunde will eine Stufe für
   alles in den Kästen, und nachgemessen hält sie: über 1107 echte Zeilenpaare
   (18 Seiten × 10 Breiten) keine Kollision, engstes Paar 1,0px. Wer das anfasst,
   misst neu — die Sonde steht im Handoff. */
.box-wrapper .box-1 > .box-inner .heading-010,
.track-sec .box-1 > .box-inner .heading-010,
.box-inner-wrapper .box-1 > .box-inner .heading-010,
.project-box .project-box-wrapper2 .box-inner p.heading-010 { line-height: 1.0 !important; }

/* --------------------------------------------------------------------------
   92. Das Interview liegt auf der Breite des Organigramms.
   Gemessen (CSS-px, Zoom herausgerechnet): das Organigramm auf der Ansatz-Seite
   ist 75 % seines Elternelements und zentriert — 1260 von 1680 bei 1440px, 1485
   von 1980 bei 1680px, 1350 von 1800 bei 1920px. Das Interview lief auf 100 %.
   Die 75 % stehen im Export auf `.image-38.infographic`; hier dieselbe Zahl auf
   der Bühne des Interviews, damit alles darin — Video, Verlauf, Bildunterschrift,
   Play-Taste — zusammen wandert.

   Ab 1200px, also auf echten Desktop-Fenstern. Das Organigramm ist zwar schon ab
   992px auf 75 %, aber das iPad-Querformat (1194) ist abgenommen und bleibt, wie
   es ist — wenn es dort mitziehen soll, ist es diese eine Zahl.
   -------------------------------------------------------------------------- */
@media (min-width: 1200px) {
  .video-banner-sec .video-banner {
    width: 75%;
    margin-left: auto;
    margin-right: auto;
  }
}

/* --------------------------------------------------------------------------
   93. Projektkarten: die Kachel füllt ihre Rasterzeile.
   Gemessen bei 1440: die Zeilenspur ist 137px hoch (§31), die Kachel durch
   `aspect-ratio: 2.6/1` bei 224px Spaltenbreite aber nur 85px. Unter jeder
   Kachel standen also 52px Totraum — und weil `align-content: start` die Reihe
   oben andockt, las sich der Zwischenraum zwischen den beiden Kachelreihen als
   64px, während zwischen den Spalten 12px stehen. Derselbe Totraum machte den
   Abstand zur unteren Kartenkante zu 82px statt der 30px an den Seiten.

   Und derselbe Deckel schnitt Text ab: „Adj. EBITDA margin (at entry) / 5 %"
   braucht 110px in einer 85px-Kachel, `overflow: hidden` nahm den Rest
   unsichtbar weg (1366: 31px, 1440: 25px, 1920: 18px).

   Die Kachel streckt sich jetzt auf ihre Spur. Die Karte wird dadurch nirgends
   höher — die Spur war ja schon 137px — der Totraum wandert nur nach innen:
   Reihenabstand 12px = Spaltenabstand, unterer Rand 30px = seitlicher Rand,
   und 137px sind mehr als die 110px, die der Inhalt braucht.
   -------------------------------------------------------------------------- */
.project-box .project-box-wrapper2 .box-1 {
  aspect-ratio: auto !important;
  align-self: stretch;
  height: auto;
}
/* Der Wert schließt unten bündig ab. `.box-inner` verteilt Label und Wert mit
   `space-between`; ein Außenabstand am letzten Kind verschob den Wert um 6px
   gegen den Nachbarn — „Machinery" stand tiefer als „6.0 k". */
.project-box .project-box-wrapper2 .box-1 > .box-inner > *:last-child {
  margin-bottom: 0 !important;
}

/* --------------------------------------------------------------------------
   94. Desktop: die Label in den KPI-Boxen lesen eine Stufe größer.
   16px waren gegen die 48–72px-Figuren daneben zu leise. 18px, und zwar an
   allen drei Stellen, die dasselbe Label sind: im Kontur-Kasten oben
   („Average project exit vs. entry adj. EBITDA", „Bankability secured"), im
   Info-Kasten der Case Studies („Owned by", „Revenue (at entry)") und auf der
   Platte („Over an average of 3 years").
   Erst ab 1200px — das Telefon hat seine eigene, bewusst kleinere Stufe, und
   iPad-Querformat (1194) bleibt, wie abgenommen.
   -------------------------------------------------------------------------- */
@media (min-width: 1200px) {
  .box-wrapper .box-1 > .box-inner.h-110 > p,
  .track-sec .box-1 > .box-inner.h-110 > p,
  .box-wrapper .box-1 > .box-inner.h-195 > h6.heading-6,
  .track-sec .box-1 > .box-inner.h-195 > h6.heading-6,
  .box-wrapper .box-2 > .heading-6,
  .track-sec .box-2 > .heading-6 {
    font-size: 18px !important;
    /* Zeilenhöhe: siehe §141 — Beschriftungen laufen überall auf 1.0 */
    line-height: 1.0 !important;
  }
}

/* --------------------------------------------------------------------------
   95. Desktop: die orangene Platte läuft 4:3 statt 2:1.
   Als Untergrenze in Container-Einheiten, nicht als `aspect-ratio` — der
   erzeugt eine definite Höhe, die kein Inhalt mehr aufmachen kann (§72).
   75cqw sind drei Viertel der Zellbreite und damit genau 4:3.

   Die Selektorform ist nicht zufällig: §45(c) hält die Platte mit
   `.box-wrapper > *:has(> .box-2) > .box-2 { min-height: 0 !important }` klein,
   damit sie ihren Rahmen per `flex: 1 1 auto` vollständig ausfüllt. `:has()`
   zählt in die Spezifität — ein `.box-wrapper .box-2` verliert dagegen, auch
   mit `!important`. Deshalb hier dieselbe Kette. (Das erklärt auch, warum die
   Platte vorher *gar kein* Verhältnis mehr hatte: ihre Höhe kam allein aus der
   Streckung in der Spalte, gemessen 1.51:1 bei 1194 und 2.22:1 bei 1920.) */
@media (min-width: 1200px) {
  .box-wrapper > *:has(> .box-2) > .box-2,
  .track-sec .box-wrapper > *:has(> .box-2) > .box-2 { min-height: 75cqw !important; }
}

/* --------------------------------------------------------------------------
   96. Desktop: die Werte in den Case-Study-Kästen sind so groß wie die Figuren,
   für die sie stehen. „€ 130 m" und „€ 280 m" liefen auf 48px gegen die 72px
   der Platte daneben — eine halbe Stufe zu klein für dieselbe Aussage. 60px,
   einheitlich für jeden Wert in diesen Kästen, damit „€ 2.6 bn", „8.0 k",
   „< 10%" und „2024 – 2025" dieselbe Stimme behalten.
   -------------------------------------------------------------------------- */
@media (min-width: 1200px) {
  .box-wrapper .box-1 > .box-inner .text-size-xlarge,
  .track-sec .box-1 > .box-inner .text-size-xlarge {
    font-size: 60px !important;
    line-height: 1.05 !important;
  }
}

/* --------------------------------------------------------------------------
   97. Der Footer endet unten so weit vom Text wie links.
   Gemessen: der linke Innenabstand des Copyright-Zeile ist 60px, der Abstand
   von ihrer Unterkante zur Footer-Kante 70px — die 60px `padding-bottom` plus
   der Rest der Zeilenbox unter den Glyphen. Der Innenabstand geht auf 50px,
   damit die *sichtbare* Luft auf beiden Seiten 60px misst.
   -------------------------------------------------------------------------- */
/* (Der Wert steht oben bei der Regel, die ihn schon immer besaß.) */

/* --------------------------------------------------------------------------
   98. Die Reiter im Profil-Hero sind dieselben wie in den anderen Heroes.
   Gemessen bei 1440: `/private-equity` führt 53px hohe Reiter mit 16px
   Innenabstand, die Profile 47px mit 13px/18px. Gleiche Geometrie, gleicher
   Rhythmus — die Schriftgröße war schon identisch (18px).
   -------------------------------------------------------------------------- */
.profile-hero .profile-hero_tab {
  padding: 16px !important;
  min-height: 53px;
  display: inline-flex;
  align-items: center;
}

/* --------------------------------------------------------------------------
   99. Das Interview läuft 16:9.
   Der Export gibt dem Video nur `width: 100%` und `object-fit: cover`; die Höhe
   kam aus `min-height: 400px` plus dem, was der Kasten hergab — gemessen
   1260×924, also 1.36:1. Der Film selbst ist 16:9; alles andere beschneidet ihn.
   -------------------------------------------------------------------------- */
.video-banner video.bc-interview,
video.bc-interview {
  aspect-ratio: 16 / 9;
  height: auto !important;
  min-height: 0 !important;
}

/* --------------------------------------------------------------------------
   100. Die Play-Taste antwortet auf den Zeiger — im Ton der übrigen Flächen:
   das Bild zieht leicht an, die Taste selbst wächst mit.
   -------------------------------------------------------------------------- */
/* (ersetzt durch §100 weiter unten) */

/* --------------------------------------------------------------------------
   101. Zwei Stellen, an denen die Silbentrennung falsch lag — und nur diese.
   Sie bleibt sonst überall an (§62/§66), weil sie im Deutschen die langen
   Komposita rettet. Aber:
   (a) Das Label der Projektkarten trennte „EBITDA margin (at en-/try)". Die
       Klammer ist eine Einheit; sie steht im Markup mit geschütztem Leerzeichen
       zusammen, und ohne Trennung fällt der Umbruch an die Leerstelle davor.
   (b) Der Wert der Platte trennte „Targets exceed-/ed", obwohl beide Wörter
       einzeln in die Zeile passen. Ein Wert wird nicht getrennt — er bricht am
       Wortende oder gar nicht.
   -------------------------------------------------------------------------- */
.project-box .project-box-wrapper2 .box-1 > .box-inner .box-heading,
.project-box .project-box-wrapper2 .box-1 > .box-inner .box-heading * {
  hyphens: manual !important;
}
.box-wrapper .box-2 .text-block-2,
.box-wrapper .box-2 .text-block-2 *,
.track-sec .box-2 .text-block-2,
.track-sec .box-2 .text-block-2 * {
  hyphens: manual !important;
}

/* --------------------------------------------------------------------------
   100. Die Play-Taste und ihre Bewegung nach der Vorlage
   (21st.dev, „Video Thumbnail Player" von Ravi Katiyar). Aus der laufenden
   Vorschau ausgelesen, nicht geschätzt:

     Taste   rounded-full bg-white/20 backdrop-blur-sm
             transition-all duration-300 group-hover:scale-110
             group-hover:bg-white/30
     Bild    transition-transform duration-300 group-hover:scale-105
     Icon    lucide „play" — Polygon 6 3 / 20 12 / 6 21, weiß gefüllt,
             halb so groß wie die Taste (32 in 64)

   Tailwinds Voreinstellungen dahinter: `duration-300` = 300ms,
   `backdrop-blur-sm` = 4px, Zeitkurve `cubic-bezier(.4, 0, .2, 1)`.
   Ausgelöst wird alles vom *Rahmen* (`group-hover`), nicht von der Taste —
   wer irgendwo über den Film fährt, sieht beides.

   Die Größe bleibt bei 120px (60 auf dem Telefon). Die Vorlage führt 64px in
   einem 640px breiten Rahmen, also 10 % der Breite — unser Rahmen ist 1260px
   breit, 120px sind dort dasselbe Verhältnis. Übernommen ist der Entwurf, nicht
   die absolute Zahl aus einer schmaleren Bühne.

   Es gibt zwei Bauarten derselben Taste im Export: `.video-btn` auf about-us
   und Walters Profil, `.link-block-4` auf den übrigen neun Interviews. Beide
   tragen jetzt dieselbe Taste und dasselbe Verhalten.
   -------------------------------------------------------------------------- */
.video-banner,
.div-block-22 { overflow: hidden; }

.video-banner .video-btn,
.div-block-22 .link-block-4 {
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 9999px;
  background-color: rgba(255, 255, 255, .2) !important;
  -webkit-backdrop-filter: blur(4px) !important;
          backdrop-filter: blur(4px) !important;
  transition: transform .3s cubic-bezier(.4, 0, .2, 1),
              background-color .3s cubic-bezier(.4, 0, .2, 1);
}
/* `.link-block-4` trug im Export nur eine Position — Maß und Fläche kommen von
   hier, damit beide Bauarten deckungsgleich sind */
.div-block-22 .link-block-4 { width: 120px; height: 120px; }

.video-banner .play-btn,
.div-block-22 .play-btn {
  width: 50%;
  height: 50%;
  fill: #fff;
  stroke: #fff;
  display: block;
}
/* Walters Profil liefert denselben Knopf über `.code-embed-9` aus (alle anderen
   Seiten: `.code-embed-7`). Ohne diese Klasse fehlte dort die zentrierende
   Fläche, und das Dreieck saß 18,3px links der Kreismitte — gemessen in WebKit,
   während es auf /about-us/ mit identischem SVG bei 0,0 lag. Beide Bauarten
   tragen jetzt dieselbe Regel. */
.video-banner .code-embed-7,
.video-banner .code-embed-9,
.div-block-22 .code-embed-7,
.div-block-22 .code-embed-9 {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

.video-banner video.bc-interview,
.div-block-22 video.bc-interview {
  transition: transform .3s cubic-bezier(.4, 0, .2, 1);
}
.video-banner:hover video.bc-interview,
.div-block-22:hover video.bc-interview { transform: scale(1.05); }
.video-banner:hover .video-btn,
.div-block-22:hover .link-block-4 {
  transform: scale(1.1);
  background-color: rgba(255, 255, 255, .3) !important;
}
/* `.link-block-4` steht im Export mittig per `translate(-50%, -50%)` — die
   Skalierung muss diese Verschiebung mitführen, sonst springt die Taste */
.div-block-22 .link-block-4 { transform: translate(-50%, -50%); }
.div-block-22:hover .link-block-4 { transform: translate(-50%, -50%) scale(1.1); }
/* während der Film läuft, bewegt sich nichts mehr */
.video-banner.is-playing video.bc-interview,
.video-banner.is-playing:hover video.bc-interview,
.div-block-22.is-playing video.bc-interview,
.div-block-22.is-playing:hover video.bc-interview { transform: none; }

@media (max-width: 767px) {
  .div-block-22 .link-block-4 { width: 60px; height: 60px; }
}

/* --------------------------------------------------------------------------
   102. Die Wellen-Grafik über dem Interview passt in ihren Rahmen.
   Sie ist 240px hoch und an der Unterkante verankert. Seit der Rahmen 16:9
   läuft (§99), ist er auf dem Telefon nur noch 197px hoch — mit dem
   `overflow: hidden`, das die Zoom-Bewegung braucht, wären der Welle oben
   43px abgeschnitten worden. Sie skaliert stattdessen mit.
   -------------------------------------------------------------------------- */
.video-banner .wave-canvas,
.div-block-22 .wave-canvas { max-height: 100%; }

/* --------------------------------------------------------------------------
   102. Die Wellen-Grafik über dem Interview passt in ihren Rahmen.
   Sie ist 240px hoch und an der Unterkante verankert. Seit der Rahmen 16:9
   läuft (§99), ist er auf dem Telefon nur noch 197px hoch — mit dem
   `overflow: hidden`, das die Zoom-Bewegung braucht, wären der Welle oben
   43px abgeschnitten worden. Sie skaliert stattdessen mit.
   -------------------------------------------------------------------------- */
.video-banner .wave-canvas,
.div-block-22 .wave-canvas { max-height: 100%; }

/* --------------------------------------------------------------------------
   103. Der scrollbare Rest UNTER dem Footer — die eigentliche Ursache.
   Der Footer war die ganze Zeit korrekt einen Screen hoch; das Dokument war es
   nicht. Im echten Fenster gemessen (1200×650, Zoom .7, ans Scroll-Ende
   gefahren): Sektionsunterkante bei 563, Fensterkante bei 650 — 87px, in denen
   das Dunkelgrau von `html` steht. Auf schwarzem Grund liest sich das als
   Innenabstand, der nicht existiert: die Luft unter der Legal-Zeile las 127px,
   wo links 42px stehen.

   Verursacher ist die Swoosh-Grafik des Footers. Ihr Container liegt absolut,
   die Lottie darin ist 464px hoch und ragt 87px unter den Body — absoluter
   Überlauf macht das Elternelement nicht höher, erweitert aber den scrollbaren
   Bereich des Dokuments. Deshalb griff auch die Korrektur in
   `footerViewportHeight()` nicht: sie zieht den Überhang per negativer Außenkante
   ab (gemessen -123.75px) und kam gegen einen Überlauf, der sich davon nicht
   verkleinern lässt, nicht an.

   Die Sektion beschneidet ihn jetzt. Sichtbar ändert das nichts — abgeschnitten
   wird nur, was unter der Seite lag. Nachgemessen: Dokument 5496 → 5409,
   Rest nach dem Footer 0, Sektionsunterkante genau auf der Fensterkante, Luft
   unter dem Copyright 41 gegen 42 links. Die negative Außenkante wird damit
   von selbst 0 — der Zweig im JS bleibt als Rückfall stehen, greift aber nicht.
   -------------------------------------------------------------------------- */
.section-2 { overflow: hidden; }

/* --------------------------------------------------------------------------
   104. Die Play-Taste bleibt beim Überfahren mittig.
   Der Export zentriert sie mit `left/top: 50%` plus `translate(-50%, -50%)`
   (gemessen `matrix(1,0,0,1,-60,-60)` bei 120px). Mein `transform: scale(1.1)`
   aus §100 hat diese Verschiebung ERSETZT — die Taste sprang um ihre halbe
   Breite nach rechts unten. Beide Anteile stehen jetzt in einer Angabe.
   -------------------------------------------------------------------------- */
.video-banner .video-btn,
.div-block-22 .link-block-4 { transform: translate(-50%, -50%); }
.video-banner:hover .video-btn,
.div-block-22:hover .link-block-4 { transform: translate(-50%, -50%) scale(1.1); }

/* --------------------------------------------------------------------------
   105. Die Erfahrungskachel wird beim Antippen ganz gedeckt.
   `.layer2` trägt `top: 140px; bottom: 0`; der Hover-Zustand des Exports setzt
   nur `height: 100%`. Mit gesetztem `top` gewinnt die Höhe gegen `bottom`, die
   Fläche startet also weiter unter der Oberkante — gemessen bei 390px: 332 von
   350px, die obersten 18px blieben offen, auf dem Telefon sichtbar als
   abgeschnittener Verlauf über dem Foto. Die Fläche liegt jetzt auf allen vier
   Kanten.
   -------------------------------------------------------------------------- */
html.page-expertise .experience-card:hover .layer2,
html.page-expertise .experience-card:hover .layer2.bg-white {
  /* `inset: 0` UND `height: auto`: die 100 % des Exports lösten sich gegen einen
     332px hohen Bezugsrahmen auf, nicht gegen die 350px der Kachel — mit
     gesetzter Höhe blieb also auch bei `top: 0` ein Rest offen. Ohne Höhenangabe
     spannt sich die Fläche zwischen alle vier Kanten und deckt sicher. */
  inset: 0 !important;
  height: auto !important;
}

/* --------------------------------------------------------------------------
   106. iPhone-Querformat: der Text steht links so weit vom Rand wie oben.
   Der Export führt in diesem Band `32px 40px` — oben 32, links 40. §64 zog
   links früher auf 19px, weil im iPad-HOCHformat die Sektionsüberschrift auf
   dieser Kante sitzt; im Querformat gibt es diese Kante nicht, und seit §64 nur
   noch hochkant greift, stand hier 40 gegen 32. Beides ist jetzt 32.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) and (orientation: landscape) {
  .box-wrapper .box-1 > .box-inner,
  .track-sec .box-1 > .box-inner,
  .box-inner-wrapper .box-1 > .box-inner {
    /* rundum 32 — sonst stünde nach dem Nachtrag oben 40 gegen links 32 */
    padding: 32px !important;
  }
  .box-wrapper .box-2,
  .track-sec .box-2 {
    padding-left: 32px !important;
    padding-right: 32px !important;
    /* und der Wert steht unten so weit vom Rand wie links — dieselbe Regel wie
       in den übrigen Bändern; hier waren es 40 unten gegen 32 links */
    padding-top: 32px !important;
    padding-bottom: 32px !important;
  }
  .box-wrapper .box-3 { padding-left: 32px !important; padding-right: 32px !important; }
}

/* --------------------------------------------------------------------------
   107. Projektkarten: Wert und Schlagwort richten sich nach der Kachelbreite.
   Bisher entschieden sechs Stufen über sechs Bänder, und die passten nicht mehr
   zur Kachel, seit sie ihre Rasterzeile füllt (§93). Gemessen war das Schlagwort
   an drei Stellen KLEINER als sein eigenes Label — 15 gegen 16 bei 1100, 14 gegen
   16 bei 834 und 844 — und der Wert lag bei 1100 auf 24px, obwohl in derselben
   Kachel 48px Platz haben.

   Statt Stufen eine Regel: die Kachel wird zum Container, die Größe kommt aus
   ihrer Inhaltsbreite. `container-type: inline-size` bezieht `cqw` auf die
   INNENfläche, der Innenabstand ist also schon abgezogen — das ist wichtig, weil
   er zwischen den Bändern wechselt (40px auf dem Desktop, 24px auf dem Telefon).

   Die Teiler kommen aus der Messung mit der echten Schrift, jeweils an der
   längsten Zeichenfolge, die real vorkommt:
     Schlagwort  „Prozesstechnologie"  = 9,19 × Schriftgröße breit  → Teiler 10
     Zahl        „500 Mio. €"          = 4,94 × Schriftgröße breit  → Teiler 5,1
   Der Teiler liegt jeweils über dem gemessenen Faktor, damit auch die zweit-
   längste Zeichenfolge Reserve hat.

   Daraus ergibt sich (Inhaltsbreite → Schlagwort / Zahl):
     1100, 2 Karten   277px → 26 / 48     (vorher 15 / 24)
     1200, 3 Karten   170px → 17 / 33     (vorher 15 / 30)
     1440, 3 Karten   184px → 18 / 36     (vorher 17 / 30)
     1920, 3 Karten   204px → 20 / 40     (vorher 17 / 30)
     834/844, 1 Karte 302px → 26 / 48     (vorher 14 / 36)
     390, 1 Karte     126px → 14 / 24     (unverändert)

   NACHTRAG: die Obergrenzen waren zu hoch (26 / 48). Auf einer breiten Kachel —
   iPad quer mit zwei Karten — schöpfte die Regel sie aus, und der Wert stand
   dreimal so groß wie sein Label. Die Grenzen liegen jetzt bei 22 / 36: 36px war
   die größte Zahl, die vorher irgendwo stand (iPad hochkant), also wird nichts
   größer als etwas, das schon abgenommen war — die kleinen Fälle holen nur auf.
   Neu: 1100/1194 → 22/36 (vorher 15/24), 1200 → 17/33, 1440 → 18/36,
   1920 → 20/36, 834/844 → 22/36, 390 → 14/24 (unverändert).

   Untergrenze des Schlagworts war 14px — die Labelgröße des Telefons. Dort war
   „Prozesstechnologie" breiter als die Kachel und brach im Wort; eine höhere
   Untergrenze hätte das verschlimmert.

   NACHTRAG 11.8. (Kundenwunsch: „die Werte sollen mindestens so groß sein wie
   Industrials & other manufacturing"): gemessen war das Schlagwort im Band
   992–1199 wieder kleiner als sein eigenes Label — 14 gegen 16 bei 992, 15
   gegen 16 bei 1100.

   Möglich wurde die Anhebung erst durch eine Fuge: von den fünf Werten trugen
   vier längst eine (`Maschinen·bau`, `Prozess·technologie`, `Gesund·heitswesen`),
   ausgerechnet `Automobilindustrie` nicht — und genau der begrenzte alles.
   Mit `Automobil·industrie` ist das längste unteilbare Stück nicht mehr das
   ganze Wort, sondern „technologie": statt des 9,19-fachen nur noch das
   5,5-fache der Schriftgröße. Nachgemessen: bei 992 und 390 passten vorher
   14px, jetzt 22,4px.

   Daraus die neuen Werte: Untergrenze 16px (die Labelgröße), Teiler 8 statt 10
   (Reserve über den gemessenen 5,5), Obergrenze bleibt 22px.

   Höhe ist nirgends knapp: die Kachel ist 137px hoch (72px auf dem Telefon),
   Label und Wert belegen darin zusammen höchstens 68px plus Innenabstand.
   -------------------------------------------------------------------------- */
.project-box .project-box-wrapper2 .box-1 > .box-inner {
  container-type: inline-size;
}
.project-box .project-box-wrapper2 .box-1 > .box-inner p.heading-010,
.project-box .project-box-wrapper2 .box-1 > .box-inner .heading-010 {
  font-size: clamp(16px, calc(100cqw / 8), 22px) !important;
}
.project-box .project-box-wrapper2 .box-1 > .box-inner .text-size-xlarge,
.project-box .project-box-wrapper2 .box-1 > .box-inner .text-block-2 {
  font-size: clamp(24px, calc(100cqw / 5.1), 36px) !important;
}

/* --------------------------------------------------------------------------
   108. Der Abstand zwischen dem Team-Button und dem Gruppenbild schrumpft.
   Gemessen von der Unterkante des Textblocks zur Oberkante des Bildes: 160px auf
   dem Desktop, 140px auf dem Telefon. Er setzt sich aus zwei Außenkanten
   zusammen — 60px unter dem Textblock (40 auf dem Telefon) und 30px über dem
   Bild. Dazu kommt der transparente Rand, den das Bild oberhalb der Köpfe
   mitbringt; der Eindruck ist also größer als das Maß. Beide Kanten gehen
   zurück: 20px unter dem Text, 0 über dem Bild — gemessen 90px statt 160.
   -------------------------------------------------------------------------- */
html.page-index .executives_photos.mt-60,
.executives_photos.mt-60 { margin-top: 0 !important; }
html.page-index .text-align-center:has(+ * .executives_photos),
.section_about .text-align-center.executives-text,
.executives-text.text-align-center { margin-bottom: 20px !important; }

/* --------------------------------------------------------------------------
   109. Oben wie links — auch in den beiden Bändern, die eigene Werte führen.
   §64 zieht im iPad-Hochformat den linken Innenabstand auf 19px, damit der Text
   auf der Kante der Sektionsüberschrift sitzt. Die Platte behielt dabei ihre
   40px oben (gemessen 40/19), und die weiße Box führte im iPhone-Querformat
   19px oben gegen 32px links. Beide ziehen jetzt nach.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) and (orientation: portrait) {
  .box-wrapper .box-2,
  .track-sec .box-2 { padding-top: 19px !important; }
}
@media (min-width: 768px) and (max-width: 991px) and (orientation: landscape) {
  .box-wrapper .box-3 { padding-top: 32px !important; }
}

/* --------------------------------------------------------------------------
   110. Die Kontur-Box ist so hoch, wie ihr Inhalt sie braucht.
   Der Export pinnt `.box-inner.h-110` auf `height: 110px`. Bei 40px Innenabstand
   und einer 20px-Zeile bleiben darin 54px unter dem Text gegen 40px darüber und
   links — sichtbar als Totraum, und die Box läuft höher als nötig. Höhe kommt
   jetzt aus dem Inhalt: oben, unten und links dieselben 40px, und ein
   zweizeiliges Label macht die Box auf statt überzulaufen. Die Reihe gleicht sich
   über die Platte aus, die den Rest der Spalte füllt (§45c).
   -------------------------------------------------------------------------- */
.box-wrapper .box-1 > .box-inner.h-110,
.track-sec .box-1 > .box-inner.h-110 {
  height: auto !important;
  min-height: 0 !important;
}

/* --------------------------------------------------------------------------
   111. EIN Maß für alle KPI-Beschriftungen — in jeder Breite.
   Gemessen bei 1440 vorher: dieselbe Sorte Text las drei Größen. Beschriftung
   im Kontur-Kasten 18px auf der Startseite, aber 16px auf /private-equity und
   den Case Studies; Überschrift der kleinen Kästen („Average revenue CAGR")
   18px; die Zeile auf der Platte („Over an average of 3 years") 16px auf der
   Startseite und 20px auf den Unterseiten.
   Ursache ist nicht die Reihenfolge, sondern die Spezifität: §94 setzt die 18px
   über kurze Selektoren, §57e/§62 setzen 16px über `:has(.box-inner.h-195)`
   bzw. `h6.heading-6` — beide tragen mehr Klassen und gewinnen deshalb trotz
   früherer Stelle. Darum steht dieselbe Selektorenliste hier noch einmal, mit
   `html` davor: ab hier hat die Größe dieser Label genau eine Quelle.
   Ein Maß je Band: 18px ab 1200, 16px von 768 bis 1199 (iPad wie abgenommen),
   15px auf dem Telefon.
   -------------------------------------------------------------------------- */
html .box-wrapper .box-1 > .box-inner.h-110 > p,
html .box-wrapper .box-1 > .box-inner .paragraph,
html .box-wrapper .box-1 > .box-inner > h6.heading-6:not(.mt-5),
html .box-wrapper .box-2 > h6.heading-6,
html .box-wrapper .box-2 > .heading-6,
html .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p,
html .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
html .box-wrapper:has(.box-inner.h-195) .box-2 > .heading-6,
html .track-sec .box-1 > .box-inner.h-110 > p,
html .track-sec .box-1 > .box-inner .paragraph,
html .track-sec .box-1 > .box-inner > h6.heading-6:not(.mt-5),
html .track-sec .box-2 > h6.heading-6,
html .track-sec .box-2 > .heading-6,
html .track-sec:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
html .track-sec:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p {
  font-size: 15px !important;
}
@media (min-width: 768px) {
  html .box-wrapper .box-1 > .box-inner.h-110 > p,
  html .box-wrapper .box-1 > .box-inner .paragraph,
  html .box-wrapper .box-1 > .box-inner > h6.heading-6:not(.mt-5),
  html .box-wrapper .box-2 > h6.heading-6,
  html .box-wrapper .box-2 > .heading-6,
  html .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p,
  html .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
  html .box-wrapper:has(.box-inner.h-195) .box-2 > .heading-6,
  html .track-sec .box-1 > .box-inner.h-110 > p,
  html .track-sec .box-1 > .box-inner .paragraph,
  html .track-sec .box-1 > .box-inner > h6.heading-6:not(.mt-5),
  html .track-sec .box-2 > h6.heading-6,
  html .track-sec .box-2 > .heading-6,
  html .track-sec:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
  html .track-sec:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p {
    font-size: 16px !important;
  }
}
/* ab 1200 eine Stufe größer — und dieselbe Zeilenhöhe, sonst lesen zweizeilige
   Label je nach Nachbarkasten unterschiedlich weit auseinander (§94 wollte das,
   verlor aber gegen §58a) */
@media (min-width: 1200px) {
  html .box-wrapper .box-1 > .box-inner.h-110 > p,
  html .box-wrapper .box-1 > .box-inner .paragraph,
  html .box-wrapper .box-1 > .box-inner > h6.heading-6:not(.mt-5),
  html .box-wrapper .box-2 > h6.heading-6,
  html .box-wrapper .box-2 > .heading-6,
  html .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p,
  html .box-wrapper:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
  html .box-wrapper:has(.box-inner.h-195) .box-2 > .heading-6,
  html .track-sec .box-1 > .box-inner.h-110 > p,
  html .track-sec .box-1 > .box-inner .paragraph,
  html .track-sec .box-1 > .box-inner > h6.heading-6:not(.mt-5),
  html .track-sec .box-2 > h6.heading-6,
  html .track-sec .box-2 > .heading-6,
  html .track-sec:has(.box-inner.h-195) .box-1 > .box-inner .paragraph,
  html .track-sec:has(.box-inner.h-195) .box-1 > .box-inner.h-110 > p {
    font-size: 18px !important;
    /* Zeilenhöhe: siehe §141 — Beschriftungen laufen überall auf 1.0 */
    line-height: 1.0 !important;
  }
}

/* --------------------------------------------------------------------------
   112. Die drei Kontaktangaben auf den Profilen sind Links.
   E-Mail und Telefonnummer standen als reiner Text in `<div>`s — nur LinkedIn
   war anklickbar. Jetzt `mailto:` und `tel:` (die Amtsnull entfällt in der
   internationalen Form, die sichtbare Schreibweise bleibt), und alle drei
   färben beim Überfahren auf Markenorange wie die Angaben auf /contact (§?).
   -------------------------------------------------------------------------- */
/* die drei Angaben sind Zeilen, nicht Fließtext: als `<div>` waren sie Blöcke,
   als `<a>` wären sie inline und Telefon und LinkedIn landeten in einer Zeile.
   `fit-content`, damit die Klickfläche am Text endet und nicht über die halbe
   Box läuft. */
html .contact-box .contact-detail {
  display: block;
  width: fit-content;
  max-width: 100%;
  transition: color .2s ease;
}
html .contact-box a.contact-detail:hover {
  color: var(--brand);
}

/* --------------------------------------------------------------------------
   113. Kein Klick-Zeiger, wo es nichts zu klicken gibt.
   `.focus_card` trägt aus dem Export `cursor: pointer`. Auf der Startseite ist
   die Karte selbst ein `<a>` — dort ist der Zeiger richtig. Die Impact-Karten
   auf /approach („Growth", „Profitability", „Cash conversion", „Liquidity") und
   die Fokuskarten der Zielgruppenseiten sind `<div>`s ohne Ziel: sie
   versprachen einen Klick, den es nicht gibt.
   -------------------------------------------------------------------------- */
div.focus_card:not(:has(a)) { cursor: default; }
/* die Karten der Startseite liegen IN einem Link (`a.link-block-5` bzw. sind
   selbst das `<a>`) — dort bleibt der Zeiger, was er war */
a div.focus_card,
a.focus_card { cursor: pointer; }

/* --------------------------------------------------------------------------
   114. Der Hero-Claim steht auf der Kante aller anderen Texte — und hat
   rechts denselben Abstand zum Rand wie links (Kunde, 6.8.).
   Auf dem Telefon lag „We drive transformations." bei 20px, während jede
   Sektionsüberschrift („/ Focus", „/ Bickel & Company") bei 40px sitzt — zwei
   linke Kanten auf einem 390px-Schirm. §33c hatte den Innenabstand des
   Hero-Blocks ganz gestrichen, um der Unterzeile Platz zu geben. Jetzt sind
   beide Seiten gleich: 20px Innenabstand + 20px vom äußeren Rahmen = 40px
   links wie rechts, Zeilenmaß 310px bei 390. Die Unterzeile läuft damit
   dreizeilig (EN) — die frühere Zweizeiligkeit hing an 10px im rechten Steg
   (§117, zurückgenommen), und der Kunde hat sich für gleiche Ränder
   entschieden. Die Überschrift passt: „We drive transformations." misst
   305px, „Wir treiben Transformationen." bricht am `max-width: 18ch` ohnehin
   nach dem zweiten Wort.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .section_hero .hero_content.px-40 {
    padding-left: 20px !important;
    padding-right: 20px !important;
  }
}

/* --------------------------------------------------------------------------
   115. Kontaktbox: mehr Höhe, und die Luft liegt zwischen den Angaben.
   Gemessen auf Walters Profil bei 1440 (CSS-px): Box 540×270, darin „Kontakt"
   auf 40, dann 60px Leere, dann die drei Angaben auf 128/163/199 dicht
   untereinander — die Luft saß also über der E-Mail, genau da, wo sie nicht
   hin sollte. Die Box läuft jetzt 4:2.4 statt 4:2, und Telefon und LinkedIn
   tragen einen Außenabstand nach oben. Auf dem Telefon (§84, Höhe aus dem
   Inhalt) wächst die Box um dieselben Abstände mit.
   -------------------------------------------------------------------------- */
@media (min-width: 992px) {
  .contact-box { aspect-ratio: 4 / 2.4 !important; }
}
.contact-box .contact-detail + .contact-detail { margin-top: 14px !important; }

/* --------------------------------------------------------------------------
   116. „Targets exceeded" bricht nicht mitten im Wort.
   Der Wert der Platte läuft im Zoom-Band auf 72px, und die Platte ist dort
   schmal: gemessen 333px Textbreite bei 992, 348 bei 1024, 429 bei 1194.
   „exceeded" ist bei 72px 329px breit — es passte mit 4px Rest, und weil auf
   diesen Platten `overflow-wrap: anywhere` steht, fiel der Umbruch bei der
   kleinsten Abweichung (andere Fontmetrik in Safari) INS Wort: „exceede|d".
   Deutsch bricht dort sicher: „übertroffen" ist 381px breit.
   Also eine Stufe kleiner, aber nur in diesem Band und nur auf den Platten mit
   Worten (`.wrap` — die vier Case Studies); die Platten mit Zahlen bleiben.
   Bei 56px braucht das längste Wort 297px von 333 — 11 % Luft, auch für Safari.
   Kein `hyphens`: das erzeugt genau die Trennstriche, die vorher beanstandet
   waren.
   -------------------------------------------------------------------------- */
@media (min-width: 992px) and (max-width: 1199px) {
  html .box-wrapper .box-2 > .text-block-2.wrap,
  html .track-sec .box-2 > .text-block-2.wrap,
  html .text-block-2.fs-60._w-400.wrap {
    font-size: 56px !important;
    line-height: 1.0 !important;
  }
}

/* --------------------------------------------------------------------------
   117. ZURÜCKGENOMMEN am 6.8. — die Unterzeile lief hier 10px in den rechten
   Steg, um zweizeilig zu bleiben. Der Kunde hat gleiche Ränder gewählt
   (§114); ohne die 10px bricht sie bei 390px dreizeilig (EN). Die Regel ist
   raus, der Paragraph bleibt als Nummernhalter dokumentiert.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   118. Die Fußzeilen-Zeichnung endet auf der Kante der Kästen.
   Die Komposition ist so gebaut, dass die Spitze die OBERE RECHTE ECKE ihres
   eigenen Rahmens ist (961×555, Pfadbeginn bei 960,5/0) — der Rahmen lief auf
   dem Telefon über die volle Breite (§41), also endete die Spitze auf dem
   Bildschirmrand. Jede Box der Seite endet dagegen 20px davor. Der Rahmen
   bekommt diese 20px als Innenabstand: die Zeichnung bleibt links auf der Kante
   (xMinYMax) und hört rechts dort auf, wo auch der Text aufhört.
   Gemessen bei 390px: Rahmen 390 → Zeichnung 370 breit, Spitze bei x=370.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  .section-2 > .code-embed.lottie.absolute2.block { padding-right: 20px !important; }
}

/* --------------------------------------------------------------------------
   119. Nachtrag zu §111: dieselbe Größe heißt auch dasselbe Gewicht.
   Die Zeile auf der Platte („Over an average of 3 years") lief als einzige der
   Beschriftungen im Regular-Schnitt (400), alle anderen im Semibold (600) —
   gemessen 18px/400 gegen 18px/600. Gleiche Größe allein liest deshalb noch
   nicht gleich. Jetzt tragen alle Label denselben Schnitt.
   -------------------------------------------------------------------------- */
html .box-wrapper .box-2 > h6.heading-6,
html .box-wrapper .box-2 > .heading-6,
html .box-wrapper:has(.box-inner.h-195) .box-2 > .heading-6,
html .track-sec .box-2 > h6.heading-6,
html .track-sec .box-2 > .heading-6 {
  font-weight: 600 !important;
}

/* --------------------------------------------------------------------------
   120. Fokuskarten: durchgehend quadratisch (Kundenentscheidung 2. August).
   §50 gab dem Tablet-Band 4:3, §74 zog das bis 1366 durch — ab 1440 liefen sie
   quadratisch. Beim Verkleinern von 1440 auf 1366 sprang die Proportion also
   sichtbar. Die 4:3 waren für ein iPad-Querformat gedacht, das damals EINE
   Karte zeigte; seit §107 zeigt es drei. Jetzt ein Verhältnis in allen Breiten:
   das Quadrat, das ≤767 und ≥1367 schon gilt.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 1366px) {
  html .section_focus .focus_card.aspect-ratio,
  html .section_focus .focus_card {
    aspect-ratio: 1 / 1 !important;
    height: auto !important;
  }
}

/* --------------------------------------------------------------------------
   121. Kundenfeedback: die Personen-Box nimmt höchstens die halbe Breite.
   Gemeint ist der Kasten mit Foto, Name und Position (`._w-34`) — nicht das
   Zitat. Auf dem Desktop liegt er ohnehin bei 33 % (gemessen 527 von 1600), auf
   dem Telefon zog ihn §80 dagegen auf 100 %: das Porträt lief über die ganze
   Breite. Er hört jetzt bei der Hälfte auf und bleibt auf der linken Kante,
   auf der auch jede andere Box der Seite steht.
   -------------------------------------------------------------------------- */
.feedback-sec2 .feedback-row ._w-34,
.feedback-sec .feedback-row ._w-34 {
  max-width: 50% !important;
  margin-right: auto;
}

/* --------------------------------------------------------------------------
   122. Der Fokus-Slider bleibt im ganzen Tablet-Band bedienbar.
   §50 zeigte Pfeile und Balken bis 1199. Seit die Reihe im Band zwei von drei
   Karten zeigt (main.js §6), muss die Bedienung bis an das Ende des Bandes
   mitkommen — sonst ist die dritte Karte auf dem iPad Pro (1366) nicht
   erreichbar.

   NACHTRAG (Rückmeldung vom iPad): `display` an den Pfeilen allein reicht nicht
   — ihr Elternelement `.arrow-wrapper` steht ab 992 auf `display: none` (§14),
   also blieben Pfeile und Balken bei 0×0 stehen, obwohl sie selbst sichtbar
   geschaltet waren. Der Rahmen kommt jetzt mit.

   NACHTRAG 3. August: die Reihe zeigt ab 992 wieder DREI Karten (main.js §6,
   Rückmeldung Andre: zwei Karten wirken auf einem 1280–1366er Laptop riesig).
   Damit ist im Band nichts mehr zu blättern, und die Bedienung gilt nur noch
   dort, wo eine Karte je Ansicht läuft — also bis 991. Ab 992 greift wieder
   §14 und blendet Pfeile und Balken aus.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) {
  html .section_focus .arrow-wrapper { display: flex !important; }
  .section_focus .swiper-pagination { display: block !important; }
  .section_focus .swiper-button-prev,
  .section_focus .swiper-button-next { display: flex !important; }
}

/* --------------------------------------------------------------------------
   123. Die Fußzeilen-Zeichnung wird auf dem Desktop nicht mehr beschnitten.
   Der Rahmen der Desktop-Kopie lief auf `width: 50%; height: 50%` (§28), das
   SVG darin auf seiner eigenen Proportion (961:555) — und `.pt-93` schob es um
   93px nach unten. Gemessen ragte es damit unter die Sektionskante: 87px bei
   1200×650, 40px bei 1440×900, 107px bei 1920×1080. Weil `.section-2` seit §103
   `overflow: hidden` trägt (gegen den scrollbaren Rest unter dem Footer), war
   der untere Teil des Keils schlicht abgeschnitten.
   Der Rahmen bekommt jetzt die Proportion der Komposition statt einer festen
   halben Höhe: Schwanz in der linken unteren Ecke, Spitze auf der Mittellinie,
   nichts abgeschnitten — dieselbe Geometrie, die abgenommen wurde, nur
   vollständig. Die Fußzeilenhöhe rührt das nicht an: der Rahmen liegt absolut.
   -------------------------------------------------------------------------- */
.section-2 > .code-embed.lottie.absolute2.hidden {
  height: auto !important;
  aspect-ratio: 961 / 555 !important;
  padding-top: 0 !important;
}

/* --------------------------------------------------------------------------
   124. Safaris Bedienleiste deckt das ganze Video (Punkt 1.1).
   Der Kundenscreenshot vom iPad (1194) zeigt die Leiste, die Play-Taste und die
   10-Sekunden-Sprünge in einem Kasten, der in der LINKEN OBEREN ECKE des Videos
   endet. Ausgemessen im Screenshot: die Leiste hört bei 70 % der Elementbreite
   auf, die Taste sitzt auf 35/35 % statt 50/50 %. 70 % ist genau der Zoom dieses
   Bandes (`.page-wrapper { zoom: .7 }`).
   Das ist kein Fehler der Proportionen — Element und Film sind beide 16:9 (§99) —
   sondern Safari rechnet den Zoom für die eigenen Bedienelemente im Schattenbaum
   ein zweites Mal ein: sie werden im gemalten Maß angelegt und dann noch einmal
   mit .7 skaliert. Chrome macht das nicht, deshalb war es hier nicht zu sehen.
   Gegenmittel ohne Eingriff in die Geometrie: das Video hebt den Zoom für sich
   selbst auf: eigener Zoom = 1/Bandzoom, effektiver Zoom des Elements also 1 —
   damit gibt es nichts mehr doppelt zu rechnen. Die Breite braucht keine
   Korrektur: `width: 100%` löst sich im gezoomten Raum des Elements auf, der
   eigene Zoom kürzt sich also heraus. Gemessen in Chrome bei 1024/1194/1280/
   1440/1600: gemalte Größe, Lage und 16:9 unverändert, Play-Taste weiter 0/0.
   Wenn Safari die Leiste danach noch beschneidet, bleibt nur, die nativen
   Bedienelemente durch eigene zu ersetzen — das wäre die Grundsatzentscheidung
   aus dem Handoff.
   -------------------------------------------------------------------------- */
@media (min-width: 992px) and (max-width: 1364px) {
  video.bc-interview { zoom: 1.4285714; }   /* 1 / .7 */
}
@media (min-width: 1365px) and (max-width: 1850px) {
  video.bc-interview { zoom: 1.25; }        /* 1 / .8 */
}

/* --------------------------------------------------------------------------
   125. Hintergrundbilder erreichen auch ältere Browser (Andre 02.08., S3/S24).
   Gemessen in einem echten Firefox: `image-set(… type("image/avif"))` — so
   schreibt es der Webflow-Export für die Case-Study-Heros — ist in Firefox vor
   113 eine UNGÜLTIGE Deklaration. Ungültig heißt: sie fällt weg UND nimmt die
   `url()`-Zeile darüber nicht als Rückfall her, weil die im selben Block schon
   überschrieben wurde. Ergebnis: der Hero hat gar kein Bild, nur den Verlauf
   darüber — genau der Screenshot vom 2. August.
   Dieselbe Falle steckte in den 26 eigenen `image-set`-Regeln dieser Datei.
   Ab hier gilt überall dasselbe Muster: eine `url()`-Zeile mit dem JPG als
   Rückfall, danach `image-set` OHNE `type()` — reine Auflösungsvarianten auf
   WebP. Damit greift es ab Firefox 88 / Safari 14 / Chrome 88, und alles
   Ältere bekommt das JPG. AVIF ist raus (siehe §126).
   -------------------------------------------------------------------------- */
.hero-sec2.py-100.idt-bg {
  background-image: url("/assets/media/x-rectangle-36.jpg");
  background-image: image-set(url("/assets/media/x-rectangle-36.webp") 1x);
}
.hero-sec2.py-100.kuka-bg {
  background-image: url("/assets/media/frame-15436.jpg");
  background-image: image-set(url("/assets/media/frame-15436.webp") 1x);
}
.hero-sec2.py-100.treofan {
  background-image: url("/assets/media/shutterstock_2712467487-1.jpg");
  background-image: image-set(url("/assets/media/shutterstock_2712467487-1.webp") 1x);
}
.hero-sec2.py-100.lenzing {
  background-image: url("/assets/media/frame-15437.jpg");
  background-image: image-set(url("/assets/media/frame-15437.webp") 1x);
}
.hero-sec2.py-100.rkw {
  background-image: url("/assets/media/frame-15438.jpg");
  background-image: image-set(url("/assets/media/frame-15438.webp") 1x);
}

/* --------------------------------------------------------------------------
   126. AVIF ist aus dem Markup verschwunden (Andre 02.08., S16/S24).
   Nachgemessen mit Playwright in AKTUELLEM Firefox (153) und WebKit: die
   Porträts der Profile (`…walter_desktop.avif`, `…johann_desktop.avif`) und
   `group-15929.avif` auf Lenzing kommen in Firefox mit `naturalWidth: 0` an —
   der Dekoder bricht ab, weil unsere Dateien `clap`/`clli`-Boxen tragen
   (Firefox-Log: „Unsupported essential property CleanAperture"). Der Browser
   hat die AVIF-Quelle also gewählt UND sie nicht dekodiert; der JPG-Rückfall im
   `<picture>` kommt dann nicht mehr zum Zug.
   Deshalb liegen jetzt 146 WebP-Dateien neben den Originalen und im Markup
   steht `type="image/webp"` statt `type="image/avif"`. Kostet ~15 % Dateigröße
   gegenüber AVIF und ist dafür in jedem Browser sichtbar. Hier steht nur die
   Notiz — die Änderung liegt im Markup und in den Dateien.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   127. Die `:has()`-Regeln haben einen Zwilling für ältere Browser.
   26 Regelblöcke dieser Datei hängen an `:has()` — Firefox kennt es erst ab
   121, Safari ab 15.4, Chrome ab 105. In Andres Firefox fielen sie alle aus,
   und mit ihnen die Proportion der orangen Platte, die Gleichhöhe der
   KPI-Reihe und die Größe der Case-Study-Überschrift neben ihrer Nummer.
   `main.js §20` setzt in genau diesen Browsern die Klassen, die hier stehen —
   wo `:has()` läuft, passiert nichts davon, dort greift das Original.
   Reihenfolge und Werte sind aus den Originalregeln übernommen, nicht neu
   erfunden: §45c (Platte füllt die Spalte), §95 (Plattenverhältnis),
   §? (Reihe gleich hoch) und §79 (Überschrift neben der Nummer).
   -------------------------------------------------------------------------- */
.box-wrapper > .js-has-plate,
.track-sec .box-wrapper > .js-has-plate { display: flex; flex-direction: column; container-type: inline-size; }
.box-wrapper > .js-has-plate > .box-1 { flex: 0 0 auto; }
.box-wrapper > .js-has-plate > .box-1 > .box-inner { flex-shrink: 0; }
.box-wrapper > .js-has-plate > .box-2,
.track-sec .box-wrapper > .js-has-plate > .box-2 {
  flex: 1 1 auto;
  height: auto !important;
  min-height: 0 !important;
}
@media (min-width: 1200px) {
  .box-wrapper > .js-has-plate > .box-2,
  .track-sec .box-wrapper > .js-has-plate > .box-2 { min-height: 75cqw !important; }
}
.box-inner-wrapper.js-has-tall { grid-template-rows: 1fr !important; grid-auto-rows: 1fr; }

/* Überschrift neben der Nummer — dieselbe Staffel wie im Original */
.focus_left.js-has-number > h3.heading-style-h5 { font-size: 40px !important; line-height: 1.2 !important; }
.focus_left.js-has-number > h3.heading-style-h5 * { font-size: inherit !important; line-height: inherit !important; }
@media (min-width: 992px) and (max-width: 1364px) {
  .focus_left.js-has-number > h3.heading-style-h5 { font-size: clamp(22px, 2.5vw, 40px) !important; }
}
@media (min-width: 768px) and (max-width: 991px) {
  .focus_left.js-has-number > h3.heading-style-h5 { font-size: 26px !important; }
}
@media (max-width: 767px) {
  .focus_left.js-has-number > h3.heading-style-h5 { font-size: 24px !important; }
}
/* Karte ohne Linkziel */
div.focus_card.js-no-link { cursor: default; }
a div.focus_card.js-no-link { cursor: pointer; }

/* --------------------------------------------------------------------------
   128. Andre 02.08. — die mechanischen Punkte.

   (a) S4① Der Set-up-Streifen trennt mit „+", nicht mit „/", und die erste
       Position steht ohne Zeichen davor.
   (b) Play-Taste: das Dreieck sitzt mittig im Kreis. Gemessen (Tinte gerastert,
       240er Raster): der SVG-Rahmen ist exakt zentriert, die Tinte des Dreiecks
       liegt darin aber 3,96 % rechts der Mitte — der Pfad läuft von x=6 bis 20
       in einem 24er Feld. Dazu kommt, dass ein Dreieck optisch nach rechts
       zieht, weil seine Fläche an der Basis sitzt (Schwerpunkt 6,2 % links).
       −5,5 % der eigenen Breite bringt die Umrissmitte auf 1,5 % links der
       Kreismitte — das ist die Stelle, an der ein Play-Dreieck mittig aussieht.
       Prozent, damit es in jeder Größe stimmt (96px Kreis / 48px Glyphe).
   -------------------------------------------------------------------------- */
.setup-item::before { content: none; margin-right: 0; }
.setup-item + .setup-item::before {
  content: "+";
  color: var(--brand);
  margin-right: .5em;
}
/* Die Verschiebung des Dreiecks steckt jetzt in der viewBox des SVG (Markup):
   `viewBox="2 0 24 24"` schiebt den Inhalt um zwei Einheiten nach links. Als
   CSS-Transform mit Prozentwert war sie in Safari wirkungslos — Prozente lösen
   sich dort an einem anderen Bezugsrahmen auf. In der viewBox rechnet jeder
   Motor gleich. */

/* --------------------------------------------------------------------------
   129. Andre 02.08. (S3②, S14③, S18, S21②): die Werte stehen wieder auf den
   Zahlen des Exports.
   Andre schreibt zu mehreren KPI-Boxen „bitte wie davor lassen". Davor heißt:
   wie die Webflow-Fassung. Die Referenz ist offline (404), ihre Zahlen liegen
   aber unberührt im Export-Layer — `site.css` ist aus Webflow generiert und
   trägt die Original-Deklarationen:

       .text-size-xlarge (Zahlenwert)   40px / 1.2   ·  32px ab 991  ·  24px ab 767
       .heading-010      (Wortwert)     26px / 26px  ·  17px ab 479
       .text-block-2     (Platte)       72px / 72px  ·  44px ab 479

   Genau das gilt hier wieder. Vorher standen die Zahlenwerte auf 60px (Runde
   1. August, „Zahlen größer als Schlagworte") — daher las „> 10 ppts" neben
   „Above market & historic CAGRs" doppelt so groß, und „€ 2.6 bn" wirkte im
   Infokasten zu mächtig. Mit 40 gegen 26 ist das Verhältnis 1,54 wie im
   Original.
   Die Bänder sind daraus abgeleitet, nicht neu gesetzt: der Export staffelt
   nach Bildschirmbreite, wir nach demselben Muster über unsere Bänder.
   -------------------------------------------------------------------------- */
html .box-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge,
html .track-sec .box-1 > .box-inner.h-195 > .text-size-xlarge,
html .box-wrapper .box-1 > .box-inner.h-195 > p.text-size-xlarge,
html .box-wrapper .box-1 > .box-inner.h-195 > h2.text-size-xlarge {
  font-size: 24px !important;
}
html .box-wrapper .box-1 > .box-inner .heading-010,
html .track-sec .box-1 > .box-inner .heading-010 {
  font-size: 17px !important;
}
@media (min-width: 480px) {
  html .box-wrapper .box-1 > .box-inner .heading-010,
  html .track-sec .box-1 > .box-inner .heading-010 { font-size: 26px !important; }
}
@media (min-width: 768px) {
  html .box-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge,
  html .track-sec .box-1 > .box-inner.h-195 > .text-size-xlarge,
  html .box-wrapper .box-1 > .box-inner.h-195 > p.text-size-xlarge,
  html .box-wrapper .box-1 > .box-inner.h-195 > h2.text-size-xlarge { font-size: 32px !important; }
}
@media (min-width: 992px) {
  html .box-wrapper .box-1 > .box-inner.h-195 > .text-size-xlarge,
  html .track-sec .box-1 > .box-inner.h-195 > .text-size-xlarge,
  html .box-wrapper .box-1 > .box-inner.h-195 > p.text-size-xlarge,
  html .box-wrapper .box-1 > .box-inner.h-195 > h2.text-size-xlarge { font-size: 40px !important; }
}

/* --------------------------------------------------------------------------
   129b. Und die Umbrüche wieder wie im Export: keine automatische Trennung.
   Der Export setzt weder `hyphens` noch `overflow-wrap: anywhere` — beides
   haben WIR eingeführt, als die deutschen Komposita in die Kästen kamen (§62,
   §66). Andre sieht davon die Trennstriche („Projektmanageme-nt",
   „Arbeitnehmervertr-etungen", S2) und will sie überall weghaben.
   Also: `hyphens: manual` (ein gesetztes `&shy;` wirkt weiter, automatisch wird
   nicht getrennt) und `overflow-wrap: normal` — ein Wort bricht nur an einer
   echten Trennstelle. Damit trotzdem nichts überläuft, geht in den engen
   Bändern die GRÖSSE eine Stufe herunter statt das Wort zu zerschneiden; das
   Muster steht in §116 für die Platten und wird unten je Stelle nachgemessen.
   -------------------------------------------------------------------------- */
html .box-wrapper .box-1 > .box-inner *,
html .box-wrapper .box-2 *,
html .track-sec .box-1 > .box-inner *,
html .track-sec .box-2 *,
html .project-box .box-inner *,
html .focus_card-heading,
html .focus_card-content p,
html .impact-card *,
html .scope-sec .focus_card * {
  hyphens: manual !important;
  -webkit-hyphens: manual !important;
  overflow-wrap: normal !important;
  word-break: normal !important;
}

/* --------------------------------------------------------------------------
   130. Andre 02.08. (S7): halber Abstand zwischen dem Team-Text und den Köpfen.
   Gemessen von der Unterkante des Textblocks bis zur Oberkante des Gruppenbilds:
   160px ab 768, 140px auf dem Telefon — daran hängt weder ein Außenabstand des
   Bildbands (0) noch einer des Containers (0), der Raum entsteht aus der Summe
   der Blöcke darin. Deshalb zieht das Band selbst um die Hälfte an: 80 / 70px.

   NACHTRAG 2 (3. August): der Anzug gilt nur, wenn das Band WIRKLICH ein Bild
   trägt. Auf /about-us/ steht dieselbe Sektion mit LEEREM Bildband (der Export
   lässt nur die Overlay-Fläche stehen). Dort zog das leere Band den Textblock um
   80px nach oben, und weil die Sektion `overflow: hidden` trägt, schnitt sie den
   letzten Absatz mitten in der Zeile ab (gemessen: Inhalt 667px, Sektion 587px).
   Deshalb `:has(img)` — und für Browser ohne `:has()` (Firefox < 121, Safari <
   15.4) stempelt main.js §20 die Klasse `js-has-photo`.
   -------------------------------------------------------------------------- */
html .section_executives > .executives_photos:has(img),
html .section_executives > .executives_photos.mt-60:has(img),
html .section_executives > .executives_photos.js-has-photo,
html .section_executives > .executives_photos.mt-60.js-has-photo { margin-top: -80px !important; }
@media (max-width: 767px) {
  /* NACHTRAG (3. August): auf dem Telefon KEIN Anzug. Der Knopf „View team"
     liegt dort direkt über dem Bildband, die halbierte Lücke schob das
     Gruppenbild in den Knopf. Auf dem Telefon bleibt der Abstand, wie er war. */
  html .section_executives > .executives_photos,
  html .section_executives > .executives_photos.mt-60,
  html .section_executives > .executives_photos:has(img),
  html .section_executives > .executives_photos.mt-60:has(img),
  html .section_executives > .executives_photos.js-has-photo,
  html .section_executives > .executives_photos.mt-60.js-has-photo { margin-top: 0 !important; }
}

/* --------------------------------------------------------------------------
   131. Andre 02.08. (S11): über und unter dem Interview dieselbe Luft.
   Die Sektion selbst ist symmetrisch (60px oben und unten, Telefon 20), unter
   ihr beginnt aber sofort die nächste mit ihren eigenen 100px Innenabstand —
   sichtbar als ein weißes Band von 160px gegen 60px darüber. Auf der Seite mit
   dem Interview endet dieser Zuschlag: „eher den kleineren Abstand für beides".
   Die Sektion darunter beginnt also ohne eigenen Innenabstand — die 60px (20 auf
   dem Telefon) unter dem Film sind dann derselbe Wert wie darüber.
   -------------------------------------------------------------------------- */
html .video-banner-sec + section { padding-top: 0 !important; }

/* --------------------------------------------------------------------------
   132. Das Band 480–767 hatte drei Spalten und den Innenabstand des Desktops.
   Beim Nachmessen der Wortbreiten (tools/fitcheck.js) fiel auf: in den
   Infokästen der Case Studies blieben dort **46px** für den Text übrig — die
   Reihe lief dreispaltig (126px je Zelle) und trug gleichzeitig die 40px
   Innenabstand des Desktops. „shareholder:" braucht 151px, „Manufacturing"
   103px; beides lief also über, in Englisch wie in Deutsch. Betroffen sind alle
   vier Case Studies zwischen 480 und 767 — ein Bereich, der bisher niemandem
   aufgefallen ist, weil auf 390 und 834 geprüft wurde.
   Ab hier gilt in diesem Band, was auf dem Telefon gilt: zwei Spalten, und der
   Innenabstand eine Stufe kleiner (25px, wie im Band darüber).
   -------------------------------------------------------------------------- */
@media (min-width: 480px) and (max-width: 767px) {
  /* die Infokästen liegen in `.box-inner-wrapper` — dort stehen die Spalten,
     nicht auf `.box-wrapper.grid3` (das ist in diesem Band eine Flexspalte) */
  html .box-inner-wrapper {
    grid-template-columns: 1fr 1fr !important;
  }
  html .box-wrapper .box-1 > .box-inner,
  html .track-sec .box-1 > .box-inner,
  html .box-wrapper .box-2,
  html .track-sec .box-2,
  html .box-wrapper .box-3 { padding: 25px !important; }
}

/* --------------------------------------------------------------------------
   133. Teamkarten ohne Profilseite sehen nicht klickbar aus.
   Für Martin Nonnenmacher und Wilhelm Steger gibt es (noch) keine Profilseite.
   Ihre Karten lagen als `<a>` ohne `href` im Markup — der Browser navigiert
   dann nirgendwohin, die Karte trug aber weiter Zeiger und Hover-Vorhang.
   Sie sind jetzt `<div class="team-card is-unlinked">`; hier fällt dazu die
   Hover-Ankündigung weg, damit nichts eine Seite verspricht, die es nicht gibt.
   -------------------------------------------------------------------------- */
.team-card.is-unlinked { cursor: default; }
.team-card.is-unlinked:hover .executives_photos-overlay { height: 0 !important; }

/* --------------------------------------------------------------------------
   134. Rückfall für die Glasleiste, wo `backdrop-filter` fehlt.
   Firefox kann es erst ab 103 — Andres Firefox nicht. Ohne Unterstützung bleibt
   von der Leiste nur ihre halbtransparente Farbe, der Text darunter scheint
   durch und die Leiste liest sich „ungeblurrt". Ein Blur lässt sich nicht
   nachbilden; was hilft, ist Deckung: wo die Eigenschaft fehlt, wird die Fläche
   nahezu opak — dieselbe Farbe, nur ohne Durchblick. Alles, was blurren kann,
   sieht davon nichts.
   -------------------------------------------------------------------------- */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  /* NACHTRAG: die Leiste heißt `.navbar_wrapper` — die erste Fassung zielte auf
     Klassen, die es hier nicht gibt, deshalb blieb sie in Firefox 98 bei ihren
     10 % Deckung und sah „ungeblurrt" aus. */
  .navbar_wrapper,
  .navbar_component,
  .navbar,
  .navbar-2,
  .navbar_menu,
  .video-btn,
  .consent { background-color: rgba(250, 250, 250, .97) !important; }
  .navbar_wrapper.is-on-dark,
  html.hero-dark .navbar_wrapper,
  html.hero-dark .navbar_component,
  .navbar_component.is-dark,
  .navbar.is-dark { background-color: rgba(33, 33, 33, .94) !important; }
  .video-btn { background-color: rgba(217, 217, 217, .85) !important; }
}

/* --------------------------------------------------------------------------
   135. Die grauen Bildkästen der Teamkarten bleiben quadratisch.
   Der Export gibt ihnen eine FESTE Höhe (280 / 300 / 560px), die Breite kommt
   aber aus der Rasterspalte — gemessen lief das Verhältnis von 1,25 bei 390px
   über 0,87 bei 1194 bis 1,00 bei 1920. Quadratisch war es nur ganz oben, und
   genau das ist der gezeichnete Zustand: 560×560. Jetzt kommt die Höhe aus dem
   Verhältnis, nicht aus einer Zahl — in jeder Breite ein Quadrat. Die
   Porträtdateien sind selbst quadratisch, es wird also nichts gestaucht.
   Die breiten Bildblöcke (`card2`) behalten ihr eigenes Format.
   -------------------------------------------------------------------------- */
html .team-card-header:not(.card2) {
  aspect-ratio: 1 / 1 !important;
  height: auto !important;
  min-height: 0 !important;
}

/* --------------------------------------------------------------------------
   136. Der Fortschritt im Sliderbalken erscheint in JEDEM Browser.
   Swipers eigenes Stylesheet schreibt die Füllung in VERSCHACHTELTEM CSS
   (`.swiper-pagination-progressbar { .swiper-pagination-progressbar-fill {…} }`).
   CSS-Nesting kennt Firefox erst ab 117, Safari ab 16.5 — in älteren Versionen
   ist der ganze Block ungültig, die Füllung bekommt also weder Position noch
   Höhe noch `transform-origin` und ist unsichtbar. Genau das meldet Andre:
   „in Firefox sind alle Balken leer".
   Hier stehen dieselben Angaben flach, ohne Verschachtelung.
   -------------------------------------------------------------------------- */
.swiper-pagination-progressbar { position: relative; overflow: hidden; }
.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transform-origin: left top;
  background: var(--brand) !important;
}

/* --------------------------------------------------------------------------
   137. Kontaktbox: Inhalt oben, Höhe aus dem Inhalt.
   Erste Fassung hatte das Verhältnis 4:2.4 aus §115 mit einem nullbreiten
   Vorsatz als MINDESThöhe nachgebaut — dadurch rutschte der Inhalt an den
   unteren Rand und über „Contact" stand eine große Leere. Zurückgedreht:
   kein Verhältnis mehr, keine erzwungene Höhe. Die Box ist so hoch, wie ihr
   Inhalt sie braucht, der Inhalt beginnt oben, und unten bleibt derselbe
   Innenabstand wie links.
   Dazu: über der E-Mail mindestens so viel Luft wie zwischen E-Mail und
   Telefon (18px gegen 14px) — vorher klebte „Contact" an der Adresse.
   -------------------------------------------------------------------------- */
html .contact-box {
  aspect-ratio: auto !important;
  height: auto !important;
  min-height: 0 !important;
  justify-content: flex-start !important;
}
html .contact-box > p.paragraph { margin-bottom: 18px !important; }

/* --------------------------------------------------------------------------
   138. Erfahrungskacheln der Profile: weniger Spalten in schmalen Bändern.
   Das Raster (`.client-box-wrapper.dyn-items`) lief ab 992 mit sechs Spalten.
   Gemessen bei 1280: 164 CSS-px je Kachel, das Logo darin 134 — und die Rolle
   darunter brach auf vier Zeilen („Finance and PMO Project Lead"). Vier Spalten
   im Zoom-Band, drei im Tablet-Band, sechs erst ab 1440, wo die Kachel wieder
   über 230px hat.
   -------------------------------------------------------------------------- */
@media (min-width: 992px) and (max-width: 1439px) {
  html .client-sec .client-box-wrapper.dyn-items {
    grid-template-columns: 1fr 1fr 1fr 1fr !important;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  html .client-sec .client-box-wrapper.dyn-items {
    grid-template-columns: 1fr 1fr 1fr !important;
  }
}
@media (max-width: 767px) {
  html .client-sec .client-box-wrapper.dyn-items {
    grid-template-columns: 1fr 1fr !important;
  }
}

/* --------------------------------------------------------------------------
   139. Der Claim im Footer sitzt höher — und nicht mehr auf der Zeichnung.
   Der Abstand nach oben stand als FESTE Zahl (240 / 300 / 340px, §7). Die
   Zeichnung dagegen ist proportional: ihr Rahmen ist halb so breit wie der
   Inhalt und trägt die Proportion der Komposition (961:555), ihre Spitze liegt
   also umso höher, je KÜRZER das Fenster ist. Auf einem 780px-Fenster reicht
   sie 91 CSS-px in den Contact-Knopf hinein — genau die Überschneidung aus
   Andres Safari-Screenshot.
   Der Abstand ist deshalb jetzt anteilig an der Fensterhöhe statt fest, und
   zwar wie alle Höhen dieser Datei durch den Zoom des Bandes geteilt (14 % ×
   1/0,8 = 17,5svh bzw. × 1/0,7 = 20svh). Gemessen bleibt der Knopf damit bei
   700, 800, 900 und 1050px Fensterhöhe über der Spitze.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) {
  html .section-2 > .overflow-hidden.section_footer-cta {
    padding-top: 14vh !important;
    padding-top: 14svh !important;
  }
}
@media (min-width: 992px) and (max-width: 1364px) {
  html .section-2 > .overflow-hidden.section_footer-cta {
    padding-top: 20vh !important;
    padding-top: 20svh !important;
  }
}
@media (min-width: 1365px) and (max-width: 1849px) {
  html .section-2 > .overflow-hidden.section_footer-cta {
    padding-top: 17.5vh !important;
    padding-top: 17.5svh !important;
  }
}
@media (min-width: 1850px) {
  html .section-2 > .overflow-hidden.section_footer-cta {
    padding-top: 16vh !important;
    padding-top: 16svh !important;
  }
}

/* --------------------------------------------------------------------------
   140. Kurze Fenster: der Claim rückt weiter nach oben.
   Bei 1440×700 blieben zwischen Contact-Knopf und Spitze der Zeichnung −11px,
   der Knopf lag also noch darauf. Unter 780px Fensterhöhe deshalb eine Stufe
   höher; gemessen danach 700px Höhe: 24px Luft.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-height: 780px) {
  html .section-2 > .overflow-hidden.section_footer-cta {
    padding-top: 9vh !important;
    padding-top: 9svh !important;
  }
}
@media (min-width: 992px) and (max-width: 1364px) and (max-height: 780px) {
  html .section-2 > .overflow-hidden.section_footer-cta {
    padding-top: 12.8vh !important;
    padding-top: 12.8svh !important;
  }
}
@media (min-width: 1365px) and (max-width: 1849px) and (max-height: 780px) {
  html .section-2 > .overflow-hidden.section_footer-cta {
    padding-top: 11.2vh !important;
    padding-top: 11.2svh !important;
  }
}

/* --------------------------------------------------------------------------
   141. Zweizeilige Beschriftungen laufen wirklich auf 1.0.
   §58a legt die Zeilenhöhe aller KPI-Beschriftungen auf 1.0. Bei „Adj. EBITDA
   margin (at entry)" (Lenzing, KUKA, Treofan, IDT) blieb es trotzdem bei 1.3.
   Gemessen (Chromium, /kuka/): 390px → 15/15, 1194px → 16/16, 1440px →
   18/23,4. Die Zeilenhöhe stand also nur AB 1200px falsch.

   Ursache waren zwei spätere Regeln, die zusammen mit der Größe auch die
   Zeilenhöhe neu setzten: §94 („ab 1200 eine Stufe größer") und die Ramp aus
   §111. Beide schrieben `line-height: 1.3 !important` und standen hinter §58a
   — bei gleicher Wichtigkeit gewinnt die spätere Regel. Nicht die Klasse war
   das Problem: die Beschriftung ist ein `h6.heading-6.fs-semibold` und wurde
   von §58a durchaus getroffen.

   Konsequenz: die Größe bleibt bei §94/§111, die Zeilenhöhe hat wieder EINE
   Quelle (§58a). In beiden Blöcken steht jetzt 1.0 mit Verweis hierher — eine
   dritte Regel an dieser Stelle wäre genau der Fehler, den §58a beseitigt hat.
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   142. Die weiße Erklärbox: der fette Anfang liest eine Stufe kleiner.
   Der fette Absatz („Bickel & Company manages transformation across all
   functions …") stand auf 24px zum 16px-Fließtext darunter, also Faktor 1,5.
   Er ist der längste Text dieser Spalte und lief dadurch über die halbe
   Kartenhöhe. Jetzt 20px zu 16px (Faktor 1,25) — kleiner als der Fließtext
   darf er nirgends werden, deshalb ist 18px die harte Untergrenze in jedem
   Band (Fließtext: 16px, siehe §111-Ramp).
   Gemessen (Chromium, /): 1920 → 20/16, 1440 → 20/16 (gemalt 16/12,8),
   1194 → 19,7/16, 834 → 18/16, 390 → 18/16.
   -------------------------------------------------------------------------- */
html .box-3 .heading-7 {
  font-size: 20px !important;
  line-height: 1.3 !important;
}
@media (min-width: 768px) and (max-width: 1364px) {
  html .box-3 .heading-7 { font-size: clamp(18px, 1.65vw, 20px) !important; }
}
@media (max-width: 767px) {
  html .box-3 .heading-7 { font-size: 18px !important; }
}

/* --------------------------------------------------------------------------
   143. Die Marken in den Logo-Slidern werden nirgends mehr beschnitten.
   §49d gab ihnen `width: 100%; height: auto; max-height: 100%`. Die Deckelung
   greift aber nicht: die graue Kachel ist ein Flex-Kasten, dessen Höhe aus
   `min-height` kommt — `height` bleibt `auto`. Eine Prozent-Angabe hat damit
   keinen definiten Bezug und verhält sich wie `none`. Die Grafik wuchs also
   allein aus der Breite, und `overflow: hidden` schnitt oben und unten ab —
   genau das Bild aus Andres Rückmeldung („Logo abgeschnitten"), nur an den
   Kunden-Slidern statt an den Profilen.
   Gemessen (Chromium, /for-companies/, Überstand der Kachel):
     991 → 33px, 1194 → 56px, 1364 → 86px, 1440 → 15px, 1920 → 22px.
   Statt eines Zahlenwerts bekommt die Grafik ihre Höhe jetzt vom Kasten selbst:
   `align-self: stretch` macht die Querachse zur Inhaltshöhe der Kachel, und
   `object-fit: contain` (schon aus §49d) legt die Marke vollständig hinein.
   Danach: Überstand 0 an allen sieben geprüften Breiten, und die Höhen der
   Marken einer Reihe liegen dichter zusammen als vorher (991: vorher 48/121/173,
   jetzt 48/106) — die vermeintlich „großen" Logos waren die abgeschnittenen.
   -------------------------------------------------------------------------- */
.myswiper3 .swiper-slide img,
.myswiper5 .swiper-slide img,
.myswiper6 .swiper-slide img {
  align-self: stretch !important;
  min-height: 0 !important;
}

/* --------------------------------------------------------------------------
   144. Erfahrungsraster: der Reihenabstand ist der Spaltenabstand.
   Im Band 992–1199 setzt der Export (custom.css) `grid-column-gap: 22px` und
   `grid-row-gap: 36px` — die Reihen standen dort 14px weiter auseinander als die
   Spalten, sichtbar auf jedem Profil mit mehr als einer Reihe. Überall sonst
   sind beide Werte gleich (390/834: 50, 1440/1920: 60). Jetzt in jedem Band.
   Gemessen an den Rechtecken der Kacheln, nicht an der Regel.
   -------------------------------------------------------------------------- */
@media (min-width: 992px) and (max-width: 1199px) {
  html .client-sec .client-box-wrapper,
  html .client-sec .client-box-wrapper.hidden,
  html .client-sec .client-box-wrapper.dyn-items {
    row-gap: 22px !important;
    column-gap: 22px !important;
  }
}

/* --------------------------------------------------------------------------
   145. Zwei Heros zeigen so viel Kopf, wie in der Datei steckt.
   Andre (Deck S10 und S17): auf /about-us/ ist der Kopf oben abgeschnitten, auf
   /for-lenders/ fehlt die Lücke zur Wortmarken-Leiste. Beide Flächen liegen auf
   `background-size: cover`; bei einem 3:2-Bild in einem 1,6:1-Fenster bleiben
   nur rund 60px Spielraum in der Höhe (1440×900: Bild 1440×960). Der Ausschnitt
   startet jetzt am oberen Bildrand — mehr gibt die Datei nicht her.
   Gemessen bei 1440×900 und 1440×780: der Kopf rutscht um 21px (about-us,
   vorher 35 %) bzw. 6–18px (for-lenders, vorher 10 %) nach unten.
   ACHTUNG: die Quellaufnahme von /about-us/ schneidet den Scheitel selbst ab —
   im 1920er wie im 2560er Original. Eine echte Lücke über dem Kopf braucht dort
   eine anders gerahmte Aufnahme, keine CSS-Regel.
   -------------------------------------------------------------------------- */
html:where(.page-about-us) .hero-sec2.py-100 { background-position: 55% 0% !important; }
html:where(.page-for-lenders) .hero-sec2.py-100 { background-position: 62% 0% !important; }

/* --------------------------------------------------------------------------
   146. Telefon: die orangene Platte wird eine Stufe höher (Kundenwunsch 4.8.).
   Sie stand auf `min-height: 50cqw` (§72), also exakt der halben Zellbreite —
   bei 390px Fenster sind das 161px. Gewünscht waren 10–20 % mehr Höhe bei
   gleichem Innenabstand: 57,5cqw = +15 %, gemessen 185px bei 390, 202px bei
   430, 227px bei 480. Der Innenabstand (20px, also der Abstand des Werts nach
   unten und links) bleibt unberührt — die Platte verteilt ihren Inhalt mit
   `space-between`, der Wert bleibt also unten bündig.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  html .box-wrapper .box-2,
  html .track-sec .box-2,
  html .box-wrapper > *:has(> .box-2) > .box-2,
  html .track-sec .box-wrapper > *:has(> .box-2) > .box-2,
  html .box-wrapper > .js-has-plate > .box-2,
  html .track-sec .box-wrapper > .js-has-plate > .box-2 {
    min-height: 57.5cqw !important;
  }
}

/* --------------------------------------------------------------------------
   147. Schwebende Browserleisten: der Inhalt bleibt darüber.
   Safaris kompakte Leiste liegt als Pille ÜBER dem Inhalt (Andres iPhone,
   4. August). Die Seite bekommt dann die volle Bildschirmhöhe — `100svh` ist
   genauso groß wie `100lvh` — und die unteren rund 70px sind verdeckt.
   main.js §1b erkennt genau diesen Fall und setzt `js-floating-bars`; auf jedem
   anderen Gerät (Desktop, Android, iPad, iPhone mit klassischer Leiste) bleibt
   die Klasse aus und hier ändert sich nichts.

   Gemessen live an 393×852 und 393×745, Luft bis zur Unterkante:
     Pillenreihe/„Learn more" aller Unterseiten  40px
     Scroll-Strich der Startseite               24px
     Copyright + Legal Notice + Privacy         20px
   Die Reserve ist der Sicherheitsabstand des Geräts plus 44px — auf einem
   iPhone mit Home-Indikator also 78px, auf einem älteren 44px. Damit steht
   jeder dieser Blöcke frei über der Pille. Die HÖHE der Sektionen bleibt
   unangetastet: Fotos dürfen hinter der Leiste weiterlaufen, Inhalt nicht.
   -------------------------------------------------------------------------- */
html.js-floating-bars { --bar-reserve: calc(env(safe-area-inset-bottom, 0px) + 44px); }

@media (max-width: 991px) {
  /* Pillenreihe und „Learn more" der Unterseiten- und Team-Heros */
  html.js-floating-bars .hero-sec2 .tab-btn-wrapper,
  html.js-floating-bars .team-hero .tab-btn-wrapper {
    margin-bottom: var(--bar-reserve) !important;
  }
  /* der Scroll-Strich der Startseite */
  html.js-floating-bars .section_hero .hero_indicator {
    bottom: calc(24px + var(--bar-reserve)) !important;
  }
  /* Copyright, Legal Notice, Privacy Policy im Footer */
  html.js-floating-bars .section-2 > .footer-bottom.pt-480 {
    padding-bottom: calc(20px + var(--bar-reserve)) !important;
  }
  /* Name und Rolle der Profile haben 271px Luft und brauchen nichts — das
     Porträt läuft dort absichtlich bis an die Kante. */
}

/* --------------------------------------------------------------------------
   148. Kontaktkarte auf ALLEN dreizehn Profilen.
   Sie war bis zum 6.8. ein Entwurf auf `/teams/mark-bickel-v2`, stand dann auf
   Marks Profil und gilt seit dem 7.8. (Kundenentscheid) überall. Die Regeln
   brauchen deshalb keine Seitenklasse mehr — `.vk` kommt nur auf den Profilen
   vor. Die alte `.contact-box` ist aus allen Profilquellen verschwunden; ihre
   Regeln (§112) bleiben stehen, weil /contact sie weiter nutzt.
   Aufbau: Rolle, Name, die Angaben als beschriftete Zeilen mit Haarlinie und
   ganz unten der Knopf, der die Kontaktdaten als vCard herunterlädt.
   Drei Profile (Nonnenmacher, Steger, Goetz) haben keine Telefonnummer — dort
   fehlt die Zeile ganz, `:first-child` regelt die Haarlinie von selbst.

   NACHTRAG (6. August, Kundenvorgabe): das Porträt ist RAUS. Die Karte steht
   neben dem Text — der Kopf stand dort schon im Hero derselben Seite, ein
   zweites Mal war er Wiederholung. Mit ihm fällt der einzige Verlauf der Karte
   weg (#f0f0f0 → #e4e4e4), der ohnehin nicht zur Palette gehörte. Die Bilddatei
   bleibt liegen, sie trägt weiter das Team-Raster auf /team.

   Dazu die zweite Vorgabe: NUR Farben, die auf der Seite schon im Einsatz sind.
   Die Karte trug genau eine, die es sonst nirgends gab — #9a9a9a für die
   Beschriftungen. Ersatz ist `#21212180` (Ink auf 50 %), die vorhandene
   gedämpfte Textfarbe der Seite (`.body-para2`, site.css:3960). Der Rest war
   bereits Bestand: #fff, --ink, --brand, Haarlinie Ink auf 10 %.
   -------------------------------------------------------------------------- */
html .vk {
  background: #fff;
  border-radius: 0;            /* Kundenwunsch: keine Rundung */
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
html .vk_body { padding: 28px 28px 28px; }
html .vk_role {
  margin: 0 0 6px;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--brand, #fe5000);
}
html .vk_name {
  margin: 0;
  font-size: 28px;
  line-height: 1.15;
  font-weight: 600;
  color: #212121;
}
/* die Angaben: Beschriftung klein und gesperrt, Wert darunter, Haarlinie
   zwischen den Zeilen — keine Rahmen, keine Kästen */
html .vk_rows { margin: 22px 0 0; }
html .vk_row {
  padding: 14px 0;
  border-top: 1px solid rgba(33, 33, 33, .10);
}
html .vk_row:first-child { border-top: 0; padding-top: 0; }
html .vk_label {
  display: block;
  margin: 0 0 4px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: #21212180;   /* Ink auf 50 % — dieselbe gedämpfte Textfarbe wie .body-para2 */
}
html .vk_value { margin: 0; }
html .vk_value a {
  font-size: 16px;
  line-height: 1.3;
  color: #212121;
  text-decoration: none;
  overflow-wrap: anywhere;
  transition: color .2s ease;
}
html .vk_value a:hover,
html .vk_value a:focus-visible { color: var(--brand, #fe5000); }
/* Die LinkedIn-Zeile führt aus der Seite hinaus und bekommt dafür einen Pfeil
   (Kundenwunsch 7.8.). Es ist DERSELBE Pfeil wie überall — die 15×11-Maske aus
   §5, eingefärbt statt als eigene Datei — aber ohne den runden Rahmen, den die
   Slider-Knöpfe tragen, und dauerhaft orange. E-Mail und Telefon bleiben ohne:
   die bleiben im Gerät, nur diese eine Zeile verlässt die Seite.
   `vertical-align: -1px` setzt ihn auf die Schriftlinie statt auf die
   Unterkante der Zeile. Beim Hover rückt er 3px nach, mit derselben .2s wie
   der Farbwechsel daneben. */
html .vk_value a.vk_link { display: inline-flex; align-items: center; gap: 8px; }
html .vk_value a.vk_link::after {
  content: "";
  flex: none;
  width: 15px; height: 11px;
  vertical-align: -1px;
  background-color: var(--brand);
  -webkit-mask: var(--arrow) center / 15px 11px no-repeat;
          mask: var(--arrow) center / 15px 11px no-repeat;
  transition: transform .2s ease;
}
html .vk_value a.vk_link:hover::after,
html .vk_value a.vk_link:focus-visible::after { transform: translateX(3px); }
/* Der Knopf ist KEIN eigener Bau: er trägt dieselben Klassen wie die Knöpfe der
   „Learn more"-Reihe auf weißen Flächen (`.tab-btn3` > `.tab-inner-btn.bg-gray`
   mit dem orangenen Punkt) und damit automatisch dasselbe Verhalten samt Hover.

   NACHTRAG (6. August, Kundenvorgabe): die FÜLLUNG fällt weg — nur sie. Der
   Knopf behält seine Form, denn den Rahmen trägt ohnehin das ÄUSSERE Element:
   `.tab-btn3` hat seitenweit `1px solid #fe5000` bei 8px Radius, der Innenteil
   `border-width: 0`. Ein zusätzlicher Rand am Innenteil ergäbe einen zweiten
   Ring innerhalb des orangenen — deshalb bleibt es bei der reinen Füllung.
   Vorlage ist `.tab-inner-btn.bg-gray2` (`background-color: #0000`), die
   füllungsfreie Variante aus dem Export. `.bg-black` wäre falsch: die trägt
   zusätzlich `color: #fff` und hinterlässt auf Weiß unsichtbare Schrift (die
   Falle aus HANDOFF-05-08, Punkt 6). Schrift bleibt --ink, Punkt bleibt orange.

   Der Hover ist unangetastet: §7 füllt jeden `.tab-btn3:hover .tab-inner-btn`
   orange und setzt die Schrift auf Weiß — dieselbe Bewegung wie überall sonst.
   Hier steht nur der Abstand darüber. */
html .vk_action { margin-top: 26px; }
html .vk_action .tab-inner-btn { background-color: transparent; }

/* Tablet und Telefon: die Karte steht unter dem Text und nimmt die ganze
   Breite; enger gesetzt, damit sie ohne Bild nicht luftig auseinanderfällt */
@media (max-width: 991px) {
  html .vk_body { padding: 24px 22px; }
  html .vk_name { font-size: 24px; }
}

/* --------------------------------------------------------------------------
   149. Marks Erfahrungen (Deck 04.08., S22) — HISTORIE, keine Regeln mehr.
   Der Stand lag bis zum 6.8. als Entwurf auf der Zweitfassung und ist mit der
   Kundenfreigabe auf `/teams/mark-bickel` gezogen. Beide Sonderbauformen sind
   dabei entfallen, weil der Kunde die Logos kombiniert geliefert hat — es sind
   heute zwei ganz normale Logo-Kacheln. Der Abschnitt bleibt stehen, damit
   nachvollziehbar ist, warum es die Klassen nicht mehr gibt:
   (a) `.mk_zwei`  — eine Kachel mit ZWEI Marken (GHOTEL und Aurelius als
       früherer Eigentümer). Beide sitzen nebeneinander, jede in ihrem
       Container-Rahmen, also weiter auf einer optischen Größe.
   (b) `.mk_sammel` — EINE Box über die ganze Rasterbreite mit sechs Marken und
       einer gemeinsamen Zeile darunter (Andres „bitte nur eine box"). Sie
       ersetzt die sieben Einzelkacheln „Buy-side and sell-side transactions".
   -------------------------------------------------------------------------- */
/* mk_zwei/mk_logos entfielen am 6.8.: GHOTEL×Aurelius ist jetzt EINE normale
   Logo-Kachel (logo-neu-ghotel-aurelius.svg, vom Kunden kombiniert). */

/* mk_sammel/mk_wide entfielen am 6.8.: die Sammelbox ist jetzt EINE normale
   Logo-Kachel (logo-neu-mark-sammelbox.svg, vom Kunden kombiniert geliefert). */

/* --------------------------------------------------------------------------
   150. Tippziele auf dem Telefon: mindestens 44px, ohne dass sich etwas
   verschiebt.

   Aus dem eigenen Prüflauf vom 5. August (Befund 3): auf 390px sind mehrere
   Bedienelemente kleiner als die 44px, die eine Fingerkuppe braucht — die
   Sliderpfeile 36x36, der Menüknopf 40x40, die Kapitel-Pillen 105x35, die
   Akkordeon-Zeilen 310x28, die Fußzeilen-Links 92x19, die Wortmarke im Kopf
   201x25, die Adressen auf /contact 224x21 und der Scroll-Hinweis unter dem
   Hero, der mit 3px Breite praktisch nicht zu treffen ist.

   Vergrössert wird die *Trefffläche*, nicht das Element: eine durchsichtige
   Fläche im Element selbst, mittig darüber gelegt. Damit bleibt jede gemessene
   Grösse, jeder Abstand und jede Ausrichtung genau so, wie sie abgenommen
   wurden — es ändert sich nur, wo ein Finger noch zählt.

   `max(100%, 44px)` wächst nur, wo es nötig ist: die 105px breite Pille bleibt
   105px breit, der 36px-Pfeil wird 44px. Nachgemessen: danach ist kein Element
   unter 44px, und keine zwei Treffflächen überlappen sich — geprüft über neun
   Seiten auf 390px.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  /* NICHT in dieser Liste: `.hero_indicator` und `.navbar_brand` — beide sind
     in site.css `position: absolute` verankert (Scroll-Strich an der Hero-
     Unterkante, Wortmarke in der Leiste). `relative` würde die Verankerung
     lösen — der Strich fiel dadurch auf dem Telefon mitten in den Hero
     (Kundenbefund 5.8. abends). Ein absolut positioniertes Element ist selbst
     Bezugsrahmen, die ::after-Trefffläche unten braucht die Umstellung nicht. */
  .navbar_menu-button,
  .footer-link,
  .contact-detail,
  .accordion-btn,
  .tab-btn2,
  .tab-btn3,
  .arrow-box,
  .arrow-box2,
  .swiper-button-next,
  .swiper-button-prev,
  .swiper-button-next2,
  .swiper-button-prev2,
  .right-side > a,
  a[href^="mailto:"],
  a[href^="tel:"] { position: relative; }

  /* §6 setzt den Pfeilen `position: static !important` — gewollt, damit sie als
     normale Kacheln in der Leiste stehen statt wie bei Swiper absolut im Slider.
     Für die Trefffläche muss der Pfeil aber sein eigener Bezug sein, sonst
     rechnet `100%` gegen den `.container` und die Fläche wird 390x371px gross.
     `relative` ohne Verschiebung ändert am Fluss nichts — der Pfeil steht auf
     denselben Pixeln wie vorher, er wird nur zum Bezugsrahmen. */
  [class*="swiper-button-"] { position: relative !important; }

  /* `.tab-btn2::after` ist vergeben (die aktive Pille trägt dort ihre Kontur),
     deshalb liegt die Trefffläche dort auf `::before`.
     `content` trägt ein `!important`, weil die Pfeile das Glyph von Swiper mit
     `.swiper-button-next.arrow-box::after { content: none }` abschalten — zwei
     Klassen, die diese Regel sonst überstimmen. */
  .navbar_menu-button::after,
  .navbar_brand::after,
  .footer-link::after,
  .contact-detail::after,
  .accordion-btn::after,
  .tab-btn2::before,
  .tab-btn3::after,
  .hero_indicator::after,
  .arrow-box::after,
  .arrow-box2::after,
  .swiper-button-next::after,
  .swiper-button-prev::after,
  .swiper-button-next2::after,
  .swiper-button-prev2::after,
  .right-side > a::after,
  a[href^="mailto:"]::after,
  a[href^="tel:"]::after {
    content: "" !important;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: max(100%, 44px);
    height: max(100%, 44px);
    background: none;
    border: 0;
    z-index: 0;
  }

  /* Der Inhalt bleibt über der Trefffläche, sonst verdeckt sie Pfeil und Text. */
  .navbar_menu-button > *,
  .navbar_brand > *,
  .accordion-btn > *,
  .tab-btn2 > *,
  .tab-btn3 > *,
  .arrow-box > *,
  .arrow-box2 > *,
  .swiper-button-next > *,
  .swiper-button-prev > *,
  .swiper-button-next2 > *,
  .swiper-button-prev2 > *,
  .right-side > a > * { position: relative; z-index: 1; }
}

/* --------------------------------------------------------------------------
   151. Telefon: der mobile Swoosh sitzt mit seinem Treffpunkt auf der Mitte
   der sichtbaren Höhe — im Ladeschirm UND danach über dem Hero.
   (Kundenwunsch 6. August: „mobil die lottieanimation immer zentriert — name
   zentriert und lottie-konvergenzpunkt in der höhe ausrichten", und in der
   zweiten Runde: „die animation soll sich nicht nach oben schieben nach dem
   ladebildschirm sondern die selbe position im hero beibehalten — sie sitzt
   dann nur etwas tiefer mobil, aber das ist sogar gut." Ersetzt die Fassung
   vom 5.8., die die Wortmarke auf den Treffpunkt bei 38,6 % herunterzog —
   auf echten iPhones stimmte der feste Wert wegen Safaris Leisten nicht.)

   Die Verschiebung gilt DAUERHAFT unter 480px, nicht nur im Ladeschirm:
   `code-embed-13` (der mobile Swoosh aus `chrome.html`, nur auf der
   Startseite — build.py setzt chrome nur bei is_home) hält nach dem Laden
   sein letztes Bild über dem Hero, und genau dort bleibt er jetzt stehen.
   Der Treffpunkt liegt fest auf 38,8 % der Höhe der Lottie-Fläche (16:9,
   höhenangepasst; gemessen 0,3801/0,3797/0,3804 bei 360/390/430). main.js
   (`mobileSwooshMitte`) misst den nie transformierten WRAPPER — nicht die
   Fläche selbst, sonst speiste sich die Rechnung beim zweiten Lauf aus der
   eigenen Verschiebung — und setzt `--preload-swoosh-shift` so, dass der
   Treffpunkt auf 50 % von `window.innerHeight` liegt: derselben Referenz,
   aus der die Szene ihre Höhe und die Wortmarke ihre Mitte bezieht. Neu
   gerechnet bei resize (Safaris Leisten ändern innerHeight); der Übergang
   unten glättet das.

   Verschoben wird `.lottie-animation_2` (die absolut positionierte Fläche
   selbst) — NICHT `.code-embed-13`: ein Transform dort machte den 0px hohen
   Kasten zum Bezugsrahmen, und die Prozent-Höhe der Fläche fiele auf 0.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  /* custom.css zentriert die Fläche mit `translate(-50%, -50%) !important` —
     beide Anteile müssen zusammen geschrieben werden (transform ist EINE
     Angabe), und gewonnen wird über die höhere Spezifität bei gleichem
     !important (html + 3 Klassen gegen :where(...) + 2). Media bis 767:
     seit §156 gilt das Telefon-Muster im ganzen Band. */
  html .animation-wrapper .code-embed-13 .lottie-animation_2 {
    transition: transform .5s ease;
    transform: translate(-50%, -50%) translate(var(--preload-swoosh-shift-x, 0px), var(--preload-swoosh-shift, 0px)) !important;
  }
}

/* --------------------------------------------------------------------------
   152. Menü: die Einträge auf 80 % ihrer bisherigen Größe.
   (Deck 04.08., S3: „Fände so eine Größe weniger überrumpelnd. Das ist die bei
   mir, wenn ich auf 80% Größe vom aktuellen stelle.")

   Andres Vorbehalt — ob wir es seit dem 4. August schon kleiner gemacht hätten —
   ist geprüft: die Menüschrift ist seitdem nicht angefasst worden. Die 80 %
   gelten also gegen den Stand, den er vor sich hatte.

   Beide Stufen wandern mit, sonst wird das Tablet größer als der Desktop:
   die Grundstufe `clamp(26px, 3.4vw, 48px)` und die Tablet-Stufe von 44px.
   Die Zeilenhöhe ist ein Faktor und folgt von selbst.
   -------------------------------------------------------------------------- */
.menu-item .navbar-link { font-size: clamp(21px, 2.72vw, 38px) !important; }
@media (min-width: 768px) and (max-width: 1199px) {
  .menu-item .list-item .navbar-link,
  .menu-item .navbar-link { font-size: 35px !important; }
}

/* --------------------------------------------------------------------------
   153. Expertise, Firefox: das Logo fährt hoch und fällt danach im Hover
   wieder ein Stück zurück.
   (Andre, 5. August — und der entscheidende Zusatz: „das ist übrigens nur in
   Firefox so".)

   Gemessen, nicht geraten:

   * Die Geometrie ist in beiden Motoren identisch und ruhig — 30 Messungen über
     drei Sekunden, der Wert steht ab 500ms auf −140px und bleibt dort. Es ist
     also kein Layout-Problem, sondern eines beim Malen.
   * Firefox meldet im Hover `backdrop-filter: blur(50px)` auf `.layer2` — die
     Weichzeichnung über der ganzen Kachel wird angewandt und ist der teuerste
     Teil dieses Zustands. Sie wird verspätet fertig und zeichnet den Stapel neu.
   * Und der Übergang auf dem Logo lautete `all 0.5s`. Bei `all` startet **jede**
     Eigenschaft, die nach der Bewegung noch einmal neu aufgelöst wird, eine
     zweite Animation über 0,5s. Das ist genau die beschriebene Rückbewegung.

   Verengt auf `transform` — nachgemessen ist das verlustfrei: beim Hover ändert
   sich am Logo ausschliesslich `transform` (alle 340 berechneten Eigenschaften
   verglichen, Ruhe gegen Hover). Dauer und Kurve bleiben, im Ruhezustand
   verschiebt sich kein Pixel.
   -------------------------------------------------------------------------- */
:where(html.page-expertise) .experience-card .image-35.box-logo {
  transition: transform .5s !important;
}

/* Das war die Ursache, und sie ist gefilmt: ein Bildschirm-Mitschnitt der
   Karte in echtem Firefox zeigt, wie die Wortmarke hochfährt, bei 384
   (Gerätepixel) zur Ruhe kommt — und Sekunden später auf 440 zurückfällt.
   56 Gerätepixel sind 28 CSS-Pixel, und 28 ist genau 140 − 112.

   140 ist der Versatz, wie er dasteht. 112 ist derselbe Versatz mal dem Zoom
   0,8, den der Container trägt. Firefox malt zuerst die eine Zahl und
   korrigiert später auf die andere — `zoom` gibt es dort erst seit Version 126,
   und das Zusammenspiel mit `transform` ist noch nicht sauber.

   Ein Prozentwert löst sich gegen die eigene, bereits gezoomte Höhe des Bildes
   auf. Damit kommen beide Durchgänge auf dieselbe Zahl und es gibt nichts mehr
   zu korrigieren. Der Wert ist eingemessen, nicht gerechnet: der Prozentsatz löst
   sich gegen die CSS-Höhe des Bildes auf (458,75px), die Messung liefert gemalte
   Pixel — bei 30,5 % steht die Oberkante wieder auf 20, exakt wie bei den 140px
   vorher. Siehe auch die Falle „der Container hat den Zoom, nicht das Fenster".
   Im Mitschnitt bleibt die Unterkante damit auf 384 stehen. `will-change` half
   nicht, die Weichzeichnung war es auch nicht. */
:where(html.page-expertise) .experience-card:hover .image-35.box-logo {
  transform: translateY(-30.5%) !important;
}

/* --------------------------------------------------------------------------
   154. Expertise: keine harte Kante mehr auf halber Kachelhöhe.
   (Kunde, 5. August: „beim Ein- und vor allem beim Ausblenden ist eine harte
   Kante bei 50 % der Kachelhöhe zu sehen.")

   Die Fläche `.layer2` steht im Ruhezustand auf `height: 60%; bottom: 0`, im
   Hover auf `inset: 0` — sie wächst also über die ganze Kachel. Nur: `top: auto`
   und `height: auto` lassen sich nicht interpolieren. Der Kasten **springt**,
   während die Weichzeichnung darüber ihre 0,5s lang ein- und ausblendet. Beim
   Ausblenden schnappt er sofort auf 60 % zurück, die Unschärfe läuft aber noch —
   und endet an genau dieser Oberkante. Das ist die Kante, gut 40 % von oben.

   Der Kasten ändert seine Größe jetzt gar nicht mehr: er steht immer auf der
   ganzen Kachel, und der Verlauf trägt den Ansatzpunkt selbst (`40%` statt
   `0%`). Gemalt ist das im Ruhezustand derselbe Farbverlauf wie vorher —
   pixelgleich nachgeprüft. Bewegt wird nur noch, was sich sauber bewegen lässt:
   der Verlauf und die Unschärfe.

   `.layer2` kommt ausschliesslich auf /expertise vor (84 Stellen, sonst nirgends).
   -------------------------------------------------------------------------- */
html.page-expertise .layer2 {
  inset: 0 !important;
  height: auto !important;
  background-image: linear-gradient(#fe500000 40%, #fe5000a6 100%);
}
html.page-expertise .layer2.bg-white {
  background-image: linear-gradient(#fff0 40%, #ffffffbf 100%);
}

/* --------------------------------------------------------------------------
   155. S11: das Porträt größer und weiter nach rechts (Deck 04.08., S11).
   Eingemessen wurde der Zuschnitt am 5.8. auf Marks Zweitfassung; seit der
   Kundenfreigabe vom 6.8. gilt er für ALLE Profile (Regel ohne Seitenklasse).
   Methode (Kundenvorgabe 5.8.): das Porträt wird von seiner sichtbaren LINKEN
   UNTEREN Ecke aus vergrößert — linke Silhouettenkante und Unterkante stehen,
   der Körper wird größer, der Kopf wandert nach rechts oben.
   Eingemessen bei 1920×1080: Leiste endet bei 100, Kopfoberkante lag bei 272
   (Abstand 171,9px), Ziel ist die Hälfte (86px). Zusatzfaktor 1,1064 um den
   Punkt (Tinte-links 1105,7 / Hero-Unterkante) ⇒ Gesamtskalierung
   1,38 × 1,1064 = 1,5268, als Versatz+Skalierung um die bestehende
   `transform-origin: 82% 0%` ausgedrückt (translate-% lösen gegen die
   Elementbox auf und skalieren deshalb in beiden Zoom-Bändern mit).
   Nachgemessen: Tinte-links und Unterkante unverändert, Kopf bei 186 = Leiste
   + 86, rechte Tintenkante 1716 < 1920 — nichts wird zusätzlich beschnitten.
   Das iPad-Band 768–1365 behält seine eigene, abgenommene Konstruktion
   (translateX(28%) mit !important, §oben) — dort greift die Regel bewusst
   nicht; das Telefon sowieso nicht (transform: none).
   -------------------------------------------------------------------------- */
@media (min-width: 1366px) {
  html .profile-hero_media img {
    transform: translate(8.03%, -10.64%) scale(1.5268);
  }
}

/* --------------------------------------------------------------------------
   156. Das Band 480–767 war verwaist (Kundenbündel 6.8.: Surface Duo 540,
   Zwischenbreiten 480/500).
   (a) D1/Z3: `.navbar_actions` fiel auf das Basis-`justify-content:
       flex-start` zurück — der Menü-Knopf stand LINKS und wurde vom
       Feinversatz `left:-21px` (Desktop-Maß, am rechten Anker harmlos)
       angeschnitten. Das Band trägt jetzt die Telefon-Konstruktion:
       Aktionen rechts. Die EN-Pille wohnt wie am Telefon im Menü.
   (b) Z4: der mobile Swoosh (`code-embed-13`) endete bei 479, der
       Desktop-Swoosh (`code-embed-12`, medienlose custom.css-Regel mit
       !important) begann faktisch erst ab 500 — 480–499 hatte WEDER
       Ladelinien NOCH Hero-Zeichnung, 500–767 die falsche (Desktop-)
       Komposition. Das Telefon-Muster gilt jetzt lückenlos bis 767;
       die §151-Zentrierung läuft mit (Media dort mitgezogen).
   -------------------------------------------------------------------------- */
@media (min-width: 480px) and (max-width: 767px) {
  /* wie im Telefonband: `margin-left: auto` schiebt den Aktionen-Container
     ans rechte Ende der Flex-Zeile (justify-content hilft nicht — der
     Container ist inhaltsbreit) */
  .navbar_actions { margin-left: auto !important; }
  html.page-index .code-embed-12 { display: none !important; }
  .code-embed-13 { display: block; }
}

/* --------------------------------------------------------------------------
   157. Sehr schmale Schirme: die Wortmarke steht LINKS auf der Textkante.
   (Kundenentscheid 6.8., Bild 28: „linksbündig zum Textinhalt darunter —
   wenn dann wirklich nur auf diesen kleinen Bildschirmen".)
   Unter ≤375px kollidierte die zentrierte Wortmarke (200,9px breit) mit dem
   Menü-Knopf (344: +5,4px, 320: +17,4px Überlapp). Linksbündig auf der
   40px-Kante (der Kante der Hero-Texte, §114) bleibt bei 344 die volle
   Größe; bei ≤330 zusätzlich eine Stufe kleiner, damit ≥8px Luft zum Knopf
   stehen (320: 40 + 187 = 227, Knopf beginnt bei 243). Ab 376px überall
   unverändert zentriert. Das Menü-Panel zieht mit (die Größe spiegelt
   `mirrorHeader()`, die Links-Stellung diese Regeln).
   Die Footer-Wortmarke (Bild 29) läuft gesondert in der Footer-Neuordnung
   (§158) — sie hat keinen Knopf neben sich.
   -------------------------------------------------------------------------- */
@media (max-width: 375px) {
  .navbar_brand { left: 40px !important; transform: none !important; }
  .menu-item_brand { left: 40px !important; transform: translateY(-50%) !important; }
}
@media (max-width: 330px) {
  .navbar_brand-text { font-size: 19.5px !important; }
}

/* --------------------------------------------------------------------------
   158. iPad-Band: Teamfoto klebte am Knopf, Platte hatte unten mehr als links.
   (Kundenbündel 6.8., iPad Mini Bilder 1 und 2.)
   (a) M1: das Teamfoto der Startseite begann 22px ÜBER der Unterkante des
       „View team"-Knopfs — in beiden Orientierungen des Bandes. Ziel ist die
       Telefon-Lücke (38px, nachgemessen bei 390): margin-top gleicht die
       gemessene Differenz aus (−22 → +38 = 60px), bandweit.
   (b) M2: die Platte („> 3x entry EBITDA", `.box-2`) trug `padding: 19px
       20px 40px 19px` — unten 40 gegen links 19. Unten = links (19px), NUR
       hochkant: quer gilt ein eigenes, stimmiges 32px-Uniformmaß.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) {
  .section_executives img.image-2 { margin-top: 60px !important; }
}
@media (min-width: 768px) and (max-width: 991px) and (orientation: portrait) {
  /* dieselbe Selektorstufe wie die 40px-Quelle (.track-sec .box-2, §3581),
     sonst verliert die Bandregel die Spezifität */
  .box-wrapper .box-2,
  .track-sec .box-2 { padding-bottom: 19px !important; }
}

/* --------------------------------------------------------------------------
   159. M3: der lange „Owned by"-Wert auf /lenzing läuft in schmalen Kacheln
   über. Die drei nbsp-Einheiten (§1.3, abgenommen: keine Brüche darin)
   bleiben — aber „Main shareholder:" misst 216px bei 26px und die Kachel-
   Innenbreiten sind schmaler: 480–767 → 182px, 768–991 hochkant → 142px,
   Zoom-Band → deutlich unter der Einheit (Kundenbilder: Text am Rand
   abgeschnitten). Je Band die größte Stufe, bei der die breiteste Einheit
   passt (Deutsch „Haupt­aktionär:" 179px läuft mit). Telefon und Desktop
   sind nicht gemeldet und bleiben unangetastet.
   -------------------------------------------------------------------------- */
@media (min-width: 480px) and (max-width: 767px) {
  html .box-wrapper .box-1 > .box-inner .fakten-lang,
  html .track-sec .box-1 > .box-inner .fakten-lang { font-size: 20px !important; line-height: 1.2 !important; }
}
@media (min-width: 768px) and (max-width: 991px) and (orientation: portrait) {
  html .box-wrapper .box-1 > .box-inner .fakten-lang,
  html .track-sec .box-1 > .box-inner .fakten-lang { font-size: 16px !important; line-height: 1.2 !important; }
}
@media (min-width: 992px) and (max-width: 1365px) {
  html .box-wrapper .box-1 > .box-inner .fakten-lang,
  html .track-sec .box-1 > .box-inner .fakten-lang { font-size: 20px !important; line-height: 1.2 !important; }
}

/* --------------------------------------------------------------------------
   160. P2/S6/Z9: Kundenfeedback-Box nach dem Teamkarten-Prinzip.
   (Kundenbündel 6.8., iPad Pro Bild 2, iPhone SE Bild 17, 480er Bild 38.)
   Der Name (h3 in `.team-body2`) fiel unterhalb des Desktops aus der Rampe
   (375: 16px, 540: 20, 768: 18, Zoom-Band: 21,5) und rutschte optisch UNTER
   die 24px-Position (`bold-text-14`) — nur 1440 stimmte (32/24). Jetzt
   spiegelt die Box die gemessene Teamkarten-Rampe (Name/Rolle): ≤479 →
   20/18, 480–767 → 20/18 (Karten dort 20/20 — 18 hält die Hierarchie),
   768–1365 → 28/17, Desktop unverändert 32/24.
   Bündigkeit (Kundenwunsch: „Textinhalt wieder bündig zu den anderen
   Textinhalten"): `.team-body2` trug 20/40px Innenabstand — Name und
   Position beginnen jetzt auf der Foto-/Boxkante, in allen Bändern.
   Betrifft die Client-feedback-Sektion aller vier Case Studies.
   -------------------------------------------------------------------------- */
/* NACHTRAG 11.8. Die Regel stand auf `padding-left/right: 0` ab 768px, mit
   20px nur am Telefon — in der Annahme, die Box liege ab 768 selbst auf der
   Textkante. Mit den echten Glyphen nachgemessen (nicht mit der Container-
   kante, das war mein Fehler beim ersten Messen) stimmt das nicht:

     390      Boxkante 20 · Name 40 · Zitat 40  → bündig
     480–767  Boxkante 24 · Name 44 · Zitat 44  → bündig
     768–991  Boxkante 40 · Name 40 · Zitat 60  → 20px daneben

   Ab 768 fehlten dem Kasten genau die 20px, die er darunter hat. Die
   Polsterung stellt die Bündigkeit also HER, sie verhindert sie nicht — und
   damit fällt beides zusammen: 20px rundum macht den Namen bündig, gibt oben
   und unten dasselbe Maß wie links (Kundenwunsch 11.8.) und lässt nirgends
   eine Seite auf null („0 Polsterung ist nie gewünscht"). */
html .team-body2 { padding: 20px !important; }
@media (max-width: 767px) {
  html .team-body2 h3 { font-size: 20px !important; line-height: 1.2 !important; }
  html .team-body2 .bold-text-14 { font-size: 18px !important; line-height: 1.3 !important; }
}
/* Die Rolle folgt im Band 480–767 der Teamkarte, die dort 20px führt (11.8.:
   „die Feedback-Box sollte zu den Teamboxen passen"). Unter 480 bleiben es
   18px — dort führt die Karte selbst 18. */
@media (min-width: 480px) and (max-width: 767px) {
  html .team-body2 .bold-text-14 { font-size: 20px !important; }
}
/* Der Name auf Schnitt 600 wie in der Teamkarte (dort `h2.heading-style-h5`).
   Er stand auf 500, und das `<strong>` darin trug als klassenloses Element
   den Standardfettschnitt 700 — zwei Stufen daneben. `inherit` am strong
   nimmt jetzt die 600 der Überschrift. */
html .team-body2 h3 { font-weight: 600 !important; }
html .team-body2 h3 strong:not([class]),
html .team-body2 h3 b:not([class]) { font-weight: inherit !important; }
@media (min-width: 768px) and (max-width: 1365px) {
  html .team-body2 h3 { font-size: 28px !important; line-height: 1.2 !important; }
  html .team-body2 .bold-text-14 { font-size: 17px !important; line-height: 1.3 !important; }
}

/* --------------------------------------------------------------------------
   161. S3: die Learn-more-Pillen der Startseite verlieren unter ≤389px ihr
   „For " („nur bei iPhone SE" — deckt SE 375, Fold 344 und 320; ab 390
   unverändert). Das Wort sitzt als eigener Span im Markup, damit die
   Übersetzung sauber in „Für " + Namen zerfällt.
   -------------------------------------------------------------------------- */
@media (max-width: 389px) {
  .pill-for { display: none; }
}

/* --------------------------------------------------------------------------
   162. S4/Z14: der Videotitel („Dr. Walter Bickel – Founder speaking").
   (a) Beim Umbruch liefen die Zeilen auf 32px Abstand: `.banner-text` trägt
       line-height 32,2px, der Titel selbst nur 20px Schrift — der Strut des
       Elternteils gewinnt. Im Telefonband gilt jetzt die Überschriften-
       Proportion 1.15 (Referenz „Who we are": 27,6/24). Nur ≤767: auf
       breiteren Schirmen ist der Titel einzeilig und die Kastenhöhe Teil
       des abgenommenen Overlays.
   (b) Der Slash stand 7px über dem Titel, bei allen anderen Slash-
       Überschriften sind es 0 — angeglichen.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  /* die Strut-Basis muss mit: .banner-text selbst trägt 28px Schrift,
     der Titel darin 20 — sonst gewinnt der 32er-Strut die Zeilenkästen.
     Die Klasse existiert nur an den zwei Video-Overlays. */
  html .banner-sec2 .banner-text,
  html .banner-text { font-size: 20px !important; line-height: 1.15 !important; margin-top: -7px; }
}

/* --------------------------------------------------------------------------
   163. S5: die KPI-Beschriftungen IN den Projektkarten laufen auf 1.0 —
   wie alle übrigen KPI-Beschriftungen seit §58a/§141 (Kundenbündel 6.8.,
   iPhone SE Bild 16: „EBITDA margin (at entry)" lief 14/20). `.box-heading`
   existiert nur in den Projektkarten (Startseite, PE, For-Lenders,
   For-Companies).
   -------------------------------------------------------------------------- */
html .project-box .project-box-wrapper2 .box-1 > .box-inner .box-heading,
html .project-box .project-box-wrapper2 .box-heading,
html .box-heading { line-height: 1 !important; }

/* --------------------------------------------------------------------------
   164. S8: die Expertise-Filterpillen umarmen im Telefonband ihren Inhalt.
   (Kundenbündel 6.8., iPhone SE Bild 19.) Der Elternflex verteilte alle drei
   Toggles auf gleiche 98px — bei „All" standen dadurch 47px Leere zwischen
   Text und Pfeil, während das echte Flex-gap 16px beträgt. Mit Inhaltsbreite
   gilt überall das 16px-gap; „All" wird schmaler als „Revenues".
   Tipphöhe bleibt 53px (≥44). Nur ≤767 — ab 768 ist die Reihe abgenommen.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  /* der GRID-Elternteil (.filter-box) verteilt drei gleiche Spuren — die
     Spuren folgen jetzt dem Inhalt, die Pillen darin sowieso */
  html .filter-box { grid-template-columns: auto auto auto !important; justify-content: center; }
  html .dropdown-2 { width: auto !important; }
  html .dropdown-toggle { width: auto !important; }
}

/* --------------------------------------------------------------------------
   165. N3: Text-statt-Logo-Kacheln (Walters „DGM", „Kroll Talbot Hughes")
   liefen in Label-Größe und wirkten verloren (Kundenbündel 6.8., Nest Hub
   Bild 22: „der Text ist zu klein, er sollte größer sein"). Sie lesen sich
   jetzt als Wortmarke: 26px semibold, im Telefonband 22px. Die Platzhalter-
   Kacheln in Klammern („(Electronics Manufacturer …)") bleiben bewusst im
   kleinen Schnitt — nur Kacheln mit der Klasse `text-logo`.
   -------------------------------------------------------------------------- */
html .box-inner .text-block-10.text-logo {
  font-size: 26px !important;
  font-weight: 600 !important;
  line-height: 1.1 !important;
}
@media (max-width: 767px) {
  html .box-inner .text-block-10.text-logo { font-size: 22px !important; }
}

/* --------------------------------------------------------------------------
   166. Footer-Geometrie: drei Bänder aus den Kundenbündeln 6.8.
   (a) Z13, flache Desktop-Fenster (z. B. 1440×740): §140 zog den Claim über
       die Zeichnung — aber UNTER die 100px-Leiste (Claim-Oberkante 66).
       Der Abstand hält jetzt ein festes Minimum (137px ⇒ Claim ≈120) und
       die Zeichnung wird gedeckelt (51svh), damit der Contact-Knopf trotzdem
       über der Spitze bleibt. Nur ≥1365px und ≤780px Fensterhöhe; bei 900er
       Höhen ändert sich nichts (§140-Messwerte bleiben).
   (b) Z10, Band 768–991: die Zeichnung wuchs proportional zur Breite so
       hoch, dass ihre Spitze (obere rechte Rahmenecke, §118) in der
       Unterzeile stand (991×900: Rahmen ab y=314, Knopf endet 396).
       Deckel 52svh ⇒ Rahmen ab ~432, Spitze ≥24px unter dem Knopf.
   (c) P1, iPad-Pro-Hochkant im Zoom-Band (992–1365): Footer von 100vh auf
       50vh (im 0,7-Band: 71,43svh CSS) — Claimblock (354) + Zeichnung (296)
       + ~30px Luft füllen ihn, Proportion wie auf dem Desktop. Quer und
       Desktop behalten ihr abgenommenes „Footer exakt 100vh".
   -------------------------------------------------------------------------- */
@media (min-width: 1365px) and (max-height: 780px) {
  html .section-2 > .overflow-hidden.section_footer-cta {
    padding-top: max(11.2vh, 193px) !important;
    padding-top: max(11.2svh, 193px) !important;
  }
  html .section-2 > .code-embed.lottie.absolute2 { max-height: 51vh; max-height: 51svh; }
}
@media (min-width: 768px) and (max-width: 991px) {
  html .section-2 > .code-embed.lottie.absolute2 { max-height: 52vh; max-height: 52svh; }
}
@media (min-width: 992px) and (max-width: 1365px) and (orientation: portrait) {
  html .section-2 {
    height: 71.43vh !important; height: 71.43svh !important;
    max-height: 71.43vh; max-height: 71.43svh;
  }
}

/* --------------------------------------------------------------------------
   167. S2/D4/Z5: Footer-Zeilen auf Telefon und im 480er-Band neu geordnet.
   (Kundenbündel 6.8.: „zwischen bickel, copyright und legal notice soll
   weniger abstand sein, dafür die Berger-Reihe losgelöst; unten ist
   ungenutzter platz frei".) Wortmarke trug `mb-94` (94px), darunter 30er-
   Lücken und unter Berger tote Luft. Jetzt: Wortmarke→Copyright 28px,
   Copyright→Legal 14px, Legal→Berger 36px (bewusst losgelöst), und der
   Block rückt 24px tiefer. Nur ≤767 — Desktop/Tablet behalten die
   einzeilige Fußleiste. „you need." ist zudem mit U+00A0 gebunden (Partial
   + de.json), damit „need." nie allein steht — bandunabhängig.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  html .footer-bottom { padding-top: 24px; }
  html .footer-bottom img.mb-94 { margin-bottom: 28px !important; }
  /* Nachbesserung 6.8.: Copy→Legal exakt wie Marke→Copy (28px) — die Lücke
     trug noch Listen-Zuschlag; Berger rückt dafür von 36 auf 24 heran,
     bleibt aber die größte Lücke (losgelöst). */
  html .footer-bottom .copyright-text { margin-bottom: 0 !important; }
  html .footer-bottom .list-item { margin-top: -2px !important; margin-bottom: 0 !important; padding-top: 0 !important; }
  html .footer-bottom .right-side { margin-top: 24px !important; }
}

/* --------------------------------------------------------------------------
   168. Z6: die Fotos auf /approach liefen im Band 480–767 mit einem 4px-
   Streifen neben sich (Kundenbündel 6.8., Bild 34): der Container zieht dort
   24px ein, der Auszieher `.div-block-22` aber nur −20px (Telefonmaß).
   Angeglichen — die Bilder laufen wie am Telefon randlos.
   -------------------------------------------------------------------------- */
@media (min-width: 480px) and (max-width: 767px) {
  html .row .div-block-22,
  html .row > .div-block-22.mr-60,
  html .div-block-22 { margin-left: -24px !important; margin-right: -24px !important; }
}

/* --------------------------------------------------------------------------
   169. Z11: der Play-Kreis ist 60 CSS-px — gemalt sind das 48 (Desktop,
   Zoom 0,8) bzw. 42 (Zoom-Band 0,7), im ungezoomten Band 768–991 aber
   volle 60 und damit sichtbar größer als überall sonst (Kundenbündel 6.8.,
   Bild 40). Im Band gilt jetzt die Desktop-Malgröße 48. Die Zentrierung des
   Dreiecks lebt in der viewBox der Datei (§1.6) und skaliert mit.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) {
  html .play-btn { width: 48px !important; height: 48px !important; }
}

/* --------------------------------------------------------------------------
   170. M4/Z7/D2: EIN Maß und EIN Schnitt für die Kachel-Werte.
   (Kundenbündel 6.8., mehrfach: „280m soll die selbe Größe haben", „Above
   market… größer als 40ppts", „Schriftschnitt der Werte einheitlich".)
   Gemessene Rampen der führenden Werte:
   – Targets-Kacheln (€ 130 m, `text-size-xlarge`): 32/32/48/48/60, Gewicht 500
   – Impact-Kacheln (> 40 ppts, `text-size-xlarge`): 24/24/32/40/40, 500
   – Fakten-Kacheln (2024–2025, € 2.6 bn, 8.0 k):   24/24/32/40/40, 500
   Ausreißer, hier angeglichen:
   (a) `bold-text-22` (€ 280 m: 24…40, 600) → Targets-Rampe, 500
   (b) `heading-010`-TEXTWERTE in Impact-Kacheln („Above market & historic
       CAGRs": 17…26, 600) → Impact-Rampe, 500. `fakten-lang` (§159) und
       die Projektkarten (18px-Gruppe, eigene Familie) bleiben außen vor.
   (c) `fakten-wert` (Markup-Klasse: „Processing", KUKAs „Publicly listed
       company") → Fakten-Rampe, 500.
   (d) D2: die Projektkarten-Werte (36px, 600) laufen im Band 480–767 eine
       Stufe kleiner (28px) — die Kacheln sind dort schmal. Gewicht 600
       bleibt: die Projektkarten sind als Familie in sich einheitlich.
   -------------------------------------------------------------------------- */
html .box-wrapper .box-1 > .box-inner .bold-text-22,
html .track-sec .box-1 > .box-inner .bold-text-22 { font-weight: 500 !important; font-size: 60px !important; }
html .box-wrapper .box-1 > .box-inner .heading-010:not(.fakten-lang),
html .track-sec .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-weight: 500 !important; font-size: 40px !important; }
html .box-wrapper .box-1 > .box-inner .fakten-wert,
html .track-sec .box-1 > .box-inner .fakten-wert { font-weight: 500 !important; font-size: 40px !important; }
@media (min-width: 992px) and (max-width: 1365px) {
  html .box-wrapper .box-1 > .box-inner .bold-text-22,
  html .track-sec .box-1 > .box-inner .bold-text-22 { font-size: 48px !important; }
}
@media (min-width: 768px) and (max-width: 991px) {
  html .box-wrapper .box-1 > .box-inner .bold-text-22,
  html .track-sec .box-1 > .box-inner .bold-text-22 { font-size: 48px !important; }
  html .box-wrapper .box-1 > .box-inner .heading-010:not(.fakten-lang),
  html .track-sec .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 32px !important; }
  html .box-wrapper .box-1 > .box-inner .fakten-wert,
  html .track-sec .box-1 > .box-inner .fakten-wert { font-size: 32px !important; }
}
@media (max-width: 767px) {
  html .box-wrapper .box-1 > .box-inner .bold-text-22,
  html .track-sec .box-1 > .box-inner .bold-text-22 { font-size: 32px !important; }
  html .box-wrapper .box-1 > .box-inner .heading-010:not(.fakten-lang),
  html .track-sec .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 24px !important; }
  html .box-wrapper .box-1 > .box-inner .fakten-wert,
  html .track-sec .box-1 > .box-inner .fakten-wert { font-size: 24px !important; }
}
@media (min-width: 480px) and (max-width: 767px) {
  html .project-box .project-box-wrapper2 .box-1 > .box-inner .text-size-xlarge { font-size: 28px !important; }
}

/* --------------------------------------------------------------------------
   178. Die Textwerte in den UNTERNEHMENSINFORMATIONEN der Fallstudien.
   (Andres Befund S24 vom 7.8.: „bei mehreren Case Studies und Kästchen geht
   der Text über die Ränder", markiert war KUKAs „Machinery".)

   Betroffen ist NUR diese eine Kachelfamilie — `.box-inner-wrapper.grid-3`
   kommt ausschließlich auf den vier Fallstudien vor und trägt genau die sechs
   Textwerte (Branche und „Owned by"). Die KPI-Boxen daneben („> 40 ppts",
   „Above market & historic CAGRs", „3 capital raises") und die Projektkarten
   sind eine andere Familie und bleiben unangetastet.

   (a) Der eigentliche Fehler saß in §170: der äußere `h2.heading-010` lief im
       Band 992–1365 längst richtig auf 30px, aber das INNERE
       `strong.fakten-wert` trug seine eigenen 40px und überschrieb ihn. Bei
       768 stimmten innen und außen überein, deshalb fiel es nur dort auf.
       Die Werte folgen jetzt der Rampe ihres h2 statt eigener Größen.
       Die Spezifität muss über der §170-Regel liegen, sonst greift das nicht.

   (b) In den schmalen Bändern ist auch die äußere Stufe zu groß. Eine Stufe
       je Band, für BEIDE Sprachen dieselbe (Kundenwunsch 10.8.) — und zwar
       die deutsche, weil sie die engere ist: „Prozess­technologie" ist das
       längste Stück, das passen muss. Alle vier Größen führt die Rampe schon.

       ≥1366: 38   992–1365: 28   768–991: 22   ≤767: 20

   (c) `:not(.fakten-lang)` — derselbe Schutz, den §170 an jeder Stelle führt.
       Ohne ihn traf diese Rampe auch die langen „Owned by"-Werte, die §159
       ausdrücklich klein hält, und war dabei die spezifischere Regel (0,6,2
       gegen 0,4,1). Lenzings „Publicly listed. Main shareholder: B&C Group"
       lief dadurch auf 38 statt 26px, seine Wertzeile wuchs von 62 auf 152px
       und zog alle sechs Kacheln von 167 auf 240px. Also genau anders herum
       als beabsichtigt: der Text sollte in die Kachel, nicht die Kachel um
       den Text herum.

   Die Zahlenwerte (`text-size-xlarge`: € 1.0 bn, 5.7 k, 2009–2011) bleiben
   überall auf 40px. Dass Textwerte kleiner laufen als Zahlen, ist im Haus
   schon Praxis: auf den Projektkarten steht „Machinery" bei 1440 auf 18px
   neben Zahlen mit 36px.

   Nachgemessen über vier Fallstudien × vierzehn Breiten × zwei Sprachen:
   21 Überlaufstellen auf null. `fitcheck` sieht diese Sorte Fehler nicht — es
   misst gegen die Breite des Elements, der Überlauf entsteht aber eine Ebene
   höher (`scrollWidth > clientWidth`).
   -------------------------------------------------------------------------- */
html body .box-wrapper .box-inner-wrapper.grid-3 .box-1 > .box-inner .fakten-wert,
html body .box-wrapper .box-inner-wrapper.grid-3 .box-1 > .box-inner .bold-text-8 {
  font-size: inherit !important;
}
html body .box-wrapper .box-inner-wrapper.grid-3 .box-1 > .box-inner .heading-010:not(.fakten-lang) {
  font-size: 38px !important;
}
@media (min-width: 992px) and (max-width: 1365px) {
  html body .box-wrapper .box-inner-wrapper.grid-3 .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 28px !important; }
}
@media (min-width: 768px) and (max-width: 991px) {
  html body .box-wrapper .box-inner-wrapper.grid-3 .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 22px !important; }
}
@media (max-width: 767px) {
  html body .box-wrapper .box-inner-wrapper.grid-3 .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 20px !important; }
}

/* Nachtrag zu §170(b), dokumentierte Ausnahme nach dem M3-Prinzip: die
   DEUTSCHEN Impact-Textwerte tragen lange Silben („…technologie",
   „…erhöhungen"), die auf der vollen Rampe 3–11px über die Kachel laufen
   (fitcheck 390/834/1194). Deutsch läuft eine Stufe darunter (22/30/38);
   Englisch behält die Kundenvorgabe „selbe Größe wie > 40 ppts". */
@media (max-width: 767px) {
  html.lang-de .box-wrapper .box-1 > .box-inner .heading-010:not(.fakten-lang),
  html.lang-de .track-sec .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 22px !important; }
}
@media (min-width: 768px) and (max-width: 991px) {
  html.lang-de .box-wrapper .box-1 > .box-inner .heading-010:not(.fakten-lang),
  html.lang-de .track-sec .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 30px !important; }
}
@media (min-width: 992px) and (max-width: 1365px) {
  /* 36 statt 38 (FC5, 6.8. abends): bei 1024 (iPad Pro hochkant) blieben mit
     38px nur 3px Luft — echtes iOS misst die Schrift einen Hauch breiter und
     schnitt „Gesund­heitswesen" an der Kachelkante (Kundenfoto). */
  html.lang-de .box-wrapper .box-1 > .box-inner .heading-010:not(.fakten-lang),
  html.lang-de .track-sec .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 36px !important; }
}


/* Nachbesserung 6.8. (Bild 48): die Footer-Zeichnung begann auf dem Telefon
   und im 480er-Band direkt an der Unterkante des Contact-Knopfs (0px) — die
   Spitze (obere rechte Rahmenecke, §118) berührte ihn. 24px Abstand. */
@media (max-width: 767px) {
  html .section-2 > .code-embed.lottie.absolute2.block { margin-top: 24px !important; }
}

/* Nachbesserung 6.8. (Bild 49): im halbierten iPad-Pro-Footer (§166c) saß der
   Claim mit den vollen 20svh Abstand (191px gemalt) zu tief — hochkant gilt
   die halbe Stufe, passend zum halben Footer. */
@media (min-width: 992px) and (max-width: 1365px) and (orientation: portrait) {
  html .section-2 > .overflow-hidden.section_footer-cta {
    padding-top: 10vh !important;
    padding-top: 10svh !important;
  }
}

/* Feinzug zur Reihen-Angleichung: im 480er-Band ist der Zeilenkasten-Zuschlag
   kleiner (andere Schriftstufe) — dort 8px statt −2, beide Bänder landen
   gemessen auf ~28px wie Marke→Copyright. */
@media (min-width: 480px) and (max-width: 767px) {
  html .footer-bottom .list-item { margin-top: 8px !important; }
}
/* Nachbesserung 6.8. (Bild 51): die Personen-Box der Feedback-Sektion stand
   fest auf 50 % (§121) — „Lackenbucher" endete 9px vor der Kante, links
   stehen 20. Die Box folgt am Telefon jetzt ihrem Inhalt (Innenabstand
   rechts = links = 20px) und darf über die 50 % hinauswachsen; 50 % bleiben
   die Untergrenze, damit kurze Namen die Boxproportion halten. */
/* fit-content scheitert hier: die lange Positionszeile („Chairman of the
   Supervisory Board …") treibt jedes Shrink-to-fit an den Anschlag. Feste
   Bandmaße, eingemessen am längsten Namen („Patrick Lackenbucher",
   Zeile „Lackenbucher" 134px bei 20px Schrift): rechts stehen damit
   ≥20px wie links; kürzere Namen bekommen entsprechend mehr Luft. */
@media (max-width: 479px) {
  html .feedback-sec2 .feedback-row ._w-34:has(.team-body2),
  html .feedback-sec .feedback-row ._w-34:has(.team-body2),
  html .feedback-sec2 ._w-34:has(.team-body2),
  html ._w-34:has(.team-body2) { width: 52% !important; max-width: 52% !important; min-width: 0 !important; }
}
@media (min-width: 480px) and (max-width: 767px) {
  html .feedback-sec2 .feedback-row ._w-34:has(.team-body2),
  html .feedback-sec .feedback-row ._w-34:has(.team-body2),
  html .feedback-sec2 ._w-34:has(.team-body2),
  html ._w-34:has(.team-body2) { width: 46% !important; min-width: 0 !important; }
}

/* --------------------------------------------------------------------------
   171. Menü-X als Zwei-Balken-Zeichnung mit scharfen Enden (menu.html),
   passend zu den drei Burger-Rects (Kunde, 6.8.). Das Press-Feedback beim
   Tippen war kurz drin und ist auf Kundenwunsch wieder raus.
   -------------------------------------------------------------------------- */

/* FC5-Nachtrag (6.8. abends): am SCHMALEN Ende des Zoom-Bands (992–1139)
   sind die Case-Study-Faktenkacheln nur ~162px innen — dort liefen selbst
   die englischen Impact-Textwerte über („Healthcare" 199px bei 40px). Eigene
   Stufe: EN 30, DE 28. Ab ~1140 wachsen die Kacheln, die 40/36er-Stufen
   passen wieder (fitcheck-belegt bei 1194+). */
@media (min-width: 992px) and (max-width: 1139px) {
  html .box-wrapper .box-1 > .box-inner .heading-010:not(.fakten-lang),
  html .track-sec .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 30px !important; }
  html.lang-de .box-wrapper .box-1 > .box-inner .heading-010:not(.fakten-lang),
  html.lang-de .track-sec .box-1 > .box-inner .heading-010:not(.fakten-lang) { font-size: 28px !important; }
}

/* --------------------------------------------------------------------------
   172. FC1 (Kundenbündel „Final Call", 6.8. abends): der Kartentext der
   Expertise-Karten sitzt im sichtbaren Zustand unten links auf der
   BADGE-Kante (das „BY BICKEL & COMPANY"-Tag steht überall auf 20px CSS,
   der Text stand auf 40/40) — und das Logo hebt weiter an, damit der Text
   es nicht mehr schneidet (vorher –30,5 %, jetzt eingemessen –52 %).
   Prozentwert wegen der Firefox-zoom-Falle aus §153 beibehalten.
   -------------------------------------------------------------------------- */
:where(html.page-expertise) .experience-card .div-block-26 {
  left: 20px !important;
  bottom: 20px !important;
  padding-right: 20px !important;
}
:where(html.page-expertise) .experience-card:hover .image-35.box-logo {
  transform: translateY(-52%) !important;
}

/* --------------------------------------------------------------------------
   173. FC2/FC6: die Hero-Zeichnung ohne harte Schnittkante.
   (a) iPad hochkant (Zoom-Band portrait): die Desktop-Komposition wurde
       höhenangepasst und lief auf 2428px Breite (−702 … 1726) — an der
       linken Schirmkante stand ein Schnitt mitten im dicken Tail („der
       Verlauf ist anders"). Jetzt gilt die Desktop-Proportion: 111 % der
       Schirmbreite, mittig — der Schnitt sitzt wie auf dem Desktop im
       weichen Auslauf (dort −80px bei 1440).
   (b) iPhone quer: die Zeichnung sah anders aus als die Footer-Fassung
       („im Hero bitte genauso"): Canvas halbe Schirmbreite, hoch platziert.
       Jetzt wie im Footer: etwas breiter und in der unteren Hälfte.
   -------------------------------------------------------------------------- */
@media (min-width: 992px) and (max-width: 1365px) and (orientation: portrait) {
  html.page-index .animation-wrapper.z-11 .code-embed-12 [data-animation-type="lottie"],
  html.page-index .animation-wrapper.z-11 .code-embed-12 svg {
    width: 111vw !important;
    height: auto !important;
    min-width: 0 !important;
    min-height: 0 !important;
  }
}
@media (orientation: landscape) and (max-height: 550px) and (max-width: 991px) {
  html.page-index .animation-wrapper.z-11 [data-animation-type="lottie"] {
    width: 58vw !important;
    top: 28% !important;
  }
}

/* --------------------------------------------------------------------------
   174. FC3: die Fokuskarten zeigen ab 768 nur die Headline — der Text kommt
   mit Hover bzw. erstem Tipp (Kundenwunsch 6.8.: „nur die headline
   einblenden und den text nur bei mouseover wie auf dem desktop; text darf
   niemals rauslaufen"). Der Export-Reveal galt erst ab 1200px Viewport,
   und eine (hover:none)-Ausnahme erzwang auf Touch-Geräten Daueranzeige —
   beides ließ die deutschen Texte auf iPads (und sogar dem Desktop-Band)
   aus den Karten laufen. Die Karten sind Links: iOS setzt :hover beim
   ersten Tippen, der zweite Tipp navigiert — der Text bleibt erreichbar.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) {
  html .section_focus .focus_card-content.translate-45 {
    transform: none !important;
    justify-content: flex-end !important;
  }
  html .section_focus .focus_card-content.translate-45 > *:last-child {
    max-height: 0 !important;
    opacity: 0 !important;
    overflow: hidden !important;
    margin: 0 !important;
    padding-top: 0 !important;
    box-sizing: border-box !important;
    transition: max-height .3s ease, opacity .3s ease, padding-top .3s ease !important;
  }
  html .section_focus .focus_card:hover .focus_card-content.translate-45 > *:last-child,
  html .section_focus .focus_card:focus-visible .focus_card-content.translate-45 > *:last-child {
    max-height: 400px !important;
    opacity: 1 !important;
    padding-top: 20px !important;
  }
}

/* --------------------------------------------------------------------------
   175. FC7: der Glas-Blur der Pillen (blur(100px) auf `.tab-box`) erschien
   auf dem iPad erst nach ~1s und „sprang um" — iOS legt den teuren
   backdrop-Layer erst beim ersten Composite an. `translateZ(0)` erzwingt
   die Ebene von Anfang an; der Radius bleibt (abgenommene Optik).
   Am Gerät gegenprüfen — headless ist iOS-Compositing nicht nachstellbar.
   -------------------------------------------------------------------------- */
.tab-box {
  transform: translateZ(0);
  will-change: backdrop-filter;
}

/* --------------------------------------------------------------------------
   176. /about-us am Telefon: das iPad steht in der Mitte (Kundenwunsch 6.8.).
   Vorher hielt der Ausschnitt (74 %) Felix' Kopf im Bild; jetzt ist das iPad
   das Motiv, das mittig stehen soll.

   Eingemessen statt geraten: im Bild (1280×970) ist der iPad-Schirm die größte
   zusammenhängende helle Fläche — Kasten x 404–662, y 324–588, Mitte also bei
   41,6 % / 47,0 % der Bildfläche. Daraus die nötige `background-position`
   (cover, Bildpunkt f landet bei Containerpunkt p):
       p = (0,5·W − f·Iw) / (W − Iw)
   Sie hängt am Seitenverhältnis der Heldenfläche, deshalb ZWEI Stufen an der
   schon bestehenden 480er-Grenze (§156):
     Telefon (≤479): 37 % — nachgemessen 360/390/430 = ±2px, 320 = −7px
     480–767:        33 % — nachgemessen 480 = +10px, 600 = ±0px, 767 = −14px
   Eine einzige Zahl für das ganze Band läge überall ±22px daneben.

   Die Senkrechte bleibt wirkungslos und deshalb auf 0 %: unter 767px ist die
   Skalierung immer höhengetrieben, das Bild füllt die Heldenfläche exakt aus
   (nachgemessen: der Schirm sitzt in jedem Fall bei 47,0 % der Höhe).
   Im Querformat dieses Bandes (z.B. 667×563) überlappt das Bild nur um 76px —
   dort ist die Mitte rechnerisch nicht erreichbar, der Schirm steht ~50px
   links davon. Bewusst nicht nachgezogen, dafür ist der Fall zu schmal.

   `html:where(…)`-Muster wie beim 55%-0%-Basisfix, sonst verliert die
   Bandregel die Spezifität (Falle 2 im Handoff vom 6.8.).
   -------------------------------------------------------------------------- */
@media (max-width: 479px) {
  html:where(.page-about-us) .hero-sec2.py-100 { background-position: 37% 0% !important; }
}
@media (min-width: 480px) and (max-width: 767px) {
  html:where(.page-about-us) .hero-sec2.py-100 { background-position: 33% 0% !important; }
}

/* --------------------------------------------------------------------------
   177. Teamkarten am Telefon: das Porträt füllt den grauen Kasten so aus wie
   auf dem Desktop (Kundenwunsch 6.8.: „zu viel Freiraum um die Porträts").

   Ursache sind zwei feste Pixelmaße gegen einen Kasten, der mitwächst:
   `.team-card-header` hat `padding: 60px 30px 0`, und im Band ≤479 deckelt
   `.image-10` zusätzlich auf `max-height: 250px`. Der Kasten ist seit §135
   quadratisch und skaliert mit der Spalte — der Anteil des Porträts an der
   Kastenbreite läuft deshalb auseinander (gemessen):

       320px → 78,6 %    390px → 71,4 %    479px → 56,9 %
       1280  → 88,7 %    1440  → 88,5 %    1920  → 89,3 %

   Der gezeichnete Zustand ist der Desktop: 460 von 520 = 88,5 %, das Porträt
   steht auf der Unterkante, oben 11,54 % Luft (60 von 520). Beide Maße stehen
   hier als Prozent, damit sie in jeder Kastenbreite dasselbe Bild ergeben —
   und die Seitenpolster bleiben die Hälfte davon (30 zu 60), sonst ist der
   Inhaltskasten nicht mehr quadratisch und das Porträt würde gestaucht.

   Nur ≤479. Das Band darüber zeigt ZWEI Spalten und damit eine andere
   Komposition (204–348px breite Kästen, 70,6–82,7 %) — dort ist nichts
   abgenommen worden, was diese Regel mitziehen dürfte.
   -------------------------------------------------------------------------- */
@media (max-width: 479px) {
  html .team-card-header:not(.card2) { padding: 11.54% 5.77% 0 !important; }
  html .team-card-header:not(.card2) .image-10 { max-height: none !important; }
}

/* --------------------------------------------------------------------------
   179. /team: das Foto nur auf dem Telefon, ab dem iPad die Team-Montage.
   (Andres Mail 8.8.: „Neues Bild 1 (Carmen, Boris, Mark, Walter am Fenster):
   Nur bei Banner in Seite Team auf dem Handy zeigen. Auf iPad und Desktop
   zeigen wir das zusammengestellte Team Bild.")

   Die Montage musste nicht neu geliefert werden — sie liegt als `bc-team-home`
   längst im Projekt (die dreizehn freigestellten Porträts vor dem
   Orangeverlauf, bis 3840px) und trägt heute die Startseite.

   Sie ist mit 2,18 deutlich breiter als die Heldenfläche und als die
   Hero-Fotos (1,50). Deshalb `contain` statt `cover`: bei `cover` würde die
   Montage links und rechts angeschnitten und den Aussenstehenden die Köpfe
   nehmen. Sie sitzt auf der Unterkante, damit die Reihe auf der Kante der
   Fläche steht, und der Grund darunter bleibt der Verlauf des Heros.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) {
  :where(html.page-team) .hero-sec2.py-100 {
    background-image: url("/assets/media/bc-team-home-2000.jpg?v=1");
    background-image: image-set(url("/assets/media/bc-team-home-2000.webp?v=1") 1x,
                                url("/assets/media/bc-team-home-3840.webp?v=1") 2x);
    background-size: contain !important;
    background-position: 50% 100% !important;
    background-repeat: no-repeat !important;
  }
  /* NACHTRAG 10.8. (Kundenentscheid): der Schleier des Heros (`::before`, Ink
     auf 22 % in den Orangeverlauf) bleibt AN. Ich hatte ihn hier abgeschaltet,
     weil die Montage ihren eigenen Verlauf von Weiß nach Orange mitbringt und
     beides übereinander die Anzüge braun tönt. Das war eine Designabwägung,
     keine Notwendigkeit — und die Konsistenz mit allen übrigen Heroes wiegt
     schwerer. Damit bleibt auch `--hero-dark` auf seinem Normalwert: die
     Kopfleiste steht invertiert über dem Hero wie überall sonst. */
}

/* --------------------------------------------------------------------------
   180. Profilkacheln am Telefon: die Rollenzeile springt nicht mehr.
   (Andres Befund S22 vom 7.8., iPhone: „Text springt" — „Managing Partner"
   stand höher als „Board of Directors" daneben. Seine Frage „auch auf dem
   Desktop ein Problem?" ist mit Nein zu beantworten: bei 1440 haben alle 67
   Kacheln denselben Logokasten von 146px, dort steht nichts schief.)

   Ursache: der Logokasten ist die flexible Hälfte und nimmt, was die
   Rollenbox übrig lässt. Die Rollenbox läuft seit §39 auf `height: auto`
   (damit lange Rollen nicht abschneiden) — ein zweizeiliger Text macht sie
   also höher und drückt den Logokasten zusammen. Gemessen am Telefon: vier
   verschiedene Logohöhen, 142 / 108 / 98 / 86px, und entsprechend vier
   verschiedene Höhen für die Zeile darunter.

   Der Logokasten bekommt deshalb im Telefonband eine feste Höhe. 86px ist
   nicht gegriffen, sondern der Wert, den 45 der 67 Kacheln schon haben — die
   Mehrheit ändert sich also nicht. Für die Rolle bleiben damit 144px; der
   längste Rollentext im ganzen Baum misst 70px (Ramis „International
   turnaround and performance improvement programs", englisch bei 390px).
   Es schneidet also nichts ab.

   Getestet in Chromium, Firefox und WebKit — der Versatz war in allen drei da,
   es war kein Firefox-Thema.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  html .client-sec .dyn-item .box-1:not(.mt-1) {
    flex: 0 0 86px !important;
    height: 86px !important;
  }
}

/* --------------------------------------------------------------------------
   181. /contact: die Kontaktkacheln in der Sprache der Profilkarte.
   (Andres Wunsch S20 vom 7.8.: „Können wir das Design hier dann auch nochmal
   etwas aufhübschen? Zusätzlich kann man hier auch noch unseren LinkedIn
   Company Account verlinken.")

   Der Kasten lief auf `justify-content: space-between` bei 256px Höhe — die
   Beschriftung klebte oben, der Wert unten, dazwischen stand eine tote Lücke.
   Beschriftung und Wert gehören zusammen; sie bekommen deshalb dieselbe
   Anordnung wie die Zeilen der Kontaktkarte auf den Profilen (§148): kleine
   gesperrte Beschriftung in Ink auf 50 %, Wert direkt darunter. Erfunden wird
   nichts — alle Werte stehen so schon in §148.

   Die MASSE des Kastens bleiben unangetastet (Kundenentscheid 10.8.): das
   Raster mit drei festen 520er-Spalten, die 60px Lücke, die 256px Höhe und
   die 40px Polsterung sind die der übrigen Kästen der Seite und bleiben es.
   Geändert wird nur, wie der Inhalt darin steht.

   Keine Haarlinie: in der Karte trennt sie Zeilen INNERHALB eines Kastens,
   hier sind die Kästen schon durch die 60px Lücke getrennt.

   Vierte Kachel: der LinkedIn-Unternehmensaccount, mit demselben orangenen
   Pfeil wie die LinkedIn-Zeile der Profilkarte, weil beide aus der Seite
   hinausführen. Im festen Dreierraster steht sie in der zweiten Reihe.
   -------------------------------------------------------------------------- */
html .blog-hero .execution-box-wrapper .box-1-2 > .box-inner {
  justify-content: flex-start !important;
  gap: 0 !important;
}
/* Halbe Höhe, NUR hier (Kundenentscheid 11.8.). Die Kacheln standen auf 256px
   (1920: 320, 768: 320), der höchste Inhalt misst 85–118px — der Rest war
   Leerraum.

   Die Höhe kommt jetzt aus dem Inhalt; innerhalb einer Reihe bleiben alle
   gleich hoch, weil das Raster streckt. Dazu musste die Polsterung mit: 40+40
   sind allein 80px, mit ihnen wäre „halb so hoch" rechnerisch nicht
   erreichbar. 24px ergibt bei 1440 aus 256px → 133px, also genau die Hälfte,
   und lässt dem Text mehr Luft als er auf den Profilkarten hat (28px bei
   16px Schrift, hier 24px bei 16px). */
/* Der Abstand nach oben soll dem nach links und rechts entsprechen
   (Kundenwunsch 11.8., Telefonansicht). Die Sektion lief auf feste 60px oben,
   während die Seitenränder je nach Band 20, 24 oder 40px führen — auf dem
   Telefon stand die oberste Kachel dadurch dreimal so weit vom Rand entfernt
   wie seitlich. Ab 992px stimmte es schon (42 bzw. 48px auf beiden Seiten),
   deshalb greift die Regel nur darunter. Die Werte sind nicht gegriffen: es
   sind exakt die gemessenen Seitenränder desselben Bandes. */
@media (max-width: 479px) { html.page-contact .blog-hero { padding-top: 20px !important; } }
@media (min-width: 480px) and (max-width: 767px) { html.page-contact .blog-hero { padding-top: 24px !important; } }
@media (min-width: 768px) and (max-width: 991px) { html.page-contact .blog-hero { padding-top: 40px !important; } }

html .blog-hero .execution-box-wrapper .box-1-2 { height: auto !important; min-height: 0 !important; }
html .blog-hero .execution-box-wrapper .box-1-2 > .box-inner {
  height: 100% !important;
  min-height: 0 !important;
  padding: 24px !important;
}
/* Vier in EINER Reihe (Kundenentscheid 10.8.), und alle vier gleich breit —
   das feste Dreierraster hätte die LinkedIn-Kachel in eine zweite Reihe
   gestellt.

   Gemessen, was dafür nötig ist: „info@bickel-company.com" ist der längste
   unteilbare Wert und misst bei 24px 299px. Eine Viertelspalte gibt bei 1440
   und 60px Lücke nur 211px her — die Mail bräche mitten im Namen um. Zwei
   Stellschrauben, beide aus dem Bestand:

     Lücke  60 → 32px. Bei vier Spalten kosten drei Lücken 180px; 32px ist die
            Stufe, die die Seite in ihren engeren Rastern schon führt.
     Wert   24 → 16px. Das ist NICHT gegriffen: es ist die Größe, die die
            Kontaktkarte auf den Profilen für ihre Werte führt (§148,
            `.vk_value a`), und die Beschriftung darüber steht mit 11px schon
            auf demselben Paar. Bei 16px misst die Mail 200px und passt ab
            1366 in jede Viertelspalte (dort 213px, bei 1440 232px).

   Die Polsterung bleibt bei 40px — die ist die der übrigen Kästen der Seite.

   Unter 1366 sind vier Spalten nicht zu halten. Dort zwei, nie drei: drei
   ließen die vierte Kachel wieder allein stehen. Ab 600 aufwärts zwei,
   darunter eine. */
@media (min-width: 1366px) {
  html .blog-hero .execution-box-wrapper {
    grid-template-columns: repeat(4, 1fr) !important;
    column-gap: 32px !important;
  }
  html .blog-hero .execution-box-wrapper .text-size-large { font-size: 16px !important; }
}
@media (min-width: 600px) and (max-width: 1365px) {
  html .blog-hero .execution-box-wrapper { grid-template-columns: 1fr 1fr !important; }
}
@media (max-width: 599px) {
  html .blog-hero .execution-box-wrapper { grid-template-columns: 1fr !important; }
}
html .blog-hero .execution-box-wrapper .text-block-14 {
  font-size: 11px !important;
  font-weight: 600;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: #21212180 !important;
  margin-bottom: 4px;
}
html .blog-hero .execution-box-wrapper a { transition: color .2s ease; }
html .blog-hero .execution-box-wrapper a:hover,
html .blog-hero .execution-box-wrapper a:focus-visible { color: var(--brand) !important; }
/* der Pfeil wie in §148 — dieselbe 15×11-Maske, ohne Rahmen, dauerhaft orange */
html .blog-hero .execution-box-wrapper a.kontakt-link { display: inline-flex; align-items: center; gap: 8px; }
html .blog-hero .execution-box-wrapper a.kontakt-link::after {
  content: "";
  flex: none;
  width: 15px; height: 11px;
  background-color: var(--brand);
  -webkit-mask: var(--arrow) center / 15px 11px no-repeat;
          mask: var(--arrow) center / 15px 11px no-repeat;
  transition: transform .2s ease;
}
html .blog-hero .execution-box-wrapper a.kontakt-link:hover::after { transform: translateX(3px); }

/* --------------------------------------------------------------------------
   182. /datenschutz und /impressum: die Überschriften brechen um.
   (Eigenbefund 11.8., Überlaufprobe über 19 Breiten.)

   Deutsche Komposita bei 38px (h1) und 32px (h2) sind breiter als der
   Textkasten, sobald das Fenster unter 480px liegt. Gemessen bei 360px, einer
   sehr verbreiteten Telefonbreite: „Datenschutzbeauftragter" misst 381px in
   einem 280px-Kasten und stand sichtbar halb außerhalb des Bildes —
   „Datenschutzbeauftra…". Ebenso „Datenschutzerklärung",
   „Verantwortliche Stelle", „Datenübermittlung in Drittländer",
   „Meta Pixel (Facebook/Instagram)", „Änderung der Datenschutzerklärung".

   `hyphens: auto` statt einzelner weicher Trennstriche, aus einem Grund: das
   sind Rechtstexte, die der Kunde austauschen wird. Ein Trennstrich hilft
   genau dem Wort, in das er gesetzt wurde; die Trennmuster helfen auch dem
   nächsten. Die deutschen Seiten tragen `lang="de"` (build.py setzt es),
   Chromium, WebKit und Firefox bringen deutsche Muster mit.

   `overflow-wrap: break-word` als Netz darunter: greift nur, wenn selbst
   getrennt nichts passt — dann bricht das Wort hart, statt aus dem Bild zu
   laufen. Ohne Trennstrich, aber sichtbar ist besser als unsichtbar.

   Nur die Überschriften, nur diese zwei Seiten. Die Größen bleiben
   unangetastet, damit sich sonst nichts verschiebt.
   -------------------------------------------------------------------------- */
html.page-datenschutz .richtext :is(h1, h2, h3, h4),
html.page-impressum   .richtext :is(h1, h2, h3, h4) {
  -webkit-hyphens: auto;
          hyphens: auto;
  /* Mindestlängen, sonst zerlegt der Algorithmus auch kurze Eigennamen:
     „BICKEL" wurde zu „BI-CKEL". 8 Zeichen Mindestwortlänge lässt BICKEL (6)
     und GMBH ganz, trennt aber „Datenschutzbeauftragter" (23) weiterhin;
     4 Zeichen vor und nach der Fuge verhindern Reste wie „-r" am Zeilenende. */
  -webkit-hyphenate-limit-before: 4;
  -webkit-hyphenate-limit-after: 4;
       hyphenate-limit-chars: 8 4 4;
  overflow-wrap: break-word;
}

/* --------------------------------------------------------------------------
   183. Der Satzteil nach dem Doppelpunkt bleibt zusammen.
   (Kundenwunsch 11.8.: „Umsetzung aus dem C-Level Management heraus:
   Transformation in Höchstgeschwindigkeit mit Ergebnisverantwortung" — wenn
   die Zeile bricht, dann nach dem Doppelpunkt.)

   `inline-block` und nicht `nowrap`: ein Inline-Block rückt als Ganzes in die
   nächste Zeile, wenn er dort hinpasst, und bricht in sich selbst um, wenn er
   es nicht tut. Damit ist ein Überlauf konstruktiv ausgeschlossen — bei
   `nowrap` liefe der Satz auf dem Telefon über den Rand.

   Gesetzt wird die Klammer beim Bauen (`doppelpunkt_umbruch` in build.py),
   nach der Übersetzung: ein Element im Quelltext würde den Textknoten teilen
   und damit Andres Sätze in zwei Schlüssel zerlegen.
   -------------------------------------------------------------------------- */
.nachsatz { display: inline-block; }

/* --------------------------------------------------------------------------
   184. Der Hero-Swoosh läuft bei flachen Fenstern in den Text.
   (Kundenbild 11.8., 1400×550: die Spitze schneidet „Höchstgeschwindigkeit
   mit Ergebnisverantwortung.")

   Gemessen, nicht geraten: die Zeichnung ist 16:9 und deckt den Viewport ab
   (`width: 177.78vh; height: 56.25vw`), verankert ist sie MITTIG. Damit
   beginnt die gezeichnete Form immer exakt bei 50 % der Fensterhöhe — bei
   550px also bei 275px, während der Hero-Text bis 315px reicht. Gemessen an
   neun Fenstergrößen:

     1400×550  Form ab 275, Text bis 315  → Kollision
     1400×650  Form ab 325, Text bis 315  → knapp frei
     1200×550  Form ab 275, Text bis 277  → Kollision
     1920×700  Form ab 350, Text bis 394  → Kollision
     1920×900  Form ab 450, Text bis 394  → frei

   Die Grenze hängt also von BEIDEN Achsen ab (Höhe/2 gegen die Textunterkante,
   und die wächst mit der Breite) — eine reine `max-height`-Regel träfe sie
   nicht.

   Deshalb die Verankerung statt einer Schwelle: die Fläche hängt OBEN statt
   mittig. Der Keil sitzt im unteren Teil der Zeichnung — ist die Fläche höher
   als der Viewport, ragt sie damit nur noch unten hinaus, und die Form beginnt
   um die halbe Überhöhe tiefer. Bei 1400×550 sind das 118px, bei 1920×700
   190px. Wo nichts überragt (ab etwa 16:9), ist die Verschiebung null und es
   ändert sich nichts.

   (Erst falsch herum gebaut: unten verankert rückt die Fläche nach OBEN,
   weil dann die ganze Überhöhe über die Oberkante geht. Nachgemessen und
   umgedreht.)

   NUR ab 768px: darunter trägt §151 die eigene Rechnung für den mobilen
   Swoosh (`--preload-swoosh-shift`), die auf der mittigen Verankerung aufsetzt.
   -------------------------------------------------------------------------- */
/* WAAGERECHT: links verankern statt mittig. Die Fläche ist 16:9 und deckt den
   Viewport (`width: 177.78vh`); ist sie breiter als das Fenster, hängt sie
   mittig verankert links UND rechts gleich weit über — und der Keil, der im
   Bild links beginnt, wird links abgeschnitten. Gemessen war die linke Kante
   der gezeichneten Form bei −1 bis −242px; nur bei 1920 lag sie auf 0.
   Links verankert geht der Überhang vollständig nach rechts, wo die Spitze
   ohnehin ausläuft. Gilt in beiden Engines gleich. */
@media (min-width: 768px) {
  html .animation-wrapper.z-11 [data-animation-type="lottie"] {
    left: 0 !important;
    /* NUR die waagerechte Zentrierung faellt weg. Die senkrechte bleibt —
       sonst reisst die Zeichnung aus der Komposition mit dem Vorspann, deren
       untere linke Strahlenachse der Swoosh fortsetzen soll. */
    transform: translateY(-50%) !important;
  }
}
/* SENKRECHT. Die Form beginnt bei der Hälfte der Flächenhöhe. Ist die Fläche
   höher als das Fenster, trägt die Verankerung oben das schon; ist sie es
   nicht (breite, flache Fenster), muss sie geschoben werden.

   Eine Regel für BEIDE Fälle statt zwei Bänder: die Form soll unter der
   tiefsten gemessenen Textunterkante beginnen. Die liegt bei 450px (Band
   768–991, wo der Hero-Text auf vier Zeilen läuft); 20px Luft darüber ergibt
   470px. Die Form sitzt bei `Oberkante + 50 % der Flächenhöhe`, und die
   Flächenhöhe ist mindestens die Fensterhöhe — also
   `Oberkante = 470px − 50vh`, nach unten durch `max(0px, …)` begrenzt.

   Bei 900px Höhe ist das 20px, bei 700px 120px, bei 650px 145px, bei 600px
   170px. Wo die Fläche überhängt, addiert sich die halbe Überhöhe dazu. */
/* Die frühere Verschiebung nach unten (`top: max(0px, 470px − 50vh)`) ist
   RAUS (Kundenentscheid 11.8.). Sie hat den Text zwar freigehalten, aber die
   Zeichnung bei 600px Fensterhöhe um 170px und bei 450px um 245px aus der
   Komposition gerissen. Stattdessen weicht jetzt der TEXT aus — siehe §188. */

/* --------------------------------------------------------------------------
   186. Band 480–767: der Keil wird linksbündig — gemessen am BILD, nicht am DOM.
   (Kundenbild 11.8., 600×650 und 737×700.)

   Zwei Versuche sind hier vorher gescheitert, beide zurückgenommen:
   `left: 0` schob den Keil nach rechts, und ein aus `getBBox()` gerechneter
   Versatz von 21,69vh machte die Messung bündig, das Bild aber nicht. Der
   Grund: in diesem Band ist eine ANDERE Zeichnung sichtbar (der mobile Swoosh
   `lottie-animation_2`), und `getBBox()` zählt dort unsichtbare Geometrie mit.

   Deshalb misst `scratchpad/pixel.py` jetzt die sichtbare Kante im
   Bildschirmfoto: unterhalb der Textunterkante ist alles, was sich vom hellen
   Grund abhebt, der Keil — der läuft links in fast schwarzes Ink aus, eine
   reine Suche nach Orange verfehlt ihn.

   So gemessen ist der Einzug eine feste Größe der Zeichnung:

     480×650  Fläche −338  Keil  58  → 396px = 60,9vh
     600×650  Fläche −278  Keil 118  → 396px = 60,9vh
     737×700  Fläche −254  Keil 172  → 426px = 60,8vh
     767×700  Fläche −239  Keil 188  → 427px = 60,9vh

   Die Fläche wird um genau diesen Einzug nach links gesetzt. Senkrecht bleibt
   alles wie es war — die Bildprobe zeigt dort überall Abstand (+12 bis +124).
   Unter 480px greift §151 mit der abgenommenen Telefonkomposition.
   -------------------------------------------------------------------------- */
@media (min-width: 480px) and (max-width: 767px) {
  html .animation-wrapper.z-11 [data-animation-type="lottie"] {
    left: -60.9vh !important;
    /* NUR die waagerechte Zentrierung faellt weg. `transform: none` hätte auch
       die senkrechte entfernt — die Fläche rutschte dann um eine halbe
       Bildhöhe nach unten (Keil von 331 auf 585 gemessen). */
    transform: translateY(-50%) !important;
  }
}

/* --------------------------------------------------------------------------
   187. Der Swoosh der Fussleiste laeuft in die CTA-Zeile.
   (Kundenbild 11.8., 768×700 in Safari.)

   Gemessen mit der Bildprobe (`scratchpad/pixelfoot.py`, sucht die orange
   Spitze im Bildschirmfoto — im dunklen Fussbereich verschwindet das linke
   Keilende im Grund, eine Kastenmessung taeuscht dort). Von 24 Fenstergroessen
   kollidieren sieben:

     768×700   WebKit    −42      1920×700  beide  −23/−27
     900×700   WebKit    −94      2560×800  beide  −185
     991×700   WebKit   −121

   Bei 768–991 zeigt Chromium KEINE Kollision (+112/+102/+95) — wie beim Hero
   ist das ein reiner Safari-Befund.

   Der Keil haengt unten in der Sektion (`position: absolute; bottom: 0`).
   Verschoben wird deshalb ueber `bottom`, NICHT ueber `max-height`: die Hoehe
   kommt aus `padding-bottom`, und `max-height` fasst Polsterung nicht — ein
   erster Versuch damit liess Safari unveraendert und verschlechterte Chromium
   von +112 auf +40. Ein negativer `bottom`-Wert schiebt die Zeichnung als
   Ganzes nach unten, ohne sie zu skalieren.

   Die Werte decken den schlechtesten Fall des Bandes plus 20px Luft ab.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) {
  html .code-embed.pt-93.lottie { bottom: -141px !important; }
}
@media (min-width: 1851px) {
  /* 2560×800 brauchte mehr als der gerechnete Wert: −205px brachten dort nur
     150px Wirkung (Spitze 130 → 280 statt 335), weil die Zeichnung mit der
     Fensterbreite mitwaechst. Nachgemessen auf −265px. */
  html .code-embed.pt-93.lottie { bottom: -265px !important; }
}
/* Nachtrag 11.8. (Kundenbild 1200×450): auch im mittleren Band klemmt es, aber
   nur bei sehr flachen Fenstern — gemessen 1200×450 −15 in beiden Engines,
   1400×450 −7 in Chromium; ab 500px Hoehe ist alles frei (+14 bis +75). Der
   Kunde hat ausdruecklich zugestimmt, dass die Zeichnung dort tiefer sitzen
   darf. Schwelle deshalb bei 480px Hoehe, damit 500 und darueber unberuehrt
   bleiben. */
@media (min-width: 992px) and (max-width: 1850px) and (max-height: 480px) {
  /* -40px brachten nur 12px Wirkung (Spitze 130 → 142) — die Zeichnung
     skaliert mit. Nachgemessen auf -100px. */
  html .code-embed.pt-93.lottie { bottom: -100px !important; }
}

/* --------------------------------------------------------------------------
   188. Bei flachen Fenstern rückt der Hero-Text hoch, nicht die Zeichnung runter.
   (Kundenentscheid 11.8.: „kann man nicht die Headline noch etwas weiter
   hochschieben in diesem Fall?")

   Gemessen, wie viel Weg der Keil braucht, damit er den Text nicht schneidet —
   und wie viel Luft der Textblock nach oben hat, bis er unter die Kopfleiste
   käme:

     Fenster     nötig   Luft
     1200×450      45      84    ✓
     1400×550      30      96    ✓
     1920×700      27     120    ✓
      768×700      72     100    ✓
      900×650     118     100    ✗ — 18px fehlen

   Für 900×650 reicht der Weg allein nicht; dort kommen 40px Verschiebung der
   Zeichnung dazu, der Rest kommt aus dem Text. Das ist der einzige Fall, in dem
   die Zeichnung überhaupt noch bewegt wird.

   `max-height` als Bedingung statt einer Rechnung über `vh`: der Bedarf hängt
   nicht nur an der Höhe, sondern auch an der Breite (bei 1920 ist der Satz
   länger, bei 768–991 läuft er auf vier Zeilen). Deshalb je Band eine Schwelle.
   -------------------------------------------------------------------------- */
@media (min-width: 992px) and (max-height: 580px) {
  html .section_hero .hero_content,
  html .section_hero .container > *:first-child { margin-top: -50px !important; }
}
@media (min-width: 1851px) and (max-height: 760px) {
  html .section_hero .hero_content,
  html .section_hero .container > *:first-child { margin-top: -40px !important; }
}
@media (min-width: 768px) and (max-width: 991px) and (max-height: 760px) {
  html .section_hero .hero_content,
  html .section_hero .container > *:first-child { margin-top: -80px !important; }
  html .animation-wrapper.z-11 [data-animation-type="lottie"] {
    transform: translateY(calc(-50% + 40px)) !important;
  }
}

/* --------------------------------------------------------------------------
   189. Der deutsche Satz in der Fußleiste läuft auf eine Zeile.
   (Kundenwunsch 11.8.: „Wir übernehmen Mandate nur, wenn wir über die
   entsprechende Expertise verfügen." — wenn möglich einzeilig.)

   Gemessen: der Satz misst bei 24px genau 943px, der Kasten
   (`.footer-cta_description-wrapper`) steht auf `max-width: 800px` — daran
   bricht er, in jedem Band, denn die Maße liegen im gezoomten Baum und ändern
   sich mit der Fensterbreite nicht. 980px geben ihm die Zeile plus Reserve;
   der englische Satz ist schmaler und bleibt unberührt, deshalb nur
   `html.lang-de`.

   Ab 768px: darunter ist Einzeiligkeit rechnerisch nicht zu haben (Kasten
   ~500px), und der Kunde hat „wenn möglich" gesagt.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) {
  /* ZWEI Klammern derselben Kette: der Wrapper trägt max-width 800, und sein
     Elternteil `.div-block-2` noch einmal dieselben 800. Beide müssen auf —
     die erste Fassung öffnete nur den Wrapper, und der Satz brach weiter am
     Elternteil (gemessen: einzeilig erst ab 1920). */
  html.lang-de .footer-cta_description-wrapper,
  html.lang-de .section_footer-cta .div-block-2 { max-width: 980px !important; }
}

/* --------------------------------------------------------------------------
   190. Fallstudien: ein Abstand unter allen Abschnittsüberschriften — und
   derselbe Schnitt darin.
   (Kundenbefund 11.8.: „der Abstand unter Unser Ansatz ist größer als bei den
   anderen Sektionen … wie unter Erfolgsbilanz sieht es richtig aus. Und
   Erfolgsbilanz ist wieder fettgedruckt, die anderen nicht.")

   Nach vier gescheiterten Anläufen mit pauschalen Abstandsregeln (dokumentiert
   im Verlauf: padding-top am Folgeblock verschiebt dessen Kante nicht,
   margin-bottom kollabiert, padding-bottom wirkt nur mit nachfolgendem
   Geschwister) jetzt STRUKTURELL, je Abschnitt an seinem eigenen Bau:

     Erfolgsbilanz    57px sichtbar (82 authored)  ← die Referenz, unverändert
     Herausforderungen: h3 trägt mb-20, der Absatz liegt im selben
       `.focus_left` — sein `pt-60` ist andernorts neutralisiert, es wirken
       nur die 20. 62px Polsterung auf dem Absatz ergeben 20+62 = 82.
     Unser Ansatz: die Kette bringt 100 authored; die erste `.approach-box`
       jeder Spalte trägt pt 42 → auf 23 ergibt 82. NUR die erste Box der
       Spalte — die Abstände ZWISCHEN den Boxen bleiben unberührt.
     Set-up: 40 authored; +42 über margin-top am `.setup-box` (kollabiert mit
       den 40 des Kopfblocks: wirksam wird max(40, 82)).
     Kundenfeedback: 80 authored gegen 82 — 1px sichtbar, bleibt.

   Ab 768px: das Telefon führt eigene Bandwerte, dort bleibt alles unangetastet.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) {
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .complex-sec .focus_left > p.text-size-large { padding-top: 62px !important; }
  /* Der erste Anlauf hier senkte die Innenpolsterung der ersten weißen Box —
     falsch: die sichtbare Kante ist die BOX selbst, und ihre Lage bestimmt der
     Flex-`gap: 60` des `.container-large`, nicht die Polsterung. Die Polsterung
     gehört der Box (Text säße sonst höher als in den Geschwisterboxen). Der
     Gap geht von 60 auf 42 — bei Challenge ist `.focus_left` einziges Kind,
     dort wirkt er nicht. */
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .complex-sec .container-large { gap: 42px !important; }
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .setup-sec .setup-box { margin-top: 82px !important; }
  /* Treofan fällt aus der Reihe: seine `.feedback-row` liegt IM `.focus_left`
     statt daneben (KUKA/Lenzing: Geschwister). Der margin-bottom des
     Kopfblocks wirkt dadurch nicht — gemessen 28 statt 56. Die 40 authored
     kommen als margin-top an der Zeile nach. */
  html.page-treofan .feedback-sec2 .focus_left > .feedback-row { margin-top: 40px !important; }
}

/* Der Fettschnitt derselben Überschriftenfamilie: klassenlose <strong> in den
   /-markierten Abschnittsüberschriften erben den Schnitt der Überschrift (600)
   statt der Browser-700. Auf /de/kuka trugen „Herausforderungen" und
   „Erfolgsbilanz" 700, auf /de/lenzing gar kein <strong> — die vier
   Fallstudien waren untereinander uneinheitlich ausgezeichnet. */
html .focus_left :is(h1, h2, h3) strong:not([class]),
html .focus_label-text :is(h1, h2, h3) strong:not([class]) { font-weight: inherit !important; }

/* WIEDERHERGESTELLT 11.8.: dieser Abschnitt war beim Neuschreiben von §184
   (Hero-Verankerung, 2ddaf4b) verloren gegangen — der Umbau hat damals den
   Dateirest ab §184 ersetzt und §185 mit abgeschnitten. Die Fettprobe hat es
   gezeigt: 14 Fundstellen statt 0. Inhalt unverändert aus 5964c01. */
/* --------------------------------------------------------------------------
   185. Klassenlose <strong> in den KPI- und Faktenkästen erben 700.
   (Kundenbefund 11.8.: „Adj. EBITDA margin sieht dicker aus als Employee
   number — ist das so?" Ja, war es.)

   Abgesucht wurde die ganze Seite — jedes <strong>/<b> auf 29 Seiten × 2
   Sprachen × 3 Breiten, verglichen mit dem Schnitt seines Umfelds. 21
   Fundstellen, alle auf den vier Fallstudien, immer dieselbe Ursache: ein
   <strong> OHNE Klasse erbt den Standardfettschnitt des Browsers (700),
   während `.bold-text-11/12/13` daneben auf 600 stehen.

   Behandelt wird hier nur die Rasterfamilie (Kundenvorgabe: „nur bei den KPI
   Boxen oder diesen Gridsystemen soll bei der selben Art Headline konsistent
   sein"). Die Abschnittsüberschriften — „Challenge"/„Herausforderungen",
   „Impact"/„Erfolgsbilanz" — laufen weiter auf 700; dort ist der stärkere
   Schnitt gewollt. Die Namen unter den Zitaten regelt §160.

   `:not([class])` ist der Diskriminator: genau das trennt die Fehlstellen von
   den absichtlich gesetzten 600ern. Die Regel hält auch, wenn beim nächsten
   Text wieder eine Klasse vergessen wird.
   -------------------------------------------------------------------------- */
html .box-wrapper .heading-6 strong:not([class]),
html .box-wrapper .heading-6 b:not([class]),
html .track-sec .heading-6 strong:not([class]),
html .track-sec .heading-6 b:not([class]),
/* Zwei Beschriftungen derselben Familie sitzen nicht im h6, sondern in einem
   `p.paragraph` — IDTs „Adj. EBITDA increase (…)" und die deutsche Fassung.
   Sie stehen in derselben `.box-inner` einer `.box-wrapper`, also greift
   dieselbe Begründung. Beim ersten Anlauf hat mein Selektor sie verfehlt; die
   Probe hat es gezeigt. */
html .box-wrapper .box-inner > p strong:not([class]),
html .box-wrapper .box-inner > p b:not([class]),
html .track-sec .box-inner > p strong:not([class]),
html .track-sec .box-inner > p b:not([class]) { font-weight: inherit !important; }

/* --------------------------------------------------------------------------
   191. Zwei Sichtbefunde 11.8., beide nur messbar, nachdem die Werkzeuge
   stimmten:

   (a) Slash → Überschrift: überall 0px Abstand, nur die nummerierten
       Fallstudien-Abschnitte (Herausforderungen, Unser Ansatz, Erfolgsbilanz)
       trugen 10px margin-top an der Überschrift → 7px sichtbare Lücke unterm
       Schrägstrich. Weg damit; alles unter der Überschrift rückt als Fluss
       mit, die kalibrierten Abstände aus §190 bleiben unverändert.

   (b) Der Hero-Swoosh malte ÜBER den Text. Der Grund war nicht das z-index
       des Textes (9999), sondern dass `.container` mit `z-index: 2` einen
       eigenen Stapelkontext aufmacht: die 9999 zählen nur DARIN, nach außen
       zählt die 2 — und 2 < 11 (animation-wrapper). Frühere Trefferproben
       (`elementFromPoint`) waren blind dafür, weil der Wrapper
       `pointer-events: none` trägt und übersprungen wird. Der Hero-Container
       geht auf 12: über den Swoosh, weit unter Leiste (9999+) und Vorspann
       (10000).
   -------------------------------------------------------------------------- */
html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
  .focus_left :is(h2, h3).heading-style-h5 { margin-top: 0 !important; }
html .section_hero .container { z-index: 12 !important; }

/* --------------------------------------------------------------------------
   192. Footer-Swoosh: das 0.8-Zoomband sah anders aus als die Nachbarn.
   (Kundenbefund 11.8., mehrfach: „1400×700 ist immer noch genauso!
   bei 1200×700 ist es super!")

   Vermessen: die Zeichnung ist in allen Bändern 50 % der Viewportbreite,
   aber ihre HÖHE springt am Bandwechsel:

     992–1365   (zoom .7)  authored 495  → sichtbar 346   ← die gute Referenz
     1366–1850  (zoom .8)  authored 357  → sichtbar 286   ← der Ausreißer
     ab 1851    (zoom 1)   authored 357  → sichtbar 357

   Das 0.8-Band teilt sich die 357 mit dem zoom-1-Band, wird aber auf 80 %
   gemalt — die Zeichnung ist dort sichtbar kleiner und steiler
   (`data-fit="stretch"`: die Form folgt dem Kasten). 433px authored ergeben
   bei 0.8 dieselben sichtbaren 346 wie die Referenz.
   -------------------------------------------------------------------------- */
@media (min-width: 1366px) and (max-width: 1850px) {
  /* Selektor bewusst schwer: `.section-2 > .code-embed.lottie.absolute2.hidden
     { height: auto !important }` (custom.css) traegt fuenf Klassen und gewann
     gegen die erste Fassung dieser Regel — gemessen: 357 blieb stehen. */
  html .section-2 > .code-embed.pt-93.lottie.absolute2.hidden,
  html .section-2 > .code-embed.pt-93.lottie.absolute2.block {
    height: 433px !important;
    /* Der zweite Riegel: `(min-width:1365px) and (max-height:780px)` deckelt
       auf 51svh — bei 700 Fensterhöhe exakt die 357, die selbst Inline-Styles
       geklemmt haben. Im Band auf 61.9svh: bei 700 sind das die 433, bei
       flacheren Fenstern schrumpft die Zeichnung weiter anteilig wie bisher. */
    max-height: 61.9vh !important;
    max-height: 61.9svh !important;
  }
}

/* --------------------------------------------------------------------------
   193. Feedback-Box: der Name läuft bündig mit den Texten außerhalb.
   (Kundenbefund 11.8.: „der Textinhalt der Box — die Box selbst passt, der
   Abstand nach links ist nur zu wenig.")

   Gemessen bei 1200/1440: die Referenztexte (Abschnittsüberschrift, Absätze)
   sitzen bei 70/80, die Namens-Glyphe bei 56/64 — es fehlen in beiden Bändern
   exakt 20px authored. Die Polsterung geht deshalb im Zweispalten-Band von 20
   auf 40, und nach der Vorgabe vom Vormittag („oben und unten wie links")
   rundum. Unter 992 bleibt die 20: dort ist der Name mit ihr bereits bündig
   (Box bei 40, Texte bei 60 — nachgemessen am 11.8.).
   -------------------------------------------------------------------------- */
@media (min-width: 992px) {
  html .team-body2 { padding: 40px !important; }
}

/* --------------------------------------------------------------------------
   194. Filterleiste: gewählte Beschriftung läuft nicht mehr über den Knopf.
   (Kundenbefund 11.8., iPhone: „Bickel & Company" ragte über den orangenen
   Knopf hinaus.)

   Die Knöpfe der Filterleiste sind ~99px schmal; wählt man im Menü einen
   längeren Eintrag („Bickel & Company", „Maschinen­bau" …), ersetzt das Skript
   die Beschriftung, und der nowrap-Text lief sichtbar über die Knopfkante.
   Kundenentscheid: schlicht abschneiden. Der Toggle ist ein Flex-Container —
   min-width:0 erlaubt dem Beschriftungs-Div überhaupt erst, schmaler zu werden
   als sein Text; overflow:hidden schneidet an der Knopfkante. Der Pfeil (img)
   behält seine Größe (flex-shrink:0).
   -------------------------------------------------------------------------- */
.filter-box .dropdown-toggle { overflow: hidden !important; }
.filter-box .dropdown-toggle > div { min-width: 0; overflow: hidden; }
.filter-box .dropdown-toggle > img { flex-shrink: 0; }

/* --------------------------------------------------------------------------
   195. Projektkarten-KPI-Kacheln am Telefon: Luft zwischen Beschriftung und
   Wert. (Kundenbefund 11.8., iPhone: seit dem zweizeiligen „Industrials &
   produzierendes Gewerbe" [§183/karten_umbruch] klebte der Wert an der
   Überschrift.)

   Gemessen bei 375/430, beide Engines: die Kacheln wachsen nur auf ihren
   Inhalt (70–82px, min-height:70 aus site.css @479), das space-between hat
   nichts zu verteilen — Lücke Überschrift→Wert: 0px. 100px min-height geben
   der vollsten Kachel (zweizeilige Überschrift + Wert = ~82px Inhalt + 24
   Polster) wieder ~16px Luft, und das Raster hält alle vier gleich hoch.
   Ab 480px greift die Grundregel mit min-height:128 — dort war nie Not.
   -------------------------------------------------------------------------- */
@media (max-width: 479px) {
  .project-box .project-box-wrapper2 .box-inner.flex-col.bg-white.h-70 {
    min-height: 100px !important;
  }
}

/* --------------------------------------------------------------------------
   196. Fallstudien am TELEFON: ein Abstand unter allen Abschnitts-
   Überschriften — das Gegenstück zu §190, das bewusst erst ab 768px greift.
   (Kundenbefund 11.8., iPhone: „bei Client feedback viel zu groß zwischen
   Headline und Bild, die anderen wirken auch zu groß im Vergleich zu anderen
   Seiten.")

   NACHZIEHUNG 11.8. spät (Kundenentscheid anhand dreier Fotos): die KÄSTEN
   (Set-up-Box, Approach-Boxen, Impact-Platte) bekommen das Referenzmaß des
   Logo-Kastens — 40px TINTE bis Kante (der Logo-Abstand [§198, „genau
   richtig"] misst 41 Tinte; Überschriften-Rects enden auf der Tinte, daher
   DOM-Wert 40). Die 20 bleiben, wo TEXT oder FOTO folgt (Challenge,
   Feedback). Ursprünglicher Telefon-Hauswert war 20px sichtbar: Challenge auf allen vier
   Fallstudien, „How we do it", „Engagements", „Clients" auf /private-equity,
   „Selected expertise" auf /expertise — alle 20. Die Ausreißer, je an ihrer
   eigenen Quelle (gemessen bei 390px, Kante = erstes sichtbares Element):

     Set-up          40 sichtbar: der Umschlag .px-40 trägt mb 40, und das
       innere .focus_left (mb 40) kollabiert hindurch — beide müssen auf 20,
       sonst gewinnt der größere                               → 20
     Client feedback 60 sichtbar (nur KUKA/Lenzing — dort ist die
       .feedback-row GESCHWISTER des .focus_left, mb 40 wirkt, + pt 20 der
       Zeile; Treofan hat die Zeile IM .focus_left und steht schon auf 20):
       mb 0, die pt-20 der Zeile bleiben                       → 20
     Approach        56 sichtbar: mb 40 + row-gap 16 des Containers
       (:has(.approach-box) trennt ihn von der Challenge-Sektion gleicher
       Klasse; ohne :has-Unterstützung bleibt der alte Abstand — nichts
       bricht): mb 0, row-gap 20                               → 20
     Impact          korrigiert 11.8. abends: die SICHTBARE Kante ist die
       orange Verlaufslinie des Plattenumschlags (div-block-21), nicht die
       innere Kachel (+20 Polster). Die erste Fassung (mb 0, gemessen an
       der Kachel) schob die gemalte Linie auf 0,5px an die Überschrift —
       Kundenbefund „fehlt komplett", per Pixel-Scan bestätigt (Tinte 378,
       Linie 384,7). .record-wrapper mb 24 → 20                → 20
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .setup-sec .focus_left,
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .setup-sec .px-40 { margin-bottom: 40px !important; }
  html:is(.page-kuka, .page-lenzing)
    .feedback-sec2 .focus_left { margin-bottom: 0 !important; }
  /* Nachzug (Kundenfoto ~720px): AUCH Text und Foto auf das 40er-Maß —
     „Herausforderungen → Text" war mit 20 sichtbar kleiner als die Kästen. */
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .complex-sec .focus_left > p.text-size-large { margin-top: 16px !important; }
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .feedback-sec2 .feedback-row { padding-top: 29px !important; }
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .complex-sec:has(.approach-box) .focus_left { margin-bottom: 0 !important; }
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .complex-sec:has(.approach-box) .container-large { row-gap: 40px !important; }
  /* NUR die Impact-Sektion — die Firmeninfo-Sektion trägt DIESELBEN Klassen
     (track-sec js-counter-section); unterscheidbar allein am Logo-Kasten,
     den §198 separat kalibriert. */
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .track-sec.js-counter-section:not(:has(.logo-box)) .record-wrapper { margin-bottom: 40px !important; }
  /* Firmeninfo-Sektion: authored mb 24 → 20, damit der Logo-Kasten mit §198
     auf denselben 40-41px Tinte landet wie die Kästen darunter. */
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .track-sec:has(.logo-box) .record-wrapper { margin-bottom: 20px !important; }
}

/* --------------------------------------------------------------------------
   197. Filterleiste am Telefon: drei gleich breite Knöpfe, ringsum derselbe
   Abstand zur grauen Box. (Kundenbefund 11.8., iPhone: „die filterbuttons
   ändern ihre größe … selber abstand links/rechts wie oben/unten".)

   Am Telefon ist die graue Box vollbreit, die inhaltsbreiten Knöpfe (101–110px
   je nach Beschriftung) schwammen mittig darin: links/rechts 26px Luft, oben/
   unten 10px — und jede Filterwahl änderte die Knopfbreite. Jetzt teilen sich
   die drei Knöpfe die Boxbreite zu gleichen Teilen: konstante Größe, egal was
   gewählt ist, und der Randabstand ist überall das 10px-Polster der Box.
   Desktop/Tablet bleiben unangetastet — dort umschließt die Box die Knöpfe
   ohnehin gleichmäßig (7px bei 1200, 10px bei 768, gemessen), Größe wächst
   mit der Beschriftung wie gehabt. Lange Beschriftungen schneidet §194 ab.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  /* Die Box ist ein GRID (justify-content:center, Spalten nach Inhalt) —
     flex-Regeln griffen deshalb nicht, und die ältere Spurenregel
     (`html .filter-box { grid-template-columns: auto auto auto }`, §~) hat
     eine Klasse mehr Spezifität: hier mit demselben Gewicht überboten,
     spätere Position entscheidet. Drei gleiche 1fr-Spalten füllen die Box;
     minmax(0,1fr) erlaubt den Spalten, schmaler zu werden als ihr Inhalt
     (lange Beschriftungen schneidet §194). Die unsichtbaren
     Zwilling-Dropdowns (display:none) belegen keine Zellen. */
  html .filter-box { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; justify-content: stretch !important; }
  html .filter-box > .dropdown-2 { min-width: 0 !important; }
  html .filter-box .dropdown-toggle { width: 100% !important; }
}

/* --------------------------------------------------------------------------
   198. Fallstudien am Telefon: der weiße Logo-Kasten bekommt zum Text
   denselben Abstand wie zum Seitenrand. (Kundenbefund 11.8., iPhone:
   „der abstand vom text zum lenzing logo soll so sein wie nach links zum
   bildschirmrand".)
   Gemessen bei 430: Kasten-Seitenrand 20px, Abstand Text→Kasten nur 10px
   → +10 auf dem Kasten selbst (.logo-box gibt es nur an dieser Stelle).
   Nur Telefonband; die Desktop-Abstände kalibriert §190.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  html:is(.page-kuka, .page-lenzing, .page-treofan, .page-idt-biologika)
    .logo-box { margin-top: 10px !important; }
}

/* --------------------------------------------------------------------------
   199. Aufklappboxen: enger Durchschuss IM Aufzählungspunkt, Luft ZWISCHEN
   den Punkten. (Kundenbefund 11.8., iPhone /private-equity: die umbrochene
   Zeile „…for rapid / implementation" hatte denselben Abstand wie ein neuer
   /-Punkt.)

   Die Punkte stehen im Export als EIN Block mit <br> — main.js §17 macht
   daraus Block-Spans (.aufz-zeile). Hier: Zeilenhöhe im Punkt 1.45 (Schrift-
   größe bleibt), 10px zwischen den Punkten — zusammen ~33px Punktabstand,
   nahe am alten Bild (30,4), aber der Umbruch läuft jetzt auf ~23px.
   Gilt überall, wo Akkordeons vorkommen (alle Unterseiten, alle Breiten).
   -------------------------------------------------------------------------- */
.accordion-body .aufz-zeile {
  display: block;
  line-height: 1.45 !important;
  margin-top: 10px;
}
.accordion-body .aufz-zeile:first-child { margin-top: 0; }

/* --------------------------------------------------------------------------
   200. Großbild (ab 1851): der Footer-Keil in Hero-Größe und -Lage.
   (Kundenbild 11.8., 5K Studio Display Vollbild 2560×1440: „die lottie im
   footer sollte so aussehen wie im hero von der größe und positionierung".)

   Der Hero füllt bei 16:9 exakt den Schirm — Spitze bei ~39 %/39 %. Der
   Footer-Keil stand kleiner und ~190px tiefer (Spitze 39 %/52 %). Die
   Zeichnung ist anders komponiert als die Hero-Fläche (eine Verdopplung der
   Box ließe den Keil den halben Schirm füllen — probiert, verworfen);
   deshalb Transform auf dem bestehenden, per §187 (-265px) verankerten
   Element: 300px hoch (nachts nachgestellt auf die Kundenfenster-Maße 2000×1007: Spitze überall ≤50 %), 10 % größer, Ursprung links unten. Nachschärfung
   auf Kundenwunsch („Spitze exakt bei 50 % des Footers"): per Pixel-Scan bei
   2560/2000/1920 kalibriert — Spitze stand mit 190px bei 55–57 %, mit 270px
   bei ~50 % (±1). Verglichen gegen den Hero an denselben Größen.
   -------------------------------------------------------------------------- */
@media (min-width: 1851px) {
  html .section-2 > .code-embed.pt-93.lottie.absolute2.hidden {
    transform: translateY(-300px) scale(1.1) !important;
    transform-origin: 0 100% !important;
  }
}

/* --------------------------------------------------------------------------
   201. Startseite DE, ab 1366: „Branchenschwerpunkte und Kundengruppen"
   bleibt einzeilig. (Kundenfrage 11.8.: „kann doch in eine Zeile oder?")
   Die Spalte (.focus_left) ist ab 1440 schmaler als der Satz (640 vs. ~740)
   — rechts daneben ist frei, die Zeile darf überstehen. Unter 1366 (Telefon,
   Tablet, Zoom-Band-Anfang) bleibt der Umbruch; nur diese eine Überschrift.
   -------------------------------------------------------------------------- */
@media (min-width: 1366px) {
  html.lang-de.page-index .section_focus .focus_label-text > h2 { white-space: nowrap; }
}

/* --------------------------------------------------------------------------
   202. Telefon-Footer: der Keil ist auf jedem Gerät gleich groß.
   (Kundenbefund 11.8.: „auf der case study seite sieht die lottie anders aus
   als auf der startseite" — tatsächlich hing die Keilgröße an der SICHTBAREN
   Fensterhöhe: mit Safari-Leisten (~745px) schrumpfte das Zeichnungsband von
   341 auf 176px, der Keil wurde höhengetrieben klein und steil [Spitze bei
   ~66 % statt ~95 % der Breite]; ohne Leisten bzw. je nach Leisten-Zustand
   beim Laden sah dieselbe Seite anders aus. Bei 430×745 nachgestellt —
   deckungsgleich mit dem Kundenfoto.)
   Das Band hält jetzt die natürliche Zeichnungshöhe (341px bei 430 = 79,3vw)
   als Minimum: der Keil läuft immer in voller Breite, der Footer wird auf
   sehr flachen Sichthöhen dafür geringfügig scrollbar.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  html .section-2 > .code-embed.lottie.absolute2.block { min-height: 79.3vw !important; }
}


/* --------------------------------------------------------------------------
   203. Footer-Überschrift läuft NIE über den Schirm — auf allen Größen.
   (Kundenbefund 11.8. spät: die Querformat-Fassung von §37 hatte den Fix auf
   liegende Telefone begrenzt; in einem hohen ~780px-Fenster lief „Wir treiben
   Transformationen." weiter beidseitig hinaus.)
   Ursache überall dieselbe: die Sektion trägt flex-shrink:0 und nimmt sich
   die Breite ihrer NOWRAP-Überschrift (max-content > Fensterbreite), die
   Überschrift selbst darf nicht umbrechen. Die Klemme ist auf jeder Größe
   harmlos: white-space:normal bricht nur um, wenn der Platz wirklich fehlt —
   auf großen Schirmen bleibt der Satz einzeilig wie bisher (939px bei 2000).
   -------------------------------------------------------------------------- */
html .section-2 > .overflow-hidden.section_footer-cta { width: 100% !important; max-width: 100% !important; min-width: 0 !important; }
html .section-2 .footer-inner,
html .section-2 .footer-cta_headline-wrapper { max-width: 100% !important; min-width: 0 !important; }
html .section-2 .footer-cta_headline { white-space: normal !important; }

/* --------------------------------------------------------------------------
   204. Ladeanimation: der Fluchtpunkt der Linien liegt auf der späteren
   Keilspitze. (Kundenbefund 11.8.: „ladeanimation mit den linien matcht
   nicht perfekt mit dem füllenden keil".)
   Die Szene (.scene) trägt eine EIGENE Kopie der Zeichnung, mittig
   eingepasst — der Hero-Keil ist seit §184 links verankert. Bei jedem
   Fenster schmaler als 16:9 sprang der Fluchtpunkt deshalb um
   (177,78vh − 100vw)/2 nach rechts (gemessen 1440×900: 74px). Die Szene
   bekommt dieselbe Verankerung; unter 768 gilt die Telefonrechnung
   (--preload-swoosh-shift, main.js §3), dort bleibt alles unangetastet.
   -------------------------------------------------------------------------- */
/* ZURÜCKGENOMMEN in derselben Nacht (Kundenentscheid: „der konvergenzpunkt
   soll exakt in der mitte des bildschirms sitzen") — die Links-Verankerung
   zog den Fluchtpunkt aus der Mitte. Die Szene bleibt mittig wie im Export;
   dass die spätere Keilspitze rechts daneben liegt, ist so gewollt. */

/* --------------------------------------------------------------------------
   205. Band 480–767 mit GROSSER Höhe (schmales hohes Desktop-Fenster,
   z. B. 750×1000): §186 schiebt die höhengetriebene 16:9-Fläche (177,78vh)
   um 60,9vh nach links — bei 1000px Höhe ist die Fläche 1778px breit, der
   Keil lief rechts aus dem Schirm (Kundenbild 11.8. spät). Ab 768px Höhe
   wird die Fläche deshalb BREITENgetrieben gedeckelt: 152,1vw × 85,57vw
   (gleiches 16:9), Einzug als Anteil der eigenen Breite (34,25 % = die
   gemessenen 60,9vh/177,78vh aus §186) — sichtbare Keilbreite = exakt 100vw,
   die Spitze endet an der rechten Kante. Flache Höhen (§186) unverändert.
   -------------------------------------------------------------------------- */
@media (min-width: 480px) and (max-width: 767px) and (min-height: 768px) {
  html .animation-wrapper.z-11 [data-animation-type="lottie"] {
    width: 152.1vw !important;
    height: 85.57vw !important;
    left: 0 !important;
    top: 50% !important;
    transform: translate(-34.25%, -50%) !important;
  }
}

/* --------------------------------------------------------------------------
   206. Nur echte Links hovern orange. (Kundenbefund 11.8. spät, /contact:
   die ADRESSE färbte sich beim Überfahren orange.) Die Export-Regel
   `.text-size-large.text-color-primary.mb-0:hover` (site.css) trifft auch
   reine Absätze — für <p> neutralisiert, <a> behalten ihren Hover (§~7240).
   -------------------------------------------------------------------------- */
html p.text-size-large.text-color-primary.mb-0:hover { color: #212121 !important; }

/* --------------------------------------------------------------------------
   207. Teamkarten: die Berufsbezeichnung ist IMMER deutlich kleiner als der
   Name. (Kundenbefund 11.8. spät: bei ~535px stand „MANAGING PARTNER" auf
   exakt derselben Größe wie der Name [20/20px], bei 390 auf 18/20 — die
   Versalien wirken dabei noch größer. Ab 768 war das Verhältnis mit 17/28
   in Ordnung.) Die Klasse beschriftet ausschließlich Rollen (geprüft über
   alle Seiten). Unter 768: 14px = 0,7× des 20px-Namens.
   -------------------------------------------------------------------------- */
@media (max-width: 767px) {
  html .text-color-brand.fs-24 { font-size: 14px !important; }
}

/* --------------------------------------------------------------------------
   208. Profilseiten, Band 768–991: die Ausbildungs-Kacheln fluchten mit der
   Überschrift und tragen weniger Polster. (Kundenbefund 11.8. spät: Kacheln
   standen 19px weiter links als „Educational background", Innenpolster 40px
   rundum wirkte zu massig — Desktop führt 28.)
   Überschrift: Container-Polster 40 + 20 Label-Einzug = 60; Kacheln lagen
   auf 40/41. Die Reihe rückt um 20 nach rechts, das Polster geht auf 28.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) {
  html .education-bg .educational-row { margin-left: 20px !important; }
  html .education-bg .box-inner.h-136 { padding: 28px !important; }
}

/* --------------------------------------------------------------------------
   209. Profil-Hero 768–1365: kein harter Porträt-Beschnitt mitten im Schirm.
   (Kundenbefund 12.8. nachts, ~820px: Johann Spanners Arm war an einer
   senkrechten Kante gekappt — Priorität „das darf nicht passieren".)
   Ursache war NICHT die Fotodatei: das Band setzt overflow:hidden auf die
   rechts verankerte 56%-Medienspalte und schiebt das Bild per translateX(28%)
   hinein — die Spaltenkante stand mitten im Schirm und beschnitt die Figur.
   Die Spalte läuft im Band jetzt vollbreit: die Beschnittkante fällt auf die
   SCHIRMKANTE, die Person bleibt exakt an ihrem Platz (rechts verankert,
   Transform unverändert). Bei 820/900/991/1200/1365 im Bild abgenommen.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 1365px) {
  html .profile-hero_media { width: 100% !important; max-width: none !important; }
}

/* --------------------------------------------------------------------------
   210. Tab-Knöpfe: kein Lichtspalt in den Ecken beim Hover. (Kundenbefund
   12.8. nachts, Safari + iPhone, vermutlich überall: die Füllfläche hatte
   „zunächst einen anderen Eckenradius als die Umrandung".)
   Geometrie: außen 8px Radius MIT 1px Rahmen — die innen liegende Füllung
   braucht den verschachtelten Radius 8−1 = 7px, sonst steht ihr Bogen vom
   Rahmenbogen ab und der helle Grund blitzt in den Ecken durch (durch die
   0,5s-Transition besonders sichtbar).
   -------------------------------------------------------------------------- */
html .tab-btn .tab-inner-btn,
html .tab-btn2 .tab-inner-btn,
html .tab-btn3 .tab-inner-btn { border-radius: 7px !important; }

/* --------------------------------------------------------------------------
   211. Team-Hero: die Telefon-Bildführung gilt bis 991. (Kundenwunsch 12.8.
   nachts: „deutlich früher aufs mobile bild wechseln" — bei ~840px stand die
   Montage per contain unten im Schirm, darüber riesige Leere.)
   Es gibt nur EINE Montage in vier Auflösungen (alle 3:2) — „das mobile Bild"
   ist die Telefon-Bildführung: cover mit 45 % 20 %. Die übernimmt jetzt das
   Band 768–991 mit der passenden Auflösung; ab 992 bleibt die
   Desktop-Konstruktion unverändert.
   -------------------------------------------------------------------------- */
@media (min-width: 768px) and (max-width: 991px) {
  html.page-team .hero-sec2.py-100 {
    background-size: cover !important;
    background-position: 45% 20% !important;
    background-image: url("/assets/media/bc-hero-team-1280.jpg?v=3") !important;
    background-image: image-set(url("/assets/media/bc-hero-team-1280.webp?v=3") 1x, url("/assets/media/bc-hero-team-2560.webp?v=3") 2x) !important;
  }
}

/* --------------------------------------------------------------------------
   212. Expertise-Karten bis 991: hohe Logos rücken vom BY-Badge ab.
   (Kundenbefund 12.8. nachts, ~840px: der Sunday-Natural-Kreis u. a. „ragen
   über den by badge rüber".)
   Die Logo-Box hält überall 37px Abstand zum Badge — aber die TINTE variiert:
   runde/hohe Zeichen füllen die volle 314px-Box und kommen dem Badge nahe,
   Wortmarken sind flach und bleiben fern. Das Innenpolster verkleinert nur
   die höhengetriebenen Logos (SVG-meet skaliert intern); breitengetriebene
   Wortmarken bleiben unverändert. Desktop (ab 992) behält die abgenommene
   Optik.
   -------------------------------------------------------------------------- */
@media (max-width: 991px) {
  html .experience-card .box-logo { padding: 45px 0 !important; }
}

/* --------------------------------------------------------------------------
   213. Profilseiten bis 991: die Erfahrungs-Logos laufen auf EINER optischen
   Größe. (Kundenbefund 12.8. nachts, ~535px: „manche logos viel zu klein".)
   Ursache: die nummerierten Logo-Exporte teilen eine gepolsterte
   560×494-Leinwand — als Bild gerendert blieb vom Zeichen ein Streifchen.
   Die Profilkarten laden jetzt die beschnittenen -orig-Fassungen (Bauzeit-
   Tausch in den teams__-Vorlagen, dieselben Dateien wie die Expertise-
   Karten), und die Höhe ist normiert: 56px, Breite folgt dem Verhältnis,
   nie breiter als die Kachel. Ab 992 bleibt die abgenommene Desktop-Optik.
   -------------------------------------------------------------------------- */
@media (max-width: 991px) {
  /* beide Bauformen: mal trägt der IMG selbst .image-7, mal ein DIV-Umschlag
     mit innerem IMG. Höhe reserviert auch den Platz vor dem Lazy-Load. */
  html .track-sec img.image-7,
  html .client-sec img.image-7,
  html .track-sec .image-7 > img,
  html .client-sec .image-7 > img,
  html .client-sec .box-inner.flex-col.bg-gray > img,
  /* überbietet die 5-Klassen-Kachelregel (width 100 %/height auto, §oben),
     die sonst per Spezifität gewänne */
  html .client-sec .div-block-25 .box-1 .box-inner img.image-7,
  html .client-sec .div-block-25 .box-1 .box-inner picture.image-7 img {
    height: 56px !important;
    /* der Export deckelt .image-7 mit max-height:100 % der eingedrückten
       Flexzeile — das war die eigentliche 10px-Falle */
    max-height: none !important;
    width: auto !important;
    max-width: 85% !important;
    object-fit: contain !important;
  }
}
