/*
 * mvui design tokens — the only file in mvui with raw colour values; everything else uses var(--mv-*).
 *
 * Source: rtviewer-3 (Workspace+) rtviewer-front/src/theme/theme.tsx at commit
 * 45e83722e8ae2912a00652a1cd07aa64e9edfed1 (2026-10-09). "theme.tsx:<line>" cites the line each value is
 * taken or derived from; `make check-rtviewer-tokens` re-checks values and lines against a checkout.
 * "mvui:" marks a deliberate departure (docs/SPEC.md decisions and §9.1).
 *
 * Dark is the default (:root); light applies under [data-bs-theme="light"]; print uses the light values.
 * The second half maps Bootstrap 5.3's variables onto the tokens; it is declared on every element that
 * sets a theme, so a nested [data-bs-theme] recomputes them from its own tokens.
 */

:root,
[data-bs-theme="dark"] {
  color-scheme: dark;
  --mv-accent: #00a5b9; /* theme.tsx:12 PRIMARY_COLOR: links, focus, accent text */
  --mv-accent-light: #4dc0ce; /* theme.tsx:13 PRIMARY_LIGHT */
  --mv-primary-fill: #007382; /* theme.tsx:14 PRIMARY_DARK; mvui: button fill, white text 5.6:1 */
  --mv-primary-fill-hover: #00616e; /* mvui: hover fill, white text 7.2:1 */
  --mv-on-primary: #ffffff; /* theme.tsx:35 WHITE_FOREGROUND */
  --mv-caution: #f49800; /* theme.tsx:17 SECONDARY_COLOR (amber) */
  --mv-on-caution: #1c262d; /* theme.tsx:25 DARK_BACKGROUND; mvui: dark text on amber */
  --mv-surface: #1c262d; /* theme.tsx:25 DARK_BACKGROUND: cards, header, dialogs, menus */
  --mv-ground: #151c21; /* theme.tsx:183 background.sunken = darken(DARK_BACKGROUND, 0.25): page, input fill */
  --mv-raised: #252e35; /* theme.tsx:184 background.raised = lighten(DARK_BACKGROUND, 0.04): card footers, popovers */
  --mv-table-head: #192228; /* theme.tsx:257 MuiTableCell head = darken(background.default, 0.1) */
  --mv-row-hover: #212b32; /* theme.tsx:195 action.hoverNeutral = lighten(DARK_BACKGROUND, 0.025) */
  --mv-hover-tint: rgba(0, 165, 185, 0.05); /* theme.tsx:32 ACTION_HOVER_OVERLAY */
  --mv-selected: rgba(0, 165, 185, 0.1); /* theme.tsx:34 ACTION_SELECTED_OVERLAY */
  --mv-pressed: rgba(0, 165, 185, 0.15); /* theme.tsx:852 mixins.pressedIconButton */
  --mv-text: #ffffff; /* theme.tsx:26 TEXT_PRIMARY_DARK */
  --mv-text-secondary: #bbbbbb; /* theme.tsx:27 TEXT_SECONDARY_DARK */
  --mv-text-disabled: #8f8f8f; /* mvui: rtviewer-3's #666666 (theme.tsx:36) is 2.7:1 on the surface */
  --mv-border: #333c42; /* theme.tsx:28 DARK_DIVIDER */
  --mv-chip-border: #2a363d; /* theme.tsx:29 DS_CHIP_BORDER */
  --mv-success: #66bb6a; /* theme.tsx:121 DARK_SEMANTIC_COLORS.success.main */
  --mv-warning: #ffa726; /* theme.tsx:109 DARK_SEMANTIC_COLORS.warning.main */
  --mv-danger: #f44336; /* theme.tsx:103 DARK_SEMANTIC_COLORS.error.main */
  --mv-info: #29b6f6; /* theme.tsx:115 DARK_SEMANTIC_COLORS.info.main */
  --mv-danger-fill: #d32f2f; /* theme.tsx:76 LIGHT_SEMANTIC_COLORS.error.main: white text 5.0:1 */
  --mv-danger-fill-hover: #c62828; /* theme.tsx:78 LIGHT_SEMANTIC_COLORS.error.dark: white text 5.6:1 */
  --mv-status-text-mix: 100%; /* mvui (0.5.0): status text in the pure tones, as rtviewer-3 shows them: >= 5.2:1 on every dark ground */
  --mv-danger-text-mix: 75%; /* mvui (0.5.0): #f44336 alone is 4.2:1 on the surface; 75% of it toward the text colour is >= 4.7:1 */
  --mv-float-bg: #273138; /* mvui (0.5.0): rtviewer-3's menus (components.ts:110 MuiMenu elevation 1) wear MUI's dark elevation-1 overlay, 5% white over DARK_BACKGROUND (theme.tsx:25) */
  --mv-tooltip-bg: rgba(50, 59, 66, 0.95); /* theme.tsx:227 alpha(lighten(background.default, 0.1), 0.95) */
  --mv-tooltip-text: #ffffff; /* theme.tsx:35 WHITE_FOREGROUND */
  --mv-focus: #00a5b9; /* theme.tsx:12 PRIMARY_COLOR */
  --mv-shadow-float: 0 2px 6px rgba(0, 0, 0, 0.27); /* theme.tsx:49 FLOATING_EDGE.boxShadow */
  --mv-scrollbar-thumb: #6b6b6b; /* theme.tsx:53 SCROLLBAR_THUMB */
  --mv-radius: 4px; /* theme.tsx:38 BORDER_RADIUS */
  --mv-radius-float: 8px; /* mvui: menus and popovers */
  --mv-font-sans: Poppins, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; /* theme.tsx:815 */
  --mv-font-mono: "Roboto Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; /* chromeTheme.ts:37 MONO_FONT */
  --mv-header-h: 56px; /* theme.tsx:449 MuiToolbar minHeight; mvui.js keeps it current */

  /* Bootstrap values that need raw triplets or images, per theme */
  --bs-body-bg-rgb: 21, 28, 33;
  --bs-body-color-rgb: 255, 255, 255;
  --bs-emphasis-color-rgb: 255, 255, 255;
  --bs-secondary-bg-rgb: 37, 46, 53;
  --bs-tertiary-bg-rgb: 37, 46, 53;
  --bs-secondary-rgb: 187, 187, 187;
  --bs-primary-rgb: 0, 115, 130;
  --bs-success-rgb: 102, 187, 106;
  --bs-warning-rgb: 255, 167, 38;
  --bs-danger-rgb: 244, 67, 54;
  --bs-info-rgb: 41, 182, 246;
  --bs-link-color-rgb: 0, 165, 185;
  --bs-link-hover-color: var(--mv-accent-light);
  --bs-link-hover-color-rgb: 77, 192, 206;
  --mv-select-chevron: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23bbbbbb' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m6 9 6 6 6-6'/%3e%3c/svg%3e");
  --mv-switch-knob: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba(255,255,255,0.6)'/%3e%3c/svg%3e");
}

[data-bs-theme="light"] {
  color-scheme: light;
  --mv-accent: #007382; /* theme.tsx:14 PRIMARY_DARK; mvui: accent text on light grounds */
  --mv-accent-light: #4dc0ce; /* theme.tsx:13 PRIMARY_LIGHT */
  --mv-primary-fill: #007382; /* theme.tsx:14 PRIMARY_DARK */
  --mv-primary-fill-hover: #00616e; /* mvui */
  --mv-on-primary: #ffffff; /* theme.tsx:35 WHITE_FOREGROUND */
  --mv-caution: #f49800; /* theme.tsx:17 SECONDARY_COLOR */
  --mv-on-caution: #1c262d; /* theme.tsx:25 DARK_BACKGROUND; mvui */
  --mv-surface: #ffffff; /* theme.tsx:21 LIGHT_BACKGROUND */
  --mv-ground: #eef1f2; /* mvui: rtviewer-3's dormant light palette uses #bfbfbf (theme.tsx:152) */
  --mv-raised: #ffffff; /* theme.tsx:153 background.raised = lighten(LIGHT_BACKGROUND, 0.04) */
  --mv-table-head: #e5e5e5; /* theme.tsx:257 MuiTableCell head = darken(background.default, 0.1) */
  --mv-row-hover: #f8f8f8; /* theme.tsx:159 action.hoverNeutral = darken(LIGHT_BACKGROUND, 0.025) */
  --mv-hover-tint: rgba(0, 165, 185, 0.05); /* theme.tsx:32 ACTION_HOVER_OVERLAY */
  --mv-selected: rgba(0, 165, 185, 0.1); /* theme.tsx:34 ACTION_SELECTED_OVERLAY */
  --mv-pressed: rgba(0, 165, 185, 0.15); /* theme.tsx:852 mixins.pressedIconButton */
  --mv-text: #2c2c2c; /* theme.tsx:22 TEXT_PRIMARY_LIGHT */
  --mv-text-secondary: #383838; /* theme.tsx:23 TEXT_SECONDARY_LIGHT */
  --mv-text-disabled: rgba(0, 0, 0, 0.45); /* mvui */
  --mv-border: rgba(0, 0, 0, 0.12); /* mvui: MUI's light divider */
  --mv-chip-border: rgba(0, 0, 0, 0.12); /* mvui */
  --mv-success: #2e7d32; /* theme.tsx:94 LIGHT_SEMANTIC_COLORS.success.main */
  --mv-warning: #ed6c02; /* theme.tsx:82 LIGHT_SEMANTIC_COLORS.warning.main */
  --mv-danger: #d32f2f; /* theme.tsx:76 LIGHT_SEMANTIC_COLORS.error.main */
  --mv-info: #0288d1; /* theme.tsx:88 LIGHT_SEMANTIC_COLORS.info.main */
  --mv-danger-fill: #d32f2f; /* theme.tsx:76 LIGHT_SEMANTIC_COLORS.error.main */
  --mv-danger-fill-hover: #c62828; /* theme.tsx:78 LIGHT_SEMANTIC_COLORS.error.dark */
  --mv-status-text-mix: 55%; /* mvui (0.5.0): toward the text colour: the light tones are not all 4.5:1 on white (#ed6c02 is 3.1:1) */
  --mv-danger-text-mix: 55%; /* mvui (0.5.0) */
  --mv-float-bg: #ffffff; /* mvui (0.5.0): menus on LIGHT_BACKGROUND (theme.tsx:21); MUI adds no overlay in light */
  --mv-tooltip-bg: #2c2c2c; /* mvui: dark tooltips on light pages (TEXT_PRIMARY_LIGHT, theme.tsx:22) */
  --mv-tooltip-text: #ffffff; /* theme.tsx:35 WHITE_FOREGROUND */
  --mv-focus: #007382; /* theme.tsx:14 PRIMARY_DARK */
  --mv-shadow-float: 0 2px 6px rgba(0, 0, 0, 0.15); /* mvui: lighter than theme.tsx:49 on white */
  --mv-scrollbar-thumb: #6b6b6b; /* theme.tsx:53 SCROLLBAR_THUMB */
  --mv-radius: 4px; /* theme.tsx:38 BORDER_RADIUS */
  --mv-radius-float: 8px; /* mvui */
  --mv-font-sans: Poppins, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; /* theme.tsx:815 */
  --mv-font-mono: "Roboto Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; /* chromeTheme.ts:37 MONO_FONT */
  --mv-header-h: 56px; /* theme.tsx:449 */

  --bs-body-bg-rgb: 238, 241, 242;
  --bs-body-color-rgb: 44, 44, 44;
  --bs-emphasis-color-rgb: 44, 44, 44;
  --bs-secondary-bg-rgb: 255, 255, 255;
  --bs-tertiary-bg-rgb: 255, 255, 255;
  --bs-secondary-rgb: 56, 56, 56;
  --bs-primary-rgb: 0, 115, 130;
  --bs-success-rgb: 46, 125, 50;
  --bs-warning-rgb: 237, 108, 2;
  --bs-danger-rgb: 211, 47, 47;
  --bs-info-rgb: 2, 136, 209;
  --bs-link-color-rgb: 0, 115, 130;
  --bs-link-hover-color: var(--mv-primary-fill-hover);
  --bs-link-hover-color-rgb: 0, 97, 110;
  --mv-select-chevron: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23383838' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m6 9 6 6 6-6'/%3e%3c/svg%3e");
  --mv-switch-knob: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba(0,0,0,0.4)'/%3e%3c/svg%3e");
}

@media print {
  :root,
  [data-bs-theme="dark"],
  [data-bs-theme="light"] {
    color-scheme: light;
    --mv-accent: #007382;
    --mv-accent-light: #4dc0ce;
    --mv-primary-fill: #007382;
    --mv-primary-fill-hover: #00616e;
    --mv-on-primary: #ffffff;
    --mv-caution: #f49800;
    --mv-on-caution: #1c262d;
    --mv-surface: #ffffff;
    --mv-ground: #eef1f2;
    --mv-raised: #ffffff;
    --mv-table-head: #e5e5e5;
    --mv-row-hover: #f8f8f8;
    --mv-hover-tint: rgba(0, 165, 185, 0.05);
    --mv-selected: rgba(0, 165, 185, 0.1);
    --mv-pressed: rgba(0, 165, 185, 0.15);
    --mv-text: #2c2c2c;
    --mv-text-secondary: #383838;
    --mv-text-disabled: rgba(0, 0, 0, 0.45);
    --mv-border: rgba(0, 0, 0, 0.12);
    --mv-chip-border: rgba(0, 0, 0, 0.12);
    --mv-success: #2e7d32;
    --mv-warning: #ed6c02;
    --mv-danger: #d32f2f;
    --mv-info: #0288d1;
    --mv-danger-fill: #d32f2f;
    --mv-danger-fill-hover: #c62828;
    --mv-status-text-mix: 55%;
    --mv-danger-text-mix: 55%;
    --mv-float-bg: #ffffff;
    --mv-tooltip-bg: #2c2c2c;
    --mv-tooltip-text: #ffffff;
    --mv-focus: #007382;
    --mv-shadow-float: 0 2px 6px rgba(0, 0, 0, 0.15);
    --mv-scrollbar-thumb: #6b6b6b;
    --mv-radius: 4px;
    --mv-radius-float: 8px;
    --mv-font-sans: Poppins, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
    --mv-font-mono: "Roboto Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    --mv-header-h: 56px;

    --bs-body-bg-rgb: 238, 241, 242;
    --bs-body-color-rgb: 44, 44, 44;
    --bs-emphasis-color-rgb: 44, 44, 44;
    --bs-secondary-bg-rgb: 255, 255, 255;
    --bs-tertiary-bg-rgb: 255, 255, 255;
    --bs-secondary-rgb: 56, 56, 56;
    --bs-primary-rgb: 0, 115, 130;
    --bs-success-rgb: 46, 125, 50;
    --bs-warning-rgb: 237, 108, 2;
    --bs-danger-rgb: 211, 47, 47;
    --bs-info-rgb: 2, 136, 209;
    --bs-link-color-rgb: 0, 115, 130;
    --bs-link-hover-color: var(--mv-primary-fill-hover);
    --bs-link-hover-color-rgb: 0, 97, 110;
    --mv-select-chevron: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23383838' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m6 9 6 6 6-6'/%3e%3c/svg%3e");
    --mv-switch-knob: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba(0,0,0,0.4)'/%3e%3c/svg%3e");
  }
}

/* Bootstrap 5.3 variables mapped onto the tokens (both themes and print). */
:root,
[data-bs-theme] {
  --bs-body-bg: var(--mv-ground);
  --bs-body-color: var(--mv-text);
  --bs-emphasis-color: var(--mv-text);
  --bs-heading-color: inherit;
  --bs-secondary-color: var(--mv-text-secondary);
  --bs-secondary-bg: var(--mv-raised);
  --bs-tertiary-color: var(--mv-text-secondary);
  --bs-tertiary-bg: var(--mv-raised);
  --bs-border-color: var(--mv-border);
  --bs-border-color-translucent: var(--mv-border);
  --bs-link-color: var(--mv-accent);
  --bs-code-color: var(--mv-accent);
  --bs-secondary: var(--mv-text-secondary);
  --bs-primary: var(--mv-primary-fill);
  --bs-primary-text-emphasis: color-mix(in srgb, var(--mv-accent) 75%, var(--mv-text));
  --bs-primary-bg-subtle: color-mix(in srgb, var(--mv-accent) 12%, var(--mv-surface));
  --bs-primary-border-subtle: color-mix(in srgb, var(--mv-accent) 40%, var(--mv-surface));
  --bs-secondary-text-emphasis: var(--mv-text-secondary);
  --bs-secondary-bg-subtle: var(--mv-raised);
  --bs-secondary-border-subtle: var(--mv-border);
  /* Status colours: emphasis = tone mixed toward the text colour, so text on a tint stays >= 4.5:1; (0.5.0) by
     --mv-status-text-mix (danger: --mv-danger-text-mix): the pure tones in dark, as rtviewer-3, 55% in light. */
  --bs-success: var(--mv-success);
  --bs-success-text-emphasis: color-mix(in srgb, var(--mv-success) var(--mv-status-text-mix), var(--mv-text));
  --bs-success-bg-subtle: color-mix(in srgb, var(--mv-success) 12%, var(--mv-surface));
  --bs-success-border-subtle: color-mix(in srgb, var(--mv-success) 40%, var(--mv-surface));
  --bs-warning: var(--mv-warning);
  --bs-warning-text-emphasis: color-mix(in srgb, var(--mv-warning) var(--mv-status-text-mix), var(--mv-text));
  --bs-warning-bg-subtle: color-mix(in srgb, var(--mv-warning) 12%, var(--mv-surface));
  --bs-warning-border-subtle: color-mix(in srgb, var(--mv-warning) 40%, var(--mv-surface));
  --bs-danger: var(--mv-danger);
  --bs-danger-text-emphasis: color-mix(in srgb, var(--mv-danger) var(--mv-danger-text-mix), var(--mv-text));
  --bs-danger-bg-subtle: color-mix(in srgb, var(--mv-danger) 12%, var(--mv-surface));
  --bs-danger-border-subtle: color-mix(in srgb, var(--mv-danger) 40%, var(--mv-surface));
  --bs-info: var(--mv-info);
  --bs-info-text-emphasis: color-mix(in srgb, var(--mv-info) var(--mv-status-text-mix), var(--mv-text));
  --bs-info-bg-subtle: color-mix(in srgb, var(--mv-info) 12%, var(--mv-surface));
  --bs-info-border-subtle: color-mix(in srgb, var(--mv-info) 40%, var(--mv-surface));
  /* (0.5.0) The 0.4.0 emphasis, 55% toward the text colour in both themes, for status text over a deeper shade of its
     own tint (table-variant rows' hover and active shades, outlined status buttons' hover and pressed fills), where the
     pure dark tones drop under 4.5:1. */
  --mv-success-text-soft: color-mix(in srgb, var(--mv-success) 55%, var(--mv-text));
  --mv-warning-text-soft: color-mix(in srgb, var(--mv-warning) 55%, var(--mv-text));
  --mv-danger-text-soft: color-mix(in srgb, var(--mv-danger) 55%, var(--mv-text));
  --mv-info-text-soft: color-mix(in srgb, var(--mv-info) 55%, var(--mv-text));
  --bs-form-valid-color: var(--bs-success-text-emphasis);
  --bs-form-valid-border-color: var(--mv-success);
  --bs-form-invalid-color: var(--bs-danger-text-emphasis);
  --bs-form-invalid-border-color: var(--mv-danger);
  --bs-border-radius: var(--mv-radius);
  --bs-border-radius-sm: var(--mv-radius);
  --bs-border-radius-lg: var(--mv-radius-float);
  --bs-border-radius-xl: var(--mv-radius-float);
  --bs-border-radius-xxl: var(--mv-radius-float);
  --bs-border-radius-2xl: var(--mv-radius-float);
  --bs-border-radius-pill: var(--mv-radius);
  --bs-box-shadow: var(--mv-shadow-float);
  --bs-box-shadow-sm: none;
  --bs-box-shadow-lg: var(--mv-shadow-float);
  --bs-box-shadow-inset: none;
  --bs-font-sans-serif: var(--mv-font-sans);
  --bs-body-font-family: var(--mv-font-sans);
  --bs-font-monospace: var(--mv-font-mono);
  --bs-body-font-size: 0.875rem;
  --bs-focus-ring-color: var(--mv-focus);
  --bs-highlight-bg: color-mix(in srgb, var(--mv-caution) 30%, var(--mv-surface));
  --bs-highlight-color: var(--mv-text);
}
