    /* ============================ ADMIN LIGHT THEME ============================
       Slate-blue tinted light so the admin app feels distinct from the public site
       without losing its coral/gold accents. */
    :root[data-theme="light"]{
      --adm-bg:        #f1f4fb;
      --adm-bg-glow:   radial-gradient(ellipse 60% 50% at 100% 0%, rgba(255,120,73,.12), transparent 60%),
                       radial-gradient(ellipse 50% 40% at 0% 100%, rgba(251,191,36,.10), transparent 60%),
                       radial-gradient(ellipse 70% 60% at 50% 100%, rgba(124,92,255,.06), transparent 60%);
      --adm-panel:     rgba(255,255,255,0.78);
      --adm-card:      rgba(255,255,255,0.85);
      --adm-card-hi:   #ffffff;
      --adm-border:    rgba(30,40,80,.10);
      --adm-border-hi: rgba(30,40,80,.20);
      --adm-text:      #0f172a;
      --adm-muted:     #64748b;
    }
    :root[data-theme="light"] body.admin-mode{
      background:var(--adm-bg-glow), var(--adm-bg);
      background-attachment:fixed;
    }
    :root[data-theme="light"] body.admin-mode .adm-top{
      background:rgba(255,255,255,.78);
      backdrop-filter:blur(14px);
    }
    :root[data-theme="light"] body.admin-mode .adm-side{
      background:rgba(255,255,255,.55);
      backdrop-filter:blur(10px);
    }
    /* admin form inputs in light mode — clean white with slate border */
    :root[data-theme="light"] .admin select,
    :root[data-theme="light"] .admin input,
    :root[data-theme="light"] .admin textarea{
      background:#ffffff;
      border-color:rgba(30,40,80,.14);
      color:var(--adm-text);
    }
    :root[data-theme="light"] .admin select:focus,
    :root[data-theme="light"] .admin input:focus,
    :root[data-theme="light"] .admin textarea:focus{
      border-color:var(--adm-accent);
    }

    /* ---- Accent-coloured TEXT needs a darker hue on a light surface ----
       The two brand accents are tuned for the dark admin panel:
         --adm-accent   #ff8a5b (coral)
         --adm-accent-2 #fbbf24 (amber)
       Used as a FOREGROUND on the light theme's near-white cards they measure
       2.29:1 (the "Online now" activity line) and 1.53:1 (the "∞ Lifetime"
       premium chip) — the amber one is effectively unreadable. Darken only
       where the accent is the text colour; accent BACKGROUNDS, borders and
       gradients are deliberately left untouched, and dark theme is unaffected.
       These beat the base rules in 29-admin-analytics.css on specificity, so
       load order (which puts 29 after this file) does not matter. */
    :root[data-theme="light"] .adm-live-act{ color:#c2410c; }
    :root[data-theme="light"] .adm-u-chip.prem{
      color:#92400e;
      background:rgba(251,191,36,.20);
      border-color:rgba(161,98,7,.42);
    }

    /* The "∞ Lifetime" grant preset uses pale amber that only reads on a dark
       panel — 1.66:1 on a light card. */
    :root[data-theme="light"] .adm-preset--life{ color:#a16207; }

    /* Premium user cards derive EVERYTHING (avatar disc, state pill, borders)
       from the single `--pu` accent set on [data-state] in 11-admin-reading.css.
       Its dark-theme inks (#34d399 / #60a5fa / #fbbf24 / #f87171) sit at
       1.2–2.2:1 on a near-white card, so re-point the variable per state rather
       than overriding each consumer — one value keeps disc, pill and text in
       step and can't drift apart later. */
    :root[data-theme="light"] .adm-pu[data-state="life"]   { --pu:#047857; }
    :root[data-theme="light"] .adm-pu[data-state="active"] { --pu:#1d4ed8; }
    :root[data-theme="light"] .adm-pu[data-state="soon"]   { --pu:#a16207; }
    :root[data-theme="light"] .adm-pu[data-state="expired"]{ --pu:#b91c1c; }
    :root[data-theme="light"] .adm-pu-btn.is-danger{ color:#dc2626; border-color:rgba(220,38,38,.35); }

