/* ===========================================================================
   Purevirtual — Website
   Mobile first. Das Desktop-Layout des Design-Entwurfs wird ab den jeweiligen
   Breakpoints zugeschaltet; darunter läuft alles einspaltig auf dem gleichen
   16-px-Gutter-Raster.
   =========================================================================== */

/* -------------------------------------------------------------- Grundlage -- */
*{box-sizing:border-box}

html{
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  -webkit-text-size-adjust:100%;   /* kein Auto-Zoom beim Drehen in iOS Safari */
}

body{
  margin:0;
  font:var(--text-copy);
  color:var(--text-body);
  background:var(--surface-page);
  text-wrap:pretty;
  overflow-x:hidden;               /* Sicherheitsnetz gegen horizontales Scrollen */
}

h1,h2,h3{margin:0;font-weight:var(--weight-regular);letter-spacing:var(--tracking-headline)}
p,dl,dd,figure{margin:0}
address{font-style:normal}
img,svg{display:block;max-width:100%}

a{
  color:var(--text-link);
  text-decoration:none;
  transition:color var(--duration-fast) var(--ease-standard);
}
a:hover{color:var(--text-link-hover)}

:focus-visible{outline:var(--focus-ring);outline-offset:var(--focus-offset)}
::selection{background:var(--pv-silver-tree);color:var(--pv-ebony-blue)}

.pv-skip{
  position:absolute;left:var(--pv-margin);top:-100px;z-index:10;
  background:var(--pv-ebony-blue);color:var(--pv-white);
  padding:12px 20px;font:var(--text-label);letter-spacing:var(--tracking-label);
  text-transform:uppercase;
  transition:top var(--duration-fast) var(--ease-standard);
}
.pv-skip:focus{top:12px;color:var(--pv-white)}

.pv-visually-hidden{
  position:absolute;width:1px;height:1px;margin:-1px;padding:0;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0;
}

/* ------------------------------------------------------------ Sektionsbau --
   .pv-section spannt die Fläche (Hintergrundfarbe), .pv-inner hält den Inhalt
   auf dem Raster und begrenzt ihn auf --pv-shell. */
.pv-section{width:100%}
.pv-inner{
  max-width:var(--pv-shell);
  margin-inline:auto;
  padding-inline:var(--pv-margin);
}
.pv-section--dark{background:var(--surface-inverse);color:var(--text-on-dark)}
.pv-section--muted{background:var(--surface-muted)}

/* Vertikaler Rhythmus. Die Abstufungen entsprechen den Abständen des Entwurfs
   (72 / 56 / 48 px), fließend nach unten skaliert. */
.pv-section--pad{padding-block:var(--pv-section-y)}
.pv-section--padTop{padding-top:var(--pv-section-y)}
.pv-section--padTopMd{padding-top:clamp(40px, 5.4vw, 56px)}
.pv-section--padTopSm{padding-top:clamp(32px, 4.6vw, 48px)}
.pv-section--padBottom{padding-bottom:var(--pv-section-y)}
.pv-section--contact{padding-block:var(--pv-section-y) var(--space-7)}

/* Zwei dunkle Abschnitte hintereinander ergeben ein doppeltes Polster ohne
   sichtbare Kante — auf schmalen Displays wirkt das als Loch. */
@media (max-width: 899px){
  .pv-section--dark + .pv-section--dark{padding-top:clamp(32px, 5vw, 48px)}
}

/* ------------------------------------------------------------- Textstile -- */
.pv-label{
  font:var(--weight-medium) var(--size-caption)/1.2 var(--font-core);
  letter-spacing:var(--tracking-label);
  text-transform:uppercase;
  color:var(--text-muted);
}
.pv-section--dark .pv-label{color:var(--pv-silver-tree)}

.pv-display{
  font-family:var(--font-core);
  font-weight:var(--weight-light);
  font-size:clamp(38px, 6.4vw, 96px);
  line-height:var(--leading-display);
  letter-spacing:var(--tracking-display);
  color:var(--text-body);
  text-wrap:balance;
  max-width:16ch;
}
.pv-headline{
  font-family:var(--font-core);
  font-weight:var(--weight-light);
  font-size:clamp(28px, 3.8vw, 56px);
  line-height:var(--leading-headline);
  letter-spacing:var(--tracking-headline);
  text-wrap:balance;
}
.pv-headline--sm{font-size:clamp(26px, 3vw, 40px)}
.pv-lead{
  font:var(--weight-regular) var(--size-title-3)/1.5 var(--font-core);
  color:var(--text-body);
  max-width:62ch;
}
.pv-copy{
  font:var(--weight-regular) var(--size-body)/var(--leading-body) var(--font-core);
  max-width:var(--measure);
}
.pv-copy--muted{color:var(--text-muted)}
.pv-section--dark .pv-copy--muted{color:var(--text-on-dark-muted)}
.pv-data{font:var(--text-data);font-size:var(--size-body)}

/* Aufzählungen setzt die Marke als Pfeilzeilen, nicht als Bullets. */
.pv-arrowlist{
  list-style:none;margin:0;padding:0;
  display:flex;flex-direction:column;gap:10px;
  font:var(--weight-regular) var(--size-body-sm)/1.6 var(--font-core);
}
.pv-arrowlist li{display:grid;grid-template-columns:1.4em 1fr;align-items:start}
.pv-arrowlist li::before{content:"→";color:currentColor}
.pv-arrowlist--onDark{color:var(--text-on-dark-muted)}

/* Die 2-pt-Regel über jeder Überschrift (Manual 04—09). */
.pv-rule{border-top:var(--border-strong);padding-top:var(--space-4)}
.pv-rule--hair{border-top:var(--border-hairline);padding-top:var(--space-4)}
.pv-tick{height:2px;width:64px;background:var(--line-strong)}
.pv-section--dark .pv-tick{background:var(--pv-white)}

/* ---------------------------------------------------------------- Button -- */
.pv-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  min-height:52px;padding:0 24px;
  font:var(--weight-medium) var(--size-body)/1 var(--font-core);
  letter-spacing:var(--tracking-body);
  border:1px solid transparent;border-radius:var(--radius-none);
  cursor:pointer;text-align:center;
  transition:background var(--duration-fast) var(--ease-standard),
             color var(--duration-fast) var(--ease-standard),
             border-color var(--duration-fast) var(--ease-standard);
}
.pv-btn--md{min-height:44px;padding:0 20px;font-size:var(--size-body-sm)}
.pv-btn::after{content:"";width:0}
.pv-btn--arrow::after{content:"→";width:auto;font-size:1.05em;line-height:1}

.pv-btn--primary{background:var(--pv-ebony-blue);color:var(--pv-white)}
.pv-btn--primary:hover{background:var(--pv-black);color:var(--pv-white)}

.pv-btn--secondary{background:transparent;color:var(--text-body);border-color:var(--line-default)}
.pv-btn--secondary:hover{color:var(--text-body);border-color:var(--line-strong)}

.pv-btn--inverse{background:var(--pv-white);color:var(--pv-ebony-blue)}
.pv-btn--inverse:hover{background:var(--pv-silver-tree);color:var(--pv-ebony-blue)}

.pv-btn--inverseGhost{background:transparent;color:var(--pv-white);border-color:var(--line-on-dark)}
.pv-btn--inverseGhost:hover{color:var(--pv-white);border-color:var(--pv-white)}

.pv-btnrow{display:flex;flex-wrap:wrap;gap:var(--space-4)}
/* Unter 380 px füllen die Buttons die Zeile, statt umzubrechen und zu kippeln. */
@media (max-width: 379px){
  .pv-btnrow{flex-direction:column;align-items:stretch}
}

/* ---------------------------------------------------------------- Header -- */
.pv-header{
  display:flex;align-items:flex-end;justify-content:space-between;
  gap:var(--space-5);flex-wrap:wrap;
  padding-block:clamp(20px, 3vw, 32px) var(--space-4);
}
.pv-header__logo{width:clamp(108px, 16.4vw, 147px);height:auto}
/* Der Claim steht der Wortmarke gegenüber, auf deren Grundlinie. Die viewBox
   der Logo-SVG ist auf die Ink-Box beschnitten (siehe build-assets.sh), sonst
   säße die Wortmarke gegenüber dem Seitenraster um 16 px eingerückt. */
.pv-header__claim{color:var(--text-muted);padding-bottom:2px}
.pv-header__meta{
  display:flex;gap:clamp(16px, 3vw, 32px);flex-wrap:wrap;
}
.pv-header__meta a{color:var(--text-muted)}
.pv-header__meta a:hover{color:var(--text-body)}
.pv-header__meta [aria-current]{color:var(--text-body)}

/* Die Linie unter dem Header zieht sich beim Laden auf. */
.pv-underline{
  height:2px;background:var(--line-strong);
  transform-origin:left center;
  animation:pv-draw 600ms var(--ease-standard) both;
}

/* ------------------------------------------------------------------ Hero -- */
.pv-hero{
  display:grid;gap:var(--pv-gutter);
  border-bottom:var(--border-subtle);
  padding-block:clamp(40px, 6vw, 64px) clamp(48px, 7vw, 72px);
  animation:pv-rise 500ms 120ms var(--ease-standard) both;
}
.pv-hero__main{display:flex;flex-direction:column;gap:clamp(24px, 3.2vw, 40px)}
.pv-hero__aside{display:flex;flex-direction:column;min-width:0}

/* Faktenliste rechts im Hero */
.pv-facts{display:flex;flex-direction:column}
.pv-facts__item{
  display:flex;flex-direction:column;gap:6px;
  border-top:var(--border-hairline);padding:var(--space-4) 0 20px;
}
.pv-facts__item:first-child{border-top:var(--border-strong)}
.pv-facts__item:last-child{border-bottom:var(--border-hairline)}
.pv-facts__value{
  font:var(--weight-light) var(--size-title-1)/var(--leading-title) var(--font-core);
  color:var(--text-body);
}

@media (min-width: 900px){
  .pv-hero{grid-template-columns:7fr 5fr}
  .pv-hero__aside{
    border-left:var(--border-subtle);
    padding-left:var(--space-5);
    justify-content:center;
  }
}

/* ------------------------------------------------------------- Bildbänder --
   .pv-band ist ein Bild mit Bildunterschrift. Ab 720 px liegt die Unterschrift
   als dunkler Block im Bild, darunter steht sie darunter — so bleibt der Text
   auf dem Handy lesbar und das Bild unbeschnitten. */
.pv-band{position:relative;background:var(--pv-black)}
.pv-band__img{width:100%;height:100%;object-fit:cover}
/* 16:7 ist das Format der Banner-Aufnahme; die Mindesthöhe verhindert, dass
   das Band auf schmalen Displays zum Streifen wird.
   width:100% ist Pflicht, nicht Kosmetik: ohne definierte Breite überträgt der
   Browser die von max-height gekappte Höhe zurück auf die Breite — das Band
   wäre auf großen Schirmen schmaler als das Fenster. */
.pv-band__figure{
  margin:0;width:100%;
  aspect-ratio:16/7;min-height:220px;max-height:min(620px, 72vh);
}
.pv-band__figure--flat{aspect-ratio:16/9;max-height:min(420px, 50vh)}
.pv-band__caption{
  background:var(--surface-inverse);color:var(--text-on-dark);
  padding:var(--space-5) var(--pv-margin) var(--space-6);
}
.pv-band__title{
  font-family:var(--font-core);font-weight:var(--weight-light);
  font-size:clamp(22px, 3.4vw, 48px);
  line-height:var(--leading-headline);letter-spacing:var(--tracking-headline);
  text-wrap:balance;
}
.pv-band__title--sm{font-size:clamp(20px, 2.6vw, 28px)}
.pv-band__caption .pv-label{color:var(--pv-silver-tree);display:block;margin-bottom:var(--space-3)}

@media (min-width: 720px){
  .pv-band__caption{
    position:absolute;left:0;bottom:0;
    max-width:min(760px, 80%);
    padding:var(--space-6) var(--space-7);
  }
  .pv-band--flat .pv-band__caption{max-width:min(620px, 80%);padding:var(--space-5) var(--space-6)}
}

/* ---------------------------------------------------------------- Kennzahlen */
.pv-stats{
  display:grid;gap:var(--pv-gutter);
  grid-template-columns:repeat(auto-fit, minmax(150px, 1fr));
}
.pv-stat{min-width:0;border-top:var(--border-strong);padding-top:var(--space-4)}
.pv-stat__value{
  font:var(--weight-regular) clamp(36px, 4.4vw, 48px)/1.05 var(--font-technical);
  color:var(--text-body);
}
.pv-stat__value span{font-size:var(--size-title-3)}
.pv-stat__label{margin-top:var(--space-3)}

/* ----------------------------------------------------- Abschnittsköpfe ----
   Überschrift links, Abschnittsnummer rechts. Die Nummer rutscht auf schmalen
   Displays über die Überschrift, statt sie zu quetschen. */
.pv-head{
  display:flex;flex-direction:column-reverse;align-items:flex-start;
  gap:var(--space-3);
}
.pv-head--rule{border-top:var(--border-strong);padding-top:var(--space-4)}
.pv-head__no{white-space:nowrap}
@media (min-width: 720px){
  .pv-head{
    flex-direction:row;align-items:baseline;justify-content:space-between;
    gap:var(--space-5);
  }
}

/* -------------------------------------------------------------- Zwei Säulen */
.pv-pillars{display:grid;gap:var(--pv-gutter);grid-template-columns:1fr}
@media (min-width: 900px){.pv-pillars{grid-template-columns:1fr 1fr}}

.pv-pillar{
  min-width:0;display:flex;flex-direction:column;gap:var(--space-5);
  padding:clamp(24px, 3.4vw, 40px);
  background:var(--surface-muted);
}
.pv-pillar--dark{background:var(--surface-inverse);color:var(--text-on-dark)}
.pv-pillar--dark .pv-label{color:var(--pv-silver-tree)}
.pv-pillar__meta{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-4)}
.pv-pillar__count{font:var(--weight-regular) var(--size-body-sm)/1.35 var(--font-core);color:var(--text-muted)}
.pv-pillar--dark .pv-pillar__count{color:var(--pv-silver-tree)}
.pv-pillar__title{
  font-family:var(--font-core);font-weight:var(--weight-light);
  font-size:clamp(26px, 2.8vw, 40px);
  line-height:var(--leading-headline);letter-spacing:var(--tracking-headline);
}
.pv-pillar .pv-arrowlist{border-top:var(--border-hairline);padding-top:20px}
.pv-pillar--dark .pv-arrowlist{border-top-color:var(--line-on-dark)}

/* -------------------------------------------------------- Geschäftsführung */
.pv-person{display:grid;gap:var(--pv-gutter);grid-template-columns:1fr}
.pv-person__photo{
  position:relative;min-width:0;background:var(--surface-muted);
  aspect-ratio:3/4;
}
/* Ab 900 px wird das Feld auf die Höhe der Textspalte gestreckt und ist dann
   breiter als 3:4 — der Beschnitt muss oben ansetzen, sonst fällt der Kopf weg.
   Der Wert lässt bei jedem realistischen Seitenverhältnis Luft über dem Scheitel. */
.pv-person__photo img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:50% 10%;
}
.pv-person__body{
  min-width:0;display:flex;flex-direction:column;
  justify-content:space-between;gap:var(--space-5);
}
.pv-person__name{
  border-top:var(--border-strong);padding-top:var(--space-4);
  font:var(--weight-medium) var(--size-title-1)/var(--leading-title) var(--font-core);
}
.pv-person__role{font:var(--weight-regular) var(--size-body-sm)/1.4 var(--font-core);color:var(--text-muted)}
.pv-person__cv{border-top:var(--border-hairline);padding-top:var(--space-4)}
.pv-person__site{display:grid;gap:var(--pv-gutter);grid-template-columns:1fr;align-items:end}
.pv-person__site figure{margin:0;min-width:0;background:var(--surface-muted);overflow:hidden;aspect-ratio:16/9}
.pv-person__site img{width:100%;height:100%;object-fit:cover}
.pv-person__note{
  min-width:0;border-top:var(--border-hairline);padding-top:var(--space-3);
  font:var(--weight-regular) var(--size-body-sm)/1.5 var(--font-core);color:var(--text-muted);
}
@media (min-width: 560px){
  .pv-person__site{grid-template-columns:1fr 1fr}
  .pv-person__site figure{aspect-ratio:auto;height:150px}
}
@media (min-width: 900px){
  .pv-person{grid-template-columns:5fr 7fr;align-items:stretch}
  .pv-person__photo{aspect-ratio:auto;min-height:520px}
  .pv-person__body{min-height:520px}
}

/* ------------------------------------------------------------- Leistungen -- */
.pv-services{display:grid;gap:var(--pv-gutter);grid-template-columns:repeat(auto-fit, minmax(260px, 1fr))}
.pv-service{
  min-width:0;display:flex;flex-direction:column;gap:var(--space-4);
  border-top:var(--border-strong);padding-top:20px;
}
.pv-service figure{margin:0;overflow:hidden;background:var(--surface-muted);aspect-ratio:16/10}
.pv-service img{width:100%;height:100%;object-fit:cover}
.pv-service__no{font:var(--weight-regular) var(--size-body-sm)/1.35 var(--font-core);color:var(--text-muted)}
.pv-service__title{font:var(--weight-medium) var(--size-title-2)/var(--leading-title) var(--font-core)}
.pv-service p{max-width:36ch}
@media (min-width: 900px){
  .pv-service figure{aspect-ratio:auto;height:200px}
}

/* -------------------------------------------------------- Betrieb + Mosaik */
.pv-split{display:grid;gap:var(--pv-gutter);grid-template-columns:1fr;align-items:start}
.pv-split__text{min-width:0;display:flex;flex-direction:column;gap:var(--space-5)}
@media (min-width: 900px){
  .pv-split{grid-template-columns:5fr 7fr}
  .pv-split--wide{grid-template-columns:7fr 5fr}
}

.pv-mosaic{
  min-width:0;display:grid;gap:var(--pv-gutter);
  grid-template-columns:1fr 1fr;
  grid-auto-rows:minmax(120px, auto);
}
.pv-mosaic figure{margin:0;min-width:0;overflow:hidden;background:var(--surface-inverse)}
.pv-mosaic figure:first-child{grid-row:span 2}
.pv-mosaic img{width:100%;height:100%;object-fit:cover}
@media (min-width: 900px){
  .pv-mosaic{grid-template-rows:220px 220px;grid-auto-rows:220px}
}

/* --------------------------------------------------------------- Impressum */
.pv-legal{display:grid;gap:var(--pv-gutter);grid-template-columns:repeat(auto-fit, minmax(240px, 1fr))}
.pv-legal__block{
  min-width:0;border-top:var(--border-strong);padding-top:20px;
  display:flex;flex-direction:column;gap:var(--space-3);
}
.pv-legal__title{font:var(--weight-medium) var(--size-title-3)/var(--leading-title) var(--font-core)}
.pv-legal__no{font:var(--weight-regular) var(--size-body-sm)/1.35 var(--font-core);color:var(--text-muted)}

.pv-contactgrid{display:grid;gap:var(--pv-gutter);grid-template-columns:repeat(auto-fit, minmax(200px, 1fr))}
.pv-contactgrid > div{
  border-top:var(--border-hairline);padding-top:var(--space-4);
  display:flex;flex-direction:column;gap:var(--space-2);min-width:0;
  overflow-wrap:anywhere;
}

.pv-notes{display:grid;gap:var(--pv-gutter);grid-template-columns:1fr}
@media (min-width: 720px){.pv-notes{grid-template-columns:1fr 1fr}}
.pv-notes > div{
  min-width:0;border-top:var(--border-hairline);padding-top:var(--space-4);
  display:flex;flex-direction:column;gap:var(--space-3);
}

/* ----------------------------------------------------------------- Footer -- */
.pv-contact__address{
  min-width:0;display:flex;flex-direction:column;gap:var(--space-2);
  font:var(--weight-regular) var(--size-body-sm)/1.6 var(--font-core);
  color:var(--text-on-dark-muted);
  border-top:var(--border-on-dark);padding-top:var(--space-4);
}
.pv-contact__address strong{color:var(--pv-white);font-weight:var(--weight-regular)}
@media (min-width: 900px){
  .pv-contact__address{
    border-top:0;border-left:var(--border-on-dark);
    padding:0 0 0 var(--space-5);
  }
}

.pv-footer{
  display:flex;flex-wrap:wrap;gap:var(--space-4);
  justify-content:space-between;align-items:flex-end;
  margin-top:clamp(40px, 6vw, 72px);
  padding-top:var(--space-4);
  border-top:var(--border-on-dark);
  font:var(--weight-regular) var(--size-caption)/1.4 var(--font-core);
  color:var(--text-on-dark-muted);
}
.pv-footer img{width:clamp(88px, 13vw, 108px);height:auto;filter:brightness(0) invert(1)}
.pv-footer a{color:var(--text-on-dark-muted)}
.pv-footer a:hover{color:var(--pv-white)}

/* ---------------------------------------------------------------- Motion --- */
@keyframes pv-draw{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes pv-rise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;animation-iteration-count:1 !important;
    transition-duration:.01ms !important;scroll-behavior:auto !important;
  }
}

/* ------------------------------------------------------------------ Print -- */
@media print{
  .pv-skip,.pv-btnrow{display:none}
  .pv-section--dark{background:none;color:#000}
  .pv-band__caption{position:static;background:none;color:#000}
}
