/**
 * Bootstrap 5 WCAG 2.2 Level AA contrast overrides
 * Load after bootstrap.min.css. No Sass rebuild required.
 *
 * Targets defaults that commonly fail 4.5:1 (text) / 3:1 (UI) on this site:
 * text-primary, text-danger, text-muted, btn-primary/success/secondary,
 * form borders, navbar toggler, and reduced-opacity dark controls.
 */

:root,
[data-bs-theme="light"] {
  /* Primary #0d6efd → darker blue (~5.9:1 on white; white text ~5.9:1 on btn) */
  --bs-primary: #0a58ca;
  --bs-primary-rgb: 10, 88, 202;
  --bs-link-color: #0a58ca;
  --bs-link-color-rgb: 10, 88, 202;
  --bs-link-hover-color: #084298;
  --bs-link-hover-color-rgb: 8, 66, 152;

  /* Danger #dc3545 → darker red (~6.5:1 on white) */
  --bs-danger: #b02a37;
  --bs-danger-rgb: 176, 42, 55;

  /* Success #198754 → darker green (white text clearer on buttons) */
  --bs-success: #146c43;
  --bs-success-rgb: 20, 108, 67;

  /* Secondary / muted #6c757d → darker gray (~5.7:1+) */
  --bs-secondary: #5c636a;
  --bs-secondary-rgb: 92, 99, 106;
  --bs-secondary-color: #495057;
  --bs-secondary-color-rgb: 73, 80, 87;
  --bs-tertiary-color: #5c636a;
  --bs-tertiary-color-rgb: 92, 99, 106;

  /* Form / UI borders: gray-300 fails 3:1 non-text contrast on white */
  --bs-border-color: #767676;
  --bs-border-color-translucent: rgba(0, 0, 0, 0.45);

  /* Focus ring: keep visible against light backgrounds */
  --bs-focus-ring-color: rgba(10, 88, 202, 0.5);
}

/* ----- Text utilities (use RGB vars so opacity utilities still work) ----- */

.text-primary {
  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity, 1)) !important;
}

.text-danger {
  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity, 1)) !important;
}

.text-success {
  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity, 1)) !important;
}

.text-secondary,
.text-muted,
.text-body-secondary {
  color: var(--bs-secondary-color) !important;
}

.text-body-tertiary {
  color: var(--bs-tertiary-color) !important;
}

/* ----- Buttons (compiled --bs-btn-* locals must be overridden) ----- */

.btn-primary {
  --bs-btn-color: #fff;
  --bs-btn-bg: #0a58ca;
  --bs-btn-border-color: #0a58ca;
  --bs-btn-hover-color: #fff;
  --bs-btn-hover-bg: #084298;
  --bs-btn-hover-border-color: #073b86;
  --bs-btn-focus-shadow-rgb: 10, 88, 202;
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: #073b86;
  --bs-btn-active-border-color: #063776;
  --bs-btn-disabled-color: #fff;
  --bs-btn-disabled-bg: #0a58ca;
  --bs-btn-disabled-border-color: #0a58ca;
}

.btn-success {
  --bs-btn-color: #fff;
  --bs-btn-bg: #146c43;
  --bs-btn-border-color: #146c43;
  --bs-btn-hover-color: #fff;
  --bs-btn-hover-bg: #0f5132;
  --bs-btn-hover-border-color: #0e4a2e;
  --bs-btn-focus-shadow-rgb: 20, 108, 67;
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: #0e4a2e;
  --bs-btn-active-border-color: #0d442a;
  --bs-btn-disabled-color: #fff;
  --bs-btn-disabled-bg: #146c43;
  --bs-btn-disabled-border-color: #146c43;
}

.btn-secondary {
  --bs-btn-color: #fff;
  --bs-btn-bg: #5c636a;
  --bs-btn-border-color: #5c636a;
  --bs-btn-hover-color: #fff;
  --bs-btn-hover-bg: #4d5358;
  --bs-btn-hover-border-color: #484e53;
  --bs-btn-focus-shadow-rgb: 92, 99, 106;
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: #484e53;
  --bs-btn-active-border-color: #44494e;
  --bs-btn-disabled-color: #fff;
  --bs-btn-disabled-bg: #5c636a;
  --bs-btn-disabled-border-color: #5c636a;
}

.btn-danger {
  --bs-btn-color: #fff;
  --bs-btn-bg: #b02a37;
  --bs-btn-border-color: #b02a37;
  --bs-btn-hover-color: #fff;
  --bs-btn-hover-bg: #8b222c;
  --bs-btn-hover-border-color: #821f29;
  --bs-btn-focus-shadow-rgb: 176, 42, 55;
  --bs-btn-active-color: #fff;
  --bs-btn-active-bg: #821f29;
  --bs-btn-active-border-color: #7a1d27;
  --bs-btn-disabled-color: #fff;
  --bs-btn-disabled-bg: #b02a37;
  --bs-btn-disabled-border-color: #b02a37;
}

/* Map zoom uses btn-dark + opacity-75 — opacity tanks contrast; keep opaque enough */
.btn-dark.opacity-75 {
  opacity: 1 !important;
  background-color: rgba(33, 37, 41, 0.92);
  border-color: rgba(33, 37, 41, 0.92);
}

#backToTop {
  opacity: 1;
}

#backToTop:not(:hover):not(:focus) {
  opacity: 0.92;
}

/* ----- Forms (1.4.11 Non-text Contrast) ----- */

.form-control,
.form-select {
  border-color: #767676;
  color: #212529;
}

.form-control:focus,
.form-select:focus {
  border-color: #0a58ca;
  box-shadow: 0 0 0 0.25rem rgba(10, 88, 202, 0.35);
}

.form-control::placeholder {
  color: #5c636a;
  opacity: 1;
}

.form-select:disabled,
.form-control:disabled {
  color: #495057;
  border-color: #767676;
}

/* Range track / thumb need ≥3:1 against adjacent colors */
.form-range::-webkit-slider-runnable-track {
  background-color: #767676;
}

.form-range::-moz-range-track {
  background-color: #767676;
}

.form-range::-webkit-slider-thumb {
  background-color: #0a58ca;
}

.form-range::-moz-range-thumb {
  background-color: #0a58ca;
}

.form-range:focus::-webkit-slider-thumb {
  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(10, 88, 202, 0.35);
}

.form-range:focus::-moz-range-thumb {
  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(10, 88, 202, 0.35);
}

/* ----- Navbar / chrome ----- */

.navbar-toggler {
  border-color: #767676;
}

.navbar-toggler:focus {
  box-shadow: 0 0 0 0.25rem rgba(10, 88, 202, 0.35);
}

.navbar-toggler-icon {
  /* Darker bars on bg-light */
  --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 1%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}

.accordion-button:focus {
  border-color: #0a58ca;
  box-shadow: 0 0 0 0.25rem rgba(10, 88, 202, 0.35);
}

.accordion-button:not(.collapsed) {
  color: #0a58ca;
}

/* Spinner uses text-primary — already covered via --bs-primary-rgb */
.spinner-border.text-primary {
  color: #0a58ca !important;
}
