/* core-tokens.css - single source of truth for theme design tokens
   Consolidates variables previously spread across style.css, tracker style, and theme-styles.css */

:root, [data-bs-theme='light'] {
  /* Core palette (light) */
  --background:#f6f7f9;
  --background-container:#ffffff;
  --text-color:#0b0d0f;
  --muted-text:#5b6472;
  --primary-color:#2563eb;
  --primary-hover:#1e4fd1;
  --secondary-color:#64748b;
  --link-color:#1f4fcc;
  --link-hover-color:#153a99;
  --form-control-bg:rgba(0,0,0,0.03);
  --form-container-border:rgba(15,23,42,0.1);
  --btn-text-color:#111827;
  --footer-bg-color:transparent;
  --footer-text-color:#4b5563;
  --footer-link-color:#334155;
  --required-color:#b91c1c;
  --box-shadow:0 8px 24px rgba(16,24,40,0.06);
  --table-text:var(--text-color);
  /* Bootstrap bridge */
  --bs-body-bg:var(--background);
  --bs-body-color:var(--text-color);
  --bs-border-color:rgba(15,23,42,0.12);
  --bs-link-color:var(--link-color);
  --bs-link-hover-color:var(--link-hover-color);
  --bs-primary:var(--primary-color);
  --bs-card-bg:var(--background-container);
  /* Light theme gradient layers (activated when data-bg-effect present) */
  --light-gradient-layer1:radial-gradient(900px 600px at 12% -10%, #ffffff 0%, #eef2f7 45%, #e2e8f0 100%);
  --light-gradient-layer2:radial-gradient(800px 520px at 85% 110%, rgba(37,99,235,0.14), rgba(255,255,255,0) 70%);
}

[data-bs-theme='dark'] {
  --background:#0b0f14;
  --background-container:#121821;
  --text-color:#e5e7eb;
  --muted-text:#9aa4b2;
  --primary-color:#4f83ff;
  --primary-hover:#3e6de0;
  --secondary-color:#7b8794;
  --link-color:#9ec0ff;
  --link-hover-color:#c8daff;
  --form-control-bg:rgba(255,255,255,0.06);
  --form-container-border:rgba(255,255,255,0.08);
  --btn-text-color:#e5e7eb;
  --footer-bg-color:transparent;
  --footer-text-color:#98a2b3;
  --footer-link-color:#cbd5e1;
  --required-color:#fca5a5;
  --box-shadow:0 8px 24px rgba(0,0,0,0.65);
  --table-text:var(--text-color);
  --bs-body-bg:var(--background);
  --bs-body-color:var(--text-color);
  --bs-border-color:rgba(255,255,255,0.12);
  --bs-link-color:var(--link-color);
  --bs-link-hover-color:var(--link-hover-color);
  --bs-primary:var(--primary-color);
  --bs-card-bg:var(--background-container);
  /* Dark theme gradient layers */
  --dark-gradient-layer1:radial-gradient(1000px 700px at 14% -12%, #1d2733 0%, #131b24 55%, #0b0f14 100%);
  --dark-gradient-layer2:radial-gradient(900px 600px at 90% 115%, rgba(79,131,255,0.18), rgba(0,0,0,0) 70%);
}

[data-bs-theme='blue'] {
  --background:radial-gradient(1200px 800px at 10% -10%, #2757c7 0%, #0a2a66 55%, #06183d 100%);
  --background-container:rgba(10,32,80,0.55);
  --text-color:#eaf2ff;
  --muted-text:#c3d7ff;
  --primary-color:#50a4ff;
  --primary-hover:#3b8fe8;
  --secondary-color:#86bafc;
  --link-color:#d8e7ff;
  --link-hover-color:#ffffff;
  --form-control-bg:rgba(255,255,255,0.06);
  --form-container-border:rgba(255,255,255,0.18);
  --btn-text-color:#eaf2ff;
  --footer-bg-color:transparent;
  --footer-text-color:#d2e6ff;
  --footer-link-color:#d8e7ff;
  --required-color:#ffd1d1;
  --box-shadow:0 8px 24px rgba(12,55,120,0.45);
  --table-text:var(--text-color);
  /* Use gradient directly for blue theme body so sections without their own wrapper still show it */
  --bs-body-bg:var(--background);
  --bs-body-color:var(--text-color);
  --bs-border-color:rgba(255,255,255,0.25);
  --bs-link-color:var(--link-color);
  --bs-link-hover-color:var(--link-hover-color);
  --bs-primary:var(--primary-color);
  /* Slightly more transparent card surface so gradient shows through */
  --bs-card-bg:rgba(10,32,80,0.35);
  --blue-gradient-layer1:radial-gradient(1200px 800px at 10% -10%, #2757c7 0%, #0a2a66 55%, #06183d 100%);
  --blue-gradient-layer2:radial-gradient(1000px 600px at 80% 110%, rgba(80,164,255,0.12), rgba(10,42,102,0) 70%);
}

/* Parallax gradient container hook */
[data-bs-theme='light'][data-bg-effect='parallax'] body, [data-bs-theme='light'][data-bg-effect='animate'] body {
  background: var(--light-gradient-layer1), var(--light-gradient-layer2), var(--background);
  background-attachment: fixed, fixed, fixed;
  background-size: cover, cover, auto;
  background-repeat: no-repeat;
  position: relative; overflow-x:hidden;
}
[data-bs-theme='dark'][data-bg-effect='parallax'] body, [data-bs-theme='dark'][data-bg-effect='animate'] body {
  background: var(--dark-gradient-layer1), var(--dark-gradient-layer2), var(--background);
  background-attachment: fixed, fixed, fixed;
  background-size: cover, cover, auto;
  background-repeat: no-repeat;
  position: relative; overflow-x:hidden;
}
[data-bs-theme='blue'][data-bg-effect='parallax'] body, [data-bs-theme='blue'][data-bg-effect='animate'] body {
  background: var(--blue-gradient-layer1), var(--blue-gradient-layer2), #06183d;
  background-attachment: fixed, fixed, fixed;
  background-size: cover, cover, auto;
  background-repeat: no-repeat;
  position: relative; overflow-x:hidden;
}

@keyframes gradientDrift {
  0% { background-position: 12% -10%, 82% 110%, center; }
  50% { background-position: 14% -6%, 80% 105%, center; }
  100% { background-position: 12% -10%, 82% 110%, center; }
}
[data-bs-theme][data-bg-effect='animate'] body:not(.motion-ok-only) {
  animation: gradientDrift 20s ease-in-out infinite;
}

@media (prefers-reduced-motion: reduce) {
  [data-bs-theme][data-bg-effect='animate'] body { animation:none; }
}

/* === FINAL SAFETY OVERRIDES (must remain near end of file) === */
/* Guarantee readable button text in dark/blue themes even if earlier cascade conflicts */
[data-bs-theme='dark'] .btn-outline-primary,
[data-bs-theme='dark'] .btn-outline-secondary,
[data-bs-theme='dark'] .btn-outline-tertiary,
[data-bs-theme='dark'] .btn-outline-success,
[data-bs-theme='dark'] .btn-outline-danger,
[data-bs-theme='dark'] .btn-outline-warning,
[data-bs-theme='dark'] .btn-outline-info,
[data-bs-theme='blue'] .btn-outline-primary,
[data-bs-theme='blue'] .btn-outline-secondary,
[data-bs-theme='blue'] .btn-outline-tertiary,
[data-bs-theme='blue'] .btn-outline-success,
[data-bs-theme='blue'] .btn-outline-danger,
[data-bs-theme='blue'] .btn-outline-warning,
[data-bs-theme='blue'] .btn-outline-info { color:#ffffff !important; }

[data-bs-theme='dark'] td.actions-cell .btn-outline-warning,
[data-bs-theme='dark'] td.actions-cell .btn-outline-danger,
[data-bs-theme='blue'] td.actions-cell .btn-outline-warning,
[data-bs-theme='blue'] td.actions-cell .btn-outline-danger { color:#ffffff !important; }


/* Shared button focus ring normalization */
button.btn, .btn { outline:none; box-shadow:none; transition:box-shadow .15s, background-color .25s, color .25s; }
.btn:focus-visible { box-shadow:0 0 0 .2rem rgba(37,99,235,0.35); }
[data-bs-theme='dark'] .btn:focus-visible { box-shadow:0 0 0 .25rem rgba(79,131,255,0.4); }
[data-bs-theme='blue'] .btn:focus-visible { box-shadow:0 0 0 .25rem rgba(80,164,255,0.45); }

/* Primary variant alignment */
.btn-primary { background:var(--primary-color); border-color:var(--primary-hover); color: var(--btn-text-color,#fff); }
.btn-primary:hover { background:var(--primary-hover); border-color:var(--primary-hover); color:var(--btn-text-color,#fff); }
.btn-primary:focus,.btn-primary:active { color:var(--btn-text-color,#fff); }
.btn-primary:disabled { opacity:.65; }

/* Extended semantic palette (contrast-adjusted per theme) */
:root, [data-bs-theme='light'] {
  --accent-success:#15803d; --accent-success-hover:#166534; --accent-success-active:#14532d; --accent-success-contrast:#ffffff; --accent-success-outline:#14532d;
  --accent-danger:#b91c1c; --accent-danger-hover:#991b1b; --accent-danger-active:#7f1d1d; --accent-danger-contrast:#ffffff; --accent-danger-outline:#7f1d1d;
  --accent-warning:#d97706; --accent-warning-hover:#b45309; --accent-warning-active:#92400e; --accent-warning-contrast:#111827; --accent-warning-outline:#92400e;
  --accent-info:#0369a1; --accent-info-hover:#035c8b; --accent-info-active:#06446b; --accent-info-contrast:#ffffff; --accent-info-outline:#06446b;
  --accent-secondary:#475569; --accent-secondary-hover:#364152; --accent-secondary-active:#27303a; --accent-secondary-contrast:#ffffff; --accent-secondary-outline:#27303a;
  --accent-tertiary:#334155; --accent-tertiary-hover:#273548; --accent-tertiary-active:#1d2834; --accent-tertiary-contrast:#ffffff; --accent-tertiary-outline:#1d2834;
}
[data-bs-theme='dark'] {
  /* Keep vivid bases; switch to dark text for accessibility */
  --accent-success:#22c55e; --accent-success-hover:#16a34a; --accent-success-active:#12823c; --accent-success-contrast:#0b0f14;
  --accent-danger:#ef4444; --accent-danger-hover:#dc2626; --accent-danger-active:#b91c1c; --accent-danger-contrast:#0b0f14;
  --accent-warning:#fbbf24; --accent-warning-hover:#f59e0b; --accent-warning-active:#d97706; --accent-warning-contrast:#0b0f14;
  --accent-info:#38bdf8; --accent-info-hover:#0ea5e9; --accent-info-active:#0284c7; --accent-info-contrast:#0b0f14;
  --accent-secondary:#64748b; --accent-secondary-hover:#556171; --accent-secondary-active:#45505e; --accent-secondary-contrast:#0b0f14; --accent-secondary-outline:#45505e;
  --accent-tertiary:#475569; --accent-tertiary-hover:#364152; --accent-tertiary-active:#27303a; --accent-tertiary-contrast:#0b0f14; --accent-tertiary-outline:#27303a;
}
[data-bs-theme='blue'] {
  --accent-success:#34d399; --accent-success-hover:#10b981; --accent-success-active:#059669; --accent-success-contrast:#001a3a;
  --accent-danger:#ff6b6b; --accent-danger-hover:#ff4d61; --accent-danger-active:#ff324a; --accent-danger-contrast:#001a3a;
  --accent-warning:#ffd166; --accent-warning-hover:#ffb347; --accent-warning-active:#ff990f; --accent-warning-contrast:#001a3a;
  --accent-info:#4fc3ff; --accent-info-hover:#38bdf8; --accent-info-active:#0ea5e9; --accent-info-contrast:#001a3a;
  --accent-secondary:#86bafc; --accent-secondary-hover:#5f95e3; --accent-secondary-active:#4379c7; --accent-secondary-contrast:#001a3a; --accent-secondary-outline:#4379c7;
  --accent-tertiary:#4e79c7; --accent-tertiary-hover:#3f63a4; --accent-tertiary-active:#2f4d81; --accent-tertiary-contrast:#eaf2ff; --accent-tertiary-outline:#2f4d81;
}

/* Generic variant generator */
.btn-success, .btn-outline-success { --variant-bg:var(--accent-success); --variant-bg-hover:var(--accent-success-hover); --variant-active:var(--accent-success-active); --variant-contrast:var(--accent-success-contrast,#fff); --variant-outline-color:var(--accent-success-outline,var(--accent-success-active)); }
.btn-danger, .btn-outline-danger { --variant-bg:var(--accent-danger); --variant-bg-hover:var(--accent-danger-hover); --variant-active:var(--accent-danger-active); --variant-contrast:var(--accent-danger-contrast,#fff); --variant-outline-color:var(--accent-danger-outline,var(--accent-danger-active)); }
.btn-warning, .btn-outline-warning { --variant-bg:var(--accent-warning); --variant-bg-hover:var(--accent-warning-hover); --variant-active:var(--accent-warning-active); --variant-contrast:var(--accent-warning-contrast,#111827); --variant-outline-color:var(--accent-warning-outline,var(--accent-warning-active)); }
.btn-info, .btn-outline-info { --variant-bg:var(--accent-info); --variant-bg-hover:var(--accent-info-hover); --variant-active:var(--accent-info-active); --variant-contrast:var(--accent-info-contrast,#fff); --variant-outline-color:var(--accent-info-outline,var(--accent-info-active)); }
.btn-secondary, .btn-outline-secondary { --variant-bg:var(--accent-secondary); --variant-bg-hover:var(--accent-secondary-hover); --variant-active:var(--accent-secondary-active); --variant-contrast:var(--accent-secondary-contrast); --variant-outline-color:var(--accent-secondary-outline); }
.btn-tertiary, .btn-outline-tertiary { --variant-bg:var(--accent-tertiary); --variant-bg-hover:var(--accent-tertiary-hover); --variant-active:var(--accent-tertiary-active); --variant-contrast:var(--accent-tertiary-contrast); --variant-outline-color:var(--accent-tertiary-outline); }

/* Solid variants */
[data-bs-theme] .btn-success, [data-bs-theme] .btn-danger, [data-bs-theme] .btn-warning, [data-bs-theme] .btn-info, [data-bs-theme] .btn-secondary, [data-bs-theme] .btn-tertiary, :root .btn-success, :root .btn-danger, :root .btn-warning, :root .btn-info, :root .btn-secondary, :root .btn-tertiary { background:var(--variant-bg); border:1px solid var(--variant-bg); color:var(--variant-contrast); }
.btn-success:hover, .btn-danger:hover, .btn-warning:hover, .btn-info:hover, .btn-secondary:hover, .btn-tertiary:hover,
.btn-success:focus, .btn-danger:focus, .btn-warning:focus, .btn-info:focus, .btn-secondary:focus, .btn-tertiary:focus { background:var(--variant-bg-hover); border-color:var(--variant-bg-hover); color:var(--variant-contrast); }

/* Active (pressed) state slightly deeper */
.btn-success:active, .btn-success.active, .btn-success[aria-pressed='true'],
.btn-danger:active, .btn-danger.active, .btn-danger[aria-pressed='true'],
.btn-warning:active, .btn-warning.active, .btn-warning[aria-pressed='true'],
.btn-info:active, .btn-info.active, .btn-info[aria-pressed='true'],
.btn-secondary:active, .btn-secondary.active, .btn-secondary[aria-pressed='true'],
.btn-tertiary:active, .btn-tertiary.active, .btn-tertiary[aria-pressed='true'] { background:var(--variant-active); border-color:var(--variant-active); color:var(--variant-contrast); }

/* Outline style (shared aesthetic) */
/* Outline variants with fallback for browsers lacking color-mix */
.btn-outline-success, .btn-outline-danger, .btn-outline-warning, .btn-outline-info, .btn-outline-secondary, .btn-outline-tertiary { background:transparent; color:var(--variant-contrast,var(--variant-bg)); border:1px solid var(--variant-bg); box-shadow:inset 0 0 0 1px var(--variant-bg); }
/* Force readable text color for outline buttons on dark/blue backgrounds */
[data-bs-theme='dark'] .btn-outline-success, [data-bs-theme='dark'] .btn-outline-danger, [data-bs-theme='dark'] .btn-outline-warning, [data-bs-theme='dark'] .btn-outline-info, [data-bs-theme='dark'] .btn-outline-secondary, [data-bs-theme='dark'] .btn-outline-tertiary,
[data-bs-theme='blue'] .btn-outline-success, [data-bs-theme='blue'] .btn-outline-danger, [data-bs-theme='blue'] .btn-outline-warning, [data-bs-theme='blue'] .btn-outline-info, [data-bs-theme='blue'] .btn-outline-secondary, [data-bs-theme='blue'] .btn-outline-tertiary { color: var(--variant-bg); background:rgba(255,255,255,0.04); }
[data-bs-theme='blue'] .btn-outline-secondary { color: #0d2e66; }
[data-bs-theme='blue'] .btn-outline-danger { color:#7f1228; }
[data-bs-theme='blue'] .btn-outline-warning { color:#8a5400; }
[data-bs-theme='blue'] .btn-outline-success { color:#04724d; }
[data-bs-theme='blue'] .btn-outline-info { color:#056394; }
@supports (color: color-mix(in oklab, black, white)) {
  .btn-outline-success, .btn-outline-danger, .btn-outline-warning, .btn-outline-info, .btn-outline-secondary, .btn-outline-tertiary { border-color:color-mix(in oklab, var(--variant-bg), transparent 30%); box-shadow:inset 0 0 0 1px color-mix(in oklab, var(--variant-bg), transparent 55%); }
}
/* Hover / focus for outline */
.btn-outline-success:hover, .btn-outline-success:focus,
.btn-outline-danger:hover, .btn-outline-danger:focus,
.btn-outline-warning:hover, .btn-outline-warning:focus,
.btn-outline-info:hover, .btn-outline-info:focus,
.btn-outline-secondary:hover, .btn-outline-secondary:focus,
.btn-outline-tertiary:hover, .btn-outline-tertiary:focus { color:var(--variant-outline-color,var(--variant-bg)); box-shadow:none; }
@supports (color: color-mix(in oklab, black, white)) {
  .btn-outline-success:hover, .btn-outline-success:focus,
  .btn-outline-danger:hover, .btn-outline-danger:focus,
  .btn-outline-warning:hover, .btn-outline-warning:focus,
  .btn-outline-info:hover, .btn-outline-info:focus,
  .btn-outline-secondary:hover, .btn-outline-secondary:focus,
  .btn-outline-tertiary:hover, .btn-outline-tertiary:focus { background:color-mix(in oklab, var(--variant-bg), transparent 82%); border-color:color-mix(in oklab, var(--variant-bg), transparent 15%); color:var(--variant-contrast,var(--variant-bg)); }
}
@supports not (color: color-mix(in oklab, black, white)) {
  .btn-outline-success:hover, .btn-outline-success:focus,
  .btn-outline-danger:hover, .btn-outline-danger:focus,
  .btn-outline-warning:hover, .btn-outline-warning:focus,
  .btn-outline-info:hover, .btn-outline-info:focus,
  .btn-outline-secondary:hover, .btn-outline-secondary:focus,
  .btn-outline-tertiary:hover, .btn-outline-tertiary:focus { background:rgba(0,0,0,.04); }
}
.btn-outline-success.active, .btn-outline-danger.active, .btn-outline-warning.active, .btn-outline-info.active, .btn-outline-secondary.active, .btn-outline-tertiary.active,
.btn-outline-success[aria-pressed='true'], .btn-outline-danger[aria-pressed='true'], .btn-outline-warning[aria-pressed='true'], .btn-outline-info[aria-pressed='true'], .btn-outline-secondary[aria-pressed='true'], .btn-outline-tertiary[aria-pressed='true'] { background:var(--variant-bg); color:var(--variant-contrast); border-color:var(--variant-bg); }
@supports (color: color-mix(in oklab, black, white)) {
  .btn-outline-success.active, .btn-outline-danger.active, .btn-outline-warning.active, .btn-outline-info.active, .btn-outline-secondary.active, .btn-outline-tertiary.active,
  .btn-outline-success[aria-pressed='true'], .btn-outline-danger[aria-pressed='true'], .btn-outline-warning[aria-pressed='true'], .btn-outline-info[aria-pressed='true'], .btn-outline-secondary[aria-pressed='true'], .btn-outline-tertiary[aria-pressed='true'] { box-shadow:0 0 0 1px color-mix(in oklab, var(--variant-bg), transparent 55%); }
}
[data-bs-theme='blue'] .btn-outline-warning.active, [data-bs-theme='blue'] .btn-outline-warning[aria-pressed='true'] { color:#001a3a; }

/* Disabled states */
.btn-success:disabled, .btn-danger:disabled, .btn-warning:disabled, .btn-info:disabled, .btn-secondary:disabled, .btn-tertiary:disabled,
.btn-success.disabled, .btn-danger.disabled, .btn-warning.disabled, .btn-info.disabled, .btn-secondary.disabled, .btn-tertiary.disabled { opacity:.55; cursor:not-allowed; background:var(--variant-bg); border-color:var(--variant-bg); filter:saturate(.85); color:var(--variant-contrast); }
.btn-outline-success:disabled, .btn-outline-danger:disabled, .btn-outline-warning:disabled, .btn-outline-info:disabled, .btn-outline-secondary:disabled, .btn-outline-tertiary:disabled,
.btn-outline-success.disabled, .btn-outline-danger.disabled, .btn-outline-warning.disabled, .btn-outline-info.disabled, .btn-outline-secondary.disabled, .btn-outline-tertiary.disabled { opacity:.55; cursor:not-allowed; background:transparent; }
@supports (color: color-mix(in oklab, black, white)) {
  .btn-outline-success:disabled, .btn-outline-danger:disabled, .btn-outline-warning:disabled, .btn-outline-info:disabled, .btn-outline-secondary:disabled, .btn-outline-tertiary:disabled,
  .btn-outline-success.disabled, .btn-outline-danger.disabled, .btn-outline-warning.disabled, .btn-outline-info.disabled, .btn-outline-secondary.disabled, .btn-outline-tertiary.disabled { border-color:color-mix(in oklab, var(--variant-bg), transparent 55%); box-shadow:inset 0 0 0 1px color-mix(in oklab, var(--variant-bg), transparent 70%); }
}
[data-bs-theme='blue'] .btn-outline-warning.active, [data-bs-theme='blue'] .btn-outline-warning[aria-pressed='true'] { color:#001a3a; }

/* Subtle focus ring consistent across variants */
.btn-success:focus-visible, .btn-danger:focus-visible, .btn-warning:focus-visible, .btn-info:focus-visible, .btn-secondary:focus-visible, .btn-tertiary:focus-visible,
.btn-outline-success:focus-visible, .btn-outline-danger:focus-visible, .btn-outline-warning:focus-visible, .btn-outline-info:focus-visible, .btn-outline-secondary:focus-visible, .btn-outline-tertiary:focus-visible { box-shadow:0 0 0 .2rem color-mix(in oklab, var(--variant-bg), transparent 70%); }

/* Status utility background/text pairs */
.status-success { background: var(--primary-color); color: #fff; }
[data-bs-theme='blue'] .status-success { color:#001a3a; }
.status-info { background:#0ea5e9; color:#fff; }
[data-bs-theme='dark'] .status-info { background:#0284c7; }
[data-bs-theme='blue'] .status-info { background:#38bdf8; color:#001a3a; }
.status-warning { background:#fbbf24; color:#1a1a1a; }
[data-bs-theme='dark'] .status-warning { background:#f59e0b; }
[data-bs-theme='blue'] .status-warning { background:#ffd166; color:#001a3a; }
.status-danger { background:#dc3545; color:#fff; }
[data-bs-theme='dark'] .status-danger { background:#b02a37; }
[data-bs-theme='blue'] .status-danger { background:#ff4d61; color:#001a3a; }

/* Reduced motion: utility class and media query affects panel animation */
@media (prefers-reduced-motion: reduce) {
  .motion-ok-only { animation:none !important; transition:none !important; }
}
