/* Simple CMS – Frontend
   Keine Frameworks, keine Webfonts von Drittanbietern. */

*,*::before,*::after{box-sizing:border-box}

html{-webkit-text-size-adjust:100%}

body{
  margin:0;
  min-height:100vh;
  background:var(--site-bg,#1b1b2f);
  background-attachment:fixed;
  color:var(--site-fg,#fff);
  font-family:var(--font-body,system-ui,sans-serif);
  font-size:17px;
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}

img,video{max-width:100%;height:auto;display:block}

a{color:inherit}

h1,h2,h3,h4{font-family:var(--font-heading,inherit);line-height:1.2;margin:0 0 .5em;font-weight:600}

/* ------------------------------------------------------------------ Header */

.site-head{padding:clamp(1.5rem,5vw,3.5rem) 1.25rem 1rem}
.site-head__inner{max-width:1280px;margin:0 auto}
.logo{display:inline-block;text-decoration:none}
.logo--text{font-family:var(--font-heading,inherit);font-size:clamp(1.5rem,4vw,2.4rem);font-weight:600;letter-spacing:.01em}
.logo img{max-width:100%}
.site-head__sub{margin:.75rem 0 0;color:var(--site-fg-muted);font-size:1rem}

/* Variante A: alles mittig. */
.site-head--center{text-align:center}
.site-head--center .logo img{margin:0 auto}
.site-head--center .site-head__aside{
  display:flex;justify-content:center;margin-top:1.1rem;
}

/* Variante B: Logo links, Sprache und Kontakt rechts. */
.site-head--split .site-head__inner{
  display:flex;align-items:center;justify-content:space-between;
  gap:1.5rem;flex-wrap:wrap;
}
.site-head--split .site-head__sub{margin-top:.35rem;font-size:.92rem}
.site-head--split .site-head__aside{
  display:flex;align-items:center;gap:1rem;flex-wrap:wrap;
}
.site-head--split .logo--text{font-size:clamp(1.2rem,2.6vw,1.7rem)}

.contact-btn{
  display:inline-block;text-decoration:none;
  font-size:.92rem;line-height:1;
  padding:.7rem 1.25rem;border-radius:999px;
  border:1px solid var(--site-fg-border);
  transition:background .18s ease,border-color .18s ease;
}
.contact-btn:hover{background:var(--site-fg-soft);border-color:var(--site-fg)}

/* --------------------------------------------------------- Sprachauswahl */

.langswitch{display:flex;align-items:center;gap:.15rem;font-size:.85rem}
.langswitch__item{
  text-decoration:none;color:var(--site-fg-muted);
  padding:.4rem .55rem;border-radius:6px;
  transition:color .18s ease,background .18s ease;
}
.langswitch__item:hover{color:var(--site-fg);background:var(--site-fg-soft)}
.langswitch__item.is-active{color:var(--site-fg);font-weight:600}
.langswitch__item + .langswitch__item{
  border-left:1px solid var(--site-fg-border);border-radius:0 6px 6px 0;
}

/* ------------------------------------------------------------------ Filter */

.filter{
  display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center;
  padding:.5rem 1.25rem 0;max-width:1280px;margin:0 auto;
}
.filter__btn{
  appearance:none;border:1px solid var(--site-fg-border);background:transparent;
  color:inherit;font:inherit;font-size:.875rem;line-height:1;
  padding:.55rem 1rem;border-radius:999px;cursor:pointer;
  transition:background .18s ease,border-color .18s ease;
}
.filter__btn:hover{background:var(--site-fg-soft)}
/* Wichtig: --site-bg kann ein Verlauf sein und ist als color-Wert ungültig.
   Deshalb die Volltonvariante verwenden. */
.filter__btn.is-active{background:var(--site-fg);color:var(--site-bg-solid,#111);border-color:transparent}

/* -------------------------------------------------------------------- Grid */

.main{max-width:1280px;margin:0 auto;padding:1.5rem 1.25rem 3rem}

/* Ohne JS bleibt es ein gewöhnliches Grid mit natürlichen Höhen. */
.grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(260px,1fr));
  gap:var(--gutter,20px);
}

/* Masonry: JS positioniert die Kacheln nach dem Prinzip "kürzeste Spalte".
   Aktiv wird das erst, wenn JS die Klasse setzt. */
.grid--masonry{align-items:start}
.grid--masonry.is-masonry{display:block;position:relative}
.grid--masonry.is-masonry > .teaser{position:absolute;top:0;left:0;margin:0}

/* Gleich hohe Karten: eine Rasterzeile pro Reihe, Kacheln füllen sie aus. */
.grid--equal{grid-auto-rows:1fr;align-items:stretch}
.grid--equal .teaser{height:100%}
.grid--equal .teaser__inner{height:100%}

.empty{text-align:center;color:var(--site-fg-muted);padding:3rem 0}

/* ------------------------------------------------------------------ Teaser */

.teaser{
  background:var(--bg);
  color:var(--fg);
  border-radius:var(--tile-radius,14px);
  overflow:hidden;
  cursor:pointer;
  position:relative;
  transition:transform .22s ease,box-shadow .22s ease;
  box-shadow:0 1px 2px rgba(0,0,0,.12);
}
.teaser:hover,.teaser:focus-visible{transform:translateY(-3px);box-shadow:0 12px 28px rgba(0,0,0,.24)}
.teaser:focus-visible{outline:2px solid var(--site-fg);outline-offset:3px}

.teaser__inner{display:flex;flex-direction:column}

/* Kachelgroesse wirkt auf Hoehe UND Breite: grosse Kacheln nehmen zwei Spalten. */
.teaser--s .teaser__inner{min-height:170px}
.teaser--m .teaser__inner{min-height:250px}
.teaser--l .teaser__inner{min-height:340px}

/* Im Grid-Fallback (ohne JS) belegt "gross" ebenfalls zwei Spalten */
@media (min-width:900px){
  .grid:not(.is-masonry) .teaser--l{grid-column:span 2}
}

.teaser__thumb{overflow:hidden;background:var(--fg-softer)}
.teaser__thumb img{width:100%;aspect-ratio:16/10;object-fit:cover}
.teaser--s .teaser__thumb img{aspect-ratio:4/3}
.teaser--l .teaser__thumb img{aspect-ratio:16/9}

.teaser__body{
  padding:var(--tile-pad,20px);
  display:flex;flex-direction:column;
  gap:var(--tile-gap,8px);
  flex:1;
  /* Ausrichtung gilt für Textfluss und Flex-Achse zugleich, sonst rutscht
     die Badge nicht mit dem Titel mit. */
  text-align:var(--tile-align,left);
  align-items:var(--tile-align-items,flex-start);
}
.teaser--l .teaser__title{font-size:calc(var(--tile-title-size,1.2rem) * 1.2)}
.teaser__title{
  font-size:var(--tile-title-size,1.2rem);
  font-weight:var(--tile-title-weight,600);
  letter-spacing:var(--tile-title-tracking,0);
  margin:0;
}
.teaser__text{margin:0;font-size:var(--tile-text-size,.95rem);color:var(--fg-muted)}
/* Mosaik-Cover einer Serie: zeigt, dass mehr da ist, statt es anzudeuten.
   Bei zwei Beiträgen zwei gleiche Spalten, ab drei eine grosse und zwei kleine. */
.teaser__mosaic{display:grid;gap:3px;background:none}
.teaser__mosaic.m-2{grid-template-columns:1fr 1fr;grid-template-rows:1fr}
.teaser__mosaic.m-3{grid-template-columns:1.85fr 1fr;grid-template-rows:1fr 1fr}
.teaser__mosaic.m-3 > *:first-child{grid-row:1 / 3}
.teaser__mosaic > *{width:100%;height:100%;object-fit:cover;display:block;min-height:0}
.teaser--m .teaser__mosaic{aspect-ratio:16/10}
.teaser--s .teaser__mosaic{aspect-ratio:4/3}
.teaser--l .teaser__mosaic{aspect-ratio:16/9}
.teaser__mosaic img{aspect-ratio:auto;height:100%}

/* Die Zahl sitzt als volle Fläche auf der Kachel, nicht als Milchglas –
   über hellen wie dunklen Motiven soll sie gleich gut lesbar sein.
   Fläche, Ziffernfarbe und Durchmesser stehen in den Einstellungen. */
.teaser--series{position:relative}
.stack-count{
  position:absolute;right:.7rem;bottom:.7rem;z-index:2;
  display:flex;align-items:center;justify-content:center;
  min-width:var(--badge-size,34px);height:var(--badge-size,34px);
  padding:0 .34em;border-radius:999px;
  background:var(--badge-bg,#fff);color:var(--badge-fg,#14141a);
  font-size:calc(var(--badge-size,34px) * .42);font-weight:600;line-height:1;
  transition:transform .2s ease;
}
@media (hover:hover){ .teaser--series:hover .stack-count{transform:scale(1.1)} }

.badge{
  display:inline-block;
  font-size:var(--label-size,.7rem);
  text-transform:var(--label-transform,uppercase);
  letter-spacing:var(--label-tracking,.08em);
  font-weight:var(--label-weight,600);
  padding:var(--label-pad-y,5px) var(--label-pad-x,10px);
  border-radius:var(--label-radius,999px);
  background:var(--label-bg,var(--fg-soft));
  color:var(--label-fg,currentColor);
  border:1px solid var(--label-border,var(--fg-border));
  line-height:1.2;
}

.teaser[hidden]{display:none}

/* ------------------------------------------------------------ Rechtsseiten */

.legal{
  max-width:70ch;margin:0 auto;padding:1rem 0 3rem;
}
.legal__title{font-size:clamp(1.6rem,4vw,2.4rem);margin:0 0 1.5rem}
.legal__body{font-size:1rem;line-height:1.7}
.legal__body h2{font-size:1.15rem;margin:2em 0 .5em}
.legal__body p{margin:0 0 1em}
.legal__body a{text-decoration:underline;text-underline-offset:2px}
.legal__back{margin-top:2.5rem}
.legal__back a{text-decoration:none;border-bottom:1px solid var(--site-fg-border);color:var(--site-fg-muted)}
.legal__back a:hover{color:var(--site-fg)}

/* ------------------------------------------------------------------ Footer */

.site-foot{border-top:1px solid var(--site-fg-border);margin-top:2rem}
.site-foot__inner{
  max-width:1280px;margin:0 auto;padding:2rem 1.25rem 3rem;
  display:flex;flex-wrap:wrap;gap:1.5rem;justify-content:space-between;align-items:flex-start;
  font-size:.9rem;color:var(--site-fg-muted);
}
.site-foot p{margin:0 0 .15rem}
.site-foot .strong{color:var(--site-fg);font-weight:600}
.site-foot a{text-decoration:none;border-bottom:1px solid var(--site-fg-border)}
.site-foot__legal{display:flex;gap:1.25rem;flex-wrap:wrap}
.site-foot__legal a{text-decoration:none;border-bottom:1px solid var(--site-fg-border);padding-bottom:2px}
.site-foot__legal a:hover{color:var(--site-fg)}

/* --------------------------------------------------------------- Lightbox */

/* Die Bedienelemente liegen alle ausserhalb der farbigen Flaeche und folgen
   ihrer Achse: waagerecht links und rechts, senkrecht oben und unten. */
.lb{
  position:fixed;inset:0;z-index:100;
  display:flex;align-items:center;justify-content:center;
  padding:5.5rem clamp(3.5rem,7vw,5.5rem);
}
.lb[hidden]{display:none}
.lb__backdrop{position:absolute;inset:0;background:rgba(6,6,10,.74);backdrop-filter:blur(3px);animation:fade .2s ease}

.lb__panel{
  position:relative;z-index:1;
  width:100%;max-width:1120px;max-height:100%;
  background:var(--bg,#fff);color:var(--fg,#111);
  border-radius:calc(var(--tile-radius,14px) + 2px);overflow:hidden;
  box-shadow:0 30px 80px rgba(0,0,0,.45);
  animation:pop .22s ease;
  display:flex;flex-direction:column;
}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes pop{from{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:none}}

.lb__scroll{overflow-y:auto;-webkit-overflow-scrolling:touch}
/* Der Innenabstand steht als Variable, damit die Bilderleiste ihn gezielt
   wieder aufheben und fast bis zum Rand laufen kann. */
.lb__content{--doc-pad:clamp(1.5rem,4vw,var(--doc-pad-max,3.5rem));padding:var(--doc-pad)}

/* Bedienelemente liegen ausserhalb der farbigen Flaeche, deshalb feste,
   vom Seitenthema unabhaengige Farben auf dem abgedunkelten Hintergrund. */
.lb__close,.lb__nav{
  appearance:none;cursor:pointer;z-index:2;
  /* Zentrierung und Nullpolsterung gehören zu allen Knöpfen, nicht nur zu den
     Pfeilen – sonst sitzt das Zeichen in der Standardpolsterung des Buttons. */
  display:flex;align-items:center;justify-content:center;padding:0;
  background:rgba(255,255,255,.12);
  border:1px solid rgba(255,255,255,.26);
  color:#fff;line-height:1;
  transition:background .16s ease,border-color .16s ease;
}
.lb__close:hover,.lb__nav:hover{background:rgba(255,255,255,.24);border-color:rgba(255,255,255,.45)}
.lb__close:focus-visible,.lb__nav:focus-visible{outline:2px solid #fff;outline-offset:2px}

.lb__close{
  position:absolute;top:clamp(.9rem,2.5vw,1.6rem);right:clamp(.9rem,2.5vw,1.75rem);
  width:44px;height:44px;border-radius:50%;
}

/* Die Zeichen sind Pfade, keine Schriftzeichen – dadurch sitzen sie in jeder
   Schrift und in jeder Grösse exakt in der Mitte ihrer Fläche. */
/* Das Bild fängt keine Klicks ab – die gehören dem Knopf. */
.ico{display:block;width:44%;height:44%;pointer-events:none;transition:transform .22s ease}
.lb__close .ico{width:38%;height:38%}

.lb__nav{position:absolute}
.lb__nav:disabled{opacity:.22;cursor:default;box-shadow:none}
/* Die unsichtbare Trefffläche ist immer mindestens fingergross */
.lb__nav::after{content:"";position:absolute;inset:-8px}

/* Erste Achse: waagerecht durch die Kacheln. Kreis. */
.lb__nav--prev,.lb__nav--next{
  top:50%;transform:translateY(-50%);
  width:clamp(2.75rem,4.4vw,3.4rem);height:clamp(2.75rem,4.4vw,3.4rem);
  border-radius:50%;
}
.lb__nav--prev{left:clamp(.4rem,1.8vw,1.4rem)}
.lb__nav--next{right:clamp(.4rem,1.8vw,1.4rem)}
.lb__nav--prev .ico{transform:rotate(180deg)}
.lb__nav--prev:hover,.lb__nav--next:hover{transform:translateY(-50%) scale(1.08)}
.lb__nav--prev:active,.lb__nav--next:active{transform:translateY(-50%) scale(.96)}
/* Beim Zeigen läuft das Zeichen in seine Richtung voraus */
.lb__nav--prev:hover .ico{transform:rotate(180deg) translateX(2px)}
.lb__nav--next:hover .ico{transform:translateX(2px)}
.lb.is-single .lb__nav--prev,
.lb.is-single .lb__nav--next{display:none}
/* Damit sich Leiter und Blätterkreis nicht ins Gehege kommen */
.lb.is-series .lb__nav--next{right:clamp(1.7rem,3.8vw,2.9rem)}

/* Zweite Achse: senkrecht in die Tiefe einer Serie – oberhalb und unterhalb
   des Inhalts. Hochkant-Pille statt Kreis: schon aus dem Augenwinkel eine
   andere Gattung, damit die beiden Achsen nicht verwechselt werden. */
.lb__nav--up,.lb__nav--down{
  left:50%;transform:translateX(-50%);
  display:none;
  width:clamp(2.5rem,3.8vw,3rem);height:clamp(3.2rem,5.2vw,4.2rem);
  border-radius:999px;
  background:rgba(255,255,255,.14);border-color:rgba(255,255,255,.3);
}
.lb.is-series .lb__nav--up,
.lb.is-series .lb__nav--down{display:flex}
.lb__nav--up{top:clamp(.5rem,1.8vw,1.2rem)}
.lb__nav--down{bottom:clamp(.5rem,1.8vw,1.2rem)}
/* Dasselbe Zeichen, nur gedreht – dieselbe Geste in einer anderen Richtung. */
.lb__nav--up .ico{width:54%;height:54%;transform:rotate(-90deg)}
.lb__nav--down .ico{width:54%;height:54%;transform:rotate(90deg)}
.lb__nav--up:hover,.lb__nav--down:hover{transform:translateX(-50%) scale(1.06)}
.lb__nav--up:active,.lb__nav--down:active{transform:translateX(-50%) scale(.96)}
.lb__nav--up:hover .ico{transform:rotate(-90deg) translateX(2px)}
.lb__nav--down:hover .ico{transform:rotate(90deg) translateX(2px)}
.lb__nav--up:disabled:hover,.lb__nav--down:disabled:hover{transform:translateX(-50%)}
.lb__nav:disabled:hover .ico{transform:none}
.lb__nav--up:disabled:hover .ico{transform:rotate(-90deg)}
.lb__nav--down:disabled:hover .ico{transform:rotate(90deg)}
.lb__nav--prev:disabled:hover .ico{transform:rotate(180deg)}

@keyframes hintDown{
  0%,100%{transform:translateX(-50%) translateY(0)}
  30%{transform:translateX(-50%) translateY(7px)}
  60%{transform:translateX(-50%) translateY(0)}
}
.lb__nav--down.is-hinting{animation:hintDown 1.1s ease 2}

/* Punkt-Leiter am rechten Rand, senkrecht – damit sie ohne Erklärung zur
   senkrechten Achse gehört. */
.lb__series{
  position:absolute;right:clamp(.35rem,1.1vw,.8rem);top:50%;
  transform:translateY(-50%);z-index:2;
  display:none;
}
.lb.is-series .lb__series{display:block}
.lb__rail{
  display:flex;flex-direction:column;align-items:center;gap:6px;
  padding:8px 5px;border-radius:999px;
  background:rgba(12,12,16,.4);border:1px solid rgba(255,255,255,.14);
  max-height:52vh;overflow:hidden;
}
.lb__rail:empty{display:none}
.lb__dot{
  position:relative;width:4px;height:12px;padding:0;border:0;border-radius:999px;
  background:rgba(255,255,255,.32);cursor:pointer;
  transition:background .22s ease,height .22s ease;
}
/* Trefffläche grösser als das, was man sieht */
.lb__dot::after{content:"";position:absolute;inset:-5px -9px}
.lb__dot.is-active{background:#fff;height:20px}

.lb__counter{
  position:absolute;top:clamp(.9rem,2.5vw,1.6rem);left:clamp(.9rem,2.5vw,1.75rem);z-index:2;
  color:rgba(255,255,255,.82);font-size:.85rem;letter-spacing:.06em;
  padding:.5rem .85rem;border-radius:999px;
  background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);
}
.lb__counter[hidden]{display:none}

@media (max-width:820px){
  /* Auf dem Handy entscheidet die Wischrichtung, die Leiter zeigt die Position. */
  .lb__nav--prev,.lb__nav--next{display:none}
  .lb.is-series .lb__nav--up,
  .lb.is-series .lb__nav--down{display:none}
  .lb{padding:4rem .5rem 1rem}
  .lb__series{right:.25rem}
}

body.lb-open{overflow:hidden}

/* ---------------------------------------------------------- Dokumentinhalt */

.doc{position:relative}
.doc__head{margin-bottom:1.5rem}
.doc__title{
  font-size:clamp(1.6rem,4vw,var(--doc-title-size,2.4rem));
  letter-spacing:var(--tile-title-tracking,0);
  margin:.5rem 0 0;
}
.doc__head .badge{margin-bottom:.25rem}

/* Aufeinanderfolgende Blöcke: gleichmäßiger Abstand, keine Lücken bei
   leeren Feldern, weil diese serverseitig gar nicht erst gerendert werden.
   Um Bildblöcke herum ist der Abstand grösser – sonst klebt ein Bild am Text. */
.doc > * + *{margin-top:var(--doc-block-gap,2rem)}
.doc > * + .doc__figure,
.doc > * + .doc__grid,
.doc > * + .strip,
.doc > .doc__figure + *,
.doc > .doc__grid + *,
.doc > .strip + *{margin-top:var(--doc-media-gap,3.25rem)}

/* Zeilenlaenge begrenzen, damit der Text in der breiten Lightbox lesbar bleibt */
.doc__rte{font-size:1.02rem;max-width:var(--doc-measure,72ch)}
.doc__title{max-width:24ch}
.doc__rte > *:first-child{margin-top:0}
.doc__rte > *:last-child{margin-bottom:0}
.doc__rte p{margin:0 0 1em}
.doc__rte h2{font-size:1.5rem;margin:1.6em 0 .5em}
.doc__rte h3{font-size:1.25rem;margin:1.5em 0 .4em}
.doc__rte h4{font-size:1.05rem;margin:1.4em 0 .4em}
.doc__rte ul,.doc__rte ol{margin:0 0 1em;padding-left:1.35em}
.doc__rte li{margin:.25em 0}
.doc__rte a{text-decoration:underline;text-underline-offset:2px}
.doc__rte blockquote{
  margin:1.5em 0;padding:.25em 0 .25em 1.25em;
  border-left:3px solid var(--fg-border);color:var(--fg-muted);font-style:italic;
}
.doc__rte hr{border:0;border-top:1px solid var(--fg-border);margin:2em 0}

.doc__figure{margin:0}
.doc__figure img,.doc__figure video{width:100%;border-radius:var(--media-radius,10px)}
figcaption{margin-top:.5rem;font-size:.85rem;color:var(--fg-muted)}

/* Volle Breite: ausdrücklich gewählt, also ungedeckelt. */
.doc__figure--full img,.doc__figure--full video{width:100%}

/* Einzelnes Bild in den anderen Modi: in der Höhe gedeckelt und zentriert,
   sonst erschlägt es den Text darüber. */
.doc__figure--solo img,
.doc__figure--solo video{
  width:auto;max-width:100%;
  max-height:min(52vh,460px);
  margin-inline:auto;
}
.doc__figure--solo figcaption{text-align:center}

/* Bilder-Leiste laufen bis fast an den Rand der Lightbox – deutlich weiter
   als der Text, damit die Leiste als eigener Block liest. */
.strip,.doc__grid{
  margin-inline:calc(var(--doc-pad, 0px) * -1 + .9rem);
}

.strip{position:relative}
.strip__track{
  display:flex;gap:.75rem;
  overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;
  scroll-behavior:smooth;
  /* Keine Scrollleiste – bedient wird über Pfeile, Punkte und Wischen. */
  scrollbar-width:none;-ms-overflow-style:none;
}
.strip__track::-webkit-scrollbar{display:none;width:0;height:0}
.strip__track > figure{
  margin:0;flex:0 0 auto;
  width:min(62%,420px);
  scroll-snap-align:center;
}
.strip__track img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:10px}

.strip__nav{
  position:absolute;top:38%;transform:translateY(-50%);z-index:2;
  appearance:none;cursor:pointer;
  display:flex;align-items:center;justify-content:center;padding:0;
  width:42px;height:42px;border-radius:50%;
  background:var(--bg);color:var(--fg);
  border:1px solid var(--fg-border);
  box-shadow:0 4px 14px rgba(0,0,0,.18);
  transition:opacity .2s ease,background .2s ease;
}
.strip__nav:hover{background:var(--fg-soft)}
.strip__nav--prev{left:-6px}
.strip__nav--next{right:-6px}
.strip__nav--prev .ico{transform:rotate(180deg)}
.strip__nav[disabled]{opacity:.25;cursor:default;box-shadow:none}
/* Auf reinen Touchgeräten reicht Wischen. */
@media (hover:none){ .strip__nav{display:none} }

.strip__dots{
  display:flex;justify-content:center;gap:7px;
  margin-top:.9rem;
}
.strip__dots:empty{display:none}
.strip__dot{
  position:relative;width:7px;height:7px;padding:0;border:0;border-radius:999px;
  background:var(--fg-border);cursor:pointer;
  transition:background .2s ease,width .2s ease;
}
.strip__dot::after{content:"";position:absolute;inset:-7px}
.strip__dot.is-active{background:var(--fg);width:20px}

.doc__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}
.doc__grid figure{margin:0}
.doc__grid img{width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:10px}

/* ------------------------------------------------------- YouTube / Consent */

.yt{position:relative;width:100%;aspect-ratio:16/9;border-radius:10px;overflow:hidden;background:var(--fg-soft);border:1px solid var(--fg-border)}
.yt iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.yt__consent{
  position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:.85rem;
  padding:1.5rem;text-align:center;
}
.yt__text{margin:0;font-size:.9rem;max-width:46ch;color:var(--fg-muted)}
.yt__btn{
  appearance:none;border:0;border-radius:999px;cursor:pointer;
  background:var(--fg);color:var(--bg);font:inherit;font-weight:600;
  padding:.65rem 1.5rem;
}
.yt__btn:hover{opacity:.88}
.yt__remember{font-size:.78rem;color:var(--fg-muted);display:flex;align-items:center;gap:.4rem;cursor:pointer}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important;transition-duration:.001ms !important}
}


/* ================================================ Badge am oberen Rand ====
   Eine Layoutvariante, keine Farbfrage: die Badge verlässt den Textfluss und
   hängt an der Oberkante. Zusammen mit "Ecken: unten" und einem grossen
   Radius ergibt das den Halbkreis. Gesteuert über eine Klasse am body, damit
   Kachel und Lightbox dieselbe Regel teilen. */

.lbl-top-center .teaser .badge,
.lbl-top-left   .teaser .badge,
.lbl-top-right  .teaser .badge{
  position:absolute;top:0;z-index:3;margin:0;
}
.lbl-top-center .teaser .badge{left:50%;transform:translateX(-50%)}
.lbl-top-left   .teaser .badge{left:var(--tile-pad,20px)}
.lbl-top-right  .teaser .badge{right:var(--tile-pad,20px)}

/* Ohne Kachelbild braucht der Text oben Platz. Über einem Bild schwebt die
   Badge ohnehin und der Text bleibt, wo er ist. */
.lbl-top-center .teaser:not(.teaser--media) .teaser__body,
.lbl-top-left   .teaser:not(.teaser--media) .teaser__body,
.lbl-top-right  .teaser:not(.teaser--media) .teaser__body{
  padding-top:calc(var(--tile-pad,20px) + var(--label-hang,1.5rem));
}

/* In der Lightbox hängt sie an der Oberkante der farbigen Fläche. Der
   Innenabstand steht als Variable bereit, deshalb lässt er sich hier exakt
   wieder herausrechnen. */
.lbl-top-center .doc__head .badge,
.lbl-top-left   .doc__head .badge,
.lbl-top-right  .doc__head .badge{
  position:absolute;top:calc(var(--doc-pad,2rem) * -1);z-index:3;margin:0;
}
.lbl-top-center .doc__head .badge{left:50%;transform:translateX(-50%)}
.lbl-top-left   .doc__head .badge{left:0}
.lbl-top-right  .doc__head .badge{right:0}

.lbl-top-center .doc__head,
.lbl-top-left   .doc__head,
.lbl-top-right  .doc__head{padding-top:var(--label-hang,1.5rem)}
