/* ============================================================================
   CarbonCore — Alternate edition ("polished")
   ============================================================================

   Loaded AFTER site.css and overrides it. Deliberately a separate layer, not an
   edit of site.css: site.css is generated by the supplier's tools/build_css.py,
   so any change there would be lost on their next build and would make the two
   editions impossible to compare. Everything here is presentation only — no
   content, no wording, no structure is changed, so the two editions can be
   judged on look alone.

   Delete this one file and the link tags, and the site is byte-identical to the
   delivered version again.
   ========================================================================== */

/* ── 1. Typography ─────────────────────────────────────────────────────────
   The delivered hero runs to 7.8rem, which on a 27" display fills the screen
   with three words and pushes the actual proposition below the fold. Tightened
   at the top end only — on a laptop and on mobile the scale is unchanged. */

:root {
  --alt-measure: 68ch;
}

.display {
  font-size: clamp(3.2rem, 6vw, 6.4rem);
  letter-spacing: -0.045em;
}

.h1 {
  font-size: clamp(2.6rem, 5.2vw, 5rem);
}

.h2 {
  font-size: clamp(2rem, 3.8vw, 3.4rem);
}

/* Headlines break where the meaning breaks, not where the box ends. */
.display,
.h1,
.h2,
.h3,
.prose h2,
.prose h3 {
  text-wrap: balance;
}

/* Stops the one-word last line ("orphan") that the long copy blocks produce. */
p,
.lead,
.copy,
.prose p,
.prose li {
  text-wrap: pretty;
}

/* A 760px lead at 1.45rem runs to ~95 characters — well past comfortable
   reading width. Bound by character count so it holds at every size. */
.lead {
  max-width: min(60ch, 760px);
  line-height: 1.5;
}

.copy,
.prose p {
  max-width: min(var(--alt-measure), 780px);
}

/* Slightly opened body copy: 1.6 is tight for 1.06rem at this measure. */
.prose p,
.prose li {
  line-height: 1.68;
}

/* The eyebrow rule reads as a stray dash at small sizes; make it deliberate. */
.eyebrow::before {
  width: 28px;
  opacity: 0.75;
}

/* ── 2. Vertical rhythm ────────────────────────────────────────────────────
   --space-8 (6.5rem) top AND bottom between every section is a lot of scrolling
   on a laptop. Reduced ~15% above 1024px only. */

@media (min-width: 1024px) {
  :root {
    --space-8: 5.5rem;
    --space-9: 7.5rem;
  }
}

/* ── 3. The hero figure ────────────────────────────────────────────────────
   The delivered SVG had its depth axis clipped by its own viewBox (fixed in
   hero-abstract-ccs.svg). Here it just gets a frame that matches the cards. */

.hero-visual img,
.anchor-visual img {
  border-radius: var(--radius-md);
}

/* ── 4. Interaction ────────────────────────────────────────────────────────
   The delivered nav has no hover affordance beyond a colour shift. A rule that
   grows from the left reads as "this is where you are going". */

.nav-link {
  position: relative;
}

.nav-link::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: -6px;
  height: 1px;
  background: var(--copper-500);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.32s var(--ease);
}

.nav-link:hover::after,
.nav-link:focus-visible::after,
.nav-link[aria-current="page"]::after {
  transform: scaleX(1);
}

/* Cards lift instead of just changing border colour. Kept small — 2px, not the
   6px bounce that reads as a consumer landing page. */
.card,
.tile,
.service-card,
.insight-card,
.operating-strip article {
  transition:
    transform 0.35s var(--ease),
    box-shadow 0.35s var(--ease),
    border-color 0.35s var(--ease);
}

.card:hover,
.tile:hover,
.service-card:hover,
.insight-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-sm);
}

/* Buttons: the delivered arrow sits still. Moving it the same 3px on hover and
   focus makes the control feel connected to the pointer. */
.nav-cta span,
.btn span,
.button span {
  transition: transform 0.3s var(--ease);
  display: inline-block;
}

.nav-cta:hover span,
.btn:hover span,
.button:hover span,
.nav-cta:focus-visible span,
.btn:focus-visible span {
  transform: translateX(3px);
}

/* ── 5. Focus ──────────────────────────────────────────────────────────────
   The delivered ring is a 3px square outline at 4px offset, which cuts through
   rounded cards. Follows the shape instead, and keeps a dark inner edge so the
   ring stays visible on both the stone and the navy sections. */

:focus-visible {
  outline: 3px solid var(--aqua-400);
  outline-offset: 3px;
  border-radius: var(--radius-xs);
}

.card:focus-visible,
.tile:focus-visible,
.insight-card:focus-visible,
.nav-cta:focus-visible {
  border-radius: var(--radius-md);
}

/* ── 6. Reduced motion ─────────────────────────────────────────────────────
   The delivered stylesheet animates and smooth-scrolls unconditionally. Users
   who ask the operating system for less motion get a vestibular trigger instead
   of a website. This is an accessibility fix, not a preference. */

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

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ── 7. Small corrections ──────────────────────────────────────────────────*/

/* Form controls and selection pick up the brand instead of the browser blue. */
:root {
  accent-color: var(--copper-500);
  color-scheme: light dark;
}

::selection {
  background: var(--copper-500);
  color: var(--white);
}

/* Long URLs and German compounds in the legal pages overflow their column. */
.prose a,
.prose td,
.prose li {
  overflow-wrap: anywhere;
}

/* Tables in the legal/imprint pages had no cell rhythm of their own. */
.prose table {
  border-collapse: collapse;
  width: 100%;
}

.prose th,
.prose td {
  text-align: left;
  padding: 0.6rem 0.9rem 0.6rem 0;
  border-bottom: 1px solid rgba(58, 70, 82, 0.14);
  vertical-align: top;
}

/* ── 8. Print ──────────────────────────────────────────────────────────────
   A consultancy site gets printed — by exactly the people who decide. The
   delivered stylesheet has no print rules at all, so it prints the navy
   sections as full-bleed dark blocks and the navigation as a list of dead
   words. */

@media print {
  .site-header,
  .mobile-nav,
  .menu-toggle,
  .skip-link,
  .site-footer nav,
  .nav-cta {
    display: none !important;
  }

  html,
  body,
  .section-dark,
  .section-ink,
  .hero {
    background: #fff !important;
    color: #000 !important;
  }

  .section-dark *,
  .section-ink *,
  .hero * {
    color: #000 !important;
    border-color: #999 !important;
  }

  .section {
    padding: 1.2rem 0 !important;
    break-inside: avoid;
  }

  .display,
  .h1 {
    font-size: 2.2rem !important;
  }

  .h2 {
    font-size: 1.6rem !important;
  }

  /* Reveal link targets — a printed page cannot be clicked. */
  .prose a[href^="http"]::after {
    content: " (" attr(href) ")";
    font-size: 0.75em;
    word-break: break-all;
  }
}
