/* Local engine chrome only. The measured failures came from pale legacy cards
   inheriting dark-theme text, or controls retaining a light-theme foreground.
   Canvases, test patches, printer output and generated images are untouched. */
html.kbt-msn-tool-local .msn-tool-stage {
    --msn-result-good: #86efac;
    --msn-result-violet: #c4b5fd;
}
html.kbt-msn-tool-local[data-kbt-msn-theme="light"] .msn-tool-stage {
    --msn-result-good: #08753c;
    --msn-result-violet: #6d28d9;
}

/* Ordinary calculator/audio/device cards: foreground and background move together. */
html.kbt-msn-tool-local .msn-tool-stage :is(.art-card, .bass-card, .fr-card, .ha-panel, .pd-card, .ss-card, .fs-card, .ms-panel, .mc-card, .tk-card, .ac-card, .bw-card, .cs-card, .dt-card, .gpu-card, .gy-card, .mt-card, .rc-card) {
    background: var(--msn-card);
    color: var(--msn-ink);
    border-color: var(--msn-line);
}
html.kbt-msn-tool-local .msn-tool-stage :is(.art-card, .bass-card, .fr-card, .ha-panel, .pd-card, .ss-card, .fs-card, .ms-panel, .mc-card, .tk-card, .ac-card, .bw-card, .cs-card, .dt-card, .gpu-card, .gy-card, .mt-card, .rc-card) :is(h3, h4) {
    color: var(--msn-ink) !important;
}
html.kbt-msn-tool-local .msn-tool-stage :is(.bass-freq-btn, .bass-sweep-item, .bass-info-item, .fr-hearing, .fps-detected, .tk-preset, .bw-preset, .rc-preset, .dt-preset) {
    background: var(--msn-raised);
    color: var(--msn-ink);
    border-color: var(--msn-line);
}
html.kbt-msn-tool-local .msn-tool-stage :is(.bass-freq-btn, .bass-sweep-item):is(.active, :hover),
html.kbt-msn-tool-local .msn-tool-stage :is(.tk-preset, .bw-preset, .rc-preset, .dt-preset):hover {
    background: var(--msn-hover);
    color: var(--msn-ink);
}
html.kbt-msn-tool-local .msn-tool-stage :is(.bass-freq-btn, .bass-sweep-item).active { background: var(--msn-action-bg); color: var(--msn-action-ink); border-color: var(--msn-action-bg); }
html.kbt-msn-tool-local .msn-tool-stage :is(.bass-freq-label, .bass-sweep-desc) { color: inherit; opacity: 1; }
html.kbt-msn-tool-local .msn-tool-stage :is(.bass-info-label, .bass-slider-label, .ha-panel p, .pd-tip, .fs-note, .ms-hint, .mc-note, .dt-preset > span, #ss-mode, #fs-status) { color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage :is(.bass-info-value, .bass-sweep-title, .fr-hearing-row, #fps-hz, #fps-detected) { color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage .fr-hearing-row b { color: var(--msn-link); }
html.kbt-msn-tool-local .msn-tool-stage .fr-wrap { --fr-muted: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage :is(.fs-field > label, .ss-field > label, .mc-field > label, .tk-field > label, .ha-option > label, .ha-option > legend, .ha-value, .ha-advanced > summary, .art-card > p) { color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage .ha-note { color: var(--msn-muted) !important; }
html.kbt-msn-tool-local .msn-tool-stage .art-card > p { color: var(--msn-muted) !important; }
html.kbt-msn-tool-local .msn-tool-stage #ha-subline { color: #dbeafe; }
html.kbt-msn-tool-local .msn-tool-stage #bass-placeholder > p { color: #e2e8f0; }
html.kbt-msn-tool-local .msn-tool-stage :is(#gpu-iter-val, #gpu-res-val) { color: var(--msn-ink); }
/* These result panels keep their original pale tint in both themes. */
html.kbt-msn-tool-local .msn-tool-stage :is(.tk-box, .tk-stat) { color: #334155; }
html.kbt-msn-tool-local .msn-tool-stage .tk-box h4 { color: #334155 !important; }
html.kbt-msn-tool-local .msn-tool-stage :is(.tk-sub, .ac-stat-label, .ac-tilt-cross, .gy-read-label, .gy-read-desc) { color: #475569; }
html.kbt-msn-tool-local .msn-tool-stage :is(.bw-result, .dt-result, .rc-result, .rl-result) > span { color: #475569; }
/* Only the labels change; the orientation cube keeps every diagnostic face color. */
html.kbt-msn-tool-local .msn-tool-stage #gy-cube :is(.gy-face.f3, .gy-face.f4) { color: #000; }
html.kbt-msn-tool-local .msn-tool-stage :is(.cs-field > label, .gpu-field > label, .mt-field > label, .bw-field > label, .dt-field > label, .rc-field > label, .rl-field > label, .mt-meta, .assistant-persona-body > p) { color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage :is(.ac-wrap, .gy-wrap) { --ac-muted: var(--msn-muted); --gy-muted: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage :is(.ac-status-idle, .gy-status-idle) { background: var(--msn-raised); color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage .ac-axis-label span:first-child { color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage .ac-axis-label span:last-child { color: var(--msn-link); }
html.kbt-msn-tool-local .msn-tool-stage .dt-preset > b { color: var(--msn-ink); }

/* Informational notices, never the adjacent diagnostic image or patch. */
html.kbt-msn-tool-local .msn-tool-stage :is(.ar-tip, .bi-tip, .fps-tip, .mgh-tip, .rt-tip, .ss-tip, .su-tip, .vd-tip, .wl-tip, .cg-tip, .fov-tip, .ec-tip, .md-tip, .ma-tip, .ms-tip, .dm-tip, #bl-tip, .ha-safety) {
    background: var(--msn-card);
    color: var(--msn-ink);
    border-color: var(--msn-line);
}
html.kbt-msn-tool-local .msn-tool-stage :is(.ar-tip, .bi-tip, .fps-tip, .mgh-tip, .rt-tip, .ss-tip, .su-tip, .vd-tip, .wl-tip, .cg-tip, .fov-tip, .ec-tip, .md-tip, .ma-tip, .ms-tip, .dm-tip, #bl-tip, .ha-safety) :is(strong, h3) { color: inherit !important; }
html.kbt-msn-tool-local .msn-tool-stage :is(.ar-stat-label, .fps-big-label, .fps-stat-label, .ppi-stat-label, .rt-hero-label, .rt-card-label, .ss-stat-label, .vd-stat-label, .fov-table-heading, .fov-table th, .ec-label, .ec-cm, .mdc-label, .mdc-accuracy, .md-stat-label, .ma-stat-label, .ma-result-label, .ms-stat-label, .bl-room, .dm-chart-head > span) { color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage :is(#ar-simple, #fps-big, #rt-native, #ss-area, #vd-thx, #mdc-dpi, #md-total, #md-max, #md-samples, #ma-ratio, #ms-spins) { color: var(--msn-result-good); }
html.kbt-msn-tool-local .msn-tool-stage #ec-edpi { color: var(--msn-result-violet); }
html.kbt-msn-tool-local .msn-tool-stage #ma-verdict { color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage .ppi-stat.primary .ppi-stat-label { color: #cbd5e1; }
html.kbt-msn-tool-local .msn-tool-stage :is(.wlt-tip, .rl-card, .vb-card) { background: var(--msn-card); color: var(--msn-ink); border-color: var(--msn-line); }
html.kbt-msn-tool-local .msn-tool-stage :is(.rl-card, .vb-card) h3 { color: var(--msn-ink) !important; }
html.kbt-msn-tool-local .msn-tool-stage :is(.rl-field input, .rl-field select, .rl-preset, .vb-preset) { background: var(--msn-raised); color: var(--msn-ink); border-color: var(--msn-line); }
html.kbt-msn-tool-local .msn-tool-stage .rl-preset:hover { background: var(--msn-hover); }
html.kbt-msn-tool-local .msn-tool-stage .vb-preset.active { background: var(--msn-action-bg); color: var(--msn-action-ink); border-color: var(--msn-action-bg); }
html.kbt-msn-tool-local .msn-tool-stage .vb-preset-desc { color: inherit; opacity: 1; }
html.kbt-msn-tool-local .msn-tool-stage .vb-card > div[style*="--vb-muted"] { color: var(--msn-muted) !important; }
html.kbt-msn-tool-local .msn-tool-stage .vb-btn-danger { background: #b42318; color: #fff; }

/* Fields whose legacy dark text/background attributes contradicted one another. */
html.kbt-msn-tool-local .msn-tool-stage :is(#ss-layout, #ss-dur, #ss-freq, #mc-radius, #mc-mode, #mc-cell, #tk-dmg, #tk-rpm, #tk-hs, #tk-hp, #tk-armor, #tk-dropoff, #bw-size-t, #bw-size-unit-t, #bw-spd-t, #bw-spd-unit-t, #dt-size, #dt-size-unit, #dt-speed, #dt-speed-unit, #rc-level, #rc-drives, #rc-size, #rc-unit) {
    background: var(--msn-raised);
    color: var(--msn-ink);
    border-color: var(--msn-line);
}
html.kbt-msn-tool-local .msn-tool-stage :is(#gn-keyword, #gn-letter, #maa-dpi-input, #lw-entries, #dpi-expected, #kcd-session-label, #kcd-keyboard-model, #kcd-notes, #or-diagonal, #mdc-advertised)::placeholder { color: var(--msn-muted); opacity: 1; }

/* Existing action buttons and selected controls retain a visible selected border. */
html.kbt-msn-tool-local .msn-tool-stage :is(#ghost-start, #bl-fs, #wl-fs, .color-btn-fs, .pwm-mode .mode-btn, #pwm-freq-row .freq-btn, #pwm-start-btn, .rr-seg.is-active, #rr-start, #vib-test, #krr-reset, .sb-mode, .sb-chip, #sb-reset, .trt-chip.is-active, #lod-reset-btn, .kcps-choice.is-selected, #kcpsStart, #dpi-start, .dpi-tab-btn, #rt-modes .rt-mode-btn, #sentiment-run) {
    background: var(--msn-action-bg);
    color: var(--msn-action-ink);
    border-color: var(--msn-action-bg);
}
html.kbt-msn-tool-local .msn-tool-stage :is(#ghost-start, #bl-fs, #wl-fs, .color-btn-fs, .pwm-mode .mode-btn, #pwm-freq-row .freq-btn, #pwm-start-btn, .rr-seg.is-active, #rr-start, #vib-test, #krr-reset, .sb-mode, .sb-chip, #sb-reset, .trt-chip.is-active, #lod-reset-btn, .kcps-choice.is-selected, #kcpsStart, #dpi-start, .dpi-tab-btn, #rt-modes .rt-mode-btn, #sentiment-run):hover { background: var(--msn-action-hover); color: var(--msn-action-ink); }
html.kbt-msn-tool-local .msn-tool-stage :is(.pwm-mode .mode-btn, #pwm-freq-row .freq-btn, .sb-mode, .sb-chip, .dpi-tab-btn, #rt-modes .rt-mode-btn):not(.active):not(.is-active):not([aria-pressed="true"]) { background: var(--msn-card); color: var(--msn-muted); border-color: var(--msn-line); }
html.kbt-msn-tool-local .msn-tool-stage :is(.pwm-mode .mode-btn, #pwm-freq-row .freq-btn, .sb-mode, .sb-chip, .dpi-tab-btn, #rt-modes .rt-mode-btn):not(.active):not(.is-active):not([aria-pressed="true"]):hover { background: var(--msn-hover); color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage :is(#gn-copy-all, #gn-download) { color: var(--msn-link); }
html.kbt-msn-tool-local .msn-tool-stage #gn-mode-group { background: #00559c; color: #fff; }
/* These normal action gradients ended in pale blue/pink/green beneath white
   text. Use the same tested local action pair at every point on the button. */
html.kbt-msn-tool-local .msn-tool-stage :is(.bass-btn-primary, #fr-start, #fr-manualPlay, #ss-walk, #wc-startBtn, #wm-start, #fs-start, #ms-fs, #mc-download, #ac-start, #cs-start, #gpu-start, #gy-start, #mt-start, #vb-phonePlay, .vb-tab.active, #pd-toggle, #lw-spin) { background: var(--msn-action-bg); color: var(--msn-action-ink); }
html.kbt-msn-tool-local .msn-tool-stage :is(.bass-btn-primary, #fr-start, #fr-manualPlay, #ss-walk, #wc-startBtn, #wm-start, #fs-start, #ms-fs, #mc-download, #ac-start, #cs-start, #gpu-start, #gy-start, #mt-start, #vb-phonePlay, .vb-tab.active, #pd-toggle, #lw-spin):hover { background: var(--msn-action-hover); color: var(--msn-action-ink); }
html.kbt-msn-tool-local .msn-tool-stage #pd-toggle.pd-running { background: #b42318; color: #fff; }
html.kbt-msn-tool-local .msn-tool-stage #pd-toggle.pd-running:hover { background: #912018; color: #fff; }
html.kbt-msn-tool-local[data-kbt-msn-theme="dark"] .msn-tool-stage .touch-action-row button[data-action="reset"] { color: #fda4af; }

/* Click/key tests: status text remains distinct without changing the hit surfaces. */
html.kbt-msn-tool-local .msn-tool-stage :is(#ghost-input-title, #ghost-result-title) { color: var(--ghost-ink, #0f172a) !important; }
html.kbt-msn-tool-local .msn-tool-stage .ghost-intro h3 { color: var(--ghost-ink, #0f172a) !important; }
html.kbt-msn-tool-local .msn-tool-stage :is(.ghost-intro p, #ghost-area-help) { color: #475569; }
html.kbt-msn-tool-local .msn-tool-stage :is(.pen-pressure-stat-grid, .pen-pressure-reach-grid) strong { color: var(--msn-result-good); }
html.kbt-msn-tool-local .msn-tool-stage :is(.apm-check, .apm-custom-duration > span, .apm-control-label, .apm-score-label, .apm-score-subgrid > div > span, .apm-stat > span, #apm-status) { color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage #apm-start { background: #08753c; color: #fff; }
html.kbt-msn-tool-local .msn-tool-stage .kcd-choice-copy strong > small,
html.kbt-msn-tool-local .msn-tool-stage .kcd-segmented input:checked + span { background: var(--msn-action-bg); color: var(--msn-action-ink); }
html.kbt-msn-tool-local .msn-tool-stage .kcd-segmented input:checked + span > b { color: inherit; }
html.kbt-msn-tool-local .msn-tool-stage #kcd-capture .kcd-eyebrow { color: #c7d5e8; }
html.kbt-msn-tool-local .msn-tool-stage .kcd-full-test .kcd-step { color: #fff; }
html.kbt-msn-tool-local .msn-tool-stage .kcd-live-key span { color: #c7d5e8; }
html.kbt-msn-tool-local .msn-tool-stage :is(.kbt-cps__live, .kbt-cps__duration.is-selected, .kbt-cps__special, .kbt-rcc__special) { background: var(--msn-raised); color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage :is(.kbt-cps__live, .kbt-cps__result-grid) > div { background: var(--msn-raised); color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage :is(.kbt-cps__live > div > span, #kbt-cps-duration, #kbt-cps-clicks, #kbt-cps-time, #kbt-cps-live, .kbt-cps__duration.is-selected > span, .kbt-cps__special a, .kbt-rcc__special a) { color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage :is(.kbt-rcc__eyebrow, #kbt-rcc-hardware-note) { color: #4c2333; }
html.kbt-msn-tool-local[data-kbt-msn-theme="dark"] .msn-tool-stage #kbt-rcc-hardware-note { color: #fce7f3; }
html.kbt-msn-tool-local .msn-tool-stage :is(.game-help-title, .game-help-text) { color: #253044 !important; }
html.kbt-msn-tool-local .msn-tool-stage .game-title { color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage #gp-log .gp-log-empty { color: var(--msn-muted); opacity: 1; }
html.kbt-msn-tool-local .msn-tool-stage :is(#left-drift-status, #right-drift-status, #fault-summary) { color: var(--msn-result-good); }
/* Native gamepad pages write state colors inline. Match only each known state,
   including the browser's rgb serialization, so OK never masks a drift alert. */
html.kbt-msn-tool-local .msn-tool-stage .gamepad-tool :is(#left-drift-status, #right-drift-status):is([style*="#2ecc71" i], [style*="rgb(46, 204, 113)"]) { color: var(--msn-result-good) !important; }
html.kbt-msn-tool-local .msn-tool-stage .gamepad-tool :is(#left-drift-status, #right-drift-status):is([style*="#e74c3c" i], [style*="rgb(231, 76, 60)"]) { color: #fca5a5 !important; }
html.kbt-msn-tool-local[data-kbt-msn-theme="light"] .msn-tool-stage .gamepad-tool :is(#left-drift-status, #right-drift-status):is([style*="#e74c3c" i], [style*="rgb(231, 76, 60)"]) { color: #b42318 !important; }
html.kbt-msn-tool-local .msn-tool-stage :is(#left-click-count, #left-click-status, #middle-click-count, #middle-click-status, #right-click-count, #right-click-status, #scroll-count, #scroll-status) { color: #102c27; }
html.kbt-msn-tool-local .msn-tool-stage :is(.mouse-tester, #mouse-test-tool, #mouse-test, #mouse-tester) #reset-button { background: #b42318; color: #fff; }
html.kbt-msn-tool-local .msn-tool-stage .gamepad-tool #reset-btn { background: var(--msn-action-bg); color: var(--msn-action-ink); }
html.kbt-msn-tool-local .msn-tool-stage .maa-dim { color: var(--msn-muted); opacity: 1; }
html.kbt-msn-tool-local .msn-tool-stage :is(#mdc-run-count, #rating) { color: var(--msn-result-good); }
html.kbt-msn-tool-local .msn-tool-stage #reaction-box-sub { color: #fff; opacity: 1; }
html.kbt-msn-tool-local .msn-tool-stage :is(.rr-graph-legend, .ss-listener) { color: #cbd5e1; }
html.kbt-msn-tool-local .msn-tool-stage :is(.ct-wcag, .ct-note2) { color: var(--msn-muted); opacity: 1; }
html.kbt-msn-tool-local .msn-tool-stage #wm-placeholder p { color: #c8c8c8; }
/* This meter panel stays navy in both themes; its labels retain a pale palette. */
html.kbt-msn-tool-local .msn-tool-stage .dm-gauge-panel .dm-kicker { color: #93c5fd; }
html.kbt-msn-tool-local .msn-tool-stage .dm-gauge-panel #dm-gauge-title { color: #fff !important; }
html.kbt-msn-tool-local .msn-tool-stage .dm-gauge-panel #dm-zone-note { color: #e2e8f0; }
html.kbt-msn-tool-local .msn-tool-stage .dm-gauge-panel .dm-privacy { color: #cbd5e1; }
html.kbt-msn-tool-local .msn-tool-stage #jis109-browser-note { background: var(--msn-card); color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage #jis109-browser-note strong { color: inherit; }

/* Printer controls and explanatory chrome are separate from the print sheet. */
html.kbt-msn-tool-local .msn-tool-stage .ptp-intro > div > p { color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage .ptp-eyebrow { color: var(--msn-link) !important; }
html.kbt-msn-tool-local .msn-tool-stage :is(.ptp-interpreter, .ptp-preview-head) { background: var(--msn-card); color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage .ptp-interpreter > div > p { color: var(--msn-muted); }
html.kbt-msn-tool-local .msn-tool-stage #ptpInterpreterTitle { color: var(--msn-ink) !important; }
html.kbt-msn-tool-local .msn-tool-stage #ptpPreviewTitle { color: var(--msn-muted) !important; }
html.kbt-msn-tool-local .msn-tool-stage .ptp-size-warning { background: var(--msn-card); color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage .ptp-size-warning strong { color: inherit; }
html.kbt-msn-tool-local .msn-tool-stage .ptp-segmented label > span { background: var(--msn-raised); color: var(--msn-ink); border-color: var(--msn-line); }
html.kbt-msn-tool-local .msn-tool-stage .ptp-segmented input:checked + span { background: var(--msn-action-bg); color: var(--msn-action-ink); border-color: var(--msn-action-bg); }

/* AI assistant profile chrome, excluding its conversation/output region. */
html.kbt-msn-tool-local .msn-tool-stage .assistant-persona-body { background: var(--msn-card); color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage .assistant-persona-body h3 { color: var(--msn-ink) !important; }
html.kbt-msn-tool-local .msn-tool-stage .assistant-persona-body .landing-btn-ghost { background: var(--msn-raised); color: var(--msn-ink); }
html.kbt-msn-tool-local .msn-tool-stage#ai-assistant [style*="background:#fff"] { color: #0f172a; }
html.kbt-msn-tool-local .msn-tool-stage #sentiment-input-title { color: var(--sentiment-ink, #111827) !important; }
