Design · Bausteine-Dossier

Kategorie

Karten

Vom ruhigen Leistungs-Teaser bis zur auffälligen Glas- oder Eck-Glow-Karte. Jeder Baustein ist in sich abgeschlossen (eigenes scoped CSS), nutzt var(--akzent, #7c87ff) als überschreibbare Akzentfarbe und ist direkt einsetzbar.

Service-Karte · Akzentkante wächst (scaleY)

Pol 2 · Klarheit Anlass: Leistungskarten

Ruhige Karte mit Lift; die linke Akzentleiste wächst per scaleY von oben ein. Vorbild: Nördlicht (Service-/Value-Cards). Reagiert auch auf Tastatur-Fokus (:focus-within).

Küchenmontage

Anschluss von Spüle, Geräten und Arbeitsplatte – fachgerecht.

<div class="fx-svc-a">
  <h3>Küchenmontage</h3>
  <p>Anschluss von Spüle, Geräten und Arbeitsplatte – fachgerecht.</p>
</div>

<style>
.fx-svc-a{position:relative;width:260px;overflow:hidden;background:#17171b;border:1px solid #26262c;
  border-radius:14px;padding:1.4rem 1.5rem;color:#e9e9ee;cursor:pointer;
  transition:transform .35s ease,box-shadow .35s ease,border-color .35s ease}
.fx-svc-a::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--akzent,#7c87ff);
  transform:scaleY(0);transform-origin:top;transition:transform .35s ease}
.fx-svc-a:hover,.fx-svc-a:focus-within{transform:translateY(-3px);border-color:#3a3a45;box-shadow:0 14px 30px -18px rgba(0,0,0,.7)}
.fx-svc-a:hover::before,.fx-svc-a:focus-within::before{transform:scaleY(1)}
.fx-svc-a h3{margin:0 0 .35rem;font-size:1.05rem}
.fx-svc-a p{margin:0;font-size:.88rem;color:#a1a1aa;line-height:1.5}
@media (prefers-reduced-motion:reduce){.fx-svc-a,.fx-svc-a::before{transition:none}}
</style>

Service-Karte · Akzentkante fährt langsam ein

Pol 2 · Klarheit Anlass: Leistungskarten

Wie die vorige, aber die Leiste fährt deutlich langsamer (0,85 s, weiche Kurve) ein – wirkt edler, weniger „schnappig". Vorbild: Hauszeit (.service-card).

Möbelmontage

Schrank, Bett, Regal – sauber und stabil aufgebaut.

<div class="fx-svc-b">
  <h3>Möbelmontage</h3>
  <p>Schrank, Bett, Regal – sauber und stabil aufgebaut.</p>
</div>

<style>
.fx-svc-b{position:relative;width:260px;overflow:hidden;background:#17171b;border:1px solid #26262c;
  border-radius:14px;padding:1.4rem 1.5rem;color:#e9e9ee;cursor:pointer;
  transition:transform .5s cubic-bezier(.22,1,.36,1),box-shadow .5s ease}
.fx-svc-b::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--akzent,#7c87ff);
  transform:scaleY(0);transform-origin:top;transition:transform .85s cubic-bezier(.22,1,.36,1)}
.fx-svc-b:hover,.fx-svc-b:focus-within{transform:translateY(-2px);box-shadow:0 12px 26px -20px rgba(0,0,0,.6)}
.fx-svc-b:hover::before,.fx-svc-b:focus-within::before{transform:scaleY(1)}
.fx-svc-b h3{margin:0 0 .35rem;font-size:1.05rem}
.fx-svc-b p{margin:0;font-size:.88rem;color:#a1a1aa;line-height:1.5}
@media (prefers-reduced-motion:reduce){.fx-svc-b,.fx-svc-b::before{transition:none}}
</style>

Service-Karte · Icon-Kachel + Lift + Akzent-Rand

Pol 2 · Klarheit Anlass: Leistungskarten

Icon-Kachel oben; beim Hover hebt die Karte an, der Rand wechselt zur Akzentfarbe und die Kachel füllt sich. Vorbild: Bernstein-Montageservice (.karte).

Badmontage

Waschtisch, WC und Armaturen sauber installiert.

<div class="fx-svc-c">
  <span class="fx-svc-c-icon" aria-hidden="true">
    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">…</svg>
  </span>
  <h3>Badmontage</h3>
  <p>Waschtisch, WC und Armaturen sauber installiert.</p>
</div>

<style>
.fx-svc-c{width:260px;background:#17171b;border:1px solid #26262c;border-radius:14px;
  padding:1.4rem 1.5rem;color:#e9e9ee;cursor:pointer;
  transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}
.fx-svc-c:hover,.fx-svc-c:focus-within{transform:translateY(-3px);border-color:var(--akzent,#7c87ff);
  box-shadow:0 14px 30px -20px rgba(0,0,0,.7)}
.fx-svc-c-icon{width:46px;height:46px;border-radius:11px;display:grid;place-items:center;
  margin-bottom:.85rem;background:#26262c;color:#a1a1aa;
  transition:background .25s ease,color .25s ease}
.fx-svc-c:hover .fx-svc-c-icon,.fx-svc-c:focus-within .fx-svc-c-icon{background:var(--akzent,#7c87ff);color:#0f0f12}
.fx-svc-c-icon svg{width:24px;height:24px}
.fx-svc-c h3{margin:0 0 .3rem;font-size:1.05rem}
.fx-svc-c p{margin:0;font-size:.88rem;color:#a1a1aa;line-height:1.5}
@media (prefers-reduced-motion:reduce){.fx-svc-c,.fx-svc-c-icon{transition:none}}
</style>

Projekt-/Bild-Karte

Pol 1 · Craft Anlass: Referenz-/Projekt-Galerie

Bild zoomt beim Hover sanft (scale(1.04)), die ganze Karte hebt an, ein schwebendes Glas-Badge sitzt oben links. Mit .static ohne Hover (z. B. nicht klickbar). Vorbild: Hauszeit / NDS. Bild hier als Verlauf statt <img> – DSGVO/offline-sicher.

<a href="#" class="fx-proj">
  <div class="fx-proj-img">
    <!-- statt Verlauf hier ein <img> in .fx-proj-pic einsetzen -->
    <div class="fx-proj-pic"></div>
    <span class="fx-proj-badge">Referenz</span>
  </div>
  <div class="fx-proj-body"><h3>Altbau-Sanierung</h3><p>Komplette Modernisierung über drei Etagen.</p></div>
</a>
<!-- Statisch: <a class="fx-proj static"> … -->

<style>
.fx-proj{width:280px;background:#16161a;border:1px solid #26262c;border-radius:14px;overflow:hidden;
  cursor:pointer;color:#e9e9ee;display:flex;flex-direction:column;text-decoration:none;
  transition:transform .35s ease,border-color .35s ease,box-shadow .35s ease}
.fx-proj:hover,.fx-proj:focus-within{transform:translateY(-4px);border-color:#3a3a45;
  box-shadow:0 20px 44px -26px rgba(0,0,0,.8)}
.fx-proj-img{position:relative;aspect-ratio:16/9;overflow:hidden;
  background:linear-gradient(135deg,#3b3b52,#1c1c2b)}
.fx-proj-img .fx-proj-pic{position:absolute;inset:0;
  background:linear-gradient(135deg,#3b3b52,#1c1c2b);transition:transform .6s ease}
.fx-proj:hover .fx-proj-pic,.fx-proj:focus-within .fx-proj-pic{transform:scale(1.04)}
.fx-proj-badge{position:absolute;top:12px;left:12px;font-size:.68rem;font-weight:600;letter-spacing:.06em;
  text-transform:uppercase;color:#f4f4f5;padding:.32rem .65rem;border-radius:99px;
  background:rgba(15,15,18,.55);border:1px solid rgba(255,255,255,.18);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.fx-proj-body{padding:.85rem 1.1rem 1.1rem}
.fx-proj-body h3{margin:0 0 .25rem;font-size:1.02rem}
.fx-proj-body p{margin:0;font-size:.85rem;color:#a1a1aa;line-height:1.5}
.fx-proj.static{cursor:default}
.fx-proj.static:hover,.fx-proj.static:focus-within{transform:none;border-color:#26262c;box-shadow:none}
.fx-proj.static:hover .fx-proj-pic,.fx-proj.static:focus-within .fx-proj-pic{transform:none}
@media (prefers-reduced-motion:reduce){.fx-proj,.fx-proj-pic{transition:none}}
</style>

Liquid-Glass-Karte

Pol 1 · Craft Anlass: Bewertungen, Highlights

Mattglas mit Blur + Sättigung, gestapelte inset-Highlights, oberer Licht-Schimmer (::before) und diagonaler Shine-Sweep beim Hover (::after). Vorbild: Hauszeit (.review-card). Wirkt am besten vor leicht gemustertem Hintergrund.

★★★★★ Top-Arbeit

Termin pünktlich, sauber gearbeitet, faire Abrechnung. Jederzeit wieder.

<div class="fx-glass">
  <h3>★★★★★ Top-Arbeit</h3>
  <p>Termin pünktlich, sauber gearbeitet, faire Abrechnung. Jederzeit wieder.</p>
</div>

<style>
.fx-glass{position:relative;width:280px;border-radius:16px;padding:1.5rem 1.5rem 1.4rem;overflow:hidden;
  color:#f4f4f5;cursor:pointer;
  background:linear-gradient(180deg,rgba(255,255,255,.10) 0%,rgba(255,255,255,.03) 50%,rgba(255,255,255,.06) 100%);
  border:1px solid rgba(255,255,255,.16);
  -webkit-backdrop-filter:blur(22px) saturate(170%);backdrop-filter:blur(22px) saturate(170%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.30),inset 0 -1px 0 rgba(255,255,255,.08),
    0 10px 28px rgba(0,0,0,.35),0 22px 60px rgba(0,0,0,.25);
  transition:transform .3s ease,box-shadow .3s ease,border-color .3s ease}
.fx-glass::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:1;
  background:radial-gradient(ellipse 90% 35% at 50% 0%,rgba(255,255,255,.30) 0%,transparent 70%)}
.fx-glass::after{content:"";position:absolute;top:0;left:-120%;width:80%;height:100%;pointer-events:none;z-index:2;
  background:linear-gradient(115deg,transparent 0%,rgba(255,255,255,.40) 50%,transparent 100%);
  transition:left .9s ease}
.fx-glass:hover,.fx-glass:focus-within{transform:translateY(-3px);border-color:rgba(255,255,255,.30);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.40),inset 0 -1px 0 rgba(255,255,255,.12),
    0 16px 38px rgba(0,0,0,.4),0 30px 70px rgba(0,0,0,.3)}
.fx-glass:hover::after,.fx-glass:focus-within::after{left:120%}
.fx-glass h3,.fx-glass p{position:relative;z-index:3;margin:0}
.fx-glass h3{font-size:1.05rem;margin-bottom:.4rem}
.fx-glass p{font-size:.88rem;color:#d6d6df;line-height:1.55}
@media (prefers-reduced-motion:reduce){.fx-glass,.fx-glass::after{transition:none}}
</style>

Karte mit Eck-Glow

Pol 1 · Craft Anlass: Angebote, Pakete

Ein radialer Akzent-Blob in der oberen Ecke blendet beim Hover ein und skaliert leicht – gibt der Karte Tiefe ohne Bild. Vorbild: Silver Mountain (.offer-card + .offer-glow).

01

Komplett-Paket

Planung, Material und Montage aus einer Hand – zum Festpreis.

<div class="fx-glow">
  <span class="fx-glow-blob" aria-hidden="true"></span>
  <span class="fx-glow-num">01</span>
  <h3>Komplett-Paket</h3>
  <p>Planung, Material und Montage aus einer Hand – zum Festpreis.</p>
</div>

<style>
.fx-glow{position:relative;width:260px;background:#16161a;border:1px solid #26262c;border-radius:14px;
  padding:1.5rem 1.5rem;color:#e9e9ee;overflow:hidden;cursor:pointer;
  transition:transform .3s ease,border-color .3s ease,box-shadow .3s ease}
.fx-glow-blob{position:absolute;top:-90px;right:-90px;width:240px;height:240px;border-radius:50%;
  pointer-events:none;filter:blur(40px);opacity:0;
  background:radial-gradient(circle,var(--akzent,#7c87ff) 0%,transparent 70%);
  transition:opacity .3s ease,transform .3s ease}
.fx-glow:hover,.fx-glow:focus-within{transform:translateY(-4px);border-color:var(--akzent,#7c87ff);
  box-shadow:0 24px 60px rgba(0,0,0,.5)}
.fx-glow:hover .fx-glow-blob,.fx-glow:focus-within .fx-glow-blob{opacity:.45;transform:scale(1.2)}
.fx-glow-num{position:relative;z-index:1;display:block;font-size:1.6rem;font-weight:700;
  color:var(--akzent,#7c87ff);margin-bottom:.5rem;line-height:1}
.fx-glow h3{position:relative;z-index:1;margin:0 0 .35rem;font-size:1.05rem}
.fx-glow p{position:relative;z-index:1;margin:0;font-size:.88rem;color:#a1a1aa;line-height:1.5}
@media (prefers-reduced-motion:reduce){.fx-glow,.fx-glow-blob{transition:none}}
</style>

Team-/Initialen-Avatar-Kachel

Pol 2 · Klarheit Anlass: Team-Seite

Runder Gradient-Avatar mit Initialen statt Foto – kein Bild-Asset nötig, sofort einsetzbar. Vorbild: Nördlicht (.t-av / Team-Kachel).

MR

Max Reuter

Projektleitung

<div class="fx-team">
  <div class="fx-team-av">MR</div>
  <h4>Max Reuter</h4>
  <p>Projektleitung</p>
</div>

<style>
.fx-team{width:170px;text-align:center;padding:1.1rem .8rem;background:#16161a;border:1px solid #26262c;
  border-radius:14px}
.fx-team-av{width:52px;height:52px;border-radius:50%;margin:0 auto .6rem;display:grid;place-items:center;
  color:#0f0f12;font-weight:800;font-size:.95rem;letter-spacing:.02em;
  background:linear-gradient(135deg,var(--akzent,#7c87ff),#3b3b52)}
.fx-team h4{margin:0 0 .1rem;font-size:.92rem}
.fx-team p{margin:0;font-size:.76rem;color:#a1a1aa}
</style>

Tag/Chip-Element

Pol 2 · Klarheit Anlass: Meta-Labels, Filter

Kleine Pill für Meta-Labels (Kategorie, Ort, Status). Neutrale und Akzent-Variante (.akzent). Vorbild: NDS (.proj-tag).

Innenausbau Vor Ort Verfügbar
<span class="fx-chip">Innenausbau</span>
<span class="fx-chip">Vor Ort</span>
<span class="fx-chip akzent">Verfügbar</span>

<style>
.fx-chip{font-size:.74rem;font-weight:600;letter-spacing:.01em;color:#a1a1aa;
  padding:.32rem .7rem;border-radius:99px;background:rgba(255,255,255,.05);border:1px solid #26262c}
.fx-chip.akzent{color:var(--akzent,#7c87ff);background:#7c87ff14;border-color:#3a3a72}
</style>

Continent-Pop-Karte

Pol 1 · Craft Anlass: Galerie-Raster, Portfolio

Beim Hover vergrößert sich die Karte (scale(1.10)) und „poppt" über ihre Nachbarn – der z-index wird mit Delay zurückgesetzt, damit die Karte beim Wegfahren noch oben bleibt, bis sie geschrumpft ist. Vorbild: Silver Mountain (.continent-card). Auf Touch ohne Hover; dort besser ein einfaches Raster.

A

Projekt ARegion Nord

Fertig · 2024

B

Projekt BRegion Süd

Fertig · 2025

C

Projekt CRegion West

Laufend

<div class="fx-pop-row">
  <div class="fx-pop">
    <div class="fx-pop-photo"><span>A</span></div>
    <div class="fx-pop-info"><h4>Projekt A<em>Region Nord</em></h4><p>Fertig · 2024</p></div>
  </div>
  <!-- weitere .fx-pop … -->
</div>

<style>
.fx-pop-row{display:flex;gap:14px}
.fx-pop{position:relative;width:130px;background:#16161a;border:1px solid #26262c;overflow:hidden;
  border-radius:12px;cursor:default;
  transition:transform 280ms cubic-bezier(.22,.61,.36,1),border-color .3s ease,box-shadow .3s ease,z-index 0s linear 280ms}
.fx-pop:hover,.fx-pop:focus-within{transform:scale(1.10);border-color:var(--akzent,#7c87ff);
  box-shadow:0 22px 60px rgba(0,0,0,.55);z-index:5;transition-delay:0s}
.fx-pop-photo{aspect-ratio:1/1;overflow:hidden;
  background:radial-gradient(circle at 35% 30%,#3b3b52,transparent 60%),linear-gradient(160deg,#1c1c22,#0a0a0d)}
.fx-pop-photo span{display:grid;place-items:center;height:100%;font-size:1.6rem;font-weight:700;color:rgba(124,135,255,.5)}
.fx-pop-info{padding:.6rem .7rem}
.fx-pop-info h4{margin:0 0 .15rem;font-size:.85rem;text-transform:uppercase;letter-spacing:.02em}
.fx-pop-info h4 em{display:block;font-style:normal;color:var(--akzent,#7c87ff);font-size:.78rem}
.fx-pop-info p{margin:.4rem 0 0;padding-top:.4rem;border-top:1px solid #26262c;font-size:.68rem;color:#71717a;letter-spacing:.04em}
@media (prefers-reduced-motion:reduce){.fx-pop{transition:none}}
</style>

Roster-/Statistik-Karte

Pol 1 · Craft Anlass: Profil, Statistik-Übersicht

Nische, kompakt. Karte mit Shine-Streifen über die Fläche beim Hover und einer farbcodierten Record-Leiste unten (W/D/L in Grün/Gelb/Rot). Vorbild: Silver Mountain (.roster-card + .roster-record). Hier ohne Foto-Block dargestellt.

Team Alpha

Saison 2025 · Liga Nord

18Siege
4Remis
3Nieder.
<div class="fx-roster">
  <span class="fx-roster-shine" aria-hidden="true"></span>
  <div class="fx-roster-info"><h3>Team Alpha</h3><p>Saison 2025 · Liga Nord</p></div>
  <div class="fx-roster-record">
    <div class="fx-roster-stat fx-roster-win"><b>18</b><small>Siege</small></div>
    <div class="fx-roster-stat fx-roster-draw"><b>4</b><small>Remis</small></div>
    <div class="fx-roster-stat fx-roster-loss"><b>3</b><small>Nieder.</small></div>
  </div>
</div>

<style>
.fx-roster{position:relative;width:280px;overflow:hidden;display:flex;flex-direction:column;
  background:linear-gradient(180deg,rgba(255,255,255,.03) 0%,rgba(255,255,255,.008) 100%);
  border:1px solid #26262c;border-radius:14px;z-index:0;
  transition:transform .3s ease,border-color .3s ease,box-shadow .3s ease}
.fx-roster::before{content:"";position:absolute;top:0;left:0;width:3px;height:100%;z-index:2;
  background:linear-gradient(180deg,var(--akzent,#7c87ff),transparent)}
.fx-roster:hover,.fx-roster:focus-within{transform:translateY(-3px);border-color:var(--akzent,#7c87ff);
  box-shadow:0 18px 48px rgba(0,0,0,.5)}
.fx-roster-shine{position:absolute;top:0;left:-120%;width:80%;height:100%;pointer-events:none;z-index:3;
  background:linear-gradient(115deg,transparent 30%,rgba(255,255,255,.18) 48%,rgba(124,135,255,.22) 52%,transparent 70%);
  transition:left .85s cubic-bezier(.22,.61,.36,1)}
.fx-roster:hover .fx-roster-shine,.fx-roster:focus-within .fx-roster-shine{left:120%}
.fx-roster-info{padding:1.1rem 1.2rem .6rem}
.fx-roster-info h3{margin:0 0 .3rem;font-size:1.1rem;text-transform:uppercase;letter-spacing:.01em}
.fx-roster-info p{margin:0;font-size:.78rem;color:#a1a1aa}
.fx-roster-record{display:grid;grid-template-columns:repeat(3,1fr);gap:5px;padding:0 1rem 1rem;margin-top:auto}
.fx-roster-stat{text-align:center;padding:.55rem .2rem;border:1px solid #26262c;border-radius:8px;background:rgba(0,0,0,.25)}
.fx-roster-stat b{display:block;font-size:1.25rem;line-height:1;color:#e9e9ee}
.fx-roster-stat small{display:block;margin-top:.25rem;font-size:.6rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#71717a}
.fx-roster-win{border-color:rgba(74,222,128,.35);background:rgba(74,222,128,.06)}
.fx-roster-win b{color:#4ade80}
.fx-roster-draw{border-color:rgba(251,191,36,.35);background:rgba(251,191,36,.06)}
.fx-roster-draw b{color:#fbbf24}
.fx-roster-loss{border-color:rgba(248,113,113,.35);background:rgba(248,113,113,.06)}
.fx-roster-loss b{color:#f87171}
@media (prefers-reduced-motion:reduce){.fx-roster,.fx-roster-shine{transition:none}}
</style>

Event-/News-Karte mit Countdown

Pol 1 · Craft Anlass: Termin, Veranstaltung

Nische, kompakt. Flyer-Look mit Eyebrow-Tag, großem Titel und vier Countdown-Zellen. Vorbild: Silver Mountain (.event-card + Countdown-Grid). Die Zahlen sind hier statisch – ein kleiner Live-Countdown ist im Code unten optional ergänzt.

Demnächst

Tag der offenen Tür

01. September · 18:00 Uhr · vor Ort

12Tage
06Std
42Min
08Sek
<div class="fx-event" data-deadline="2026-09-01T18:00:00">
  <span class="fx-event-tag">Demnächst</span>
  <h3>Tag der <em>offenen Tür</em></h3>
  <p class="fx-event-meta">01. September · 18:00 Uhr · vor Ort</p>
  <div class="fx-event-cd">
    <div class="fx-event-cell"><b data-cd="days">12</b><small>Tage</small></div>
    <div class="fx-event-cell"><b data-cd="hours">06</b><small>Std</small></div>
    <div class="fx-event-cell"><b data-cd="mins">42</b><small>Min</small></div>
    <div class="fx-event-cell"><b data-cd="secs">08</b><small>Sek</small></div>
  </div>
</div>

<style>
.fx-event{position:relative;width:290px;text-align:center;border-radius:20px;padding:1.8rem 1.5rem 1.4rem;color:#f4f4f5;
  background:radial-gradient(600px 400px at 80% -10%,rgba(124,135,255,.12),transparent 55%),
    linear-gradient(180deg,#16161a 0%,#0a0a0d 100%);
  border:1px solid rgba(255,255,255,.08);
  box-shadow:0 20px 50px rgba(0,0,0,.45),0 0 0 1px rgba(124,135,255,.18);
  transition:transform .3s ease,border-color .3s ease,box-shadow .3s ease}
.fx-event:hover,.fx-event:focus-within{transform:translateY(-3px);border-color:rgba(124,135,255,.32);
  box-shadow:0 24px 60px rgba(124,135,255,.18),0 0 0 1px rgba(124,135,255,.32)}
.fx-event-tag{display:inline-block;font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;
  color:var(--akzent,#7c87ff);border:1px solid #3a3a72;background:#7c87ff14;
  padding:.4rem 1rem;border-radius:99px;margin-bottom:1rem}
.fx-event h3{margin:0 0 .3rem;font-size:1.5rem;text-transform:uppercase;letter-spacing:.02em;line-height:1}
.fx-event h3 em{font-style:normal;color:var(--akzent,#7c87ff)}
.fx-event-meta{margin:0 0 1.2rem;font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;color:#a1a1aa}
.fx-event-cd{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:0 0 .4rem}
.fx-event-cell{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);border-radius:12px;
  padding:.7rem .2rem;display:flex;flex-direction:column;align-items:center;gap:.25rem}
.fx-event-cell b{font-size:1.5rem;line-height:1;font-variant-numeric:tabular-nums}
.fx-event-cell small{font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;color:#71717a}
@media (prefers-reduced-motion:reduce){.fx-event{transition:none}}
</style>

<!-- Optionaler Live-Countdown -->
<script>
document.querySelectorAll('.fx-event[data-deadline]').forEach(function(card){
  var end = new Date(card.dataset.deadline).getTime();
  var pad = function(n){ return String(n).padStart(2,'0'); };
  function tick(){
    var d = Math.max(0, end - Date.now()), s = Math.floor(d/1000);
    var set = function(k,v){ var el = card.querySelector('[data-cd="'+k+'"]'); if(el) el.textContent = pad(v); };
    set('days', Math.floor(s/86400)); set('hours', Math.floor(s%86400/3600));
    set('mins', Math.floor(s%3600/60)); set('secs', s%60);
  }
  tick(); setInterval(tick, 1000);
});
</script>

Avatar-Gruppe mit Hover-Tooltip

Pol 1 · Craft Anlass: Team / Social Proof

Überlappende Initialen-Avatare (kein Bild-Asset); beim Hover oder Tastatur-Fokus kommt der Avatar nach vorn, hebt leicht an und zeigt einen Tooltip mit Namen. Vorbild: animate-ui „Avatar Group". Avatare sind echte <button>, Tooltip via :hover UND :focus-visible.

<div class="fx-avg">
  <button type="button" class="fx-avg-item">
    <span class="fx-avg-face" aria-hidden="true">SK</span>
    <span class="fx-avg-tip" role="tooltip">Sara Köhler</span>
  </button>
  <button type="button" class="fx-avg-item">
    <span class="fx-avg-face" aria-hidden="true">CN</span>
    <span class="fx-avg-tip" role="tooltip">Carla Neumann</span>
  </button>
  <button type="button" class="fx-avg-item">
    <span class="fx-avg-face" aria-hidden="true">AW</span>
    <span class="fx-avg-tip" role="tooltip">Anton Weber</span>
  </button>
  <button type="button" class="fx-avg-item">
    <span class="fx-avg-face" aria-hidden="true">GR</span>
    <span class="fx-avg-tip" role="tooltip">Greta Roth</span>
  </button>
  <button type="button" class="fx-avg-item">
    <span class="fx-avg-face" aria-hidden="true">JH</span>
    <span class="fx-avg-tip" role="tooltip">Jonas Hoffmann</span>
  </button>
  <button type="button" class="fx-avg-item">
    <span class="fx-avg-face" aria-hidden="true">DH</span>
    <span class="fx-avg-tip" role="tooltip">Dana Huber</span>
  </button>
  <span class="fx-avg-more" aria-hidden="true">+8</span>
</div>

<style>
.fx-avg{display:flex;align-items:center;padding:.4rem 0}
.fx-avg-item{position:relative;margin-left:-14px;border:0;padding:0;background:none;cursor:pointer;
  transition:transform .28s cubic-bezier(.22,1,.36,1),z-index 0s}
.fx-avg-item:first-child{margin-left:0}
.fx-avg-face{width:46px;height:46px;border-radius:50%;display:grid;place-items:center;
  color:#0f0f12;font-weight:800;font-size:.86rem;letter-spacing:.02em;
  border:3px solid #16161a;box-shadow:0 2px 8px rgba(0,0,0,.4)}
.fx-avg-item:nth-child(1) .fx-avg-face{background:linear-gradient(135deg,var(--akzent,#7c87ff),#3b3b52)}
.fx-avg-item:nth-child(2) .fx-avg-face{background:linear-gradient(135deg,#5eead4,#1c1c2b)}
.fx-avg-item:nth-child(3) .fx-avg-face{background:linear-gradient(135deg,#fbbf24,#3b2a1c)}
.fx-avg-item:nth-child(4) .fx-avg-face{background:linear-gradient(135deg,#f87171,#2b1c22)}
.fx-avg-item:nth-child(5) .fx-avg-face{background:linear-gradient(135deg,#a78bfa,#1c1c2b)}
.fx-avg-item:nth-child(6) .fx-avg-face{background:linear-gradient(135deg,#38bdf8,#12222b)}
.fx-avg-item:hover,.fx-avg-item:focus-visible{transform:translateY(-4px);z-index:5;outline:none}
.fx-avg-item:focus-visible .fx-avg-face{box-shadow:0 0 0 2px #16161a,0 0 0 4px var(--akzent,#7c87ff)}
.fx-avg-tip{position:absolute;bottom:calc(100% + 12px);left:50%;transform:translate(-50%,6px);
  white-space:nowrap;padding:.4rem .7rem;border-radius:8px;font-size:.76rem;font-weight:600;
  color:#f4f4f5;background:#0a0a0d;border:1px solid #26262c;box-shadow:0 8px 20px rgba(0,0,0,.55);
  opacity:0;pointer-events:none;transition:opacity .22s ease,transform .22s ease;z-index:6}
.fx-avg-tip::after{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);
  border:5px solid transparent;border-top-color:#0a0a0d}
.fx-avg-item:hover .fx-avg-tip,.fx-avg-item:focus-visible .fx-avg-tip{opacity:1;transform:translate(-50%,0)}
.fx-avg-more{margin-left:-14px;width:46px;height:46px;border-radius:50%;display:grid;place-items:center;
  font-size:.8rem;font-weight:700;color:#a1a1aa;background:#26262c;border:3px solid #16161a}
@media (prefers-reduced-motion:reduce){.fx-avg-item,.fx-avg-tip{transition:none}}
</style>

Flip-Karte (3D-Dreh)

Pol 1 · Craft Anlass: Team-Karte / Feature mit Rückseite

Karte dreht sich beim Hover oder Tastatur-Fokus um die Y-Achse und zeigt die Rückseite (Kontakt). preserve-3d + backface-visibility:hidden. Vorbild: animate-ui „Flip Card". Bei prefers-reduced-motion wird nicht gedreht, sondern die Rückseite per Opacity eingeblendet.

Max Reuter

Projektleitung

Max Reuter

Ansprechpartner für Planung und Termine. Erreichbar Mo–Fr.

Kontakt aufnehmen
<div class="fx-flip" tabindex="0" role="group" aria-label="Team-Karte, Vorder- und Rückseite">
  <div class="fx-flip-inner">
    <div class="fx-flip-face fx-flip-front">
      <div class="fx-flip-photo"><span aria-hidden="true">MR</span></div>
      <div class="fx-flip-name"><h3>Max Reuter</h3><p>Projektleitung</p></div>
    </div>
    <div class="fx-flip-face fx-flip-back">
      <h3>Max Reuter</h3>
      <p>Ansprechpartner für Planung und Termine. Erreichbar Mo–Fr.</p>
      <a href="#">Kontakt aufnehmen</a>
    </div>
  </div>
</div>

<style>
.fx-flip{width:240px;height:280px;border-radius:16px;cursor:pointer;
  -webkit-perspective:1200px;perspective:1200px}
.fx-flip:focus-visible{outline:none}
.fx-flip-inner{position:relative;width:100%;height:100%;border-radius:inherit;
  -webkit-transform-style:preserve-3d;transform-style:preserve-3d;
  transition:transform .7s cubic-bezier(.22,1,.36,1)}
.fx-flip:hover .fx-flip-inner,.fx-flip:focus-visible .fx-flip-inner{transform:rotateY(180deg)}
.fx-flip:focus-visible .fx-flip-inner{box-shadow:0 0 0 2px var(--akzent,#7c87ff)}
.fx-flip-face{position:absolute;inset:0;border-radius:inherit;overflow:hidden;
  display:flex;flex-direction:column;
  -webkit-backface-visibility:hidden;backface-visibility:hidden;
  border:1px solid #26262c;background:#16161a}
.fx-flip-front{color:#e9e9ee}
.fx-flip-photo{flex:1;background:radial-gradient(circle at 35% 28%,#3b3b52,transparent 60%),
  linear-gradient(160deg,#1c1c22,#0a0a0d);display:grid;place-items:center}
.fx-flip-photo span{font-size:2rem;font-weight:800;color:rgba(124,135,255,.5)}
.fx-flip-name{padding:.9rem 1.1rem 1.1rem}
.fx-flip-name h3{margin:0 0 .2rem;font-size:1.05rem}
.fx-flip-name p{margin:0;font-size:.82rem;color:#a1a1aa}
.fx-flip-back{transform:rotateY(180deg);background:linear-gradient(160deg,#17171b,#0a0a0d);
  color:#e9e9ee;padding:1.4rem 1.3rem;justify-content:center;align-items:center;text-align:center}
.fx-flip-back h3{margin:0 0 .6rem;font-size:1rem;color:var(--akzent,#7c87ff)}
.fx-flip-back p{margin:0 0 .9rem;font-size:.85rem;color:#a1a1aa;line-height:1.55}
.fx-flip-back a{font-size:.82rem;font-weight:600;color:#f4f4f5;text-decoration:none;
  border-bottom:1px solid var(--akzent,#7c87ff);padding-bottom:1px}
@media (prefers-reduced-motion:reduce){
  .fx-flip-inner{transition:none}
  .fx-flip:hover .fx-flip-inner,.fx-flip:focus-visible .fx-flip-inner{transform:none}
  .fx-flip-back{transform:none;opacity:0;transition:none}
  .fx-flip-front{opacity:1;transition:none}
  .fx-flip:hover .fx-flip-front,.fx-flip:focus-visible .fx-flip-front{opacity:0}
  .fx-flip:hover .fx-flip-back,.fx-flip:focus-visible .fx-flip-back{opacity:1}
  .fx-flip-face{-webkit-backface-visibility:visible;backface-visibility:visible}
}
</style>

3D-Tilt-Karte (Maus-Neigung)

Pol 1 · Craft Anlass: Feature-Highlight, Hero-Kachel

Die Karte neigt sich sanft zur Mausposition; Titel und Badge stehen per translateZ leicht erhaben, ein Licht-Spot folgt dem Zeiger. JS setzt nur vier CSS-Variablen (--rx/--ry für die Neigung, --mx/--my für den Spot), den Rest macht CSS. Auf Touch/ohne Zeiger und bei prefers-reduced-motion bleibt sie flach.

Neu

Digitale Planung

Aufmaß, Angebot und Termin in einem Ablauf – transparent und papierlos.

<div class="fx-tilt" tabindex="0" role="group" aria-label="Feature-Karte">
  <div class="fx-tilt-in">
    <span class="fx-tilt-badge">Neu</span>
    <h3>Digitale Planung</h3>
    <p>Aufmaß, Angebot und Termin in einem Ablauf – transparent und papierlos.</p>
  </div>
</div>

<style>
.fx-tilt{width:100%;max-width:260px;margin:0 auto;border-radius:16px;
  -webkit-perspective:900px;perspective:900px}
.fx-tilt-in{position:relative;border-radius:inherit;padding:1.5rem 1.5rem 1.4rem;overflow:hidden;
  background:#17171b;border:1px solid #26262c;color:#e9e9ee;cursor:pointer;
  transform:rotateX(var(--ry,0deg)) rotateY(var(--rx,0deg));
  -webkit-transform-style:preserve-3d;transform-style:preserve-3d;
  transition:transform .25s ease,border-color .25s ease,box-shadow .25s ease}
.fx-tilt-in::before{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  opacity:0;transition:opacity .25s ease;
  background:radial-gradient(220px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.14),transparent 60%)}
.fx-tilt:hover .fx-tilt-in,.fx-tilt:focus-within .fx-tilt-in{border-color:var(--akzent,#7c87ff);
  box-shadow:0 24px 50px -22px rgba(0,0,0,.8)}
.fx-tilt:hover .fx-tilt-in::before,.fx-tilt:focus-within .fx-tilt-in::before{opacity:1}
.fx-tilt-badge{display:inline-block;font-size:.66rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;
  color:var(--akzent,#7c87ff);border:1px solid #3a3a72;background:#7c87ff14;padding:.3rem .7rem;border-radius:99px;
  margin-bottom:.9rem;transform:translateZ(30px)}
.fx-tilt-in h3{margin:0 0 .35rem;font-size:1.1rem;transform:translateZ(22px)}
.fx-tilt-in p{margin:0;font-size:.88rem;color:#a1a1aa;line-height:1.5;transform:translateZ(14px)}
.fx-tilt-in :where(h3,p,.fx-tilt-badge){position:relative}
@media (prefers-reduced-motion:reduce){
  .fx-tilt-in,.fx-tilt-in::before{transition:none}
  .fx-tilt-in{transform:none}}
</style>

<script>
document.querySelectorAll('.fx-tilt').forEach(function(card){
  var inner = card.querySelector('.fx-tilt-in');
  if(!inner) return;
  if(window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;
  card.addEventListener('pointermove',function(e){
    if(e.pointerType === 'touch') return;
    var r = card.getBoundingClientRect();
    var px = (e.clientX - r.left) / r.width;   // 0..1
    var py = (e.clientY - r.top) / r.height;   // 0..1
    inner.style.setProperty('--rx', ((px - .5) * 12) + 'deg');
    inner.style.setProperty('--ry', ((.5 - py) * 12) + 'deg');
    inner.style.setProperty('--mx', (px * 100) + '%');
    inner.style.setProperty('--my', (py * 100) + '%');
  });
  card.addEventListener('pointerleave',function(){
    inner.style.setProperty('--rx','0deg');
    inner.style.setProperty('--ry','0deg');
  });
});
</script>

Spotlight-Karte · Lichtkegel folgt dem Zeiger

Pol 1 · Craft Anlass: Preis-/Feature-Raster, Dark-UI

Beim Überfahren leuchtet ein weicher Lichtkegel unter dem Zeiger auf, zusätzlich zeichnet ein per mask lokal begrenzter Akzent-Rand nur den Bereich um die Maus nach. JS setzt zwei Variablen (--sx/--sy). Tastatur-Fokus zeigt den Effekt zentriert; bei reduzierter Bewegung nur der ruhige Rahmen.

02

Wartungsvertrag

Jährliche Prüfung und Vorrang bei Terminen – zum festen Monatsbeitrag.

<div class="fx-spot" tabindex="0" role="group" aria-label="Leistungs-Karte">
  <span class="fx-spot-num">02</span>
  <h3>Wartungsvertrag</h3>
  <p>Jährliche Prüfung und Vorrang bei Terminen – zum festen Monatsbeitrag.</p>
</div>

<style>
.fx-spot{position:relative;width:100%;max-width:270px;margin:0 auto;overflow:hidden;
  background:#16161a;border:1px solid #26262c;border-radius:16px;padding:1.5rem 1.5rem 1.4rem;
  color:#e9e9ee;cursor:pointer;transition:border-color .3s ease,box-shadow .3s ease}
.fx-spot::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .3s ease;
  background:radial-gradient(260px circle at var(--sx,50%) var(--sy,50%),
    color-mix(in srgb,var(--akzent,#7c87ff) 22%,transparent),transparent 60%)}
.fx-spot::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;
  transition:opacity .3s ease;
  -webkit-mask:radial-gradient(180px circle at var(--sx,50%) var(--sy,50%),#000,transparent 70%);
  mask:radial-gradient(180px circle at var(--sx,50%) var(--sy,50%),#000,transparent 70%);
  box-shadow:inset 0 0 0 1px var(--akzent,#7c87ff)}
.fx-spot:hover,.fx-spot:focus-within{border-color:#3a3a45;box-shadow:0 18px 44px -26px rgba(0,0,0,.8)}
.fx-spot:hover::before,.fx-spot:focus-within::before,
.fx-spot:hover::after,.fx-spot:focus-within::after{opacity:1}
.fx-spot-num{position:relative;display:block;font-size:1.5rem;font-weight:700;line-height:1;
  color:var(--akzent,#7c87ff);margin-bottom:.6rem}
.fx-spot h3{position:relative;margin:0 0 .35rem;font-size:1.05rem}
.fx-spot p{position:relative;margin:0;font-size:.88rem;color:#a1a1aa;line-height:1.5}
@media (prefers-reduced-motion:reduce){.fx-spot,.fx-spot::before,.fx-spot::after{transition:none}}
</style>

<script>
document.querySelectorAll('.fx-spot').forEach(function(card){
  card.addEventListener('pointermove',function(e){
    var r = card.getBoundingClientRect();
    card.style.setProperty('--sx', (e.clientX - r.left) + 'px');
    card.style.setProperty('--sy', (e.clientY - r.top) + 'px');
  });
});
</script>

Aufklappende Detail-Karte (Akkordeon)

Pol 2 · Klarheit Anlass: FAQ, Leistungsdetails

Kopfzeile mit Icon und Chevron; ein Klick klappt den Detailtext ruckelfrei auf. Die Höhen-Animation läuft über grid-template-rows: 0fr → 1fr (kein max-height-Raten). Als natives <details>/<summary> gebaut – funktioniert auch ohne JS, per Tastatur bedienbar. Bei reduzierter Bewegung springt es ohne Übergang.

Was kostet ein Aufmaß?

Antwort einblenden

Das erste Aufmaß vor Ort ist kostenlos und unverbindlich. Erst nach Ihrer Freigabe des Angebots entstehen Kosten.

<details class="fx-exp">
  <summary class="fx-exp-head">
    <span class="fx-exp-ico" aria-hidden="true"><svg …Plus-Icon…></svg></span>
    <span class="fx-exp-txt"><h3>Was kostet ein Aufmaß?</h3><p>Antwort einblenden</p></span>
    <span class="fx-exp-chev" aria-hidden="true"><svg …Chevron…></svg></span>
  </summary>
  <div class="fx-exp-body"><div class="fx-exp-inner">
    <p>Das erste Aufmaß vor Ort ist kostenlos und unverbindlich. Erst nach Ihrer Freigabe des Angebots entstehen Kosten.</p>
  </div></div>
</details>

<style>
.fx-exp{width:100%;max-width:280px;margin:0 auto;background:#17171b;border:1px solid #26262c;
  border-radius:14px;overflow:hidden;color:#e9e9ee;
  transition:border-color .3s ease,box-shadow .3s ease}
.fx-exp:hover,.fx-exp:focus-within{border-color:#3a3a45;box-shadow:0 16px 40px -26px rgba(0,0,0,.75)}
.fx-exp-head{display:flex;align-items:center;gap:.75rem;width:100%;text-align:left;
  padding:1.1rem 1.2rem;background:none;border:0;color:inherit;cursor:pointer;font:inherit}
.fx-exp-head::-webkit-details-marker{display:none}
.fx-exp-head:focus-visible{outline:2px solid var(--akzent,#7c87ff);outline-offset:-2px;border-radius:14px}
.fx-exp-ico{flex:0 0 40px;width:40px;height:40px;border-radius:10px;display:grid;place-items:center;
  background:#26262c;color:var(--akzent,#7c87ff);transition:background .25s ease,color .25s ease}
.fx-exp-ico svg{width:20px;height:20px}
.fx-exp[open] .fx-exp-ico,.fx-exp-head:hover .fx-exp-ico{background:var(--akzent,#7c87ff);color:#0f0f12}
.fx-exp-txt{flex:1;min-width:0}
.fx-exp-txt h3{margin:0 0 .1rem;font-size:1rem}
.fx-exp-txt p{margin:0;font-size:.78rem;color:#a1a1aa}
.fx-exp-chev{flex:0 0 auto;color:#a1a1aa;transition:transform .3s ease}
.fx-exp-chev svg{width:18px;height:18px;display:block}
.fx-exp[open] .fx-exp-chev{transform:rotate(180deg)}
.fx-exp-body{display:grid;grid-template-rows:0fr;transition:grid-template-rows .35s cubic-bezier(.22,1,.36,1)}
.fx-exp[open] .fx-exp-body{grid-template-rows:1fr}
.fx-exp-inner{overflow:hidden;min-height:0}
.fx-exp-inner p{margin:0;padding:0 1.2rem 1.2rem 4rem;font-size:.86rem;color:#a1a1aa;line-height:1.55}
@media (prefers-reduced-motion:reduce){.fx-exp,.fx-exp-ico,.fx-exp-chev,.fx-exp-body{transition:none}}
</style>

Bento-Zelle · modulares Kennzahl-Raster

Pol 1 · Craft Anlass: Kennzahlen, Dashboard-Teaser

Baustein für Bento-Raster: gleich hohe Zellen, eine kann per .wide die volle Zeile überspannen, eine per .accent als Blickfang hervortreten. Beim Hover hebt die Zelle an und ein Akzent-Blob glimmt in der Ecke auf. Rein per CSS-Grid, ohne Bild.

Aufträge 1.200+
Jahre 18
Weiterempfehlung 98 % unserer Kunden
<div class="fx-bento">
  <div class="fx-bcell accent" tabindex="0">
    <span class="fx-bcell-k">Aufträge</span><span class="fx-bcell-v">1.200+</span>
  </div>
  <div class="fx-bcell" tabindex="0">
    <span class="fx-bcell-k">Jahre</span><span class="fx-bcell-v">18</span>
  </div>
  <div class="fx-bcell wide" tabindex="0">
    <span class="fx-bcell-k">Weiterempfehlung</span>
    <span class="fx-bcell-v">98 %<span class="fx-bcell-s"> unserer Kunden</span></span>
  </div>
</div>

<style>
.fx-bento{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;width:100%;max-width:300px;margin:0 auto}
.fx-bcell{position:relative;overflow:hidden;background:#17171b;border:1px solid #26262c;border-radius:14px;
  padding:1rem 1.1rem;color:#e9e9ee;min-height:96px;display:flex;flex-direction:column;justify-content:space-between;
  transition:transform .3s ease,border-color .3s ease,box-shadow .3s ease}
.fx-bcell::before{content:"";position:absolute;top:-60px;right:-60px;width:150px;height:150px;border-radius:50%;
  pointer-events:none;filter:blur(34px);opacity:0;
  background:radial-gradient(circle,var(--akzent,#7c87ff),transparent 70%);
  transition:opacity .3s ease,transform .3s ease}
.fx-bcell:hover,.fx-bcell:focus-within{transform:translateY(-3px);border-color:var(--akzent,#7c87ff);
  box-shadow:0 18px 40px -24px rgba(0,0,0,.8)}
.fx-bcell:hover::before,.fx-bcell:focus-within::before{opacity:.4;transform:scale(1.15)}
.fx-bcell.wide{grid-column:span 2}
.fx-bcell.accent{background:linear-gradient(140deg,color-mix(in srgb,var(--akzent,#7c87ff) 30%,#16161a),#16161a);
  border-color:#3a3a72}
.fx-bcell-k{position:relative;font-size:.68rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:#71717a}
.fx-bcell-v{position:relative;font-size:1.5rem;font-weight:700;line-height:1.05}
.fx-bcell.accent .fx-bcell-v{color:var(--akzent,#7c87ff)}
.fx-bcell-s{position:relative;font-size:.78rem;color:#a1a1aa;margin-top:.2rem}
@media (prefers-reduced-motion:reduce){.fx-bcell,.fx-bcell::before{transition:none}}
</style>