/* Unified light theme override, 2026-09-20. Loaded after the compiled bundle. */
:root,
:root[data-theme="dark"],
:root[data-theme="light"] {
  color-scheme: light !important;
  --fc-bg: #f7f9fc !important;
  --fc-bg-deep: #eef2f7 !important;
  --fc-surface: #ffffff !important;
  --fc-surface-hi: #f8fafc !important;
  --fc-elevated: #ffffff !important;
  --fc-bg-body: #f4f7fb !important;
  --fc-bg-root: #eef2f7 !important;
  --fc-bg-shell: #f7f9fc !important;
  --fc-bg-panel: #ffffff !important;
  --fc-bg-sidebar: #ffffff !important;
  --fc-bg-topbar: #ffffff !important;
  --fc-bg-page: #f4f7fb !important;
  --fc-text: #334155 !important;
  --fc-text-hi: #0f172a !important;
  --fc-text-lo: #64748b !important;
  --fc-text-mute: #64748b !important;
  --fc-text-secondary: #334155 !important;
  --fc-text-muted: #64748b !important;
  --fc-text-topbar: #334155 !important;
  --fc-text-topbar-muted: #64748b !important;
  --fc-border: #d8e1ec !important;
  --fc-border-soft: #e7edf4 !important;
  --fc-border-hi: #cbd5e1 !important;
  --fc-input-bg: #f8fafc !important;
  --fc-hover-bg: #f1f5f9 !important;
  --fc-table-row-border: #e7edf4 !important;
  --fc-th-bg: #f8fafc !important;
  --fc-sidebar-nav: #334155 !important;
  --fc-sidebar-nav-hover: #0f172a !important;
  --fc-sidebar-active-bg: #fff1f2 !important;
  --fc-sidebar-active-border: #fecdd3 !important;
  --fc-scrollbar: #cbd5e1 !important;
  --fc-toast-bg: #ffffff !important;
  --fc-toast-border: #d8e1ec !important;
  --fc-toast-text: #0f172a !important;
  --fc-form-label: #334155 !important;
  --fc-form-hint: #64748b !important;
  --fc-shadow-sm: 0 1px 3px rgba(15, 23, 42, .08), 0 1px 2px rgba(15, 23, 42, .04) !important;
  --fc-shadow: 0 6px 18px rgba(15, 23, 42, .09) !important;
  --fc-shadow-lg: 0 14px 32px rgba(15, 23, 42, .12) !important;
  --fc-shadow-xl: 0 24px 50px rgba(15, 23, 42, .14) !important;
  --soy-bg: #f4f7fb !important;
  --soy-card: #ffffff !important;
  --soy-border: #d8e1ec !important;
  --soy-border-soft: #e7edf4 !important;
  --soy-text: #0f172a !important;
  --soy-text-2: #334155 !important;
  --soy-muted: #64748b !important;
  --soy-shadow: 0 4px 16px rgba(15, 23, 42, .08) !important;
  --lg-bg-1: #f4f7fb !important;
  --lg-bg-2: #eef2f7 !important;
  --lg-bg-3: #ffffff !important;
  --lg-white: #ffffff !important;
  --lg-text: #0f172a !important;
  --lg-text-2: #475569 !important;
  --lg-text-3: #64748b !important;
  --lg-border: #cbd5e1 !important;
  --lg-shadow-sm: 0 1px 3px rgba(15, 23, 42, .08) !important;
  --lg-shadow: 0 8px 24px rgba(15, 23, 42, .10) !important;
  --lg-shadow-lg: 0 14px 34px rgba(15, 23, 42, .12) !important;
  --lg-shadow-xl: 0 24px 54px rgba(15, 23, 42, .16) !important;
}

html, body, #root, .ant-app, .ant-layout, .ant-layout-content {
  background: #f4f7fb !important;
  color: #334155 !important;
}

body { color-scheme: light !important; }
::selection { background: #fecdd3 !important; color: #881337 !important; }

/* Login */
.login-page {
  background: linear-gradient(135deg, #f7f9fc 0%, #eef5ff 52%, #fff7f7 100%) !important;
  color: #0f172a !important;
}
.login-container {
  background: #ffffff !important;
  border-color: #d8e1ec !important;
  box-shadow: 0 24px 60px rgba(15, 23, 42, .16) !important;
}
.login-form-section { background: #ffffff !important; }
.login-form-header h2 { color: #0f172a !important; }
.login-form-header p, .form-footer { color: #64748b !important; }
.login-page .ant-input-affix-wrapper,
.login-page .ant-input,
.login-page input {
  background: #f8fafc !important;
  color: #0f172a !important;
  border-color: #cbd5e1 !important;
}
.login-page .ant-input-affix-wrapper:hover,
.login-page .ant-input-affix-wrapper-focused {
  border-color: #e63946 !important;
  box-shadow: 0 0 0 3px rgba(230, 57, 70, .10) !important;
}
.login-page input::placeholder { color: #94a3b8 !important; }
.checkbox-mark { background: #ffffff !important; border-color: #94a3b8 !important; }

/* Ant Design shell and common surfaces */
.ant-layout-header,
.ant-layout-sider,
.ant-layout-sider-dark,
.ant-layout-sider-children { background: #ffffff !important; color: #334155 !important; }
.ant-layout-header {
  border-bottom: 1px solid #d8e1ec !important;
  box-shadow: 0 2px 10px rgba(15, 23, 42, .06) !important;
}
.ant-layout-sider { border-right: 1px solid #d8e1ec !important; }
.brand-lockup { border-bottom-color: #e7edf4 !important; }
.brand-lockup-name { color: #0f172a !important; }
.brand-lockup-sub { color: #64748b !important; }
.ant-menu, .ant-menu-light, .ant-menu-sub, .ant-menu-inline { background: #ffffff !important; color: #475569 !important; }
.ant-menu-item, .ant-menu-submenu-title { color: #475569 !important; }
.ant-menu-item:hover, .ant-menu-submenu-title:hover { background: #f1f5f9 !important; color: #0f172a !important; }
.ant-menu-item-selected { background: #fff1f2 !important; color: #be123c !important; }
.ant-menu-item-selected::after { border-right-color: #e63946 !important; }
.ant-card, .ant-card-bordered, .ant-table-wrapper, .ant-table, .ant-table-container,
.ant-table-content, .ant-modal-content, .ant-drawer-content, .ant-drawer-header,
.ant-popover-inner, .ant-dropdown-menu, .ant-select-dropdown, .ant-picker-panel-container,
.ant-tooltip-inner {
  background: #ffffff !important;
  color: #334155 !important;
  border-color: #d8e1ec !important;
}
.ant-card-head, .ant-modal-header, .ant-modal-footer, .ant-table-thead > tr > th {
  background: #f8fafc !important;
  color: #0f172a !important;
  border-color: #d8e1ec !important;
}
.ant-table-tbody > tr > td { background: #ffffff !important; color: #334155 !important; border-color: #e7edf4 !important; }
.ant-table-tbody > tr:hover > td { background: #f8fafc !important; }
.ant-typography, .ant-modal-title, .ant-drawer-title, .ant-form-item-label > label,
.ant-radio-wrapper, .ant-checkbox-wrapper { color: #334155 !important; }
.ant-input, .ant-input-affix-wrapper, .ant-input-number, .ant-picker,
.ant-select-selector, .ant-segmented {
  background: #f8fafc !important;
  color: #0f172a !important;
  border-color: #cbd5e1 !important;
}
.ant-input::placeholder, .ant-input input::placeholder { color: #94a3b8 !important; }
.ant-select-selection-item, .ant-select-selection-placeholder, .ant-select-arrow { color: #475569 !important; }
.ant-btn-default { background: #ffffff !important; color: #334155 !important; border-color: #cbd5e1 !important; box-shadow: none !important; }
.ant-btn-default:hover { background: #f8fafc !important; color: #be123c !important; border-color: #e63946 !important; }
.ant-btn-primary { color: #ffffff !important; }
.ant-pagination-item { background: #ffffff !important; border-color: #cbd5e1 !important; }
.ant-pagination-item a { color: #334155 !important; }
.ant-pagination-item-active { border-color: #e63946 !important; }
.ant-empty-description { color: #64748b !important; }

/* Dashboard and custom components */
.dashboard-root { background: linear-gradient(180deg, #f7f9fc, #eef2f7) !important; color: #334155 !important; }
.dashboard-topbar, .rc-sidebar, .dashboard-hero, .rc-device-toolbar, .rc-table-wrap,
.device-card, .panel, .rc-header-elevated, .s-card, .admin-add-form, .rc-pagination {
  background: #ffffff !important;
  border-color: #d8e1ec !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, .08) !important;
}
.dashboard-hero h1, .rc-logo, .rc-header, .rc-header-elevated, .panel h3, .panel h4,
.admin-head h3, .modal-title, .modal-head, .s-card .s-val, .topbar-clock,
.rc-table td, .rc-table-dense td, .dc-row span:last-child {
  color: #0f172a !important;
  text-shadow: none !important;
}
.dashboard-hero p, .rc-top-left span, .td-muted, .td-sm, .dc-label, .modal-label,
.placeholder-panel, .s-card .s-title { color: #64748b !important; }
.topbar-user, .topbar-online, .topbar-tz, .rc-sidebar nav button { color: #475569 !important; }
.rc-sidebar nav button:hover { background: #f1f5f9 !important; color: #0f172a !important; }
.rc-sidebar nav button.on { background: #fff1f2 !important; color: #be123c !important; border-color: #fecdd3 !important; }
.rc-table th, .rc-table-dense th { background: #f8fafc !important; color: #334155 !important; border-color: #d8e1ec !important; }
.rc-table td, .rc-table-dense td { background: #ffffff !important; border-color: #e7edf4 !important; }
.rc-table tr:hover td, .rc-table-dense tr:hover td { background: #f8fafc !important; }
.rc-search, .rc-top-right select, .view-toggle, .sel-badge, .hero-meta span,
.rc-main input:not([type=checkbox]):not([type=radio]), .rc-main select, .rc-main textarea {
  background: #f8fafc !important;
  border-color: #cbd5e1 !important;
  color: #0f172a !important;
  box-shadow: none !important;
}
.panel, .panel span, .panel div, .panel label, .panel td { color: #334155; }
.panel h3, .panel h4, .panel strong, .panel b { color: #0f172a !important; }

/* Full device-control page */
.control-page, .ctrl-screen-area { background: #f4f7fb !important; color: #334155 !important; }
.ctrl-header, .ctrl-tabs, .ctrl-toolbar, .ctrl-sidebar, .ctrl-sidebar-panel, .ctrl-quick-panel {
  background: #ffffff !important;
  border-color: #d8e1ec !important;
}
.ctrl-header-brand, .ctrl-tab-panel-head h2, .ctrl-sidebar h3, .ctrl-device-row .device-name,
.sidebar-card-head { color: #0f172a !important; }
.ctrl-time-row, .ctrl-ws-status, .ctrl-ws-status.connected, .ctrl-device-row label { color: #64748b !important; }
.ctrl-tab { background: #f8fafc !important; color: #475569 !important; border-color: #d8e1ec !important; }
.ctrl-tab:hover { background: #fff1f2 !important; color: #be123c !important; border-color: #fecdd3 !important; }
.ctrl-tab.active { background: #ffe4e6 !important; color: #9f1239 !important; border-color: #fda4af !important; box-shadow: none !important; }
.ctrl-tab-panel-head p, .ctrl-empty-inline { color: #64748b !important; }
.ctrl-device-list, .sidebar-card {
  background: #ffffff !important;
  border-color: #d8e1ec !important;
  box-shadow: 0 2px 8px rgba(15, 23, 42, .06) !important;
}
.ctrl-device-row:hover { background: #f1f5f9 !important; }
.ctrl-device-row span { color: #334155 !important; }
.sidebar-card-head { background: #f8fafc !important; border-color: #d8e1ec !important; }
.sidebar-divider { background: #e7edf4 !important; }
.sidebar-input, .sidebar-textarea, .ctrl-input { background: #f8fafc !important; color: #0f172a !important; border-color: #cbd5e1 !important; }
.sidebar-input::placeholder, .sidebar-textarea::placeholder, .ctrl-input::placeholder { color: #94a3b8 !important; }
.sidebar-btn:not(.is-on), .sidebar-btn-sm:not(.is-on), .ctrl-qbtn:not(.is-on),
.ctrl-btn:not(.primary):not(.danger), .ctrl-tab-action {
  background: #ffffff !important;
  color: #334155 !important;
  border-color: #cbd5e1 !important;
  box-shadow: none !important;
}
.sidebar-btn:not(.is-on):hover, .sidebar-btn-sm:not(.is-on):hover,
.ctrl-qbtn:not(.is-on):hover, .ctrl-btn:not(.primary):not(.danger):hover,
.ctrl-tab-action:hover {
  background: #f8fafc !important;
  color: #be123c !important;
  border-color: #e63946 !important;
}
.ctrl-log-row { background: #ffffff !important; color: #334155 !important; border-color: #d8e1ec !important; }

/* Dialogs, menus and administration forms */
.modal-overlay { background: rgba(15, 23, 42, .28) !important; }
.modal, .modal-beautiful, .modal-content {
  background: #ffffff !important;
  color: #334155 !important;
  border-color: #d8e1ec !important;
  box-shadow: 0 24px 64px rgba(15, 23, 42, .20) !important;
}
.modal-head, .modal-footer { background: #ffffff !important; border-color: #e7edf4 !important; }
.modal-label, .modal-switch-text, .perm-item { color: #475569 !important; }
.modal-input, .role-select { background: #f8fafc !important; color: #0f172a !important; border-color: #cbd5e1 !important; }
.modal-input::placeholder { color: #94a3b8 !important; }
.modal-section-title { color: #7c3aed !important; border-color: #e9d5ff !important; }
.expire-preset-btn, .perm-quick-btn { background: #faf5ff !important; color: #6d28d9 !important; border-color: #d8b4fe !important; }
.expire-preset-btn:hover, .expire-preset-btn.active, .perm-quick-btn:hover { background: #f3e8ff !important; color: #581c87 !important; border-color: #c084fc !important; }
.modal-btn-cancel { background: #fff1f2 !important; color: #be123c !important; border-color: #fecdd3 !important; }
.fc-card, .fc-table-wrap, .fc-stat, .fc-toast { background: #ffffff !important; color: #334155 !important; border-color: #d8e1ec !important; box-shadow: var(--fc-shadow-sm) !important; }
.fc-card-title, .fc-empty-title, .fc-stat-value { color: #0f172a !important; }
.fc-input, .fc-select, .fc-textarea { background: #f8fafc !important; color: #0f172a !important; border-color: #cbd5e1 !important; }
.fc-btn--secondary, .fc-btn--ghost { background: #ffffff !important; color: #334155 !important; border-color: #cbd5e1 !important; }
.fc-btn--secondary:hover, .fc-btn--ghost:hover { background: #f8fafc !important; color: #be123c !important; border-color: #e63946 !important; }

/* Device previews display real pixels and intentionally remain black. */
.ctrl-phone-frame, .ctrl-phone-screen, .ctrl-phone-nav { background: #0a0a0a !important; }
.ctrl-phone-nav { border-color: rgba(255, 255, 255, .12) !important; }
.ctrl-phone-nav button { color: #ffffff !important; }

/* Compiled React views use inline dark palette values; map those values to light surfaces. */
.ant-layout-content [style*="background: rgb(36, 18, 18)"],
.ant-layout-content [style*="background: rgb(26, 10, 10)"],
.ant-layout-content [style*="background: rgb(15, 6, 6)"] {
  background: #ffffff !important;
}
.ant-layout-content [style*="background: rgb(46, 22, 22)"],
.ant-layout-content [style*="background: rgba(255, 255, 255, 0.06)"],
.ant-layout-content [style*="background: rgba(255,255,255,.06)"] {
  background: #f8fafc !important;
}
.ant-layout-content [style*="border: 1px solid rgb(58, 32, 32)"],
.ant-layout-content [style*="border-bottom: 1px solid rgb(58, 32, 32)"],
.ant-layout-content [style*="border-top: 1px solid rgb(58, 32, 32)"],
.ant-layout-content [style*="border-color: rgb(58, 32, 32)"],
.ant-layout-content [style*="border-left-color: rgb(58, 32, 32)"] {
  border-color: #d8e1ec !important;
}
.ant-layout-content [style*="color: rgb(229, 213, 213)"] { color: #0f172a !important; }
.ant-layout-content [style*="color: rgb(201, 169, 169)"] { color: #64748b !important; }
.ant-layout-content [style*="color: rgb(154, 122, 122)"] { color: #94a3b8 !important; }
.ant-layout-content [style*="box-shadow: rgba(0, 0, 0, 0.32)"] {
  box-shadow: 0 4px 14px rgba(15, 23, 42, .08) !important;
}
.ant-layout-content button[style*="background: #ffffff"],
.ant-layout-content button[style*="background: rgb(255, 255, 255)"],
.ant-layout-content button[style*="background: #f8fafc"],
.ant-layout-content button[style*="background: rgb(248, 250, 252)"] {
  color: #334155 !important;
}
.ant-layout-content button:disabled {
  background: #f1f5f9 !important;
  color: #94a3b8 !important;
  border-color: #d8e1ec !important;
  opacity: 1 !important;
}
.ant-layout-content input,
.ant-layout-content select,
.ant-layout-content textarea {
  background: #ffffff !important;
  color: #0f172a !important;
  border-color: #cbd5e1 !important;
}
.ant-layout-content input::placeholder,
.ant-layout-content textarea::placeholder { color: #94a3b8 !important; }
.ant-tag-success {
  background: #ecfdf5 !important;
  color: #047857 !important;
  border-color: #a7f3d0 !important;
}

/* Restore intentional dark phone-preview chrome after inline palette mapping. */
.ant-layout-content .ctrl-phone-frame,
.ant-layout-content .ctrl-phone-screen,
.ant-layout-content .ctrl-phone-nav { background: #0a0a0a !important; }
.ant-layout-content .ctrl-phone-nav button { background: transparent !important; color: #ffffff !important; }

/* Remaining Ant component states */
.ant-table-placeholder,
.ant-table-placeholder > td,
.ant-table-placeholder:hover > td {
  background: #ffffff !important;
  color: #64748b !important;
}
.ant-segmented-item { color: #475569 !important; }
.ant-segmented-item-selected {
  background: #ffffff !important;
  color: #0f172a !important;
  box-shadow: 0 1px 4px rgba(15, 23, 42, .12) !important;
}
.ant-tag-gold { background: #fffbeb !important; color: #a16207 !important; border-color: #fde68a !important; }
.ant-tag-purple { background: #faf5ff !important; color: #7e22ce !important; border-color: #e9d5ff !important; }
.ant-tag:not(.ant-tag-success):not(.ant-tag-gold):not(.ant-tag-purple) {
  background: #f8fafc;
  color: #475569;
  border-color: #d8e1ec;
}
.ant-dropdown-menu-item,
.ant-dropdown-menu-title-content,
.ant-dropdown-menu-item .anticon {
  color: #334155 !important;
}
.ant-dropdown-menu-item:hover { background: #f1f5f9 !important; }

/* Device-control workspace: override its compiled inline dark palette. */
.control-page .home-tab-topbar,
.control-page .ctrl-tabs-bar,
.control-page .ctrl-tabs-custom,
.control-page [style*="background: rgb(36, 18, 18)"],
.control-page [style*="background:#241212"] {
  background: #ffffff !important;
  border-color: #d8e1ec !important;
}
.control-page .ctrl-device-row.topbar-item,
.control-page [style*="background: rgb(46, 22, 22)"],
.control-page [style*="background:#2e1616"] {
  background: #f8fafc !important;
  border-color: #d8e1ec !important;
}
.control-page [style*="background: rgb(58, 32, 32)"],
.control-page [style*="background:#3a2020"] {
  background: #f1f5f9 !important;
  border-color: #cbd5e1 !important;
}
.control-page [style*="background: rgb(10, 10, 10)"],
.control-page [style*="background: rgb(0, 0, 0)"],
.control-page [style*="background:#0a0a0a"],
.control-page [style*="background:#000"] {
  background: #f8fafc !important;
}
.control-page [style*="border: 1px solid rgb(58, 32, 32)"],
.control-page [style*="border-bottom: 1px solid rgb(58, 32, 32)"],
.control-page [style*="border-top: 1px solid rgb(58, 32, 32)"],
.control-page [style*="border-color: rgb(58, 32, 32)"],
.control-page [style*="border-left-color: rgb(58, 32, 32)"] {
  border-color: #d8e1ec !important;
}
.control-page [style*="color: rgb(229, 213, 213)"],
.control-page [style*="color: rgb(255, 242, 242)"] { color: #0f172a !important; }
.control-page [style*="color: rgb(201, 169, 169)"],
.control-page [style*="color: rgb(154, 122, 122)"] { color: #64748b !important; }
.control-page button[style*="background: rgb(58, 32, 32)"],
.control-page button[style*="background:#3a2020"],
.control-page button[style*="background: rgb(51, 65, 85)"],
.control-page button[style*="background:#334155"] {
  background: #ffffff !important;
  color: #334155 !important;
  border-color: #cbd5e1 !important;
  box-shadow: none !important;
}
.control-page button[style*="background: rgb(58, 32, 32)"]:hover,
.control-page button[style*="background: rgb(51, 65, 85)"]:hover {
  background: #fff1f2 !important;
  color: #be123c !important;
  border-color: #e63946 !important;
}
.control-page button:disabled {
  background: #f1f5f9 !important;
  color: #94a3b8 !important;
  border-color: #d8e1ec !important;
}
.control-page input:not([type=color]):not([type=range]),
.control-page select,
.control-page textarea {
  background: #ffffff !important;
  color: #0f172a !important;
  border-color: #cbd5e1 !important;
}
.control-page input::placeholder,
.control-page textarea::placeholder { color: #94a3b8 !important; }
.control-page .trojan-screens > div,
.control-page .trojan-control-panel > div {
  border-color: #d8e1ec !important;
  box-shadow: none !important;
}
.control-page .ctrl-tabs-custom .ctrl-custom-tab { color: #475569 !important; }
.control-page .ctrl-tabs-custom .ctrl-custom-tab:hover { background: #f1f5f9 !important; color: #0f172a !important; }
.control-page .ctrl-tabs-custom .ctrl-custom-tab.active { background: #fff1f2 !important; color: #be123c !important; border-color: #e63946 !important; }

/* Real phone pixels remain untouched when a live image is present. */
.control-page .ctrl-phone-screen:has(img),
.control-page .ctrl-phone-screen:has(canvas) { background: #0a0a0a !important; }

.control-page .home-tab-topbar-pwd {
  background: #fffbeb !important;
  background-image: none !important;
  border-color: #fde68a !important;
  box-shadow: none !important;
  color: #334155 !important;
}
.control-page .topbar-pwd-label { color: #a16207 !important; }
.control-page .topbar-pwd-value { color: #92400e !important; text-shadow: none !important; }

/* Application / injection workspace uses a standalone compiled palette. */
.control-page .inj-layout {
  background: #f4f7fb !important;
  color: #334155 !important;
}
.control-page .inj-panel,
.control-page .inj-panel-apps,
.control-page .inj-panel-col {
  background: #ffffff !important;
  color: #334155 !important;
  border-color: #d8e1ec !important;
  box-shadow: 0 2px 10px rgba(15, 23, 42, .06) !important;
}
.control-page .inj-panel-col {
  box-shadow: none !important;
}
.control-page .inj-panel-head {
  background: #f8fafc !important;
  color: #0f172a !important;
  border-color: #d8e1ec !important;
}
.control-page .inj-panel-title,
.control-page .inj-app-name,
.control-page .inj-app-name-txt,
.control-page .inj-cell-app,
.control-page .inj-cell-val {
  color: #0f172a !important;
}
.control-page .inj-title-count {
  background: #e2e8f0 !important;
  color: #334155 !important;
  border-color: #cbd5e1 !important;
}
.control-page .inj-searchbar {
  background: #ffffff !important;
  color: #334155 !important;
  border-color: #cbd5e1 !important;
  box-shadow: 0 1px 2px rgba(15, 23, 42, .04) !important;
}
.control-page .inj-searchbar:focus-within {
  border-color: #e63946 !important;
  box-shadow: 0 0 0 3px rgba(230, 57, 70, .12) !important;
}
.control-page .inj-searchbar input {
  background: transparent !important;
  color: #0f172a !important;
  border: 0 !important;
  box-shadow: none !important;
}
.control-page .inj-searchbar input::placeholder,
.control-page .inj-search-ic,
.control-page .inj-empty,
.control-page .inj-empty-ic {
  color: #64748b !important;
}
.control-page .inj-table-scroll {
  background: #ffffff !important;
  border-color: #d8e1ec !important;
}
.control-page .inj-table {
  background: #ffffff !important;
  color: #334155 !important;
}
.control-page .inj-table thead,
.control-page .inj-table thead tr,
.control-page .inj-table th {
  background: #f8fafc !important;
  color: #475569 !important;
  border-color: #d8e1ec !important;
}
.control-page .inj-table tbody,
.control-page .inj-table tbody tr,
.control-page .inj-table td {
  background: #ffffff !important;
  color: #334155 !important;
  border-color: #e7edf4 !important;
}
.control-page .inj-table tbody tr:hover,
.control-page .inj-table tbody tr:hover td {
  background: #f8fafc !important;
}
.control-page .inj-app-pkg,
.control-page .inj-app-ver,
.control-page .inj-cell-pkg,
.control-page .inj-cell-time,
.control-page .inj-page-info {
  color: #64748b !important;
}
.control-page .inj-val-mono { color: #334155 !important; }
.control-page .inj-pagination {
  background: #f8fafc !important;
  color: #475569 !important;
  border-color: #d8e1ec !important;
}
.control-page .inj-page-size,
.control-page .inj-page-btns button,
.control-page .inj-refresh-btn,
.control-page .inj-tool-btn {
  background: #ffffff !important;
  color: #334155 !important;
  border-color: #cbd5e1 !important;
  box-shadow: none !important;
}
.control-page .inj-page-size:hover,
.control-page .inj-page-btns button:not(:disabled):hover,
.control-page .inj-refresh-btn:not(:disabled):hover,
.control-page .inj-tool-btn:not(:disabled):hover {
  background: #fff1f2 !important;
  color: #be123c !important;
  border-color: #e63946 !important;
}
.control-page .inj-page-btns .inj-page-cur {
  background: #e63946 !important;
  color: #ffffff !important;
  border-color: #e63946 !important;
}
.control-page .inj-page-btns button:disabled,
.control-page .inj-refresh-btn:disabled,
.control-page .inj-tool-btn:disabled {
  background: #f1f5f9 !important;
  color: #94a3b8 !important;
  border-color: #d8e1ec !important;
  opacity: 1 !important;
}
.control-page .inj-fetch-btn {
  background: #e63946 !important;
  color: #ffffff !important;
  border-color: #e63946 !important;
  box-shadow: none !important;
}
.control-page .inj-fetch-btn:not(:disabled):hover {
  background: #c81e35 !important;
  color: #ffffff !important;
  border-color: #c81e35 !important;
}
.control-page .inj-fetch-btn:disabled {
  background: #f1f5f9 !important;
  color: #94a3b8 !important;
  border-color: #d8e1ec !important;
  opacity: 1 !important;
}
.control-page .inj-pill,
.control-page .inj-del-btn,
.control-page .inj-pill:hover,
.control-page .inj-del-btn:hover {
  color: #ffffff !important;
}
.control-page .inj-live-dot {
  border-color: #ffffff !important;
  box-shadow: 0 0 0 2px rgba(16, 185, 129, .18) !important;
}
.control-page .inj-app-ic,
.control-page .inj-app-ic-fb {
  background: #f1f5f9 !important;
  border-color: #d8e1ec !important;
}
.control-page .inj-btn-spinner-dark {
  border-color: rgba(51, 65, 85, .22) !important;
  border-top-color: #334155 !important;
}

/* ============================================================
   Readability pass, 2026-10-12
   1) offline device cards (bg #120808 was never mapped)
   2) antd text/link buttons still use dark-theme tokens
   3) AB-build page icon-only download/QR/delete buttons
   4) remaining low-contrast inline text colors on light surfaces
   ============================================================ */

/* --- 1. Offline device cards: #120808 stayed dark while its text got mapped dark --- */
.ant-layout-content [style*="background: rgb(18, 8, 8)"] {
  background: #f8fafc !important;
}

/* --- 2. antd text/link buttons: dark algorithm gives them near-white text --- */
.ant-btn-text { color: #334155 !important; }
.ant-btn-text:hover { color: #be123c !important; background: #f1f5f9 !important; }
.ant-btn-text.ant-btn-dangerous { color: #dc2626 !important; }
.ant-btn-text.ant-btn-dangerous:hover { color: #b91c1c !important; background: #fef2f2 !important; }
.ant-btn-text.ant-btn-disabled,
.ant-btn-text:disabled {
  color: #94a3b8 !important;
  background: #f1f5f9 !important;
}
.ant-btn-link { color: #1668dc !important; }
.ant-form-item-explain-error { color: #dc2626 !important; }

/* --- 3. AB包构建页: icon-only text buttons become real, visible buttons --- */
.ant-btn-text:has(.anticon-download) {
  background: #e63946 !important;
  border: 1px solid #e63946 !important;
  color: #ffffff !important;
  padding: 0 10px !important;
  box-shadow: 0 1px 3px rgba(230, 57, 70, .35) !important;
}
.ant-btn-text:has(.anticon-download):hover {
  background: #c81e35 !important;
  border-color: #c81e35 !important;
  color: #ffffff !important;
}
.ant-btn-text:has(.anticon-qrcode) {
  background: #fff1f2 !important;
  border: 1px solid #fda4af !important;
  color: #be123c !important;
  padding: 0 10px !important;
}
.ant-btn-text:has(.anticon-qrcode):hover {
  background: #ffe4e6 !important;
  border-color: #e63946 !important;
  color: #9f1239 !important;
}
.ant-btn-text.ant-btn-dangerous:has(.anticon-delete) {
  background: #ffffff !important;
  border: 1px solid #fecaca !important;
  color: #dc2626 !important;
  padding: 0 10px !important;
}
.ant-btn-text.ant-btn-dangerous:has(.anticon-delete):hover {
  background: #fef2f2 !important;
  border-color: #dc2626 !important;
}
.ant-btn-text.ant-btn-dangerous.ant-btn-disabled:has(.anticon-delete) {
  background: #f8fafc !important;
  border-color: #e2e8f0 !important;
  color: #cbd5e1 !important;
}

/* --- 4. Amber / green / blue / red / purple / gray text mapped for light surfaces --- */
:is(.ant-layout-content, .control-page) [style*="color: rgb(252, 163, 17)"] { color: #b45309 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(245, 158, 11)"] { color: #b45309 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(250, 173, 20)"] { color: #b45309 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(250, 140, 22)"] { color: #b45309 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(251, 191, 36)"] { color: #92400e !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(255, 77, 109)"] { color: #be123c !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(16, 185, 129)"] { color: #047857 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(34, 197, 94)"] { color: #15803d !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(82, 196, 26)"] { color: #389e0d !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(56, 189, 248)"] { color: #0369a1 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(14, 165, 233)"] { color: #0369a1 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(96, 165, 250)"] { color: #1d4ed8 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(24, 144, 255)"] { color: #0958d9 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(22, 119, 255)"] { color: #0958d9 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(167, 139, 250)"] { color: #6d28d9 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(139, 92, 246)"] { color: #6d28d9 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(248, 113, 113)"] { color: #dc2626 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(255, 120, 120)"] { color: #dc2626 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(255, 77, 79)"] { color: #dc2626 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(239, 68, 68)"] { color: #dc2626 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(204, 204, 204)"] { color: #334155 !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(153, 153, 153)"] { color: #64748b !important; }
:is(.ant-layout-content, .control-page) [style*="color: rgb(170, 170, 170)"] { color: #94a3b8 !important; }
[style*="color: rgba(229, 213, 213, 0.45)"] { color: #94a3b8 !important; }

/* --- 5. Translucent-white control-page panels turn white; their white text goes dark --- */
.control-page [style*="background: rgba(255, 255, 255, 0.03)"],
.control-page [style*="background: rgba(255, 255, 255, 0.05)"],
.control-page [style*="background: rgba(255, 255, 255, 0.08)"] {
  background: #ffffff !important;
}
.control-page [style*="background: rgba(255, 255, 255, 0.03)"] [style*="color: rgb(255, 255, 255)"],
.control-page [style*="background: rgba(255, 255, 255, 0.08)"] [style*="color: rgb(255, 255, 255)"],
.control-page [style*="background: rgba(255, 255, 255, 0.03)"][style*="color: rgb(255, 255, 255)"],
.control-page [style*="background: rgba(255, 255, 255, 0.08)"][style*="color: rgb(255, 255, 255)"] {
  color: #0f172a !important;
}
.control-page [style*="border: 1px solid rgba(255, 255, 255, 0.06)"],
.control-page [style*="border: 1px solid rgba(255, 255, 255, 0.08)"],
.control-page [style*="border: 1px solid rgba(255, 255, 255, 0.1)"],
.control-page [style*="border: 1px solid rgba(255, 255, 255, 0.14)"] {
  border-color: #dbe3ee !important;
}
.control-page [style*="border-bottom: rgba(255, 255, 255, 0.05)"],
.control-page [style*="border-bottom: 1px solid rgba(255, 255, 255, 0.05)"] {
  border-bottom-color: #e7edf4 !important;
}

/* Buttons on saturated inline backgrounds keep white text
   (must outrank the panel white-text rule above, hence the color attribute). */
:is(.ant-layout-content, .control-page) button[style*="background: rgb(230, 57, 70)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(200, 30, 53)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(220, 38, 38)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(16, 185, 129)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(82, 196, 26)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(34, 197, 94)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(255, 77, 109)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(22, 119, 255)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(37, 99, 235)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(59, 130, 246)"][style*="color: rgb(255, 255, 255)"],
:is(.ant-layout-content, .control-page) button[style*="background: rgb(14, 165, 233)"][style*="color: rgb(255, 255, 255)"] {
  color: #ffffff !important;
}

/* Decorative dark-red bars/icon-boxes inside control panels: keep them visible, not white-on-white. */
.control-page div[style*="background: rgb(58, 32, 32)"] {
  background: #64748b !important;
}

/* --- 6. Intentionally dark dialogs keep their own light accent text --- */
:is(.ant-layout-content, .control-page) [style*="background: rgb(26, 36, 22)"] [style*="color: rgb(245, 158, 11)"],
:is(.ant-layout-content, .control-page) [style*="background: rgb(36, 26, 18)"] [style*="color: rgb(245, 158, 11)"] {
  color: #f59e0b !important;
}
:is(.ant-layout-content, .control-page) [style*="background: rgb(26, 36, 22)"] [style*="color: rgb(16, 185, 129)"],
:is(.ant-layout-content, .control-page) [style*="background: rgb(36, 26, 18)"] [style*="color: rgb(16, 185, 129)"] {
  color: #10b981 !important;
}

/* ============================================================
   Readability pass 2, 2026-10-12: antd components that still use
   dark-algorithm tokens (node status page & friends)
   ============================================================ */

/* Statistic cards: title/suffix render near-white under dark tokens.
   The value span keeps its inline valueStyle color (do not force it). */
.ant-statistic-title { color: #64748b !important; }
.ant-statistic-content-suffix,
.ant-statistic-content-prefix { color: #334155 !important; }

/* Descriptions (system info / storage detail) */
.ant-descriptions-item-label { color: #64748b !important; }
.ant-descriptions-item-content { color: #0f172a !important; }

/* Badge status text (WS: 已连接 etc.) */
.ant-badge-status-text { color: #334155 !important; }

/* Preset status tags: dark-algorithm fills are unreadable blobs on white */
.ant-tag-error { background: #fef2f2 !important; color: #dc2626 !important; border-color: #fecaca !important; }
.ant-tag-warning { background: #fffbeb !important; color: #b45309 !important; border-color: #fde68a !important; }
.ant-tag-processing { background: #eff6ff !important; color: #1d4ed8 !important; border-color: #bfdbfe !important; }
.ant-tag-geekblue { background: #eff6ff !important; color: #1d4ed8 !important; border-color: #bfdbfe !important; }
.ant-tag-blue { background: #eff6ff !important; color: #1d4ed8 !important; border-color: #bfdbfe !important; }
.ant-tag-red { background: #fef2f2 !important; color: #dc2626 !important; border-color: #fecaca !important; }
.ant-tag-orange { background: #fff7ed !important; color: #c2410c !important; border-color: #fed7aa !important; }
.ant-tag-green { background: #ecfdf5 !important; color: #047857 !important; border-color: #a7f3d0 !important; }
.ant-tag-cyan { background: #ecfeff !important; color: #0e7490 !important; border-color: #a5f3fc !important; }
.ant-tag-magenta { background: #fdf2f8 !important; color: #be185d !important; border-color: #fbcfe8 !important; }

/* Progress dashboard rings (CPU / memory / disk): trail + percent text */
.ant-progress-text { color: #334155 !important; }
.ant-progress-circle-trail { stroke: #e2e8f0 !important; }
.ant-progress-line .ant-progress-inner { background: #e2e8f0 !important; }

/* Loading spinner dots */
.ant-spin-dot-item { background: #e63946 !important; }

/* ============================================================
   Readability pass 3, 2026-10-12: device control center leftovers
   ============================================================ */

/* Screen status chips: remote screen / line reader status texts and buttons */
:is(.ant-layout-content, .control-page) [style*="color: rgb(74, 222, 128)"] { color: #15803d !important; }

/* AI analysis risk list on light pink tint */
:is(.ant-layout-content, .control-page) [style*="color: rgb(250, 165, 165)"] { color: #b91c1c !important; }

/* Unlock-dialog title icon, bright cyan on white */
:is(.ant-layout-content, .control-page) [style*="color: rgb(0, 204, 255)"] { color: #0284c7 !important; }

/* Muted label under the unlock serial (control sidebar) */
:is(.ant-layout-content, .control-page) [style*="color: rgba(255, 255, 255, 0.4)"] { color: #94a3b8 !important; }

/* Translucent chip rows in the screen area */
.control-page [style*="background: rgba(255, 255, 255, 0.04)"] {
  background: #f8fafc !important;
}
