/* COMVIO UI theme v2.0 | Load AFTER Bootstrap 5.3.x.
   Primary theme selector: data-bs-theme on <html>.
   Legacy data-theme supported only when data-bs-theme is absent on the same element.
   --cv-border: decorative dividers; --cv-border-strong: visible control boundaries. */
:root, [data-bs-theme="light"], [data-theme="light"]:not([data-bs-theme]) {
  color-scheme: light;
  --cv-background: #FAF8FC;
  --cv-surface: #FFFFFF;
  --cv-surface-alt: #F3EDF7;
  --cv-surface-raised: #FFFFFF;
  --cv-heading: #2B1738;
  --cv-text: #2B1738;
  --cv-muted: #6F5C7C;
  --cv-subtle: #786783;
  --cv-border: #E7DCEE;
  --cv-border-strong: #8B7399;
  --cv-primary: #72286F;
  --cv-primary-hover: #5D205B;
  --cv-primary-active: #451E5D;
  --cv-on-primary: #FFFFFF;
  --cv-primary-soft: #F2E6F3;
  --cv-accent: #9452A5;
  --cv-link: #72286F;
  --cv-link-hover: #451E5D;
  --cv-focus: #9452A5;
  --cv-disabled-bg: #EDE6F1;
  --cv-disabled-text: #7B6986;
  --cv-success: #176747;
  --cv-success-bg: #E8F5EE;
  --cv-success-border: #8DC8AA;
  --cv-on-success: #FFFFFF;
  --cv-warning: #875006;
  --cv-warning-bg: #FFF2D9;
  --cv-warning-border: #D9AA53;
  --cv-on-warning: #FFFFFF;
  --cv-danger: #B12F4E;
  --cv-danger-bg: #FCECF0;
  --cv-danger-border: #DF9DAE;
  --cv-on-danger: #FFFFFF;
  --cv-info: #245F8F;
  --cv-info-bg: #EAF2FC;
  --cv-info-border: #9CBCD8;
  --cv-on-info: #FFFFFF;
  --cv-hero-start: #F5EDF9;
  --cv-hero-end: #EBD9F1;
  --cv-primary-rgb: 114, 40, 111;
  --cv-text-rgb: 43, 23, 56;
  --cv-background-rgb: 250, 248, 252;
  --cv-surface-rgb: 255, 255, 255;
  --cv-surface-alt-rgb: 243, 237, 247;
  --cv-surface-raised-rgb: 255, 255, 255;
  --cv-muted-rgb: 111, 92, 124;
  --cv-accent-rgb: 148, 82, 165;
  --cv-success-rgb: 23, 103, 71;
  --cv-warning-rgb: 135, 80, 6;
  --cv-danger-rgb: 177, 47, 78;
  --cv-info-rgb: 36, 95, 143;
  --cv-link-rgb: 114, 40, 111;
  --cv-link-hover-rgb: 69, 30, 93;
  --cv-on-primary-rgb: 255, 255, 255;
  --cv-shadow: 0 14px 38px rgba(69,30,93,.07);
  --cv-logo-light-display: block;
  --cv-logo-dark-display: none;
  --bs-body-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
  --bs-body-color: var(--cv-text);
  --bs-body-bg: var(--cv-background);
  --bs-heading-color: var(--cv-heading);
  --bs-emphasis-color: var(--cv-text);
  --bs-secondary-color: var(--cv-muted);
  --bs-tertiary-color: var(--cv-subtle);
  --bs-secondary-bg: var(--cv-surface-alt);
  --bs-tertiary-bg: var(--cv-surface-alt);
  --bs-border-color: var(--cv-border);
  --bs-link-color: var(--cv-link);
  --bs-link-hover-color: var(--cv-link-hover);
  --bs-code-color: var(--cv-primary);
  --bs-highlight-color: var(--cv-primary);
  --bs-highlight-bg: var(--cv-primary-soft);
  --bs-form-valid-color: var(--cv-success);
  --bs-form-valid-border-color: var(--cv-success);
  --bs-form-invalid-color: var(--cv-danger);
  --bs-form-invalid-border-color: var(--cv-danger);
  --bs-body-color-rgb: var(--cv-text-rgb);
  --bs-body-bg-rgb: var(--cv-background-rgb);
  --bs-emphasis-color-rgb: var(--cv-text-rgb);
  --bs-secondary-color-rgb: var(--cv-muted-rgb);
  --bs-secondary-bg-rgb: var(--cv-surface-alt-rgb);
  --bs-tertiary-bg-rgb: var(--cv-surface-alt-rgb);
  --bs-link-color-rgb: var(--cv-link-rgb);
  --bs-link-hover-color-rgb: var(--cv-link-hover-rgb);
  --bs-primary: var(--cv-primary);
  --bs-primary-rgb: var(--cv-primary-rgb);
  --bs-primary-text-emphasis: var(--cv-primary);
  --bs-primary-bg-subtle: var(--cv-primary-soft);
  --bs-primary-border-subtle: var(--cv-border-strong);
  --bs-success: var(--cv-success);
  --bs-success-rgb: var(--cv-success-rgb);
  --bs-success-text-emphasis: var(--cv-success);
  --bs-success-bg-subtle: var(--cv-success-bg);
  --bs-success-border-subtle: var(--cv-success-border);
  --bs-warning: var(--cv-warning);
  --bs-warning-rgb: var(--cv-warning-rgb);
  --bs-warning-text-emphasis: var(--cv-warning);
  --bs-warning-bg-subtle: var(--cv-warning-bg);
  --bs-warning-border-subtle: var(--cv-warning-border);
  --bs-danger: var(--cv-danger);
  --bs-danger-rgb: var(--cv-danger-rgb);
  --bs-danger-text-emphasis: var(--cv-danger);
  --bs-danger-bg-subtle: var(--cv-danger-bg);
  --bs-danger-border-subtle: var(--cv-danger-border);
  --bs-info: var(--cv-info);
  --bs-info-rgb: var(--cv-info-rgb);
  --bs-info-text-emphasis: var(--cv-info);
  --bs-info-bg-subtle: var(--cv-info-bg);
  --bs-info-border-subtle: var(--cv-info-border);
  --bs-secondary: var(--cv-muted);
  --bs-secondary-rgb: var(--cv-muted-rgb);
  --bs-secondary-text-emphasis: var(--cv-text);
  --bs-secondary-bg-subtle: var(--cv-surface-alt);
  --bs-secondary-border-subtle: var(--cv-border);
  --bs-focus-ring-color: rgba(var(--cv-primary-rgb), .24);
}

[data-bs-theme="dark"], [data-theme="dark"]:not([data-bs-theme]) {
  color-scheme: dark;
  --cv-background: #160F1D;
  --cv-surface: #23172F;
  --cv-surface-alt: #2D2039;
  --cv-surface-raised: #32233F;
  --cv-heading: #F4EDF8;
  --cv-text: #F4EDF8;
  --cv-muted: #C7B9D2;
  --cv-subtle: #AB98B8;
  --cv-border: #46334F;
  --cv-border-strong: #8D779E;
  --cv-primary: #C89CE4;
  --cv-primary-hover: #DFA8E4;
  --cv-primary-active: #E6C5F3;
  --cv-on-primary: #251231;
  --cv-primary-soft: #3B224A;
  --cv-accent: #DFA8E4;
  --cv-link: #DFA8E4;
  --cv-link-hover: #F1D5F5;
  --cv-focus: #DFA8E4;
  --cv-disabled-bg: #352A3E;
  --cv-disabled-text: #A28EAF;
  --cv-success: #83D5AD;
  --cv-success-bg: #173B31;
  --cv-success-border: #3C8767;
  --cv-on-success: #173B31;
  --cv-warning: #F2CC7C;
  --cv-warning-bg: #44341A;
  --cv-warning-border: #A07933;
  --cv-on-warning: #44341A;
  --cv-danger: #F4A2B5;
  --cv-danger-bg: #452432;
  --cv-danger-border: #A65B70;
  --cv-on-danger: #452432;
  --cv-info: #9AC9F6;
  --cv-info-bg: #22364C;
  --cv-info-border: #547FA8;
  --cv-on-info: #22364C;
  --cv-hero-start: #23172F;
  --cv-hero-end: #451E5D;
  --cv-primary-rgb: 200, 156, 228;
  --cv-text-rgb: 244, 237, 248;
  --cv-background-rgb: 22, 15, 29;
  --cv-surface-rgb: 35, 23, 47;
  --cv-surface-alt-rgb: 45, 32, 57;
  --cv-surface-raised-rgb: 50, 35, 63;
  --cv-muted-rgb: 199, 185, 210;
  --cv-accent-rgb: 223, 168, 228;
  --cv-success-rgb: 131, 213, 173;
  --cv-warning-rgb: 242, 204, 124;
  --cv-danger-rgb: 244, 162, 181;
  --cv-info-rgb: 154, 201, 246;
  --cv-link-rgb: 223, 168, 228;
  --cv-link-hover-rgb: 241, 213, 245;
  --cv-on-primary-rgb: 37, 18, 49;
  --cv-shadow: 0 16px 44px rgba(0,0,0,.22);
  --cv-logo-light-display: none;
  --cv-logo-dark-display: block;
  --bs-body-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
  --bs-body-color: var(--cv-text);
  --bs-body-bg: var(--cv-background);
  --bs-heading-color: var(--cv-heading);
  --bs-emphasis-color: var(--cv-text);
  --bs-secondary-color: var(--cv-muted);
  --bs-tertiary-color: var(--cv-subtle);
  --bs-secondary-bg: var(--cv-surface-alt);
  --bs-tertiary-bg: var(--cv-surface-alt);
  --bs-border-color: var(--cv-border);
  --bs-link-color: var(--cv-link);
  --bs-link-hover-color: var(--cv-link-hover);
  --bs-code-color: var(--cv-primary);
  --bs-highlight-color: var(--cv-primary);
  --bs-highlight-bg: var(--cv-primary-soft);
  --bs-form-valid-color: var(--cv-success);
  --bs-form-valid-border-color: var(--cv-success);
  --bs-form-invalid-color: var(--cv-danger);
  --bs-form-invalid-border-color: var(--cv-danger);
  --bs-body-color-rgb: var(--cv-text-rgb);
  --bs-body-bg-rgb: var(--cv-background-rgb);
  --bs-emphasis-color-rgb: var(--cv-text-rgb);
  --bs-secondary-color-rgb: var(--cv-muted-rgb);
  --bs-secondary-bg-rgb: var(--cv-surface-alt-rgb);
  --bs-tertiary-bg-rgb: var(--cv-surface-alt-rgb);
  --bs-link-color-rgb: var(--cv-link-rgb);
  --bs-link-hover-color-rgb: var(--cv-link-hover-rgb);
  --bs-primary: var(--cv-primary);
  --bs-primary-rgb: var(--cv-primary-rgb);
  --bs-primary-text-emphasis: var(--cv-primary);
  --bs-primary-bg-subtle: var(--cv-primary-soft);
  --bs-primary-border-subtle: var(--cv-border-strong);
  --bs-success: var(--cv-success);
  --bs-success-rgb: var(--cv-success-rgb);
  --bs-success-text-emphasis: var(--cv-success);
  --bs-success-bg-subtle: var(--cv-success-bg);
  --bs-success-border-subtle: var(--cv-success-border);
  --bs-warning: var(--cv-warning);
  --bs-warning-rgb: var(--cv-warning-rgb);
  --bs-warning-text-emphasis: var(--cv-warning);
  --bs-warning-bg-subtle: var(--cv-warning-bg);
  --bs-warning-border-subtle: var(--cv-warning-border);
  --bs-danger: var(--cv-danger);
  --bs-danger-rgb: var(--cv-danger-rgb);
  --bs-danger-text-emphasis: var(--cv-danger);
  --bs-danger-bg-subtle: var(--cv-danger-bg);
  --bs-danger-border-subtle: var(--cv-danger-border);
  --bs-info: var(--cv-info);
  --bs-info-rgb: var(--cv-info-rgb);
  --bs-info-text-emphasis: var(--cv-info);
  --bs-info-bg-subtle: var(--cv-info-bg);
  --bs-info-border-subtle: var(--cv-info-border);
  --bs-secondary: var(--cv-muted);
  --bs-secondary-rgb: var(--cv-muted-rgb);
  --bs-secondary-text-emphasis: var(--cv-text);
  --bs-secondary-bg-subtle: var(--cv-surface-alt);
  --bs-secondary-border-subtle: var(--cv-border);
  --bs-focus-ring-color: rgba(var(--cv-primary-rgb), .24);
}


body, .cv-app { background: var(--cv-background); color: var(--cv-text); }
h1,h2,h3,h4,h5,h6 { color: var(--cv-heading); }
a { color: var(--cv-link); text-underline-offset: .2em; }
a:hover { color: var(--cv-link-hover); }
.cv-muted { color: var(--cv-muted); }
.cv-subtle { color: var(--cv-subtle); }
.cv-surface, .cv-header, .cv-nav, .cv-footer { background: var(--cv-surface); color: var(--cv-text); }
.cv-surface-alt { background: var(--cv-surface-alt); color: var(--cv-text); }
.cv-surface-raised { background: var(--cv-surface-raised); color: var(--cv-text); }
.cv-hero-bg { background: radial-gradient(ellipse at 90% 15%, rgba(var(--cv-accent-rgb), .12), transparent 58%), linear-gradient(130deg, var(--cv-hero-start), var(--cv-hero-end)); color: var(--cv-text); }
.cv-logo-light { display: var(--cv-logo-light-display); }
.cv-logo-dark { display: var(--cv-logo-dark-display); }
::selection { background: var(--cv-primary); color: var(--cv-on-primary); }
mark { color: var(--cv-primary); background: var(--cv-primary-soft); border-radius: .2em; padding: .1em .25em; }
code { color: var(--cv-primary); }
pre.cv-code { background: var(--cv-surface-alt); color: var(--cv-text); border: 1px solid var(--cv-border); border-radius: 12px; padding: 20px; font-size: 13px; line-height: 1.75; }
pre.cv-code code { color: inherit; }
kbd { background: var(--cv-primary); color: var(--cv-on-primary); }
blockquote.cv-quote { padding: 20px 24px; background: var(--cv-primary-soft); border-left: 4px solid var(--cv-primary); border-radius: 0 12px 12px 0; }
hr { border-color: var(--cv-border); opacity: 1; }
:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible { outline: 3px solid var(--cv-focus); outline-offset: 3px; }
.btn { --bs-btn-border-radius: .7rem; --bs-btn-font-weight: 600; --bs-btn-padding-x: 1.1rem; --bs-btn-padding-y: .65rem; --bs-btn-focus-shadow-rgb: var(--cv-primary-rgb); }
.btn:focus-visible { outline: 3px solid var(--cv-focus); outline-offset: 3px; box-shadow: none; }
.btn-primary, .cv-button {
 --bs-btn-color: var(--cv-on-primary); --bs-btn-bg: var(--cv-primary); --bs-btn-border-color: var(--cv-primary);
 --bs-btn-hover-color: var(--cv-on-primary); --bs-btn-hover-bg: var(--cv-primary-hover); --bs-btn-hover-border-color: var(--cv-primary-hover);
 --bs-btn-active-color: var(--cv-on-primary); --bs-btn-active-bg: var(--cv-primary-active); --bs-btn-active-border-color: var(--cv-primary-active);
 --bs-btn-disabled-color: var(--cv-disabled-text); --bs-btn-disabled-bg: var(--cv-disabled-bg); --bs-btn-disabled-border-color: var(--cv-disabled-bg); --bs-btn-disabled-opacity: 1;
}
.cv-button { background: var(--cv-primary); color: var(--cv-on-primary); }
.btn-outline-primary {
 --bs-btn-color: var(--cv-primary); --bs-btn-border-color: var(--cv-primary);
 --bs-btn-hover-color: var(--cv-on-primary); --bs-btn-hover-bg: var(--cv-primary); --bs-btn-hover-border-color: var(--cv-primary);
 --bs-btn-active-color: var(--cv-on-primary); --bs-btn-active-bg: var(--cv-primary-active); --bs-btn-active-border-color: var(--cv-primary-active);
 --bs-btn-disabled-color: var(--cv-disabled-text); --bs-btn-disabled-border-color: var(--cv-border);
}
.btn-secondary { --bs-btn-color: var(--cv-text); --bs-btn-bg: var(--cv-surface-alt); --bs-btn-border-color: var(--cv-border-strong); --bs-btn-hover-color: var(--cv-primary); --bs-btn-hover-bg: var(--cv-primary-soft); --bs-btn-hover-border-color: var(--cv-primary); --bs-btn-active-color: var(--cv-primary); --bs-btn-active-bg: var(--cv-primary-soft); --bs-btn-active-border-color: var(--cv-primary); --bs-btn-disabled-bg: var(--cv-disabled-bg); --bs-btn-disabled-color: var(--cv-disabled-text); --bs-btn-disabled-border-color: var(--cv-border); }
.btn-link { --bs-btn-color: var(--cv-link); --bs-btn-hover-color: var(--cv-link-hover); --bs-btn-active-color: var(--cv-primary); }
.btn-success { --bs-btn-color: var(--cv-on-success); --bs-btn-bg: var(--cv-success); --bs-btn-border-color: var(--cv-success); --bs-btn-hover-color: var(--cv-success); --bs-btn-hover-bg: var(--cv-success-bg); --bs-btn-hover-border-color: var(--cv-success); --bs-btn-active-color: var(--cv-success); --bs-btn-active-bg: var(--cv-success-bg); --bs-btn-active-border-color: var(--cv-success); --bs-btn-disabled-color: var(--cv-disabled-text); --bs-btn-disabled-bg: var(--cv-disabled-bg); --bs-btn-disabled-border-color: var(--cv-border); }
.btn-warning { --bs-btn-color: var(--cv-on-warning); --bs-btn-bg: var(--cv-warning); --bs-btn-border-color: var(--cv-warning); --bs-btn-hover-color: var(--cv-warning); --bs-btn-hover-bg: var(--cv-warning-bg); --bs-btn-hover-border-color: var(--cv-warning); --bs-btn-active-color: var(--cv-warning); --bs-btn-active-bg: var(--cv-warning-bg); --bs-btn-active-border-color: var(--cv-warning); --bs-btn-disabled-color: var(--cv-disabled-text); --bs-btn-disabled-bg: var(--cv-disabled-bg); --bs-btn-disabled-border-color: var(--cv-border); }
.btn-danger { --bs-btn-color: var(--cv-on-danger); --bs-btn-bg: var(--cv-danger); --bs-btn-border-color: var(--cv-danger); --bs-btn-hover-color: var(--cv-danger); --bs-btn-hover-bg: var(--cv-danger-bg); --bs-btn-hover-border-color: var(--cv-danger); --bs-btn-active-color: var(--cv-danger); --bs-btn-active-bg: var(--cv-danger-bg); --bs-btn-active-border-color: var(--cv-danger); --bs-btn-disabled-color: var(--cv-disabled-text); --bs-btn-disabled-bg: var(--cv-disabled-bg); --bs-btn-disabled-border-color: var(--cv-border); }
.btn-info { --bs-btn-color: var(--cv-on-info); --bs-btn-bg: var(--cv-info); --bs-btn-border-color: var(--cv-info); --bs-btn-hover-color: var(--cv-info); --bs-btn-hover-bg: var(--cv-info-bg); --bs-btn-hover-border-color: var(--cv-info); --bs-btn-active-color: var(--cv-info); --bs-btn-active-bg: var(--cv-info-bg); --bs-btn-active-border-color: var(--cv-info); --bs-btn-disabled-color: var(--cv-disabled-text); --bs-btn-disabled-bg: var(--cv-disabled-bg); --bs-btn-disabled-border-color: var(--cv-border); }

.card { --bs-card-bg: var(--cv-surface); --bs-card-color: var(--cv-text); --bs-card-border-color: var(--cv-border); --bs-card-border-radius: 1rem; --bs-card-cap-bg: var(--cv-surface-alt); --bs-card-cap-color: var(--cv-text); }
.form-control,.form-select { background-color: var(--cv-surface); color: var(--cv-text); border-color: var(--cv-border-strong); border-radius: .65rem; padding-top: .65rem; padding-bottom: .65rem; }
.form-control::placeholder { color: var(--cv-muted); opacity: 1; }
.form-control:focus,.form-select:focus { background-color: var(--cv-surface); color: var(--cv-text); border-color: var(--cv-focus); box-shadow: 0 0 0 .2rem rgba(var(--cv-primary-rgb),.14); }
.form-control[readonly] { background-color: var(--cv-surface-alt); }
.form-control:disabled,.form-select:disabled { background-color: var(--cv-disabled-bg); color: var(--cv-disabled-text); border-color: var(--cv-border); opacity: 1; }
.form-control[aria-invalid="true"],.form-select[aria-invalid="true"] { border-color: var(--cv-danger); }
.form-control.is-invalid,.form-select.is-invalid { border-color: var(--cv-danger); }
.form-control.is-valid,.form-select.is-valid { border-color: var(--cv-success); }
.form-label,.col-form-label,.form-check-label { color: var(--cv-text); }
.form-text { color: var(--cv-muted); }
.form-check-input { background-color: var(--cv-surface); border-color: var(--cv-border-strong); }
.form-check-input:checked { background-color: var(--cv-primary); border-color: var(--cv-primary); }
.form-check-input:focus { border-color: var(--cv-focus); box-shadow: 0 0 0 .2rem rgba(var(--cv-primary-rgb),.18); }
.form-range::-webkit-slider-thumb { background: var(--cv-primary); }
.form-range::-moz-range-thumb { background: var(--cv-primary); }
.form-range::-webkit-slider-runnable-track { background: var(--cv-border); }
.form-range::-moz-range-track { background: var(--cv-border); }
.cv-nav-link { display: flex; align-items: center; gap: .8rem; color: var(--cv-muted); text-decoration: none; border-radius: .6rem; padding: .65rem .85rem; }
.cv-nav-link:hover { color: var(--cv-primary); background: var(--cv-surface-alt); }
.cv-nav-link[aria-current=page] { color: var(--cv-primary); background: var(--cv-primary-soft); font-weight: 600; }
.nav-tabs { --bs-nav-tabs-border-color: var(--cv-border); --bs-nav-tabs-link-hover-border-color: var(--cv-border); --bs-nav-tabs-link-active-color: var(--cv-primary); --bs-nav-tabs-link-active-bg: var(--cv-surface); --bs-nav-tabs-link-active-border-color: var(--cv-border) var(--cv-border) var(--cv-surface); }
.nav { --bs-nav-link-color: var(--cv-muted); --bs-nav-link-hover-color: var(--cv-primary); --bs-nav-link-disabled-color: var(--cv-disabled-text); }
.nav-pills { --bs-nav-pills-link-active-color: var(--cv-on-primary); --bs-nav-pills-link-active-bg: var(--cv-primary); }
.dropdown-menu { --bs-dropdown-bg: var(--cv-surface-raised); --bs-dropdown-color: var(--cv-text); --bs-dropdown-border-color: var(--cv-border); --bs-dropdown-link-color: var(--cv-text); --bs-dropdown-link-hover-color: var(--cv-primary); --bs-dropdown-link-hover-bg: var(--cv-primary-soft); --bs-dropdown-link-active-color: var(--cv-on-primary); --bs-dropdown-link-active-bg: var(--cv-primary); --bs-dropdown-link-disabled-color: var(--cv-disabled-text); --bs-dropdown-divider-bg: var(--cv-border); box-shadow: var(--cv-shadow); }
.modal { --bs-modal-bg: var(--cv-surface-raised); --bs-modal-color: var(--cv-text); --bs-modal-border-color: var(--cv-border); --bs-modal-header-border-color: var(--cv-border); --bs-modal-footer-border-color: var(--cv-border); --bs-modal-border-radius: 1.2rem; }
.offcanvas,.offcanvas-lg { --bs-offcanvas-bg: var(--cv-surface); --bs-offcanvas-color: var(--cv-text); --bs-offcanvas-border-color: var(--cv-border); }
.accordion { --bs-accordion-bg: var(--cv-surface); --bs-accordion-color: var(--cv-text); --bs-accordion-border-color: var(--cv-border); --bs-accordion-btn-color: var(--cv-text); --bs-accordion-btn-bg: var(--cv-surface); --bs-accordion-active-bg: var(--cv-primary-soft); --bs-accordion-active-color: var(--cv-primary); --bs-accordion-btn-focus-box-shadow: 0 0 0 .2rem rgba(var(--cv-primary-rgb), .14); }
.list-group { --bs-list-group-color: var(--cv-text); --bs-list-group-bg: var(--cv-surface); --bs-list-group-border-color: var(--cv-border); --bs-list-group-action-color: var(--cv-text); --bs-list-group-action-hover-color: var(--cv-primary); --bs-list-group-action-hover-bg: var(--cv-primary-soft); --bs-list-group-active-color: var(--cv-on-primary); --bs-list-group-active-bg: var(--cv-primary); --bs-list-group-active-border-color: var(--cv-primary); }
.table { --bs-table-color: var(--cv-text); --bs-table-bg: var(--cv-surface); --bs-table-border-color: var(--cv-border); --bs-table-striped-color: var(--cv-text); --bs-table-striped-bg: var(--cv-surface-alt); --bs-table-hover-color: var(--cv-text); --bs-table-hover-bg: var(--cv-primary-soft); --bs-table-active-color: var(--cv-text); --bs-table-active-bg: var(--cv-primary-soft); }
.table thead th { background: var(--cv-surface-alt); color: var(--cv-muted); font-weight: 600; }
.progress { --bs-progress-bg: var(--cv-surface-alt); --bs-progress-bar-bg: var(--cv-primary); --bs-progress-bar-color: var(--cv-on-primary); }
.pagination { --bs-pagination-color: var(--cv-link); --bs-pagination-bg: var(--cv-surface); --bs-pagination-border-color: var(--cv-border); --bs-pagination-hover-color: var(--cv-primary); --bs-pagination-hover-bg: var(--cv-primary-soft); --bs-pagination-hover-border-color: var(--cv-primary); --bs-pagination-focus-color: var(--cv-primary); --bs-pagination-focus-bg: var(--cv-primary-soft); --bs-pagination-active-color: var(--cv-on-primary); --bs-pagination-active-bg: var(--cv-primary); --bs-pagination-active-border-color: var(--cv-primary); --bs-pagination-disabled-color: var(--cv-disabled-text); --bs-pagination-disabled-bg: var(--cv-disabled-bg); --bs-pagination-disabled-border-color: var(--cv-border); }
.breadcrumb { --bs-breadcrumb-divider-color: var(--cv-muted); --bs-breadcrumb-item-active-color: var(--cv-muted); }
.toast { --bs-toast-bg: var(--cv-surface-raised); --bs-toast-color: var(--cv-text); --bs-toast-border-color: var(--cv-border); --bs-toast-header-color: var(--cv-text); --bs-toast-header-bg: var(--cv-surface-alt); --bs-toast-header-border-color: var(--cv-border); }
.tooltip { --bs-tooltip-bg: var(--cv-text); --bs-tooltip-color: var(--cv-background); }
.cv-badge { display: inline-flex; align-items: center; gap: .4em; padding: .45em .75em; border-radius: 100px; font-size: .75rem; line-height: 1.25; font-weight: 600; background: var(--cv-primary-soft); color: var(--cv-primary); }
.cv-badge-success { background: var(--cv-success-bg); color: var(--cv-success); }
.cv-badge-warning { background: var(--cv-warning-bg); color: var(--cv-warning); }
.cv-badge-danger { background: var(--cv-danger-bg); color: var(--cv-danger); }
.cv-badge-info { background: var(--cv-info-bg); color: var(--cv-info); }

@media (prefers-reduced-motion: reduce) { *,*::before,*::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; } }

/* Typography foundation */
:root { --cv-radius-control: 10px; --cv-radius-card: 16px; --cv-radius-hero: 24px; --bs-body-line-height: 1.65; }
h1 { font-size: clamp(2.25rem, 4vw, 3rem); line-height: 1.1; font-weight: 600; }
h2 { font-size: clamp(1.75rem, 3vw, 2.25rem); line-height: 1.2; font-weight: 600; }
h3 { font-size: 1.75rem; line-height: 1.25; font-weight: 600; }
h4 { font-size: 1.375rem; line-height: 1.3; font-weight: 600; }
h5 { font-size: 1.125rem; line-height: 1.4; font-weight: 600; }
h6 { font-size: 1rem; line-height: 1.4; font-weight: 600; }
small { font-size: .8125rem; }
.btn { --bs-btn-border-radius: var(--cv-radius-control); }
.form-control, .form-select { border-radius: var(--cv-radius-control); }
.card { --bs-card-border-radius: var(--cv-radius-card); }

/* Scoped control artwork */
:root, [data-bs-theme="light"], [data-theme="light"]:not([data-bs-theme]) {
  --cv-check-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23FFFFFF' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m5 10 3 3 7-7'/%3E%3C/svg%3E");
  --cv-radio-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='2' fill='%23FFFFFF'/%3E%3C/svg%3E");
  --cv-switch-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23FFFFFF'/%3E%3C/svg%3E");
  --cv-valid-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%23176747' d='m2.3 6.73-2-2.5c-.7-.7.4-1.7 1.1-1l1.1 1.4 3.4-3.8c.7-.7 1.8.3 1.1 1l-4 4.6c-.4.4-.6.3-.7.3z'/%3E%3C/svg%3E");
  --cv-invalid-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23B12F4E' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23B12F4E' stroke='none'/%3E%3C/svg%3E");
}
[data-bs-theme="dark"], [data-theme="dark"]:not([data-bs-theme]) {
  --cv-check-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='%23251231' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m5 10 3 3 7-7'/%3E%3C/svg%3E");
  --cv-radio-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='2' fill='%23251231'/%3E%3C/svg%3E");
  --cv-switch-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23251231'/%3E%3C/svg%3E");
  --cv-valid-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3E%3Cpath fill='%2383D5AD' d='m2.3 6.73-2-2.5c-.7-.7.4-1.7 1.1-1l1.1 1.4 3.4-3.8c.7-.7 1.8.3 1.1 1l-4 4.6c-.4.4-.6.3-.7.3z'/%3E%3C/svg%3E");
  --cv-invalid-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23F4A2B5' viewBox='0 0 12 12'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23F4A2B5' stroke='none'/%3E%3C/svg%3E");
}
.form-check-input:checked[type=checkbox] { --bs-form-check-bg-image: var(--cv-check-image); }
.form-check-input:checked[type=radio] { --bs-form-check-bg-image: var(--cv-radio-image); }
.form-switch .form-check-input:checked { --bs-form-switch-bg: var(--cv-switch-image); }
.form-control.is-valid { background-image: var(--cv-valid-image); }
.form-control.is-invalid { background-image: var(--cv-invalid-image); }
.form-select.is-valid { --bs-form-select-bg-icon: var(--cv-valid-image); }
.form-select.is-invalid { --bs-form-select-bg-icon: var(--cv-invalid-image); }
.cv-logo { display: block; max-width: 100%; }
.cv-logo-light, .cv-logo-dark { max-width: 100%; height: auto; }
.text-bg-primary { color: var(--cv-on-primary) !important; background-color: var(--cv-primary) !important; }
.text-bg-success { color: var(--cv-on-success) !important; background-color: var(--cv-success) !important; }
.text-bg-warning { color: var(--cv-on-warning) !important; background-color: var(--cv-warning) !important; }
.text-bg-danger { color: var(--cv-on-danger) !important; background-color: var(--cv-danger) !important; }
.text-bg-info { color: var(--cv-on-info) !important; background-color: var(--cv-info) !important; }

/* Standalone theme picker */
.btn[data-cv-theme].is-active { color: var(--cv-primary); background-color: var(--cv-primary-soft); border-color: var(--cv-primary); }
