/* Basis-Styles von lastsold.de — extrahiert aus base.html (Befund C4:
   108 KB Inline-CSS auf JEDER Seite, unkachebar). Versioniert via ?v=. */
:root{
  /* Warmes Dunkel statt Blaugrau (vorher #07070a/#0d0d12/#15151b — alle mit mehr
     Blau als Rot → wirkten „standard-blau"). Kanten leicht GOLD statt Weiß. */
  --bg:#080706; --elev:#12100d; --card:#1a1713;
  --ink:#f4f1e8; --ink2:#8a8578; --ink3:rgba(255,255,255,.35);
  --gold:#d4af6a; --gold2:#f0cc7f; --silver:#c4c8cf;
  --success:#d4af6a; --warn:#ff5fb3;
  --stroke:1px solid rgba(226,188,116,.075); --stroke2:1px solid rgba(226,188,116,.13);
  --r:18px; --rp:999px;
  /* ── DIALKIT-REGLER: live tunebar per ?dial=1 (siehe /static/dialkit.js) ──
     Alles, woran wir sonst blind rumschrauben, hängt an diesen Vars. */
  --gold-lite:226,188,116;   /* helles Gold (RGB-Tripel, wie im Search-Beam) */
  --gc-glass:.26;            /* Glas-Deckkraft der Kästen */
  --gc-blur:15px;            /* Glas-Blur */
  --gc-rim:.08;              /* goldene Kante */
  --gc-hi:.265;              /* helle Glaskante oben   (von dir getunt) */
  --gc-inner:.82;            /* Gold-Schein innen      (von dir getunt) */
  --gc-glow:.22;             /* goldener Schatten aussen */
  --gc-depth:.8;             /* Tiefe (dunkler Schatten) */
  --gc-radius:18px;          /* Ecken-Radius */
  --beam-strength:1;         /* Beam-Intensität (liest beam.css) */
  --ns-fill:1;               /* Suchleisten-Füllung: Helligkeit */
  --ns-glow:.20;             /* Suchleisten-Fokus-Glow */
  --ns-rim:.20;              /* Suchleisten-Kante: Gold-Anteil (statt dickem Grau) */
  --ns-ph:.26;               /* Platzhalter im Ruhezustand: zurückgenommen, damit
                                der Text in der Leiste sitzt statt darauf zu liegen */
  --tb-drop:4px;             /* Kachel-Beam: Schein nach unten auf die Kante schieben */
  /* Ecken-Radius eines KARTENBILDS — proportional, nicht px! Eine echte Pokémon-Karte
     misst 63×88mm bei ~3mm Eckenradius → 4.8% der Breite / 3.4% der Höhe. So sieht die
     Ecke bei JEDER Größe richtig aus (Laufband-Thumb bis Kartenseite). Feste px waren
     der Fehler: was auf 300px passt, ist auf 40px eine Kugel. */
  --card-r:4.8% / 3.4%;      /* echter Pokémon-Karten-Radius (grosse Ansichten) */
  --card-r-sm:3% / 2.1%;     /* kleine Karten: weniger rund, sonst wirken sie unecht */
  --serif:ui-rounded,"SF Pro Rounded","SF Pro Text",-apple-system,system-ui,sans-serif;
  --sans:-apple-system,"SF Pro Text",system-ui,sans-serif;
  --mono:"JetBrains Mono",ui-monospace,monospace;
}
*{box-sizing:border-box}
/* Full-Bleed-Elemente (100vw) dürfen bei klassischer Scrollbar minimal überstehen →
   clip fängt das ab OHNE einen Scroll-Container zu erzeugen (sticky-Header bleibt heil). */
/* overflow-x auch auf body: der Such-Goo-Effekt ragt 68px (unsichtbar) über die
   Leiste hinaus und machte die Seite auf schmalen Handys 54px breiter als der
   Bildschirm — man konnte den ganzen Content seitlich verschieben. */
/* text-size-adjust:100%: iOS-Safari bläst sonst Text in scrollbaren Blöcken
   (z.B. eBay-Titel der Verkaufszeilen) heuristisch auf — manche Zeilen 10px,
   manche ~14px (VH: „unterschiedliche fontsizes, bitte die kleinere"). */
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
html,body{overflow-x:clip}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);
  font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
h1,h2,h3{font-family:var(--serif);font-weight:500;letter-spacing:-.01em;margin:0}
.mono{font-family:var(--mono)}
.label{font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ink2)}
.label-s{font-family:var(--mono);font-size:9px;font-weight:500;letter-spacing:.2em;
  text-transform:uppercase;color:var(--ink2)}
/* Section-Header (Opal-inspiriert): Glow-Icon-Chip + sentence-case-Titel statt Mono-CAPS+Emoji.
   Farbe je Sektion über --ac (eigener „Glow"). */
.sec{display:flex;align-items:center;gap:12px;margin:34px 0 16px}
.sec-ic{flex:0 0 auto;width:33px;height:33px;border-radius:11px;display:grid;place-items:center;color:var(--ac,#d4af6a);
  background:color-mix(in srgb,var(--ac,#d4af6a) 15%,transparent);
  box-shadow:0 0 24px -7px var(--ac,#d4af6a),inset 0 0 0 1px color-mix(in srgb,var(--ac,#d4af6a) 34%,transparent)}
.sec-ic svg{width:16px;height:16px;display:block}
.sec-h{font-family:var(--sans);font-size:17.5px;font-weight:600;color:var(--ink);letter-spacing:-.012em;line-height:1.1}
.sec-sub{font-family:var(--mono);font-size:10px;color:var(--ink3);letter-spacing:.1em;text-transform:uppercase;margin-top:4px}
.sec-sub b{color:var(--ac,#d4af6a);font-weight:600}
.sec-x{margin-left:auto;font-size:12px;color:var(--gold);text-decoration:none;white-space:nowrap}
.sec--center{justify-content:center}
.sec--live{--ac:#d4af6a}.sec--gold{--ac:#d4af6a}.sec--amber{--ac:#e8944a}.sec--blue{--ac:#6ea8fe}.sec--teal{--ac:#3fb6a8}.sec--violet{--ac:#a98bff}
.gold{color:var(--gold)}
.hero-num{font-family:var(--serif);font-style:italic;font-size:44px;font-weight:400;
  color:var(--gold);line-height:1;font-variant-numeric:tabular-nums}
header{position:sticky;top:0;z-index:10;background:rgba(14,12,10,.85);
  backdrop-filter:blur(20px);border-bottom:var(--stroke);
  display:flex;align-items:center;flex-wrap:wrap;gap:24px;padding:14px 28px;
  transition:transform .28s ease;will-change:transform}
@media (max-width:560px){
  header{gap:12px;padding:12px 14px}
  header nav{gap:14px}
  header .brand{font-size:18px}
  header .brand-logo{height:27px}
  header .langs{gap:6px}
  main{padding:16px 14px}
  /* Genau 2 Spalten auf dem Handy — wie CardLab */
  .setgrid{grid-template-columns:1fr 1fr;gap:10px}
  /* Karten-Grid: 2 Spalten Standard, per Spalten-Schalter (ls_mcols) 1–3 wählbar */
  .card-grid{grid-template-columns:repeat(var(--mcols,2),minmax(0,1fr));gap:12px}
  .disc-title{font-size:27px}
  .disc-sub{font-size:13px}
  .disc-pill input{font-size:16px}            /* ≥16px → iOS zoomt beim Fokus nicht rein */
  /* Filter/Sort fingerfreundlicher + nicht überlaufen */
  .ls-sel{min-width:0;width:100%;flex:1 1 100%;padding:11px 34px 11px 14px;font-size:12px}
  .ls-lang{flex:0 0 auto}                       /* Sprache kompakt neben RAW/graded (eine Zeile) */
  .ls-langbtn{padding:9px 11px;font-size:12px;min-width:0}   /* kompakt: nur Flagge + Pfeil, kein 210px-Minimum */
  .ls-langbtn .lc-name{display:none}            /* nur Flagge + Pfeil, kein Sprachname */
  .ls-chip{padding:9px 12px;font-size:11px}
  .ls-chip.ls-rar{padding:8px 11px 8px 9px}
  .ls-chip.ls-rar .rar-lbl{font-size:11px}
  .ls-chip.ls-rar .rar-svg{height:12px}
  .browse-bar{gap:6px}
  .setcard .logo{height:96px}
  .setcard .snm{font-size:14px}
}
header .brand{font-family:var(--serif);font-size:22px;font-weight:600;white-space:nowrap;flex:0 0 auto;
  display:inline-flex;align-items:center;gap:9px;text-decoration:none}
/* Das Bild ist doppelt so gross ausgeliefert (86x64) wie dargestellt — sonst wirkt
   ein 3D-Render auf scharfen Bildschirmen matschig. */
header .brand-logo{height:32px;width:auto;display:block;flex:0 0 auto}
header nav{display:flex;gap:20px}
header nav a{font-family:var(--mono);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink2)}
header nav a:hover{color:var(--ink)}
header .sp{margin-left:auto}
header .langs{display:flex;gap:8px}
header .langs a{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:10px;
  text-transform:uppercase;color:var(--ink3);padding:3px 7px;border-radius:var(--rp)}
header .langs a .flag-ic{opacity:.5;transition:opacity .15s}
header .langs a:hover .flag-ic,header .langs a.on .flag-ic{opacity:1}
header .langs a.on{color:var(--gold);border:var(--stroke2)}
/* eBay-artiger Header: Sets-Durchstöbern + Suchleiste (Kamera + Finden) */
.nav-sets{display:inline-flex;align-items:center;gap:9px;font-family:var(--sans);font-size:13px;color:var(--ink);
  border:var(--stroke2);border-radius:var(--rp);padding:6px 15px 6px 11px;text-decoration:none;flex:0 0 auto;white-space:nowrap;
  transition:border-color .2s,box-shadow .2s,transform .2s}
.nav-sets:hover{border-color:rgba(212,175,106,.55);box-shadow:0 4px 16px rgba(212,175,106,.14);transform:translateY(-1px)}
.nav-sets .nschev{color:var(--ink3);flex:0 0 auto}
/* Booster-Pack-Stapel als Icon: 2 dunkle Holo-Packs hinten gefächert + 1 Gold-Pack vorne.
   Beim Hover fächern sie auf und heben leicht ab — „zum Anklicken". */
.nspacks{display:inline-flex;flex:0 0 auto;line-height:0;filter:drop-shadow(0 2px 3px rgba(0,0,0,.4))}
.nspacks .pk{transform-box:fill-box;transform-origin:50% 92%;transition:transform .32s cubic-bezier(.34,1.5,.5,1)}
.nspacks .pk1{transform:rotate(-14deg)}
.nspacks .pk2{transform:rotate(14deg)}
.nav-sets:hover .pk1{transform:rotate(-24deg) translateY(-.5px)}
.nav-sets:hover .pk2{transform:rotate(24deg) translateY(-.5px)}
.nav-sets:hover .pk3{transform:translateY(-2.5px)}
@media(prefers-reduced-motion:reduce){.nspacks .pk{transition:none}}
.hdr-left{flex:1;display:flex;align-items:center;gap:16px;min-width:0}
.hdr-right{flex:1;display:flex;align-items:center;justify-content:flex-end}
.navbar-search{position:relative;flex:0 1 560px;height:54px;display:flex;align-items:center;background:transparent;
  border-radius:var(--rp);overflow:visible;transition:box-shadow .4s}
.navbar-search:focus-within{box-shadow:0 0 24px rgba(var(--gold-lite),var(--ns-glow))}
/* Border-Beam „line"-Variante (1:1 aus Jakub Antaliks border-beam, generateBeamCSS)
   liegt in /static/beam.css und wirkt auf .navbar-search[data-active] + [data-beam-bloom]. */
/* GOOEY-SEARCH — Kamera LINKS, Lupe RECHTS. Im Ruhezustand ist Lupe+Rand dezent GRAU;
   beim Fokus werden sie GOLD, während die Lupen-Blase nach RECHTS rausknospt.
   Zwei goo-Layer: Rand-Schicht (voll) + Dunkel-Schicht (2px eingerückt) → fließender Rand.
   Gold = animierbare background-color (Verlauf-Overlay bleibt für Sheen); Glow nur bei Fokus. */
.mb-goo{position:absolute;top:0;bottom:0;left:0;right:-68px;pointer-events:none}
.mb-rim{z-index:0;filter:url(#nsx-goo) drop-shadow(0 0 0 rgba(212,175,106,0)) drop-shadow(0 0 0 rgba(212,175,106,0));transition:filter .4s}
.navbar-search:focus-within .mb-rim{filter:url(#nsx-goo) drop-shadow(0 1px 5px rgba(212,175,106,.5)) drop-shadow(0 0 15px rgba(212,175,106,.32))}
.mb-fill{z-index:1;filter:url(#nsx-goo) brightness(var(--ns-fill))}
.mb-goo .bar{position:absolute;border-radius:var(--rp)}
.mb-goo .bub{position:absolute;top:50%;border-radius:50%;transition:right .82s cubic-bezier(.32,1.5,.52,1)}
/* Kante: KEIN dickes Grau mehr (#413a2e). Stattdessen eine gold-getönte dunkle
   Kante im Kästen-Look. Die Goo-Schichten müssen OPAK bleiben (der Metaball-Filter
   schwellt Alpha hart ab) → color-mix statt rgba: opake Farbe, aber per --ns-rim
   dosierbar. Weißer Sheen deutlich zurückgenommen. */
.mb-rim .bar,.mb-rim .bub{
  background-color:color-mix(in srgb, rgb(var(--gold-lite)) calc(var(--ns-rim) * 100%), #100d09);
  background-image:linear-gradient(157deg,rgba(255,255,255,.08),rgba(255,255,255,0) 50%,rgba(0,0,0,.14));
  transition:background-color .45s}
.navbar-search:focus-within .mb-rim .bar,.navbar-search:focus-within .mb-rim .bub{background-color:#d3ab63}
.mb-rim .bar{left:0;right:68px;top:0;bottom:0}
.mb-rim .bub{right:72px;width:50px;height:50px;margin-top:-25px}
/* Füllung 1px statt 2px eingerückt → die Kante wird halb so dick. Oben ein
   Gold-Schimmer (wie --gc-hi/--gc-inner bei den Kästen): translucenter Radial
   ÜBER dem opaken Verlauf → Schicht bleibt opak, Goo bleibt heil. */
.mb-fill .bar{left:1px;right:69px;top:1px;bottom:1px;
  background:radial-gradient(150% 190% at 50% -14%, rgba(var(--gold-lite),calc(var(--gc-inner) * .11)), transparent 62%),
             linear-gradient(180deg,#282218 0%,#17140f 42%,#0e0c0a 100%);
  transition:background .45s ease}
.mb-fill .bub{right:73px;width:48px;height:48px;margin-top:-24px;
  background:radial-gradient(150% 190% at 50% -14%, rgba(var(--gold-lite),calc(var(--gc-inner) * .11)), transparent 62%),
             linear-gradient(180deg,#282218 0%,#17140f 42%,#0e0c0a 100%);
  transition:background .45s ease}
/* Fokus: Füllung etwas dunkler (passend dazu, dass der Rand golden wird) */
.navbar-search:focus-within .mb-fill .bar,
.navbar-search:focus-within .mb-fill .bub{background:linear-gradient(180deg,#18140f 0%,#0d0b09 42%,#080706 100%)}
.navbar-search:focus-within .mb-rim .bub{right:2px}
.navbar-search:focus-within .mb-fill .bub{right:4px}
/* Kamera ist raus (die Foto-Suche war ohnehin nur ein „kommt bald"-Platzhalter).
   Die Lupe ist jetzt das Ruhe-Icon: dezent gold in der Bar; beim Fokus knospt sie
   in der goldenen Blase nach RECHTS AUS der Bar heraus — der Blob-Effekt (.82s). */
.mb-mag{position:absolute;right:9px;top:50%;transform:translateY(-50%);opacity:1;pointer-events:auto;z-index:3;
  width:34px;height:34px;display:flex;align-items:center;justify-content:center;
  color:rgba(var(--gold-lite),.55);
  background:none;border:none;padding:0;cursor:pointer;
  transition:right .82s cubic-bezier(.32,1.5,.52,1),opacity .35s ease,color .4s}
.mb-mag:hover{color:rgb(var(--gold-lite))}
.navbar-search:focus-within .mb-mag{right:-51px;color:#1a1408}   /* in der Blase: dunkel auf Gold */
/* Ruhezustand: kleiner und zurückgenommen, damit der Text IN der Leiste sitzt
   statt darauf zu liegen. Beim Fokus wächst er auf die volle Größe — dieselbe
   Feder wie beim Ausknospen der Lupe, damit beides eine Bewegung ist. */
.ns-input{flex:1;min-width:0;height:100%;background:none;border:none;outline:none;color:var(--ink);position:relative;z-index:2;
  font-family:var(--sans);font-size:13.5px;letter-spacing:.1px;padding:0 54px 0 22px;
  transition:padding .82s cubic-bezier(.32,1.5,.52,1),font-size .34s cubic-bezier(.32,1.5,.52,1)}
.navbar-search:focus-within .ns-input{font-size:15px}
/* Platzhalter transparenter — er sitzt exakt mittig (gemessen: 0px Versatz), war
   nur zu satt und wirkte dadurch schwer/verrutscht. */
.ns-input::placeholder{color:rgba(244,241,232,var(--ns-ph));transition:color .34s ease}
/* Beim Tippen darf der Platzhalter ruhig etwas präsenter sein — im Ruhezustand
   soll er hinter den Effekten zurücktreten, nicht auf ihnen liegen. */
.navbar-search:focus-within .ns-input::placeholder{color:rgba(244,241,232,.46)}
.ns-input::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}
.navbar-search:focus-within .ns-input{padding-right:20px}
/* Schmale Viewports: Blase nicht so weit rausknospen (Kollision mit Nachbar-Elementen). */
@media(max-width:940px){
  .navbar-search:focus-within .mb-rim .bub{right:66px}
  .navbar-search:focus-within .mb-fill .bub{right:68px}
  .navbar-search:focus-within .mb-mag{right:16px}
}
@media(prefers-reduced-motion:reduce){.mb-rim,.mb-fill{filter:none}.mb-goo .bub,.mb-mag,.ns-input{transition:none}}
/* Instant-Suche: Ergebnisse blubbern gooey aus der Bar (Codrops-Blob). Bis zu 5:
   1 Set + 1 Pokémon + 3 beste Karten. ZWEI Layer: dunkle Blobs im #nsx-goo hinten
   (verschmelzen gooey), Inhalt scharf drüber. Beide knospen gestaffelt im Feder-Bounce
   rein — identische Höhe/Gap/Timing → sie bewegen sich deckungsgleich. */
.ns-sugg{position:absolute;top:calc(100% + 3px);left:0;right:0;z-index:40;pointer-events:none}
.ns-sugg-goo{position:absolute;inset:0;z-index:0;filter:url(#nsx-goo-sugg);display:flex;flex-direction:column;gap:6px}
.ns-sugg-blob{height:50px;flex:0 0 auto;border-radius:16px;background:#1b1710;transform-origin:top center;
  opacity:0;transform:translateY(-18px) scale(.5);
  transition:transform .52s cubic-bezier(.34,1.56,.5,1),opacity .34s ease;transition-delay:calc(var(--i,0) * .055s)}
.ns-sugg-blob.in{opacity:1;transform:none}
.ns-sugg-list{position:relative;z-index:1;display:flex;flex-direction:column;gap:6px;pointer-events:auto}
.ns-sugg-item{display:flex;align-items:center;gap:11px;text-decoration:none;color:var(--ink);height:50px;box-sizing:border-box;
  border-radius:16px;padding:0 14px;transform-origin:top center;
  opacity:0;transform:translateY(-18px) scale(.5);
  transition:transform .52s cubic-bezier(.34,1.56,.5,1),opacity .34s ease,background .15s;
  transition-delay:calc(var(--i,0) * .055s)}
.ns-sugg-item.in{opacity:1;transform:none}
.ns-sugg-item:hover{background:rgba(212,175,106,.09)}
.ns-sugg-thumb{width:36px;height:36px;flex:0 0 auto;display:flex;align-items:center;justify-content:center;
  border-radius:9px;overflow:hidden;background:rgba(var(--gold-lite),.07);color:var(--gold)}
.ns-sugg-thumb img{width:100%;height:100%;object-fit:contain}
.ns-sugg-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.ns-sugg-nm{font-size:14.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:.1px}
.ns-sugg-sub{font:600 10.5px/1.2 var(--mono);color:var(--ink3);letter-spacing:.05em;text-transform:uppercase;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:5px}
.ns-sugg-sub>span{overflow:hidden;text-overflow:ellipsis}
/* Set-SYMBOL (das kleine Zeichen von der Karte) als Erkennungsmarke — wie im Kartenkopf. */
.ns-sugg-ssym{height:13px;max-width:20px;object-fit:contain;object-position:left;flex:0 0 auto;opacity:.85}
.ns-sugg-price{font-size:14px;font-weight:700;color:var(--gold);flex:0 0 auto;white-space:nowrap}
.ns-sugg-kind{font:700 9.5px/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink2);
  border:1px solid rgba(212,175,106,.4);border-radius:6px;padding:4px 6px;flex:0 0 auto}
@media(prefers-reduced-motion:reduce){.ns-sugg-item,.ns-sugg-blob{transition:opacity .2s}}
.lang-dd{position:relative;flex:0 0 auto}
.lang-btn{display:inline-flex;align-items:center;gap:6px;background:none;border:var(--stroke2);border-radius:var(--rp);padding:7px 11px;color:var(--ink2);font-family:var(--mono);font-size:11px;text-transform:uppercase;cursor:pointer}
.lang-btn:hover{border-color:rgba(212,175,106,.5);color:var(--ink)}
.lang-btn .flag-ic{opacity:.85}.lang-btn .chev{color:var(--ink3);transition:transform .15s}
.lang-dd.open .lang-btn{border-color:rgba(212,175,106,.55);color:var(--ink)}.lang-dd.open .lang-btn .chev{transform:rotate(180deg)}
.lang-menu{position:absolute;left:0;right:0;top:calc(100% + 7px);background:var(--card);border:var(--stroke2);border-radius:14px;padding:5px;opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity .15s,transform .15s,visibility .15s;z-index:30;box-shadow:0 12px 34px rgba(0,0,0,.45)}
.lang-dd.open .lang-menu{opacity:1;visibility:visible;transform:none}
.lang-menu a{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:9px;color:var(--ink2);text-decoration:none;font-family:var(--mono);font-size:11px;text-transform:uppercase}
.lang-menu a:hover{background:rgba(255,255,255,.05);color:var(--ink)}.lang-menu a.on{color:var(--gold)}
.lang-menu a .flag-ic{opacity:.7}.lang-menu a.on .flag-ic{opacity:1}
.ls-toast{position:fixed;left:50%;bottom:26px;transform:translateX(-50%);background:var(--card);border:1px solid var(--gold);
  color:var(--ink);border-radius:var(--rp);padding:11px 18px;font-family:var(--sans);font-size:13px;z-index:200;
  box-shadow:0 10px 40px rgba(0,0,0,.5);opacity:0;transition:opacity .2s,transform .2s;pointer-events:none}
.ls-toast.show{opacity:1;transform:translateX(-50%) translateY(-4px)}
@media(max-width:720px){
  header{gap:10px;padding:9px 13px;flex-wrap:nowrap}   /* alles in EINER Zeile: Bildmarke · Suche · Sprache */
  .nav-sets{display:none}                       /* Kategorie-/Sets-Browse mobil raus (Schritt 2) */
  .hdr-left{flex:0 0 auto;gap:0}                 /* nur die Bildmarke — nicht wachsen, sonst drückt es die Suche weg */
  /* Schmal: nur die Bildmarke, der Schriftzug entfaellt. */
  header .brand-wort{display:none}
  header .brand-logo{height:30px}
  .navbar-search{flex:1 1 auto;min-width:0}      /* Suche füllt die Mitte */
  /* 16px ist Pflicht: darunter zoomt iOS Safari beim Antippen automatisch in die
     Suche rein. Genau 16 verhindert das, ohne maximum-scale (das killt Pinch-Zoom). */
  .ns-input{height:36px;font-size:16px}
  header.nav-up{transform:translateY(-100%)}     /* runter scrollen → Nav slidet hoch raus */
  .hdr-right{flex:0 0 auto}
  .lang-btn{padding:7px 9px}                     /* Sprache: Flagge + Kürzel (DE) SICHTBAR + kompakt */
  .lang-btn span{display:inline}
}
/* ── EINE NAV — ÜBERALL DIE GLEICHE ─────────────────────────────────────────
   Die Nav besteht NUR aus der Suchleiste (kein Logo, kein Sets-Link, kein
   Sprachumschalter — die leben jetzt im Footer). Zwei Zustände:
     • nicht gedockt (nur Startseite ganz oben): transparent, große Suche unter
       dem Titel — Laufband/Index/Titel stehen als Inhalt darüber (above_nav).
     • gedockt (überall sonst sofort, auf der Home beim Hochscrollen): schlanke
       Bar oben, Suche schrumpft rein, danach Auto-Hide beim Runterscrollen.
   Es animiert bewusst NUR die Suche. */
body.home{padding-top:16px}   /* Luft über dem Laufband (nur Home, scrollt weg) */
/* Im Kopf steht NUR die Suche — keine Marke, keine Wege, keine rechte Seite. */
.hdr-right,.hdr-left{display:none}
/* Startseiten-Kopf (VH): Logo + Sets/Pokémon/Artists — nur Desktop, nur ganz
   oben. Absolut links im sticky Header, damit die Suche zentriert bleibt;
   beim ersten Scrollen (body.hgescrollt) sofort weg — die Suche bleibt. */
.hh-nav{display:none}
@media (min-width:900px){
  body.home .hh-nav{display:flex;align-items:center;gap:8px;position:absolute;left:28px;top:50%;
    transform:translateY(-50%);z-index:5;transition:opacity .15s ease}
  body.home.hgescrollt .hh-nav{opacity:0;pointer-events:none}
}
.hh-logo{display:flex;align-items:center;margin-right:4px}
.hh-logo img{height:28px;width:auto;display:block}
/* Kartenseite: der Kopf liegt UEBER dem Inhalt statt im Fluss, dadurch ruecken Karte
   und Blaettern-Leiste nach oben. Er startet ausgefahren und kommt beim Hochscrollen
   herein — das uebernimmt die bestehende nav-up-Steuerung. */
body.kopf-frei header{position:fixed;left:0;right:0;top:0}
body.kopf-frei header.nav-up{transform:translateY(-100%)}
/* GANZ OBEN gilt die alte Anordnung: Suche sichtbar UEBER der Blaettern-Leiste.
   Der Kopf bleibt zwar fixiert, aber der Inhalt macht ihm per padding Platz —
   ohne das schob sich die Suche beim Hochscrollen mitten AUF die Leiste. Beim
   Runterscrollen faellt das Polster weg und der Inhalt rueckt wieder nach oben. */
/* Ohne Suche darueber klebte die Blaettern-Leiste an der Oberkante — etwas Luft (VH). */
body.kopf-frei main{transition:padding-top .28s ease;padding-top:44px}
body.kopf-frei.ganz-oben main{padding-top:100px}
@media (max-width:560px){
  body.kopf-frei main{padding-top:30px}
  body.kopf-frei.ganz-oben main{padding-top:86px}
}
/* Der Blur gehoert dem SCHLEIER, nicht der Suche (VH): er liegt immer oben, sobald
   gescrollt ist — die Suche faehrt darueber ein und aus, ohne ihn mitzunehmen.
   Vorher trug der Kopf den Blur selbst; fuhr er raus, war der Blur weg, fuhr er
   rein, stand ein harter dunkler Balken ueber dem Inhalt. */
/* Der Schleier ist ein REINER Farbverlauf — oben satt, nach unten transparent,
   nichts dahinter verschwommen (VH: "kein Blur, nur der alte Verlauf"). */
body.kopf-frei::before{content:"";position:fixed;top:0;left:0;right:0;height:78px;
  z-index:9;pointer-events:none;
  background:linear-gradient(to bottom,rgba(14,12,10,.92),rgba(14,12,10,0));
  opacity:0;transition:opacity .3s ease}
@media (max-width:560px){body.kopf-frei::before{height:70px}}
body.kopf-frei.geblurt::before{opacity:1}
/* Die Suche selbst malt auf der Kartenseite KEINEN Hintergrund mehr — genau diese
   Doppelung (eigener Verlauf + eigene Maske UEBER dem Schleier) war der hässliche
   Balken. */
body.docked.kopf-frei header{background:none;border-bottom:0;
  -webkit-backdrop-filter:none;backdrop-filter:none;
  -webkit-mask-image:none;mask-image:none}
/* SCHWEBENDE NAVIGATION (VH): ersetzt das frühere Dock. Im Kopf steht nur die Suche;
   die Wege schweben unten ueber dem Inhalt und tauchen erst auf, wenn der Kopfbereich
   durchgescrollt ist — ueber der Schlagzeile soll nichts liegen. */
/* max() statt Addition (VH): 20px Rand PLUS die volle Safe-Area stapelten sich auf
   dem iPhone zu ~54px — die Leiste hing sichtbar in der Luft, mit Karten darunter.
   max() nimmt nur den groesseren der beiden Werte: am iPhone genau die Hoehe der
   Home-Zone (buendig ueber Safaris Pille), ueberall sonst die normalen 20px. */
.ls-dock{position:fixed;left:50%;bottom:max(20px, env(safe-area-inset-bottom, 0px));transform:translateX(-50%) translateY(10px);z-index:60;
  display:flex;align-items:center;gap:6px;padding:7px;border-radius:22px;max-width:calc(100vw - 20px);
  background:rgba(12,12,16,.8);border:1px solid rgba(255,255,255,.10);
  -webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);
  /* KEIN Aussenschatten mehr (VH): der dunkle Schein hinter der Leiste wirkte
     wie ein Schleier — nur die feine Innenkante bleibt. */
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06);
  opacity:0;pointer-events:none;transition:opacity .3s ease,transform .3s ease}
.ls-dock.on{opacity:1;pointer-events:auto;transform:translateX(-50%) translateY(0)}
/* Auch .hn-p/.hn-cta einzeln: die Pillen stehen inzwischen auch im Footer, wo
   Mono/Uppercase/kein Flex vererbt wird — ohne diese Regel hingen sie dort
   als zerrissene Kästen mit Text am oberen Rand. */
.ls-dock a,.hn-p,.hn-cta{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;
  white-space:nowrap;transition:background .15s,border-color .15s,color .15s;
  text-transform:none;font-family:var(--sans);letter-spacing:.01em}
/* Wie im Vorbild: die beiden AUSSEREN Elemente fuellen die Leiste fast ganz aus,
   die Woerter dazwischen sitzen etwas eingerueckt. Jeder Radius ist rund 13 % der
   eigenen Hoehe, dadurch wirken die Rundungen ineinander gestaffelt statt gleich. */
.hn-mark{width:52px;height:44px;border-radius:15px;background:rgba(0,0,0,.45);flex:0 0 auto;
  margin-right:3px}
.hn-mark img{height:27px;width:auto;display:block}
.hn-mark:hover{background:rgba(0,0,0,.65)}
.hn-p{height:38px;padding:0 18px;border-radius:12px;border:1px solid rgba(255,255,255,.11);
  color:var(--ink2);font:500 13.5px/1 var(--sans)}
.hn-p:hover{color:var(--ink);border-color:rgba(226,188,116,.5);background:rgba(212,175,106,.09)}
.hn-cta{height:44px;padding:0 20px;border-radius:15px;background:var(--ink);color:#14110b;
  font:650 13.5px/1 var(--sans);margin-left:3px}
.hn-cta:hover{background:rgb(var(--gold-lite))}
@media (max-width:820px){
  .ls-dock{gap:5px;padding:6px;border-radius:19px;bottom:max(12px, env(safe-area-inset-bottom, 0px))}
  .hn-mark{width:44px;height:38px;border-radius:13px;margin-right:2px}
  .hn-mark img{height:23px}
  .hn-p{height:33px;padding:0 13px;font-size:12.5px;border-radius:11px}
  .hn-cta{height:38px;padding:0 15px;font-size:12.5px;border-radius:13px;margin-left:2px}
}
/* Der CTA weicht nur in der ENGEN Dock-Leiste — im Footer ist Platz. */
@media (max-width:620px){.hn-p{padding:0 11px;font-size:12px}.ls-dock .hn-cta{display:none}}
/* Nicht gedockt: transparenter Verlauf (blendet beim Andocken sauber über, statt
   hart aufzupoppen). Keine untere Kante. */
header{background:linear-gradient(to bottom,rgba(14,12,10,0),rgba(14,12,10,0));
  border-bottom:0;-webkit-backdrop-filter:none;backdrop-filter:none;padding:8px 28px 16px;
  transition:transform .28s ease,background .4s ease,padding .4s ease}
/* Suche = fixe Breite (flex:0 0 auto → Größe rein aus width), mittig via auto-Margin.
   Nur width/height animieren → beide Richtungen gleich weich, kein Flex-Sprung. */
.navbar-search{flex:0 0 auto;width:680px;max-width:100%;height:60px;margin:0 auto;
  transition:width .34s cubic-bezier(.4,0,.2,1),height .34s cubic-bezier(.4,0,.2,1)}
/* Angedockt: Suche schrumpft flüssig rein, Verlauf oben→unten transparent, keine Kante. */
/* NUR der Farbverlauf — oben satt, nach unten transparent. KEIN Weichzeichner:
   der liess Kartenraender unter dem Kopf verschwimmen und wirkte schmutzig (VH). */
body.docked header{background:linear-gradient(to bottom,rgba(14,12,10,.92),rgba(14,12,10,0));
  border-bottom:0;padding:12px 28px;
  -webkit-backdrop-filter:none;backdrop-filter:none;
  -webkit-mask-image:none;mask-image:none;
  transition:transform .28s ease,background .7s ease,padding .7s cubic-bezier(.22,1,.36,1)}
body.docked .navbar-search{width:560px;height:54px;
  transition:width .7s cubic-bezier(.22,1,.36,1),height .7s cubic-bezier(.22,1,.36,1)}
body.docked header.nav-up{transform:translateY(-100%)}   /* Auto-Hide nur wenn gedockt */
@media (max-width:560px){
  header{padding:6px 14px 12px}
  .navbar-search{height:52px}
  body.docked header{padding:9px 13px}
}
/* Karten-Bild: kein iOS/Android Long-Press "Bild teilen/speichern"-Popup */
.holo-card img,#ls-card-img{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}
main{max-width:1280px;margin:0 auto;padding:28px}
.card-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:16px}
@media (max-width:1200px){.card-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:860px){.card-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
.tile{position:relative;background:var(--elev);border:var(--stroke);border-radius:var(--r);
  overflow:visible;transition:border-color .12s}
.tile:hover{border-color:rgba(226,188,116,.30);z-index:5}   /* Kacheln SIND klickbar → Hover bleibt */
.tile img{width:100%;height:auto;display:block;background:var(--card)}
.tile .meta{padding:10px 12px}
.tile .nm{font-family:var(--serif);font-style:italic;font-size:16px;line-height:1.15}
/* Gold-Star im Kartennamen — Platzhalter-Glyph in Gold, bis das echte Symbol als
   Bild vorliegt. */
.ls-gstar{color:#e6c07a;font-style:normal;font-weight:400}
/* Untere Meta-Zeile: Wert + Rarität links, Mini-Verlauf rechtsbündig als
   Gegenpol über BEIDE Zeilen. */
.tile .meta-btm{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:4px}
/* flex:1 → nimmt den freien Platz der Zeile. Ohne das blieb die Spalte auf der
   Breite des PREISES stehen (62px), und die Meta-Zeile darunter wurde abgeschnitten
   ("#46 · …"), obwohl daneben 100px frei waren. */
.tile .meta-txt{min-width:0;flex:1 1 auto}
.tile .pr{font-family:var(--mono);font-size:13px;color:var(--gold)}
/* ── Set-Kachel (.tile--set): dieselbe Basis wie die Karten-Kachel — gleicher
   Rahmen, gleicher Hover, gleicher Beam, gleicher „Boden" (.meta). Statt des
   Karten-Scans steht oben das Set-Logo, und das kippt NICHT (kein .tile-card,
   also greift die Tilt-Delegation gar nicht erst). Ersetzt die früheren vier
   Eigenbauten .setcard / .setcard-cl / .set-flat / .relset. */
.tile--set{overflow:hidden}
/* Das Logo sitzt in einem EIGENEN Feld — genau wie der Karten-Scan in .tile-card:
   eigene Fläche, eigener Innenrand, klare Kante zur Meta-Zeile darunter. */
/* Proportional statt fester Höhe: das Logo-Feld soll die Kachel dominieren —
   wie der Karten-Scan bei den Karten-Kacheln — und mit der Spaltenbreite mitwachsen. */
.tile--set .tile-logo{position:relative;aspect-ratio:1.32;min-height:96px;display:flex;align-items:center;
  justify-content:center;padding:16px;background:var(--card);
  /* Oben die Kachel-Rundung (--r), NICHT den Karten-Radius: --card-r ist eine
     elliptische Prozentangabe für Karten-Scans und ergibt hier 0. */
  border-radius:calc(var(--r) - 1px) calc(var(--r) - 1px) 0 0;border-bottom:var(--stroke);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.05),inset 0 1px 0 rgba(255,255,255,.10)}
/* Deckel auf 52 % der Logo-Flaeche (VH): quadratische Logos wie McDonald's oder
   die Promo-Reihe fuellten die Kachel bis an den Rand aus, waehrend breite wie
   „Black Bolt" von selbst flach bleiben — nebeneinander wirkte das unruhig.
   Breite Logos beschneidet der Deckel nicht, sie sind ohnehin niedriger. */
.tile--set .tile-logo img{width:auto;max-width:100%;max-height:52%;object-fit:contain;
  background:transparent;filter:drop-shadow(0 3px 9px rgba(0,0,0,.55))}
.tile--set .tile-logo-ph{width:34px;height:34px;fill:none;stroke:var(--ink3);stroke-width:1.5;opacity:.45}
.tile--set .nm{font-size:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tile--set .set-ed{font-style:normal;font-size:12px;color:var(--gold)}
/* Kartenzahl links, Datum rechts daneben — statt untereinander. */
.tile--set .meta-txt{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.tile--set .pr{font-size:11px;letter-spacing:.02em}
.tile--set .st{flex:0 0 auto}
@media (max-width:560px){.tile--set .tile-logo{min-height:74px;padding:13px 11px}
  .tile--set .nm{font-size:15px}.tile--set .pr{font-size:10px}
  /* Am Handy ein strengerer Deckel (VH): 52 % ergaben bei quadratischen Logos
     (Promo, 151, McDonald's) 40 % Kachelhoehe, bei breiten nur 12 % — auf der
     kleinen Kachel wirkt dieser Unterschied viel staerker als am Desktop. */
  .tile--set .tile-logo img{max-height:32%}}
/* Stapel-Kachel: existiert eine Reverse-Holo-Variante, lugt hinter dem Scan eine
   schimmernde Kopie hervor (Material = Information, keine zweite Kachel). Der
   zweite Preis darunter gehört zur Variante; die Folien-Marke ersetzt Text. */
.tile-stack{position:absolute;top:0;left:0;right:0;aspect-ratio:.716;z-index:0;pointer-events:none;
  transform:rotate(3deg) translate(7px,-4px);transform-origin:bottom left;
  border-radius:var(--card-r);overflow:hidden;filter:saturate(.85) brightness(.85);
  transition:transform .38s cubic-bezier(.22,.9,.3,1.15),filter .38s}
/* Hover: der Stapel fächert auf — die Reverse-Kopie gleitet hinter der Karte
   hervor, die Basis kippt leicht dagegen (zwei Karten in der Hand). Der
   :has-Zweig hängt die Fächer-Drehung an den bestehenden 3D-Tilt an, statt
   ihn zu ersetzen. */
.tile:hover .tile-stack{transform:rotate(10deg) translate(46%,-2px);filter:saturate(1) brightness(.98)}
@supports selector(:has(*)){
  .tile:has(.tile-stack):hover .tile-card{transform:perspective(640px) rotateX(var(--rx,0deg))
    rotateY(var(--ry,0deg)) scale(var(--sc,1)) rotate(-3.5deg) translateX(-6%)}
}
.tile-stack img{width:100%;height:100%;object-fit:cover;display:block}
.ts-foil{position:absolute;inset:0;mix-blend-mode:screen;background:
  linear-gradient(115deg,rgba(255,110,220,.30),rgba(96,200,255,.32) 35%,rgba(140,255,175,.26) 65%,rgba(255,215,120,.30)),
  linear-gradient(180deg,rgba(255,255,255,.10),transparent 55%)}
.tile .tile-card{z-index:1}
.pr-rev{display:inline-flex;align-items:center;gap:4px;margin-left:9px;color:var(--ink2);cursor:pointer;font-weight:600}
.pr-rev:hover{color:var(--ink)}
.pr-foil{width:9px;height:9px;border-radius:2.5px;flex:none;
  background:linear-gradient(135deg,#f79ad9,#79c9f2 40%,#98e7ab 70%,#f2d089);
  box-shadow:inset 0 0 1px rgba(0,0,0,.45)}
/* „Wertvollste Karten"-Grid: goldene Premium-Kacheln (die teuersten PSA-10-Karten). */
/* Die Karte sitzt EINGELASSEN in einem gebürsteten Antik-Gold-Rahmen (gerahmtes
   Sammlerstück, kein knallgelber Kasten): schmaler Goldrand rundum + Versenk-Schatten,
   weiße Schrift, beim Hover ein Schimmer-Wisch. Warmes, mattes Gold statt Neon. */
.card-grid--gold .tile{position:relative;overflow:hidden;border:1px solid rgba(92,68,28,.75);
  background:linear-gradient(155deg,#cda45a 0%,#a67e3a 48%,#7c5c2b 100%);
  box-shadow:0 16px 40px -24px rgba(0,0,0,.8),inset 0 1px 0 rgba(255,244,208,.4),inset 0 -1px 0 rgba(0,0,0,.32)}
.card-grid--gold .tile .tile-card{margin:9px 9px 0;border-radius:9px;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.35),0 2px 9px rgba(0,0,0,.45),0 0 0 3px rgba(0,0,0,.16)}
.card-grid--gold .tile .meta{padding:9px 13px 11px}
.card-grid--gold .tile .nm{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.42)}
.card-grid--gold .tile .pr{font-weight:700;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.5)}
.card-grid--gold .tile .st{color:rgba(255,255,255,.75)}
/* Das Raster-Set-Zeichen (weißes Glyph auf dunklem Quadrat) hat einen schwarzen
   Kasten, der sich auf Gold nicht sauber freistellen lässt (screen → heller Kasten,
   Münze → gecropptes Foto). Auf den Premium-Kacheln daher weglassen; die Zeile
   bleibt sauber „#Nr · HR" in Weiß. */
.card-grid--gold .tile .st-sym{display:none}
/* Schimmer: liegt bereit (unsichtbar), wischt beim Hover einmal diagonal über das Gold.
   WICHTIG: Es wandert nur das LICHT (background-position auf einer 280 % breiten
   Fläche), NICHT die Ebene selbst. Vorher wurde das Pseudo-Element per translateX
   verschoben — bei 115°-Diagonale schnitt dessen eigene senkrechte Kante den Glanz
   sichtbar ab (VH 24.07.). Das Element deckt jetzt immer exakt die Kachel. */
.card-grid--gold .tile::before{content:"";position:absolute;inset:0;z-index:4;pointer-events:none;
  background:linear-gradient(115deg,transparent 38%,rgba(255,248,222,.42) 50%,transparent 62%);
  background-size:280% 100%;background-repeat:no-repeat;background-position:100% 0;opacity:0}
.card-grid--gold .tile:hover::before{opacity:1;animation:lsgoldsheen 1.05s ease-out}
@keyframes lsgoldsheen{from{background-position:100% 0}to{background-position:0% 0}}
/* ── EINE Hover-Geste fuer ALLE Kaesten (VH zeigte auf die Karten-Kachel) ──
   Es ist DERSELBE pulsierende Gold-Beam wie an .tile — kein Hochschieben. Das
   Element braucht die Klasse .ls-glow UND ein <div class="nsx-beamclip"> als Kind
   (genau wie eine Kachel); aktiviert wird per data-active beim Hover (JS unten,
   per Delegation — greift auch fuer nachgeladene Elemente wie die Angebote).
   Ab jetzt der Standard, nicht mehr pro Komponente handgemacht. */
.ls-glow{position:relative}
.ls-glow .nsx-beamclip{inset:0;--beam-r:14px;z-index:6}
.ks-tile.ls-glow .nsx-beamclip{--beam-r:18px}
.ls-glow:hover{border-color:rgba(226,188,116,.45)}
.card-grid--gold .tile:hover{border-color:rgba(140,104,44,.9);
  background:linear-gradient(155deg,#dcb267 0%,#b28843 48%,#87642f 100%);
  box-shadow:0 24px 52px -20px rgba(0,0,0,.85),inset 0 1px 0 rgba(255,248,220,.5),inset 0 -1px 0 rgba(0,0,0,.35)}
/* Mini-Verlauf: geprägter Graph, Gold hoch / Silber runter, keine Zahlen */
.tile .spark{flex:0 0 auto;display:block;height:34px;width:auto;
  filter:drop-shadow(0 1px 0 rgba(0,0,0,.55)) drop-shadow(0 0 2px rgba(0,0,0,.25))}
.tile .spark.spk-up{filter:drop-shadow(0 1px 0 rgba(0,0,0,.5)) drop-shadow(0 0 3px rgba(212,175,106,.4))}
.tile .st{font-family:var(--mono);font-size:9px;letter-spacing:.1em;color:var(--ink3);
  text-transform:uppercase;margin-top:2px;
  /* Einzeilig: seit das Set-Zeichen davorsteht, ist die Zeile enger und die
     Seltenheit rutschte in eine zweite Zeile ("#46 ·" / "C"). */
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Karten-Halter im Grid mit echtem 3D-Tilt (wie Einzelseite, Maus-getrieben pro
   Karte — kein Gyro, der würde alle Kacheln gleichzeitig kippen). Glanz + Folie
   folgen dem Cursor; Holo schimmert Regenbogen (Material = Info: Holo erkennt man
   am Schimmer, nicht am Text-Label), Non-Holo nur weißer Specular. */
/* Radius = echte Kartenecke (~5% der Breite, gemessen am Scan) auf allen 4 Ecken,
   skaliert mit der Kachel — so enden Holo/Glanz exakt an der Kartenkante. */
.tile-card{position:relative;isolation:isolate;overflow:hidden;border-radius:var(--card-r);
  transform:perspective(640px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) scale(var(--sc,1));
  transition:transform .4s cubic-bezier(.23,1,.32,1),box-shadow .3s;will-change:transform;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.05),inset 0 1px 0 rgba(255,255,255,.10),inset 0 -1px 0 rgba(0,0,0,.4)}
.tile-card.is-active{transition:transform .08s ease-out;
  box-shadow:inset 0 0 0 1px rgba(212,175,106,.35),inset 0 1px 0 rgba(255,255,255,.14),0 16px 34px rgba(0,0,0,.55)}
.tile-card img{display:block;border-radius:inherit}
/* Platzhalter für Karten, deren Bild noch keine Quelle veröffentlicht hat */
.tile-card.tile-noimg{display:flex;align-items:center;justify-content:center;aspect-ratio:.716;transform:none;
  background:radial-gradient(120% 90% at 50% 32%,rgba(255,255,255,.05),rgba(0,0,0,.28)),var(--card)}
.tile-noimg .noimg-mark{width:42%;max-width:92px;height:auto;color:var(--ink3);opacity:.45}
/* Edition-1-Stempel (nur Set-Kacheln — auf Karten-Scans ist er im Bild gedruckt) */
.ed1-stamp{position:absolute;z-index:3;pointer-events:none;
  filter:drop-shadow(0 1px 2px rgba(0,0,0,.6))}
.setcard .logo{position:relative}
.ed1-stamp-set{right:9px;bottom:9px;width:40px}
.ed1-stamp-setcard{right:12px;top:10px;width:40px}
/* „Nur auf Englisch": Corner-Ribbon (3D-Band um die obere linke Ecke) auf Set-Kacheln
   + ausgeschriebene Pille auf Karten-/Set-Kopf. */
/* „English only"-Eckband. Enden werden vom overflow:hidden des Logo-Containers
   geclippt = sie verschwinden hinter der Karte (kein sichtbares „hinteres Eck").
   Keine Fold-Dreiecke mehr — die standen vor statt hinter der Kante. */
.en-ribbon{position:absolute;top:0;left:0;width:112px;height:112px;overflow:hidden;z-index:4;pointer-events:none}
.en-ribbon b{position:absolute;top:26px;left:-40px;width:168px;transform:rotate(-45deg);text-align:center;
  font:800 8px/1.05 var(--sans);letter-spacing:.09em;text-transform:uppercase;color:#2c1f08;padding:5px 0;
  background:linear-gradient(180deg,#fbe6a3 0%,#e7c477 48%,#c69c52 100%);
  box-shadow:0 3px 8px rgba(0,0,0,.5),inset 0 1px 0 rgba(255,255,255,.6),inset 0 -2px 3px rgba(120,80,20,.4);
  text-shadow:0 1px 0 rgba(255,255,255,.4)}
.en-only-lg{display:inline-flex;align-items:center;gap:6px;font:600 12px/1 var(--sans);
  padding:5px 11px;border-radius:999px;color:var(--ink);background:rgba(212,175,106,.12);
  border:1px solid rgba(212,175,106,.35)}
.tile-card .tc-foil,.tile-card .tc-gloss{position:absolute;inset:0;pointer-events:none;border-radius:inherit}
/* Regenbogen-Folie — nur Holo, und NUR beim Kippen/Hover (Ruhezustand = echte
   Kartenfarben, sonst wäscht die Folie Full-Art-Rainbows aus). Position folgt Cursor. */
.tile-card .tc-foil{opacity:0;background:linear-gradient(115deg,
    rgba(255,0,140,.55) 8%,rgba(255,180,0,.5) 24%,rgba(50,255,180,.5) 42%,
    rgba(60,140,255,.5) 60%,rgba(200,60,255,.5) 78%,rgba(255,0,140,.55) 92%);
  background-size:230% 230%;background-position:var(--mx,50%) var(--my,50%);
  mix-blend-mode:color-dodge;filter:saturate(1.4) contrast(1.08);transition:opacity .3s}
.tile-card.is-holo.is-active .tc-foil{opacity:.45}
/* Wandernder Specular-Glanz — alle Karten, folgt dem Cursor beim Kippen (dezent) */
.tile-card .tc-gloss{background:radial-gradient(circle at var(--mx,50%) var(--my,50%),
    rgba(255,255,255,.32),rgba(255,255,255,.07) 22%,transparent 52%);
  opacity:calc(var(--o,0)*.5);mix-blend-mode:screen;transition:opacity .3s}
@media (prefers-reduced-motion:reduce){
  .tile-card{transform:none!important}
  .tile-card .tc-foil,.tile-card .tc-gloss{display:none}}
.section-card{background:var(--elev);border:var(--stroke);border-radius:var(--r);padding:20px}
input.search{background:rgba(255,255,255,.04);border:var(--stroke2);border-radius:var(--rp);
  padding:12px 18px;color:var(--ink);font-family:var(--mono);font-size:13px;width:100%;
  letter-spacing:.04em}
/* ── Abschnittskopf „Eyebrow + kursive Überschrift" (Chase Cards, Ähnliche Sets).
   Lag früher in set.html hinter {% if chase_cards %} — Sets ohne Chase-Karten
   zeigten den „Ähnliche Sets"-Kopf dadurch unstyled. */
.chase-h{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;margin:52px 0 14px}
.chase-k{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
.chase-h h2{font:italic 700 clamp(19px,3.6vw,25px)/1.2 var(--serif);margin:6px 0 0}
.chase-h .sub{font-family:var(--mono);font-size:11px;color:var(--ink3);padding-bottom:3px}
footer{max-width:1280px;margin:48px auto 0;padding:24px 28px calc(24px + env(safe-area-inset-bottom, 0px));border-top:var(--stroke);
  color:var(--ink3);font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase}
/* ── interaktive Karten-Detailansicht (card.js) ── */
/* Zwei Anker-Preise ganz oben (unter Name/Nummer): RAW + PSA 10 — die zwei Zahlen,
   die fast jeder als Erstes sucht. Reine ANZEIGE, kein Schalter (umgeschaltet wird
   über den RAW/GRADED-Switch unten). */
/* position:relative + Kopffreiheit: das Sicherheits-Siegel hängt über der oberen
   rechten Ecke (siehe .ls-trust) und braucht dort Platz, sonst ragt es in die Zeile
   mit Set-Name und Nummer. */
/* 16px oben wie urspruenglich — die 42px stammten aus der Marktwert-Kasten-Aera
   und rissen ein Loch zwischen Illustrations-Zeile und Preis-Ankern (VH). */
.ls-anchors{position:relative;display:flex;gap:10px;margin:16px 0}
.ls-anchor{position:relative;overflow:hidden;flex:1 1 0;min-width:0;display:flex;flex-direction:column;gap:3px;
  padding:13px 16px;text-align:left;background:var(--elev);border:var(--stroke2);border-radius:var(--r)}
.ls-anchor--empty{opacity:.55}
.ls-anchor-l,.ls-anchor-v,.ls-anchor-fac{position:relative;z-index:1}
/* „× RAW": Verhältnis der beiden Anker, früher im Marktwert-Kasten. */
.ls-anchor-fac{font-size:10px;font-weight:600;letter-spacing:.04em;margin-top:2px;color:rgba(255,255,255,.86)}
.ls-anchor-l{font:600 10px/1 var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--ink3)}
.ls-anchor-v{font:600 21px/1.05 var(--sans);color:var(--ink);font-variant-numeric:tabular-nums}
/* PSA 10 = die Krone: satter Gold-Verlauf + weiße Schrift + wandernder Schimmer,
   damit die Gem-Mint-Decke „edel" statt bloß informativ wirkt. */
.ls-anchor--psa{background:linear-gradient(135deg,#e4c37f 0%,#caa054 50%,#d7ae61 100%);
  border-color:rgba(180,140,70,.9);box-shadow:inset 0 1px 0 rgba(255,255,255,.4)}
.ls-anchor--psa .ls-anchor-l{color:rgba(255,255,255,.92)}
.ls-anchor--psa .ls-anchor-v{color:#fff;text-shadow:0 1px 2px rgba(95,65,15,.4)}
.ls-anchor--psa::after{content:"";position:absolute;top:0;bottom:0;left:-70%;width:46%;z-index:0;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),transparent);
  transform:skewX(-16deg);animation:lsShimmer 5s ease-in-out infinite}
@keyframes lsShimmer{0%,8%{left:-70%}55%,100%{left:150%}}
@media(prefers-reduced-motion:reduce){.ls-anchor--psa::after{animation:none;display:none}}
.ls-fhead{display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap}
.ls-fhead-bare{margin-bottom:16px}
.ls-sel{background:rgba(var(--gold-lite),.035);color:var(--ink);border:var(--stroke2);border-radius:var(--rp);
  padding:10px 36px 10px 18px;font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;cursor:pointer;min-width:200px;appearance:none;-webkit-appearance:none;
  background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="%238a8578" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"><path d="m6 9 6 6 6-6"/></svg>');
  background-repeat:no-repeat;background-position:right 13px center;background-size:15px}
/* Browse-Filter-Gruppen: Sortieren/Preis/Sprache (bb-controls) + Holo/Seltenheiten (bb-chips).
   Desktop: beide inline in der Leiste. Mobil: Controls nebeneinander (Drittel), Chips als Slider. */
.bb-controls{display:flex;align-items:center;gap:8px;flex-wrap:nowrap}
/* Sortieren/Preis mit Icon: Desktop Icon links IM Feld + Text; Mobil (unten im
   640er-Block) nur die Icon-Box, das native Select liegt unsichtbar darüber. */
.ls-selwrap{position:relative;display:inline-flex;align-items:center}
.ls-selwrap>svg{position:absolute;left:13px;width:15px;height:15px;color:var(--ink3);pointer-events:none}
.ls-selwrap .ls-sel{padding-left:36px}
/* Sprach-Linse: oben nur die Flagge (Namen stehen im ausgeklappten Menü) */
[data-browse-vlang] .lc-name{display:none}
[data-browse-vlang] .ls-langbtn{min-width:0}
/* Seltenheiten: Full-Bleed-Slider — läuft über die Bildschirmränder hinaus (rechts raus,
   beim Scrollen links raus). Nur die Chips scrollen (nie die Seite), KEINE Scrollbar.
   Negative Margin bricht aus dem zentrierten main aus; padding = Rand-Gutter, damit die
   erste/letzte Chip bündig zum Content sitzt und nicht abgeschnitten wird. */
.bb-chips{display:flex;align-items:center;gap:7px;overflow-x:auto;overflow-y:hidden;margin-top:12px;
  margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);padding:2px calc(50vw - 50%) 9px;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}
.bb-chips::-webkit-scrollbar{display:none}
.bb-chips>*,.bb-chips .browse-rarities,.browse-rarities>*{flex:0 0 auto}
@media (max-width:720px){
  .bb-controls{flex:1 1 100%;gap:6px}
  .bb-controls .ls-selwrap{flex:1 1 0;min-width:0}
  .bb-controls .ls-selwrap .ls-sel{width:100%;padding-left:32px}
  .bb-controls .ls-selwrap>svg{left:10px}
  .bb-controls .ls-sel{flex:1 1 0;width:auto;min-width:0;padding:11px 24px 11px 11px;background-position:right 7px center;letter-spacing:.04em}
  .bb-controls .ls-lang{flex:0 0 auto}
  .bb-controls .ls-langbtn{min-width:0;padding:10px 11px}
  .bb-controls .ls-langbtn .lc-name{display:none}   /* im schmalen Drittel nur die Flagge */
}
/* Eigenes Sprach-Dropdown (ersetzt natives <select> → kein OS-Popup) */
.ls-lang{position:relative;display:inline-block}
/* Sprachauswahl ohne Goldstich (VH): Fläche und Rand neutral-grau statt getönt —
   die Flagge trägt hier die Farbe, der Rahmen soll sich zurückhalten. */
.ls-langbtn{display:inline-flex;align-items:center;gap:9px;background:rgba(255,255,255,.028);
  border:1px solid rgba(255,255,255,.12);border-radius:var(--rp);padding:10px 14px 10px 16px;cursor:pointer;color:var(--ink);
  font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;
  min-width:210px;transition:border-color .15s,background .15s}
.ls-langbtn:hover{border-color:rgba(255,255,255,.28);background:rgba(255,255,255,.05)}
.ls-langbtn .lc{flex:1;text-align:left;white-space:nowrap}
.ls-langbtn .chev{flex:0 0 auto;color:var(--ink2);transition:transform .22s}
.ls-lang.open .ls-langbtn{border-color:rgba(var(--gold-lite),.55);background:rgba(255,255,255,.05)}
.ls-lang.open .ls-langbtn .chev{transform:rotate(180deg)}
.ls-langmenu{position:absolute;top:calc(100% + 7px);right:0;z-index:30;min-width:100%;
  background:var(--elev);border:var(--stroke2);border-radius:14px;padding:6px;
  box-shadow:0 22px 55px rgba(0,0,0,.55);opacity:0;visibility:hidden;transform:translateY(-7px);
  transition:opacity .17s,transform .17s,visibility .17s}
.ls-lang.open .ls-langmenu{opacity:1;visibility:visible;transform:none}
.ls-langopt{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:transparent;
  border:none;cursor:pointer;border-radius:9px;padding:9px 12px;color:var(--ink2);white-space:nowrap;
  font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;transition:background .12s,color .12s}
.ls-langopt:hover{background:rgba(255,255,255,.05);color:var(--ink)}
.ls-langopt.on{color:var(--gold)}
.ls-langopt .cnt{margin-left:auto;padding-left:16px;color:var(--ink3);font-size:10px}
/* ── FACHBEGRIFFE ERKLÄREN ─────────────────────────────────────────────────
   RAW, GRADED, NM, PSA 10 … stehen überall, wurden aber nirgends erklärt — für
   jeden, der neu ins Hobby kommt, ist die Seite damit stumm. [data-tip] hängt eine
   Erklärung an ein Wort: am Desktop bei Hover, am Handy bei Tipp (dort setzt JS
   .tip-on). Nur für NICHT klickbare Wörter — bei Buttons würde der Tipp mit ihrer
   eigentlichen Funktion kollidieren, die tragen ein title-Attribut. */
.tip{cursor:help;border-bottom:1px dotted rgba(226,188,116,.5)}
/* Kleines ⓘ neben einem Schalter: kein Button, nur ein Hinweis, dass es hier etwas
   zu erklären gibt. Antippen zeigt die Blase — am Handy der einzige Weg, weil dort
   weder Hover noch native title-Tooltips existieren. */
.tip-i{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;
  width:17px;height:17px;border-radius:50%;border:1px solid rgba(226,188,116,.45);
  background:transparent;color:rgba(226,188,116,.85);cursor:pointer;user-select:none;
  font:600 11px/1 var(--sans);letter-spacing:0;text-transform:none;
  transition:border-color .15s,color .15s,background .15s}
.tip-i:hover,.tip-i.tip-on{border-color:var(--gold);color:var(--gold);background:rgba(226,188,116,.12)}
/* Schalter + ⓘ bleiben zusammen, damit .ls-fhead sie als eine Einheit verteilt. */
.ls-modewrap{display:inline-flex;align-items:center;gap:9px}
/* Die Blase hängt am <body>, NICHT im erklärten Element: Container wie .ls-anchor
   haben overflow:hidden (für den Glanz-Streifen der PSA-Kachel) und würden einen
   Tooltip aus dem eigenen Kasten heraus schlicht abschneiden. position:fixed macht
   sie von jedem Elternteil unabhängig. */
.tip-bubble{position:fixed;z-index:9999;max-width:262px;background:#14120f;
  border:1px solid rgba(226,188,116,.34);border-radius:9px;padding:9px 12px;
  font:400 12px/1.5 var(--sans);letter-spacing:normal;text-transform:none;color:var(--ink);
  text-align:left;pointer-events:none;opacity:0;transform:translateY(4px);
  transition:opacity .14s ease,transform .14s ease;box-shadow:0 10px 28px -10px rgba(0,0,0,.85)}
.tip-bubble.on{opacity:1;transform:translateY(0)}
@media (max-width:520px){.tip-bubble{max-width:min(80vw,262px)}}
/* Runde SVG-Flaggen (eine Quelle: _flags.html / card.js flagIc) */
.flag-ic{display:inline-flex;border-radius:50%;overflow:hidden;flex:0 0 auto;vertical-align:middle;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.22),0 1px 2px rgba(0,0,0,.3)}
.flag-ic svg{display:block}
/* ── SEGMENTED SWITCH ──────────────────────────────────────────────────────
   EIN Switch für alles: Pillen-Container mit gleitendem Gold-Thumb, statt vieler
   Einzel-Buttons. Ersetzt .pod-tabs (Heute/Woche/Monat/Jahr), .mv-tabs (Auf-/
   Absteiger) und .ls-toggle (RAW/GRADED) — überall dieselbe Optik. */
.seg{position:relative;display:inline-flex;padding:4px;gap:0;
  background:rgba(var(--gold-lite),.045);
  border:1px solid rgba(var(--gold-lite),.12);
  border-radius:var(--rp);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05)}
.seg button{position:relative;z-index:1;flex:0 0 auto;border:0;background:none;cursor:pointer;
  padding:8px 18px;border-radius:var(--rp);white-space:nowrap;
  font:600 13px/1 var(--sans);color:var(--ink2);transition:color .28s ease}
.seg button:hover{color:var(--ink)}
/* Aktiv ohne Thumb (Tab im Hintergrund geöffnet → kein rAF, Thumb noch nicht gesetzt):
   goldene Schrift, damit der Zustand IMMER lesbar ist. Sitzt der Thumb, wird sie dunkel. */
.seg button.on{color:var(--gold)}
.seg[data-seg-ready] button.on{color:#1a1408}   /* dunkle Schrift auf dem Gold-Thumb */
.seg-thumb{position:absolute;top:4px;bottom:4px;left:0;width:0;z-index:0;pointer-events:none;
  border-radius:var(--rp);background:var(--gold);
  box-shadow:0 3px 12px -3px rgba(var(--gold-lite),.55),inset 0 1px 0 rgba(255,255,255,.35);
  transition:transform .4s cubic-bezier(.34,1.35,.5,1),width .4s cubic-bezier(.34,1.35,.5,1)}
@media(prefers-reduced-motion:reduce){.seg-thumb{transition:none}}
/* Silberner Thumb — für Zustände, die "gefallen" bedeuten (Absteiger). Gold ist
   in diesem Haus die Farbe für "gestiegen", genau wie bei den Kurven. */
.seg--silver .seg-thumb{background:#c4c8cf;
  box-shadow:0 3px 12px -3px rgba(196,200,207,.5),inset 0 1px 0 rgba(255,255,255,.45)}
.seg--silver button.on{color:#c4c8cf}                      /* Fallback ohne Thumb */
.seg--silver[data-seg-ready] button.on{color:#20242b}
/* RAW/GRADED hat keine Sonderoptik mehr — es IST der .seg-Switch von oben.
   (Früher: eigener Container .ls-toggle + Mono-Versalien .ls-seg mit harter Gold-Fläche.) */
.ls-badge{font-size:10px;font-weight:500;padding:2px 8px;border-radius:var(--rp);border:var(--stroke2);color:var(--ink3)}
.seg button.on .ls-badge{background:rgba(7,7,10,.22);border:none;color:#1a1408}
.ls-sub{margin-top:16px}
.ls-sub-lbl{font-family:var(--mono);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink2);margin-bottom:10px}
/* Label-Zeile: Zustand/Grade-Label links, Sprach-Switcher kompakt rechts (statt eigener Zeile oben) */
.ls-lbl-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.ls-lbl-row .ls-sub-lbl{margin:0}
.ls-lbl-row .ls-langbtn .lc{flex:0 0 auto}
/* Mobil in der Label-Zeile: kompakt (Flagge+Pfeil). Höhere Spezifität schlägt das 210px-Minimum aus Z.206. */
@media (max-width:720px){.ls-lbl-row .ls-langbtn{min-width:0}}
/* Sprach-Umschalter steht IMMER oben neben RAW/GRADED (Desktop + Mobil). Die zweite
   Instanz in der Zustands-Zeile (aus subFilter) ist überall stumm. */
.ls-lbl-row .ls-lang{display:none}
/* Mobil in .ls-fhead: Sprache kompakt (nur Flagge + Pfeil), damit sie neben dem
   RAW/GRADED-Switch in eine Zeile passt statt umzubrechen. */
@media (max-width:720px){
  .ls-fhead .ls-langbtn{min-width:0;padding:10px 12px}
  .ls-fhead .ls-langbtn .lc-name{display:none}
}
/* English-only-Sets: kein Sprach-Umschalter, stattdessen ein edles „English only"-Chip
   an derselben Stelle (Desktop oben, Mobil in der Zustands-Zeile — wie der Switcher). */
.ls-enonly{display:inline-flex;align-items:center;gap:7px;padding:7px 13px;border-radius:999px;white-space:nowrap;
  font:600 12.5px/1 var(--sans);letter-spacing:.01em;color:#f0d78e;
  background:linear-gradient(180deg,rgba(212,175,106,.17),rgba(212,175,106,.06));
  border:1px solid rgba(212,175,106,.42);box-shadow:0 0 20px -6px rgba(212,175,106,.85),inset 0 1px 0 rgba(255,255,255,.14)}
.ls-enonly .flag-ic{border-radius:3px;overflow:hidden;box-shadow:0 0 0 1px rgba(0,0,0,.35)}
.ls-lbl-row .ls-enonly{display:none}   /* immer oben neben RAW/GRADED, wie der Sprach-Umschalter */
.ls-pills{display:flex;gap:8px;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}
/* Zustands-/Grade-Pills im selben Kasten-Look wie die Anker + section-cards
   (elevated statt transparent). */
.ls-pill{background:var(--elev);border:var(--stroke2);border-radius:var(--r);padding:12px 14px;
  cursor:pointer;min-width:130px;flex:0 0 auto;text-align:left;transition:all .15s}
.ls-pill:hover{border-color:rgba(var(--gold-lite),.4)}
.ls-pill.on{background:rgba(255,255,255,.04);border-color:var(--pc);box-shadow:0 0 0 1px var(--pc)}
.ls-pill-h{display:flex;align-items:center;gap:6px;margin-bottom:6px;font-family:var(--mono);font-size:9px;
  font-weight:500;letter-spacing:.18em;text-transform:uppercase}
.ls-dot{width:6px;height:6px;border-radius:50%;display:inline-block}
.ls-pill-p{font-family:var(--serif);font-style:italic;font-size:22px;color:var(--ink);line-height:1;font-variant-numeric:tabular-nums}
.ls-pill-n{margin-top:4px;font-family:var(--mono);font-size:9px;letter-spacing:.1em;color:var(--ink3)}
.ls-vpill{background:var(--card);color:var(--ink);border:1.5px solid rgba(var(--gold-lite),.14);padding:8px 14px;
  border-radius:8px;cursor:pointer;font-size:13px;font-weight:600}
.ls-vpill.on{background:rgba(255,255,255,.06);color:var(--pc);border-color:var(--pc)}
/* Zustands-/Noten-Umschalter: schlanke .seg-Segmente (nur Kürzel) statt Preis-Kacheln.
   Bei vielen Zuständen horizontal scrollbar. */
.ls-condseg{max-width:100%;overflow-x:auto;scrollbar-width:none}
.ls-condseg::-webkit-scrollbar{display:none}
.ls-condseg button{padding:8px 13px;font:600 12px/1 var(--sans)}
.ls-scoreseg{margin-top:8px}
/* Kein Sonderweg mehr: der gleitende .seg-Thumb ist auch hier der Indikator (die
   frühere harte Gold-Fläche war nur ein Workaround dagegen, dass der Thumb vor
   Font-Load/Sichtbarwerden falsch saß — das löst jetzt der ResizeObserver im Footer). */
/* Zustands-/Firma-Zeile: Umschalter links, Aufklapp-Pfeil rechts. Klick auf den Pfeil
   klappt die „Preis nach Zustand/Note"-Tabelle darunter auf. */
.ls-condrow{display:flex;align-items:center;gap:10px}
.ls-condrow .ls-condseg{flex:0 1 auto;min-width:0}
.ls-bd-toggle{flex:0 0 auto;margin-left:auto;display:inline-flex;align-items:center;justify-content:center;
  width:30px;height:30px;border-radius:50%;border:var(--stroke2);background:var(--elev);color:var(--ink2);
  cursor:pointer;outline:none;transition:border-color .15s,color .15s}
.ls-bd-toggle:hover{border-color:rgba(var(--gold-lite),.45);color:var(--ink)}
.ls-bd-toggle svg{transition:transform .22s}
.ls-condrow:not(.open) .ls-bd-toggle svg{transform:rotate(-90deg)}
.ls-condrow.open .ls-bd-toggle{border-color:rgba(var(--gold-lite),.5);color:var(--gold)}
/* „Preis nach Zustand/Note"-Tabelle (aufklappbar). */
.ls-bd-list{display:flex;flex-direction:column;margin-top:14px;border-top:var(--stroke);padding-top:8px}
.ls-bd-row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:none;border:0;
  border-bottom:var(--stroke);cursor:pointer;padding:9px 4px;color:var(--ink2);font-family:var(--mono);font-size:12px}
.ls-bd-row:last-child{border-bottom:0}
.ls-bd-row:hover{color:var(--ink)}
.ls-bd-row.on{color:var(--ink)}
.ls-bd-c{display:flex;align-items:center;gap:7px;flex:1;min-width:0}
.ls-bd-n{color:var(--ink3);font-size:10px;white-space:nowrap}
.ls-bd-p{font-weight:700;min-width:66px;text-align:right;color:var(--ink)}
.ls-bd-row.on .ls-bd-p{color:var(--gold)}
/* Browse-Filter-Chips (Suche/Sets, einheitlich mit CardLab) */
.ls-chip{background:rgba(var(--gold-lite),.035);border:var(--stroke2);border-radius:var(--rp);
  padding:7px 13px;color:var(--ink2);font-family:var(--mono);font-size:11px;letter-spacing:.08em;
  cursor:pointer;transition:all .12s;white-space:nowrap}
.ls-chip:hover{color:var(--ink);border-color:rgba(var(--gold-lite),.4)}
.ls-chip.on{background:var(--gold);color:var(--bg);border-color:var(--gold);font-weight:600}
.ls-chip-lang{padding:7px 9px}
/* Rarity-Filter: geprägte TCG-Marke auf gefräster Fläche. Material = Wertigkeit,
   Einfach-Auswahl. Kein flacher Outline-Pill — eingelassen, graviert, vergoldet. */
.ls-chip.ls-rar{display:inline-flex;align-items:center;gap:7px;padding:6px 12px 6px 10px;
  font-family:var(--sans);letter-spacing:.01em;color:var(--ink2);
  background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(0,0,0,.28));
  border:1px solid rgba(255,255,255,.09);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06),inset 0 -2px 4px rgba(0,0,0,.34),0 1px 2px rgba(0,0,0,.3)}
.ls-chip.ls-rar .rar-ic{display:inline-flex;align-items:center;line-height:0}
.ls-chip.ls-rar .rar-svg{display:block;height:13px;width:auto;
  filter:drop-shadow(0 1px 0 rgba(0,0,0,.55)) drop-shadow(0 -0.5px 0 rgba(255,255,255,.22))}
.ls-chip.ls-rar .rar-lbl{font-size:12px;font-weight:600;text-shadow:0 1px 0 rgba(0,0,0,.5)}
.ls-chip.ls-rar:hover{transform:translateY(-1px);color:var(--ink);border-color:rgba(var(--gold-lite),.34);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08),0 3px 9px rgba(0,0,0,.4)}
.ls-chip.ls-rar.on{color:var(--ink);border-color:rgba(var(--gold-lite),.7);
  background:radial-gradient(120% 150% at 50% -10%,rgba(212,175,106,.30),rgba(212,175,106,.07) 58%,rgba(0,0,0,.26));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.15),inset 0 -3px 8px rgba(0,0,0,.4),
    0 0 0 1px rgba(212,175,106,.22),0 2px 11px rgba(212,175,106,.24)}
.ls-chip.ls-rar.on .rar-lbl{color:var(--gold2)}
.ls-chip.ls-rar.on .rar-svg{filter:drop-shadow(0 0 4px rgba(240,204,127,.55)) drop-shadow(0 1px 0 rgba(0,0,0,.4))}
/* Holo-Marke (Mega/Hyper): schimmert wie eine echte Rainbow-Karte */
.ls-chip.ls-rar.rt-rainbow .rar-svg{animation:rarHolo 3.4s ease-in-out infinite}
@keyframes rarHolo{0%,100%{filter:drop-shadow(0 1px 0 rgba(0,0,0,.5)) saturate(1.05) hue-rotate(0)}
  50%{filter:drop-shadow(0 0 4px rgba(255,215,140,.6)) saturate(1.55) hue-rotate(26deg)}}
.browse-collapse-h{display:flex;align-items:center;gap:10px;cursor:pointer;padding:14px 0 10px;
  border-bottom:var(--stroke);margin-bottom:16px;user-select:none}
.browse-collapse-h .caret{display:inline-flex;align-items:center;transition:transform .15s;color:var(--ink3)}
.browse-collapse.collapsed .caret{transform:rotate(-90deg)}
.browse-collapse.collapsed .browse-collapse-body{display:none}
/* Entdecken-Seite (Design wie CardLab iOS Browse) */
.disc-title{font-family:var(--sans);font-weight:700;font-size:34px;letter-spacing:-.02em;margin:0}
.disc-sub{font-family:var(--sans);font-size:15px;color:var(--ink2);margin-top:4px}
.disc-searchrow{display:flex;gap:10px;align-items:center;margin:22px 0 8px}
.disc-pill{flex:1;display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.04);
  border:var(--stroke2);border-radius:var(--rp);padding:11px 16px}
.disc-pill input{flex:1;background:transparent;border:none;outline:none;color:var(--ink);
  font-family:var(--sans);font-size:15px}
.disc-pill input::placeholder{color:var(--ink2)}
.disc-pill svg{flex:0 0 auto;color:var(--ink2)}
.filter-btn{flex:0 0 auto;width:44px;height:44px;border-radius:50%;border:var(--stroke2);
  background:rgba(255,255,255,.04);color:var(--ink);display:flex;align-items:center;justify-content:center;
  cursor:pointer;transition:all .12s}
.filter-btn:hover{border-color:rgba(212,175,106,.4)}
.filter-btn.on{color:var(--gold);border-color:var(--gold)}
/* SetCard */
.setcard{display:block;text-decoration:none}
.setcard .logo{height:110px;background:#1a1a1f;border:var(--stroke);border-radius:var(--r);overflow:hidden;
  display:flex;align-items:center;justify-content:center;padding:12px;transition:border-color .12s}
.setcard:hover .logo{border-color:rgba(212,175,106,.4)}
.setcard .logo img{max-height:100%;max-width:100%;object-fit:contain}
.setcard .snm{font-family:var(--sans);font-weight:600;font-size:15px;color:var(--ink);margin-top:8px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.setcard .syr{font-family:var(--mono);font-size:11px;margin-top:2px}
.setgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}
/* CardLab-Discover-Look: großes Set-Logo in dunkler Karte, Name + Jahr·Anzahl darunter */
/* Desktop: feste 5 Sets pro Reihe (VH) — auto-fill ergab je nach Fensterbreite
   mal 4, mal 6 und wirkte unruhig. Darunter stufenweise weniger. */
.setgrid-cl{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:18px;margin-bottom:8px}
@media (max-width:1100px){.setgrid-cl{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}}
@media (max-width:900px){.setgrid-cl{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:640px){.setgrid-cl{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}}
/* Der Marktwert-Kasten (.ls-hero/-row/-l/-top/-lens/-chg) ist entfallen — die Zahl
   stand dreifach auf der Seite. Die -r/-momlbl/-spark/-trend unten leben weiter:
   sie sind der Momentum-Kasten unter dem Chart (duoRow). */
/* Momentum-Kasten: Wort + Mini-Kurve (Sparkline) + Trend %/€. */
.ls-hero-r{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.ls-hero-momlbl{font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;text-align:right}
.ls-hero-momlbl b{font-weight:600}
.ls-hero-spark{width:104px;height:34px;line-height:0;margin-top:1px}
.ls-hero-spark svg{display:block;width:104px;height:34px}
.ls-hero-trend{font-size:14px;font-weight:600;text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
@media(max-width:520px){.ls-hero-r{flex:1 1 100%;align-items:flex-start;margin-top:8px}.ls-hero-momlbl,.ls-hero-trend{text-align:left}}
/* Karte fliegt von der Kachel zur Detail-Position (Scrydex-Effekt): Cross-Document
   View Transitions. Browser ohne Support (Firefox) navigieren einfach normal.
   Das ZIEL trägt den Namen statisch (#ls-card-img ist pro Seite einzigartig);
   die QUELLE (geklickte Kachel) bekommt ihn per JS im Klick-Moment. */
@view-transition { navigation: auto; }
/* aspect-ratio: die Ziel-Box steht schon VOR dem Bild-Load in voller Größe —
   Voraussetzung, damit der Snapshot des ersten Frames ein echtes Paar findet. */
#ls-card-img { view-transition-name: card-hero; aspect-ratio: 600/838; width: 100%; height: auto; }
::view-transition-old(card-hero), ::view-transition-new(card-hero) {
  animation-duration: .34s; animation-timing-function: cubic-bezier(.22,.9,.3,1);
  height: 100%; object-fit: cover;
}
::view-transition-old(root), ::view-transition-new(root) { animation-duration: .18s }

/* Markt-Sicherheits-Siegel: Gummistempel auf den Ankerpreisen — beglaubigt den Wert,
   den man dort liest (Menge × Konsistenz × Frische, s. card.js trustStamp). Sitzt über
   der oberen rechten Ecke, also überwiegend NEBEN den Kacheln auf dunklem Grund: auf
   der goldenen PSA-Kachel wäre ein goldener Stempel unlesbar. */
/* Das Siegel sitzt nicht mehr als Stempel in der Ecke des Preises, sondern in der
   aufgeklappten Herleitung — dort, wo auch steht, wie gerechnet wurde (VH). */
.ls-herleitung{margin:10px 0 0;border:var(--stroke2);border-radius:var(--r);background:rgba(255,255,255,.025)}
.ls-herleitung summary{cursor:pointer;list-style:none;padding:11px 14px;
  font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ink3);display:flex;align-items:center;gap:8px;transition:color .15s}
.ls-herleitung summary::-webkit-details-marker{display:none}
.ls-herleitung summary::after{content:"+";margin-left:auto;font-size:13px;color:var(--ink3)}
.ls-herleitung[open] summary::after{content:"–"}
.ls-herleitung summary:hover{color:var(--gold)}
.ls-herl-in{display:flex;align-items:flex-start;gap:14px;padding:2px 14px 15px;flex-wrap:wrap}
.ls-herl-stamp{flex:0 0 auto;width:78px;height:78px;position:relative}
.ls-herl-txt{flex:1 1 220px;min-width:0;margin:0;font-size:12.5px;line-height:1.55;color:var(--ink2)}
.ls-mom-zr{color:var(--ink3);font-size:.8em;letter-spacing:.1em;font-weight:400}
.ls-herl-ohne{color:var(--ink3);border-left:2px solid rgba(255,255,255,.09);padding-left:10px}
.ls-herl-fakt{flex-basis:100%;font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink3)}
.ls-herl-fakt b{color:var(--gold)}
/* In der Herleitung fuellt das Siegel seinen Kasten, statt frei zu schweben. */
.ls-herl-stamp .ls-trust{position:static;width:100%;height:100%;transform:rotate(-6deg)}
.ls-trust{position:absolute;top:-34px;right:-6px;width:76px;height:76px;transform:rotate(-9deg);z-index:3;
  pointer-events:none;filter:drop-shadow(0 2px 6px rgba(0,0,0,.55))}
.ls-trust svg{width:100%;height:100%;display:block}
@media(max-width:520px){.ls-trust{width:64px;height:64px;top:-28px;right:-2px}}
/* Zustände/Noten als Preis-Karten nebeneinander — Preis sofort sichtbar, aktive in Gold. */
.ls-condgrid{display:flex;flex-wrap:wrap;gap:8px}
.ls-condcard{flex:1 1 0;min-width:104px;display:flex;flex-direction:column;align-items:center;gap:3px;
  padding:9px 8px;border-radius:12px;border:1px solid rgba(255,255,255,.08);background:var(--elev);
  cursor:pointer;color:var(--ink2);font-size:11px;letter-spacing:.04em;transition:border-color .12s,background .12s}
.ls-condcard:hover{border-color:rgba(212,175,106,.35)}
.ls-condcard .cc-l{display:inline-flex;align-items:center;justify-content:center;gap:5px;
  font-weight:600;font-size:11px;line-height:1.2;text-align:center}
.ls-condcard .cc-l .ls-dot{flex:0 0 auto}
.ls-condcard .cc-p{font-size:14px;font-weight:700;color:var(--ink)}
.ls-condcard .cc-n{font-size:9px;color:var(--ink3)}
.ls-condcard.on{border-color:rgba(var(--gold-lite),.6);background:rgba(var(--gold-lite),.08);color:var(--gold)}
.ls-condcard.on .cc-p{color:var(--gold)}
/* 0 Verkäufe: sichtbar als Info, aber stumm — kein Cursor, kein Hover, kein Klick. */
.ls-condcard--dis{opacity:.4;cursor:default;pointer-events:none}
.ls-condcard--dis .cc-p{color:var(--ink3)}
/* Mobil: Zustände/Noten als SLIDER nebeneinander statt untereinander — full-bleed
   bis zur Bildschirmkante (VH-Regel: Slider werden nie am Kasten-Rand abgeschnitten,
   Karten laufen bis zur echten Screen-Kante raus). Scrollbar unsichtbar, Snap sanft. */
@media(max-width:720px){
  /* Der Kasten laeuft nach BEIDEN Seiten bis zur echten Screen-Kante raus, sonst
     werden die Kacheln beim Scrollen hart an der Textkante abgeschnitten. Das
     padding-left holt exakt die Strecke zurueck, die das margin rausgezogen hat —
     die erste Kachel startet damit buendig auf der Textkante, laeuft beim Scrollen
     aber trotzdem bis zum Bildschirmrand aus. Ein fester Wert (frueher 16px) trifft
     die Textkante nur zufaellig. */
  .ls-condgrid{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;
    margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);
    padding:2px calc(50vw - 50%) 2px calc(50vw - 50%);
    /* KEIN Snap. scroll-snap-align rastet an der Kante des SCROLLPORTS ein, nicht am
       padding — der Browser scrollte von selbst um die Padding-Breite weiter und klebte
       die erste Kachel wieder an den Bildschirmrand. scroll-padding rettet das hier
       nicht: dessen Prozentwerte beziehen sich auf den Scrollport (375px), die des
       padding auf den Elternteil (319px), sodass dieselbe Formel dort 0 statt 28
       ergibt. Eine feste Pixelkante hat diese Leiste nicht, an der man es festmachen
       koennte — und ein sanfter Rast-Effekt ist den schiefen Anschnitt nicht wert.
       (Die „Zuletzt verkauft"-Leiste weiter unten faehrt aus demselben Grund ohne.) */
    scroll-snap-type:none}
  .ls-condgrid::-webkit-scrollbar{display:none}
  .ls-condcard{flex:0 0 auto;min-width:124px}
}
/* Zwei Kästen unter dem Chart: links Spanne, rechts Momentum — mobil gestapelt.
   16px oben UND unten = dieselbe Lücke wie Hero→Chart→Duo→Verkäufe. */
.ls-duo{display:flex;gap:14px;margin:16px 0;align-items:stretch}
/* Auswahl (Zustands-/Noten-Karten) → Preis-Hero: gleiche 16px-Lücke. */
.ls-subfilter-out{margin-bottom:16px}
.ls-duo-box{flex:1 1 0;min-width:0}
.ls-duo .ls-hero-r{align-items:flex-start;justify-content:center;gap:6px;margin-top:0}
.ls-duo .ls-hero-momlbl,.ls-duo .ls-hero-trend{text-align:left}
.ls-duo .ls-hero-spark,.ls-duo .ls-hero-spark svg{width:170px;height:40px}
/* Stimmungs-Schwarm: volle Kastenbreite, aber die HOEHE ist hart gedeckelt — der
   Kasten darf nie hoeher werden als die Spanne daneben (VH). Reicht die Breite bei
   gekappter Hoehe nicht, bleibt der Streifen links buendig (xMinYMid). */
.ls-duo .ls-hero-hex{width:100%}
.ls-duo .ls-hero-hex svg{max-height:80px}
@media(max-width:720px){.ls-duo .ls-hero-hex svg{max-height:64px}}
/* Legende unterm Schwarm: Zahlen + Farben + Leserichtung, eine ruhige Mono-Zeile.
   (Der Schwarm ist dafuer 16px flacher — der Kasten bleibt auf Spannen-Hoehe.) */
.ls-hex-legende{display:flex;justify-content:space-between;align-items:center;gap:10px;
  flex-wrap:wrap;margin-top:8px;font-size:9.5px;letter-spacing:.06em;color:var(--ink3)}
.ls-hex-legende span{display:inline-flex;align-items:center;gap:5px}
.ls-duo .ls-hero-hex path{transition:filter .15s}
.ls-duo .ls-hero-hex g:hover path{filter:brightness(1.25)}
@media(max-width:720px){.ls-duo{flex-direction:column}}
.ls-hero-t{margin-bottom:8px}
.ls-hero-meta{font-size:11px;margin-top:6px;letter-spacing:.08em}
.ls-hero-extra{font-size:10px;margin-top:7px;color:var(--ink3);letter-spacing:.04em}
/* Spannen-Verteilungsbalken im Hero: Gold-Band = mittlere 50 % der Verkäufe,
   Whisker-Track = 10.–90. Perzentil, heller Punkt = Median. Robust gegen Ausreißer. */
.ls-rg{margin-top:18px}
.ls-rg-bar{position:relative;height:20px}
.ls-rg-track{position:absolute;left:0;right:0;top:50%;height:2px;transform:translateY(-50%);background:rgba(255,255,255,.1);border-radius:2px}
.ls-rg-dot{position:absolute;top:50%;width:4px;height:4px;transform:translate(-50%,-50%);border-radius:50%;background:var(--ink3);opacity:.4}
.ls-rg-band{position:absolute;top:50%;height:10px;transform:translateY(-50%);border-radius:5px;background:var(--gold);opacity:.85}
.ls-rg-med{position:absolute;top:50%;width:11px;height:11px;transform:translate(-50%,-50%);border-radius:50%;background:var(--ink);box-shadow:0 0 0 2px var(--elev)}
.ls-rg-axis{position:relative;height:20px;margin-top:6px}
.ls-rg-tick{position:absolute;top:0;transform:translateX(-50%);white-space:nowrap;font-family:var(--mono);font-size:9.5px;letter-spacing:.02em;color:var(--ink3)}
.ls-rg-tk{display:block;width:1px;height:4px;background:rgba(255,255,255,.2);margin:0 auto 3px}
.ls-rg-lbl{text-align:center;margin-top:6px;font-family:var(--mono);font-size:10.5px;letter-spacing:.04em;color:var(--ink2)}
/* Chart-Kopf: Titel („Preis-Verlauf · RAW") links, Zeitraum-Switch rechts — als
   kanonischer .seg-Switch (gleitender Gold-Thumb) wie überall sonst, nicht die alten
   Einzel-Buttons. Auf Schmalbild bricht der Switch unter den Titel. */
/* nowrap: mit flex-wrap sprang der Zeitraum-Schalter mobil unter die Ueberschrift
   und stand dann links. Der Titel darf stattdessen schrumpfen. */
.ls-chart-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:nowrap;margin-bottom:14px}
.ls-chart-head .label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ls-chart-head .ls-rangeseg{flex:0 0 auto}
.ls-rangeseg button{padding:7px 14px;font:600 12px/1 var(--sans)}
@media (max-width:420px){.ls-rangeseg button{padding:7px 11px;font-size:11px}}
/* Auf dem Handy teilen sich Ueberschrift und Zeitraum-Schalter 277px. Der Schalter
   nahm davon 161px, sodass "Preis-Verlauf · NM" auf "Preis-Verla…" gekuerzt wurde.
   Beide geben etwas nach — der Schalter im Innenabstand, die Ueberschrift in Groesse
   und Sperrung. Die Zeile bleibt damit einzeilig, auch beim laengsten Fall
   ("Preis-Verlauf · PSA 10"). */
@media (max-width:520px){
  .ls-chart-head{gap:8px}
  .ls-chart-head .label{font-size:10px;letter-spacing:.05em}
  .ls-rangeseg button{padding:7px 6px;font-size:10.5px}
}
.ls-muted{color:var(--ink2)}
.ls-fmt{border:1px solid var(--fc);color:var(--fc);background:transparent;padding:2px 7px;border-radius:var(--rp);
  font-family:var(--mono);font-size:9px;font-weight:600;letter-spacing:.08em;white-space:nowrap}
.ls-td{padding:6px 4px}
.ls-x{background:transparent;border:none;color:var(--ink3);cursor:pointer;font-family:var(--mono);font-size:10px;letter-spacing:.14em}
/* „Letzte Verkäufe" — je Zeile eigener horizontaler Scroll (Scrollbar versteckt),
   10 pro Seite mit Pager. */
.ls-soltable{display:flex;flex-direction:column}
.ls-solrow{display:flex;align-items:center;gap:14px;padding:9px 2px;border-bottom:var(--stroke);
  overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}
.ls-solrow::-webkit-scrollbar{display:none}
.ls-solrow>.ls-solc{flex:0 0 auto;white-space:nowrap}
.ls-solrow>.ls-soltitle{padding-right:10px}
.ls-solrow a{color:var(--ink);text-decoration:none}
.ls-solrow a:hover{color:var(--gold)}
/* Trend-Pfeil vor dem Preis (teurer/billiger als der vorherige Verkauf): Gold hoch /
   Silber runter. Feste schmale Breite, damit die Preise sauber untereinander fluchten. */
.ls-soltrend{flex:0 0 14px;display:inline-flex;align-items:center;justify-content:center;margin-right:-6px}
.ls-soltrend.up{color:var(--gold)}
.ls-soltrend.down{color:#c4c8cf}
.ls-solpager{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:14px;
  font-family:var(--mono);font-size:12px;color:var(--ink2)}
.ls-solpager button{background:rgba(255,255,255,.04);border:var(--stroke2);border-radius:8px;
  color:var(--ink);width:34px;height:30px;cursor:pointer;font-size:16px;line-height:1;transition:border-color .12s}
.ls-solpager button:hover:not(:disabled){border-color:rgba(212,175,106,.5)}
.ls-solpager button:disabled{opacity:.3;cursor:default}
.ls-ebay{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.08em;color:var(--gold);
  border:1px solid rgba(212,175,106,.4);border-radius:var(--rp);padding:4px 12px;white-space:nowrap;text-transform:none}
.ls-ebay:hover{background:rgba(212,175,106,.12)}
/* Karten-Detail-Grid: Bild links (300px Karte + 24px Polster für den 3D-Tilt,
   damit gedrehte Ecken nicht abgeschnitten werden) + Inhalt rechts; auf schmalen
   Screens gestapelt. */
.ls-card-grid{display:grid;grid-template-columns:348px minmax(0,1fr);gap:28px}
@media (max-width:720px){.ls-card-grid{grid-template-columns:1fr}}
/* Polster rund um die Karte: der 3D-Tilt + leichte Vergrößerung ragt sonst über
   den (auf Desktop scrollenden/clippenden) Spaltenrand hinaus. */
.ls-card-left{padding:24px}
/* Mobil: ALLES (Bild/Titel/Meta + Kästen + Breadcrumb) auf die volle Inhaltsbreite —
   dieselbe Breite wie Set-Liste/Startseite. Früher waren Bild/Titel/Breadcrumb um 20px
   eingerückt (auf die Kasten-Innenkante); das wirkte schmaler als die anderen Seiten. NACH padding:24px, sonst gewinnt 24px. */
@media (max-width:720px){
  .ls-card-left{padding:0}
  .crumbs{padding-left:0;padding-right:0}
  /* Horizontale Slider (Zustands-Pills + Verkaufs-Tabelle) bis an den Kastenrand laufen lassen
     (kein 20px-Loch, klar „es geht weiter"). */
  .ls-pills,.ls-hscroll{margin-left:-20px;margin-right:-20px;padding-left:20px;padding-right:20px}
}
/* Desktop: linke Spalte (Bild + Daten) fixiert; nur die rechte Spalte scrollt. */
@media (min-width:721px){
  /* Bündige Ausrichtung: das 24px-Polster (Tilt-Freiraum, s.o.) schob die Karte 24px
     nach rechts UND nach unten — weg vom Breadcrumb und von der rechten Box. Die
     negativen Margins ziehen die SPALTE um genau diesen Betrag zurück, sodass die
     KARTE auf der Rasterlinie sitzt: linke Kante bündig mit dem Breadcrumb, Oberkante
     bündig mit der rechten Box. Das Polster (und damit der Tilt-Freiraum) bleibt voll
     erhalten — margin-right:24px hält die Spaltenbreite konstant (Karte bleibt 300px). */
  .ls-card-left{margin:-24px 24px -24px -24px}
  .ls-card-left{position:sticky;top:74px;align-self:start;
    max-height:calc(100vh - 90px);overflow-y:auto;overflow-x:hidden;
    scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.14) transparent}
  .ls-card-left::-webkit-scrollbar{width:5px}
  .ls-card-left::-webkit-scrollbar-thumb{background:rgba(255,255,255,.14);border-radius:3px}
}
/* #ls-detail in der 1fr-Grid-Spalte: min-width:0, sonst sprengt der Slider die Seite */
#ls-detail{min-width:0}
/* aktive Angebote als kompakter Slider: kleine Bildvorschau links, Infos rechts */
/* Der Slider läuft bis an die Kastenkante (VH): das Kasten-Polster wird per negativem
   Rand aufgehoben und innen als Scroll-Polster wieder eingesetzt. Sonst endet die
   angeschnittene Kachel 20px vor dem Rand und sieht aus wie abgeschnitten statt wie
   „hier geht's weiter". Die erste Kachel bleibt trotzdem bündig zur Überschrift. */
.ls-slider-wrap{position:relative;max-width:none;margin-left:-20px;margin-right:-20px}
.ls-slider{display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x mandatory;
  padding:2px 20px 10px;scroll-padding-left:20px;
  scrollbar-width:none;-ms-overflow-style:none}   /* keine Scrollbar, wie bei den Karten-Leisten */
.ls-slider::-webkit-scrollbar{display:none}
/* Angebots-Kachel: KOMPAKT (VH) — kleines Foto als Daumennagel neben dem Text,
   kein Riesen-Format pro eBay-Auktion. Design-Sprache wie die Startseiten-Kacheln:
   Preis in Serif-Kursive, darunter Mono-Zeile Format · eBay · Flagge, dann Titel. */
.ls-slide{flex:0 0 224px;display:flex;gap:10px;align-items:center;scroll-snap-align:start;
  background:var(--card);border:var(--stroke);border-radius:13px;overflow:hidden;padding:8px;
  text-decoration:none;color:inherit;transition:border-color .15s,transform .15s,box-shadow .15s}
/* Hover kommt jetzt von .ls-glow (kein translateY mehr). */
.ls-slide-img{flex:0 0 46px;width:46px;height:62px;object-fit:cover;border-radius:6px;display:block;background:#0e0e12}
.ls-slide-noimg{display:flex;align-items:center;justify-content:center;font-size:22px;color:var(--ink3)}
.ls-slide-b{flex:1;min-width:0}
.ls-slide-price{font-family:var(--serif);font-style:italic;font-size:16.5px;color:var(--ink);line-height:1;
  font-variant-numeric:tabular-nums;display:flex;gap:6px;align-items:center}
.ls-slide-dt{font-family:var(--mono);font-size:9px;color:var(--ink3);letter-spacing:.06em;margin-top:4px;
  display:flex;gap:4px;align-items:center;white-space:nowrap;overflow:hidden}
.ls-slide-flag{font-size:11px;line-height:1;display:inline-flex}
.ls-slide-title{font-size:10px;color:var(--ink2);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:4px}
/* Live-Punkt (Gold-Puls) — gleiche Sprache wie der Live-Kicker der Startseite */
.ls-livedot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--gold);
  vertical-align:1px;animation:lsPulse 2s infinite}
@keyframes lsPulse{0%{box-shadow:0 0 0 0 rgba(212,175,106,.45)}70%{box-shadow:0 0 0 7px rgba(212,175,106,0)}100%{box-shadow:0 0 0 0 rgba(212,175,106,0)}}
@media(prefers-reduced-motion:reduce){.ls-livedot{animation:none}}
.ls-arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:30px;height:30px;border-radius:50%;border:var(--stroke2);
  background:rgba(20,20,26,.88);color:var(--ink);font-size:17px;line-height:1;cursor:pointer;
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;transition:background .15s,color .15s}
.ls-arrow:hover{background:var(--gold);color:var(--bg)}
.ls-arrow[data-dir="-1"]{left:6px}
.ls-arrow[data-dir="1"]{right:6px}
/* MOBIL: kein Kasten mehr um die Angebote (VH) — nur die wischbare Reihe. Rahmen,
   Fläche und Polster fallen weg, die Kacheln laufen von Bildschirmkante zu
   Bildschirmkante. Pfeile entfallen: auf dem Handy wischt man. */
@media(max-width:640px){
  .ls-live-card .ls-slider-wrap{margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw)}
  .ls-live-card .ls-slider{padding-left:16px;padding-right:16px;scroll-padding-left:16px}
  .ls-live-card .ls-arrow{display:none}
}
/* „Zuletzt verkauft"-Ticker (Startseite) */
/* ── KLEINE VARIANTE DER *EINEN* KACHEL ─────────────────────────────────────
   Für die Leisten (Preissprünge, Zuletzt verkauft, Meistgehandelt). Kein zweites
   Layout mehr — identische Komponente (Beam, Holo, Tilt, Meta), nur kleiner. */
/* min-width:0 ist Pflicht: ohne sie gilt die automatische Flex-Mindestbreite
   (min-content), und eine Set-Namen-Zeile ohne Symbol ("Verborgenes Schicksal
   Glitzer-Tresor · #SV49 · SR", nowrap) sprengte die Kachel auf 359px. */
.tile--sm{flex:0 0 152px;min-width:0;scroll-snap-align:start}
.tile--sm .meta{padding:8px 10px 10px}
.tile--sm .nm{font-size:13px}
.tile--sm .pr{font-size:12px}
.tile--sm .st{font-size:8px}
.tile--sm .meta-btm{gap:6px;margin-top:3px}
.tile--sm .tile-card{border-radius:var(--card-r-sm)}
/* %-Badge der Preissprünge (Auf-/Absteiger) */
.tile-badge{position:absolute;top:8px;left:8px;z-index:5;font-family:var(--mono);font-size:11px;
  font-weight:700;padding:2px 7px;border-radius:var(--rp);box-shadow:0 2px 6px rgba(0,0,0,.4)}
.tile-badge.up{background:#d4af6a;color:#241a05}
.tile-badge.down{background:#c9ccd4;color:#20242b}
/* Gefilterte Kartenliste → Sektionen ausblenden, die sich aufs GANZE Set beziehen
   (Chase Cards). browse.js setzt .is-filtered auf <html>, sobald die Liste nicht
   mehr vollständig ist. Die FAQ bleibt bewusst stehen: sie beschreibt die Seite,
   nicht die Liste, und ihre Antworten bleiben auch gefiltert wahr. */
html.is-filtered [data-set-extra]{display:none}
/* Spalten-Schalter (1/2/3 Karten nebeneinander) — nur auf dem Handy sichtbar,
   wo die Wahl etwas ändert. Gemerkt in localStorage ls_mcols, CSS-Var --mcols. */
.bb-cols{display:none}
@media (max-width:640px){
  .bb-cols{display:inline-flex;margin-left:auto}   /* Rahmen/Polster kommen von .seg */
  /* Sortieren/Preis als reine Icon-Box (46×41) — natives Select unsichtbar darüber,
     volle Fläche bleibt tippbar und öffnet den System-Picker. */
  .bb-controls .ls-selwrap{flex:0 0 auto;width:46px;height:41px;display:grid;place-items:center;
    background:rgba(var(--gold-lite),.035);border:var(--stroke2);border-radius:var(--rp)}
  .bb-controls .ls-selwrap>svg{position:static;width:17px;height:17px;color:var(--ink2)}
  .bb-controls .ls-selwrap .ls-sel{position:absolute;inset:0;width:100%;height:100%;min-width:0;
    opacity:0;padding:0;background-image:none;flex:none}
  /* Icon-Segmente: Fläche und Aktiv-Zustand macht der .seg-Thumb, hier nur die Maße. */
  .bb-cols button{width:38px;height:30px;padding:0;display:grid;place-items:center}
  .bb-cols button svg{width:17px;height:17px}
  /* Zwischen 561 und 640px greift sonst noch die 3-Spalten-Regel — Schalter gewinnt. */
  .card-grid{grid-template-columns:repeat(var(--mcols,2),minmax(0,1fr));gap:12px}
  /* Dichte-Stufen (VH): 3 Spalten = Kurve weg (zu eng für die Sparkline),
     5 Spalten = reines Foto-Raster ohne Text. */
  html[data-mcols="3"] .card-grid .tile .meta-btm>svg{display:none}
  html[data-mcols="5"] .card-grid .tile .meta{display:none}
  html[data-mcols="5"] .card-grid{gap:7px}
}
/* Herkunfts-Tag am Kachel-Preis: Wert stammt nicht aus der Seitensprache
   (EN = englischer Markt, MIX = sprachgemischt). Sitzt IM .pr — browse.js
   überschreibt .pr beim Linsen-Wechsel per textContent und räumt es damit weg. */
.pr .pr-src{display:inline-block;vertical-align:2px;margin-left:5px;padding:1px 4px;
  font:600 8px/1.2 var(--mono);letter-spacing:.1em;color:var(--ink3);
  border:1px solid rgba(255,255,255,.16);border-radius:4px}
/* Set-Zeichen in der Meta-Zeile — ersetzt den ausgeschriebenen Set-Namen.
   Der Selektor MUSS ".tile .st-sym" heißen: darüber steht ".tile img{display:block}",
   und das schlägt ein bloßes ".st-sym" in der Spezifität (0,1,1 gegen 0,1,0). Als
   Block beanspruchte das Zeichen eine eigene Zeile und schob die Nummer darunter. */
.tile .st-sym{display:inline-block;height:13px;max-width:19px;object-fit:contain;
  vertical-align:-2px;margin-right:5px;opacity:.9}
/* „Heute so oft gehandelt" — als Marke auf dem Scan, nicht als weitere Textzeile.
   Dunkles Glas mit Goldkante, damit sie auf hellen wie dunklen Karten lesbar bleibt. */
.tile-traded{position:absolute;top:9px;right:9px;z-index:5;width:40px;height:40px;padding:0;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  font-family:var(--mono);color:rgba(232,199,138,.94);line-height:1;border-radius:50%;
  background:rgba(12,10,7,.36);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
  border:1.5px solid rgba(232,199,138,.52);
  /* Doppelring nach innen = Poststempel; der Abdruck sitzt leicht schief, weil von
     Hand gestempelt wird. */
  box-shadow:inset 0 0 0 2.5px rgba(12,10,7,.36), inset 0 0 0 4px rgba(232,199,138,.3),
    0 2px 7px rgba(0,0,0,.5);
  transform:rotate(-8deg)}
.tile-traded b{font-size:13px;font-weight:700;letter-spacing:-.02em}
.tile-traded i{font-style:normal;font-size:6px;letter-spacing:.16em;opacity:.82}
.tile-traded svg{display:none}
/* FULL-BLEED: die Leiste bricht aus dem zentrierten <main> aus und läuft über die
   ganze Bildschirmbreite — die Karten scrollen also über den Rand hinweg, statt an
   der Container-Kante abgeschnitten zu werden. Das Innen-Padding richtet die erste
   Karte trotzdem an der Textspalte aus (main: max-width 1280, padding 28). */
/* Dezente prev/next-Navigation ÜBER der Karte: eins links, eins rechts (wie bei den
   Goats). Klein, gedämpft; Mini-Scan + Nummer + Name, klappt am Gold-Rand auf. */
/* stretch: alle drei Pillen (links/Mitte/rechts) bekommen DIESELBE Höhe. */
.setnav{display:flex;justify-content:space-between;align-items:stretch;gap:10px;margin:2px 0 14px}
.setnav-i{display:inline-flex;align-items:center;gap:9px;max-width:47%;padding:6px 10px;border-radius:var(--rp);
  border:var(--stroke2);background:var(--elev);color:var(--ink2);text-decoration:none;
  font-family:var(--mono);font-size:11px;transition:border-color .15s,color .15s}
.setnav-i:hover{border-color:rgba(212,175,106,.45);color:var(--ink)}
.setnav-empty{visibility:hidden;border:none;background:none}
.setnav-next{text-align:right}
.setnav-ar{flex:none;color:var(--ink3);font-size:17px;line-height:1}
.setnav-i:hover .setnav-ar{color:var(--gold)}
/* Die Karte LEHNT sich aus dem Kasten (negativer Top-Rand + Schatten) — wie ein
   Scan, der aus der Hülle ragt. Beim Hover hebt sie sich leicht. */
.setnav-i{position:relative}   /* Beam-Anker: links, Mitte UND rechts */
.setnav-prev img,.setnav-next img{flex:none;width:30px;height:42px;object-fit:cover;border-radius:3px;
  background:var(--bg);margin:-13px 0 -2px;position:relative;z-index:1;
  box-shadow:0 5px 12px rgba(0,0,0,.5);transition:transform .25s}
.setnav-prev:hover img,.setnav-next:hover img{transform:translateY(-3px) rotate(-2.5deg)}
.setnav-tx{min-width:0;display:flex;flex-direction:column;gap:1px;line-height:1.2}
.setnav-nr{color:var(--ink3);font-size:9px;letter-spacing:.06em}
.setnav-nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.setnav-all{display:none}   /* Mitte nur auf Desktop */
/* Desktop: größer + breiter, weniger Abstand nach oben / mehr nach unten, „Ganzes Set"-Kachel
   mittig (mit Set-Logo) — der freie Platz in der Mitte wird sinnvoll genutzt. Mobil bleibt alles wie es ist. */
@media(min-width:721px){
  .setnav{margin:-8px 0 28px;gap:18px}
  .setnav-i{max-width:none;padding:12px 18px;font-size:13px;gap:13px;border-radius:14px}
  .setnav-prev img,.setnav-next img{width:48px;height:66px;border-radius:5px;margin:-22px 0 -3px}
  .setnav-nr{font-size:10.5px}
  .setnav-nm{font-size:13.5px}
  .setnav-ar{font-size:24px}
  /* Mitte als flache Pille in DERSELBEN Höhe wie links/rechts (stretch) —
     Logo kleiner, Text daneben statt darunter. */
  .setnav-all{display:inline-flex;flex-direction:row;align-items:center;gap:14px;text-align:left;
    padding:12px 24px;max-width:none;border-radius:14px}
  .setnav-all img{width:auto;height:26px;max-width:150px;object-fit:contain;background:none;border-radius:0;flex:none}
  .setnav-all-t{font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink3)}
  .setnav-all:hover .setnav-all-t{color:var(--gold)}
}
/* „Passt dazu"-Leiste UNTER der Karte: Kopf auf Inhaltsbreite, Leiste full-bleed. */
.card-rel--sim{margin-top:30px}
.card-rel-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:4px}
.sold-strip{display:flex;gap:14px;overflow-x:auto;max-width:none;
  margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);
  padding:4px max(14px, calc((100vw - 1280px) / 2 + 28px)) 16px;
  /* OHNE scroll-padding fraß das Snapping das Padding wieder auf: scroll-snap-align:start
     rastet die erste Karte an der SCROLL-Kante ein, nicht an der Padding-Kante — der
     Browser scrollte die Leiste prompt um genau die Padding-Breite (scrollLeft:28), und
     die erste Karte klebte doch wieder am Bildschirmrand. scroll-padding sagt dem
     Snapping, wo die Kante wirklich liegt. */
  scroll-padding-left:max(14px, calc((100vw - 1280px) / 2 + 28px));
  /* Keine Scrollbar — gewischt/gescrollt wird trotzdem (overflow-x bleibt auto). */
  scroll-snap-type:x mandatory;scrollbar-width:none;-ms-overflow-style:none}
.sold-strip::-webkit-scrollbar{display:none}
/* „Zuletzt verkauft": full-bleed über beide Seitenränder (nichts abschneiden),
   ohne Scrollbar, ohne Snap (für den sanften Auto-Lauf). html{overflow-x:clip} fängt 100vw ab. */
.sold-strip[data-recent-strip]{max-width:none;scroll-snap-type:none;overscroll-behavior-x:contain;
  margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);
  padding-left:calc(50vw - 50%);padding-right:calc(50vw - 50%);scrollbar-width:none}
.sold-strip[data-recent-strip]::-webkit-scrollbar{display:none}
.sold-item{flex:0 0 152px;scroll-snap-align:start;background:var(--card);border:var(--stroke);
  border-radius:var(--r);overflow:hidden;text-decoration:none;color:inherit;position:relative;
  transition:transform .15s,border-color .15s,box-shadow .15s}
/* KEIN Hochspringen mehr — die Karte soll sich nur neigen (3D-Tilt), wie überall sonst.
   Das translateY war ein Relikt und hat mit dem Tilt gekämpft. */
.sold-item:hover{border-color:var(--gold);box-shadow:0 8px 22px rgba(0,0,0,.35)}
/* Karten-Seitenverhältnis statt fixer Höhe: vorher schnitt object-fit:cover bei
   height:150px die Karte oben/unten ab. Jetzt volle Karte + echter Karten-Radius.
   KEIN 3D-Tilt hier: das sind eBay-Verkaufsfotos (Slabs, Sleeves, Wohnzimmertische),
   keine Karten-Scans — ein kippendes Foto wirkt falsch. */
/* object-fit:contain statt cover — cover hat die Karte an den Rändern ABGESCHNITTEN
   (die Quellbilder haben nicht alle exakt 367/512). contain zeigt die Karte immer
   VOLLSTÄNDIG. Und ein kleinerer Radius (--card-r-sm): bei den kleinen Karten wirkte
   der grosse Prozent-Radius zu rund und damit unecht. */
.sold-item img{width:100%;aspect-ratio:367/512;height:auto;object-fit:contain;display:block;
  background:#0e0e12;border-radius:var(--card-r-sm)}
.sold-item .b{padding:9px 11px 11px}
.sold-item .pr{font-family:var(--serif);font-style:italic;font-size:19px;color:var(--ink);line-height:1;font-variant-numeric:tabular-nums}
.sold-item .nm{font-size:11px;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:4px}
.sold-item .dt{font-family:var(--mono);font-size:9px;color:var(--ink3);letter-spacing:.06em;margin-top:5px;display:flex;gap:6px;align-items:center}
.sold-item .tag{position:absolute;top:8px;left:8px;background:rgba(7,7,10,.72);color:var(--gold);
  font-family:var(--mono);font-size:8px;font-weight:600;letter-spacing:.12em;padding:3px 7px;border-radius:var(--rp);
  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.sold-go{display:block;text-decoration:none;color:inherit}
/* Herkunft als Goldfolien-Band ueber der Ecke — ein Siegel am Beleg statt einer
   weiteren Glas-Pille. Das overflow:hidden der Kachel schneidet die Enden sauber ab.
   pointer-events:none, damit das Band den Klick auf die Karte nicht abfaengt. */
.sold-eb{position:absolute;top:7px;right:-20px;z-index:4;width:68px;pointer-events:none;
  transform:rotate(45deg);border-radius:0;
  background:linear-gradient(135deg,#d8bd84,#b3924f 55%,#7d6531);
  color:#17110a;font-family:var(--mono);font-size:7px;font-weight:700;letter-spacing:.1em;
  text-align:center;padding:2px 0;box-shadow:0 1px 4px rgba(0,0,0,.45);
  -webkit-backdrop-filter:none;backdrop-filter:none}
.sold-mp{display:block;padding:8px 11px;border-top:var(--stroke);font-family:var(--mono);font-size:10px;
  color:var(--ink2);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;letter-spacing:.02em}
.sold-mp:hover{color:var(--gold);background:rgba(212,175,106,.07)}
/* Set-Zeichen vor dem Namen (statt 📊). Eigene Regel nötig, weil ".sold-item img"
   darüber jedes Bild auf volle Breite + Karten-Seitenverhältnis zieht. */
.sold-mp .st-sym{width:auto;height:12px;max-width:18px;aspect-ratio:auto;display:inline-block;
  object-fit:contain;vertical-align:-2px;margin-right:6px;opacity:.85;background:transparent;border-radius:0}

/* ---- Holo-Karte (3D-Tilt + Regenbogen-Glanz, reagiert auf Zeiger/Touch) ---- */
/* .holo = 3D-Tilt-Wrapper (overflow sichtbar, damit das Eck-Logo überragen darf);
   .holo-card = die geclippte Karte (Bild + Folie). Beide kippen gemeinsam. */
.holo{position:relative;cursor:pointer;touch-action:pan-y;will-change:transform;
  transform-style:preserve-3d;
  transform:perspective(900px) rotateX(var(--rx,0deg)) rotateY(var(--ry,0deg)) scale(var(--sc,1));
  transition:transform .4s cubic-bezier(.23,1,.32,1)}
.holo.is-active{transition:transform .08s ease-out}
.holo-card{position:relative;border-radius:var(--card-r);overflow:hidden;isolation:isolate}
.holo-card img{display:block;width:100%;border-radius:inherit}
/* Set-Logo überlappt die untere linke Ecke, ragt leicht raus, sitzt per
   translateZ etwas vor der Karte → schöner Parallax beim Kippen. */
.set-logo-corner{position:absolute;right:-12px;bottom:-14px;height:44px;width:auto;max-width:62%;
  object-fit:contain;z-index:6;pointer-events:none;transform:translateZ(30px);
  filter:drop-shadow(0 4px 10px rgba(0,0,0,.7))}
.holo-layer{position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  opacity:var(--o,0);transition:opacity .35s ease}

/* ── Druck-Varianten derselben Karte (Reverse Holo, 1st Edition …) ────────
   Jede Variante ist ein eigener Markt. Der Umschalter zeigt darum Preis UND
   Anzahl Verkäufe — der Unterschied ist die eigentliche Information. */
.ls-vars{display:flex;gap:8px;margin:16px 0 4px;flex-wrap:wrap}
.ls-var{flex:1 1 0;min-width:96px;display:flex;flex-direction:column;gap:3px;
  padding:10px 12px;border:var(--stroke2);border-radius:14px;background:var(--elev);
  text-decoration:none;color:inherit;transition:border-color .25s,background .25s}
.ls-var:hover{border-color:rgba(var(--gold-lite),.4);background:rgba(var(--gold-lite),.05)}
.ls-var.on{border-color:rgba(var(--gold-lite),.6);background:rgba(var(--gold-lite),.08)}
.ls-var-l{font:600 9px/1.2 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink2)}
.ls-var.on .ls-var-l{color:var(--gold)}
.ls-var-p{font:italic 600 17px/1 var(--serif);color:var(--ink);font-variant-numeric:tabular-nums}
.ls-var-n{font:9px/1 var(--mono);letter-spacing:.08em;color:var(--ink3)}
/* Reverse-Kachel trägt einen dezenten Folien-Schimmer als Vorschau. */
.ls-var--rev{position:relative;overflow:hidden}
.ls-var--rev::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:.5;
  background:linear-gradient(105deg,transparent 20%,rgba(255,180,220,.14) 38%,
    rgba(150,210,255,.15) 52%,rgba(255,235,150,.13) 66%,transparent 84%)}

/* ── Reverse-Holo-Ansicht (Refractor-Folie der e-Card-Ära) ────────────────
   Es existieren keine separaten Scans der Reverse-Versionen (weder TCGdex
   noch pokemontcg.io noch TCGplayer speichern mehr als EIN Bild pro Karte),
   darum wird der Effekt über das Normalbild gelegt. Die e-Card-Folie ist ein
   GLATTES Refractor-Foil ohne Binnenmuster — also kein Cosmos/Sternenstaub,
   sondern ein gleichmäßiger, winkelabhängiger Regenbogen-Schimmer.
   Die Folie liegt auf dem ganzen Kartenkörper, das Artwork-Fenster bleibt
   beim Original matt — das macht die zweite Ebene per Aussparung nach. */
/* Kein gemalter Foil-Effekt mehr: der nachgebaute Schimmer sah wie Schmutz
   auf der Karte aus. Wo ein ECHTES Reverse-Foto vorliegt (aus unseren
   Verkaufsdaten, siehe infra/fill_reverse_photos.py), zeigen wir das Foto —
   und sonst lieber das normale Bild als eine schlechte Imitation. */
.holo-refractor, .holo-refractor-art{display:none}
/* Regenbogen-Folie */
.holo-shine{
  background:linear-gradient(115deg,
    rgba(255,0,140,.55) 8%, rgba(255,180,0,.5) 24%, rgba(50,255,180,.5) 42%,
    rgba(60,140,255,.5) 60%, rgba(200,60,255,.5) 78%, rgba(255,0,140,.55) 92%);
  background-size:240% 240%;
  background-position:var(--mx,50%) var(--my,50%);
  mix-blend-mode:color-dodge;filter:saturate(1.4) contrast(1.1)}
/* feines Glitter-Raster, bewegt sich mit dem Tilt */
.holo-grain{
  background-image:
    radial-gradient(circle at 50% 50%, rgba(255,255,255,.9) 0, transparent 32%),
    radial-gradient(circle at 50% 50%, rgba(255,255,255,.7) 0, transparent 32%);
  background-size:5px 5px, 7px 7px;
  background-position:var(--gmx,0px) var(--gmy,0px), calc(var(--gmx,0px)*-1) var(--gmy,0px);
  mix-blend-mode:color-dodge;opacity:calc(var(--o,0) * .35)}
/* wandernder Glanzpunkt (Specular) */
.holo-glare{
  background:radial-gradient(circle at var(--mx,50%) var(--my,50%),
    rgba(255,255,255,.85), rgba(255,255,255,.15) 16%, transparent 42%);
  mix-blend-mode:plus-lighter}
/* Akzent-Randlicht (gold) */
.holo-rim{box-shadow:inset 0 0 0 1.5px rgba(212,175,106,calc(var(--o,0)*.6)),
  inset 0 0 22px rgba(212,175,106,calc(var(--o,0)*.25));mix-blend-mode:plus-lighter}
@media (prefers-reduced-motion: reduce){
  .holo{transform:none!important;transition:none}
  .holo-layer{display:none}
}

/* ---- Breadcrumb + Set-Logo/Symbol auf der Detailseite ---- */
.crumbs{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;
  margin-bottom:16px;color:var(--ink3)}
.crumbs a{color:var(--ink2);text-decoration:none}
.crumbs a:hover{color:var(--gold)}
.crumbs .sep{margin:0 7px;color:var(--ink3)}
.crumbs .cur{color:var(--ink2)}
.set-badge{display:flex;justify-content:center;margin:16px 0 2px}
.set-logo{max-height:46px;max-width:78%;width:auto;object-fit:contain;opacity:.92;
  filter:drop-shadow(0 2px 10px rgba(0,0,0,.55))}
.set-sym{height:15px;width:auto;vertical-align:-3px;margin-right:2px;opacity:.85}

.meta-row{margin-top:8px;display:flex;flex-wrap:wrap;align-items:center;gap:7px;font-size:13px;color:var(--ink2)}
.meta-row .meta-set{color:var(--gold);text-decoration:none;font-weight:500}
.meta-row .meta-set:hover{text-decoration:underline}
.meta-row .meta-dot{color:var(--ink3)}
.facts .fact{display:flex;justify-content:space-between;align-items:baseline;padding:5px 0;font-size:13px}
.facts .fact + .fact{border-top:1px solid rgba(255,255,255,.05)}
.facts .fl{color:var(--ink2);font-size:10px;letter-spacing:.1em;text-transform:uppercase}
.facts .fv{font-family:var(--mono);color:var(--ink)}
.facts .fv.up{color:var(--gold)} .facts .fv.down{color:var(--silver)}
/* ---- FAQ (Detailseite, voll Breite unter dem Grid) ---- */
/* ── FAQ ────────────────────────────────────────────────────────────────────
   EINE Komponente für Set- und Kartenseite (.sfaq, vorher inline in set.html).
   Schlanke Linien-Liste statt Glaskästen: der Text soll lesbar sein, nicht der
   Rahmen auffallen. Die alten .faq/.faq-item-Kästen sind damit entfallen. */
.sfaq{max-width:78ch;margin:52px 0 10px}
.sfaq h2{font:italic 700 clamp(19px,3.6vw,25px)/1.2 var(--serif);margin:0 0 4px}
.sfaq-k{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
.sfaq details{border-bottom:var(--stroke);padding:2px 0}
.sfaq summary{cursor:pointer;list-style:none;padding:14px 26px 14px 0;position:relative;
  font-size:14.5px;font-weight:600;color:var(--ink)}
.sfaq summary::-webkit-details-marker{display:none}
.sfaq summary::after{content:"+";position:absolute;right:4px;top:12px;font-family:var(--mono);
  font-size:17px;color:var(--gold);transition:transform .15s}
.sfaq details[open] summary::after{content:"–"}
.sfaq summary:hover{color:var(--gold)}
.sfaq p{margin:0 0 15px;font-size:14px;line-height:1.65;color:var(--ink2);max-width:70ch}

/* ── Footer-Nav: Home, Sets, Sprache (die Nav oben ist nur noch die Suche) ── */
.foot-nav{display:flex;align-items:center;flex-wrap:wrap;gap:10px 20px;
  padding-bottom:16px;margin-bottom:16px;border-bottom:var(--stroke)}
.foot-brand{font-family:var(--serif);font-size:19px;font-weight:600;color:var(--ink);white-space:nowrap;
  display:inline-flex;align-items:center;gap:8px;text-decoration:none}
.foot-brand img{height:26px;width:auto;display:block;flex:0 0 auto}
.foot-link{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink2);transition:color .15s}
.foot-link:hover{color:var(--ink)}
.foot-langs{display:flex;gap:5px;margin-left:auto;flex-wrap:wrap}
.foot-langs a{display:inline-flex;align-items:center;gap:5px;font-family:var(--mono);font-size:10px;
  text-transform:uppercase;color:var(--ink3);padding:4px 9px;border-radius:var(--rp);
  border:1px solid transparent;transition:color .15s,border-color .15s}
.foot-langs a .flag-ic{opacity:.5;transition:opacity .15s}
.foot-langs a:hover{color:var(--ink)}
.foot-langs a:hover .flag-ic,.foot-langs a.on .flag-ic{opacity:1}
.foot-langs a.on{color:var(--gold);border-color:rgba(var(--gold-lite),.28)}
@media (max-width:560px){.foot-langs{margin-left:0;width:100%}}

/* ── EDLE FLÄCHEN (Liquid Glass) ────────────────────────────────────────────
   Ersetzt die flachen blaugrauen Kästen: warme, leicht transluzente Fläche mit
   Verlauf, goldener Rand-Schimmer, Rim-Light oben und weicher Gold-Schatten.
   Steht bewusst am ENDE → überschreibt die Basis-Boxen (gleiche Spezifität). */
/* Gold = das HELLE aus dem Search-Schein (#e2bc74), bewusst dezent dosiert.
   Glas klarer/transparenter (niedrigere Deckkraft) — kein Milchglas.
   KEIN Hover auf den Flächen: die Kästen sind nicht klickbar. */
.gcard,.section-card,.tile,.sold-item{
  background:linear-gradient(158deg,
    rgba(52,44,33,var(--gc-glass)) 0%,
    rgba(26,22,18,calc(var(--gc-glass) + .12)) 48%,
    rgba(15,13,11,calc(var(--gc-glass) + .22)) 100%);
  border:1px solid rgba(var(--gold-lite),var(--gc-rim));
  border-radius:var(--gc-radius);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,var(--gc-hi)),                /* Glaskante oben */
    inset 0 0 26px -19px rgba(var(--gold-lite),var(--gc-inner)), /* Gold innen */
    0 14px 38px -26px rgba(0,0,0,var(--gc-depth)),               /* Tiefe */
    0 0 24px -24px rgba(var(--gold-lite),var(--gc-glow));        /* Gold-Schatten */
}
/* Glas-Blur NUR auf den grossen Flächen — auf jeder der 100+ Kacheln waere er zu teuer. */
.gcard,.section-card{
  -webkit-backdrop-filter:blur(var(--gc-blur)) saturate(112%);
  backdrop-filter:blur(var(--gc-blur)) saturate(112%);
}
/* MOBIL kein Kasten um die Angebote (VH): muss NACH den Glas-Regeln oben stehen und
   .section-card schlagen — daher beide Klassen im Selektor. */
@media(max-width:640px){
  .section-card.ls-live-card{background:none;border:0;box-shadow:none;padding:0;
    -webkit-backdrop-filter:none;backdrop-filter:none}
}

/* ── KACHEL-HOVER: DER BEAM AUS DER SUCHLEISTE ──────────────────────────────
   Kein Nachbau — es ist derselbe .nsx-beamclip aus beam.css. Der ist auf die
   Suchleiste geeicht (Radius 27px, Inset für die Goo-Kante), deshalb hier nur die
   Geometrie auf die Kachel umbiegen. Aktiviert wird per data-active beim Hover
   (JS, s.u.) — sonst würden 100+ Kacheln dauerhaft animieren. */
.tile .nsx-beamclip{inset:0;--beam-r:var(--gc-radius);z-index:6}
/* Blätter-Nachbarn (setnav) kriegen DENSELBEN Beam — Radius der Pille. */
.setnav-i .nsx-beamclip{inset:0;--beam-r:14px;z-index:6}
/* Der Schein sitzt von Haus aus ein paar Pixel ÜBER der Kante — die Beam-Geometrie
   ist auf die Suchleiste geeicht (dort sitzt die Goo-Kante höher). Auf der Kachel
   schieben wir ihn nach unten auf die Kante; was unten übersteht, kappt das
   overflow:hidden des Clips. --tb-drop ist im DialKit regelbar. */
.tile .nsx-beamclip::before,
.tile .nsx-beamclip::after,
.tile .nsx-beamclip [data-beam-bloom],
.setnav-i .nsx-beamclip::before,
.setnav-i .nsx-beamclip::after,
.setnav-i .nsx-beamclip [data-beam-bloom],
.ls-glow .nsx-beamclip::before,
.ls-glow .nsx-beamclip::after,
.ls-glow .nsx-beamclip [data-beam-bloom]{transform:translateY(var(--tb-drop))}
/* KACHEL: nicht wandern, sondern PULSIEREN.
   In beam.css schiebt `beam-travel` den Schein per --beam-x von links nach rechts.
   Die lasse ich hier weg und pinne --beam-x mittig → der Schein steht fest. Was
   bleibt, sind genau die Intensitäts-Animationen (edge-fade/breathe/spike): er wird
   stärker und wieder schwächer. Das ist der Puls.
   (Die Suchleiste behält ihr Wandern — dort gefällt es dir ja.) */
.tile .nsx-beamclip[data-active],
.setnav-i .nsx-beamclip[data-active],
.ls-glow .nsx-beamclip[data-active]{
  --beam-x-nsx:.5;
  animation:
    beam-edge-fade-nsx 3.1s linear infinite,
    beam-breathe-nsx 4.0s ease-in-out infinite,
    beam-spike-nsx 4.1s ease-in-out infinite,
    beam-spike2-nsx 5.3s ease-in-out infinite,
    beam-fade-in-nsx .6s ease forwards;
}
.tile .nsx-beamclip[data-fading],
.setnav-i .nsx-beamclip[data-fading],
.ls-glow .nsx-beamclip[data-fading]{
  --beam-x-nsx:.5;
  animation:
    beam-edge-fade-nsx 3.1s linear infinite,
    beam-breathe-nsx 4.0s ease-in-out infinite,
    beam-spike-nsx 4.1s ease-in-out infinite,
    beam-spike2-nsx 5.3s ease-in-out infinite,
    beam-fade-out-nsx .5s ease forwards;
}
/* Die Suchleiste behält ihren eigenen Radius (ihr Container ist runder als die Kachel).
   --beam-r vererbt sich in die Beam-Pseudos → EIN Radius statt zwei versetzter Kurven. */
.navbar-search .nsx-beamclip{--beam-r:27px}
