/*
 * Maps the Festivitas tokens (tokens.css) onto Bootstrap 5.3. Bootstrap stays the component engine; this file only
 * changes how it looks, so existing markup keeps working. Load it after bootstrap.min.css and tokens.css.
 *
 * Bootstrap compiles its default blue (#0d6efd) straight into some component variables, so those components are
 * overridden one by one below.
 */

/* ---------- Global Bootstrap variables ---------- */
:root,
[data-bs-theme="light"],
[data-bs-theme="dark"] {
    --bs-body-font-family: var(--fv-font-ui);
    --bs-body-font-size: 1rem;
    --bs-body-line-height: 1.6;
    --bs-body-color: var(--fv-ink);
    --bs-body-bg: var(--fv-bg);
    --bs-emphasis-color: var(--fv-ink);
    --bs-heading-color: inherit; /* headings follow their container, e.g. white text on a colored header */
    --bs-secondary-color: var(--fv-muted);
    --bs-secondary-bg: var(--fv-line);
    --bs-tertiary-color: var(--fv-muted);
    --bs-tertiary-bg: var(--fv-raised);
    --bs-link-color: var(--fv-link);
    --bs-link-hover-color: var(--fv-link-hover);
    --bs-link-decoration: none;
    --bs-border-color: var(--fv-line);
    --bs-border-radius: var(--fv-radius-control);
    --bs-border-radius-sm: 4px;
    --bs-border-radius-lg: var(--fv-radius-panel);
    --bs-border-radius-xl: 14px;
    --bs-border-radius-pill: var(--fv-radius-pill);
    --bs-box-shadow: var(--fv-shadow);
    --bs-box-shadow-sm: var(--fv-shadow-sm);
    --bs-box-shadow-lg: var(--fv-shadow-lg);
    --bs-focus-ring-color: color-mix(in srgb, var(--fv-focus) 35%, transparent);
    --bs-highlight-bg: var(--fv-or-200);
    --bs-form-valid-color: var(--fv-success);
    --bs-form-valid-border-color: var(--fv-success);
    --bs-form-invalid-color: var(--fv-danger);
    --bs-form-invalid-border-color: var(--fv-danger);
}

:root,
[data-bs-theme="light"] {
    --bs-body-color-rgb: 20, 33, 58;
    --bs-body-bg-rgb: 239, 240, 244;
    --bs-emphasis-color-rgb: 20, 33, 58;
    --bs-secondary-color-rgb: 90, 99, 119;
    --bs-link-color-rgb: 0, 76, 143;
    --bs-link-hover-color-rgb: 0, 50, 95;
    --bs-border-color-translucent: rgb(20 33 58 / .12);

    --bs-primary: #004c8f;
    --bs-primary-rgb: 0, 76, 143;
    --bs-secondary: #5a6377;
    --bs-secondary-rgb: 90, 99, 119;
    --bs-success: #1e7a4c;
    --bs-success-rgb: 30, 122, 76;
    --bs-info: #2f6db0;
    --bs-info-rgb: 47, 109, 176;
    --bs-warning: #c9a043;
    --bs-warning-rgb: 201, 160, 67;
    --bs-danger: #b42318;
    --bs-danger-rgb: 180, 35, 24;
    --bs-light: #f7f8fa;
    --bs-light-rgb: 247, 248, 250;
    --bs-dark: #14213a;
    --bs-dark-rgb: 20, 33, 58;

    --bs-primary-text-emphasis: var(--fv-azure-700);
    --bs-secondary-text-emphasis: #3d4557;
    --bs-success-text-emphasis: #145536;
    --bs-info-text-emphasis: var(--fv-azure-700);
    --bs-warning-text-emphasis: #6b3d05;
    --bs-danger-text-emphasis: #8a1b12;
    --bs-light-text-emphasis: var(--fv-argent-500);
    --bs-dark-text-emphasis: var(--fv-argent-900);
    --bs-primary-bg-subtle: #e3edf8;
    --bs-secondary-bg-subtle: var(--fv-argent-200);
    --bs-success-bg-subtle: var(--fv-success-bg);
    --bs-info-bg-subtle: var(--fv-azure-50);
    --bs-warning-bg-subtle: var(--fv-warning-bg);
    --bs-danger-bg-subtle: var(--fv-danger-bg);
    --bs-light-bg-subtle: var(--fv-argent-50);
    --bs-dark-bg-subtle: var(--fv-argent-300);
    --bs-primary-border-subtle: var(--fv-azure-200);
    --bs-secondary-border-subtle: var(--fv-argent-300);
    --bs-success-border-subtle: #a9d9bf;
    --bs-info-border-subtle: var(--fv-azure-100);
    --bs-warning-border-subtle: #ead39a;
    --bs-danger-border-subtle: #f1b8b2;
    --bs-light-border-subtle: var(--fv-argent-200);
    --bs-dark-border-subtle: var(--fv-argent-400);
}

[data-bs-theme="dark"] {
    --bs-body-color-rgb: 239, 240, 244;
    --bs-body-bg-rgb: 6, 23, 43;
    --bs-emphasis-color-rgb: 239, 240, 244;
    --bs-secondary-color-rgb: 159, 176, 200;
    --bs-link-color-rgb: 127, 176, 230;
    --bs-link-hover-color-rgb: 176, 203, 232;
    --bs-border-color-translucent: rgb(239 240 244 / .14);

    --bs-primary: #2f6db0;
    --bs-primary-rgb: 47, 109, 176;
    --bs-secondary: #9fb0c8;
    --bs-secondary-rgb: 159, 176, 200;
    --bs-success: #5cc792;
    --bs-success-rgb: 92, 199, 146;
    --bs-info: #7fb0e6;
    --bs-info-rgb: 127, 176, 230;
    --bs-warning: #d8b25a;
    --bs-warning-rgb: 216, 178, 90;
    --bs-danger: #f2877c;
    --bs-danger-rgb: 242, 135, 124;
    --bs-light: #112c50;
    --bs-light-rgb: 17, 44, 80;
    --bs-dark: #eff0f4;
    --bs-dark-rgb: 239, 240, 244;

    --bs-primary-text-emphasis: var(--fv-azure-200);
    --bs-secondary-text-emphasis: #c9d3e1;
    --bs-success-text-emphasis: #8fdcb5;
    --bs-info-text-emphasis: var(--fv-azure-200);
    --bs-warning-text-emphasis: #f0cf86;
    --bs-danger-text-emphasis: #f7b1a9;
    --bs-light-text-emphasis: var(--fv-argent-100);
    --bs-dark-text-emphasis: var(--fv-argent-100);
    --bs-primary-bg-subtle: #123a66;
    --bs-secondary-bg-subtle: #112c50;
    --bs-success-bg-subtle: var(--fv-success-bg);
    --bs-info-bg-subtle: #0e2f55;
    --bs-warning-bg-subtle: var(--fv-warning-bg);
    --bs-danger-bg-subtle: var(--fv-danger-bg);
    --bs-light-bg-subtle: #112c50;
    --bs-dark-bg-subtle: #0b2240;
    --bs-primary-border-subtle: #2a5487;
    --bs-secondary-border-subtle: #2a4568;
    --bs-success-border-subtle: #1f6a4c;
    --bs-info-border-subtle: #2a5487;
    --bs-warning-border-subtle: #6e5520;
    --bs-danger-border-subtle: #7a3530;
    --bs-light-border-subtle: #1e3a5f;
    --bs-dark-border-subtle: #5d7799;
}

/* ---------- Typography ---------- */
h1, h2, h3, h4, h5,
.h1, .h2, .h3, .h4, .h5 {
    font-family: var(--fv-font-display);
    font-optical-sizing: auto;
    font-weight: 650;
    letter-spacing: -.005em;
    text-wrap: balance;
    /* Long Swedish compounds must not overflow on phones; lang="sv" gives correct hyphenation */
    overflow-wrap: break-word;
    hyphens: auto;
}
h6, .h6 { font-weight: 600; }
.display-1, .display-2, .display-3, .display-4, .display-5, .display-6 { font-family: var(--fv-font-display); font-weight: 700; }
.lead { color: var(--fv-muted); font-weight: 400; }
.text-muted { color: var(--fv-muted) !important; }
.small, small { font-size: .875em; }

/* ---------- Buttons ---------- */
.btn {
    --bs-btn-font-weight: 600;
    --bs-btn-padding-x: 1.05rem;
    --bs-btn-padding-y: .55rem;
    --bs-btn-border-radius: var(--fv-radius-control);
    --bs-btn-focus-box-shadow: none;
    transition: background-color var(--fv-duration) var(--fv-ease), border-color var(--fv-duration) var(--fv-ease),
        color var(--fv-duration) var(--fv-ease);
}
.btn:focus-visible { outline: 2px solid var(--fv-focus); outline-offset: 2px; box-shadow: none; }
.btn-sm { --bs-btn-padding-x: .75rem; --bs-btn-padding-y: .35rem; --bs-btn-font-size: .875rem; --bs-btn-border-radius: var(--fv-radius-control); }
.btn-lg { --bs-btn-padding-x: 1.4rem; --bs-btn-padding-y: .75rem; --bs-btn-border-radius: var(--fv-radius-control); }

.btn-primary {
    --bs-btn-color: var(--fv-on-primary);
    --bs-btn-bg: var(--fv-primary);
    --bs-btn-border-color: var(--fv-primary);
    --bs-btn-hover-color: var(--fv-on-primary);
    --bs-btn-hover-bg: var(--fv-primary-hover);
    --bs-btn-hover-border-color: var(--fv-primary-hover);
    --bs-btn-active-color: var(--fv-on-primary);
    --bs-btn-active-bg: var(--fv-primary-active);
    --bs-btn-active-border-color: var(--fv-primary-active);
    --bs-btn-disabled-color: var(--fv-on-primary);
    --bs-btn-disabled-bg: var(--fv-primary);
    --bs-btn-disabled-border-color: var(--fv-primary);
}
.btn-outline-primary {
    --bs-btn-color: var(--fv-link);
    --bs-btn-border-color: color-mix(in srgb, var(--fv-link) 60%, transparent);
    --bs-btn-hover-color: var(--fv-link);
    --bs-btn-hover-bg: var(--fv-subtle);
    --bs-btn-hover-border-color: var(--fv-link);
    --bs-btn-active-color: var(--fv-on-primary);
    --bs-btn-active-bg: var(--fv-primary);
    --bs-btn-active-border-color: var(--fv-primary);
    --bs-btn-disabled-color: var(--fv-link);
    --bs-btn-disabled-bg: transparent;
    --bs-btn-disabled-border-color: color-mix(in srgb, var(--fv-link) 60%, transparent);
}
/* Secondary is a quiet neutral button, not Bootstrap's grey */
.btn-secondary,
.btn-light {
    --bs-btn-color: var(--fv-ink);
    --bs-btn-bg: var(--fv-raised);
    --bs-btn-border-color: var(--fv-line);
    --bs-btn-hover-color: var(--fv-ink);
    --bs-btn-hover-bg: var(--fv-line);
    --bs-btn-hover-border-color: var(--fv-line-strong);
    --bs-btn-active-color: var(--fv-ink);
    --bs-btn-active-bg: var(--fv-line);
    --bs-btn-active-border-color: var(--fv-line-strong);
    --bs-btn-disabled-color: var(--fv-muted);
    --bs-btn-disabled-bg: var(--fv-raised);
    --bs-btn-disabled-border-color: var(--fv-line);
}
.btn-outline-secondary,
.btn-outline-dark,
.btn-outline-light {
    --bs-btn-color: var(--fv-ink);
    --bs-btn-border-color: var(--fv-line-strong);
    --bs-btn-hover-color: var(--fv-ink);
    --bs-btn-hover-bg: var(--fv-raised);
    --bs-btn-hover-border-color: var(--fv-ink);
    --bs-btn-active-color: var(--fv-ink);
    --bs-btn-active-bg: var(--fv-line);
    --bs-btn-active-border-color: var(--fv-ink);
    --bs-btn-disabled-color: var(--fv-muted);
    --bs-btn-disabled-bg: transparent;
    --bs-btn-disabled-border-color: var(--fv-line);
}
.btn-success {
    --bs-btn-color: #ffffff;
    --bs-btn-bg: #1e7a4c;
    --bs-btn-border-color: #1e7a4c;
    --bs-btn-hover-color: #ffffff;
    --bs-btn-hover-bg: #186640;
    --bs-btn-hover-border-color: #186640;
    --bs-btn-active-color: #ffffff;
    --bs-btn-active-bg: #145536;
    --bs-btn-active-border-color: #145536;
    --bs-btn-disabled-color: #ffffff;
    --bs-btn-disabled-bg: #1e7a4c;
    --bs-btn-disabled-border-color: #1e7a4c;
}
.btn-outline-success {
    --bs-btn-color: var(--fv-success);
    --bs-btn-border-color: color-mix(in srgb, var(--fv-success) 60%, transparent);
    --bs-btn-hover-color: var(--fv-success);
    --bs-btn-hover-bg: var(--fv-success-bg);
    --bs-btn-hover-border-color: var(--fv-success);
    --bs-btn-active-color: #ffffff;
    --bs-btn-active-bg: #1e7a4c;
    --bs-btn-active-border-color: #1e7a4c;
}
.btn-danger {
    --bs-btn-color: #ffffff;
    --bs-btn-bg: var(--fv-danger-solid);
    --bs-btn-border-color: var(--fv-danger-solid);
    --bs-btn-hover-color: #ffffff;
    --bs-btn-hover-bg: #961d14;
    --bs-btn-hover-border-color: #961d14;
    --bs-btn-active-color: #ffffff;
    --bs-btn-active-bg: #7d1810;
    --bs-btn-active-border-color: #7d1810;
    --bs-btn-disabled-color: #ffffff;
    --bs-btn-disabled-bg: var(--fv-danger-solid);
    --bs-btn-disabled-border-color: var(--fv-danger-solid);
}
.btn-outline-danger {
    --bs-btn-color: var(--fv-danger);
    --bs-btn-border-color: color-mix(in srgb, var(--fv-danger) 55%, transparent);
    --bs-btn-hover-color: var(--fv-danger);
    --bs-btn-hover-bg: var(--fv-danger-bg);
    --bs-btn-hover-border-color: var(--fv-danger);
    --bs-btn-active-color: #ffffff;
    --bs-btn-active-bg: var(--fv-danger-solid);
    --bs-btn-active-border-color: var(--fv-danger-solid);
}
/* Info and warning buttons are being retired (one primary action per view); until each page is reworked they
   render as a quiet azure button and a gold button. */
.btn-info {
    --bs-btn-color: var(--fv-subtle-ink);
    --bs-btn-bg: var(--fv-subtle);
    --bs-btn-border-color: var(--fv-subtle);
    --bs-btn-hover-color: var(--fv-subtle-ink);
    --bs-btn-hover-bg: color-mix(in srgb, var(--fv-subtle) 80%, var(--fv-link));
    --bs-btn-hover-border-color: color-mix(in srgb, var(--fv-subtle) 80%, var(--fv-link));
    --bs-btn-active-color: var(--fv-subtle-ink);
    --bs-btn-active-bg: color-mix(in srgb, var(--fv-subtle) 70%, var(--fv-link));
    --bs-btn-active-border-color: color-mix(in srgb, var(--fv-subtle) 70%, var(--fv-link));
}
.btn-outline-info {
    --bs-btn-color: var(--fv-link);
    --bs-btn-border-color: color-mix(in srgb, var(--fv-link) 60%, transparent);
    --bs-btn-hover-color: var(--fv-link);
    --bs-btn-hover-bg: var(--fv-subtle);
    --bs-btn-hover-border-color: var(--fv-link);
    --bs-btn-active-color: var(--fv-on-primary);
    --bs-btn-active-bg: var(--fv-primary);
    --bs-btn-active-border-color: var(--fv-primary);
}
.btn-warning {
    --bs-btn-color: var(--fv-on-gold);
    --bs-btn-bg: var(--fv-gold);
    --bs-btn-border-color: var(--fv-gold);
    --bs-btn-hover-color: var(--fv-on-gold);
    --bs-btn-hover-bg: color-mix(in srgb, var(--fv-gold) 85%, #000000);
    --bs-btn-hover-border-color: color-mix(in srgb, var(--fv-gold) 85%, #000000);
    --bs-btn-active-color: var(--fv-on-gold);
    --bs-btn-active-bg: color-mix(in srgb, var(--fv-gold) 75%, #000000);
    --bs-btn-active-border-color: color-mix(in srgb, var(--fv-gold) 75%, #000000);
    --bs-btn-disabled-color: var(--fv-on-gold);
    --bs-btn-disabled-bg: var(--fv-gold);
    --bs-btn-disabled-border-color: var(--fv-gold);
}
.btn-outline-warning {
    --bs-btn-color: var(--fv-gold-text);
    --bs-btn-border-color: var(--fv-gold-ui);
    --bs-btn-hover-color: var(--fv-gold-text);
    --bs-btn-hover-bg: color-mix(in srgb, var(--fv-gold) 14%, transparent);
    --bs-btn-hover-border-color: var(--fv-gold-ui);
    --bs-btn-active-color: var(--fv-on-gold);
    --bs-btn-active-bg: var(--fv-gold);
    --bs-btn-active-border-color: var(--fv-gold);
}
.btn-dark {
    --bs-btn-color: var(--fv-bg);
    --bs-btn-bg: var(--fv-ink);
    --bs-btn-border-color: var(--fv-ink);
    --bs-btn-hover-color: var(--fv-bg);
    --bs-btn-hover-bg: color-mix(in srgb, var(--fv-ink) 85%, var(--fv-bg));
    --bs-btn-hover-border-color: color-mix(in srgb, var(--fv-ink) 85%, var(--fv-bg));
}
.btn-link {
    --bs-btn-color: var(--fv-link);
    --bs-btn-hover-color: var(--fv-link-hover);
    --bs-btn-active-color: var(--fv-link-hover);
    --bs-btn-disabled-color: var(--fv-muted);
    font-weight: 500;
}

/* ---------- Forms ---------- */
.form-label { font-weight: 600; font-size: .9rem; margin-bottom: .35rem; }
.form-text { color: var(--fv-muted); font-size: .8125rem; }
.form-control,
.form-select {
    background-color: var(--fv-surface);
    border-color: var(--fv-line-strong);
    color: var(--fv-ink);
    border-radius: var(--fv-radius-control);
    transition: border-color var(--fv-duration) var(--fv-ease), box-shadow var(--fv-duration) var(--fv-ease);
}
.form-control::placeholder { color: var(--fv-muted); opacity: .8; }
.form-control:focus,
.form-select:focus {
    background-color: var(--fv-surface);
    color: var(--fv-ink);
    border-color: var(--fv-primary);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--fv-focus) 35%, transparent);
}
.form-control:disabled,
.form-select:disabled,
.form-control[readonly] { background-color: var(--fv-raised); }
.input-group-text { background-color: var(--fv-raised); border-color: var(--fv-line-strong); color: var(--fv-muted); }
.form-check-input { border-color: var(--fv-line-strong); background-color: var(--fv-surface); }
.form-check-input:focus { border-color: var(--fv-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--fv-focus) 35%, transparent); }
.form-check-input:checked,
.form-check-input[type="checkbox"]:indeterminate { background-color: var(--fv-primary); border-color: var(--fv-primary); }
.form-switch .form-check-input:focus {
    --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%234f87c2'/%3e%3c/svg%3e");
}
.form-switch .form-check-input:checked:focus {
    --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
}
.form-range::-webkit-slider-thumb { background-color: var(--fv-primary); }
.form-range::-moz-range-thumb { background-color: var(--fv-primary); }
.form-range:focus::-webkit-slider-thumb { box-shadow: 0 0 0 1px var(--fv-bg), 0 0 0 4px color-mix(in srgb, var(--fv-focus) 35%, transparent); }
.form-range:focus::-moz-range-thumb { box-shadow: 0 0 0 1px var(--fv-bg), 0 0 0 4px color-mix(in srgb, var(--fv-focus) 35%, transparent); }
.form-control.is-invalid,
.form-select.is-invalid { border-color: var(--fv-danger); }
.invalid-feedback { color: var(--fv-danger); }

/* ---------- Cards, list groups, tables ---------- */
.card {
    --bs-card-bg: var(--fv-surface);
    --bs-card-border-color: var(--fv-line);
    --bs-card-border-radius: var(--fv-radius-panel);
    --bs-card-inner-border-radius: calc(var(--fv-radius-panel) - 1px);
    --bs-card-cap-bg: transparent;
    --bs-card-cap-padding-y: .85rem;
    --bs-card-spacer-y: 1.15rem;
    --bs-card-spacer-x: 1.15rem;
    --bs-card-cap-padding-x: 1.15rem;
}
.card-header { border-bottom-color: var(--fv-line); }
.card-header > :is(h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6):last-child { margin-bottom: 0; }
.card-footer { border-top-color: var(--fv-line); background-color: var(--fv-raised); }
.card-title { font-family: var(--fv-font-display); }
.shadow-sm { box-shadow: var(--fv-shadow-sm) !important; }
.shadow { box-shadow: var(--fv-shadow) !important; }
.shadow-lg { box-shadow: var(--fv-shadow-lg) !important; }

.list-group {
    --bs-list-group-bg: var(--fv-surface);
    --bs-list-group-border-color: var(--fv-line);
    --bs-list-group-border-radius: var(--fv-radius-panel);
    --bs-list-group-action-hover-bg: var(--fv-raised);
    --bs-list-group-action-active-bg: var(--fv-line);
    --bs-list-group-active-color: var(--fv-on-primary);
    --bs-list-group-active-bg: var(--fv-primary);
    --bs-list-group-active-border-color: var(--fv-primary);
}

.table {
    --bs-table-color: var(--fv-ink);
    --bs-table-bg: transparent;
    --bs-table-border-color: var(--fv-line);
    --bs-table-striped-bg: color-mix(in srgb, var(--fv-raised) 70%, var(--fv-line));
    --bs-table-striped-color: var(--fv-ink);
    --bs-table-hover-bg: var(--fv-raised);
    --bs-table-hover-color: var(--fv-ink);
    --bs-table-active-bg: var(--fv-line);
    font-variant-numeric: tabular-nums;
}
.table > thead th {
    font-size: .78rem;
    font-weight: 600;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: var(--fv-muted);
    border-bottom-color: var(--fv-line-strong);
}
.table > thead th a { color: inherit; }

/* ---------- Navigation components ---------- */
.nav {
    --bs-nav-link-color: var(--fv-link);
    --bs-nav-link-hover-color: var(--fv-link-hover);
}
.nav-pills {
    --bs-nav-pills-border-radius: var(--fv-radius-control);
    --bs-nav-pills-link-active-color: var(--fv-on-primary);
    --bs-nav-pills-link-active-bg: var(--fv-primary);
}
.nav-tabs {
    --bs-nav-tabs-border-color: var(--fv-line);
    --bs-nav-tabs-link-hover-border-color: var(--fv-line) var(--fv-line) var(--fv-line);
    --bs-nav-tabs-link-active-color: var(--fv-ink);
    --bs-nav-tabs-link-active-bg: var(--fv-surface);
    --bs-nav-tabs-link-active-border-color: var(--fv-line) var(--fv-line) var(--fv-surface);
}
.nav-link:focus-visible { box-shadow: none; outline: 2px solid var(--fv-focus); outline-offset: 2px; }

.dropdown-menu {
    --bs-dropdown-bg: var(--fv-surface);
    --bs-dropdown-color: var(--fv-ink);
    --bs-dropdown-border-color: var(--fv-line);
    --bs-dropdown-border-radius: var(--fv-radius-panel);
    --bs-dropdown-box-shadow: var(--fv-shadow-lg);
    --bs-dropdown-link-color: var(--fv-ink);
    --bs-dropdown-link-hover-color: var(--fv-ink);
    --bs-dropdown-link-hover-bg: var(--fv-raised);
    --bs-dropdown-link-active-color: var(--fv-on-primary);
    --bs-dropdown-link-active-bg: var(--fv-primary);
    --bs-dropdown-divider-bg: var(--fv-line);
    --bs-dropdown-header-color: var(--fv-muted);
    --bs-dropdown-padding-x: .35rem;
    --bs-dropdown-item-padding-x: .75rem;
    --bs-dropdown-item-padding-y: .45rem;
    --bs-dropdown-item-border-radius: var(--fv-radius-control);
    box-shadow: var(--bs-dropdown-box-shadow);
}

.pagination {
    --bs-pagination-color: var(--fv-link);
    --bs-pagination-bg: var(--fv-surface);
    --bs-pagination-border-color: var(--fv-line);
    --bs-pagination-hover-color: var(--fv-link-hover);
    --bs-pagination-hover-bg: var(--fv-raised);
    --bs-pagination-hover-border-color: var(--fv-line);
    --bs-pagination-focus-box-shadow: 0 0 0 3px color-mix(in srgb, var(--fv-focus) 35%, transparent);
    --bs-pagination-active-color: var(--fv-on-primary);
    --bs-pagination-active-bg: var(--fv-primary);
    --bs-pagination-active-border-color: var(--fv-primary);
    --bs-pagination-disabled-bg: var(--fv-raised);
    --bs-pagination-disabled-border-color: var(--fv-line);
    font-variant-numeric: tabular-nums;
}

.breadcrumb {
    --bs-breadcrumb-divider-color: var(--fv-line-strong);
    --bs-breadcrumb-item-active-color: var(--fv-muted);
    font-size: .875rem;
}

.accordion {
    --bs-accordion-bg: var(--fv-surface);
    --bs-accordion-border-color: var(--fv-line);
    --bs-accordion-border-radius: var(--fv-radius-panel);
    --bs-accordion-inner-border-radius: calc(var(--fv-radius-panel) - 1px);
    --bs-accordion-btn-focus-box-shadow: 0 0 0 3px color-mix(in srgb, var(--fv-focus) 35%, transparent);
    --bs-accordion-active-color: var(--fv-subtle-ink);
    --bs-accordion-active-bg: var(--fv-subtle);
    --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23003f77' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
}
[data-bs-theme="dark"] .accordion {
    --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23b0cbe8' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
}

.progress,
.progress-stacked {
    --bs-progress-bg: var(--fv-line);
    --bs-progress-bar-bg: var(--fv-primary);
    --bs-progress-border-radius: var(--fv-radius-pill);
}

/* ---------- Overlays and feedback ---------- */
.modal {
    --bs-modal-bg: var(--fv-surface);
    --bs-modal-border-color: var(--fv-line);
    --bs-modal-border-radius: var(--fv-radius-panel);
    --bs-modal-inner-border-radius: calc(var(--fv-radius-panel) - 1px);
    --bs-modal-box-shadow: var(--fv-shadow-lg);
    --bs-modal-header-border-color: var(--fv-line);
    --bs-modal-footer-border-color: var(--fv-line);
    --bs-modal-footer-bg: var(--fv-raised);
}
.modal-backdrop { --bs-backdrop-bg: var(--fv-azure-950); --bs-backdrop-opacity: .55; }
.modal-footer { background-color: var(--bs-modal-footer-bg); }
.offcanvas { --bs-offcanvas-bg: var(--fv-surface); --bs-offcanvas-border-color: var(--fv-line); }
.toast {
    --bs-toast-bg: var(--fv-surface);
    --bs-toast-border-color: var(--fv-line);
    --bs-toast-border-radius: var(--fv-radius-panel);
    --bs-toast-box-shadow: var(--fv-shadow-lg);
    --bs-toast-header-bg: var(--fv-surface);
}
.popover { --bs-popover-bg: var(--fv-surface); --bs-popover-border-color: var(--fv-line); --bs-popover-border-radius: var(--fv-radius-panel); }
.tooltip { --bs-tooltip-bg: var(--fv-argent-900); --bs-tooltip-color: var(--fv-argent-100); --bs-tooltip-border-radius: var(--fv-radius-control); }

.alert {
    --bs-alert-border-radius: var(--fv-radius-panel);
    --bs-alert-padding-y: .85rem;
}
.alert-light { --bs-alert-bg: var(--fv-raised); --bs-alert-border-color: var(--fv-line); --bs-alert-color: var(--fv-ink); }

.badge { --bs-badge-font-weight: 600; --bs-badge-border-radius: 4px; --bs-badge-padding-y: .4em; --bs-badge-padding-x: .6em; }
.badge.bg-warning,
.badge.text-bg-warning { color: var(--fv-on-gold) !important; }
.text-bg-warning { color: var(--fv-on-gold) !important; }

.spinner-border, .spinner-grow { color: var(--fv-primary); }
.border { border-color: var(--fv-line) !important; }
hr { border-color: var(--fv-line); opacity: 1; }

/* ---------- Midnight: utility classes Bootstrap compiles with fixed colors ---------- */
/* text-dark on yellow or light-blue badges must stay dark; elsewhere it follows the theme ink */
[data-bs-theme="dark"] :is(.bg-warning, .bg-info, .text-bg-warning, .text-bg-info).text-dark,
[data-bs-theme="dark"] .text-bg-warning,
[data-bs-theme="dark"] .text-bg-info { color: var(--fv-azure-950) !important; }
.table-light {
    --bs-table-color: var(--fv-ink);
    --bs-table-bg: var(--fv-raised);
    --bs-table-border-color: var(--fv-line);
    --bs-table-striped-bg: var(--fv-line);
    --bs-table-striped-color: var(--fv-ink);
    --bs-table-hover-bg: var(--fv-line);
    --bs-table-hover-color: var(--fv-ink);
    color: var(--fv-ink);
}

/* text-primary is a text color: in Midnight use the link blue, the button blue is too dark on navy */
[data-bs-theme="dark"] .text-primary { color: var(--fv-link) !important; }
/* Solid backgrounds behind white text: Midnight's success/danger are light text tones, so use the solid shades */
[data-bs-theme="dark"] :is(.bg-danger, .text-bg-danger) { background-color: var(--fv-danger-solid) !important; }
[data-bs-theme="dark"] :is(.bg-success, .text-bg-success) { background-color: #1e7a4c !important; }
[data-bs-theme="dark"] :is(.text-bg-danger, .text-bg-success) { color: #ffffff !important; }
/* Gold and light-blue backgrounds are light in Midnight, so their text (headings included) goes dark */
[data-bs-theme="dark"] :is(.bg-warning, .bg-info):not(.text-white) { color: var(--fv-azure-950); --bs-heading-color: var(--fv-azure-950); }
