/*
  Bootstrap runtime variable bridge for KWL theme options.
*/

:root,
[data-bs-theme=light] {
  /* Theme option aliases (supports multiple naming conventions). */
  --kwl-color-primary: var(--kwl-theme-options-primary, #0d6efd);
  --kwl-color-secondary: var(--kwl-theme-options-secondary, #6c757d);
  --kwl-color-accent: var(--kwl-theme-options-accent, #dc3545);
  --kwl-color-accent-2: var(--kwl-theme-options-accent-2, #000);
  --kwl-color-success: var(--kwl-theme-options-success, #198754);
  --kwl-color-info: var(--kwl-theme-options-info, #0dcaf0);
  --kwl-color-warning: var(--kwl-theme-options-warning, #ffc107);
  --kwl-color-danger: var(--kwl-theme-options-danger, #dc3545);
  --kwl-color-light: var(--kwl-theme-options-light, #f8f9fa);
  --kwl-color-dark: var(--kwl-theme-options-dark, #212529);

  --kwl-color-primary-rgb: var(--kwl-theme-options-primary-rgb, 13, 110, 253);
  --kwl-color-secondary-rgb: var(--kwl-theme-options-secondary-rgb, 108, 117, 125);
  --kwl-color-accent-rgb: var(--kwl-theme-options-accent-rgb, 220, 53, 69);
  --kwl-color-accent-2-rgb: var(--kwl-theme-options-accent-2-rgb, 0, 0, 0);
  --kwl-color-success-rgb: var(--kwl-theme-options-success-rgb, 25, 135, 84);
  --kwl-color-info-rgb: var(--kwl-theme-options-info-rgb, 13, 202, 240);
  --kwl-color-warning-rgb: var(--kwl-theme-options-warning-rgb, 255, 193, 7);
  --kwl-color-danger-rgb: var(--kwl-theme-options-danger-rgb, 220, 53, 69);
  --kwl-color-light-rgb: var(--kwl-theme-options-light-rgb, 248, 249, 250);
  --kwl-color-dark-rgb: var(--kwl-theme-options-dark-rgb, 33, 37, 41);

  --kwl-font-family-base: var(--kwl-theme-options-primary-font, var(--bs-font-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif));
  --kwl-font-family-heading: var(--kwl-theme-options-secondary-font, var(--kwl-font-family-base));

  --kwl-body-color: var(--kwl-theme-options-text-color, #212529);
  --kwl-body-color-rgb: var(--kwl-theme-options-text-color-rgb, 33, 37, 41);
  --kwl-body-bg: var(--kwl-theme-options-body-bg, #ffffff);
  --kwl-body-bg-rgb: var(--kwl-theme-options-body-bg-rgb, 255, 255, 255);

  --kwl-border-width: var(--kwl-theme-options-border-width, 1px);
  --kwl-border-color: var(--kwl-theme-options-border-color, #dee2e6);
  --kwl-border-color-translucent: var(--kwl-theme-options-border-color-translucent, rgba(0, 0, 0, 0.175));
  --kwl-border-radius: var(--kwl-theme-options-border-radius, 0.375rem);
  --kwl-border-radius-sm: var(--kwl-theme-options-border-radius-sm, 0.25rem);
  --kwl-border-radius-lg: var(--kwl-theme-options-border-radius-lg, 0.5rem);
  --kwl-border-radius-xl: var(--kwl-theme-options-border-radius-xl, 1rem);
  --kwl-border-radius-xxl: var(--kwl-theme-options-border-radius-xxl, 2rem);
  --kwl-border-radius-pill: var(--kwl-theme-options-border-radius-pill, 50rem);

  --kwl-on-primary: var(--kwl-theme-options-on-primary, #fff);
  --kwl-on-secondary: var(--kwl-theme-options-on-secondary, #fff);
  --kwl-on-accent: var(--kwl-theme-options-on-accent, #fff);
  --kwl-on-accent-2: var(--kwl-theme-options-on-accent-2, #fff);
  --kwl-on-success: var(--kwl-theme-options-on-success, #fff);
  --kwl-on-info: var(--kwl-theme-options-on-info, #000);
  --kwl-on-warning: var(--kwl-theme-options-on-warning, #000);
  --kwl-on-danger: var(--kwl-theme-options-on-danger, #fff);
  --kwl-on-light: var(--kwl-theme-options-on-light, #000);
  --kwl-on-dark: var(--kwl-theme-options-on-dark, #fff);

  /* Bootstrap base palette and breakpoints. */
  --bs-blue: var(--kwl-theme-options-blue, #0d6efd);
  --bs-indigo: var(--kwl-theme-options-indigo, #6610f2);
  --bs-purple: var(--kwl-theme-options-purple, #6f42c1);
  --bs-pink: var(--kwl-theme-options-pink, #d63384);
  --bs-red: var(--kwl-theme-options-red, #dc3545);
  --bs-orange: var(--kwl-theme-options-orange, #fd7e14);
  --bs-yellow: var(--kwl-theme-options-yellow, #ffc107);
  --bs-green: var(--kwl-theme-options-green, #198754);
  --bs-teal: var(--kwl-theme-options-teal, #20c997);
  --bs-cyan: var(--kwl-theme-options-cyan, #0dcaf0);
  --bs-black: var(--kwl-theme-options-black, #000);
  --bs-white: var(--kwl-theme-options-white, #fff);
  --bs-black-rgb: var(--kwl-theme-options-black-rgb, 0, 0, 0);
  --bs-white-rgb: var(--kwl-theme-options-white-rgb, 255, 255, 255);

  --bs-gray: var(--kwl-theme-options-gray, #6c757d);
  --bs-gray-dark: var(--kwl-theme-options-gray-dark, #343a40);
  --bs-gray-100: var(--kwl-theme-options-gray-100, #f8f9fa);
  --bs-gray-200: var(--kwl-theme-options-gray-200, #e9ecef);
  --bs-gray-300: var(--kwl-theme-options-gray-300, #dee2e6);
  --bs-gray-400: var(--kwl-theme-options-gray-400, #ced4da);
  --bs-gray-500: var(--kwl-theme-options-gray-500, #adb5bd);
  --bs-gray-600: var(--kwl-theme-options-gray-600, #6c757d);
  --bs-gray-700: var(--kwl-theme-options-gray-700, #495057);
  --bs-gray-800: var(--kwl-theme-options-gray-800, #343a40);
  --bs-gray-900: var(--kwl-theme-options-gray-900, #212529);

  --bs-breakpoint-xs: var(--kwl-theme-options-breakpoint-xs, 0);
  --bs-breakpoint-sm: var(--kwl-theme-options-breakpoint-sm, 576px);
  --bs-breakpoint-md: var(--kwl-theme-options-breakpoint-md, 768px);
  --bs-breakpoint-lg: var(--kwl-theme-options-breakpoint-lg, 992px);
  --bs-breakpoint-xl: var(--kwl-theme-options-breakpoint-xl, 1200px);
  --bs-breakpoint-xxl: var(--kwl-theme-options-breakpoint-xxl, 1400px);

  --bs-gradient: var(--kwl-theme-options-gradient, linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)));
  --bs-aspect-ratio: var(--kwl-theme-options-aspect-ratio, 100%);
  --bs-icon-link-transform: var(--kwl-theme-options-icon-link-transform, translate3d(.25em, 0, 0));
  --bs-font-monospace: var(--kwl-theme-options-monospace-font, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);

  /* Bootstrap semantic tokens. */
  --bs-primary: var(--kwl-color-primary);
  --bs-secondary: var(--kwl-color-secondary);
  --bs-accent: var(--kwl-color-accent);
  --bs-accent-2: var(--kwl-color-accent-2);
  --bs-success: var(--kwl-color-success);
  --bs-info: var(--kwl-color-info);
  --bs-warning: var(--kwl-color-warning);
  --bs-danger: var(--kwl-color-danger);
  --bs-light: var(--kwl-color-light);
  --bs-dark: var(--kwl-color-dark);

  --bs-primary-rgb: var(--kwl-color-primary-rgb);
  --bs-secondary-rgb: var(--kwl-color-secondary-rgb);
  --bs-accent-rgb: var(--kwl-color-accent-rgb);
  --bs-accent-2-rgb: var(--kwl-color-accent-2-rgb);
  --bs-success-rgb: var(--kwl-color-success-rgb);
  --bs-info-rgb: var(--kwl-color-info-rgb);
  --bs-warning-rgb: var(--kwl-color-warning-rgb);
  --bs-danger-rgb: var(--kwl-color-danger-rgb);
  --bs-light-rgb: var(--kwl-color-light-rgb);
  --bs-dark-rgb: var(--kwl-color-dark-rgb);

  --bs-body-font-family: var(--kwl-font-family-base);
  --bs-body-color: var(--kwl-body-color);
  --bs-body-color-rgb: var(--kwl-body-color-rgb);
  --bs-body-bg: var(--kwl-body-bg);
  --bs-body-bg-rgb: var(--kwl-body-bg-rgb);
  --bs-emphasis-color: var(--kwl-theme-options-emphasis-color, var(--bs-body-color));
  --bs-emphasis-color-rgb: var(--kwl-theme-options-emphasis-color-rgb, var(--bs-body-color-rgb));
  --bs-secondary-color: var(--kwl-theme-options-secondary-color, rgba(var(--bs-body-color-rgb), 0.75));
  --bs-secondary-color-rgb: var(--kwl-theme-options-secondary-color-rgb, var(--bs-body-color-rgb));
  --bs-secondary-bg: var(--kwl-theme-options-secondary-bg, color-mix(in srgb, var(--bs-body-color) 10%, var(--bs-body-bg)));
  --bs-secondary-bg-rgb: var(--kwl-theme-options-secondary-bg-rgb, 233, 236, 239);
  --bs-tertiary-color: var(--kwl-theme-options-tertiary-color, rgba(var(--bs-body-color-rgb), 0.5));
  --bs-tertiary-color-rgb: var(--kwl-theme-options-tertiary-color-rgb, var(--bs-body-color-rgb));
  --bs-tertiary-bg: var(--kwl-theme-options-tertiary-bg, color-mix(in srgb, var(--bs-body-color) 5%, var(--bs-body-bg)));
  --bs-tertiary-bg-rgb: var(--kwl-theme-options-tertiary-bg-rgb, 248, 249, 250);

  --bs-heading-color: var(--kwl-theme-options-heading-color, inherit);
  --bs-link-color: var(--kwl-theme-options-link-color, var(--bs-primary));
  --bs-link-color-rgb: var(--kwl-theme-options-link-color-rgb, var(--bs-primary-rgb));
  --bs-link-hover-color: var(--kwl-theme-options-link-hover-color, color-mix(in srgb, var(--bs-link-color) 84%, black));
  --bs-link-hover-color-rgb: var(--kwl-theme-options-link-hover-color-rgb, var(--bs-primary-rgb));
  --bs-code-color: var(--kwl-theme-options-code-color, #d63384);
  --bs-highlight-color: var(--kwl-theme-options-highlight-color, var(--bs-body-color));
  --bs-highlight-bg: var(--kwl-theme-options-highlight-bg, color-mix(in srgb, var(--bs-warning) 35%, white));

  --bs-border-width: var(--kwl-border-width);
  --bs-border-color: var(--kwl-border-color);
  --bs-border-color-translucent: var(--kwl-border-color-translucent);
  --bs-border-radius: var(--kwl-border-radius);
  --bs-border-radius-sm: var(--kwl-border-radius-sm);
  --bs-border-radius-lg: var(--kwl-border-radius-lg);
  --bs-border-radius-xl: var(--kwl-border-radius-xl);
  --bs-border-radius-xxl: var(--kwl-border-radius-xxl);
  --bs-border-radius-2xl: var(--kwl-border-radius-xxl);
  --bs-border-radius-pill: var(--kwl-border-radius-pill);

  --bs-focus-ring-width: var(--kwl-theme-options-focus-ring-width, 0.25rem);
  --bs-focus-ring-opacity: var(--kwl-theme-options-focus-ring-opacity, 0.25);
  --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity));
  --bs-form-valid-color: var(--kwl-theme-options-form-valid-color, var(--bs-success));
  --bs-form-valid-border-color: var(--kwl-theme-options-form-valid-border-color, var(--bs-success));
  --bs-form-invalid-color: var(--kwl-theme-options-form-invalid-color, var(--bs-danger));
  --bs-form-invalid-border-color: var(--kwl-theme-options-form-invalid-border-color, var(--bs-danger));

  /* Utility vars used across Bootstrap utilities. */
  --bs-bg-opacity: var(--kwl-theme-options-bg-opacity, 1);
  --bs-text-opacity: var(--kwl-theme-options-text-opacity, 1);
  --bs-border-opacity: var(--kwl-theme-options-border-opacity, 1);
  --bs-link-opacity: var(--kwl-theme-options-link-opacity, 1);
  --bs-link-underline-opacity: var(--kwl-theme-options-link-underline-opacity, 1);
  --bs-gutter-x: var(--kwl-theme-options-grid-gutter-x, 1.5rem);
  --bs-gutter-y: var(--kwl-theme-options-grid-gutter-y, 0);
  --bs-scroll-height: var(--kwl-theme-options-scroll-height, 75vh);
  --bs-position: var(--kwl-theme-options-position, initial);

  /* Contextual subtle/emphasis scales (powers alerts, list groups, etc). */
  --bs-primary-text-emphasis: var(--kwl-theme-options-primary-text-emphasis, color-mix(in srgb, var(--bs-primary) 58%, black));
  --bs-secondary-text-emphasis: var(--kwl-theme-options-secondary-text-emphasis, color-mix(in srgb, var(--bs-secondary) 58%, black));
  --bs-success-text-emphasis: var(--kwl-theme-options-success-text-emphasis, color-mix(in srgb, var(--bs-success) 58%, black));
  --bs-info-text-emphasis: var(--kwl-theme-options-info-text-emphasis, color-mix(in srgb, var(--bs-info) 58%, black));
  --bs-warning-text-emphasis: var(--kwl-theme-options-warning-text-emphasis, color-mix(in srgb, var(--bs-warning) 58%, black));
  --bs-danger-text-emphasis: var(--kwl-theme-options-danger-text-emphasis, color-mix(in srgb, var(--bs-danger) 58%, black));
  --bs-light-text-emphasis: var(--kwl-theme-options-light-text-emphasis, color-mix(in srgb, var(--bs-light) 58%, black));
  --bs-dark-text-emphasis: var(--kwl-theme-options-dark-text-emphasis, color-mix(in srgb, var(--bs-dark) 58%, white));

  --bs-primary-bg-subtle: var(--kwl-theme-options-primary-bg-subtle, color-mix(in srgb, var(--bs-primary) 18%, white));
  --bs-secondary-bg-subtle: var(--kwl-theme-options-secondary-bg-subtle, color-mix(in srgb, var(--bs-secondary) 18%, white));
  --bs-success-bg-subtle: var(--kwl-theme-options-success-bg-subtle, color-mix(in srgb, var(--bs-success) 18%, white));
  --bs-info-bg-subtle: var(--kwl-theme-options-info-bg-subtle, color-mix(in srgb, var(--bs-info) 18%, white));
  --bs-warning-bg-subtle: var(--kwl-theme-options-warning-bg-subtle, color-mix(in srgb, var(--bs-warning) 18%, white));
  --bs-danger-bg-subtle: var(--kwl-theme-options-danger-bg-subtle, color-mix(in srgb, var(--bs-danger) 18%, white));
  --bs-light-bg-subtle: var(--kwl-theme-options-light-bg-subtle, color-mix(in srgb, var(--bs-light) 50%, white));
  --bs-dark-bg-subtle: var(--kwl-theme-options-dark-bg-subtle, color-mix(in srgb, var(--bs-dark) 18%, white));

  --bs-primary-border-subtle: var(--kwl-theme-options-primary-border-subtle, color-mix(in srgb, var(--bs-primary) 28%, white));
  --bs-secondary-border-subtle: var(--kwl-theme-options-secondary-border-subtle, color-mix(in srgb, var(--bs-secondary) 28%, white));
  --bs-success-border-subtle: var(--kwl-theme-options-success-border-subtle, color-mix(in srgb, var(--bs-success) 28%, white));
  --bs-info-border-subtle: var(--kwl-theme-options-info-border-subtle, color-mix(in srgb, var(--bs-info) 28%, white));
  --bs-warning-border-subtle: var(--kwl-theme-options-warning-border-subtle, color-mix(in srgb, var(--bs-warning) 28%, white));
  --bs-danger-border-subtle: var(--kwl-theme-options-danger-border-subtle, color-mix(in srgb, var(--bs-danger) 28%, white));
  --bs-light-border-subtle: var(--kwl-theme-options-light-border-subtle, color-mix(in srgb, var(--bs-light) 70%, white));
  --bs-dark-border-subtle: var(--kwl-theme-options-dark-border-subtle, color-mix(in srgb, var(--bs-dark) 28%, white));
}

[data-bs-theme=dark] {
  --bs-body-color: var(--kwl-theme-options-body-color-dark, #dee2e6);
  --bs-body-color-rgb: var(--kwl-theme-options-body-color-dark-rgb, 222, 226, 230);
  --bs-body-bg: var(--kwl-theme-options-body-bg-dark, #212529);
  --bs-body-bg-rgb: var(--kwl-theme-options-body-bg-dark-rgb, 33, 37, 41);
  --bs-border-color: var(--kwl-theme-options-border-color-dark, #495057);
  --bs-border-color-translucent: var(--kwl-theme-options-border-color-translucent-dark, rgba(255, 255, 255, 0.15));
}

/* Backdrops and shared utility tokens */
.modal-backdrop,
.offcanvas-backdrop {
  --bs-backdrop-zindex: var(--kwl-theme-options-backdrop-zindex, 1040);
  --bs-backdrop-bg: var(--kwl-theme-options-backdrop-bg, #000);
  --bs-backdrop-opacity: var(--kwl-theme-options-backdrop-opacity, 0.5);
}

.accordion {
  --bs-accordion-color: var(--bs-body-color);
  --bs-accordion-bg: var(--bs-body-bg);
  --bs-accordion-border-color: var(--bs-border-color);
  --bs-accordion-border-width: var(--bs-border-width);
  --bs-accordion-border-radius: var(--bs-border-radius);
  --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));
  --bs-accordion-btn-bg: var(--bs-body-bg);
  --bs-accordion-btn-color: var(--bs-body-color);
  --bs-accordion-btn-icon: var(--kwl-theme-options-accordion-btn-icon, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='m2 5 6 6 6-6'/%3e%3c/svg%3e"));
  --bs-accordion-btn-active-icon: var(--kwl-theme-options-accordion-btn-active-icon, var(--bs-accordion-btn-icon));
  --bs-accordion-btn-focus-box-shadow: 0 0 0 var(--bs-focus-ring-width) var(--bs-focus-ring-color);
  --bs-accordion-active-color: var(--bs-primary-text-emphasis);
  --bs-accordion-active-bg: var(--bs-primary-bg-subtle);
}

.alert {
  --bs-alert-border-radius: var(--bs-border-radius);
  --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);
}

.badge {
  --bs-badge-border-radius: var(--bs-border-radius);
}

.breadcrumb {
  --bs-breadcrumb-divider-color: var(--bs-secondary-color);
  --bs-breadcrumb-item-active-color: var(--bs-secondary-color);
  --bs-breadcrumb-border-radius: var(--bs-border-radius);
}

.btn {
  --bs-btn-font-family: var(--kwl-theme-options-button-font-family, inherit);
  --bs-btn-border-width: var(--bs-border-width);
  --bs-btn-border-radius: var(--kwl-theme-options-button-border-radius, var(--bs-border-radius));
  --bs-btn-focus-box-shadow: 0 0 0 var(--bs-focus-ring-width) rgba(var(--bs-btn-focus-shadow-rgb), 0.5);
}

.btn-primary { --kwl-btn-tone: var(--bs-primary); --kwl-btn-tone-rgb: var(--bs-primary-rgb); --kwl-btn-contrast: var(--kwl-on-primary); }
.btn-secondary { --kwl-btn-tone: var(--bs-secondary); --kwl-btn-tone-rgb: var(--bs-secondary-rgb); --kwl-btn-contrast: var(--kwl-on-secondary); }
.btn-accent { --kwl-btn-tone: var(--kwl-color-accent); --kwl-btn-tone-rgb: var(--kwl-color-accent-rgb); --kwl-btn-contrast: var(--kwl-on-accent); }
.btn-accent-1 { --kwl-btn-tone: var(--kwl-color-accent); --kwl-btn-tone-rgb: var(--kwl-color-accent-rgb); --kwl-btn-contrast: var(--kwl-on-accent); }
.btn-accent-2 { --kwl-btn-tone: var(--kwl-color-accent-2); --kwl-btn-tone-rgb: var(--kwl-color-accent-2-rgb); --kwl-btn-contrast: var(--kwl-on-accent-2); }
.btn-success { --kwl-btn-tone: var(--bs-success); --kwl-btn-tone-rgb: var(--bs-success-rgb); --kwl-btn-contrast: var(--kwl-on-success); }
.btn-info { --kwl-btn-tone: var(--bs-info); --kwl-btn-tone-rgb: var(--bs-info-rgb); --kwl-btn-contrast: var(--kwl-on-info); }
.btn-warning { --kwl-btn-tone: var(--bs-warning); --kwl-btn-tone-rgb: var(--bs-warning-rgb); --kwl-btn-contrast: var(--kwl-on-warning); }
.btn-danger { --kwl-btn-tone: var(--bs-danger); --kwl-btn-tone-rgb: var(--bs-danger-rgb); --kwl-btn-contrast: var(--kwl-on-danger); }
.btn-light { --kwl-btn-tone: var(--bs-light); --kwl-btn-tone-rgb: var(--bs-light-rgb); --kwl-btn-contrast: var(--kwl-on-light); }
.btn-dark { --kwl-btn-tone: var(--bs-dark); --kwl-btn-tone-rgb: var(--bs-dark-rgb); --kwl-btn-contrast: var(--kwl-on-dark); }

.btn-primary,
.btn-secondary,
.btn-accent,
.btn-accent-1,
.btn-accent-2,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger,
.btn-light,
.btn-dark {
  --bs-btn-color: var(--kwl-btn-contrast);
  --bs-btn-bg: var(--kwl-btn-tone);
  --bs-btn-border-color: var(--kwl-btn-tone);
  --bs-btn-hover-color: var(--kwl-btn-contrast);
  --bs-btn-hover-bg: color-mix(in srgb, var(--kwl-btn-tone) 88%, black);
  --bs-btn-hover-border-color: color-mix(in srgb, var(--kwl-btn-tone) 82%, black);
  --bs-btn-focus-shadow-rgb: var(--kwl-btn-tone-rgb);
  --bs-btn-active-color: var(--kwl-btn-contrast);
  --bs-btn-active-bg: color-mix(in srgb, var(--kwl-btn-tone) 80%, black);
  --bs-btn-active-border-color: color-mix(in srgb, var(--kwl-btn-tone) 74%, black);
  --bs-btn-disabled-color: var(--kwl-btn-contrast);
  --bs-btn-disabled-bg: var(--kwl-btn-tone);
  --bs-btn-disabled-border-color: var(--kwl-btn-tone);
}

.btn-outline-primary { --kwl-btn-outline-tone: var(--bs-primary); --kwl-btn-outline-rgb: var(--bs-primary-rgb); --kwl-btn-outline-contrast: var(--kwl-on-primary); }
.btn-outline-secondary { --kwl-btn-outline-tone: var(--bs-secondary); --kwl-btn-outline-rgb: var(--bs-secondary-rgb); --kwl-btn-outline-contrast: var(--kwl-on-secondary); }
.btn-outline-accent { --kwl-btn-outline-tone: var(--kwl-color-accent); --kwl-btn-outline-rgb: var(--kwl-color-accent-rgb); --kwl-btn-outline-contrast: var(--kwl-on-accent); }
.btn-outline-accent-1 { --kwl-btn-outline-tone: var(--kwl-color-accent); --kwl-btn-outline-rgb: var(--kwl-color-accent-rgb); --kwl-btn-outline-contrast: var(--kwl-on-accent); }
.btn-outline-accent-2 { --kwl-btn-outline-tone: var(--kwl-color-accent-2); --kwl-btn-outline-rgb: var(--kwl-color-accent-2-rgb); --kwl-btn-outline-contrast: var(--kwl-on-accent-2); }
.btn-outline-success { --kwl-btn-outline-tone: var(--bs-success); --kwl-btn-outline-rgb: var(--bs-success-rgb); --kwl-btn-outline-contrast: var(--kwl-on-success); }
.btn-outline-info { --kwl-btn-outline-tone: var(--bs-info); --kwl-btn-outline-rgb: var(--bs-info-rgb); --kwl-btn-outline-contrast: var(--kwl-on-info); }
.btn-outline-warning { --kwl-btn-outline-tone: var(--bs-warning); --kwl-btn-outline-rgb: var(--bs-warning-rgb); --kwl-btn-outline-contrast: var(--kwl-on-warning); }
.btn-outline-danger { --kwl-btn-outline-tone: var(--bs-danger); --kwl-btn-outline-rgb: var(--bs-danger-rgb); --kwl-btn-outline-contrast: var(--kwl-on-danger); }
.btn-outline-light { --kwl-btn-outline-tone: var(--bs-light); --kwl-btn-outline-rgb: var(--bs-light-rgb); --kwl-btn-outline-contrast: var(--kwl-on-light); }
.btn-outline-dark { --kwl-btn-outline-tone: var(--bs-dark); --kwl-btn-outline-rgb: var(--bs-dark-rgb); --kwl-btn-outline-contrast: var(--kwl-on-dark); }

.btn-outline-primary,
.btn-outline-secondary,
.btn-outline-accent,
.btn-outline-accent-1,
.btn-outline-accent-2,
.btn-outline-success,
.btn-outline-info,
.btn-outline-warning,
.btn-outline-danger,
.btn-outline-light,
.btn-outline-dark {
  --bs-btn-color: var(--kwl-btn-outline-tone);
  --bs-btn-border-color: var(--kwl-btn-outline-tone);
  --bs-btn-hover-color: var(--kwl-btn-outline-contrast);
  --bs-btn-hover-bg: var(--kwl-btn-outline-tone);
  --bs-btn-hover-border-color: var(--kwl-btn-outline-tone);
  --bs-btn-focus-shadow-rgb: var(--kwl-btn-outline-rgb);
  --bs-btn-active-color: var(--kwl-btn-outline-contrast);
  --bs-btn-active-bg: var(--kwl-btn-outline-tone);
  --bs-btn-active-border-color: var(--kwl-btn-outline-tone);
  --bs-btn-disabled-color: var(--kwl-btn-outline-tone);
  --bs-btn-disabled-bg: transparent;
  --bs-btn-disabled-border-color: var(--kwl-btn-outline-tone);
}

.btn-close {
  --bs-btn-close-color: var(--bs-body-color);
  --bs-btn-close-bg: var(--kwl-theme-options-btn-close-icon, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3e%3c/svg%3e"));
  --bs-btn-close-focus-shadow: 0 0 0 var(--bs-focus-ring-width) var(--bs-focus-ring-color);
}

.card {
  --bs-card-border-width: var(--bs-border-width);
  --bs-card-border-color: var(--bs-border-color-translucent);
  --bs-card-border-radius: var(--bs-border-radius);
  --bs-card-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));
  --bs-card-bg: var(--bs-body-bg);
  --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);
}

.carousel {
  --bs-carousel-caption-color: var(--kwl-theme-options-carousel-caption-color, #fff);
  --bs-carousel-indicator-active-bg: var(--bs-primary);
}

.dropdown-menu {
  --bs-dropdown-color: var(--bs-body-color);
  --bs-dropdown-bg: var(--bs-body-bg);
  --bs-dropdown-border-color: var(--bs-border-color-translucent);
  --bs-dropdown-border-radius: var(--bs-border-radius);
  --bs-dropdown-border-width: var(--bs-border-width);
  --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width));
  --bs-dropdown-divider-bg: var(--bs-border-color-translucent);
  --bs-dropdown-link-color: var(--bs-body-color);
  --bs-dropdown-link-hover-color: var(--bs-body-color);
  --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);
  --bs-dropdown-link-active-color: var(--kwl-on-primary);
  --bs-dropdown-link-active-bg: var(--bs-primary);
  --bs-dropdown-link-disabled-color: var(--bs-tertiary-color);
  --bs-dropdown-header-color: var(--bs-secondary);
}

.form-control:focus,
.form-select:focus,
.form-check-input:focus {
  border-color: color-mix(in srgb, var(--bs-primary) 35%, white);
  box-shadow: 0 0 0 var(--bs-focus-ring-width) rgba(var(--bs-primary-rgb), 0.25);
}

.form-select {
  --bs-form-select-bg-img: var(--kwl-theme-options-form-select-icon, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"));
}

.form-check-input {
  --bs-form-check-bg: var(--bs-body-bg);
}

.form-check-input:checked {
  background-color: var(--bs-primary);
  border-color: var(--bs-primary);
}

.form-switch .form-check-input {
  --bs-form-switch-bg: var(--kwl-theme-options-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='rgba(0,0,0,.25)'/%3e%3c/svg%3e"));
}

.form-range::-webkit-slider-thumb {
  background-color: var(--bs-primary);
}

.form-range::-moz-range-thumb {
  background-color: var(--bs-primary);
}

.form-range::-webkit-slider-runnable-track {
  background-color: var(--bs-secondary-bg);
}

.form-range::-moz-range-track {
  background-color: var(--bs-secondary-bg);
}

.list-group {
  --bs-list-group-color: var(--bs-body-color);
  --bs-list-group-bg: var(--bs-body-bg);
  --bs-list-group-border-color: var(--bs-border-color);
  --bs-list-group-border-width: var(--bs-border-width);
  --bs-list-group-border-radius: var(--bs-border-radius);
  --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);
  --bs-list-group-action-active-bg: var(--bs-secondary-bg);
  --bs-list-group-disabled-bg: var(--bs-body-bg);
  --bs-list-group-active-color: var(--kwl-on-primary);
  --bs-list-group-active-bg: var(--bs-primary);
  --bs-list-group-active-border-color: var(--bs-primary);
}

.modal {
  --bs-modal-color: var(--bs-body-color);
  --bs-modal-bg: var(--bs-body-bg);
  --bs-modal-border-color: var(--bs-border-color-translucent);
  --bs-modal-border-width: var(--bs-border-width);
  --bs-modal-border-radius: var(--bs-border-radius-lg);
  --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));
  --bs-modal-header-border-color: var(--bs-border-color);
  --bs-modal-footer-border-color: var(--bs-border-color);
}

.nav {
  --bs-nav-link-color: var(--bs-link-color);
  --bs-nav-link-hover-color: var(--bs-link-hover-color);
  --bs-nav-link-disabled-color: var(--bs-secondary-color);
  --bs-nav-pills-link-active-bg: var(--bs-primary);
  --bs-nav-pills-link-active-color: var(--kwl-on-primary);
  --bs-nav-tabs-border-color: var(--bs-border-color);
  --bs-nav-tabs-link-hover-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-nav-tabs-link-active-bg, var(--bs-body-bg));
  --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);
  --bs-nav-tabs-link-active-bg: var(--bs-body-bg);
  --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);
  --bs-nav-tabs-border-radius: var(--bs-border-radius);
  --bs-nav-tabs-border-width: var(--bs-border-width);
  --bs-nav-underline-link-active-color: var(--bs-emphasis-color);
}

.navbar {
  --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);
  --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);
  --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);
  --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);
  --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);
  --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);
  --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);
  --bs-navbar-toggler-border-radius: var(--bs-border-radius);
  --bs-navbar-toggler-icon-bg: var(--kwl-theme-options-navbar-toggler-icon, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='currentColor' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"));
}

.offcanvas {
  --bs-offcanvas-color: var(--bs-body-color);
  --bs-offcanvas-bg: var(--bs-body-bg);
  --bs-offcanvas-border-width: var(--bs-border-width);
  --bs-offcanvas-border-color: var(--bs-border-color-translucent);
}

.pagination {
  --bs-pagination-color: var(--bs-link-color);
  --bs-pagination-bg: var(--bs-body-bg);
  --bs-pagination-border-width: var(--bs-border-width);
  --bs-pagination-border-color: var(--bs-border-color);
  --bs-pagination-border-radius: var(--bs-border-radius);
  --bs-pagination-hover-color: var(--bs-link-hover-color);
  --bs-pagination-hover-bg: var(--bs-tertiary-bg);
  --bs-pagination-hover-border-color: var(--bs-border-color);
  --bs-pagination-focus-color: var(--bs-link-hover-color);
  --bs-pagination-focus-bg: var(--bs-secondary-bg);
  --bs-pagination-focus-box-shadow: 0 0 0 var(--bs-focus-ring-width) var(--bs-focus-ring-color);
  --bs-pagination-active-color: var(--kwl-on-primary);
  --bs-pagination-active-bg: var(--bs-primary);
  --bs-pagination-active-border-color: var(--bs-primary);
  --bs-pagination-disabled-color: var(--bs-secondary-color);
  --bs-pagination-disabled-bg: var(--bs-secondary-bg);
  --bs-pagination-disabled-border-color: var(--bs-border-color);
}

.popover {
  --bs-popover-bg: var(--bs-body-bg);
  --bs-popover-border-width: var(--bs-border-width);
  --bs-popover-border-color: var(--bs-border-color-translucent);
  --bs-popover-border-radius: var(--bs-border-radius-lg);
  --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));
  --bs-popover-header-bg: var(--bs-secondary-bg);
  --bs-popover-header-color: var(--bs-emphasis-color);
  --bs-popover-body-color: var(--bs-body-color);
}

.progress {
  --bs-progress-bg: var(--bs-secondary-bg);
  --bs-progress-border-radius: var(--bs-border-radius);
  --bs-progress-box-shadow: var(--bs-box-shadow-inset);
  --bs-progress-bar-color: var(--kwl-on-primary);
  --bs-progress-bar-bg: var(--bs-primary);
}

.spinner-border,
.spinner-grow {
  --bs-spinner-width: var(--kwl-theme-options-spinner-width, 2rem);
  --bs-spinner-height: var(--kwl-theme-options-spinner-height, 2rem);
  --bs-spinner-border-width: var(--kwl-theme-options-spinner-border-width, 0.25em);
  --bs-spinner-animation-speed: var(--kwl-theme-options-spinner-animation-speed, 0.75s);
}

.table {
  --bs-table-color: var(--bs-emphasis-color);
  --bs-table-bg: var(--bs-body-bg);
  --bs-table-border-color: var(--bs-border-color);
  --bs-table-striped-color: var(--bs-emphasis-color);
  --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05);
  --bs-table-active-color: var(--bs-emphasis-color);
  --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1);
  --bs-table-hover-color: var(--bs-emphasis-color);
  --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075);
}

.table-primary { --kwl-table-tone: var(--bs-primary); --kwl-table-contrast: var(--kwl-on-light); }
.table-secondary { --kwl-table-tone: var(--bs-secondary); --kwl-table-contrast: var(--kwl-on-light); }
.table-success { --kwl-table-tone: var(--bs-success); --kwl-table-contrast: var(--kwl-on-light); }
.table-info { --kwl-table-tone: var(--bs-info); --kwl-table-contrast: var(--kwl-on-light); }
.table-warning { --kwl-table-tone: var(--bs-warning); --kwl-table-contrast: var(--kwl-on-light); }
.table-danger { --kwl-table-tone: var(--bs-danger); --kwl-table-contrast: var(--kwl-on-light); }
.table-light { --kwl-table-tone: var(--bs-light); --kwl-table-contrast: var(--kwl-on-light); }
.table-dark { --kwl-table-tone: var(--bs-dark); --kwl-table-contrast: var(--kwl-on-dark); }

.table-primary,
.table-secondary,
.table-success,
.table-info,
.table-warning,
.table-danger,
.table-light,
.table-dark {
  --bs-table-color: var(--kwl-table-contrast);
  --bs-table-bg: color-mix(in srgb, var(--kwl-table-tone) 22%, var(--bs-body-bg));
  --bs-table-border-color: color-mix(in srgb, var(--kwl-table-tone) 30%, var(--bs-border-color));
  --bs-table-striped-bg: color-mix(in srgb, var(--kwl-table-tone) 28%, var(--bs-body-bg));
  --bs-table-active-bg: color-mix(in srgb, var(--kwl-table-tone) 34%, var(--bs-body-bg));
  --bs-table-hover-bg: color-mix(in srgb, var(--kwl-table-tone) 31%, var(--bs-body-bg));
  --bs-table-striped-color: var(--kwl-table-contrast);
  --bs-table-active-color: var(--kwl-table-contrast);
  --bs-table-hover-color: var(--kwl-table-contrast);
}

.toast {
  --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.9);
  --bs-toast-border-width: var(--bs-border-width);
  --bs-toast-border-color: var(--bs-border-color-translucent);
  --bs-toast-border-radius: var(--bs-border-radius);
  --bs-toast-header-color: var(--bs-secondary-color);
  --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.9);
  --bs-toast-header-border-color: var(--bs-border-color-translucent);
}

.tooltip {
  --bs-tooltip-color: var(--kwl-theme-options-tooltip-color, var(--bs-body-bg));
  --bs-tooltip-bg: var(--kwl-theme-options-tooltip-bg, var(--bs-emphasis-color));
  --bs-tooltip-border-radius: var(--bs-border-radius);
  --bs-tooltip-opacity: var(--kwl-theme-options-tooltip-opacity, 0.9);
}

/* Completeness: expose remaining Bootstrap component/utility vars for runtime overrides. */
:root,
[data-bs-theme=light] {
  --bs-body-font-size: var(--kwl-theme-options-body-font-size, 1rem);
  --bs-body-font-weight: var(--kwl-theme-options-body-font-weight, 400);
  --bs-body-line-height: var(--kwl-theme-options-body-line-height, 1.5);
  --bs-body-text-align: var(--kwl-theme-options-body-text-align, initial);
  --bs-border-style: var(--kwl-theme-options-border-style, solid);
  --bs-link-decoration: var(--kwl-theme-options-link-decoration, underline);
  --bs-box-shadow: var(--kwl-theme-options-box-shadow, 0 0.5rem 1rem rgba(0, 0, 0, 0.15));
  --bs-box-shadow-sm: var(--kwl-theme-options-box-shadow-sm, 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075));
  --bs-box-shadow-lg: var(--kwl-theme-options-box-shadow-lg, 0 1rem 3rem rgba(0, 0, 0, 0.175));
  --bs-focus-ring-x: var(--kwl-theme-options-focus-ring-x, 0);
  --bs-focus-ring-y: var(--kwl-theme-options-focus-ring-y, 0);
  --bs-focus-ring-blur: var(--kwl-theme-options-focus-ring-blur, 0);
}

.accordion {
  --bs-accordion-transition: var(--kwl-theme-options-accordion-transition, color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease);
  --bs-accordion-btn-padding-x: var(--kwl-theme-options-accordion-btn-padding-x, 1.25rem);
  --bs-accordion-btn-padding-y: var(--kwl-theme-options-accordion-btn-padding-y, 1rem);
  --bs-accordion-btn-icon-width: var(--kwl-theme-options-accordion-btn-icon-width, 1.25rem);
  --bs-accordion-btn-icon-transform: var(--kwl-theme-options-accordion-btn-icon-transform, rotate(-180deg));
  --bs-accordion-btn-icon-transition: var(--kwl-theme-options-accordion-btn-icon-transition, transform 0.2s ease-in-out);
  --bs-accordion-body-padding-x: var(--kwl-theme-options-accordion-body-padding-x, 1.25rem);
  --bs-accordion-body-padding-y: var(--kwl-theme-options-accordion-body-padding-y, 1rem);
}

.alert {
  --bs-alert-bg: var(--kwl-theme-options-alert-bg, transparent);
  --bs-alert-padding-x: var(--kwl-theme-options-alert-padding-x, 1rem);
  --bs-alert-padding-y: var(--kwl-theme-options-alert-padding-y, 1rem);
  --bs-alert-margin-bottom: var(--kwl-theme-options-alert-margin-bottom, 1rem);
  --bs-alert-color: var(--kwl-theme-options-alert-color, inherit);
  --bs-alert-link-color: var(--kwl-theme-options-alert-link-color, inherit);
}

.badge {
  --bs-badge-padding-x: var(--kwl-theme-options-badge-padding-x, 0.65em);
  --bs-badge-padding-y: var(--kwl-theme-options-badge-padding-y, 0.35em);
  --bs-badge-font-size: var(--kwl-theme-options-badge-font-size, 0.75em);
  --bs-badge-font-weight: var(--kwl-theme-options-badge-font-weight, 700);
  --bs-badge-color: var(--kwl-theme-options-badge-color, #fff);
}

.text-bg-primary { 
  color: var(--kwl-on-primary, #fff) !important;
}
.text-bg-secondary { 
  color: var(--kwl-on-secondary, #fff) !important;
}
.text-bg-success { 
  color: var(--kwl-on-success, #fff) !important;
}
.text-bg-info { 
  color: var(--kwl-on-info, #fff) !important;
}
.text-bg-warning { 
  color: var(--kwl-on-warning, #fff) !important;
}
.text-bg-danger { 
  color: var(--kwl-on-danger, #fff) !important;
}
.text-bg-light { 
  color: var(--kwl-on-light, #fff) !important;
}
.text-bg-dark { 
  color: var(--kwl-on-dark, #fff) !important;
}

.breadcrumb {
  --bs-breadcrumb-padding-x: var(--kwl-theme-options-breadcrumb-padding-x, 0);
  --bs-breadcrumb-padding-y: var(--kwl-theme-options-breadcrumb-padding-y, 0);
  --bs-breadcrumb-margin-bottom: var(--kwl-theme-options-breadcrumb-margin-bottom, 1rem);
  --bs-breadcrumb-bg: var(--kwl-theme-options-breadcrumb-bg, transparent);
  --bs-breadcrumb-divider: var(--kwl-theme-options-breadcrumb-divider, "/");
  --bs-breadcrumb-font-size: var(--kwl-theme-options-breadcrumb-font-size, 1rem);
  --bs-breadcrumb-item-padding-x: var(--kwl-theme-options-breadcrumb-item-padding-x, 0.5rem);
}

.btn {
  --bs-btn-padding-x: var(--kwl-theme-options-btn-padding-x, 0.75rem);
  --bs-btn-padding-y: var(--kwl-theme-options-btn-padding-y, 0.375rem);
  --bs-btn-font-size: var(--kwl-theme-options-btn-font-size, 1rem);
  --bs-btn-font-weight: var(--kwl-theme-options-btn-font-weight, 400);
  --bs-btn-line-height: var(--kwl-theme-options-btn-line-height, 1.5);
  --bs-btn-box-shadow: var(--kwl-theme-options-btn-box-shadow, inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075));
  --bs-btn-active-shadow: var(--kwl-theme-options-btn-active-shadow, inset 0 3px 5px rgba(0, 0, 0, 0.125));
  --bs-btn-disabled-opacity: var(--kwl-theme-options-btn-disabled-opacity, 0.65);
}

.btn-close {
  --bs-btn-close-opacity: var(--kwl-theme-options-btn-close-opacity, 0.5);
  --bs-btn-close-hover-opacity: var(--kwl-theme-options-btn-close-hover-opacity, 0.75);
  --bs-btn-close-focus-opacity: var(--kwl-theme-options-btn-close-focus-opacity, 1);
  --bs-btn-close-disabled-opacity: var(--kwl-theme-options-btn-close-disabled-opacity, 0.25);
  --bs-btn-close-filter: var(--kwl-theme-options-btn-close-filter, none);
}

.card {
  --bs-card-spacer-y: var(--kwl-theme-options-card-spacer-y, 1rem);
  --bs-card-spacer-x: var(--kwl-theme-options-card-spacer-x, 1rem);
  --bs-card-title-spacer-y: var(--kwl-theme-options-card-title-spacer-y, 0.5rem);
  --bs-card-title-color: var(--kwl-theme-options-card-title-color, inherit);
  --bs-card-subtitle-color: var(--kwl-theme-options-card-subtitle-color, inherit);
  --bs-card-box-shadow: var(--kwl-theme-options-card-box-shadow, none);
  --bs-card-cap-padding-y: var(--kwl-theme-options-card-cap-padding-y, 0.5rem);
  --bs-card-cap-padding-x: var(--kwl-theme-options-card-cap-padding-x, 1rem);
  --bs-card-cap-color: var(--kwl-theme-options-card-cap-color, inherit);
  --bs-card-height: var(--kwl-theme-options-card-height, auto);
  --bs-card-color: var(--kwl-theme-options-card-color, var(--bs-body-color));
  --bs-card-img-overlay-padding: var(--kwl-theme-options-card-img-overlay-padding, 1rem);
  --bs-card-group-margin: var(--kwl-theme-options-card-group-margin, 0.75rem);
}

.carousel {
  --bs-carousel-control-icon-filter: var(--kwl-theme-options-carousel-control-icon-filter, none);
}

.dropdown-menu {
  --bs-dropdown-zindex: var(--kwl-theme-options-dropdown-zindex, 1000);
  --bs-dropdown-min-width: var(--kwl-theme-options-dropdown-min-width, 10rem);
  --bs-dropdown-padding-x: var(--kwl-theme-options-dropdown-padding-x, 0);
  --bs-dropdown-padding-y: var(--kwl-theme-options-dropdown-padding-y, 0.5rem);
  --bs-dropdown-spacer: var(--kwl-theme-options-dropdown-spacer, 0.125rem);
  --bs-dropdown-font-size: var(--kwl-theme-options-dropdown-font-size, 1rem);
  --bs-dropdown-divider-margin-y: var(--kwl-theme-options-dropdown-divider-margin-y, 0.5rem);
  --bs-dropdown-box-shadow: var(--kwl-theme-options-dropdown-box-shadow, var(--bs-box-shadow));
  --bs-dropdown-item-border-radius: var(--kwl-theme-options-dropdown-item-border-radius, 0);
  --bs-dropdown-item-padding-x: var(--kwl-theme-options-dropdown-item-padding-x, 1rem);
  --bs-dropdown-item-padding-y: var(--kwl-theme-options-dropdown-item-padding-y, 0.25rem);
  --bs-dropdown-header-padding-x: var(--kwl-theme-options-dropdown-header-padding-x, 1rem);
  --bs-dropdown-header-padding-y: var(--kwl-theme-options-dropdown-header-padding-y, 0.5rem);
}

.form-check-input {
  --bs-form-check-bg-image: var(--kwl-theme-options-form-check-bg-image, none);
}

.form-select {
  --bs-form-select-bg-icon: var(--kwl-theme-options-form-select-bg-icon, none);
}

.list-group {
  --bs-list-group-item-padding-x: var(--kwl-theme-options-list-group-item-padding-x, 1rem);
  --bs-list-group-item-padding-y: var(--kwl-theme-options-list-group-item-padding-y, 0.5rem);
  --bs-list-group-action-color: var(--kwl-theme-options-list-group-action-color, var(--bs-secondary-color));
  --bs-list-group-action-hover-color: var(--kwl-theme-options-list-group-action-hover-color, var(--bs-emphasis-color));
  --bs-list-group-action-active-color: var(--kwl-theme-options-list-group-action-active-color, var(--bs-body-color));
  --bs-list-group-disabled-color: var(--kwl-theme-options-list-group-disabled-color, var(--bs-secondary-color));
}

.modal {
  --bs-modal-zindex: var(--kwl-theme-options-modal-zindex, 1055);
  --bs-modal-width: var(--kwl-theme-options-modal-width, 500px);
  --bs-modal-padding: var(--kwl-theme-options-modal-padding, 1rem);
  --bs-modal-margin: var(--kwl-theme-options-modal-margin, 0.5rem);
  --bs-modal-box-shadow: var(--kwl-theme-options-modal-box-shadow, var(--bs-box-shadow-sm));
  --bs-modal-header-padding-x: var(--kwl-theme-options-modal-header-padding-x, 1rem);
  --bs-modal-header-padding-y: var(--kwl-theme-options-modal-header-padding-y, 1rem);
  --bs-modal-header-padding: var(--kwl-theme-options-modal-header-padding, 1rem 1rem);
  --bs-modal-header-border-width: var(--kwl-theme-options-modal-header-border-width, var(--bs-border-width));
  --bs-modal-title-line-height: var(--kwl-theme-options-modal-title-line-height, 1.5);
  --bs-modal-footer-gap: var(--kwl-theme-options-modal-footer-gap, 0.5rem);
  --bs-modal-footer-bg: var(--kwl-theme-options-modal-footer-bg, transparent);
  --bs-modal-footer-border-width: var(--kwl-theme-options-modal-footer-border-width, var(--bs-border-width));
}

.nav {
  --bs-nav-link-padding-x: var(--kwl-theme-options-nav-link-padding-x, 1rem);
  --bs-nav-link-padding-y: var(--kwl-theme-options-nav-link-padding-y, 0.5rem);
  --bs-nav-link-font-size: var(--kwl-theme-options-nav-link-font-size, inherit);
  --bs-nav-link-font-weight: var(--kwl-theme-options-nav-link-font-weight, inherit);
  --bs-nav-pills-border-radius: var(--kwl-theme-options-nav-pills-border-radius, var(--bs-border-radius));
  --bs-nav-underline-gap: var(--kwl-theme-options-nav-underline-gap, 1rem);
  --bs-nav-underline-border-width: var(--kwl-theme-options-nav-underline-border-width, 0.125rem);
}

.navbar {
  --bs-navbar-padding-x: var(--kwl-theme-options-navbar-padding-x, 0);
  --bs-navbar-padding-y: var(--kwl-theme-options-navbar-padding-y, 0.5rem);
  --bs-navbar-brand-padding-y: var(--kwl-theme-options-navbar-brand-padding-y, 0.3125rem);
  --bs-navbar-brand-margin-end: var(--kwl-theme-options-navbar-brand-margin-end, 1rem);
  --bs-navbar-brand-font-size: var(--kwl-theme-options-navbar-brand-font-size, 1.25rem);
  --bs-navbar-nav-link-padding-x: var(--kwl-theme-options-navbar-nav-link-padding-x, 0.5rem);
  --bs-navbar-toggler-padding-x: var(--kwl-theme-options-navbar-toggler-padding-x, 0.75rem);
  --bs-navbar-toggler-padding-y: var(--kwl-theme-options-navbar-toggler-padding-y, 0.25rem);
  --bs-navbar-toggler-font-size: var(--kwl-theme-options-navbar-toggler-font-size, 1.25rem);
  --bs-navbar-toggler-focus-width: var(--kwl-theme-options-navbar-toggler-focus-width, 0.25rem);
  --bs-navbar-toggler-transition: var(--kwl-theme-options-navbar-toggler-transition, box-shadow 0.15s ease-in-out);
}

.offcanvas {
  --bs-offcanvas-zindex: var(--kwl-theme-options-offcanvas-zindex, 1045);
  --bs-offcanvas-width: var(--kwl-theme-options-offcanvas-width, 400px);
  --bs-offcanvas-height: var(--kwl-theme-options-offcanvas-height, 30vh);
  --bs-offcanvas-padding-x: var(--kwl-theme-options-offcanvas-padding-x, 1rem);
  --bs-offcanvas-padding-y: var(--kwl-theme-options-offcanvas-padding-y, 1rem);
  --bs-offcanvas-box-shadow: var(--kwl-theme-options-offcanvas-box-shadow, var(--bs-box-shadow-sm));
  --bs-offcanvas-transition: var(--kwl-theme-options-offcanvas-transition, transform 0.3s ease-in-out);
  --bs-offcanvas-title-line-height: var(--kwl-theme-options-offcanvas-title-line-height, 1.5);
}

.pagination {
  --bs-pagination-padding-x: var(--kwl-theme-options-pagination-padding-x, 0.75rem);
  --bs-pagination-padding-y: var(--kwl-theme-options-pagination-padding-y, 0.375rem);
  --bs-pagination-font-size: var(--kwl-theme-options-pagination-font-size, 1rem);
}

.popover {
  --bs-popover-zindex: var(--kwl-theme-options-popover-zindex, 1070);
  --bs-popover-max-width: var(--kwl-theme-options-popover-max-width, 276px);
  --bs-popover-font-size: var(--kwl-theme-options-popover-font-size, 0.875rem);
  --bs-popover-box-shadow: var(--kwl-theme-options-popover-box-shadow, var(--bs-box-shadow));
  --bs-popover-header-padding-x: var(--kwl-theme-options-popover-header-padding-x, 1rem);
  --bs-popover-header-padding-y: var(--kwl-theme-options-popover-header-padding-y, 0.5rem);
  --bs-popover-header-font-size: var(--kwl-theme-options-popover-header-font-size, 1rem);
  --bs-popover-body-padding-x: var(--kwl-theme-options-popover-body-padding-x, 1rem);
  --bs-popover-body-padding-y: var(--kwl-theme-options-popover-body-padding-y, 1rem);
  --bs-popover-arrow-width: var(--kwl-theme-options-popover-arrow-width, 1rem);
  --bs-popover-arrow-height: var(--kwl-theme-options-popover-arrow-height, 0.5rem);
  --bs-popover-arrow-border: var(--kwl-theme-options-popover-arrow-border, var(--bs-popover-border-color));
}

.progress {
  --bs-progress-height: var(--kwl-theme-options-progress-height, 1rem);
  --bs-progress-font-size: var(--kwl-theme-options-progress-font-size, 0.75rem);
  --bs-progress-bar-transition: var(--kwl-theme-options-progress-bar-transition, width 0.6s ease);
}

.spinner-border,
.spinner-grow {
  --bs-spinner-vertical-align: var(--kwl-theme-options-spinner-vertical-align, -0.125em);
}

.spinner-border {
  --bs-spinner-animation-name: var(--kwl-theme-options-spinner-animation-name, spinner-border);
}

.spinner-grow {
  --bs-spinner-animation-name: var(--kwl-theme-options-spinner-grow-animation-name, spinner-grow);
}

.table {
  --bs-table-accent-bg: var(--kwl-theme-options-table-accent-bg, transparent);
  --bs-table-color-type: var(--kwl-theme-options-table-color-type, initial);
  --bs-table-bg-type: var(--kwl-theme-options-table-bg-type, initial);
  --bs-table-color-state: var(--kwl-theme-options-table-color-state, initial);
  --bs-table-bg-state: var(--kwl-theme-options-table-bg-state, initial);
}

.toast {
  --bs-toast-zindex: var(--kwl-theme-options-toast-zindex, 1090);
  --bs-toast-padding-x: var(--kwl-theme-options-toast-padding-x, 0.75rem);
  --bs-toast-padding-y: var(--kwl-theme-options-toast-padding-y, 0.5rem);
  --bs-toast-spacing: var(--kwl-theme-options-toast-spacing, 1.5rem);
  --bs-toast-max-width: var(--kwl-theme-options-toast-max-width, 350px);
  --bs-toast-font-size: var(--kwl-theme-options-toast-font-size, 0.875rem);
  --bs-toast-color: var(--kwl-theme-options-toast-color, inherit);
  --bs-toast-box-shadow: var(--kwl-theme-options-toast-box-shadow, var(--bs-box-shadow));
}

.tooltip {
  --bs-tooltip-zindex: var(--kwl-theme-options-tooltip-zindex, 1080);
  --bs-tooltip-max-width: var(--kwl-theme-options-tooltip-max-width, 200px);
  --bs-tooltip-padding-x: var(--kwl-theme-options-tooltip-padding-x, 0.5rem);
  --bs-tooltip-padding-y: var(--kwl-theme-options-tooltip-padding-y, 0.25rem);
  --bs-tooltip-margin: var(--kwl-theme-options-tooltip-margin, 0);
  --bs-tooltip-font-size: var(--kwl-theme-options-tooltip-font-size, 0.875rem);
  --bs-tooltip-arrow-width: var(--kwl-theme-options-tooltip-arrow-width, 0.8rem);
  --bs-tooltip-arrow-height: var(--kwl-theme-options-tooltip-arrow-height, 0.4rem);
}