
    :root {
      /* ── Existing tokens ── */
      --bg: #05060a;
      --card: #10131a;
      --cyan: #22d3ee;
      --purple: #8b8cf8;
      --text: #edf0f5;
      /* #7a7f9a auf --card ergab 4,36:1 — knapp unter dem WCAG-AA-Wert
         von 4,5:1 für Fließtext. Das betraf jeden gedämpften Text in
         der App, nicht eine einzelne Karte. Ein Prozent mehr Helligkeit
         bei gleichem Farbton bringt 4,53:1; der Unterschied ist mit
         bloßem Auge nicht zu sehen, die Schwelle aber genommen. */
      --muted: #8b94a7;
      --green: #34d399;
      --red: #fb6069;
      --bar: var(--cyan);
      /* Clean-Fintech-Radien: 12px ist die Karte, 8px alles, was in
         einer Karte sitzt (Chips, Inputs), 18px die grosse Flaeche
         (Sheets, Hero). Vorher gab es nur die 14 und daneben zwei
         Dutzend handverdrahtete Werte. */
      --radius: 10px;
      --radius-sm: 6px;
      --radius-lg: 16px;
      --radius-pill: 999px;

      /* ── Typography Scale ──
         Body copy used to sit at 8.5–11px. That is caption size, not
         reading size: on a phone it is the reason every card felt like
         a ticker. Floor for running text is --text-sm (13px). --text-2xs
         remains for badges and overline labels only. */
      --text-2xs: 11px;
      --text-xs: 12px;
      --text-sm: 13px;
      --text-base: 14px;
      --text-md: 15px;
      --text-lg: 16px;
      --text-xl: 18px;
      --text-2xl: 22px;
      --text-3xl: 28px;

      /* ── Spacing (4px grid) ── */
      --space-0: 0;
      --space-1: 4px;
      --space-2: 8px;
      --space-3: 12px;
      --space-4: 16px;
      --space-5: 20px;
      --space-6: 24px;
      --space-7: 32px;
      --space-8: 40px;

      /* ── Elevated Surfaces ── */
      --card-elevated: #171b25;
      --card-hover: #1d2230;
      --surface-dim: rgba(255,255,255,.022);
      --surface-subtle: rgba(255,255,255,.05);
      --surface-medium: rgba(255,255,255,.075);
      --border-subtle: rgba(255,255,255,.085);
      --border-medium: rgba(255,255,255,.16);
      --border-strong: rgba(255,255,255,.24);

      /* ── Extended Color Palette ── */
      --cyan-glow: rgba(34,211,238,.16);
      --cyan-dim: rgba(34,211,238,.10);
      --purple-glow: rgba(139,140,248,.15);
      --green-glow: rgba(52,211,153,.15);
      --red-glow: rgba(251,96,105,.15);
      --gold: #f5b83d;
      --gold-glow: rgba(245,184,61,.15);

      /* ── Rollen, die es längst gab, nur ohne Namen ──────────────
         Diese vier Werte lagen als rohe Hex-Codes über die Datei
         verteilt (#7aa2f7 9x, #d9a441 7x, #f2cf7a 5x, #07131a 13x).
         Ein roher Hex-Wert ist nicht nur unordentlich, er ist im
         Hell-Theme schlicht falsch: der Block html[data-theme="light"]
         weiter unten schreibt die Tokens um, an einem festen #fff
         läuft er wirkungslos vorbei. Genau daran war der neue
         Premium-Bereich im Hell-Theme unlesbar (weiße Schrift auf
         weißem Grund, gemessene 1,09:1). */
      --blue-soft: #7aa2f7;      /* zweites, weicheres Blau neben --cyan */
      --premium-1: #d9a441;      /* Premium-Verlauf, dunkles Ende */
      --premium-2: #f2cf7a;      /* Premium-Verlauf, helles Ende */
      --on-accent: #07131a;      /* Schrift auf hellen Akzentflächen */
      --warn: #f5b971;           /* Hinweis, unterhalb von --red */
      --scrim: rgba(6,9,16,.94); /* Vollflächen-Abdunklung */

      /* ── Shadows ── */
      --shadow-sm: 0 1px 2px rgba(0,0,0,.45);
      --shadow-md: 0 4px 14px rgba(0,0,0,.34), 0 1px 3px rgba(0,0,0,.22);
      --shadow-lg: 0 20px 48px rgba(0,0,0,.46), 0 4px 14px rgba(0,0,0,.28);
      /* War ein 20px-Farbnebel. Ein Ring liest sich als Fokus, ein
         Nebel als Leuchtreklame — und genau das war der Auftrag. */
      --shadow-glow-cyan: 0 0 0 1px rgba(34,211,238,.30);

      /* ── Transitions ── */
      --transition-fast: 150ms ease;
      --transition-base: 250ms ease;
      --transition-slow: 400ms ease;

      /* ── Glass Surfaces ── */
      --glass-bg: rgba(5,6,10,.72);
      --glass-bg-strong: rgba(11,13,19,.92);
      --glass-border: rgba(255, 255, 255, 0.09);
      --glass-highlight: rgba(255, 255, 255, 0.10);
      --glass-blur: blur(20px) saturate(115%);
      --glass-blur-sm: blur(12px) saturate(110%);

      /* ── Neon Glows (multi-layer) ── */
      /* Dieselben Namen, andere Sprache: ein 1px-Ring plus ein weicher
         Schlagschatten in der Akzentfarbe. Die ~90 Stellen, die diese
         Tokens benutzen, mussten dafuer nicht angefasst werden — das
         ist der ganze Grund, warum sie Tokens sind. */
      --glow-cyan-sm: 0 0 0 1px rgba(34,211,238,.24);
      --glow-cyan-md: 0 0 0 1px rgba(34,211,238,.34), 0 8px 20px rgba(34,211,238,.12);
      --glow-purple-sm: 0 0 0 1px rgba(139,140,248,.24);
      --glow-purple-md: 0 0 0 1px rgba(139,140,248,.34), 0 8px 20px rgba(139,140,248,.12);
      --glow-green-sm: 0 0 0 1px rgba(52,211,153,.26);
      --glow-red-sm: 0 0 0 1px rgba(251,96,105,.26);
      --glow-gold-sm: 0 0 0 1px rgba(245,184,61,.28);

      /* ── Aurora Palette ── */
      --aurora-1: var(--cyan);
      --aurora-2: var(--purple);
      --aurora-3: #ff3d8c;
      --aurora-4: #00ffa3;
      /* Aurora-Blobs und Partikel sind aus. Sie waren die Signatur des
         alten Designs; ein Handelsprodukt, hinter dessen Zahlen sich
         farbige Nebel bewegen, liest sich als Spielzeug. Die Regler
         bleiben stehen (und die Elemente im DOM), damit weder JS noch
         der Reduced-Motion-Block angefasst werden muss — sie stehen
         nur auf null. Den Tiefeneindruck traegt jetzt ein statischer
         Verlauf auf <body> im Redesign-Layer am Dateiende. */
      --aurora-strength: 0;       /* multiplier for blob opacity / blur (cut by reduced-motion) */
      --aurora-blur: 80px;
      --particle-strength: 0;     /* multiplier for particle canvas */
      --glow-strength: .5;        /* multiplier for neon glows */

      /* ── Easing & Springs ── */
      --ease-out: cubic-bezier(.22,.9,.26,1);
      --ease-in: cubic-bezier(.55,0,.78,.42);
      --ease-spring: cubic-bezier(.34,1.56,.64,1);
      --ease-snap: cubic-bezier(.32,.72,0,1);

      /* ── Letter spacing ── */
      /* ── Rollen, die benutzt, aber nie definiert waren ──────────
         Gefunden beim Redesign: 17 Stellen benutzen var(--accent),
         var(--ink), var(--amber), var(--accent-glow/-soft) oder
         var(--space-md) — definiert war keine davon. Was das
         anrichtet, hat drei Stufen:

           1. Ohne Fallback (`border-color:var(--accent)`,
              `background:var(--accent)`) ist die Deklaration schlicht
              ungueltig — die Flaeche hatte gar keine Akzentfarbe.
           2. Mit Fallback stand dort ein rohes Hex, an dem das
              Hell-Theme wirkungslos vorbeilaeuft: `var(--ink,#fff)`
              ist im Hell-Theme weisse Schrift auf weisser Karte.
           3. Dieselbe Rolle trug je nach Fundstelle einen anderen
              Fallback (#19c37d gruen und #7aa2ff blau fuer --accent).

         Die Ratsche in designTokens.test.mjs sieht davon nichts: sie
         zaehlt rohe Hex-Werte, und ein Hex INNERHALB von var(--x,#y)
         sah aus wie ein sauberer Token-Zugriff. Jetzt zeigen alle
         fuenf auf eine echte Rolle und folgen damit dem Theme. */
      --accent: var(--cyan);
      --accent-glow: var(--cyan-glow);
      --accent-soft: var(--cyan-dim);
      --ink: var(--text);
      --amber: var(--gold);
      --space-md: 14px;

      /* ── Obsidian (03.09.26) ──────────────────────────────────
         Zahlen in Mono (System-Stack, kein Netz-Font: Telegram-nativ und
         offline-fest), eine Ring-Linie fuer Akzent-Umrisse, der Grund als
         RGB-Tripel fuer den Verlauf ueber dem Punktraster, die Punkte
         selbst. Alle vier auch im Hell-Theme. */
      --cyan-line: rgba(34,211,238,.35);
      --bg-rgb: 5,6,10;
      --dot: rgba(255,255,255,.07);

      --tracking-tight: -.3px;
      --tracking-base: 0;
      --tracking-wide: .5px;

      /* ── Line heights ── */
      --leading-tight: 1.2;
      --leading-snug: 1.35;
      --leading-normal: 1.5;
      --leading-relaxed: 1.6;

      color-scheme: dark;
    }

    /* ── Light Theme Overrides ──────────────────────────
       Activated by setting `data-theme="light"` on <html>.
       JS handles 'auto' (matchMedia + Telegram colorScheme). */
    html[data-theme="light"] {
      color-scheme: light;
      --bg: #f4f4f0;
      --card: #ffffff;
      --card-elevated: #ffffff;
      --card-hover: #f0f0ec;
      --text: #12151b;
      --muted: #5d6675;
      --bar: #0a7381;

      --surface-dim: rgba(18,21,27,.03);
      --surface-subtle: rgba(18,21,27,.05);
      --surface-medium: rgba(18,21,27,.08);
      --border-subtle: rgba(18,21,27,.11);
      --border-medium: rgba(18,21,27,.2);
      --border-strong: rgba(18,21,27,.28);

      --glass-bg: rgba(255,255,255,.78);
      --glass-bg-strong: rgba(255,255,255,.93);
      --glass-border: rgba(18,21,27,.11);
      --glass-highlight: rgba(255,255,255,.85);

      --shadow-sm: 0 1px 2px rgba(18,21,27,.06);
      --shadow-md: 0 4px 14px rgba(18,21,27,.09), 0 1px 3px rgba(18,21,27,.05);
      --shadow-lg: 0 20px 48px rgba(18,21,27,.14), 0 4px 14px rgba(18,21,27,.07);
      --shadow-glow-cyan: 0 0 0 1px rgba(10,115,129,.32);

      --cyan: #0a7381;
      --cyan-glow: rgba(10,115,129,.18);
      --cyan-dim: rgba(10,115,129,.10);
      --purple: #5b52d6;
      --purple-glow: rgba(91,82,214,.16);
      --green: #0f7d4f;
      --green-glow: rgba(15,125,79,.18);
      --red: #c2363c;
      --red-glow: rgba(194,54,60,.16);
      --gold: #8a5b00;
      --gold-glow: rgba(138,91,0,.18);

      /* Die neuen Rollen im Hell-Theme. Blau und Hinweis müssen
         dunkler werden, sonst tragen sie auf Weiß keinen Kontrast.
         Der Premium-Verlauf bleibt: er ist eine Fläche mit dunkler
         Schrift darauf und funktioniert in beiden Themes. --on-accent
         bleibt aus demselben Grund dunkel. */
      --blue-soft: #2f5fd0;
      --warn: #8a5300;
      --scrim: rgba(244,244,240,.94);
      --cyan-line: rgba(10,115,129,.38);
      --bg-rgb: 244,244,240;
      --dot: rgba(18,21,27,.13);

      --aurora-strength: 0;
      --particle-strength: 0;
      --glow-strength: .4;
    }
    html[data-theme="light"] body::after {
      background: radial-gradient(ellipse at center, transparent 30%, rgba(244,244,240,.55) 100%);
    }
    html[data-theme="light"] .balance-card {
      background: linear-gradient(135deg, #e7ecff 0%, #f1e7ff 100%);
    }
    html[data-theme="light"] h1,
    html[data-theme="light"] .lang-overlay h2 {
      text-shadow: none;
    }
    html[data-theme="light"] .ha {
      text-shadow: 0 0 12px rgba(7,114,127,.2);
    }

    * { margin: 0; padding: 0; box-sizing: border-box; }

    body {
      color: var(--text);
      padding: 16px;
      min-height: 100vh;
      position: relative;
      overflow-x: hidden;
    }

    /* ── Aurora Mesh Background ─────────────────────── */
    .aurora-bg {
      position: fixed;
      inset: -20%;
      z-index: -2;
      pointer-events: none;
      overflow: hidden;
    }
    .aurora-bg::before,
    .aurora-bg::after,
    .aurora-bg > .aurora-blob {
      content: "";
      position: absolute;
      border-radius: 50%;
      filter: blur(var(--aurora-blur));
      opacity: calc(.38 * var(--aurora-strength, 1));
      mix-blend-mode: screen;
      will-change: transform;
    }
    .aurora-bg::before {
      width: 60vw; height: 60vw;
      left: -10%; top: -5%;
      background: radial-gradient(circle at 30% 30%, var(--aurora-1), transparent 65%);
      animation: aurora-drift-a 28s ease-in-out infinite alternate;
    }
    .aurora-bg::after {
      width: 55vw; height: 55vw;
      right: -12%; top: 20%;
      background: radial-gradient(circle at 60% 40%, var(--aurora-2), transparent 65%);
      animation: aurora-drift-b 34s ease-in-out infinite alternate;
    }
    .aurora-bg > .aurora-blob {
      width: 65vw; height: 65vw;
      left: 15%; bottom: -20%;
      background: radial-gradient(circle at 50% 50%, var(--aurora-3), transparent 65%);
      animation: aurora-drift-c 40s ease-in-out infinite alternate;
      opacity: calc(.26 * var(--aurora-strength, 1));
    }
    @keyframes aurora-drift-a {
      0%   { transform: translate3d(-4%, -2%, 0) scale(1);   }
      100% { transform: translate3d(8%,  6%, 0) scale(1.15); }
    }
    @keyframes aurora-drift-b {
      0%   { transform: translate3d(2%, 4%, 0) scale(1.05); }
      100% { transform: translate3d(-7%, -6%, 0) scale(1.2); }
    }
    @keyframes aurora-drift-c {
      0%   { transform: translate3d(0, 3%, 0) scale(1);    }
      100% { transform: translate3d(-5%, -8%, 0) scale(1.18); }
    }

    .particle-bg {
      position: fixed;
      inset: 0;
      z-index: -1;
      pointer-events: none;
      opacity: calc(.55 * var(--particle-strength, 1));
    }
    html[data-theme="light"] .particle-bg { display: none; }

    /* subtle vignette so text stays readable over aurora */
    body::after {
      content: "";
      position: fixed;
      inset: 0;
      z-index: -1;
      pointer-events: none;
      background: radial-gradient(ellipse at center, transparent 30%, rgba(10,13,20,.55) 100%);
    }

    /* ── Glassmorphism across existing cards ───────── */
    .hr, .cw, .cd, .st, .pd-card, .os-card, .balance-card, .subnet-section, .ai-teaser {
      background: var(--glass-bg) !important;
      backdrop-filter: var(--glass-blur);
      -webkit-backdrop-filter: var(--glass-blur);
      transition: transform var(--transition-base), box-shadow var(--transition-base), border-color var(--transition-base);
    }
    .hr:hover, .pd-card:hover, .os-card:hover, .st:hover, .ai-teaser:hover {
      transform: translateY(-2px);
      box-shadow: var(--shadow-lg), var(--glow-cyan-sm), inset 0 1px 0 var(--glass-highlight);
      border-color: rgba(46,211,224,.25);
    }
    @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
      .hr, .cw, .cd, .st, .pd-card, .os-card, .balance-card, .subnet-section, .ai-teaser {
        background: var(--card) !important;
      }
    }

    /* ── Hero Glow Border Animation ────────────────── */
    .hr {
      position: relative;
      overflow: hidden;
    }
    .hr::before {
      content: "";
      position: absolute;
      inset: -2px;
      border-radius: calc(var(--radius) + 2px);
      padding: 2px;
      background: conic-gradient(from 0deg, var(--cyan), var(--purple), var(--aurora-3), var(--cyan));
      -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
      -webkit-mask-composite: xor;
              mask-composite: exclude;
      opacity: .35;
      animation: hero-border-spin 24s linear infinite;
      pointer-events: none;
      z-index: 0;
    }
    /* HUD corner brackets (matches the dashboard cells) */
    .hr::after {
      content: ''; position: absolute; inset: 7px;
      pointer-events: none; z-index: 2;
      background:
        linear-gradient(rgba(46,211,224,.55), rgba(46,211,224,.55)) left 0 top 0 / 12px 1px,
        linear-gradient(rgba(46,211,224,.55), rgba(46,211,224,.55)) left 0 top 0 / 1px 12px,
        linear-gradient(rgba(143,157,255,.5), rgba(143,157,255,.5)) right 0 bottom 0 / 12px 1px,
        linear-gradient(rgba(143,157,255,.5), rgba(143,157,255,.5)) right 0 bottom 0 / 1px 12px;
      background-repeat: no-repeat;
      opacity: .55;
    }
    .hr[data-trend="up"]::before { opacity: .75; filter: hue-rotate(-10deg); }
    .hr[data-trend="down"]::before { filter: hue-rotate(130deg); opacity: .55; }
    .hr > * { position: relative; z-index: 1; }
    @keyframes hero-border-spin { to { transform: rotate(360deg); } }

    /* stronger hero title glow */

    /* ── Sparkline enhancements ────────────────────── */
    @keyframes spark-pulse {
      0%,100% { r: 3; opacity: 1; }
      50%     { r: 5; opacity: .6; }
    }

    /* ── Radial Gauges ─────────────────────────────── */
    .gauge {
      position: relative;
      width: 84px;
      height: 84px;
      margin: 0 auto;
    }
    .gauge svg { width: 100%; height: 100%; transform: rotate(-90deg); }
    .gauge .gauge-bg {
      fill: none;
      stroke: rgba(255,255,255,.06);
      stroke-width: 8;
    }
    .gauge .gauge-fg {
      fill: none;
      stroke: url(#gaugeGrad);
      stroke-width: 8;
      stroke-linecap: round;
      stroke-dasharray: 264;
      stroke-dashoffset: 264;
      transition: stroke-dashoffset 1.2s cubic-bezier(.22,.9,.26,1);
      filter: drop-shadow(0 0 6px rgba(46,211,224,.5));
    }
    .gauge .gauge-val {
      position: absolute;
      inset: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 20px;
      font-weight: 800;
      color: var(--text);
      letter-spacing: -.3px;
    }
    .gauge .gauge-lbl {
      position: absolute;
      bottom: -18px;
      left: 0; right: 0;
      text-align: center;
      font-size: var(--text-2xs);
      color: var(--muted);
      text-transform: uppercase;
      letter-spacing: .5px;
      font-weight: 700;
    }
    .os-card .gauge { margin-bottom: 22px; }
    .os-card .gauge + .os-val { display: none; } /* gauge replaces raw number */

    /* ── Ripple effect ─────────────────────────────── */
    .ripple {
      position: relative;
      overflow: hidden;
      isolation: isolate;
    }
    .ripple::after {
      content: "";
      position: absolute;
      left: var(--rx, 50%);
      top:  var(--ry, 50%);
      width: 4px; height: 4px;
      border-radius: 50%;
      transform: translate(-50%, -50%) scale(0);
      background: radial-gradient(circle, rgba(46,211,224,.45), transparent 70%);
      opacity: 0;
      pointer-events: none;
    }
    .ripple.ripple-active::after {
      animation: ripple-out 600ms ease-out;
    }
    @keyframes ripple-out {
      0%   { transform: translate(-50%,-50%) scale(0);  opacity: .8; }
      100% { transform: translate(-50%,-50%) scale(80); opacity: 0;  }
    }

    /* ── Skeleton Shimmer ─────────────────────────── */
    .skeleton {
      display: inline-block;
      min-width: 40px;
      height: 1em;
      border-radius: 6px;
      background: linear-gradient(90deg,
        rgba(255,255,255,.04) 0%,
        rgba(255,255,255,.12) 50%,
        rgba(255,255,255,.04) 100%);
      background-size: 200% 100%;
      animation: skeleton-shimmer 1.4s linear infinite;
      color: transparent !important;
    }
    @keyframes skeleton-shimmer {
      0%   { background-position: 200% 0; }
      100% { background-position: -200% 0; }
    }

    /* ── Live pulse dot ───────────────────────────── */
    .live-dot {
      display: inline-block;
      width: 8px; height: 8px;
      border-radius: 50%;
      margin-right: 6px;
      vertical-align: middle;
    }
    @keyframes live-pulse {
      0%,100% { opacity: 1; transform: scale(1); }
      50%     { opacity: .45; transform: scale(1.4); }
    }

    /* ── Heatmap / Treemap View ───────────────────── */
    .heat-header {
      display: flex; flex-direction: column; gap: 2px;
      margin: 4px 0 10px;
    }
    .heat-eyebrow {
      display: inline-flex; align-items: center; gap: 8px;
      font: 700 11px/1 inherit; letter-spacing: .8px;
      text-transform: uppercase;
    }
    .heat-eyebrow::before {
      content: ""; width: 6px; height: 6px; border-radius: 50%;
      background: var(--green); box-shadow: 0 0 8px rgba(47,212,138,.85);
      animation: live-pulse 1.8s ease-in-out infinite;
    }
    .heat-eyebrow b {
      color: rgba(255,255,255,.92); font-weight: 700; letter-spacing: .8px;
    }
    .heat-eyebrow .heat-rule {
      flex: 1 1 auto; height: 1px; min-width: 24px;
      background: linear-gradient(90deg, rgba(255,255,255,.18), rgba(255,255,255,0));
    }
    .heat-subtitle {
      font: 500 12px/1.3 inherit; color: var(--muted);
    }
    .heat-toolbar {
      display: flex; gap: 8px; flex-wrap: wrap;
      justify-content: flex-end; align-items: center;
      margin: 0 0 10px;
    }
    .heat-seg button {
      font: 700 11px/1 inherit; letter-spacing: .2px;
      padding: 7px 13px; cursor: pointer;
    }
    .heat-seg button:hover { color: var(--text); }
    .heat-seg button[disabled] {
      opacity: .45; cursor: not-allowed;
      position: relative;
    }
    .heat-seg button[disabled]:hover { color: var(--muted); }
    .sn-heatmap {
      display: grid;
      grid-template-columns: repeat(8, 1fr);
      grid-auto-rows: 38px;
      grid-auto-flow: dense;
      gap: 4px;
      padding: 2px 0 6px;
    }
    .heat-tile {
      border-radius: 10px;
      padding: 6px 8px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      font-weight: 700;
      cursor: pointer;
      position: relative;
      overflow: hidden;
      transition: transform .15s ease, box-shadow .15s ease, z-index 0s;
      grid-column: span 2;
      grid-row: span 2;
    }
    .heat-tile::after {
      content: ""; position: absolute; inset: 0;
      background: radial-gradient(circle at 30% 20%, rgba(255,255,255,.08), transparent 55%);
      pointer-events: none;
    }
    .heat-tile:active { transform: scale(.97); }
    .heat-tile:hover {
      z-index: 2;
    }
    .heat-avatar {
      width: 28px; height: 28px; border-radius: 50%;
      background: rgba(0,0,0,.55);
      display: inline-flex; align-items: center; justify-content: center;
      font-size: 11px; font-weight: 800; letter-spacing: .3px;
      color: #fff;
      margin-bottom: 4px;
      border: 1px solid rgba(255,255,255,.25);
      box-shadow: inset 0 1px 0 rgba(255,255,255,.18), 0 2px 6px rgba(0,0,0,.35);
    }
    .heat-tile .heat-id  {
      font-size: var(--text-2xs); opacity: .8; font-weight: 600;
      letter-spacing: .3px;
    }
    .heat-tile .heat-sym {
      font-size: 11px; line-height: 1.15; text-align: center;
      max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
      margin-top: 1px;
    }
    .heat-tile .heat-chg {
      font-size: 11px; font-weight: 800; margin-top: 3px;
    }
    /* Tier-based sizing — set per render via data-tier */
    .heat-tile[data-tier="hero"]  { grid-column: span 4; grid-row: span 6; }
    .heat-tile[data-tier="hero"]  .heat-avatar { width: 56px; height: 56px; font-size: 22px; margin-bottom: 8px; }
    .heat-tile[data-tier="hero"]  .heat-sym { font-size: 18px; font-weight: 800; }
    .heat-tile[data-tier="hero"]  .heat-chg { font-size: 24px; }
    .heat-tile[data-tier="hero"]  .heat-id  { font-size: 11px; }

    .heat-tile[data-tier="major"] { grid-column: span 4; grid-row: span 4; }
    .heat-tile[data-tier="major"] .heat-avatar { width: 44px; height: 44px; font-size: 17px; margin-bottom: 6px; }
    .heat-tile[data-tier="major"] .heat-sym { font-size: 15px; }
    .heat-tile[data-tier="major"] .heat-chg { font-size: 19px; }

    .heat-tile[data-tier="lg"]    { grid-column: span 2; grid-row: span 3; }
    .heat-tile[data-tier="lg"]    .heat-avatar { width: 32px; height: 32px; font-size: 13px; margin-bottom: 5px; }
    .heat-tile[data-tier="lg"]    .heat-sym { font-size: 12px; }
    .heat-tile[data-tier="lg"]    .heat-chg { font-size: 13px; }

    .heat-tile[data-tier="md"]    { grid-column: span 2; grid-row: span 2; }
    .heat-tile[data-tier="sm"]    { grid-column: span 2; grid-row: span 2; }
    .heat-tile[data-tier="sm"]    .heat-avatar { display: none; }
    .heat-tile[data-tier="sm"]    .heat-sym { font-size: var(--text-2xs); }
    .heat-tile[data-tier="sm"]    .heat-chg { font-size: var(--text-2xs); margin-top: 1px; }
    .heat-tile[data-tier="sm"]    .heat-id  { font-size: var(--text-2xs); }

    .heat-empty {
      grid-column: 1 / -1; text-align: center;
      padding: 32px 12px; color: var(--muted); font-size: 12px;
    }
    @media (max-width: 480px) {
      .sn-heatmap { grid-template-columns: repeat(6, 1fr); grid-auto-rows: 34px; }
      .heat-tile[data-tier="hero"]  { grid-column: span 3; grid-row: span 5; }
      .heat-tile[data-tier="major"] { grid-column: span 3; grid-row: span 4; }
      .heat-tile[data-tier="lg"]    { grid-column: span 2; grid-row: span 3; }
      .heat-tile[data-tier="md"]    { grid-column: span 2; grid-row: span 2; }
      .heat-tile[data-tier="sm"]    { grid-column: span 2; grid-row: span 2; }
    }

    /* ── Reduced motion ─────────────────────────────
       Honest implementation: not only kills animations, but also dials down
       heavy GPU effects (blur, glow, particles) that can trigger vestibular
       discomfort even when static. */
    @media (prefers-reduced-motion: reduce) {
      :root {
        --aurora-strength: .25;
        --aurora-blur: 40px;
        --particle-strength: 0;
        --glow-strength: .35;
        --transition-fast: 0ms;
        --transition-base: 0ms;
        --transition-slow: 0ms;
      }
      .aurora-bg, .aurora-bg::before, .aurora-bg::after, .aurora-bg > .aurora-blob,
      .hr::before, .live-dot, .sparkline-dot, .skeleton, .skel,
      .heat-eyebrow::before, .pro-dash-section::before {
        animation: none !important;
      }
      .hr::before { opacity: .12 !important; }
      .ha { text-shadow: none !important; }
      .particle-bg { display: none !important; }
      /* shadow-glow tokens carry the multiplier */
      .glow-cyan, .glow-purple { box-shadow: none !important; }
    }
    /* User-toggled equivalent (data-motion="reduced") so users can opt-in
       even if their OS pref is set to "no-preference". */
    html[data-motion="reduced"] {
      --aurora-strength: .25;
      --aurora-blur: 40px;
      --particle-strength: 0;
      --glow-strength: .35;
    }
    html[data-motion="reduced"] .aurora-bg::before,
    html[data-motion="reduced"] .aurora-bg::after,
    html[data-motion="reduced"] .aurora-bg > .aurora-blob,
    html[data-motion="reduced"] .hr::before,
    html[data-motion="reduced"] .skeleton,
    html[data-motion="reduced"] .skel {
      animation: none !important;
    }
    html[data-motion="reduced"] .particle-bg { display: none !important; }

    /* ── Overheating mitigation: pause CSS animations while the mini app
       is backgrounded (tab hidden / user switched chats in Telegram). The
       `tdx-inactive` class is toggled from JS via the Page Visibility API. */
    html.tdx-inactive *,
    html.tdx-inactive *::before,
    html.tdx-inactive *::after {
      animation-play-state: paused !important;
    }

    /* Low-power devices: drop the heaviest always-on GPU effects (aurora
       blobs, hero conic-gradient spin, particle canvas). Detected from JS
       via navigator.deviceMemory / hardwareConcurrency. */
    html.tdx-low-power .aurora-bg::before,
    html.tdx-low-power .aurora-bg::after,
    html.tdx-low-power .aurora-bg > .aurora-blob,
    html.tdx-low-power .hr::before {
      animation: none !important;
    }
    html.tdx-low-power .aurora-bg::before,
    html.tdx-low-power .aurora-bg::after,
    html.tdx-low-power .aurora-bg > .aurora-blob {
      filter: blur(40px);
      opacity: .22;
    }
    html.tdx-low-power .particle-bg { display: none !important; }

    /* ── RTL Support ──────────────────────────────── */
    html[dir="rtl"] body { direction: rtl; text-align: right; }
    html[dir="rtl"] .subnet-left { flex-direction: row-reverse; }
    html[dir="rtl"] .subnet-right { text-align: left; }
    html[dir="rtl"] .stat-card { text-align: right; }
    html[dir="rtl"] .btn-row { flex-direction: row-reverse; }

    h1 {
      font-size: var(--text-xl);
      line-height: var(--leading-tight);
      letter-spacing: var(--tracking-tight);
      text-align: center;
      margin-bottom: 16px;
    }

    /* ── Language Picker Overlay ───────────────────── */
    .lang-overlay {
      position: fixed;
      inset: 0;
      z-index: 9999;
      background: var(--bg);
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: flex-start;
      padding: 40px 20px 20px;
      overflow-y: auto;
    }
    .lang-overlay.hidden { display: none; }
    .lang-overlay h2 {
      font-size: var(--text-2xl);
      line-height: var(--leading-tight);
      letter-spacing: var(--tracking-tight);
      margin-bottom: 24px;
      text-align: center;
    }
    .lang-grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 12px;
      width: 100%;
      max-width: 400px;
    }
    .lang-btn {
      background: var(--card);
      border: 1px solid var(--border-medium);
      padding: 16px 12px;
      text-align: center;
      cursor: pointer;
      color: var(--text);
      font-size: var(--text-md);
    }
    .lang-btn:hover { border-color: var(--cyan); background: var(--surface-medium); }
    .lang-flag { font-size: 28px; display: block; margin-bottom: 6px; }
    .lang-name { font-weight: 600; }
    .lang-overlay-close {
      position: absolute; top: 14px; right: 16px;
      background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.12);
      border-radius: 50%; width: 32px; height: 32px; font-size: 16px;
      color: var(--muted); cursor: pointer; display: flex; align-items: center;
      justify-content: center; line-height: 1;
    }
    .lang-overlay-close.hidden { display: none; }

    /* ── Main App (hidden until language chosen) ──── */
    #mainApp { display: none; }
    #mainApp.visible { display: block; }

    /* ── Balance Card ─────────────────────────────── */
    .balance-card {
      padding: 20px;
      margin-bottom: 16px;
      text-align: center;
    }
    .balance-card .label { font-size: var(--text-base); color: var(--muted); }
    .balance-card .tao {
      font-size: var(--text-3xl);
      font-weight: 800;
      letter-spacing: var(--tracking-tight);
      font-variant-numeric: tabular-nums;
      margin: 4px 0;
    }
    .balance-card .usd { font-size: var(--text-md); color: var(--muted); font-variant-numeric: tabular-nums; }
    .balance-card .change {
      display: inline-block;
      font-size: var(--text-base);
      font-variant-numeric: tabular-nums;
      margin-top: 6px;
      padding: 2px 10px;
      border-radius: 8px;
    }
    .change.positive { background: rgba(47,212,138,.15); color: var(--green); }
    .change.negative { background: rgba(242,88,94,.15); color: var(--red); }

    /* ── Hero Card (new dashboard) ───────────────── */
    .hr {
      padding:16px;margin-bottom:9px
    }
    .ha { margin-bottom:2px }
    .hu { font-size:12px;color:var(--muted) }
    .hc { display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:8px;background:rgba(47,212,138,.15);color:var(--green) }
    .hc.ng { background:rgba(242,88,94,.15);color:var(--red) }
    .hc.hc-na { background:rgba(255,255,255,.06);color:var(--muted) }

    /* ── 3-Stat Grid ─────────────────────────────── */
    .st { padding:10px;text-align:center }
    .sv { color:var(--text) }
    .sv.pos { color:var(--green) }
    .sv.neg { color:var(--red) }
    .ss { margin-top:2px;overflow-wrap:anywhere }

    /* ── Price Chart Card ────────────────────────── */
    .cw { padding:14px;margin-bottom:9px }
    .ch { display:flex;justify-content:space-between;align-items:center;margin-bottom:10px }
    .ctt { cursor:pointer }
    @keyframes chartDraw { to { stroke-dashoffset: 0; } }

    /* ── Flow / Generic Card ─────────────────────── */
    .cd { padding:14px }

    /* ── Subnet Row (new APY style) ──────────────── */
    .si { display:flex;align-items:center;gap:8px;padding:9px 0;border-bottom:1px solid rgba(255,255,255,.06) }
    .si:last-child { border-bottom:none }
    .rk { width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:var(--text-2xs);font-weight:800;flex-shrink:0 }
    .r1 { background:rgba(240,180,41,.15);color:var(--gold) }
    .r2 { background:rgba(192,192,192,.15);color:#c0c0c0 }
    .r3 { background:rgba(205,127,50,.15);color:#cd7f32 }
    .rn { background:rgba(255,255,255,.06);color:var(--muted) }
    .sif { flex:1;min-width:0;cursor:pointer }
    .snm { font-size:12px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis }
    .sid { font-size:var(--text-2xs);color:var(--muted) }
    .sir { text-align:right;flex-shrink:0;cursor:pointer }
    .sem { font-size:11px;font-weight:700;color:var(--cyan) }
    .sem.pos { color:var(--green) }
    .sem.mid { color:var(--gold) }
    .sem.neg { color:var(--red) }
    .sc2 { font-size:var(--text-2xs) }
    .sc2.pos { color:var(--green) }
    .sc2.neg { color:var(--red) }
    .sstar { font-size:14px;flex-shrink:0;background:none;border:none;padding:4px;cursor:pointer;line-height:1;color:var(--muted) }
    .sstar.on { color:var(--gold) }
    .sbadge { display:inline-block;font-size:var(--text-2xs);font-weight:800;padding:1px 4px;border-radius:4px;background:rgba(255,69,96,.2);color:var(--red);margin-left:4px;vertical-align:middle }
    /* sort controls */
    .sort-row { display:flex;gap:6px;margin-bottom:8px;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px }
    .sort-row::-webkit-scrollbar { display:none }
    .sort-btn { padding:4px 10px;cursor:pointer;font-family:inherit;white-space:nowrap;flex-shrink:0 }
    .sort-btn.on { border-color:rgba(46,211,224,.4);}
    /* pagination controls */
    .pg-ctrl { display:flex;align-items:center;justify-content:center;gap:12px;padding:10px 0 4px }
    .pg-btn { background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);border-radius:20px;padding:4px 14px;font-size:13px;font-weight:700;color:var(--text);cursor:pointer;font-family:inherit }
    .pg-btn:disabled { opacity:.3;cursor:default }
    .pg-info { font-size:11px;color:var(--muted);font-weight:600 }
    /* subnet detail modal */
    .snd-overlay { position:fixed;inset:0;background:rgba(0,0,0,.65);display:flex;align-items:center;justify-content:center;padding:16px }
    .snd-overlay.hidden { display:none }
    @keyframes sndPopIn { from { opacity:0;transform:scale(.94) } to { opacity:1;transform:scale(1) } }
    .snd-sheet { border-radius:18px;width:100%;max-width:480px;max-height:90vh;overflow-y:auto;overflow-x:hidden;animation:sndPopIn .22s cubic-bezier(.32,.72,0,1);}
    .snd-handle { display:none }
    .snd-title { font-size:22px;font-weight:800;margin-bottom:4px }
    .snd-sub { font-size:14px;color:var(--muted);margin-bottom:0;line-height:1.5;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden }
    .snd-close-x { background:rgba(255,255,255,.08);border:none;border-radius:10px;width:40px;height:40px;font-size:18px;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s }
    .snd-close-x:active { background:rgba(255,255,255,.15) }
    .snd-change-pill { display:inline-flex;align-items:center;gap:4px;font-size:15px;font-weight:700;padding:5px 12px;border-radius:20px;line-height:1 }
    .snd-change-pill.up { background:rgba(47,212,138,.12);color:var(--green) }
    .snd-change-pill.down { background:rgba(242,88,94,.12);color:var(--red) }
    .snd-change-pill.flat { background:rgba(255,255,255,.06);color:var(--muted) }
    .snd-mcap { font-size:13px;color:var(--muted);font-weight:600 }
    .snd-actions { display:flex;gap:12px;margin-top:18px }
    /* Subnet DNA banner (detail sheet) + accent for the Home ca-btn */
    .rc-card .rc-hero { margin:10px 0 6px }
    .rc-card .rc-amount { font-size:1.9rem;font-weight:800;letter-spacing:-.02em;
      font-variant-numeric:tabular-nums }
    .rc-card .rc-sub { color:var(--muted);font-size:12px;margin-top:2px }
    .rc-row { display:grid;grid-template-columns:1fr 60px;gap:8px;align-items:center;
      padding:6px 0;font-size:13px }
    .rc-row .rc-nm { overflow:hidden;text-overflow:ellipsis;white-space:nowrap }
    .rc-row .rc-val { text-align:right;font-weight:700;font-variant-numeric:tabular-nums }
    .rc-bar { grid-column:1 / -1;height:6px;background:rgba(255,255,255,.07);
      border-radius:3px;overflow:hidden }
    .rc-bar i { display:block;height:100%;background:var(--cyan);border-radius:3px }
    .rc-fee { margin-top:10px;font-size:13px;font-weight:700;
      font-variant-numeric:tabular-nums }
    .rc-fee.ok { color:var(--green) } .rc-fee.mid { color:#ffab00 }
    .rc-fee.bad { color:var(--red) }
    .rc-single { width:100%;margin-top:6px;background:none;border:0;
      color:var(--cyan);font-size:12px;font-weight:700;cursor:pointer;
      font-family:inherit;text-align:left;padding:4px 2px }
    .rc-note { margin-top:8px;font-size:11px;color:var(--muted);line-height:1.5 }
    /* Multi-Wallet: ein Chip je bekannter Adresse, MIT ihrem Anspruch.
       Der Betrag gehört auf den Chip, weil sonst niemand durchtippt, um
       herauszufinden, wo überhaupt etwas liegt — und was man nicht
       findet, claimt man nie. Die aktive Wallet ist über Rahmen UND
       Textfarbe markiert, nicht allein über die Farbe. */
    .rc-wallets { display:flex;gap:6px;overflow-x:auto;margin:8px 0 2px;
      padding-bottom:2px;-webkit-overflow-scrolling:touch }
    .rc-wchip { flex:0 0 auto;background:rgba(255,255,255,.05);
      border:1px solid rgba(255,255,255,.10);border-radius:12px;
      padding:6px 10px;font-family:inherit;font-size:11px;color:var(--muted);
      cursor:pointer;line-height:1.35;text-align:left;white-space:nowrap }
    .rc-wchip .a { display:block;font-weight:700;color:var(--text) }
    .rc-wchip .v { display:block;font-variant-numeric:tabular-nums }
    .rc-wchip.active { border-color:var(--cyan);background:rgba(46,211,224,.12) }
    .rc-wchip.active .a { color:var(--cyan) }
    .rc-wchip.has .v { color:var(--green);font-weight:700 }
    /* Signier-Wahl: bewusst Radio-Optik statt Knopfreihe. Eine Reihe
       gleichwertiger Knöpfe lädt zum Danebentippen ein; hier ist die
       Auswahl sichtbar getroffen, bevor der Weiter-Knopf überhaupt
       klickbar wird. */
    .rc-sign-list { margin:12px 0 4px }
    .rc-sign-opt { display:flex;align-items:center;gap:10px;width:100%;
      background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.10);
      border-radius:14px;padding:12px;margin-bottom:8px;cursor:pointer;
      font-family:inherit;font-size:13px;color:var(--text);text-align:left }
    .rc-sign-opt.sel { border-color:var(--cyan);background:rgba(46,211,224,.10) }
    .rc-sign-opt .rad { flex:0 0 auto;width:16px;height:16px;border-radius:50%;
      border:2px solid rgba(255,255,255,.35) }
    .rc-sign-opt.sel .rad { border-color:var(--cyan);background:var(--cyan) }
    .rc-sign-opt .meta { flex:1;min-width:0 }
    .rc-sign-opt .adr { display:block;font-weight:700;overflow:hidden;
      text-overflow:ellipsis;white-space:nowrap }
    .rc-sign-opt .sub { display:block;font-size:11px;color:var(--muted);
      font-variant-numeric:tabular-nums }
    .rc-sign-go[disabled] { opacity:.45;cursor:default }

    /* Root-Check — Rang nach tatsächlich ausgezahltem Ertrag.
       Die Balkenfarbe ist eine SEQUENZIELLE Rampe in einem Ton (Cyan),
       hell = viel: die Zahl ist eine Größe, keine Identität, und
       wechselnde Farbtöne würden Rangplätze wie Kategorien aussehen
       lassen. Alle vier Stufen liegen ≥ 3:1 über der Kartenfläche und
       sind monoton in der Helligkeit — mit dem Validator des
       dataviz-Skills geprüft, nicht geschätzt. Die eigene Zeile trägt
       Gold PLUS ein Textlabel, damit sie nicht allein über Farbe
       erkennbar ist. */
    .ry-idx1 { background:#7cf5ff } .ry-idx2 { background:#35d9ef }
    .ry-idx3 { background:#00b4cc } .ry-idx4 { background:#0091a6 }
    .ry-mine { background:var(--gold) }
    .ry-verdict { margin:10px 0 12px }
    .ry-lede { font-size:13px;line-height:1.5 }
    /* margin:0 — die Falte ist ein Flex-Container mit gap:12px, eigene
       Margins addieren sich darauf und rissen den Rhythmus auf 24px auf.
       Radius und Schatten wie jede andere Karte der Falte: im hellen
       Theme trennt der Schatten die Fläche vom Grund (1,08:1 allein
       reicht nicht). */
    .wn-card { margin:0;padding:10px 12px;}
    .wn-head { display:flex;align-items:center;justify-content:space-between;margin-bottom:8px }
    /* 44px Trefferfläche, aber ohne die Kopfzeile aufzublasen: die
       negativen Ränder holen die optische Höhe zurück. */
    .wn-x { background:none;border:0;color:var(--muted);font-size:15px;cursor:pointer;font-family:inherit;
            width:44px;height:44px;margin:-12px -10px -12px 0;display:flex;align-items:center;justify-content:center }
    .wn-row { display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;background:none;border:0;border-top:1px solid var(--border-subtle);padding:8px 2px;min-height:44px;font-size:var(--text-sm);color:var(--text);cursor:pointer;font-family:inherit;text-align:left }
    .wn-row:first-of-type { border-top:0 }
    .wn-arrow { color:var(--cyan);font-weight:800 }
    /* Die Vertrauenszeile ist eine Karte wie die anderen. */
    #homeTrust { border-radius:var(--radius);box-shadow:var(--shadow-sm) }
    /* Ein „·" am Zeilenende trennt nichts — auf Deutsch bricht die Zeile
       um und ließ den zweiten Punkt verwaist stehen. */
    .hf-trust { column-gap:6px }
    .hf-trust-dot:last-of-type { display:none }
    .rg-block { margin-top:10px;padding:9px 10px;border:1px dashed var(--border-medium);}
    .rg-head { font-weight:700;margin-bottom:5px }
    .rg-line { color:var(--muted);margin-bottom:6px;font-variant-numeric:tabular-nums }
    .rg-lbl { display:flex;align-items:center;gap:6px;color:var(--muted);margin:4px 0 }
    .rg-num { width:52px;background:none;border:1px solid var(--border-subtle);border-radius:6px;color:var(--text);padding:2px 6px;font-size:11.5px;font-family:inherit }
    .rg-btn { margin-top:6px;padding:6px 10px;font-size:11.5px;cursor:pointer;font-family:inherit }
    .rg-note { color:var(--muted);margin-top:6px;}
    .pf-xray { margin:10px 0 4px;padding:10px 12px;}
    .pf-xray-head { display:flex;align-items:center;justify-content:space-between;gap:8px }
    .pf-xray-pct { font-size:15px;font-weight:800;font-variant-numeric:tabular-nums }
    .pf-xray-pct.warn { color:var(--red) }
    .pf-xray-sub { color:var(--muted);margin:2px 0 6px }
    .pf-xray-row { display:flex;justify-content:space-between;gap:8px;width:100%;background:none;border:0;border-top:1px solid var(--border-subtle);padding:7px 2px;font-size:12px;color:var(--text);cursor:pointer;font-family:inherit;text-align:left }
    .pf-xray-val { color:var(--muted);font-variant-numeric:tabular-nums }
    .pf-xray-note { color:var(--muted);margin-top:6px;}
    .pf-attr-seg button { background:none;border:1px solid var(--border-subtle);border-radius:8px;color:var(--muted);padding:3px 8px;font-size:11px;font-weight:700;cursor:pointer;font-family:inherit }
    .pf-attr-seg button.active { color:var(--text);border-color:var(--border-medium) }
    /* Exit-Plan: die Tranchen-Zeile unter einer Position des Realisierbaren
       Werts. Ein Knopf, keine zweite Karte — der Weg von der Zahl zur
       Handlung ist ein Tipp. */
    .pf-exit-tr { display:flex;justify-content:space-between;align-items:center;gap:8px;padding:0 2px 8px;font-size:11px;color:var(--muted);line-height:1.35 }
    .pf-exit-tr-btn { flex:0 0 auto;background:none;border:1px solid var(--border-subtle);border-radius:999px;padding:4px 10px;color:var(--cyan);font-size:11px;font-weight:700;font-family:inherit;cursor:pointer;min-height:28px }
    /* Katalysator-Feed: Zeilen mit Haarlinie, keine Karte in der Karte. */
    .ktl-row { display:flex;align-items:flex-start;gap:10px;padding:9px 0;border-top:1px solid var(--border-subtle) }
    .ktl-row:first-child { border-top:0 }
    .ktl-row[role="button"] { cursor:pointer }
    .ktl-body { flex:1;min-width:0 }
    .ktl-title { font-size:12.5px;font-weight:700;color:var(--text);line-height:1.3;overflow-wrap:anywhere }
    .ktl-name { color:var(--cyan) }
    .ktl-mech { font-size:11px;color:var(--muted);margin-top:2px;line-height:1.35 }
    .ktl-when { flex-shrink:0;font-size:var(--text-2xs);color:var(--muted);font-variant-numeric:tabular-nums;padding-top:2px;white-space:nowrap }
    .ktl-foot, .ktl-empty { font-size:var(--text-2xs);color:var(--muted);margin-top:6px;line-height:1.45 }
    .ktl-empty { text-align:center;padding:10px 4px }
    .snd-conv .ktl-row { padding:8px 0 }
    /* Wer kauft: das Urteil steht ÜBER den Rohzahlen, nicht darunter.
       Vier Zahlen nebeneinander beantworten "Wal oder nicht" nicht — der
       Leser muss sie sonst selbst verrechnen, und die meisten tun es
       nicht. Umriss statt Fuellung wie jede Marke im Haus: eine
       Auskunft, kein Alarm. */
    .fl-verdict { display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px }
    .fl-chip { flex:0 0 auto;border:1px solid var(--border-medium);border-radius:999px;padding:4px 10px;font-size:12px;font-weight:800;color:var(--text);white-space:nowrap }
    .fl-whale .fl-chip { border-color:var(--amber);color:var(--amber) }
    .fl-broad .fl-chip { border-color:var(--green);color:var(--green) }
    .fl-sub { flex:1;min-width:120px;font-size:11px;color:var(--muted);line-height:1.35 }
    .pf-attr-row { display:flex;justify-content:space-between;gap:8px;padding:6px 2px;border-top:1px solid var(--border-subtle);font-size:12px }
    .pf-attr-row:first-child { border-top:0 }
    .pf-attr-row.strong { font-weight:800 }
    .ry-fund { margin:0 0 12px;padding:10px 12px;border:1px solid var(--border-subtle);}
    .ry-fund-row + .ry-fund-row { margin-top:10px;padding-top:10px;border-top:1px solid var(--border-subtle) }
    .ry-fund-name { font-size:12px;font-weight:700;margin-bottom:4px }
    .ry-fund-line { font-size:12px;line-height:1.5;color:var(--muted);font-variant-numeric:tabular-nums }
    .ry-multiple { font-size:1.9rem;font-weight:800;letter-spacing:-.02em;
      color:var(--gold);font-variant-numeric:tabular-nums;margin-top:4px }
    .ry-row { display:grid;grid-template-columns:18px 1fr 44px;gap:8px;
      align-items:center;font-size:12px;padding:5px 0 }
    .ry-row .ry-rank { color:var(--muted);font-variant-numeric:tabular-nums;
      text-align:right;font-size:11px }
    .ry-row .ry-nm { overflow:hidden;text-overflow:ellipsis;white-space:nowrap }
    .ry-row .ry-val { text-align:right;font-weight:700;
      font-variant-numeric:tabular-nums }
    .ry-row.mine .ry-nm { color:var(--gold);font-weight:800 }
    .ry-tag { font-size:var(--text-2xs);font-weight:800;letter-spacing:.06em;
      padding:1px 5px;border-radius:5px;margin-left:6px;vertical-align:middle }
    .ry-tag.you { background:var(--gold-glow);color:var(--gold) }
    .ry-tag.prov { background:var(--surface-medium);color:var(--muted) }
    .ry-tag.fade { background:var(--red-glow);color:var(--red) }
    .ry-tag.gated { background:transparent;color:var(--amber);
      box-shadow:inset 0 0 0 1px var(--amber) }
    /* 2px Abstand zur Fläche unter dem Balken — sonst verschmelzen
       benachbarte Zeilen zu einem Block. */
    .ry-bar { grid-column:1 / -1;height:6px;background:rgba(255,255,255,.07);
      border-radius:3px;overflow:hidden;margin:1px 0 3px }
    .ry-bar i { display:block;height:100%;border-radius:3px }
    .ry-more { width:100%;margin-top:8px;background:none;border:0;
      color:var(--cyan);font-size:12px;font-weight:700;cursor:pointer;
      font-family:inherit;text-align:left;padding:4px 2px }
    .ry-note { margin-top:10px;font-size:11px;color:var(--muted);line-height:1.5 }
    /* Handlungsblock. Abgesetzt von der Rangliste, weil er kein weiterer
       Messwert ist, sondern das, was aus ihr folgt — dieselbe Cyan-Fläche
       wie der Claim-Knopf, damit "hier passiert etwas mit Geld" im
       Portfolio immer gleich aussieht. */
    .ry-act { margin-top:14px;padding:12px;
      background:rgba(0,212,255,.06);border:1px solid rgba(0,212,255,.18) }
    .ry-act-lede { font-size:12px;color:var(--muted);line-height:1.5 }
    .ry-act-free { color:var(--green);font-weight:800;
      font-variant-numeric:tabular-nums }
    .ry-act .snd-dna-btn { margin:10px 0 0 }
    .ry-act .ry-more { text-align:center;margin-top:2px }
    /* Wechsel ohne lohnenden Abstand: erreichbar, aber nicht beworben.
       Ausblenden waere falsch — es ist eine Funktion, keine Empfehlung. */
    .ry-act .snd-dna-btn.ry-move-quiet { background:none;
      border:1px solid rgba(255,255,255,.12);box-shadow:none }
    /* Lange Validatornamen ("OpenTensor Foundation") duerfen die Zeile
       nicht sprengen: der Name kuerzt, Index und Take bleiben ganz —
       die beiden Zahlen sind der Grund, warum der Knopf diesen Namen
       traegt. */
    .ry-act-lbl { flex:1 1 auto;min-width:0;overflow:hidden;
      text-overflow:ellipsis;white-space:nowrap }
    .ry-act .snd-dna-sub { flex:0 0 auto;text-align:right;white-space:nowrap }
    /* Root-Verkaufsdruck. Eine Zahl gross, der Rest klein: die
       Einloesequote ist die Aussage, alles andere ist Beleg. Bewusst
       KEINE Ampelfarbe — 46 % eingeloest ist weder gut noch schlecht,
       und ein rotes Feld wuerde eine Wertung behaupten, die aus der
       Zahl allein nicht folgt. */
    .rs-verdict { margin:10px 0 10px }
    .rs-pct { font-size:1.9rem;font-weight:800;letter-spacing:-.02em;
      font-variant-numeric:tabular-nums }
    .rs-lede { font-size:13px;line-height:1.5;margin-top:4px }
    .rs-facts { display:grid;grid-template-columns:1fr 1fr;gap:8px }
    .rs-fact { background:var(--surface-medium);border-radius:10px;
      padding:8px 10px }
    .rs-fact .rs-k { font-size:var(--text-2xs);color:var(--muted);letter-spacing:.04em;
      text-transform:uppercase }
    .rs-fact .rs-v { font-size:14px;font-weight:800;margin-top:2px;
      font-variant-numeric:tabular-nums }
    .help-intro-t { font-size:15px;font-weight:800;margin-bottom:4px }
    .help-intro-s { font-size:12.5px;color:var(--muted);line-height:1.55 }
    .help-intro-row { display:flex;gap:8px;align-items:center;margin-top:12px }
    .help-intro-go { flex:1 1 auto;display:flex;align-items:center;gap:8px;
      justify-content:center;background:var(--cyan-dim);border:1px solid var(--cyan);
      color:var(--cyan);border-radius:12px;padding:10px 14px;font-size:13px;
      font-weight:800;font-family:inherit;cursor:pointer }
    /* "Kenn ich" bleibt bewusst leise. Wer wegtippt, soll das koennen,
       ohne dass der Weg dorthin genauso laut ist wie der Weg hinein. */
    .help-intro-x { flex:0 0 auto;background:none;border:0;color:var(--muted);
      font-size:12px;font-family:inherit;cursor:pointer;padding:10px 4px }
    .help-card-sub { font-size:12px;color:var(--muted);line-height:1.55;margin-top:4px }
    .ry-help { margin:4px 0 2px;padding:10px 12px;background:var(--surface-dim);
      border:1px solid var(--border-subtle);border-radius:10px }
    .ry-help p { margin:0 0 8px;font-size:11.5px;line-height:1.55;color:var(--text) }
    .ry-help p:last-child { margin-bottom:0 }
    .ry-help b { color:var(--cyan) }
    .ry-help .ry-help-not { color:var(--muted) }
    .ry-chg { margin-top:10px;font-size:11px;line-height:1.5;color:var(--red) }
    .snd-dna-btn { display:flex;align-items:center;gap:10px;width:100%;margin:14px 0 4px;padding:13px 14px;font-size:14px;cursor:pointer;font-family:inherit;transition:transform .15s;text-align:left }
    .snd-dna-btn:active { transform:scale(.98) }
    .snd-dna-btn .snd-dna-sub { flex:1;font-size:var(--text-2xs);color:var(--muted);font-weight:600 }
    .snd-dna-btn .snd-dna-arrow { color:var(--cyan);font-size:18px;font-weight:800 }
    .ca-btn-dna { border-color:rgba(0,212,255,.45) }

    /* ── Nova Wallet Connect & Stake UI ─────────────── */
    .wc-connect-row { display:flex;gap:8px;margin-top:8px;margin-bottom:8px }
    .wc-connect-btn { flex:1;padding:11px 14px;cursor:pointer;font-family:inherit;transition:all .15s;display:flex;align-items:center;justify-content:center;gap:6px }
    .wc-connect-btn:active { transform:scale(.97) }
    .wc-connect-btn:disabled { opacity:.5;cursor:not-allowed }
    .wc-connect-btn.wc-disabled { opacity:.55;cursor:help;background:linear-gradient(135deg,#64748b,#475569) }
    .wc-connected-badge { display:inline-flex;align-items:center;gap:4px;padding:6px 10px;font-size:11px;color:var(--green);font-weight:600 }
    .wc-connected-badge.wc-session-dead { background:rgba(255,171,0,.12);border-color:rgba(255,171,0,.35);color:#ffab00 }
    .wc-disconnect-btn { background:none;border:none;color:var(--red);font-size:var(--text-2xs);cursor:pointer;margin-left:4px;opacity:.7 }
    .wc-disconnect-btn:hover { opacity:1 }
    .wc-reconnect-btn { display:flex;align-items:center;justify-content:center;gap:4px;margin-top:6px;background:linear-gradient(135deg,#f59e0b,#d97706);border:none;border-radius:8px;padding:8px 14px;font-size:12px;font-weight:700;color:#fff;cursor:pointer;font-family:inherit;width:100%;transition:all .15s }
    .wc-reconnect-btn:active { transform:scale(.97) }
    .wc-pair-copy-btn { display:flex;align-items:center;justify-content:center;gap:4px;margin-top:6px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);border-radius:10px;padding:9px 14px;font-size:12px;color:rgba(255,255,255,.7);cursor:pointer;font-family:inherit;width:100% }
    .wc-pair-copy-btn:active { background:rgba(255,255,255,.15) }

    /* Stake Modal Overlay */
    .stake-overlay { position:fixed;inset:0;background:rgba(0,0,0,.65);z-index:1100;display:flex;align-items:flex-end;justify-content:center;opacity:0;pointer-events:none;transition:opacity .25s }
    .stake-overlay.visible { opacity:1;pointer-events:auto }
    .stake-sheet { width:100%;max-width:500px;max-height:85vh;border-radius:20px 20px 0 0;padding:24px 20px calc(32px + env(safe-area-inset-bottom, 16px));overflow-y:auto;transform:translateY(100%);transition:transform .3s cubic-bezier(.22,1,.36,1);backdrop-filter:blur(20px) saturate(1.5);-webkit-backdrop-filter:blur(20px) saturate(1.5);}
    .stake-overlay.visible .stake-sheet { transform:translateY(0) }
    .stake-handle { width:40px;height:4px;border-radius:2px;background:rgba(255,255,255,.15);margin:0 auto 16px }
    .stake-title { color:var(--text);margin-bottom:4px }
    .stake-subtitle { font-size:12px;color:var(--muted);margin-bottom:6px }
    .stake-move-lede { font-size:12px;color:var(--muted);line-height:1.5;margin:2px 0 12px }
    .wc-modal-status { font-size:11px;font-weight:600;padding:5px 10px;border-radius:8px;margin-bottom:12px;display:inline-flex;align-items:center;gap:4px }
    .wc-modal-status.wc-live { color:var(--green);background:rgba(47,212,138,.10);border:1px solid rgba(47,212,138,.25) }
    .wc-modal-status.wc-dead { color:#ffab00;background:rgba(255,171,0,.10);border:1px solid rgba(255,171,0,.25);cursor:pointer }
    .wc-modal-status.wc-none { color:var(--muted);background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.08);cursor:pointer }
    .stake-input-group { margin-bottom:16px }
    .stake-input-label { font-size:11px;color:var(--muted);margin-bottom:6px;font-weight:600 }
    .stake-input-row { display:flex;gap:8px;align-items:center }
    .stake-amount-input { flex:1;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:12px 14px;color:var(--text);font-size:16px;font-family:inherit;outline:none }
    .stake-amount-input:focus { border-color:rgba(46,211,224,.5) }
    .stake-max-btn { padding:8px 12px;font-size:12px;cursor:pointer;font-family:inherit }
    .stake-fee-breakdown { background:rgba(255,255,255,.04);border-radius:10px;padding:12px;margin-bottom:16px }
    .stake-fee-row { display:flex;justify-content:space-between;font-size:13px;padding:4px 0 }
    .stake-fee-row .lbl { color:var(--muted) }
    .stake-fee-row .val { font-weight:600;color:var(--text) }
    .stake-fee-row.total { border-top:1px solid rgba(255,255,255,.08);margin-top:4px;padding-top:8px;font-weight:700 }
    .stake-confirm-btn { width:100%;padding:14px;cursor:pointer;font-family:inherit;transition:all .15s }
    .stake-confirm-btn:active { transform:scale(.97) }
    .stake-confirm-btn:disabled { opacity:.5;cursor:not-allowed }
    .stake-sec-link { display:block;width:100%;margin-top:10px;padding:8px;background:transparent;border:none;color:var(--muted);font-size:12px;font-weight:500;cursor:pointer;text-align:center;font-family:inherit;text-decoration:underline;text-underline-offset:3px;opacity:.75;transition:opacity .15s }
    .stake-sec-link:hover,.stake-sec-link:active { opacity:1;color:var(--cyan) }
    .sec-sheet { border-radius:20px 20px 0 0;padding:24px 20px 32px;max-height:85vh;overflow-y:auto;color:var(--text);font-size:14px;line-height:1.55 }
    .sec-sheet h3 { margin:0 0 12px;font-size:17px;font-weight:700;color:var(--text) }
    .sec-sheet p { margin:0 0 10px;color:var(--muted) }
    .sec-sheet strong { color:var(--text);font-weight:700 }
    .sec-sheet .sec-bullets { margin:6px 0 14px;padding-left:18px;color:var(--muted) }
    .sec-sheet .sec-bullets li { margin-bottom:6px }
    .sec-sheet .sec-actions { display:flex;flex-direction:column;gap:8px;margin-top:16px }
    .sec-sheet .sec-btn { width:100%;padding:12px;border-radius:10px;font-size:13px;cursor:pointer;font-family:inherit;text-align:center;text-decoration:none;display:block;transition:all .15s }
    .sec-sheet .sec-btn:active { transform:scale(.98);background:rgba(46,211,224,.18) }
    .sec-sheet .sec-close { width:100%;margin-top:8px;padding:12px;background:transparent;border:none;color:var(--muted);font-size:14px;cursor:pointer;font-family:inherit }
    .stake-status { text-align:center;padding:16px 20px;font-size:15px;line-height:1.5;word-break:break-word;border-radius:10px;margin-top:12px }
    .stake-status.pending { color:var(--muted) }
    .stake-status.success { color:var(--green) }
    .stake-status.error { color:var(--red);background:var(--red-glow);font-size:14px }
    .stake-hotkey-input { width:100%;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:10px 12px;color:var(--text);font-size:12px;font-family:inherit;outline:none;margin-bottom:8px }
    .stake-hotkey-input:focus { border-color:rgba(46,211,224,.5) }
    /* Validator selector */
    .stake-val-select { width:100%;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:10px 12px;color:var(--text);font-size:12px;font-family:inherit;outline:none;margin-bottom:6px;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%2399a' fill='none' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:30px;cursor:pointer }
    .stake-val-select:focus { border-color:rgba(46,211,224,.5) }
    .stake-val-select option { background:var(--card-elevated);color:var(--text) }
    .stake-val-toggle { font-size:11px;color:var(--cyan);cursor:pointer;margin-bottom:8px;display:inline-block;opacity:.8 }
    .stake-val-toggle:hover { opacity:1;text-decoration:underline }
    .stake-val-loading { font-size:11px;color:var(--muted);margin-bottom:6px }
    /* Rich validator picker (replaces native <select> for staking) */
    .stake-val-search { width:100%;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:9px 12px 9px 32px;color:var(--text);font-size:13px;font-family:inherit;outline:none;margin-bottom:8px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2399a' stroke-width='2'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:10px center;background-size:14px 14px }
    .stake-val-search:focus { border-color:rgba(46,211,224,.5) }
    .stake-val-picker { display:flex;flex-direction:column;gap:6px;max-height:300px;overflow-y:auto;margin-bottom:8px;padding:1px;-webkit-overflow-scrolling:touch }
    .stake-val-card { display:flex;align-items:center;gap:10px;padding:10px 12px;cursor:pointer;transition:background .15s,border-color .15s,transform .1s }
    .stake-val-card:hover { border-color:rgba(46,211,224,.3);background:rgba(255,255,255,.06) }
    .stake-val-card:active { transform:scale(.99) }
    .stake-val-card.selected { border-color:rgba(46,211,224,.6);}
    .stake-val-cbody { flex:1;min-width:0 }
    .stake-val-cname { font-size:13px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:5px }
    .stake-val-cstar { color:var(--cyan);font-size:11px;flex-shrink:0;opacity:.85 }
    .stake-val-cmeta { font-size:var(--text-2xs);color:var(--muted);font-family:'DM Mono',monospace;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis }
    .stake-val-capy { display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0;min-width:62px }
    .stake-val-capy7 { font-size:14px;font-weight:800;color:#20d27a;font-family:'DM Mono',monospace;line-height:1.05 }
    .stake-val-capy1 { font-size:var(--text-2xs);color:var(--muted);font-family:'DM Mono',monospace;margin-top:3px;line-height:1 }
    .stake-val-capy-na { font-size:11px;color:var(--muted);font-family:'DM Mono',monospace }
    .stake-val-empty { font-size:12px;color:var(--muted);padding:14px;text-align:center }
    /* Unstake – staked balance display */
    .unstake-balance-row { display:flex;justify-content:space-between;align-items:center;padding:10px 14px;background:rgba(255,255,255,.04);border-radius:10px;border:1px solid rgba(255,255,255,.06);margin-bottom:4px }
    .unstake-balance-label { font-size:13px;color:var(--muted) }
    .unstake-balance-value { font-size:15px;font-weight:600;color:var(--green,var(--green)) }
    .unstake-balance-loading { font-size:12px;color:var(--muted);opacity:.7 }

    /* ── TaoDX DEX (Trade view) ──────────────────────── */
    #viewTrade { padding-bottom:80px }
    .dex-hero { position:relative; overflow:hidden; margin-bottom:14px;
      }
    .dex-hero-grid { position:absolute; inset:0; background-image:
      linear-gradient(rgba(46,211,224,.06) 1px, transparent 1px),
      linear-gradient(90deg, rgba(46,211,224,.06) 1px, transparent 1px);
      background-size: 28px 28px; mask-image: radial-gradient(120% 100% at 50% 0%, black 30%, transparent 75%); pointer-events:none; opacity:.55 }
    .dex-hero-content { position:relative; z-index:1 }
    .dex-hero-eyebrow { 
      margin-bottom:10px }
    .dex-hero-title { font-weight:900; letter-spacing:-.5px; 
      -webkit-background-clip:text; background-clip:text; }
    .dex-hero-sub { font-size:12.5px; margin-top:4px }

    .dex-card { 
      padding:14px; margin-bottom:14px;
      }

    /* ── AI Trading view ───────────────────────────── */
    .ai-banner { border-radius:12px; padding:9px 12px; margin-bottom:12px; font-size:12px; font-weight:700;
      background:linear-gradient(135deg, rgba(168,85,247,.16), rgba(46,211,224,.12));
      border:1px solid rgba(168,85,247,.3); color:#e6d8ff }
    .ai-card-title { font-size:15px; font-weight:800; color:var(--text); margin-bottom:8px }
    .ai-muted { font-size:12px; color:var(--muted); line-height:1.5 }
    .ai-row-between { display:flex; align-items:center; justify-content:space-between; gap:10px }
    .ai-kv { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:6px 0; font-size:12.5px }
    .ai-kv-label { color:var(--muted) }
    .ai-kv-val { color:var(--text); font-weight:700; word-break:break-all; text-align:right }
    .ai-stat-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:8px }
    .ai-stat { background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.06); border-radius:11px; padding:10px; text-align:center }
    .ai-stat-val { font-size:18px; font-weight:900; color:var(--cyan); }
    .ai-stat-lbl { font-size:var(--text-2xs); color:var(--muted); margin-top:2px }
    .ai-field { display:flex; flex-direction:column; gap:5px; margin-bottom:11px }
    .ai-field label { font-size:11.5px; color:var(--muted); font-weight:600 }
    .ai-input { background:rgba(0,0,0,.25); border:1px solid rgba(255,255,255,.1); 
      padding:10px 12px; color:var(--text); font-size:14px; font-variant-numeric:tabular-nums; width:100% }
    .ai-input:focus { outline:none; border-color:var(--cyan) }
    .ai-pos-list { display:flex; flex-direction:column; gap:8px }
    .ai-pos { background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.06); border-radius:11px; padding:10px 12px }
    .ai-pos-head { display:flex; align-items:center; justify-content:space-between; font-size:13px; font-weight:800; color:var(--text) }
    .ai-pos-sub { font-size:11px; color:var(--muted); margin-top:3px; font-variant-numeric:tabular-nums }
    /* Live open-position detail */
    .ai-live-dot { display:inline-block; width:7px; height:7px; border-radius:50%; background:#2ecc71; margin-left:5px; box-shadow:0 0 0 0 rgba(46,204,113,.6); animation:aiPulse 1.8s infinite }
    @keyframes aiPulse { 0%{box-shadow:0 0 0 0 rgba(46,204,113,.5)} 70%{box-shadow:0 0 0 6px rgba(46,204,113,0)} 100%{box-shadow:0 0 0 0 rgba(46,204,113,0)} }
    .ai-prog { position:relative; height:6px; border-radius:4px; background:rgba(255,255,255,.08); margin-top:8px; overflow:hidden }
    .ai-prog-bar { position:absolute; left:0; top:0; bottom:0; border-radius:4px; background:linear-gradient(90deg,var(--cyan),#2ecc71); transition:width .4s ease }
    .ai-pos-meta { display:flex; justify-content:space-between; font-size:var(--text-2xs); color:var(--muted); margin-top:5px; font-variant-numeric:tabular-nums }
    .ai-pos-meta .sl { color:#ff6b6b } .ai-pos-meta .tp { color:#2ecc71 }
    /* Share card modal */
    .ai-share-overlay { position:fixed; inset:0; z-index:6000; background:rgba(0,0,0,.7); display:flex; align-items:center; justify-content:center; padding:18px; backdrop-filter:blur(4px) }
    .ai-share-modal { width:100%; max-width:360px; background:#12131c; border:1px solid rgba(255,255,255,.1); border-radius:18px; padding:16px; max-height:92vh; overflow-y:auto }
    .ai-share-head { display:flex; justify-content:space-between; align-items:center; font-size:15px; font-weight:800; color:var(--text); margin-bottom:12px }
    .ai-share-x { background:none; border:0; color:var(--muted); font-size:18px; cursor:pointer; font-family:inherit }
    .ai-share-periods { display:flex; gap:6px; margin-bottom:12px }
    .ai-share-per { flex:1; background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.1); color:var(--muted); font-weight:800; font-size:12px; padding:7px; border-radius:9px; cursor:pointer; font-family:inherit }
    .ai-share-per.active { background:linear-gradient(135deg,var(--cyan),#a855f7); color:var(--bg); border-color:transparent }
    .ai-share-note { font-size:11px; color:var(--muted); text-align:center; margin-top:10px }
    .ai-share-actions { display:flex; gap:8px; margin-top:12px }
    .ai-share-actions button { flex:1; border:0; border-radius:11px; padding:12px; font-weight:800; font-size:13px; cursor:pointer; font-family:inherit }
    .ai-share-copy { background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.15) !important; color:var(--text) }
    .ai-pnl-pos { color:#2ecc71 } .ai-pnl-neg { color:#ff6b6b }
    .ai-status { margin-top:10px; font-size:12px; padding:8px 10px; border-radius:9px }
    .ai-status.ok { background:rgba(46,204,113,.12); border:1px solid rgba(46,204,113,.3); color:#9be7c4 }
    .ai-status.err { background:rgba(255,90,90,.12); border:1px solid rgba(255,90,90,.3); color:#ffb3b3 }
    .ai-status.info { background:rgba(46,211,224,.1); border:1px solid rgba(46,211,224,.25); color:#aef0ff }
    .ai-danger-btn { width:100%; margin-top:10px; background:linear-gradient(135deg,#ef4444,#b91c1c); border:none;
      border-radius:11px; color:#fff; font-weight:800; padding:11px; font-size:14px; cursor:pointer }
    .ai-danger-btn:active { transform:scale(.97) }
    .ai-switch { position:relative; display:inline-block; width:46px; height:26px; flex-shrink:0 }
    .ai-switch input { opacity:0; width:0; height:0 }
    .ai-slider { position:absolute; cursor:pointer; inset:0; background:rgba(255,255,255,.15); border-radius:26px; transition:.25s }
    .ai-slider:before { position:absolute; content:""; height:20px; width:20px; left:3px; bottom:3px; background:#fff; border-radius:50%; transition:.25s }
    .ai-switch input:checked + .ai-slider { background:linear-gradient(135deg,var(--cyan),#a855f7) }
    .ai-switch input:checked + .ai-slider:before { transform:translateX(20px) }
    .ai-scope-toggle { display:flex; gap:4px; background:rgba(0,0,0,.25); border-radius:9px; padding:3px }
    .ai-scope-btn { border:none; background:transparent; color:var(--muted); font-size:11px; font-weight:700; padding:5px 10px; border-radius:7px; cursor:pointer }
    .ai-scope-btn.active { background:linear-gradient(135deg,var(--cyan),#a855f7); color:#fff }
    .ai-scope-badge { font-size:var(--text-2xs); font-weight:700; color:var(--muted); background:rgba(46,211,224,.1); border:1px solid rgba(46,211,224,.25); border-radius:999px; padding:1px 8px; vertical-align:middle }
    .ai-scope-badge:empty { display:none }

    /* Wallet row */
    .dex-wallet-row { 
      padding:11px 13px; margin-bottom:14px;
      }
    .dex-wallet-disconnected, .dex-wallet-connected { display:flex; align-items:center; justify-content:space-between; gap:10px }
    .dex-wallet-info { display:flex; align-items:center; gap:11px; min-width:0 }
    .dex-wallet-icon { width:34px; height:34px; border-radius:10px; 
      font-size:16px; flex-shrink:0 }
    .dex-wallet-title { font-size:13px; font-weight:800; color:var(--text); letter-spacing:.2px }
    .dex-wallet-sub { font-size:11px; color:var(--muted); margin-top:1px }
    .dex-wallet-connect-btn { 
      padding:10px 14px; cursor:pointer; font-family:inherit;
      transition:transform .12s, box-shadow .2s; flex-shrink:0; letter-spacing:.2px }
    .dex-wallet-connect-btn:hover { box-shadow:0 8px 24px rgba(99,102,241,.4) }
    .dex-wallet-connect-btn:active { transform:scale(.97) }
    .dex-wallet-connect-btn:disabled { opacity:.55; cursor:not-allowed; box-shadow:none; background:linear-gradient(135deg,#64748b,#475569) }
    .dex-wallet-connect-actions { display:flex; flex-direction:column; gap:6px; flex-shrink:0 }
    .dex-wallet-talisman-btn { background:linear-gradient(135deg,#d5ff5f,#b4f000); border:none; border-radius:11px;
      padding:10px 14px; font-size:13px; font-weight:800; color:#111; cursor:pointer; font-family:inherit;
      box-shadow:0 6px 18px rgba(180,240,0,.22); transition:transform .12s, box-shadow .2s; letter-spacing:.2px }
    .dex-wallet-talisman-btn:hover { box-shadow:0 8px 24px rgba(180,240,0,.35) }
    .dex-wallet-talisman-btn:active { transform:scale(.97) }
    .dex-wallet-badge { display:flex; align-items:center; gap:10px; min-width:0; flex:1 }
    .dex-wallet-status-dot { width:30px; height:30px; border-radius:50%; background:rgba(34,197,94,.15); border:1px solid rgba(34,197,94,.4);
      display:flex; align-items:center; justify-content:center; font-size:14px; flex-shrink:0 }
    .dex-wallet-status-dot.warn { background:rgba(245,158,11,.15); border-color:rgba(245,158,11,.4) }
    .dex-wallet-badge-body { min-width:0; flex:1 }
    .dex-wallet-badge-label { font-size:var(--text-2xs); color:var(--muted); font-weight:700; letter-spacing:.5px; text-transform:uppercase }
    .dex-wallet-badge-addr { font-size:13.5px; font-weight:700; color:var(--text); 
      white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
    .dex-wallet-actions { display:flex; gap:6px; flex-shrink:0 }
    .dex-wallet-icon-btn { border-radius:9px;
      width:34px; height:34px; font-size:13px; cursor:pointer; font-family:inherit; transition:all .15s }
    .dex-wallet-icon-btn:hover { background:rgba(46,211,224,.1); border-color:rgba(46,211,224,.35); color:var(--cyan,var(--cyan)) }
    .dex-wallet-icon-btn-danger:hover { background:rgba(239,68,68,.12); border-color:rgba(239,68,68,.4); color:#ef4444 }
    .dex-wallet-reconnect-btn { background:linear-gradient(135deg,#f59e0b,#ef4444); border:none; border-radius:9px;
      padding:7px 11px; color:#fff; font-size:12px; font-weight:800; cursor:pointer; font-family:inherit;
      box-shadow:0 4px 12px rgba(245,158,11,.25); transition:transform .12s; letter-spacing:.2px }
    .dex-wallet-reconnect-btn:hover { box-shadow:0 6px 16px rgba(245,158,11,.4) }
    .dex-wallet-reconnect-btn:active { transform:scale(.97) }
    .dex-wallet-reconnect-hint { margin-top:9px; padding:8px 11px; background:rgba(245,158,11,.08); border:1px solid rgba(245,158,11,.25);
      border-radius:9px; font-size:11.5px; color:#fbbf24; line-height:1.4 }
    .dex-wallet-debug-btn { margin-top:7px; background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.12); border-radius:8px;
      padding:6px 10px; color:rgba(255,255,255,.7); font-size:11px; font-weight:700; cursor:pointer; font-family:inherit; display:inline-block }
    .dex-wallet-debug-btn:active { transform:scale(.97) }
    .dex-debug-log { max-height:50vh; overflow-y:auto; background:rgba(0,0,0,.45); border:1px solid rgba(255,255,255,.08);
      border-radius:10px; padding:10px 12px; font-family:'DM Mono',Menlo,Consolas,monospace; font-size:var(--text-2xs);
      color:rgba(220,228,240,.85); white-space:pre-wrap; word-break:break-word; margin:8px 0 0; line-height:1.45 }

    /* Swap card */


    /* Chart card */

    .dex-chart-body { position:relative; height:230px; margin:6px 0 12px; border-radius:12px; overflow:hidden; }
    .dex-chart-body svg { display:block; width:100%; height:100%; cursor:crosshair; touch-action:none }
    .dex-chart-tooltip { position:absolute; pointer-events:none; background:rgba(13,16,30,.92); border:1px solid rgba(255,255,255,.1); border-radius:8px; padding:6px 9px; backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); box-shadow:0 6px 18px rgba(0,0,0,.45); white-space:nowrap; z-index:2 }
    .dex-chart-tt-price { font-size:13px; font-weight:800; color:var(--text); font-family:'DM Mono',inherit; line-height:1.1 }
    .dex-chart-tt-time { font-size:var(--text-2xs); color:var(--muted); margin-top:2px; font-family:'DM Mono',inherit }
    .dex-chart-loading { display:flex; align-items:center; justify-content:center; height:100%; font-size:12px; color:var(--muted) }
    .dex-chart-empty { display:flex; align-items:center; justify-content:center; height:100%; font-size:12px; color:var(--muted); padding:0 16px; text-align:center }

    /* History card */

    .dex-history-btn { 
      padding:6px 10px; font-size:11px; cursor:pointer; font-family:inherit; transition:all .15s }
    .dex-history-btn:hover { background:rgba(46,211,224,.1); border-color:rgba(46,211,224,.35); color:var(--cyan,var(--cyan)) }


    
    /* Stake TX result – improved UX */
    .stake-tx-ready { text-align:left }
    .stake-tx-header { display:flex;align-items:center;gap:8px;margin-bottom:12px }
    .stake-tx-header .tx-icon { font-size:28px;line-height:1 }
    .stake-tx-header .tx-label { font-size:17px;font-weight:800;color:var(--green,var(--green)) }
    .stake-tx-summary { background:rgba(255,255,255,.04);border-radius:10px;padding:12px;margin-bottom:14px;border:1px solid rgba(255,255,255,.06) }
    .stake-tx-summary-row { display:flex;justify-content:space-between;font-size:13px;padding:3px 0 }
    .stake-tx-summary-row .lbl { color:var(--muted) }
    .stake-tx-summary-row .val { font-weight:600;color:var(--text) }
    .tx-hash-copy { cursor:pointer;font-size:var(--text-2xs);color:var(--cyan);word-break:break-all;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px }
    .tx-hash-copy:active { opacity:.6 }
    .stake-tx-steps { margin-bottom:16px }
    .stake-tx-step { display:flex;gap:10px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.04) }
    .stake-tx-step:last-child { border-bottom:none }
    .stake-tx-step-num { flex-shrink:0;width:26px;height:26px;border-radius:50%;background:rgba(46,211,224,.15);color:var(--cyan,var(--cyan));font-size:13px;font-weight:800;display:flex;align-items:center;justify-content:center }
    .stake-tx-step-text { font-size:12px;color:var(--muted);line-height:1.5 }
    .stake-tx-step-text strong { color:var(--text) }
    .stake-tx-actions { display:flex;flex-direction:column;gap:8px;margin-bottom:8px }
    .stake-tx-open-btn { width:100%;padding:14px;background:linear-gradient(135deg,#3b82f6,#8b5cf6);border:none;border-radius:12px;font-size:15px;font-weight:700;color:#fff;cursor:pointer;font-family:inherit;transition:all .15s;display:flex;align-items:center;justify-content:center;gap:8px;text-decoration:none }
    .stake-tx-open-btn:active { transform:scale(.97) }
    .stake-tx-copy-btn { width:100%;padding:11px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:12px;font-size:13px;font-weight:600;color:var(--cyan,var(--cyan));cursor:pointer;font-family:inherit;transition:all .15s;display:flex;align-items:center;justify-content:center;gap:6px }
    .stake-tx-copy-btn:active { transform:scale(.97) }
    .stake-tx-copy-btn.copied { border-color:rgba(47,212,138,.4);color:var(--green,var(--green));background:rgba(47,212,138,.08) }
    .stake-tx-done-btn { width:100%;padding:12px;background:none;border:1px solid rgba(255,255,255,.1);border-radius:12px;font-size:13px;color:var(--muted);cursor:pointer;font-family:inherit;margin-top:4px }
    /* Inline wallet address input (replaces prompt) */
    .wc-addr-inline { display:none;margin-top:8px }
    .wc-addr-inline.visible { display:block }
    .wc-addr-row { display:flex;gap:8px;align-items:center }
    .wc-addr-input { flex:1;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:10px 12px;color:var(--text);font-size:13px;font-family:inherit;outline:none }
    .wc-addr-input:focus { border-color:rgba(46,211,224,.5) }
    .wc-addr-input::placeholder { color:rgba(255,255,255,.25) }
    .wc-addr-save-btn { background:linear-gradient(135deg,var(--cyan,var(--cyan)),var(--purple,#a855f7));border:none;border-radius:10px;padding:10px 16px;font-size:13px;font-weight:700;color:#fff;cursor:pointer;font-family:inherit;white-space:nowrap }
    .wc-addr-hint { font-size:var(--text-2xs);color:var(--muted);margin-top:4px }
    .wc-addr-error { font-size:11px;color:var(--red,var(--red));margin-top:4px;display:none }

    /* ── WalletConnect Pairing Modal ────────────────── */
    .wc-pair-overlay { position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:1200;display:flex;align-items:center;justify-content:center;padding:16px;opacity:0;pointer-events:none;transition:opacity .25s }
    .wc-pair-overlay.visible { opacity:1;pointer-events:auto }
    .wc-pair-modal { width:100%;max-width:380px;background:var(--card-elevated,var(--card-elevated));border-radius:20px;padding:24px;text-align:center;border:1px solid rgba(255,255,255,.08);box-shadow:0 12px 48px rgba(0,0,0,.5) }
    .wc-pair-title { font-size:18px;font-weight:800;color:var(--text);margin-bottom:4px }
    .wc-pair-subtitle { font-size:12px;color:var(--muted);margin-bottom:18px }
    .wc-pair-qr { display:flex;align-items:center;justify-content:center;margin:0 auto 16px;width:220px;height:220px;background:#fff;border-radius:16px;overflow:hidden;position:relative }
    .wc-pair-qr svg { width:200px;height:200px }
    .wc-pair-qr-spinner { width:36px;height:36px;border:3px solid rgba(0,0,0,.1);border-top-color:#3b82f6;border-radius:50%;animation:sn-spin .8s linear infinite }
    .wc-pair-deeplink { width:100%;padding:14px;background:linear-gradient(135deg,#3b82f6,#8b5cf6);border:none;border-radius:12px;font-size:15px;font-weight:700;color:#fff;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:10px;transition:all .15s;text-decoration:none }
    .wc-pair-deeplink:active { transform:scale(.97) }
    .wc-pair-fallback { font-size:11px;color:var(--cyan);cursor:pointer;opacity:.8;margin-bottom:8px }
    .wc-pair-fallback:hover { opacity:1;text-decoration:underline }
    .wc-pair-cancel { background:none;border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:10px;width:100%;color:var(--muted);font-size:13px;cursor:pointer;font-family:inherit }
    .wc-pair-noprompt { margin:10px 0; padding:11px 13px; background:rgba(245,158,11,.08); border:1px solid rgba(245,158,11,.28); border-radius:12px; text-align:left }
    .wc-pair-noprompt-title { font-size:12.5px; font-weight:800; color:#fbbf24; margin-bottom:4px }
    .wc-pair-noprompt-body { font-size:11.5px; line-height:1.45; color:rgba(255,255,255,.78); margin-bottom:9px }
    .wc-pair-reset-btn { width:100%; background:linear-gradient(135deg,#f59e0b,#ef4444); border:none; border-radius:10px; padding:10px; font-size:12.5px; font-weight:800; color:#fff; cursor:pointer; font-family:inherit; box-shadow:0 4px 12px rgba(245,158,11,.25); transition:transform .12s }
    .wc-pair-reset-btn:active { transform:scale(.98) }
    .wc-pair-status { font-size:12px;color:var(--muted);margin-bottom:8px;min-height:18px }
    .wc-pair-status.error { color:var(--red,var(--red)) }
    .wc-pair-status.success { color:var(--green,var(--green)) }

    /* ── WalletConnect Signing Modal ───────────────── */
    .wc-sign-overlay { position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:1300;display:flex;align-items:center;justify-content:center;padding:16px;opacity:0;pointer-events:none;transition:opacity .25s }
    .wc-sign-overlay.visible { opacity:1;pointer-events:auto }
    .wc-sign-modal { width:100%;max-width:380px;background:var(--card-elevated,var(--card-elevated));border-radius:20px;padding:24px;text-align:center;border:1px solid rgba(255,255,255,.08);box-shadow:0 12px 48px rgba(0,0,0,.5) }
    .wc-sign-icon { font-size:48px;margin-bottom:8px;animation:wc-pulse 1.5s ease-in-out infinite }
    @keyframes wc-pulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:.7;transform:scale(.95)} }
    .wc-sign-title { font-size:16px;font-weight:800;color:var(--text);margin-bottom:4px }
    .wc-sign-subtitle { font-size:12px;color:var(--muted);margin-bottom:16px;line-height:1.5 }
    .wc-sign-spinner { width:48px;height:48px;border:3px solid rgba(46,211,224,.15);border-top-color:var(--cyan);border-radius:50%;animation:sn-spin .8s linear infinite;margin:0 auto 16px }
    .wc-sign-cancel { background:none;border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:10px;width:100%;color:var(--muted);font-size:13px;cursor:pointer;font-family:inherit }
    .wc-sign-open-btn { margin:12px auto 0 }
    .wc-sign-retry { width:100%;padding:14px;background:linear-gradient(135deg,#f59e0b,#ef4444);border:none;border-radius:12px;font-size:14px;font-weight:700;color:#fff;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;gap:8px;margin:10px 0 8px;transition:transform .15s }
    .wc-sign-retry:active { transform:scale(.97) }
    .wc-sign-retry-hint { font-size:11px;color:var(--muted);margin:0 0 6px;line-height:1.4 }
    /* embedded price chart inside bottom-sheet */
    .snd-chart-embed { margin:0 0 18px;border-radius:14px;overflow:hidden;background:rgba(255,255,255,.03);padding:12px }
    .snd-chart-embed .sn-chart-kpis { margin-bottom:10px }
    /* ── Conviction card (Bittensor Conviction upgrade, May 2026) ── */
    .snd-conv { margin:2px 0 14px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:12px }
    .snd-conv-head { display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px }
    .snd-conv-title { font-size:12px;font-weight:800;letter-spacing:.2px }
    .snd-conv-lock { font-size:var(--text-2xs);font-weight:700;padding:2px 8px;border-radius:999px;white-space:nowrap }
    .snd-conv-lock.perp { background:rgba(47,212,138,.12);color:var(--green,var(--green)) }
    .snd-conv-lock.decay { background:rgba(242,88,94,.12);color:var(--red,var(--red)) }
    .snd-conv-lock.unknown { background:rgba(255,255,255,.06);color:var(--muted) }
    .snd-conv-owner { font-size:var(--text-2xs);font-weight:700;padding:2px 8px;border-radius:999px;white-space:nowrap;margin-right:6px;background:rgba(255,179,0,.14);color:var(--amber,#ffb300) }
    .snd-conv-owner.muted { background:rgba(255,255,255,.06);color:var(--muted) }
    .snd-conv-kpis { display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:8px }
    .snd-conv-kpi { text-align:center }
    .snd-conv-kpi .lbl { font-size:var(--text-2xs);color:var(--muted);margin-bottom:2px }
    .snd-conv-kpi .val { font-size:14px;font-weight:800 }
    .snd-conv-bar { height:6px;border-radius:999px;background:rgba(255,255,255,.08);overflow:hidden;margin:2px 0 8px }
    .snd-conv-bar > span { display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#22d3a6,var(--green)) }
    .snd-conv-spark { width:100%;height:60px;display:block }
    .snd-conv-spark-cap { display:flex;align-items:center;justify-content:space-between;font-size:var(--text-2xs);font-weight:700;color:var(--muted);margin:8px 0 2px;text-transform:uppercase;letter-spacing:.3px }
    .snd-conv-hint { font-size:var(--text-2xs);color:var(--muted);opacity:.7;line-height:1.3;margin-top:6px }
    .snd-conv-empty { font-size:11px;color:var(--muted);text-align:center;padding:10px 4px }
    .dp-repo { background:none;border:0;padding:0;margin:0;font:inherit;font-weight:600;color:var(--cyan);cursor:pointer;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right }

    /* ── Subnet Price Chart Modal ─────────────────── */
    .sn-chart-overlay { position:fixed;inset:0;z-index:400;background:rgba(0,0,0,.75);display:flex;align-items:center;justify-content:center;padding:12px }
    .sn-chart-overlay.hidden { display:none }

    /* ── Conviction share-card overlay ── */
    .cv-share-overlay { position:fixed;inset:0;z-index:600;background:rgba(0,0,0,.82);backdrop-filter:blur(6px);display:flex;align-items:center;justify-content:center;padding:18px;animation:cvFadeIn .2s ease }
    .cv-share-overlay.hidden { display:none }
    @keyframes cvFadeIn { from{opacity:0} to{opacity:1} }
    .cv-share-modal { position:relative;width:100%;max-width:440px;display:flex;flex-direction:column;gap:14px;animation:cvPopIn .26s cubic-bezier(.32,.72,0,1) }
    @keyframes cvPopIn { from{transform:scale(.94);opacity:0} to{transform:scale(1);opacity:1} }
    .cv-share-img { width:100%;border-radius:18px;display:block;box-shadow:0 24px 64px rgba(0,0,0,.6);border:1px solid rgba(255,255,255,.08) }
    .cv-share-close { position:absolute;top:-14px;right:-6px;width:34px;height:34px;border-radius:50%;border:none;background:rgba(255,255,255,.14);color:#fff;font-size:16px;cursor:pointer;backdrop-filter:blur(8px) }
    .cv-share-close:active { background:rgba(255,255,255,.26) }
    .cv-share-actions { display:flex;gap:10px }
    .cv-share-act { flex:1;padding:14px;border-radius:14px;border:1px solid rgba(255,255,255,.12);background:rgba(255,255,255,.06);color:var(--text,#e8eaf2);font-size:15px;font-weight:700;cursor:pointer }
    .cv-share-act:active { transform:scale(.97) }
    .cv-share-act.primary { background:linear-gradient(135deg,var(--green),#22d3a6);color:#06210f;border:none;box-shadow:0 6px 20px rgba(47,212,138,.3) }

    /* ── Portfolio Detail Chart Overlay (CoinStats-style) ── */
    .pf-chart-overlay {
      position: fixed; inset: 0; z-index: 9999;
      background: rgba(0,0,0,.78);
      backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
      display: flex; align-items: flex-end; justify-content: center;
      padding: 0;
      animation: pfFadeIn .2s ease;
    }
    @media (min-width: 480px) {
      .pf-chart-overlay { align-items: center; padding: 16px; }
    }
    .pf-chart-overlay.hidden { display: none; }
    /* Hide the floating ChainGPT FAB while the chart is open so it doesn't
       intercept taps or cover the period selector / stats. */
    body.pf-chart-open #cgFab { display: none !important; }
    @keyframes pfFadeIn { from { opacity: 0; } to { opacity: 1; } }
    @keyframes pfSlideUp { from { transform: translateY(40px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }
    .pf-chart-sheet {
      position: relative;
      width: 100%; max-width: 520px;
      height: 88vh;
      overflow-y: auto;
      padding: 14px 18px calc(22px + env(safe-area-inset-bottom, 0px));
      border-radius: 22px 22px 0 0;
      border-bottom: none;
      animation: pfSlideUp .35s cubic-bezier(.22,1,.36,1);
    }
    @media (min-width: 480px) {
      .pf-chart-sheet { height: auto; max-height: 92vh; border-radius: 22px; border-bottom: 1px solid rgba(46,211,224,.18); padding-bottom: 22px; }
    }
    .pf-chart-sheet::-webkit-scrollbar { width: 4px; }
    .pf-chart-sheet::-webkit-scrollbar-thumb { background: rgba(46,211,224,.25); border-radius: 2px; }

    .pf-drag-handle {
      position: sticky; top: 0;
      align-self: center;
      width: 40px; height: 4px;
      margin: 0 auto 10px;
      border-radius: 999px;
      background: rgba(255,255,255,.18);
      pointer-events: none;
    }

    .pf-chart-header {
      display: grid;
      grid-template-columns: 36px 1fr 36px;
      align-items: center;
      gap: 10px;
      margin-bottom: 14px;
    }
    .pf-chart-close {
      width: 36px; height: 36px; border-radius: 12px;
      display: inline-flex; align-items: center; justify-content: center;
      color: var(--muted);
      background: rgba(255,255,255,.05);
      border: 1px solid rgba(255,255,255,.08);
      cursor: pointer; font-family: inherit;
      transition: color .2s, background .2s, border-color .2s, transform .15s;
    }
    .pf-chart-close:hover { color: var(--text); border-color: rgba(46,211,224,.35); }
    .pf-chart-close:active { transform: scale(.94); }
    .pf-chart-title-wrap { text-align: center; min-width: 0; }
    .pf-chart-eyebrow {
      font: 700 9.5px/1 'Inter', sans-serif;
      color: var(--muted);
      letter-spacing: 1.4px; text-transform: uppercase;
      margin-bottom: 4px;
    }
    .pf-chart-title {
      font: 800 14px/1.2 'Inter', sans-serif;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .pf-chart-header-spacer { width: 36px; }

    .pf-chart-summary {
      text-align: center;
      margin: 8px 0 18px;
    }
    .pf-chart-val {
      font: 900 36px/1 'DM Mono', monospace;
      color: var(--text);
      font-variant-numeric: tabular-nums;
      letter-spacing: -.5px;
      transition: color .3s ease;
    }
    .pf-chart-summary.pos .pf-chart-val { text-shadow: 0 0 20px rgba(47,212,138,.35); }
    .pf-chart-summary.neg .pf-chart-val { text-shadow: 0 0 20px rgba(242,88,94,.35); }
    .pf-chart-delta-row {
      display: inline-flex; align-items: center; gap: 8px;
      margin-top: 10px;
    }
    .pf-chart-delta-pill {
      display: inline-flex; align-items: center;
      padding: 5px 11px;
      border-radius: 999px;
      font: 800 12px/1 'DM Mono', monospace;
      background: rgba(255,255,255,.06);
      color: var(--muted);
      font-variant-numeric: tabular-nums;
    }
    .pf-chart-delta-pill.pos { background: rgba(47,212,138,.14); color: var(--green); border-color: rgba(47,212,138,.4); box-shadow: 0 0 14px rgba(47,212,138,.18); }
    .pf-chart-delta-pill.neg { background: rgba(242,88,94,.14); color: var(--red); border-color: rgba(242,88,94,.4); box-shadow: 0 0 14px rgba(242,88,94,.18); }
    .pf-chart-period-lbl {
      font: 700 11px/1 'Inter', sans-serif;
      color: var(--muted);
      letter-spacing: .8px; text-transform: uppercase;
    }

    .pf-chart-canvas {
      position: relative;
      width: 100%; height: 220px;
      margin: 0 0 14px;
      padding-left: 40px;
      box-sizing: border-box;
      /* Capture horizontal swipes for the scrubber but still let the
         bottom sheet scroll vertically. */
      touch-action: pan-y;
      -webkit-user-select: none; user-select: none;
    }
    .pf-chart-yaxis {
      position: absolute; left: 0; top: 0; bottom: 0;
      width: 36px;
      font: 600 9px/1 'DM Mono', monospace;
      color: var(--muted);
      font-variant-numeric: tabular-nums;
      pointer-events: none;
    }
    .pf-chart-yaxis-tick {
      position: absolute; right: 4px; left: 0;
      text-align: right;
      transform: translateY(-50%);
      white-space: nowrap;
      letter-spacing: -.2px;
    }
    .pf-chart-svg {
      position: absolute; left: 40px; right: 0; top: 0; bottom: 0;
      display: block;
      overflow: visible;
    }
    .pf-chart-axis {
      position: absolute; left: 40px; right: 0; bottom: -4px;
      display: flex; justify-content: space-between;
      font: 600 9px/1 'DM Mono', monospace;
      color: var(--muted);
      pointer-events: none;
      padding: 0 4px;
    }
    .pf-chart-empty {
      position: absolute; left: 40px; right: 0; top: 0; bottom: 0;
      display: flex; flex-direction: column; align-items: center; justify-content: center;
      gap: 10px;
      color: var(--muted);
      text-align: center;
      padding: 0 16px;
    }
    .pf-chart-empty-icon { font-size: 32px; opacity: .55; }
    .pf-chart-empty-text { font: 600 12px/1.4 'Inter', sans-serif; max-width: 240px; }

    /* ── Chart scrubber (tap/drag to inspect a data point) ── */
    .pf-chart-scrub {
      position: absolute; left: 40px; right: 0; top: 0; bottom: 0;
      pointer-events: none;
      opacity: 0; transition: opacity .12s ease;
    }
    .pf-chart-scrub.active { opacity: 1; }
    .pf-chart-scrub-line {
      position: absolute; top: 0; bottom: 0;
      width: 1px;
      background: linear-gradient(180deg, rgba(255,255,255,.55) 0%, rgba(255,255,255,.06) 100%);
      transform: translateX(-0.5px);
    }
    .pf-chart-scrub-dot {
      position: absolute;
      width: 11px; height: 11px;
      border-radius: 50%;
      background: var(--text);
      box-shadow: 0 0 0 3px rgba(8,9,20,.95), 0 0 0 4px rgba(46,211,224,.55), 0 0 16px rgba(46,211,224,.5);
      transform: translate(-50%, -50%);
    }
    .pf-chart-scrub.pos .pf-chart-scrub-dot { box-shadow: 0 0 0 3px rgba(8,9,20,.95), 0 0 0 4px rgba(47,212,138,.55), 0 0 16px rgba(47,212,138,.55); }
    .pf-chart-scrub.neg .pf-chart-scrub-dot { box-shadow: 0 0 0 3px rgba(8,9,20,.95), 0 0 0 4px rgba(242,88,94,.55), 0 0 16px rgba(242,88,94,.55); }
    .pf-chart-scrub-tip {
      position: absolute; top: 0;
      transform: translate(-50%, calc(-100% - 10px));
      display: flex; flex-direction: column; align-items: center; gap: 3px;
      padding: 6px 10px;
      background: rgba(8,9,20,.94);
      border: 1px solid rgba(46,211,224,.32);
      border-radius: 10px;
      box-shadow: 0 6px 18px rgba(0,0,0,.55);
      backdrop-filter: blur(10px);
      -webkit-backdrop-filter: blur(10px);
      white-space: nowrap;
    }
    .pf-chart-scrub-tip-date {
      font: 700 9px/1 'Inter', sans-serif;
      letter-spacing: .6px;
      text-transform: uppercase;
      color: var(--muted);
    }
    .pf-chart-scrub-tip-val {
      font: 800 12px/1 'DM Mono', monospace;
      color: var(--text);
      font-variant-numeric: tabular-nums;
    }

    .pf-chart-periods {
      margin-bottom: 16px;
      width: 100%;
      box-sizing: border-box;
    }
    .pf-chart-period {
      padding: 8px 2px;
      font: 800 10.5px/1 'Inter', sans-serif;
      letter-spacing: .4px;
      cursor: pointer; font-family: inherit;
      box-sizing: border-box;
      transition: color .2s, background .2s, border-color .2s, transform .15s;
    }
    .pf-chart-period:hover { color: var(--text); background: rgba(255,255,255,.03); }
    .pf-chart-period:active { transform: scale(.96); }
    .pf-chart-period.active {
      border-color: rgba(46,211,224,.4);
    }
    .pf-chart-period.disabled {
      opacity: .35; cursor: not-allowed;
    }
    .pf-chart-period.disabled:hover { background: transparent; color: var(--muted); }

    .pf-chart-stats {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 8px;
      margin-bottom: 12px;
    }
    @media (min-width: 380px) {
      .pf-chart-stats { grid-template-columns: 1fr 1fr 1fr 1fr; }
    }
    .pf-chart-stat {
      padding: 10px 12px;
      border-radius: 12px;
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.06);
    }
    .pf-chart-stat-lbl {
      font: 700 9px/1 'Inter', sans-serif;
      color: var(--muted);
      letter-spacing: .8px; text-transform: uppercase;
      margin-bottom: 5px;
    }
    .pf-chart-stat-val {
      font: 800 13px/1 'DM Mono', monospace;
      color: var(--text);
      font-variant-numeric: tabular-nums;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .pf-chart-stat-val.pos { color: var(--green); }
    .pf-chart-stat-val.neg { color: var(--red); }

    .pf-chart-footnote {
      font: 600 10px/1.4 'Inter', sans-serif;
      color: var(--muted);
      text-align: center;
      opacity: .7;
      padding: 0 8px;
    }

    @media (prefers-reduced-motion: reduce) {
      .pf-chart-overlay, .pf-chart-sheet { animation: none !important; }
    }

    /* ── Privacy mask for chart overlay (reuses #pdBody.pd-private pattern) ── */
    body.pd-private .pf-chart-title,
    body.pd-private .pf-chart-val,
    body.pd-private .pf-chart-delta-pill,
    body.pd-private .pf-chart-stat-val {
      color: transparent !important;
      text-shadow: none !important;
      position: relative;
    }
    body.pd-private .pf-chart-title::after,
    body.pd-private .pf-chart-val::after,
    body.pd-private .pf-chart-delta-pill::after,
    body.pd-private .pf-chart-stat-val::after {
      content: '∗∗∗';
      position: absolute;
      inset: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      color: var(--muted);
      font-weight: 800;
      letter-spacing: 3px;
      text-shadow: 0 0 6px rgba(46,211,224,.25);
      pointer-events: none;
    }
    body.pd-private .pf-chart-val::after { letter-spacing: 6px; font-size: 28px; }
    body.pd-private .pf-chart-stat-val::after { letter-spacing: 2px; font-size: 12px; }
    body.pd-private .pf-chart-delta-pill::after { letter-spacing: 2px; font-size: 11px; }
    /* Obscure the chart line + axis numbers themselves — the shape alone
       leaks the wealth trajectory. Blur is softer than visibility:hidden
       and keeps the overlay feeling alive. */
    body.pd-private .pf-chart-svg {
      filter: blur(14px);
      opacity: .35;
    }
    body.pd-private .pf-chart-axis {
      filter: blur(4px);
      opacity: .4;
    }
    .sn-chart-modal { background:var(--card);border-radius:18px;padding:20px;width:100%;max-width:480px;max-height:90vh;overflow-y:auto;}
    .sn-chart-header { display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:14px }
    .sn-chart-title { font-size:16px;font-weight:800;color:var(--text) }
    .sn-chart-period { font-size:11px;color:var(--muted);margin-top:2px }
    .sn-chart-close { background:rgba(255,255,255,.08);border:none;border-radius:8px;width:32px;height:32px;font-size:14px;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0 }
    .sn-chart-kpis { display:flex;gap:8px;margin-bottom:14px;flex-wrap:wrap }
    .sn-chart-kpi { flex:1;min-width:80px;background:rgba(255,255,255,.05);border-radius:10px;padding:8px 10px }
    .sn-chart-kpi .kpi-lbl { font-size:var(--text-2xs);color:var(--muted);text-transform:uppercase;margin-bottom:2px }
    .sn-chart-kpi .kpi-val { font-size:14px;font-weight:700 }
    .sn-chart-body { position:relative;min-height:180px }
    .sn-chart-spinner { display:flex;align-items:center;justify-content:center;min-height:180px }
    .sn-spinner-ring { width:36px;height:36px;border:3px solid rgba(255,255,255,.1);border-top-color:var(--cyan,var(--cyan));border-radius:50%;animation:sn-spin .8s linear infinite }
    @keyframes sn-spin { to{transform:rotate(360deg)} }
    .sn-chart-empty { text-align:center;padding:40px 20px;color:var(--muted);font-size:13px }
    .sn-chart-svg-wrap { width:100%;overflow:visible }
    .sn-chart-tooltip { position:absolute;background:rgba(10,14,23,.95);border:1px solid rgba(46,211,224,.3);border-radius:8px;padding:6px 10px;font-size:11px;pointer-events:none;white-space:nowrap;z-index:10;transform:translateX(-50%) }
    .sn-chart-tooltip .tt-date { color:var(--muted);margin-bottom:2px }
    .sn-chart-tooltip .tt-val { font-weight:700;color:var(--cyan,var(--cyan)) }
    .sn-chart-btn { display:inline-flex;align-items:center;gap:6px;width:100%;background:rgba(46,211,224,.1);border:1px solid rgba(46,211,224,.25);border-radius:12px;padding:14px;font-size:16px;font-weight:700;color:var(--cyan,var(--cyan));cursor:pointer;font-family:inherit;margin-bottom:10px;justify-content:center }

    /* ── Technical Indicator Toggle Bar ─────────────── */
    .sn-ind-bar { display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px }
    .sn-ind-btn { background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:8px;padding:5px 10px;font-size:var(--text-2xs);font-weight:600;color:var(--muted);cursor:pointer;font-family:inherit;transition:all .15s;white-space:nowrap;text-transform:uppercase;letter-spacing:.3px }
    .sn-ind-btn:hover { background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2) }
    .sn-ind-btn.active { border-color:var(--ind-color,rgba(46,211,224,.5));color:var(--ind-color,var(--cyan));background:rgba(46,211,224,.12) }
    .sn-ind-btn[data-ind="sma7"],.sn-ind-btn[data-ind="sma20"] { --ind-color:#ff9800 }
    .sn-ind-btn[data-ind="ema7"],.sn-ind-btn[data-ind="ema20"] { --ind-color:#e040fb }
    .sn-ind-btn[data-ind="bb"] { --ind-color:#7c4dff }
    .sn-ind-btn[data-ind="rsi"] { --ind-color:var(--green) }
    .sn-ind-btn[data-ind="macd"] { --ind-color:var(--red) }
    .sn-ind-btn[data-ind="psar"] { --ind-color:#ffd740 }
    .sn-ind-btn[data-ind="kc"] { --ind-color:#26c6da }
    .sn-ind-btn[data-ind="sqz"] { --ind-color:#ffab40 }
    .sn-ind-btn[data-ind="vol"] { --ind-color:#42a5f5 }
    /* ── Timeframe Selector Bar ────────────────────── */
    .sn-tf-bar { display:flex;gap:0;margin-bottom:8px;background:rgba(255,255,255,.04);border-radius:10px;padding:2px;border:1px solid rgba(255,255,255,.06) }
    .sn-tf-btn { flex:1;text-align:center;padding:5px 4px;font-size:var(--text-2xs);font-weight:700;color:var(--muted);cursor:pointer;border-radius:8px;transition:all .2s;font-family:inherit;border:none;background:transparent;letter-spacing:.3px;text-transform:uppercase }
    .sn-tf-btn:hover { color:var(--text);background:rgba(255,255,255,.04) }
    .sn-tf-btn.active { background:rgba(46,211,224,.12);color:var(--cyan,var(--cyan));box-shadow:0 0 6px rgba(46,211,224,.12) }
    /* ── Chart Mode Switcher (Standard / Pro) ──────── */
    .sn-chart-mode-bar { display:flex;gap:0;margin-bottom:10px;background:rgba(255,255,255,.04);border-radius:10px;padding:3px;border:1px solid rgba(255,255,255,.06) }
    .sn-chart-mode-btn { flex:1;text-align:center;padding:6px 10px;font-size:11px;font-weight:700;color:var(--muted);cursor:pointer;border-radius:8px;transition:all .2s;font-family:inherit;border:none;background:transparent;letter-spacing:.3px;text-transform:uppercase }
    .sn-chart-mode-btn:hover { color:var(--text);background:rgba(255,255,255,.04) }
    .sn-chart-mode-btn.active { background:rgba(46,211,224,.12);color:var(--cyan,var(--cyan));box-shadow:0 0 8px rgba(46,211,224,.15) }
    .sn-chart-mode-btn.active[data-mode="pro"] { background:rgba(240,180,41,.12);color:var(--gold);box-shadow:0 0 8px rgba(240,180,41,.15) }
    .sn-pro-badge { display:inline-block;font-size:var(--text-2xs);background:linear-gradient(135deg,var(--gold),#ff9800);color:#000;padding:1px 5px;border-radius:4px;font-weight:800;margin-left:4px;vertical-align:middle;letter-spacing:.5px }
    /* ── Chart Type Toggle (Pro: Line / Candle) ──────── */
    .sn-chart-type-bar { display:none;gap:0;margin-bottom:10px;background:rgba(255,255,255,.04);border-radius:10px;padding:3px;border:1px solid rgba(255,255,255,.06) }
    .sn-chart-type-btn { flex:1;text-align:center;padding:6px 10px;font-size:11px;font-weight:700;color:var(--muted);cursor:pointer;border-radius:8px;transition:all .2s;font-family:inherit;border:none;background:transparent;letter-spacing:.3px;text-transform:uppercase;display:inline-flex;align-items:center;justify-content:center;gap:5px }
    .sn-chart-type-btn:hover { color:var(--text);background:rgba(255,255,255,.04) }
    .sn-chart-type-btn.active { background:rgba(38,166,154,.14);color:#26a69a;box-shadow:0 0 8px rgba(38,166,154,.18) }
    .sn-chart-type-btn[data-type="line"].active { background:rgba(46,211,224,.12);color:var(--cyan,var(--cyan));box-shadow:0 0 8px rgba(46,211,224,.15) }
    /* TradingView-style last-price pill on right edge of Standard chart */
    .sn-chart-price-pill { font:800 10.5px/1 -apple-system,BlinkMacSystemFont,Inter,sans-serif;letter-spacing:.2px }
    /* Separate indicator panel (RSI / MACD) */
    .sn-ind-panel { position:relative;margin-top:8px;border-top:1px solid rgba(255,255,255,.06);padding-top:4px }
    .sn-ind-panel-label { font-size:var(--text-2xs);color:var(--muted);text-transform:uppercase;letter-spacing:.4px;margin-bottom:2px;font-weight:700 }
    /* ── Pattern Recognition Panel ──────────────────── */
    .sn-pattern-panel { margin-top:8px;border-top:1px solid rgba(255,255,255,.06);padding-top:8px }
    .sn-pattern-panel-label { font-size:var(--text-2xs);color:var(--muted);text-transform:uppercase;letter-spacing:.4px;margin-bottom:8px;font-weight:700 }
    .sn-pattern-grid { display:grid;grid-template-columns:1fr 1fr;gap:6px }
    .sn-pattern-card { background:rgba(255,255,255,.04);border-radius:8px;padding:8px 10px;border:1px solid rgba(255,255,255,.07);display:flex;flex-direction:column;gap:3px }
    .sn-pattern-card-top { display:flex;align-items:center;gap:6px }
    .sn-pattern-card-emoji { font-size:16px;line-height:1 }
    .sn-pattern-card-name { font-size:11px;font-weight:700;color:var(--text);flex:1 }
    .sn-pattern-badge { font-size:var(--text-2xs);font-weight:800;padding:2px 6px;border-radius:4px;text-transform:uppercase;letter-spacing:.4px;white-space:nowrap }
    .sn-pattern-badge.bullish { background:rgba(47,212,138,.18);color:var(--green);border:1px solid rgba(47,212,138,.3) }
    .sn-pattern-badge.bearish { background:rgba(242,88,94,.18);color:var(--red);border:1px solid rgba(242,88,94,.3) }
    .sn-pattern-badge.neutral { background:rgba(255,255,255,.1);color:var(--muted);border:1px solid rgba(255,255,255,.15) }
    .sn-pattern-card-desc { font-size:var(--text-2xs);color:var(--muted);line-height:1.3 }
    .sn-sr-row { display:flex;gap:6px;margin-bottom:8px;flex-wrap:wrap }
    .sn-sr-pill { font-size:var(--text-2xs);font-weight:700;padding:3px 8px;border-radius:6px;white-space:nowrap }
    .sn-sr-pill.support { background:rgba(47,212,138,.12);color:var(--green);border:1px solid rgba(47,212,138,.2) }
    .sn-sr-pill.resistance { background:rgba(242,88,94,.12);color:var(--red);border:1px solid rgba(242,88,94,.2) }
    .sn-pattern-none { font-size:var(--text-2xs);color:var(--muted);padding:4px 0 }

    /* ── Stats Grid ───────────────────────────────── */
    .stats-grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 10px;
      margin-bottom: 16px;
    }
    .stat-card {
      padding: 14px;
    }
    .stat-card .stat-label { font-size: 11px; color: var(--muted); text-transform: uppercase; }
    .stat-card .stat-value { font-size: 20px; font-weight: 700; margin-top: 4px; }

    /* ── Chart ─────────────────────────────────────── */
    .chart-section {
      padding: 16px;
      margin-bottom: 16px;
    }
    .chart-section h2 { margin-bottom: 12px; }
    .chart-bars {
      display: flex;
      align-items: flex-end;
      justify-content: space-between;
      height: 120px;
      gap: 6px;
    }
    .bar-col {
      flex: 1;
      display: flex;
      flex-direction: column;
      align-items: center;
      height: 100%;
      justify-content: flex-end;
    }
    .bar {
      width: 100%;
      max-width: 32px;
      border-radius: 6px 6px 0 0;
      transition: height .4s ease;
    }
    .bar-label {
      font-size: var(--text-2xs);
      color: var(--muted);
      margin-top: 6px;
    }
    .bar-value {
      font-size: var(--text-2xs);
      color: var(--text);
      margin-bottom: 4px;
    }

    /* ── Subnet List ──────────────────────────────── */
    .subnet-section {
      padding: 16px;
      margin-bottom: 16px;
    }
    .subnet-section h2 { margin-bottom: 12px; }
    .subnet-section-head { display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px; }
    .subnet-section-head h2 { margin-bottom:0; flex:1 1 auto; min-width:0; }
    .subnet-row {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 10px 0;
      border-bottom: 1px solid rgba(255,255,255,.06);
    }
    .subnet-row:last-child { border-bottom: none; }
    .subnet-left { display: flex; align-items: center; gap: 10px; }
    .subnet-rank {
      width: 26px;
      height: 26px;
      border-radius: 50%;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 12px;
      font-weight: 700;
      background: rgba(46,211,224,.12);
      color: var(--cyan);
    }
    .subnet-name { font-size: 14px; font-weight: 600; }
    .subnet-id { font-size: 11px; color: var(--muted); }
    .subnet-right { text-align: right; }
    .subnet-price { font-size: 14px; font-weight: 600; }
    .subnet-change { font-size: 12px; }

    /* ── Buttons ───────────────────────────────────── */
    .btn-row {
      display: flex;
      gap: 10px;
      margin-bottom: 24px;
    }
    .btn {
      flex: 1;
      padding: 14px;
      font-size: 15px;
      cursor: pointer;
      transition: opacity .2s;
    }
    .btn:active { opacity: .75; }

    /* ── Contact Owner card (For You tab) ────────── */
    .fy-contact-card {
      position: relative; width: 100%;
      display: flex; align-items: center; gap: 12px;
      padding: 14px 16px;
      margin-bottom: 16px;
      color: var(--text); cursor: pointer;
      text-align: left; font-family: inherit;
      transition: transform .15s ease, border-color .2s ease;
    }
    .fy-contact-card:active { transform: scale(.985); }
    .fy-contact-text { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
    .fy-contact-title { font-size: 14px; font-weight: 800; letter-spacing: .2px; }
    .fy-contact-arrow {
      flex: 0 0 auto; font-size: 17px; 
    }

    /* ── Contact Owner Modal ────────────────────── */
    .contact-modal-overlay { position:fixed;inset:0;z-index:5200;background:rgba(0,0,0,.7);display:flex;align-items:flex-end;justify-content:center }
    .contact-modal-overlay.hidden { display:none }
    .contact-modal-sheet { background:var(--card);border-radius:20px 20px 0 0;padding:22px 20px 28px;width:100%;max-width:480px;box-sizing:border-box }
    .contact-modal-title { font-size:16px;font-weight:800;color:var(--text);margin-bottom:6px }
    .contact-modal-sub { font-size:12px;color:var(--muted);margin-bottom:14px;line-height:1.45 }
    .contact-modal-textarea { width:100%;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:12px;color:var(--text);font-size:13px;font-family:inherit;resize:vertical;min-height:110px;box-sizing:border-box;outline:none }
    .contact-modal-textarea:focus { border-color:rgba(46,211,224,.5) }
    .contact-modal-status { font-size:12px;color:var(--muted);margin-top:10px;min-height:16px }
    .contact-modal-actions { display:flex;gap:10px;margin-top:14px }
    .contact-modal-btn { flex:1;padding:12px;border:none;border-radius:10px;font-size:13px;font-weight:700;cursor:pointer;font-family:inherit }
    .contact-modal-cancel { background:rgba(255,255,255,.08);color:var(--text) }
    .contact-modal-send:disabled { opacity:.55;cursor:not-allowed }

    /* ── Mood Indicator ─────────────────────────────── */
    .mood-row { display:flex;align-items:center;justify-content:center;gap:6px;margin-top:8px; }
    .gb { background:rgba(47,212,138,.15);color:var(--green); }
    .rb { background:rgba(242,88,94,.15);color:var(--red); }
    .nb { background:rgba(46,211,224,.15);color:var(--cyan); }

    /* ── Filter Chips ───────────────────────────────── */
    .filter-row { display:flex;gap:6px;margin-bottom:10px;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px; }
    .filter-row::-webkit-scrollbar { display:none }
    .fc { padding:5px 12px;cursor:pointer;white-space:nowrap;flex-shrink:0; }

    /* ── Portfolio / Alerts section shells (glass cards) ── */
    .alerts-section, .portfolio-section {
      position:relative;
      padding:16px;
      margin-bottom:16px;
      overflow:hidden;
    }
    .alerts-section::before, .portfolio-section::before {
      content:''; position:absolute; top:0; left:16px; right:16px; height:1px;
      background:linear-gradient(90deg, transparent, rgba(46,211,224,.45), rgba(143,157,255,.45), transparent);
      pointer-events:none;
    }
    .psec-head { display:flex; align-items:center; gap:10px; margin-bottom:14px; }
    .psec-ic {
      flex:0 0 auto; width:36px; height:36px; 
      display:inline-flex; align-items:center; justify-content:center;
    }
    .psec-titles { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:3px; }
    .psec-title {
      white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
    }
    .psec-sub { letter-spacing:.2px; }
    .psec-badge {
      flex:0 0 auto; min-width:24px; height:24px; padding:0 8px;
      display:inline-flex; align-items:center; justify-content:center;
    }
    .psec-badge.zero { background:var(--surface-dim); border-color:var(--border-subtle); color:var(--muted); }

    /* ── Portfolio Overview ── */
    .portfolio-input { display:flex; gap:8px; margin-bottom:12px; }
    .portfolio-input input {
      flex:1; min-width:0;
      background:var(--surface-subtle); border:1px solid var(--border-medium);
      border-radius:12px; padding:11px 12px;
      color:var(--text); font-size:13px; font-family:inherit; outline:none;
      transition:border-color var(--transition-fast), box-shadow var(--transition-fast);
    }
    .portfolio-input input::placeholder { color:var(--muted); }
    .portfolio-input input:focus { border-color:rgba(46,211,224,.55); box-shadow:0 0 0 3px rgba(46,211,224,.10); }
    .portfolio-input button {
      padding:11px 18px;cursor:pointer;font-family:inherit;
      transition:transform var(--transition-fast), opacity var(--transition-fast);
    }
    .portfolio-input button:active { transform:scale(.96); opacity:.85; }
    .portfolio-result { margin-top:4px; }
    .pov-hero {
      position:relative; text-align:center; padding:16px 14px 14px; margin-bottom:8px;
      overflow:hidden;
    }
    .pov-hero-lbl { margin-bottom:6px; }
    .pov-hero-val { line-height:1.1; }
    .pov-hero-usd { font-size:12px; font-weight:700; margin-top:4px; }
    .pov-stats { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
    .pov-stat { padding:10px 12px; }
    .pov-stat-val { font-size:14px; margin-top:4px; }
    .pov-hold-row { padding:10px 2px; border-bottom:1px solid var(--border-subtle); }
    .pov-hold-row:last-child { border-bottom:none; }
    .pov-hold-top { display:flex; align-items:center; gap:10px; }
    .pov-coin-ic {
      flex:0 0 auto; width:30px; height:30px; border-radius:10px;
      display:inline-flex; align-items:center; justify-content:center;
      font-size:var(--text-2xs); font-weight:800; color:#0b0c1c; letter-spacing:.2px;
    }
    .pov-hold-meta { flex:1 1 auto; min-width:0; }
    .pov-hold-name { font-size:13px; font-weight:700; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .pov-hold-sub { font-size:var(--text-2xs); color:var(--muted); margin-top:1px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .pov-hold-sub .apy { color:var(--green); font-weight:700; }
    .pov-hold-right { flex:0 0 auto; text-align:right; }
    .pov-hold-amt { font-size:12.5px; font-weight:700; }
    .pov-hold-usd { font-size:var(--text-2xs); color:var(--muted); margin-top:1px; }
    .pov-hold-ch { font-size:var(--text-2xs); font-weight:700; margin-top:1px; }
    /* Aufklappen: Chevron dreht, Details erscheinen. Der Gegenwert und
       die Validatoren stehen hier statt in der Zeile — beim Überfliegen
       liest sie niemand, beim Nachsehen will man sie vollständig. */
    .pov-hold-top { cursor:pointer; }
    .pov-hold-chev { flex:0 0 auto; color:var(--muted); font-size:16px;
      line-height:1; transition:transform .18s ease; margin-left:2px; }
    .pov-hold-chev.open { transform:rotate(90deg); }
    .pov-hold-detail { margin:8px 0 2px 38px; }

    .pov-insight-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; margin:6px 0 14px; }
    .pov-insight { min-width:0; padding:12px; border:1px solid var(--border-subtle); border-radius:12px; background:var(--bg); }
    .pov-insight-label, .pov-insight-note { font-size:var(--text-2xs); color:var(--muted); line-height:1.5; }
    .pov-insight-value { font-size:18px; font-weight:750; margin:5px 0; overflow-wrap:anywhere; }
    .pov-section-title { font-size:var(--text-xs); margin:14px 0 8px; font-weight:700; }
    .pov-insight-action { min-height:36px; padding:7px 12px; border:1px solid var(--border-subtle); border-radius:8px; background:var(--bg); color:var(--text); font:inherit; font-size:var(--text-2xs); cursor:pointer; }
    .pov-insight-action:disabled { opacity:.6; cursor:wait; }
    .pov-trades-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:16px; }
    .pov-trade { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:8px; padding:11px 0; border-bottom:1px solid var(--border-subtle); }
    .pov-trade-main { min-width:0; font-size:var(--text-xs); }
    .pov-trade-return { text-align:right; font-size:var(--text-xs); align-self:center; }
    .pov-trade-return.pos { color:var(--green); }
    .pov-trade-return.neg { color:var(--red); }
    .pov-trade-return small { display:block; max-width:140px; color:var(--muted); font-size:var(--text-2xs); }
    .pov-trade-note { font-size:var(--text-2xs); color:var(--muted); line-height:1.5; margin:8px 0; }
    .pov-trade-footer { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:8px; padding-top:10px; }

    .pov-det-line { font-size:var(--text-2xs); color:var(--text); margin:3px 0; }
    .pov-det-muted { color:var(--muted); }
    .pov-det-val { display:flex; justify-content:space-between; gap:8px;
      align-items:baseline; padding:4px 0;
      border-bottom:1px dashed var(--border-subtle); font-size:11px; }
    .pov-det-val:last-child { border-bottom:none; }
    .pov-det-vname { font-weight:700; overflow:hidden;
      text-overflow:ellipsis; white-space:nowrap; }
    .pov-det-vmeta { flex:0 0 auto; color:var(--muted);
      font-variant-numeric:tabular-nums; }
    /* Der Platz ist die Aussage — er bekommt Gewicht, nicht Farbe.
       Grün nur für die Spitze, sonst würde jede Zeile Alarm schlagen. */
    .pov-det-rank { font-weight:700; color:var(--text); }
    .pov-det-rank.good { color:var(--green); }
    /* Wechsel je Position: ein kleiner Knopf am Zeilenende, kein zweiter
       Akzent — der Platz ist die Aussage, der Knopf ist die Hand dazu. */
    .pov-det-vname { flex:1 1 auto; min-width:0; }
    .pov-det-move { flex:0 0 auto; margin-left:4px; background:none;
      border:1px solid var(--border-medium); border-radius:8px;
      color:var(--cyan); padding:3px 8px; font-size:var(--text-2xs); font-weight:700;
      cursor:pointer; font-family:inherit; white-space:nowrap; }
    .pov-det-move:active { transform:scale(.97); }
    /* Wechsel-Karte: eine Zeile je Position. Bewusst ruhig — die Karte
       ist eine Liste von Wegen, keine Empfehlung, also kein Verlauf und
       kein Akzentfeld je Zeile. Der Pfeil rechts traegt die Farbe. */
    .sw-row { display:flex; align-items:center; gap:10px; width:100%;
      margin:6px 0 0; background:var(--card);
      border:1px solid var(--border-subtle); border-radius:var(--radius-sm);
      padding:10px 12px; cursor:pointer; font-family:inherit;
      color:var(--text); text-align:left; }
    .sw-row:active { transform:scale(.99); }
    .sw-row-ic { flex:0 0 auto; font-size:15px; }
    .sw-row-meta { flex:1 1 auto; min-width:0; }
    /* display:block ist Pflicht, nicht Geschmack: als Inline-Spans
       stuenden Subnetz und Validator auf EINER Zeile, und text-overflow
       greift auf einem Inline-Element gar nicht — ein langer
       Validatorname sprengte die Zeile, statt zu kuerzen. */
    .sw-row-title { display:block; font-size:13px; font-weight:800;
      overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .sw-row-sub { display:block; font-size:11px; color:var(--muted);
      overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .sw-row-amt { flex:0 0 auto; font-size:12px; font-weight:700;
      font-variant-numeric:tabular-nums; white-space:nowrap; }
    .sw-row-arrow { flex:0 0 auto; color:var(--cyan); font-size:16px;
      font-weight:800; }
    .pov-det-move-all { margin-top:6px; background:none;
      border:1px solid var(--border-medium); border-radius:8px;
      color:var(--text); padding:6px 10px; font-size:11.5px; font-weight:700;
      cursor:pointer; font-family:inherit; }
    /* Sortierkopf. Eine Zeile, scrollt seitlich statt umzubrechen —
       ein zweizeiliger Kopf über einer kompakten Liste kostet mehr Höhe
       als die Kompaktheit einbringt. */
    /* Zwei Bereiche: die Sortierpillen scrollen seitlich, der
       Staubknopf steht fest. In EINEM Scrollcontainer schiebt
       `margin-left:auto` ihn aus dem Sichtfeld statt an den Rand —
       er war dadurch abgeschnitten und wirkte kaputt. */
    .pov-sort-bar { display:flex; gap:6px; align-items:center; padding:2px 0 8px; }
    .pov-sort-pills { display:flex; gap:6px; overflow-x:auto; flex:1 1 auto;
      min-width:0; scrollbar-width:none; -webkit-overflow-scrolling:touch; }
    .pov-sort-pills::-webkit-scrollbar { display:none; }
    .pov-sort-pill, .pov-dust-btn {
      flex:0 0 auto; background:var(--surface-dim); border:1px solid var(--border-subtle);
      color:var(--muted); border-radius:999px; padding:5px 10px; font-size:11px;
      font-weight:700; font-family:inherit; cursor:pointer; white-space:nowrap;
      display:inline-flex; align-items:center; gap:4px; }
    .pov-sort-pill.active { border-color:var(--cyan);
      }
    .pov-sort-arrow { font-size:var(--text-2xs); line-height:1; }
    .pov-dust-btn.active { background:var(--surface-medium); color:var(--text); }
    .pov-hold-ch.pos { color:var(--green); }
    .pov-hold-ch.neg { color:var(--red); }
    .pov-share-track { height:3px; border-radius:2px; background:var(--surface-subtle); margin-top:8px; overflow:hidden; }
    /* Ein Ton für alle Anteilsbalken: die Länge ist die Aussage, nicht
       die Farbe. Vorher trug jeder Balken den Ton seiner Zeile — zwei
       Kodierungen für dieselbe Zahl, und die längere Aussage verlor. */
    .pov-share-fill { height:100%; border-radius:2px; min-width:2px; 
      }
    .pov-val-row {
      display:flex; justify-content:space-between; align-items:center; gap:8px;
      padding:5px 0 5px 40px; font-size:var(--text-2xs); color:var(--muted);
      border-bottom:1px dashed var(--border-subtle);
    }
    .pov-val-row:last-child { border-bottom:none; }
    .pov-val-row code { font-size:var(--text-2xs); }
    .pov-val-row .apy { color:var(--green); font-weight:700; }

    /* ── Stake-Historie (Portfolio-Tab) ─────────────
       Collapsed by default and loaded only on first expand: the history is a
       paid Taostats call, so nobody pays for it just by opening Portfolio. */
    .sh-block { margin-top:14px; border-top:1px solid var(--border-subtle); padding-top:12px; }
    .sh-sub { font-size:var(--text-2xs); color:var(--muted); margin:-2px 0 10px; line-height:1.4; }
    .sh-bar { display:flex; gap:0; margin-bottom:8px; background:var(--surface-dim);
      border-radius:10px; padding:2px; border:1px solid var(--border-subtle); overflow-x:auto; }
    .sh-bar-btn { flex:1 0 auto; text-align:center; padding:6px 9px; font-size:var(--text-2xs); font-weight:700;
      color:var(--muted); cursor:pointer; border-radius:8px; transition:all .2s; font-family:inherit;
      border:none; background:transparent; letter-spacing:.3px; white-space:nowrap; }
    .sh-bar-btn:hover { color:var(--text); background:rgba(255,255,255,.04); }
    .sh-bar-btn.active { background:rgba(46,211,224,.12); color:var(--cyan); box-shadow:0 0 6px rgba(46,211,224,.12); }
    .sh-tiles { display:grid; grid-template-columns:1fr 1fr 1fr; gap:6px; margin-bottom:10px; }
    .sh-tile { background:var(--surface-dim); border:1px solid var(--border-subtle);
      border-radius:12px; padding:9px 8px; text-align:center; }
    .sh-tile-lbl { font-size:var(--text-2xs); font-weight:800; letter-spacing:.9px; text-transform:uppercase; color:var(--muted); }
    .sh-tile-val { font-size:13px; font-weight:800; margin-top:4px; letter-spacing:-.2px; }
    .sh-tile-sub { font-size:var(--text-2xs); color:var(--muted); margin-top:2px; }
    .sh-tile.in .sh-tile-val { color:var(--green); }
    .sh-tile.out .sh-tile-val { color:var(--red); }
    .sh-meta { font-size:var(--text-2xs); color:var(--muted); margin-bottom:10px; line-height:1.5; }
    .sh-group-title { font-size:var(--text-2xs); font-weight:800; letter-spacing:1.1px; text-transform:uppercase;
      color:var(--muted); margin:12px 0 4px; }
    .sh-row { display:flex; align-items:center; gap:9px; padding:8px 2px;
      border-bottom:1px solid var(--border-subtle); }
    .sh-row:last-child { border-bottom:none; }
    .sh-ic { flex:0 0 auto; width:26px; height:26px; border-radius:9px; display:inline-flex;
      align-items:center; justify-content:center; font-size:12px; font-weight:800; }
    .sh-ic.in { background:var(--green-glow); color:var(--green); }
    .sh-ic.out { background:var(--red-glow); color:var(--red); }
    .sh-row-meta { flex:1 1 auto; min-width:0; }
    .sh-row-name { font-size:12.5px; font-weight:700; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .sh-row-sub { font-size:var(--text-2xs); color:var(--muted); margin-top:1px; overflow:hidden;
      text-overflow:ellipsis; white-space:nowrap; }
    .sh-row-right { flex:0 1 auto; text-align:right; min-width:0; max-width:52%; }
    .sh-row-right > div { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .sh-row-amt { font-size:12px; font-weight:700; }
    .sh-row-amt.in { color:var(--green); }
    .sh-row-amt.out { color:var(--red); }
    .sh-row-usd { font-size:var(--text-2xs); color:var(--muted); margin-top:1px; }
    .sh-net { font-size:11.5px; font-weight:800; }
    .sh-net.pos { color:var(--green); }
    .sh-net.neg { color:var(--red); }
    .sh-pager { display:flex; align-items:center; justify-content:center; gap:10px; margin-top:10px; }
    .sh-pager-btn { background:var(--surface-dim); border:1px solid var(--border-subtle);
      border-radius:9px; padding:5px 12px; font-size:12px; font-weight:700; color:var(--text);
      cursor:pointer; font-family:inherit; }
    .sh-pager-btn:disabled { opacity:.35; cursor:default; }
    .sh-pager-lbl { font-size:var(--text-2xs); color:var(--muted); font-weight:700; }
    .sh-more-btn { display:block; width:100%; margin-top:10px; padding:9px;
      background:var(--cyan-dim); border:1px solid rgba(46,211,224,.28); border-radius:11px;
      color:var(--cyan); font-size:12px; font-weight:800; cursor:pointer; font-family:inherit; }
    .sh-more-btn:disabled { opacity:.5; cursor:default; }
    .sh-note { font-size:var(--text-2xs); color:var(--muted); margin-top:9px; line-height:1.45; }
    .sh-csv-btn {
      display:block; width:100%; margin-top:8px; padding:8px;
      background:var(--surface-dim); border:1px solid var(--border-subtle);
      border-radius:11px; color:var(--text); font-size:11.5px; font-weight:700;
      cursor:pointer; font-family:inherit;
    }
    .sh-csv-btn:active { transform:scale(.98); opacity:.85; }
    .sh-err { padding:9px 10px; border-radius:9px; font-size:11px; line-height:1.4;
      background:rgba(242,88,94,.08); border:1px solid rgba(242,88,94,.25); color:var(--muted); }
    .pov-wallets-title { font-size:var(--text-2xs); font-weight:800; color:var(--muted); letter-spacing:1.2px; text-transform:uppercase; margin-bottom:6px; }
    .pov-wallet-row {
      display:flex; align-items:center; gap:8px; padding:8px 10px; margin-bottom:6px;
      border-radius:11px; background:var(--surface-dim); border:1px solid var(--border-subtle);
      cursor:pointer; transition:border-color var(--transition-fast), background var(--transition-fast);
    }
    .pov-wallet-row.active { border-color:rgba(46,211,224,.4); background:var(--cyan-dim); }
    .pov-wallet-dot { width:7px; height:7px; border-radius:50%; background:var(--muted); flex:0 0 auto; }
    .pov-wallet-row.active .pov-wallet-dot { background:var(--cyan); box-shadow:0 0 6px var(--cyan); }
    .pov-wallet-addr { flex:1 1 auto; min-width:0; font-family:monospace; font-size:11px; color:var(--muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .pov-wallet-row.active .pov-wallet-addr { color:var(--cyan); }
    .pov-wallet-x { flex:0 0 auto; background:none; border:none; color:var(--muted); font-size:13px; cursor:pointer; padding:2px 6px; line-height:1; }
    .pov-wallet-x:active { color:var(--red); }

    /* ── Premium Badge ──────────────────────────────── */
    .phs { font-size:var(--text-2xs);font-weight:700;padding:2px 8px;border-radius:8px;display:inline-block;margin-top:4px; }
    .sf2 { background:rgba(255,255,255,.08);color:var(--muted); }
    .sp { background:rgba(46,211,224,.15);color:var(--cyan); }
    .pt { font-size:var(--text-2xs);font-weight:700;padding:2px 8px;border-radius:8px;background:rgba(46,211,224,.1);color:var(--cyan);cursor:pointer;display:inline-flex;align-items:center;gap:4px; }

    /* ── Signals ─────────────────────────────────────── */
    .signals-section { padding:16px;margin-bottom:16px; }
    .signals-section h2 { margin-bottom:12px;}
    .signal-row { padding:10px 0;border-bottom:1px solid rgba(255,255,255,.06);cursor:pointer; }
    .signal-row:last-child { border-bottom:none; }
    .signal-row:active { opacity:.7; }
    .signal-title { font-size:13px;font-weight:600;margin-bottom:2px; }
    .signal-desc { font-size:11px;color:var(--muted); }
    .signal-row.high .signal-title { color:var(--red); }
    .signal-row.medium .signal-title { color:var(--gold); }
    .signal-row.low .signal-title { color:var(--cyan); }

    /* ── Premium Days Badge ──────────────────────────── */
    .prem-days-badge {
      display:inline-flex;align-items:center;gap:5px;
      font-size:11px;font-weight:700;padding:2px 8px;border-radius:8px;
      background:rgba(46,211,224,.15);color:var(--cyan);cursor:pointer;
    }
    .prem-days-badge.expired { background:rgba(255,255,255,.07);color:var(--muted);border-color:rgba(255,255,255,.1); }

    /* ── Leaderboard ─────────────────────────────────── */
    .lb-section { padding:16px;margin-bottom:16px; }
    .lb-section h2 { margin-bottom:4px;}
    .lb-total { font-size:11px;color:var(--muted);margin-bottom:14px; }
    .lb-total span { color:var(--cyan);font-weight:700; }
    .lb-hdr { display:flex;align-items:center;gap:6px;padding:0 0 6px;border-bottom:1px solid rgba(255,255,255,.1);margin-bottom:4px; }
    .lb-hdr span { font-size:var(--text-2xs);font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.3px; }
    .lb-hdr .lbh-rank { width:26px;text-align:center;flex-shrink:0; }
    .lb-hdr .lbh-name { flex:1;min-width:0; }
    .lb-hdr .lbh-ref   { width:72px;text-align:right;flex-shrink:0; }
    .lb-row { display:flex;align-items:center;gap:6px;padding:7px 0;border-bottom:1px solid rgba(255,255,255,.06); }
    .lb-row:last-child { border-bottom:none; }
    .lb-rank { width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;flex-shrink:0; }
    .lb-rank.r1 { background:rgba(240,180,41,.15);color:var(--gold); }
    .lb-rank.r2 { background:rgba(192,192,192,.15);color:#c0c0c0; }
    .lb-rank.r3 { background:rgba(205,127,50,.15);color:#cd7f32; }
    .lb-rank.rn { background:rgba(255,255,255,.06);color:var(--muted); }
    .lb-name { flex:1;font-size:12px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0; }
    .lb-count { width:72px;text-align:right;font-size:11px;font-weight:700;color:var(--cyan);flex-shrink:0; }
    .lb-empty { text-align:center;padding:16px;color:var(--muted);font-size:12px; }
    .lb-subtitle { font-size:11px;color:var(--muted);margin-bottom:8px; }

    /* ── Price Alerts ────────────────────────────────── */
    .alert-form { margin-bottom:4px; }
    .pal-seg {
      grid-template-columns:1fr 1fr; 
      margin-bottom:8px;
    }
    .pal-seg-btn {
      display:inline-flex; align-items:center; justify-content:center; gap:6px;
      padding:9px 10px; 
      font-family:inherit; cursor:pointer;
      transition:background var(--transition-fast), color var(--transition-fast), border-color var(--transition-fast);
    }
    .pal-seg-arrow { font-size:var(--text-2xs); line-height:1; }
    .pal-seg-btn.above.active { border-color:rgba(47,212,138,.35); }
    .pal-seg-btn.below.active { border-color:rgba(242,88,94,.35); }
    .pal-input-row { display:flex; gap:8px; }
    .pal-target { display:flex; align-items:center; gap:8px; margin:0 0 8px;
      padding:6px 10px; border:1px solid var(--border-subtle);
      border-radius:var(--radius-pill,999px); font-size:12px;
      color:var(--muted); font-variant-numeric:tabular-nums; }
    .pal-target .pal-target-x { margin-left:auto; background:none; border:0;
      color:var(--muted); font-size:13px; cursor:pointer; padding:2px 4px;
      font-family:inherit; }
    .pal-input-wrap { position:relative; flex:1 1 auto; min-width:0; }
    .pal-cur { position:absolute; left:13px; top:50%; transform:translateY(-50%); color:var(--muted); font-size:13px; font-weight:700; pointer-events:none; }
    .pal-input-wrap input {
      width:100%; box-sizing:border-box;
      background:var(--surface-subtle); border:1px solid var(--border-medium);
      border-radius:12px; padding:11px 12px 11px 28px;
      color:var(--text); font-size:14px; font-weight:600; font-family:inherit; outline:none;
      transition:border-color var(--transition-fast), box-shadow var(--transition-fast);
    }
    .pal-input-wrap input::placeholder { color:var(--muted); font-weight:500; }
    .pal-input-wrap input:focus { border-color:rgba(46,211,224,.55); box-shadow:0 0 0 3px rgba(46,211,224,.10); }
    .pal-add-btn {
      flex:0 0 auto;
      padding:0 18px;
      cursor:pointer; font-family:inherit; white-space:nowrap;
      transition:transform var(--transition-fast), opacity var(--transition-fast);
    }
    .pal-add-btn:active { transform:scale(.96); opacity:.85; }
    .alert-item {
      display:flex; align-items:center; gap:10px;
      padding:10px 12px; margin-top:8px;
      border-radius:13px;
      background:var(--surface-dim); border:1px solid var(--border-subtle);
      font-size:13px;
      animation:palIn .25s var(--ease-out);
    }
    @keyframes palIn { from { opacity:0; transform:translateY(4px); } to { opacity:1; transform:none; } }
    .alert-dir {
      flex:0 0 auto; width:30px; height:30px; border-radius:10px;
      display:inline-flex; align-items:center; justify-content:center;
      font-size:12px; font-weight:800;
    }
    .alert-dir.above { background:var(--green-glow); color:var(--green); }
    .alert-dir.below { background:var(--red-glow); color:var(--red); }
    .alert-main { flex:1 1 auto; min-width:0; }
    .alert-price { font-size:14px; font-weight:800; letter-spacing:.2px; }
    .alert-cond { font-size:var(--text-2xs); color:var(--muted); margin-top:2px; }
    .alert-cond .pos { color:var(--green); font-weight:700; }
    .alert-cond .neg { color:var(--red); font-weight:700; }
    .alert-item .alert-remove {
      flex:0 0 auto; width:30px; height:30px; border-radius:10px;
      display:inline-flex; align-items:center; justify-content:center;
      background:var(--surface-dim); border:1px solid var(--border-subtle);
      color:var(--muted); font-size:14px; cursor:pointer; line-height:1; padding:0;
      transition:color var(--transition-fast), border-color var(--transition-fast);
    }
    .alert-item .alert-remove:active { color:var(--red); border-color:rgba(242,88,94,.4); }
    .pal-empty { text-align:center; padding:20px 12px 14px; }
    .pal-empty-ic {
      width:54px; height:54px; margin:0 auto 10px; 
      display:flex; align-items:center; justify-content:center;
    }
    .pal-empty-title { font-size:13px; font-weight:700; }
    .pal-empty-sub { font-size:11px; color:var(--muted); margin-top:4px; line-height:1.5; }

    /* ── News ────────────────────────────────────────── */
    .news-section { padding:16px;margin-bottom:16px; }
    .news-section h2 { margin-bottom:12px;}
    .news-item { padding:10px 0;border-bottom:1px solid rgba(255,255,255,.06); }
    .news-item:last-child { border-bottom:none; }
    .news-title { font-size:13px;font-weight:600;color:var(--text);text-decoration:none;display:block;margin-bottom:3px;line-height:1.4; }
    .news-title:active { opacity:.7; }
    .news-meta { font-size:11px;color:var(--muted); }
    /* X posts (Tensor Media & co.) lead the feed — accent them so they read as
       a different kind of item than a scraped RSS headline. */
    .news-item.is-x { border-left:2px solid rgba(46,211,224,.35);padding-left:9px; }
    .news-item.is-x .news-meta { color:var(--cyan); }
    .news-summary { font-size:11.5px;color:var(--muted);margin-top:3px;line-height:1.45; }
    .news-empty { text-align:center;padding:16px;color:var(--muted);font-size:12px; }
    .news-translate-btn { display:inline-flex;align-items:center;gap:3px;margin-top:5px;font-size:11px;font-weight:600;color:var(--cyan);cursor:pointer;background:rgba(46,211,224,.08);border:1px solid rgba(46,211,224,.25);border-radius:10px;padding:2px 8px;transition:background .15s; }
    .news-translate-btn:active { background:rgba(46,211,224,.18); }
    .news-translated { font-size:12px;color:var(--muted);margin-top:5px;line-height:1.4;font-style:italic; }

    /* ── Referral ─────────────────────────────────────── */
    .ref-section { padding:16px;margin-bottom:16px; }
    .ref-section h2 { margin-bottom:12px;}
    .ref-link-box { display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:10px 12px;margin-bottom:14px; }
    .ref-link-text { flex:1;font-size:11px;color:var(--cyan);font-family:monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
    .ref-copy-btn { padding:7px 14px;cursor:pointer;font-family:inherit;white-space:nowrap;flex-shrink:0; }
    .ref-copy-btn:active { opacity:.8; }
    .ref-stats { display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:12px; }
    .ref-stat-card { background:rgba(255,255,255,.04);border-radius:8px;padding:10px;text-align:center; }
    .ref-stat-val { font-size:20px;font-weight:800;color:var(--cyan); }
    .ref-stat-lbl { font-size:var(--text-2xs);color:var(--muted);margin-top:2px; }
    .ref-hint { font-size:11px;color:var(--muted);line-height:1.5;text-align:center; }
    .ref-hint strong { color:var(--text); }
    .coupon-box { margin-top:14px;padding-top:14px;border-top:1px solid rgba(255,255,255,.08); }
    .coupon-box-title { font-size:12px;color:var(--text);font-weight:700;margin-bottom:8px;text-align:center; }
    .coupon-input-row { display:flex;gap:8px;align-items:center; }
    .coupon-input { flex:1;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:10px;padding:10px 12px;color:var(--text);font-family:monospace;font-size:13px;letter-spacing:1px;text-transform:uppercase;outline:none; }
    .coupon-input:focus { border-color:rgba(46,211,224,.5); }
    .coupon-input::placeholder { color:rgba(255,255,255,.25);letter-spacing:.5px; }
    .coupon-submit-btn { padding:10px 16px;cursor:pointer;font-family:inherit;white-space:nowrap;flex-shrink:0; }
    .coupon-submit-btn:disabled { opacity:.4;cursor:not-allowed; }
    .coupon-submit-btn:active:not(:disabled) { opacity:.8; }
    .coupon-result { font-size:12px;line-height:1.5;margin-top:10px;padding:8px 10px;border-radius:8px;display:none; }
    .coupon-result.show { display:block; }
    .coupon-result.ok { background:rgba(46,211,224,.10);border:1px solid rgba(46,211,224,.3);color:var(--cyan); }
    .coupon-result.warn { background:rgba(255,189,67,.10);border:1px solid rgba(255,189,67,.35);color:#ffbd43; }
    .coupon-result.err { background:rgba(255,80,80,.10);border:1px solid rgba(255,80,80,.3);color:#ff6464; }

    /* ── Premium Modal ──────────────────────────────── */
    .prm-overlay {
      position:fixed;inset:0;z-index:2000;display:flex;align-items:flex-end;
      background:rgba(0,0,0,.6);backdrop-filter:blur(4px);
    }
    .prm-overlay.hidden { display:none; }
    .prm-sheet {
      width:100%;background:var(--card);border-radius:20px 20px 0 0;
      padding:24px 20px 32px;max-height:90vh;overflow-y:auto;
      animation:slideUp .25s ease;
    }
    @keyframes slideUp { from { transform:translateY(100%); } to { transform:translateY(0); } }
    .prm-close-row { display:flex;justify-content:flex-end;margin-bottom:4px; }
    .prm-close-btn { background:none;border:none;color:var(--muted);font-size:20px;cursor:pointer;padding:4px 8px;line-height:1; }
    .prm-title { font-size:20px;font-weight:900;text-align:center;margin-bottom:4px; }
    .prm-subtitle { font-size:12px;color:var(--muted);text-align:center;margin-bottom:18px; }
    .prm-features { list-style:none;padding:0;margin:0 0 20px; }
    .prm-features li { display:flex;align-items:center;gap:10px;font-size:13px;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.06); }
    .prm-features li:last-child { border-bottom:none; }
    .prm-features .fi { font-size:16px;flex-shrink:0; }
    .prm-price-row { display:flex;align-items:center;justify-content:center;gap:8px;margin-bottom:20px; }
    .prm-stars { font-size:22px;font-weight:900;color:var(--cyan); }
    .prm-stars-lbl { font-size:12px;color:var(--muted); }
    .prm-buy-btn {
      width:100%;padding:15px;
      cursor:pointer;
      font-family:inherit;letter-spacing:.3px;
    }
    .prm-buy-btn:active { opacity:.85; }
    .prm-buy-btn:disabled { opacity:.5;cursor:not-allowed; }
    .prm-active-info { text-align:center;padding:14px;background:rgba(46,211,224,.08);border-radius:12px;margin-bottom:16px; }
    .prm-active-info .prm-ai-days { font-size:22px;font-weight:900;color:var(--cyan); }
    .prm-active-info .prm-ai-lbl { font-size:12px;color:var(--muted);margin-top:2px; }

    /* ── Oracle Stat Cards ─────────────────────────── */
    .oracle-stats { display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:9px }
    .os-card { padding:12px;cursor:pointer;}
    .os-card:active { border-color:var(--cyan) }
    /* Filterkacheln vs. Wertkacheln: im selben Raster stehen zwei
       Bedeutungen. Top Rated und Top Momentum nennen ein Subnetz,
       Strong Buys und Hidden Gems eine Trefferzahl, die beim Antippen
       die Liste filtert. Ein gestrichelter Rand sagt „hier passiert
       etwas", ohne eine fünfte Farbe einzuführen. */
    .os-card--filter { border-style:dashed;border-color:var(--border-medium) }
    .os-card--filter:active { border-style:solid;border-color:var(--cyan) }
    .os-card--filter .os-sub { color:var(--cyan);opacity:.85 }
    .os-lbl { font-size:var(--text-2xs);font-weight:700;color:var(--muted);letter-spacing:.5px;text-transform:uppercase;margin-bottom:4px }
    .os-val { font-size:20px;font-weight:800 }
    .os-sub { font-size:var(--text-2xs);color:var(--muted);margin-top:2px }
    .os-meta { font-size:var(--text-2xs);color:var(--muted);text-align:center;margin-bottom:9px }

    /* ── Premium gate: On-Chain Rating System (blur + CTA) ── */
    .prem-rate-wrap { position:relative }
    .oracle-stats.prem-locked { position:relative }
    .oracle-stats.prem-locked .os-card { filter:blur(7px);opacity:.6;pointer-events:none;user-select:none }
    .prem-rate-blur { filter:blur(7px);opacity:.6;pointer-events:none;user-select:none }
    .srm-o.locked { filter:blur(4px);user-select:none }
    .prem-rate-cta {
      position:absolute;inset:0;z-index:4;display:flex;flex-direction:column;
      align-items:center;justify-content:center;gap:5px;text-align:center;
      padding:12px;cursor:pointer;border-radius:var(--radius);
      background:linear-gradient(180deg,rgba(10,12,30,.28),rgba(10,12,30,.45));
      backdrop-filter:blur(1px);-webkit-backdrop-filter:blur(1px);
    }
    .prem-rate-cta .prc-lock { font-size:22px;line-height:1 }
    .prem-rate-cta .prc-title { font-size:13px;font-weight:800;color:var(--text) }
    .prem-rate-cta .prc-sub { font-size:var(--text-2xs);color:var(--muted);max-width:250px;line-height:1.4 }
    .prem-rate-cta .prc-btn {
      margin-top:4px;font-size:11px;font-weight:700;color:var(--cyan);
      border:1px solid var(--cyan);border-radius:13px;padding:5px 14px;
      background:var(--cyan-dim,rgba(46,211,224,.08));
    }
    .prem-rate-cta:active .prc-btn { transform:scale(.97) }
    /* Generic placeholder rows shown (blurred) behind the lock when the
       server withholds premium data — so the card reads as a locked
       preview, not an empty/error state. */
    .prem-skel-row { height:34px;border-radius:8px;margin-bottom:8px;
      background:linear-gradient(90deg,rgba(255,255,255,.05),rgba(255,255,255,.10),rgba(255,255,255,.05)) }
    .prem-skel-row:last-child { margin-bottom:0 }

    /* ── Oracle Info Box ───────────────────────────── */
    .oracle-info-box { padding:10px 12px;margin-bottom:12px;font-size:11px }
    .oracle-info-toggle { display:flex;justify-content:space-between;align-items:center;cursor:pointer;color:var(--muted);font-weight:700;user-select:none }
    .oracle-info-body { margin-top:8px;border-top:1px solid rgba(255,255,255,.05);padding-top:8px }
    .oracle-info-section { margin-bottom:8px }
    .oracle-info-section:last-child { margin-bottom:0 }
    .oracle-info-title { font-size:11px;font-weight:700;color:var(--text);margin-bottom:3px }
    .oracle-info-text { font-size:var(--text-2xs);color:var(--muted);line-height:1.6 }

    /* ── GEM vs BUY explainer ──────────────────────── */
    .gem-buy-info-btn {
      flex:0 0 auto;
      font-size:11px;font-weight:700;cursor:pointer;
      display:inline-flex;align-items:center;gap:5px;
      transition:color var(--transition-fast),border-color var(--transition-fast),background var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast);
      line-height:1;align-self:center;white-space:nowrap;
    }
    .gem-buy-info-btn .gbi-icon { line-height:1 }
    .gem-buy-info-btn .gbi-text { letter-spacing:.2px }
    @keyframes gemBuyInfoPulse {
      0%,100% { box-shadow:0 0 0 0 var(--cyan-glow) }
      50%     { box-shadow:0 0 0 6px rgba(46,211,224,0) }
    }
    .gem-buy-info-btn:hover,
    .gem-buy-info-btn.active {
      border-color:var(--cyan);
      animation:none;
    }
    .quad-compare {
      padding:12px 14px;margin:4px 0 12px;
      font-size:11px;line-height:1.55;color:var(--text);
    }
    .quad-compare .qc-title { font-weight:700;font-size:12px;margin-bottom:6px;color:var(--text) }
    .quad-compare .qc-short { color:var(--muted);margin-bottom:8px }
    .quad-compare .qc-row { padding:6px 8px;border-radius:8px;margin-bottom:4px;background:var(--surface-dim);border-left:3px solid transparent }
    .quad-compare .qc-row.gem { border-left-color:var(--cyan);color:var(--text) }
    .quad-compare .qc-row.buy { border-left-color:var(--green);color:var(--text) }
    .quad-compare .qc-row:last-child { margin-bottom:0 }
    html[dir="rtl"] .quad-compare .qc-row { border-left:none;border-right:3px solid transparent }
    html[dir="rtl"] .quad-compare .qc-row.gem { border-right-color:var(--cyan) }
    html[dir="rtl"] .quad-compare .qc-row.buy { border-right-color:var(--green) }

    /* ── Alpha Matrix (SVG) ────────────────────────── */
    .matrix-title { font-size:12px;font-weight:700;margin-bottom:10px;color:var(--text) }
    .matrix-tooltip { position:absolute;z-index:400;background:var(--card);border:1px solid rgba(46,211,224,.3);border-radius:10px;padding:10px 12px;pointer-events:none;font-size:11px;color:var(--text);min-width:160px;box-shadow:0 4px 20px rgba(0,0,0,.5) }
    .matrix-tooltip .mt-name { font-weight:700;margin-bottom:4px }
    .matrix-tooltip .mt-row { display:flex;justify-content:space-between;gap:12px }
    .matrix-tooltip .mt-lbl { color:var(--muted) }

    /* ── Tier pills ────────────────────────────────── */
    .tier-pill { display:inline-block;font-size:var(--text-2xs);font-weight:800;padding:1px 4px;border-radius:4px;vertical-align:middle;margin-left:4px }
    .tier-pill.t1 { background:rgba(46,211,224,.15);color:var(--cyan) }
    .tier-pill.t2 { background:rgba(100,140,200,.15);color:#8ba4c8 }
    .tier-pill.t3 { background:rgba(255,255,255,.08);color:var(--muted) }

    /* ── Quadrant badge ────────────────────────────── */
    .q-badge { font-size:var(--text-2xs);font-weight:700 }
    .q-badge.hidden_gem { color:var(--cyan) }
    .q-badge.strong_buy { color:var(--green) }
    .q-badge.established { color:var(--purple) }
    .q-badge.watch { color:var(--red) }

    /* ── Subnet View Toggle ────────────────────────── */
    .sn-view-toggle { margin:0 0 0 0;margin-bottom:10px }
    .svt { flex:1;padding:7px 0;text-align:center;font-size:12px;font-weight:600;cursor:pointer;border-radius:7px;color:#e4e4f0;transition:all .2s;user-select:none }
    /* Inactive Matrix / Heat tabs keep their accent colour so they don't disappear */
    .svt.matrix { color:#b89bff;background:#9c6fff14;border:1px solid #9c6fff33 }
    .svt.heat   { color:#ff9a6c;background:#ff6a3d14;border:1px solid #ff6a3d33 }
    .svt.active { background:#16162a;color:#e4e4f0;border:1px solid #242440 }
    .svt.active.matrix { color:#c9b3ff;border-color:#9c6fff;background:#9c6fff22;box-shadow:0 0 0 1px #9c6fff55, 0 0 12px #9c6fff55 }
    .svt.active.heat   { color:#ffd1b8;border-color:#ff6a3d;background:#ff6a3d22;box-shadow:0 0 0 1px #ff6a3d55, 0 0 12px #ff6a3d55 }
    /* Subtle attention pulse on inactive Matrix/Heat to flag the views */
    .svt.matrix:not(.active) { animation: svt-attn-matrix 2.6s ease-in-out infinite }
    .svt.heat:not(.active)   { animation: svt-attn-heat   2.6s ease-in-out infinite 1.3s }
    @keyframes svt-attn-matrix {
      0%, 100% { box-shadow: 0 0 0 0 rgba(156,111,255,0); }
      50%      { box-shadow: 0 0 0 2px rgba(156,111,255,.22); }
    }
    @keyframes svt-attn-heat {
      0%, 100% { box-shadow: 0 0 0 0 rgba(255,106,61,0); }
      50%      { box-shadow: 0 0 0 2px rgba(255,106,61,.22); }
    }

    /* ── Matrix Stat Cards ─────────────────────────── */
    .m-stats { display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:0 16px 10px }
    .m-stat-card { background:var(--card);padding:12px;}
    .m-sc-lbl { font-size:var(--text-2xs);font-weight:700;color:var(--muted);letter-spacing:.5px;text-transform:uppercase;margin-bottom:4px }
    .m-sc-val { font-size:20px;font-weight:800 }

    /* ── Canvas Chart Card ─────────────────────────── */
    .chart-card { margin:0 16px 10px;padding:10px;overflow:hidden }
    .canvas-wrap { position:relative;height:340px;overflow:hidden }
    .canvas-wrap canvas { width:100%;height:100%;display:block }
    .mc-tooltip { position:fixed;z-index:500;background:#16162a;border:1px solid rgba(0,212,184,.3);border-radius:10px;padding:9px 12px;pointer-events:none;font-size:11px;color:var(--text);min-width:150px;box-shadow:0 4px 20px rgba(0,0,0,.6);display:none }
    .mc-tooltip .mct-name { font-weight:700;margin-bottom:4px }
    .mc-tooltip .mct-row { display:flex;justify-content:space-between;gap:10px;margin-top:2px }
    .mc-tooltip .mct-lbl { color:var(--muted) }

    /* ── Glow Filter Pills ─────────────────────────── */
    .glow-filter { display:flex;gap:6px;padding:0 16px 10px;overflow-x:auto;scrollbar-width:none }
    .glow-filter::-webkit-scrollbar { display:none }
    .glow-sort-bar { display:flex;gap:6px;padding:0 16px 8px; }
    .gf-pill { flex-shrink:0;padding:5px 12px;cursor:pointer;white-space:nowrap }
    .gf-pill.active { border-color:rgba(156,111,255,.4);}

    /* ── Glow Grid & Cards ─────────────────────────── */
    .glow-grid { display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:0 16px 24px }
    .glow-card { border-radius:14px;padding:12px;cursor:pointer;position:relative;overflow:hidden;}
    .glow-card:active { transform:scale(0.96) }
    .glow-card.gem { background:linear-gradient(145deg,#0d1f1e,#0a1512);border-color:#00d4b830;box-shadow:0 0 18px #00d4b818,0 4px 16px #00000060 }
    .glow-card.str { background:linear-gradient(145deg,#0d1f12,#091510);border-color:#2fd48a30;box-shadow:0 0 18px #2fd48a18,0 4px 16px #00000060 }
    .glow-card.wat { background:linear-gradient(145deg,#1f0d10,#150a0c);border-color:#ff445530;box-shadow:0 0 18px #ff445518,0 4px 16px #00000060 }
    .glow-card.est { background:linear-gradient(145deg,#1f1a0d,#15120a);border-color:#ffb30030;box-shadow:0 0 18px #ffb30018,0 4px 16px #00000060 }
    .glow-card::before { content:'';position:absolute;top:-20px;right:-20px;width:70px;height:70px;border-radius:50%;opacity:.12;animation:glowPulse 3s ease-in-out infinite }
    .glow-card.gem::before { background:#00d4b8 }
    .glow-card.str::before { background:var(--green) }
    .glow-card.wat::before { background:#ff4455 }
    .glow-card.est::before { background:#ffb300 }
    @keyframes glowPulse { 0%,100%{opacity:.10;transform:scale(1)} 50%{opacity:.22;transform:scale(1.15)} }
    .mc-qlabel-row { display:flex;justify-content:space-between;padding:0 6px;pointer-events:none }
    .mc-qlabel-row.top { padding-bottom:4px }
    .mc-qlabel-row.bottom { padding-top:4px }
    .mc-qlabel { font-size:var(--text-2xs);font-weight:700;border-radius:5px;padding:2px 7px }
    .mc-qlabel.gem { color:#00d4b8;background:rgba(0,212,184,.12) }
    .mc-qlabel.str { color:var(--green);background:rgba(47,212,138,.12) }
    .mc-qlabel.wat { color:#ff4455;background:rgba(255,68,85,.12) }
    .mc-qlabel.est { color:#ffb300;background:rgba(255,179,0,.12) }

    /* ── Signal pills ──────────────────────────────── */
    .sig-pill { display:inline-block;font-size:var(--text-2xs);font-weight:700;padding:2px 8px;border-radius:8px;margin:2px }
    .sig-pill.ACCELERATING { background:rgba(47,212,138,.15);color:var(--green) }
    .sig-pill.UNDERVALUED { background:rgba(46,211,224,.15);color:var(--cyan) }
    .sig-pill.FILLING_UP,.sig-pill.HIGH_EMISSION { background:rgba(240,180,41,.15);color:var(--gold) }
    .sig-pill.EARLY_STAGE { background:rgba(143,157,255,.15);color:var(--purple) }
    .sig-pill.PEAK_EFFICIENCY { background:rgba(255,193,7,.15);color:#ffc107 }
    .sig-pill.MOMENTUM_LOSS { background:rgba(242,88,94,.15);color:var(--red) }
    .sig-pill.VALIDATOR_RICH,.sig-pill.LIQUID { background:rgba(66,165,245,.15);color:#42a5f5 }
    .sig-pill.LIQUID { background:rgba(47,212,138,.15);color:var(--green) }
    .sig-pill.LOW_DATA { background:rgba(255,255,255,.08);color:var(--muted);border:1px dashed rgba(255,255,255,.25) }
    .sig-pill.OWNER_LOCKED { background:rgba(240,180,41,.15);color:var(--gold) }
    .sig-pill.OWNER_SELLING,.sig-pill.DEATH_WATCH,.sig-pill.DELISTED { background:rgba(242,88,94,.15);color:var(--red) }
    .sig-pill.DELISTED { border:1px solid rgba(242,88,94,.4) }
    .sig-pill.THIN_LIQUIDITY { background:rgba(255,145,0,.15);color:#ff9100 }
    .sig-pill.NEG_FLOW { background:rgba(242,88,94,.12);color:var(--red);border:1px solid rgba(242,88,94,.3) }

    /* ── Skeleton loading ──────────────────────────── */
    .skel { border-radius:8px }
    @keyframes skelPulse { 0% { background-position:200% 0 } 100% { background-position:-200% 0 } }

    /* ── Row flash on update ───────────────────────── */
    .si.flash { background:rgba(46,211,224,.08);transition:background-color 0s }
    .si.flash-out { background:transparent;transition:background-color .3s }

    /* ── Score progress bar in detail modal ─────────── */

    /* ── Subnet section transition ─────────────────── */
    .subnet-section { transition:opacity .2s,transform .2s }

    /* ── AI Chatbot Teaser ─────────────────────────── */
    .ai-teaser {
      padding: 14px 16px;
      margin-bottom: 9px;
      cursor: pointer;
      display: flex;
      align-items: center;
      gap: 12px;
      transition: border-color .2s, transform .15s;
    }
    .ai-teaser:active { transform: scale(.98); }
    .ai-teaser-icon {
      width: 42px; height: 42px;
      border-radius: 50%;
      display: flex; align-items: center; justify-content: center;
      font-size: 20px; flex-shrink: 0;
    }
    .ai-teaser-text { flex: 1; min-width: 0; }
    .ai-teaser-title {
      color: var(--text);
      margin-bottom: 2px;
    }
    .ai-teaser-arrow { font-size: 16px; color: var(--cyan); flex-shrink: 0; }
    .ai-teaser-quota {
      font-weight: 600;
      padding: 2px 8px; border-radius: 10px;
      flex-shrink: 0;
    }

    /* FRONTLINE keeps the host's card language and opens its own full-screen game. */
    .frontline-icon { color: var(--text); background: var(--k-fill); }
    .frontline-detail { margin-top: 5px; font-size: 12px; color: var(--muted); line-height: 1.4; }
    .frontline-tag {
      flex: 0 0 auto; padding: 4px 8px; border-radius: 6px;
      font-size: 12px; font-weight: 600; color: var(--text); background: var(--k-fill);
    }
    #frontlineGameEntry .more-ic { color: var(--text); }
    @media (max-width: 380px) {
      #frontlineTeaser { gap: 9px; padding: 14px 12px; flex-wrap: wrap; }
      #frontlineTeaser .ai-teaser-text { flex-basis: calc(100% - 76px); }
      #frontlineTeaser .frontline-tag { margin-left: 51px; }
      #frontlineTeaser .ai-teaser-arrow { margin-left: auto; }
    }

    /* ── Latest Subnet Registration Timeline ───────── */
    .new-sn-box {
      padding: 10px 12px 12px;
      margin-bottom: 9px;
    }
    .new-sn-head-row {
      display: flex; align-items: center; justify-content: space-between;
      margin-bottom: 8px;
    }
    .new-sn-head {
      display: flex; align-items: center; gap: 6px;
    }
    .new-sn-ico { font-size: 14px; }
    .new-sn-label {
      text-transform: uppercase;
      letter-spacing: .5px;
    }
    .new-sn-live-dot {
      width: 6px; height: 6px; border-radius: 50%;
      animation: pulseDot 1.6s ease-in-out infinite;
    }
    @keyframes pulseDot {
      0%, 100% { opacity: 1; }
      50% { opacity: .35; }
    }
    .new-sn-timeline {
      display: flex; gap: 8px;
      overflow-x: auto;
      scroll-snap-type: x mandatory;
      -webkit-overflow-scrolling: touch;
      scrollbar-width: none;
      padding-bottom: 2px;
    }
    .new-sn-timeline::-webkit-scrollbar { display: none; }
    .new-sn-pill {
      flex: 0 0 auto;
      min-width: 90px;
      border-radius: 12px;
      padding: 8px 10px;
      scroll-snap-align: start;
      cursor: pointer;
      position: relative;
      transition: transform .15s, border-color .2s;
    }
    .new-sn-pill:active { transform: scale(.97); }
    .new-sn-pill.newest {
      border-color: rgba(32,210,122,.45);
    }
    .new-sn-pill.newest::before {
      content: '';
      position: absolute;
      top: 6px; right: 6px;
      width: 6px; height: 6px; border-radius: 50%;
      background: #20d27a;
      box-shadow: 0 0 6px #20d27a;
      animation: pulseDot 1.6s ease-in-out infinite;
    }
    .new-sn-pill-uid {
      font-size: 13px; font-weight: 800; color: var(--cyan);
      font-family: 'DM Mono', monospace;
    }
    .new-sn-pill-name {
      font-size: var(--text-2xs); color: var(--text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      max-width: 110px;
      margin-top: 1px;
    }
    .new-sn-pill-ago {
      font-size: var(--text-2xs); color: var(--muted); margin-top: 2px;
    }
    .new-sn-placeholder {
      font-size: 11px; color: var(--muted); padding: 6px 2px;
    }

    /* ── Top Gainer / Loser Cards ───────────────────── */
    .mover-row {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 8px;
      margin-bottom: 9px;
    }
    .mover {
      padding: 10px 12px;
      cursor: pointer;
      transition: transform .15s, border-color .2s;
      min-width: 0;
    }
    .mover:active { transform: scale(.98); }
    .mover-gain {
      background: linear-gradient(135deg, rgba(32,210,122,.18), rgba(32,210,122,.04));
      border-color: rgba(32,210,122,.35);
    }
    .mover-loss {
      background: linear-gradient(135deg, rgba(255,69,96,.18), rgba(255,69,96,.04));
      border-color: rgba(255,69,96,.35);
    }
    .mover-head {
      display: flex; align-items: center; gap: 4px;
      font-size: var(--text-2xs); font-weight: 700;
      color: var(--muted); text-transform: uppercase;
      letter-spacing: .4px;
      margin-bottom: 4px;
    }
    .mover-ico { font-size: 12px; }
    .mover-name {
      color: var(--text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      margin-bottom: 3px;
    }
    .mover-sub {
      display: flex; align-items: baseline; gap: 8px;
      font-family: 'DM Mono', monospace;
    }
    .mover-pct { font-size: 13px; font-weight: 800; }
    .mover-pct-pos { color: #20d27a; }
    .mover-pct-neg { color: #ff4d4d; }
    .mover-price { font-size: var(--text-2xs); color: var(--muted); }

    /* ── Market Breadth Gauge (hero) ─────────────────── */
    .breadth-gauge {
      display: flex; flex-direction: column;
      align-items: center; justify-content: center;
      gap: 0; flex-shrink: 0;
      margin-left: auto;
    }
    .breadth-gauge svg { display: block; }
    .breadth-val {
      font-size: var(--text-2xs); font-weight: 800;
      color: var(--text);
      margin-top: -6px;
    }
    .breadth-lbl {
      margin-top: 1px;
    }

    /* ── Price chart: period-change pill in the header ── */
    .cht-chg {
      display: inline-flex; align-items: center;
      margin-left: 8px; margin-right: auto;
      padding: 2px 7px; border-radius: 999px;
      font: 700 10px/1.3 'DM Mono', monospace;
      font-variant-numeric: tabular-nums;
      background: var(--surface-dim); color: var(--muted);
    }
    .cht-chg:empty { display: none; }
    .cht-chg.pos { background: var(--green-glow); color: var(--green); border-color: rgba(47,212,138,.3); }
    .cht-chg.neg { background: var(--red-glow); color: var(--red); border-color: rgba(242,88,94,.3); }

    /* ── Flow Tabs ──────────────────────────────────── */
    .flow-tab {
      padding: 6px 8px;
      cursor: pointer;
      transition: all .2s;
    }
    .flow-tab.on {
      border-color: rgba(46,211,224,.3);
    }
    .flow-tab:active { transform: scale(.97); }

    /* ── Top APY Leaderboard ────────────────────────── */
    .apy-head {
      display: flex; flex-direction: column; gap: 2px;
      margin-bottom: 10px;
    }

    /* Validator Hub Home card — uses the apy-list as preview and
       sits where the legacy "Top APY Validators" section used to be. */
    .vh-card {
      border: 1px solid rgba(0,255,135,.18);
      background: linear-gradient(180deg, rgba(0,255,135,.04), rgba(46,211,224,.03));
    }
    .vh-card-head {
      display: flex; align-items: center; justify-content: space-between;
      gap: 10px; margin-bottom: 10px;
      cursor: pointer; -webkit-tap-highlight-color: transparent;
    }
    .vh-card-head:active { opacity: 0.85; }
    .vh-card-cta {
      display: inline-flex; align-items: center; gap: 4px;
      border-radius: 999px;
      flex-shrink: 0;
    }
    .vh-card-chev { font-size: 14px; line-height: 1; }

    /* Lead Wallets — own gradient (cyan→magenta) so it visually distinct
       from the Validator-Hub green card and the user can spot it. */
    .lw-card {
      border: 1px solid rgba(46,211,224,.22);
      background: linear-gradient(180deg,
        rgba(46,211,224,.05), rgba(255,87,209,.04));
    }
    .lw-card-head {
      display: flex; align-items: center; justify-content: space-between;
      gap: 10px; margin-bottom: 10px;
      cursor: pointer; -webkit-tap-highlight-color: transparent;
    }
    .lw-card-head:active { opacity: 0.85; }
    .lw-card-cta {
      display: inline-flex; align-items: center; gap: 4px;
      border-radius: 999px;
      flex-shrink: 0;
    }
    .lw-card-btn {
      width: 100%;
      margin-top: 12px;
      padding: 10px 14px;
      font-size: 13px; 
      cursor: pointer;
      -webkit-tap-highlight-color: transparent;
      transition: transform .12s ease;
    }
    .lw-card-btn:active { transform: scale(.98); }

    /* ── Capital-Rotation-Radar card + overlay ──────────────────────
       Cyan→violet identity so it reads as a "flow / movement" feature,
       sibling to the cyan Lead-Wallets card. */
    .ro-card {
      border: 1px solid rgba(46,211,224,.22);
      background: linear-gradient(180deg,
        rgba(46,211,224,.05), rgba(143,157,255,.05));
    }
    .ro-card-head {
      display: flex; align-items: center; justify-content: space-between;
      gap: 10px; margin-bottom: 10px;
      cursor: pointer; -webkit-tap-highlight-color: transparent;
    }
    .ro-card-head:active { opacity: .85; }
    .ro-card-cta {
      display: inline-flex; align-items: center; gap: 4px;
      border-radius: 999px; flex-shrink: 0;
    }
    .ro-card-btn {
      width: 100%; margin-top: 12px; padding: 10px 14px;
      font-size: 13px; 
      cursor: pointer; -webkit-tap-highlight-color: transparent;
      transition: transform .12s ease;
    }
    .ro-card-btn:active { transform: scale(.98); }

    /* Window selector inside the overlay */
    .ro-winsel {
      display: inline-flex; gap: 2px; padding: 3px; margin-bottom: 14px;
      border-radius: 999px;
    }
    .ro-winsel button {
      background: transparent; border: 0; 
      padding: 6px 16px; 
      border-radius: 999px; cursor: pointer; font-family: inherit;
      letter-spacing: .4px; transition: color .2s, background .2s;
    }

    /* Hero — the headline rotated-volume number */
    .ro-hero {
      text-align: center; padding: 6px 0 16px;
      border-bottom: 1px solid rgba(255,255,255,.06); margin-bottom: 14px;
    }
    .ro-hero-lbl {
      font-size: var(--text-2xs); font-weight: 800; letter-spacing: 1.4px;
      color: var(--muted); text-transform: uppercase;
    }
    .ro-hero-num {
      font-size: 34px; font-weight: 900; line-height: 1.1; margin-top: 2px;
    }
    /* Empty state: a gradient-clipped bare "—" renders as a stray blue
       bar that reads like a glitch/loader. With nothing rotated yet,
       hide the headline number AND its "ROTATED" label entirely and let
       the explainer sub carry the empty state on its own. */
    .ro-hero.ro-hero-empty .ro-hero-num,
    .ro-hero.ro-hero-empty .ro-hero-lbl { display: none; }
    .ro-hero.ro-hero-empty .ro-hero-sub { font-size: 12.5px; margin-top: 0; }
    .ro-hero-sub { font-size: 11.5px; color: var(--muted); margin-top: 4px; }

    .ro-sec-title {
      font-size: 12px; font-weight: 800; letter-spacing: .4px;
      color: rgba(255,255,255,.82); margin: 4px 0 10px;
    }

    /* Corridor row — the visual centrepiece */
    .ro-row {
      padding: 11px 12px; margin-bottom: 8px; border-radius: 12px;
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.06);
    }
    .ro-row-top {
      display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
    }
    .ro-sn {
      font-size: 12.5px; font-weight: 800; color: #eaf6ff;
      max-width: 40%; overflow: hidden; text-overflow: ellipsis;
      white-space: nowrap;
    }
    .ro-arrow {
      color: var(--cyan); font-weight: 900; font-size: 14px;
      text-shadow: 0 0 8px rgba(46,211,224,.6);
    }
    .ro-amt {
      margin-left: auto; font-size: 13px; font-weight: 900;
      color: #fff; font-family: ui-monospace, "SF Mono", monospace;
    }
    .ro-row-bar {
      height: 6px; border-radius: 999px; margin: 9px 0 6px;
      background: rgba(255,255,255,.07); overflow: hidden;
    }
    .ro-row-bar-fill {
      height: 100%; border-radius: 999px;
      box-shadow: 0 0 10px rgba(46,211,224,.55);
    }
    .ro-row-bar-fill.ro-retail {
      background: rgba(150,170,190,.5); box-shadow: none;
    }
    .ro-row-meta {
      font-size: 11px; color: var(--muted);
      display: flex; gap: 10px; align-items: center;
    }
    .ro-row-meta .ro-smart { color: var(--cyan); font-weight: 700; }

    /* Magnet / flight two-column summary */
    .ro-mf { display: flex; gap: 10px; margin: 18px 0 6px; }
    .ro-mf-col {
      flex: 1; min-width: 0; padding: 10px 11px; border-radius: 12px;
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.06);
    }
    .ro-mf-h {
      font-size: var(--text-2xs); font-weight: 800; letter-spacing: .3px;
      margin-bottom: 7px;
    }
    .ro-mf-in  .ro-mf-h { color: #4dffa6; }
    .ro-mf-out .ro-mf-h { color: #ff8a8a; }
    .ro-mf-item {
      display: flex; justify-content: space-between; gap: 6px;
      font-size: 11.5px; padding: 3px 0; color: #dfeaf3;
    }
    .ro-mf-item .ro-mf-v {
      font-family: ui-monospace, "SF Mono", monospace; font-weight: 700;
    }
    .ro-mf-in  .ro-mf-v { color: #4dffa6; }
    .ro-mf-out .ro-mf-v { color: #ff8a8a; }

    /* CTA to the Constellation flow-map */
    .ro-map-cta {
      width: 100%; margin-top: 16px; padding: 12px 14px;
      font-size: 13px; cursor: pointer;
      -webkit-tap-highlight-color: transparent; transition: transform .12s ease;
    }
    .ro-map-cta:active { transform: scale(.985); }

    /* Founder Insider Tracker — own gradient (red→gold) so a glance
       tells the user "this is an insider/risk signal", visually
       distinct from the cyan Lead-Wallets card above. */
    .fi-card {
      border: 1px solid rgba(242,88,94, .26);
      background: linear-gradient(180deg,
        rgba(242,88,94, .06), rgba(240,180,41, .04));
    }
    .fi-head {
      display: flex; align-items: center; justify-content: space-between;
      gap: 10px; margin-bottom: 10px;
    }
    .fi-head .ct { display: flex; align-items: center; gap: 6px; }
    .fi-row {
      display: flex; align-items: flex-start; gap: 10px;
      padding: 11px 12px; margin-bottom: 6px;
      background: rgba(255, 255, 255, .03);
      border: 1px solid rgba(255, 255, 255, .07);
      border-radius: 10px;
    }
    .fi-row .fi-badge {
      flex-shrink: 0; width: 28px; height: 28px;
      border-radius: 50%; display: flex;
      align-items: center; justify-content: center;
      font-size: 14px; font-weight: 800;
    }
    .fi-row.fi-unstake .fi-badge {
      background: rgba(242,88,94, .18);
      color: #ff7676; border: 1px solid rgba(242,88,94, .35);
    }
    .fi-row.fi-stake .fi-badge {
      background: rgba(47,212,138, .15);
      color: #5ce4a3; border: 1px solid rgba(47,212,138, .35);
    }
    .fi-body { flex: 1; min-width: 0; }
    .fi-line1 {
      font-size: 13px; font-weight: 700; color: var(--text);
      display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
    }
    .fi-line1 .fi-sn {
      display: inline-flex; align-items: center; padding: 2px 7px;
      background: rgba(46,211,224, .12); color: var(--cyan);
      border-radius: 6px; font-size: 11px; font-weight: 800;
    }
    /* Subnet display name beside the SN badge — only rendered when
       SN[].n carries a real label (fallbacks suppressed). */
    .fi-line1 .fi-name {
      color: var(--text); font-weight: 700; font-size: 12.5px;
      max-width: 12ch;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }
    .fi-line1 .fi-side-unstake { color: #ff7676; }
    .fi-line1 .fi-side-stake { color: #5ce4a3; }
    .fi-line2 {
      font-size: 11.5px; color: var(--muted);
      margin-top: 3px; line-height: 1.45;
    }
    .fi-line2 .fi-dot { color: rgba(255, 255, 255, .25); padding: 0 4px; }
    .fi-notify {
      flex-shrink: 0; padding: 6px 10px;
      background: rgba(240,180,41, .1);
      border: 1px solid rgba(240,180,41, .3);
      color: var(--gold);
      border-radius: 8px; font-size: 11px; font-weight: 700;
      cursor: pointer; -webkit-tap-highlight-color: transparent;
    }
    .fi-notify:active { transform: scale(.96); }
    .fi-notify.fi-subscribed {
      background: rgba(47,212,138, .12);
      border-color: rgba(47,212,138, .35);
      color: #5ce4a3;
    }
    .fi-empty {
      padding: 14px 12px; text-align: center;
      color: var(--muted); font-size: 12px;
    }
    /* Subnet Death-Watch — violet→deep-red gradient signals "ending"
       without alarming the user the way the founder-insider red does. */
    .dw-card {
      border: 1px solid rgba(143,157,255, .28);
      background: linear-gradient(180deg,
        rgba(143,157,255, .06), rgba(242,88,94, .04));
    }

    /* ══ Emissions-Radar ═══════════════════════════════════════════
       Forward-looking emission shift per subnet.  The bar is
       diverging around a fixed centre line: right/green = the subnet
       gains allocation next epoch, left/red = it loses.  Reading the
       direction must not require reading the number. */
    .er-card {
      border: 1px solid rgba(46,211,224, .30);
      background: linear-gradient(180deg,
        rgba(46,211,224, .07), rgba(143,157,255, .03));
    }
    .er-head {
      display: flex; align-items: center; justify-content: space-between;
      gap: 10px; margin-bottom: 10px;
    }
    .er-head .ct { display: flex; align-items: center; gap: 6px; }
    .er-head-right { display: flex; align-items: center; gap: 6px; }
    .er-pill {
      letter-spacing: .5px;
      white-space: nowrap;
    }
    /* Forecast track record — the badge that keeps the card honest. */
    .er-acc {
      font-size: var(--text-2xs); font-weight: 700; color: var(--muted);
      background: rgba(255, 255, 255, .05);
      padding: 3px 8px; border-radius: 999px; white-space: nowrap;
    }
    .er-acc.good { color: var(--green, var(--green));
      border-color: rgba(47,212,138, .28); }
    .er-filter {
      margin: 10px 0 4px;
    }
    .er-fbtn {
      padding: 6px 4px; cursor: pointer;
      transition: color .15s, background .15s, border-color .15s;
    }
    .er-fbtn.active {
      border-color: rgba(46,211,224, .32);
    }
    .er-stale {
      font-size: var(--text-2xs); color: #ffb74d; margin: 6px 0 2px;
    }
    .er-row {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 6px; border-top: 1px solid rgba(255, 255, 255, .05);
      border-radius: 11px; cursor: pointer;
      transition: background .15s, transform .12s;
    }
    .er-row:first-of-type { border-top: none; }
    .er-row:active { background: rgba(255, 255, 255, .04); transform: scale(.99); }
    .er-sn {
      font-size: 11px; font-weight: 800; color: var(--muted);
      min-width: 44px; text-align: center; line-height: 1.35;
    }
    .er-main { flex: 1; min-width: 0; }
    .er-name {
      font-size: 12px; font-weight: 700; color: var(--text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      margin-bottom: 4px;
    }
    /* Diverging bar: the centre line is the anchor, never moves. */
    .er-axis {
      position: relative; height: 8px; border-radius: 4px;
      background: rgba(255, 255, 255, .05); overflow: hidden;
    }
    .er-axis::after {
      content: ''; position: absolute; left: 50%; top: 0; bottom: 0;
      width: 1px; background: rgba(255, 255, 255, .22);
    }
    .er-fill { position: absolute; top: 0; bottom: 0; border-radius: 4px; }
    .er-fill.up {
      left: 50%; 
    }
    .er-fill.down {
      right: 50%; 
    }
    .er-meta {
      display: flex; flex-wrap: wrap; gap: 6px; margin-top: 5px;
      font-size: var(--text-2xs); color: var(--muted);
    }
    .er-chip {
      background: rgba(255, 255, 255, .05); border-radius: 999px;
      padding: 2px 7px; white-space: nowrap;
    }
    .er-chip.up { color: var(--green, var(--green)); }
    .er-chip.down { color: var(--red, var(--red)); }
    /* The bar-warning section. Set apart from the ranking above it by a
       rule and a warm heading, because it answers a different question
       and is not sorted by the same thing. */
    .er-nearbar-head {
      margin-top: 14px; padding-top: 12px;
      border-top: 1px solid rgba(242,88,94, .22);
      letter-spacing: .3px;
    }
    .er-nearbar-hint {
      font-size: var(--text-2xs); color: var(--muted); line-height: 1.5;
      margin: 3px 0 4px;
    }
    /* Sitting under the gate bar costs most of the share, so this one
       is allowed to shout where the other chips murmur. */
    .er-chip.danger {
      color: var(--red, var(--red)); background: rgba(242,88,94, .13);
      border: 1px solid rgba(242,88,94, .30); font-weight: 700;
    }
    /* Deliberately quieter than .strong — "the move is mostly spent" is
       information, not an invitation. */
    .er-chip.fading {
      color: var(--muted, #7a7f9a);
      background: rgba(255, 255, 255, .04);
      border: 1px solid rgba(255, 255, 255, .07);
    }
    .er-delta {
      font-size: 13px; font-weight: 800; min-width: 62px;
      text-align: right; white-space: nowrap;
    }
    .er-delta.up { color: var(--green, var(--green)); }
    .er-delta.down { color: var(--red, var(--red)); }
    /* Names the headline in the bar-warning rows, where it is a
       distance and not a pp figure. */
    .er-delta-sub {
      font-size: var(--text-2xs); font-weight: 600; letter-spacing: .2px;
      color: var(--muted, #7a7f9a); margin-top: 1px;
    }
    .er-empty, .ps-empty, .vy-empty {
      font-size: 11px; color: var(--muted); padding: 14px 4px;
      text-align: center; line-height: 1.5;
    }
    .er-lock {
      margin-top: 8px; padding: 9px; 
      font-size: 11px; text-align: center;
      cursor: pointer;
    }

    /* ══ Live-Pressure ═════════════════════════════════════════════
       12 five-minute buckets of taker-flow skew.  Segment colour is
       set inline from the bucket value; unscored buckets stay grey
       instead of guessing a direction. */
    .ps-card {
      border: 1px solid rgba(255, 183, 77, .28);
      background: linear-gradient(180deg,
        rgba(255, 183, 77, .06), rgba(46,211,224, .03));
    }
    .ps-head {
      display: flex; align-items: center; justify-content: space-between;
      gap: 10px; margin-bottom: 10px;
    }
    .ps-head .ct { display: flex; align-items: center; gap: 6px; }
    .ps-pill {
      letter-spacing: .5px;
      white-space: nowrap;
    }
    .ps-row {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 6px; border-top: 1px solid rgba(255, 255, 255, .05);
      border-radius: 11px; cursor: pointer;
      transition: background .15s, transform .12s;
    }
    .ps-row:first-of-type { border-top: none; }
    .ps-row:active { background: rgba(255, 255, 255, .04); transform: scale(.99); }
    .ps-sn {
      font-size: 11px; font-weight: 800; color: var(--muted);
      min-width: 44px; text-align: center; line-height: 1.35;
    }
    .ps-main { flex: 1; min-width: 0; }
    .ps-name {
      font-size: 12px; font-weight: 700; color: var(--text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      margin-bottom: 4px;
    }
    .ps-strip {
      display: flex; gap: 2px; height: 18px; align-items: flex-end;
    }
    .ps-seg {
      flex: 1; border-radius: 2px; min-width: 3px;
      background: rgba(255, 255, 255, .07);
      transition: height .2s ease;
    }
    .ps-meta {
      margin-top: 5px; font-size: var(--text-2xs); color: var(--muted);
      display: flex; flex-wrap: wrap; gap: 8px;
    }
    .ps-meta b { font-weight: 700; }
    .ps-meta b.up { color: var(--green, var(--green)); }
    .ps-meta b.down { color: var(--red, var(--red)); }
    .ps-val {
      font-size: 13px; font-weight: 800; min-width: 46px;
      text-align: right; white-space: nowrap;
    }
    .ps-val.up { color: var(--green, var(--green)); }
    .ps-val.down { color: var(--red, var(--red)); }
    .ps-val.flat { color: var(--muted); }

    /* ══ Validator-Rendite ═════════════════════════════════════════
       Measured net APY per validator, compared inside its own subnet.
       Tapping a row expands the full validator table for that subnet. */
    .vy-card {
      border: 1px solid rgba(255, 210, 74, .26);
      background: linear-gradient(180deg,
        rgba(255, 210, 74, .06), rgba(47,212,138, .03));
    }
    .vy-head {
      display: flex; align-items: center; justify-content: space-between;
      gap: 10px; margin-bottom: 10px;
    }
    .vy-head .ct { display: flex; align-items: center; gap: 6px; }
    .vy-pill {
      letter-spacing: .5px;
      white-space: nowrap;
    }
    .vy-row {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 6px; border-top: 1px solid rgba(255, 255, 255, .05);
      border-radius: 11px; cursor: pointer;
      transition: background .15s, transform .12s;
    }
    .vy-row:first-of-type { border-top: none; }
    .vy-row:active { background: rgba(255, 255, 255, .04); transform: scale(.99); }
    .vy-sn {
      font-size: 11px; font-weight: 800; color: var(--muted);
      min-width: 44px; text-align: center; line-height: 1.35;
    }
    .vy-main { flex: 1; min-width: 0; }
    .vy-name {
      font-size: 12px; font-weight: 700; color: var(--text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .vy-sub {
      font-size: var(--text-2xs); color: var(--muted); margin-top: 3px;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .vy-edge {
      font-size: 13px; font-weight: 800; color: var(--green, var(--green));
      min-width: 68px; text-align: right; white-space: nowrap;
      font-variant-numeric: tabular-nums;
    }
    .vy-edge small {
      display: block; font-size: var(--text-2xs); font-weight: 600;
      color: var(--muted); margin-top: 1px;
    }
    .vy-detail {
      padding: 4px 6px 10px; animation: cvRowIn .25s ease both;
    }
    .vy-drow {
      display: flex; align-items: center; gap: 8px;
      padding: 6px 8px; border-radius: 9px; font-size: var(--text-2xs);
      background: rgba(255, 255, 255, .03); margin-top: 4px;
    }
    .vy-drow.best {
      background: rgba(47,212,138, .08);
      border: 1px solid rgba(47,212,138, .22);
    }
    .vy-dname {
      flex: 1; min-width: 0; color: var(--text); font-weight: 600;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .vy-dapy { font-weight: 800; color: var(--text); white-space: nowrap; }
    .vy-dtag {
      font-size: var(--text-2xs); padding: 1px 6px; border-radius: 999px;
      background: rgba(255, 255, 255, .06); color: var(--muted);
      white-space: nowrap;
    }
    .vy-dtag.warn { color: #ffb74d; background: rgba(255, 183, 77, .12); }
    .vy-dtag.steady { color: var(--green, var(--green));
      background: rgba(47,212,138, .12); }
    /* ── Conviction Leaderboard card ── */
    .cv-card {
      border: 1px solid rgba(47,212,138, .26);
      background: linear-gradient(180deg,
        rgba(47,212,138, .06), rgba(34, 211, 166, .03));
    }
    .cv-head {
      display: flex; align-items: center; justify-content: space-between;
      gap: 10px; margin-bottom: 10px;
    }
    .cv-head .ct { display: flex; align-items: center; gap: 6px; }
    .cv-pill {
      display: inline-flex; align-items: center; gap: 4px;
      font-size: 11px; font-weight: 700; color: var(--green, var(--green));
      background: rgba(47,212,138, .12);
      padding: 3px 9px; border-radius: 999px; white-space: nowrap;
    }
    /* Card header right cluster: LIVE pill + share button */
    .cv-head-right { display: flex; align-items: center; gap: 8px; }
    .cv-live { display: inline-flex; align-items: center; gap: 5px; font-size: var(--text-2xs); font-weight: 800; letter-spacing: .5px; color: var(--green,var(--green)); }
    .cv-live-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--green,var(--green)); box-shadow: 0 0 0 0 rgba(47,212,138,.6); animation: cvPulse 1.8s infinite; }
    @keyframes cvPulse { 0% { box-shadow: 0 0 0 0 rgba(47,212,138,.5); } 70% { box-shadow: 0 0 0 8px rgba(47,212,138,0); } 100% { box-shadow: 0 0 0 0 rgba(47,212,138,0); } }
    .cv-share-btn { background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.1); color: var(--text,#e8eaf2); border-radius: 9px; padding: 3px 9px; font-size: 15px; cursor: pointer; line-height: 1; }
    .cv-share-btn:active { background: rgba(255,255,255,.14); }
    .cv-row {
      display: flex; align-items: flex-start; gap: 10px;
      padding: 11px 8px; border-top: 1px solid rgba(255, 255, 255, .05);
      border-radius: 12px;
      cursor: pointer; transition: background .15s, transform .12s;
      position: relative;
      animation: cvRowIn .35s ease both;
    }
    /* Glassmorphism for the top-3 rows + podium cells */
    .cv-row.cv-gold, .cv-row.cv-silver, .cv-row.cv-bronze { backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); }
    .cv-pod-cell { backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
    /* Rank-change arrows */
    .cv-rank-arrow { display: block; font-size: var(--text-2xs); font-weight: 800; margin-top: 2px; }
    .cv-rank-arrow.up { color: var(--green,var(--green)); }
    .cv-rank-arrow.down { color: var(--red,var(--red)); }
    /* Inline row sparkline */
    .cv-row-spark { flex-shrink: 0; align-self: center; opacity: .9; }
    .cv-spark { display: block; }
    @keyframes cvRowIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
    .cv-row:first-of-type { border-top: none; }
    .cv-row:active { background: rgba(255, 255, 255, .04); transform: scale(.99); }
    /* Podium highlights for the top 3 */
    .cv-rank {
      font-size: 15px; font-weight: 800; color: var(--muted);
      min-width: 26px; text-align: center; line-height: 1.5;
    }
    .cv-gold .cv-rank, .cv-silver .cv-rank, .cv-bronze .cv-rank { font-size: 20px; }
    .cv-main { flex: 1; min-width: 0; }
    .cv-sn { font-size: 13.5px; font-weight: 700; line-height: 1.2;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .cv-sn-id { color: var(--muted); font-weight: 600; font-size: 11px; }
    .cv-meta { display: flex; align-items: center; gap: 5px; margin-top: 4px; flex-wrap: wrap; }
    .cv-tag { font-size: var(--text-2xs); font-weight: 700; padding: 1px 6px; border-radius: 999px; white-space: nowrap; }
    .cv-tag.perp { background: rgba(47,212,138, .12); color: var(--green, var(--green)); }
    .cv-tag.decay { background: rgba(242,88,94, .12); color: var(--red, var(--red)); }
    .cv-tag.owner { background: rgba(255, 179, 0, .14); color: var(--amber, #ffb300); }
    .cv-tag.lockers { background: rgba(255, 255, 255, .06); color: var(--muted); }
    /* Relative locked-alpha bar */
    .cv-bar-track {
      height: 5px; border-radius: 999px; background: rgba(255,255,255,.06);
      overflow: hidden; margin: 7px 0 0;
    }
    .cv-bar-fill { height: 100%; border-radius: 999px; transition: width .5s ease; }
    .cv-bar-perp { background: linear-gradient(90deg, #22d3a6, var(--green)); }
    .cv-bar-decay { background: linear-gradient(90deg, #ff8a5b, var(--red)); }
    /* Owner wallet row */
    .cv-wallet { display: flex; align-items: center; gap: 6px; margin-top: 6px; }
    .cv-wallet-addr {
      font-size: var(--text-2xs); font-family: ui-monospace, monospace; color: var(--muted);
      background: rgba(255,255,255,.05); padding: 1px 6px; border-radius: 6px;
      cursor: pointer;
    }
    .cv-wallet-addr:active { background: rgba(255,255,255,.12); }
    .cv-wallet-link { font-size: 11px; color: var(--accent, #7aa2ff); text-decoration: none; }
    .cv-amt { text-align: right; white-space: nowrap; padding-top: 2px; }
    .cv-amt-val { font-size: 15px; font-weight: 800; color: var(--green, var(--green)); }
    .cv-gold .cv-amt-val { font-size: 17px; text-shadow: 0 0 12px rgba(47,212,138,.35); }
    .cv-amt-lbl { font-size: var(--text-2xs); color: var(--muted); text-transform: uppercase; letter-spacing: .4px; }
    .cv-empty { font-size: 11px; color: var(--muted); text-align: center; padding: 14px 4px; }
    .cv-tag.new { background: rgba(122,162,255,.16); color: var(--accent, #7aa2ff); }
    /* ── Top-3 3D podium ── */
    .cv-podium {
      display: grid; grid-template-columns: 1fr 1.25fr 1fr; gap: 8px;
      align-items: end; margin: 6px 0 16px;
    }
    .cv-pod-cell {
      position: relative; text-align: center; cursor: pointer;
      border-radius: 16px 16px 12px 12px;
      transition: transform .14s, box-shadow .2s;
      animation: cvPodIn .45s cubic-bezier(.32,.72,0,1) both;
    }
    @keyframes cvPodIn { from { opacity:0; transform: translateY(14px); } to { opacity:1; transform:none; } }
    .cv-pod-cell:active { transform: translateY(-2px) scale(.98); }
    /* Staggered heights — #1 tallest, #3 shortest (real podium) */
    .cv-pod-1 {
      padding: 22px 6px 16px; margin-bottom: 0;
      background:
        radial-gradient(120% 80% at 50% 0%, rgba(255,210,74,.22), transparent 70%),
        linear-gradient(180deg, rgba(255,196,0,.16), rgba(255,196,0,.02));
      border-color: rgba(255,210,74,.55);
      box-shadow: 0 0 34px rgba(255,196,0,.22), inset 0 1px 0 rgba(255,255,255,.10);
      animation-delay: .08s;
    }
    .cv-pod-2 {
      padding: 14px 6px 12px; margin-bottom: 10px;
      background: linear-gradient(180deg, rgba(200,210,225,.12), transparent);
      border-color: rgba(200,210,225,.30);
      box-shadow: inset 0 1px 0 rgba(255,255,255,.06);
    }
    .cv-pod-3 {
      padding: 12px 6px 10px; margin-bottom: 18px;
      background: linear-gradient(180deg, rgba(224,146,90,.14), transparent);
      border-color: rgba(224,146,90,.30);
      box-shadow: inset 0 1px 0 rgba(255,255,255,.05);
    }
    .cv-pod-crown { position: absolute; top: -15px; left: 0; right: 0; font-size: 22px; filter: drop-shadow(0 2px 6px rgba(255,196,0,.5)); animation: cvCrown 2.4s ease-in-out infinite; }
    @keyframes cvCrown { 0%,100% { transform: translateY(0) rotate(-4deg); } 50% { transform: translateY(-4px) rotate(4deg); } }
    .cv-pod-medal { font-size: 20px; line-height: 1; }
    .cv-pod-1 .cv-pod-medal { font-size: 26px; }
    .cv-pod-name { font-size: 12px; font-weight: 700; margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .cv-pod-1 .cv-pod-name { font-size: 14px; }
    .cv-pod-sn { font-size: var(--text-2xs); color: var(--muted); }
    .cv-pod-gauge { margin: 6px 0 2px; line-height: 0; }
    .cv-pod-amt { font-size: 13px; font-weight: 800; color: var(--green, var(--green)); margin-top: 3px; }
    .cv-pod-1 .cv-pod-amt { font-size: 16px; text-shadow: 0 0 14px rgba(47,212,138,.4); }
    /* Circular conviction gauge */
    .cv-gauge { display: inline-block; vertical-align: middle; }
    .cv-gauge-txt { fill: #fff; font-size: 11px; font-weight: 800; font-family: -apple-system,BlinkMacSystemFont,Inter,sans-serif; }
    .cv-pod-1 .cv-gauge-txt { font-size: 12px; }
    .cv-row-gauge { flex-shrink: 0; }
    /* DM opt-in toggle (reuses .dw-switch visuals) */
    .cv-dm-toggle {
      display: flex; align-items: center; justify-content: space-between; gap: 10px;
      margin-top: 12px; padding-top: 12px; border-top: 1px solid rgba(255,255,255,.06);
    }
    /* Top-placed variant: separator + subtle highlight below, not above */
    .cv-dm-toggle.cv-dm-top {
      margin-top: 0; margin-bottom: 14px; padding-top: 0; padding-bottom: 12px;
      border-top: none; border-bottom: 1px solid rgba(255,255,255,.06);
    }
    .cv-dm-label { display: flex; flex-direction: column; gap: 2px; }
    .cv-dm-label span { font-size: 12px; font-weight: 600; }
    .cv-dm-label small { font-size: var(--text-2xs); color: var(--muted); }
    .dw-head {
      display: flex; align-items: center; justify-content: space-between;
      gap: 10px; margin-bottom: 10px;
    }
    .dw-head .ct { display: flex; align-items: center; gap: 6px; }
    /* Global DM-opt-in toggle for death-watch alerts.  Visually
       distinct from the per-row 🔔 Watch button so users understand
       this is a separate top-level switch. */
    .dw-dm-toggle {
      display: flex; align-items: center; justify-content: space-between;
      gap: 8px; padding: 8px 12px;
      margin: 0 0 10px;
      background: rgba(255, 255, 255, .03);
      border: 1px solid rgba(255, 255, 255, .07);
      border-radius: 10px;
      font-size: 12px;
    }
    .dw-dm-toggle-label {
      flex: 1; min-width: 0;
      color: var(--text);
      display: flex; flex-direction: column; gap: 2px;
    }
    .dw-dm-toggle-label small {
      color: var(--muted); font-size: var(--text-2xs); line-height: 1.3;
    }
    .dw-switch {
      position: relative; flex-shrink: 0;
      width: 40px; height: 22px;
      background: rgba(255, 255, 255, .12);
      border-radius: 11px; cursor: pointer;
      transition: background var(--transition-fast);
      -webkit-tap-highlight-color: transparent;
    }
    .dw-switch::after {
      content: '';
      position: absolute; top: 2px; left: 2px;
      width: 18px; height: 18px;
      background: #fff; border-radius: 50%;
      transition: left var(--transition-fast);
    }
    .dw-switch.dw-switch-on { background: #5ce4a3; }
    .dw-switch.dw-switch-on::after { left: 20px; }
    .dw-switch[aria-busy="true"] { opacity: .6; pointer-events: none; }
    .dw-row {
      display: flex; align-items: center; gap: 10px;
      padding: 11px 12px; margin-bottom: 6px;
      background: rgba(255, 255, 255, .03);
      border: 1px solid rgba(255, 255, 255, .07);
      border-radius: 10px;
    }
    .dw-row.dw-band-danger {
      border-color: rgba(242,88,94, .35);
      background: rgba(242,88,94, .06);
    }
    .dw-row.dw-band-watch {
      border-color: rgba(240,180,41, .25);
      background: rgba(240,180,41, .04);
    }
    .dw-sn {
      flex-shrink: 0; display: inline-flex;
      align-items: center; justify-content: center;
      min-width: 46px; height: 36px; padding: 0 8px;
      background: rgba(46,211,224, .12);
      color: var(--cyan);
      border-radius: 8px;
      font-size: 12px; font-weight: 800;
    }
    .dw-bar-wrap {
      flex: 1; min-width: 0;
      display: flex; flex-direction: column; gap: 4px;
    }
    /* Subnet name above the risk bar.  Optional — only shown when
       SN[].n has a real label (not the SN<netuid> fallback that
       fetchSubnets fills in when the upstream registry has no name).
       Truncates with ellipsis so long names don't push the score
       off the row on narrow phones. */
    .dw-name {
      font-size: 12px; font-weight: 700;
      color: var(--text); line-height: 1.2;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }
    .dw-bar-row {
      display: flex; align-items: center; gap: 8px;
    }
    .dw-bar-track {
      flex: 1;
      height: 8px; border-radius: 4px;
      background: rgba(255, 255, 255, .06);
      overflow: hidden;
    }
    .dw-bar-fill {
      height: 100%;
      transition: width var(--transition-base);
    }
    .dw-bar-fill.dw-fill-healthy { background: #5ce4a3; }
    .dw-bar-fill.dw-fill-watch   { background: var(--gold); }
    .dw-bar-fill.dw-fill-danger  { background: #ff6b6b; }
    .dw-score {
      flex-shrink: 0;
      font-size: 13px; font-weight: 800;
      font-variant-numeric: tabular-nums;
      min-width: 32px; text-align: right;
    }
    .dw-score.dw-fill-healthy { color: #5ce4a3; }
    .dw-score.dw-fill-watch   { color: var(--gold); }
    .dw-score.dw-fill-danger  { color: #ff6b6b; }
    .dw-driver {
      font-size: 11px; color: var(--muted);
      line-height: 1.3;
    }
    .dw-notify {
      flex-shrink: 0; padding: 6px 10px;
      background: rgba(143,157,255, .10);
      border: 1px solid rgba(143,157,255, .30);
      color: var(--purple);
      border-radius: 8px; font-size: 11px; font-weight: 700;
      cursor: pointer; -webkit-tap-highlight-color: transparent;
    }
    .dw-notify:active { transform: scale(.96); }
    .dw-notify.dw-subscribed {
      background: rgba(47,212,138, .12);
      border-color: rgba(47,212,138, .35);
      color: #5ce4a3;
    }
    .dw-empty {
      padding: 14px 12px; text-align: center;
      color: var(--muted); font-size: 12px;
    }
    .lw-intro {
      color: var(--muted); font-size: 12px; line-height: 1.5;
      padding: 0 4px 12px;
    }
    .lw-row {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 12px; margin-bottom: 6px;
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.06);
      border-radius: 10px;
    }
    .lw-row-main { flex: 1; min-width: 0; }
    .lw-row-tag {
      font-family: monospace; font-size: 13px; font-weight: 800;
      color: var(--cyan); letter-spacing: .5px;
    }
    .lw-row-meta {
      color: var(--muted); font-size: 11px; margin-top: 3px;
    }
    .lw-score {
      display: flex; flex-direction: column; align-items: flex-end;
      gap: 2px; flex-shrink: 0;
    }
    .lw-score-num {
      font-size: 15px; font-weight: 800; color: var(--text);
    }
    .lw-score-bar {
      width: 56px; height: 4px;
      background: rgba(255,255,255,.08);
      border-radius: 2px; overflow: hidden;
    }
    .lw-score-bar-fill {
      height: 100%;
      background: linear-gradient(90deg, var(--cyan), #00ff87);
    }
    .lw-preview-row {
      display: flex; align-items: center; gap: 10px;
      padding: 6px 10px;
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.05);
      border-radius: 8px;
      font-size: 12px;
    }
    .lw-preview-tag {
      font-family: monospace; font-weight: 800; color: var(--cyan);
      flex-shrink: 0;
    }
    .lw-preview-meta { color: var(--muted); flex: 1; min-width: 0;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .lw-preview-score { font-weight: 700; color: var(--text);
      flex-shrink: 0; }
    .lw-coming-soon {
      margin-top: 18px;
      padding: 14px 14px 12px;
      border: 1px dashed rgba(255,255,255,.12);
      border-radius: 10px;
      background: rgba(255,255,255,.02);
    }
    .lw-coming-soon-title {
      font-size: 11px; font-weight: 800; letter-spacing: 1.2px;
      text-transform: uppercase;
      color: var(--cyan);
      margin-bottom: 8px;
    }
    .lw-coming-soon-list {
      margin: 0; padding-left: 18px;
      color: var(--muted); font-size: 12px; line-height: 1.6;
    }
    .lw-coming-soon-list li { margin: 0; }

    /* Smart Money Heatmap — section inside the Lead Wallets overlay
       that surfaces *forward-looking* signal: where are surfaced lead
       wallets currently positioning across all subnets? */
    .lw-heatmap-section {
      margin-top: 22px;
      padding-top: 14px;
      border-top: 1px solid rgba(255,255,255,.06);
    }
    .lw-heatmap-title {
      font-size: 13px; font-weight: 800; color: var(--text);
      margin-bottom: 2px;
    }
    .lw-heatmap-sub {
      color: var(--muted); font-size: 11px; margin-bottom: 12px;
    }
    .lw-heatmap-row {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 12px; margin-bottom: 6px;
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.06);
      border-radius: 10px;
      cursor: pointer;
      -webkit-tap-highlight-color: transparent;
      transition: background .15s, border-color .15s;
    }
    .lw-heatmap-row:active { background: rgba(46,211,224,.06); }
    .lw-heatmap-sn {
      font-family: monospace; font-weight: 800; font-size: 14px;
      color: var(--cyan); flex-shrink: 0; min-width: 60px;
    }
    .lw-heatmap-mid { flex: 1; min-width: 0; }
    .lw-heatmap-tao {
      font-size: 13px; font-weight: 800; color: var(--text);
    }
    .lw-heatmap-meta {
      color: var(--muted); font-size: 11px; margin-top: 2px;
    }
    .lw-heatmap-chev {
      color: var(--muted); font-size: 18px; flex-shrink: 0;
    }

    /* Tappable subnet chips on each lead-wallet row.  Visually subtle —
       we don't want to scream "button" inside the meta line. */
    .lw-sn-chip {
      color: var(--cyan); cursor: pointer;
      -webkit-tap-highlight-color: transparent;
      text-decoration: none;
    }
    .lw-sn-chip:active { opacity: .7; }

    /* Per-subnet drill-down overlay — opened from any tappable subnet
       chip or heatmap row.  Re-uses vh-overlay structure for shell
       consistency. */
    .lw-event-block {
      margin-bottom: 16px;
      padding: 12px;
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.06);
      border-radius: 10px;
    }
    .lw-event-head {
      display: flex; align-items: baseline; justify-content: space-between;
      gap: 8px; margin-bottom: 10px;
    }
    .lw-event-when {
      font-size: 12px; font-weight: 800; color: var(--text);
    }
    .lw-event-count {
      font-size: 11px; color: var(--muted);
    }
    .lw-lead-row {
      display: flex; align-items: center; gap: 10px;
      padding: 8px 10px; margin-bottom: 4px;
      background: rgba(255,255,255,.02);
      border: 1px solid rgba(255,255,255,.05);
      border-radius: 8px;
    }
    .lw-lead-ck {
      font-family: monospace; font-weight: 800; font-size: 12px;
      color: var(--cyan); flex-shrink: 0;
    }
    /* Clickable wallet address — tap to copy SS58, ↗ icon opens
       taostats.io in the Telegram in-app browser.  Inherits font /
       color from the parent .lw-row-tag / .lw-lead-ck so it visually
       matches the existing wallet styling exactly. */
    .lw-w-addr {
      cursor: pointer;
      -webkit-tap-highlight-color: transparent;
      border-bottom: 1px dashed rgba(46,211,224, .35);
      padding-bottom: 1px;
      transition: opacity var(--transition-fast),
                  color var(--transition-fast),
                  border-color var(--transition-fast);
    }
    .lw-w-addr:hover { opacity: .75; }
    .lw-w-addr:active { opacity: .6; }
    .lw-w-addr.lw-w-copied {
      color: #5ce4a3;
      border-bottom-color: rgba(92, 228, 163, .55);
    }
    .lw-w-ext {
      display: inline-block;
      margin-left: 6px;
      padding: 1px 5px;
      color: var(--muted);
      font-size: 11px; font-weight: 600;
      text-decoration: none;
      border-radius: 4px;
      -webkit-tap-highlight-color: transparent;
      transition: color var(--transition-fast),
                  background var(--transition-fast);
    }
    .lw-w-ext:hover, .lw-w-ext:active {
      color: var(--cyan);
      background: rgba(46,211,224, .10);
    }
    .lw-lead-mid { flex: 1; min-width: 0; }
    .lw-lead-pos {
      font-size: 12px; font-weight: 700; color: var(--text);
    }
    .lw-lead-score {
      font-size: 11px; color: var(--muted); margin-top: 2px;
    }

    .apy-list {
      display: flex; flex-direction: column; gap: 6px;
    }
    .apy-row {
      display: flex; align-items: center; gap: 10px;
      padding: 8px 10px;
      background: rgba(255,255,255,.03);
      border: 1px solid rgba(255,255,255,.05);
      border-radius: 10px;
      cursor: pointer;
      transition: background .2s, border-color .2s;
    }
    .apy-row:active { transform: scale(.99); }
    .apy-row:hover { border-color: rgba(46,211,224,.3); }
    .apy-rank {
      font-size: 16px; width: 22px; text-align: center; flex-shrink: 0;
    }
    .apy-body { flex: 1; min-width: 0; }
    .apy-name {
      font-size: 12px; font-weight: 700; color: var(--text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .apy-meta {
      font-size: var(--text-2xs); color: var(--muted);
      font-family: 'DM Mono', monospace;
    }
    .apy-val {
      font-size: 13px; font-weight: 800;
      color: #20d27a;
      font-family: 'DM Mono', monospace;
      flex-shrink: 0;
    }

    /* ── AI Chat Fullscreen View ───────────────────── */
    .ai-chat-view {
      position: fixed; inset: 0; z-index: 1000;
      background: var(--bg);
      display: flex; flex-direction: column;
      transition: transform .3s cubic-bezier(.4,0,.2,1);
    }
    .ai-chat-view.hidden { display: none; }
    .ai-chat-view.slide-in { transform: translateX(0); }
    .ai-chat-view.slide-out { transform: translateX(100%); }

    .ai-chat-header {
      display: flex; align-items: center; gap: 12px;
      padding: 12px 16px;
      background: var(--card);
      border-bottom: 1px solid rgba(255,255,255,.06);
      flex-shrink: 0;
    }
    .ai-chat-back {
      background: rgba(255,255,255,.08); border: none; border-radius: 50%;
      width: 36px; height: 36px; display: flex; align-items: center;
      justify-content: center; cursor: pointer; color: var(--text);
      font-size: 18px; flex-shrink: 0; transition: background .2s;
    }
    .ai-chat-back:hover { background: rgba(255,255,255,.15); }
    .ai-chat-header-info { flex: 1; }
    .ai-chat-header-title {
      font-size: 14px; font-weight: 700; color: var(--text);
    }
    .ai-chat-header-status {
      font-size: var(--text-2xs); color: var(--muted);
    }
    .ai-chat-header-avatar {
      width: 36px; height: 36px; border-radius: 50%;
      background: linear-gradient(135deg, var(--cyan), var(--purple));
      display: flex; align-items: center; justify-content: center;
      font-size: 18px; flex-shrink: 0;
    }

    .ai-chat-messages {
      flex: 1; overflow-y: auto; padding: 16px;
      display: flex; flex-direction: column; gap: 10px;
      -webkit-overflow-scrolling: touch;
    }
    .ai-msg {
      max-width: 85%; padding: 10px 14px; border-radius: 16px;
      font-size: 13px; line-height: 1.5; word-wrap: break-word;
      animation: msgFadeIn .25s ease;
    }
    @keyframes msgFadeIn { from { opacity:0; transform:translateY(8px) } to { opacity:1; transform:translateY(0) } }
    .ai-msg.user {
      align-self: flex-end;
      background: linear-gradient(135deg, rgba(46,211,224,.2), rgba(143,157,255,.2));
      color: var(--text);
      border-bottom-right-radius: 4px;
    }
    .ai-msg.bot {
      align-self: flex-start;
      background: var(--card);
      color: var(--text);
      border-bottom-left-radius: 4px;
      border: 1px solid rgba(255,255,255,.06);
    }
    .ai-msg.bot .msg-label {
      font-size: var(--text-2xs); color: var(--cyan); font-weight: 700;
      margin-bottom: 4px; text-transform: uppercase;
    }
    .ai-msg.typing .dot-pulse {
      display: inline-flex; gap: 4px; padding: 4px 0;
    }
    .ai-msg.typing .dot-pulse span {
      width: 6px; height: 6px; border-radius: 50%;
      background: var(--cyan); animation: dotBounce .6s infinite alternate;
    }
    .ai-msg.typing .dot-pulse span:nth-child(2) { animation-delay: .2s; }
    .ai-msg.typing .dot-pulse span:nth-child(3) { animation-delay: .4s; }
    .ai-msg.typing .ai-typing-phase { font-size: var(--text-xs); color: var(--muted); margin-top: 4px; }
    .ai-msg.typing .ai-typing-phase:empty { display: none; }
    @keyframes dotBounce { 0% { opacity:.3; transform:translateY(0) } 100% { opacity:1; transform:translateY(-4px) } }

    /* Markdown rendering inside chat bubbles */
    .ai-msg.bot .md-content > *:first-child { margin-top: 0; }
    .ai-msg.bot .md-content > *:last-child { margin-bottom: 0; }
    .ai-msg.bot .md-content p {
      margin: 0 0 8px 0; line-height: 1.5;
    }
    .ai-msg.bot .md-content h2 {
      font-size: 14px; font-weight: 700; color: var(--text);
      margin: 12px 0 6px 0; padding: 0;
    }
    .ai-msg.bot .md-content h3 {
      font-size: 13px; font-weight: 700; color: var(--cyan);
      margin: 10px 0 5px 0; padding: 0;
    }
    .ai-msg.bot .md-content ul {
      margin: 4px 0 8px 0; padding-left: 18px;
    }
    .ai-msg.bot .md-content li {
      margin: 2px 0; line-height: 1.45;
    }
    .ai-msg.bot .md-content strong { font-weight: 700; color: var(--text); }
    .ai-msg.bot .md-content em { font-style: italic; }
    .ai-msg.bot .md-content a {
      color: var(--cyan); text-decoration: underline;
      text-underline-offset: 2px; word-break: break-word;
    }
    .ai-msg.bot .md-content a:active { opacity: .7; }
    .ai-msg.bot .md-content hr {
      border: none; border-top: 1px solid rgba(255,255,255,.1);
      margin: 10px 0;
    }
    .ai-msg.bot .md-content code {
      background: rgba(255,255,255,.08); padding: 1px 5px;
      border-radius: 4px; font-size: 12px;
      font-family: 'DM Mono', monospace;
    }

    .ai-chat-welcome {
      flex: 1; display: flex; flex-direction: column;
      align-items: center; justify-content: center; gap: 12px;
      padding: 40px 20px; text-align: center;
    }
    .ai-chat-welcome-icon {
      width: 64px; height: 64px; border-radius: 50%;
      background: linear-gradient(135deg, var(--cyan), var(--purple));
      display: flex; align-items: center; justify-content: center;
      font-size: 32px;
    }
    .ai-chat-welcome-title {
      font-size: 18px; font-weight: 700;
    }
    .ai-chat-welcome-desc { font-size: 12px; color: var(--muted); max-width: 280px; }
    .ai-chat-suggestions {
      display: flex; flex-wrap: wrap; gap: 8px; justify-content: center;
      margin-top: 8px;
    }
    .ai-chat-suggest-btn {
      background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.1);
      border-radius: 20px; padding: 6px 14px; font-size: 11px;
      color: var(--text); cursor: pointer; font-family: inherit;
    }
    .ai-chat-suggest-btn:hover { border-color: var(--cyan); background: rgba(46,211,224,.08); }

    .ai-chat-input-area {
      display: flex; align-items: flex-end; gap: 8px;
      padding: 12px 16px; background: var(--card);
      border-top: 1px solid rgba(255,255,255,.06); flex-shrink: 0;
    }
    .ai-chat-input {
      flex: 1; min-width: 0; box-sizing: border-box;
      background: rgba(255,255,255,.06);
      border: 1px solid rgba(255,255,255,.1); border-radius: 20px;
      padding: 10px 16px; color: var(--text);
      font-size: 16px;
      font-family: inherit; resize: none; outline: none;
      max-height: 100px; min-height: 42px; line-height: 1.4;
    }
    .ai-chat-input::placeholder { color: var(--muted); font-size: 14px; }
    .ai-chat-input:focus { border-color: rgba(46,211,224,.4); }
    .ai-chat-send {
      flex-shrink: 0;
      width: 42px; height: 42px; 
      cursor: pointer; display: flex;
      align-items: center; justify-content: center;
      transition: opacity .2s, transform .15s;
      -webkit-tap-highlight-color: transparent;
    }
    .ai-chat-send:disabled { opacity: .4; cursor: default; box-shadow: none; }
    .ai-chat-send:active:not(:disabled) { transform: scale(.9); }
    .ai-chat-send svg { width: 18px; height: 18px; }
    .ai-chat-quota-bar {
      text-align: center; padding: 6px; font-size: var(--text-2xs);
      color: var(--muted); background: var(--card);
      border-top: 1px solid rgba(255,255,255,.04);
    }
    .ai-chat-quota-bar .remaining { color: var(--cyan); font-weight: 700; }
    .ai-chat-limit-msg {
      text-align: center; padding: 16px; font-size: 12px;
      color: var(--red); background: rgba(242,88,94,.08);
      border-radius: 12px; margin: 8px;
    }

    /* ── ChainGPT Hub ─────────────────────────────── */
    .cg-fab {
      position: fixed;
      right: 16px;
      bottom: calc(80px + env(safe-area-inset-bottom, 0px));
      width: 56px; height: 56px;
      border-radius: 50%;
      background: linear-gradient(135deg, var(--cyan), var(--purple));
      border: none; color: #0a0e27; font-size: 26px; font-weight: 700;
      box-shadow: 0 6px 20px rgba(46,211,224,.35);
      z-index: 900; cursor: pointer;
      display: flex; align-items: center; justify-content: center;
      transition: transform .18s ease;
      -webkit-tap-highlight-color: transparent;
    }
    .cg-fab:active { transform: scale(.92); }
    .cg-fab.hidden { display: none; }

    .cg-overlay {
      position: fixed; inset: 0;
      width: 100vw; height: 100vh; height: 100dvh;
      z-index: 1000; background: var(--bg);
      display: flex; flex-direction: column;
      padding-top: env(safe-area-inset-top);
      padding-bottom: env(safe-area-inset-bottom);
      transform: translateX(100%);
      transition: transform .28s cubic-bezier(.4,0,.2,1);
      overflow: hidden;
    }
    .cg-overlay:not(.hidden) { transform: translateX(0); }

    .cg-header {
      display: flex; align-items: center; gap: 10px;
      padding: 12px 16px; flex-shrink: 0;
      background: var(--card);
      border-bottom: 1px solid rgba(255,255,255,.06);
    }
    .cg-back {
      background: rgba(255,255,255,.08); border: none; border-radius: 50%;
      width: 36px; height: 36px; display: flex; align-items: center;
      justify-content: center; color: var(--text); font-size: 18px;
      cursor: pointer; flex-shrink: 0;
    }
    .cg-back:active { background: rgba(255,255,255,.16); }
    .cg-header-title {
      flex: 1; font-weight: 700; font-size: 15px; color: var(--text);
    }
    .cg-header-badge {
      font-size: var(--text-2xs); color: var(--muted);
      background: rgba(255,255,255,.06); padding: 4px 8px; border-radius: 10px;
    }

    .cg-body { flex: 1; overflow-y: auto; padding: 16px; -webkit-overflow-scrolling: touch; }
    .cg-view { display: none; }
    .cg-view.active { display: block; }

    /* Hub landing grid */
    .cg-hero {
      display: flex; align-items: center; gap: 12px;
      border-radius: 16px; padding: 14px; margin-bottom: 16px;
    }
    .cg-hero-icon { font-size: 32px; flex-shrink: 0; }
    .cg-hero-title { font-weight: 700; font-size: 14px; }
    .cg-hero-sub { font-size: 11px; color: var(--muted); margin-top: 2px; }

    .cg-grid {
      display: grid; grid-template-columns: 1fr 1fr; gap: 12px;
    }
    .cg-tool {
      background: var(--card);
      padding: 18px 14px;
      display: flex; flex-direction: column; gap: 6px;
      color: var(--text); cursor: pointer; text-align: left;
      transition: transform .15s, border-color .2s, background .2s;
      -webkit-tap-highlight-color: transparent;
    }
    .cg-tool:not(:disabled):active { transform: scale(.97); }
    .cg-tool:not(:disabled):hover { border-color: rgba(46,211,224,.3); }
    .cg-tool:disabled { opacity: .5; cursor: default; }
    .cg-tool-icon { font-size: 26px; }
    .cg-tool-label { font-weight: 700; font-size: 13px; }
    .cg-tool-desc { font-size: var(--text-2xs); color: var(--muted); line-height: 1.4; }
    .cg-tool-tag {
      display: inline-block; margin-top: 6px;
      font-size: var(--text-2xs); font-weight: 700; letter-spacing: .5px;
      padding: 2px 6px; border-radius: 4px;
      background: rgba(46,211,224,.12); color: var(--cyan);
    }
    .cg-tool-tag.soon { background: rgba(255,255,255,.06); color: var(--muted); }

    .cg-pool {
      margin-top: 18px; padding: 12px; 
      background: var(--card); 
      font-size: 11px; color: var(--muted);
    }
    .cg-pool-bar {
      height: 4px; background: rgba(255,255,255,.08); border-radius: 2px;
      overflow: hidden; margin-top: 6px;
    }
    .cg-pool-fill {
      height: 100%; 
      transition: width .3s;
    }

    /* News view */
    .cg-filters {
      display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 12px;
    }
    .cg-chip {
      background: var(--card); border: 1px solid rgba(255,255,255,.08);
      color: var(--muted); font-size: 11px; font-weight: 600;
      padding: 6px 10px; cursor: pointer;
      -webkit-tap-highlight-color: transparent; 
    }
    .cg-chip.active {
      background: rgba(46,211,224,.12); border-color: var(--cyan); color: var(--cyan);
    }
    .cg-news-list { display: flex; flex-direction: column; gap: 10px; }
    .cg-news-card {
      background: var(--card); 
      padding: 12px; cursor: pointer;
      transition: border-color .2s;
    }
    .cg-news-card:active { border-color: rgba(46,211,224,.3); }
    .cg-news-title {
      font-weight: 700; font-size: 13px; line-height: 1.35;
      color: var(--text); margin-bottom: 6px;
    }
    .cg-news-desc {
      font-size: 11px; color: var(--muted); line-height: 1.5;
      display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical;
      overflow: hidden;
    }
    .cg-news-meta {
      display: flex; gap: 8px; margin-top: 8px;
      font-size: var(--text-2xs); color: var(--muted);
    }
    .cg-news-meta .source { color: var(--cyan); font-weight: 600; }

    .cg-empty, .cg-loading {
      text-align: center; padding: 40px 20px; color: var(--muted); font-size: 12px;
    }
    .cg-error {
      background: rgba(242,88,94,.08); border: 1px solid rgba(242,88,94,.25);
      border-radius: 12px; padding: 14px; font-size: 12px; color: var(--red);
      text-align: center; margin: 12px 0;
    }

    /* Audit view */
    .cg-audit-warn {
      background: rgba(255,196,0,.08);
      border: 1px solid rgba(255,196,0,.22);
      color: #ffc400; font-size: 11px; line-height: 1.5;
      padding: 10px 12px; border-radius: 12px; margin-bottom: 12px;
    }
    .cg-chain-row {
      display: flex; align-items: center; gap: 10px;
      margin-bottom: 10px; flex-wrap: wrap;
    }
    .cg-chain-label {
      font-size: 11px; color: var(--muted); font-weight: 600;
    }
    .cg-chain-chips {
      display: flex; gap: 6px; flex-wrap: wrap; flex: 1;
    }
    .cg-resolved {
      background: rgba(46,211,224,.06);
      border: 1px solid rgba(46,211,224,.25);
      border-radius: 10px; padding: 8px 10px; margin-bottom: 10px;
      font-size: 11px; color: var(--muted); line-height: 1.5;
    }
    .cg-resolved b { color: var(--cyan); font-weight: 700; }
    .cg-audit-input {
      width: 100%;
      min-height: 200px; max-height: 50vh;
      background: var(--card); color: var(--text);
      border: 1px solid rgba(255,255,255,.08);
      padding: 12px;
      font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
      font-size: 11px; line-height: 1.5;
      resize: vertical; outline: none;
      -webkit-appearance: none;
    }
    .cg-audit-input:focus { border-color: rgba(46,211,224,.4); }
    .cg-audit-actions {
      display: flex; gap: 8px; margin-top: 12px;
    }
    .cg-audit-btn {
      flex: 1;
      padding: 12px;
      cursor: pointer; -webkit-tap-highlight-color: transparent;
    }
    .cg-audit-btn:active { transform: scale(.98); }
    .cg-audit-btn:disabled { opacity: .5; cursor: default; }
    .cg-audit-btn-secondary {
      flex: 0 0 auto;
      background: var(--card); color: var(--text);
      border: 1px solid rgba(255,255,255,.08);
    }
    .cg-audit-result {
      margin-top: 16px;
      background: var(--card); 
      padding: 14px;
      font-size: 12.5px; line-height: 1.55; color: var(--text);
      word-break: break-word;
    }
    /* Mini-Markdown prose styles (used by cgRenderMarkdown) */
    .cg-md-h1, .cg-md-h2, .cg-md-h3, .cg-md-h4, .cg-md-h5 {
      margin: 14px 0 6px; font-weight: 800; line-height: 1.3;
      color: var(--text); letter-spacing: -.2px;
    }
    .cg-md-h1 { font-size: 16px; color: var(--cyan); }
    .cg-md-h2 { font-size: 15px; color: var(--cyan); }
    .cg-md-h3 { font-size: 14px; }
    .cg-md-h4 { font-size: 13px; color: var(--muted); text-transform: uppercase; letter-spacing: .5px; }
    .cg-md-h5 { font-size: 12px; color: var(--muted); }
    .cg-audit-result p { margin: 6px 0; }
    .cg-audit-result ul { margin: 6px 0 6px 18px; padding: 0; }
    .cg-audit-result li { margin: 3px 0; }
    .cg-audit-result strong { color: var(--text); font-weight: 700; }
    .cg-audit-result code {
      background: rgba(46,211,224,.08); color: var(--cyan);
      padding: 1px 5px; border-radius: 4px;
      font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
      font-size: 11.5px;
    }
    .cg-audit-result .cg-md-sep {
      height: 1px; background: rgba(255,255,255,.06);
      margin: 12px 0; border: 0;
    }
    .cg-audit-quota {
      font-size: 11px; color: var(--muted); margin-top: 8px; text-align: right;
    }

    /* ── Validator Hub ───────────────────────────────
       Entry point is the "Validator Hub" card on Home
       (see topApyBlock).  The overlay below reuses the
       cg-overlay timing and z-index for an identical
       navigation feel. */
    .vh-overlay {
      position: fixed; inset: 0;
      width: 100vw; height: 100vh; height: 100dvh;
      z-index: 1000; background: var(--bg);
      display: flex; flex-direction: column;
      padding-top: env(safe-area-inset-top);
      padding-bottom: env(safe-area-inset-bottom);
      transform: translateX(100%);
      transition: transform .28s cubic-bezier(.4,0,.2,1);
      overflow: hidden;
    }
    .vh-overlay:not(.hidden) { transform: translateX(0); }

    .vh-header {
      display: flex; align-items: center; gap: 10px;
      padding: 12px 14px; flex-shrink: 0;
      border-bottom: 1px solid rgba(255,255,255,.06);
    }
    .vh-back {
      background: rgba(255,255,255,.08); border: none; border-radius: 50%;
      width: 36px; height: 36px; display: flex; align-items: center;
      justify-content: center; color: var(--text); font-size: 18px;
      cursor: pointer; flex-shrink: 0;
    }
    .vh-back:active { background: rgba(255,255,255,.16); }
    .vh-header-title {
      flex: 1; font-weight: 700; font-size: 15px; color: var(--text);
    }

    .vh-body { flex: 1; overflow-y: auto; padding: 12px 14px 24px; }

    .vh-empty, .vh-loading {
      text-align: center; padding: 40px 20px;
      color: var(--muted); font-size: 13px;
    }

    /* ── Bottom Tab Navigation ───────────────────── */
    .bottom-nav {
      position: fixed; bottom: 0; left: 0; right: 0; z-index: 999;
      display: flex; 
      padding: 6px max(10px, env(safe-area-inset-right)) env(safe-area-inset-bottom, 8px) max(10px, env(safe-area-inset-left));
    }
    .bottom-nav .nav-tab {
      display: flex; flex-direction: column; align-items: center; 
      padding: 4px 8px; cursor: pointer; color: var(--muted); 
      font-weight: 600; 
      background: none; border: none; -webkit-tap-highlight-color: transparent;
    }
    .bottom-nav .nav-tab.active { color: var(--cyan); }
    .nav-badge {
      position: absolute; top: -2px; right: 2px; background: var(--red);
      color: #fff; font-size: var(--text-2xs); font-weight: 700; border-radius: 50%;
      width: 14px; height: 14px; display: flex; align-items: center;
      justify-content: center;
    }
    #mainApp { padding-bottom: 68px; }
    .tab-view { display: none; }
    .tab-view.active { display: block; }

    /* ── Social Hub Shared Styles ────────────────── */
    .sh-section { padding: 16px; padding-bottom: 80px; min-height: 100vh; display: none; }
    .sh-section.active { display: block; }
    .sh-header { margin-bottom: 16px;
    }
    .sh-card {
      padding: 14px;
      margin-bottom: 10px; 
    }
    .sh-card:active { transform: scale(.98); }
    .sh-empty {
      text-align: center; padding: 40px 20px; color: var(--muted); font-size: 13px;
    }
    .sh-btn {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 6px 14px; font-size: 11px; 
      cursor: pointer; border: none; transition: transform .15s;
    }
    .sh-btn:active { transform: scale(.95); }
    .sh-btn-secondary { color: var(--text); }
    .sh-btn-danger { background: rgba(242,88,94,.15); color: var(--red); }
    .sh-btn-sm { padding: 4px 10px; font-size: var(--text-2xs); }
    .sh-tag {
      display: inline-block; padding: 2px 8px; border-radius: 6px;
      font-size: var(--text-2xs); font-weight: 700;
    }
    .sh-tag-green { background: rgba(47,212,138,.15); color: var(--green); }
    .sh-tag-red { background: rgba(242,88,94,.15); color: var(--red); }
    .sh-tag-blue { background: rgba(46,211,224,.15); color: var(--cyan); }
    .sh-tag-muted { background: rgba(255,255,255,.06); color: var(--muted); }
    .sh-perf {
      font-size: 16px; font-weight: 800;
    }
    .sh-perf.pos { color: var(--green); }
    .sh-perf.neg { color: var(--red); }

    /* ── My Watchlists Tab ──────────────────────── */
    .wl-create-row {
      display: flex; gap: 8px; margin-bottom: 14px;
    }
    .wl-create-row input {
      flex: 1; background: var(--card); border: 1px solid rgba(255,255,255,.1);
      border-radius: 8px; padding: 8px 12px; color: var(--text); font-size: 13px;
    }
    .wl-header {
      display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;
    }
    .wl-name { font-size: 15px; font-weight: 700; color: var(--text); }
    .wl-desc { font-size: 11px; color: var(--muted); margin-bottom: 8px; }
    .wl-coins {
      display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px;
    }
    .wl-coin {
      background: rgba(255,255,255,.06); border-radius: 6px; padding: 3px 8px;
      font-size: var(--text-2xs); font-weight: 600; color: var(--text); display: flex;
      align-items: center; gap: 4px;
    }
    .wl-coin .rm { cursor: pointer; color: var(--red); font-size: 12px; }
    .wl-footer {
      display: flex; justify-content: space-between; align-items: center;
      margin-top: 6px; padding-top: 8px; border-top: 1px solid rgba(255,255,255,.04);
    }
    .wl-meta { font-size: var(--text-2xs); color: var(--muted); display: flex; gap: 10px; }

    /* Add Coin Modal */
    .acm-overlay {
      position: fixed; inset: 0; z-index: 9998; background: rgba(0,0,0,.6);
      display: flex; align-items: flex-end; justify-content: center;
    }
    .acm-overlay.hidden { display: none; }
    .acm-sheet {
      background: var(--bg); border-radius: 18px 18px 0 0; width: 100%;
      max-width: 500px; max-height: 70vh; overflow-y: auto; padding: 20px;
    }
    .acm-search {
      width: 100%; background: var(--card); border: 1px solid rgba(255,255,255,.1);
      padding: 10px 14px; color: var(--text); font-size: 14px;
      margin-bottom: 12px;
    }
    .acm-list { max-height: 50vh; overflow-y: auto; }
    .acm-item {
      display: flex; justify-content: space-between; align-items: center;
      padding: 10px; border-radius: 8px; cursor: pointer; transition: background .2s;
    }
    .acm-item:hover { background: rgba(255,255,255,.04); }
    .acm-item-name { font-size: 13px; font-weight: 600; }
    .acm-item-sub { font-size: var(--text-2xs); color: var(--muted); }
    .acm-item-right { display: flex; align-items: center; gap: 8px; }
    .acm-item-check {
      width: 20px; height: 20px; border-radius: 50%; display: flex;
      align-items: center; justify-content: center; font-size: 12px;
      background: rgba(255,255,255,.08); color: transparent;
      border: 1px solid rgba(255,255,255,.12); flex-shrink: 0;
    }
    .acm-item.added { background: rgba(34,197,94,.08); cursor: default; }
    .acm-item.added:hover { background: rgba(34,197,94,.12); }
    .acm-item.added .acm-item-name { color: var(--muted); }
    .acm-item.added .acm-item-check {
      background: var(--green); color: #fff; border-color: var(--green);
    }

    /* ── Filter pill row (used by Battles & Ranking) ──── */
    .disc-filters {
      display: flex; gap: 6px; margin-bottom: 12px; overflow-x: auto;
      -webkit-overflow-scrolling: touch; scrollbar-width: none;
    }
    .disc-filters::-webkit-scrollbar { display: none; }
    .disc-filter {
      white-space: nowrap; padding: 6px 12px; border-radius: 8px;
      font-size: 11px; font-weight: 700; cursor: pointer;
      background: rgba(255,255,255,.06); color: var(--muted); border: none;
    }
    .disc-filter.active { background: rgba(46,211,224,.15); color: var(--cyan); }

    /* ── Battles Tab ─────────────────────────────── */
    .battle-card {
      display: flex; align-items: center; gap: 10px;
    }
    .battle-vs {
      font-size: 16px; font-weight: 800; color: var(--purple);
      flex-shrink: 0;
    }
    .battle-side {
      flex: 1; text-align: center;
    }
    .battle-side-leading .battle-name { color: var(--green); }
    .battle-name { font-size: 12px; font-weight: 700; color: var(--text); }
    .battle-wl { font-size: var(--text-2xs); color: var(--muted); }
    .battle-perf { font-size: 18px; font-weight: 800; margin-top: 4px; }
    .battle-bar-wrap {
      display: flex; height: 6px; border-radius: 3px; overflow: hidden;
      margin: 8px 0 2px;
    }
    .battle-bar-c { background: var(--green); transition: width .4s ease; }
    .battle-bar-o { background: var(--red); transition: width .4s ease; }
    .battle-status {
      text-align: center; margin-top: 6px; padding-top: 8px;
      border-top: 1px solid rgba(255,255,255,.04);
      font-size: var(--text-2xs); color: var(--muted);
    }
    .battle-info-box {
      padding: 10px 12px; margin-bottom: 14px; 
    }
    .battle-info-toggle {
      display: flex; justify-content: space-between; align-items: center;
      cursor: pointer; color: var(--muted); font-weight: 700; user-select: none;
    }
    .battle-info-body {
      margin-top: 8px; line-height: 1.6; color: var(--muted);
      border-top: 1px solid rgba(255,255,255,.05); padding-top: 8px;
    }

    /* ── Social Leaderboard Tab ──────────────────── */
    .slb-rank {
      display: flex; align-items: center; gap: 12px; padding: 10px 0;
      border-bottom: 1px solid rgba(255,255,255,.03);
    }
    .slb-pos {
      font-size: 16px; font-weight: 800; width: 28px; text-align: center;
      color: var(--muted);
    }
    .slb-pos.gold { color: var(--gold); }
    .slb-pos.silver { color: #c0c0c0; }
    .slb-pos.bronze { color: #cd7f32; }
    .slb-info { flex: 1; }
    .slb-name { font-size: 13px; font-weight: 700; }
    .slb-owner { font-size: var(--text-2xs); color: var(--muted); }
    .slb-perf { text-align: right; }
    .slb-pct { font-size: 16px; font-weight: 800; }
    .slb-followers { font-size: var(--text-2xs); color: var(--muted); }

    /* ── Battle Sub-Tabs ──────────────────────────── */
    .battle-subtabs {
      margin-bottom: 14px;
    }
    .battle-subtab {
      flex: 1; padding: 7px 0; 
      border: none; cursor: pointer;
      transition: background .2s, color .2s;
    }

    /* ── Season Leaderboard ───────────────────────── */
    .blb-my-card {
      background: rgba(46,211,224,.07); border: 1px solid rgba(46,211,224,.18);
      border-radius: 12px; padding: 12px 14px; margin-bottom: 14px;
    }
    .blb-my-title {
      font-size: var(--text-2xs); font-weight: 700; color: var(--cyan);
      text-transform: uppercase; letter-spacing: .5px; margin-bottom: 8px;
    }
    .blb-my-stats {
      display: flex; gap: 16px; flex-wrap: wrap;
    }
    .blb-my-stat { text-align: center; }
    .blb-my-val { font-size: 18px; font-weight: 800; color: var(--text); }
    .blb-my-lbl { font-size: var(--text-2xs); color: var(--muted); margin-top: 2px; }
    .blb-reward-banner {
      margin-top: 10px; padding: 7px 10px;
      text-align: center;
    }
    .blb-row {
      display: flex; align-items: center; gap: 10px;
      padding: 10px 0; border-bottom: 1px solid rgba(255,255,255,.03);
    }
    .blb-pos {
      font-size: 15px; font-weight: 800; width: 28px; text-align: center;
      color: var(--muted);
    }
    .blb-pos.gold { color: var(--gold); }
    .blb-pos.silver { color: #c0c0c0; }
    .blb-pos.bronze { color: #cd7f32; }
    .blb-pos.me { color: var(--cyan); }
    .blb-info { flex: 1; min-width: 0; }
    .blb-name {
      font-size: 13px; font-weight: 700; white-space: nowrap;
      overflow: hidden; text-overflow: ellipsis;
    }
    .blb-wl { font-size: var(--text-2xs); color: var(--muted); }
    .blb-right { text-align: right; flex-shrink: 0; }
    .blb-gain { font-size: 15px; font-weight: 800; }
    .blb-wl-detail { font-size: var(--text-2xs); color: var(--muted); }
    .blb-season-sel {
      width: 100%; padding: 8px 10px; margin-bottom: 12px;
      background: rgba(255,255,255,.06); border: 1px solid rgba(255,255,255,.1);
      border-radius: 8px; color: var(--text); font-size: 12px; cursor: pointer;
      appearance: none;
    }
    .blb-season-info {
      font-size: var(--text-2xs); color: var(--muted); text-align: center;
      margin-bottom: 10px;
    }

    /* ── Ranking Tab ──────────────────────────────── */
    .rnk-subtabs {
      margin-bottom: 14px;
    }
    .rnk-subtab {
      flex: 1; padding: 7px 4px; 
      border: none; cursor: pointer;
      transition: background .2s, color .2s; white-space: nowrap;
    }
    .rnk-progress-wrap {
      margin-bottom: 14px;
    }
    .rnk-progress-label {
      display: flex; justify-content: space-between; align-items: center;
      font-size: var(--text-2xs); color: var(--muted); margin-bottom: 4px;
    }
    .rnk-progress-bar-bg {
      height: 5px; background: rgba(255,255,255,.08); border-radius: 3px; overflow: hidden;
    }
    .rnk-progress-bar-fill {
      height: 100%; border-radius: 3px;
      transition: width .4s ease;
    }
    .rnk-hof-row {
      display: flex; align-items: center; gap: 12px; padding: 10px 0;
      border-bottom: 1px solid rgba(255,255,255,.03);
    }
    .rnk-hof-season {
      flex: 1;
    }
    .rnk-hof-name {
      font-size: 12px; font-weight: 700;
    }
    .rnk-hof-dates {
      font-size: var(--text-2xs); color: var(--muted); margin-top: 2px;
    }
    .rnk-hof-winner {
      text-align: right; font-size: 12px; font-weight: 700; color: var(--gold);
    }
    .rnk-go-ranking {
      display: block; text-align: center; margin-top: 14px;
      padding: 9px 0; 
      cursor: pointer;
    }

    /* ── Admin Panel ──────────────────────────────── */
    .admin-panel { padding: 12px; }
    .admin-panel-header { font-size: 20px; font-weight: 800; margin-bottom: 16px; text-align: center; }
    .admin-stats-grid {
      display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 18px;
    }
    .admin-stat-card {
      padding: 14px 10px; text-align: center;
    }
    .admin-stat-value { font-size: 22px; font-weight: 800; color: var(--cyan); }
    .admin-stat-label { font-size: 11px; color: var(--muted); margin-top: 2px; }
    .admin-section {
      padding: 14px; margin-bottom: 14px;
    }
    .admin-section-title { font-size: 14px; font-weight: 700; margin-bottom: 10px; }
    .admin-textarea {
      width: 100%; box-sizing: border-box;
      background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.12);
      border-radius: 10px; color: var(--text); font-size: 14px;
      padding: 12px; resize: vertical; min-height: 100px; outline: none;
      font-family: inherit;
    }
    .admin-textarea:focus { border-color: var(--cyan); }
    .admin-input {
      width: 100%; box-sizing: border-box;
      background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.12);
      border-radius: 10px; color: var(--text); font-size: 14px;
      padding: 10px 12px; outline: none; font-family: inherit; margin-bottom: 8px;
    }
    .admin-input:focus { border-color: var(--cyan); }
    .admin-input::placeholder { color: var(--muted); }
    .admin-row { display: flex; gap: 8px; margin-bottom: 8px; }
    .admin-row .admin-input { flex: 1; margin-bottom: 0; }
    .admin-send-btn {
      margin-top: 8px; width: 100%; padding: 12px;
      background: var(--cyan); color: #000; border: none; border-radius: 10px;
      font-size: 14px; font-weight: 700; cursor: pointer;
    }
    .admin-send-btn:disabled { opacity: .5; cursor: not-allowed; }
    .admin-send-btn.danger { background: #ff4444; color: #fff; }
    .admin-result {
      margin-top: 8px; font-size: 12px; color: var(--muted);
      min-height: 18px; text-align: center;
    }
    /* Taostats-Verbrauch je Kalendermonat (adminLoadTsUsage). */
    .tsu { text-align: left; color: var(--text); }
    .tsu-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
    .tsu-month { font-size: var(--text-sm); font-weight: 700; }
    .tsu-nav-btn {
      min-width: 44px; min-height: 44px; border-radius: 10px; border: none;
      background: var(--surface-subtle); color: var(--text); font-size: var(--text-lg); cursor: pointer;
    }
    .tsu-nav-btn:disabled { opacity: .35; cursor: default; }
    .tsu-total { font-size: var(--text-2xl); font-weight: 800; margin-top: 6px; font-variant-numeric: tabular-nums; }
    .tsu-sub { font-size: var(--text-xs); color: var(--muted); margin-top: 2px; }
    .tsu-bars {
      display: flex; align-items: flex-end; gap: 2px; height: 56px; margin-top: 12px;
      padding-bottom: 1px; border-bottom: 1px solid var(--border-subtle);
    }
    .tsu-bar { flex: 1 1 0; min-width: 0; border-radius: 2px 2px 0 0; background: var(--cyan); }
    .tsu-bar.is-partial { opacity: .5; }
    .tsu-bar.is-none { height: 2px; background: var(--border-medium); }
    .tsu-bar.is-future { height: 0; background: transparent; }
    .tsu-axis { display: flex; justify-content: space-between; font-size: var(--text-2xs); color: var(--muted); margin-top: 3px; }
    .tsu-src { margin-top: 12px; }
    .tsu-row {
      display: flex; justify-content: space-between; gap: 10px; padding: 3px 0;
      font-size: var(--text-xs); font-variant-numeric: tabular-nums;
    }
    .tsu-row > span:first-child { min-width: 0; overflow-wrap: anywhere; color: var(--muted); }
    .tsu-row > span:last-child { white-space: nowrap; }
    .tsu-note { font-size: var(--text-2xs); color: var(--muted); margin-top: 10px; }
    .tsu-note.is-warn { color: var(--warn); }

    /* ── Willkommen (erster Start) ─────────────────────────
       Eine Spalte, oben Zurück · Fortschritt · Sprache, unten der eine
       Knopf. Nur Tokens: dasselbe Bild in Hell und Dunkel, und in jeder
       der 16 Sprachen (logische Ränder, damit Arabisch spiegelt). */
    .wl-overlay {
      position: fixed; inset: 0; z-index: 9997; background: var(--bg); color: var(--text);
      display: flex; flex-direction: column; align-items: center;
      padding: max(14px, env(safe-area-inset-top, 0px)) 20px max(16px, env(safe-area-inset-bottom, 0px));
      /* iOS-Safari zeichnet unter seine schwebende Leiste, was hinter dem
         Overlay liegt; der Schatten deckt diesen Streifen mit dem Grund. */
      box-shadow: 0 50vh 0 0 var(--bg);
    }
    .wl-overlay.hidden { display: none; }
    body.wl-open { overflow: hidden; }
    .wl-top, .wl-body, .wl-foot { width: 100%; max-width: 440px; }
    .wl-top { display: flex; align-items: center; gap: 10px; min-height: 44px; flex-shrink: 0; }
    .wl-back {
      width: 44px; height: 44px; margin-inline-start: -10px; border: 0; background: none;
      color: var(--text); display: flex; align-items: center; justify-content: center; cursor: pointer; border-radius: 12px;
    }
    .wl-back.hidden { visibility: hidden; }
    .wl-back .wl-ic { width: 22px; height: 22px; }
    [dir="rtl"] .wl-back .wl-ic { transform: scaleX(-1); }
    .wl-dots { flex: 1; display: flex; gap: 6px; justify-content: center; }
    .wl-dot { width: 22px; height: 4px; border-radius: 2px; background: var(--border-medium); transition: background .2s, width .2s; }
    .wl-dot.done { background: var(--muted); }
    .wl-dot.on { width: 34px; background: var(--cyan); }
    .wl-lang {
      display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 6px 12px;
      border: 1px solid var(--border-medium); border-radius: 999px; background: var(--surface-subtle);
      color: var(--text); font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; max-width: 46%;
    }
    .wl-lang .wl-ic { width: 16px; height: 16px; flex-shrink: 0; color: var(--muted); }
    .wl-lang-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .wl-body {
      flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch;
      display: flex; flex-direction: column; justify-content: center; padding: 18px 0 12px;
    }
    .wl-body.wl-in { animation: wlIn .28s ease both; }
    @keyframes wlIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
    @media (prefers-reduced-motion: reduce) { .wl-body.wl-in { animation: none; } }
    .wl-mark {
      width: 56px; height: 56px; border-radius: 16px; background: var(--cyan); color: var(--on-accent);
      display: flex; align-items: center; justify-content: center; font-size: 30px; font-weight: 700;
      line-height: 1; margin-bottom: 22px; flex-shrink: 0;
    }
    .wl-mark-ic { background: var(--surface-subtle); color: var(--cyan); }
    .wl-mark-ic .wl-ic { width: 28px; height: 28px; }
    .wl-title {
      font-size: 28px; line-height: 1.15; font-weight: 700; color: var(--text);
      margin: 0 0 10px; text-align: start; overflow-wrap: anywhere;
    }
    .wl-sub { font-size: 15px; line-height: 1.5; color: var(--muted); margin: 0 0 24px; text-align: start; }
    .wl-facts { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
    .wl-fact {
      display: flex; align-items: flex-start; gap: 14px; padding: 14px;
      background: var(--surface-subtle); border-radius: 14px; text-align: start;
    }
    .wl-fact-ic, .wl-opt-ic {
      flex-shrink: 0; width: 38px; height: 38px; border-radius: 11px; background: var(--bg);
      color: var(--cyan); display: flex; align-items: center; justify-content: center;
    }
    .wl-ic { width: 20px; height: 20px; display: block; }
    .wl-fact-tx, .wl-opt-tx { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1; }
    .wl-fact-t, .wl-opt-t { font-size: 15px; font-weight: 600; color: var(--text); line-height: 1.3; }
    .wl-fact-d, .wl-opt-d { font-size: 13px; color: var(--muted); line-height: 1.45; }
    .wl-opts { display: flex; flex-direction: column; gap: 10px; }
    .wl-opt {
      display: flex; align-items: center; gap: 14px; width: 100%; padding: 14px; min-height: 64px;
      background: var(--surface-subtle); border: 1px solid transparent; border-radius: 14px;
      color: var(--text); font: inherit; text-align: start; cursor: pointer;
      transition: border-color .15s, background .15s;
    }
    .wl-opt:hover, .wl-opt.is-on { border-color: var(--cyan); }
    .wl-opt:active { transform: scale(.99); }
    .wl-opt-go { color: var(--muted); flex-shrink: 0; }
    .wl-opt-go .wl-ic { width: 18px; height: 18px; }
    [dir="rtl"] .wl-opt-go .wl-ic { transform: scaleX(-1); }
    .wl-input {
      width: 100%; box-sizing: border-box; min-height: 50px; padding: 12px 14px;
      background: var(--surface-subtle); border: 1px solid var(--border-medium); border-radius: 12px;
      color: var(--text); font: inherit; font-size: 15px; outline: none; direction: ltr; text-align: start;
    }
    .wl-input:focus { border-color: var(--cyan); }
    .wl-input.is-bad { border-color: var(--red); }
    .wl-err { margin: 8px 0 0; font-size: 13px; color: var(--red); line-height: 1.4; text-align: start; }
    .wl-note {
      display: flex; gap: 10px; align-items: flex-start; margin: 16px 0 0;
      font-size: 13px; color: var(--muted); line-height: 1.45; text-align: start;
    }
    .wl-note .wl-ic { width: 18px; height: 18px; flex-shrink: 0; color: var(--cyan); margin-top: 1px; }
    .wl-foot { display: flex; flex-direction: column; gap: 6px; padding-top: 10px; flex-shrink: 0; }
    .wl-cta {
      width: 100%; min-height: 52px; border: 0; border-radius: 14px; cursor: pointer;
      background: var(--cyan); color: var(--on-accent); font: inherit; font-size: 16px; font-weight: 700;
    }
    .wl-cta:disabled { opacity: .6; cursor: progress; }
    /* Hell: die Akzentfläche ist dunkles Petrol, die Schrift darauf weiß
       (dieselbe Regel wie die übrigen Primärknöpfe, Teil 6 §7). */
    html[data-theme="light"] .wl-cta, html[data-theme="light"] .wl-mark:not(.wl-mark-ic) { color: var(--card); }
    .wl-ghost {
      width: 100%; min-height: 46px; border: 0; background: none; cursor: pointer;
      color: var(--muted); font: inherit; font-size: 15px; font-weight: 600;
    }
    @media (max-height: 640px) {
      .wl-mark { width: 44px; height: 44px; font-size: 24px; margin-bottom: 14px; }
      .wl-title { font-size: 24px; }
      .wl-sub { margin-bottom: 16px; }
      .wl-fact { padding: 11px 12px; }
    }

    /* ── Milo-style Thesis Card (home — dynamic "Subnet of the Day") ────── */
    .milo-thesis-card { position:relative;padding:18px 18px 16px;margin:6px 0 12px;overflow:hidden;transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease }
    .milo-thesis-card[data-netuid] { cursor:pointer }
    .milo-thesis-card[data-netuid]:hover { border-color:rgba(46,211,224,.28);box-shadow:0 4px 22px rgba(46,211,224,.08) }
    .milo-thesis-card[data-netuid]:active { transform:scale(.995) }
    .milo-thesis-card::before { content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,var(--green),var(--cyan)) }
    .mtc-head { display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px }
    .mtc-head-left { display:flex;align-items:center;gap:10px;min-width:0 }
    .mtc-badge { display:inline-flex;align-items:center;gap:5px;padding:3px 8px;background:rgba(47,212,138,.15);color:var(--green);border-radius:999px;font-size:var(--text-2xs);font-weight:800;letter-spacing:.5px;text-transform:uppercase }
    .mtc-title { font-size:15px;font-weight:800;color:#fff;letter-spacing:.2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap }
    .mtc-change { font-size:14px;font-weight:800;color:var(--green);white-space:nowrap }
    .mtc-change.neg { color:var(--red) }
    .mtc-dismiss { background:transparent;border:none;color:var(--muted);font-size:18px;cursor:pointer;padding:0 2px;line-height:1 }
    .mtc-dismiss:hover { color:var(--text) }
    .mtc-thesis { font-size:13.5px;color:var(--text);line-height:1.55;margin-bottom:14px }
    .mtc-thesis em { color:var(--cyan);font-style:normal;font-weight:700 }
    .mtc-kpis { display:grid;grid-template-columns:repeat(2,1fr);gap:10px;padding-top:12px;border-top:1px solid rgba(255,255,255,.06) }
    .mtc-kpi { text-align:center }
    .mtc-kpi-val { font-size:18px;font-weight:800;color:#fff;line-height:1.1 }
    .mtc-kpi-val.good { color:var(--green) }
    .mtc-kpi-val.warn { color:var(--gold) }
    .mtc-kpi-lbl { font-size:var(--text-2xs);color:var(--muted);letter-spacing:.4px;text-transform:uppercase;margin-top:4px }

    /* ── Terminal-style Alpha Signal Feed ───────── */
    .alpha-feed { position:relative;margin:0 0 12px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;overflow:hidden }
    .alpha-feed::before { content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(120% 60% at 0% 0%,rgba(46,211,224,.06),transparent 60%);border-radius:inherit }
    .af-head { display:flex;align-items:center;gap:8px;font-size:var(--text-2xs);letter-spacing:1.2px;color:var(--cyan);text-transform:uppercase;position:relative }
    .af-dot { width:6px;height:6px;border-radius:50%;background:var(--cyan);box-shadow:0 0 8px var(--cyan);animation:afPulse 1.4s ease-in-out infinite }
    @keyframes afPulse { 0%,100% { opacity:.45 } 50% { opacity:1 } }
    .af-live { margin-left:auto;}
    .af-body { display:flex;flex-direction:column;gap:2px;position:relative }
    .af-row { white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:default;transition:color .2s,opacity .4s;border-radius:4px;}
    .af-row[data-netuid] { cursor:pointer }
    .af-row .af-kind { font-weight:800;letter-spacing:.5px }
    .af-kind-alpha { color:var(--cyan);text-shadow:0 0 6px rgba(46,211,224,.55) }
    .af-kind-alert { color:#ff6e6e;text-shadow:0 0 6px rgba(255,110,110,.5) }
    .af-kind-signal { color:var(--green);text-shadow:0 0 6px rgba(47,212,138,.5) }
    .af-row .af-arrow { color:rgba(255,255,255,.3);padding:0 4px }
    .af-row.af-fade-1 { opacity:.78 }
    .af-row.af-fade-2 { opacity:.6 }
    .af-row.af-fade-3 { opacity:.45 }
    .af-row.af-fade-4 { opacity:.3 }
    @keyframes afFlash { 0% { background:rgba(46,211,224,.22);color:#fff;text-shadow:0 0 12px rgba(46,211,224,.8) } 100% { background:transparent } }

    /* ── Pump Engine — Take-Profit Highlights (Free teaser) ── */

    /* ── Pool LP Simulator card ───────────────── */
    .pls-section { position:relative;margin:0 0 14px;padding:14px 14px 13px;overflow:hidden }
    .pls-section::before { content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(120% 60% at 0% 0%,rgba(46,211,224,.08),transparent 55%),radial-gradient(80% 60% at 100% 100%,rgba(143,157,255,.08),transparent 55%);border-radius:inherit }
    .pls-head { display:flex;align-items:center;gap:8px;margin-bottom:10px;position:relative }
    .pls-head h2 { margin:0;letter-spacing:.2px }
    .pls-badge { letter-spacing:1px;text-transform:uppercase;}
    .pls-controls { display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px;position:relative }
    .pls-control { display:flex;flex-direction:column;gap:4px;min-width:0 }
    .pls-label { font-size:var(--text-2xs);letter-spacing:.8px;color:var(--muted);text-transform:uppercase;font-weight:700 }
    .pls-input, .pls-select { width:100%;min-width:0;background:rgba(0,0,0,.35);border:1px solid rgba(255,255,255,.12);color:#fff;border-radius:8px;padding:9px 10px;font-size:13.5px;font-weight:600;outline:none;transition:border-color .15s }
    .pls-input:focus, .pls-select:focus { border-color:var(--cyan) }
    .pls-input::-webkit-outer-spin-button, .pls-input::-webkit-inner-spin-button { -webkit-appearance:none;margin:0 }
    .pls-input[type=number] { -moz-appearance:textfield }
    .pls-slider-row { display:flex;align-items:center;gap:8px;margin:4px 0 10px;position:relative }
    .pls-slider { flex:1;-webkit-appearance:none;appearance:none;border-radius:4px;outline:none;cursor:pointer }
    .pls-slider::-webkit-slider-thumb { -webkit-appearance:none;border-radius:50%;background:var(--cyan);cursor:grab;}
    .pls-slider::-moz-range-thumb { border-radius:50%;background:var(--cyan);cursor:grab;}
    .pls-slider-val { min-width:80px;text-align:right;font-size:13px;font-variant-numeric:tabular-nums }
    .pls-result { background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:11px 12px;display:grid;grid-template-columns:1fr 1fr;gap:6px 10px;margin-bottom:10px;position:relative }
    .pls-row { display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px;line-height:1.45 }
    .pls-row-lbl { color:var(--muted);font-weight:600 }
    .pls-row-val { color:#fff;font-weight:700;font-variant-numeric:tabular-nums }
    .pls-row-val.cyan { color:var(--cyan) }
    .pls-row-val.good { color:var(--green) }
    .pls-row-val.warn { color:var(--gold) }
    .pls-row-val.bad  { color:var(--red) }
    .pls-slip-banner { grid-column:1/-1;margin-top:4px;padding:8px 10px;border-radius:8px;font-size:12.5px;font-weight:700;display:flex;align-items:center;gap:7px }
    .pls-slip-banner.good { background:rgba(47,212,138,.12);border:1px solid rgba(47,212,138,.3);color:var(--green) }
    .pls-slip-banner.warn { background:rgba(240,180,41,.10);border:1px solid rgba(240,180,41,.3);color:var(--gold) }
    .pls-slip-banner.bad  { background:rgba(242,88,94,.12);border:1px solid rgba(242,88,94,.32);color:var(--red) }
    .pls-cliff { display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:10px;position:relative }
    .pls-cliff-card { background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:8px 6px;text-align:center }
    .pls-cliff-val { font-size:13.5px;font-weight:800;color:#fff;font-variant-numeric:tabular-nums }
    .pls-cliff-lbl { font-size:var(--text-2xs);color:var(--muted);letter-spacing:.4px;margin-top:2px;text-transform:uppercase }
    .pls-cliff-card.warn .pls-cliff-val { color:var(--gold) }
    .pls-cliff-card.bad  .pls-cliff-val { color:var(--red) }
    .pls-scenarios { display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:10px;position:relative }
    .pls-scn { background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:9px 7px;text-align:center;transition:transform .15s,border-color .15s }
    .pls-scn:hover { transform:translateY(-1px);border-color:rgba(46,211,224,.3) }
    .pls-scn-lbl { font-size:var(--text-2xs);color:var(--muted);letter-spacing:.5px;text-transform:uppercase;margin-bottom:4px;font-weight:700 }
    .pls-scn-val { font-size:14px;font-weight:800;font-variant-numeric:tabular-nums;color:#fff }
    .pls-scn-val.good { color:var(--green) }
    .pls-scn-val.bad  { color:var(--red) }
    .pls-scn-delta { font-size:var(--text-2xs);color:var(--muted);margin-top:2px;font-variant-numeric:tabular-nums }
    .pls-depth { position:relative;background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:9px 11px 6px;margin-bottom:10px }
    .pls-depth-head { display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px }
    .pls-depth-title { font-size:var(--text-2xs);color:var(--muted);letter-spacing:.6px;text-transform:uppercase;font-weight:700 }
    .pls-depth-now { font-size:11.5px;color:#fff;font-weight:700;font-variant-numeric:tabular-nums }
    .pls-depth-canvas { display:block;width:100%;height:50px }
    .pls-pressure { position:relative;background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:9px 11px }
    .pls-pressure-head { display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px }
    .pls-pressure-title { font-size:var(--text-2xs);color:var(--muted);letter-spacing:.6px;text-transform:uppercase;font-weight:700 }
    .pls-pressure-bias { font-size:11px;font-weight:800;letter-spacing:.5px;text-transform:uppercase }
    .pls-pressure-bias.buy  { color:var(--green) }
    .pls-pressure-bias.sell { color:var(--red) }
    .pls-pressure-bias.neutral { color:var(--muted) }
    .pls-pressure-bar { display:flex;height:6px;border-radius:3px;overflow:hidden;background:rgba(255,255,255,.06) }
    .pls-pressure-buy  { background:var(--green);transition:flex .3s }
    .pls-pressure-sell { background:var(--red);transition:flex .3s }
    .pls-pressure-nums { display:flex;justify-content:space-between;font-size:var(--text-2xs);color:var(--muted);margin-top:5px;font-variant-numeric:tabular-nums }
    .pls-pressure-nums b { color:#fff;font-weight:700 }
    .pls-empty { padding:18px 12px;text-align:center;font-size:12.5px;color:var(--muted);font-style:italic }
    .pls-disclaimer { font-size:var(--text-2xs);color:var(--muted);line-height:1.45;margin-top:8px;opacity:.75;position:relative }
    /* Period toggle (7d / 30d) */
    .pls-period-toggle { display:inline-flex;background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.08);border-radius:6px;padding:2px;gap:2px }
    .pls-period-btn { background:transparent;border:none;color:var(--muted);font-size:var(--text-2xs);font-weight:700;letter-spacing:.5px;padding:3px 9px;border-radius:4px;cursor:pointer;transition:background .15s,color .15s }
    .pls-period-btn.on { background:rgba(46,211,224,.18);color:var(--cyan) }
    .pls-period-btn:hover:not(.on) { color:#fff }
    /* Turnover row */
    .pls-turnover { display:flex;align-items:center;justify-content:space-between;gap:10px;background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:9px 11px;margin-bottom:10px;position:relative }
    .pls-turnover-lbl { font-size:11px;color:var(--muted);letter-spacing:.4px;text-transform:uppercase;font-weight:700 }
    .pls-turnover-val { font-size:14px;font-weight:800;color:#fff;font-variant-numeric:tabular-nums }
    .pls-turnover-tier { letter-spacing:.6px;padding:3px 7px;border-radius:5px;text-transform:uppercase }
    .pls-turnover-tier.deep     { background:rgba(47,212,138,.16);color:var(--green);border:1px solid rgba(47,212,138,.3) }
    .pls-turnover-tier.healthy  { background:rgba(46,211,224,.16);color:var(--cyan);border:1px solid rgba(46,211,224,.3) }
    .pls-turnover-tier.moderate { background:rgba(240,180,41,.14);color:var(--gold);border:1px solid rgba(240,180,41,.3) }
    .pls-turnover-tier.thin     { background:rgba(242,88,94,.14);color:var(--red);border:1px solid rgba(242,88,94,.3) }
    /* 14d daily flow stacked bars */
    .pls-flow { position:relative;background:rgba(0,0,0,.32);border:1px solid rgba(255,255,255,.08);border-radius:10px;padding:9px 11px 7px;margin-bottom:10px }
    .pls-flow-head { display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px }
    .pls-flow-title { font-size:var(--text-2xs);color:var(--muted);letter-spacing:.6px;text-transform:uppercase;font-weight:700 }
    .pls-flow-legend { display:flex;gap:8px;font-size:var(--text-2xs);color:var(--muted) }
    .pls-flow-legend .lg-buy::before  { content:'';display:inline-block;width:7px;height:7px;border-radius:2px;background:var(--green);margin-right:3px;vertical-align:middle }
    .pls-flow-legend .lg-sell::before { content:'';display:inline-block;width:7px;height:7px;border-radius:2px;background:var(--red);margin-right:3px;vertical-align:middle }
    .pls-flow-canvas { display:block;width:100%;height:64px }
    /* HODL Opportunity-Cost card */
    .pls-hodl { position:relative;border-radius:12px;padding:11px 12px 10px;margin-bottom:10px;overflow:hidden }
    .pls-hodl::before { content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(120% 60% at 0% 0%,rgba(143,157,255,.08),transparent 55%);border-radius:inherit }
    .pls-hodl-head { display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px;position:relative }
    .pls-hodl-title { font-size:var(--text-2xs);color:var(--muted);letter-spacing:.6px;text-transform:uppercase;font-weight:700 }
    .pls-hodl-window { font-size:var(--text-2xs);color:var(--muted);font-variant-numeric:tabular-nums }
    .pls-hodl-summary { display:flex;align-items:baseline;gap:7px;margin-bottom:8px;position:relative }
    .pls-hodl-delta { font-size:22px;font-weight:900;font-variant-numeric:tabular-nums;letter-spacing:-.4px }
    .pls-hodl-delta.win  { color:var(--green) }
    .pls-hodl-delta.lose { color:var(--red) }
    .pls-hodl-delta.tie  { color:var(--muted) }
    .pls-hodl-label { font-size:11.5px;color:rgba(255,255,255,.78);font-weight:600 }
    .pls-hodl-paths { display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-bottom:8px;position:relative }
    .pls-hodl-path { background:rgba(0,0,0,.3);border:1px solid rgba(255,255,255,.06);border-radius:8px;padding:7px 9px;text-align:center }
    .pls-hodl-path-lbl { font-size:var(--text-2xs);color:var(--muted);letter-spacing:.4px;text-transform:uppercase;font-weight:700;margin-bottom:2px }
    .pls-hodl-path-val { font-size:13.5px;font-weight:800;font-variant-numeric:tabular-nums }
    .pls-hodl-path-val.up   { color:var(--green) }
    .pls-hodl-path-val.down { color:var(--red) }
    .pls-hodl-canvas { display:block;width:100%;height:60px;position:relative }
    .pls-hodl-foot { font-size:var(--text-2xs);color:var(--muted);margin-top:4px;line-height:1.45;position:relative }
    @media (max-width:380px) {
      .pls-controls { grid-template-columns:1fr }
      .pls-result { grid-template-columns:1fr }
      .pls-hodl-paths { grid-template-columns:1fr }
    }

    /* ── Smart-Money "PULSE" card ──────────────── */
    .pulse-card { position:relative;margin:0 0 12px;border-radius:18px;padding:14px 14px 12px;background:linear-gradient(160deg,rgba(10,13,20,.92),rgba(19,24,36,.85));overflow:hidden;cursor:pointer;transition:transform .18s cubic-bezier(.22,1,.36,1),box-shadow .25s }
    .pulse-card:active { transform:scale(.985) }
    .pulse-card::before { content:'';position:absolute;inset:-2px;border-radius:20px;padding:2px;background:conic-gradient(from var(--pulse-spin,0deg),rgba(46,211,224,.95),rgba(143,157,255,.95),rgba(240,180,41,.7),rgba(46,211,224,.95));-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:pulseSpin 9s linear infinite;pointer-events:none;opacity:.85 }
    .pulse-card::after { content:'';position:absolute;inset:0;background:radial-gradient(120% 70% at 0% 0%,rgba(46,211,224,.10),transparent 55%),radial-gradient(80% 60% at 100% 100%,rgba(143,157,255,.10),transparent 55%);border-radius:18px;pointer-events:none }
    @property --pulse-spin { syntax:'<angle>';inherits:false;initial-value:0deg }
    @keyframes pulseSpin { to { --pulse-spin:360deg } }
    @supports not (background:conic-gradient(from 0deg,#000,#fff)) {
      .pulse-card::before { background:linear-gradient(135deg,var(--cyan),var(--purple),var(--gold),var(--cyan));animation:none }
    }
    .pc-head { display:flex;align-items:center;gap:8px;position:relative;z-index:1;margin-bottom:10px }
    .pc-orb { width:22px;height:22px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fff,rgba(46,211,224,.7) 50%,rgba(46,211,224,.05) 100%);box-shadow:0 0 14px rgba(46,211,224,.75),0 0 30px rgba(143,157,255,.4);animation:pcOrbPulse 2.6s ease-in-out infinite }
    @keyframes pcOrbPulse { 0%,100% { transform:scale(1);box-shadow:0 0 14px rgba(46,211,224,.75),0 0 30px rgba(143,157,255,.4) } 50% { transform:scale(1.08);box-shadow:0 0 22px rgba(46,211,224,.95),0 0 42px rgba(143,157,255,.55) } }
    .pc-title { font-size:13px;font-weight:900;letter-spacing:1.4px;color:#fff;text-transform:uppercase;text-shadow:0 0 8px rgba(46,211,224,.5) }
    .pc-title .pc-tt-sub { font-size:var(--text-2xs);letter-spacing:1.5px;color:var(--muted);font-weight:700;display:block;margin-top:1px }
    .pc-live { margin-left:auto;display:inline-flex;align-items:center;gap:5px;font-size:var(--text-2xs);font-weight:800;letter-spacing:1.4px;color:var(--green);text-transform:uppercase;text-shadow:0 0 8px rgba(47,212,138,.6) }
    .pc-live::before { content:'';width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 8px var(--green);animation:pcLive 1.4s ease-in-out infinite }
    @keyframes pcLive { 0%,100% { opacity:.5;transform:scale(.85) } 50% { opacity:1;transform:scale(1.1) } }
    .pc-spark { width:100%;height:32px;display:block;position:relative;z-index:1;margin:2px 0 12px }
    .pc-kpis { display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;position:relative;z-index:1;margin-bottom:10px }
    .pc-kpi { padding:9px 10px 8px;position:relative;overflow:hidden;transition:border-color .25s }
    .pc-kpi::before { content:'';position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,var(--pck-accent,var(--cyan)),transparent);opacity:.6 }
    .pc-kpi-lbl { letter-spacing:1.3px;text-transform:uppercase;display:flex;align-items:center;gap:4px }
    .pc-kpi-lbl .pc-kpi-arrow { font-size:11px;color:var(--pck-accent,var(--cyan)) }
    .pc-kpi-val { font-size:15px;margin-top:3px;font-variant-numeric:tabular-nums;line-height:1.1 }
    .pc-kpi-unit { font-size:var(--text-2xs);color:var(--muted);font-weight:700;margin-left:2px }
    .pc-kpi.pck-in  { --pck-accent:var(--cyan) }
    .pc-kpi.pck-out { --pck-accent:var(--red) }
    .pc-kpi.pck-net { --pck-accent:var(--gold) }
    .pc-kpi.pck-net .pc-kpi-val { text-shadow:0 0 12px rgba(240,180,41,.45) }
    .pc-kpi.pck-net.pck-net-neg .pc-kpi-val { text-shadow:0 0 12px rgba(242,88,94,.4) }
    .pc-tape-wrap { position:relative;z-index:1;height:26px;overflow:hidden;mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent) }
    .pc-tape { display:flex;gap:24px;padding:6px 12px;height:100%;align-items:center;animation:pcTape 38s linear infinite;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;letter-spacing:.3px }
    .pc-tape:hover { animation-play-state:paused }
    @keyframes pcTape { from { transform:translateX(0) } to { transform:translateX(-50%) } }
    .pc-tape-item { display:inline-flex;align-items:center;gap:6px;color:rgba(255,255,255,.78) }
    .pc-tape-item .pc-tape-id { font-weight:800;}
    .pc-tape-item.pti-in  .pc-tape-arrow { text-shadow:0 0 6px rgba(46,211,224,.65) }
    .pc-tape-item.pti-out .pc-tape-arrow { text-shadow:0 0 6px rgba(242,88,94,.6) }
    .pc-tape-item .pc-tape-amt { color:#fff;font-weight:700 }
    .pc-tape-empty { color:var(--muted);font-size:11px;padding:0 12px;display:inline-flex;align-items:center;height:100%;font-family:ui-monospace,monospace }
    .pc-cta { display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px;padding:8px 12px;border-radius:11px;background:linear-gradient(90deg,rgba(46,211,224,.08),rgba(143,157,255,.08));border:1px solid rgba(46,211,224,.22);position:relative;z-index:1 }
    .pc-cta-text { font-size:11.5px;font-weight:700;color:#fff;letter-spacing:.3px }
    .pc-cta-arrow { font-size:14px;color:var(--cyan);text-shadow:0 0 8px rgba(46,211,224,.7);transition:transform .25s }
    .pulse-card:hover .pc-cta-arrow { transform:translateX(4px) }
    .pc-skeleton { display:flex;flex-direction:column;gap:8px }
    .pc-skeleton-row { height:18px;border-radius:8px;background:linear-gradient(90deg,rgba(255,255,255,.04),rgba(255,255,255,.10),rgba(255,255,255,.04));background-size:200% 100%;animation:skeleton-shimmer 1.4s ease-in-out infinite }

    /* Reduce-motion: disable conic spin & tape animation */
    @media (prefers-reduced-motion:reduce) {
      .pulse-card::before { animation:none }
      .pc-tape { animation:none }
      .pc-orb { animation:none }
    }

    /* ── Liquidity Constellation overlay (master-class redesign) ──────────
       Story / Map dual mode with composed axis, cinematic open, ambient
       drift, pinch+pan, anti-collision callouts, rAF flow packets, and a
       single SVG glow filter shared by every hot orb. */
    .lc-overlay { position:fixed;inset:0;z-index:9100;background:radial-gradient(ellipse at 50% 30%,rgba(10,13,20,.98),rgba(5,6,18,.995));opacity:0;pointer-events:none;transition:opacity .35s ease;display:flex;flex-direction:column;overflow:hidden }
    .lc-overlay.show { opacity:1;pointer-events:auto }
    .lc-overlay:not(.show) * { pointer-events: none; }
    .lc-overlay::before { content:'';position:absolute;inset:0;background:linear-gradient(rgba(46,211,224,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(46,211,224,.05) 1px,transparent 1px);background-size:40px 40px;mask-image:linear-gradient(180deg,transparent 30%,#000 65%,#000 90%,transparent);-webkit-mask-image:linear-gradient(180deg,transparent 30%,#000 65%,#000 90%,transparent);transform:perspective(800px) rotateX(58deg) translateY(20%) scale(1.6);transform-origin:50% 100%;animation:lcGrid 22s linear infinite;animation-play-state:paused;pointer-events:none }
    .lc-overlay.show::before { animation-play-state:running }
    @keyframes lcGrid { 0% { background-position:0 0,0 0 } 100% { background-position:0 80px,80px 0 } }
    .lc-overlay::after { content:'';position:absolute;inset:0;background:radial-gradient(60% 40% at 50% 50%,transparent 0%,rgba(10,13,20,.55) 75%,rgba(10,13,20,.95) 100%);pointer-events:none }
    /* backdrop-filter:blur is the single most expensive property on iOS
       Telegram WebView — 10px blur on a sticky header forces a full-frame
       recomposite at 60 FPS.  We swap to a dense rgba background with a
       subtle 4px blur (one-tenth the cost) and keep the same look. */
    .lc-head { display:flex;align-items:center;gap:8px;padding:calc(14px + env(safe-area-inset-top)) 14px 10px;position:relative;z-index:5;border-bottom:1px solid rgba(46,211,224,.18);background:linear-gradient(180deg,rgba(5,6,18,.94),rgba(5,6,18,.86));backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);min-height:52px;flex-shrink:0;flex-wrap:wrap }
    .lc-head-proxy { font-size:var(--text-2xs);letter-spacing:1.2px;color:var(--gold);text-transform:uppercase;font-weight:800;padding:3px 7px;border-radius:6px;background:rgba(240,180,41,.10);border:1px solid rgba(240,180,41,.3);margin-left:6px;display:none }
    .lc-overlay.lc-is-proxy .lc-head-proxy { display:inline-block }
    .lc-stage-empty { color:var(--muted);font-size:12px;text-align:center;padding:28px 24px;line-height:1.5;display:flex;flex-direction:column;gap:6px;align-items:center;position:absolute;inset:0;justify-content:center }
    .lc-stage-empty-icon { font-size:32px;opacity:.55;animation:lcEmptyPulse 2.4s ease-in-out infinite }
    @keyframes lcEmptyPulse { 0%,100% { transform:scale(1);opacity:.4 } 50% { transform:scale(1.08);opacity:.75 } }
    .lc-head-title { font-size:14px;font-weight:900;letter-spacing:1.4px;color:#fff;text-transform:uppercase;text-shadow:0 0 10px rgba(46,211,224,.5);display:flex;flex-direction:column;line-height:1.15 }
    .lc-head-title .lc-head-sub { font-size:var(--text-2xs);letter-spacing:1.6px;color:var(--cyan);font-weight:700;opacity:.85 }
    .lc-close { margin-left:auto;width:36px;height:36px;border-radius:50%;border:1px solid rgba(255,255,255,.14);background:rgba(0,0,0,.5);color:#fff;font-size:17px;font-weight:700;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .15s,background .2s;flex-shrink:0 }
    .lc-close:active { transform:scale(.92);background:rgba(242,88,94,.18) }
    .lc-windowsel { display:inline-flex;background:rgba(0,0,0,.45);border:1px solid rgba(46,211,224,.18);border-radius:999px;padding:3px;gap:2px;position:relative }
    .lc-windowsel button { background:transparent;border:0;color:rgba(255,255,255,.6);padding:5px 11px;font-size:11px;font-weight:700;border-radius:999px;cursor:pointer;letter-spacing:.5px;transition:color .2s,background .2s;font-family:inherit }
    .lc-windowsel button.active { color:var(--bg);background:linear-gradient(90deg,var(--cyan),var(--purple));box-shadow:0 0 12px rgba(46,211,224,.4) }
    /* Story / Map mode toggle — flat segmented control */
    .lc-modesel { display:inline-flex;background:rgba(0,0,0,.45);border:1px solid rgba(143,157,255,.22);border-radius:999px;padding:3px;gap:2px }
    .lc-modesel button { background:transparent;border:0;color:rgba(255,255,255,.55);padding:5px 11px;font-size:var(--text-2xs);font-weight:800;border-radius:999px;cursor:pointer;letter-spacing:.6px;text-transform:uppercase;font-family:inherit;transition:color .2s,background .2s }
    .lc-modesel button.active { color:var(--bg);background:linear-gradient(90deg,var(--purple),#dccaff);box-shadow:0 0 10px rgba(143,157,255,.35) }

    /* Smart-money-only filter pill — isolates the corridors driven by
       high Lead-score wallets. */
    .lc-smartsel { display:inline-flex;background:rgba(0,0,0,.45);border:1px solid rgba(46,211,224,.18);border-radius:999px;padding:3px }
    .lc-smartsel button { background:transparent;border:0;color:rgba(255,255,255,.6);padding:5px 11px;font-size:var(--text-2xs);font-weight:800;border-radius:999px;cursor:pointer;letter-spacing:.4px;font-family:inherit;transition:color .2s,background .2s;display:inline-flex;align-items:center;gap:4px }
    .lc-smartsel button.active { color:var(--bg);background:linear-gradient(90deg,var(--cyan),var(--purple));box-shadow:0 0 12px rgba(46,211,224,.4) }

    /* Hero strip — the headline number lives at the very top of the stage */
    .lc-hero { position:absolute;top:8px;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:1px;pointer-events:none;z-index:3;opacity:0;transform:translateY(-6px);transition:opacity .5s ease,transform .5s ease }
    .lc-overlay.show .lc-hero { opacity:1;transform:translateY(0) }
    /* Hide the headline number while the user is pinch-zoomed in — it's a
       global stat and the user is focused on local orbs at that point. */
    .lc-overlay[data-zoomed="1"] .lc-hero { opacity:0;pointer-events:none }
    .lc-hero-lbl { font-size:var(--text-2xs);letter-spacing:2.2px;color:var(--muted);text-transform:uppercase;font-weight:700 }
    .lc-hero-num { font-family:ui-monospace,"SF Mono","JetBrains Mono","Geist Mono",Menlo,monospace;font-size:32px;font-weight:800;letter-spacing:-.5px;color:var(--gold);text-shadow:0 0 18px rgba(240,180,41,.45),0 0 38px rgba(240,180,41,.18);font-variant-numeric:tabular-nums;line-height:1 }
    .lc-hero-num.lc-pos { color:var(--cyan);text-shadow:0 0 18px rgba(46,211,224,.5),0 0 36px rgba(46,211,224,.2) }
    .lc-hero-num.lc-neg { color:var(--red);text-shadow:0 0 18px rgba(242,88,94,.5),0 0 32px rgba(242,88,94,.2) }
    /* Auto-generated narrative line under the hero ("SN107 +10.6% leads ·
       SN35 −4.6% drag · 9 Hot").  Mono font + tabular nums so values stay
       aligned, padded chips for ticker-style readability. */
    .lc-hero-narrative { font-family:ui-monospace,"SF Mono","JetBrains Mono",monospace;font-size:11px;font-weight:700;color:rgba(255,255,255,.78);letter-spacing:.3px;font-variant-numeric:tabular-nums;margin-top:6px;line-height:1.35;text-align:center;max-width:90%;padding:0 14px }
    .lc-hero-narrative b { color:#fff;font-weight:800 }
    .lc-hero-narrative .lc-n-pos { color:var(--cyan);font-weight:800 }
    .lc-hero-narrative .lc-n-neg { color:var(--red);font-weight:800 }
    .lc-hero-narrative .lc-n-sep { color:rgba(255,255,255,.28);margin:0 5px;font-weight:600 }
    .lc-hero-narrative:empty { display:none }
    .lc-hero-sub { font-size:var(--text-2xs);letter-spacing:1.4px;color:rgba(255,255,255,.45);text-transform:uppercase;font-weight:700;margin-top:3px }

    /* Axis labels — only in story mode */
    .lc-axis { position:absolute;top:54%;font-size:var(--text-2xs);letter-spacing:2.4px;font-weight:800;text-transform:uppercase;pointer-events:none;z-index:2;writing-mode:vertical-rl;transform:rotate(180deg);opacity:.55 }
    .lc-axis.lc-axis-in  { left:6px;color:var(--cyan) }
    .lc-axis.lc-axis-out { right:6px;color:var(--red);transform:rotate(0) }
    .lc-overlay[data-mode="map"] .lc-axis { display:none }

    /* Stage holds the SVG and overlays (hero, axes, dust pill).  We give it
       relative positioning so absolute children stack inside. */
    .lc-stage { flex:1;position:relative;z-index:2;overflow:hidden;display:flex;align-items:center;justify-content:center;min-height:240px;user-select:none;-webkit-user-select:none }
    .lc-stage svg { width:100%;height:100%;display:block;touch-action:none }
    .lc-overlay[data-mode="map"] .lc-stage svg { touch-action:none }

    /* Reusable orb visuals — every orb is a <g> with the same children:
       floor shadow ellipse, halo, glow ring (hot only), core, specular,
       and label/pct text below. */
    .lc-orb { cursor:pointer;transform-box:fill-box;transform-origin:center;transition:opacity .25s }
    .lc-orb:active .lc-orb-core { filter:brightness(1.25) }
    .lc-orb-shadow { fill:rgba(46,211,224,.20);filter:blur(2px) }
    .lc-orb.lc-tier-cold .lc-orb-shadow { fill:rgba(242,88,94,.16) }
    .lc-orb.lc-tier-neutral .lc-orb-shadow { fill:rgba(143,157,255,.12) }
    .lc-orb-halo { transition:opacity .35s,r .35s }
    .lc-orb-core { transition:r .35s cubic-bezier(.22,1,.36,1) }
    .lc-orb-spec { fill:rgba(255,255,255,.78);pointer-events:none }
    .lc-orb-ring { fill:none;stroke-width:1.4;stroke-dasharray:4 4;animation:lcOrbRing 14s linear infinite;opacity:.45;vector-effect:non-scaling-stroke }
    @keyframes lcOrbRing { to { stroke-dashoffset:-100 } }
    .lc-orb-label { font-size:calc(9px * var(--lc-text-scale,1));font-weight:800;fill:#fff;text-anchor:middle;pointer-events:none;letter-spacing:.4px;paint-order:stroke;stroke:rgba(0,0,0,.85);stroke-width:calc(2.6px * var(--lc-text-scale,1));stroke-linejoin:round }
    .lc-orb-pct { font-size:calc(8.2px * var(--lc-text-scale,1));font-weight:800;text-anchor:middle;pointer-events:none;letter-spacing:.3px;font-variant-numeric:tabular-nums;paint-order:stroke;stroke:rgba(0,0,0,.85);stroke-width:calc(2.4px * var(--lc-text-scale,1));stroke-linejoin:round }
    .lc-orb-icon { font-size:calc(11px * var(--lc-text-scale,1));fill:#fff;text-anchor:middle;pointer-events:none;dominant-baseline:central;opacity:.92 }
    .lc-orb.dim { opacity:.18 }
    .lc-orb.lc-selected { z-index:5 }
    .lc-orb.lc-selected .lc-orb-core { filter:url(#lcGlowStrong) }
    /* Hot tier — single shared filter (cheaper than per-orb drop-shadow) */
    .lc-orb.lc-tier-hot .lc-orb-core { filter:url(#lcGlowHot) }
    .lc-orb.lc-tier-hot .lc-orb-halo { opacity:.85 }
    .lc-orb.lc-tier-hot .lc-orb-ring { opacity:.9 }
    .lc-orb.lc-tier-hot.dim { opacity:.7 }
    .lc-orb.lc-tier-cold .lc-orb-core { filter:url(#lcGlowCold) }

    /* Cinematic open — orbs spawn from canvas center with stagger.
       Per-orb delay is set via the --lc-spawn-delay CSS variable so the
       inline style doesn't clash with the drift animation's own delay. */
    .lc-orb.lc-spawn { animation:lcSpawn .7s cubic-bezier(.22,1,.36,1) backwards;animation-delay:var(--lc-spawn-delay,0s) }
    @keyframes lcSpawn {
      from { opacity:0;transform:translate(var(--lc-from-dx,0),var(--lc-from-dy,0)) scale(.2) }
      to   { opacity:1;transform:translate(0,0) scale(1) }
    }
    /* Ambient brownian drift — subtle, only on visible orbs, paused when
       hidden.  The spawn animation finishes within ~1.2s; the drift then
       picks up automatically because both rules target a different
       animation-name and CSS layers them by class. */
    .lc-orb.lc-drift { animation:lcDrift var(--lc-drift-dur,9s) ease-in-out infinite alternate;animation-delay:var(--lc-drift-delay,0s) }
    .lc-orb.lc-spawn.lc-drift { animation:lcSpawn .7s cubic-bezier(.22,1,.36,1) backwards,lcDrift var(--lc-drift-dur,9s) ease-in-out 1.2s infinite alternate;animation-delay:var(--lc-spawn-delay,0s),calc(var(--lc-spawn-delay,0s) + var(--lc-drift-delay,0s)) }
    @keyframes lcDrift {
      from { transform:translate(0,0) }
      to   { transform:translate(var(--lc-drift-dx,1px),var(--lc-drift-dy,-1px)) }
    }

    /* Anti-collision callouts: short polyline from orb edge to label box */
    .lc-callout-line { stroke:rgba(255,255,255,.28);stroke-width:.7;fill:none;vector-effect:non-scaling-stroke }
    .lc-callout-bg { fill:rgba(8,10,22,.55);stroke:rgba(255,255,255,.08);stroke-width:.5 }

    /* Flow paths — gradient strokes with directional pulse packets (rAF) */
    .lc-flow-path { fill:none;stroke-width:1.6;stroke-linecap:round;opacity:.65;stroke:url(#lcFlowGrad);transition:opacity .25s ease }
    .lc-flow-path.lc-flow-strong { stroke-width:2.4;opacity:.9 }
    .lc-flow-pulse { fill:#fff;filter:url(#lcGlowPulse);pointer-events:none }
    .lc-flow-arrow { fill:var(--cyan);opacity:.85 }
    /* Rotation-Radar: colour each corridor by who's driving it. Smart
       money (high Lead-score share) glows cyan; retail flow stays a
       quiet grey so the eye locks onto the smart corridors first. */
    .lc-flow-path.lc-flow-smart  { stroke:var(--cyan);opacity:.92;filter:drop-shadow(0 0 4px rgba(46,211,224,.6)) }
    .lc-flow-path.lc-flow-retail { stroke:rgba(150,170,190,.5);opacity:.5 }
    .lc-flow-pulse.lc-flow-smart  { fill:#9bf3ff;filter:url(#lcGlowPulse) }
    .lc-flow-pulse.lc-flow-retail { fill:rgba(205,218,232,.8);filter:none }
    /* Smart-only filter active: hide retail corridors entirely. */
    .lc-overlay[data-smart="1"] .lc-flow-path.lc-flow-retail,
    .lc-overlay[data-smart="1"] .lc-flow-pulse.lc-flow-retail { display:none }
    /* When an orb is selected, dim every flow that doesn't touch it.
       This turns the chart from decorative to diagnostic — "where is
       SN107's money coming from / going to" reads in one glance. */
    .lc-flow-path.lc-flow-muted { opacity:.06 }
    .lc-flow-pulse.lc-flow-muted { display:none }

    /* Dust aggregate pill — quiet subnets rolled up */
    .lc-dust { position:absolute;left:50%;bottom:6px;transform:translateX(-50%);display:inline-flex;align-items:center;gap:8px;padding:6px 12px;background:rgba(0,0,0,.55);border:1px solid rgba(143,157,255,.28);border-radius:999px;font-size:var(--text-2xs);font-weight:700;color:rgba(255,255,255,.78);cursor:pointer;letter-spacing:.4px;font-family:ui-monospace,"SF Mono",monospace;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);transition:transform .15s,border-color .2s;z-index:3;white-space:nowrap }
    .lc-dust:active { transform:translateX(-50%) scale(.96) }
    .lc-dust:hover { border-color:rgba(143,157,255,.55) }
    .lc-dust-dot { width:6px;height:6px;border-radius:50%;background:var(--purple);box-shadow:0 0 6px var(--purple) }
    .lc-dust-arrow { color:var(--purple);font-weight:800 }
    .lc-overlay[data-mode="map"] .lc-dust { display:none }

    /* Zoom indicator — bottom-left of stage, only when zoomed */
    .lc-zoom-ui { position:absolute;left:8px;bottom:6px;display:flex;flex-direction:column;gap:4px;z-index:3;opacity:0;pointer-events:none;transition:opacity .2s }
    .lc-overlay[data-zoomed="1"] .lc-zoom-ui { opacity:1;pointer-events:auto }
    .lc-zoom-btn { width:30px;height:30px;border-radius:8px;border:1px solid rgba(255,255,255,.14);background:rgba(0,0,0,.55);color:#fff;font-size:13px;font-weight:800;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px) }
    .lc-zoom-btn:active { transform:scale(.92) }

    /* Map-mode label gating by zoom level.  At default zoom (tier 1) the
       canvas is packed with ~120 orbs, so we hide every label except for
       the hot tier — that gives a clean overview of which subnets are
       moving.  Once the user pinches in (tier 2) everything labels.
       Story mode is unaffected; it uses callouts instead of in-orb labels.
       (data-zoom-tier="0" means zoomed OUT past 1×, e.g. fit-all.) */
    .lc-overlay[data-mode="map"][data-zoom-tier="0"] .lc-orb-label,
    .lc-overlay[data-mode="map"][data-zoom-tier="0"] .lc-orb-pct,
    .lc-overlay[data-mode="map"][data-zoom-tier="1"] .lc-orb-label,
    .lc-overlay[data-mode="map"][data-zoom-tier="1"] .lc-orb-pct { display:none }
    .lc-overlay[data-mode="map"][data-zoom-tier="0"] .lc-orb.lc-tier-hot .lc-orb-label,
    .lc-overlay[data-mode="map"][data-zoom-tier="0"] .lc-orb.lc-tier-hot .lc-orb-pct,
    .lc-overlay[data-mode="map"][data-zoom-tier="1"] .lc-orb.lc-tier-hot .lc-orb-label,
    .lc-overlay[data-mode="map"][data-zoom-tier="1"] .lc-orb.lc-tier-hot .lc-orb-pct { display:block }

    .lc-bottom { position:relative;z-index:5;padding:10px 14px calc(12px + env(safe-area-inset-bottom));background:linear-gradient(180deg,rgba(5,6,18,.5),rgba(5,6,18,.92) 25%,rgba(5,6,18,.98));pointer-events:auto;flex-shrink:0;border-top:1px solid rgba(46,211,224,.10) }
    .lc-kpi-header { display:flex;align-items:center;gap:6px;font-size:var(--text-2xs);letter-spacing:1.4px;color:var(--muted);text-transform:uppercase;font-weight:700;margin-bottom:6px;padding:0 2px }
    .lc-kpi-header-win { color:var(--cyan);font-weight:800;letter-spacing:.8px }
    .lc-kpi-header-hint { margin-left:auto;font-size:var(--text-2xs);letter-spacing:.8px;color:rgba(255,255,255,.35);text-transform:none;font-weight:600 }
    .lc-kpi-row { display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:6px;margin-bottom:8px }
    .lc-kpi { background:rgba(0,0,0,.45);border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:6px 8px;text-align:center }
    .lc-kpi-lbl { font-size:var(--text-2xs);letter-spacing:1.1px;color:var(--muted);text-transform:uppercase;font-weight:700 }
    .lc-kpi-val { font-size:13px;font-weight:900;color:#fff;font-variant-numeric:tabular-nums;margin-top:1px;font-family:ui-monospace,"SF Mono",monospace }
    .lc-kpi-val.lc-pos { color:var(--cyan);text-shadow:0 0 8px rgba(46,211,224,.4) }
    .lc-kpi-val.lc-neg { color:var(--red);text-shadow:0 0 8px rgba(242,88,94,.4) }
    .lc-kpi-val.lc-gold { color:var(--gold);text-shadow:0 0 8px rgba(240,180,41,.4) }
    .lc-detail { background:rgba(0,0,0,.62);border:1px solid rgba(46,211,224,.22);border-radius:14px;padding:11px 13px;backdrop-filter:blur(14px) saturate(1.5);-webkit-backdrop-filter:blur(14px) saturate(1.5);max-height:0;opacity:0;overflow:hidden;transition:max-height .35s ease,opacity .25s,padding .25s,margin-top .25s,margin-bottom .25s }
    .lc-detail.show { max-height:240px;opacity:1;padding:11px 13px;margin-top:0;margin-bottom:8px }
    .lc-detail-head { display:flex;align-items:center;gap:8px;margin-bottom:6px }
    .lc-detail-name { font-size:13px;font-weight:900;color:#fff }
    .lc-detail-pct { font-size:11px;font-weight:800;margin-left:auto;font-variant-numeric:tabular-nums;font-family:ui-monospace,"SF Mono",monospace }
    .lc-detail-pct.lc-pos { color:var(--cyan) }
    .lc-detail-pct.lc-neg { color:var(--red) }
    .lc-detail-row { display:flex;justify-content:space-between;font-size:11px;color:rgba(255,255,255,.78);padding:3px 0;border-top:1px solid rgba(255,255,255,.05);font-variant-numeric:tabular-nums }
    .lc-detail-row:first-of-type { border-top:0 }
    .lc-detail-row .lc-detail-key { color:var(--muted);text-transform:uppercase;letter-spacing:.6px;font-size:var(--text-2xs);font-weight:700;align-self:center }
    .lc-detail-cta { display:block;margin-top:8px;text-align:center;font-size:11px;font-weight:800;color:var(--cyan);background:rgba(46,211,224,.08);border:1px solid rgba(46,211,224,.3);border-radius:10px;padding:8px;cursor:pointer;letter-spacing:.5px;text-transform:uppercase;font-family:inherit }
    .lc-detail-cta:active { transform:scale(.97) }
    .lc-whalecam { position:relative;overflow:hidden;margin:0 -14px;padding:0 0 4px;mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);-webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent) }
    .lc-whalecam.is-empty { mask-image:none;-webkit-mask-image:none }
    .lc-whalecam-track { display:inline-flex;gap:6px;padding:0 14px;width:max-content;animation:lcWhaleScroll 60s linear infinite;will-change:transform }
    .lc-whalecam-track:hover { animation-play-state:paused }
    @keyframes lcWhaleScroll { from { transform:translateX(0) } to { transform:translateX(-50%) } }
    .lc-whale-pill { flex-shrink:0;display:inline-flex;align-items:center;gap:6px;padding:7px 11px;background:rgba(0,0,0,.5);border:1px solid rgba(240,180,41,.22);border-radius:999px;font-size:11px;color:#fff;font-weight:700;font-family:ui-monospace,monospace;letter-spacing:.3px;cursor:pointer }
    .lc-whale-pill .lc-whale-id { color:var(--gold);font-weight:800 }
    .lc-whale-pill.lc-w-in  .lc-whale-arrow { color:var(--cyan);text-shadow:0 0 5px rgba(46,211,224,.5) }
    .lc-whale-pill.lc-w-out .lc-whale-arrow { color:var(--red);text-shadow:0 0 5px rgba(242,88,94,.4) }
    .lc-whale-pill .lc-whale-proof { margin-left:6px;padding:0 4px;color:var(--gold);text-decoration:none;font-size:12px;line-height:1;opacity:.85;cursor:pointer;border-radius:4px }
    .lc-whale-pill .lc-whale-proof:hover { opacity:1;background:rgba(240,180,41,.12) }
    .lc-whale-pill .lc-whale-proof-pending { color:rgba(255,255,255,.45);cursor:help;opacity:.7 }
    .lc-whale-pill .lc-whale-proof-pending:hover { opacity:.85;background:transparent }
    .lc-empty { color:var(--muted);font-size:12px;text-align:center;padding:30px 20px }
    @media (prefers-reduced-motion:reduce) {
      .lc-overlay.show::before { animation:none }
      .lc-orb-ring { animation:none }
      .lc-flow-path { animation:none }
      .lc-flow-pulse { display:none }
      .lc-stage-empty-icon { animation:none }
      .lc-whalecam-track { animation:none }
      .lc-orb.lc-spawn { animation:none }
      .lc-orb.lc-drift { animation:none }
      .lc-overlay.show .lc-hero { transition:none }
    }
    .lc-overlay:not(.show) .lc-flow-pulse { display:none }
    .lc-overlay:not(.show) .lc-orb.lc-drift { animation-play-state:paused }
    /* When the overlay is hidden the user doesn't see anything, but the
       browser keeps every CSS animation in the DOM ticking — that drains
       battery and on iOS Telegram WebView shows up as sustained warmth.
       Pause every visible animation we can while .show is off. */
    .lc-overlay:not(.show) .lc-orb-ring,
    .lc-overlay:not(.show) .lc-live-dot,
    .lc-overlay:not(.show) .lc-stage-empty-icon,
    .lc-overlay:not(.show) .lc-whalecam-track,
    .lc-overlay:not(.show) .lc-flow-path { animation-play-state:paused }

    /* LIVE badge — pulsing dot + freshness age in place of the static
       "Smart Money Live" subtitle.  Builds trust that data is fresh. */
    .lc-live-pill { display:inline-flex;align-items:center;gap:5px }
    .lc-live-dot { display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--cyan);box-shadow:0 0 8px var(--cyan);animation:lcLivePulse 1.6s ease-in-out infinite }
    @keyframes lcLivePulse { 0%,100% { opacity:1;transform:scale(1) } 50% { opacity:.45;transform:scale(.7) } }
    .lc-overlay.lc-stale .lc-live-dot { background:var(--gold);box-shadow:0 0 6px var(--gold);animation-duration:2.4s }
    @media (prefers-reduced-motion:reduce) { .lc-live-dot { animation:none } }

    /* Coach-mark — first-open hint pill, dismissed via tap or auto after
       7s, persisted in localStorage so it never re-appears. */
    .lc-coach { position:absolute;left:50%;bottom:42px;transform:translate(-50%,8px);display:none;align-items:center;gap:8px;padding:8px 10px 8px 12px;background:rgba(0,0,0,.78);border:1px solid rgba(46,211,224,.32);border-radius:999px;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font-size:11px;font-weight:700;color:#fff;max-width:92%;z-index:6;opacity:0;transition:opacity .35s ease,transform .35s ease;line-height:1.3;cursor:pointer;text-align:center;box-shadow:0 4px 18px rgba(46,211,224,.12) }
    .lc-coach.show { display:inline-flex;opacity:1;transform:translate(-50%,0) }
    .lc-coach-icon { font-size:13px;flex-shrink:0 }
    .lc-coach-text { line-height:1.3 }
    .lc-coach-close { background:transparent;border:0;color:rgba(255,255,255,.55);font-size:13px;cursor:pointer;padding:0 2px 0 4px;line-height:1;font-family:inherit;flex-shrink:0 }
    .lc-coach-close:active { color:#fff }
    /* Hide the dust pill while coach-mark is up to avoid overlap.  Both
       sit in the same bottom-of-stage strip. */
    .lc-overlay .lc-coach.show ~ .lc-dust { display:none !important }

    @media (max-width:380px) {
      .lc-hero-num { font-size:26px }
      .lc-head { gap:6px;padding:calc(12px + env(safe-area-inset-top)) 12px 8px }
      .lc-head-title { font-size:13px }
      .lc-axis { font-size:var(--text-2xs);letter-spacing:1.6px }
      .lc-hero-narrative { font-size:var(--text-2xs) }
      .lc-coach { font-size:var(--text-2xs);padding:7px 9px 7px 11px }
    }

    /* ── Smart Recommendation Banner ────────────── */
    .smart-rec { display:flex;align-items:center;gap:12px;padding:12px 14px;margin:6px 0 10px;cursor:pointer;transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease;position:relative;overflow:hidden }
    .smart-rec::before { content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,var(--cyan),var(--purple)) }
    .smart-rec:active { transform:scale(.995) }
    .smart-rec.sr-state-staked { border-color:rgba(47,212,138,.3);background:linear-gradient(135deg,rgba(47,212,138,.08),rgba(46,211,224,.06)) }
    .smart-rec.sr-state-staked::before { background:linear-gradient(180deg,var(--green),var(--cyan)) }
    .smart-rec.sr-state-staked:hover { border-color:rgba(47,212,138,.5) }
    .smart-rec.sr-state-nostake { border-color:rgba(240,180,41,.28);background:linear-gradient(135deg,rgba(240,180,41,.08),rgba(46,211,224,.05)) }
    .smart-rec.sr-state-nostake::before { background:linear-gradient(180deg,var(--gold),var(--cyan)) }
    .sr-icon { font-size:22px;flex-shrink:0;line-height:1 }
    .sr-body { flex:1;min-width:0 }
    .sr-lbl { text-transform:uppercase;letter-spacing:.6px;margin-bottom:3px }
    .sr-text { line-height:1.35;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical }
    .sr-cta { white-space:nowrap;padding:6px 10px;border-radius:999px;flex-shrink:0 }

    /* ── Membership status pill (Free / Premium with expiry) ────────────
       Sits between the toolbar row and the smart-rec "What should I do?"
       card. Visually subtler than smart-rec — short status indicator,
       not a primary CTA. Free state nudges toward upgrade; Premium
       state shows expiry as the user's at-a-glance reassurance that
       their paid subscription is active and how long it lasts. */
    .mship-card { display:flex;align-items:center;gap:10px;padding:9px 13px;margin:0 0 8px;cursor:pointer;transition:transform .12s ease,border-color .15s ease,box-shadow .15s ease;font-family:inherit; }
    .mship-card:active { transform:scale(.995); }
    .mship-card.mship-free { background:linear-gradient(135deg,rgba(150,160,180,.08),rgba(80,90,110,.06));}
    .mship-card.mship-free:hover { border-color:rgba(46,211,224,.4);box-shadow:0 2px 12px rgba(46,211,224,.08); }
    .mship-card.mship-premium { background:linear-gradient(135deg,rgba(46,211,224,.10),rgba(143,157,255,.08));}
    .mship-card.mship-premium:hover { border-color:rgba(46,211,224,.6);box-shadow:0 2px 12px rgba(46,211,224,.15); }
    .mship-card.mship-premium-low { background:linear-gradient(135deg,rgba(255,189,67,.12),rgba(255,140,66,.08));}
    .mship-card.mship-premium-low:hover { border-color:rgba(255,189,67,.65); }
    .mship-card.mship-lifetime { background:linear-gradient(135deg,rgba(186,85,255,.12),rgba(46,211,224,.08));}
    .mship-icon { font-size:18px;flex-shrink:0;line-height:1; }
    .mship-body { flex:1;min-width:0; }
    .mship-label { letter-spacing:.6px;text-transform:uppercase;margin-bottom:1px; }
    .mship-value { font-size:13px;color:#fff;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
    .mship-cta { font-size:11px;font-weight:800;white-space:nowrap;padding:5px 9px;border-radius:999px;flex-shrink:0; }

    /* ── Wallet CTA Banner ──────────────────────── */
    /* Der Verlauf stand in rohem Hex und blieb im hellen Theme dunkel,
       waehrend die Schrift aus Tokens kommt: Titel 1,10:1, Untertitel
       2,79:1 — die Einstiegskarte fuer jeden Nutzer OHNE Wallet war
       damit genau dort unlesbar. Tokens tragen beide Themes. */
    .wallet-cta { background:var(--card);border:1px solid var(--border-subtle);box-shadow:var(--shadow-sm);border-radius:var(--radius);padding:14px 16px;margin-bottom:9px;display:none }
    .wallet-cta-title { font-size:14px;font-weight:800;color:var(--text);margin-bottom:4px }
    .wallet-cta-sub { font-size:var(--text-sm);color:var(--muted);margin-bottom:10px }
    .wallet-cta-btn { width:100%;min-height:44px;padding:11px;cursor:pointer;font-family:inherit }

    /* ── Term Tooltip Modal ─────────────────────── */
    .term-modal-overlay { position:fixed;inset:0;z-index:5000;background:rgba(0,0,0,.65);display:flex;align-items:flex-end;justify-content:center }
    .term-modal-overlay.hidden { display:none }
    .term-modal-sheet { background:var(--card);border-radius:20px 20px 0 0;padding:24px 20px 32px;width:100%;max-width:480px }
    .term-modal-title { font-size:16px;font-weight:800;color:var(--text);margin-bottom:10px }
    .term-modal-body { font-size:13px;color:var(--muted);line-height:1.65 }
    .term-modal-close { width:100%;padding:13px;background:rgba(255,255,255,.08);border:none;border-radius:10px;font-size:13px;font-weight:700;color:var(--text);cursor:pointer;font-family:inherit;margin-top:18px }
    .term-help { display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:50%;background:rgba(46,211,224,.15);color:var(--cyan);font-size:var(--text-2xs);font-weight:800;cursor:pointer;vertical-align:middle;margin-left:4px;flex-shrink:0 }

    /* ── Glossary Drawer (bottom sheet) ── */
    .gloss-overlay { position:fixed;inset:0;z-index:5100;background:rgba(0,0,0,.65);display:flex;align-items:flex-end;justify-content:center;animation:glossFadeIn .18s ease-out }
    .gloss-overlay.hidden { display:none }
    @keyframes glossFadeIn { from { opacity:0 } to { opacity:1 } }
    .gloss-sheet { border-radius:20px 20px 0 0;padding:12px 18px 24px;width:100%;max-width:480px;max-height:80vh;display:flex;flex-direction:column;animation:glossSlideUp .22s cubic-bezier(.2,.8,.3,1) }
    @keyframes glossSlideUp { from { transform:translateY(24px);opacity:.4 } to { transform:translateY(0);opacity:1 } }
    .gloss-grab { width:36px;height:4px;border-radius:3px;background:rgba(255,255,255,.18);margin:2px auto 10px }
    .gloss-head { display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:4px }
    .gloss-title { color:var(--text) }
    .gloss-close { background:transparent;border:none;color:var(--muted);font-size:22px;cursor:pointer;padding:0 6px;line-height:1;border-radius:8px }
    .gloss-close:hover { color:var(--text);background:rgba(255,255,255,.05) }
    .gloss-sub { font-size:11px;color:var(--muted);margin-bottom:12px;line-height:1.45 }
    .gloss-list { flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;gap:10px;padding-right:4px }
    .gloss-list::-webkit-scrollbar { width:4px }
    .gloss-list::-webkit-scrollbar-thumb { background:rgba(255,255,255,.12);border-radius:3px }
    .gloss-item { border-radius:12px;padding:12px 14px;transition:border-color .15s }
    .gloss-item:hover { border-color:rgba(46,211,224,.25) }
    .gloss-item-title { font-size:13.5px;font-weight:800;color:var(--text);margin-bottom:5px }
    .gloss-item-text { font-size:12.5px;color:var(--muted);line-height:1.55 }
    .gloss-close-btn { width:100%;padding:12px;background:rgba(255,255,255,.08);border:none;border-radius:10px;font-size:13px;font-weight:700;color:var(--text);cursor:pointer;font-family:inherit;margin-top:14px;flex-shrink:0 }
    .gloss-close-btn:hover { background:rgba(255,255,255,.12) }

    /* ── Collapsible Sections ───────────────────── */
    .section-toggle-row { display:flex;justify-content:space-between;align-items:center;cursor:pointer;user-select:none }
    .section-collapse-arrow { font-size:11px;color:var(--muted);padding:4px;transition:transform .2s;flex-shrink:0 }
    .section-collapse-body.collapsed { display:none }

    /* ── Sort More Toggle ───────────────────────── */
    .sort-more-btn { padding:4px 10px;cursor:pointer;font-family:inherit;white-space:nowrap;flex-shrink:0;transition:all .2s }
    .sort-more-btn.open { background:rgba(46,211,224,.1);border-color:rgba(46,211,224,.3);color:var(--cyan) }
    .sort-extra-row { display:flex;gap:6px;margin-bottom:8px;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none }
    .sort-extra-row::-webkit-scrollbar { display:none }
    .sort-extra-row.hidden { display:none }

    /* ── Beginner Mode ──────────────────────────── */
    .beginner-toggle { display:inline-flex;align-items:center;gap:5px;cursor:pointer;font-family:inherit;transition:all .2s;margin-bottom:8px }
    .lang-icon-btn { font-size:16px;gap:0 }
    /* Amber mit 65 % Deckung ergab im hellen Theme 1,49:1 gegen die Karte —
       unlesbar, ausgerechnet bei dem Text, dessen einziger Zweck das
       Gelesenwerden ist. --muted misst 5,42 (hell) / 6,46 (dunkel); die
       Amber-Linie oben markiert die Zeile weiterhin als Hinweis. */
    .beginner-hint { font-size:var(--text-2xs);color:var(--muted);margin-top:4px;display:none;line-height:1.4;border-top:1px solid rgba(240,180,41,.12);padding-top:3px }
    .beginner-mode-on .beginner-hint { display:block }

    /* Beginner Mode — Klartext cards + tip strip */
    .beginner-only { display:none }
    .beginner-mode-on .beginner-only { display:block }
    /* Hide the table/matrix/heat scaffolding while in beginner mode */
    .beginner-mode-on .subnet-section .sn-view-toggle,
    .beginner-mode-on .subnet-section #tableView,
    .beginner-mode-on .subnet-section #matrixView,
    .beginner-mode-on .subnet-section #heatView,
    .beginner-mode-on .subnet-section .filter-row,
    .beginner-mode-on .subnet-section .quad-compare,
    .beginner-mode-on .subnet-section #gemBuyInfoBtn { display:none !important }

    .beginner-tip { display:flex;align-items:center;gap:10px;padding:10px 12px;background:linear-gradient(90deg,rgba(47,212,138,.14),rgba(46,211,224,.05));border:1px solid rgba(47,212,138,.3);border-radius:12px;margin:4px 0 14px }
    .bt-icon { font-size:16px;flex-shrink:0 }
    .bt-text { flex:1;font-size:12px;color:rgba(255,255,255,.88);line-height:1.45 }
    .bt-btn { font-family:inherit;font-size:11px;font-weight:800;padding:6px 12px;border-radius:999px;border:none;background:rgba(47,212,138,.22);color:var(--green);cursor:pointer;white-space:nowrap;transition:background .15s }
    .bt-btn:hover { background:rgba(47,212,138,.32) }

    .bc-grid { display:flex;flex-direction:column;gap:10px }
    .bc-card { position:relative;background:var(--card);padding:14px 14px 13px 17px;cursor:pointer;transition:transform .15s ease,border-color .15s ease,box-shadow .15s ease;overflow:hidden }
    .bc-card:hover { border-color:rgba(46,211,224,.28);box-shadow:0 4px 18px rgba(46,211,224,.07) }
    .bc-card:active { transform:scale(.995) }
    .bc-card::before { content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--cat-color,var(--cyan)) }
    .bc-cat { display:inline-flex;align-items:center;gap:5px;font-size:var(--text-2xs);font-weight:800;color:var(--cat-color,var(--cyan));letter-spacing:.7px;text-transform:uppercase;margin-bottom:6px }
    .bc-title { font-size:15px;font-weight:800;color:#fff;margin-bottom:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap }
    .bc-metric { font-size:12px;color:var(--muted);margin-bottom:7px;line-height:1.45 }
    .bc-metric strong { color:#fff;font-weight:700 }
    .bc-metric .bc-m-good { color:var(--green);font-weight:800 }
    .bc-metric .bc-m-warn { color:var(--gold);font-weight:800 }
    .bc-metric .bc-m-bad { color:#ff6e6e;font-weight:800 }
    .bc-metric .bc-m-neutral { color:var(--muted);font-weight:700 }
    .bc-reason { font-size:12.5px;color:rgba(255,255,255,.78);line-height:1.5 }
    .bc-cta { display:inline-block;margin-top:6px;font-size:11px;color:var(--cyan);font-weight:800;text-decoration:none }
    .bc-card.cat-gainer { --cat-color:var(--green) }
    .bc-card.cat-gem { --cat-color:var(--cyan) }
    .bc-card.cat-safe { --cat-color:var(--gold) }
    .bc-card.cat-watch { --cat-color:var(--purple) }
    .bc-card.bc-empty { cursor:default }
    .bc-card.bc-empty:hover { border-color:rgba(255,255,255,.08);box-shadow:none }

    /* ── Nav NEW badge ──────────────────────────── */
    .nav-new-badge { position:absolute;top:1px;right:2px;background:var(--green);color:#000;font-size:var(--text-2xs);font-weight:900;border-radius:4px;padding:1px 3px;letter-spacing:.2px;line-height:1.3 }

    /* ── Premium Feature Tag ────────────────────── */
    .prem-feature-tag { display:inline-flex;align-items:center;gap:2px;font-size:var(--text-2xs);font-weight:800;padding:1px 6px;border-radius:5px;background:rgba(46,211,224,.1);border:1px solid rgba(46,211,224,.2);color:var(--cyan);vertical-align:middle;cursor:pointer;margin-left:6px }

    /* ── Bottom nav swipe mode (supports 7+ tabs) ── */
    .bottom-nav { overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-left:max(12px, env(safe-area-inset-left));padding-right:max(12px, env(safe-area-inset-right)) }
    .bottom-nav::-webkit-scrollbar { display:none }
    .bottom-nav .nav-tab { flex-shrink:0;}


/* ══════════════════════════════════════════════════════════════════════════════
   Phase 1: CSS Performance Foundation – GPU layers, containment, a11y
   ══════════════════════════════════════════════════════════════════════════════ */

/* 1. will-change for animated elements → promote to compositor layers */
.glow-card::before,
.sn-spinner-ring { will-change: transform, opacity; }

/* 2. contain: layout style paint on section containers */
.sh-section,
#subnetList,
#lbBody,
.glow-grid { contain: layout style paint; }

/* 4. prefers-reduced-motion: disable all animations for accessibility */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation: none !important;
    transition: none !important;
  }
}

/* ══════════════════════════════════════════════════════════════════════════════
   Phase 2: Enhanced Visual Animations
   ══════════════════════════════════════════════════════════════════════════════ */

/* 7. Card entry animations */
.glow-card {
  opacity: 0;
  transform: translateY(12px) scale(.97);
  transition: opacity .35s ease, transform .35s ease, box-shadow .18s;
}
.glow-card.card-visible {
  opacity: 1;
  transform: translateY(0) scale(1);
}

/* 8. Enhanced skeleton loading – diagonal sweep */
.skel {
  background: linear-gradient(
    115deg,
    rgba(255,255,255,.04) 25%,
    rgba(255,255,255,.10) 50%,
    rgba(255,255,255,.04) 75%
  ) !important;
  background-size: 200% 200% !important;
  animation: skelDiag 1.5s ease infinite !important;
}
@keyframes skelDiag {
  0% { background-position: 200% 200%; }
  100% { background-position: -200% -200%; }
}

/* ══════════════════════════════════════════════════════════════════════════════
   Phase 4: Data Visualization Enhancements
   ══════════════════════════════════════════════════════════════════════════════ */

/* 14. Chart cursor tracking dot */
.sn-chart-cursor-dot {
  position: absolute; width: 8px; height: 8px; border-radius: 50%;
  background: var(--cyan); box-shadow: 0 0 8px rgba(46,211,224,.6);
  pointer-events: none; z-index: 5; transform: translate(-50%,-50%);
  transition: left .06s linear, top .06s linear;
  display: none;
}
/* Chart crosshair line */
.sn-chart-crosshair {
  position: absolute; top: 0; bottom: 0; width: 1px;
  background: rgba(46,211,224,.25); pointer-events: none; z-index: 4;
  display: none;
}
/* Smooth tooltip transition */
.sn-chart-tooltip {
  transition: left .06s linear, top .06s linear, opacity .12s;
}

/* 15. Sparkline pulsing last-price dot */
.sparkline-dot {
  fill: var(--cyan);
}
@keyframes sparkPulse {
  0%,100% { r: 2; opacity: .8; }
  50% { r: 3.5; opacity: 1; }
}

/* 16. Stat-card counter glow */
.sv.counting { transition: color .15s; }
.hc.pulse-pos { animation: statPulsePos .5s ease; }
.hc.pulse-neg { animation: statPulseNeg .5s ease; }
@keyframes statPulsePos {
  0%,100% { box-shadow: none; }
  50% { box-shadow: 0 0 12px rgba(47,212,138,.4); }
}
@keyframes statPulseNeg {
  0%,100% { box-shadow: none; }
  50% { box-shadow: 0 0 12px rgba(242,88,94,.4); }
}

/* ══════════════════════════════════════════════════════════════════════════════
   Phase 6: Polish & Micro-Details
   ══════════════════════════════════════════════════════════════════════════════ */

/* 25. Loading progress bar */
.app-progress-bar {
  position: fixed; top: 0; left: 0; right: 0; height: 3px; z-index: 9998;
  background: transparent; pointer-events: none;
}
.app-progress-fill {
  height: 100%; width: 0%;
  border-radius: 0 2px 2px 0;
}

/* 28. FPS counter (debug) */
.fps-counter {
  position: fixed; bottom: 4px; right: 4px; z-index: 9999;
  font-size: var(--text-2xs); font-family: monospace; color: rgba(46,211,224,.5);
  pointer-events: none; display: none;
}
.fps-counter.show { display: block; }

    /* ══════════════════════════════════════════════════════════════════════════════
       Design System: Utility Classes & Enhancement Layer
       ══════════════════════════════════════════════════════════════════════════════ */

    /* ── Focus Visible (Accessibility) ──────────────── */
    :focus-visible {
      outline: 2px solid var(--cyan);
      outline-offset: 2px;
      border-radius: 4px;
    }
    button:focus-visible, .nav-tab:focus-visible, .fc:focus-visible,
    .sort-btn:focus-visible, .gf-pill:focus-visible, .disc-filter:focus-visible {
      outline: 2px solid var(--cyan);
      outline-offset: 2px;
      box-shadow: var(--shadow-glow-cyan);
    }
    input:focus-visible, textarea:focus-visible, select:focus-visible {
      outline: none;
      border-color: var(--cyan) !important;
      box-shadow: 0 0 0 3px var(--cyan-dim);
    }

    /* ── Skip to Content (A11y) ─────────────────────── */
    .skip-link {
      position: fixed; top: -100px; left: 16px; z-index: 10000;
      background: var(--cyan); color: #000; padding: 8px 16px;
      border-radius: 0 0 8px 8px; font-size: var(--text-base);
      font-weight: 700; text-decoration: none;
      transition: top var(--transition-fast);
    }
    .skip-link:focus { top: 0; }

    /* ── Inline Style Replacement Classes ────────────── */
    .toolbar-row {
      text-align: center; display: flex; justify-content: center;
      flex-wrap: wrap;
    }
    /* Personal greeting under the app title. Stays subtle — fades in
       once identity is resolved (initData in Telegram, cookie in
       paired browser). The bridge button on PC works because this
       line appears identically there. */
    .user-greeting {
      display: flex; align-items: center; justify-content: center;
      gap: 8px;
      margin: -4px 0 10px;
      font-size: 15px; font-weight: 500;
      color: var(--muted, #9aa3b2);
      opacity: 0; transform: translateY(-3px);
      transition: opacity .4s ease, transform .4s ease;
      letter-spacing: .01em;
    }
    .user-greeting.is-ready { opacity: 1; transform: none; }
    .user-greeting .ug-wave {
      font-size: 17px;
      animation: ug-wave 2.4s ease-in-out 1 .2s;
      transform-origin: 70% 80%;
    }
    .user-greeting .ug-name {
      font-weight: 700;
    }
    .user-greeting .ug-comma { opacity: .75; }
    @keyframes ug-wave {
      0%,100% { transform: rotate(0deg); }
      15% { transform: rotate(18deg); }
      30% { transform: rotate(-12deg); }
      45% { transform: rotate(14deg); }
      60% { transform: rotate(-8deg); }
      75% { transform: rotate(6deg); }
    }
    @media (prefers-reduced-motion: reduce) {
      .user-greeting { transition: none; }
      .user-greeting .ug-wave { animation: none; }
    }
    .hero-header {
      display: flex; justify-content: space-between;
      align-items: flex-start; margin-bottom: var(--space-3);
    }
    .hero-badges { display: flex; gap: 5px; }
    .hero-sub { font-size: var(--text-sm); margin-bottom: var(--space-3); }
    .hero-change-row {
      display: flex; align-items: center; gap: var(--space-2);
    }
    .sparkline-wrap {
      display: flex; align-items: flex-end; gap: 2px;
      height: 24px; margin-left: auto;
    }
    .stat-grid-3 {
      display: grid; grid-template-columns: repeat(3,1fr);
      gap: 7px; margin-bottom: 9px;
    }
    .stat-emoji { margin-bottom: var(--space-1); }

    /* ── Pro Dashboard (glass + neon) ─────────────────────── */
    /* ── Bento Dashboard (unified Pulse + Pro Dash) ───── */
    .bento-dash {
      position: relative;
      margin: 0 0 9px;
      overflow: hidden;
    }
    .bento-dash::before {
      content: ''; position: absolute; inset: -1px;
      border-radius: 19px; padding: 1px;
      background: conic-gradient(from var(--pulse-spin,0deg), rgba(46,211,224,.55), rgba(143,157,255,.55), rgba(240,180,41,.35), rgba(46,211,224,.55));
      -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
      -webkit-mask-composite: xor; mask-composite: exclude;
      animation: pulseSpin 32s linear infinite;
      pointer-events: none; opacity: .32; z-index: 0;
    }
    .bento-head {
      position: relative; z-index: 2;
      display: flex; align-items: center; gap: 8px;
      margin-bottom: 10px;
    }
    .bento-pill {
      flex: 1 1 auto; min-width: 0;
      display: flex; align-items: center; gap: 10px;
      padding: 8px 12px;
      color: var(--text);
      font-family: inherit; text-align: left; cursor: pointer;
      transition: border-color .2s ease, background .2s ease, transform .15s ease;
    }
    .bento-pill:hover { border-color: rgba(46,211,224,.3); background: rgba(46,211,224,.04); }
    .bento-pill:active { transform: scale(.985); }
    .bento-orb {
      flex: 0 0 auto;
      width: 14px; height: 14px; border-radius: 50%;
      background: radial-gradient(circle at 35% 30%, #fff, var(--green) 55%, transparent 80%);
      box-shadow: 0 0 10px var(--cyan), 0 0 18px rgba(46,211,224,.35), 0 0 10px var(--green);
      animation: pd-orb-pulse 1.6s ease-in-out infinite;
    }
    .bento-title {
      display: flex; flex-direction: column; gap: 3px;
      flex: 1 1 auto; min-width: 0;
    }
    .bento-title-lbl {
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .bento-title-sub {
      display: inline-flex; align-items: center; gap: 6px;
    }
    .bento-live {
      letter-spacing: .5px;
      text-transform: uppercase;
    }
    .bento-live-dot {
      width: 4px; height: 4px; border-radius: 50%;
      animation: pd-orb-pulse 1.8s ease-in-out infinite;
    }
    .bento-updated {
      line-height: 1;
      letter-spacing: .2px;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .bento-icon-btn {
      flex: 0 0 auto;
      width: 34px; height: 34px; border-radius: 12px;
      display: inline-flex; align-items: center; justify-content: center;
      color: var(--muted);
      cursor: pointer;
      transition: color .2s ease, background .2s ease, border-color .2s ease, transform .15s ease;
    }
    .bento-icon-btn:hover { color: var(--cyan); border-color: rgba(46,211,224,.35); }
    .bento-icon-btn:active { transform: scale(.95); }
    .bento-icon-btn.on { border-color: rgba(46,211,224,.4); }
    .bento-chevron svg { transition: transform .35s cubic-bezier(.34,1.56,.64,1); display: block; }
    .bento-chevron.open svg { transform: rotate(180deg); }
    .bento-chevron .bento-priv-eye-off { display: none; }
    .bento-icon-btn.on .bento-priv-eye { display: none; }
    .bento-icon-btn.on .bento-priv-eye-off { display: inline; }

    /* Bento Grid: Hero (2 rows) + 2 secondary cells */
    .bento-grid {
      position: relative; z-index: 1;
      display: grid;
      grid-template-columns: 1.4fr 1fr;
      grid-template-rows: 1fr 1fr;
      gap: 8px;
      margin-bottom: 10px;
    }
    .bento-cell {
      position: relative;
      overflow: hidden;
      transition: border-color .25s ease, box-shadow .25s ease, transform .15s ease;
    }
    .bento-cell:active { transform: scale(.985); }
    /* Hero cell spans both rows */
    .bento-hero {
      grid-row: 1 / span 2;
      min-height: 220px;
      padding: 14px 16px 12px;
      display: flex; flex-direction: column; justify-content: flex-end;
      cursor: pointer;
    }
    .bento-hero:hover { border-color: rgba(46,211,224,.32); }
    .bento-hero-spark {
      position: absolute;
      left: 0; right: 0; bottom: 0;
      width: 100%; height: 65%;
      pointer-events: none;
      z-index: 0;
    }
    .bento-hero-affordance {
      position: absolute;
      top: 10px; right: 10px;
      z-index: 2;
      display: inline-flex; align-items: center; gap: 4px;
      padding: 4px 7px 4px 6px;
      border-radius: 999px;
      font: 800 8.5px/1 'Inter', sans-serif;
      letter-spacing: .8px;
      text-transform: uppercase;
      pointer-events: none;
      transition: transform .2s ease, background .2s ease, border-color .2s ease;
    }
    .bento-hero-affordance svg { display: block; opacity: .9; }
    .bento-hero-affordance-arrow { font-size: 11px; line-height: 1; margin-left: 1px; }
    .bento-hero:hover .bento-hero-affordance {
      transform: translateX(1px);
      background: rgba(46,211,224,.16);
      border-color: rgba(46,211,224,.45);
    }
    @media (max-width: 359px) {
      .bento-hero-affordance-lbl { display: none; }
      .bento-hero-affordance { padding: 5px 6px; }
    }
    .bento-hero-content {
      position: relative; z-index: 1;
      display: flex; flex-direction: column; gap: 4px;
    }
    .bento-hero-label {
      font-size: var(--text-2xs); color: var(--muted);
      letter-spacing: 1.2px; text-transform: uppercase;
      font-weight: 700;
    }
    .bento-hero-val {
      font: 900 30px/1 'DM Mono', monospace;
      color: var(--text);
      font-variant-numeric: tabular-nums;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      transition: color .25s ease;
    }
    .bento-hero.pos .bento-hero-val { text-shadow: 0 0 16px rgba(47,212,138,.45); }
    .bento-hero.neg .bento-hero-val { text-shadow: 0 0 16px rgba(242,88,94,.45); }
    .bento-hero-meta {
      display: flex; align-items: center; gap: 8px; margin-top: 6px;
    }
    .bento-trend-pill {
      display: inline-flex; align-items: center;
      padding: 3px 8px;
      border-radius: 999px;
      font: 700 10px/1 'DM Mono', monospace;
      background: rgba(255,255,255,.06);
      color: var(--muted);
      font-variant-numeric: tabular-nums;
    }
    .bento-trend-pill.pos { background: rgba(47,212,138,.12); color: var(--green); border-color: rgba(47,212,138,.35); }
    .bento-trend-pill.neg { background: rgba(242,88,94,.12); color: var(--red); border-color: rgba(242,88,94,.35); }
    .bento-meta-sub {
      font: 700 9px/1 'Inter', sans-serif;
      letter-spacing: .8px; text-transform: uppercase;
    }
    /* Right column cells reuse pd-card subclass styling but with tighter padding */
    .bento-cell.pd-card { min-height: 0; padding: 10px 8px 8px; }
    .bento-cell .pd-half-gauge { max-width: 96px; height: 50px; }
    .bento-cell .pd-gainer-head { width: 40px; height: 40px; margin: 2px 0 4px; }
    .bento-cell .pd-gainer-icon { font-size: 17px; }

    /* ── Smart Money strip (compact, embedded) ── */
    .bento-smart-strip {
      position: relative; z-index: 1;
      margin: 0 0 10px;
      padding: 10px 12px 8px;
      cursor: pointer; overflow: hidden;
      transition: transform .18s cubic-bezier(.22,1,.36,1), border-color .2s ease;
    }
    .bento-smart-strip:hover { border-color: rgba(46,211,224,.4); }
    .bento-smart-strip:active { transform: scale(.992); }
    .bento-smart-head {
      display: flex; align-items: center; gap: 8px;
      margin-bottom: 6px;
    }
    .bento-smart-orb {
      flex: 0 0 auto;
      width: 10px; height: 10px; border-radius: 50%;
      background: radial-gradient(circle at 35% 30%, #fff, rgba(46,211,224,.8) 50%, rgba(46,211,224,.05) 100%);
      box-shadow: 0 0 8px rgba(46,211,224,.7);
      animation: pcOrbPulse 2.6s ease-in-out infinite;
    }
    .bento-smart-title {
      font: 800 11px/1 'Inter', sans-serif;
      letter-spacing: 1.4px;
    }
    .bento-smart-sub {
      font: 600 9.5px/1 'Inter', sans-serif;
      letter-spacing: .4px;
      flex: 1 1 auto;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .bento-smart-arrow {
      font-size: 13px; 
      transition: transform .25s ease;
    }
    .bento-smart-strip:hover .bento-smart-arrow { transform: translateX(3px); }
    .bento-smart-strip .pc-spark { width: 100%; height: 22px; display: block; margin: 0 0 6px; opacity: .85; }
    .bento-smart-strip .pc-kpis { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 6px; margin-bottom: 6px; }
    .bento-smart-strip .pc-kpi { padding: 7px 8px 6px; }
    .bento-smart-strip .pc-kpi-lbl { font-size: var(--text-2xs); }
    .bento-smart-strip .pc-kpi-val { font-size: 13px; }
    .bento-smart-strip .pc-tape-wrap { margin-top: 0; height: 22px; }
    .bento-smart-strip .pc-tape { font-size: var(--text-2xs); padding: 4px 12px; }

    /* ── Tab Switcher ── */
    .bento-tabs {
      position: relative; z-index: 1;
      margin-bottom: 10px;
    }
    .bento-tab {
      display: inline-flex; align-items: center; justify-content: center; gap: 5px;
      padding: 7px 6px;
      font: 700 10px/1 'Inter', sans-serif;
      letter-spacing: .6px;
      text-transform: uppercase;
      cursor: pointer; font-family: inherit;
      transition: color .2s, background .2s, border-color .2s, transform .15s;
    }
    .bento-tab:hover { color: var(--text); background: rgba(255,255,255,.03); }
    .bento-tab:active { transform: scale(.97); }
    .bento-tab.active {
      border-color: rgba(46,211,224,.34);
    }
    .bento-tab-dot {
      width: 5px; height: 5px; border-radius: 50%;
      background: currentColor; opacity: .55;
    }
    .bento-tab.active .bento-tab-dot { opacity: 1; box-shadow: 0 0 6px currentColor; }
    .bento-tab-badge {
      display: none;
      min-width: 16px; height: 16px;
      padding: 0 4px; margin-left: 2px;
      border-radius: 999px;
      background: var(--red); color: #fff;
      font: 800 9px/16px 'DM Mono', monospace;
      letter-spacing: 0; text-align: center;
      box-shadow: 0 0 6px rgba(242,88,94,.55);
    }
    .bento-tab.has-alerts .bento-tab-badge { display: inline-block; }

    .bento-tab-content {
      position: relative; z-index: 1;
      display: none;
    }
    .bento-tab-content.active { display: block; animation: bentoFadeIn .25s ease; }
    @keyframes bentoFadeIn {
      from { opacity: 0; transform: translateY(4px); }
      to   { opacity: 1; transform: translateY(0); }
    }

    /* Flow tab CTA */
    .bento-flow-cta {
      position: relative; width: 100%;
      display: flex; align-items: center; gap: 14px;
      padding: 16px;
      color: var(--text); cursor: pointer;
      text-align: left; font-family: inherit;
      transition: transform .15s ease, border-color .2s ease;
    }
    .bento-flow-cta:hover { border-color: rgba(46,211,224,.5); }
    .bento-flow-cta:active { transform: scale(.985); }
    .bento-flow-cta-icon {
      flex: 0 0 auto;
      width: 44px; height: 44px;
      border-radius: 12px;
      display: inline-flex; align-items: center; justify-content: center;
      font-size: 22px;
    }
    .bento-flow-cta-text { flex: 1 1 auto; min-width: 0; }
    .bento-flow-cta-title { font: 800 13px/1.2 'Inter', sans-serif; letter-spacing: .3px; }
    .bento-flow-cta-sub  { font: 600 10.5px/1.2 'Inter', sans-serif; margin-top: 3px; }
    .bento-flow-cta-arrow { font-size: 18px; }

    /* Alerts tab card (wide horizontal) */
    .bento-alerts-card {
      position: relative;
      display: flex; align-items: center; gap: 14px;
      padding: 14px 16px;
      overflow: hidden;
    }
    .bento-alerts-card.pos { border-color: rgba(46,211,224,.35); }
    .bento-alerts-card .pd-spark { position: absolute; left: 0; right: 0; bottom: 0; width: 100%; height: 50%; opacity: .2; pointer-events: none; z-index: 0; }
    .bento-alerts-card .pd-alerts-head { flex: 0 0 auto; width: 44px; height: 44px; margin: 0; position: relative; z-index: 1; }
    .bento-alerts-card-text { position: relative; z-index: 1; flex: 1 1 auto; min-width: 0; text-align: left; }
    .bento-alerts-card-text .pd-val { font-size: 22px; text-align: left; }
    .bento-alerts-card-text .pd-lbl { text-align: left; }

    /* Stack hero on narrow screens */
    @media (max-width: 359px) {
      .bento-grid { grid-template-columns: 1fr 1fr; grid-template-rows: auto auto; }
      .bento-hero { grid-column: 1 / -1; grid-row: 1; min-height: 132px; }
    }

    /* ── Wide layout (Telegram Web / desktop browser, ≥720px) ────────
       Telegram Desktop pins the mini-app to ~390px so most users never
       see this; but on Telegram Web (iframe) and when a power user opens
       the mini-app via the "Open in Browser" button, we get real estate
       to spread out. */
    @media (min-width: 720px) {
      .bento-dash { padding: 16px; }
      .bento-grid {
        grid-template-columns: 1.6fr 1fr 1fr;
        grid-template-rows: 1fr;
        gap: 12px;
      }
      .bento-hero {
        grid-row: 1; grid-column: 1;
        min-height: 240px;
      }
      .bento-cell.pd-card { padding: 14px 12px 12px; }
      .bento-smart-strip { padding: 14px 16px 12px; }
      .bento-smart-strip .pc-kpi-val { font-size: 15px; }
      .pd-alloc-body { grid-template-columns: 240px 1fr; gap: 20px; }
      .pd-donut-wrap { max-width: 240px; }
    }

    @media (prefers-reduced-motion: reduce) {
      .bento-dash::before, .bento-smart-orb, .bento-orb, .bento-live-dot,
      .bento-tab-content { animation: none !important; }
    }

    /* ── Bento HUD layer (futuristic redesign) ───────────────
       Pure decoration on top of the existing markup: corner
       brackets, holo-grid + scanline in the hero, gauge ticks,
       orbit ring around the donut. No JS hooks are touched. */
    .bento-cell { --hud-c1: rgba(46,211,224,.6); --hud-c2: rgba(143,157,255,.5); }
    .bento-cell.pos { --hud-c1: rgba(47,212,138,.7); --hud-c2: rgba(47,212,138,.4); }
    .bento-cell.neg { --hud-c1: rgba(242,88,94,.7); --hud-c2: rgba(242,88,94,.4); }
    .bento-cell.hot { --hud-c1: rgba(255,193,7,.8); --hud-c2: rgba(255,193,7,.45); }
    .bento-cell::before {
      content: ''; position: absolute; inset: 6px;
      pointer-events: none; z-index: 2;
      background:
        linear-gradient(var(--hud-c1), var(--hud-c1)) left 0 top 0 / 12px 1px,
        linear-gradient(var(--hud-c1), var(--hud-c1)) left 0 top 0 / 1px 12px,
        linear-gradient(var(--hud-c2), var(--hud-c2)) right 0 bottom 0 / 12px 1px,
        linear-gradient(var(--hud-c2), var(--hud-c2)) right 0 bottom 0 / 1px 12px;
      background-repeat: no-repeat;
      opacity: .5;
      transition: opacity .25s ease;
    }
    .bento-cell:hover::before, .bento-cell.pos::before,
    .bento-cell.neg::before, .bento-cell.hot::before { opacity: .9; }
    /* Hero: holographic grid + corner glow */
    .bento-hero {
      background:
        linear-gradient(rgba(46,211,224,.045) 1px, transparent 1px) 0 0 / 100% 22px,
        linear-gradient(90deg, rgba(46,211,224,.045) 1px, transparent 1px) 0 0 / 22px 100%,
        radial-gradient(130% 110% at 0% 0%, rgba(46,211,224,.12), transparent 55%),
        linear-gradient(135deg, rgba(27,33,48,.88) 0%, rgba(19,24,36,.7) 100%);
    }
    /* Scanline lives in its own span — ::after is taken by the .ripple effect */
    .bento-hero-scan {
      position: absolute; left: 0; right: 0; top: -35%; height: 30%;
      background: linear-gradient(to bottom, transparent, rgba(46,211,224,.05), transparent);
      animation: bentoScan 13s linear infinite;
      pointer-events: none; z-index: 0;
    }
    @keyframes bentoScan {
      0%, 55% { top: -35%; }
      100%    { top: 135%; }
    }
    .bento-hero-spark { opacity: .36; }
    .bento-hero-val { font-size: 32px; letter-spacing: -.5px; }
    /* Re-assert the responsive sizes that the unscoped bump above would override */
    @media (max-width: 359px) { .bento-hero-val { font-size: 26px; } }
    @media (min-width: 720px) { .bento-hero-val { font-size: 38px; } }
    .bento-hero-label { display: inline-flex; align-items: center; gap: 6px; }
    .bento-hero-label::before {
      content: ''; width: 5px; height: 5px; flex: 0 0 auto;
      background: var(--cyan); transform: rotate(45deg);
      box-shadow: 0 0 6px var(--cyan);
    }
    /* Gauge tick marks (decorative SVG group) */
    .pd-half-ticks line {
      stroke: rgba(255,255,255,.16); stroke-width: 1.5; stroke-linecap: round;
    }
    .pd-gauge-card.pos .pd-half-ticks line { stroke: rgba(47,212,138,.28); }
    .pd-gauge-card.neg .pd-half-ticks line { stroke: rgba(242,88,94,.28); }
    /* Smart Money strip: accent line + angular KPI chips */
    .bento-smart-strip::before {
      content: ''; position: absolute; top: 0; left: 10%; right: 10%; height: 1px;
      background: linear-gradient(90deg, transparent, rgba(46,211,224,.6), rgba(143,157,255,.6), transparent);
      pointer-events: none;
    }
    .bento-smart-strip .pc-kpi { border-radius: 3px 10px 3px 10px; }
    /* Tab switcher: glowing underline on the active tab */
    .bento-tabs { border-color: rgba(46,211,224,.12); }
    .bento-tab { position: relative; }
    .bento-tab.active::after {
      content: ''; position: absolute; left: 18%; right: 18%; bottom: 1px; height: 2px;
      border-radius: 1px;
      background: linear-gradient(90deg, transparent, var(--cyan), transparent);
      box-shadow: 0 0 8px rgba(46,211,224,.6);
    }
    /* Allocation donut: slow orbit ring */
    .pd-donut-wrap::after {
      content: ''; position: absolute; inset: -6px; border-radius: 50%;
      border: 1px dashed rgba(46,211,224,.16);
      pointer-events: none;
      animation: pdOrbit 40s linear infinite;
    }
    @keyframes pdOrbit { to { transform: rotate(360deg); } }
    /* ── Odometer digits (data-driven motion) ── */
    .odo-d {
      display: inline-block; height: 1em; line-height: 1em;
      overflow: hidden; vertical-align: -0.15em;
    }
    .odo-strip {
      display: block;
      transition: transform .42s cubic-bezier(.25,.9,.3,1);
      will-change: transform;
    }
    .odo-strip > span { display: block; height: 1em; line-height: 1em; }
    /* Update tick: thin outline flash on the card whose value changed.
       Outline (not box-shadow) so the pos/neg state glow is untouched. */
    .pd-tick {
      outline: 1px solid rgba(46,211,224,0);
      outline-offset: -1px;
      animation: pdTickFlash .8s ease-out 1;
    }
    @keyframes pdTickFlash {
      0%   { outline-color: rgba(46,211,224,0); }
      20%  { outline-color: rgba(46,211,224,.55); }
      100% { outline-color: rgba(46,211,224,0); }
    }
    @media (prefers-reduced-motion: reduce) {
      .bento-hero-scan { animation: none !important; opacity: 0; }
      .pd-donut-wrap::after { animation: none !important; }
      .odo-strip { transition: none !important; }
      .pd-tick { animation: none !important; }
    }

    /* Legacy pro-dash-section kept for backwards-compat (other places may reference) */
    .pro-dash-section {
      position: relative;
      background:
        linear-gradient(135deg, rgba(46,211,224,.06) 0%, rgba(143,157,255,.06) 100%),
        rgba(19,24,36,.55);
      border: 1px solid rgba(46,211,224,.18);
      border-radius: 14px;
      padding: 12px 14px;
      margin-bottom: 9px;
      overflow: hidden;
      backdrop-filter: blur(12px);
      -webkit-backdrop-filter: blur(12px);
      box-shadow:
        inset 0 1px 0 rgba(46,211,224,.15),
        0 4px 20px rgba(0,0,0,.25);
    }
    .pro-dash-section::before {
      content: ""; position: absolute; inset: 0; pointer-events: none;
      background: linear-gradient(110deg, transparent 30%, rgba(46,211,224,.08) 50%, transparent 70%);
      transform: translateX(-100%);
      animation: pdShimmer 6s ease-in-out infinite;
    }
    @keyframes pdShimmer {
      0%, 90%, 100% { transform: translateX(-100%); }
      45%           { transform: translateX(100%); }
    }
    /* ── Glass Pill Toggle ── */
    .pd-pill {
      position: relative;
      width: 100%;
      min-height: 86px;
      display: flex; align-items: center; gap: 14px;
      padding: 12px 16px;
      border: 1px solid rgba(255,255,255,.1);
      border-radius: 22px;
      background:
        linear-gradient(135deg, rgba(46,211,224,.10) 0%, rgba(143,157,255,.10) 100%),
        linear-gradient(135deg, rgba(27,33,48,.85), rgba(19,24,36,.55));
      backdrop-filter: var(--glass-blur);
      -webkit-backdrop-filter: var(--glass-blur);
      box-shadow:
        inset 0 1px 0 rgba(255,255,255,.08),
        inset 0 0 22px rgba(46,211,224,.05),
        0 10px 30px rgba(0,0,0,.35),
        var(--glow-cyan-sm);
      color: var(--text);
      cursor: pointer;
      font-family: inherit;
      text-align: left;
      transition: transform .18s ease, box-shadow .25s ease, border-color .25s ease;
      z-index: 2;
    }
    .pd-pill:hover { border-color: rgba(46,211,224,.3); }
    .pd-pill:active { transform: scale(.985); }
    .pd-pill-orb {
      position: relative; flex: 0 0 auto;
      width: 20px; height: 20px; border-radius: 50%;
      background: radial-gradient(circle at 35% 30%, #fff, var(--green) 55%, transparent 80%);
      box-shadow:
        0 0 14px var(--cyan),
        0 0 26px rgba(46,211,224,.35),
        0 0 10px var(--green),
        0 0 22px rgba(47,212,138,.3);
      animation: pd-orb-pulse 1.6s ease-in-out infinite;
    }
    @keyframes pd-orb-pulse {
      0%, 100% { transform: scale(1);    opacity: 1; }
      50%      { transform: scale(1.18); opacity: .85; }
    }
    .pd-pill-title {
      display: flex; flex-direction: column; gap: 6px;
      flex: 1 1 auto; min-width: 0;
    }
    .pd-pill-label {
      line-height: 1;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .pd-pill-sub {
      display: inline-flex; align-items: center; gap: 8px;
    }
    .pd-live-badge {
      display: inline-flex; align-items: center; gap: 5px;
      height: 20px; padding: 0 8px;
      border-radius: 10px;
      background: rgba(46,211,224,.10);
      border: 1px solid rgba(46,211,224,.3);
      color: var(--cyan);
      font-weight: 700; font-size: var(--text-2xs); letter-spacing: .6px;
      text-transform: uppercase;
    }
    .pd-live-tick {
      width: 5px; height: 5px; border-radius: 50%;
      background: var(--cyan);
      box-shadow: 0 0 6px var(--cyan);
      animation: pd-orb-pulse 1.8s ease-in-out infinite;
    }
    .pd-updated {
      font-weight: 500; font-size: var(--text-2xs); line-height: 1;
      color: var(--muted); letter-spacing: .2px;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .pd-pill-chevron {
      flex: 0 0 auto;
      width: 34px; height: 34px; border-radius: 50%;
      display: inline-flex; align-items: center; justify-content: center;
      color: var(--cyan);
      background: rgba(46,211,224,.08);
      border: 1px solid rgba(46,211,224,.18);
      transition: transform .45s cubic-bezier(.34,1.56,.64,1), background .25s ease;
    }
    .pd-pill-chevron.open { transform: rotate(180deg); }
    .pd-pill[aria-expanded="true"] .pd-pill-chevron { background: rgba(46,211,224,.14); }

    /* ── Pro Dash Grid ── */
    .pro-dash-grid {
      display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; margin-top: 12px;
      position: relative; z-index: 1;
    }
    @media (min-width: 420px) {
      .pro-dash-grid { grid-template-columns: repeat(4, 1fr); }
    }
    .pd-card {
      position: relative;
      background: linear-gradient(135deg, rgba(27,33,48,.92) 0%, rgba(19,24,36,.75) 100%);
      padding: 14px 12px 12px;
      text-align: center;
      min-width: 0;
      min-height: 138px;
      overflow: hidden;
      transition: border-color .25s ease, box-shadow .25s ease, transform .15s ease;
      display: flex; flex-direction: column; align-items: center; justify-content: flex-start;
    }
    .pd-card:active { transform: scale(.97); }
    .pd-card.pos {
      border-color: rgba(47,212,138,.35);
      box-shadow:
        inset 0 0 22px rgba(47,212,138,.06),
        0 0 14px rgba(47,212,138,.18),
        inset 0 0 0 1px rgba(47,212,138,.1);
    }
    .pd-card.neg {
      border-color: rgba(242,88,94,.35);
      box-shadow:
        inset 0 0 22px rgba(242,88,94,.06),
        0 0 14px rgba(242,88,94,.18),
        inset 0 0 0 1px rgba(242,88,94,.1);
    }
    .pd-card.hot {
      border-color: rgba(255,193,7,.55);
      box-shadow:
        inset 0 0 22px rgba(255,193,7,.08),
        0 0 18px rgba(255,193,7,.28),
        inset 0 0 0 1px rgba(255,193,7,.15);
    }
    .pd-card > .pd-spark {
      position: absolute; left: 0; right: 0; bottom: 0;
      width: 100%; height: 42%;
      pointer-events: none; opacity: .22;
      z-index: 0;
    }
    .pd-card > .pd-val,
    .pd-card > .pd-lbl,
    .pd-card > .pd-gauge-center,
    .pd-card > .pd-gainer-head,
    .pd-card > .pd-alerts-head,
    .pd-card > .pd-ring,
    .pd-card > .pd-half-gauge { position: relative; z-index: 1; }
    .pd-val {
      font-size: 14px; color: var(--text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      transition: color .25s ease;
      max-width: 100%;
    }
    .pd-val.pos { color: var(--green); text-shadow: 0 0 10px rgba(47,212,138,.55); }
    .pd-val.neg { color: var(--red);   text-shadow: 0 0 10px rgba(242,88,94,.55); }
    .pd-val.muted { color: var(--muted); font-weight: 700; }
    .pd-lbl {
      font-size: var(--text-2xs); color: var(--muted); margin-top: 3px;
      text-transform: uppercase; letter-spacing: .5px; font-weight: 700;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      max-width: 100%;
    }

    /* ── Portfolio Ring ── */
    .pd-ring-card { justify-content: center; }
    .pd-ring {
      width: 100%;
      max-width: 108px;
      aspect-ratio: 1 / 1;
      display: block;
      filter: drop-shadow(0 0 8px rgba(46,211,224,.18));
    }
    .pd-ring-bg { fill: none; stroke: rgba(255,255,255,.06); stroke-width: 8; }
    .pd-ring-fg {
      fill: none; stroke: url(#pdRingGrad); stroke-width: 8;
      stroke-linecap: round;
      stroke-dasharray: 314.16;
      stroke-dashoffset: 314.16;
      transform: rotate(-90deg);
      transform-origin: 60px 60px;
      transition: stroke .25s ease;
    }
    .pd-ring-hi { fill: none; stroke: url(#pdRingHi); stroke-width: 2; opacity: .55; pointer-events: none; }
    .pd-ring-card.pos .pd-ring-fg { stroke: url(#pdRingGradPos); }
    .pd-ring-card.neg .pd-ring-fg { stroke: url(#pdRingGradNeg); }
    .pd-ring-center {
      position: absolute;
      left: 50%; top: 50%; transform: translate(-50%, -50%);
      display: flex; flex-direction: column; align-items: center; gap: 2px;
      pointer-events: none;
      width: 80%;
    }
    .pd-ring-center .pd-val { font-size: 16px; }

    /* ── Half-circle Gauge (24h P&L) ── */
    .pd-gauge-card { justify-content: flex-start; padding-top: 10px; }
    .pd-half-gauge {
      width: 100%;
      max-width: 108px;
      height: 58px;
      display: block;
      filter: drop-shadow(0 0 6px rgba(46,211,224,.16));
    }
    .pd-half-bg {
      fill: none; stroke-width: 8; stroke-linecap: round;
    }
    .pd-half-fg {
      fill: none; stroke: var(--cyan); stroke-width: 8; stroke-linecap: round;
      stroke-dasharray: 157.08;
      stroke-dashoffset: 157.08;
      transition: stroke .25s ease;
    }
    .pd-gauge-card.pos .pd-half-fg { stroke: var(--green); filter: drop-shadow(0 0 8px rgba(47,212,138,.55)); }
    .pd-gauge-card.neg .pd-half-fg { stroke: var(--red);   filter: drop-shadow(0 0 8px rgba(242,88,94,.55)); }
    .pd-gauge-center {
      display: flex; flex-direction: column; align-items: center; gap: 2px;
      margin-top: 2px;
    }
    .pd-gauge-center .pd-val { font-size: 15px; }

    /* ── Top Gainer Mini Ring ── */
    .pd-gainer-head {
      position: relative;
      width: 48px; height: 48px;
      display: inline-flex; align-items: center; justify-content: center;
      margin: 4px 0 8px;
    }
    .pd-mini-ring {
      position: absolute; inset: 0; width: 100%; height: 100%;
      filter: drop-shadow(0 0 6px rgba(46,211,224,.25));
    }
    .pd-mring-bg { fill: none; stroke: rgba(255,255,255,.08); stroke-width: 4; }
    .pd-mring-fg {
      fill: none; stroke: url(#pdRingGrad); stroke-width: 4; stroke-linecap: round;
      stroke-dasharray: 113.1;
      stroke-dashoffset: 113.1;
      transform: rotate(-90deg);
      transform-origin: 22px 22px;
      transition: stroke .25s ease, filter .25s ease;
    }
    .pd-gainer-card.pos .pd-mring-fg { stroke: url(#pdRingGradPos); }
    .pd-gainer-card.neg .pd-mring-fg { stroke: url(#pdRingGradNeg); }
    .pd-gainer-icon {
      position: relative; z-index: 2;
      font-size: 20px; line-height: 1;
      filter: drop-shadow(0 0 8px rgba(46,211,224,.35));
    }
    .pd-gainer-card.hot .pd-gainer-icon { filter: drop-shadow(0 0 10px rgba(240,180,41,.7)); }

    /* ── Active Alerts Bell ── */
    .pd-alerts-head {
      position: relative;
      width: 48px; height: 48px;
      display: inline-flex; align-items: center; justify-content: center;
      margin: 4px 0 8px;
      color: var(--muted);
    }
    .pd-alerts-card.pos .pd-alerts-head { color: var(--cyan); }
    .pd-bell { position: relative; z-index: 2; display: block; }
    .pd-alert-badge {
      position: absolute; top: -2px; right: -2px; z-index: 3;
      min-width: 16px; height: 16px; padding: 0 4px;
      border-radius: 999px;
      background: var(--red);
      color: #fff;
      font: 800 9px/16px 'DM Mono', monospace;
      text-align: center;
      box-shadow: 0 0 8px rgba(242,88,94,.55);
      display: none;
    }
    .pd-alerts-card.pos .pd-alert-badge { display: block; }
    .pd-alert-halo {
      position: absolute; inset: 0; border-radius: 50%;
      pointer-events: none;
      box-shadow: 0 0 0 0 rgba(46,211,224,.45);
      opacity: 0;
    }
    .pd-alerts-card.pos .pd-alert-halo {
      opacity: 1;
      animation: pd-alert-halo 1.8s ease-out infinite;
    }
    @keyframes pd-alert-halo {
      0%   { box-shadow: 0 0 0 0   rgba(46,211,224,.45); opacity: .9; }
      70%  { box-shadow: 0 0 0 14px rgba(46,211,224,0);   opacity: 0;  }
      100% { box-shadow: 0 0 0 0   rgba(46,211,224,0);   opacity: 0;  }
    }

    /* Smooth collapse scoped to the Pro Dashboard only (no regression on other sections) */
    #pdBody {
      max-height: 1200px; opacity: 1;
      overflow: hidden;
      transition: max-height .4s cubic-bezier(.4,0,.2,1), opacity .25s ease;
    }
    #pdBody.collapsed {
      display: block;
      max-height: 0; opacity: 0;
    }
    @media (prefers-reduced-motion: reduce) {
      .pro-dash-section::before,
      .pd-pill-orb,
      .pd-live-tick,
      .pd-alert-halo,
      .pd-pill-chevron,
      .pd-ring-fg,
      .pd-mring-fg,
      .pd-half-fg,
      .pd-card,
      .pd-val,
      .pd-donut-slice,
      #pdBody { transition: none !important; animation: none !important; }
    }

    /* ── Portfolio Allocation Donut (expanded dashboard panel) ── */
    .pd-alloc-panel {
      position: relative;
      margin-top: 12px;
      padding: 14px 14px 12px;
      overflow: hidden;
    }
    .pd-alloc-panel::before {
      content: '';
      position: absolute;
      inset: -20% -20% auto auto;
      width: 60%; height: 60%;
      background: radial-gradient(circle at 70% 30%, rgba(46,211,224,.18), transparent 60%),
                  radial-gradient(circle at 30% 70%, rgba(143,157,255,.14), transparent 60%);
      filter: blur(26px);
      pointer-events: none;
      z-index: 0;
    }
    .pd-alloc-head {
      position: relative; z-index: 1;
      display: flex; align-items: baseline; justify-content: space-between;
      gap: 10px;
      margin-bottom: 10px;
    }
    .pd-alloc-title {
      font-size: 12px; font-weight: 800;
      text-transform: uppercase; 
    }
    .pd-alloc-sub {
      font: 700 10px/1 'DM Mono', monospace;
      color: var(--muted);
      white-space: nowrap;
    }
    .pd-alloc-body {
      position: relative; z-index: 1;
      display: grid; grid-template-columns: 1fr;
      gap: 12px; align-items: center;
    }
    @media (min-width: 420px) {
      .pd-alloc-body { grid-template-columns: 180px 1fr; gap: 16px; }
    }
    .pd-donut-wrap {
      position: relative;
      width: 100%; max-width: 180px;
      aspect-ratio: 1 / 1;
      margin: 0 auto;
    }
    .pd-donut {
      width: 100%; height: 100%;
      display: block;
      filter: drop-shadow(0 0 12px rgba(46,211,224,.22));
    }
    .pd-donut-slice {
      fill: none;
      stroke-width: 20;
      stroke-linecap: butt;
      transition: stroke-width .25s ease, opacity .25s ease, filter .25s ease;
      cursor: pointer;
      opacity: 1;
    }
    .pd-alloc-panel.has-active .pd-donut-slice { opacity: .32; }
    .pd-donut-slice.active {
      stroke-width: 26;
      opacity: 1;
      filter: drop-shadow(0 0 6px currentColor);
    }
    .pd-donut-center {
      position: absolute;
      left: 50%; top: 50%;
      transform: translate(-50%, -50%);
      display: flex; flex-direction: column; align-items: center; gap: 2px;
      pointer-events: none;
      width: 72%;
      text-align: center;
    }
    .pd-donut-val {
      font: 800 15px/1.1 'DM Mono', monospace;
      color: var(--text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      max-width: 100%;
    }
    .pd-donut-lbl {
      font-size: var(--text-2xs); color: var(--muted);
      text-transform: uppercase; letter-spacing: .5px; font-weight: 700;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      max-width: 100%;
    }
    .pd-donut-pct {
      font: 700 10px/1 'DM Mono', monospace;
      color: var(--cyan);
      margin-top: 2px;
    }
    .pd-alloc-legend {
      list-style: none; margin: 0; padding: 0;
      display: flex; flex-direction: column; gap: 4px;
      max-height: 220px; overflow-y: auto;
    }
    .pd-alloc-legend::-webkit-scrollbar { width: 4px; }
    .pd-alloc-legend::-webkit-scrollbar-thumb { background: rgba(46,211,224,.25); border-radius: 2px; }
    .pd-alloc-row {
      display: grid;
      grid-template-columns: 10px 1fr auto auto;
      align-items: center;
      gap: 8px;
      padding: 5px 8px;
      border-radius: 8px;
      cursor: pointer;
      transition: background .18s ease, border-color .18s ease;
      border: 1px solid transparent;
    }
    .pd-alloc-row:hover { background: rgba(46,211,224,.06); }
    .pd-alloc-row.active {
      background: rgba(46,211,224,.1);
      border-color: rgba(46,211,224,.35);
    }
    .pd-alloc-dot {
      width: 10px; height: 10px; border-radius: 50%;
    }
    /* Der Legendenpunkt des Rests trägt dieselbe Schraffur wie sein
       Tortenstück — sonst zeigte die Legende einen einfarbigen Punkt für
       etwas, das im Bild gestreift ist, und das Nachschlagen bricht. */
    .pd-alloc-dot.is-other {
      background-image: repeating-linear-gradient(
        45deg, rgba(0,0,0,.45) 0 2px, transparent 2px 4px);
      box-shadow: none;
    }
    .pd-alloc-tag {
      font: 700 11px/1 'DM Mono', monospace;
      color: var(--text);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .pd-alloc-pct {
      font: 700 11px/1 'DM Mono', monospace;
      color: var(--cyan);
    }
    .pd-alloc-usd {
      font: 600 10px/1 'DM Mono', monospace;
      color: var(--muted);
    }
    .pd-alloc-empty {
      grid-column: 1 / -1;
      text-align: center;
      color: var(--muted);
      font-size: 12px;
      padding: 18px 8px;
    }

    /* ── Privacy Toggle (hide live numbers) ── */
    .pd-toolbar {
      display: flex;
      justify-content: flex-end;
      align-items: center;
      margin-top: 10px;
      margin-bottom: -2px;
      gap: 8px;
    }
    .pd-priv-btn {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 6px 12px;
      border-radius: 999px;
      border: 1px solid rgba(255,255,255,.1);
      background: rgba(255,255,255,.04);
      color: var(--muted);
      font: 700 10px/1 'Inter', -apple-system, sans-serif;
      letter-spacing: .6px;
      text-transform: uppercase;
      cursor: pointer;
      transition: color .2s ease, background .2s ease, border-color .2s ease, box-shadow .2s ease, transform .15s ease;
    }
    .pd-priv-btn:hover { border-color: rgba(46,211,224,.35); color: var(--text); }
    .pd-priv-btn:active { transform: scale(.96); }
    .pd-priv-btn.on {
      color: var(--cyan);
      background: rgba(46,211,224,.12);
      border-color: rgba(46,211,224,.45);
      box-shadow: 0 0 14px rgba(46,211,224,.25), inset 0 0 8px rgba(46,211,224,.12);
    }
    .pd-priv-btn .pd-priv-icon { display: block; flex: 0 0 auto; }
    .pd-priv-btn .pd-priv-eye-off { display: none; }
    .pd-priv-btn.on .pd-priv-eye { display: none; }
    .pd-priv-btn.on .pd-priv-eye-off { display: inline; }
    .pd-priv-lbl { white-space: nowrap; }

    /* Mask numeric values when privacy mode is on.
       CSS-only: hide real text (color: transparent) and overlay asterisks
       via ::after so count-up animations can't flash real values. */
    #pdBody.pd-private .pd-val,
    #pdBody.pd-private .pd-donut-val,
    #pdBody.pd-private .pd-donut-pct,
    #pdBody.pd-private .pd-alloc-sub,
    #pdBody.pd-private .pd-alloc-pct,
    #pdBody.pd-private .pd-alloc-usd,
    #pdBody.pd-private .pd-alert-badge {
      color: transparent !important;
      text-shadow: none !important;
      position: relative;
    }
    #pdBody.pd-private .pd-val::after,
    #pdBody.pd-private .pd-donut-val::after,
    #pdBody.pd-private .pd-donut-pct::after,
    #pdBody.pd-private .pd-alloc-sub::after,
    #pdBody.pd-private .pd-alloc-pct::after,
    #pdBody.pd-private .pd-alloc-usd::after,
    #pdBody.pd-private .pd-alert-badge::after {
      content: '∗∗∗';
      position: absolute;
      inset: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      color: var(--muted);
      font-weight: 800;
      letter-spacing: 3px;
      text-shadow: 0 0 6px rgba(46,211,224,.25);
      pointer-events: none;
    }
    #pdBody.pd-private .pd-alert-badge::after { letter-spacing: 1px; }

    .chart-relative { position: relative; }
    .chart-svg-block { display: block; overflow: visible; }
    .chart-labels {
      display: flex; justify-content: space-between; margin-top: 2px;
    }

    /* ── Utility: Hidden for toggle ── */
    .u-hidden { display: none !important; }

    /* ── Search Input ── */
    .sn-search-input {
      width: 100%; 
      padding: var(--space-2) var(--space-3);
      color: var(--text); 
      margin-bottom: var(--space-3); 
      transition: border-color var(--transition-fast), box-shadow var(--transition-fast);
    }
    .sn-search-input:focus {
      border-color: var(--cyan);
      box-shadow: 0 0 0 3px var(--cyan-dim);
      outline: none;
    }

    /* ── Portfolio utility classes ── */
    .portfolio-addr {
      display: inline-flex; align-items: center; gap: 6px;
      max-width: 100%; padding: 5px 10px; margin-bottom: var(--space-2);
      border-radius: 10px; background: var(--surface-dim); border: 1px solid var(--border-subtle);
      font-size: var(--text-sm); color: var(--muted); 
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }
    .portfolio-holdings-title {
      margin-top: var(--space-3); 
    }
    .portfolio-updated-row {
      margin-top: var(--space-3); display: flex;
      justify-content: space-between; align-items: center;
      font-size: var(--text-sm); color: var(--muted);
    }
    .portfolio-refresh-btn {
      padding: var(--space-1) var(--space-3);
      font-size: var(--text-sm);
      cursor: pointer; font-family: inherit;
      transition: background var(--transition-fast);
    }
    .portfolio-refresh-btn:hover { background: var(--cyan-dim); }
    .portfolio-loading {
      display: none; text-align: center; padding: var(--space-5);
      color: var(--muted); font-size: var(--text-base);
    }
    .wallet-selector-box {
      display: none; 
      padding: var(--space-3); margin-bottom: var(--space-3);
    }

    /* ── Battle/Social utility ── */
    .battle-rule-text { font-size: var(--text-xs); color: var(--muted); margin-bottom: var(--space-3); }
    .battle-create-btn-full {
      width: 100%; justify-content: center; padding: var(--space-3);
    }
    .battle-create-wrap { margin-bottom: var(--space-md, 14px); }
    .battles-list-mt { margin-top: var(--space-4); }
    .wl-limit-text { font-size: var(--text-xs); color: var(--muted); margin-bottom: var(--space-3); }
    .momentum-val-sm { font-size: var(--text-sm); }

    /* ── Enhanced Card Hover & Active States ─────────── */
    .os-card,
    .m-stat-card,
    .stat-card,
    .sh-card,
    .admin-stat-card {
      transition: transform var(--transition-fast), box-shadow var(--transition-fast),
                  border-color var(--transition-fast), background var(--transition-fast);
    }
    .os-card:hover, .m-stat-card:hover, .stat-card:hover,
    .admin-stat-card:hover {
      transform: translateY(-2px);
      box-shadow: var(--shadow-md);
      border-color: var(--border-medium);
    }
    .os-card:active, .m-stat-card:active, .stat-card:active {
      transform: translateY(0) scale(.98);
    }

    /* ── Glassmorphism Enhancement ────────────────────── */
    .snd-sheet,
    .prm-sheet,
    .term-modal-sheet,
    .sn-chart-modal,
    .acm-sheet {
      backdrop-filter: blur(20px) saturate(1.5);
      -webkit-backdrop-filter: blur(20px) saturate(1.5);
      border: 1px solid var(--border-medium);
      box-shadow: var(--shadow-lg);
    }

    /* ── Smooth Tab Transitions ─────────────────────────
       Uses out-cubic + slight upward slide for a more "premium" feel than
       the default fade. Honors reduced motion via the @media block below. */
    /* `backwards`, nicht `both`: mit `both` blieb nach dem Einblenden für
       immer `transform: translateY(0)` auf #mainApp stehen — eine
       dauerhafte Compositing-Ebene über die ganze Seite und ein
       Bezugsrahmen für jedes feste Element darin. Auf iOS verschwand
       danach die untere Leiste (Handel → Zurück). Der Endzustand ist der
       natürliche, also sieht man keinen Unterschied. */
    .tab-transition-enter {
      animation: tabFadeIn 320ms var(--ease-out) backwards;
    }
    @keyframes tabFadeIn {
      0%   { opacity: 0; transform: translateY(10px); }
      100% { opacity: 1; transform: translateY(0); }
    }
    html[data-motion="reduced"] .tab-transition-enter,
    html[data-motion="reduced"] .tab-enter {
      animation: none !important;
    }
    @media (prefers-reduced-motion: reduce) {
      .tab-transition-enter { animation: none !important; }
    }

    /* ── Pull to Refresh ──────────────────────────────── */
    .ptr-indicator {
      position: fixed; top: 0; left: 50%; transform: translateX(-50%) translateY(-60px);
      z-index: 9990; background: var(--card); border-radius: 50%;
      width: 40px; height: 40px; display: flex; align-items: center;
      justify-content: center; box-shadow: var(--shadow-md);
      border: 1px solid var(--border-medium);
      transition: transform var(--transition-base);
      pointer-events: none;
    }
    .ptr-indicator.visible { transform: translateX(-50%) translateY(16px); }
    .ptr-indicator.refreshing .ptr-spinner {
      animation: sn-spin .8s linear infinite;
    }
    .ptr-spinner {
      width: 20px; height: 20px; border: 2px solid var(--border-medium);
      border-top-color: var(--cyan); border-radius: 50%;
    }
    .ptr-arrow {
      font-size: 18px; color: var(--cyan); transition: transform var(--transition-fast);
    }
    .ptr-indicator.ready .ptr-arrow { transform: rotate(180deg); }

    /* ── Unified Loading Spinner ──────────────────────── */
    .loading-spinner {
      display: inline-flex; align-items: center; justify-content: center;
      width: 24px; height: 24px;
    }
    .loading-spinner::after {
      content: ''; width: 18px; height: 18px;
      border: 2px solid var(--border-medium);
      border-top-color: var(--cyan); border-radius: 50%;
      animation: sn-spin .8s linear infinite;
    }
    .loading-spinner.lg { width: 36px; height: 36px; }
    .loading-spinner.lg::after { width: 28px; height: 28px; border-width: 3px; }

    /* Shimmer-styled inline loader — replaces "⏳ Loading…" patterns */
    .loading-shimmer {
      display: inline-flex; align-items: center; gap: 8px;
      color: var(--muted); font-size: var(--text-sm);
      font-weight: 600; letter-spacing: .2px;
    }
    .loading-shimmer::before {
      content: ''; width: 14px; height: 14px; border-radius: 50%;
      background: conic-gradient(from 0deg, transparent, var(--cyan));
      animation: sn-spin .9s linear infinite;
      mask: radial-gradient(circle, transparent 38%, #000 40%);
      -webkit-mask: radial-gradient(circle, transparent 38%, #000 40%);
    }
    .loading-shimmer.is-block {
      width: 100%; padding: 14px 0; justify-content: center;
    }

    /* ── Content Skeleton: Subnet Row ────────────────── */
    .skel-subnet-row {
      display: flex; align-items: center; gap: 8px;
      padding: 9px 0; border-bottom: 1px solid var(--border-subtle);
    }
    .skel-circle { width: 24px; height: 24px; border-radius: 50%; }
    .skel-line { height: 12px; border-radius: 6px; }
    .skel-line-sm { height: 9px; border-radius: 4px; }
    .skel-subnet-row .skel-info { flex: 1; display: flex; flex-direction: column; gap: 4px; }
    .skel-subnet-row .skel-price { width: 60px; text-align: right; display: flex; flex-direction: column; gap: 4px; align-items: flex-end; }

    /* ── Error State ──────────────────────────────────── */
    .error-state {
      text-align: center; padding: var(--space-5);
      color: var(--muted); font-size: var(--text-base);
    }
    .error-state-icon { font-size: 32px; margin-bottom: var(--space-2); }
    .error-state-text { margin-bottom: var(--space-3); line-height: 1.5; }
    .error-state-retry {
      display: inline-flex; align-items: center; gap: 6px;
      background: var(--cyan-dim); border: 1px solid rgba(46,211,224,.25);
      border-radius: 8px; padding: var(--space-2) var(--space-4);
      color: var(--cyan); font-size: var(--text-sm); font-weight: 700;
      cursor: pointer; font-family: inherit;
      transition: background var(--transition-fast);
    }
    .error-state-retry:hover { background: var(--cyan-glow); }

    /* ── Animated Counter ─────────────────────────────── */
    .counter-animate {
      transition: color var(--transition-fast);
    }

    /* ── Bottom Nav Enhancement ────────────────────────── */
    .bottom-nav .nav-tab {
      transition: color var(--transition-fast), transform var(--transition-fast);
    }
    .bottom-nav .nav-tab:active { transform: scale(.9); }

    /* ── CSS Containment on Tab Views ─────────────────── */
    .sh-section,
    #mainApp,
    .ai-chat-view {
      contain: layout style;
    }

    /* ── Improved Progress Bar ─────────────────────────── */
    .app-progress-fill {
      transition: width var(--transition-slow) cubic-bezier(.4, 0, .2, 1) !important;
    }

    /* ── Modal utility classes ─────────────────────────── */
    .modal-header-row {
      display: flex; justify-content: space-between;
      align-items: center; margin-bottom: var(--space-3);
    }
    .modal-title { font-size: 15px; font-weight: 700; }
    .modal-field-group { margin-bottom: var(--space-3); }
    .modal-field-label {
      font-size: var(--text-sm); color: var(--muted); margin-bottom: var(--space-1);
    }
    .modal-select {
      width: 100%; background: var(--card);
      border: 1px solid var(--border-medium); 
      padding: var(--space-2); color: var(--text); font-size: var(--text-base);
    }
    .modal-duration-row { display: flex; gap: 6px; }

    /* ── RTL Support for new components ────────────────── */
    html[dir="rtl"] .hero-header { flex-direction: row-reverse; }
    html[dir="rtl"] .hero-badges { flex-direction: row-reverse; }
    html[dir="rtl"] .sparkline-wrap { margin-left: 0; margin-right: auto; }
    html[dir="rtl"] .portfolio-updated-row { flex-direction: row-reverse; }
    html[dir="rtl"] .battle-card { flex-direction: row-reverse; }
    html[dir="rtl"] .toolbar-row { flex-direction: row-reverse; }

    /* ── Mobile UX: Touch-Targets (hover:none + pointer:coarse) ─────────── */
    @media (hover: none) and (pointer: coarse) {
      .sstar { padding: 10px; font-size: 16px; min-width: 40px; min-height: 40px; }
      .sort-btn { padding: 10px 14px; font-size: 12px; min-height: 40px; }
      .pg-btn { padding: 10px 18px; min-height: 40px; }
      .sort-more-btn { padding: 10px 14px; font-size: 12px; min-height: 40px; }
      .beginner-toggle { padding: 10px 14px; font-size: 12px; min-height: 40px; }
      .sn-chart-close { width: 40px; height: 40px; }
      .alert-item .alert-remove { padding: 10px 12px; min-width: 40px; min-height: 40px; }
      .prm-close-btn { padding: 10px 12px; min-width: 40px; min-height: 40px; }
      .section-collapse-arrow { padding: 10px; min-width: 40px; min-height: 40px; }
      .bottom-nav .nav-tab { padding: 10px 8px; font-size: 11px; min-height: 48px; }
      /* Extra bottom padding so content isn't hidden behind the taller nav bar */
      #mainApp { padding-bottom: 84px; }
      /* iOS: prevent auto-zoom on focus by keeping inputs at 16px */
      .stake-hotkey-input, .stake-val-select, .sn-search-input { font-size: 16px; }
    }

    /* ── Mobile UX: Stake/Unstake Sheet auf sehr schmalen Viewports ─────── */
    @media (max-width: 360px) {
      .stake-sheet { padding: 20px 16px calc(28px + env(safe-area-inset-bottom, 12px)); }
      .stake-fee-row { flex-wrap: wrap; gap: 4px; }
    }

    /* ══════════════════════════════════════════════════════════════════════
       Polish layer: typography utilities, empty states, shimmer pills,
       micro-interactions, theme toggle UI, modal safe-area normalization.
       Added by claude/enhance-mini-app-features-pZo2V.
       ══════════════════════════════════════════════════════════════════════ */

    /* Typography utilities — author-friendly classes mapped to existing tokens */
    .t-2xs { font-size: var(--text-2xs); line-height: var(--leading-snug); }
    .t-xs  { font-size: var(--text-xs);  line-height: var(--leading-snug); }
    .t-sm  { font-size: var(--text-sm);  line-height: var(--leading-normal); }
    .t-base{ font-size: var(--text-base);line-height: var(--leading-normal); }
    .t-md  { font-size: var(--text-md);  line-height: var(--leading-normal); }
    .t-lg  { font-size: var(--text-lg);  line-height: var(--leading-snug); }
    .t-xl  { font-size: var(--text-xl);  line-height: var(--leading-snug); }
    .t-2xl { font-size: var(--text-2xl); line-height: var(--leading-tight); letter-spacing: var(--tracking-tight); }
    .t-3xl { font-size: var(--text-3xl); line-height: var(--leading-tight); letter-spacing: var(--tracking-tight); }
    .t-muted { color: var(--muted); }
    .t-uppercase { text-transform: uppercase; letter-spacing: var(--tracking-wide); }
    .t-num   { font-variant-numeric: tabular-nums; font-feature-settings: "tnum"; }

    /* Default body type token (was inherited from browser default) */

    /* Skeleton shimmer pill — drop-in replacement for "⏳ Loading…" text.
       Usage:  <span class="skel-pill" style="width:80px"></span>
               <div class="skel-pill skel-pill-block"></div>          */
    .skel-pill {
      display: inline-block;
      min-width: 48px;
      height: .9em;
      vertical-align: middle;
      border-radius: 6px;
      background: linear-gradient(90deg,
        var(--surface-subtle) 0%,
        var(--surface-medium) 50%,
        var(--surface-subtle) 100%);
      background-size: 200% 100%;
      animation: skeleton-shimmer 1.4s linear infinite;
      color: transparent;
    }
    .skel-pill-block { display: block; width: 100%; height: 14px; margin: 6px 0; }
    .skel-stack { display: flex; flex-direction: column; gap: 8px; padding: 14px 0; }
    .skel-stack .skel-pill-block:nth-child(1) { width: 70%; }
    .skel-stack .skel-pill-block:nth-child(2) { width: 90%; }
    .skel-stack .skel-pill-block:nth-child(3) { width: 55%; }
    /* Inline shimmer over text content (keeps layout, hides text) */
    .text-shimmer {
      background: linear-gradient(90deg,
        var(--surface-subtle), var(--surface-medium), var(--surface-subtle));
      background-size: 200% 100%;
      animation: skeleton-shimmer 1.4s linear infinite;
      color: transparent !important;
      border-radius: 6px;
    }

    /* Empty state — illustration + headline + body + CTA */
    .empty-state {
      display: flex; flex-direction: column; align-items: center;
      text-align: center; padding: 28px 18px;
      color: var(--muted);
    }
    .empty-state-art {
      width: 72px; height: 72px;
      display: inline-flex; align-items: center; justify-content: center;
      border-radius: 50%;
      background: radial-gradient(circle at 35% 35%,
        rgba(46,211,224,.18), rgba(143,157,255,.12) 60%, transparent 75%);
      box-shadow: inset 0 0 0 1px var(--border-medium),
                  0 0 24px calc(var(--glow-strength, 1) * .5) var(--cyan-glow);
      font-size: 32px;
      margin-bottom: 14px;
      color: var(--cyan);
    }
    .empty-state-art svg { width: 38px; height: 38px; }
    .empty-state-title {
      font-size: var(--text-md); font-weight: 700;
      color: var(--text); margin-bottom: 4px;
      letter-spacing: var(--tracking-tight);
    }
    .empty-state-body {
      font-size: var(--text-sm); color: var(--muted);
      max-width: 280px; line-height: var(--leading-normal);
      margin-bottom: 14px;
    }
    .empty-state-cta {
      display: inline-flex; align-items: center; gap: 6px;
      background: var(--cyan-dim);
      border: 1px solid rgba(46,211,224,.3);
      color: var(--cyan); font-weight: 700;
      font-size: var(--text-sm);
      padding: 9px 16px; border-radius: 999px;
      cursor: pointer; font-family: inherit;
      transition: transform var(--transition-fast),
                  background var(--transition-fast),
                  box-shadow var(--transition-fast);
    }
    .empty-state-cta:hover {
      background: var(--cyan-glow);
      box-shadow: 0 0 0 3px var(--cyan-dim);
    }
    .empty-state-cta:active { transform: scale(.96); }

    /* Heat-empty upgrade — reuse the polished empty-state when possible */
    .heat-empty.is-rich {
      grid-column: 1 / -1; padding: 24px 12px;
    }

    /* Micro-interactions — spring easing on small interactive elements */
    .nav-tab, .heat-seg button, .fc, .sort-btn, .gf-pill, .disc-filter,
    .cg-chip, .lang-btn, .ai-chat-suggest-btn {
      transition:
        background var(--transition-fast) var(--ease-out),
        color var(--transition-fast) var(--ease-out),
        border-color var(--transition-fast) var(--ease-out),
        transform 220ms var(--ease-spring),
        box-shadow var(--transition-fast) var(--ease-out);
    }
    .nav-tab:active, .lang-btn:active, .ai-chat-suggest-btn:active,
    .fc:active, .sort-btn:active, .gf-pill:active, .cg-chip:active {
      transform: scale(.94);
    }
    /* Sustained hover background on common CTA buttons (not visible on
       coarse pointer, where :active handles feedback). */
    @media (hover: hover) and (pointer: fine) {
      .lang-btn:hover, .ai-chat-suggest-btn:hover,
      .heat-seg button:hover, .cg-chip:hover {
        background: var(--surface-medium);
      }
    }
    /* Tab-switch slide animation — applied via JS by adding `tab-enter` class */
    .tab-enter {
      animation: tab-slide-in 320ms var(--ease-out) both;
    }
    @keyframes tab-slide-in {
      0%   { opacity: 0; transform: translateY(8px); }
      100% { opacity: 1; transform: translateY(0); }
    }
    html[data-motion="reduced"] .tab-enter { animation: none !important; }
    @media (prefers-reduced-motion: reduce) {
      .tab-enter { animation: none !important; }
    }

    /* Safe-area normalization — every modal sheet that pins to bottom or fills
       the viewport gets the inset baked into its padding. The rules below
       extend existing components (rather than overwriting their full style)
       so we only touch the spacing properties. */
    .sec-sheet,
    .term-modal-sheet,
    .gloss-sheet,
    .contact-modal-sheet {
      padding-bottom: max(28px, env(safe-area-inset-bottom, 16px));
    }
    .snd-sheet {
      padding-bottom: max(28px, env(safe-area-inset-bottom, 16px));
    }
    .sn-chart-modal {
      padding-bottom: max(20px, env(safe-area-inset-bottom, 12px));
    }
    .lang-overlay {
      padding-top: max(40px, env(safe-area-inset-top, 24px));
      padding-bottom: max(20px, env(safe-area-inset-bottom, 16px));
    }
    .ai-chat-view {
      padding-top: env(safe-area-inset-top, 0px);
    }
    .ai-chat-input-area {
      padding-bottom: max(8px, env(safe-area-inset-bottom, 0px));
    }
    .wc-pair-modal, .wc-sign-modal {
      margin-bottom: env(safe-area-inset-bottom, 0px);
    }

    /* Theme toggle — segmented control inside language overlay */
    .theme-toggle {
      display: inline-flex; gap: 2px;
      background: var(--surface-subtle);
      border: 1px solid var(--border-medium);
      border-radius: 999px;
      padding: 3px;
      margin: 16px auto 8px;
    }
    .theme-toggle button {
      font: 700 var(--text-sm)/1 inherit; letter-spacing: .2px;
      padding: 8px 14px; border: none; cursor: pointer;
      color: var(--muted); background: transparent;
      border-radius: 999px; font-family: inherit;
      display: inline-flex; align-items: center; gap: 5px;
      transition: color var(--transition-fast),
                  background var(--transition-fast),
                  transform 220ms var(--ease-spring);
    }
    .theme-toggle button:active { transform: scale(.94); }
    .theme-toggle button[aria-pressed="true"] {
      background: var(--cyan-dim);
      color: var(--cyan);
      box-shadow: inset 0 0 0 1px rgba(46,211,224,.25);
    }
    .theme-toggle-label {
      display: block;
      text-align: center;
      font-size: var(--text-xs);
      color: var(--muted);
      letter-spacing: var(--tracking-wide);
      text-transform: uppercase;
      font-weight: 700;
      margin-top: 18px;
    }

    /* Floating theme FAB — always-visible top-right cycler.
       Tap cycles Auto → Dark → Light → Auto. Hidden behind the language
       overlay (which has its own segmented toggle) by z-index ordering. */
    .theme-fab {
      position: fixed;
      top: max(10px, calc(env(safe-area-inset-top, 0px) + 8px));
      right: max(12px, env(safe-area-inset-right, 0px));
      z-index: 980;
      cursor: pointer;
      font-family: inherit;
      display: inline-flex; align-items: center; justify-content: center;
      -webkit-tap-highlight-color: transparent;
      transition: transform 220ms var(--ease-spring),
                  background var(--transition-fast),
                  border-color var(--transition-fast),
                  box-shadow var(--transition-fast);
    }
    .theme-fab:hover {
      border-color: rgba(46,211,224,.35);
      box-shadow: var(--shadow-lg), 0 0 18px var(--cyan-glow), inset 0 1px 0 var(--glass-highlight);
    }
    .theme-fab:active { transform: scale(.9); }
    @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
      .theme-fab { background: var(--card-elevated); }
    }
    .theme-fab-icon {
      display: inline-flex; align-items: center; justify-content: center;
      transition: transform .45s var(--ease-spring);
      line-height: 1;
    }
    .theme-fab.is-changing .theme-fab-icon {
      transform: rotate(360deg) scale(1.18);
    }

    /* Mode hint that fades in below the FAB right after a tap */
    .theme-fab-toast {
      position: fixed;
      top: max(56px, calc(env(safe-area-inset-top, 0px) + 54px));
      right: max(12px, env(safe-area-inset-right, 0px));
      z-index: 980;
      background: var(--glass-bg-strong);
      border: 1px solid var(--glass-border);
      backdrop-filter: var(--glass-blur-sm);
      -webkit-backdrop-filter: var(--glass-blur-sm);
      padding: 6px 12px;
      border-radius: 999px;
      font-size: var(--text-xs);
      font-weight: 700;
      color: var(--text);
      letter-spacing: var(--tracking-wide);
      text-transform: uppercase;
      box-shadow: var(--shadow-md);
      opacity: 0;
      pointer-events: none;
      transform: translateY(-6px) scale(.92);
      transition: opacity .22s var(--ease-out),
                  transform .35s var(--ease-spring);
      white-space: nowrap;
    }
    .theme-fab-toast.is-visible {
      opacity: 1;
      transform: translateY(0) scale(1);
    }

    /* Reduced motion: kill the rotation flourish */
    html[data-motion="reduced"] .theme-fab.is-changing .theme-fab-icon {
      transform: none !important;
    }
    @media (prefers-reduced-motion: reduce) {
      .theme-fab.is-changing .theme-fab-icon { transform: none !important; }
      .theme-fab-toast { transition: opacity .15s linear !important; }
    }

    /* ── NameTensor name badges (address → registered name) ── */
    .nt-badge {
      display: inline-block;
      max-width: 130px;
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: nowrap;
      vertical-align: bottom;
      margin-right: 5px;
      padding: 1px 6px;
      border-radius: 8px;
      font-size: var(--text-2xs);
      font-weight: 700;
      line-height: 1.4;
    }
    .nt-name { color: var(--cyan); }

    /* ── Send-TAO entry button + recipient hint ── */
    .pov-actions { margin-top: 12px; }
    .pov-send-btn {
      width: 100%;
      padding: 11px;
      cursor: pointer;
    }
    .pov-send-btn:active { opacity: .85; }
    /* Subtle "claim your .tao" prompt for wallets with no domain. */
    .pov-claim-tao {
      margin-top: 8px;
      text-align: center;
      font-size: 11px;
      color: var(--muted);
    }
    .pov-claim-link {
      color: var(--cyan);
      font-weight: 600;
      text-decoration: none;
      margin-left: 4px;
    }
    /* Top .tao Wallets identity leaderboard */
    .ntlb-sub { font-size: 11px; color: var(--muted); margin-bottom: 10px; }
    .ntlb-name { flex: 1 1 auto; min-width: 0; font-weight: 700; color: var(--cyan); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .ntlb-locked { font-size: 12px; font-weight: 700; color: var(--text); white-space: nowrap; }
    .ntlb-ext { color: var(--muted); text-decoration: none; margin-left: 6px; }
    .send-recipient-hint {
      margin-top: 6px;
      font-size: 11px;
      line-height: 1.4;
      word-break: break-all;
      color: var(--muted);
    }

    /* ── Strategy menu (futuristic, iOS-safe: NO backdrop-filter) ── */
    .strat-list { display:flex; flex-direction:column; gap:11px; }
    .strat-card { position:relative; overflow:hidden; border-radius:16px; padding:13px 15px 12px 17px;
      background:linear-gradient(135deg, var(--accent-soft, rgba(46,211,224,.12)), rgba(255,255,255,.02) 55%), rgba(255,255,255,.04);
      border:1px solid rgba(255,255,255,.09);
      box-shadow:inset 0 1px 0 rgba(255,255,255,.05), 0 6px 18px rgba(0,0,0,.28); }
    .strat-card::before { content:''; position:absolute; left:0; top:0; bottom:0; width:3px;
      background:var(--accent, var(--cyan)); box-shadow:0 0 14px 1px var(--accent-glow, rgba(46,211,224,.5)); }
    .strat-top { display:flex; justify-content:space-between; align-items:flex-start; gap:8px; }
    .strat-name { display:flex; align-items:center; gap:7px; font-weight:800; font-size:13.5px; letter-spacing:.2px; }
    .strat-emoji { font-size:17px; text-shadow:0 0 8px var(--accent-glow, rgba(46,211,224,.5)); }
    .strat-rank { font-size:var(--text-2xs); font-weight:900; padding:2px 6px; border-radius:999px;
      background:rgba(255,255,255,.07); color:var(--accent, var(--cyan)); border:1px solid var(--accent-glow, rgba(46,211,224,.5)); }
    .strat-navwrap { text-align:right; white-space:nowrap; }
    .strat-nav { font-weight:900; font-size:17px; line-height:1; font-variant-numeric:tabular-nums;
      text-shadow:0 0 16px var(--nav-glow, rgba(47,212,138,.45)); }
    .strat-pill { display:inline-block; margin-top:4px; font-size:var(--text-2xs); font-weight:800; padding:2px 7px;
      border-radius:999px; font-variant-numeric:tabular-nums; }
    .strat-pill.up { background:rgba(47,212,138,.14); color:var(--green); }
    .strat-pill.down { background:rgba(242,88,94,.14); color:var(--red); }
    .strat-desc { margin:6px 0 0; font-size:var(--text-2xs); line-height:1.45; color:rgba(255,255,255,.5); }
    .strat-proj { margin:7px 0 1px; font-size:11.5px; font-weight:700; font-variant-numeric:tabular-nums; }
    .strat-foot { display:flex; justify-content:space-between; align-items:center; gap:10px; margin-top:5px; }
    .strat-spark { flex:1; height:38px; }
    .strat-meta { font-size:var(--text-2xs); white-space:nowrap; color:rgba(255,255,255,.5); font-variant-numeric:tabular-nums;
      display:flex; align-items:center; gap:5px; }
    .strat-live { width:6px; height:6px; border-radius:50%; background:var(--green);
      box-shadow:0 0 7px var(--green); animation:stratPulse 1.8s infinite; }
    @keyframes stratPulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:.3;transform:scale(.65)} }
    @media (prefers-reduced-motion: reduce) { .strat-live { animation:none; } }
    .strat-card.chosen { border-color:var(--accent); box-shadow:0 0 0 1px var(--accent), 0 8px 22px rgba(0,0,0,.3); }
    .strat-pick { width:100%; padding:8px; border-radius:10px; border:1px solid var(--accent-glow);
      background:var(--accent-soft); color:var(--accent); font-weight:800; font-size:11.5px; cursor:pointer; }
    .strat-pick.chosen { background:var(--accent); color:#0b0e14; border-color:var(--accent); }

  