
*{box-sizing:border-box}
html{scroll-behavior:smooth;background:#f5f4f1}
body{margin:0;font-family:var(--ab-sans);background:var(--ab-paper);color:var(--ab-ink);-webkit-font-smoothing:antialiased}
img{max-width:100%}
/* scroll film */
.ab-film{position:relative;height:340vh;background:var(--ab-night);color:var(--ab-paper)}
.ab-film__stage{position:sticky;top:0;height:100vh;height:100dvh;overflow:hidden}
.ab-film__stage video,.ab-film__stage img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.ab-film__stage::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(16,19,22,.82) 0%,rgba(16,19,22,.45) 45%,rgba(16,19,22,0) 75%)}
.ab-film__copy{position:absolute;z-index:2;left:clamp(16px,6vw,96px);bottom:clamp(48px,12vh,140px);max-width:620px}
.ab-film__copy .ab-kicker{font-family:var(--ab-mono);font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--ab-red-light);margin:0 0 16px}
.ab-film__copy h1{font-size:clamp(40px,7vw,82px);line-height:1.02;margin:0;font-weight:700;letter-spacing:-.02em}
.ab-film__copy p{font-size:clamp(17px,1.6vw,20px);line-height:1.55;color:#d9dde1;margin:20px 0 0}
.ab-film__tags{list-style:none;display:flex;flex-wrap:wrap;gap:8px;padding:0;margin:22px 0 0}
.ab-film__tags li{font-family:var(--ab-mono);font-size:13px;border:1px solid rgba(245,244,241,.4);padding:7px 11px;background:rgba(16,19,22,.5)}
.ab-film__progress{position:absolute;z-index:2;left:0;bottom:0;height:3px;width:100%;background:rgba(245,244,241,.12)}
.ab-film__progress span{display:block;height:100%;width:0;background:var(--ab-red-light)}
.ab-film__hint{position:absolute;z-index:2;right:clamp(16px,4vw,48px);bottom:28px;font-family:var(--ab-mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:#aeb5bd}
@media (prefers-reduced-motion:reduce){.ab-film{height:auto}.ab-film__stage{position:relative;height:90vh}.ab-film__stage video{display:none}}
/* ===== ALAN BIM-Solutions site layer =====
 * Concept spine: the page reads like a survey record, from scan to model.
 * Charcoal ground, paper sections, brand crimson from the logo. */
:root {
  --ab-ink: #15181c;
  --ab-night: #101316;
  --ab-graphite: #22272d;
  --ab-line: #2f363d;
  --ab-paper: #f5f4f1;
  --ab-paper-2: #ebe8e2;
  --ab-rule: #d6d2ca;
  --ab-text: #2b3036;
  --ab-mute: #5a636c;
  --ab-mute-dark: #aeb5bd;
  --ab-red: #bf1c2e;
  --ab-red-light: #ef4b57;
  --ab-white: #ffffff;
  --ab-sans: "IBM Plex Sans", "Segoe UI", system-ui, sans-serif;
  --ab-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", monospace;
}
.ab-site { font-family: var(--ab-sans); background: var(--ab-paper); color: var(--ab-ink); }
.ab-site h1, .ab-site h2, .ab-site h3 { text-wrap: balance; letter-spacing: -0.01em; }
.ab-site h2 { font-size: clamp(30px, 4.2vw, 48px); line-height: 1.08; font-weight: 700; margin: 0; }
.ab-site h3 { font-size: 20px; line-height: 1.25; font-weight: 600; margin: 0; }
.ab-label { font-family: var(--ab-mono); font-size: 13px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ab-red); margin: 0 0 14px; }
.ab-lead { font-size: 18px; line-height: 1.6; color: var(--ab-mute); max-width: 60ch; margin: 18px 0 0; }
.ab-mono { font-family: var(--ab-mono); font-size: 13px; letter-spacing: 0.04em; color: var(--ab-mute); }
.ab-site a:focus-visible, .ab-site button:focus-visible, .ab-site summary:focus-visible, .ab-site input:focus-visible, .ab-site select:focus-visible, .ab-site textarea:focus-visible { outline: 2px solid var(--ab-red-light); outline-offset: 3px; }

/* header */
.ab-header { position: fixed; z-index: 40; top: env(safe-area-inset-top, 0px); left: 0; right: 0; display: flex; align-items: center; gap: 28px; padding: 14px clamp(16px, 4vw, 48px); background: linear-gradient(180deg, rgba(16,19,22,.82), rgba(16,19,22,0)); color: var(--ab-paper); }
.ab-header__home { display: inline-flex; min-height: 44px; align-items: center; color: inherit; text-decoration: none; }
.ab-header__nav { display: flex; gap: 26px; margin-left: auto; font-size: 15px; }
.ab-header__nav a { color: var(--ab-paper); text-decoration: none; opacity: .82; transition: opacity .2s; }
.ab-header__nav a:hover { opacity: 1; }
.ab-wordmark { display: inline-flex; align-items: center; gap: 10px; }
.ab-wordmark__mark { width: 34px; height: 28px; overflow: visible; }
.ab-mark-grey { fill: #9a9a9a; }
.ab-mark-red { fill: var(--ab-red); }
.ab-wordmark__text { display: flex; flex-direction: column; line-height: 1; }
.ab-wordmark__text strong { font-size: 22px; font-weight: 700; letter-spacing: .06em; }
.ab-wordmark__text em { font-style: normal; font-size: 11px; letter-spacing: .14em; text-transform: uppercase; opacity: .8; margin-top: 3px; border-top: 1px solid currentColor; padding-top: 3px; }
.ab-cta-scan { position: relative; overflow: hidden; display: inline-flex; align-items: center; min-height: 44px; padding: 0 20px; background: var(--ab-red); color: var(--ab-white); font-weight: 600; font-size: 15px; text-decoration: none; }
.ab-cta-scan__beam { position: absolute; left: 0; right: 0; height: 2px; top: 0; background: var(--ab-white); opacity: .55; transform: translateY(-4px); transition: transform .6s ease; }
.ab-cta-scan:hover .ab-cta-scan__beam { transform: translateY(46px); }
@media (max-width: 860px) { .ab-header__nav { display: none; } .ab-cta-scan { margin-left: auto; } }

/* services: sticky head + ruled rows */
.ab-services { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(32px, 6vw, 96px); padding: clamp(72px, 10vw, 140px) clamp(16px, 5vw, 72px); max-width: 1320px; margin: 0 auto; }
.ab-services__head { position: sticky; top: 110px; align-self: start; }
.ab-services__list { list-style: none; margin: 0; padding: 0; border-top: 2px solid var(--ab-ink); }
.ab-service-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); gap: 8px 28px; padding: 26px 0; border-bottom: 1px solid var(--ab-rule); transition: padding-left .3s ease; }
.ab-service-row:hover { padding-left: 12px; }
.ab-service-row p { margin: 0; color: var(--ab-text); line-height: 1.55; }
.ab-service-row .ab-mono { grid-column: 2; }
@media (max-width: 860px) { .ab-services { grid-template-columns: 1fr; } .ab-services__head { position: static; } .ab-service-row { grid-template-columns: 1fr; } .ab-service-row .ab-mono { grid-column: 1; } }

/* LOD strip */
.ab-lod { background: var(--ab-night); color: var(--ab-paper); padding: clamp(72px, 10vw, 140px) clamp(16px, 5vw, 72px); }
.ab-lod__head { max-width: 1320px; margin: 0 auto 48px; }
.ab-lod .ab-label { color: var(--ab-red-light); }
.ab-lod .ab-lead { color: var(--ab-mute-dark); }
.ab-lod__strip { max-width: 1320px; margin: 0 auto; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 14px; }
.ab-lod__item { all: unset; box-sizing: border-box; cursor: pointer; display: flex; flex-direction: column; gap: 8px; padding: 0 0 18px; border-top: 2px solid var(--ab-line); transition: border-color .25s, transform .25s; }
.ab-lod__item img { width: 100%; aspect-ratio: 278 / 672; max-height: 420px; object-fit: cover; display: block; filter: grayscale(.4) brightness(.8); transition: filter .3s; margin-bottom: 8px; }
.ab-lod__item[aria-pressed="true"] { border-top-color: var(--ab-red-light); transform: translateY(-6px); }
.ab-lod__item[aria-pressed="true"] img { filter: none; }
.ab-lod__num { font-family: var(--ab-mono); font-size: 14px; color: var(--ab-red-light); letter-spacing: .08em; }
.ab-lod__title { font-size: 19px; font-weight: 600; }
.ab-lod__desc { font-size: 15px; line-height: 1.5; color: var(--ab-mute-dark); }
.ab-lod__scale { max-width: 1320px; margin: 32px auto 0; display: flex; align-items: center; gap: 16px; font-family: var(--ab-mono); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--ab-mute-dark); }
.ab-lod__scale i { flex: 1; height: 2px; background: linear-gradient(90deg, var(--ab-line), var(--ab-red-light)); }
@media (max-width: 860px) { .ab-lod__strip { grid-template-columns: repeat(5, 72%); overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 8px; } .ab-lod__item { scroll-snap-align: start; } }

/* process: image + numbered steps */
.ab-process { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); min-height: 640px; background: var(--ab-paper-2); }
.ab-process__media { margin: 0; position: relative; min-height: 360px; }
.ab-process__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.ab-process__body { padding: clamp(56px, 8vw, 110px) clamp(16px, 5vw, 72px); }
.ab-process__steps { list-style: none; padding: 0; margin: 36px 0 0; display: flex; flex-direction: column; gap: 26px; }
.ab-process__steps li { display: grid; grid-template-columns: 48px minmax(0, 1fr); gap: 14px; }
.ab-process__steps p { margin: 6px 0 0; color: var(--ab-text); line-height: 1.55; }
.ab-step-no { color: var(--ab-red); font-size: 20px; }
@media (max-width: 860px) { .ab-process { grid-template-columns: 1fr; } }

/* audience: image band + 4 columns */
.ab-audience { padding: 0 0 clamp(72px, 10vw, 130px); }
.ab-audience__band { position: relative; height: clamp(320px, 42vw, 520px); overflow: hidden; }
.ab-audience__band img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ab-audience__band p { position: absolute; left: clamp(16px, 5vw, 72px); bottom: clamp(20px, 4vw, 48px); max-width: 30ch; margin: 0; padding: 22px 26px; background: var(--ab-ink); color: var(--ab-paper); font-size: clamp(19px, 2.2vw, 26px); line-height: 1.35; font-weight: 500; }
.ab-audience__grid { max-width: 1320px; margin: 56px auto 0; padding: 0 clamp(16px, 5vw, 72px); display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 32px; }
.ab-audience__item { border-left: 2px solid var(--ab-red); padding-left: 18px; }
.ab-audience__item p { margin: 8px 0 0; color: var(--ab-text); line-height: 1.55; }

/* coverage */
.ab-coverage { position: relative; overflow: hidden; background: var(--ab-night); color: var(--ab-paper); }
.ab-coverage__bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: .35; }
.ab-coverage__body { position: relative; max-width: 1320px; margin: 0 auto; padding: clamp(80px, 11vw, 150px) clamp(16px, 5vw, 72px); }
.ab-coverage .ab-label { color: var(--ab-red-light); }
.ab-coverage .ab-lead { color: var(--ab-paper); opacity: .85; }
.ab-coverage__list { list-style: none; padding: 0; margin: 36px 0 0; display: flex; flex-wrap: wrap; gap: 10px; }
.ab-coverage__list li { border: 1px solid rgba(245,244,241,.4); padding: 10px 14px; font-size: 15px; background: rgba(16,19,22,.55); }

/* faq */
.ab-faq { max-width: 1100px; margin: 0 auto; padding: clamp(72px, 10vw, 130px) clamp(16px, 5vw, 72px); display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); gap: 48px; }
.ab-faq__list details { border-top: 1px solid var(--ab-rule); padding: 20px 0; }
.ab-faq__list details:last-child { border-bottom: 1px solid var(--ab-rule); }
.ab-faq__list summary { cursor: pointer; font-size: 19px; font-weight: 600; list-style: none; display: flex; justify-content: space-between; gap: 16px; }
.ab-faq__list summary::after { content: "+"; font-family: var(--ab-mono); color: var(--ab-red); }
.ab-faq__list details[open] summary::after { content: "−"; }
.ab-faq__list p { margin: 12px 0 0; color: var(--ab-text); line-height: 1.6; }
@media (max-width: 860px) { .ab-faq { grid-template-columns: 1fr; } }

/* inquiry */
.ab-inquiry { background: var(--ab-ink); color: var(--ab-paper); padding: clamp(72px, 10vw, 130px) clamp(16px, 5vw, 72px); display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(32px, 6vw, 88px); }
.ab-inquiry .ab-label { color: var(--ab-red-light); }
.ab-inquiry .ab-lead { color: var(--ab-mute-dark); }
.ab-contact { margin: 36px 0 0; display: flex; flex-direction: column; gap: 14px; }
.ab-contact dt { font-family: var(--ab-mono); font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--ab-mute-dark); }
.ab-contact dd { margin: 4px 0 0; font-size: 18px; user-select: all; }
.ab-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; align-content: start; }
.ab-field { display: flex; flex-direction: column; gap: 8px; font-size: 14px; color: var(--ab-mute-dark); border: 0; padding: 0; margin: 0; min-width: 0; }
.ab-field--wide { grid-column: 1 / -1; }
.ab-field legend { margin-bottom: 8px; }
.ab-form input, .ab-form select, .ab-form textarea { font: inherit; font-size: 16px; color: var(--ab-paper); background: var(--ab-graphite); border: 1px solid var(--ab-line); padding: 12px 14px; min-height: 48px; box-sizing: border-box; width: 100%; }
.ab-checks { display: flex; flex-wrap: wrap; gap: 10px 22px; }
.ab-check { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; color: var(--ab-paper); }
.ab-check input { width: 20px; height: 20px; min-height: 0; accent-color: var(--ab-red); }
.ab-hp { position: absolute; left: -9999px; width: 1px; height: 1px; }
.ab-form__foot { grid-column: 1 / -1; display: flex; flex-direction: column; gap: 12px; }
.ab-cta-submit { align-self: flex-start; display: inline-flex; align-items: center; gap: 14px; min-height: 56px; padding: 0 28px; border: 0; cursor: pointer; background: var(--ab-red); color: var(--ab-white); font: inherit; font-weight: 600; font-size: 17px; transition: gap .25s ease, background .25s; }
.ab-cta-submit svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 2; }
.ab-cta-submit:hover { gap: 22px; background: var(--ab-red-light); }
.ab-cta-submit:disabled { opacity: .6; cursor: wait; }
.ab-form__note { margin: 0; font-size: 13px; color: var(--ab-mute-dark); }
.ab-form__note a { color: var(--ab-paper); }
.ab-form__status { margin: 0; min-height: 1.4em; color: var(--ab-paper); }
@media (max-width: 860px) { .ab-inquiry { grid-template-columns: 1fr; } .ab-form { grid-template-columns: 1fr; } }

/* footer */
.ab-footer { background: var(--ab-night); color: var(--ab-mute-dark); padding: 28px clamp(16px, 5vw, 72px); display: flex; flex-wrap: wrap; gap: 18px 32px; align-items: center; justify-content: space-between; font-size: 14px; }
.ab-footer div { display: flex; flex-direction: column; gap: 4px; }
.ab-footer strong { color: var(--ab-paper); }
.ab-footer nav { display: flex; gap: 22px; }
.ab-footer a { color: var(--ab-paper); }

/* legal */
.ab-legal { max-width: 780px; margin: 0 auto; padding: 140px clamp(16px, 5vw, 32px) 96px; }
.ab-legal h1 { font-size: clamp(34px, 5vw, 52px); margin: 0 0 24px; }
.ab-legal h2 { font-size: 21px; margin: 32px 0 8px; }
.ab-legal p { line-height: 1.65; color: var(--ab-text); margin: 0 0 10px; }
.ab-site .ab-legal ~ .ab-footer, .ab-legal { }
.ab-legal-page .ab-header { background: var(--ab-ink); }

@media (prefers-reduced-motion: reduce) {
  .ab-cta-scan__beam, .ab-service-row, .ab-lod__item, .ab-lod__item img, .ab-cta-submit { transition: none; }
}

/* consent banner + social */
.ab-consent { position: fixed; z-index: 60; left: clamp(12px, 3vw, 32px); right: clamp(12px, 3vw, 32px); bottom: calc(clamp(12px, 3vw, 28px) + env(safe-area-inset-bottom, 0px)); max-width: 880px; margin: 0 auto; display: flex; flex-wrap: wrap; gap: 18px 28px; align-items: center; padding: 20px 22px; background: var(--ab-ink); color: var(--ab-paper); border-top: 3px solid var(--ab-red); box-shadow: 0 18px 48px rgba(0,0,0,.35); font-family: var(--ab-sans); }
.ab-consent__text { flex: 1 1 360px; min-width: 0; }
.ab-consent__text p { margin: 0; font-size: 14px; line-height: 1.55; color: var(--ab-mute-dark); }
.ab-consent__text a { color: var(--ab-paper); }
.ab-consent .ab-consent__title { color: var(--ab-paper); font-weight: 600; font-size: 16px; margin-bottom: 6px; }
.ab-consent__actions { display: flex; gap: 10px; flex-wrap: wrap; }
.ab-consent__min, .ab-consent__all { font: inherit; font-size: 15px; font-weight: 600; min-height: 44px; padding: 0 18px; cursor: pointer; }
.ab-consent__min { background: transparent; color: var(--ab-paper); border: 1px solid var(--ab-line); }
.ab-consent__all { background: var(--ab-red); color: var(--ab-white); border: 0; }
.ab-footer__link-btn { font: inherit; background: none; border: 0; padding: 0; color: var(--ab-paper); text-decoration: underline; cursor: pointer; }
.ab-footer__social { display: inline-flex; align-items: center; gap: 6px; }
.ab-footer__social svg { width: 16px; height: 16px; fill: currentColor; }
.ab-footer nav { flex-wrap: wrap; align-items: center; }
.ab-contact__link { color: var(--ab-paper); }
.ab-lang{display:flex;gap:2px;font-family:var(--ab-mono);font-size:13px}
.ab-lang a{color:var(--ab-paper);text-decoration:none;padding:10px 8px;opacity:.6;min-height:44px;display:inline-flex;align-items:center}
.ab-lang a[aria-current="page"]{opacity:1;border-bottom:2px solid var(--ab-red-light)}
@media (max-width:860px){.ab-lang{margin-left:auto}.ab-cta-scan{margin-left:8px}}
/* header v2: centered menu, larger logo */
.ab-header{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;padding-top:16px;padding-bottom:16px}
.ab-header__home{justify-self:start}
.ab-header__nav{margin-left:0;justify-self:center;gap:34px;font-size:16px}
.ab-header__end{justify-self:end;display:flex;align-items:center;gap:14px}
.ab-wordmark__mark{width:48px;height:40px}
.ab-wordmark__text strong{font-size:30px}
.ab-wordmark__text em{font-size:12.5px;margin-top:4px;padding-top:4px}
@media (max-width:860px){.ab-header{grid-template-columns:auto 1fr;gap:12px}.ab-header__end{gap:6px}.ab-wordmark__mark{width:38px;height:32px}.ab-wordmark__text strong{font-size:24px}.ab-wordmark__text em{font-size:10.5px}.ab-cta-scan{padding:0 14px;font-size:14px}}
@media (max-width:420px){.ab-cta-scan{display:none}}

/* reference gallery */
.ab-ref{background:var(--ab-night);color:var(--ab-paper);padding:clamp(72px,10vw,140px) clamp(16px,5vw,72px);border-bottom:1px solid var(--ab-line)}
.ab-ref__head{max-width:1320px;margin:0 auto 40px}
.ab-ref .ab-label{color:var(--ab-red-light)}
.ab-ref .ab-lead{color:var(--ab-mute-dark)}
.ab-ref__grid{max-width:1320px;margin:0 auto;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.ab-ref__fig{margin:0;overflow:hidden;aspect-ratio:16/10;background:var(--ab-graphite)}
.ab-ref__fig img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s ease}
.ab-ref__fig:hover img{transform:scale(1.04)}
.ab-ref__fig--lead{grid-column:span 2;grid-row:span 2;aspect-ratio:auto}
@media (max-width:860px){.ab-ref__grid{grid-template-columns:1fr 1fr}.ab-ref__fig--lead{grid-column:span 2;grid-row:auto;aspect-ratio:16/10}}
@media (prefers-reduced-motion:reduce){.ab-ref__fig img{transition:none}}

/* ===== Motion polish (Emil Kowalski design-engineering principles) ===== */
:root{--ease-out:cubic-bezier(.23,1,.32,1);--ease-in-out:cubic-bezier(.77,0,.175,1)}
/* nav: colour/opacity change uses plain ease */
.ab-header__nav a{transition:opacity 150ms ease}
/* press feedback on every pressable element */
.ab-cta-scan,.ab-cta-submit,.ab-consent__min,.ab-consent__all,.ab-lang a,.ab-lod__item,.ab-footer__link-btn{transition:transform 160ms var(--ease-out),background-color 200ms ease,opacity 150ms ease}
.ab-cta-scan:active,.ab-cta-submit:active,.ab-consent__min:active,.ab-consent__all:active,.ab-lod__item:active{transform:scale(.97)}
.ab-cta-scan__beam{transition:transform 600ms var(--ease-in-out)}
/* submit arrow moves with transform instead of animating layout (gap) */
.ab-cta-submit{gap:14px}
.ab-cta-submit svg{transition:transform 200ms var(--ease-out)}
.ab-cta-submit:hover{gap:14px}
/* service rows: transform instead of padding (no layout work) */
.ab-service-row{transition:none}
.ab-service-row > *{transition:transform 250ms var(--ease-out)}
.ab-service-row:hover{padding-left:0}
/* LOD strip: the selected item is state, so it may animate; hover effects only on real pointers */
.ab-lod__item{transition:transform 250ms var(--ease-out),border-color 200ms ease}
.ab-lod__item img{transition:filter 250ms ease}
.ab-ref__fig img{transition:transform 500ms var(--ease-out)}
.ab-ref__fig:hover img{transform:none}
@media (hover:hover) and (pointer:fine){
  .ab-cta-submit:hover svg{transform:translateX(6px)}
  .ab-service-row:hover > *{transform:translateX(10px)}
  .ab-ref__fig:hover img{transform:scale(1.03)}
  .ab-cta-scan:hover .ab-cta-scan__beam{transform:translateY(46px)}
}
@media (hover:none){.ab-cta-scan:hover .ab-cta-scan__beam{transform:translateY(-4px)}}
/* FAQ: answer eases in instead of popping */
.ab-faq__list details[open] p{animation:ab-in 220ms var(--ease-out)}
.ab-faq__list summary::after{transition:transform 200ms var(--ease-out)}
/* consent banner enters from below, never from nothing */
.ab-consent:not([hidden]){animation:ab-up 320ms var(--ease-out)}
/* form status message */
.ab-form__status:not(:empty){animation:ab-in 220ms var(--ease-out)}
@keyframes ab-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@keyframes ab-up{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
/* first-visit hero: short stagger (rare, so a little delight is fine) */
.ab-js .ab-film__copy > *{animation:ab-in 500ms var(--ease-out) both}
.ab-js .ab-film__copy > *:nth-child(2){animation-delay:60ms}
.ab-js .ab-film__copy > *:nth-child(3){animation-delay:120ms}
.ab-js .ab-film__copy > *:nth-child(4){animation-delay:180ms}
/* reference images reveal with clip-path once, when scrolled into view */
.ab-js .ab-ref__fig{clip-path:inset(0 0 100% 0);transition:clip-path 900ms var(--ease-in-out)}
.ab-js .ab-ref__fig.is-in{clip-path:inset(0 0 0 0)}
.ab-js .ab-ref__fig:nth-child(2){transition-delay:60ms}.ab-js .ab-ref__fig:nth-child(3){transition-delay:120ms}
.ab-js .ab-ref__fig:nth-child(4){transition-delay:60ms}.ab-js .ab-ref__fig:nth-child(5){transition-delay:120ms}.ab-js .ab-ref__fig:nth-child(6){transition-delay:180ms}
/* reduced motion: keep gentle fades, drop movement */
@media (prefers-reduced-motion:reduce){
  .ab-cta-scan:active,.ab-cta-submit:active,.ab-consent__min:active,.ab-consent__all:active,.ab-lod__item:active{transform:none}
  .ab-service-row > *,.ab-cta-submit svg,.ab-ref__fig img,.ab-cta-scan__beam{transition:none;transform:none!important}
  .ab-js .ab-film__copy > *,.ab-faq__list details[open] p,.ab-consent:not([hidden]),.ab-form__status:not(:empty){animation:ab-fade 200ms ease both}
  .ab-js .ab-ref__fig{clip-path:none;transition:none}
}
@keyframes ab-fade{from{opacity:0}to{opacity:1}}
.ab-film__progress span{width:100%!important;transform:scaleX(0);transform-origin:left center}

/* ===== Impeccable + Taste refinement pass ===== */
/* browser surfaces carry the brand */
::selection{background:#BF1C2E;color:#fff}
html{scrollbar-color:#3a4148 #101316;accent-color:#BF1C2E}
input,textarea{caret-color:#EF4B57}
a{text-underline-offset:.2em;text-decoration-thickness:1px}
:focus-visible{outline:2px solid #EF4B57;outline-offset:3px}
/* skip link */
.ab-skip{position:fixed;left:16px;top:-60px;z-index:100;background:#BF1C2E;color:#fff;padding:12px 16px;font-weight:600;text-decoration:none;transition:top 160ms cubic-bezier(.23,1,.32,1)}
.ab-skip:focus{top:calc(12px + env(safe-area-inset-top,0px))}
/* type: tighter display tracking, balanced/pretty wrapping, readable measure */
.ab-site h2{letter-spacing:-.025em;line-height:1.06}
.ab-film__copy h1{letter-spacing:-.035em}
.ab-site p{text-wrap:pretty}
.ab-lead{max-width:62ch;line-height:1.6}
.ab-site h3{letter-spacing:-.01em}
/* headings now stand alone: give the space above them, not a label */
.ab-services__head h2,.ab-lod__head h2,.ab-process__body h2,.ab-faq__head h2,.ab-inquiry__intro h2,.ab-ref__head h2,.ab-coverage__body h2{margin-top:0}
.ab-process__steps{margin-top:40px}
/* no coloured side-stripe: audience groups use a hairline and proximity */
.ab-audience__item{border-left:0;padding-left:0;border-top:1px solid var(--ab-rule);padding-top:18px}
.ab-audience__grid{gap:40px 48px}
/* tags are data, keep mono but quieter */
.ab-film__tags li{letter-spacing:.02em}
/* bottom padding optically larger than top on long sections */
.ab-services,.ab-faq{padding-bottom:clamp(88px,12vw,160px)}
/* form: inline validation once the visitor has interacted */
.ab-form input:user-invalid,.ab-form textarea:user-invalid{border-color:#EF4B57}
.ab-form input:user-invalid + .ab-field__err{display:block}
/* v8: contrast on dark surfaces + min text size */
.ab-film .ab-mono,.ab-ref .ab-mono,.ab-lod .ab-mono,.ab-inquiry .ab-mono,.ab-footer .ab-mono,.ab-film .ab-lead,.ab-film__hint,.ab-header .ab-mono{color:var(--ab-mute-dark)}
@media (max-width:860px){.ab-wordmark__text em{font-size:11px}}
/* fix: hidden-Attribut immer respektieren (Cookie-Banner) */
[hidden]{display:none!important}
