Design · Bausteine-Dossier

Seiten-Sektion

Referenzen / Galerie

Die ganze, gerahmte Projekt-Galerie einer Seite — mehrere Referenzen als Raster. Links das ruhige, portfolio-taugliche Grid mit Filter-Chips und einblendendem Overlay — rechts der lebendige Mosaik-Showcase mit hervorgehobener Kachel, Bild-Zoom und Glas-Label. Beide ganze Sektionen, copy-paste-fähig.

Referenzen — Portfolio-Grid

Pol 2 · Klarheit Anlass: Referenzen, Portfolio, Handwerk

Sauberes 3-Spalten-Raster (mobil einspaltig). Bei Hover/Fokus gleitet ein ruhiges Overlay mit Titel + Kategorie herein. Die Filter-Chips oben sind dezente Optik und filtern per Progressive Enhancement — ohne JS bleiben alle Kacheln sichtbar. Bilder als CSS-Verlauf angedeutet (im Projekt durch <img> ersetzen).

<section class="rf-grid" aria-label="Referenzen">
  <div class="rf-grid-head">
    <p class="rf-grid-eyebrow">Referenzen</p>
    <h2 class="rf-grid-title">Ausgewählte Projekte</h2>
  </div>
  <ul class="rf-chips" role="group" aria-label="Nach Kategorie filtern">
    <li><button type="button" class="rf-chip" data-filter="alle" aria-pressed="true">Alle</button></li>
    <li><button type="button" class="rf-chip" data-filter="bad" aria-pressed="false">Bad</button></li>
    <li><button type="button" class="rf-chip" data-filter="kueche" aria-pressed="false">Küche</button></li>
  </ul>
  <div class="rf-tiles">
    <a class="rf-tile" href="#" data-kat="bad">
      <!-- statt Verlauf hier ein <img> in .rf-tile-img einsetzen -->
      <span class="rf-tile-img" aria-hidden="true"></span>
      <span class="rf-tile-veil" aria-hidden="true"></span>
      <span class="rf-tile-cap">
        <span class="rf-tile-kat">Badsanierung</span>
        <span class="rf-tile-name">Wellnessbad in Eiche</span>
      </span>
    </a>
    <!-- weitere .rf-tile analog; data-kat steuert den Filter -->
  </div>
</section>

<style>
.rf-grid{width:100%;background:#16161a;border:1px solid #26262c;border-radius:18px;
  padding:1.6rem;color:#e9e9ee}
@media(min-width:720px){.rf-grid{padding:2.4rem}}
.rf-grid-head{margin:0 0 1.4rem}
.rf-grid-eyebrow{margin:0 0 .5rem;font-size:.74rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--akzent,#7c87ff)}
.rf-grid-title{margin:0;font-size:clamp(1.4rem,3.2vw,1.95rem);line-height:1.15;
  letter-spacing:-.01em;color:#f4f4f5}
.rf-chips{list-style:none;display:flex;flex-wrap:wrap;gap:.5rem;margin:1.2rem 0 1.6rem;padding:0}
.rf-chip{font-size:.82rem;font-weight:600;color:#a1a1aa;background:#17171b;
  border:1px solid #26262c;border-radius:99px;padding:.42rem .95rem;cursor:pointer;
  transition:color .2s ease,border-color .2s ease,background .2s ease}
.rf-chip:hover,.rf-chip:focus-visible{color:#f4f4f5;border-color:#3a3a45;outline:none}
.rf-chip:focus-visible{outline:2px solid var(--akzent,#7c87ff);outline-offset:2px}
.rf-chip[aria-pressed="true"]{color:#0f0f12;background:var(--akzent,#7c87ff);
  border-color:var(--akzent,#7c87ff)}
.rf-tiles{display:grid;gap:1rem;grid-template-columns:1fr}
@media(min-width:560px){.rf-tiles{grid-template-columns:repeat(2,1fr)}}
@media(min-width:840px){.rf-tiles{grid-template-columns:repeat(3,1fr)}}
.rf-tile{position:relative;display:block;aspect-ratio:4/3;border-radius:14px;overflow:hidden;
  border:1px solid #26262c;color:#f4f4f5;isolation:isolate}
.rf-tile.is-off{display:none}
.rf-tile-img{position:absolute;inset:0;z-index:0}
.rf-tile:nth-child(1) .rf-tile-img{background:radial-gradient(120% 110% at 25% 15%,#3b3b54 0%,#24242f 48%,#15151b 100%)}
.rf-tile:nth-child(2) .rf-tile-img{background:radial-gradient(120% 110% at 80% 20%,#2f4448 0%,#20303233 45%,#141a1c 100%)}
.rf-tile:nth-child(3) .rf-tile-img{background:radial-gradient(130% 120% at 50% 90%,#4a3550 0%,#2a2233 50%,#161018 100%)}
.rf-tile:nth-child(4) .rf-tile-img{background:radial-gradient(120% 110% at 20% 80%,#453b28 0%,#2b2620 48%,#171310 100%)}
.rf-tile:nth-child(5) .rf-tile-img{background:radial-gradient(120% 100% at 70% 30%,#28324e 0%,#1e2536 45%,#12151f 100%)}
.rf-tile:nth-child(6) .rf-tile-img{background:radial-gradient(120% 110% at 40% 20%,#3d3d46 0%,#26262f 48%,#141419 100%)}
.rf-tile-veil{position:absolute;inset:0;z-index:1;
  background:linear-gradient(to top,rgba(12,12,16,.82) 0%,rgba(12,12,16,.15) 55%,transparent 100%);
  opacity:0;transform:translateY(12px);
  transition:opacity .3s ease,transform .3s ease}
.rf-tile-cap{position:absolute;left:1rem;right:1rem;bottom:1rem;z-index:2;
  transform:translateY(10px);opacity:0;
  transition:opacity .3s ease .04s,transform .3s ease .04s}
.rf-tile-kat{display:block;font-size:.72rem;font-weight:700;letter-spacing:.1em;
  text-transform:uppercase;color:var(--akzent,#7c87ff);margin:0 0 .25rem}
.rf-tile-name{font-size:1.02rem;font-weight:700;line-height:1.2;margin:0}
.rf-tile:hover .rf-tile-veil,.rf-tile:focus-visible .rf-tile-veil,
.rf-tile:hover .rf-tile-cap,.rf-tile:focus-visible .rf-tile-cap{opacity:1;transform:translateY(0)}
.rf-tile:focus-visible{outline:2px solid var(--akzent,#7c87ff);outline-offset:3px}
@media (prefers-reduced-motion:reduce){
  .rf-chip,.rf-tile-veil,.rf-tile-cap{transition:none}
}
</style>

<script>
// Filter-Chips (Progressive Enhancement — ohne JS bleiben alle Kacheln sichtbar)
document.querySelectorAll('.rf-grid').forEach((sec) => {
  const chips = sec.querySelectorAll('.rf-chip');
  const tiles = sec.querySelectorAll('.rf-tile');
  chips.forEach((chip) => chip.addEventListener('click', () => {
    const f = chip.dataset.filter;
    chips.forEach((c) => c.setAttribute('aria-pressed', String(c === chip)));
    tiles.forEach((t) => {
      const show = f === 'alle' || t.dataset.kat === f;
      t.classList.toggle('is-off', !show);
    });
  }));
});
</script>

Referenzen — Mosaik-Showcase

Pol 1 · Craft Anlass: Referenzen, Premium, Studio

Lebendiges Galerie-Mosaik: eine hervorgehobene, breitere Kachel, dazu unterschiedlich große Nachbarn. Bei Hover/Fokus hebt sich die Kachel, der Bild-Platzhalter zoomt sanft, ein Akzent-Rahmen erscheint und das Glas-Label steigt auf. Edler Showcase für Marken- und Studio-Auftritte. Der Bild-Zoom ruht bei prefers-reduced-motion.

<section class="rf-mosaic" aria-label="Referenzen">
  <p class="rf-mosaic-eyebrow">Portfolio</p>
  <h2 class="rf-mosaic-title">Was wir <span>gebaut</span> haben.</h2>
  <div class="rf-mos-grid">
    <a class="rf-card rf-card--wide" href="#">
      <!-- statt Verlauf hier ein <img> in .rf-card-img einsetzen -->
      <span class="rf-card-img" aria-hidden="true"></span>
      <span class="rf-card-veil" aria-hidden="true"></span>
      <span class="rf-card-ring" aria-hidden="true"></span>
      <span class="rf-card-label">
        <span class="rf-card-kat">Komplettumbau</span>
        <span class="rf-card-name">Altbauwohnung, kernsaniert</span>
      </span>
    </a>
    <!-- rf-card--tall = doppelte Höhe; normale .rf-card daneben -->
  </div>
</section>

<style>
.rf-mosaic{position:relative;width:100%;overflow:hidden;
  background:radial-gradient(130% 120% at 0% 0%,#1c1c28 0%,#141319 55%,#101014 100%);
  border:1px solid #26262c;border-radius:20px;padding:1.8rem;color:#e9e9ee}
@media(min-width:760px){.rf-mosaic{padding:2.6rem}}
.rf-mosaic-eyebrow{margin:0 0 .8rem;display:inline-flex;align-items:center;gap:.6em;font-size:.74rem;
  font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--akzent,#7c87ff)}
.rf-mosaic-eyebrow::before{content:"";width:26px;height:1px;background:var(--akzent,#7c87ff)}
.rf-mosaic-title{margin:0 0 1.6rem;font-size:clamp(1.5rem,3.6vw,2.1rem);line-height:1.12;
  letter-spacing:-.02em;color:#f4f4f5}
.rf-mosaic-title span{color:var(--akzent,#7c87ff)}
.rf-mos-grid{display:grid;gap:1rem;grid-template-columns:1fr}
@media(min-width:680px){.rf-mos-grid{grid-template-columns:repeat(3,1fr);grid-auto-rows:150px}}
.rf-card{position:relative;display:block;border-radius:16px;overflow:hidden;
  min-height:190px;color:#f4f4f5;isolation:isolate;
  border:1px solid rgba(255,255,255,.08);
  box-shadow:0 16px 34px rgba(0,0,0,.34);
  transition:transform .35s cubic-bezier(.16,1,.3,1),box-shadow .35s ease,border-color .35s ease}
@media(min-width:680px){
  .rf-card{min-height:0}
  .rf-card--wide{grid-column:span 2;grid-row:span 2}
  .rf-card--tall{grid-row:span 2}
}
.rf-card-img{position:absolute;inset:0;z-index:0;transform:scale(1.02);
  transition:transform .5s cubic-bezier(.16,1,.3,1);will-change:transform}
.rf-card:nth-child(1) .rf-card-img{background:radial-gradient(120% 120% at 30% 20%,#42425f 0%,#272733 50%,#15151b 100%)}
.rf-card:nth-child(2) .rf-card-img{background:radial-gradient(130% 120% at 75% 15%,#324a4a 0%,#20302f 48%,#12191a 100%)}
.rf-card:nth-child(3) .rf-card-img{background:radial-gradient(130% 130% at 60% 85%,#4e3a54 0%,#2c2436 50%,#171019 100%)}
.rf-card:nth-child(4) .rf-card-img{background:radial-gradient(120% 120% at 20% 70%,#4a4028 0%,#2c2720 48%,#181310 100%)}
.rf-card:nth-child(5) .rf-card-img{background:radial-gradient(120% 120% at 70% 30%,#2b3654 0%,#1f2638 48%,#12151f 100%)}
.rf-card-veil{position:absolute;inset:0;z-index:1;
  background:linear-gradient(to top,rgba(11,11,15,.78) 0%,rgba(11,11,15,.1) 60%,transparent 100%)}
.rf-card-ring{position:absolute;inset:0;z-index:3;border-radius:16px;pointer-events:none;
  box-shadow:inset 0 0 0 1px transparent;
  transition:box-shadow .35s ease}
.rf-card-label{position:absolute;left:.85rem;right:.85rem;bottom:.85rem;z-index:2;margin:0;
  padding:.7rem .9rem;border-radius:12px;overflow-wrap:break-word;
  background:rgba(20,20,26,.5);border:1px solid rgba(255,255,255,.14);
  -webkit-backdrop-filter:blur(14px) saturate(1.3);backdrop-filter:blur(14px) saturate(1.3);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.12);
  transform:translateY(6px);opacity:.82;
  transition:transform .35s cubic-bezier(.16,1,.3,1),opacity .35s ease}
.rf-card-kat{display:block;font-size:.68rem;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;color:var(--akzent,#7c87ff);margin:0 0 .2rem}
.rf-card-name{font-size:1rem;font-weight:700;line-height:1.18;margin:0;color:#f4f4f5}
.rf-card--wide .rf-card-name{font-size:1.25rem}
.rf-card:hover,.rf-card:focus-visible{transform:translateY(-4px);
  box-shadow:0 26px 52px rgba(0,0,0,.5);border-color:rgba(255,255,255,.14);outline:none}
.rf-card:hover .rf-card-img,.rf-card:focus-visible .rf-card-img{transform:scale(1.1)}
.rf-card:hover .rf-card-ring,.rf-card:focus-visible .rf-card-ring{
  box-shadow:inset 0 0 0 2px var(--akzent,#7c87ff)}
.rf-card:hover .rf-card-label,.rf-card:focus-visible .rf-card-label{transform:translateY(0);opacity:1}
.rf-card:focus-visible{outline:2px solid var(--akzent,#7c87ff);outline-offset:3px}
@media (prefers-reduced-motion:reduce){
  .rf-card,.rf-card-img,.rf-card-ring,.rf-card-label{transition:none}
}
</style>

Referenzen — Vorher/Nachher-Vergleich

Pol 1 · Craft Anlass: Sanierung, Renovierung, Beweis

Ein Schieberegler enthüllt beim Ziehen das „Nachher" über dem „Vorher" — der stärkste Referenz-Beweis für Handwerk und Sanierung. Der unsichtbare <input type="range"> steuert per CSS-Variable die Trennlinie; damit ist er komplett tastatur- und touchbedienbar, ganz ohne Zeiger-Rechnerei. Bilder als CSS-Verlauf angedeutet (im Projekt durch zwei <img> ersetzen).

Referenz

Badsanierung — vorher & nachher

Regler ziehen oder mit den Pfeiltasten verschieben.

<section class="rf-ba" aria-label="Vorher-Nachher-Vergleich">
  <div class="rf-ba-head">
    <p class="rf-ba-eyebrow">Referenz</p>
    <h2 class="rf-ba-title">Badsanierung — vorher &amp; nachher</h2>
  </div>
  <div class="rf-ba-frame" style="--pos:50">
    <!-- statt Verläufen hier zwei <img> in .rf-ba-after / .rf-ba-before -->
    <span class="rf-ba-layer rf-ba-after" aria-hidden="true"></span>
    <span class="rf-ba-layer rf-ba-before" aria-hidden="true"></span>
    <span class="rf-ba-badge is-before" aria-hidden="true">Vorher</span>
    <span class="rf-ba-badge is-after" aria-hidden="true">Nachher</span>
    <input class="rf-ba-range" type="range" min="0" max="100" value="50"
           aria-label="Vergleich verschieben — links Vorher, rechts Nachher">
    <span class="rf-ba-divider" aria-hidden="true">
      <span class="rf-ba-knob">⇔</span>
    </span>
  </div>
  <p class="rf-ba-hint">Regler ziehen oder mit den Pfeiltasten verschieben.</p>
</section>

<style>
.rf-ba{width:100%;background:#16161a;border:1px solid #26262c;border-radius:18px;
  padding:1.6rem;color:#e9e9ee}
@media(min-width:720px){.rf-ba{padding:2.4rem}}
.rf-ba-head{margin:0 0 1.4rem}
.rf-ba-eyebrow{margin:0 0 .5rem;font-size:.74rem;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--akzent,#7c87ff)}
.rf-ba-title{margin:0;font-size:clamp(1.4rem,3.2vw,1.95rem);line-height:1.15;
  letter-spacing:-.01em;color:#f4f4f5}
/* Rahmen mit Bild-Ebenen; --pos steuert die Trennlinie (0–100) */
.rf-ba-frame{position:relative;width:100%;aspect-ratio:16/10;border-radius:14px;overflow:hidden;
  border:1px solid #26262c;isolation:isolate;--pos:50}
.rf-ba-layer{position:absolute;inset:0}
.rf-ba-after{background:radial-gradient(120% 130% at 70% 20%,#33405c 0%,#212a3d 48%,#141824 100%)}
.rf-ba-before{background:radial-gradient(120% 130% at 30% 80%,#3a3630 0%,#262320 50%,#15130f 100%);
  /* nur der linke Teil bis zur Trennlinie ist sichtbar */
  clip-path:inset(0 calc(100% - var(--pos)*1%) 0 0)}
.rf-ba-badge{position:absolute;top:.7rem;z-index:2;font-size:.66rem;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;padding:.28rem .6rem;border-radius:99px;
  background:rgba(15,15,20,.62);border:1px solid rgba(255,255,255,.14);color:#f4f4f5;
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.rf-ba-badge.is-before{left:.7rem}
.rf-ba-badge.is-after{right:.7rem}
/* Trennlinie + Griff */
.rf-ba-divider{position:absolute;top:0;bottom:0;z-index:3;left:calc(var(--pos)*1%);
  width:2px;background:var(--akzent,#7c87ff);transform:translateX(-1px);pointer-events:none}
.rf-ba-knob{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:38px;height:38px;border-radius:50%;display:grid;place-items:center;
  background:var(--akzent,#7c87ff);color:#0d0d10;font-size:.9rem;font-weight:700;
  box-shadow:0 4px 14px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.3)}
/* Range-Input liegt unsichtbar über dem Rahmen und steuert alles */
.rf-ba-range{position:absolute;inset:0;z-index:4;width:100%;height:100%;margin:0;
  opacity:0;cursor:ew-resize;-webkit-appearance:none;appearance:none;background:transparent}
.rf-ba-range:focus-visible{outline:none}
.rf-ba-range:focus-visible~.rf-ba-divider{width:3px}
.rf-ba-range:focus-visible~.rf-ba-divider .rf-ba-knob{
  outline:2px solid #fff;outline-offset:2px}
.rf-ba-hint{margin:1rem 0 0;font-size:.82rem;color:#a1a1aa}
</style>

<script>
// Trennlinie folgt dem Range-Wert (touch/tastatur/maus in einem)
document.querySelectorAll('.rf-ba-range').forEach(function(r){
  var frame=r.closest('.rf-ba-frame');
  if(!frame) return;
  r.addEventListener('input',function(){frame.style.setProperty('--pos',r.value);});
});
</script>

Referenzen — Fall-Highlight

Pol 2 · Klarheit Anlass: Vorzeige-Projekt, Case-Study

Ein einzelnes Projekt bekommt die ganze Bühne: großes Bildfeld links, rechts Titel, Kurzbeschreibung, drei Kennzahlen und ein Kundenzitat. Statt vieler kleiner Kacheln erzählt dieser Block eine Referenz als überzeugende Mini-Case-Study — ideal direkt unter dem Hero. Bild als CSS-Verlauf angedeutet (im Projekt durch <img> ersetzen).

Referenz im Detail

Altbauwohnung, komplett kernsaniert

Vom Rohbau bis zur schlüsselfertigen Übergabe: Bad, Küche und Böden in acht Wochen erneuert — bei laufendem Zeitplan und fixem Festpreis.

  • 8 Wo.Bauzeit
  • 120 m²Wohnfläche
  • 3Gewerke
„Sauber geplant, pünktlich fertig und der Festpreis hat gehalten. Genau so stellt man sich das vor." Zufriedene Bauherrin, Musterstadt
Projekt ansehen
<section class="rf-case" aria-label="Referenz im Detail">
  <div class="rf-case-grid">
    <!-- statt Verlauf hier ein <img> in .rf-case-media -->
    <div class="rf-case-media" aria-hidden="true">
      <span class="rf-case-stamp">Vorzeige-Projekt</span>
    </div>
    <div class="rf-case-body">
      <p class="rf-case-eyebrow">Referenz im Detail</p>
      <h2 class="rf-case-title">Altbauwohnung, komplett kernsaniert</h2>
      <p class="rf-case-lead">Vom Rohbau bis zur schlüsselfertigen Übergabe: Bad, Küche und Böden
        in acht Wochen erneuert — bei laufendem Zeitplan und fixem Festpreis.</p>
      <ul class="rf-case-stats">
        <li class="rf-case-stat"><b>8 Wo.</b><span>Bauzeit</span></li>
        <li class="rf-case-stat"><b>120 m²</b><span>Wohnfläche</span></li>
        <li class="rf-case-stat"><b>3</b><span>Gewerke</span></li>
      </ul>
      <blockquote class="rf-case-quote">
        „Sauber geplant, pünktlich fertig und der Festpreis hat gehalten. Genau so stellt man sich das vor."
        <cite>Zufriedene Bauherrin, Musterstadt</cite>
      </blockquote>
      <a class="rf-case-link" href="#">Projekt ansehen <span aria-hidden="true">→</span></a>
    </div>
  </div>
</section>

<style>
.rf-case{position:relative;width:100%;overflow:hidden;
  background:radial-gradient(130% 130% at 100% 0%,#1c1c26 0%,#151419 55%,#101014 100%);
  border:1px solid #26262c;border-radius:20px;color:#e9e9ee}
.rf-case-grid{display:grid;grid-template-columns:1fr}
@media(min-width:820px){.rf-case-grid{grid-template-columns:1.05fr .95fr;align-items:stretch}}
.rf-case-media{position:relative;min-height:220px;overflow:hidden;
  background:radial-gradient(120% 120% at 30% 25%,#3b3b57 0%,#26263a 48%,#14141e 100%)}
.rf-case-media::after{content:"";position:absolute;inset:0;
  background:linear-gradient(to top,rgba(12,12,16,.55),transparent 60%)}
.rf-case-stamp{position:absolute;left:1.1rem;top:1.1rem;z-index:1;
  font-size:.68rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  padding:.34rem .7rem;border-radius:99px;color:#0d0d10;background:var(--akzent,#7c87ff)}
.rf-case-body{padding:1.8rem}
@media(min-width:720px){.rf-case-body{padding:2.6rem}}
.rf-case-eyebrow{margin:0 0 .7rem;display:inline-flex;align-items:center;gap:.6em;font-size:.74rem;
  font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--akzent,#7c87ff)}
.rf-case-eyebrow::before{content:"";width:24px;height:1px;background:var(--akzent,#7c87ff)}
.rf-case-title{margin:0 0 .8rem;font-size:clamp(1.5rem,3.4vw,2.05rem);line-height:1.14;
  letter-spacing:-.02em;color:#f4f4f5}
.rf-case-lead{margin:0 0 1.5rem;font-size:1rem;line-height:1.6;color:#c9c9d1}
.rf-case-stats{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;
  margin:0 0 1.6rem;padding:1.3rem 0;border-top:1px solid #26262c;border-bottom:1px solid #26262c}
.rf-case-stat b{display:block;font-size:clamp(1.3rem,3vw,1.7rem);line-height:1;
  letter-spacing:-.02em;color:var(--akzent,#7c87ff)}
.rf-case-stat span{display:block;margin-top:.35rem;font-size:.76rem;color:#a1a1aa}
.rf-case-quote{margin:0 0 1.6rem;padding-left:1rem;border-left:2px solid var(--akzent,#7c87ff);
  font-size:.98rem;line-height:1.55;color:#e9e9ee;font-style:italic}
.rf-case-quote cite{display:block;margin-top:.5rem;font-style:normal;font-size:.8rem;color:#a1a1aa}
.rf-case-link{display:inline-flex;align-items:center;gap:.5rem;font-weight:600;font-size:.95rem;
  color:#f4f4f5;text-decoration:none;padding:.55rem 0;
  border-bottom:1px solid transparent;transition:border-color .2s ease,gap .2s ease}
.rf-case-link span{transition:transform .2s cubic-bezier(.4,0,.2,1)}
.rf-case-link:hover,.rf-case-link:focus-visible{border-color:var(--akzent,#7c87ff);outline:none}
.rf-case-link:hover span,.rf-case-link:focus-visible span{transform:translateX(4px)}
.rf-case-link:focus-visible{outline:2px solid var(--akzent,#7c87ff);outline-offset:3px;border-radius:4px}
@media (prefers-reduced-motion:reduce){
  .rf-case-link,.rf-case-link span{transition:none}
}
</style>