:root,
[data-bs-theme="light"] {
  /* USWDS Colors */
  --bs-primary: #005ea2;
  --bs-primary-rgb: 0, 94, 162;
  --bs-primary-bg-subtle: #d9e8f6;
  --bs-primary-border-subtle: #005ea2;
  --bs-primary-text-emphasis: #1a4480;

  --bs-secondary: #71767a;
  --bs-secondary-rgb: 113, 118, 122;
  --bs-secondary-bg-subtle: #f0f0f0;
  --bs-secondary-border-subtle: #a9aeb1;
  --bs-secondary-text-emphasis: #1b1b1b;

  --bs-success: #00a91c;
  --bs-success-rgb: 0, 169, 28;
  --bs-success-bg-subtle: #e7f4e4;
  --bs-success-border-subtle: #00a91c;

  --bs-info: #00bde3;
  --bs-info-rgb: 0, 189, 227;
  --bs-info-bg-subtle: #e7f6f8;
  --bs-info-border-subtle: #00bde3;

  --bs-warning: #ffbe2e;
  --bs-warning-rgb: 255, 190, 46;
  --bs-warning-bg-subtle: #fff7e6;
  --bs-warning-border-subtle: #ffbe2e;

  --bs-danger: #e52207;
  --bs-danger-rgb: 229, 34, 7;
  --bs-danger-bg-subtle: #f9e1e0;
  --bs-danger-border-subtle: #e52207;

  --bs-light: #f0f0f0;
  --bs-light-rgb: 240, 240, 240;

  --bs-dark: #1b1b1b;
  --bs-dark-rgb: 27, 27, 27;

  /* Typography */
  --bs-body-font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;
  --bs-body-font-size: 1rem;
  --bs-body-font-weight: 400;
  --bs-body-line-height: 1.6;
  --bs-body-color: #1b1b1b;
  --bs-body-bg: #f0f0f0;

  /* Headings */
  --bs-heading-font-weight: 700;

  /* Links */
  --bs-link-color: #005ea2;
  --bs-link-hover-color: #1a4480;
  --bs-link-decoration: underline;

  /* Components */
  --bs-border-radius: 4px;
  --bs-border-radius-sm: 4px;
  --bs-border-radius-lg: 4px;
  --bs-border-color: #a9aeb1;

  /* Focus Ring */
  --bs-focus-ring-width: 0.25rem;
  --bs-focus-ring-color: #2491ff;
  --bs-focus-ring-box-shadow: 0 0 0 var(--bs-focus-ring-width) var(--bs-focus-ring-color);

  /* USWDS Specific Variables */
  --usa-visited-link-color: #54278f;
  --usa-table-header-bg: #dfe1e2;
  --usa-banner-bg: #f0f0f0;
  --usa-white: #ffffff;
}

[data-bs-theme="dark"] {
  --bs-body-bg: #1b1b1b;
  --bs-body-color: #f0f0f0;
  --bs-tertiary-bg: #2d2e2f;

  --bs-primary: #2491ff;
  --bs-primary-rgb: 36, 145, 255;
  --bs-primary-bg-subtle: #1a4480;

  --bs-border-color: #71767a;

  --bs-link-color: #2491ff;
  --bs-link-hover-color: #d9e8f6;

  --bs-focus-ring-color: #2491ff;

  --bs-dark: #2d2e2f;
}

/* Component Overrides */

/* Links always underlined */
a {
  text-decoration: underline;
}

/* Visited Links */
a:visited {
  color: var(--usa-visited-link-color);
}

/* Buttons */
.btn {
  font-weight: 700;
  border-width: 2px;
  border-radius: var(--bs-border-radius);
  box-shadow: none !important;
}

.btn-primary {
  --bs-btn-bg: var(--bs-primary);
  --bs-btn-border-color: var(--bs-primary);
  --bs-btn-hover-bg: var(--bs-primary-text-emphasis);
  --bs-btn-hover-border-color: var(--bs-primary-text-emphasis);
  --bs-btn-color: var(--usa-white);
  --bs-btn-hover-color: var(--usa-white);
}

.btn-secondary {
  --bs-btn-color: var(--bs-primary);
  --bs-btn-bg: transparent;
  --bs-btn-border-color: var(--bs-primary);
  --bs-btn-hover-bg: var(--bs-primary-bg-subtle);
  --bs-btn-hover-border-color: var(--bs-primary);
  --bs-btn-hover-color: var(--bs-primary-text-emphasis);
}

.btn-outline-primary {
  --bs-btn-color: var(--bs-primary);
  --bs-btn-border-color: var(--bs-primary);
  --bs-btn-hover-bg: var(--bs-primary);
  --bs-btn-hover-border-color: var(--bs-primary);
}

/* Form Controls */
.form-control, .form-select {
  border-color: var(--bs-dark);
}

.form-control:focus, .form-select:focus {
  border-color: var(--bs-primary);
  box-shadow: var(--bs-focus-ring-box-shadow);
  outline: 0;
}

/* USWDS Error State for Forms */
.is-invalid.form-control,
.is-invalid.form-select,
.was-validated :invalid.form-control,
.was-validated :invalid.form-select,
.is-invalid {
  border-left: 4px solid var(--bs-danger) !important;
}

/* Ensure padding if it's a container */
div.is-invalid {
  padding-left: 1rem;
}

/* Navbar */
.navbar {
  background-color: var(--bs-navbar-bg);
  --bs-navbar-bg: var(--bs-dark);
  --bs-navbar-color: rgba(255, 255, 255, 0.75);
  --bs-navbar-hover-color: var(--usa-white);
  --bs-navbar-active-color: var(--usa-white);
  --bs-navbar-brand-color: var(--usa-white);
  --bs-navbar-brand-hover-color: var(--usa-white);
}

.navbar.bg-primary {
  --bs-navbar-bg: var(--bs-primary);
}

/* Cards */
.card {
  border-radius: var(--bs-border-radius);
  border: 1px solid var(--bs-border-color);
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}

/* Tables */
.table {
  --bs-table-striped-bg: var(--bs-light);
}

.table thead th {
  background-color: var(--usa-table-header-bg);
  border-bottom: 2px solid var(--bs-border-color);
}

[data-bs-theme="dark"] .table thead th {
  background-color: var(--bs-tertiary-bg);
}

/* Badges */
.badge {
  text-transform: uppercase;
  letter-spacing: 0.32px;
  border-radius: var(--bs-border-radius);
}

/* Alerts */
.alert {
  border: none;
  border-left: 4px solid;
  border-radius: var(--bs-border-radius);
}

.alert-primary { border-left-color: var(--bs-primary); }
.alert-secondary { border-left-color: var(--bs-secondary); }
.alert-success { border-left-color: var(--bs-success); }
.alert-danger { border-left-color: var(--bs-danger); }
.alert-warning { border-left-color: var(--bs-warning); }
.alert-info { border-left-color: var(--bs-info); }

/* USWDS Banner Style */
.usa-banner {
  background-color: var(--usa-banner-bg);
  padding: 0.25rem 0;
  font-size: 0.75rem;
  border-bottom: 1px solid var(--bs-border-color);
}

[data-bs-theme="dark"] .usa-banner {
  background-color: var(--bs-tertiary-bg);
}

/* Form control borders use var(--bs-dark) which is too close to the dark body bg.
   Override to use --bs-border-color which is clearly visible. */
[data-bs-theme="dark"] .form-control,
[data-bs-theme="dark"] .form-select {
  border-color: var(--bs-border-color);
}
