/* Hub palette: selected base colors, with Bootstrap 6 surface/border levels. */
:root {
  /* Requested dark page background; other neutral tokens stay with Bootstrap. */
  --hub-dark-background: #1B1A2A;
  --bs-bg-body: light-dark(var(--bs-white), var(--hub-dark-background));

  --bs-primary-base: MediumOrchid;
  --bs-accent-base: DeepPink;
  --bs-secondary-base: MediumVioletRed;
  --bs-success-base: var(--bs-green-500);
  --bs-info-base: DarkTurquoise;
  --bs-warning-base: Orange;
  --bs-danger-base: Crimson;

  /* Text, emphasis and focus use the selected base without extra color recipes.
     Subtle/muted surfaces and borders retain Bootstrap's palette levels:
     100/900, 200/800, 300/600; Secondary uses 050/800, 100/700, 300/600. */
  --bs-primary-fg: var(--bs-primary-base);
  --bs-primary-fg-emphasis: var(--bs-primary-base);
  --bs-primary-bg: var(--bs-primary-base);
  --bs-primary-bg-subtle: light-dark(color-mix(in oklch, var(--bs-white) 80%, var(--bs-primary-base)), color-mix(in oklch, var(--bs-black) 64%, var(--bs-primary-base)));
  --bs-primary-bg-muted: light-dark(color-mix(in oklch, var(--bs-white) 60%, var(--bs-primary-base)), color-mix(in oklch, var(--bs-black) 48%, var(--bs-primary-base)));
  --bs-primary-border: light-dark(color-mix(in oklch, var(--bs-white) 40%, var(--bs-primary-base)), color-mix(in oklch, var(--bs-black) 16%, var(--bs-primary-base)));
  --bs-primary-focus-ring: var(--bs-primary-base);
  --bs-primary-contrast: var(--bs-white);

  --bs-accent-fg: var(--bs-accent-base);
  --bs-accent-fg-emphasis: var(--bs-accent-base);
  --bs-accent-bg: var(--bs-accent-base);
  --bs-accent-bg-subtle: light-dark(color-mix(in oklch, var(--bs-white) 80%, var(--bs-accent-base)), color-mix(in oklch, var(--bs-black) 64%, var(--bs-accent-base)));
  --bs-accent-bg-muted: light-dark(color-mix(in oklch, var(--bs-white) 60%, var(--bs-accent-base)), color-mix(in oklch, var(--bs-black) 48%, var(--bs-accent-base)));
  --bs-accent-border: light-dark(color-mix(in oklch, var(--bs-white) 40%, var(--bs-accent-base)), color-mix(in oklch, var(--bs-black) 16%, var(--bs-accent-base)));
  --bs-accent-focus-ring: var(--bs-accent-base);

  --bs-secondary-fg: var(--bs-secondary-base);
  --bs-secondary-fg-emphasis: var(--bs-secondary-base);
  --bs-secondary-bg: var(--bs-secondary-base);
  --bs-secondary-bg-subtle: light-dark(color-mix(in oklch, var(--bs-white) 90%, var(--bs-secondary-base)), color-mix(in oklch, var(--bs-black) 48%, var(--bs-secondary-base)));
  --bs-secondary-bg-muted: light-dark(color-mix(in oklch, var(--bs-white) 80%, var(--bs-secondary-base)), color-mix(in oklch, var(--bs-black) 32%, var(--bs-secondary-base)));
  --bs-secondary-border: light-dark(color-mix(in oklch, var(--bs-white) 40%, var(--bs-secondary-base)), color-mix(in oklch, var(--bs-black) 16%, var(--bs-secondary-base)));
  --bs-secondary-focus-ring: var(--bs-secondary-base);
  --bs-secondary-contrast: var(--bs-white);

  --bs-success-fg: var(--bs-success-base);
  --bs-success-fg-emphasis: var(--bs-success-base);
  --bs-success-bg: var(--bs-success-base);
  --bs-success-bg-subtle: light-dark(color-mix(in oklch, var(--bs-white) 80%, var(--bs-success-base)), color-mix(in oklch, var(--bs-black) 64%, var(--bs-success-base)));
  --bs-success-bg-muted: light-dark(color-mix(in oklch, var(--bs-white) 60%, var(--bs-success-base)), color-mix(in oklch, var(--bs-black) 48%, var(--bs-success-base)));
  --bs-success-border: light-dark(color-mix(in oklch, var(--bs-white) 40%, var(--bs-success-base)), color-mix(in oklch, var(--bs-black) 16%, var(--bs-success-base)));
  --bs-success-focus-ring: var(--bs-success-base);

  --bs-info-fg: var(--bs-info-base);
  --bs-info-fg-emphasis: var(--bs-info-base);
  --bs-info-bg: var(--bs-info-base);
  --bs-info-bg-subtle: light-dark(color-mix(in oklch, var(--bs-white) 80%, var(--bs-info-base)), color-mix(in oklch, var(--bs-black) 64%, var(--bs-info-base)));
  --bs-info-bg-muted: light-dark(color-mix(in oklch, var(--bs-white) 60%, var(--bs-info-base)), color-mix(in oklch, var(--bs-black) 48%, var(--bs-info-base)));
  --bs-info-border: light-dark(color-mix(in oklch, var(--bs-white) 40%, var(--bs-info-base)), color-mix(in oklch, var(--bs-black) 16%, var(--bs-info-base)));
  --bs-info-focus-ring: var(--bs-info-base);

  --bs-warning-fg: var(--bs-warning-base);
  --bs-warning-fg-emphasis: var(--bs-warning-base);
  --bs-warning-bg: var(--bs-warning-base);
  --bs-warning-bg-subtle: light-dark(color-mix(in oklch, var(--bs-white) 80%, var(--bs-warning-base)), color-mix(in oklch, var(--bs-black) 64%, var(--bs-warning-base)));
  --bs-warning-bg-muted: light-dark(color-mix(in oklch, var(--bs-white) 60%, var(--bs-warning-base)), color-mix(in oklch, var(--bs-black) 48%, var(--bs-warning-base)));
  --bs-warning-border: light-dark(color-mix(in oklch, var(--bs-white) 40%, var(--bs-warning-base)), color-mix(in oklch, var(--bs-black) 16%, var(--bs-warning-base)));
  --bs-warning-focus-ring: var(--bs-warning-base);

  --bs-danger-fg: var(--bs-danger-base);
  --bs-danger-fg-emphasis: var(--bs-danger-base);
  --bs-danger-bg: var(--bs-danger-base);
  --bs-danger-bg-subtle: light-dark(color-mix(in oklch, var(--bs-white) 80%, var(--bs-danger-base)), color-mix(in oklch, var(--bs-black) 64%, var(--bs-danger-base)));
  --bs-danger-bg-muted: light-dark(color-mix(in oklch, var(--bs-white) 60%, var(--bs-danger-base)), color-mix(in oklch, var(--bs-black) 48%, var(--bs-danger-base)));
  --bs-danger-border: light-dark(color-mix(in oklch, var(--bs-white) 40%, var(--bs-danger-base)), color-mix(in oklch, var(--bs-black) 16%, var(--bs-danger-base)));
  --bs-danger-focus-ring: var(--bs-danger-base);

}

/* Active pills use the exact theme color, without Bootstrap's light overlay. */
.nav-pills { --bs-gradient: none; }

/* Keep the requested contrast text stable during Bootstrap button states. */
:is(.theme-primary, .theme-secondary):is(.btn-solid, .btn-outline):is(:hover, :active, .active),
:is(.theme-primary, .theme-secondary):is(.btn-solid, .btn-outline).btn-check:has(input:checked) {
  --bs-btn-hover-color: var(--bs-theme-contrast);
  --bs-btn-active-color: var(--bs-theme-contrast);
}
