/* ═══════════════════════════════════════════════════════════════
   Bruecke: WooCommerce-, Storefront- und Germanized-Markup, das nicht
   umgebaut wird, in der Gestalt des Shop-Registers.
   ───────────────────────────────────────────────────────────────
   Grundsatz der Uebergabe (2.1): Markup auf die .sh-Klassen bringen,
   nicht das Register an das Markup anpassen. Was hier steht, ist der
   Rest, bei dem sich ein Umbau nicht lohnt oder nicht moeglich ist
   (Plugin-Ausgaben, WooCommerce-Hinweise, Formularfelder).
   Kein Radius, kein Schatten - auch hier nicht.

   Bereichsdateien (wc-produkt.css, wc-korb.css …) haengen dahinter.
   ═══════════════════════════════════════════════════════════════ */

/* ── Rahmen ─────────────────────────────────────────────────────── */

html { scroll-padding-top: 90px; }
body.sh-seite { margin: 0; }
.sh-seite #page { overflow-x: clip; }

/* Storefronts .col-full ist die Spalte des Registers. */
.sh-seite .col-full { max-width: var(--sh-spalte); margin: 0 auto; padding-left: 16px; padding-right: 16px; }
@media (min-width: 768px) { .sh-seite .col-full { padding-left: 32px; padding-right: 32px; } }
/* Die Spalte im Inhalt sitzt schon in .col-full - kein zweiter Innenabstand. */
.sh-seite .col-full .sh-spalte { padding-left: 0; padding-right: 0; }
/* … ausser in Flaechen, die aus der Spalte auf volle Breite ausbrechen. */
.sh-seite .col-full .sh-vollbreit .sh-spalte { padding-left: 16px; padding-right: 16px; }
@media (min-width: 768px) { .sh-seite .col-full .sh-vollbreit .sh-spalte { padding-left: 32px; padding-right: 32px; } }
.sh-seite .site-content { padding-bottom: var(--sh-takt); }
.sh-seite .content-area, .sh-seite .site-main { width: auto; float: none; margin: 0; }
.sh-seite #secondary { display: none; }   /* keine Widget-Spalte im System */
.sh-seite .hentry { margin: 0; }

/* Grundregeln mit Spezifitaet null (:where): Sie duerfen keine Klasse des
   Registers ueberstimmen - .sh-aktion-frist etwa setzt margin-top selbst. */
:where(.sh-seite) a { color: inherit; }
:where(.sh-seite) img { max-width: 100%; height: auto; }
:where(.sh-seite) :is(h1, h2, h3, p) { margin: 0; }
.sh-seite .screen-reader-text { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* Sprungmarke: sichtbar, sobald sie den Fokus hat. */
.sh-sprungmarke:focus { position: fixed; left: 16px; top: 16px; z-index: 100; width: auto; height: auto; clip: auto; padding: 12px 16px; background: var(--sh-tat); color: var(--sh-tat-ink); }

/* Kopf: Logo im Kopf ist ein Bild, kein Text (Storefront setzte ihn gross). */
.sh-kopf-marke img { height: 24px; width: auto; }
.sh-kopf-ziel [hidden] { display: none; }

/* Kassenkopf */
.sh-kasse-kopf-rahmen { background: var(--sh-grund); }
.sh-kasse-sicher { display: inline-flex; align-items: center; gap: 8px; color: var(--sh-text); }
@media (max-width: 599px) { .sh-kasse-sicher { display: none; } }
.sh-kasse-fuss { padding-top: 24px; padding-bottom: 32px; border-top: 1px solid var(--sh-linie); }
.sh-kasse-fuss span { color: var(--sh-text-2); }

/* Fuss */
.sh-fuss-marke { display: block; height: 22px; width: auto; }
.sh-fuss-satz { margin-top: 14px; max-width: 28ch; }
.sh-fuss-recht a { color: var(--sh-text-2); text-decoration: none; }
.sh-fuss-recht a:hover { color: var(--sh-akzent); text-decoration: underline; }
.sh-fuss-fussnote { padding-bottom: 28px; max-width: none; }
/* Widerrufsschaltflaeche (C17): eigene, abgesetzte Flaeche oben im Fuss
   (R16, 31.10.2026), in der Kasse unter der Rechtszeile. */
.sh-fuss-widerrufzeile { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 24px; margin-top: 40px; padding: 16px 20px; background: rgba(255, 255, 255, .07); border-left: 3px solid var(--sh-akzent); }
.sh-fuss-widerrufzeile .sh-klein { margin: 0; color: var(--sh-text); }
.sh-kasse-fuss .sh-fuss-widerruf { display: flex; width: fit-content; margin-top: 16px; }

/* Gesetzliche Gewaehrleistung (R26): das Bild aus dem Amtsblatt, unveraendert,
   in voller Spaltenbreite. Kein Rahmen, kein Schnitt - nichts daran darf
   veraendert werden. */
.sh-gewaehrleistung { margin: 24px 0 0; }
.sh-gewaehrleistung img { display: block; width: 100%; max-width: 657px; height: auto; }
.sh-gewaehrleistung figcaption { margin-top: 6px; }

/* Seite /widerruf/ (D9): Felder bis 480 px, auf dem Telefon volle Breite,
   der Knopf dort ebenfalls. Das Formular kommt aus Germanized. */
.order-withdrawal-request { max-width: 480px; }
.order-withdrawal-request .form-row, .order-withdrawal-request .input-text { display: block; width: 100%; }
@media (max-width: 599px) {
  .order-withdrawal-request button[type='submit'] { width: 100%; }
}
@media (max-width: 599px) {
  .sh-fuss-widerrufzeile { margin-top: 28px; }
  .sh-fuss-widerrufzeile .sh-fuss-widerruf { width: 100%; }
}

/* ── Kachel: das Zweitbild (Marco, 02.10.2026) ───────────────────
   Liegt deckungsgleich ueber dem Hauptbild und blendet beim Ueberfahren
   ein; der Zoom des Registers (scale 1.04) gilt fuer beide. Auf Touch-
   Geraeten ausgeblendet - ein ausgeblendetes Lazy-Bild laedt nicht. */
.sh-kachel-bild .sh-kachel-zweitbild { position: absolute; inset: 0; opacity: 0; transition: opacity .25s ease, transform .35s ease; }
.sh-kachel:hover .sh-kachel-bild .sh-kachel-zweitbild { opacity: 1; }
/* Das Hauptbild muss WEICHEN, nicht nur ueberdeckt werden: Die Platte
   multipliziert jedes Bild (mix-blend-mode: multiply), und ein
   multipliziertes Bild deckt nie ab - beide schienen durcheinander durch
   (Marcos Befund vom 05.10.2026, Shirt doppelt). */
.sh-kachel-bild:has(.sh-kachel-zweitbild) > img:not(.sh-kachel-zweitbild) { transition: opacity .25s ease, transform .35s ease; }
.sh-kachel:hover .sh-kachel-bild:has(.sh-kachel-zweitbild) > img:not(.sh-kachel-zweitbild) { opacity: 0; }
@media (hover: none) { .sh-kachel-bild .sh-kachel-zweitbild { display: none; } }
@media (prefers-reduced-motion: reduce) { .sh-kachel-bild .sh-kachel-zweitbild { transition: none; } }

/* WooCommerce setzt ul.products als Liste mit Floats. */
.sh-seite ul.products { list-style: none; margin: 0; padding: 0; }
.sh-seite ul.products::before, .sh-seite ul.products::after { display: none; }
.sh-seite ul.products li.product { width: auto; float: none; margin: 0; padding: 0; text-align: left; }
.sh-raster > li[hidden] { display: none; }
/* Der Schnellkauf ist ein <a>: dieselbe Gestalt wie der <button> der Referenz. */
a.sh-kachel-schnell { color: var(--sh-tat-ink); }
a.sh-kachel-schnell.loading { opacity: .7; pointer-events: none; }
a.sh-kachel-schnell.added + .added_to_cart { display: none; }
.sh-kachel .added_to_cart { display: none; }
.sh-bestand-zusatz { color: var(--sh-text-2); }
.sh-bestand-zusatz::before { content: ' · '; }

/* ── Hinweise (Uebergabe 3.15: Fehlerliste bleibt zusaetzlich) ───── */
.sh-seite .woocommerce-message, .sh-seite .woocommerce-info, .sh-seite .woocommerce-error,
.sh-seite .woocommerce-notice {
  position: relative; list-style: none; margin: 16px 0; padding: 14px 16px;
  background: var(--sh-flaeche); border: 1px solid var(--sh-linie); border-left: 3px solid var(--sh-text);
  color: var(--sh-text); font-size: .9375rem; line-height: 1.5;
}
.sh-seite .woocommerce-error { border-left-color: var(--sh-fehler); }
.sh-seite .woocommerce-error li { margin: 0; }
/* Kein Symbol: das gefuellte Quadrat las sich wie ein Renderfehler (D8 der
   Gegenpruefung). Die Kante links traegt die Art des Hinweises. */
.sh-seite .woocommerce-message::before, .sh-seite .woocommerce-info::before, .sh-seite .woocommerce-error::before { display: none; }
.sh-seite .woocommerce-message .button, .sh-seite .woocommerce-info .button { float: right; margin-left: 16px; }
.sh-seite .woocommerce-notices-wrapper:empty { display: none; }

/* ── Knoepfe, die WooCommerce selbst ausgibt ─────────────────────
   Dieselbe Gestalt wie .sh-tat: Tusche, Versalien, Schnitt. */
.sh-seite .button, .sh-seite button.button, .sh-seite input[type="submit"].button, .sh-seite a.button,
.sh-seite .wc-forward, .sh-seite #place_order, .sh-seite .single_add_to_cart_button {
  --sh-e: var(--sh-ecke);
  position: relative; display: inline-flex; align-items: center; justify-content: center; gap: .6rem;
  min-height: 48px; padding: 0 28px; border: 0; border-radius: 0;
  background: var(--sh-tat); color: var(--sh-tat-ink);
  font: inherit; font-size: .875rem; line-height: 1.1;
  font-weight: var(--pc-gewicht-bez); font-stretch: var(--pc-breite-sport-sub);
  letter-spacing: var(--pc-sperrung-tat); text-transform: uppercase; text-decoration: none; white-space: nowrap; cursor: pointer;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--sh-e)), calc(100% - var(--sh-e)) 100%, 0 100%);
  transition: background-color .16s ease;
}
.sh-seite .button:hover, .sh-seite #place_order:hover, .sh-seite .single_add_to_cart_button:hover { background: var(--sh-tat-hover); color: var(--sh-tat-ink); }
.sh-seite .button:focus-visible { outline: 2px solid var(--sh-tat-ink); outline-offset: -6px; }
.sh-seite .button.disabled, .sh-seite .button:disabled, .sh-seite .single_add_to_cart_button.disabled {
  background: var(--sh-linie); color: var(--sh-text-2); cursor: not-allowed;
}

/* ── Formularfelder, die WooCommerce ausgibt ─────────────────────
   Wie .sh-eingabe. Die Kasse (inc/kasse.php) setzt die Klassen selbst;
   das hier faengt Konto, Anmeldung, Adressen und Plugin-Formulare. */
.sh-seite input[type="text"], .sh-seite input[type="email"], .sh-seite input[type="tel"],
.sh-seite input[type="password"], .sh-seite input[type="number"], .sh-seite input[type="search"]:not(#sh-suchfeld),
.sh-seite input[type="url"], .sh-seite input[type="date"], .sh-seite select, .sh-seite textarea {
  min-height: 48px; padding: 12px 14px; border: 1px solid var(--sh-rand); border-radius: 0; box-shadow: none;
  background: var(--sh-grund); color: var(--sh-text); font: inherit; font-size: 1rem; line-height: 1.4;
}
.sh-seite .sh-suche input[type="search"] { min-height: 0; padding: 0 12px; border: 0; background: transparent; }
.sh-seite input:focus-visible, .sh-seite select:focus-visible, .sh-seite textarea:focus-visible {
  border-color: var(--sh-akzent); outline: 1px solid var(--sh-akzent); outline-offset: -2px;
}
.sh-seite .form-row label, .sh-seite .woocommerce-form-row label { display: block; margin: 0 0 6px; font-size: .8125rem; font-weight: var(--pc-gewicht-halb); }
.sh-seite .form-row .required { color: var(--sh-text-2); text-decoration: none; }
.sh-seite .form-row { margin: 0 0 16px; }

/* ── Seitentitel und Inhaltsseiten ───────────────────────────── */
.sh-seite .entry-content { max-width: 68ch; }
.sh-seite .entry-content > * + * { margin-top: 1em; }
.sh-seite .sh-seitenkopf { padding: 16px 0 24px; }
.sh-seite .sh-seitenkopf .sh-h1 { margin-top: 16px; }

/* Paginierung ohne JS (Uebergabe 3.8). */
.sh-seite .woocommerce-pagination ul { display: flex; gap: 6px; list-style: none; margin: 32px 0 0; padding: 0; justify-content: center; border: 0; }
.sh-seite .woocommerce-pagination li { border: 0; }
.sh-seite .woocommerce-pagination a, .sh-seite .woocommerce-pagination span {
  display: inline-grid; place-items: center; min-width: 44px; height: 44px; border: 1px solid var(--sh-linie); text-decoration: none; font-variant-numeric: tabular-nums;
}
.sh-seite .woocommerce-pagination .current { border-color: var(--sh-wahl); color: var(--sh-wahl); }

/* Germanized: Pflichtangaben in der Gestalt der Preiszeile. */
.sh-seite .wc-gzd-additional-info { margin: 0; font-size: .75rem; line-height: 1.45; color: var(--sh-text-2); }
.sh-seite .wc-gzd-additional-info a { color: inherit; }

/* Inhaltsseiten (Datenschutz, Impressum …): Storefronts Seitentitel als .sh-h1. */
.sh-seite .entry-header { padding: 24px 0 18px; }
.sh-seite .entry-title { margin: 0; font-size: clamp(2rem, 3.4vw, 3rem); line-height: .98; font-weight: var(--pc-gewicht-sport); font-stretch: var(--pc-breite-sport); text-transform: uppercase; }
.sh-seite .entry-content { font-size: 1rem; line-height: 1.62; color: var(--sh-text-2); }
.sh-seite .entry-content > h2 { color: var(--sh-text); font-size: clamp(1.5rem, 2.4vw, 2.125rem); line-height: 1.04; font-weight: var(--pc-gewicht-sport); font-stretch: var(--pc-breite-sport-h2); text-transform: uppercase; margin-top: 1.6em; }

/* Fehlseite */
.sh-fehlseite { padding-top: 32px; }
.sh-fehlseite .sh-h1 { margin-top: 10px; }
.sh-fehlseite .sh-text { margin-top: 14px; }

/* Kopf auf dem Telefon: Die Suche rueckt in die zweite Zeile (Register),
   die Ziele bleiben aber am rechten Rand statt in der leeren Mitte. */
@media (max-width: 759px) {
  .sh-kopf-zeile .sh-kopf-ziele { grid-column: 3; grid-row: 1; justify-self: end; }
}

/* UVP-Vergleich in der Preiszeile (inc/raster.php, padelshop_uvp_html). */
.sh-preis-uvp abbr { text-decoration: none; border: 0; }

/* Flaggen nebeneinander statt untereinander (Marco, 06.10.2026): Prozent
   und "Neu" in einer Zeile, bricht bei Platzmangel um. */
.sh-seite .sh-kachel-flaggen, .sh-seite .sh-aktion-flaggen { flex-direction: row; flex-wrap: wrap; align-items: flex-start; right: 52px; }

/* Banner (inc/banner.php, banner.css): Hero breit oder mobil je nach
   Breite, Abstand zum Kopf, Startraster in der Spalte ohne eigenen Rand. */
.sh-bn-schmal { display: none; }
@media (max-width: 640px) {
  .sh-bn-breit  { display: none; }
  .sh-bn-schmal { display: block; }
}
.sh-seite .sh-bn-start { padding-top: 24px; }
.sh-seite .sh-bn-hero .bn-schlag { color: var(--bn-text); }
.sh-neuheiten-banner { margin: 12px 0 20px; }
.sh-seite .sh-bn-raster { padding: 0; background: none; }
.sh-bn-raster .bn { position: relative; }
.sh-bn-ziel { position: absolute; inset: 0; z-index: 3; }
.sh-bn-raster .bn-tun { position: relative; z-index: 4; }
@media (max-width: 900px) {
  .sh-seite .sh-bn-raster { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .sh-seite .sh-bn-raster > .bn:first-child { grid-column: span 2; grid-row: auto; aspect-ratio: var(--W) / var(--H); height: auto; }
}
.sh-marken-banner { margin: 8px 0 20px; }
.sh-marken-banner + .sh-kategorie-text { margin: 0 0 20px; max-width: 70ch; }
/* Taschen-Teaser: die flache Schlaegertasche bekommt eine breitere,
   tiefer sitzende Zelle und ueberlappt den Rucksack, sonst wirkt sie neben
   ihm zu klein (Marco, 07.10.2026). */
.bn-v-schnitt.bn-f-kachel .bn-ware:has(.sh-bn-tasche) { left: 40%; width: 56%; top: 18%; height: 38%; z-index: 2; }
.bn-v-schnitt.bn-f-kachel .bn-ware:has(+ .bn-ware .sh-bn-tasche) { left: 22%; }
