/* Nachbau des Divi-Rasters fuer die Projektseiten unter /projekt/.
   Groessen, Farben und Abstaende stammen aus der urspruenglichen Seite;
   das Seitenraster selbst ist hier zu Flexbox vereinfacht.
   Wird nach style.css und vor dem Seiten-CSS geladen. */

/* Typografie wie auf den uebrigen Seiten - eine Schrift, eine Groessenskala.
   Aus dem Original stammen weiterhin Layout, Farben und Abstaende. */
.dpage {
  font-family: var(--font);
  font-size: 18px;
  line-height: 1.72;
  color: var(--body);
  font-weight: 400;
  overflow-x: hidden
}

/* clip statt hidden, wo verfuegbar - erzeugt keinen Scrollcontainer.
   Das Original loest dasselbe ueber body{overflow-x:hidden}: einzelne
   Bilder ragen bewusst ueber den Rand hinaus und werden beschnitten. */
@supports (overflow-x:clip) {
  .dpage {
    overflow-x: clip
  }
}

.dpage :is(h1, h2, h3, h4, h5, h6) {
  color: var(--ink);
  font-weight: 700;
  letter-spacing: -.015em;
  margin: 0 0 .5em;
  line-height: 1.25;
  text-wrap: balance
}

.dpage h1 {
  font-size: clamp(1.9rem, 4.2vw, 2.9rem)
}

.dpage h2 {
  font-size: clamp(1.45rem, 2.8vw, 2.05rem)
}

.dpage h3 {
  font-size: 1.25rem
}

.dpage h4 {
  font-size: 1.08rem
}

.dpage h5,
.dpage h6 {
  font-size: 1rem
}

/* Schmale Spalten eine Stufe kleiner. Divi macht das ebenso - bei rund 240 px
   Spaltenbreite braeche 18px-Text sonst nach jedem zweiten Wort um. */
.dpage :is(.c1_3, .c1_4, .c1_5, .c1_6, .c2_5) {
  font-size: 16px
}

.dpage :is(.c1_3, .c1_4, .c1_5, .c1_6, .c2_5) h2 {
  font-size: clamp(1.25rem, 2.2vw, 1.6rem)
}

.dpage :is(.c1_3, .c1_4, .c1_5, .c1_6, .c2_5) h3 {
  font-size: 1.1rem
}

.dpage :is(.c1_3, .c1_4, .c1_5, .c1_6, .c2_5) h4 {
  font-size: 1rem
}

.dpage :is(.c1_3, .c1_4, .c1_5, .c1_6, .c2_5) .et_pb_module_header {
  font-size: 1.05rem
}

/* Nur als Notbremse: ueberlange Woerter umbrechen statt ueberlaufen lassen.
   Automatische Silbentrennung waere hier zu unruhig. */
.dpage .et_pb_blurb_description,
.dpage :is(.c1_3, .c1_4, .c1_5, .c1_6, .c2_5) p {
  overflow-wrap: break-word
}

/* Divi setzt den Absatzabstand als padding-bottom, nicht als margin */
.dpage p {
  margin: 0;
  padding-bottom: 1em
}

.dpage p:last-of-type {
  padding-bottom: 0
}

.dpage a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
  transition: text-decoration-thickness .12s ease
}

.dpage a:hover,
.dpage a:focus-visible {
  text-decoration-thickness: 3px
}

.dpage ul,
.dpage ol {
  margin: 0 0 1em;
  padding-left: 1.2em
}

.dpage .et_pb_section {
  position: relative;
  background-color: #fff;
  background-position: 50%;
  background-size: cover;
  background-repeat: no-repeat;
  padding: 4% 0
}

/* background-repeat muss no-repeat sein wie bei Divi - sonst kacheln
   dekorative Zeilenhintergruende ueber den Text. */
.dpage .et_pb_row {
  width: 80%;
  max-width: 1080px;
  margin: auto;
  position: relative;
  padding: 2% 0;
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  box-sizing: border-box;
  background-size: cover;
  background-position: 50%;
  background-repeat: no-repeat
}

.dpage .et_pb_row.equal {
  align-items: stretch
}

.dpage .et_pb_column {
  position: relative;
  min-width: 0;
  box-sizing: border-box;
  background-size: cover;
  background-position: 50%;
  background-repeat: no-repeat
}

.dpage .et_pb_column:not(:last-child) {
  margin-right: var(--gut, 5.5%)
}

.dpage .et_pb_module {
  margin-bottom: var(--mb, 2.75%)
}

.dpage .et_pb_module:last-child {
  margin-bottom: 0
}

.dpage .et_pb_bg_layout_dark {
  color: #fff
}

.dpage .et_pb_text_align_left {
  text-align: left
}

.dpage .et_pb_text_align_center {
  text-align: center
}

.dpage .et_pb_text_align_right {
  text-align: right
}

.dpage .et_pb_button_alignment_left {
  text-align: left
}

.dpage .et_pb_button_alignment_center {
  text-align: center
}


/* Trennstrich-Modul (bei Divi ein "space"-Modul mit fester Hoehe;
   der untere Abstand stammt aus der Spaltenregel, nicht von hier) */
.dpage .et_pb_divider {
  position: relative;
  height: 23px
}

.dpage .et_pb_divider::before {
  content: "";
  display: block;
  width: 100%;
  border-top: 1px solid rgba(0, 0, 0, .1);
  position: absolute;
  left: 0;
  top: 0
}

/* Bild-Modul */
.dpage .et_pb_image {
  display: block;
  margin-left: auto;
  margin-right: auto;
  line-height: 0
}

.dpage .et_pb_image_wrap {
  display: inline-block;
  position: relative
}

.dpage .et_pb_image .et_pb_image_wrap {
  max-width: 100%
}

/* kein width:auto - sonst reservieren die Bildmasse keinen Platz und das
   Layout springt, waehrend verzoegert geladene Bilder eintreffen. */
.dpage .et_pb_image img {
  max-width: 100%;
  height: auto
}

/* Blurb-Modul */
/* Karten bewegen sich weich statt zu springen. Das Seiten-CSS setzt beim
   Zeigen nur die Zielwerte (Massstab, Schatten, Filter) - der Weg dorthin
   steht hier, damit alle Karten dieselbe Kurve haben. */
.dpage .et_pb_blurb {
  transition: transform .38s var(--weich), box-shadow .38s var(--weich),
    filter .38s var(--weich)
}

.dpage .et_pb_blurb .et_pb_main_blurb_image,
.dpage .et_pb_blurb .et_pb_image_wrap {
  transition: transform .38s var(--weich), box-shadow .38s var(--weich),
    filter .38s var(--weich)
}

.dpage .et_pb_blurb_content {
  max-width: 550px;
  margin: 0 auto;
  position: relative;
  text-align: center;
  word-wrap: break-word;
  width: 100%
}

.dpage .et_pb_main_blurb_image {
  display: inline-block;
  margin: 30px;
  line-height: 0;
  max-width: 100%
}

.dpage .et_pb_main_blurb_image img {
  width: auto;
  max-width: 100%;
  height: auto
}

.dpage .et_pb_blurb_position_left .et_pb_blurb_content {
  display: table;
  text-align: left
}

.dpage .et_pb_blurb_position_left .et_pb_main_blurb_image {
  width: 32px;
  display: table-cell;
  line-height: 0;
  margin-bottom: 0;
  vertical-align: top
}

/* Setzt das Original eine eigene Bildbreite, darf max-width sie nicht kappen. */
.dpage .et_pb_blurb .et_pb_image_wrap {
  max-width: none
}

.dpage .et_pb_main_blurb_image img {
  max-width: 100%
}

.dpage .et_pb_blurb_position_left .et_pb_blurb_container {
  display: table-cell;
  vertical-align: top;
  padding-left: 15px
}

/* Divis Symbolschrift wird nicht ausgeliefert; die Glyphen stehen als
   Inline-SVG im Markup und erben ueber currentColor die Farbregeln. */
.dpage .et-pb-icon {
  display: inline-block;
  line-height: 1
}

.dpage .et-pb-icon svg {
  display: block;
  width: 1em;
  height: 1em;
  fill: currentColor
}

/* Divi rendert Blurb-Titel als h4; die Ebene kann hier semantisch abweichen,
   die Groesse bleibt deshalb fest. */
.dpage .et_pb_blurb .et_pb_module_header {
  margin-bottom: .4em;
  font-size: 1.15rem
}

/* Verlinkte Karte: der Link sitzt aus zwei Gruenden in der Ueberschrift und
   nicht um die ganze Karte - verschachtelte Anker waeren ungueltiges HTML
   (mehrere Karten haben Links im Text), und Vorlese-Programme bekommen so
   den Titel als Linktext. Die Flaeche darueber macht trotzdem die ganze
   Karte anklickbar - Bezugsrahmen ist .et_pb_blurb_content, das ohnehin
   position:relative traegt. Links im Kartentext liegen darueber. */
.dpage .et_pb_blurb .et_pb_module_header a {
  color: inherit;
  text-decoration: none
}

.dpage .et_pb_blurb .et_pb_module_header a::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1
}

.dpage .et_pb_blurb .et_pb_module_header a:hover,
.dpage .et_pb_blurb .et_pb_module_header a:focus-visible {
  text-decoration: underline;
  text-decoration-thickness: 2px
}

.dpage .et_pb_blurb_description a {
  position: relative;
  z-index: 2
}

/* Das Button-Modul teilt sich Form und Hover mit .btn - siehe style.css.
   Hier stehen nur die Dinge, die es innerhalb des Divi-Rasters braucht. */
.dpage .et_pb_button {
  background-color: transparent
}

/* Sektionstrenner (SVG-Formen aus dem Original) */
.dpage .et_pb_top_inside_divider,
.dpage .et_pb_bottom_inside_divider {
  position: absolute;
  left: 0;
  width: 100%;
  background-repeat: no-repeat;
  pointer-events: none;
  display: block
}

/* Parallax-Hintergrund: im Original ein clippender Wrapper mit einem darin
   verschobenen Bild. Ohne Divis JavaScript bleibt das Bild stehen - wichtig ist,
   dass es die Sektion fuellt und beschnitten wird (kein background-attachment:fixed,
   das wuerde das Bild am Viewport ausrichten statt an der Sektion). */
.dpage .et_parallax_bg_wrap {
  position: absolute;
  inset: 0;
  overflow: hidden;
  z-index: 0;
  pointer-events: none
}

.dpage .et_parallax_bg {
  position: absolute;
  inset: 0;
  background-size: cover;
  background-position: 50% 0;
  background-repeat: no-repeat;
  background-attachment: scroll
}

/* Kein pauschales z-index auf Zeilen: sonst gewinnt bei gleichem Wert die
   spaetere Zeile im Markup - auf "Roboter in der Schule" legte sich dadurch
   die Bildzeile ueber Text und Buttons des Hero. Divi hebt stattdessen
   gezielt einzelne Zeilen an; diese Werte kommen aus dem Seiten-CSS. */
.dpage .et_pb_section>.et_pb_row {
  position: relative
}

/* Spaltenbreiten des Divi-Rasters. Die Stufe (g1/g3) bestimmt die Rinne
   zwischen den Spalten, die Spaltenklasse (c1_2 = die Haelfte usw.) die Breite.
   Bei g3 traegt --mb zusaetzlich den Modulabstand, den Divi aus der
   Spaltenbreite ableitet.

   Divi kennt vier Stufen und zehn Spaltenbreiten. Hier stehen nur die
   Kombinationen, die im Markup der vier Seiten tatsaechlich vorkommen:
   g1 mit c1_2, g3 mit c1_2, c1_3, c1_4, c2_5, c3_5 und c4_4. Die Stufen g2
   und g4 kommen auf keiner Seite vor. */
.dpage .g1 {
  --gut: 0.0%
}





.dpage .g1>.c1_2 {
  width: 50.0%
}

















.dpage .g3 {
  --gut: 5.5%
}

.dpage .g3>.c4_4 {
  width: 100.0%;
  --mb: 2.75%
}



.dpage .g3>.c3_5 {
  width: 57.8%;
  --mb: 4.758%
}

.dpage .g3>.c1_2 {
  width: 47.25%;
  --mb: 5.82%
}

.dpage .g3>.c2_5 {
  width: 36.7%;
  --mb: 7.493%
}

.dpage .g3>.c1_3 {
  width: 29.6667%;
  --mb: 9.27%
}

.dpage .g3>.c1_4 {
  width: 20.875%;
  --mb: 13.174%
}



@media (max-width:980px) {
  .dpage .et_pb_row {
    width: 90%;
    padding: 3% 0
  }

  .dpage .et_pb_column {
    width: 100% !important;
    margin-right: 0 !important;
    margin-bottom: 30px
  }

  .dpage .et_pb_column:last-child {
    margin-bottom: 0
  }

  .dpage .et_pb_module {
    --mb: 30px
  }

  .dpage .et_pb_section {
    padding: 8% 0
  }
}

@media (max-width:767px) {
  .dpage .et_pb_row {
    width: 92%
  }
}

/* Enthaelt eine Sektion ein "sticky" Bild, entfaellt ihr unteres Padding -
   das Bild schliesst dann buendig mit der Sektion ab (Divi-Verhalten).

   Dieser Block steht bewusst hinter den Medienabfragen: er hat dieselbe
   Spezifitaet wie .dpage .et_pb_section dort oben, und bei Gleichstand
   entscheidet die Reihenfolge. Stand er davor, setzte "padding:8% 0" das
   untere Padding unterhalb von 980 px wieder ein - auf "Roboter in der
   Schule" klaffte dadurch unter dem Roboter ein blauer Streifen in der
   Breite von 8 % des Fensters. */
.dpage .et_pb_section_sticky,
.dpage .et_pb_section_sticky .et_pb_row:last-child {
  padding-bottom: 0
}

.dpage .et_pb_section_sticky .et_pb_row:last-child {
  margin-bottom: 0
}

.dpage .et_pb_image_sticky {
  margin-bottom: 0
}