Design · Bausteine-Dossier

Kategorie

Hero

Der erste Bildschirm. Ganz oben der flexible Split-Hero — ein Gerüst, bei dem jede Position (Über-Überschrift · Titel · Text · Buttons · Trust) und die Optik (Anordnung · Medien · Hintergrund · Höhe) über data-Achsen umgeschaltet wird; pro Position ist genau eine Option aktiv. Danach der Bento-Hero: drei Kachel-Anordnungen, deren freie Kacheln du mit Foto, Video, Kennzahl, Vergleich, Bewertung, Feature, Zitat oder Marken-Logos besetzt — in drei Stilen. Darunter dieselben Elemente einzeln zum Einbetten in bestehende Seiten: die animierte Headline mit allen fünf Effekten und die Hero-Bauteile als Kachel-App. „Fotos" sind als CSS-Verlauf angedeutet (kein externes Bild). Akzentfarbe über --akzent in einer Zeile anpassbar.

Flexibler Split-Hero — jede Position umschaltbar

Pol 1 · Craft Anlass: Startseiten-Hero Achsen: Eyebrow · Effekt-Ziel · Titel-Effekt · Buttons · Trust · Anordnung · Medien · Bildform · Hintergrund · Höhe (+ Handy) · alle Texte frei eingebbar

Ein Hero-Gerüst nach dem Header-Prinzip: fünf Inhalts-Positionen von oben nach unten (Über-Überschrift als Label-Fläche/Strich-Label/Glas-Badge · Titel mit wählbarem Effekt · Text · 1–2 Buttons mit frei eingebbarer Beschriftung und wählbarer Form · Trust-Zeile als Kennzahlen/Kunden-Avatare/Team-Initialen) plus Optik-Achsen (Anordnung inkl. gespiegelt, Medien Foto/ohne, Bild- und Button-Form, Hintergrund, Höhe). Erst das Effekt-Ziel wählen (letztes Wort oder ganzer Satz) — die Effekt-Liste bietet dann nur an, was dazu lesbar bleibt: in Schleife rotieren oder 3D-kippen gibt es nur fürs letzte Wort. Effekte laufen einmal beim Laden (Rotierend in Schleife); bei prefers-reduced-motion steht der Titel still, Screenreader lesen immer den vollen Satz. Wechsel-Begriffe für „Rotierend" stehen in data-worte. Alle Texte sind im Panel frei eingebbar (Über-Überschrift, Titel, Rotier-Wörter, Text, Buttons, Trust-Zeile) — der Kopier-Code übernimmt sie fertig; Felder nicht aktiver Varianten blenden sich aus. „Foto" ist als CSS-Verlauf angedeutet — im Projekt background:url(...) auf .site-hero__bild setzen. Nicht genutzte Eyebrow-/Trust-Varianten können im Markup gelöscht werden.

Ihr Betrieb für die ganze Region

Meisterbetrieb

Jetzt Termine frei

Küchen, die millimetergenau sitzen.

Sauber geplant, termintreu montiert — vom Aufmaß bis zur letzten Blende.

15+ Jahre Erfahrung 800+ Projekte 4,9 Bewertung
120+ zufriedene Kunden
Ihr Team vor Ort
Inhalte
Über-Überschrift
Über-Überschrift — Text
Titel
Effekt auf
Titel-Effekt
Rotier-Wörter (mit Komma)
Text
Buttons
Button 1 — Text
Button 2 — Text
Trust-Zeile
Kennzahl 1
Kennzahl 2
Kennzahl 3
Kunden-Zeile
Team-Initialen (mit Komma)
Team-Zeile
Optik
Anordnung
Medien
Bildform
Hintergrund
Höhe
Button-Form
Bild (mobil)
Buttons (mobil)
<!-- Achsen am section-Element (.site-hero):
     data-layout   = links | rechts | zentriert       (Anordnung: Text links · Text rechts/gespiegelt · zentriert ohne Medienspalte)
     data-medien   = foto | ohne                      (Medienhälfte: Foto-Platzhalter · keine)
     data-bildform = eckig | abgerundet                (Form des Fotos; wirkt nur bei Medien "foto")
     data-bg       = schlicht | muster | blobs | mesh (Hintergrund der ganzen Sektion)
     data-hoehe    = kompakt | standard | voll        (voll = ganze Bildschirmhöhe, 100svh)
     data-eyebrow  = aus | label | strich | badge     (Über-Überschrift: farbige Label-Fläche · Strich-Label · Glas-Badge mit Glow-Dot)
     data-ziel     = wort | satz                      (Effekt aufs letzte Wort oder den ganzen Titel)
     data-headline = statisch | rotierend | schreibmaschine | ausbruch | sprung | rollen  (Titel-Effekt, einmal beim Laden;
                     rotierend läuft in Schleife und nur aufs letzte Wort; fürs Satz-Ziel sinnvoll: schreibmaschine · ausbruch · sprung)
     data-worte    = "Wort1, Wort2, …"                (nur rotierend: die Wechsel-Begriffe, erstes = Startwort)
     data-titel    = "…"                              (optional: neuer Titel-Satz — überschreibt den h1-Text, Effekte bauen neu)
     data-buttons  = eins | zwei                      (nur Haupt-Button oder + zweiter, ruhiger Button)
     data-btnform  = eckig | abgerundet | pill        (Form beider Buttons)
     data-trust    = aus | kennzahlen | kunden | team (Vertrauenszeile unter den Buttons)
     data-mbild    = oben | unten                     (Handy: Bild über oder unter dem Text)
     data-mbtn     = gestapelt | reihe                (Handy: Buttons untereinander oder nebeneinander)
     Nicht genutzte Eyebrow-/Trust-Varianten kannst du im Markup löschen — die Achsen blenden sie ohnehin aus. -->
<section class="site-hero" data-layout="links" data-medien="foto" data-bildform="abgerundet" data-bg="schlicht" data-hoehe="standard" data-eyebrow="strich" data-ziel="wort" data-headline="statisch" data-worte="sitzen., passen., überzeugen." data-buttons="zwei" data-btnform="abgerundet" data-trust="kunden" data-mbild="oben" data-mbtn="gestapelt">
  <div class="site-hero__bg" aria-hidden="true"></div>
  <div class="site-hero__in">
    <div class="site-hero__txt">
      <p class="site-hero__eye site-hero__eye--label">Ihr Betrieb für die ganze Region</p>
      <p class="site-hero__eye site-hero__eye--strich">Meisterbetrieb</p>
      <p class="site-hero__eye site-hero__eye--badge"><span class="site-hero__dot" aria-hidden="true"></span>Jetzt Termine frei</p>
      <h1 class="site-hero__titel">Küchen, die millimetergenau sitzen.</h1>
      <p class="site-hero__text">Sauber geplant, termintreu montiert — vom Aufmaß bis zur letzten Blende.</p>
      <div class="site-hero__ctas">
        <a href="#" class="site-hero__cta">Termin anfragen <span class="site-hero__pfeil" aria-hidden="true">→</span></a>
        <a href="#" class="site-hero__cta site-hero__cta--zweit">Mehr erfahren</a>
      </div>
      <div class="site-hero__trust site-hero__trust--zahlen">
        <span><b>15<i>+</i></b> Jahre Erfahrung</span>
        <span><b>800<i>+</i></b> Projekte</span>
        <span><b>4,9<i>★</i></b> Bewertung</span>
      </div>
      <div class="site-hero__trust site-hero__trust--kunden">
        <span class="site-hero__avatare" aria-hidden="true"><i></i><i></i><i></i><i></i></span>
        <span>120+ zufriedene Kunden</span>
      </div>
      <div class="site-hero__trust site-hero__trust--team">
        <span class="site-hero__inits" aria-hidden="true"><i>AM</i><i>TK</i><i>LF</i></span>
        <span>Ihr Team vor Ort</span>
      </div>
    </div>
    <div class="site-hero__media" aria-hidden="true">
      <div class="site-hero__bild"></div>
    </div>
  </div>
</section>

<style>
.site-hero{position:relative;display:grid;width:100%;overflow:hidden;isolation:isolate;
  background:#0f0f12;color:#f4f4f5}
.site-hero__bg{position:absolute;inset:0;z-index:0;pointer-events:none}
.site-hero__in{position:relative;z-index:1;width:100%;max-width:1120px;margin:0 auto;
  padding:clamp(2.2rem,6vw,4.5rem) clamp(1.2rem,4vw,2.5rem);
  display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(1.6rem,4vw,3.2rem);align-items:center}
.site-hero__txt{display:flex;flex-direction:column;align-items:flex-start;gap:1.05rem;min-width:0}

/* Position 1 · Über-Überschrift — pro Achse ist genau EINE Variante sichtbar */
.site-hero__eye{display:none;margin:0;font-size:.74rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase}
.site-hero[data-eyebrow="label"] .site-hero__eye--label{display:inline-block;padding:.45rem .9rem;
  background:var(--akzent,#7c87ff);color:#0d0d10;border-radius:4px;font-weight:800}
.site-hero[data-eyebrow="strich"] .site-hero__eye--strich{display:inline-flex;align-items:center;gap:.6em;
  color:var(--akzent,#7c87ff)}
.site-hero__eye--strich::before{content:"";width:26px;height:1px;background:var(--akzent,#7c87ff)}
.site-hero[data-eyebrow="badge"] .site-hero__eye--badge{display:inline-flex;align-items:center;gap:.6em;
  padding:.5rem 1rem;border-radius:100px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.16);
  -webkit-backdrop-filter:blur(16px) saturate(1.5);backdrop-filter:blur(16px) saturate(1.5);
  color:#f4f4f5;box-shadow:inset 0 1px 0 rgba(255,255,255,.14)}
.site-hero__dot{width:8px;height:8px;border-radius:50%;background:var(--akzent,#7c87ff);
  animation:shero-puls 2.2s ease-in-out infinite}
@keyframes shero-puls{
  0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--akzent,#7c87ff) 60%,transparent)}
  50%{box-shadow:0 0 0 6px transparent}}

/* Position 2 · Titel (+ Effekt-Spans, die das JS setzt) */
.site-hero__titel{margin:0;font-size:clamp(1.9rem,4.4vw,3.3rem);line-height:1.08;letter-spacing:-.02em;font-weight:800}
.site-hero__zielwort{color:var(--akzent,#7c87ff)}
.site-hero__titel .shw{display:inline-block;white-space:nowrap}
.site-hero__titel .shl{display:inline-block}
.site-hero[data-headline="ausbruch"] .shl{opacity:0;transform:translateY(16px) scale(.6);filter:blur(5px)}
.site-hero[data-headline="ausbruch"] .shl.an{opacity:1;transform:none;filter:none;
  transition:opacity .35s ease,transform .5s cubic-bezier(.34,1.56,.64,1),filter .35s ease}
.site-hero[data-headline="sprung"] .shw{opacity:0;transform:translateY(1.1em)}
.site-hero[data-headline="sprung"] .shw.an{opacity:1;transform:none;
  transition:opacity .3s ease,transform .55s cubic-bezier(.3,1.6,.45,1)}
.site-hero[data-headline="rollen"] .shw{perspective:700px}
.site-hero[data-headline="rollen"] .shl{opacity:0;transform:rotateX(-92deg);transform-origin:50% 100%}
.site-hero[data-headline="rollen"] .shl.an{opacity:1;transform:none;
  transition:opacity .3s ease,transform .5s cubic-bezier(.34,1.3,.5,1)}
.site-hero__tw{display:inline-grid}
.site-hero__tw>span{grid-area:1/1}
.site-hero__tw-ghost{visibility:hidden}
.site-hero__caret{display:inline-block;width:2px;height:.9em;margin-left:2px;vertical-align:-.06em;
  background:var(--akzent,#7c87ff);animation:shero-caret 1s steps(2) infinite}
@keyframes shero-caret{50%{opacity:0}}
.site-hero__rot{display:inline-grid;text-align:left;vertical-align:bottom;overflow:hidden}
.site-hero__rot .w{grid-area:1/1;color:var(--akzent,#7c87ff);white-space:nowrap;
  opacity:0;transform:translateY(.6em);transition:opacity .4s ease,transform .5s cubic-bezier(.34,1.4,.64,1)}
.site-hero__rot .w.an{opacity:1;transform:none}
.site-hero__rot .w.ab{opacity:0;transform:translateY(-.6em);transition:opacity .35s ease,transform .4s ease}

/* Position 3 · Text */
.site-hero__text{margin:0;font-size:clamp(.95rem,1.3vw,1.08rem);line-height:1.6;color:#c9c9d2;max-width:46ch}

/* Position 4 · Call-to-Action (eins/zwei, Texte frei, Form über data-btnform) */
.site-hero__ctas{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:.4rem}
.site-hero__cta{display:inline-flex;align-items:center;gap:.5rem;padding:.8rem 1.5rem;
  background:var(--akzent,#7c87ff);color:#0d0d10;font-weight:700;font-size:.95rem;text-decoration:none;
  transition:transform .2s ease,box-shadow .2s ease}
.site-hero[data-btnform="eckig"] .site-hero__cta{border-radius:0}
.site-hero[data-btnform="abgerundet"] .site-hero__cta{border-radius:12px}
.site-hero[data-btnform="pill"] .site-hero__cta{border-radius:999px}
.site-hero__pfeil{transition:transform .25s cubic-bezier(.4,0,.2,1)}
.site-hero__cta:hover,.site-hero__cta:focus-visible{transform:translateY(-2px);
  box-shadow:0 10px 26px -10px var(--akzent,#7c87ff)}
.site-hero__cta:focus-visible{outline:2px solid var(--akzent,#7c87ff);outline-offset:2px}
.site-hero__cta:hover .site-hero__pfeil,.site-hero__cta:focus-visible .site-hero__pfeil{transform:translateX(4px)}
.site-hero__cta--zweit{background:transparent;color:#e9e9ee;border:1px solid #34343e}
.site-hero__cta--zweit:hover,.site-hero__cta--zweit:focus-visible{box-shadow:none;border-color:#4a4a56;
  background:rgba(255,255,255,.05)}
.site-hero[data-buttons="eins"] .site-hero__cta--zweit{display:none}

/* Position 5 · Trust-Zeile — pro Achse ist genau EINE Variante sichtbar */
.site-hero__trust{display:none;margin-top:.55rem;font-size:.88rem;color:#e9e9ee}
.site-hero[data-trust="kennzahlen"] .site-hero__trust--zahlen{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem}
.site-hero__trust--zahlen span{display:inline-flex;align-items:baseline;gap:.4rem;color:#a1a1aa;font-size:.8rem}
.site-hero__trust--zahlen b{font-size:1.06rem;font-weight:800;color:#f4f4f5}
.site-hero__trust--zahlen b i{font-style:normal;color:var(--akzent,#7c87ff)}
.site-hero[data-trust="kunden"] .site-hero__trust--kunden{display:inline-flex;align-items:center;gap:.9rem}
.site-hero__avatare{display:flex}
.site-hero__avatare i{width:34px;height:34px;border-radius:50%;border:2px solid #0f0f12;margin-left:-10px;display:block}
.site-hero__avatare i:first-child{margin-left:0}
.site-hero__avatare i:nth-child(1){background:linear-gradient(135deg,#5b62c9,#383d86)}
.site-hero__avatare i:nth-child(2){background:linear-gradient(135deg,var(--akzent,#7c87ff),#5b62c9)}
.site-hero__avatare i:nth-child(3){background:linear-gradient(135deg,#42466e,#6e6e8a)}
.site-hero__avatare i:nth-child(4){background:linear-gradient(135deg,#9aa2ff,var(--akzent,#7c87ff))}
.site-hero[data-trust="team"] .site-hero__trust--team{display:inline-flex;align-items:center;gap:.9rem}
.site-hero__inits{display:inline-flex;gap:.55rem}
.site-hero__inits i{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;
  font-size:.74rem;font-weight:800;font-style:normal;color:#fff;
  background:linear-gradient(135deg,var(--akzent,#7c87ff),#42466e)}

/* Medienhälfte: Foto-Platzhalter, Form über data-bildform */
.site-hero__media{position:relative;align-self:stretch;display:grid;min-height:300px}
.site-hero__bild{width:100%;height:100%;min-height:300px;border:1px solid #2a2a34;
  background:radial-gradient(130% 110% at 78% 14%,#3a3a52 0%,#252534 42%,#161620 100%)}
.site-hero[data-bildform="eckig"] .site-hero__bild{border-radius:0}
.site-hero[data-bildform="abgerundet"] .site-hero__bild{border-radius:18px}

/* Achse Anordnung (data-layout): Text links · Text rechts (gespiegelt) · zentriert (ohne Medienspalte) */
.site-hero[data-layout="rechts"] .site-hero__txt{order:2}
.site-hero[data-layout="rechts"] .site-hero__media{order:1}
.site-hero[data-layout="zentriert"] .site-hero__in{grid-template-columns:1fr;justify-items:center}
.site-hero[data-layout="zentriert"] .site-hero__txt{align-items:center;text-align:center}
.site-hero[data-layout="zentriert"] .site-hero__text{margin-left:auto;margin-right:auto}
.site-hero[data-layout="zentriert"] .site-hero__media{display:none}
.site-hero[data-medien="ohne"] .site-hero__media{display:none}
.site-hero[data-medien="ohne"] .site-hero__in{grid-template-columns:1fr}
.site-hero[data-medien="ohne"] .site-hero__txt{max-width:640px}

/* Achse Hintergrund (data-bg) — wirkt auf .site-hero__bg */
.site-hero[data-bg="schlicht"] .site-hero__bg{
  background:radial-gradient(140% 120% at 0% 0%,#1c1c26 0%,#15151b 60%,#0f0f12 100%)}
.site-hero[data-bg="muster"] .site-hero__bg{background:#101014;
  background-image:radial-gradient(circle,rgba(124,135,255,.5) 1.1px,transparent 1.6px);background-size:22px 22px;
  -webkit-mask-image:radial-gradient(125% 130% at 82% 10%,#000 0%,#000 12%,transparent 56%);
  mask-image:radial-gradient(125% 130% at 82% 10%,#000 0%,#000 12%,transparent 56%)}
.site-hero[data-bg="blobs"] .site-hero__bg{background:#101014}
.site-hero[data-bg="blobs"] .site-hero__bg::before,
.site-hero[data-bg="blobs"] .site-hero__bg::after{content:"";position:absolute;border-radius:50%;filter:blur(60px);
  background:radial-gradient(circle,var(--akzent,#7c87ff) 0%,transparent 70%);
  animation:shero-float 16s ease-in-out infinite alternate;will-change:transform}
.site-hero[data-bg="blobs"] .site-hero__bg::before{width:230px;height:230px;top:-70px;left:-46px;opacity:.5}
.site-hero[data-bg="blobs"] .site-hero__bg::after{width:270px;height:270px;bottom:-96px;right:-64px;opacity:.38;animation-delay:-5s}
@keyframes shero-float{0%{transform:translate(0,0) scale(1)}100%{transform:translate(34px,-26px) scale(1.1)}}
.site-hero[data-bg="mesh"] .site-hero__bg{background:#101014}
.site-hero[data-bg="mesh"] .site-hero__bg::before{content:"";position:absolute;inset:0;filter:blur(14px);
  background:
    radial-gradient(42% 55% at 14% 20%,color-mix(in srgb,var(--akzent,#7c87ff) 58%,transparent) 0%,transparent 60%),
    radial-gradient(46% 50% at 88% 16%,rgba(233,233,238,.13) 0%,transparent 62%),
    radial-gradient(55% 60% at 78% 92%,color-mix(in srgb,var(--akzent,#7c87ff) 40%,transparent) 0%,transparent 64%),
    radial-gradient(50% 55% at 24% 96%,rgba(66,70,110,.5) 0%,transparent 60%)}

/* Achse Höhe: kompakt = schlanker Block · standard = präsenter Startbildschirm · voll = ganze Bildschirmhöhe */
.site-hero[data-hoehe="kompakt"] .site-hero__in{padding-block:clamp(1.8rem,4vw,2.8rem)}
.site-hero[data-hoehe="standard"]{min-height:min(680px,86svh)}
.site-hero[data-hoehe="voll"]{min-height:100svh}

/* Handy: eine Spalte; Achsen data-mbild (Bild oben/unten) + data-mbtn (Buttons gestapelt/Reihe) */
@media (max-width:760px){
  .site-hero__in{grid-template-columns:1fr;gap:1.5rem}
  .site-hero__media,.site-hero__bild{min-height:210px}
  .site-hero[data-mbild="oben"] .site-hero__media{order:-1}
  .site-hero[data-mbild="unten"] .site-hero__media{order:2}
  .site-hero[data-mbtn="gestapelt"] .site-hero__ctas{flex-direction:column;align-items:stretch;align-self:stretch}
  .site-hero[data-mbtn="gestapelt"] .site-hero__cta{justify-content:center}
}
@media (prefers-reduced-motion:reduce){
  .site-hero__dot,.site-hero[data-bg="blobs"] .site-hero__bg::before,
  .site-hero[data-bg="blobs"] .site-hero__bg::after,.site-hero__caret{animation:none}
  .site-hero__cta,.site-hero__pfeil,.site-hero__rot .w{transition:none}
  .site-hero__cta:hover,.site-hero__cta:focus-visible{transform:none}
  .site-hero__cta:hover .site-hero__pfeil,.site-hero__cta:focus-visible .site-hero__pfeil{transform:none}
  .site-hero .shl,.site-hero .shw{opacity:1;transform:none;filter:none;transition:none}
}
</style>

<script>
/* Flexibler Split-Hero — Titel-Effekte. Liest data-headline/data-ziel/data-worte an .site-hero,
   läuft einmal beim Laden und reagiert auf Attribut-Änderungen (MutationObserver).
   Der Titel-Text steht im <h1>; über data-titel an .site-hero lässt er sich nachträglich ändern
   (die Effekte bauen dann mit dem neuen Satz neu — so ändert auch das Dossier-Panel den Titel).
   Screenreader lesen immer den vollen Satz (aria-label); bei prefers-reduced-motion bleibt der Titel statisch. */
(function(){
  var REDUCE=matchMedia('(prefers-reduced-motion: reduce)').matches;
  document.querySelectorAll('.site-hero').forEach(function(hero){
    var h=hero.querySelector('.site-hero__titel'); if(!h) return;
    var orig=(hero.getAttribute('data-titel')||h.textContent).trim();
    var timer=[];
    function stop(){ timer.forEach(clearTimeout); timer=[]; if(h._rot){clearInterval(h._rot);h._rot=null;} }
    function T(fn,ms){ timer.push(setTimeout(fn,ms)); }
    function el(tag,cls,txt){ var e=document.createElement(tag); if(cls)e.className=cls; if(txt!=null)e.textContent=txt; return e; }
    /* Text in Wort-Gruppen (.shw) mit Buchstaben (.shl) zerlegen; nur der Ziel-Teil wird animiert.
       Abstände bleiben echte Leerzeichen (Textknoten) — der Titel liest sich auch ohne CSS korrekt. */
    function zerlege(ziel,buchstaben){
      h.textContent='';
      var worte=orig.split(' ');
      var start=(ziel==='satz')?0:worte.length-1;
      var spans=[];
      worte.forEach(function(wort,i){
        if(i<start){ h.appendChild(document.createTextNode(wort)); }
        else{
          var w=el('span','shw'+(ziel==='wort'?' site-hero__zielwort':''));
          if(buchstaben){ wort.split('').forEach(function(c){ w.appendChild(el('span','shl',c)); }); }
          else{ w.textContent=wort; }
          h.appendChild(w); spans.push(w);
        }
        if(i<worte.length-1) h.appendChild(document.createTextNode(' '));
      });
      return spans;
    }
    function baue(){
      stop();
      var eff=hero.getAttribute('data-headline')||'statisch';
      var ziel=hero.getAttribute('data-ziel')||'wort';
      if(eff==='rotierend') ziel='wort';   /* Schleife nur aufs letzte Wort — ein rotierender Satz wäre nicht lesbar */
      if(REDUCE&&eff!=='statisch') eff='statisch';
      if(eff==='statisch'){ h.textContent=orig; h.removeAttribute('aria-label'); return; }
      h.setAttribute('aria-label',orig);
      var worte=orig.split(' ');
      if(eff==='rotierend'){
        var liste=(hero.getAttribute('data-worte')||worte[worte.length-1]).split(',').map(function(s){return s.trim()}).filter(Boolean);
        h.textContent='';
        h.appendChild(document.createTextNode(worte.slice(0,-1).join(' ')+' '));
        var slot=el('span','site-hero__rot');
        liste.forEach(function(wtxt,i){ var w=el('span','w'+(i===0?' an':''),wtxt); slot.appendChild(w); });
        h.appendChild(slot);
        if(liste.length<2) return;
        var ws=slot.querySelectorAll('.w'), i=0;
        h._rot=setInterval(function(){
          var cur=ws[i], nxt=ws[(i+1)%ws.length];
          cur.classList.remove('an'); cur.classList.add('ab');
          nxt.classList.add('an');
          setTimeout(function(){cur.classList.remove('ab');},450);
          i=(i+1)%ws.length;
        },2200);
      }
      else if(eff==='schreibmaschine'){
        h.textContent='';
        var start=(ziel==='satz')?'':worte.slice(0,-1).join(' ')+' ';
        var zieltext=(ziel==='satz')?orig:worte[worte.length-1];
        if(start) h.appendChild(document.createTextNode(start));
        var tw=el('span','site-hero__tw'+(ziel==='wort'?' site-hero__zielwort':''));
        var ghost=el('span','site-hero__tw-ghost',zieltext); ghost.setAttribute('aria-hidden','true');
        var typ=el('span','site-hero__tw-typ'); typ.setAttribute('aria-hidden','true');
        var caret=el('span','site-hero__caret');
        typ.appendChild(document.createTextNode('')); typ.appendChild(caret);
        tw.appendChild(ghost); tw.appendChild(typ); h.appendChild(tw);
        var n=0;
        (function tippe(){
          if(n<=zieltext.length){
            typ.firstChild.nodeValue=zieltext.slice(0,n); n++;
            T(tippe,55);
          }else{
            T(function(){caret.remove();},1600);
          }
        })();
      }
      else{
        var buchstaben=(eff==='ausbruch'||eff==='rollen');
        var spans=zerlege(ziel,buchstaben);
        var teile=buchstaben?h.querySelectorAll('.shl'):spans;
        var takt=(eff==='sprung')?90:34;
        teile.forEach(function(t,i){ T(function(){t.classList.add('an');},120+i*takt); });
      }
    }
    baue();
    new MutationObserver(function(muts){
      var relevant=muts.some(function(m){
        return ['data-headline','data-ziel','data-worte','data-titel'].indexOf(m.attributeName)>-1;
      });
      if(relevant){ orig=(hero.getAttribute('data-titel')||orig).trim(); baue(); }
    }).observe(hero,{attributes:true});
  });
})();
</script>

Bento-Hero — Raster mit besetzbaren Kacheln

Pol 1 · Craft Anlass: Startseiten-Hero, Produkt-/Feature-Übersicht Achsen: Anordnung (3 Raster) · Stil (Klar/Glas/Craft) · Kachel-Besetzung ×3 · Button-Form (+ Handy) · Titel-Kachel-Texte frei eingebbar

Ein Hero als Bento-Raster (Vorbild: Apple-Produktseiten, Bento-Grids): die Titel-Kachel (Über-Überschrift · H1 mit Akzent-Wort · Text · Button) ist gesetzt, die drei freien Kacheln besetzt du je über ein Auswahlfeld — Foto · Video · Kennzahl · Vergleich (Balken) · Bewertung · Feature · Zitat · Marken-Logos. Drei Anordnungen verschieben die Titel-Kachel (links · als Band · mittig), drei Stile wechseln die Fläche (Klar · Milchglas über Farb-Glows · Craft). Kacheln heben beim Zeigen leicht an; alles ruht bei prefers-reduced-motion. „Foto"/Video sind Platzhalter-Verläufe: im Projekt echtes Bild bzw. eigene, selbst gehostete MP4/WebM als <source> einsetzen (kein YouTube-Embed — DSGVO). Die Texte der Titel-Kachel (Über-Überschrift, Titel samt Akzent-Teil, Text, Button) sind im Panel frei eingebbar; die Inhalte der drei freien Kacheln änderst du im Markup (sie stehen dort je Kachel mehrfach). Der Status-Chip der Feature-Kachel und nicht genutzte Kachel-Typen können im Markup gelöscht werden.

Meisterbetrieb aus der Region

Ein Betrieb. Alle Gewerke.

Planung, Ausbau und Montage aus einer Hand — termintreu, sauber und zum Festpreis.

Termin anfragen

800+Projekte übergeben

schnellere Terminvergabe
schnellere Umsetzung
4,9 von 5 aus 120 Google-Bewertungen
Neu Festpreis-Garantie Schriftlich vor Arbeitsbeginn — keine Überraschungen.
„Pünktlich, sauber, fair — jederzeit wieder."
Familie K., Kundin seit 2019
Marke 1Marke 2Marke 3

800+Projekte übergeben

schnellere Terminvergabe
schnellere Umsetzung
4,9 von 5 aus 120 Google-Bewertungen
Neu Festpreis-Garantie Schriftlich vor Arbeitsbeginn — keine Überraschungen.
„Pünktlich, sauber, fair — jederzeit wieder."
Familie K., Kundin seit 2019
Marke 1Marke 2Marke 3

800+Projekte übergeben

schnellere Terminvergabe
schnellere Umsetzung
4,9 von 5 aus 120 Google-Bewertungen
Neu Festpreis-Garantie Schriftlich vor Arbeitsbeginn — keine Überraschungen.
„Pünktlich, sauber, fair — jederzeit wieder."
Familie K., Kundin seit 2019
Marke 1Marke 2Marke 3
Inhalte
Über-Überschrift
Titel
Akzent-Teil
Text
Button — Text
Optik
Anordnung
Stil
Kachel 2
Kachel 3
Kachel 4
Button-Form
Kacheln (mobil)
<!-- Achsen am section-Element (.site-bento):
     data-anordnung = titel-links | titel-band | titel-mitte   (drei Bento-Anordnungen; die Titel-Kachel wandert)
     data-stil      = klar | glas | craft                      (ruhige Flächen · Milchglas über Farb-Glows · Verlauf mit Akzent-Titelkachel)
     data-btnform   = eckig | abgerundet | pill                (Form des Buttons in der Titel-Kachel)
     data-k2 / data-k3 / data-k4 = foto | video | kennzahl | balken | bewertung | feature | zitat | logos
                      (Besetzung der drei freien Kacheln; die Titel-Kachel k1 ist gesetzt)
     data-mstapel   = eins | zwei                              (Handy: alles untereinander oder zwei Spalten)
     In jeder Kachel steht das Markup ALLER Typen — nicht Genutztes kannst du löschen, die Achsen blenden es ohnehin aus.
     „Foto"/Video sind Platzhalter-Verläufe: im Projekt echtes Bild (background:url(…) oder <img>) bzw. eigene,
     selbst gehostete MP4/WebM als <source> ins <video> einsetzen (kein YouTube-Embed — DSGVO). -->
<section class="site-bento" data-bake data-anordnung="titel-links" data-stil="klar" data-btnform="abgerundet" data-k2="foto" data-k3="kennzahl" data-k4="bewertung" data-mstapel="eins">
  <div class="site-bento__in">
    <div class="site-bento__k site-bento__k1">
      <p class="site-bento__eye">Meisterbetrieb aus der Region</p>
      <h1 class="site-bento__titel">Ein Betrieb. <em>Alle Gewerke.</em></h1>
      <p class="site-bento__text">Planung, Ausbau und Montage aus einer Hand — termintreu, sauber und zum Festpreis.</p>
      <a href="#" class="site-bento__cta">Termin anfragen <span class="site-bento__pfeil" aria-hidden="true">→</span></a>
    </div>
    <div class="site-bento__k site-bento__k2">
      <div class="site-bento__t site-bento__t--foto" aria-hidden="true"></div>
      <video class="site-bento__t site-bento__t--video" autoplay muted loop playsinline aria-hidden="true"></video>
      <p class="site-bento__t site-bento__t--kennzahl"><b>800<i>+</i></b><small>Projekte übergeben</small></p>
      <div class="site-bento__t site-bento__t--balken">
        <div><b>5×</b><small>schnellere Terminvergabe</small><span class="site-bento__balken"><i style="width:86%"></i></span></div>
        <div><b>2×</b><small>schnellere Umsetzung</small><span class="site-bento__balken"><i style="width:52%"></i></span></div>
      </div>
      <div class="site-bento__t site-bento__t--bewertung">
        <span class="site-bento__sterne" aria-hidden="true">★★★★★</span>
        <b>4,9 von 5</b>
        <small>aus 120 Google-Bewertungen</small>
      </div>
      <div class="site-bento__t site-bento__t--feature">
        <span class="site-bento__chip">Neu</span>
        <span class="site-bento__ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l7 3v5c0 4-3 7-7 8-4-1-7-4-7-8V6z"/><path d="M9 12l2 2 4-4"/></svg></span>
        <b>Festpreis-Garantie</b>
        <small>Schriftlich vor Arbeitsbeginn — keine Überraschungen.</small>
      </div>
      <figure class="site-bento__t site-bento__t--zitat">
        <blockquote>„Pünktlich, sauber, fair — jederzeit wieder."</blockquote>
        <figcaption>Familie K., Kundin seit 2019</figcaption>
      </figure>
      <div class="site-bento__t site-bento__t--logos">
        <span>Marke 1</span><span>Marke 2</span><span>Marke 3</span>
      </div>
    </div>
    <div class="site-bento__k site-bento__k3">
      <div class="site-bento__t site-bento__t--foto" aria-hidden="true"></div>
      <video class="site-bento__t site-bento__t--video" autoplay muted loop playsinline aria-hidden="true"></video>
      <p class="site-bento__t site-bento__t--kennzahl"><b>800<i>+</i></b><small>Projekte übergeben</small></p>
      <div class="site-bento__t site-bento__t--balken">
        <div><b>5×</b><small>schnellere Terminvergabe</small><span class="site-bento__balken"><i style="width:86%"></i></span></div>
        <div><b>2×</b><small>schnellere Umsetzung</small><span class="site-bento__balken"><i style="width:52%"></i></span></div>
      </div>
      <div class="site-bento__t site-bento__t--bewertung">
        <span class="site-bento__sterne" aria-hidden="true">★★★★★</span>
        <b>4,9 von 5</b>
        <small>aus 120 Google-Bewertungen</small>
      </div>
      <div class="site-bento__t site-bento__t--feature">
        <span class="site-bento__chip">Neu</span>
        <span class="site-bento__ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l7 3v5c0 4-3 7-7 8-4-1-7-4-7-8V6z"/><path d="M9 12l2 2 4-4"/></svg></span>
        <b>Festpreis-Garantie</b>
        <small>Schriftlich vor Arbeitsbeginn — keine Überraschungen.</small>
      </div>
      <figure class="site-bento__t site-bento__t--zitat">
        <blockquote>„Pünktlich, sauber, fair — jederzeit wieder."</blockquote>
        <figcaption>Familie K., Kundin seit 2019</figcaption>
      </figure>
      <div class="site-bento__t site-bento__t--logos">
        <span>Marke 1</span><span>Marke 2</span><span>Marke 3</span>
      </div>
    </div>
    <div class="site-bento__k site-bento__k4">
      <div class="site-bento__t site-bento__t--foto" aria-hidden="true"></div>
      <video class="site-bento__t site-bento__t--video" autoplay muted loop playsinline aria-hidden="true"></video>
      <p class="site-bento__t site-bento__t--kennzahl"><b>800<i>+</i></b><small>Projekte übergeben</small></p>
      <div class="site-bento__t site-bento__t--balken">
        <div><b>5×</b><small>schnellere Terminvergabe</small><span class="site-bento__balken"><i style="width:86%"></i></span></div>
        <div><b>2×</b><small>schnellere Umsetzung</small><span class="site-bento__balken"><i style="width:52%"></i></span></div>
      </div>
      <div class="site-bento__t site-bento__t--bewertung">
        <span class="site-bento__sterne" aria-hidden="true">★★★★★</span>
        <b>4,9 von 5</b>
        <small>aus 120 Google-Bewertungen</small>
      </div>
      <div class="site-bento__t site-bento__t--feature">
        <span class="site-bento__chip">Neu</span>
        <span class="site-bento__ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3l7 3v5c0 4-3 7-7 8-4-1-7-4-7-8V6z"/><path d="M9 12l2 2 4-4"/></svg></span>
        <b>Festpreis-Garantie</b>
        <small>Schriftlich vor Arbeitsbeginn — keine Überraschungen.</small>
      </div>
      <figure class="site-bento__t site-bento__t--zitat">
        <blockquote>„Pünktlich, sauber, fair — jederzeit wieder."</blockquote>
        <figcaption>Familie K., Kundin seit 2019</figcaption>
      </figure>
      <div class="site-bento__t site-bento__t--logos">
        <span>Marke 1</span><span>Marke 2</span><span>Marke 3</span>
      </div>
    </div>
  </div>
</section>

<style>
.site-bento{position:relative;width:100%;overflow:hidden;background:#0f0f12;color:#e9e9ee}
.site-bento__in{position:relative;z-index:1;width:100%;max-width:1120px;margin:0 auto;
  padding:clamp(2rem,5vw,3.5rem) clamp(1.2rem,4vw,2.5rem);
  display:grid;gap:clamp(.8rem,1.6vw,1.1rem);grid-template-columns:repeat(4,1fr);grid-auto-rows:minmax(150px,auto)}

/* Kacheln — Grundform; Hover hebt leicht an (ruht bei prefers-reduced-motion) */
.site-bento__k{position:relative;overflow:hidden;border-radius:18px;min-width:0;padding:1.3rem;
  display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:.45rem;
  transition:transform .25s ease,border-color .25s ease}
.site-bento__k:hover{transform:translateY(-3px)}
.site-bento__k1{grid-area:k1;gap:.9rem;padding:clamp(1.4rem,3vw,2.2rem)}
.site-bento__k2{grid-area:k2}
.site-bento__k3{grid-area:k3}
.site-bento__k4{grid-area:k4}

/* Achse Anordnung: wohin die Titel-Kachel wandert, wie sich die Reihen aufteilen */
.site-bento[data-anordnung="titel-links"] .site-bento__in{grid-template-areas:"k1 k1 k2 k2" "k1 k1 k3 k4"}
.site-bento[data-anordnung="titel-band"] .site-bento__in{grid-template-areas:"k1 k1 k1 k1" "k2 k3 k4 k4"}
.site-bento[data-anordnung="titel-mitte"] .site-bento__in{grid-template-areas:"k2 k1 k1 k3" "k4 k1 k1 k3"}
.site-bento[data-anordnung="titel-mitte"] .site-bento__k1{align-items:center;text-align:center}

/* Achse Stil: klar (ruhige Flächen) · glas (Milchglas über Farb-Glows) · craft (Verlauf, Akzent in der Titel-Kachel) */
.site-bento[data-stil="klar"] .site-bento__k{background:#16161a;border:1px solid #26262c}
.site-bento[data-stil="klar"] .site-bento__k:hover{border-color:#3a3a46}
.site-bento[data-stil="glas"]{background:radial-gradient(120% 140% at 12% 0%,#23233a 0%,#131318 55%,#0f0f12 100%)}
.site-bento[data-stil="glas"]::before,.site-bento[data-stil="glas"]::after{content:"";position:absolute;
  border-radius:50%;filter:blur(70px);pointer-events:none}
.site-bento[data-stil="glas"]::before{width:340px;height:340px;top:-120px;left:12%;opacity:.5;
  background:radial-gradient(circle,var(--akzent,#7c87ff),transparent 70%)}
.site-bento[data-stil="glas"]::after{width:300px;height:300px;bottom:-110px;right:8%;opacity:.35;
  background:radial-gradient(circle,#42466e,transparent 70%)}
.site-bento[data-stil="glas"] .site-bento__k{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);
  -webkit-backdrop-filter:blur(16px) saturate(1.4);backdrop-filter:blur(16px) saturate(1.4);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}
.site-bento[data-stil="glas"] .site-bento__k:hover{border-color:rgba(255,255,255,.28)}
.site-bento[data-stil="craft"]{background:radial-gradient(130% 120% at 100% 0%,#1c1c28 0%,#141319 55%,#101014 100%)}
.site-bento[data-stil="craft"] .site-bento__k{border:1px solid rgba(255,255,255,.08);
  background:radial-gradient(120% 120% at 20% 0%,#1e1e2a 0%,#15151c 60%,#121217 100%);
  box-shadow:0 18px 40px -22px rgba(0,0,0,.8)}
.site-bento[data-stil="craft"] .site-bento__k:hover{border-color:rgba(255,255,255,.18)}
.site-bento[data-stil="craft"] .site-bento__k1{
  background:radial-gradient(130% 130% at 15% 10%,color-mix(in srgb,var(--akzent,#7c87ff) 18%,#15151c) 0%,#15151c 55%,#121217 100%)}

/* Titel-Kachel (fest): Über-Überschrift · H1 mit Akzent-Wort · Text · Button (Form über data-btnform) */
.site-bento__eye{margin:0;display:inline-flex;align-items:center;gap:.6em;font-size:.74rem;font-weight:600;
  letter-spacing:.16em;text-transform:uppercase;color:var(--akzent,#7c87ff)}
.site-bento__eye::before{content:"";width:26px;height:1px;background:var(--akzent,#7c87ff)}
.site-bento__titel{margin:0;font-size:clamp(1.7rem,3.8vw,2.7rem);line-height:1.1;letter-spacing:-.02em;
  font-weight:800;color:#f4f4f5}
.site-bento__titel em{font-style:normal;color:var(--akzent,#7c87ff)}
.site-bento__text{margin:0;font-size:.95rem;line-height:1.6;color:#a1a1aa;max-width:44ch}
.site-bento__cta{display:inline-flex;align-items:center;gap:.5rem;margin-top:.4rem;padding:.75rem 1.4rem;
  background:var(--akzent,#7c87ff);color:#0d0d10;font-weight:700;font-size:.92rem;text-decoration:none;
  transition:transform .2s ease,box-shadow .2s ease}
.site-bento[data-btnform="eckig"] .site-bento__cta{border-radius:0}
.site-bento[data-btnform="abgerundet"] .site-bento__cta{border-radius:12px}
.site-bento[data-btnform="pill"] .site-bento__cta{border-radius:999px}
.site-bento__pfeil{transition:transform .25s cubic-bezier(.4,0,.2,1)}
.site-bento__cta:hover,.site-bento__cta:focus-visible{transform:translateY(-2px);
  box-shadow:0 10px 26px -10px var(--akzent,#7c87ff)}
.site-bento__cta:focus-visible{outline:2px solid var(--akzent,#7c87ff);outline-offset:2px}
.site-bento__cta:hover .site-bento__pfeil,.site-bento__cta:focus-visible .site-bento__pfeil{transform:translateX(4px)}

/* Kachel-Inhalte: pro Kachel ist genau EIN Typ sichtbar (data-k2/k3/k4) — nicht Genutztes ist löschbar */
.site-bento__t{display:none;min-width:0}
.site-bento[data-k2="foto"] .site-bento__k2 .site-bento__t--foto,
.site-bento[data-k3="foto"] .site-bento__k3 .site-bento__t--foto,
.site-bento[data-k4="foto"] .site-bento__k4 .site-bento__t--foto{display:block}
.site-bento[data-k2="video"] .site-bento__k2 .site-bento__t--video,
.site-bento[data-k3="video"] .site-bento__k3 .site-bento__t--video,
.site-bento[data-k4="video"] .site-bento__k4 .site-bento__t--video{display:block}
.site-bento[data-k2="kennzahl"] .site-bento__k2 .site-bento__t--kennzahl,
.site-bento[data-k3="kennzahl"] .site-bento__k3 .site-bento__t--kennzahl,
.site-bento[data-k4="kennzahl"] .site-bento__k4 .site-bento__t--kennzahl{display:block}
.site-bento[data-k2="balken"] .site-bento__k2 .site-bento__t--balken,
.site-bento[data-k3="balken"] .site-bento__k3 .site-bento__t--balken,
.site-bento[data-k4="balken"] .site-bento__k4 .site-bento__t--balken{display:flex}
.site-bento[data-k2="bewertung"] .site-bento__k2 .site-bento__t--bewertung,
.site-bento[data-k3="bewertung"] .site-bento__k3 .site-bento__t--bewertung,
.site-bento[data-k4="bewertung"] .site-bento__k4 .site-bento__t--bewertung{display:flex}
.site-bento[data-k2="feature"] .site-bento__k2 .site-bento__t--feature,
.site-bento[data-k3="feature"] .site-bento__k3 .site-bento__t--feature,
.site-bento[data-k4="feature"] .site-bento__k4 .site-bento__t--feature{display:flex}
.site-bento[data-k2="zitat"] .site-bento__k2 .site-bento__t--zitat,
.site-bento[data-k3="zitat"] .site-bento__k3 .site-bento__t--zitat,
.site-bento[data-k4="zitat"] .site-bento__k4 .site-bento__t--zitat{display:flex}
.site-bento[data-k2="logos"] .site-bento__k2 .site-bento__t--logos,
.site-bento[data-k3="logos"] .site-bento__k3 .site-bento__t--logos,
.site-bento[data-k4="logos"] .site-bento__k4 .site-bento__t--logos{display:flex}

/* Foto & Video füllen die Kachel randlos (Platzhalter-Verlauf; im Projekt echtes Bild bzw. eigene MP4/WebM) */
.site-bento__t--foto,.site-bento__t--video{position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;border:0;background:radial-gradient(120% 110% at 30% 20%,#3b3b54 0%,#24242f 48%,#15151b 100%)}
.site-bento__k3 .site-bento__t--foto,.site-bento__k3 .site-bento__t--video{
  background:radial-gradient(120% 120% at 80% 20%,#3a2f4e 0%,#211d2b 55%,#15151b 100%)}
.site-bento__k4 .site-bento__t--foto,.site-bento__k4 .site-bento__t--video{
  background:radial-gradient(120% 120% at 30% 80%,#233a44 0%,#1a222a 55%,#15151b 100%)}

/* Kennzahl */
.site-bento__t--kennzahl{margin:0}
.site-bento__t--kennzahl b{display:block;font-size:clamp(1.9rem,3.6vw,2.7rem);font-weight:800;line-height:1;color:#f4f4f5}
.site-bento__t--kennzahl b i{font-style:normal;color:var(--akzent,#7c87ff)}
.site-bento__t--kennzahl small{display:block;margin-top:.4rem;font-size:.78rem;color:#a1a1aa}

/* Fortschritts-Vergleich („5×"-Muster) */
.site-bento__t--balken{flex-direction:column;gap:.7rem;width:100%}
.site-bento__t--balken > div{width:100%}
.site-bento__t--balken b{display:block;font-size:1.15rem;font-weight:800;color:#f4f4f5}
.site-bento__t--balken small{display:block;margin:.1rem 0 .35rem;font-size:.74rem;color:#a1a1aa}
.site-bento__balken{display:block;height:6px;border-radius:99px;background:rgba(255,255,255,.09);overflow:hidden}
.site-bento__balken i{display:block;height:100%;border-radius:99px;background:var(--akzent,#7c87ff)}

/* Bewertung */
.site-bento__t--bewertung{flex-direction:column;gap:.3rem}
.site-bento__sterne{color:var(--akzent,#7c87ff);font-size:1.05rem;letter-spacing:.14em}
.site-bento__t--bewertung b{font-size:1.05rem;font-weight:800;color:#f4f4f5}
.site-bento__t--bewertung small{font-size:.78rem;color:#a1a1aa}

/* Feature (mit Status-Chip oben rechts — Chip bei Bedarf im Markup löschen) */
.site-bento__t--feature{flex-direction:column;align-items:flex-start;gap:.55rem}
.site-bento__chip{position:absolute;top:.9rem;right:.9rem;font-size:.64rem;font-weight:700;letter-spacing:.08em;
  text-transform:uppercase;color:#0d0d10;background:var(--akzent,#7c87ff);border-radius:99px;padding:.3rem .6rem}
.site-bento__ico{width:42px;height:42px;border-radius:11px;display:grid;place-items:center;
  background:color-mix(in srgb,var(--akzent,#7c87ff) 14%,transparent);
  border:1px solid color-mix(in srgb,var(--akzent,#7c87ff) 30%,transparent);color:var(--akzent,#7c87ff)}
.site-bento__ico svg{width:22px;height:22px}
.site-bento__t--feature b{font-size:1.02rem;color:#f4f4f5}
.site-bento__t--feature small{font-size:.82rem;line-height:1.5;color:#a1a1aa}

/* Zitat */
.site-bento__t--zitat{flex-direction:column;align-items:flex-start;gap:.6rem;margin:0}
.site-bento__t--zitat blockquote{margin:0;font-size:1rem;line-height:1.5;color:#f4f4f5;font-weight:500}
.site-bento__t--zitat figcaption{font-size:.78rem;color:#a1a1aa}

/* Marken-Logos (Platzhalter — im Projekt echte SVG-Logos einsetzen) */
.site-bento__t--logos{flex-wrap:wrap;align-items:center;gap:.5rem}
.site-bento__t--logos span{font-size:.78rem;font-weight:700;letter-spacing:.06em;color:#a1a1aa;
  border:1px solid rgba(255,255,255,.14);border-radius:99px;padding:.4rem .8rem;white-space:nowrap}

/* Handy: Achse data-mstapel — alles untereinander oder zwei Spalten */
@media (max-width:760px){
  .site-bento__in{grid-auto-rows:minmax(120px,auto)}
  .site-bento[data-mstapel="eins"] .site-bento__in{grid-template-columns:1fr;grid-template-areas:"k1" "k2" "k3" "k4"}
  .site-bento[data-mstapel="zwei"] .site-bento__in{grid-template-columns:1fr 1fr;grid-template-areas:"k1 k1" "k2 k3" "k4 k4"}
  .site-bento__k1{min-height:220px}
}
@media (prefers-reduced-motion:reduce){
  .site-bento__k,.site-bento__cta,.site-bento__pfeil{transition:none}
  .site-bento__k:hover{transform:none}
  .site-bento__cta:hover,.site-bento__cta:focus-visible{transform:none}
  .site-bento__cta:hover .site-bento__pfeil,.site-bento__cta:focus-visible .site-bento__pfeil{transform:none}
}
</style>

Animierte Headline — zum Einbetten

Pol 1 · Craft Anlass: bestehende H1/H2 aufwerten Achsen: Effekt-Ziel · Effekt

Die fünf Titel-Effekte des Split-Heros als Einzelteil für jede bestehende Überschrift: Klasse he-titel + data-Attribute auf die H1/H2 setzen, Style und Script dazu — fertig. Der Code bringt bewusst keine Schriftgröße und keine Farbe mit, er erbt beides von deiner Seite (nur das Zielwort färbt sich über --akzent). Gleiche Regeln wie im Hero: Rotierend läuft nur aufs letzte Wort, „Rollen" gibt es nicht für ganze Sätze; bei prefers-reduced-motion bleibt der Titel statisch, Screenreader lesen immer den vollen Satz.

Küchen, die millimetergenau sitzen.

Effekt auf
Effekt
<!-- Klasse + data-Attribute auf deine bestehende Überschrift setzen (h1, h2 oder p):
     data-effekt = rotierend | schreibmaschine | ausbruch | sprung | rollen  (einmal beim Laden; rotierend in Schleife)
     data-ziel   = wort | satz   (rotierend immer letztes Wort; rollen nur fürs Wort sinnvoll)
     data-worte  = "Wort1, Wort2, …"   (nur rotierend: Wechsel-Begriffe, erstes = Startwort) -->
<h2 class="he-titel" data-bake data-effekt="rotierend" data-ziel="wort" data-worte="sitzen., passen., überzeugen.">Küchen, die millimetergenau sitzen.</h2>

<style>
/* Bringt bewusst KEINE Schriftgroesse/-farbe mit — die Headline erbt beides von deiner Seite. */
.he-titel .hw{display:inline-block;white-space:nowrap}
.he-titel .hl{display:inline-block}
.he-titel .zw{color:var(--akzent,#7c87ff)}
.he-titel[data-effekt="ausbruch"] .hl{opacity:0;transform:translateY(16px) scale(.6);filter:blur(5px)}
.he-titel[data-effekt="ausbruch"] .hl.an{opacity:1;transform:none;filter:none;
  transition:opacity .35s ease,transform .5s cubic-bezier(.34,1.56,.64,1),filter .35s ease}
.he-titel[data-effekt="sprung"] .hw{opacity:0;transform:translateY(1.1em)}
.he-titel[data-effekt="sprung"] .hw.an{opacity:1;transform:none;
  transition:opacity .3s ease,transform .55s cubic-bezier(.3,1.6,.45,1)}
.he-titel[data-effekt="rollen"] .hw{perspective:700px}
.he-titel[data-effekt="rollen"] .hl{opacity:0;transform:rotateX(-92deg);transform-origin:50% 100%}
.he-titel[data-effekt="rollen"] .hl.an{opacity:1;transform:none;
  transition:opacity .3s ease,transform .5s cubic-bezier(.34,1.3,.5,1)}
.he-tw{display:inline-grid}
.he-tw>span{grid-area:1/1}
.he-tw-ghost{visibility:hidden}
.he-caret{display:inline-block;width:2px;height:.9em;margin-left:2px;vertical-align:-.06em;
  background:var(--akzent,#7c87ff);animation:he-caret 1s steps(2) infinite}
@keyframes he-caret{50%{opacity:0}}
.he-rot{display:inline-grid;text-align:left;vertical-align:bottom;overflow:hidden}
.he-rot .w{grid-area:1/1;color:var(--akzent,#7c87ff);white-space:nowrap;
  opacity:0;transform:translateY(.6em);transition:opacity .4s ease,transform .5s cubic-bezier(.34,1.4,.64,1)}
.he-rot .w.an{opacity:1;transform:none}
.he-rot .w.ab{opacity:0;transform:translateY(-.6em);transition:opacity .35s ease,transform .4s ease}
@media (prefers-reduced-motion:reduce){
  .he-caret{animation:none}
  .he-titel .hl,.he-titel .hw,.he-rot .w{opacity:1;transform:none;filter:none;transition:none}
}
</style>

<script>
/* Animierte Headline (einbettbar): liest data-effekt/data-ziel/data-worte direkt am Element,
   läuft einmal beim Laden und reagiert auf Attribut-Änderungen (MutationObserver).
   Screenreader lesen immer den vollen Satz (aria-label); bei prefers-reduced-motion bleibt der Titel statisch. */
(function(){
  var REDUCE=matchMedia('(prefers-reduced-motion: reduce)').matches;
  document.querySelectorAll('.he-titel').forEach(function(h){
    var orig=h.textContent.trim();
    var timer=[];
    function stop(){ timer.forEach(clearTimeout); timer=[]; if(h._rot){clearInterval(h._rot);h._rot=null;} }
    function T(fn,ms){ timer.push(setTimeout(fn,ms)); }
    function el(tag,cls,txt){ var e=document.createElement(tag); if(cls)e.className=cls; if(txt!=null)e.textContent=txt; return e; }
    /* Text in Wort-Gruppen (.hw) mit Buchstaben (.hl) zerlegen; Abstände bleiben echte Leerzeichen */
    function zerlege(ziel,buchstaben){
      h.textContent='';
      var worte=orig.split(' ');
      var start=(ziel==='satz')?0:worte.length-1;
      worte.forEach(function(wort,i){
        if(i<start){ h.appendChild(document.createTextNode(wort)); }
        else{
          var w=el('span','hw'+(ziel==='wort'?' zw':''));
          if(buchstaben){ wort.split('').forEach(function(c){ w.appendChild(el('span','hl',c)); }); }
          else{ w.textContent=wort; }
          h.appendChild(w);
        }
        if(i<worte.length-1) h.appendChild(document.createTextNode(' '));
      });
    }
    function baue(){
      stop();
      var eff=h.getAttribute('data-effekt')||'rotierend';
      var ziel=h.getAttribute('data-ziel')||'wort';
      if(eff==='rotierend') ziel='wort';   /* Schleife nur aufs letzte Wort — ein rotierender Satz wäre nicht lesbar */
      h.setAttribute('aria-label',orig);
      if(REDUCE){ h.textContent=orig; return; }
      var worte=orig.split(' ');
      if(eff==='rotierend'){
        var liste=(h.getAttribute('data-worte')||worte[worte.length-1]).split(',').map(function(s){return s.trim()}).filter(Boolean);
        h.textContent='';
        h.appendChild(document.createTextNode(worte.slice(0,-1).join(' ')+' '));
        var slot=el('span','he-rot');
        liste.forEach(function(wtxt,i){ slot.appendChild(el('span','w'+(i===0?' an':''),wtxt)); });
        h.appendChild(slot);
        if(liste.length<2) return;
        var ws=slot.querySelectorAll('.w'), i=0;
        h._rot=setInterval(function(){
          var cur=ws[i], nxt=ws[(i+1)%ws.length];
          cur.classList.remove('an'); cur.classList.add('ab');
          nxt.classList.add('an');
          setTimeout(function(){cur.classList.remove('ab');},450);
          i=(i+1)%ws.length;
        },2200);
      }
      else if(eff==='schreibmaschine'){
        h.textContent='';
        var start=(ziel==='satz')?'':worte.slice(0,-1).join(' ')+' ';
        var zieltext=(ziel==='satz')?orig:worte[worte.length-1];
        if(start) h.appendChild(document.createTextNode(start));
        var tw=el('span','he-tw'+(ziel==='wort'?' zw':''));
        var ghost=el('span','he-tw-ghost',zieltext); ghost.setAttribute('aria-hidden','true');
        var typ=el('span','he-tw-typ'); typ.setAttribute('aria-hidden','true');
        var caret=el('span','he-caret');
        typ.appendChild(document.createTextNode('')); typ.appendChild(caret);
        tw.appendChild(ghost); tw.appendChild(typ); h.appendChild(tw);
        var n=0;
        (function tippe(){
          if(n<=zieltext.length){ typ.firstChild.nodeValue=zieltext.slice(0,n); n++; T(tippe,55); }
          else{ T(function(){caret.remove();},1600); }
        })();
      }
      else{
        var buchstaben=(eff==='ausbruch'||eff==='rollen');
        zerlege(ziel,buchstaben);
        var teile=buchstaben?h.querySelectorAll('.hl'):h.querySelectorAll('.hw');
        var takt=(eff==='sprung')?90:34;
        teile.forEach(function(t,i){ T(function(){t.classList.add('an');},120+i*takt); });
      }
    }
    baue();
    new MutationObserver(function(muts){
      if(muts.some(function(m){ return ['data-effekt','data-ziel','data-worte'].indexOf(m.attributeName)>-1; })) baue();
    }).observe(h,{attributes:true});
  });
})();
</script>

Bauteile

Hero-Bauteile

Jedes Element des Split-Heros einzeln — zum Einbetten in einen bestehenden Hero oder jede andere Sektion. Die Codes bringen nur ihre eigene Optik mit (Klassen-Präfix he-, Akzentfarbe über --akzent), erben die Schrift der Zielseite und erzwingen kein Layout. Individuelle Texte trägst du direkt im Fenster ein — Demo und Kopier-Code übernehmen sie sofort.

Label-Fläche (Über-Überschrift)

Pol 2 · Klarheit Anlass: über der H1

Farbig hinterlegtes Uppercase-Label (Vorbild: Hauszeit). Text unten eintragen — Demo und Kopier-Code übernehmen ihn. Erbt die Schrift der Zielseite.

Ihr Betrieb für die ganze Region

Text
<p class="he-label">Ihr Betrieb für die ganze Region</p>

<style>
.he-label{display:inline-block;margin:0;padding:.45rem .9rem;background:var(--akzent, #7c87ff);color:#0d0d10;
  border-radius:4px;font-size:.74rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase}
</style>

Strich-Label (Über-Überschrift)

Pol 2 · Klarheit Anlass: über der H1

Uppercase-Label mit Akzent-Strich davor (::before) — ordnet den Titel ein, ohne ihm die Show zu stehlen. Vorbild: Bernstein.

Meisterbetrieb

Text
<p class="he-strich">Meisterbetrieb</p>

<style>
.he-strich{display:inline-flex;align-items:center;gap:.6em;margin:0;font-size:.74rem;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:var(--akzent, #7c87ff)}
.he-strich::before{content:"";width:26px;height:1px;background:var(--akzent, #7c87ff)}
</style>

Glas-Badge mit Glow-Dot

Pol 1 · Craft Anlass: Status-Pill im Hero

Milchglas-Pille mit pulsierendem Akzent-Punkt — signalisiert Aktivität/Frische; gedacht für dunkle oder bildige Flächen. Vorbild: NDS. Puls hält bei prefers-reduced-motion an.

Jetzt Termine frei
Text
<span class="he-badge"><span class="dot" aria-hidden="true"></span>Jetzt Termine frei</span>

<style>
/* Milchglas-Pille — gedacht für dunkle oder bildige Flächen */
.he-badge{display:inline-flex;align-items:center;gap:.6em;padding:.5rem 1rem;border-radius:100px;
  background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.16);
  -webkit-backdrop-filter:blur(16px) saturate(1.5);backdrop-filter:blur(16px) saturate(1.5);
  font-size:.72rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#f4f4f5;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.14)}
.he-badge .dot{width:8px;height:8px;border-radius:50%;background:var(--akzent, #7c87ff);
  animation:he-puls 2.2s ease-in-out infinite}
@keyframes he-puls{
  0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--akzent, #7c87ff) 60%,transparent)}
  50%{box-shadow:0 0 0 6px transparent}}
@media (prefers-reduced-motion:reduce){.he-badge .dot{animation:none}}
</style>

CTA-Button

Pol 2 · Klarheit Anlass: Primär-/Zweit-Button

Der Hero-Button einzeln: Beschriftung frei, Stil (Akzent/Ghost), Form (abgerundet/eckig/Pill) und Pfeil über data-Achsen. Ghost erbt die Textfarbe der Zielseite.

Beschriftung
Stil
Form
Pfeil
<!-- Achsen: data-stil = primaer | ghost · data-form = abgerundet | eckig | pill · data-pfeil = mit | ohne -->
<a href="#" class="he-btn" data-bake data-stil="primaer" data-form="abgerundet" data-pfeil="mit">Termin anfragen <span class="he-btn__pfeil" aria-hidden="true">→</span></a>

<style>
.he-btn{display:inline-flex;align-items:center;gap:.5rem;padding:.8rem 1.5rem;border-radius:12px;
  background:var(--akzent, #7c87ff);color:#0d0d10;font-weight:700;font-size:.95rem;text-decoration:none;
  transition:transform .2s ease,box-shadow .2s ease}
.he-btn__pfeil{transition:transform .25s cubic-bezier(.4,0,.2,1)}
.he-btn:hover,.he-btn:focus-visible{transform:translateY(-2px);box-shadow:0 10px 26px -10px var(--akzent, #7c87ff)}
.he-btn:focus-visible{outline:2px solid var(--akzent, #7c87ff);outline-offset:2px}
.he-btn:hover .he-btn__pfeil,.he-btn:focus-visible .he-btn__pfeil{transform:translateX(4px)}
.he-btn[data-form="eckig"]{border-radius:0}
.he-btn[data-form="pill"]{border-radius:999px}
.he-btn[data-stil="ghost"]{background:transparent;color:inherit;border:1px solid rgba(128,128,140,.45)}
.he-btn[data-stil="ghost"]:hover,.he-btn[data-stil="ghost"]:focus-visible{box-shadow:none;
  background:rgba(128,128,140,.12);border-color:rgba(128,128,140,.7)}
.he-btn[data-pfeil="ohne"] .he-btn__pfeil{display:none}
@media (prefers-reduced-motion:reduce){
  .he-btn,.he-btn__pfeil{transition:none}
  .he-btn:hover,.he-btn:focus-visible{transform:none}
}
</style>

Trust: Kunden-Avatare

Pol 2 · Klarheit Anlass: Vertrauen unterm CTA

Überlappende Avatar-Kreise + Kundenzahl (Vorbild: Bernstein). Avatare als Verlauf angedeutet — im Projekt echte Fotos einsetzen.

120+ zufriedene Kunden
Text
<div class="he-kunden">
  <span class="avatare" aria-hidden="true"><i></i><i></i><i></i><i></i></span>
  <span>120+ zufriedene Kunden</span>
</div>

<style>
/* Avatare hier als Verlauf — im Projekt echte Kundenfotos als background-image auf die <i> setzen */
.he-kunden{display:inline-flex;align-items:center;gap:.9rem;font-size:.88rem}
.he-kunden .avatare{display:flex}
.he-kunden .avatare i{width:34px;height:34px;border-radius:50%;border:2px solid rgba(0,0,0,.35);margin-left:-10px;display:block}
.he-kunden .avatare i:first-child{margin-left:0}
.he-kunden .avatare i:nth-child(1){background:linear-gradient(135deg,#5b62c9,#383d86)}
.he-kunden .avatare i:nth-child(2){background:linear-gradient(135deg,var(--akzent, #7c87ff),#5b62c9)}
.he-kunden .avatare i:nth-child(3){background:linear-gradient(135deg,#42466e,#6e6e8a)}
.he-kunden .avatare i:nth-child(4){background:linear-gradient(135deg,#9aa2ff,var(--akzent, #7c87ff))}
</style>

Trust: Team-Initialen

Pol 2 · Klarheit Anlass: Vertrauen unterm CTA

Initialen-Kreise statt Fotos (Vorbild: Nördlicht) — umgeht fehlendes Bildmaterial. Initialen mit Komma trennen.

Ihr Team vor Ort
Initialen (mit Komma)
Text
<div class="he-team">
  <span class="inits" aria-hidden="true"><i>AM</i><i>TK</i><i>LF</i></span>
  <span>Ihr Team vor Ort</span>
</div>

<style>
.he-team{display:inline-flex;align-items:center;gap:.9rem;font-size:.88rem}
.he-team .inits{display:inline-flex;gap:.55rem}
.he-team .inits i{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;
  font-size:.74rem;font-weight:800;font-style:normal;color:#fff;
  background:linear-gradient(135deg,var(--akzent, #7c87ff),#42466e)}
</style>

Trust: Kennzahlen-Zeile

Pol 2 · Klarheit Anlass: Zahlen unterm CTA

Drei Kennzahlen in einer Zeile — Zahl fett, Zusatzzeichen (+/★) in Akzentfarbe, Beschriftung gedämpft. Format je Feld: erst die Zahl, dann die Beschriftung (z. B. 15+ Jahre Erfahrung). Mit Animation „Zählen" rollen die Zahlen von 0 auf ihren Wert hoch, sobald die Zeile sichtbar wird (Kommazahlen wie 4,9 zählen mit Nachkommastelle; die Breite bleibt eingefroren, nichts wackelt). Bei prefers-reduced-motion steht sofort der Endwert.

15+ Jahre Erfahrung 800+ Projekte 4,9 Bewertung
Kennzahl 1
Kennzahl 2
Kennzahl 3
Animation
<!-- data-zaehlen = aus | an  (an: Zahlen zählen beim Sichtbarwerden von 0 hoch) -->
<div class="he-zahlen" data-bake data-zaehlen="aus">
  <span><b>15<i>+</i></b> Jahre Erfahrung</span>
  <span><b>800<i>+</i></b> Projekte</span>
  <span><b>4,9<i>★</i></b> Bewertung</span>
</div>

<style>
.he-zahlen{display:inline-flex;flex-wrap:wrap;gap:.5rem 1.5rem;font-size:.8rem}
.he-zahlen span{display:inline-flex;align-items:baseline;gap:.4rem;opacity:.75}
.he-zahlen b{font-size:1.06rem;font-weight:800;opacity:1}
.he-zahlen b i{font-style:normal;color:var(--akzent,#7c87ff)}
</style>

<script>
/* Kennzahlen-Zähler (data-zaehlen="an"): zählt jede Zahl von 0 hoch, sobald die Zeile sichtbar wird.
   Deutsche Kommazahlen (4,9) laufen mit gleicher Stellenzahl; die Breite wird vorher eingefroren,
   damit die Beschriftungen nicht wandern. Bei prefers-reduced-motion steht sofort der Endwert. */
(function(){
  var REDUCE=matchMedia('(prefers-reduced-motion: reduce)').matches;
  document.querySelectorAll('.he-zahlen').forEach(function(zeile){
    var frames=[];
    function stopp(){ frames.forEach(cancelAnimationFrame); frames=[]; }
    function reset(){
      stopp();
      zeile.querySelectorAll('b').forEach(function(b){
        var roh=b.getAttribute('data-wert');
        if(roh) b.firstChild.nodeValue=roh;
      });
    }
    function zaehle(){
      stopp();
      zeile.querySelectorAll('b').forEach(function(b){
        var roh=(b.getAttribute('data-wert')||b.firstChild.nodeValue).trim();
        b.setAttribute('data-wert',roh);
        var ziel=parseFloat(roh.replace(',','.'));
        if(isNaN(ziel)) return;
        var dez=(roh.split(',')[1]||'').length;
        b.style.display='inline-block';
        b.style.minWidth=b.offsetWidth+'px';   /* Breite einfrieren — nichts wackelt */
        if(REDUCE){ b.firstChild.nodeValue=roh; return; }
        var start=null, DAUER=1400;
        function tick(t){
          if(start===null) start=t;
          var f=Math.min(1,(t-start)/DAUER);
          f=1-Math.pow(1-f,3);                 /* ease-out — rollt weich aus */
          b.firstChild.nodeValue=(ziel*f).toFixed(dez).replace('.',',');
          if(f<1) frames.push(requestAnimationFrame(tick));
        }
        frames.push(requestAnimationFrame(tick));
      });
    }
    function anAus(){
      if(zeile.getAttribute('data-zaehlen')!=='an'){ reset(); return; }
      if('IntersectionObserver' in window){
        var io=new IntersectionObserver(function(es){
          es.forEach(function(e){ if(e.isIntersecting){ zaehle(); io.disconnect(); } });
        },{threshold:.4});
        io.observe(zeile);
      } else zaehle();
    }
    anAus();
    new MutationObserver(function(m){
      if(m.some(function(x){ return x.attributeName==='data-zaehlen'; })) anAus();
    }).observe(zeile,{attributes:true});
  });
})();
</script>