/*
 * light-mode.css — site-wide light palette (white + emerald).
 *
 * Applies when html[data-theme="light"] is set. The synchronous shim in
 * base.html <head> chooses the theme based on:
 *   1. page exclusion (blogs/casestudies/docs → forced dark)
 *   2. localStorage.fildra-theme
 *   3. prefers-color-scheme: light
 *
 * Excluded reading surfaces (blogs, case studies, docs) never receive
 * data-theme="light" — they stay dark for long-form reading comfort.
 *
 * Why light mode: farmers work outdoors in bright sun where the dark
 * glassmorphism theme washes out. Off-white + slate text + emerald
 * accents stay readable at midday on low-end Android screens.
 */

html[data-theme="light"] {
  /* Backgrounds — clean and glare-resistant (#f8fafc is easier on the
     eyes than pure #fff, which can become its own glare source). */
  --bg-body: #f8fafc;
  --bg-surface: #ffffff;
  --bg-surface-elevated: #f1f5f9;

  /* Text — high contrast for sunlight readability (deep slate hits ~14:1
     on white, well above WCAG AAA 7:1). */
  --text-primary: #0f172a;
  --text-secondary: #475569;
  --text-muted: #64748b;
  --text-disabled: #94a3b8;
  --text-inverse: #ffffff;

  /* Surface ladder — flatter, no glass in light mode. */
  --surface-0: #f8fafc;
  --surface-1: #ffffff;
  --surface-2: #f1f5f9;
  --surface-3: #e2e8f0;
  --surface-overlay: rgba(15, 23, 42, 0.16);

  /* Borders — thin slate replacing glass borders. */
  --glass-border: rgba(15, 23, 42, 0.08);
  --glass-border-hover: rgba(15, 23, 42, 0.16);
  --border-hairline: 1px solid rgba(15, 23, 42, 0.08);
  --border-subtle: 1px solid rgba(15, 23, 42, 0.12);
  --border-emphasis: 1px solid rgba(16, 185, 129, 0.45);

  /* Glass tokens collapse to flat white — glass looks cheap on light bg. */
  --glass-bg: #ffffff;
  --glass-bg-strong: #ffffff;
  --glass-blur: none;

  /* Shadows — softer for white surfaces. */
  --shadow-xs: 0 1px 2px rgba(15, 23, 42, 0.06);
  --shadow-sm: 0 2px 8px rgba(15, 23, 42, 0.08);
  --shadow-md: 0 10px 35px rgba(15, 23, 42, 0.10);
  --shadow-lg: 0 20px 60px rgba(15, 23, 42, 0.14);
  --shadow-xl: 0 30px 80px rgba(15, 23, 42, 0.18);
  --shadow-glow: 0 4px 15px rgba(16, 185, 129, 0.25);

  /* FieldVision tokens point at global light tokens — replaces the
     deleted :root[data-theme="light"] block in fieldvision_playground.css
     so the playground inherits the unified site palette. */
  --fv-bg-dark: var(--surface-0);
  --fv-bg-card: var(--surface-1);
  --fv-bg-elevated: var(--surface-2);
  --fv-border: rgba(15, 23, 42, 0.12);
  --fv-border-active: rgba(16, 185, 129, 0.5);
  --fv-text-primary: var(--text-primary);
  --fv-text-secondary: var(--text-secondary);
  --fv-text-muted: var(--text-muted);
  --fv-glow-green: 0 0 30px rgba(16, 185, 129, 0.18);
  --fv-glow-blue: 0 0 40px rgba(99, 102, 241, 0.12);
  --fv-chlorophyll: var(--color-primary-dark);
  --fv-accent:         var(--color-primary-dark);
  --fv-accent-primary: var(--color-primary-light);
  --fv-accent-cyan:    #0891b2;
  --fv-surface:        var(--surface-1);

  /* Pill / Tinted-surface light values — tint stays light, text becomes
     a strong 700-shade so contrast passes WCAG-AA. This is the exact
     bug that kept regressing in cv_models: tint and text were the same
     translucent rgba, so on white they were unreadable. Different tokens
     = bug structurally impossible. */
  --pill-emerald-bg:      rgba(16, 185, 129, 0.12);
  --pill-emerald-border:  rgba(16, 185, 129, 0.45);
  --pill-emerald-text:    #047857;
  --pill-indigo-bg:       rgba(99, 102, 241, 0.12);
  --pill-indigo-border:   rgba(99, 102, 241, 0.45);
  --pill-indigo-text:     #3730a3;
  --pill-amber-bg:        rgba(251, 191, 36, 0.18);
  --pill-amber-border:    rgba(217, 119, 6, 0.45);
  --pill-amber-text:      #92400e;
  --pill-slate-bg:        rgba(148, 163, 184, 0.16);
  --pill-slate-border:    rgba(100, 116, 139, 0.35);
  --pill-slate-text:      #334155;
  --pill-rose-bg:         rgba(244, 63, 94, 0.12);
  --pill-rose-border:     rgba(244, 63, 94, 0.45);
  --pill-rose-text:       #9f1239;
  --pill-pink-bg:         rgba(236, 72, 153, 0.12);
  --pill-pink-border:     rgba(236, 72, 153, 0.45);
  --pill-pink-text:       #9d174d;
  --tinted-emerald-bg:    rgba(16, 185, 129, 0.10);
  --tinted-emerald-text:  #047857;
  --tinted-amber-bg:      rgba(251, 191, 36, 0.16);
  --tinted-amber-text:    #92400e;
  --tinted-rose-bg:       rgba(244, 63, 94, 0.10);
  --tinted-rose-text:     #9f1239;

  /* Playground namespace light overrides — closes the coverage gaps that
     Phase 4 of luminous-reddy committed to (FieldKB grads, FieldState
     semantic colours, FieldVision accent-danger/warning). The tinted-bg
     values stay soft (so the playground keeps its dark-mode-derived feel)
     but the text values flip to strong 700/800 shades so chrome stays
     legible on a light background. */

  /* FieldKB decorative gradients — softened on white so the hero panel
     doesn't render dark-blue-on-white. */
  --grad-1: linear-gradient(135deg, rgba(16, 185, 129, 0.08), rgba(56, 189, 248, 0.06), rgba(139, 92, 246, 0.04));
  --grad-2: radial-gradient(1200px 600px at 20% 0%, rgba(16, 185, 129, 0.06), transparent 55%),
            radial-gradient(900px 500px at 80% 100%, rgba(56, 189, 248, 0.05), transparent 60%);

  /* FieldState semantic palette — bg-tints stay light, text-tokens
     become strong (700-shade) for WCAG-AA contrast on white. */
  --fs-accent:        #b45309;  /* amber-700 (was #f59e0b) */
  --fs-accent-dark:   #78350f;  /* amber-900 */
  --fs-accent-glow:   rgba(245, 158, 11, 0.18);
  --fs-accent-border: rgba(180, 83, 9, 0.45);

  --fs-urgent:        #b91c1c;  /* red-700 */
  --fs-urgent-bg:     rgba(248, 113, 113, 0.10);
  --fs-urgent-border: rgba(185, 28, 28, 0.40);

  --fs-watch:         #92400e;  /* amber-800 */
  --fs-watch-bg:      rgba(251, 191, 36, 0.14);
  --fs-watch-border:  rgba(146, 64, 14, 0.40);

  --fs-good:          #047857;  /* emerald-700 */
  --fs-good-bg:       rgba(52, 211, 153, 0.10);
  --fs-good-border:   rgba(4, 120, 87, 0.40);

  --fs-cta:           #075985;  /* sky-800 */
  --fs-cta-bg:        rgba(56, 189, 248, 0.12);
  --fs-cta-border:    rgba(7, 89, 133, 0.40);

  --fs-icon-dx:       rgba(248, 113, 113, 0.14);
  --fs-icon-dx-text:  #b91c1c;
  --fs-icon-map:      rgba(56, 189, 248, 0.14);
  --fs-icon-map-text: #075985;
  --fs-icon-kb:       rgba(52, 211, 153, 0.14);
  --fs-icon-kb-text:  #047857;
  --fs-icon-ctx:      rgba(245, 158, 11, 0.14);
  --fs-icon-ctx-text: #b45309;

  /* FieldVision accent danger/warning — bright accents flip to strong
     shades for legibility. */
  --fv-accent-warning: #92400e;  /* amber-800 (was #fbbf24) */
  --fv-accent-danger:  #b91c1c;  /* red-700 (was #f87171) */
}

/* Override hardcoded dark backgrounds set in base.html. */
html[data-theme="light"] {
  background: #f8fafc;
}
html[data-theme="light"] body {
  background: #f8fafc;
}

/* Strip backdrop-filter site-wide in light mode — glass looks cheap on
   white and adds GPU cost for zero visual benefit. */
html[data-theme="light"] *,
html[data-theme="light"] *::before,
html[data-theme="light"] *::after {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* Section-alt bands become subtly tinted slate instead of dark glass. */
html[data-theme="light"] .page-section-alt,
html[data-theme="light"] .products-section-alt,
html[data-theme="light"] .home-section-muted,
html[data-theme="light"] .market-section-muted,
html[data-theme="light"] .about-section-alt {
  background: #f1f5f9;
  border-top-color: rgba(15, 23, 42, 0.08);
  border-bottom-color: rgba(15, 23, 42, 0.08);
}

/* Ambient glow / grid overlays softened — they were designed for dark. */
html[data-theme="light"] .ambient-glow,
html[data-theme="light"] .grid-overlay {
  opacity: 0.15;
  filter: brightness(0.95);
}

/* Sun/moon icon swap inside the toggle button. */
html[data-theme="light"] .theme-toggle-btn .icon-when-dark { display: none; }
html:not([data-theme="light"]) .theme-toggle-btn .icon-when-light { display: none; }

/* ============================================================
   Hardcoded-dark overrides — elements that bypassed CSS tokens
   ============================================================
   Many components in base.html and page CSS use literal dark rgba()
   values instead of var(--surface-*) / var(--glass-bg). The token
   override above doesn't reach them — these explicit rules do. */

/* Navbar — root of the "FildraAI logo disappears" bug.
   base.html line 400 hardcodes rgba(15, 23, 42, 0.9). */
html[data-theme="light"] .navbar {
  background: rgba(248, 250, 252, 0.92);
  border-bottom-color: rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .navbar.scrolled {
  background: rgba(248, 250, 252, 0.98);
  border-bottom-color: rgba(16, 185, 129, 0.25);
}

/* Brand text + logo — defensive override so the wordmark is always dark. */
html[data-theme="light"] .navbar-brand,
html[data-theme="light"] .brand-text {
  color: #0f172a !important;
}

/* Brand-logo green glow was designed for dark — soften on white. */
html[data-theme="light"] .brand-logo {
  filter: drop-shadow(0 0 6px rgba(16, 185, 129, 0.22));
}

/* Nav links readable on the light navbar */
html[data-theme="light"] .nav-link {
  color: #334155 !important;
}
html[data-theme="light"] .nav-link.active,
html[data-theme="light"] .nav-link:hover,
html[data-theme="light"] .nav-link:focus {
  color: var(--color-primary-dark) !important;
}

/* Mobile hamburger toggler — base.html line 878 hardcodes a light-gray
   stroke (#e5e7eb) for dark mode, which is invisible on the light navbar.
   Re-stroke it dark to match the wordmark / nav links. */
html[data-theme="light"] .navbar-toggler-icon {
  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%230f172a' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}

/* Dropdown menus / items */
html[data-theme="light"] .dropdown-menu {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .dropdown-item {
  color: var(--text-primary);
}
html[data-theme="light"] .dropdown-item:hover,
html[data-theme="light"] .dropdown-item:focus {
  background: rgba(16, 185, 129, 0.08);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .dropdown-item.active {
  background: rgba(16, 185, 129, 0.12);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .dropdown-item i.text-muted {
  color: #64748b !important;
}
html[data-theme="light"] .dropdown-divider {
  border-color: rgba(15, 23, 42, 0.12);
}

/* Field-card — base.html hardcodes rgba(2, 6, 23, 0.58) */
html[data-theme="light"] .field-card {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .field-card:hover {
  border-color: rgba(16, 185, 129, 0.45);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}

/* Common card patterns — most hardcode dark glass backgrounds */
html[data-theme="light"] .content-card,
html[data-theme="light"] .value-card,
html[data-theme="light"] .value-narrative,
html[data-theme="light"] .product-card,
html[data-theme="light"] .feature-card,
html[data-theme="light"] .chart-card,
html[data-theme="light"] .sidebar-card,
html[data-theme="light"] .mv-card,
html[data-theme="light"] .belief-card,
html[data-theme="light"] .info-card,
html[data-theme="light"] .data-card,
html[data-theme="light"] .module-card,
html[data-theme="light"] .capability-card,
html[data-theme="light"] .purpose-card,
html[data-theme="light"] .workflow-step {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .product-card:hover,
html[data-theme="light"] .value-card:hover,
html[data-theme="light"] .content-card:hover,
html[data-theme="light"] .feature-card:hover {
  border-color: rgba(16, 185, 129, 0.40);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}

/* Alert / Flash tokens — light-mode overrides.
   Re-bind the --alert-* vars at the theme scope so .alert-box-* AND
   .fildra-flash-* inherit the lightened palette automatically. */
html[data-theme="light"] {
  --alert-danger-bg:      rgba(239, 68, 68, 0.10);
  --alert-danger-border:  rgba(239, 68, 68, 0.55);
  --alert-danger-text:    #991b1b;
  --alert-danger-icon:    #dc2626;
  --alert-success-bg:     rgba(16, 185, 129, 0.10);
  --alert-success-border: rgba(16, 185, 129, 0.55);
  --alert-success-text:   #065f46;
  --alert-success-icon:   #059669;
  --alert-warning-bg:     rgba(251, 191, 36, 0.14);
  --alert-warning-border: rgba(245, 158, 11, 0.55);
  --alert-warning-text:   #78350f;
  --alert-warning-icon:   #d97706;
  --alert-info-bg:        rgba(56, 189, 248, 0.10);
  --alert-info-border:    rgba(14, 165, 233, 0.55);
  --alert-info-text:      #075985;
  --alert-info-icon:      #0284c7;
}

/* Tables — both common patterns */
html[data-theme="light"] .docs-params-table,
html[data-theme="light"] table {
  background: #ffffff;
  color: var(--text-primary);
  border-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .docs-params-table thead th,
html[data-theme="light"] table thead th {
  background: #f8fafc;
  border-bottom: 1px solid rgba(15, 23, 42, 0.18);
  color: var(--text-primary);
}
html[data-theme="light"] .docs-params-table tbody td,
html[data-theme="light"] table tbody td {
  border-bottom: 1px solid rgba(15, 23, 42, 0.10);
  color: var(--text-secondary);
}
html[data-theme="light"] .docs-params-table tbody tr:hover,
html[data-theme="light"] table tbody tr:hover {
  background: #f8fafc;
}

/* Generic hr + horizontal section dividers */
html[data-theme="light"] hr {
  border-color: rgba(15, 23, 42, 0.12);
  background: transparent;
}

/* Section eyebrow ::before / ::after lines (faded slate gradient by default) */
html[data-theme="light"] .section-eyebrow::before,
html[data-theme="light"] .section-eyebrow::after {
  background: linear-gradient(90deg, transparent, var(--color-primary-dark), transparent);
}

/* Section-index hairline (the green line in numbered section labels) */
html[data-theme="light"] .section-index-line {
  background: rgba(16, 185, 129, 0.55);
}

/* Hero / section titles often have dark text-shadow for legibility on dark.
   On white that shadow becomes grey halo — strip it. */
html[data-theme="light"] .hero-title,
html[data-theme="light"] .section-title,
html[data-theme="light"] .hero-title-highlight {
  text-shadow: none;
}

/* Section bands hardcoded rgba(2, 6, 23, 0.26) */
html[data-theme="light"] .market-section-muted,
html[data-theme="light"] .home-section-muted,
html[data-theme="light"] .page-section-alt,
html[data-theme="light"] .products-section-alt,
html[data-theme="light"] .about-section-alt {
  background: #f1f5f9 !important;
  border-top: 1px solid rgba(15, 23, 42, 0.10) !important;
  border-bottom: 1px solid rgba(15, 23, 42, 0.10) !important;
}

/* Form fields */
html[data-theme="light"] input:not([type="checkbox"]):not([type="radio"]),
html[data-theme="light"] textarea,
html[data-theme="light"] select {
  background: #ffffff;
  color: var(--text-primary);
  border-color: rgba(15, 23, 42, 0.16);
}
html[data-theme="light"] input::placeholder,
html[data-theme="light"] textarea::placeholder {
  color: #94a3b8;
}
html[data-theme="light"] input:focus,
html[data-theme="light"] textarea:focus,
html[data-theme="light"] select:focus {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.15);
}

/* Footer — base.html footer uses dark hardcoded background */
html[data-theme="light"] footer,
html[data-theme="light"] .site-footer,
html[data-theme="light"] .footer-section {
  background: #f1f5f9;
  border-top: 1px solid rgba(15, 23, 42, 0.10);
  color: var(--text-secondary);
}
html[data-theme="light"] footer a {
  color: var(--text-secondary);
}
html[data-theme="light"] footer a:hover {
  color: var(--color-primary-dark);
}

/* Status strip on home — the field-card wrapper handles it via the field-card
   override above, but the status-index numbers + index lines need a tweak. */
html[data-theme="light"] .status-strip .status-kicker,
html[data-theme="light"] .status-strip h3 {
  color: var(--text-primary);
}
html[data-theme="light"] .status-index {
  color: var(--color-primary-dark);
}

/* Catch-all: anything that uses var(--bg-surface) / var(--bg-surface-elevated)
   already gets the light value. Anything that hardcoded the dark navy needs
   the explicit overrides above. If more disappearing elements turn up, add
   the selectors here. */

/* ============================================================
   Language switcher + Sign in button (navbar action buttons)
   ============================================================ */

/* .lang-btn hardcodes rgba(15, 23, 42, 0.96) in base.html line 562 */
html[data-theme="light"] .language-switcher .lang-btn {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-secondary);
}
html[data-theme="light"] .language-switcher .lang-btn:hover {
  background: #f8fafc;
  border-color: var(--color-primary-dark);
  color: var(--text-primary);
}

/* Sign in / generic ghost buttons in the navbar */
html[data-theme="light"] .navbar .btn-ghost,
html[data-theme="light"] .navbar .btn.btn-ghost {
  background: transparent;
  color: var(--text-primary);
  border: 1px solid rgba(15, 23, 42, 0.16);
}
html[data-theme="light"] .navbar .btn-ghost:hover,
html[data-theme="light"] .navbar .btn.btn-ghost:hover {
  background: #f8fafc;
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

/* Theme toggle button itself — keep ghost styling consistent */
html[data-theme="light"] .theme-toggle-btn {
  background: transparent;
  color: var(--text-primary);
  border: 1px solid rgba(15, 23, 42, 0.16);
}
html[data-theme="light"] .theme-toggle-btn:hover {
  background: #f8fafc;
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

/* Account menu avatar / button */
html[data-theme="light"] .account-menu .account-btn {
  color: var(--text-primary);
  border: 1px solid rgba(15, 23, 42, 0.16);
}
html[data-theme="light"] .account-menu .account-btn:hover {
  background: #f8fafc;
  border-color: var(--color-primary);
}
html[data-theme="light"] .account-avatar-initials {
  background: rgba(16, 185, 129, 0.12);
  color: var(--color-primary-dark);
}

/* ============================================================
   Code blocks — used in /solutions/*, /docs/* API examples
   ============================================================
   solutions_api.css line 308 hardcodes rgba(15, 23, 42, 0.95)
   background + #e2e8f0 text. Without override, dark-on-dark or
   light-on-light = invisible. Convert to a calm slate-on-cream
   palette that reads like a code listing on white. */

html[data-theme="light"] .code-block,
html[data-theme="light"] .solutions-api-page .code-block {
  background: #f1f5f9;
  border: 1px solid rgba(15, 23, 42, 0.12);
}
html[data-theme="light"] .code-block pre,
html[data-theme="light"] .code-block code,
html[data-theme="light"] .solutions-api-page .code-block,
html[data-theme="light"] .solutions-api-page .code-block pre,
html[data-theme="light"] .solutions-api-page .code-block code {
  color: #0f172a;
  background: transparent;
}

/* Generic <pre> / <code> tags outside a wrapping .code-block */
html[data-theme="light"] pre {
  background: #f1f5f9;
  color: #0f172a;
  border: 1px solid rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] code {
  background: rgba(15, 23, 42, 0.06);
  color: #0f172a;
}
html[data-theme="light"] pre code {
  background: transparent;
}

/* ============================================================
   Docs / case-studies / blogs surfaces — now eligible for light mode
   ============================================================ */

/* Docs hero band */
html[data-theme="light"] .docs-hero {
  background: #ffffff;
  border-bottom: 1px solid rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .docs-hero h1 {
  color: var(--text-primary);
}
html[data-theme="light"] .docs-hero .lead {
  color: var(--text-secondary);
}

/* Breadcrumb + section nav (fv-docs-* family) */
html[data-theme="light"] .fv-docs-topbar {
  background: #ffffff;
  border-bottom: 1px solid rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .fv-docs-path,
html[data-theme="light"] .fv-docs-path a,
html[data-theme="light"] .fv-docs-path-sep {
  color: var(--text-secondary);
}
html[data-theme="light"] .fv-docs-path a:hover,
html[data-theme="light"] .fv-docs-path-current {
  color: var(--text-primary);
}
html[data-theme="light"] .fv-docs-nav-link {
  color: var(--text-secondary);
  background: transparent;
  border: 1px solid transparent;
}
html[data-theme="light"] .fv-docs-nav-link:hover {
  background: #f8fafc;
  color: var(--text-primary);
}
html[data-theme="light"] .fv-docs-nav-link.is-active {
  background: rgba(16, 185, 129, 0.10);
  color: var(--color-primary-dark);
  border-color: rgba(16, 185, 129, 0.30);
}

/* Table of contents */
html[data-theme="light"] .docs-toc {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .docs-toc h2 {
  color: var(--text-primary);
}
html[data-theme="light"] .docs-toc ul li a {
  color: var(--text-secondary);
}
html[data-theme="light"] .docs-toc ul li a:hover {
  color: var(--color-primary-dark);
}

/* Main docs content area + sections */
html[data-theme="light"] .docs-content,
html[data-theme="light"] .docs-detail-page,
html[data-theme="light"] .docs-detail-container {
  background: transparent;
  color: var(--text-primary);
}
html[data-theme="light"] .docs-section h2 {
  color: var(--text-primary);
  border-bottom-color: rgba(15, 23, 42, 0.12);
}
html[data-theme="light"] .docs-section p,
html[data-theme="light"] .docs-section li {
  color: var(--text-secondary);
}
html[data-theme="light"] .docs-section ul li::marker,
html[data-theme="light"] .docs-section ol li::marker {
  color: var(--color-primary-dark);
}

/* Docs/guides card surfaces — backgrounds were unmapped, leaving dark
   glass panels visible in light mode on FieldGuide / FieldKB docs and
   the guides index. */
html[data-theme="light"] .docs-section {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
html[data-theme="light"] .category,
html[data-theme="light"] .access-option,
html[data-theme="light"] .docs-crops-group {
  background: #f8fafc;
  border-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .can-do {
  background: rgba(16, 185, 129, 0.06);
  border-color: rgba(16, 185, 129, 0.30);
}
html[data-theme="light"] .cannot-do {
  background: rgba(239, 68, 68, 0.06);
  border-color: rgba(239, 68, 68, 0.28);
}
html[data-theme="light"] .related-docs,
html[data-theme="light"] .related-card {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
html[data-theme="light"] .docs-params-wrapper {
  border-color: rgba(15, 23, 42, 0.10);
}

/* Info / warning / highlight boxes — token-aware already but tighten on white */
html[data-theme="light"] .highlight-box {
  background: rgba(16, 185, 129, 0.06);
  border-color: rgba(16, 185, 129, 0.35);
}
html[data-theme="light"] .highlight-box h3 {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .highlight-box p,
html[data-theme="light"] .highlight-box li {
  color: var(--text-primary);
}
html[data-theme="light"] .info-box {
  background: rgba(56, 189, 248, 0.08);
  border-color: rgba(56, 189, 248, 0.35);
}
html[data-theme="light"] .info-box h3 {
  color: #0284c7;
}
html[data-theme="light"] .info-box p,
html[data-theme="light"] .info-box li {
  color: var(--text-primary);
}
html[data-theme="light"] .warning-box {
  background: rgba(251, 191, 36, 0.10);
  border-color: rgba(251, 191, 36, 0.40);
}
html[data-theme="light"] .warning-box h3 {
  color: #b45309;
}
html[data-theme="light"] .warning-box p,
html[data-theme="light"] .warning-box li {
  color: var(--text-primary);
}

/* Blogs + case studies typically use .blog-card / .case-card patterns */
html[data-theme="light"] .blog-card,
html[data-theme="light"] .case-card,
html[data-theme="light"] .case-study-card,
html[data-theme="light"] .post-card,
html[data-theme="light"] .collection-card,
html[data-theme="light"] .docs-card {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .blog-card:hover,
html[data-theme="light"] .case-card:hover,
html[data-theme="light"] .docs-card:hover {
  border-color: rgba(16, 185, 129, 0.40);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}

/* ============================================================
   Subtle subtitle / sub-header dividers
   ============================================================
   Pattern: border-bottom: 1px solid rgba(148, 163, 184, 0.1)
   In dark mode this faint-slate-on-dark reads as a divider.
   In light mode it becomes invisible on white. Bump opacity. */

html[data-theme="light"] [class*="-title"],
html[data-theme="light"] [class*="-subtitle"],
html[data-theme="light"] .section-subtitle,
html[data-theme="light"] .content-card-subtitle,
html[data-theme="light"] .sidebar-title,
html[data-theme="light"] h2,
html[data-theme="light"] h3,
html[data-theme="light"] h4 {
  border-bottom-color: rgba(15, 23, 42, 0.12) !important;
}

/* docs_shared.css lines 265, 459, 788, 795 — specific dividers */
html[data-theme="light"] .docs-section h2,
html[data-theme="light"] .docs-params-table thead th {
  border-bottom-color: rgba(15, 23, 42, 0.18) !important;
}
html[data-theme="light"] .docs-params-table tbody td {
  border-bottom-color: rgba(15, 23, 42, 0.10) !important;
}

/* ============================================================
   FieldChat / Ask AI widget (--fc-* token overrides)
   ============================================================
   ask_ai.css defines its own --fc-* namespace at :root. We override
   those tokens here so the chat panel matches the unified palette
   when html[data-theme="light"] is set. */

html[data-theme="light"] {
  --fc-bg-body: #ffffff;
  --fc-bg-surface: #ffffff;
  --fc-bg-surface-elevated: #f8fafc;
  --fc-text-primary: #0f172a;
  --fc-text-secondary: #475569;
  --fc-text-muted: #64748b;
  --fc-text-inverse: #ffffff;
  --fc-glass-bg: #ffffff;
  --fc-glass-bg-strong: #ffffff;
  --fc-glass-border: rgba(15, 23, 42, 0.12);
  --fc-glass-blur: none;
  --fc-shadow-sm: 0 2px 8px rgba(15, 23, 42, 0.08);
  --fc-shadow-md: 0 10px 35px rgba(15, 23, 42, 0.10);
  --fc-shadow-lg: 0 20px 60px rgba(15, 23, 42, 0.14);
  --fc-shadow-glow: 0 4px 15px rgba(16, 185, 129, 0.22);
}

/* Strip the chat backdrop's dark scrim and blur in light mode */
html[data-theme="light"] .fieldchat-backdrop {
  background: rgba(15, 23, 42, 0.32);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* ============================================================
   FieldChat widget — structural overrides
   ============================================================
   --fc-* token overrides above cover most of the widget, but several
   internal containers hardcode rgba dark values (ask_ai.css lines
   239, 843, 855). Override directly. */

html[data-theme="light"] .fieldchat-container {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  box-shadow: 0 20px 60px rgba(15, 23, 42, 0.14);
}

html[data-theme="light"] .fieldchat-header {
  background: #ffffff;
  border-bottom: 1px solid rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}
html[data-theme="light"] .fieldchat-title,
html[data-theme="light"] .fieldchat-header-title {
  color: var(--text-primary);
}
html[data-theme="light"] .fieldchat-btn-icon {
  color: var(--text-secondary);
  background: transparent;
}
html[data-theme="light"] .fieldchat-btn-icon:hover {
  background: rgba(15, 23, 42, 0.05);
  color: var(--text-primary);
}

html[data-theme="light"] .fieldchat-body,
html[data-theme="light"] .fieldchat-thread {
  background: #ffffff;
  color: var(--text-primary);
}
html[data-theme="light"] .fieldchat-thread {
  scrollbar-color: rgba(15, 23, 42, 0.3) transparent;
}
html[data-theme="light"] .fieldchat-thread::-webkit-scrollbar-thumb {
  background: rgba(15, 23, 42, 0.25);
}
/* Greeting: gradient text from ask_ai.css applies in both themes.
   See the later definitive override at the bottom of this file. */

html[data-theme="light"] .fieldchat-composer {
  background: #f8fafc;
  border-top: 1px solid rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .fieldchat-input-wrapper {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.16);
}
html[data-theme="light"] .fieldchat-input-wrapper:focus-within {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.20);
}
html[data-theme="light"] .fieldchat-composer-input {
  color: var(--text-primary);
}
html[data-theme="light"] .fieldchat-composer-input::placeholder {
  color: #94a3b8;
}

/* Chat message bubbles — most pages use these inside the thread */
html[data-theme="light"] .fieldchat-msg.user .fieldchat-msg-bubble {
  background: rgba(16, 185, 129, 0.12);
  color: var(--text-primary);
  border: 1px solid rgba(16, 185, 129, 0.30);
}
html[data-theme="light"] .fieldchat-msg.assistant .fieldchat-msg-bubble,
html[data-theme="light"] .fieldchat-msg.bot .fieldchat-msg-bubble {
  background: #f1f5f9;
  color: var(--text-primary);
  border: 1px solid rgba(15, 23, 42, 0.10);
}

/* Send button keeps its primary green gradient — that's the call to action */

/* ============================================================
   Hero evidence — Common Rust scanner card (home.html)
   ============================================================
   home.html lines 16-20 define a --field-* page-local namespace
   with hardcoded rgba(2,6,23,...) dark values. Override the tokens
   in light mode, plus the components that hardcode their own bg. */

html[data-theme="light"] {
  --field-surface: #ffffff;
  --field-surface-strong: #ffffff;
  --field-border: rgba(15, 23, 42, 0.10);
  --field-border-strong: rgba(16, 185, 129, 0.40);
  --field-muted-line: rgba(15, 23, 42, 0.10);
}

html[data-theme="light"] .hero-evidence {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}

/* The scanner-container keeps a dark/imaging background so the leaf photo
   sits on its natural backdrop. Just soften the border. */
html[data-theme="light"] .scanner-container {
  border-color: rgba(15, 23, 42, 0.20);
}

html[data-theme="light"] .diagnosis-card {
  background: #f8fafc;
  border: 1px solid rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}
html[data-theme="light"] .diagnosis-text h4 {
  color: var(--text-primary);
}
html[data-theme="light"] .diagnosis-text p {
  color: var(--text-secondary);
}
html[data-theme="light"] .diagnosis-method {
  background: rgba(16, 185, 129, 0.10);
  border-color: rgba(16, 185, 129, 0.35);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .diagnosis-meta {
  border-top-color: rgba(15, 23, 42, 0.10);
  border-bottom-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .meta-label {
  color: var(--text-muted);
}
html[data-theme="light"] .meta-value {
  color: var(--text-primary);
}

html[data-theme="light"] .confidence-title,
html[data-theme="light"] .confidence-badge {
  color: var(--text-primary);
}
html[data-theme="light"] .confidence-label {
  color: var(--text-secondary);
}
html[data-theme="light"] .confidence-percent {
  color: var(--text-primary);
}

/* Confidence track — darker on white so the bar is readable */
html[data-theme="light"] .confidence-bar {
  background: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .confidence-fill {
  background: var(--color-primary-dark);
  box-shadow: 0 0 6px rgba(16, 185, 129, 0.22);
}

html[data-theme="light"] .diagnosis-disclaimer {
  border-top-color: rgba(15, 23, 42, 0.10);
  color: var(--text-muted);
}

/* ============================================================
   Console container — solutions/index.html "API workflow" snippet
   ============================================================
   .console-* family hardcodes rgba(15,23,42,…) backgrounds.
   .code-* tokens use very pale colors (#a5b4fc, #86efac) that are
   unreadable on white. Re-tune for a calm light-on-slate console. */

html[data-theme="light"] .console-container {
  background: #0f172a;
  border: 1px solid rgba(15, 23, 42, 0.12);
  box-shadow: 0 12px 36px rgba(15, 23, 42, 0.18);
}
html[data-theme="light"] .console-header {
  background: #1e293b;
  border-bottom-color: rgba(255, 255, 255, 0.08);
}
html[data-theme="light"] .console-title {
  color: #cbd5e1;
}
html[data-theme="light"] .console-body {
  color: #e2e8f0;
}

/* Console body text — light slate panel needs dark text */
html[data-theme="light"] .console-container {
  background: #f1f5f9;
  border: 1px solid rgba(15, 23, 42, 0.12);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .console-header {
  background: #e2e8f0;
  border-bottom-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .console-title {
  color: var(--text-secondary);
}
html[data-theme="light"] .console-body {
  color: #0f172a;
}
/* Syntax token colors — darker variants for light backgrounds.
   These tokens (.code-key, .code-string, etc.) are used in the API
   workflow console on solutions/index.html. */
html[data-theme="light"] .code-comment { color: #64748b; }
html[data-theme="light"] .code-key     { color: #4338ca; }  /* indigo-700 */
html[data-theme="light"] .code-string  { color: #15803d; }  /* green-700 */
html[data-theme="light"] .code-number  { color: #b45309; }  /* amber-700 */
html[data-theme="light"] .code-method  { color: #1d4ed8; }  /* blue-700 */

/* ============================================================
   Docs / blogs / case studies — page-local :root override defeat
   ============================================================
   docs/index.html, blogs/index.html, casestudies/index.html each
   declare their own :root { --fv-*: #020617; ... } block which sets
   their --fv-* tokens to dark. My html[data-theme="light"] selector
   has higher specificity (0,1,1 > 0,1,0) so the variable values DO win.
   The real culprit is `.fv-docs-page { background: radial-gradient(... #020617) }`
   which doesn't use a variable — we override the rule directly. */

html[data-theme="light"] .fv-docs-page {
  background:
    radial-gradient(circle at 0% 0%, rgba(56, 189, 248, 0.06), transparent 55%),
    radial-gradient(circle at 100% 100%, rgba(52, 211, 153, 0.05), transparent 55%),
    #f8fafc;
  color: var(--text-primary);
}

/* Re-darken --fv-* accent tokens in light mode — the page-local
   --fv-accent-primary: #34d399 and --fv-accent-secondary: #38bdf8
   are emerald/sky which look pale on white. Push to deeper tones. */
html[data-theme="light"] {
  --fv-accent-primary: #047857;     /* deep emerald — readable on white */
  --fv-accent-secondary: #0369a1;   /* deep sky — readable on white */
  --fv-border: rgba(15, 23, 42, 0.10);
  --fv-border-soft: rgba(15, 23, 42, 0.08);
  --fv-glow-soft: 0 4px 16px rgba(15, 23, 42, 0.06);
}

/* fv-docs-path breadcrumb pill — page-local has a hardcoded dark
   radial-gradient background. Override directly. */
html[data-theme="light"] .fv-docs-path {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.12);
  color: var(--text-secondary);
}
html[data-theme="light"] .fv-docs-path a {
  color: var(--text-secondary);
}
html[data-theme="light"] .fv-docs-path a:hover,
html[data-theme="light"] .fv-docs-path-current {
  color: var(--text-primary);
}

/* fv-btn-primary / fv-btn-secondary — typically have hardcoded
   dark backgrounds. Solid emerald primary + ghost secondary. */
html[data-theme="light"] .fv-btn-primary {
  background: var(--color-primary-dark);
  color: #ffffff;
  border: 1px solid var(--color-primary-dark);
}
html[data-theme="light"] .fv-btn-primary:hover {
  background: var(--color-primary);
  border-color: var(--color-primary);
}
html[data-theme="light"] .fv-btn-secondary {
  background: #ffffff;
  color: var(--text-primary);
  border: 1px solid rgba(15, 23, 42, 0.16);
}
html[data-theme="light"] .fv-btn-secondary:hover {
  background: #f8fafc;
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

/* fv-card / fv-section / fv-bento / fv-tile — common card patterns
   in docs/blogs/casestudies. Page-local CSS often hardcodes
   var(--fv-bg-card) which is overridden, but some hardcode rgba. */
html[data-theme="light"] [class*="fv-card"],
html[data-theme="light"] [class*="fv-section"],
html[data-theme="light"] [class*="fv-bento"],
html[data-theme="light"] [class*="fv-tile"],
html[data-theme="light"] [class*="fv-panel"],
html[data-theme="light"] [class*="fv-block"] {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}

/* Generic .fv-* text elements — force dark text in light mode */
html[data-theme="light"] [class*="fv-"] h1,
html[data-theme="light"] [class*="fv-"] h2,
html[data-theme="light"] [class*="fv-"] h3,
html[data-theme="light"] [class*="fv-"] h4,
html[data-theme="light"] [class*="fv-"] h5,
html[data-theme="light"] [class*="fv-"] h6 {
  color: var(--text-primary);
}
html[data-theme="light"] [class*="fv-"] p,
html[data-theme="light"] [class*="fv-"] li {
  color: var(--text-secondary);
}
html[data-theme="light"] [class*="fv-eyebrow"],
html[data-theme="light"] [class*="fv-label"],
html[data-theme="light"] [class*="fv-tag"] {
  color: var(--color-primary-dark);
}

/* ============================================================
   Gradient-text headings → solid dark in light mode
   ============================================================
   .hero-title-highlight, .text-gradient, .grad and similar use
   background-clip:text with the brand gradient (emerald→indigo)
   which renders as cyan/teal text — visible but pale on white.
   Switch to solid dark slate so headings read like proper headings. */

html[data-theme="light"] .hero-title-highlight,
html[data-theme="light"] .text-gradient,
html[data-theme="light"] .grad,
html[data-theme="light"] .value-number,
html[data-theme="light"] .fv-hero-title,
html[data-theme="light"] .fv-page-title,
html[data-theme="light"] .fv-section-title,
html[data-theme="light"] .fv-card-title,
html[data-theme="light"] .fs-hero-title,
html[data-theme="light"] .fg-hero-title,
html[data-theme="light"] .fa-hero-title,
html[data-theme="light"] .fc-hero-title {
  background: none !important;
  -webkit-background-clip: initial !important;
  background-clip: initial !important;
  -webkit-text-fill-color: var(--text-primary) !important;
  color: var(--text-primary) !important;
}

/* ============================================================
   Guides + docs-hero-meta + link-pills (page-local CSS in
   guides/index, blogs/index, casestudies/index, docs/index)
   ============================================================
   These have hardcoded rgba(15, 23, 42, ...) backgrounds and
   light text. Light-mode overrides flip the surface to white
   with deep slate text. */

/* Docs hero meta — row of pill-shaped tags below the page title */
html[data-theme="light"] .docs-hero-meta {
  color: var(--text-secondary);
}
html[data-theme="light"] .docs-hero-meta span {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.12);
  color: var(--text-secondary);
}

/* Featured guide card — the big highlighted card on guides index */
html[data-theme="light"] .featured-guide {
  background:
    radial-gradient(circle at top left, rgba(16, 185, 129, 0.06), transparent 55%),
    #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .featured-guide:hover {
  border-color: var(--color-primary);
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .featured-guide h3 {
  color: var(--text-primary);
}
html[data-theme="light"] .featured-guide p {
  color: var(--text-secondary);
}

/* Guide pill / tag — small text labels inside the cards */
html[data-theme="light"] .guide-pill,
html[data-theme="light"] .guide-tag {
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-secondary);
  background: transparent;
}
html[data-theme="light"] .guide-meta {
  color: var(--text-muted);
}

/* Guide card grid — secondary guide cards below the featured one */
html[data-theme="light"] .guide-card {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .guide-card:hover {
  border-color: var(--color-primary);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}

/* Link pills — uppercase mono pills used as inline CTA links */
html[data-theme="light"] .link-pill {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-secondary);
}
html[data-theme="light"] .link-pill:hover {
  background: rgba(16, 185, 129, 0.06);
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

/* ============================================================
   Code container — Python example listing
   (solutions/diagnosis.html lines 105-130)
   ============================================================
   Originally a slate-900 panel with light syntax colors. Per
   captain's call this round, code listings should be LIGHT in
   light mode (matches GitHub light-theme convention). */

html[data-theme="light"] .code-container {
  background: #f8fafc;
  border: 1px solid rgba(15, 23, 42, 0.12);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .code-header {
  background: #e2e8f0;
  border-bottom: 1px solid rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .code-label {
  color: var(--text-secondary);
}
html[data-theme="light"] .copy-btn {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-primary);
}
html[data-theme="light"] .copy-btn:hover {
  background: var(--color-primary-dark);
  color: #ffffff;
  border-color: var(--color-primary-dark);
}
html[data-theme="light"] .code-block pre {
  color: #0f172a;
}

/* Python syntax-highlight classes on .code-block — darker variants
   for readability on white. Distinct from .code-* used by console. */
html[data-theme="light"] .code-block .comment { color: #64748b; }
html[data-theme="light"] .code-block .string  { color: #15803d; }  /* green-700 */
html[data-theme="light"] .code-block .keyword { color: #6d28d9; }  /* violet-700 */
html[data-theme="light"] .code-block .method  { color: #b45309; }  /* amber-700 */
html[data-theme="light"] .code-block .url     { color: #15803d; }  /* green-700 */
html[data-theme="light"] .code-block .number  { color: #b45309; }
html[data-theme="light"] .code-block .field   { color: #b45309; }
html[data-theme="light"] .code-block .bool    { color: #c2410c; }  /* orange-700 */

/* ============================================================
   Playground namespaces — token overrides
   ============================================================
   The playground CSS files each define their own --fk-* / --fm-*
   / --fa-* / --fs-* / --fv-* token namespace at :root with hardcoded
   dark values. Override each in light mode so playground containers
   inherit the unified palette without rewriting the playground CSS. */

/* fieldkb_playground.css — uses --fv-* namespace (same as FieldVision).
   Site-wide --fv-* override above already covers most. Add what's local. */
html[data-theme="light"] {
  --fv-bg-dark:       #f8fafc;
  --fv-bg-card:       #ffffff;
  --fv-bg-elevated:   #ffffff;
  --fv-border:        rgba(15, 23, 42, 0.12);
  --fv-border-strong: rgba(16, 185, 129, 0.45);
  --fv-glow-green:    0 0 24px rgba(16, 185, 129, 0.12);

  /* fieldaudio --fa-* namespace */
  --fa-surface:        #ffffff;
  --fa-surface-raised: #f8fafc;
  --fa-border:         rgba(15, 23, 42, 0.10);
  --fa-border-accent:  rgba(16, 185, 129, 0.40);
  --fa-text:           #0f172a;
  --fa-text-muted:     #475569;
  --fa-text-dim:       #64748b;
  --fa-accent-glow:    rgba(16, 185, 129, 0.10);
  --fa-shadow:         0 4px 16px rgba(15, 23, 42, 0.06);

  /* fieldstate --fs-* namespace */
  --fs-surface:        #ffffff;
  --fs-surface-raised: #f8fafc;
  --fs-surface-deep:   #f1f5f9;
  --fs-border:         rgba(15, 23, 42, 0.10);
  --fs-border-mid:     rgba(15, 23, 42, 0.14);
  --fs-text:           #0f172a;
  --fs-text-secondary: #475569;
  --fs-text-muted:     #64748b;
  --fs-accent-glow:    rgba(245, 158, 11, 0.10);
  --fs-urgent-bg:      rgba(248, 113, 113, 0.10);
  --fs-watch-bg:       rgba(251, 191, 36, 0.12);
  --fs-good-bg:        rgba(16, 185, 129, 0.10);
  --fs-cta-bg:         rgba(56, 189, 248, 0.10);
  /* icon backgrounds — keep tints but lighter */
  --fs-icon-dx:        rgba(248, 113, 113, 0.12);
  --fs-icon-map:       rgba(56, 189, 248, 0.12);
  --fs-icon-kb:        rgba(16, 185, 129, 0.12);
  --fs-icon-ctx:       rgba(245, 158, 11, 0.14);
  --fs-icon-img:       rgba(15, 23, 42, 0.06);
  --fs-icon-img-text:  #475569;
}

/* fieldmap_playground.css uses .fieldmap-page wrapper. No token
   namespace — direct rules. Add core overrides. */
html[data-theme="light"] .fieldmap-page {
  color: var(--text-primary);
}
html[data-theme="light"] .fieldmap-page .map-shell,
html[data-theme="light"] .fieldmap-page .map-card,
html[data-theme="light"] .fieldmap-page .legend-card,
html[data-theme="light"] .fieldmap-page .region-card,
html[data-theme="light"] .fieldmap-page [class*="-card"],
html[data-theme="light"] .fieldmap-page [class*="-shell"],
html[data-theme="light"] .fieldmap-page [class*="-panel"] {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}

/* Playground catch-all: any element inside a playground that uses
   the .pg-* shared class family. playground_shared.css line 508+
   hardcodes rgba(15, 23, 42, 0.24). */
html[data-theme="light"] .pg-workspace,
html[data-theme="light"] .pg-mode-tabs,
html[data-theme="light"] .pg-mode-tab,
html[data-theme="light"] .pg-context-bar,
html[data-theme="light"] .pg-ctx-item,
html[data-theme="light"] .pg-workspace-actions,
html[data-theme="light"] [class^="pg-"] {
  color: var(--text-primary);
}
html[data-theme="light"] .pg-mode-tab {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  color: var(--text-secondary);
}
html[data-theme="light"] .pg-mode-tab:hover,
html[data-theme="light"] .pg-mode-tab.active {
  background: rgba(16, 185, 129, 0.08);
  border-color: rgba(16, 185, 129, 0.35);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .pg-context-bar {
  background: #f8fafc;
  border: 1px solid rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .pg-ctx-label {
  color: var(--text-muted);
}
html[data-theme="light"] .pg-ctx-value {
  color: var(--text-primary);
}

/* fieldkb-specific containers that hardcode dark rgba.
   fieldkb_playground.css uses ~14 component rules with hardcoded
   rgba(2,6,23,...) / rgba(15,23,42,...) / rgba(15,22,41,...)
   backgrounds. Token overrides don't reach those — we target the
   specific class families directly. */
html[data-theme="light"] .fieldkb-page,
html[data-theme="light"] .fieldkb-shell,
html[data-theme="light"] .fieldkb-pill,
html[data-theme="light"] .fieldkb-hero-badge,
html[data-theme="light"] .fieldkb-answer-card,
html[data-theme="light"] .fieldkb-retrieval-card,
html[data-theme="light"] [class^="fieldkb-card"],
html[data-theme="light"] [class*="fieldkb-card"],
html[data-theme="light"] [class*="fieldkb-section"],
html[data-theme="light"] [class*="fieldkb-panel"],
html[data-theme="light"] [class*="fieldkb-answer"],
html[data-theme="light"] [class*="fieldkb-retrieval"] {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}

/* fieldkb image-box keeps a dark backdrop (it's an image canvas) */
html[data-theme="light"] .fieldkb-image-box {
  background: #f1f5f9 !important;
  border-color: rgba(15, 23, 42, 0.16);
}

/* Chat / message rows in fieldkb */
html[data-theme="light"] .chat-messages {
  background: #f8fafc;
}
html[data-theme="light"] .chat-messages::-webkit-scrollbar-track {
  background: #e2e8f0;
}

/* fieldkb_playground.css component overrides (was a known follow-up
   in earlier rounds — now retokenized at source, but keep these for
   any stragglers using direct rgba). */

/* ============================================================
   Auth pages (login / signup / forgot / reset / confirm)
   ============================================================
   .auth-input hardcodes rgba(15, 23, 42, 0.85). All auth widgets
   live in template-local <style> blocks. Light-mode overrides
   flip them to white-on-light. */

html[data-theme="light"] .auth-page {
  background:
    radial-gradient(circle at 0% 0%, rgba(16, 185, 129, 0.05), transparent 55%),
    radial-gradient(circle at 100% 100%, rgba(99, 102, 241, 0.04), transparent 50%),
    #f8fafc;
  color: var(--text-primary);
}
html[data-theme="light"] .auth-card {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  box-shadow: 0 12px 36px rgba(15, 23, 42, 0.08);
  color: var(--text-primary);
}
html[data-theme="light"] .auth-card-inner {
  color: var(--text-primary);
}
html[data-theme="light"] .auth-kicker {
  color: var(--text-muted);
}
html[data-theme="light"] .auth-title {
  color: var(--text-primary);
}
html[data-theme="light"] .auth-subtitle {
  color: var(--text-secondary);
}
html[data-theme="light"] .auth-form-label {
  color: var(--text-secondary);
}
html[data-theme="light"] .auth-input,
html[data-theme="light"] input.auth-input,
html[data-theme="light"] .auth-page input.form-control {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-primary);
}
html[data-theme="light"] .auth-input::placeholder,
html[data-theme="light"] .auth-page input.form-control::placeholder {
  color: #94a3b8;
}
html[data-theme="light"] .auth-input:focus,
html[data-theme="light"] .auth-page input.form-control:focus {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.18);
  background: #ffffff;
}
/* Chrome/Safari autofill paints inputs dark via -webkit-box-shadow inset.
   Light-mode rules without this selector lose to the autofill style and
   the saved-credential email/password fields render near-black. */
html[data-theme="light"] .auth-input:-webkit-autofill,
html[data-theme="light"] .auth-input:-webkit-autofill:hover,
html[data-theme="light"] .auth-input:-webkit-autofill:focus,
html[data-theme="light"] .auth-page input.form-control:-webkit-autofill,
html[data-theme="light"] .auth-page input.form-control:-webkit-autofill:hover,
html[data-theme="light"] .auth-page input.form-control:-webkit-autofill:focus {
  -webkit-text-fill-color: var(--text-primary);
  -webkit-box-shadow: 0 0 0 1000px #ffffff inset;
  caret-color: var(--color-primary);
}
html[data-theme="light"] .auth-forgot {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .auth-forgot:hover {
  color: var(--color-primary);
}
html[data-theme="light"] .auth-divider {
  color: var(--text-muted);
}
html[data-theme="light"] .auth-divider-line {
  background: linear-gradient(90deg, transparent, rgba(15, 23, 42, 0.16), transparent);
}

/* Country picker on /signup-mobile and /login-mobile.
   .country-toggle and .country-menu hardcode rgba(15, 23, 42, 0.9X)
   which renders as dark navy next to the white .auth-input in light
   mode — that's the "gray box" the user reported. Whiten them. */
html[data-theme="light"] .country-toggle {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-primary);
}
html[data-theme="light"] .country-toggle::after {
  border-top-color: var(--text-muted);
}
html[data-theme="light"] .country-toggle:focus,
html[data-theme="light"] .phone-group:focus-within .country-toggle {
  border-color: var(--color-primary);
}
html[data-theme="light"] .country-menu {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  box-shadow: 0 12px 36px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .country-option {
  color: var(--text-primary);
}
html[data-theme="light"] .country-option:hover,
html[data-theme="light"] .country-option:focus {
  background: rgba(16, 185, 129, 0.10);
}
html[data-theme="light"] .country-display {
  color: var(--text-primary);
}
html[data-theme="light"] .auth-google-btn {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.16);
  color: var(--text-primary);
}
html[data-theme="light"] .auth-google-btn:hover {
  background: #f8fafc;
  border-color: var(--color-primary);
}
html[data-theme="light"] .auth-footer-link {
  color: var(--text-secondary);
}
html[data-theme="light"] .auth-footer-link a {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .auth-remember {
  color: var(--text-secondary);
}

/* ============================================================
   Playground video cards (guides/index.html lines 360-462)
   ============================================================ */

html[data-theme="light"] .playground-video-card {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .playground-video-card:hover {
  border-color: var(--color-primary);
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .video-embed-slot {
  background: #f1f5f9;
  border: 1px dashed rgba(15, 23, 42, 0.16);
  color: var(--text-secondary);
}
html[data-theme="light"] .video-placeholder-icon {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .video-placeholder-label {
  color: var(--text-secondary);
}
html[data-theme="light"] .playground-video-body {
  color: var(--text-primary);
}
html[data-theme="light"] .playground-video-body h3 {
  color: var(--text-primary);
}
html[data-theme="light"] .playground-video-body p {
  color: var(--text-secondary);
}
html[data-theme="light"] .playground-video-link {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .playground-video-link:hover {
  color: var(--color-primary);
}

/* ============================================================
   .docs-hero h1 — gradient text (#e5e7eb, #a5f3fc, #6ee7b7)
   renders as pale near-white in light mode. Force solid dark slate.
   ============================================================ */

html[data-theme="light"] .docs-hero h1 {
  background: none !important;
  -webkit-background-clip: initial !important;
  background-clip: initial !important;
  -webkit-text-fill-color: var(--text-primary) !important;
  color: var(--text-primary) !important;
}

/* ============================================================
   Module cards (playground/index.html — playground hub modules)
   ============================================================
   .module-card uses var(--glass-bg) which I override. But several
   internal classes hardcode dark rgba. */

html[data-theme="light"] .module-card {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .module-card:hover {
  border-color: var(--color-primary);
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .module-content {
  color: var(--text-primary);
}
html[data-theme="light"] .module-meta,
html[data-theme="light"] .module-status {
  border: 1px solid transparent;
}
html[data-theme="light"] .module-status.live {
  background: rgba(16, 185, 129, 0.10);
  color: var(--color-primary-dark);
  border-color: rgba(16, 185, 129, 0.35);
}
html[data-theme="light"] .module-status.beta {
  background: rgba(56, 189, 248, 0.10);
  color: #0369a1;
  border-color: rgba(56, 189, 248, 0.35);
}
html[data-theme="light"] .module-status.coming {
  background: rgba(251, 191, 36, 0.12);
  color: #b45309;
  border-color: rgba(251, 191, 36, 0.40);
}
html[data-theme="light"] .module-title {
  color: var(--text-primary);
}
html[data-theme="light"] .module-tagline {
  color: var(--text-secondary);
}
html[data-theme="light"] .module-desc {
  color: var(--text-secondary);
}
html[data-theme="light"] .module-features {
  color: var(--text-secondary);
}
html[data-theme="light"] .module-features li::marker {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .module-tech {
  color: var(--text-muted);
}
html[data-theme="light"] .module-tech-tag {
  background: #f1f5f9;
  border: 1px solid rgba(15, 23, 42, 0.10);
  color: var(--text-secondary);
}
html[data-theme="light"] .module-preview {
  background: #f8fafc;
  border: 1px solid rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .preview-header {
  color: var(--text-muted);
  border-bottom-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .preview-content {
  color: var(--text-secondary);
}
html[data-theme="light"] .preview-item {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .preview-item-title {
  color: var(--text-primary);
}
html[data-theme="light"] .preview-item-text {
  color: var(--text-secondary);
}
html[data-theme="light"] .preview-note {
  color: var(--text-muted);
}

/* ============================================================
   FieldKB examples panel
   ============================================================ */

html[data-theme="light"] .fieldkb-examples-body,
html[data-theme="light"] .fieldkb-examples-cols,
html[data-theme="light"] .fieldkb-examples-col {
  background: transparent;
  color: var(--text-primary);
}
html[data-theme="light"] .fieldkb-section-label {
  color: var(--text-secondary);
}
html[data-theme="light"] .fieldkb-query-chip {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}
html[data-theme="light"] .fieldkb-query-chip:hover {
  border-color: rgba(16, 185, 129, 0.40);
}
html[data-theme="light"] .chip-lang {
  background: rgba(16, 185, 129, 0.12);
  color: var(--color-primary-dark);
  border: 1px solid rgba(16, 185, 129, 0.25);
}
html[data-theme="light"] .fieldkb-image-box,
html[data-theme="light"] .fieldkb-image-frame {
  background: #f1f5f9;
  border-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .fieldkb-image-skeleton {
  background: linear-gradient(90deg, #e2e8f0 0%, #f1f5f9 50%, #e2e8f0 100%);
}
html[data-theme="light"] .fieldkb-image-badge {
  background: rgba(255, 255, 255, 0.92);
  color: var(--text-primary);
}
html[data-theme="light"] .fieldkb-image-badge .highlight {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .fieldkb-retrieval-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}
html[data-theme="light"] .fieldkb-retrieval-label {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .fieldkb-retrieval-text {
  color: var(--text-secondary);
}

/* ============================================================
   FieldVision upload panel
   ============================================================ */

html[data-theme="light"] .upload-panel {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.10);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .selection-area {
  color: var(--text-primary);
}
html[data-theme="light"] .welcome-content {
  color: var(--text-secondary);
}
html[data-theme="light"] .welcome-content p {
  color: var(--text-secondary);
}
html[data-theme="light"] .welcome-icon {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .plant-selector {
  background: rgba(16, 185, 129, 0.04);
  border: 1px solid rgba(16, 185, 129, 0.25);
}
html[data-theme="light"] .plant-selector-label {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .plant-option {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.12);
  color: var(--text-primary);
}
html[data-theme="light"] .plant-option:hover {
  border-color: var(--color-primary);
  background: #f8fafc;
}
html[data-theme="light"] .plant-option.selected {
  background: linear-gradient(135deg, var(--color-primary-dark), var(--color-primary));
  color: #ffffff;
  border-color: var(--color-primary-dark);
}
html[data-theme="light"] .plant-option-tag {
  color: var(--text-muted);
}
html[data-theme="light"] .upload-button-container {
  /* keeps layout — no bg change needed */
}
html[data-theme="light"] .upload-btn {
  background: linear-gradient(135deg, var(--color-primary-dark), var(--color-primary));
  color: #ffffff;
  border: 1px solid var(--color-primary-dark);
}
html[data-theme="light"] .upload-btn:hover {
  filter: brightness(1.06);
}
html[data-theme="light"] .upload-btn--camera {
  background: #ffffff;
  color: var(--color-primary-dark);
  border: 1px solid var(--color-primary-dark);
}
html[data-theme="light"] .upload-btn--camera:hover {
  background: rgba(16, 185, 129, 0.06);
}
html[data-theme="light"] .status-message {
  background: rgba(56, 189, 248, 0.08);
  border: 1px solid rgba(56, 189, 248, 0.30);
  color: var(--text-primary);
}

/* ============================================================
   Developer Community (developers/help.html)
   ============================================================ */

html[data-theme="light"] .community-page { color: var(--text-primary); }
html[data-theme="light"] .community-title { color: var(--text-primary); }
html[data-theme="light"] .community-lead { color: var(--text-secondary); }
html[data-theme="light"] .community-kicker { color: var(--color-primary-dark); }

html[data-theme="light"] .community-banner {
  background: rgba(251, 191, 36, 0.12);
  border-color: rgba(251, 191, 36, 0.45);
  color: var(--text-primary);
}
html[data-theme="light"] .community-banner.signed-out {
  background: rgba(56, 189, 248, 0.10);
  border-color: rgba(56, 189, 248, 0.40);
}
html[data-theme="light"] .community-banner a {
  color: var(--color-primary-dark);
}

html[data-theme="light"] .community-composer {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .community-composer label {
  color: var(--text-secondary);
}
html[data-theme="light"] .community-composer input,
html[data-theme="light"] .community-composer textarea,
html[data-theme="light"] .community-reply-composer textarea {
  background: #f8fafc;
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-primary);
}
html[data-theme="light"] .community-composer input::placeholder,
html[data-theme="light"] .community-composer textarea::placeholder,
html[data-theme="light"] .community-reply-composer textarea::placeholder {
  color: #94a3b8;
}
html[data-theme="light"] .community-composer input:focus,
html[data-theme="light"] .community-composer textarea:focus,
html[data-theme="light"] .community-reply-composer textarea:focus {
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.18);
}

html[data-theme="light"] .community-btn-primary {
  background: var(--color-primary-dark);
  color: #ffffff;
  border-color: var(--color-primary-dark);
}
html[data-theme="light"] .community-btn-secondary {
  background: #ffffff;
  color: var(--text-primary);
  border-color: rgba(15, 23, 42, 0.16);
}
html[data-theme="light"] .community-btn-secondary:hover {
  background: #f8fafc;
  border-color: var(--color-primary);
}

html[data-theme="light"] .community-empty {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.12);
  color: var(--text-muted);
}
html[data-theme="light"] .community-empty a {
  color: var(--color-primary-dark);
}

html[data-theme="light"] .community-thread {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .community-avatar {
  background: rgba(16, 185, 129, 0.12);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .community-author-name { color: var(--text-primary); }
html[data-theme="light"] .community-timestamp { color: var(--text-muted); }
html[data-theme="light"] .community-post-title { color: var(--text-primary); }
html[data-theme="light"] .community-post-body,
html[data-theme="light"] .community-reply-body { color: var(--text-secondary); }

html[data-theme="light"] .community-thread-actions {
  border-top-color: rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .community-action {
  color: var(--text-secondary);
}
html[data-theme="light"] .community-action:hover {
  background: rgba(16, 185, 129, 0.08);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .community-action.voted {
  color: var(--color-primary-dark);
  background: rgba(16, 185, 129, 0.10);
}
html[data-theme="light"] .community-action.danger:hover {
  background: rgba(239, 68, 68, 0.10);
  color: #b91c1c;
}

html[data-theme="light"] .community-replies {
  border-left-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .community-reply {
  border-bottom-color: rgba(15, 23, 42, 0.08);
}

/* ============================================================
   Playground workspace nav + mode tabs (playground_shared.css)
   ============================================================
   The nav bar at the top of every playground hardcodes
   `background: rgba(7, 10, 18, 0.97)` at line 36 AND
   `rgba(2, 6, 23, 0.98) !important` at line 361 — both are dark
   navy that bleed through in light mode. Override with !important
   to beat the line-361 rule. */

html[data-theme="light"] .pg-workspace-nav {
  background: rgba(248, 250, 252, 0.96) !important;
  border-bottom: 1px solid rgba(15, 23, 42, 0.10) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

html[data-theme="light"] .pg-mode-tab {
  color: var(--text-secondary) !important;
}
html[data-theme="light"] .pg-mode-tab:hover {
  background: rgba(16, 185, 129, 0.08) !important;
  color: var(--color-primary-dark) !important;
  border-color: transparent !important;
}
html[data-theme="light"] .pg-mode-tab.active {
  background: rgba(16, 185, 129, 0.12) !important;
  border-color: rgba(16, 185, 129, 0.40) !important;
  color: var(--color-primary-dark) !important;
}
html[data-theme="light"] .pg-mode-tab i {
  opacity: 1;
}

/* Other shared workspace shell elements forced dark with !important
   at lines 367-374 of playground_shared.css. */
html[data-theme="light"] .pg-context-bar,
html[data-theme="light"] .pg-tool-header {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
}

html[data-theme="light"] .pg-workspace-actions {
  color: var(--text-primary);
}

/* ============================================================
   Playground tool intro band (.pg-tool-header + .pg-tool-intro)
   ============================================================
   playground_shared.css lines 203 + 264 + 369 force this region
   dark with rgba(2,6,23,0.72)!important. Override harder. The
   intro band carries the "FieldX is the X layer" page descriptor
   that's been showing as a dark grey strip across all playgrounds. */

html[data-theme="light"] .pg-tool-header,
html[data-theme="light"] .pg-tool-intro,
html[data-theme="light"] .pg-tool-intro.expanded {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
}
html[data-theme="light"] .pg-tool-title {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .pg-tool-desc {
  color: var(--text-secondary) !important;
}
html[data-theme="light"] .pg-tool-about-btn {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-secondary);
}
html[data-theme="light"] .pg-tool-about-btn:hover {
  background: #f8fafc;
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .pg-tool-intro.expanded {
  border-bottom-color: rgba(15, 23, 42, 0.10) !important;
}

/* ============================================================
   Force .module-card + sibling containers to white with !important
   ============================================================
   Earlier override existed but the cascade lost. !important guarantees. */
html[data-theme="light"] .module-card {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
}
html[data-theme="light"] .module-card::before {
  display: none;
}
html[data-theme="light"] .module-layout,
html[data-theme="light"] .module-content {
  background: transparent !important;
  color: var(--text-primary);
}
html[data-theme="light"] .module-features li {
  color: var(--text-secondary);
}

/* ============================================================
   products/fieldstate.html — fs-cap-card family + tinted band
   ============================================================
   Screenshot 1 root cause: .fs-section-tinted (rgba 0.24 band) +
   .fs-cap-card (rgba 0.58 cards) hardcoded dark, no token. */

html[data-theme="light"] .fs-section-tinted {
  background: #f1f5f9 !important;
  border-top: 1px solid rgba(15, 23, 42, 0.08);
  border-bottom: 1px solid rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .fs-cap-card {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .fs-cap-card:hover {
  border-color: rgba(16, 185, 129, 0.40) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .fs-cap-icon {
  background: rgba(16, 185, 129, 0.10);
  color: var(--color-primary-dark);
  border: 1px solid rgba(16, 185, 129, 0.30);
}
html[data-theme="light"] .fs-cap-title {
  color: var(--text-primary);
}
html[data-theme="light"] .fs-cap-desc {
  color: var(--text-secondary);
}
html[data-theme="light"] .fs-cap-tag {
  background: rgba(16, 185, 129, 0.10);
  color: var(--color-primary-dark);
  border: 1px solid rgba(16, 185, 129, 0.25);
}

/* fs-loop-step (used in other fieldstate marketing sections) */
html[data-theme="light"] .fs-loop-step {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
}
html[data-theme="light"] .fs-loop-step:hover {
  border-color: rgba(16, 185, 129, 0.40) !important;
}
html[data-theme="light"] .fs-loop-prose p,
html[data-theme="light"] .fs-loop-prose strong {
  color: var(--text-primary);
}

/* ============================================================
   FieldKB examples accordion summary (Screenshot 3)
   ============================================================ */
html[data-theme="light"] .fieldkb-examples-summary {
  background: #f8fafc !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
}
html[data-theme="light"] .fieldkb-examples-summary:hover {
  background: rgba(16, 185, 129, 0.06) !important;
  border-color: rgba(16, 185, 129, 0.30) !important;
}

/* Other dark fieldkb containers — wide net, force light */
html[data-theme="light"] [class^="fieldkb-"][class*="-card"],
html[data-theme="light"] [class^="fieldkb-"][class*="-panel"],
html[data-theme="light"] [class^="fieldkb-"][class*="-shell"],
html[data-theme="light"] [class^="fieldkb-"][class*="-frame"],
html[data-theme="light"] [class^="fieldkb-"][class*="-box"]:not(.fieldkb-image-box):not(.fieldkb-image-frame),
html[data-theme="light"] [class^="fieldkb-"][class*="-row"] {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}

/* ============================================================
   FieldVision welcome content + selection area (Screenshot 5)
   ============================================================
   .welcome-content p uses --fv-text-secondary; .upload-panel uses
   --fv-bg-elevated. Both are overridden via tokens — but force
   the surface to white in case anything resists. */
html[data-theme="light"] .upload-panel,
html[data-theme="light"] .selection-area {
  background: #ffffff !important;
  color: var(--text-primary);
}
html[data-theme="light"] .welcome-content {
  color: var(--text-primary);
}
html[data-theme="light"] .welcome-content p {
  color: var(--text-secondary) !important;
}
html[data-theme="light"] .welcome-icon {
  color: var(--color-primary-dark);
}

/* ============================================================
   FieldMap selection panel (Screenshot 2 — country/region/district)
   ============================================================ */
html[data-theme="light"] .selection-pills,
html[data-theme="light"] .selection-panel,
html[data-theme="light"] [class*="selection-pill"],
html[data-theme="light"] .fieldmap-page .breadcrumb-row,
html[data-theme="light"] .fieldmap-page .step-pills {
  background: #f8fafc !important;
  border: 1px solid rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}
html[data-theme="light"] .fieldmap-page .step-pill,
html[data-theme="light"] .fieldmap-page .pill {
  background: #ffffff;
  border: 1px solid rgba(16, 185, 129, 0.25);
  color: var(--color-primary-dark);
}

/* ============================================================
   "Useful technology should not require perfect infrastructure"
   section on /products/ — .mobile-* family
   ============================================================ */

html[data-theme="light"] .mobile-container,
html[data-theme="light"] .mobile-grid,
html[data-theme="light"] .mobile-narrative {
  color: var(--text-primary);
}
html[data-theme="light"] .mobile-feature {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .mobile-feature:hover {
  border-color: rgba(16, 185, 129, 0.40) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .mobile-feature-title {
  color: var(--text-primary);
}
html[data-theme="light"] .mobile-feature-text {
  color: var(--text-secondary);
}
html[data-theme="light"] .mobile-narrative p {
  color: var(--text-secondary);
}

/* ============================================================
   "Ready to Explore More?" CTA + workflow steps on /playground/explore
   ============================================================ */

html[data-theme="light"] .cta-container {
  background:
    radial-gradient(circle at top left, rgba(16, 185, 129, 0.04), transparent 55%),
    #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .cta-container::before,
html[data-theme="light"] .cta-container::after {
  display: none !important;
}
html[data-theme="light"] .cta-title {
  color: var(--text-primary);
}
html[data-theme="light"] .cta-subtitle {
  color: var(--text-secondary);
}
html[data-theme="light"] .btn-cta-primary {
  background: var(--color-primary-dark) !important;
  color: #ffffff !important;
  border: 1px solid var(--color-primary-dark) !important;
}
html[data-theme="light"] .btn-cta-secondary,
html[data-theme="light"] .btn-cta-ghost {
  background: #ffffff !important;
  color: var(--text-primary) !important;
  border: 1px solid rgba(15, 23, 42, 0.16) !important;
}

/* Workflow steps grid (Step 01 Input Capture, Step 02 Context Collection, etc.) */
html[data-theme="light"] .workflow-container,
html[data-theme="light"] .workflow-intro {
  background: transparent !important;
  color: var(--text-primary);
}
html[data-theme="light"] .workflow-intro-text {
  color: var(--text-secondary);
}
html[data-theme="light"] .workflow-step {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .workflow-step:hover {
  border-color: rgba(16, 185, 129, 0.40) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .workflow-step-number {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .workflow-step-title {
  color: var(--text-primary);
}
html[data-theme="light"] .workflow-step-text {
  color: var(--text-secondary);
}

/* ============================================================
   FieldAudio playground — .fa-panel family (Screenshot 4)
   ============================================================
   fieldaudio_playground.css lines 134, 148, 588 use --fa-* tokens
   which are overridden in the global --fa-* block above, but the
   panel containers also have hardcoded shadows/borders that read
   as grey on white. Force the surfaces white. */

html[data-theme="light"] .fa-playground-wrap {
  background: transparent;
  color: var(--text-primary);
}
html[data-theme="light"] .fa-panel,
html[data-theme="light"] .fa-panel-input,
html[data-theme="light"] .fa-panel-output {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
  color: var(--text-primary);
}
html[data-theme="light"] .fa-panel-header {
  background: transparent !important;
  border-bottom: 1px solid rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .fa-panel-label {
  color: var(--text-secondary);
}
html[data-theme="light"] .fa-output-empty {
  background: #f8fafc !important;
  border: 1px dashed rgba(15, 23, 42, 0.16);
  color: var(--text-muted);
}
html[data-theme="light"] .fa-output-empty i {
  color: var(--text-muted);
  opacity: 0.4;
}
html[data-theme="light"] .fa-output-empty p {
  color: var(--text-secondary);
}
html[data-theme="light"] .fa-output-results {
  background: #ffffff;
}
html[data-theme="light"] .fa-result-section {
  background: #f8fafc;
  border: 1px solid rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .fa-result-section-header {
  background: transparent;
  color: var(--text-primary);
  border-bottom: 1px solid rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .fa-result-section-header i {
  color: var(--color-primary-dark);
}

/* FieldAudio segment toggles (Voice / Text) + the "Press Record to start" block */
html[data-theme="light"] .fa-segment {
  background: #f1f5f9 !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-secondary);
}
html[data-theme="light"] .fa-segment.active,
html[data-theme="light"] .fa-segment-btn.active {
  background: rgba(16, 185, 129, 0.12) !important;
  border-color: rgba(16, 185, 129, 0.40) !important;
  color: var(--color-primary-dark) !important;
}
html[data-theme="light"] .fa-locale-pill,
html[data-theme="light"] .fa-time-pill,
html[data-theme="light"] .fa-size-pill {
  background: #ffffff;
  border: 1px solid rgba(15, 23, 42, 0.12);
  color: var(--text-secondary);
}

/* ============================================================
   .fv-badge — "Decision Support, Not Final Lab Confirmation"
   ============================================================
   fieldvision_playground.css line 255 hardcodes
   `background: rgba(15, 22, 41, 0.8)`. No token, so the global
   --fv-* override can't reach it. Force directly. */

html[data-theme="light"] .fv-badge {
  background: #f1f5f9 !important;
  border-color: rgba(15, 23, 42, 0.12) !important;
  color: var(--text-secondary) !important;
}
html[data-theme="light"] .fv-badge.green {
  background: rgba(16, 185, 129, 0.10) !important;
  border-color: rgba(16, 185, 129, 0.40) !important;
  color: var(--color-primary-dark) !important;
}

/* ============================================================
   FieldAudio visualiser idle ("Press Record to start")
   ============================================================
   fieldaudio_playground.css line 326 hardcodes
   `.fa-visualiser-wrap { background: rgba(2, 6, 23, 0.6); }`.
   That's what produces the dark band wrapping the "Press Record"
   label in the playground. */

html[data-theme="light"] .fa-visualiser-wrap {
  background: #f1f5f9 !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
}
html[data-theme="light"] .fa-visualiser-idle {
  color: var(--text-secondary) !important;
}
html[data-theme="light"] .fa-visualiser-idle i {
  color: var(--color-primary-dark) !important;
  opacity: 0.85;
}

/* ============================================================
   FieldState "My Field" context bar + meta pills + empty state
   ============================================================
   .fs-context uses var(--fs-surface-deep) which IS overridden in
   the global --fs-* light block, but force directly to be safe.
   .fs-cpill uses var(--fs-surface-raised) — same treatment.
   .fs-empty-state has no explicit bg but the visible dark card in
   the screenshot suggests an ancestor or pseudo styling — defensive
   override on the empty-state itself plus the #fsAttnContainer. */

html[data-theme="light"] .fs-context {
  background: #ffffff !important;
  border-bottom-color: rgba(15, 23, 42, 0.10) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}
html[data-theme="light"] .fs-context-name {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fs-context-switch {
  border-color: rgba(15, 23, 42, 0.14);
  color: var(--text-secondary);
}
html[data-theme="light"] .fs-context-switch:hover {
  border-color: rgba(16, 185, 129, 0.40);
  background: rgba(16, 185, 129, 0.08);
  color: var(--color-primary-dark);
}

html[data-theme="light"] .fs-cpill {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.14) !important;
  color: var(--text-secondary) !important;
}
html[data-theme="light"] .fs-cpill-crop {
  background: rgba(16, 185, 129, 0.10) !important;
  border-color: rgba(16, 185, 129, 0.40) !important;
  color: var(--color-primary-dark) !important;
}

/* Empty state: force transparent so any parent dark bg doesn't bleed
   through, and ensure the card-shaped element gets a clean light surface */
html[data-theme="light"] .fs-empty-state {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10);
  border-radius: var(--fs-radius, 0.875rem);
  color: var(--text-secondary) !important;
  padding: 2rem 1.5rem;
}
html[data-theme="light"] .fs-empty-state .fs-empty-icon {
  color: var(--text-muted);
  opacity: 0.4;
}
html[data-theme="light"] .fs-empty-state .fs-empty-title {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fs-empty-state .fs-empty-desc {
  color: var(--text-secondary) !important;
}
html[data-theme="light"] .fs-empty-state .fs-guidance-link {
  background: #f8fafc !important;
  border-color: rgba(15, 23, 42, 0.12) !important;
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fs-empty-state .fs-guidance-link:hover {
  background: rgba(16, 185, 129, 0.06) !important;
  border-color: rgba(16, 185, 129, 0.35) !important;
  color: var(--color-primary-dark) !important;
}

/* Defensive: ID-targeted backstop so any inline dark style on the
   attention container is overridden in light mode. */
html[data-theme="light"] #fsAttnContainer {
  background: transparent !important;
}

/* ============================================================
   FieldState attention cards (.fs-attn family) — used when there
   ARE active items. Forcing light treatment defensively.
   ============================================================ */
html[data-theme="light"] .fs-attn {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
}
html[data-theme="light"] .fs-attn-title {
  color: var(--text-primary);
}
html[data-theme="light"] .fs-attn-why,
html[data-theme="light"] .fs-attn-source {
  color: var(--text-secondary);
}

/* ============================================================
   FieldKB chat shell — fieldkb-chat-section, chat-header,
   chat-controls-bar, welcome-message (all hardcoded dark rgba)
   ============================================================ */

html[data-theme="light"] .fieldkb-chat-section {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06) !important;
}
html[data-theme="light"] .chat-header {
  background: #f8fafc !important;
  border-bottom: 1px solid rgba(15, 23, 42, 0.08) !important;
  color: var(--text-primary);
}
html[data-theme="light"] .chat-header-left h5 {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .chat-logo {
  background: rgba(16, 185, 129, 0.12);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .chat-controls-bar {
  background: #f8fafc !important;
  border-top: 1px solid rgba(15, 23, 42, 0.08) !important;
  border-bottom: 1px solid rgba(15, 23, 42, 0.08) !important;
  color: var(--text-secondary);
}
html[data-theme="light"] .chat-messages {
  background: #ffffff;
}
html[data-theme="light"] .chat-messages::-webkit-scrollbar-track {
  background: #f1f5f9;
}
html[data-theme="light"] .chat-messages::-webkit-scrollbar-thumb {
  background: rgba(15, 23, 42, 0.25);
}
html[data-theme="light"] .welcome-message {
  background: #f8fafc !important;
  border: 1px dashed rgba(15, 23, 42, 0.16) !important;
  color: var(--text-primary);
}
html[data-theme="light"] .welcome-message h4 {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .welcome-message p {
  color: var(--text-secondary) !important;
}
html[data-theme="light"] .crop-support-notice {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
}

/* ============================================================
   FieldMap shell — playground-shell, helper-bar, helper-step,
   map-content-wrapper
   ============================================================ */

html[data-theme="light"] .fieldmap-section .playground-shell {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06) !important;
}
html[data-theme="light"] .playground-title {
  color: var(--text-primary) !important;
  text-shadow: none !important;
}
html[data-theme="light"] .playground-subtitle {
  color: var(--text-secondary);
}
html[data-theme="light"] .helper-bar {
  background: #f8fafc !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
}
html[data-theme="light"] .helper-step {
  background: rgba(99, 102, 241, 0.08) !important;
  border: 1px solid rgba(99, 102, 241, 0.35) !important;
  color: #4338ca !important;  /* indigo-700 — readable on white */
}
html[data-theme="light"] .helper-note {
  color: var(--text-muted) !important;
}
html[data-theme="light"] .map-content-wrapper {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
}

/* ============================================================
   Beat playground_shared.css line 554 forced-dark group
   ============================================================
   That rule sets `background: rgba(2, 6, 23, 0.58) !important` on
   a group of FieldState cards + notices. We override each in
   light mode with !important + higher specificity. */

html[data-theme="light"] .fs-report-card,
html[data-theme="light"] .fs-feed-item,
html[data-theme="light"] .fs-feed-detail,
html[data-theme="light"] .fs-recommendation-card,
html[data-theme="light"] .fs-auth-wall {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
}

/* The playground-mode amber notice — restore the amber tint that
   was steamrolled by the line-554 forced-dark rule. */
html[data-theme="light"] .fs-footer-notice {
  background: rgba(251, 191, 36, 0.12) !important;
  border: 1px solid rgba(251, 191, 36, 0.40) !important;
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fs-footer-notice > i,
html[data-theme="light"] .fs-footer-notice strong {
  color: #b45309 !important;  /* amber-700 */
}

/* ============================================================
   Beat playground_shared.css line 634 forced-pale-text
   ============================================================
   That rule sets `color: rgba(148, 163, 184, 0.84) !important` +
   pale slate border on footer notes — invisible on white. */

html[data-theme="light"] .fv-footer-note,
html[data-theme="light"] .fieldkb-footer-note,
html[data-theme="light"] .pg-ai-disclaimer {
  color: var(--text-secondary) !important;
  border-top-color: rgba(15, 23, 42, 0.10) !important;
}

/* ============================================================
   FieldMap chat shell — chat-container, chat-context, chat-input-*
   ============================================================
   fieldmap_playground.css lines 867-1090 use rgba(15, 23, 42, 0.3-0.5)
   hardcoded across the chat structure. The .chat-context pill
   *looked* green in the screenshot because of its emerald left-
   border accent over the dark navy body — actual bg is dark navy. */

html[data-theme="light"] .fieldmap-page .chat-container {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
}
html[data-theme="light"] .fieldmap-page .chat-context {
  background: rgba(16, 185, 129, 0.06) !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  border-left: 3px solid var(--color-primary-dark) !important;
  color: var(--text-secondary) !important;
}
html[data-theme="light"] .fieldmap-page .chat-input-area {
  background: #f8fafc !important;
  border-top: 1px solid rgba(15, 23, 42, 0.08) !important;
}
html[data-theme="light"] .fieldmap-page .chat-input-wrapper {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.14) !important;
}
html[data-theme="light"] .fieldmap-page .chat-input-wrapper:focus-within {
  border-color: var(--color-primary) !important;
  box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.15) !important;
}
html[data-theme="light"] .fieldmap-page .chat-message.user {
  background: rgba(16, 185, 129, 0.10);
  border: 1px solid rgba(16, 185, 129, 0.30);
  color: var(--text-primary);
}
html[data-theme="light"] .fieldmap-page .chat-message.assistant {
  background: #f1f5f9;
  border: 1px solid rgba(15, 23, 42, 0.08);
  color: var(--text-primary);
}

/* The FieldMap right panel — content-panel + tab-navigation + tab-content */
html[data-theme="light"] .fieldmap-page .content-panel {
  background: #ffffff !important;
}
html[data-theme="light"] .fieldmap-page .tab-navigation {
  border-bottom: 1px solid rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .fieldmap-page .tab-btn {
  color: var(--text-secondary);
  background: transparent;
}
html[data-theme="light"] .fieldmap-page .tab-btn:hover {
  background: rgba(16, 185, 129, 0.05);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .fieldmap-page .tab-btn.active {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .fieldmap-page .tab-content {
  background: transparent;
}

/* ============================================================
   FieldMap "About this tool" cards — .purpose-card, .howto-container
   ============================================================
   .purpose-card uses rgba(251, 191, 36, 0.08) amber — visible but
   too pale on white. .howto-container is emerald-tinted. Defensive
   overrides with !important so they look intentional. */

html[data-theme="light"] .purpose-card {
  background: rgba(251, 191, 36, 0.10) !important;
  border: 1px solid rgba(251, 191, 36, 0.40) !important;
  color: var(--text-primary);
}
html[data-theme="light"] .purpose-card-label {
  color: #b45309 !important;  /* amber-700 — readable on light */
}
html[data-theme="light"] .purpose-card-text {
  color: var(--text-primary) !important;
}

html[data-theme="light"] .howto-container {
  background: rgba(16, 185, 129, 0.06) !important;
  border: 1px dashed rgba(16, 185, 129, 0.40) !important;
  color: var(--text-primary);
}
html[data-theme="light"] .howto-step {
  color: var(--text-primary);
}
html[data-theme="light"] .howto-step-title {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .howto-step-text {
  color: var(--text-secondary) !important;
}

/* FieldMap drill-down screenshots — dark-mode frames read as dark slate on
   a white container, drop the frame to a soft white card with subtle border. */
html[data-theme="light"] .fieldmap-screenshots {
  border-top-color: rgba(16, 185, 129, 0.30) !important;
}
html[data-theme="light"] .fieldmap-shot-frame {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 2px 10px rgba(15, 23, 42, 0.06) !important;
}
html[data-theme="light"] .fieldmap-shot figcaption {
  color: var(--text-secondary) !important;
}

/* Features grid in the same About-this-tool section */
html[data-theme="light"] .features-grid .feature-card,
html[data-theme="light"] .features-grid > div {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
}

/* ============================================================
   FieldKB feature cards in the About-this-tool intro
   ============================================================
   .fieldkb-feature-card uses var(--glass-bg) — should already
   light via token override, but force explicitly for the cards
   shown in screenshot 1 (the 01/02/03 cards). */

html[data-theme="light"] .fieldkb-feature-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
  color: var(--text-primary);
  backdrop-filter: none !important;
}
html[data-theme="light"] .fieldkb-feature-card:hover {
  border-color: var(--color-primary) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08), 0 0 24px rgba(16, 185, 129, 0.10) !important;
}
html[data-theme="light"] .fieldkb-feature-number {
  color: var(--color-primary-dark) !important;
}
html[data-theme="light"] .fieldkb-feature-title {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fieldkb-feature-text {
  color: var(--text-secondary) !important;
}

/* ============================================================
   FieldKB examples drawer (the collapsible "See example queries")
   ============================================================ */

html[data-theme="light"] .fieldkb-examples-drawer {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
}
html[data-theme="light"] .fieldkb-examples-summary {
  color: var(--text-secondary);
}
html[data-theme="light"] .fieldkb-examples-summary[open],
html[data-theme="light"] .fieldkb-examples-drawer[open] .fieldkb-examples-summary {
  color: var(--text-primary);
}
html[data-theme="light"] .fieldkb-examples-body {
  background: transparent !important;
  border-top: 1px solid rgba(15, 23, 42, 0.10) !important;
}
html[data-theme="light"] .fieldkb-examples-cols,
html[data-theme="light"] .fieldkb-examples-col {
  background: transparent;
  color: var(--text-primary);
}
html[data-theme="light"] .fieldkb-examples-chevron {
  color: var(--text-secondary);
}

/* Help-tip ("?" icon next to "See example queries") */
html[data-theme="light"] .fieldkb-help-tip,
html[data-theme="light"] .fieldkb-help-tip--inline {
  color: var(--text-muted);
}
html[data-theme="light"] .fieldkb-help-tip:hover,
html[data-theme="light"] .fieldkb-help-tip:focus-visible {
  color: var(--color-primary-dark);
}

/* ============================================================
   FieldKB chat composer (input-container, message-input, send-btn)
   ============================================================
   .message-input hardcodes rgba(10, 15, 26, 0.72). */

html[data-theme="light"] .input-container {
  background: transparent;
}
html[data-theme="light"] .message-input {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.16) !important;
  color: var(--text-primary) !important;
}
html[data-theme="light"] .message-input::placeholder {
  color: #94a3b8 !important;
}
html[data-theme="light"] .message-input:focus {
  border-color: var(--color-primary) !important;
  box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.15) !important;
}
html[data-theme="light"] .send-btn {
  /* Keep the emerald->sky gradient — it's the brand action */
  color: #ffffff !important;
  box-shadow: 0 4px 12px rgba(16, 185, 129, 0.20) !important;
}
html[data-theme="light"] .input-helper {
  color: var(--text-muted) !important;
}
html[data-theme="light"] .image-search-on-hint {
  color: var(--color-primary-dark) !important;
}

/* ============================================================
   Playground hub — section bands + capability + source cards + CTA
   (playground/index.html — page-local <style> block)
   ============================================================ */

html[data-theme="light"] .playground-section-alt {
  background: transparent !important;
}

/* Capability cards (the 6 "Review Crop Problems / Search Agricultural
   Information / etc." cards) — use var(--glass-bg), token override
   should reach but force defensively. */
html[data-theme="light"] .capabilities-grid .capability-card,
html[data-theme="light"] .capability-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
  backdrop-filter: none !important;
  color: var(--text-primary);
}
html[data-theme="light"] .capability-card:hover {
  border-color: var(--color-primary) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08) !important;
}
html[data-theme="light"] .capability-tag {
  background: rgba(16, 185, 129, 0.10);
  color: var(--color-primary-dark);
  border: 1px solid rgba(16, 185, 129, 0.30);
}
html[data-theme="light"] .capability-title {
  color: var(--text-primary);
}
html[data-theme="light"] .capability-text {
  color: var(--text-secondary);
}

/* Source cards (Transparent Data & Licensing section) */
html[data-theme="light"] .sources-grid .source-card,
html[data-theme="light"] .source-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
  backdrop-filter: none !important;
  color: var(--text-primary);
}
html[data-theme="light"] .source-abbrev {
  background: rgba(16, 185, 129, 0.10);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .source-title {
  color: var(--text-primary);
}
html[data-theme="light"] .source-desc,
html[data-theme="light"] .source-items {
  color: var(--text-secondary);
}
html[data-theme="light"] .source-items li {
  color: var(--text-secondary);
}
html[data-theme="light"] .source-items li::marker {
  color: var(--color-primary-dark);
}

/* CTA section wrapper (the outer band around "Ready to Explore More?") */
html[data-theme="light"] .cta-section {
  background: transparent !important;
}

/* ============================================================
   FieldVision diff section (.fv-diff-* — "Why this image-supported
   workflow is different")
   ============================================================
   .fv-diff-card uses var(--fv-bg-card) — token-overridden, but
   force for cascade safety. */

html[data-theme="light"] .fv-diff-section {
  background: transparent;
  color: var(--text-primary);
}
html[data-theme="light"] .fv-diff-title {
  color: var(--text-primary);
}
html[data-theme="light"] .fv-diff-subtitle {
  color: var(--text-secondary);
}
html[data-theme="light"] .fv-diff-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary);
}
html[data-theme="light"] .fv-diff-card:hover {
  border-color: var(--color-primary) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08), 0 0 24px rgba(16, 185, 129, 0.10) !important;
  transform: translateY(-2px);
}
html[data-theme="light"] .fv-diff-card-icon {
  color: var(--color-primary-dark);
  background: rgba(16, 185, 129, 0.10);
}
html[data-theme="light"] .fv-diff-card-title {
  color: var(--text-primary);
}
html[data-theme="light"] .fv-diff-card-text {
  color: var(--text-secondary);
}

/* ============================================================
   FieldMap tab navigation (Region info / FieldChat / Settings tabs)
   ============================================================
   Earlier override scoped to .fieldmap-page; here add a more
   generic version too for any playground using .tab-navigation. */

html[data-theme="light"] .tab-navigation {
  border-bottom: 1px solid rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .tab-btn {
  color: var(--text-secondary);
  background: transparent;
}
html[data-theme="light"] .tab-btn:hover {
  color: var(--color-primary-dark);
  background: rgba(16, 185, 129, 0.05);
}
html[data-theme="light"] .tab-btn.active {
  color: var(--color-primary-dark);
}

/* ============================================================
   Playground hub "About" info-cards (Experimental Features /
   Your Feedback Matters / Not a Replacement for Expertise)
   ============================================================ */

html[data-theme="light"] .info-grid {
  background: transparent;
}
html[data-theme="light"] .info-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  color: var(--text-primary);
}
html[data-theme="light"] .info-card:hover {
  border-color: var(--color-primary) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .info-card-title {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .info-card-text {
  color: var(--text-secondary) !important;
}

/* ============================================================
   FieldState empty snapshot card (.fs-state-card-empty + .fs-state-empty)
   ============================================================
   .fs-state-card was overridden earlier (forced-dark group); the
   empty variant inherits but needs its text colour adjusted. */

html[data-theme="light"] .fs-state-card-empty {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
}
html[data-theme="light"] .fs-state-empty {
  color: var(--text-secondary) !important;
}

/* ============================================================
   docs/index.html — overview page
   ============================================================
   Page-local <style> block uses rgba(15, 23, 42, 0.96) on every
   surface (.quick-start-card, .local-feature, .api-section,
   .resources-section, .additional-links, .resource-link,
   .resource-icon, .doc-link, .fv-btn-secondary). Override each. */

html[data-theme="light"] .quick-start-card {
  background:
    radial-gradient(circle at top left, rgba(56, 189, 248, 0.06), transparent 55%),
    #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .quick-start-label {
  color: var(--text-muted);
}
html[data-theme="light"] .quick-start-steps {
  color: var(--text-secondary);
}

/* "What makes guidance local" — the 4-card row that was the
   first thing the user flagged as dark on /docs */
html[data-theme="light"] .local-feature {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .local-feature h3 {
  color: var(--text-primary);
}
html[data-theme="light"] .local-feature p {
  color: var(--text-secondary);
}

/* API references / Resources / Additional links — the big
   wrapping panels. Light, slightly tinted to separate from page. */
html[data-theme="light"] .api-section,
html[data-theme="light"] .resources-section,
html[data-theme="light"] .additional-links {
  background: #f8fafc;
  border-color: rgba(15, 23, 42, 0.08);
  color: var(--text-primary);
}

/* Resource link cards inside .resources-section */
html[data-theme="light"] .resource-link {
  background:
    radial-gradient(circle at top left, rgba(56, 189, 248, 0.05), transparent 55%),
    #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}
html[data-theme="light"] .resource-link:hover {
  border-color: var(--color-primary);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .resource-icon {
  background: #f1f5f9;
  border-color: rgba(15, 23, 42, 0.12);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .resource-info h3 {
  color: var(--text-primary);
}
html[data-theme="light"] .resource-info p {
  color: var(--text-secondary);
}

/* .doc-link pills in .additional-links */
html[data-theme="light"] .doc-link {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-secondary);
}
html[data-theme="light"] .doc-link:hover {
  background: rgba(16, 185, 129, 0.06);
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

/* The note paragraph below the API section */
html[data-theme="light"] .api-section-note {
  color: var(--text-muted);
}

/* ============================================================
   casestudies/index.html — overview page
   ============================================================ */

html[data-theme="light"] .case-card {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .case-card:hover {
  border-color: var(--color-primary);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .case-title {
  color: var(--text-primary);
}
html[data-theme="light"] .case-region,
html[data-theme="light"] .case-metrics {
  color: var(--text-muted);
}
html[data-theme="light"] .case-summary {
  color: var(--text-secondary);
}
html[data-theme="light"] .case-tag {
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-secondary);
  background: transparent;
}

/* .group-card — the "How to read these case studies" two-column row */
html[data-theme="light"] .group-card {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .group-card h2,
html[data-theme="light"] .group-card h3 {
  color: var(--text-primary);
}
html[data-theme="light"] .group-card p,
html[data-theme="light"] .group-card li,
html[data-theme="light"] .group-card ul {
  color: var(--text-secondary);
}
html[data-theme="light"] .note-small {
  color: var(--text-muted);
}
html[data-theme="light"] .note-small strong {
  color: var(--color-primary-dark);
}

/* ============================================================
   casestudies/fieldaudio_case_study.html — detail page
   ============================================================ */

html[data-theme="light"] .case-hero {
  background:
    radial-gradient(circle at top left, rgba(56, 189, 248, 0.06), transparent 55%),
    #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .case-hero h1,
html[data-theme="light"] .case-hero .lead {
  color: var(--text-primary);
}
html[data-theme="light"] .case-hero-meta {
  color: var(--text-secondary);
}
html[data-theme="light"] .case-hero-meta span {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.12);
  color: var(--text-secondary);
}

html[data-theme="light"] .case-side-card {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .case-side-card h3,
html[data-theme="light"] .case-section-label {
  color: var(--text-primary);
}
html[data-theme="light"] .case-side-card p,
html[data-theme="light"] .case-side-card li {
  color: var(--text-secondary);
}

html[data-theme="light"] .case-highlight-box {
  background:
    radial-gradient(circle at top left, rgba(52, 211, 153, 0.08), transparent 55%),
    #f8fafc;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}
html[data-theme="light"] .case-highlight-box h3 {
  color: var(--color-primary-dark);
}

html[data-theme="light"] .case-problem-item,
html[data-theme="light"] .case-reason-item {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 1px 4px rgba(15, 23, 42, 0.04);
}
html[data-theme="light"] .case-problem-item h3,
html[data-theme="light"] .case-reason-item h3 {
  color: var(--text-primary);
}
html[data-theme="light"] .case-problem-item p,
html[data-theme="light"] .case-reason-item p {
  color: var(--text-secondary);
}

/* ============================================================
   Guide / blog / case detail pages — .fv-guide-* shared chrome
   ============================================================
   Shared across:
     - guides/taking_good_diagnostic_photos.html
     - guides/using_field_vision.html
     - blogs/why_context.html
   These reuse one CSS family for the page bg, breadcrumb pill,
   and the docs/guides/case-studies nav row. */

html[data-theme="light"] .fv-guide-page {
  background:
    radial-gradient(circle at 0% 0%, rgba(56, 189, 248, 0.06), transparent 55%),
    radial-gradient(circle at 100% 100%, rgba(52, 211, 153, 0.05), transparent 55%),
    #f8fafc;
  color: var(--text-primary);
}

html[data-theme="light"] .fv-guide-path {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.12);
  color: var(--text-secondary);
}
html[data-theme="light"] .fv-guide-path a {
  color: var(--text-secondary);
}
html[data-theme="light"] .fv-guide-path a:hover,
html[data-theme="light"] .fv-guide-path-current {
  color: var(--text-primary);
}

html[data-theme="light"] .fv-guide-nav-link {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.14);
  color: var(--text-secondary);
}
html[data-theme="light"] .fv-guide-nav-link:hover {
  background: #f8fafc;
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .fv-guide-nav-link.is-active {
  background: rgba(16, 185, 129, 0.10);
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

/* ============================================================
   Guide hero (cluster used by guide + blog + case detail pages)
   ============================================================ */

html[data-theme="light"] .guide-hero {
  background:
    radial-gradient(circle at top left, rgba(56, 189, 248, 0.06), transparent 55%),
    radial-gradient(circle at bottom right, rgba(52, 211, 153, 0.05), transparent 60%),
    #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .guide-hero .lead {
  color: var(--text-secondary);
}
html[data-theme="light"] .guide-hero-meta span {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.12);
  color: var(--text-secondary);
}

/* Gradient-text hero headings used in docs/guides/blogs/casestudies — solid
   dark in light mode so they read like actual headings, not pale teal. */
html[data-theme="light"] .guide-hero h1,
html[data-theme="light"] .docs-hero h1,
html[data-theme="light"] .case-hero h1,
html[data-theme="light"] .blog-title {
  background: none !important;
  -webkit-background-clip: initial !important;
  background-clip: initial !important;
  -webkit-text-fill-color: var(--text-primary) !important;
  color: var(--text-primary) !important;
}

/* ============================================================
   Guide content boxes — example / context / summary / step /
   warning / checklist / photo-item
   ============================================================
   All live inside .guide-card; defined per-template in
   <style> blocks with hardcoded rgba(15,23,42,...). */

html[data-theme="light"] .guide-section-label {
  background: #f1f5f9;
  border-color: rgba(15, 23, 42, 0.12);
  color: var(--text-secondary);
}

html[data-theme="light"] .guide-example-box,
html[data-theme="light"] .guide-context-grid,
html[data-theme="light"] .guide-summary-box,
html[data-theme="light"] .guide-checklist {
  background: #f8fafc;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}

html[data-theme="light"] .guide-example-item,
html[data-theme="light"] .guide-context-item,
html[data-theme="light"] .guide-photo-item,
html[data-theme="light"] .guide-step {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 1px 4px rgba(15, 23, 42, 0.04);
}
html[data-theme="light"] .guide-example-item h3,
html[data-theme="light"] .guide-context-item h3,
html[data-theme="light"] .guide-photo-item h3 {
  color: var(--text-primary);
}
html[data-theme="light"] .guide-example-item p,
html[data-theme="light"] .guide-context-item p,
html[data-theme="light"] .guide-photo-item p {
  color: var(--text-secondary);
}

html[data-theme="light"] .guide-step-num {
  background: var(--color-primary);
  color: #ffffff;
}

html[data-theme="light"] .guide-warning {
  background: rgba(251, 191, 36, 0.10);
  border-color: rgba(251, 191, 36, 0.45);
  color: var(--text-primary);
}

html[data-theme="light"] .guide-example-question {
  color: var(--color-primary-dark);
}

/* Sidebar link list (.side-link inside .guide-side-card) */
html[data-theme="light"] .side-link {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
}
html[data-theme="light"] .side-link:hover {
  background: rgba(16, 185, 129, 0.06);
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

/* ============================================================
   guides/index unique classes (.collection-card, .side-note)
   ============================================================ */

html[data-theme="light"] .collection-card {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .collection-card h3 {
  color: var(--text-primary);
}
html[data-theme="light"] .collection-card p,
html[data-theme="light"] .collection-card li {
  color: var(--text-secondary);
}
html[data-theme="light"] .side-note {
  background: #f8fafc;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-secondary);
}
html[data-theme="light"] .side-note strong {
  color: var(--text-primary);
}

/* ============================================================
   blogs/index unique classes — blog cards, sidebar, archive
   ============================================================ */

html[data-theme="light"] .blog-card,
html[data-theme="light"] .blog-card-featured {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-primary);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .blog-card:hover,
html[data-theme="light"] .blog-card-featured:hover {
  border-color: var(--color-primary);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .blog-category-pill {
  background: rgba(16, 185, 129, 0.10);
  border-color: rgba(16, 185, 129, 0.30);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .blog-summary {
  color: var(--text-secondary);
}
html[data-theme="light"] .blog-meta-chip {
  background: #f1f5f9;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-muted);
}
html[data-theme="light"] .blog-read-link {
  color: var(--color-primary-dark);
}
html[data-theme="light"] .blog-read-link:hover {
  color: var(--color-primary);
}

html[data-theme="light"] .blog-sidebar {
  background: #f8fafc;
  border-color: rgba(15, 23, 42, 0.08);
  color: var(--text-primary);
}
html[data-theme="light"] .blog-sidebar h3,
html[data-theme="light"] .blog-sidebar h4 {
  color: var(--text-primary);
}
html[data-theme="light"] .blog-sidebar p {
  color: var(--text-secondary);
}
html[data-theme="light"] .blog-category-link {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-secondary);
}
html[data-theme="light"] .blog-category-link:hover {
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .blog-category-link span.badge {
  background: #f1f5f9;
  color: var(--text-muted);
}
html[data-theme="light"] .blog-archive {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .blog-archive a {
  color: var(--text-secondary);
}
html[data-theme="light"] .blog-archive a:hover {
  color: var(--color-primary-dark);
}

/* ============================================================
   Investors page — section-alt band + contact-method cards
   ============================================================
   Two hardcoded rgba(15, 23, 42, 0.35) sites:
   - .inv-section--alt (line 118 of investors/index.html) — the
     band the user flagged as dark-grey behind "What is shipping
     today" and the pitch stack.
   - .contact-method (line 323) — Email/WhatsApp contact cards. */

html[data-theme="light"] .investors-page .inv-section--alt {
  background: #f1f5f9;
  border-top-color: rgba(15, 23, 42, 0.08);
  border-bottom-color: rgba(15, 23, 42, 0.08);
}

html[data-theme="light"] .investors-page .contact-method {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}
html[data-theme="light"] .investors-page .contact-method:hover {
  border-color: var(--color-primary);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.08);
}
html[data-theme="light"] .investors-page .contact-method-value {
  color: var(--text-primary);
}
html[data-theme="light"] .investors-page .contact-method-desc {
  color: var(--text-secondary);
}

/* ============================================================
   Research / Academic page — citation box + institution cards
   ============================================================
   research/index.html .citation-box has a hardcoded
   rgba(10, 15, 26, 0.85). .institution-citation uses
   rgba(0, 0, 0, 0.2). .institution-tag color variants
   (rice/audio/alt/scope) use neon hues that are unreadable on
   white. Re-tone for light mode. */

html[data-theme="light"] .citation-box {
  background: #f8fafc;
  border: 1px solid rgba(15, 23, 42, 0.10);
  border-left: 3px solid rgba(16, 185, 129, 0.55);
  color: var(--text-primary);
}
html[data-theme="light"] .citation-box p {
  color: var(--text-secondary);
}
html[data-theme="light"] .citation-box strong {
  color: var(--text-primary);
}

html[data-theme="light"] .institution-citation {
  background: #f1f5f9;
  color: var(--text-secondary);
  border-left-color: rgba(16, 185, 129, 0.45);
}
html[data-theme="light"] .institution-flag {
  /* emoji — no change needed, but listed for completeness */
}
html[data-theme="light"] .institution-name {
  color: var(--text-primary);
}
html[data-theme="light"] .institution-country {
  color: var(--text-muted);
}
html[data-theme="light"] .institution-desc {
  color: var(--text-secondary);
}

/* Tag color variants — switch to deep readable variants on white */
html[data-theme="light"] .institution-tag {
  background: rgba(16, 185, 129, 0.12);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .institution-tag.rice {
  background: rgba(251, 191, 36, 0.16);
  color: #b45309;
}
html[data-theme="light"] .institution-tag.audio {
  background: rgba(168, 85, 247, 0.14);
  color: #6d28d9;
}
html[data-theme="light"] .institution-tag.alt {
  background: rgba(99, 102, 241, 0.14);
  color: #3730a3;
}
html[data-theme="light"] .institution-tag.scope {
  background: rgba(59, 130, 246, 0.14);
  color: #1d4ed8;
}

/* ============================================================
   FieldGuide page — .fg-stage cards (the 4 "Stage 01..04"
   visible at the top of the screenshot) + .fg-feature-story
   ============================================================ */

html[data-theme="light"] .fg-stage {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .fg-stage:hover {
  border-color: var(--color-primary);
  box-shadow: 0 12px 32px rgba(16, 185, 129, 0.15);
}
html[data-theme="light"] .fg-stage-image {
  background: #f1f5f9;
}
html[data-theme="light"] .fg-stage-label {
  background: rgba(16, 185, 129, 0.10);
  border-top-color: rgba(16, 185, 129, 0.25);
  color: var(--color-primary-dark);
}

/* The phone-frame mockup stays dark on purpose — phones have
   dark bezels. Just soften shadow + border to fit a light page. */
html[data-theme="light"] .fg-feature-story-frame {
  border-color: rgba(15, 23, 42, 0.18);
  box-shadow: 0 16px 36px rgba(15, 23, 42, 0.18);
}
html[data-theme="light"] .fg-feature-story-kicker {
  color: var(--color-primary-dark);
}

/* ============================================================
   FieldState page — .fs-cta-wrap (call-to-action panel)
   ============================================================ */

html[data-theme="light"] .fs-cta-wrap {
  background:
    radial-gradient(circle at top left, rgba(16, 185, 129, 0.06), transparent 60%),
    #f8fafc;
  border: 1px solid rgba(16, 185, 129, 0.30);
  color: var(--text-primary);
  box-shadow: 0 4px 20px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .fs-cta-title {
  color: var(--text-primary);
}
html[data-theme="light"] .fs-cta-subtitle {
  color: var(--text-secondary);
}
html[data-theme="light"] .fs-btn-ghost {
  background: #ffffff;
  color: var(--text-primary);
  border-color: rgba(15, 23, 42, 0.16);
}
html[data-theme="light"] .fs-btn-ghost:hover {
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

/* ============================================================
   Partnership page — .hero-note callout
   ============================================================ */

html[data-theme="light"] .hero-note {
  background: rgba(16, 185, 129, 0.06);
  border-left-color: var(--color-primary);
  color: var(--text-secondary);
}
html[data-theme="light"] .hero-note strong {
  color: var(--text-primary);
}

/* ============================================================
   Button vs tag visual differentiation — SHAPE-FIRST DESIGN
   ============================================================
   Canonical rule (applies in BOTH light and dark mode):
     - BUTTONS / interactive pills → RECTANGLE (small radius)
       with emerald accent text + border.
     - TAGS / decorative labels    → PILL (border-radius 999px)
       with muted slate text, no emerald.
   The shape alone tells the user what's clickable; color is
   reinforcement, not the primary signal. */

/* SHAPE — rectangle for buttons, pill for tags. !important to
   beat per-template border-radius declarations. */
.fv-guide-nav-link,
.fv-docs-nav-link,
.link-pill,
.doc-link,
.side-link,
.learn-more,
.fv-btn-primary,
.fv-btn-secondary,
.fs-btn-primary,
.fs-btn-ghost,
.fg-btn-primary,
.fg-btn-secondary {
  border-radius: 0.5rem !important;
}
.guide-hero-meta span,
.docs-hero-meta span,
.case-hero-meta span,
.guide-tag,
.guide-pill,
.case-tag,
.blog-meta-chip,
.blog-category-pill,
.quick-start-label,
.guide-section-label,
.section-eyebrow,
.institution-tag,
.fv-guide-path,
.fv-docs-path {
  border-radius: 999px !important;
}


/* --- INTERACTIVE pills (light mode) --- */
html[data-theme="light"] .fv-guide-nav-link,
html[data-theme="light"] .fv-docs-nav-link,
html[data-theme="light"] .link-pill,
html[data-theme="light"] .doc-link,
html[data-theme="light"] .side-link {
  border-color: rgba(16, 185, 129, 0.30);
  color: var(--color-primary-dark);
  background: #ffffff;
}
html[data-theme="light"] .fv-guide-nav-link:hover,
html[data-theme="light"] .fv-docs-nav-link:hover,
html[data-theme="light"] .link-pill:hover,
html[data-theme="light"] .doc-link:hover,
html[data-theme="light"] .side-link:hover {
  background: rgba(16, 185, 129, 0.10);
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}
html[data-theme="light"] .fv-guide-nav-link.is-active,
html[data-theme="light"] .fv-docs-nav-link.is-active {
  background: var(--color-primary);
  border-color: var(--color-primary);
  color: #ffffff;
}
html[data-theme="light"] .learn-more {
  color: var(--color-primary-dark);
  font-weight: 700;
}

/* --- TAGS / decorative pills (light mode) ---
   Crucially: NO emerald accent, slate-only. Same shape as
   buttons (so layout doesn't shift) but a different read. */
html[data-theme="light"] .guide-hero-meta span,
html[data-theme="light"] .docs-hero-meta span,
html[data-theme="light"] .case-hero-meta span,
html[data-theme="light"] .guide-tag,
html[data-theme="light"] .guide-pill,
html[data-theme="light"] .case-tag,
html[data-theme="light"] .blog-meta-chip,
html[data-theme="light"] .quick-start-label,
html[data-theme="light"] .guide-section-label,
html[data-theme="light"] .section-eyebrow {
  background: #f1f5f9;
  border-color: rgba(15, 23, 42, 0.08);
  color: var(--text-muted);
}

/* --- INTERACTIVE pills (dark mode default — applies when
   data-theme is absent or "dark") --- */
.fv-guide-nav-link,
.fv-docs-nav-link {
  /* Dark-mode emerald accent default; templates' :hover stays. */
}
html:not([data-theme="light"]) .fv-guide-nav-link,
html:not([data-theme="light"]) .fv-docs-nav-link,
html:not([data-theme="light"]) .link-pill,
html:not([data-theme="light"]) .doc-link,
html:not([data-theme="light"]) .side-link {
  border-color: rgba(52, 211, 153, 0.30) !important;
  color: #6ee7b7 !important;
}
html:not([data-theme="light"]) .fv-guide-nav-link:hover,
html:not([data-theme="light"]) .fv-docs-nav-link:hover,
html:not([data-theme="light"]) .link-pill:hover,
html:not([data-theme="light"]) .doc-link:hover,
html:not([data-theme="light"]) .side-link:hover {
  border-color: rgba(52, 211, 153, 0.55) !important;
  color: #a7f3d0 !important;
  background: rgba(16, 185, 129, 0.10) !important;
}

/* --- TAGS (dark mode) — keep neutral slate, no emerald --- */
html:not([data-theme="light"]) .guide-hero-meta span,
html:not([data-theme="light"]) .docs-hero-meta span,
html:not([data-theme="light"]) .case-hero-meta span,
html:not([data-theme="light"]) .guide-tag,
html:not([data-theme="light"]) .guide-pill,
html:not([data-theme="light"]) .case-tag,
html:not([data-theme="light"]) .blog-meta-chip {
  border-color: rgba(148, 163, 184, 0.25) !important;
  color: var(--text-muted) !important;
  background: rgba(148, 163, 184, 0.08) !important;
}


/* ==========================================================================
   Launch-sprint components — light mode overrides
   Covers: status badges (components.css), .hero-tagline (home hero),
   early-interest form + thanks page.
   Dark mode keeps the defaults defined in components.css and the
   component templates themselves.
   ========================================================================== */

/* --- Skeleton (components.css) — softer base on light surfaces --- */
html[data-theme="light"] .skeleton {
  background: rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .skeleton::after {
  background: linear-gradient(
    90deg,
    rgba(255, 255, 255, 0)   0%,
    rgba(255, 255, 255, 0.6) 50%,
    rgba(255, 255, 255, 0)   100%
  );
}

/* --- Home hero tagline --- */
html[data-theme="light"] .hero-tagline {
  color: #047857;
}

/* --- Early-interest form (pages/early_interest.html) --- */
html[data-theme="light"] .ei-card {
  background: var(--bg-surface, #ffffff);
  border-color: rgba(15, 23, 42, 0.12);
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}
html[data-theme="light"] .ei-pill span {
  background: var(--bg-surface-elevated, #f1f5f9);
  border-color: rgba(15, 23, 42, 0.14);
  color: var(--text-secondary);
}
html[data-theme="light"] .ei-pill input:checked + span {
  background: rgba(16, 185, 129, 0.12);
  border-color: #047857;
  color: #047857;
}
html[data-theme="light"] .ei-input,
html[data-theme="light"] .ei-textarea {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-primary);
}
html[data-theme="light"] .ei-input:focus,
html[data-theme="light"] .ei-textarea:focus {
  background: #ffffff;
  border-color: var(--color-primary, #10b981);
}
html[data-theme="light"] .ei-tagline { color: #047857; }
html[data-theme="light"] .ei-fine,
html[data-theme="light"] .ei-help { color: var(--text-muted); }
html[data-theme="light"] .ei-error-banner {
  background: #fef2f2;
  border-color: #fecaca;
  color: #b91c1c;
}
html[data-theme="light"] .ei-submit {
  background: var(--color-primary, #10b981);
  color: #ffffff;
}

/* --- Thanks page (pages/early_interest_thanks.html) --- */
html[data-theme="light"] .eit-card {
  background: var(--bg-surface, #ffffff);
  border-color: rgba(16, 185, 129, 0.32);
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}
html[data-theme="light"] .eit-body { color: var(--text-secondary); }
html[data-theme="light"] .eit-body strong { color: var(--text-primary); }
html[data-theme="light"] .eit-tagline { color: #047857; }
html[data-theme="light"] .eit-btn {
  background: var(--bg-surface-elevated, #f1f5f9);
  border-color: rgba(15, 23, 42, 0.16);
  color: var(--text-secondary);
}
html[data-theme="light"] .eit-btn:hover {
  border-color: var(--color-primary, #10b981);
  color: var(--text-primary);
}
html[data-theme="light"] .eit-btn--primary {
  background: var(--color-primary, #10b981);
  border-color: var(--color-primary, #10b981);
  color: #ffffff;
}

/* ──────────────────────────────────────────────────────────────────────────
   Launch-day 2026-05-25 light-mode remediation pass.
   Closes gaps where playground/audio components hardcode dark rgba()
   surfaces that the token tier cannot reach.
   ────────────────────────────────────────────────────────────────────────── */

/* playground_shared.css collapses .fa-tool-intro / .fs-tool-intro onto a
   shared dark rgba(15,23,42,.24) — flip to clean off-white. */
html[data-theme="light"] .fa-tool-intro,
html[data-theme="light"] .fs-tool-intro {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.08) !important;
}

/* .fs-attn-badge shares a CSS rule with .fs-cpill in playground_shared.css
   that hardcodes rgba(2,6,23,0.58). .fs-cpill already has an override; add
   the badge sibling. */
html[data-theme="light"] .fs-attn-badge {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  color: var(--text-secondary) !important;
}

/* FieldAudio segmented control + freeform textarea — both bake in
   rgba(2,6,23,.35/.45). On a white surface this reads as dark slate. */
html[data-theme="light"] .fa-segmented {
  background: #f8fafc;
  border-color: rgba(15, 23, 42, 0.10);
}
html[data-theme="light"] .fa-textarea {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.12);
  color: var(--text-primary);
}
html[data-theme="light"] .fa-textarea:focus {
  border-color: var(--color-primary, #10b981);
  box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.15);
}

/* FieldAudio collapsible intro family — uses var(--fa-*) which are remapped
   by the global token block, but several inner surfaces still read as gray
   on real device tests because they layer over a parent dark background.
   Force explicit white surfaces. */
html[data-theme="light"] .fa-intro-inner {
  background: transparent;
}
html[data-theme="light"] .fa-intro-card {
  background: #ffffff !important;
  border-color: rgba(15, 23, 42, 0.10) !important;
  color: var(--text-secondary) !important;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}
html[data-theme="light"] .fa-intro-card strong {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fa-intro-card i {
  color: var(--color-primary-dark, #059669) !important;
}
html[data-theme="light"] .fa-intro-pill {
  background: rgba(16, 185, 129, 0.10) !important;
  color: var(--color-primary-dark, #059669) !important;
  border-color: rgba(16, 185, 129, 0.35) !important;
}
html[data-theme="light"] .fa-intro-title {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fa-intro-subtitle {
  color: var(--text-secondary) !important;
}

/* Defensive sweep: any [class*="-intro"] or [class*="-card"] inside a
   playground that still reads as dark gets a flat white surface in light
   mode. Specificity is low enough to lose to the explicit overrides above
   when those fire, but high enough to catch stragglers. */
html[data-theme="light"] .pg-tool-intro [class*="-card"],
html[data-theme="light"] .fa-intro-cards [class*="-card"],
html[data-theme="light"] .fs-intro-cards [class*="-card"] {
  background: #ffffff;
  border-color: rgba(15, 23, 42, 0.10);
  color: var(--text-secondary);
}

/* FieldAudio intro screenshot frames — match the white-card treatment so
   the phone screens sit on a clean surface in light mode. */
html[data-theme="light"] .fa-intro-shot-frame {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 2px 10px rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .fa-intro-shot-frame::after {
  border-color: rgba(16, 185, 129, 0.35);
  opacity: .4;
}
html[data-theme="light"] .fa-intro-shot figcaption {
  color: var(--text-secondary) !important;
}

/* ──────────────────────────────────────────────────────────────────────────
   2026-05-25 PM light-mode remediation — user-reported grays
   ────────────────────────────────────────────────────────────────────────── */

/* Ask AI chat bubble — previous override targeted .fieldchat-msg-bubble but
   ask_ai.js actually emits .fieldchat-bubble, so the rule never fired and
   the bot bubble stayed dark slate on the white page. Two-class override
   ensures both the bubble background and the bot/user variants render
   correctly. */
html[data-theme="light"] .fieldchat-msg.bot .fieldchat-bubble,
html[data-theme="light"] .fieldchat-msg.assistant .fieldchat-bubble {
  background: #f8fafc !important;
  color: var(--text-primary) !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
}
html[data-theme="light"] .fieldchat-msg.user .fieldchat-bubble {
  background: rgba(16, 185, 129, 0.14) !important;
  color: var(--text-primary) !important;
  border: 1px solid rgba(16, 185, 129, 0.32) !important;
}
/* Greeting in light mode: keep the gradient text from ask_ai.css.
   Re-apply -webkit-text-fill-color so any inherited light-mode color rule
   doesn't undo the gradient. No background, no border — clean text only. */
html[data-theme="light"] .fieldchat-greeting {
  background: transparent !important;
  border: 0 !important;
  -webkit-text-fill-color: transparent !important;
  color: transparent !important;
}
html[data-theme="light"] .fieldchat-thread {
  background: #ffffff;
}

/* Hero pills (contact, story, partnership) — hardcode rgba(15,23,42,.55)
   which reads as battleship grey on white. Switch to a soft green-tinted
   pill so they're visible without shouting. */
html[data-theme="light"] .hero-pill {
  background: rgba(16, 185, 129, 0.10);
  border: 1px solid rgba(16, 185, 129, 0.32);
  color: var(--color-primary-dark, #047857);
}

/* FieldVision hero badge — same problem, hardcoded dark surface */
html[data-theme="light"] .fv-hero-badge {
  background: rgba(16, 185, 129, 0.10) !important;
  border: 1px solid rgba(16, 185, 129, 0.32) !important;
  color: var(--color-primary-dark, #047857) !important;
}
html[data-theme="light"] .fv-hero-badge i {
  color: var(--color-primary-dark, #047857) !important;
}

/* Investor / generic hero badges with same pattern */
html[data-theme="light"] .hero-badge,
html[data-theme="light"] .investor-hero-pill,
html[data-theme="light"] .partnership-hero-pill {
  background: rgba(16, 185, 129, 0.10);
  border: 1px solid rgba(16, 185, 129, 0.32);
  color: var(--color-primary-dark, #047857);
}

/* Homepage record card (Maize Block A1 example) — activity-card hardcodes
   rgba(2,6,23,0.64) which reads as a dark slate block on the white page. */
html[data-theme="light"] .activity-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}
html[data-theme="light"] .activity-section {
  background: #f8fafc;
  border: 1px solid rgba(15, 23, 42, 0.08);
  border-radius: var(--radius-md);
  padding: 0.75rem;
}
html[data-theme="light"] .activity-row {
  border-color: rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .activity-when {
  color: var(--text-muted);
}
html[data-theme="light"] .activity-what {
  color: var(--text-primary);
}
html[data-theme="light"] .activity-disclaimer {
  color: var(--text-muted);
}
html[data-theme="light"] .activity-meta .meta-label {
  color: var(--text-muted);
}
html[data-theme="light"] .activity-meta .meta-value {
  color: var(--text-primary);
}
/* activity-method keeps its green pill — already green-tinted in dark mode,
   tighten contrast on white background */
html[data-theme="light"] .activity-method {
  background: rgba(16, 185, 129, 0.10);
  border-color: rgba(16, 185, 129, 0.40);
  color: var(--color-primary-dark, #047857);
}

/* FieldVision playground panel boundaries — the skeleton-box look the
   user complained about. Flatten the heavy borders, add a single subtle
   hairline, soften the background so cards feel like a polished panel. */
html[data-theme="light"] .fv-shell,
html[data-theme="light"] .fv-panel,
html[data-theme="light"] .fv-card,
html[data-theme="light"] .fv-section,
html[data-theme="light"] .fv-results-shell,
html[data-theme="light"] .fv-results-card,
html[data-theme="light"] .fv-upload-section,
html[data-theme="light"] .fv-plant-section,
html[data-theme="light"] .fv-classes-panel,
html[data-theme="light"] .fv-output-panel {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.08) !important;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04) !important;
  border-radius: var(--radius-lg) !important;
}
html[data-theme="light"] .fv-section-header,
html[data-theme="light"] .fv-panel-header,
html[data-theme="light"] .fv-card-header {
  border-bottom: 1px solid rgba(15, 23, 42, 0.06);
}
/* Plant-option chips: tighten light-mode contrast so unselected ones don't
   blend into the panel background */
html[data-theme="light"] .plant-option {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary) !important;
}
html[data-theme="light"] .plant-option:hover {
  border-color: rgba(16, 185, 129, 0.40) !important;
  background: rgba(16, 185, 129, 0.06) !important;
}
html[data-theme="light"] .plant-option.selected {
  /* keep the green gradient from dark mode */
  color: #022c22 !important;
}
html[data-theme="light"] .plant-option-hint {
  color: var(--text-muted) !important;
}

/* FieldVision image-panel — was showing a pale-gray-to-white gradient in
   light mode because --fv-bg-dark (#f8fafc) feeds into the gradient. Flat
   white reads cleaner and stops the panel looking like a skeleton. */
html[data-theme="light"] .image-panel {
  background: #ffffff !important;
  border-right: 1px solid rgba(15, 23, 42, 0.08) !important;
}
html[data-theme="light"] .image-display {
  background: #ffffff !important;
  border-radius: var(--radius-lg);
}
html[data-theme="light"] .image-placeholder {
  color: var(--text-muted);
}
html[data-theme="light"] .image-placeholder i {
  color: rgba(15, 23, 42, 0.20);
}

/* ──────────────────────────────────────────────────────────────────────────
   FieldVision "See It In Action" showcase — light-mode sweep
   The showcase ships dark surfaces (rgba(15,23,42,...)) that read as
   battleship gray on the white page. Flatten every surface to clean
   white + green-tinted accents.
   ────────────────────────────────────────────────────────────────────────── */

/* Class tabs above the scanner */
html[data-theme="light"] .fv-class-tab {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fv-class-tab:hover {
  border-color: rgba(16, 185, 129, 0.45) !important;
  background: #f8fafc !important;
}
html[data-theme="light"] .fv-class-tab.active {
  border-color: var(--color-primary-dark, #047857) !important;
  background: rgba(16, 185, 129, 0.10) !important;
}
html[data-theme="light"] .fv-class-tab-rank {
  background: rgba(16, 185, 129, 0.18) !important;
  color: var(--color-primary-dark, #047857) !important;
}
html[data-theme="light"] .fv-class-tab-name {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fv-class-tab-conf {
  color: var(--text-secondary) !important;
}

/* Prediction card on the right */
html[data-theme="light"] .fv-pred-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.08) !important;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}
html[data-theme="light"] .fv-pred-card-header {
  border-bottom: 1px solid rgba(15, 23, 42, 0.06);
}
html[data-theme="light"] .fv-pred-disease-name {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fv-pred-scientific {
  color: var(--text-muted) !important;
}
html[data-theme="light"] .fv-pred-conf-value {
  color: var(--color-primary-dark, #047857) !important;
}
html[data-theme="light"] .fv-pred-conf-label {
  color: var(--text-muted) !important;
}

/* Prediction distribution bars */
html[data-theme="light"] .fv-conf-dist-title {
  color: var(--text-muted) !important;
}
html[data-theme="light"] .fv-conf-label {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fv-conf-bar {
  background: rgba(15, 23, 42, 0.06) !important;
}
html[data-theme="light"] .fv-conf-percent {
  color: var(--text-secondary) !important;
}

/* Explanation sections (About / What to look for / Look-alikes / Management) */
html[data-theme="light"] .fv-exp-section {
  background: #f8fafc !important;
  border: 1px solid rgba(15, 23, 42, 0.06) !important;
  border-left: 2px solid rgba(16, 185, 129, 0.45) !important;
}
html[data-theme="light"] .fv-exp-section.info {
  border-left: 2px solid rgba(56, 189, 248, 0.55) !important;
}
html[data-theme="light"] .fv-exp-section.warning {
  border-left: 2px solid rgba(251, 191, 36, 0.65) !important;
  background: rgba(251, 191, 36, 0.04) !important;
}
html[data-theme="light"] .fv-exp-title {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fv-exp-text,
html[data-theme="light"] .fv-exp-list {
  color: var(--text-secondary) !important;
}

/* Management tags */
html[data-theme="light"] .fv-mgmt-tag {
  background: rgba(15, 23, 42, 0.05) !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fv-mgmt-tag.cultural {
  background: rgba(34, 197, 94, 0.10) !important;
  border-color: rgba(34, 197, 94, 0.32) !important;
  color: #047857 !important;
}
html[data-theme="light"] .fv-mgmt-tag.chemical {
  background: rgba(251, 191, 36, 0.12) !important;
  border-color: rgba(251, 191, 36, 0.40) !important;
  color: #b45309 !important;
}

/* Showcase section header text */
html[data-theme="light"] .fv-showcase-title {
  color: var(--text-primary) !important;
}
html[data-theme="light"] .fv-showcase-subtitle {
  color: var(--text-muted) !important;
}
html[data-theme="light"] .fv-showcase-label {
  background: rgba(16, 185, 129, 0.10) !important;
  border: 1px solid rgba(16, 185, 129, 0.32) !important;
  color: var(--color-primary-dark, #047857) !important;
}

/* Scanner status row (bottom of the scanner) — keep dark since it sits
   on a black scanner background; just tighten the borders. */
html[data-theme="light"] .fv-scanner-status {
  background: rgba(2, 6, 23, 0.90) !important;
}

/* "Why this image-supported workflow is different" cards — user reported
   2026-05-25 PM that these still read as gray on the white page. The
   earlier override at line 2702 sets !important white, but the
   `--fv-bg-card` token (rgba 255 0.88) is rendered semi-transparent at
   the icon swatch and the section parent. Force every diff surface
   solid white + visible borders + green-tinted icon swatch. */
html.light-mode .fv-diff-section,
html[data-theme="light"] .fv-diff-section {
  background: transparent !important;
}
html.light-mode .fv-diff-grid,
html[data-theme="light"] .fv-diff-grid {
  background: transparent !important;
}
html.light-mode .fv-diff-card,
html[data-theme="light"] .fv-diff-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  color: var(--text-primary) !important;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}
html.light-mode .fv-diff-card:hover,
html[data-theme="light"] .fv-diff-card:hover {
  border-color: rgba(16, 185, 129, 0.45) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, 0.06), 0 0 24px rgba(16, 185, 129, 0.12) !important;
}
html.light-mode .fv-diff-card-icon,
html[data-theme="light"] .fv-diff-card-icon {
  background: rgba(16, 185, 129, 0.12) !important;
  color: var(--color-primary-dark, #047857) !important;
}
html.light-mode .fv-diff-card-title,
html[data-theme="light"] .fv-diff-card-title {
  color: var(--text-primary) !important;
}
html.light-mode .fv-diff-card-text,
html[data-theme="light"] .fv-diff-card-text {
  color: var(--text-secondary) !important;
}
html.light-mode .fv-diff-title,
html[data-theme="light"] .fv-diff-title {
  color: var(--text-primary) !important;
}
html.light-mode .fv-diff-subtitle,
html[data-theme="light"] .fv-diff-subtitle {
  color: var(--text-muted) !important;
}

/* ──────────────────────────────────────────────────────────────────────────
   research/cv_models.html — light-mode card + pill contrast pass
   ──────────────────────────────────────────────────────────────────────────
   The page uses var(--glass-bg) on .journey-container + .model-card +
   .simple-card; in light mode that token resolves to #ffffff, so the cards
   blend into the page background. Pills inside the model cards layer
   12–14% color tints with same-color text (e.g. #a5b4fc lavender on a
   pale-lavender tint) which is near-invisible on a white surface. The
   fix below: give the cards a faint shadow + visible hairline so they
   read as cards, and switch every pill to a darker-shade text colour on
   a slightly stronger tint. Matches the .purpose-card / .field-card
   pattern used elsewhere in this file.
   ────────────────────────────────────────────────────────────────────── */

/* Card surfaces — flat white card with a real edge, off-white wouldn't fix
   the dark-on-light contrast issue inside, the pills below are what makes
   the card actually readable. */
html[data-theme="light"] .journey-container,
html[data-theme="light"] .model-card,
html[data-theme="light"] .simple-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}

html[data-theme="light"] .diagnosis-card {
  background: #ffffff !important;
  border: 1px solid rgba(15, 23, 42, 0.10) !important;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.05);
}

/* Model-card text colours — make sure title/role/summary/list all read on
   white. The page already references --text-primary/secondary/muted which
   light-mode.css redefines; this is a defensive override in case any rule
   inside cv_models.html hard-codes a dark-mode colour. */
html[data-theme="light"] .model-card .model-name,
html[data-theme="light"] .model-card .stage-title,
html[data-theme="light"] .model-card .simple-card-title {
  color: var(--text-primary) !important;
}

html[data-theme="light"] .model-card .model-role,
html[data-theme="light"] .model-card .stage-meta {
  color: var(--text-muted) !important;
}

html[data-theme="light"] .model-card .model-summary,
html[data-theme="light"] .model-card .model-list,
html[data-theme="light"] .simple-card .simple-card-body {
  color: var(--text-secondary) !important;
}

/* Pills — bolder colours so the small text reads on white.
   Each shade uses the standard 700/800 step for legible contrast. */
html[data-theme="light"] .model-tagline,
html[data-theme="light"] .meta-pill {
  background: rgba(16, 185, 129, 0.16) !important;
  color: #047857 !important; /* emerald-700 */
}

html[data-theme="light"] .meta-pill.blue {
  background: rgba(99, 102, 241, 0.16) !important;
  color: #3730a3 !important; /* indigo-800 */
}

html[data-theme="light"] .meta-pill.amber {
  background: rgba(251, 191, 36, 0.20) !important;
  color: #92400e !important; /* amber-800 */
}

/* The flagship "Status: FieldGuide maize vision layer" pill uses
   .meta-pill.foundation — give it the same emerald-700 treatment so all
   three model cards' status pills read consistently. */
html[data-theme="light"] .meta-pill.foundation {
  background: rgba(16, 185, 129, 0.16) !important;
  color: #047857 !important;
}

/* Comparison table header — currently rgba(15,23,42,0.6) which over white
   produces a muddy mid-grey behind dark text, near-unreadable. Use a
   tinted-emerald header band that matches the rest of the page. */
html[data-theme="light"] .comparison-table th {
  background: rgba(16, 185, 129, 0.10) !important;
  color: var(--text-primary) !important;
}

html[data-theme="light"] .comparison-table {
  color: var(--text-secondary) !important;
}

html[data-theme="light"] .comparison-table th,
html[data-theme="light"] .comparison-table td {
  border-bottom-color: rgba(15, 23, 42, 0.08) !important;
}

/* cv_models comparison-table badge pills — same washed-out problem as
   the model-card pills, just inside the comparison table cells. */
html[data-theme="light"] .badge-inline.foundation {
  background: rgba(249, 115, 22, 0.18) !important;
  color: #9a3412 !important; /* orange-800 */
}
html[data-theme="light"] .badge-inline.proven {
  background: rgba(37, 99, 235, 0.16) !important;
  color: #1e40af !important; /* blue-800 */
}
html[data-theme="light"] .badge-inline.flagship {
  background: rgba(5, 150, 105, 0.16) !important;
  color: #047857 !important; /* emerald-700 */
}

/* research/ml_models.html — .model-label is the green Classification /
   Regression / Optimization pill above each card title. .color-primary
   stays at #10b981 in light mode which is borderline against the pale
   tint; bump to color-primary-dark for clear contrast. */
html[data-theme="light"] .model-card .model-label {
  background: rgba(16, 185, 129, 0.16) !important;
  color: var(--color-primary-dark, #047857) !important;
}
html[data-theme="light"] .model-card .model-label-warning {
  background: rgba(239, 68, 68, 0.14) !important;
  color: #991b1b !important; /* red-800 */
}

/* ──────────────────────────────────────────────────────────────────────────
   research/index.html — pill family light-mode pass
   ────────────────────────────────────────────────────────────────────────── */

/* .track-badge.* — gradient + tint backgrounds with light-shade text.
   Keep the gradient backgrounds (they're not "text gradients", they're
   pill chrome — allowed). Switch text to the readable 700/800 shade. */
html[data-theme="light"] .track-badge.core {
  color: #991b1b !important; /* red-800 */
}
html[data-theme="light"] .track-badge.evidence {
  color: var(--color-primary-dark, #047857) !important;
}
html[data-theme="light"] .track-badge.field {
  background: rgba(59, 130, 246, 0.18) !important;
  color: #1e40af !important; /* blue-800 */
}
html[data-theme="light"] .track-badge.audio {
  background: rgba(168, 85, 247, 0.18) !important;
  color: #6b21a8 !important; /* purple-800 */
}
html[data-theme="light"] .track-badge.expanding {
  background: rgba(251, 191, 36, 0.20) !important;
  color: #92400e !important; /* amber-800 */
}

/* .dataset-tab.* — same washed-out pattern. */
html[data-theme="light"] .dataset-tab.crop {
  background: rgba(16, 185, 129, 0.16) !important;
  color: var(--color-primary-dark, #047857) !important;
  border-color: rgba(16, 185, 129, 0.34) !important;
}
html[data-theme="light"] .dataset-tab.rice {
  background: rgba(251, 191, 36, 0.18) !important;
  color: #92400e !important;
  border-color: rgba(251, 191, 36, 0.36) !important;
}
html[data-theme="light"] .dataset-tab.audio {
  background: rgba(168, 85, 247, 0.16) !important;
  color: #6b21a8 !important;
  border-color: rgba(168, 85, 247, 0.32) !important;
}

/* .expanding-status.* — status labels on the "expanding" cards. */
html[data-theme="light"] .expanding-status.scoping {
  background: rgba(251, 191, 36, 0.18) !important;
  color: #92400e !important;
}
html[data-theme="light"] .expanding-status.active {
  background: rgba(16, 185, 129, 0.16) !important;
  color: var(--color-primary-dark, #047857) !important;
}
/* .expanding-status.planned uses --text-muted which is already #64748b
   in light mode — readable on the pale-slate tint, no override needed. */


