/* cqmdesk.smilestory.ai — site theme overlay (2026-10-28, family56 bundle B).
   ORIGINAL look = DARK (#0a0a1a page, cyan #00ccff / blue #0099ff / purple #8b5cf6 accents). Nothing below touches the
   dark look: every rule is scoped to html[data-theme="light"] (set by wia-site-theme.js before first paint). The engine also
   toggles body.light-mode, so the kit's own `body.light-mode .cqm-header/.cqm-footer…` block (cqm-site-kit.js 911–973,
   !important) fires at the same time — the header/footer values below are the SAME values, so the two never fight.
   Load position: <link rel="stylesheet" href="/components/site-theme.css"> as the LAST stylesheet before </head>, i.e. after
   index.php's inline <style> (lines 32–1697) and the mobile-modal <style> (1702–1731). The kit's STYLES are injected into
   <head> later (init() → line 1236) and win only where they say !important.

   Light palette (dark original → light overlay)
   ┌────────────────────┬──────────────────────┬──────────────────────────────────────────────┐
   │ token / role       │ dark (original)      │ light                                        │
   ├────────────────────┼──────────────────────┼──────────────────────────────────────────────┤
   │ --bg-dark (page)   │ #0a0a1a              │ #f7f8fb                                      │
   │ --bg-darker        │ #050510              │ #eef2f7 (section bands)                      │
   │ --bg-card          │ rgba(0,20,40,.6)     │ #ffffff                                      │
   │ --text-primary     │ rgba(255,255,255,.95)│ #0f172a (17.9:1)                             │
   │ --text-secondary   │ rgba(255,255,255,.7) │ #475569 (7.1:1)                              │
   │ --text-muted       │ rgba(255,255,255,.5) │ #5b6778 (5.4:1 on #f7f8fb)                   │
   │ --border-subtle    │ rgba(255,255,255,.1) │ #e2e8f0                                      │
   │ --primary-cyan     │ #00ccff (1.9:1 on #fff)│ #0e7490 (5.4:1) — text, borders, accents   │
   │ --primary-blue     │ #0099ff              │ #1d4ed8 (gradient fills under white text)    │
   │ --accent-purple    │ #8b5cf6              │ #6d28d9 (7.1:1)                              │
   │ --success-green    │ #10b981              │ #15803d (5.0:1)                              │
   │ --warning-red      │ #ef4444              │ #b91c1c (6.5:1)                              │
   │ gold #FFD700       │ (cert titles)        │ #854d0e (6.9:1)                              │
   │ magenta #ff00ff    │ (footer "Follow Us") │ #a21caf (6.0:1)                              │
   │ amber #fbbf24      │ (footer RISE link)   │ #b45309 (5.0:1)                              │
   │ kit header/footer  │ #0a0a0f / #0f0f18    │ kit's own: #f8fafc→#e2e8f0, #1e3a5f, #2563eb │
   └────────────────────┴──────────────────────┴──────────────────────────────────────────────┘
   The three hero/demo "screens" (3D iframe, circuit mockup, code mockup) stay dark on purpose: the iframe content is the
   simulator's own dark UI and cannot be themed from here, so the two CSS mockups keep the same dark screen look for
   consistency. Text over those screens is re-pinned to light-on-dark colours below.
   !important is used only where the kit hard-codes a colour with !important or in an inline style= attribute. */

/* ===== 1. tokens (index.php :root, lines 33–46; also institutions/ which shares the names) ===== */
html[data-theme="light"] {
    --primary-cyan: #0e7490;
    --primary-blue: #1d4ed8;
    --accent-purple: #6d28d9;
    --accent-green: #15803d;        /* used by .highlight-desc but never defined in the original → was inheriting */
    --bg-dark: #f7f8fb;
    --bg-darker: #eef2f7;
    --bg-card: #ffffff;
    --text-primary: #0f172a;
    --text-secondary: #475569;
    --text-muted: #5b6778;
    --border-subtle: #e2e8f0;
    --success-green: #15803d;
    --warning-red: #b91c1c;
}
/* body: index.php uses the tokens, but docs/ mypage/ marketplace/ training/ exam/ simulator/ hard-code a dark gradient + white */
html[data-theme="light"] body { background: #f7f8fb; color: #0f172a; }
html[data-theme="light"] ::selection { background: rgba(14,116,144,0.20); }

/* ===== 2. site kit shell — header (cqm-site-kit.js STYLES 138–548; HTML generateHeader() 978–1070) =====
   Values for .cqm-header / .cqm-logo-text / .cqm-nav-link are copied from the kit's body.light-mode block (912–931) so
   both selectors agree; the rest of the header has no light rule in the kit at all. */
html[data-theme="light"] .cqm-header {
    background: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);
    border-bottom: 1px solid #cbd5e1;
}
html[data-theme="light"] .cqm-logo-text { color: #1e3a5f; }
html[data-theme="light"] .cqm-logo-text span { color: #2563eb; }
/* atom logo: neon glow → solid teal (orbit 40% cyan on white was ~1.5:1) */
html[data-theme="light"] .cqm-atom-nucleus { background: linear-gradient(135deg, #0e7490, #1d4ed8); box-shadow: 0 0 6px rgba(14,116,144,0.35); }
html[data-theme="light"] .cqm-atom-orbit { border-color: rgba(14,116,144,0.55); }
html[data-theme="light"] .cqm-atom-electron { background: #0e7490; box-shadow: 0 0 4px rgba(14,116,144,0.5); }
html[data-theme="light"] .cqm-nav-link { color: #475569; }
html[data-theme="light"] .cqm-nav-link:hover { color: #1e3a5f; background: rgba(15,23,42,0.06); }
/* the 1px separator <div style="background:rgba(255,255,255,0.1)"> inside nav.cqm-desktop-nav (kit line 1031) */
html[data-theme="light"] .cqm-desktop-nav > div[style*="rgba(255,255,255,0.1)"] { background: #cbd5e1 !important; }
/* CTA pills: the kit sets these with !important (325–344) → !important needed here too */
html[data-theme="light"] .cqm-nav-simulator { background: linear-gradient(135deg, #0e7490, #1d4ed8) !important; color: #fff !important; }
html[data-theme="light"] .cqm-nav-simulator:hover { box-shadow: 0 4px 14px rgba(14,116,144,0.30); }
html[data-theme="light"] .cqm-nav-login { background: #f5f3ff !important; border: 1px solid rgba(109,40,217,0.35) !important; color: #6d28d9 !important; }
html[data-theme="light"] .cqm-nav-login:hover { background: #ede9fe !important; }
/* language button: same purple family, one step darker so white text passes (4.2→5.7:1) */
html[data-theme="light"] .cqm-nav-lang,
html[data-theme="light"] .cqm-mobile-nav-lang { background: linear-gradient(135deg, #7c3aed, #4f46e5); color: #fff; }
html[data-theme="light"] .cqm-nav-lang:hover { box-shadow: 0 0 12px rgba(109,40,217,0.35); }
/* desktop dropdown + signed-in profile menu */
html[data-theme="light"] .cqm-dropdown-menu { background: #fff; border-color: #e2e8f0; box-shadow: 0 12px 32px rgba(15,23,42,0.14); }
html[data-theme="light"] .cqm-dropdown-menu a { color: #334155; }
html[data-theme="light"] .cqm-dropdown-menu a:hover { color: #0f172a; background: #e0f2fe; }
html[data-theme="light"] .cqm-user-profile-btn { background: #f5f3ff; border-color: rgba(109,40,217,0.35); color: #0f172a; }
html[data-theme="light"] .cqm-user-profile-btn:hover { background: #ede9fe; }
html[data-theme="light"] .cqm-dropdown-arrow { color: #6d28d9; }
html[data-theme="light"] .cqm-user-dropdown-menu { background: #fff; border-color: #e2e8f0; box-shadow: 0 12px 32px rgba(15,23,42,0.14); }
html[data-theme="light"] .cqm-user-dropdown-menu a { color: #0f172a; border-bottom-color: #eef2f7; }
html[data-theme="light"] .cqm-user-dropdown-menu a:hover { background: #f5f3ff; color: #6d28d9; }
html[data-theme="light"] .cqm-user-dropdown-menu a i { color: #5b6778; }
html[data-theme="light"] .cqm-user-dropdown-menu a:hover i { color: #6d28d9; }
/* mobile header: hamburger lines are #fff (invisible on light), login outline is white */
html[data-theme="light"] .cqm-hamburger-line { background: #0f172a; }
html[data-theme="light"] .cqm-mobile-header-login { color: #0f172a; border-color: #cbd5e1; }
/* mobile menu (init() moves #cqm-mobile-nav out of <header> to right after #cqm-header, line 1263 — selector is standalone) */
html[data-theme="light"] .cqm-mobile-nav { background: rgba(255,255,255,0.98); border-top: 1px solid #e2e8f0; }
html[data-theme="light"] .cqm-mobile-nav-title { color: #0e7490; }
html[data-theme="light"] .cqm-mobile-nav a { color: #0f172a; border-bottom-color: #e2e8f0; }
/* skip link: #0ea5e9 + white = 2.8:1 */
html[data-theme="light"] .cqm-skip-link { background: #0369a1; color: #fff; }

/* ===== 3. site kit shell — footer (STYLES 551–863; HTML generateFooter() 1073–1143) =====
   Kit light rules (933–973) cover .cqm-footer, .cqm-footer-section h4/a, .cqm-footer-family h4 — same values repeated here.
   The kit's .cqm-footer-logo-text / .cqm-footer-company / .cqm-footer-copyright rules match NOTHING in the generated HTML
   (the real nodes are .cqm-footer-brand h3 / p and .cqm-footer-bottom), so those are themed here. */
html[data-theme="light"] .cqm-footer { background: #f8fafc; border-top: 1px solid #e2e8f0; }
html[data-theme="light"] .cqm-footer-brand h3 { color: #1e3a5f; }
html[data-theme="light"] .cqm-footer-brand h3 span { color: #2563eb; }
html[data-theme="light"] .cqm-footer-brand p { color: #475569; }
html[data-theme="light"] .cqm-footer-atom-nucleus { background: linear-gradient(135deg, #0e7490, #1d4ed8); box-shadow: 0 0 5px rgba(14,116,144,0.35); }
html[data-theme="light"] .cqm-footer-atom-orbit { border-color: rgba(14,116,144,0.55); }
html[data-theme="light"] .cqm-footer-section h4,
html[data-theme="light"] .cqm-footer-family h4 { color: #1e3a5f; }
html[data-theme="light"] .cqm-footer-section a { color: #475569; }
html[data-theme="light"] .cqm-footer-section a:hover { color: #2563eb; }
html[data-theme="light"] .cqm-footer-family-sub { color: #5b6778; }
html[data-theme="light"] .family-site-btn { background: #fff; border-color: rgba(14,116,144,0.40); color: #0e7490; }
html[data-theme="light"] .family-site-btn:hover { background: #ecfeff; border-color: #0e7490; box-shadow: 0 5px 16px rgba(14,116,144,0.18); }
html[data-theme="light"] .cqm-footer-bottom { border-top-color: #e2e8f0; }
html[data-theme="light"] .cqm-footer-bottom p { color: #5b6778; }
/* inline style= colours in the footer string (kit 1131, 1139) — only !important can beat an inline style */
html[data-theme="light"] .cqm-footer [style*="#ff00ff"] { color: #a21caf !important; text-shadow: none !important; }
html[data-theme="light"] .cqm-footer-bottom a[style*="#00d4ff"] { color: #0e7490 !important; }
html[data-theme="light"] .cqm-footer-bottom a[style*="#fbbf24"] { color: #b45309 !important; }
html[data-theme="light"] .cqm-footer-family a[style*="drop-shadow"] { filter: none !important; }  /* neon halo around the social icons */

/* family-sites modal (kit 713–842, generateFamilySiteModal() 1146–1167) */
html[data-theme="light"] .family-site-modal-content { background: #fff; border-color: rgba(14,116,144,0.30); box-shadow: 0 -16px 48px rgba(15,23,42,0.18); }
html[data-theme="light"] .family-site-modal-header { background: rgba(255,255,255,0.98); border-bottom-color: #e2e8f0; color: #0e7490; }
html[data-theme="light"] .family-site-close { color: #475569; }
html[data-theme="light"] .family-site-close:hover { color: #b91c1c; }
html[data-theme="light"] .family-site-item { background: #f8fafc; border-color: #e2e8f0; }
html[data-theme="light"] .family-site-item:hover { border-color: #0e7490; box-shadow: 0 10px 24px rgba(14,116,144,0.14); }
html[data-theme="light"] .family-site-name { color: #0e7490; }
html[data-theme="light"] .family-site-url { color: #5b6778; }

/* ===== 4. index.php — hero (CSS 209–568, HTML 1741–1824) ===== */
html[data-theme="light"] .hero {
    background: radial-gradient(ellipse at top center, rgba(14,116,144,0.10) 0%, transparent 60%),
                linear-gradient(180deg, #eef2f7 0%, #f7f8fb 100%);
}
/* the "+" tile pattern is white at 2% → invisible on light; same tile in ink at 3% */
html[data-theme="light"] .hero::before {
    background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%230f172a' fill-opacity='0.03'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
}
/* gradient-text headings: white→cyan becomes ink→teal (both ends ≥5:1) */
html[data-theme="light"] .hero-content h1,
html[data-theme="light"] .section-title,
html[data-theme="light"] .cta h2 { background: linear-gradient(135deg, #0f172a 0%, #0e7490 100%); -webkit-background-clip: text; background-clip: text; }
html[data-theme="light"] .hero-subtitle { color: #334155; }
html[data-theme="light"] .trust-badges span { color: #475569; }

/* buttons (263–302, 1001–1016): #00ccff→#0099ff under white text is 1.9:1 → teal→blue fill */
html[data-theme="light"] .btn-primary { background: linear-gradient(135deg, #0e7490, #1d4ed8); color: #fff; border-color: rgba(14,116,144,0.35); box-shadow: 0 4px 14px rgba(14,116,144,0.22); }
html[data-theme="light"] .btn-primary:hover { box-shadow: 0 8px 24px rgba(14,116,144,0.32); border-color: #0e7490; }
html[data-theme="light"] .btn-secondary { background: #fff; border-color: #cbd5e1; color: #0f172a; }
html[data-theme="light"] .btn-secondary:hover { background: #ecfeff; border-color: #0e7490; box-shadow: 0 4px 16px rgba(14,116,144,0.18); }
html[data-theme="light"] .btn-outline { border-color: #0e7490; color: #0e7490; }
html[data-theme="light"] .btn-outline:hover { background: #0e7490; color: #fff; }

/* preview window = a window frame around a dark screen */
html[data-theme="light"] .preview-window { background: #fff; border-color: #e2e8f0; box-shadow: 0 20px 50px rgba(15,23,42,0.16); }
html[data-theme="light"] .preview-header { background: #f1f5f9; border-bottom-color: #e2e8f0; }
html[data-theme="light"] .preview-content p { color: #475569; }
/* …but the three slides stay dark (iframe = simulator's own dark UI), so re-pin their text to light-on-dark values
   that the tokens above would otherwise turn teal/ink on a dark screen */
html[data-theme="light"] .slideshow-label { color: #22d3ee; }
html[data-theme="light"] .qubit-label,
html[data-theme="light"] .gate.cnot-control,
html[data-theme="light"] .code-tab.active { color: #22d3ee; }
html[data-theme="light"] .code-tab.active { border-bottom-color: #22d3ee; background: rgba(34,211,238,0.12); }
html[data-theme="light"] .code-tab { color: rgba(255,255,255,0.6); }
html[data-theme="light"] .mockup-label { color: rgba(255,255,255,0.75); }
html[data-theme="light"] .slideshow-indicators .indicator.active { background: #22d3ee; border-color: #22d3ee; box-shadow: 0 0 10px #22d3ee; }

/* ===== 5. index.php — why CQM / stats (589–699, HTML 1827–1877) ===== */
html[data-theme="light"] .why-cqm { background: linear-gradient(180deg, #f7f8fb 0%, #eef2f7 50%, #f7f8fb 100%); }
html[data-theme="light"] .comparison-card { box-shadow: 0 1px 3px rgba(15,23,42,0.06); }
html[data-theme="light"] .comparison-card.highlight { box-shadow: 0 0 0 1px rgba(14,116,144,0.25), 0 14px 34px rgba(14,116,144,0.14); }
html[data-theme="light"] .comparison-list li { border-bottom-color: #eef2f7; }
html[data-theme="light"] .comparison-list.negative li { color: #5b6778; }   /* #888 on white is 3.5:1 */
html[data-theme="light"] .comparison-list.positive li { color: #0f172a; }

/* ===== 6. index.php — simulator demo (701–812, HTML 1880–1906) ===== */
html[data-theme="light"] .demo-wrapper { background: #fff; border-color: #e2e8f0; box-shadow: 0 1px 3px rgba(15,23,42,0.06); }
html[data-theme="light"] .demo-header { background: #f1f5f9; border-bottom-color: #e2e8f0; }
html[data-theme="light"] .demo-tab { color: #475569; }
html[data-theme="light"] .demo-tab.active { color: #0e7490; background: #e0f2fe; border-color: rgba(14,116,144,0.35); }
/* overlay sits on the dark simulator iframe: its h3 inherits body colour (would be ink on black) */
html[data-theme="light"] .demo-overlay-text h3 { color: #fff; }
html[data-theme="light"] .demo-overlay-text p { color: rgba(255,255,255,0.78); }

/* ===== 7. index.php — core features / pricing (814–979, HTML 1909–1996) ===== */
html[data-theme="light"] .core-features { background: linear-gradient(180deg, #f7f8fb 0%, #eef2f7 100%); }
html[data-theme="light"] .feature-card-large { box-shadow: 0 1px 3px rgba(15,23,42,0.06); }
html[data-theme="light"] .feature-card-large:hover { box-shadow: 0 16px 40px rgba(14,116,144,0.14); }
html[data-theme="light"] .feature-bullets li { border-bottom-color: #eef2f7; }
html[data-theme="light"] .pricing-card { box-shadow: 0 1px 3px rgba(15,23,42,0.06); }
html[data-theme="light"] .pricing-card.featured { box-shadow: 0 16px 40px rgba(14,116,144,0.16); }

/* ===== 8. index.php — certificates (1022–1098, HTML 1999–2015) ===== */
html[data-theme="light"] .cert-showcase { background: linear-gradient(135deg, rgba(14,116,144,0.05), rgba(109,40,217,0.05)); }
html[data-theme="light"] .cert-section-title { color: #0e7490; }         /* #00d4ff */
html[data-theme="light"] .cert-card { background: #fff; border-color: rgba(29,78,216,0.22); box-shadow: 0 1px 3px rgba(15,23,42,0.06); }
html[data-theme="light"] .cert-card:hover { border-color: rgba(14,116,144,0.5); box-shadow: 0 10px 30px rgba(14,116,144,0.16); }
html[data-theme="light"] .cert-card-title { color: #854d0e; }           /* #FFD700 gold → dark gold 6.9:1 */
html[data-theme="light"] .cert-card img { box-shadow: 0 2px 8px rgba(15,23,42,0.12); }   /* the PNGs are light paper — give them an edge */
/* .cert-badge keeps its gold gradient + #000 text (≥10:1) */

/* ===== 9. index.php — early adopter (1100–1221, HTML 2018–2076) ===== */
html[data-theme="light"] .early-adopter { background: linear-gradient(180deg, #f7f8fb 0%, #eef2f7 50%, #f7f8fb 100%); }
html[data-theme="light"] .adopter-card { box-shadow: 0 1px 3px rgba(15,23,42,0.06); }
html[data-theme="light"] .adopter-card:hover { box-shadow: 0 16px 36px rgba(14,116,144,0.14); }
html[data-theme="light"] .adopter-badge { background: #e0f2fe; color: #0e7490; }
html[data-theme="light"] .adopter-highlight { background: #ecfeff; border-color: rgba(14,116,144,0.35); }
html[data-theme="light"] .highlight-value { color: #0f172a; }            /* was literal white */
html[data-theme="light"] .highlight-desc { color: #15803d; }

/* ===== 10. index.php — contact form (1450–1570, HTML 2079–2165) ===== */
html[data-theme="light"] .contact-section { background: linear-gradient(180deg, #f7f8fb 0%, #eef2f7 100%); }
html[data-theme="light"] .contact-form { box-shadow: 0 1px 3px rgba(15,23,42,0.06); }
html[data-theme="light"] .form-group label { color: #334155; }
html[data-theme="light"] .form-group input,
html[data-theme="light"] .form-group select,
html[data-theme="light"] .form-group textarea { background: #fff; border-color: #7b879c; color: #0f172a; }  /* 2026-10-28 리뷰: 입력창 테두리 3:1(#cbd5e1 1.5:1 → #7b879c 3.6:1) */
html[data-theme="light"] .form-group input:focus,
html[data-theme="light"] .form-group select:focus,
html[data-theme="light"] .form-group textarea:focus { border-color: #0e7490; box-shadow: 0 0 0 3px rgba(14,116,144,0.15); }
html[data-theme="light"] .form-group input::placeholder,
html[data-theme="light"] .form-group textarea::placeholder { color: #64748b; }
html[data-theme="light"] .form-group select option { background: #fff; color: #0f172a; }

/* ===== 11. index.php — sections present in CSS but not in today's HTML (testimonials, partners, CTA, in-page .nav/.footer).
   Cheap one-liners so they are right if the markup comes back. ===== */
html[data-theme="light"] .global-partner { background: linear-gradient(180deg, #eef2f7 0%, #f7f8fb 100%); }
html[data-theme="light"] .cta { background: radial-gradient(ellipse at center, rgba(14,116,144,0.10) 0%, transparent 60%), #f7f8fb; }
html[data-theme="light"] .testimonial-card,
html[data-theme="light"] .partner-card,
html[data-theme="light"] .logo-placeholder,
html[data-theme="light"] .contact-icon { box-shadow: 0 1px 3px rgba(15,23,42,0.06); }
html[data-theme="light"] .nav,
html[data-theme="light"] .footer { background: rgba(255,255,255,0.92); }
html[data-theme="light"] .nav-logo,
html[data-theme="light"] .nav-cta,
html[data-theme="light"] .nav-toggle { color: #0f172a; }
html[data-theme="light"] .b2b-banner { background: linear-gradient(135deg, rgba(14,116,144,0.07) 0%, rgba(109,40,217,0.07) 100%); }

/* ===== 12. sub-pages (chat, docs, mypage, training, marketplace, exam, simulator, institutions …) — shared shell only.
   Each has its own inline <style> with a hard-coded dark body; the body rule in §1 lifts it. The handful of literal
   neon colours that recur as text (classes vary per page, inline style= attributes need !important) ===== */
html[data-theme="light"] main a:not([class]):not([role]) { color: #0e7490; }
html[data-theme="light"] body [style*="color:#00d4ff"],
html[data-theme="light"] body [style*="color: #00d4ff"],
html[data-theme="light"] body [style*="color:#00ccff"],
html[data-theme="light"] body [style*="color: #00ccff"] { color: #0e7490 !important; }
html[data-theme="light"] body [style*="color:#a78bfa"],
html[data-theme="light"] body [style*="color: #a78bfa"] { color: #6d28d9 !important; }
html[data-theme="light"] body [style*="color:#FFD700"],
html[data-theme="light"] body [style*="color: #FFD700"],
html[data-theme="light"] body [style*="color:#fbbf24"],
html[data-theme="light"] body [style*="color: #fbbf24"] { color: #854d0e !important; }
html[data-theme="light"] body [style*="color:#94a3b8"],
html[data-theme="light"] body [style*="color: #94a3b8"] { color: #475569 !important; }   /* 3.0:1 on white */
html[data-theme="light"] body [style*="color: rgba(255,255,255,0.95)"],
html[data-theme="light"] body [style*="color: rgba(255,255,255,0.9)"],
html[data-theme="light"] body [style*="color:rgba(255,255,255,0.95)"],
html[data-theme="light"] body [style*="color:rgba(255,255,255,0.9)"],
html[data-theme="light"] body [style*="color: #fff"],
html[data-theme="light"] body [style*="color:#fff"] { color: #0f172a !important; }   /* training/ headings; nothing on index/kit matches */
/* exam/ paints neon radial glows on body::before — soften, not remove */
html[data-theme="light"] body::before { opacity: 0.45; }
