/* ── Buried2FISH · Stylesheet der Turnier-Website
   Ausgelagert aus index.html. Wird über <link> im <head> geladen. */

  /* ── Buried2FISH Nachthimmel-Theme (Farben aus design/: Banner, Icon, Template) ── */
  :root {
    --page-1: #16122e;      /* Nachthimmel-Indigo */
    --page-2: #221b4a;
    --surface: #251f4e;     /* Karten */
    --ink: #f3effc;
    --ink-2: #cfc5ec;       /* Lavendel */
    --muted: #968cc2;
    --grid: #3b3374;
    --border: rgba(207,197,240,0.14);
    --water: #8f6fe8;       /* Serie: Wolken-Violett (Balken, Winrate) */
    --koi: #f08c4d;         /* Akzent: Koi-Orange */
    --koi-soft: rgba(240,140,77,0.15);
    --pink: #e75b9e;        /* Koi-Flossen-Pink */
    --good: #43c26d;
    --warning: #f5b942;
    --critical: #e25563;
    --track: #322b64;
    --radius: 14px;
    --content-w: 1100px;  /* Inhaltsbreite — wächst auf großen Monitoren mit (s. unten) */
  }
  /* ── Adaptive Breite: große Monitore bekommen mehr Inhalt statt leerer Ränder,
       plus leicht größere Grundschrift, damit nichts „zusammengedrückt" wirkt ── */
  @media (min-width: 1440px) { :root { --content-w: 1240px; } }
  @media (min-width: 1720px) {
    :root { --content-w: 1400px; }
    body { font-size: 15px; }
  }
  @media (min-width: 2200px) {
    :root { --content-w: 1640px; }
    body { font-size: 16px; }
  }
  * { box-sizing: border-box; margin: 0; }
  /* ── Tastatur-Fokus: sichtbarer Ring für Buttons/Links/Tabs (nur bei
       Tastaturbedienung, nicht beim Klicken) ── */
  :focus-visible { outline: 2px solid var(--koi); outline-offset: 2px; border-radius: 4px; }
  /* Skip-Link: unsichtbar, bis er per Tab fokussiert wird */
  .skip-link {
    position: absolute; top: -48px; left: 12px; z-index: 100;
    padding: 8px 14px; background: var(--koi); color: #1b1233;
    border-radius: 8px; font-weight: 700; text-decoration: none;
    transition: top .15s;
  }
  .skip-link:focus { top: 12px; }
  html {
    scroll-behavior: smooth;
    /* Scrollbar immer anzeigen → Layout springt beim Tab-Wechsel nicht mehr
       seitlich. color-scheme macht die Scrollbar dunkel (passend zum Theme). */
    overflow-y: scroll;
    color-scheme: dark;
  }
  body {
    /* --world-a/--world-b färben die GANZE Seite in der Farbe der Welt, in der
       gerade geangelt wird (JS setzt dafür area-<theme> auf <html>, siehe
       applyAreaTheme). Bewusst als Hintergrund-Ebene und nicht als Overlay:
       so liegt die Farbe hinter allem, statt Inhalte zu überdecken. */
    background:
      radial-gradient(1100px 620px at 50% 112%, var(--world-a, transparent), transparent 66%),
      radial-gradient(900px 520px at 8% -8%, var(--world-b, transparent), transparent 62%),
      radial-gradient(1000px 520px at 88% -12%, rgba(143,111,232,.26), transparent 60%),
      radial-gradient(800px 480px at -12% 18%, rgba(123,90,220,.20), transparent 60%),
      radial-gradient(900px 560px at 55% 115%, rgba(231,91,158,.10), transparent 60%),
      linear-gradient(180deg, var(--page-1) 0%, var(--page-2) 100%);
    background-attachment: fixed;
    transition: background-color .6s ease;
    color: var(--ink);
    font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
    font-size: 14px;
    line-height: 1.5;
  }

  /* ── Hero (Banner aus design/Banner.jpg trägt Schriftzug + Koi) ─────── */
  .hero {
    position: relative;
    overflow: hidden;
    background: #2e2a6b;
    min-height: clamp(200px, 28vw, 520px);
    display: flex;
    align-items: flex-end;
  }
  /* Banner als eigene Ebene → cinematischer Ken-Burns-Zoom */
  .hero::before {
    content: ""; position: absolute; inset: -3%;
    background: url('/assets/banner.jpg') center 32% / cover no-repeat;
    animation: kenburns 48s ease-in-out infinite alternate;
    will-change: transform;
  }
  /* Fade läuft unten voll in die Seitenfarbe → nahtloser Übergang zur Tab-Leiste */
  .hero::after {
    content: ""; position: absolute; inset: 0;
    background: linear-gradient(180deg, rgba(22,18,46,.22) 0%, rgba(22,18,46,0) 36%, rgba(22,18,46,.78) 82%, #16122e 99%);
    pointer-events: none;
  }
  @keyframes kenburns {
    from { transform: scale(1) translateY(0); }
    to   { transform: scale(1.07) translateY(-1.2%); }
  }
  .hero-inner {
    position: relative; z-index: 1;
    width: 100%; max-width: var(--content-w); margin: 0 auto;
    padding: 90px 20px 16px;
    display: flex; flex-wrap: wrap; align-items: center; gap: 10px 18px;
  }
  .hero h1 { /* Der Banner zeigt den Schriftzug — h1 nur für Screenreader/SEO */
    position: absolute; width: 1px; height: 1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap;
  }
  .hero .sub { color: #efe9fb; text-shadow: 0 1px 10px rgba(10,6,30,.9); }
  .hero .sub a { color: #ffc99d; text-decoration: none; font-weight: 600; }
  .hero .live {
    display: inline-flex; align-items: center; gap: 8px;
    padding: 5px 12px;
    background: rgba(16,12,40,.55); border: 1px solid rgba(207,197,240,.28);
    border-radius: 999px; font-size: 12px; color: #efe9fb;
    backdrop-filter: blur(4px);
  }
  /* Twitch-LIVE-Badge neben „Stand … Uhr" — erscheint nur, wenn der Stream läuft */
  .live-badge {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 2px 10px 2px 8px;
    background: rgba(255,66,66,.16); border: 1px solid rgba(255,80,80,.55);
    border-radius: 999px; color: #ffb3b3; font-weight: 800;
    letter-spacing: .05em; text-decoration: none; font-size: 11.5px;
    transition: background .12s ease;
  }
  .live-badge::before {
    content: ""; width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto;
    background: #ff4d4d; box-shadow: 0 0 9px rgba(255,77,77,.95);
    animation: livePulse 1.4s infinite;
  }
  .live-badge:hover { background: rgba(255,66,66,.3); }
  .live-badge .viewers { color: #ffd7d7; font-weight: 600; letter-spacing: 0; }

  /* ── Lebendiger Nachthimmel: Wolken driften, Sterne funkeln, Kois schweben ── */
  .sky {
    /* Überdimensioniert (inset: -120px), damit der Parallax-Versatz nie den Rand
       des Sternenfelds in den sichtbaren Bereich schiebt (untere/rechte Ecke). */
    position: fixed; inset: -120px; z-index: -1;
    overflow: hidden; pointer-events: none;
    /* Parallax: Himmel weicht der Maus leicht aus (--par-* setzt JS) */
    transform: translate(calc(var(--par-x, 0) * -78px), calc(var(--par-y, 0) * -54px));
    transition: transform .5s cubic-bezier(.2,.6,.3,1);
    will-change: transform;
  }
  .sky i { display: block; position: absolute; }
  .sky .cloud { border-radius: 50%; will-change: transform; }
  .sky .c1 {
    width: 900px; height: 520px; top: -180px; left: -220px;
    background: radial-gradient(closest-side, rgba(143,111,232,.18), transparent 70%);
    animation: drift1 90s ease-in-out infinite alternate;
  }
  .sky .c2 {
    width: 1100px; height: 640px; bottom: -260px; right: -320px;
    background: radial-gradient(closest-side, rgba(123,90,220,.15), transparent 70%);
    animation: drift2 120s ease-in-out infinite alternate;
  }
  .sky .c3 {
    width: 700px; height: 460px; top: 30%; left: 55%;
    background: radial-gradient(closest-side, rgba(231,91,158,.09), transparent 70%);
    animation: drift3 105s ease-in-out infinite alternate;
  }
  @keyframes drift1 { to { transform: translate(120px, 60px) scale(1.15); } }
  @keyframes drift2 { to { transform: translate(-140px, -80px) scale(1.1); } }
  @keyframes drift3 { to { transform: translate(-90px, 70px) scale(1.2); } }

  .sky .stars, .sky .stars2 {
    inset: 0;
    background-repeat: repeat;
    background-size: 800px 600px;
  }
  .sky .stars {
    background-image:
      radial-gradient(1.6px 1.6px at 120px 80px, rgba(243,239,252,.9), transparent),
      radial-gradient(1.2px 1.2px at 320px 190px, rgba(207,197,240,.8), transparent),
      radial-gradient(1.8px 1.8px at 540px 60px, rgba(243,239,252,.7), transparent),
      radial-gradient(1.2px 1.2px at 700px 300px, rgba(207,197,240,.75), transparent),
      radial-gradient(1.4px 1.4px at 220px 420px, rgba(243,239,252,.65), transparent),
      radial-gradient(1.2px 1.2px at 620px 500px, rgba(207,197,240,.7), transparent);
    animation: twinkle 5.5s ease-in-out infinite alternate;
  }
  .sky .stars2 {
    background-image:
      radial-gradient(1.3px 1.3px at 80px 320px, rgba(243,239,252,.8), transparent),
      radial-gradient(1.7px 1.7px at 430px 120px, rgba(207,197,240,.7), transparent),
      radial-gradient(1.1px 1.1px at 260px 540px, rgba(243,239,252,.7), transparent),
      radial-gradient(1.5px 1.5px at 660px 220px, rgba(243,239,252,.75), transparent),
      radial-gradient(1.1px 1.1px at 500px 400px, rgba(207,197,240,.65), transparent);
    animation: twinkle 7s ease-in-out -3s infinite alternate;
  }
  @keyframes twinkle { from { opacity: .35; } to { opacity: .95; } }

  .koi-float { position: absolute; fill: #f3effc; will-change: transform; }
  .koi-float.k1 { width: 130px; top: 66%; left: -10%; opacity: .085; animation: swim1 150s linear -45s infinite; }
  .koi-float.k2 { width: 78px; top: 16%; left: 108%; opacity: .06; animation: swim2 190s linear -80s infinite; }
  @keyframes swim1 {
    0%   { transform: translate(0, 0) rotate(58deg); }
    25%  { transform: translate(32vw, -8vh) rotate(72deg); }
    50%  { transform: translate(62vw, -15vh) rotate(55deg); }
    75%  { transform: translate(92vw, -25vh) rotate(70deg); }
    100% { transform: translate(126vw, -33vh) rotate(58deg); }
  }
  @keyframes swim2 {
    0%   { transform: translate(0, 0) rotate(-62deg); }
    25%  { transform: translate(-30vw, 5vh) rotate(-76deg); }
    50%  { transform: translate(-62vw, 9vh) rotate(-58deg); }
    75%  { transform: translate(-94vw, 15vh) rotate(-74deg); }
    100% { transform: translate(-126vw, 18vh) rotate(-62deg); }
  }

  /* Tab-Inhalte sanft einblenden */
  .wrap main { animation: tabIn .28s ease; }
  @keyframes tabIn { from { opacity: 0; transform: translateY(10px); } }

  /* ── Fisch-Cursor: normaler Zeiger = heller Fisch, Klickbares = Koi-Orange ── */
  body {
    cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg transform='rotate(45 16 16)'%3E%3Cpath d='M4 16 C9 9 17 8 23 12 L28 8 L26 15 L28 22 L23 20 C17 24 9 23 4 16 Z' fill='%23f3effc' stroke='%23221b4a' stroke-width='1.5'/%3E%3Ccircle cx='9.5' cy='14.5' r='1.7' fill='%23221b4a'/%3E%3C/g%3E%3C/svg%3E") 7 7, auto;
  }
  a, button, summary, th, .tab-btn, .chip-btn, .arch-card, .hl-btn, .checkline {
    cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg transform='rotate(45 16 16)'%3E%3Cpath d='M4 16 C9 9 17 8 23 12 L28 8 L26 15 L28 22 L23 20 C17 24 9 23 4 16 Z' fill='%23f08c4d' stroke='%23221b4a' stroke-width='1.5'/%3E%3Ccircle cx='9.5' cy='14.5' r='1.7' fill='%23221b4a'/%3E%3C/g%3E%3C/svg%3E") 7 7, pointer;
  }
  input, textarea { cursor: text; }

  /* Klick = der Fisch frisst: Krümel werden ins Maul gesaugt, Bläschen steigen auf */
  .chomp-bit {
    position: fixed; z-index: 999; width: 7px; height: 7px; border-radius: 50%;
    pointer-events: none;
    animation: chompIn .4s cubic-bezier(.5,0,1,.5) forwards;
  }
  @keyframes chompIn {
    to { transform: translate(var(--tx), var(--ty)) scale(.15); opacity: 0; }
  }
  .bubble-fx {
    position: fixed; z-index: 999; border-radius: 50%;
    border: 1.5px solid rgba(207,197,240,.75);
    background: rgba(207,197,240,.12);
    pointer-events: none;
    animation: bubbleUp .9s ease-out forwards;
  }
  @keyframes bubbleUp {
    to { transform: translate(var(--bx, 0), -52px) scale(1.3); opacity: 0; }
  }

  @media (prefers-reduced-motion: reduce) {
    .hero::before, .sky .cloud, .sky .stars, .sky .stars2, .koi-float, .wrap main,
    .chomp-bit, .bubble-fx, .hcloud {
      animation: none !important;
    }
    .sky { transform: none; transition: none; }
    .hero-clouds { display: none; }
  }

  /* ── Tabs ──────────────────────────────────────────────────────────── */
  nav.tabs {
    position: sticky; top: 0; z-index: 20;
    background: rgba(22,18,46,.92);
    backdrop-filter: blur(8px);
    border-bottom: 1px solid rgba(207,197,240,.09);
  }
  .tabs-inner {
    max-width: var(--content-w); margin: 0 auto;
    display: flex; gap: 2px; padding: 0 12px;
    overflow-x: auto; align-items: center;
    scrollbar-width: none;               /* Scrollbar aus — wischen geht weiter */
  }
  .tabs-inner::-webkit-scrollbar { display: none; }
  .tab-logo {
    width: 26px; height: 26px; border-radius: 50%;
    flex: 0 0 auto; margin-right: 8px;
    border: 1px solid rgba(207,197,240,.3);
    object-fit: cover;
  }
  .tab-btn {
    padding: 13px 15px 11px;
    background: none; border: none;
    color: var(--ink-2); font: inherit; font-weight: 600; font-size: 13.5px;
    cursor: pointer; white-space: nowrap;
    border-bottom: 2px solid transparent;
  }
  .tab-btn:hover { color: var(--ink); }
  .tab-btn.active {
    color: var(--koi); border-bottom-color: var(--koi);
    text-shadow: 0 0 18px var(--koi);
  }
  /* Lücke vor Shop & Mein Profil: schiebt beide nach ganz rechts (flex-grow),
     behält aber auch beim Scrollen auf schmalen Screens eine Mindest-Lücke.
     Dezente Trennlinie markiert: ab hier ist es nicht mehr Turnier. */
  .tab-gap { flex: 1 0 28px; align-self: stretch; position: relative; }
  .tab-gap::after {
    content: ''; position: absolute; right: 13px; top: 26%; bottom: 26%;
    width: 1px; background: rgba(207,197,240,.22);
  }

  .wrap { max-width: var(--content-w); margin: 0 auto; padding: 26px 16px 70px; }
  main[hidden] { display: none; }

  /* ── Stat-Tiles ────────────────────────────────────────────────────── */
  .tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; margin-bottom: 26px; }
  .tile {
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius); padding: 14px 16px;
    transition: transform .15s ease, border-color .15s ease;
  }
  .tile:hover { transform: translateY(-2px); border-color: rgba(240,140,77,.4); }
  .tile .label { color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: .08em; }
  .tile .value { font-size: 28px; font-weight: 800; margin-top: 2px; }
  .tile .value .dim { color: var(--muted); font-size: 15px; font-weight: 600; }
  .tile .sub { color: var(--ink-2); font-size: 12px; margin-top: 2px; }
  .tile.koi-tile .value { color: var(--koi); }

  /* ── Sections ──────────────────────────────────────────────────────── */
  section {
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius); padding: 18px 18px 14px; margin-bottom: 22px;
  }
  section h2 { font-size: 15px; font-weight: 700; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
  section h2 .hint { color: var(--muted); font-weight: 400; font-size: 12px; margin-left: auto; }
  section h2::before { content: ""; width: 4px; height: 16px; background: linear-gradient(180deg, var(--koi), var(--pink)); border-radius: 2px; }
  .scroll { overflow-x: auto; }
  .note { color: var(--muted); font-size: 12px; margin-top: 10px; }

  /* ── Tabellen ──────────────────────────────────────────────────────── */
  table { border-collapse: collapse; width: 100%; }
  th, td { text-align: left; padding: 8px 10px; white-space: nowrap; }
  th {
    color: var(--muted); font-size: 11px; font-weight: 600;
    text-transform: uppercase; letter-spacing: .06em;
    border-bottom: 1px solid var(--grid); cursor: pointer; user-select: none;
  }
  th.num, td.num { text-align: right; font-variant-numeric: tabular-nums; }
  tbody tr { border-bottom: 1px solid var(--grid); transition: background .12s ease; }
  tbody tr:last-child { border-bottom: none; }
  tbody tr:hover { background: rgba(143,111,232,0.10); }
  td.name { font-weight: 600; }
  td .riot { color: var(--muted); font-size: 12px; }
  .rank1 td:first-child { color: var(--koi); font-weight: 800; }

  .bar-cell { min-width: 150px; }
  .bar { display: flex; align-items: center; gap: 8px; }
  .bar .track { flex: 1; height: 8px; background: var(--track); border-radius: 4px; overflow: hidden; }
  .bar .fill { height: 100%; background: var(--water); border-radius: 0 4px 4px 0; transition: width .4s ease; }
  .bar .val { font-variant-numeric: tabular-nums; color: var(--ink-2); font-size: 12px; width: 38px; text-align: right; }

  .hbar-row { display: grid; grid-template-columns: minmax(120px, 200px) 1fr 40px; align-items: center; gap: 12px; padding: 5px 0; }
  .hbar-row .team { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
  .hbar-row .track { height: 14px; background: var(--track); border-radius: 4px; }
  .hbar-row .fill { height: 100%; background: var(--water); border-radius: 0 4px 4px 0; min-width: 2px; transition: width .4s ease; }
  .hbar-row:first-child .fill { background: var(--koi); }
  .hbar-row .num { font-variant-numeric: tabular-nums; color: var(--ink-2); text-align: right; }

  .chip {
    display: inline-block; padding: 2px 10px; border-radius: 999px;
    font-size: 12px; border: 1px solid var(--border); color: var(--ink-2);
    background: rgba(255,255,255,.03);
  }
  .chip.completed { border-color: rgba(67,194,109,.5); color: #6ad894; }
  .chip.pending_review { border-color: rgba(245,185,66,.5); color: var(--warning); }
  .chip.disputed { border-color: rgba(226,85,99,.6); color: #f08a93; }
  .chip.win { border-color: rgba(67,194,109,.55); color: #6ad894; font-weight: 600; }
  .chip.loss { border-color: rgba(226,85,99,.55); color: #f08a93; font-weight: 600; }
  .chip.islive { border-color: rgba(255,80,80,.65); color: #ff8f8f; font-weight: 600; }
  .chip.islive::before {
    content: ""; display: inline-block; width: 7px; height: 7px; margin-right: 5px;
    border-radius: 50%; background: #ff4d4d; animation: livePulse 1.4s infinite;
  }
  @keyframes livePulse { 50% { opacity: .3; } }

  /* op.gg-Multisearch-Link neben dem Teamnamen (Scouting/Caster) */
  a.opgg {
    font-size: 10px; font-weight: 700; text-decoration: none;
    color: var(--water); border: 1px solid rgba(63,135,201,.4);
    border-radius: 5px; padding: 1px 5px; margin-left: 6px; vertical-align: 1px;
  }
  a.opgg:hover { background: rgba(63,135,201,.15); }

  /* Gold-Verlauf (Match-V5-Timeline) in den Endgame-Stats */
  .eg-gold { margin-top: 10px; }
  .eg-gold-label { font-size: 11px; color: var(--muted); margin-bottom: 4px; }
  .eg-gold svg { display: block; width: 100%; height: 90px; background: rgba(255,255,255,.03); border-radius: 8px; }

  /* ── Tiefe Wolken: gleiten langsam VOR dem Banner über den Bildschirm ──
     Weiche, watteartige Bäusche mit Lavendel-Schatten — angelehnt an die
     Wolkenränder von assets/banner.jpg. Liegen über dem Banner (::before),
     aber unter dem Farbverlauf (::after) und dem Hero-Text (z-index 1). */
  .hero-clouds { position: absolute; inset: 0; pointer-events: none; }
  .hcloud {
    position: absolute; left: -700px; overflow: visible;
    animation: hcloudGlide linear infinite;
    will-change: transform;
  }
  .hc1 { width: min(620px, 58vw); bottom: -36px; opacity: .55; animation-duration: 95s;  animation-delay: -43s; }
  .hc2 { width: min(440px, 42vw); bottom: 26px;  opacity: .38; animation-duration: 145s; animation-delay: -35s; }
  .hc3 { width: min(820px, 74vw); bottom: -95px; opacity: .5;  animation-duration: 118s; animation-delay: -74s; }
  @keyframes hcloudGlide { to { transform: translateX(calc(100vw + 1600px)); } }

  /* Gamemode-Filter-Chips */
  .chips { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 14px; }
  .chip-btn {
    padding: 6px 14px; border-radius: 999px;
    border: 1px solid var(--border); background: rgba(255,255,255,.03);
    color: var(--ink-2); cursor: pointer; font: inherit; font-size: 13px;
    transition: border-color .12s ease, color .12s ease;
  }
  .chip-btn:hover { border-color: rgba(240,140,77,.45); }
  .chip-btn.active { border-color: var(--koi); color: var(--koi); background: var(--koi-soft); font-weight: 600; }

  .round-block { margin-bottom: 16px; }
  .round-block h3 {
    font-size: 12px; color: var(--muted); margin-bottom: 6px;
    text-transform: uppercase; letter-spacing: .08em;
  }
  .match-line { display: flex; align-items: center; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--grid); flex-wrap: wrap; }
  .match-line:last-child { border-bottom: none; }
  .match-line .mid { color: var(--muted); font-size: 12px; width: 62px; font-variant-numeric: tabular-nums; }
  .match-line .vs { flex: 1; min-width: 200px; }
  .match-line .winner { font-weight: 700; color: var(--koi); }
  .match-line .score { font-variant-numeric: tabular-nums; color: var(--ink-2); width: 42px; text-align: center; }
  .checkmark { color: var(--good); }
  .medal { font-size: 13px; }
  .empty { color: var(--muted); padding: 12px 0; }

  /* Arena-Punkte-Spalten nur im Arena-Modus zeigen */
  #lb.no-arena th:nth-child(8), #lb.no-arena td:nth-child(8) { display: none; }
  #standings.no-arena th:nth-child(6), #standings.no-arena td:nth-child(6) { display: none; }

  /* ── Sonderregeln-Seitenleiste (Aktuelles Turnier) ─────────────────── */
  .t-cols { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0 22px; align-items: start; }
  .t-cols.has-side { grid-template-columns: minmax(0, 1fr) 280px; }
  .t-cols aside { position: sticky; top: 62px; align-self: start; }
  #bracket-sec { scroll-margin-top: 66px; }

  /* ── Arena-Rangliste (nutzt die Turnierbaum-Sektion) ──────────────────── */
  .ar-legend { font-size: 12.5px; color: var(--ink-2); margin-bottom: 10px; }
  .ar-scroll { overflow-x: auto; }
  .ar-table { border-collapse: collapse; width: 100%; font-size: 13px; }
  .ar-table th, .ar-table td { padding: 7px 8px; border-bottom: 1px solid var(--line); text-align: center; }
  .ar-table thead th {
    font-size: 11px; text-transform: uppercase; letter-spacing: .04em;
    color: var(--muted); font-weight: 600; white-space: nowrap;
  }
  .ar-table th.ar-team, .ar-table td.ar-team { text-align: left; }
  .ar-table td.ar-team { font-weight: 600; }
  .ar-table td.ar-team small { display: block; font-size: 10.5px; color: var(--muted); font-weight: 400; }
  .ar-table td.ar-rank { width: 34px; font-weight: 800; color: var(--muted); font-variant-numeric: tabular-nums; }
  .ar-table th.ar-total, .ar-table td.ar-total {
    text-align: right; font-weight: 800; font-variant-numeric: tabular-nums;
    white-space: nowrap; border-left: 1px solid var(--line);
  }
  .ar-c { white-space: nowrap; font-variant-numeric: tabular-nums; min-width: 54px; }
  .ar-c .ar-pl { font-weight: 700; }
  .ar-c .ar-pt { color: var(--muted); font-size: 11px; margin-left: 4px; }
  .ar-c.ar-none { color: var(--muted); }
  .ar-c.ar-p1 { background: rgba(255,215,0,.13); }
  .ar-c.ar-p2 { background: rgba(200,200,200,.10); }
  .ar-c.ar-p3 { background: rgba(205,127,50,.12); }
  .ar-table tr.ar-mine { background: var(--koi-soft); }
  .ar-table tr.ar-mine td.ar-team { color: var(--koi); }
  .ar-table tr.ar-champ td { background: rgba(255,215,0,.10); }
  .ar-open { margin-top: 12px; display: flex; flex-direction: column; gap: 5px; }
  .ar-open-row {
    display: flex; gap: 8px; align-items: center; flex-wrap: wrap; font-size: 12.5px;
    padding: 7px 10px; border: 1px solid var(--line); border-radius: 8px;
  }
  .ar-open-row .ar-open-r { color: var(--muted); }
  .ar-open-row .ar-open-t { color: var(--muted); font-size: 11.5px; flex: 1 1 200px; min-width: 0; }
  .ar-note { margin-top: 10px; font-size: 11.5px; color: var(--muted); }
  .side-rules-body { font-size: 12.5px; color: var(--ink-2); overflow-wrap: anywhere; line-height: 1.55; }
  .side-rules-body a { color: var(--water); }
  .side-rules-body code { background: var(--page-1); padding: 1px 5px; border-radius: 4px; font-size: 11.5px; }

  /* ── Handicaps: Einstufung pro Team + Regel-Stufen ─────────────────── */
  .hc-legend { font-size: 12px; color: var(--muted); line-height: 1.6; margin-bottom: 10px; }
  .hc-row {
    display: flex; gap: 8px; align-items: center; padding: 6px 0;
    border-top: 1px solid var(--line); font-size: 12.5px;
  }
  .hc-row:first-of-type { border-top: 0; }
  .hc-row .hc-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .hc-row .hc-pts { color: var(--muted); font-variant-numeric: tabular-nums; }
  .hc-row.mine { background: var(--koi-soft); border-radius: 6px; padding-inline: 6px; }
  .hc-badge {
    font-size: 11px; font-weight: 700; padding: 1px 8px; border-radius: 999px;
    border: 1px solid var(--line); white-space: nowrap;
  }
  .hc-badge.lvl0 { color: #7fe07f; border-color: rgba(12,163,12,.45); }
  .hc-badge.lvl1 { color: #ffd479; border-color: rgba(255,190,60,.45); }
  .hc-badge.lvl2 { color: #ffb066; border-color: rgba(255,140,40,.5); }
  .hc-badge.lvl3 { color: #ff9d9d; border-color: rgba(208,59,59,.5); }
  .hc-badge.lvl4 { color: #d9a6ff; border-color: rgba(160,80,220,.55); }
  .hc-tier { margin-top: 4px; font-size: 12px; line-height: 1.55; }
  .hc-tier li { margin: 3px 0 3px 2px; }
  .hc-players { display: flex; flex-wrap: wrap; gap: 4px 10px; font-size: 11.5px; color: var(--muted); padding: 2px 0 6px; }

  /* ── Self-Roles („Mein Profil" → Benachrichtigungen & Farbe) ───────── */
  .role-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 8px; }
  .role-card {
    display: flex; gap: 10px; align-items: center; text-align: left;
    padding: 10px 12px; border: 1px solid var(--line); border-radius: 10px;
    background: rgba(255,255,255,.03); color: var(--ink-2);
    font: inherit; cursor: pointer; transition: border-color .15s, background .15s;
  }
  .role-card:hover:not(:disabled) { border-color: var(--water); }
  .role-card[aria-pressed="true"] { border-color: var(--koi); background: var(--koi-soft); color: var(--ink); }
  .role-card:disabled { opacity: .55; cursor: progress; }
  .role-card .rc-icon { font-size: 18px; line-height: 1; flex: 0 0 auto; }
  .role-card .rc-swatch { width: 18px; height: 18px; border-radius: 50%; flex: 0 0 auto; border: 1px solid rgba(255,255,255,.3); }
  .role-card .rc-text { min-width: 0; flex: 1; }
  .role-card .rc-text b { display: block; font-size: 13px; color: var(--ink); }
  .role-card .rc-text small { display: block; font-size: 11.5px; color: var(--muted); line-height: 1.4; }
  .role-card .rc-state { font-size: 15px; flex: 0 0 auto; }
  .role-group + .role-group { margin-top: 16px; }
  .role-group > h3 { font-size: 13px; font-weight: 700; margin: 0 0 2px; }
  .role-group > .rg-hint { font-size: 11.5px; color: var(--muted); margin-bottom: 8px; }
  @media (max-width: 900px) {
    .t-cols.has-side { grid-template-columns: 1fr; }
    .t-cols aside { position: static; }
  }

  /* ── News ──────────────────────────────────────────────────────────── */
  .news-card {
    position: relative;
    border: 1px solid var(--border); border-radius: 10px;
    padding: 14px 16px; background: rgba(255,255,255,.02); margin-bottom: 20px;
  }
  .news-card.hl {
    border-color: rgba(233, 161, 59, .75);
    box-shadow: 0 0 0 1px rgba(233, 161, 59, .35), 0 4px 18px rgba(233, 161, 59, .12);
    background: linear-gradient(180deg, rgba(233, 161, 59, .05), rgba(255, 255, 255, .02));
  }
  .hl-btn {
    position: absolute; top: 10px; right: 12px;
    background: none; border: none; padding: 2px; line-height: 1;
    font-size: 17px; cursor: pointer; color: var(--muted);
  }
  .hl-btn:hover, .hl-btn.on { color: #e9a13b; }
  .news-card .meta { color: var(--muted); font-size: 12px; margin-bottom: 6px; padding-right: 28px; }
  .news-card .meta b { color: var(--ink-2); }
  .news-card .body { font-size: 13.5px; overflow-wrap: anywhere; }
  .news-card .body a { color: var(--water); }
  .news-card .body code { background: var(--page-1); padding: 1px 5px; border-radius: 4px; font-size: 12.5px; }
  .news-card img { max-width: 100%; border-radius: 8px; margin-top: 10px; display: block; }
  /* News-Tab-Button hervorheben (Staff-Ansage) — aus jedem Tab sichtbar */
  .tab-btn.tab-alert { color: #e9a13b; position: relative; }
  .tab-btn.tab-alert::after {
    content: ''; position: absolute; top: 8px; right: 4px;
    width: 7px; height: 7px; border-radius: 50%; background: #e9a13b;
    animation: tabPulse 1.8s ease-out infinite;
  }
  @keyframes tabPulse {
    0%   { box-shadow: 0 0 0 0 rgba(233, 161, 59, .55); }
    70%  { box-shadow: 0 0 0 7px rgba(233, 161, 59, 0); }
    100% { box-shadow: 0 0 0 0 rgba(233, 161, 59, 0); }
  }
  /* Globale Ansage-Leiste (klickbar → springt in die News) */
  #news-announce:empty { display: none; }
  .news-announce {
    display: flex; align-items: center; gap: 12px; cursor: pointer;
    border: 1px solid rgba(233, 161, 59, .6); border-radius: 12px;
    background: linear-gradient(135deg, rgba(233, 161, 59, .18), rgba(233, 161, 59, .05));
    padding: 12px 16px; margin-bottom: 22px;
  }
  .news-announce:hover { border-color: rgba(233, 161, 59, .9); }
  .news-announce .na-icon { font-size: 20px; line-height: 1; }
  .news-announce .na-text { flex: 1; font-size: 14.5px; font-weight: 700; color: var(--ink); }
  .news-announce .na-cta { font-size: 12.5px; font-weight: 700; color: #e9a13b; white-space: nowrap; }
  .news-mod-tools {
    border: 1px dashed var(--border); border-radius: 10px;
    padding: 12px 14px; margin-bottom: 16px; background: rgba(255,255,255,.02);
  }
  .news-mod-tools .nm-title { font-size: 12px; font-weight: 700; color: var(--ink-2); margin-bottom: 8px; }
  .news-mod-tools .nm-row { display: flex; gap: 8px; flex-wrap: wrap; }
  .news-mod-tools input { flex: 1; min-width: 180px;
    background: var(--page-1); color: var(--ink); border: 1px solid var(--grid);
    border-radius: 8px; padding: 8px 12px; font: inherit; }
  .news-mod-tools input:focus { outline: none; border-color: var(--water); }

  /* ── Endgame-Stats ─────────────────────────────────────────────────── */
  details.eg { margin: 0 0 8px 72px; }
  details.eg summary { cursor: pointer; color: var(--water); font-size: 12px; list-style: none; user-select: none; }
  details.eg summary::before { content: "▸ "; }
  details.eg[open] summary::before { content: "▾ "; }
  .eg-table { margin: 4px 0 6px; font-size: 12.5px; }
  .eg-table th, .eg-table td { padding: 4px 8px; }
  .eg-table .champ { width: 22px; height: 22px; border-radius: 4px; vertical-align: middle; margin-right: 6px; }
  .eg-team { color: var(--koi); font-weight: 700; font-size: 12px; padding-top: 8px; }
  .eg-meta { color: var(--muted); font-size: 11.5px; margin: 2px 0 6px; }

  /* ── Archiv ────────────────────────────────────────────────────────── */
  .arch-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; }
  .arch-card {
    border: 1px solid var(--border); border-radius: 10px;
    padding: 14px 16px; background: rgba(255,255,255,.02);
    cursor: pointer; transition: border-color .12s ease, transform .12s ease;
  }
  .arch-card:hover { border-color: rgba(240,140,77,.45); transform: translateY(-2px); }
  .arch-card .mode { font-weight: 700; }
  .arch-card .when { color: var(--muted); font-size: 12px; margin-top: 2px; }
  .arch-card .facts { color: var(--ink-2); font-size: 12.5px; margin-top: 8px; }

  /* ── MVP-Voting ────────────────────────────────────────────────────── */
  .mvp-cand { position: relative; display: grid; grid-template-columns: minmax(120px, 220px) 1fr 52px auto; gap: 12px; align-items: center; padding: 8px 0; border-bottom: 1px solid var(--grid); }
  .mvp-cand:last-child { border-bottom: none; }
  /* Titel liegt oben rechts ÜBER dem Namensfeld — die Karte bekommt dafür
     oben Platz, sonst läge er auf dem Voten-Button. */
  .mvp-cand.badged { padding-top: 30px; }
  .mvp-badges { position: absolute; top: 4px; right: 0; display: flex; gap: 6px; }
  .mvp-badge {
    border-radius: 999px; padding: 2px 10px; font-size: 11px; font-weight: 700;
    letter-spacing: .02em; white-space: nowrap; border: 1px solid;
  }
  .mvp-badge.bot { color: #8fd0ff; border-color: rgba(143,208,255,.5); background: rgba(143,208,255,.12); }
  .mvp-badge.crowd { color: var(--koi); border-color: rgba(240,140,77,.55); background: var(--koi-soft); }
  @media (max-width: 620px) {
    /* Auf schmalen Schirmen wird die Karte zweizeilig — Titel dann über allem */
    .mvp-badges { position: static; margin-bottom: 6px; grid-column: 1 / -1; flex-wrap: wrap; }
    .mvp-cand.badged { padding-top: 8px; }
  }
  .mvp-cand .track { height: 16px; background: var(--track); border-radius: 4px; }
  .mvp-cand .fill { height: 100%; background: var(--koi); border-radius: 0 4px 4px 0; min-width: 2px; transition: width .5s ease; }
  .mvp-cand .who { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .mvp-cand .num { font-variant-numeric: tabular-nums; color: var(--ink-2); text-align: right; }
  .live-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: #d03b3b; animation: pulse 1.4s infinite; vertical-align: middle; margin-right: 4px; }
  @keyframes pulse { 0%, 100% { opacity: 1 } 50% { opacity: .35 } }
  .btn.small { padding: 6px 14px; font-size: 12.5px; }
  .btn.ghost { background: none; border: 1px solid var(--koi); color: var(--koi); }

  /* ── Regeln ────────────────────────────────────────────────────────── */
  .rules h3 { font-size: 13.5px; margin: 16px 0 6px; color: var(--koi); }
  .rules ul { margin: 0 0 0 18px; color: var(--ink-2); font-size: 13.5px; }
  .rules li { margin-bottom: 5px; }

  /* ── LFT-Karten ────────────────────────────────────────────────────── */
  .lft-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 12px; }
  .lft-card {
    border: 1px solid var(--border); border-radius: 10px;
    padding: 12px 14px; background: rgba(255,255,255,.02);
  }
  .lft-card .who { font-weight: 700; }
  .lft-card .lft-note { color: var(--ink-2); font-size: 13px; margin-top: 4px; }
  .lft-card .ago { color: var(--muted); font-size: 11px; margin-top: 6px; }

  /* ── Solo-Anmeldung & Team-Beitrittsanfragen ───────────────────────── */
  .join-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; }
  .join-card {
    border: 1px solid var(--border); border-radius: 10px;
    padding: 14px 16px; background: rgba(255,255,255,.02);
  }
  .join-card .who { font-weight: 700; }
  .jc-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
  .jc-bar { height: 8px; border-radius: 4px; background: var(--track); margin: 8px 0; overflow: hidden; }
  .jc-bar .fill { height: 100%; border-radius: 4px; background: var(--water); transition: width .4s ease; }
  .jc-bar .fill.full { background: var(--good); }
  .jc-members { color: var(--muted); font-size: 12px; min-height: 16px; }
  .jc-foot { margin-top: 10px; }
  .hint-muted { color: var(--muted); font-size: 12px; }
  .join-form input {
    width: 100%; background: var(--page-1); color: var(--ink);
    border: 1px solid var(--grid); border-radius: 8px;
    padding: 8px 10px; font: inherit;
  }
  .join-form input:focus { outline: none; border-color: var(--water); }

  /* ── Mein Team & Nemesis-Draft ─────────────────────────────────────── */
  .help { color: var(--muted); font-size: 12.5px; line-height: 1.5; }
  .btn.danger { background: #c0392b; }
  .btn.danger:hover { background: #a93226; }
  .tag { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: 12px; font-weight: 600;
         background: var(--track); color: var(--ink-2); margin-right: 6px; }
  .tag.ok { background: rgba(46,160,90,.18); color: #4bbf7b; }
  .tag.warn { background: rgba(232,85,95,.16); color: #e8555f; }
  /* Hinweis über beiden Anmelde-Formularen: als kleines Team melden, nicht solo */
  .reg-hint {
    border-left: 3px solid var(--koi); background: var(--koi-soft);
    margin: 0 0 18px; padding: 12px 14px;
  }

  /* Link in den eigenen Discord-Team-Channel (Discord-Blurple) */
  .tag.chan { background: rgba(88,101,242,.18); color: #a8b1ff; text-decoration: none; }
  .tag.chan:hover { background: rgba(88,101,242,.30); color: #fff; }
  .team-card { border: 1px solid var(--border); border-radius: 12px; padding: 16px 18px;
               background: rgba(255,255,255,.02); margin-top: 16px; }
  .team-card h3 { margin: 0 0 8px; font-size: 14px; color: var(--koi); }
  .team-row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
  .team-row input[type=text] { flex: 1; min-width: 180px; background: var(--page-1); color: var(--ink);
               border: 1px solid var(--grid); border-radius: 8px; padding: 8px 10px; font: inherit; }
  .team-row input[type=text]:focus { outline: none; border-color: var(--water); }
  .switch-lbl { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--ink-2); cursor: pointer; }
  .team-table { width: 100%; border-collapse: collapse; }
  .team-table th { text-align: left; font-size: 11.5px; color: var(--muted); font-weight: 600; padding: 4px 8px; border-bottom: 1px solid var(--grid); }
  .team-table td { padding: 8px; border-bottom: 1px solid var(--grid); font-size: 13.5px; vertical-align: middle; }
  .team-table td code { font-size: 12.5px; }
  .nem-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 10px; }
  .nem-pick label { display: block; font-size: 11.5px; color: var(--ink-2); font-weight: 600; margin-bottom: 4px; }
  .nem-select { width: 100%; background: var(--page-1); color: var(--ink); border: 1px solid var(--grid);
                border-radius: 8px; padding: 8px; font: inherit; }
  .nem-select:focus { outline: none; border-color: var(--water); }
  .nem-select:disabled { opacity: .7; }
  .nem-plays { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 8px; }
  .nem-play { display: flex; align-items: center; gap: 8px; background: rgba(255,255,255,.03);
              border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; font-size: 13.5px; }
  .nem-role { font-size: 11px; color: var(--muted); font-weight: 700; text-transform: uppercase; min-width: 54px; }
  .nem-icon { width: 28px; height: 28px; border-radius: 6px; }
  .nem-revealed { border-color: #e8555f; }

  /* ── Formular (Anmeldung) ──────────────────────────────────────────── */
  .field { margin-bottom: 14px; }
  .field label { display: block; font-size: 12px; color: var(--ink-2); margin-bottom: 4px; font-weight: 600; }
  .field .help { color: var(--muted); font-size: 11.5px; margin-top: 3px; }
  .field input, .field textarea, .field select {
    width: 100%; max-width: 420px;
    background: var(--page-1); color: var(--ink);
    border: 1px solid var(--grid); border-radius: 8px;
    padding: 9px 12px; font: inherit;
  }
  .field select { cursor: pointer; }
  .field input:focus, .field textarea:focus, .field select:focus { outline: none; border-color: var(--water); }
  .role-row { display: flex; gap: 8px; max-width: 420px; }
  .role-row select { flex: 1; min-width: 0; }
  .checkline { display: flex; align-items: center; gap: 8px; font-size: 13px; font-weight: 600; cursor: pointer; color: var(--ink); }
  .field .checkline input { width: 16px; height: 16px; accent-color: var(--koi); cursor: pointer; }
  .btn {
    display: inline-block; padding: 10px 22px;
    background: linear-gradient(135deg, var(--koi), var(--pink));
    color: #fff; border: none; border-radius: 8px;
    font: inherit; font-weight: 700; cursor: pointer;
    text-decoration: none;
    transition: filter .12s ease;
    box-shadow: 0 2px 12px rgba(231,91,158,.25);
  }
  .btn:hover { filter: brightness(1.1); }
  .btn:disabled { opacity: .5; cursor: not-allowed; }
  .form-status {
    margin-top: 14px; padding: 12px 14px; border-radius: 10px;
    border: 1px solid var(--border); background: rgba(255,255,255,.03);
    font-size: 13.5px; display: none;
  }
  .form-status.show { display: block; }
  .form-status.ok { border-color: rgba(12,163,12,.5); }
  .form-status.err { border-color: rgba(208,59,59,.6); }
  .steps { color: var(--ink-2); font-size: 13px; }
  .steps li { margin-bottom: 6px; }

  /* ── Meine Matches (Profil) ────────────────────────────────────────── */
  /* ── Champion-Statistiken (Turnier-Tab) ───────────────────────────────── */
  .champ-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; }
  .champ-row {
    display: grid; grid-template-columns: 28px 1fr auto; gap: 10px; align-items: center;
    padding: 5px 0; border-top: 1px solid var(--grid); font-size: 13.5px;
  }
  .champ-row:first-of-type { border-top: none; }
  .champ-ico { width: 28px; height: 28px; border-radius: 6px; }
  .champ-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .champ-val { font-variant-numeric: tabular-nums; color: var(--ink-2); }

  /* ── Hall of Fame (Archiv-Tab) ────────────────────────────────────────── */
  .hof-row {
    display: grid; grid-template-columns: minmax(140px, 1fr) 1.2fr 1fr; gap: 12px;
    align-items: center; padding: 10px 0; border-top: 1px solid var(--grid); font-size: 13.5px;
  }
  .hof-row:first-child { border-top: none; }
  @media (max-width: 620px) {
    .hof-row { grid-template-columns: 1fr; gap: 4px; }
  }

  /* ── Öffentliches Spielerprofil (Modal aus dem Leaderboard) ────────────
     Gleiche Bauart wie die Karte im Minigame-Tab: fixer Overlay, scrollende
     Box. Der Name im Leaderboard ist ein <button>, damit er auch per Tastatur
     erreichbar ist — er soll dabei aber wie Text aussehen. */
  .name-link {
    background: none; border: none; padding: 0; font: inherit; color: inherit;
    cursor: pointer; text-align: left; border-bottom: 1px dotted var(--muted);
  }
  .name-link:hover { color: var(--koi); border-bottom-color: var(--koi); }
  .player-modal {
    position: fixed; inset: 0; z-index: 1200; padding: 20px;
    display: flex; align-items: center; justify-content: center;
    background: rgba(8,5,22,.72); backdrop-filter: blur(5px);
  }
  .player-modal[hidden] { display: none; }
  .pm-box {
    position: relative; width: min(760px, 100%); max-height: 88vh; overflow: auto;
    background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius);
    padding: 18px; box-shadow: 0 24px 70px rgba(0,0,0,.6);
  }
  .pm-close {
    position: absolute; top: 10px; right: 10px; width: 30px; height: 30px;
    background: rgba(16,12,40,.75); color: var(--ink-2);
    border: 1px solid var(--border); border-radius: 50%;
    font-size: 13px; line-height: 1; cursor: pointer; padding: 0;
  }
  .pm-close:hover { color: var(--koi); border-color: var(--koi); }

  .prof-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }
  .prof-head .avatar {
    width: 44px; height: 44px; border-radius: 50%;
    border: 2px solid var(--koi); object-fit: cover; background: var(--page-1);
  }
  .prof-head .who { font-size: 17px; font-weight: 800; }
  .prof-head .sub { color: var(--muted); font-size: 12px; }
  .prof-head .logout { margin-left: auto; }
  .mh-personal {
    display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
    color: var(--ink-2); font-size: 12px;
    margin: 0 0 8px 72px;
  }
  .mh-personal .champ { width: 20px; height: 20px; border-radius: 4px; vertical-align: middle; }
  .mh-personal b { color: var(--ink); }
  .mh-tournament-date { color: var(--muted); font-weight: 400; font-size: 12px; }

  footer { text-align: center; color: var(--muted); font-size: 12px; padding: 8px 0 24px; }
  footer a { color: var(--water); text-decoration: none; }
  footer .foot-logo { width: 20px; height: 20px; border-radius: 50%; vertical-align: -5px; margin-right: 4px; }

  @media (max-width: 720px) {
    .hero::before { background-position: center 40%; }
    .hero-inner { padding-top: 70px; }
    .mh-personal { margin-left: 0; }
  }

  /* ── Anmeldung: aufklappbare Abschnitte (Team / Solo) ─────────────────── */
  .acc > summary {
    display: flex; align-items: center; gap: 12px;
    cursor: pointer; list-style: none; user-select: none;
  }
  .acc > summary::-webkit-details-marker { display: none; }
  .acc > summary::before {
    content: ""; width: 4px; align-self: stretch; min-height: 34px;
    background: linear-gradient(180deg, var(--koi), var(--pink)); border-radius: 2px; flex: 0 0 auto;
  }
  .acc-head-text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
  .acc-title { font-size: 15.5px; font-weight: 800; }
  .acc-sub { color: var(--muted); font-size: 12.5px; }
  .acc-chevron { margin-left: auto; color: var(--muted); font-size: 13px; transition: transform .2s ease; flex: 0 0 auto; }
  .acc[open] > summary .acc-chevron { transform: rotate(180deg); }
  .acc > summary:hover .acc-title { color: var(--koi); }
  .acc-body { margin-top: 15px; padding-top: 15px; border-top: 1px solid var(--border); animation: tabIn .22s ease; }

  /* ── Lade-Skeletons & Retry ───────────────────────────────────────────── */
  .skel-lines { display: flex; flex-direction: column; gap: 9px; padding: 6px 0; }
  .skel-lines > i, .tiles > .skel-tile {
    display: block; border-radius: 6px;
    background: linear-gradient(90deg, rgba(255,255,255,.05) 25%, rgba(255,255,255,.12) 37%, rgba(255,255,255,.05) 63%);
    background-size: 400% 100%; animation: shimmer 1.3s ease infinite;
  }
  .skel-lines > i { height: 13px; }
  .skel-lines > i:nth-child(2) { width: 82%; }
  .skel-lines > i:nth-child(3) { width: 64%; }
  .tiles > .skel-tile { height: 78px; border-radius: var(--radius); }
  @keyframes shimmer { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } }
  .retry-box { text-align: center; color: var(--muted); padding: 16px 8px; }
  .retry-box .btn { margin-top: 10px; }
  @media (prefers-reduced-motion: reduce) { .skel-lines > i, .tiles > .skel-tile { animation: none; } }

  /* ── Turnierbaum / Bracket ──────────────────────────────────────────────
     Klassischer Baum: links Runde 1, rechts das Finale. Jede Spalte verteilt
     ihre Matches per flex über die volle Höhe (Slots) — dadurch sitzt jedes
     Folge-Match exakt mittig zwischen seinen beiden Zubringern, und die
     Verbindungslinien (Pseudo-Elemente) treffen sich in der Spaltenlücke. */
  .bk-wrap { overflow-x: auto; padding-bottom: 6px; }
  .bracket { --bk-line: rgba(207,197,240,.30); display: flex; align-items: stretch; min-width: max-content; }
  .bk-col { flex: 0 0 auto; width: 200px; display: flex; flex-direction: column; }
  .bk-col + .bk-col { margin-left: 44px; } /* Lücke = Platz für die Linien */
  .bk-round {
    flex: 0 0 26px; /* fixe Höhe in JEDER Spalte → Slots aller Spalten bleiben ausgerichtet */
    font-size: 11.5px; text-transform: uppercase; letter-spacing: .07em;
    color: var(--muted); font-weight: 700; text-align: center;
    border-bottom: 1px solid var(--border); margin-bottom: 6px;
  }
  .bk-slot { flex: 1; display: flex; align-items: center; position: relative; padding: 7px 0; min-height: 86px; }
  /* Linie raus (rechts) aus jedem Match — bis zur Mitte der Lücke */
  .bk-col:not(:last-child) .bk-slot::after {
    content: ""; position: absolute; right: -22px; top: 50%;
    width: 22px; height: 2px; background: var(--bk-line);
  }
  /* Vertikale Klammer: verbindet die Mittelpunkte der beiden Zubringer-Slots */
  .bk-col:not(:first-child) .bk-slot::before {
    content: ""; position: absolute; left: -22px; top: 25%; height: 50%;
    border-left: 2px solid var(--bk-line);
  }
  .bk-match {
    position: relative; width: 100%;
    background: var(--page-1); border: 1px solid var(--border); border-radius: 10px;
    padding: 8px 10px; transition: border-color .15s ease;
  }
  /* Linie rein (links) in jedes Folge-Match — von der Klammer bis zur Karte */
  .bk-col:not(:first-child) .bk-match::before {
    content: ""; position: absolute; left: -22px; top: 50%;
    width: 22px; height: 2px; background: var(--bk-line);
  }
  .bk-match:hover { border-color: rgba(240,140,77,.4); }
  .bk-match.done { border-color: rgba(67,194,109,.28); }
  .bk-match.review { border-color: rgba(245,185,66,.45); }
  .bk-team { display: flex; align-items: center; gap: 6px; font-weight: 600; font-size: 13px; padding: 3px 0; }
  .bk-team .bk-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
  .bk-team.win .bk-name { color: #6ad894; }
  .bk-team.lose { color: var(--muted); }
  .bk-crown { margin-left: auto; flex: 0 0 auto; }
  .bk-vs { text-align: center; font-size: 11px; color: var(--muted); font-variant-numeric: tabular-nums; padding: 1px 0; }
  /* Double-Elim: Winner-/Loser-Bracket + Finale untereinander, je ein eigener Baum */
  .bracket-elim { flex-direction: column; align-items: stretch; gap: 22px; }
  .bk-section-title { font-size: 13px; font-weight: 800; letter-spacing: .03em; margin: 0 0 8px; color: var(--ink-2); }
  .bk-section .bracket { min-width: max-content; }
  .bk-team.bye .bk-name { color: var(--muted); font-style: italic; }

  /* ── Turnier-Rückblick (Auto-Recap, neuestes Archiv) ──────────────────── */
  .recap { background: linear-gradient(135deg, rgba(240,140,77,.13), rgba(231,91,158,.10)), var(--surface); border-color: rgba(240,140,77,.35); }
  .recap-badge { display: inline-block; font-size: 11px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--koi); margin-bottom: 12px; }
  .recap-head { display: flex; align-items: center; gap: 14px; margin-bottom: 14px; }
  .recap-cup { font-size: 42px; line-height: 1; filter: drop-shadow(0 3px 8px rgba(240,140,77,.4)); }
  .recap-champ { font-size: 22px; font-weight: 800; }
  .recap-sub { color: var(--muted); font-size: 12.5px; margin-top: 2px; }
  .recap-roster { color: var(--ink-2); font-size: 12px; margin-top: 5px; }
  .recap-stats { display: flex; gap: 26px; padding: 13px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
  .recap-stat { display: flex; flex-direction: column; }
  .recap-stat b { font-size: 22px; font-weight: 800; }
  .recap-stat span { color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: .05em; }
  .recap-podium { display: flex; flex-wrap: wrap; gap: 8px 18px; margin-top: 13px; font-size: 13px; color: var(--ink-2); }
  .recap-podium .rp b { color: var(--koi); margin-left: 3px; }

  /* ══ Minigames (Work in Progress) ══════════════════════════════════════ */
  .tab-btn-mg .wip-dot {
    font-size: 9px; font-weight: 800; letter-spacing: .06em;
    background: var(--koi); color: #1a1330; padding: 1px 5px;
    border-radius: 6px; vertical-align: 2px;
  }
  .wip-banner {
    background: repeating-linear-gradient(-45deg, rgba(245,185,66,.14) 0 14px, rgba(245,185,66,.06) 14px 28px);
    border: 1px solid rgba(245,185,66,.45); color: var(--ink);
    border-radius: var(--radius); padding: 12px 16px; margin-bottom: 22px; font-size: 13.5px;
  }
  .mg-auth .btn { background: #5865F2; box-shadow: none; }
  .mg-auth .help { color: var(--muted); font-size: 12px; margin-top: 6px; }

  /* ── Twitch-Mini-Player + Account-Verknüpfung (×1,2 Perlen) ── */
  .tw-flex { display: flex; gap: 18px; flex-wrap: wrap; align-items: flex-start; }
  .tw-player {
    position: relative; flex: 0 1 420px; min-width: 260px; aspect-ratio: 16 / 9;
    border-radius: 12px; overflow: hidden; border: 1px solid var(--border);
    background:
      radial-gradient(120% 90% at 50% -20%, rgba(145,70,255,.22), transparent 60%),
      linear-gradient(180deg, #1a1640 0%, #120f30 100%);
  }
  .tw-player iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; }
  .tw-player .tw-off {
    position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
    color: var(--muted); font-size: 13px; padding: 12px; text-align: center;
  }
  .tw-side { flex: 1 1 260px; }
  .tw-side .btn.twitch { background: #9146FF; box-shadow: none; }
  .tw-side .help { color: var(--muted); font-size: 12px; }

  .mg-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 22px; align-items: start; }
  .mg-card { margin-bottom: 0; }
  .mg-desc { color: var(--ink-2); font-size: 13px; margin-bottom: 12px; }

  /* Minigames Container */
  .mg-container { width: 100%; position: relative; }
  /* ── Werbung: statisch in den freien Seitenspalten neben dem Inhalt ─────
     position:fixed → scrollt mit. Die genaue Lage (mittig in der Spalte,
     unter Nav/Hero) kommt per JS; passt die Spalte nicht (schmaler Monitor),
     wird das Banner ausgeblendet — es überdeckt also nie Banner oder Inhalt.
     Dazu ✕-Button + „Anzeige"-Label. Nur solange der Minigames-Tab offen
     ist (liegt im <main>). */
  .mg-ad {
    position: fixed; top: 0; left: 0;
    width: 300px;
    z-index: 5;
    will-change: transform;
    filter: drop-shadow(0 12px 26px rgba(10,6,30,.5));
  }
  .mg-ad[hidden] { display: none; }
  .mg-ad-wrapper {
    display: block;
    cursor: pointer;
    border-radius: var(--radius);
    overflow: hidden;
    text-decoration: none;
    border: 1px solid rgba(207,197,240,.25);
    transition: filter 0.2s;
  }
  .mg-ad-wrapper:hover { filter: brightness(1.12); }
  .mg-ad-image {
    width: 100%;
    height: auto;
    display: block;
  }
  /* „Anzeige"-Label wie bei echten Werbebannern */
  .mg-ad-label {
    position: absolute; top: 6px; left: 8px;
    font-size: 9px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase;
    color: rgba(243,239,252,.85); background: rgba(16,12,40,.55);
    padding: 1px 6px; border-radius: 4px; pointer-events: none;
  }
  /* ✕ zum Wegklicken — die Werbung kommt nach einer Weile zurück (wie im echten Web) */
  .mg-ad-close {
    position: absolute; top: 4px; right: 4px;
    width: 22px; height: 22px; line-height: 20px;
    background: rgba(16,12,40,.75); color: var(--ink-2);
    border: 1px solid rgba(207,197,240,.35); border-radius: 50%;
    font-size: 12px; font-weight: 700; text-align: center; padding: 0;
    cursor: pointer;
  }
  .mg-ad-close:hover { color: #fff; border-color: var(--koi); }

  /* HUD-Chips (Angel-HUD + Shop-Wallet) */
  .fish-hud { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
  .feed-chip {
    background: var(--page-1); border: 1px solid var(--grid); border-radius: 999px;
    padding: 5px 12px; font-size: 12.5px; color: var(--ink-2);
  }
  .feed-chip b { color: var(--ink); }

  /* ── Minigame: Angeln ── */
  /* Feste Mindesthöhe + Buttons unten verankert: die Stage darf beim Biss
     (Skill-Check/Boss-UI erscheint) nicht wachsen, sonst verrutscht der
     Anschlag-Button unter dem Mauszeiger weg. */
  .fish-stage {
    position: relative; border-radius: 12px; border: 1px solid var(--border);
    background:
      radial-gradient(120% 80% at 50% 120%, rgba(84,168,236,.18), transparent 60%),
      linear-gradient(180deg, #171445 0%, #101038 100%);
    padding: 18px 16px 16px; text-align: center;
    display: flex; flex-direction: column; min-height: 320px;
  }
  .fish-scene { font-size: 46px; line-height: 1; filter: drop-shadow(0 4px 10px rgba(0,0,0,.4)); transition: transform .2s ease; }
  .fish-scene.bite { animation: bobble .35s ease-in-out infinite; }
  @keyframes bobble { 0%,100% { transform: translateY(0) rotate(0); } 50% { transform: translateY(-6px) rotate(-8deg); } }
  .fish-status { min-height: 20px; margin: 10px 0 12px; font-size: 13.5px; color: var(--ink-2); font-weight: 600; }
  .fish-status.good { color: #6ad894; }
  .fish-status.bad { color: #f08a93; }

  .skillcheck { margin: 0 auto 14px; max-width: 360px; width: 100%; }
  /* Versteckt = unsichtbar, aber der Platz bleibt reserviert → nichts springt */
  .skillcheck[hidden] { display: block; visibility: hidden; }
  .sk-bar {
    position: relative; height: 28px; border-radius: 8px; overflow: hidden;
    background: linear-gradient(90deg, #2a2358, #241f4e); border: 1px solid var(--grid);
  }
  .sk-zone {
    position: absolute; top: 0; bottom: 0; border-radius: 6px;
    background: linear-gradient(180deg, rgba(67,194,109,.85), rgba(67,194,109,.55));
    box-shadow: 0 0 14px rgba(67,194,109,.6);
  }
  .sk-zone.perfect { background: linear-gradient(180deg, rgba(245,185,66,.9), rgba(240,140,77,.6)); box-shadow: 0 0 16px rgba(245,185,66,.7); }
  .sk-marker { position: absolute; top: -3px; bottom: -3px; width: 4px; margin-left: -2px; border-radius: 3px; background: #fff; box-shadow: 0 0 10px rgba(255,255,255,.9); }

  /* ── Fangbuch (Index) ── */
  .fangbuch { margin-top: 14px; }
  .fangbuch > summary { cursor: pointer; font-weight: 700; font-size: 13.5px; color: var(--ink-2); }
  .fangbuch > summary:hover { color: var(--ink); }
  .fb-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 8px; margin-top: 12px; }
  .fb-item {
    position: relative; text-align: center; padding: 10px 6px 8px; border-radius: 10px;
    background: var(--page-1); border: 1px solid var(--rc, var(--border));
    box-shadow: inset 0 0 18px -8px var(--rc, transparent);
  }
  .fb-item .fb-emoji { font-size: 26px; line-height: 1; filter: grayscale(0); }
  .fb-item .fb-name { font-size: 10.5px; color: var(--ink-2); margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .fb-item .fb-count { font-size: 10px; color: var(--rc, var(--muted)); font-weight: 800; margin-top: 1px; }
  .fb-item .fb-rar { display: block; margin: 4px auto 0; width: 22px; height: 3px; border-radius: 2px; background: var(--rc, var(--muted)); opacity: .8; }
  .fb-item.locked { opacity: .55; border-style: dashed; }
  .fb-item.locked .fb-emoji { filter: grayscale(1) brightness(.6); }
  .fb-item.locked .fb-name { color: var(--muted); }

  .rar-common    { --rc: #9aa7c0; }
  .rar-uncommon  { --rc: #43c26d; }
  .rar-rare      { --rc: #54a8ec; }
  .rar-epic      { --rc: #b06cf0; }
  .rar-legendary { --rc: #f5b942; }
  .rar-boss      { --rc: #f0566a; }

  /* ── Boss-Kampf (der 11. Mystery-Fisch) ── */
  .fish-stage.bossfight { border-color: rgba(240,86,106,.55); box-shadow: inset 0 0 46px -18px rgba(240,86,106,.85); }
  .boss-ui { max-width: 360px; margin: 0 auto 12px; }
  .boss-ui[hidden] { display: none; }
  .boss-name { font-weight: 800; font-size: 13px; color: #f0566a; letter-spacing: .4px; margin-bottom: 6px; }
  .boss-hp {
    position: relative; height: 14px; border-radius: 8px; overflow: hidden;
    background: rgba(0,0,0,.35); border: 1px solid rgba(240,86,106,.5);
  }
  .boss-hp-fill {
    height: 100%; width: 100%; border-radius: 7px;
    background: linear-gradient(90deg, #f0566a, #f5b942);
    box-shadow: 0 0 12px rgba(240,86,106,.7); transition: width .25s ease;
  }
  .boss-lives { margin-top: 6px; font-size: 13px; letter-spacing: 2px; }

  /* ══ Gebiete („Stages") ═══════════════════════════════════════════════
     Jedes Gebiet hat eine eigene Optik. Die Klasse area-<theme> setzt JS
     sowohl auf die Stage als auch auf den Minigames-Tab — so färbt sich
     die ganze Seite dezent mit. */
  .fish-area-bar {
    display: flex; align-items: center; justify-content: space-between;
    gap: 10px; margin: -4px 0 10px;
  }
  .fish-area-name {
    font-size: 12.5px; font-weight: 800; letter-spacing: .4px; color: var(--ink-2);
  }
  .fish-area-bar .btn { padding: 5px 12px; font-size: 12px; }
  /* Karten-Knopf pulsiert, solange ein frisch freigeschaltetes Gebiet wartet */
  #fish-map-btn.has-new {
    box-shadow: 0 0 0 0 rgba(240,140,77,.6);
    animation: mapNew 1.8s infinite;
  }
  @keyframes mapNew {
    70%  { box-shadow: 0 0 0 9px rgba(240,140,77,0); }
    100% { box-shadow: 0 0 0 0 rgba(240,140,77,0); }
  }

  /* ── Gebiet 2: Schleim-Sumpf — grüner, glibberiger Untergrund ── */
  .fish-stage.area-sumpf {
    border-color: rgba(126,214,92,.40);
    background:
      radial-gradient(120% 80% at 50% 118%, rgba(126,214,92,.26), transparent 62%),
      linear-gradient(180deg, #16331d 0%, #0b2413 100%);
  }
  /* Die Kinder müssen über den Schleim-Ebenen liegen. Die Cutscene ist hier
     ausgenommen: sie liegt absolut über der ganzen Stage — ein position:relative
     von hier (höhere Spezifität!) würde sie in den Textfluss zurückholen. */
  .fish-stage.area-sumpf > *:not(.fish-cutscene) { position: relative; z-index: 1; }
  /* Der Schleimboden: mehrere Blasen-Kuppen, die langsam „atmen" */
  .fish-stage.area-sumpf::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: 0; z-index: 0;
    height: 78px; pointer-events: none; transform-origin: bottom;
    border-radius: 0 0 11px 11px;
    background:
      radial-gradient(50% 118% at 12% 100%, rgba(158,240,116,.55), transparent 70%),
      radial-gradient(46% 122% at 38% 100%, rgba(112,206,88,.52), transparent 70%),
      radial-gradient(54% 130% at 66% 100%, rgba(164,244,124,.5),  transparent 70%),
      radial-gradient(44% 120% at 90% 100%, rgba(106,200,84,.52), transparent 70%),
      linear-gradient(180deg, transparent 6%, rgba(58,140,54,.78) 62%, rgba(34,100,38,.96) 100%);
    animation: slimeBreathe 6.5s ease-in-out infinite;
  }
  @keyframes slimeBreathe { 50% { transform: translateY(3px) scaleY(1.07); } }
  /* Tropfender Schleim von der Oberkante */
  .fish-stage.area-sumpf::before {
    content: ""; position: absolute; left: 0; right: 0; top: 0; z-index: 0;
    height: 30px; pointer-events: none; border-radius: 11px 11px 0 0;
    background:
      radial-gradient(38% 100% at 14% 0, rgba(126,214,92,.55), transparent 74%),
      radial-gradient(30% 130% at 33% 0, rgba(126,214,92,.5),  transparent 74%),
      radial-gradient(34% 90%  at 58% 0, rgba(126,214,92,.45), transparent 74%),
      radial-gradient(28% 140% at 79% 0, rgba(126,214,92,.5),  transparent 74%),
      radial-gradient(36% 80%  at 94% 0, rgba(126,214,92,.42), transparent 74%);
    animation: slimeDrip 7.5s ease-in-out infinite;
  }
  @keyframes slimeDrip { 50% { transform: translateY(5px); } }
  /* Skill-Check & Boss-Balken passen sich dem Sumpf an */
  .fish-stage.area-sumpf .sk-bar {
    background: linear-gradient(90deg, #1f3d23, #17321a); border-color: rgba(126,214,92,.32);
  }
  .fish-stage.area-sumpf.bossfight {
    border-color: rgba(190,240,90,.6);
    box-shadow: inset 0 0 46px -18px rgba(190,240,90,.85);
  }

  /* ── Biom 3: Eisspalte — Frostkanten, kaltes Blau ── */
  .fish-stage.area-eis {
    border-color: rgba(150,215,255,.42);
    background:
      radial-gradient(120% 80% at 50% 118%, rgba(140,205,255,.24), transparent 62%),
      linear-gradient(180deg, #16294a 0%, #0b1a33 100%);
  }
  .fish-stage.area-eis > *:not(.fish-cutscene) { position: relative; z-index: 1; }
  /* Zackige Eiskante am unteren Rand */
  .fish-stage.area-eis::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: 0; z-index: 0;
    height: 70px; pointer-events: none; border-radius: 0 0 11px 11px;
    background:
      linear-gradient(180deg, transparent 10%, rgba(122,182,235,.42) 68%, rgba(196,232,255,.75) 100%);
    clip-path: polygon(0 100%, 0 46%, 8% 72%, 17% 34%, 26% 66%, 35% 40%, 45% 74%, 54% 38%,
                       63% 68%, 72% 42%, 81% 70%, 90% 36%, 100% 62%, 100% 100%);
    animation: frostShimmer 7s ease-in-out infinite;
  }
  @keyframes frostShimmer { 50% { opacity: .72; } }
  /* Eiszapfen von oben */
  .fish-stage.area-eis::before {
    content: ""; position: absolute; left: 0; right: 0; top: 0; z-index: 0;
    height: 26px; pointer-events: none; border-radius: 11px 11px 0 0;
    background: linear-gradient(180deg, rgba(206,236,255,.72), transparent 88%);
    clip-path: polygon(0 0, 100% 0, 100% 30%, 93% 74%, 86% 26%, 76% 62%, 67% 22%,
                       57% 70%, 47% 24%, 37% 58%, 27% 20%, 17% 66%, 8% 28%, 0 52%);
  }
  .fish-stage.area-eis .sk-bar {
    background: linear-gradient(90deg, #1c3560, #16294c); border-color: rgba(150,215,255,.32);
  }
  .fish-stage.area-eis.bossfight {
    border-color: rgba(160,225,255,.6);
    box-shadow: inset 0 0 46px -18px rgba(160,225,255,.9);
  }

  /* ── Biom 4: Lavaschlund — glühender Grund, aufsteigende Hitze ── */
  .fish-stage.area-lava {
    border-color: rgba(240,140,77,.45);
    background:
      radial-gradient(120% 80% at 50% 118%, rgba(255,120,40,.30), transparent 62%),
      linear-gradient(180deg, #2a1108 0%, #170a06 100%);
  }
  .fish-stage.area-lava > *:not(.fish-cutscene) { position: relative; z-index: 1; }
  /* Lavasee am Boden: Glutblasen, die langsam pulsieren */
  .fish-stage.area-lava::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: 0; z-index: 0;
    height: 74px; pointer-events: none; transform-origin: bottom;
    border-radius: 0 0 11px 11px;
    background:
      radial-gradient(48% 120% at 16% 100%, rgba(255,214,110,.6), transparent 70%),
      radial-gradient(44% 126% at 42% 100%, rgba(255,140,50,.6),  transparent 70%),
      radial-gradient(52% 132% at 70% 100%, rgba(255,196,90,.55), transparent 70%),
      radial-gradient(42% 122% at 93% 100%, rgba(255,120,40,.6),  transparent 70%),
      linear-gradient(180deg, transparent 6%, rgba(196,64,20,.8) 60%, rgba(120,26,10,.98) 100%);
    animation: lavaGlow 5.5s ease-in-out infinite;
  }
  @keyframes lavaGlow { 50% { transform: translateY(2px) scaleY(1.06); filter: brightness(1.22); } }
  /* Gesteinszacken von der Decke */
  .fish-stage.area-lava::before {
    content: ""; position: absolute; left: 0; right: 0; top: 0; z-index: 0;
    height: 26px; pointer-events: none; border-radius: 11px 11px 0 0;
    background: linear-gradient(180deg, rgba(92,42,26,.95), rgba(52,22,14,.2) 92%);
    clip-path: polygon(0 0, 100% 0, 100% 26%, 92% 70%, 84% 22%, 74% 64%, 65% 18%,
                       55% 72%, 45% 20%, 35% 60%, 25% 16%, 15% 68%, 7% 24%, 0 56%);
  }
  .fish-stage.area-lava .sk-bar {
    background: linear-gradient(90deg, #3a1a0e, #2a1109); border-color: rgba(240,140,77,.34);
  }
  .fish-stage.area-lava.bossfight {
    border-color: rgba(255,150,60,.65);
    box-shadow: inset 0 0 46px -18px rgba(255,140,50,.95);
  }

  /* Brennende Schnur: die Trefferzone glimmt, während sie wegschmilzt */
  .skillcheck.burning .sk-zone {
    background: linear-gradient(180deg, rgba(255,176,64,.92), rgba(226,74,32,.72));
    box-shadow: 0 0 18px rgba(255,132,44,.8);
    animation: burnFlicker .45s ease-in-out infinite;
  }
  @keyframes burnFlicker { 50% { box-shadow: 0 0 26px rgba(255,196,90,1); filter: brightness(1.15); } }

  /* Eingefrorene Schnur: der Marker steht still und wird zu Frost. Damit man
     den Moment nicht übersieht, überzieht sich der ganze Balken mit Reif und
     bekommt einen kurzen Rahmen dazu. Bewusst nur Rahmen und Schleier, kein
     Beben: der Balken darf beim Zielen nicht springen. */
  .sk-marker.frozen {
    background: #cfeaff;
    box-shadow: 0 0 14px rgba(180,225,255,1), 0 0 3px 2px rgba(120,190,240,.85);
    animation: frozenPulse .5s ease-in-out infinite;
  }
  @keyframes frozenPulse { 50% { transform: scaleX(1.9); } }
  .skillcheck.frozen .sk-bar {
    border-color: rgba(190,232,255,.95);
    box-shadow: 0 0 0 2px rgba(150,215,255,.42), 0 0 22px rgba(150,215,255,.55);
  }
  /* Reifschleier über dem Balken, mit weichen Kanten von beiden Seiten */
  .skillcheck.frozen .sk-bar::after {
    content: ""; position: absolute; inset: 0; pointer-events: none; z-index: 2;
    background:
      linear-gradient(90deg, rgba(200,238,255,.42), rgba(200,238,255,.06) 34%,
                             rgba(200,238,255,.06) 66%, rgba(200,238,255,.42));
    animation: frostIn .16s ease-out;
  }
  @keyframes frostIn { from { opacity: 0; } to { opacity: 1; } }
  /* Kleines ❄ IM Balken (außerhalb würde es auf schmalen Bildschirmen aus der
     Bühne ragen), damit klar ist, was gerade passiert */
  .skillcheck.frozen .sk-bar::before {
    content: "❄"; position: absolute; left: 7px; top: 50%; z-index: 3;
    transform: translateY(-50%); line-height: 1;
    font-size: 14px; color: #eaf7ff; text-shadow: 0 0 10px rgba(150,215,255,.95);
    animation: frostIn .16s ease-out;
  }

  /* Schatzwurf: der ganze Balken ist Trefferzone — Fang garantiert */
  .skillcheck.treasure .sk-zone {
    background: linear-gradient(180deg, rgba(245,185,66,.9), rgba(67,194,109,.7));
    box-shadow: 0 0 22px rgba(245,185,66,.75);
    animation: treasureGlow 1s ease-in-out infinite;
  }
  @keyframes treasureGlow { 50% { box-shadow: 0 0 34px rgba(245,185,66,1); } }

  /* ── Seite färbt sich mit: --water ist die Akzentfarbe im Minigames-Tab ── */
  #tab-minigames.area-sumpf { --water: #7ed65c; }
  #tab-minigames.area-eis { --water: #7cc6f5; }
  #tab-minigames.area-eis .mg-card {
    border-color: rgba(150,215,255,.30);
    box-shadow: 0 0 44px -26px rgba(150,215,255,.95);
  }
  #tab-minigames.area-eis .mg-card h2::before { background: linear-gradient(180deg, #cfeaff, #54a8ec); }
  #tab-minigames.area-eis .fish-hud .feed-chip { border-color: rgba(150,215,255,.32); }
  #tab-minigames.area-eis .fish-hud .feed-chip.hot { border-color: rgba(245,185,66,.65); }
  #tab-minigames.area-sumpf .mg-card {
    border-color: rgba(126,214,92,.30);
    box-shadow: 0 0 44px -26px rgba(126,214,92,.95);
  }
  #tab-minigames.area-sumpf .mg-card h2::before { background: linear-gradient(180deg, #9de86f, #43c26d); }
  #tab-minigames.area-sumpf .fish-hud .feed-chip { border-color: rgba(126,214,92,.32); }
  #tab-minigames.area-sumpf .fish-hud .feed-chip.hot { border-color: rgba(245,185,66,.65); }
  #tab-minigames.area-lava { --water: #ff9a4d; }
  #tab-minigames.area-lava .mg-card {
    border-color: rgba(240,140,77,.32);
    box-shadow: 0 0 44px -26px rgba(255,140,50,.95);
  }
  #tab-minigames.area-lava .mg-card h2::before { background: linear-gradient(180deg, #ffd06a, #e2431c); }
  #tab-minigames.area-lava .fish-hud .feed-chip { border-color: rgba(240,140,77,.34); }
  #tab-minigames.area-lava .fish-hud .feed-chip.hot { border-color: rgba(245,185,66,.65); }

  /* ── Cutscene: Boss besiegt / neues Gebiet ──────────────────────────── */
  .fish-cutscene {
    position: absolute; inset: 0; z-index: 4; border-radius: 12px; overflow: hidden;
    display: flex; align-items: center; justify-content: center;
    background: radial-gradient(80% 70% at 50% 50%, rgba(22,14,48,.88), rgba(9,5,24,.96));
    backdrop-filter: blur(3px);
    opacity: 0; transition: opacity .32s ease;
  }
  /* display muss explizit weg — das flex oben schlägt sonst das hidden-Attribut */
  .fish-cutscene[hidden] { display: none; }
  .fish-cutscene.show { opacity: 1; }
  /* Weißer Blitz im Moment des Boss-Kills */
  .fish-cutscene::before {
    content: ""; position: absolute; inset: 0; background: #fff; opacity: 0; pointer-events: none;
  }
  .fish-cutscene.fc-boss.show::before { animation: fcFlash .55s ease-out; }
  @keyframes fcFlash { 0% { opacity: .85; } 100% { opacity: 0; } }

  .fc-inner {
    position: relative; z-index: 1; text-align: center; padding: 10px 18px;
    transform: scale(.86); transition: transform .45s cubic-bezier(.2,1.4,.4,1);
  }
  .fish-cutscene.show .fc-inner { transform: scale(1); }
  .fc-emoji { font-size: 62px; line-height: 1; filter: drop-shadow(0 6px 18px rgba(0,0,0,.6)); }
  .fc-title { margin-top: 8px; font-size: 17px; font-weight: 900; letter-spacing: .5px; }
  .fc-sub { margin-top: 6px; font-size: 12.5px; color: var(--ink-2); max-width: 320px; margin-inline: auto; line-height: 1.5; }

  .fish-cutscene.fc-boss { background: radial-gradient(80% 70% at 50% 50%, rgba(76,16,30,.9), rgba(11,5,22,.97)); }
  .fc-boss .fc-title { color: #f5b942; text-shadow: 0 0 18px rgba(245,185,66,.55); }
  .fish-cutscene.show.fc-boss .fc-emoji { animation: fcBossHit .75s cubic-bezier(.2,1.5,.4,1); }
  @keyframes fcBossHit {
    0%   { transform: scale(2.3) rotate(-14deg); opacity: 0; }
    45%  { transform: scale(.86) rotate(7deg);   opacity: 1; }
    100% { transform: scale(1) rotate(0); }
  }
  .fish-cutscene.fc-unlock, .fish-cutscene.fc-area {
    background: radial-gradient(80% 70% at 50% 50%, rgba(24,64,30,.9), rgba(7,20,12,.97));
  }
  .fc-unlock .fc-title, .fc-area .fc-title { color: #9de86f; text-shadow: 0 0 18px rgba(126,214,92,.5); }
  /* Verlorener Schatz geborgen — golden, mit langsam kreisendem Schein */
  .fish-cutscene.fc-treasure {
    background: radial-gradient(80% 70% at 50% 50%, rgba(74,54,10,.92), rgba(14,9,24,.97));
  }
  .fc-treasure .fc-title { color: #f5d24a; text-shadow: 0 0 22px rgba(245,210,74,.65); }
  .fish-cutscene.show.fc-treasure .fc-emoji { animation: fcTreasure 1.1s cubic-bezier(.2,1.3,.4,1); }
  @keyframes fcTreasure {
    0%   { transform: translateY(60px) rotate(-25deg) scale(.4); opacity: 0; }
    60%  { transform: translateY(-6px) rotate(8deg) scale(1.12); opacity: 1; }
    100% { transform: translateY(0) rotate(0) scale(1); }
  }
  .fc-treasure .fc-fx i { --fcfx: #f5d24a; }
  .fish-cutscene.show.fc-unlock .fc-emoji, .fish-cutscene.show.fc-area .fc-emoji { animation: fcRiseIn .8s cubic-bezier(.2,1.3,.4,1); }
  @keyframes fcRiseIn {
    0%   { transform: translateY(46px) scale(.6); opacity: 0; }
    100% { transform: translateY(0) scale(1); opacity: 1; }
  }

  /* Aufsteigende Funken/Blasen — Farbe je nach Cutscene-Art */
  .fc-fx { position: absolute; inset: 0; pointer-events: none; overflow: hidden; }
  .fc-fx i {
    position: absolute; bottom: -12px; width: 9px; height: 9px; border-radius: 50%;
    background: var(--fcfx, #f5b942); opacity: 0;
    animation: fcRise 2s ease-out forwards;
  }
  .fc-boss .fc-fx i   { --fcfx: #f5b942; }
  .fc-unlock .fc-fx i, .fc-area .fc-fx i { --fcfx: #9de86f; }
  @keyframes fcRise {
    0%   { opacity: 0; transform: translateY(0) scale(.5); }
    14%  { opacity: .95; }
    100% { opacity: 0; transform: translateY(-210px) scale(1.2); }
  }

  /* Kurzer Ruck der Stage im Moment des Boss-Kills */
  .fish-stage.shake { animation: stageShake .5s ease-in-out; }
  @keyframes stageShake {
    10%, 50% { transform: translateX(-5px); }
    30%, 70% { transform: translateX(5px); }
    90%      { transform: translateX(-2px); }
    100%     { transform: translateX(0); }
  }

  /* ── Karte: Gebietswahl ─────────────────────────────────────────────── */
  .fish-map {
    position: fixed; inset: 0; z-index: 1200; padding: 20px;
    display: flex; align-items: center; justify-content: center;
    background: rgba(8,5,22,.72); backdrop-filter: blur(5px);
  }
  .fish-map[hidden] { display: none; }
  .map-box {
    width: min(880px, 100%); max-height: 88vh; overflow: auto;
    background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius);
    padding: 18px 18px 16px; box-shadow: 0 24px 70px rgba(0,0,0,.6);
  }
  .map-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 14px; }
  .map-head h3 { font-size: 15px; font-weight: 800; display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
  .map-head h3 .hint { color: var(--muted); font-weight: 400; font-size: 12px; }
  .map-close {
    flex: 0 0 30px; width: 30px; height: 30px; border-radius: 50%; cursor: pointer;
    background: none; border: 1px solid var(--border); color: var(--ink-2); font-size: 13px;
  }
  .map-close:hover { color: #fff; border-color: var(--koi); }
  .map-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; }
  .map-item {
    display: flex; flex-direction: column; gap: 5px; text-align: left;
    padding: 14px 14px 12px; border-radius: 12px; cursor: pointer; font: inherit; color: var(--ink);
    border: 1px solid var(--border); background: var(--page-1);
    transition: transform .15s ease, border-color .15s ease;
  }
  .map-item:hover:not(:disabled) { transform: translateY(-2px); border-color: var(--koi); }
  .map-item:disabled { cursor: default; }
  .map-item.locked, .map-item.soon { opacity: .5; }
  .map-item.here { opacity: 1; border-color: var(--koi); box-shadow: inset 0 0 34px -16px var(--koi); }
  .map-item.area-see:not(.locked):not(.soon)   { background: linear-gradient(160deg, rgba(84,168,236,.14), var(--page-1)); }
  .map-item.area-sumpf:not(.locked):not(.soon) { background: linear-gradient(160deg, rgba(126,214,92,.16), var(--page-1)); }
  .map-item.area-eis:not(.locked):not(.soon)   { background: linear-gradient(160deg, rgba(150,215,255,.16), var(--page-1)); }
  .map-item.area-lava:not(.locked):not(.soon)  { background: linear-gradient(160deg, rgba(255,140,50,.17), var(--page-1)); }
  .map-emoji { font-size: 30px; line-height: 1; }
  .map-name { font-weight: 800; font-size: 13.5px; }
  .map-desc { font-size: 11.5px; color: var(--muted); line-height: 1.45; }
  .map-tag { margin-top: 4px; font-size: 10.5px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; }
  .map-tag.here { color: var(--koi); }
  .map-tag.open { color: var(--good); }
  .map-tag.soon { color: var(--water); }
  .map-tag.lock { color: var(--muted); text-transform: none; letter-spacing: 0; font-weight: 700; }

  /* ── Ausrüstungs-Shop: ein Block pro Rute ── */
  .rod-block { margin-bottom: 20px; }
  .rod-block:last-child { margin-bottom: 0; }
  .rod-title {
    display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap;
    font-size: 14px; font-weight: 800; margin-bottom: 10px;
    padding-bottom: 8px; border-bottom: 1px solid var(--border);
  }
  .rod-title .rod-name { color: var(--koi); }
  .rod-title .hint { color: var(--muted); font-weight: 400; font-size: 11.5px; margin-left: auto; }
  .rod-block.locked { opacity: .62; }
  .rod-block.locked .rod-title .rod-name { color: var(--muted); }
  .shop-item.rod-teaser { border-style: dashed; }

  /* Schrott-Chip hebt sich von den Perlen ab */
  .feed-chip.scrap-chip { border-color: rgba(150,215,255,.4); }
  .feed-chip.scrap-chip b { color: #9fd4f5; }

  /* ── Fangbuch: eine Dimension pro Blatt, darin nach Welten gruppiert ── */
  .fb-dims { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 12px; }
  .fb-dims[hidden] { display: none; }
  .fb-dim {
    display: inline-flex; align-items: center; gap: 7px; cursor: pointer; font: inherit;
    padding: 6px 12px; border-radius: 999px; border: 1px solid var(--border);
    background: var(--page-1); color: var(--ink-2); font-size: 12px; font-weight: 700;
  }
  .fb-dim:hover { border-color: var(--koi); color: var(--ink); }
  .fb-dim.on { border-color: var(--koi); color: #fff; box-shadow: inset 0 0 24px -12px var(--koi); }
  .fb-dim-num { color: var(--muted); font-weight: 800; font-size: 11px; }
  .fb-dim.on .fb-dim-num { color: var(--koi); }
  .fb-areas { display: grid; gap: 16px; margin-top: 12px; }
  .fb-area.locked { opacity: .72; }
  .fb-area-title {
    display: flex; align-items: center; gap: 8px; margin-bottom: 8px;
    font-size: 12.5px; font-weight: 800; color: var(--ink-2);
  }
  .fb-area-title .hint { color: var(--muted); font-weight: 400; font-size: 11.5px; margin-left: auto; }
  .fb-area .fb-grid { margin-top: 0; }

  /* ══ Rhythmus-Anschlag (Angelsystem der 2. Dimension) ═══════════════════
     Die Anbisse laufen von links auf die Ziellinie zu. Position setzt JS in
     Prozent — die Linie steht bei 82 % und muss zu TAKT_LINE passen. */
  .taktcheck { margin: 0 auto 14px; max-width: 360px; width: 100%; }
  /* Wie beim Balken: versteckt heißt unsichtbar, der Platz bleibt reserviert.
     Aber nur für das System, das in dieser Welt gilt — sonst klaffte unter der
     Bühne dauerhaft eine zweite, leere Bahn (JS setzt .sys-takt). */
  .taktcheck[hidden] { display: block; visibility: hidden; }
  .fish-stage:not(.sys-takt) .taktcheck[hidden] { display: none; }
  .fish-stage.sys-takt .skillcheck[hidden] { display: none; }
  .tk-lane {
    position: relative; height: 34px; border-radius: 8px; overflow: hidden;
    background: linear-gradient(90deg, #1b1740, #241f4e 60%, #2e2560);
    border: 1px solid var(--grid);
  }
  .tk-line {
    position: absolute; left: 82%; top: -2px; bottom: -2px; width: 3px; margin-left: -1.5px;
    background: linear-gradient(180deg, #fff, #b9a7ff);
    box-shadow: 0 0 12px rgba(200,180,255,.95); border-radius: 2px; z-index: 2;
  }
  .tk-notes { position: absolute; inset: 0; z-index: 1; }
  .tk-note {
    position: absolute; top: 50%; width: 15px; height: 15px; margin: -7.5px 0 0 -7.5px;
    border-radius: 50%; background: linear-gradient(180deg, #9ef0c4, #43c26d);
    box-shadow: 0 0 12px rgba(67,194,109,.75);
    transition: background .12s ease, box-shadow .12s ease, transform .12s ease;
  }
  .tk-note.hit     { background: linear-gradient(180deg, #cfeaff, #54a8ec); box-shadow: 0 0 12px rgba(84,168,236,.8); transform: scale(.7); }
  .tk-note.perfect { background: linear-gradient(180deg, #ffe6a1, #f5b942); box-shadow: 0 0 20px rgba(245,185,66,1); transform: scale(1.35); }
  .tk-note.miss    { background: #4a3a55; box-shadow: none; opacity: .45; transform: scale(.6); }
  /* 🕳️ Dunkelheit: kurz vor der Linie verschwinden die Anbisse */
  .tk-veil {
    position: absolute; top: 0; bottom: 0; z-index: 3; pointer-events: none;
    background: linear-gradient(90deg, rgba(6,4,16,0), rgba(6,4,16,.97) 32%, rgba(6,4,16,.99));
  }
  .tk-veil[hidden] { display: none; }
  /* 🌀 Strömung: die Bahn selbst pulsiert leicht mit */
  .taktcheck.surge .tk-lane { animation: tkSurge 2.6s ease-in-out infinite; }
  @keyframes tkSurge { 50% { filter: hue-rotate(22deg) brightness(1.12); } }
  .tk-score { font-size: 11.5px; color: var(--ink-2); font-weight: 700; margin-top: 6px; }

  /* ── Info-Knopf: Hilfe nur auf Nachfrage ── */
  .fish-info-wrap { position: relative; display: inline-flex; margin-right: auto; }
  .fish-info-btn {
    width: 20px; height: 20px; border-radius: 50%; cursor: pointer; padding: 0;
    background: none; border: 1px solid var(--border); color: var(--muted);
    font: 700 12px/1 var(--font, inherit); font-style: italic;
  }
  .fish-info-btn:hover, .fish-info-btn[aria-expanded="true"] { color: var(--ink); border-color: var(--koi); }
  .fish-info-pop {
    position: absolute; top: 26px; left: 0; z-index: 6; width: max-content; max-width: 260px;
    padding: 9px 11px; border-radius: 10px; text-align: left;
    background: var(--surface); border: 1px solid var(--border);
    box-shadow: 0 14px 34px rgba(0,0,0,.55);
    font-size: 11.5px; line-height: 1.5; color: var(--ink-2);
  }
  .fish-info-pop[hidden] { display: none; }
  .fi-row + .fi-row { margin-top: 4px; }

  /* ══ Boss: zweite Phase ════════════════════════════════════════════════
     Er reißt sich hervor, wackelt und tobt sichtbar über der Bühne. */
  .boss-sprite {
    position: absolute; left: 50%; top: 46%; z-index: 3; pointer-events: none;
    font-size: 132px; line-height: 1; margin-left: -66px; margin-top: -66px;
    filter: drop-shadow(0 10px 30px rgba(0,0,0,.75)) drop-shadow(0 0 26px rgba(240,86,106,.6));
    animation: bossRage 1.15s ease-in-out infinite;
  }
  .boss-sprite[hidden] { display: none; }
  @keyframes bossRage {
    0%   { transform: translate(-4px, 0) rotate(-5deg) scale(1); }
    25%  { transform: translate(5px, -8px) rotate(4deg) scale(1.06); }
    50%  { transform: translate(-6px, 3px) rotate(-6deg) scale(1.02); }
    75%  { transform: translate(4px, -5px) rotate(5deg) scale(1.08); }
    100% { transform: translate(-4px, 0) rotate(-5deg) scale(1); }
  }
  .boss-phase {
    margin: 4px 0 6px; font-size: 11px; font-weight: 900; letter-spacing: .16em;
    color: #ffd06a; text-shadow: 0 0 14px rgba(245,185,66,.8);
    animation: phaseFlash 1.4s ease-in-out infinite;
  }
  .boss-phase[hidden] { display: none; }
  @keyframes phaseFlash { 50% { opacity: .45; } }
  /* Bühne bebt dauerhaft, solange Phase 2 oder der Zorn läuft */
  .fish-stage.phase2, .fish-stage.rage { animation: stageQuake .9s ease-in-out infinite; }
  @keyframes stageQuake {
    0%,100% { transform: translate(0, 0); }
    25%     { transform: translate(-2px, 1px); }
    50%     { transform: translate(2px, -1px); }
    75%     { transform: translate(-1px, -2px); }
  }
  .fish-stage.rage { border-color: rgba(255,120,40,.8); box-shadow: inset 0 0 70px -14px rgba(255,110,30,.95); }

  /* ══ Die GANZE Seite färbt sich mit ════════════════════════════════════
     JS setzt area-<theme> auf <html>; --world-a/--world-b hängen dann als
     zusätzliche Hintergrund-Ebenen am body (siehe dort). --world-tint ist
     dieselbe Farbe in kräftig — die braucht nur die zweite Boss-Phase.
     Bewusst KEIN filter auf dem body: das würde für alle position:fixed-
     Elemente (Karte, Death-Screen, Toasts, Werbung) einen neuen
     Bezugsrahmen aufmachen und sie aus dem Viewport reißen. */
  html.area-see     { --world-a: rgba(84,168,236,.16);  --world-b: rgba(84,168,236,.08);  --world-tint: rgba(84,168,236,.45); }
  html.area-sumpf   { --world-a: rgba(126,214,92,.18);  --world-b: rgba(90,180,70,.10);   --world-tint: rgba(126,214,92,.5); }
  html.area-eis     { --world-a: rgba(150,215,255,.18); --world-b: rgba(120,190,240,.10); --world-tint: rgba(150,215,255,.5); }
  html.area-lava    { --world-a: rgba(255,120,40,.20);  --world-b: rgba(226,67,28,.12);   --world-tint: rgba(255,110,30,.6); }
  html.area-stadt   { --world-a: rgba(96,196,196,.18);  --world-b: rgba(60,150,150,.11);  --world-tint: rgba(96,196,196,.5); }
  html.area-graben  { --world-a: rgba(74,102,220,.20);  --world-b: rgba(30,40,110,.16);   --world-tint: rgba(90,115,230,.55); }
  html.area-schlund { --world-a: rgba(120,232,208,.20); --world-b: rgba(40,180,170,.12);  --world-tint: rgba(120,232,208,.55); }

  /* ══ Boss-Phase 2: die ganze Seite sieht rot ═══════════════════════════
     Nicht nur der Kasten mit dem Spiel: Hintergrund, Seitenränder und Banner
     kippen ins Rote, alles außer Bühne und Boss tritt zurück, und die Seite
     bebt. Wichtig: NIRGENDS ein transform oder filter auf einem Vorfahren von
     .mg-ad / .fish-map / .fish-death, sonst verlieren die ihren
     Viewport-Bezug. Deshalb wackeln unten nur Elemente ohne fixe Kinder,
     und die Werbung wird für die Dauer der Phase ausgeblendet. */
  html.boss-rage { --world-a: rgba(190,26,26,.42); --world-b: rgba(120,10,18,.34); }
  /* Roter Schleier über der ganzen Fläche, inklusive der Ränder */
  html.boss-rage::after {
    content: ""; position: fixed; inset: 0; z-index: 900; pointer-events: none;
    background: radial-gradient(85% 70% at 50% 46%, rgba(150,8,14,.16), rgba(96,4,10,.62) 78%, rgba(48,0,6,.82));
    box-shadow: inset 0 0 240px -20px rgba(255,40,30,.75);
    animation: worldPulse 1.5s ease-in-out infinite;
  }
  @keyframes worldPulse { 0%, 100% { opacity: 1; } 50% { opacity: .74; } }

  /* Alles tritt zurück: Himmel, Banner, Reiter und die Nebenbereiche */
  html.boss-rage .sky { opacity: .18; }
  html.boss-rage .hero, html.boss-rage .tabs { opacity: .35; }
  html.boss-rage .hero { border-color: rgba(240,60,50,.6); box-shadow: inset 0 0 80px -30px rgba(255,50,30,.9); }
  html.boss-rage #mg-auth-section, html.boss-rage #mg-twitch-sec,
  html.boss-rage #tab-minigames > section:last-of-type,
  html.boss-rage .wip-banner,
  html.boss-rage .mg-event-banner { opacity: .22; }
  html.boss-rage .mg-ad { display: none; }
  /* Nur Bühne und Boss bleiben vorn, über dem Schleier */
  html.boss-rage .mg-card {
    position: relative; z-index: 901; opacity: 1;
    border-color: rgba(255,70,45,.75);
    box-shadow: 0 0 70px -14px rgba(255,60,30,.95), 0 22px 60px rgba(0,0,0,.7);
  }

  /* Screenshake: kräftiger als das Beben der Bühne, und über die halbe Seite.
     Bewusst nur auf Elementen ohne position:fixed-Kinder. */
  html.boss-rage .hero, html.boss-rage .tabs, html.boss-rage .mg-card {
    animation: pageQuake .42s steps(2, end) infinite;
  }
  html.boss-rage .mg-card { animation-duration: .3s; }
  @keyframes pageQuake {
    0%   { transform: translate(0, 0) rotate(0); }
    20%  { transform: translate(-7px, 4px) rotate(-.35deg); }
    40%  { transform: translate(6px, -5px) rotate(.3deg); }
    60%  { transform: translate(-5px, -3px) rotate(-.25deg); }
    80%  { transform: translate(7px, 3px) rotate(.35deg); }
    100% { transform: translate(0, 0) rotate(0); }
  }

  /* ══ Welten der 2. Dimension (dunkel, biolumineszent) ═══════════════════ */
  .fish-stage.area-stadt {
    border-color: rgba(96,196,196,.42);
    background:
      radial-gradient(120% 80% at 50% 116%, rgba(96,196,196,.20), transparent 64%),
      linear-gradient(180deg, #10262b 0%, #071417 100%);
  }
  .fish-stage.area-graben {
    border-color: rgba(74,102,220,.40);
    background:
      radial-gradient(90% 70% at 50% 120%, rgba(74,102,220,.22), transparent 60%),
      linear-gradient(180deg, #0b0f22 0%, #04060f 100%);
  }
  .fish-stage.area-schlund {
    border-color: rgba(120,232,208,.44);
    background:
      radial-gradient(120% 84% at 50% 116%, rgba(120,232,208,.22), transparent 62%),
      linear-gradient(180deg, #06201f 0%, #030d10 100%);
  }
  #tab-minigames.area-stadt   { --water: #6ecfcf; }
  #tab-minigames.area-graben  { --water: #7e91ee; }
  #tab-minigames.area-schlund { --water: #6fe8cf; }
  #tab-minigames.area-stadt .mg-card   { border-color: rgba(96,196,196,.30);  box-shadow: 0 0 44px -26px rgba(96,196,196,.95); }
  #tab-minigames.area-graben .mg-card  { border-color: rgba(110,130,235,.30); box-shadow: 0 0 44px -26px rgba(90,115,230,.95); }
  #tab-minigames.area-schlund .mg-card { border-color: rgba(120,232,208,.32); box-shadow: 0 0 44px -26px rgba(120,232,208,.95); }
  #tab-minigames.area-stadt .mg-card h2::before   { background: linear-gradient(180deg, #a8ecec, #3f9c9c); }
  #tab-minigames.area-graben .mg-card h2::before  { background: linear-gradient(180deg, #b6c2ff, #3d4fb5); }
  #tab-minigames.area-schlund .mg-card h2::before { background: linear-gradient(180deg, #b6ffee, #2fbfa0); }
  .map-item.area-stadt:not(.locked)   { background: linear-gradient(160deg, rgba(96,196,196,.16), var(--page-1)); }
  .map-item.area-graben:not(.locked)  { background: linear-gradient(160deg, rgba(90,115,230,.17), var(--page-1)); }
  .map-item.area-schlund:not(.locked) { background: linear-gradient(160deg, rgba(120,232,208,.16), var(--page-1)); }

  /* ── Karte: Dimensions-Reiter + Welt-Kacheln ── */
  .map-dims { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 10px; }
  .map-dims[hidden] { display: none; }
  .map-dim {
    display: flex; align-items: center; gap: 7px; cursor: pointer; font: inherit; color: var(--ink-2);
    padding: 7px 13px; border-radius: 999px; border: 1px solid var(--border); background: var(--page-1);
    font-size: 12.5px; font-weight: 700;
  }
  .map-dim:hover:not(:disabled) { border-color: var(--koi); color: var(--ink); }
  .map-dim.on { border-color: var(--koi); color: #fff; box-shadow: inset 0 0 26px -12px var(--koi); }
  .map-dim.locked { opacity: .45; cursor: default; }
  .map-dim .md-emoji { font-size: 15px; }
  .map-dim-desc { font-size: 11.5px; color: var(--muted); margin-bottom: 12px; line-height: 1.5; }
  .map-idx { font-size: 10px; font-weight: 900; letter-spacing: .1em; color: var(--muted); text-transform: uppercase; }
  .map-fx { margin-top: 3px; font-size: 10.5px; font-weight: 700; color: var(--water); }
  .map-fx.none { color: var(--muted); font-weight: 400; }

  /* ── Shop: ein Reiter pro Welt ── */
  .shop-worlds { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
  .shop-world-tab {
    display: flex; align-items: center; gap: 8px; cursor: pointer; font: inherit; color: var(--ink-2);
    padding: 8px 14px; border-radius: 12px; border: 1px solid var(--border); background: var(--page-1);
    font-size: 12.5px; font-weight: 700;
  }
  .shop-world-tab:hover { border-color: var(--koi); color: var(--ink); }
  .shop-world-tab.on { border-color: var(--koi); color: #fff; box-shadow: inset 0 0 30px -14px var(--koi); }
  .shop-world-tab .swt-emoji { font-size: 16px; }
  .shop-world-tab .swt-cur { font-size: 11px; color: var(--muted); font-weight: 800; }
  .shop-world-tab.on .swt-cur { color: var(--koi); }
  .worldshop { margin-top: 4px; }
  .rod-block.global .rod-title .rod-name { color: var(--water); }
  .rod-block.relics .rod-title .rod-name { color: #f5b942; }
  .shop-item.relic-item { border-color: rgba(245,185,66,.45); box-shadow: inset 0 0 30px -18px rgba(245,185,66,.9); }
  .shop-item.relic-item.owned { border-color: rgba(67,194,109,.5); }
  .bait-chips { display: inline-flex; gap: 6px; }

  /* ══ Death-Screen (Boss-Kampf verloren) ════════════════════════════════ */
  .fish-death {
    position: fixed; inset: 0; z-index: 1300; padding: 20px;
    display: flex; align-items: center; justify-content: center;
    background: radial-gradient(70% 60% at 50% 45%, rgba(52,6,12,.86), rgba(4,2,10,.96));
    backdrop-filter: blur(6px);
    animation: deathIn .45s ease-out;
  }
  .fish-death[hidden] { display: none; }
  @keyframes deathIn { 0% { opacity: 0; } 100% { opacity: 1; } }
  .death-box {
    width: min(520px, 100%); text-align: center;
    background: var(--surface); border: 1px solid rgba(240,86,106,.45); border-radius: var(--radius);
    padding: 26px 22px 22px; box-shadow: 0 24px 80px rgba(0,0,0,.7);
  }
  .death-emoji {
    font-size: 68px; line-height: 1; filter: grayscale(.4) drop-shadow(0 8px 22px rgba(0,0,0,.7));
    animation: deathSink 1.2s cubic-bezier(.2,.8,.3,1);
  }
  @keyframes deathSink {
    0%   { transform: translateY(-26px) scale(1.25); opacity: 0; }
    100% { transform: translateY(0) scale(1); opacity: 1; }
  }
  .death-title {
    margin: 10px 0 6px; font-size: 22px; font-weight: 900; letter-spacing: .14em;
    color: #f0566a; text-shadow: 0 0 22px rgba(240,86,106,.6);
  }
  .death-sub { font-size: 13px; color: var(--ink-2); line-height: 1.6; margin: 0 auto 16px; max-width: 400px; }
  .death-drop {
    margin: 0 0 18px; padding: 16px 14px; border-radius: 12px;
    background: linear-gradient(160deg, rgba(245,185,66,.14), var(--page-1));
    border: 1px solid rgba(245,185,66,.45);
  }
  .death-drop[hidden] { display: none; }
  .dd-emoji { font-size: 44px; line-height: 1; animation: fcTreasure 1.1s cubic-bezier(.2,1.3,.4,1); }
  .dd-name { margin-top: 6px; font-size: 15px; font-weight: 900; color: #f5d24a; text-shadow: 0 0 18px rgba(245,210,74,.5); }
  .dd-desc { margin-top: 5px; font-size: 12.5px; color: var(--ink-2); line-height: 1.55; }
  .dd-hint { margin-top: 9px; font-size: 11.5px; color: var(--muted); line-height: 1.5; }

  @media (prefers-reduced-motion: reduce) {
    .fish-stage.area-sumpf::after, .fish-stage.area-sumpf::before,
    .fish-stage.area-eis::after, .fish-stage.area-lava::after,
    .fish-cutscene .fc-emoji, .fish-cutscene::before, .fc-fx i,
    .fish-stage.shake, #fish-map-btn.has-new,
    .sk-marker.frozen, .skillcheck.treasure .sk-zone,
    .skillcheck.burning .sk-zone,
    .boss-sprite, .boss-phase, .fish-stage.phase2, .fish-stage.rage,
    .taktcheck.surge .tk-lane, html.boss-rage::after,
    html.boss-rage .hero, html.boss-rage .tabs, html.boss-rage .mg-card,
    .skillcheck.frozen .sk-bar::after, .skillcheck.frozen .sk-bar::before,
    .fish-death, .death-emoji, .dd-emoji { animation: none; }
    .fc-inner, .tk-note { transition: none; }
  }

  /* ── Shop-Tab (Upgrades & Köder) ── */
  .fish-actions { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin-top: auto; }
  .up-pips { display: flex; gap: 4px; }
  .up-pip { width: 14px; height: 5px; border-radius: 3px; background: var(--grid); }
  .up-pip.on { background: var(--koi); box-shadow: 0 0 6px rgba(240,140,77,.7); }
  /* Biomübergreifendes Upgrade (🛑 Bremse) — hebt sich vom Rest des Zweigs ab */
  .shop-item.global-upg { border-color: rgba(124,198,245,.42); }
  .upg-global {
    font-size: 11px; font-weight: 700; letter-spacing: .2px; color: #8fd0f7;
    border: 1px solid rgba(124,198,245,.4); border-radius: 999px;
    padding: 1px 8px; align-self: flex-start;
  }

  /* ── Testlabor (#lab): Prototypen für Fang-Systeme ───────────────────
     Eigener Namensraum .lab-*, damit nichts davon je das echte Angeln
     beeinflusst. Alle Bühnen sind gleich hoch (Ausnahme: die lange Bahn
     von 1 · Bändigen), damit die Karten im Raster nicht springen, wenn ein
     Prototyp läuft. */
  .lab-grid { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
  .lab-stage {
    position: relative; height: 210px; margin: 4px 0 10px;
    border: 1px solid var(--grid); border-radius: 12px;
    background: linear-gradient(180deg, rgba(24,20,54,.85), rgba(14,11,36,.9));
    display: flex; align-items: center; justify-content: center; gap: 14px;
    padding: 14px; overflow: hidden; touch-action: none; user-select: none;
  }
  .lab-stage.running { border-color: rgba(240,140,77,.5); }
  .lab-status { font-size: 12.5px; color: var(--muted); min-height: 34px; }
  .lab-status.good { color: #7fd88f; }
  .lab-status.bad { color: #ff9c9c; }
  .lab-stats { font-size: 11.5px; color: var(--muted); align-self: center; }
  .lab-sub { position: absolute; bottom: 8px; left: 0; right: 0; text-align: center;
    font-size: 11.5px; color: var(--muted); }

  /* 1 · Bändigen — senkrechte Bahn + Fortschrittssäule.
     Die Bühne ist hier absichtlich die längste im Labor: der Käscher ist
     träge, und erst auf einer langen Bahn wird aus „drücken/loslassen"
     echtes Ausbalancieren — auf einer kurzen ist jeder Sprung sofort am
     Rand. Bahn UND Fortschrittssäule wachsen mit (beide 100 % hoch). */
  .lab-stage#tame-stage { height: 340px; }
  .lab-track {
    position: relative; width: 62px; height: 100%; border-radius: 9px;
    background: linear-gradient(180deg, rgba(84,168,236,.22), rgba(40,90,150,.3));
    border: 1px solid rgba(124,198,245,.28);
  }
  .lab-catcher {
    position: absolute; left: 3px; right: 3px; border-radius: 7px;
    background: rgba(255,255,255,.14); border: 1px solid rgba(255,255,255,.4);
    transition: background .1s linear;
  }
  .lab-catcher.on { background: rgba(67,194,109,.42); border-color: rgba(67,194,109,.9); }
  .lab-fish { position: absolute; left: 50%; transform: translate(-50%, 50%); font-size: 20px; line-height: 1; }
  .lab-vprog {
    position: relative; width: 16px; height: 100%; border-radius: 9px;
    background: rgba(255,255,255,.08); border: 1px solid var(--grid); overflow: hidden;
  }
  .lab-vprog-fill {
    position: absolute; left: 0; right: 0; bottom: 0;
    background: linear-gradient(180deg, #7fd88f, #43c26d);
  }

  /* 2 · Drill — zwei waagerechte Balken */
  .lab-stage#drill-stage { flex-direction: column; justify-content: center; gap: 18px; }
  .lab-row { display: flex; align-items: center; gap: 10px; width: 100%; max-width: 340px; }
  .lab-lbl { font-size: 11.5px; color: var(--muted); width: 74px; flex: none; }
  .lab-bar {
    position: relative; flex: 1; height: 20px; border-radius: 7px; overflow: hidden;
    background: rgba(255,255,255,.07); border: 1px solid var(--grid);
  }
  .lab-bar-fill { position: absolute; left: 0; top: 0; bottom: 0; width: 0; }
  .lab-bar-fill.dist { background: linear-gradient(90deg, #4f9fe8, #7fd8c6); }
  .lab-bar-fill.tension { background: linear-gradient(90deg, #f5b942, #f08c4d); }
  .lab-bar-fill.tension.hot { background: linear-gradient(90deg, #f08c4d, #e8555f); }
  /* Markierung, ab wo der Fisch zusätzlich gegenzieht (75 %) */
  .lab-danger { position: absolute; left: 75%; top: 0; bottom: 0; width: 2px; background: rgba(255,120,120,.75); }
  .lab-stage.ruck { animation: labRuck .26s ease-in-out; }
  @keyframes labRuck { 25% { transform: translateX(-4px); } 75% { transform: translateX(4px); } }

  /* 3 · Takt — Bahn mit Ziellinie bei 80 % */
  .lab-lane {
    position: relative; width: 100%; height: 44px; border-radius: 9px;
    background: rgba(255,255,255,.05); border: 1px solid var(--grid);
  }
  /* Die Ziellinie sitzt IN der Bahn (die JS bei jedem Frame neu schreibt) —
     nur so beziehen sich Linie und Anbisse auf dieselben 100 %. */
  .lab-line {
    position: absolute; left: 80%; top: 0; bottom: 0; width: 0;
    border-left: 2px dashed rgba(245,185,66,.85); pointer-events: none;
  }
  .lab-note {
    position: absolute; top: 50%; width: 18px; height: 18px; margin: -9px 0 0 -9px;
    border-radius: 50%; background: #7cc6f5; box-shadow: 0 0 10px rgba(124,198,245,.8);
  }
  .lab-note.hit { background: #7fd88f; box-shadow: 0 0 10px rgba(127,216,143,.9); }
  .lab-note.perfect { background: #f5b942; box-shadow: 0 0 14px rgba(245,185,66,1); }
  .lab-note.miss { background: #6b6480; box-shadow: none; opacity: .45; }

  /* 4 · Doppelter Anschlag — ein einziger Durchlauf */
  .lab-sweepbar {
    position: relative; width: 100%; height: 30px; border-radius: 8px; overflow: hidden;
    background: linear-gradient(90deg, #2a2358, #241f4e); border: 1px solid var(--grid);
  }
  .lab-sweep-zone {
    position: absolute; top: 0; bottom: 0; border-radius: 6px;
    background: linear-gradient(180deg, rgba(67,194,109,.85), rgba(67,194,109,.5));
  }
  .lab-sweep-gold {
    position: absolute; top: 0; bottom: 0; border-radius: 5px;
    background: linear-gradient(180deg, rgba(245,185,66,.95), rgba(240,140,77,.65));
    box-shadow: 0 0 14px rgba(245,185,66,.8);
  }
  .lab-sweep-marker {
    position: absolute; top: -3px; bottom: -3px; width: 4px; margin-left: -2px;
    border-radius: 3px; background: #fff; box-shadow: 0 0 10px rgba(255,255,255,.9);
  }

  /* 5 · Peilung — Zielring + schrumpfender Ring */
  .lab-ring-wrap { position: relative; width: 120px; height: 120px; }
  .lab-ring-target, .lab-ring-shrink {
    position: absolute; inset: 0; border-radius: 50%; box-sizing: border-box;
  }
  .lab-ring-target { border: 2px dashed rgba(245,185,66,.85); }
  .lab-ring-shrink { border: 3px solid #7cc6f5; box-shadow: 0 0 14px rgba(124,198,245,.6); }

  /* 6 · Anbiss — Wasseroberfläche mit Pose. Die Pose hängt an der
     Wasserlinie (44 %) und wird per transform nach unten gezogen, damit
     Finte und echter Anbiss dieselbe Bewegung in verschiedener Tiefe sind. */
  .lab-pond {
    position: relative; width: 100%; height: 100%; border-radius: 10px; overflow: hidden;
    background: linear-gradient(180deg, rgba(20,16,48,.25) 0 44%, rgba(56,120,190,.30) 44%, rgba(24,60,110,.45) 100%);
  }
  .lab-waterline { position: absolute; left: 0; right: 0; top: 44%; border-top: 1px solid rgba(124,198,245,.45); }
  .lab-float {
    position: absolute; left: 50%; top: calc(44% - 26px); width: 14px; height: 28px;
    border-radius: 7px 7px 5px 5px; box-shadow: 0 2px 6px rgba(0,0,0,.4);
    background: linear-gradient(180deg, #e8555f 0 52%, #f2ece4 52%);
    transform: translate(-50%, 0);
  }
  .lab-float.sunk { opacity: .5; }

  /* 7 · Kraftprobe — Bahn zwischen Fisch und Boot + geerbter .lab-bar */
  .lab-stage#haul-stage { flex-direction: column; justify-content: center; gap: 14px; }
  .lab-haul-lane { position: relative; width: 100%; max-width: 340px; height: 30px; }
  .lab-haul-lane::before {
    content: ''; position: absolute; left: 0; right: 0; top: 50%;
    border-top: 1px dashed rgba(124,198,245,.35);
  }
  .lab-haul-fish, .lab-haul-boat {
    position: absolute; top: 50%; font-size: 20px; font-style: normal; line-height: 1;
  }
  .lab-haul-fish { transform: translate(-50%, -50%); }
  .lab-haul-boat { right: 0; transform: translateY(-50%); }

  /* 8 · Gleichstand — ein Balken, zwei Marker */
  .lab-syncbar {
    position: relative; width: 100%; height: 34px; border-radius: 8px;
    background: linear-gradient(90deg, #2a2358, #241f4e); border: 1px solid var(--grid);
  }
  .lab-syncbar.near { box-shadow: inset 0 0 20px rgba(67,194,109,.45); }
  .lab-sync-marker {
    position: absolute; top: -4px; bottom: -4px; width: 5px; margin-left: -2.5px; border-radius: 3px;
  }
  .lab-sync-marker.a { background: #7cc6f5; box-shadow: 0 0 10px rgba(124,198,245,.85); }
  .lab-sync-marker.b { background: #f08c4d; box-shadow: 0 0 10px rgba(240,140,77,.85); }

  /* 9 · Ködertanz — Muster + Anzeige der laufenden Haltedauer.
     .lab-hold-mark steht bei 34 % = LAB_DANCE_SPLIT / LAB_DANCE_MAX. */
  .lab-stage#dance-stage { flex-direction: column; justify-content: center; gap: 18px; }
  .lab-pattern { display: flex; align-items: center; gap: 10px; min-height: 18px; }
  .lab-step {
    height: 16px; border-radius: 8px; background: rgba(255,255,255,.12);
    border: 1px solid var(--grid); flex: none;
  }
  .lab-step.short { width: 16px; }
  .lab-step.long { width: 46px; }
  .lab-step.now { border-color: rgba(245,185,66,.9); box-shadow: 0 0 12px rgba(245,185,66,.5); }
  .lab-step.ok { background: linear-gradient(90deg, #7fd88f, #43c26d); border-color: transparent; }
  .lab-step.bad { background: #6b6480; opacity: .5; }
  .lab-holdbar {
    position: relative; width: 100%; max-width: 300px; height: 14px; border-radius: 7px; overflow: hidden;
    background: rgba(255,255,255,.07); border: 1px solid var(--grid);
  }
  .lab-holdbar-fill {
    position: absolute; left: 0; top: 0; bottom: 0; width: 0;
    background: linear-gradient(90deg, #7cc6f5, #4f9fe8);
  }
  .lab-holdbar-fill.long { background: linear-gradient(90deg, #f5b942, #f08c4d); }
  .lab-hold-mark { position: absolute; left: 34%; top: 0; bottom: 0; width: 2px; background: rgba(255,255,255,.5); }

  /* 10 · Auswurf — Teich von oben, zwei Fadenkreuz-Linien.
     Die Zielmarke ist in Prozent bemessen (25 % breit, 40 % hoch), damit sie
     auf jeder Kartenbreite dieselbe Trefferellipse bleibt wie im JS
     (LAB_CAST_RX / LAB_CAST_RY). */
  .lab-stage#cast-stage { flex-direction: column; justify-content: center; gap: 12px; }
  .lab-castfield {
    position: relative; width: 100%; max-width: 280px; height: 128px; border-radius: 10px; overflow: hidden;
    background: linear-gradient(180deg, rgba(56,120,190,.26), rgba(24,60,110,.44));
    border: 1px solid rgba(124,198,245,.28);
  }
  .lab-cast-target {
    position: absolute; width: 25%; height: 40%; border-radius: 50%; box-sizing: border-box;
    transform: translate(-50%, -50%); border: 2px dashed rgba(245,185,66,.85);
  }
  .lab-cast-h { position: absolute; left: 0; right: 0; border-top: 2px solid rgba(255,255,255,.7); }
  .lab-cast-v { position: absolute; top: 0; bottom: 0; border-left: 2px solid rgba(255,255,255,.7); }
  .lab-cast-h.fixed { border-top-color: rgba(124,198,245,.85); }
  .lab-cast-v[hidden] { display: none; }
  .lab-cast-hit {
    position: absolute; width: 12px; height: 12px; border-radius: 50%; background: #fff;
    transform: translate(-50%, -50%); box-shadow: 0 0 12px rgba(255,255,255,.9);
  }
  .lab-cast-hit[hidden] { display: none; }

  @media (prefers-reduced-motion: reduce) {
    .lab-stage.ruck { animation: none; }
    .lab-catcher { transition: none; }
  }

  /* ── Live-Event-Banner ── */
  .mg-event-banner {
    margin: 0 0 18px; padding: 12px 16px; border-radius: 12px; font-size: 14px;
    border: 1px solid rgba(245,185,66,.55); color: var(--ink);
    background: linear-gradient(90deg, rgba(245,185,66,.14), rgba(240,140,77,.10));
    box-shadow: 0 0 24px -10px rgba(245,185,66,.8);
    animation: evPulse 2.4s ease-in-out infinite;
  }
  .mg-event-banner[hidden] { display: none; }
  @keyframes evPulse { 50% { box-shadow: 0 0 34px -6px rgba(245,185,66,.95); } }

  /* ── Streak-Chip (glüht ab aktivem Serien-Bonus) ── */
  .feed-chip.hot { border-color: rgba(245,185,66,.65); color: #f5b942; box-shadow: 0 0 12px -4px rgba(245,185,66,.8); }
  .feed-chip.hot b { color: #f5b942; }

  /* ── Titel neben dem Namen in den Bestenlisten ── */
  .lb-title {
    display: inline-block; margin-left: 6px; padding: 1px 8px; border-radius: 999px;
    font-size: 10.5px; font-weight: 800; color: var(--koi); white-space: nowrap;
    border: 1px solid rgba(240,140,77,.45); background: rgba(240,140,77,.10);
  }
  /* Goldener Name (Prämien-Shop, "goldname" — Flag golden:true in minigame-scores) */
  .gold-name {
    font-weight: 800;
    background: linear-gradient(90deg, #f5b942, #ffe9a8 45%, #f0a63f);
    -webkit-background-clip: text; background-clip: text; color: transparent;
    filter: drop-shadow(0 0 6px rgba(245,185,66,.45));
  }

  /* ── Achievements (Profil) ── */
  .ach-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
  .ach-item {
    text-align: center; padding: 12px 8px 10px; border-radius: 12px; cursor: pointer;
    background: var(--page-1); border: 1px solid var(--border);
  }
  .ach-item .ach-emoji { font-size: 26px; line-height: 1; }
  .ach-item .ach-name { font-weight: 800; font-size: 12.5px; margin-top: 4px; }
  .ach-item .ach-desc { font-size: 11px; color: var(--muted); margin-top: 2px; }
  .ach-item.locked { opacity: .45; cursor: default; border-style: dashed; }
  .ach-item.locked .ach-emoji { filter: grayscale(1) brightness(.7); }
  .ach-item:not(.locked):hover { border-color: rgba(240,140,77,.5); }
  .ach-item.active { border-color: var(--koi); box-shadow: inset 0 0 22px -10px rgba(240,140,77,.9); }
  .ach-item .ach-active { margin-top: 4px; font-size: 10.5px; color: var(--koi); font-weight: 800; }

  /* ── Aquarium (Profil) ── */
  .aqua-wrap {
    position: relative; height: 260px; border-radius: 12px; overflow: hidden;
    border: 1px solid var(--border);
    background:
      radial-gradient(120% 80% at 50% 120%, rgba(84,168,236,.20), transparent 60%),
      linear-gradient(180deg, #14204a 0%, #0d1638 60%, #0a1130 100%);
  }
  .aqua-wrap canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
  .aqua-empty {
    position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
    color: var(--ink-2); font-size: 13.5px; text-align: center; padding: 16px;
  }
  .aqua-empty[hidden] { display: none; }
  .aqua-empty a { color: var(--water); }


  /* ── Prämien-Shop ── */
  .shop-wallet { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 14px; }
  .shop-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 14px; }
  .shop-item {
    display: flex; flex-direction: column; gap: 7px; padding: 14px;
    border-radius: 12px; background: var(--page-1); border: 1px solid var(--border);
  }
  .shop-item .si-head { font-weight: 800; font-size: 14px; }
  .shop-item .si-desc { color: var(--ink-2); font-size: 12.5px; flex: 1; line-height: 1.45; }
  .shop-item .si-cost { font-weight: 800; color: var(--koi); font-size: 13px; }
  .shop-item .btn { padding: 8px 12px; font-size: 12.5px; }
  .shop-item .btn[disabled] { opacity: .4; cursor: not-allowed; box-shadow: none; }
  /* leistbare Prämien leuchten dezent auf */
  .shop-item.affordable { border-color: rgba(245,185,66,.55); box-shadow: inset 0 0 26px -14px rgba(245,185,66,.9); }
  .shop-hist-row { padding: 7px 2px; border-top: 1px solid var(--border); font-size: 13px; color: var(--ink-2); }
  .shop-hist-row b { color: var(--ink); }
  .shop-hist-row .si-status { float: right; font-size: 11.5px; color: var(--muted); }

  /* ── Minigame-Bestenliste ── */
  .mg-boards { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 22px; }
  .mg-board-title { font-size: 13px; font-weight: 700; margin-bottom: 8px; color: var(--ink-2); }
  .mg-lb { border-collapse: collapse; width: 100%; }
  .mg-lb th, .mg-lb td { padding: 7px 10px; }
  .mg-lb tbody tr { border-top: 1px solid var(--border); }
  .mg-lb tbody tr.me { background: var(--koi-soft); }
  .mg-lb tbody tr.me td:first-child { box-shadow: inset 3px 0 0 var(--koi); }
  .mg-catch-toast {
    position: fixed; left: 50%; bottom: 40px; transform: translateX(-50%) translateY(20px);
    z-index: 1000; padding: 12px 20px; border-radius: 12px; font-weight: 700; font-size: 14px;
    background: var(--surface); border: 1px solid var(--rc, var(--border)); color: var(--ink);
    box-shadow: 0 8px 30px rgba(0,0,0,.45), 0 0 22px -6px var(--rc, transparent);
    opacity: 0; pointer-events: none; transition: opacity .25s ease, transform .25s ease;
  }
  .mg-catch-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }

  /* ══ Streams, Live-Ticker & Push ═══════════════════════════════════════
     Alles hier ist optional sichtbar: der Twitch-Teil hängt am Schalter im
     Mod-Panel, der Ticker am Vorhandensein von Ereignissen. Zurückhaltend
     gestaltet — es soll den Turnierinhalt nicht überstrahlen. */

  /* ── Der pulsierende Live-Punkt (überall derselbe) ── */
  .tw-live-dot {
    display: inline-block; width: 8px; height: 8px; flex: 0 0 8px;
    border-radius: 50%; background: #e25563;
    box-shadow: 0 0 0 0 rgba(226,85,99,.6);
    animation: twPulse 2s infinite;
  }
  @keyframes twPulse {
    70% { box-shadow: 0 0 0 7px rgba(226,85,99,0); }
    100% { box-shadow: 0 0 0 0 rgba(226,85,99,0); }
  }
  @media (prefers-reduced-motion: reduce) { .tw-live-dot { animation: none; } }

  /* ── Tab-Knopf „Streams" ── */
  .tab-btn-tw { display: inline-flex; align-items: center; gap: 6px; }
  /* Muss hierbleiben: das display oben schlaegt sonst das display:none, das
     der Browser dem hidden-Attribut gibt — der Knopf bliebe sichtbar, obwohl
     Staff die Anzeige im Mod-Panel ausgeschaltet hat. */
  .tab-btn-tw[hidden] { display: none; }
  .tab-btn-tw .tw-dot {
    width: 7px; height: 7px; border-radius: 50%;
    background: var(--muted); transition: background .2s;
  }
  .tab-btn-tw.live .tw-dot { background: #9146FF; }
  .tab-btn-tw .tw-count:not(:empty) {
    background: #9146FF; color: #fff; font-size: 11px; font-weight: 700;
    padding: 1px 6px; border-radius: 999px; line-height: 1.5;
  }

  /* ── Indikator hinter Team-/Spielernamen ── */
  .tw-flag {
    display: inline-flex; align-items: center; justify-content: center;
    width: 18px; height: 18px; margin-left: 6px; vertical-align: middle;
    border-radius: 50%; background: rgba(145,70,255,.18);
    border: 1px solid rgba(145,70,255,.45); text-decoration: none;
  }
  .tw-flag:hover { background: rgba(145,70,255,.35); }

  /* ── Stream-Karten im Twitch-Tab ── */
  .tw-intro { color: var(--ink-2); font-size: 14px; line-height: 1.6; margin-bottom: 12px; }
  .tw-group { margin-bottom: 18px; }
  .tw-group-head {
    display: flex; align-items: center; gap: 10px;
    font-size: 14px; font-weight: 700; color: var(--koi);
    margin-bottom: 8px; padding-bottom: 6px; border-bottom: 1px solid var(--border);
  }
  .tw-group-head .hint { color: var(--muted); font-weight: 400; font-size: 12px; margin-left: auto; }
  .tw-card {
    display: flex; align-items: center; gap: 12px;
    padding: 11px 13px; margin-bottom: 8px;
    background: var(--surface); border: 1px solid var(--border);
    border-radius: 10px; text-decoration: none; color: var(--ink);
    transition: border-color .15s, transform .15s;
  }
  .tw-card:hover { border-color: rgba(145,70,255,.6); transform: translateX(2px); }
  .tw-card-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
  .tw-name { font-weight: 700; font-size: 15px; }
  .tw-team { font-size: 12px; color: var(--koi); font-weight: 600; }
  .tw-team-none { color: var(--muted); font-weight: 400; }
  .tw-title {
    font-size: 12px; color: var(--muted);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  }
  .tw-meta { text-align: right; flex: 0 0 auto; }
  .tw-viewers { display: block; font-weight: 700; font-variant-numeric: tabular-nums; color: #b98cff; }
  .tw-viewers-label { display: block; font-size: 10px; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; }

  /* ── Kompaktliste in der Seitenleiste ── */
  .tw-mini {
    display: flex; align-items: center; gap: 8px;
    padding: 7px 0; border-bottom: 1px solid var(--border);
    text-decoration: none; color: var(--ink); font-size: 13px;
  }
  .tw-mini:last-of-type { border-bottom: none; }
  .tw-mini-name { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .tw-mini-team { margin-left: auto; font-size: 11px; color: var(--muted); flex: 0 0 auto; }
  .tw-mini-all { display: block; margin-top: 8px; font-size: 12px; color: var(--water); text-decoration: none; }
  .tw-mini-all:hover { text-decoration: underline; }

  /* ── Live-Ticker ── */
  ol.ticker { list-style: none; margin: 0; padding: 0; }
  .tk-row {
    display: grid; grid-template-columns: auto auto 1fr; gap: 8px;
    align-items: start; padding: 7px 0;
    border-bottom: 1px solid var(--border); font-size: 13px;
  }
  .tk-row:last-child { border-bottom: none; }
  .tk-time { color: var(--muted); font-variant-numeric: tabular-nums; font-size: 12px; }
  .tk-icon { font-size: 13px; }
  .tk-text { color: var(--ink-2); line-height: 1.45; }

  /* ── Push-Sektion im Profil ── */
  .push-intro { color: var(--ink-2); font-size: 14px; line-height: 1.6; margin-bottom: 12px; }
  .push-warn {
    padding: 10px 12px; margin-bottom: 12px; font-size: 13px;
    background: rgba(245,185,66,.12); border: 1px solid rgba(245,185,66,.4);
    border-radius: 8px; color: var(--ink-2);
  }
