body {
    background: var(--rs-surface-page);
    color: var(--rs-text);
}

a, .btn-link {
    color: var(--rs-accent);
}

a:hover, a:focus, .btn-link:hover, .btn-link:focus {
    color: var(--rs-accent-hover);
}

h1, h2, h3, h4, h5, h6 {
    color: var(--rs-text);
}

.btn {
    min-height: var(--rs-control-height);
    padding: 5px 12px;
    border-radius: var(--rs-radius-sm);
    font-size: 13px;
    line-height: 22px;
    font-weight: 500;
}

.btn-sm {
    min-height: var(--rs-control-height);
    padding: 5px 10px;
    font-size: 13px;
}

.btn-primary {
    color: var(--rs-on-accent);
    background: var(--rs-accent);
    border-color: var(--rs-accent);
}

.btn-primary:hover, .btn-primary:focus {
    color: var(--rs-on-accent);
    background: var(--rs-accent-hover);
    border-color: var(--rs-accent-hover);
}

.btn-secondary, .btn-light {
    color: var(--rs-text);
    background: var(--rs-neutral-action-surface);
    border-color: var(--rs-neutral-action-border);
}

.btn-secondary:hover, .btn-secondary:focus, .btn-light:hover, .btn-light:focus {
    color: var(--rs-neutral-action-hover-ink);
    background: var(--rs-neutral-action-hover-surface);
    border-color: var(--rs-neutral-action-hover-border);
}

.btn-secondary:disabled, .btn-secondary.disabled, .btn-light:disabled, .btn-light.disabled {
    color: var(--rs-text);
    background: var(--rs-neutral-action-surface);
    border-color: var(--rs-neutral-action-border);
}

.btn-outline-primary {
    color: var(--rs-accent-link);
    border-color: var(--rs-accent);
}

.btn-outline-primary:hover, .btn-outline-primary:focus {
    color: var(--rs-on-accent);
    background: var(--rs-accent);
    border-color: var(--rs-accent);
}

.btn-outline-secondary {
    color: var(--rs-text);
    border-color: var(--rs-control-frame);
    background: var(--rs-surface-panel);
}

.btn-outline-secondary:hover, .btn-outline-secondary:focus {
    color: var(--rs-text);
    border-color: var(--rs-accent);
    background: var(--rs-accent-chip);
}

.btn-danger, .btn-danger:hover, .btn-danger:focus, .btn-outline-danger:hover, .btn-outline-danger:focus {
    background: var(--rs-error);
    border-color: var(--rs-error);
    color: var(--rs-on-accent);
}

.btn-outline-danger {
    color: var(--rs-error);
    border-color: var(--rs-control-frame);
    background: var(--rs-surface-panel);
}

.btn:disabled, .btn.disabled {
    opacity: var(--rs-disabled-opacity);
}

.btn:focus-visible, .btn-close:focus-visible, .form-control:focus-visible, .form-select:focus-visible, .form-check-input:focus-visible, .dropdown-item:focus-visible, .list-group-item-action:focus-visible, .nav-link:focus-visible, [tabindex]:focus-visible {
    outline: var(--rs-focus-outline);
    outline-offset: 1px;
    box-shadow: none;
}

.btn-close {
    box-sizing: content-box;
    width: 1rem;
    height: 1rem;
    padding: .25rem;
    display: inline-grid;
    flex: 0 0 auto;
    place-items: center;
    color: var(--rs-text-muted);
    background: none;
    border: 0;
    border-radius: var(--rs-radius-sm);
    opacity: 1;
    filter: none;
}

.btn-close::before {
    width: 100%;
    height: 100%;
    content: "";
    background: linear-gradient(45deg, transparent calc(50% - 1px), currentColor calc(50% - 1px), currentColor calc(50% + 1px), transparent calc(50% + 1px)), linear-gradient(-45deg, transparent calc(50% - 1px), currentColor calc(50% - 1px), currentColor calc(50% + 1px), transparent calc(50% + 1px));
}

.btn-close:focus {
    box-shadow: none;
}

.btn-close:hover:not(:disabled) {
    color: var(--rs-text);
    background-color: var(--rs-surface-subtle);
    opacity: 1;
}

.btn-close:disabled {
    color: var(--rs-text-muted);
    opacity: var(--rs-disabled-opacity);
}

.form-control, .form-select {
    min-height: var(--rs-control-height);
    padding: 5px 10px;
    border: 1px solid var(--rs-control-frame);
    border-radius: var(--rs-radius-sm);
    color: var(--rs-text);
    background-color: var(--rs-surface-panel);
    font-size: 13px;
    line-height: 22px;
}

.form-control:not(textarea), .form-select {
    height: var(--rs-control-height);
}

.form-select {
    padding-right: 32px;
}

textarea.form-control {
    min-height: 76px;
}

.form-control::placeholder {
    color: var(--rs-text-placeholder);
    opacity: 1;
}

.form-control:focus, .form-select:focus {
    border-color: var(--rs-accent);
    box-shadow: var(--rs-focus-ring);
}

.form-control:disabled, .form-select:disabled {
    color: var(--rs-text-muted);
    background: var(--rs-control-disabled-surface);
    opacity: 1;
}

.form-check-input {
    border-color: var(--rs-control-frame);
}

.form-check-input:checked {
    background-color: var(--rs-accent);
    border-color: var(--rs-accent);
}

.form-check-input:disabled {
    opacity: var(--rs-disabled-opacity);
}

.form-switch {
    padding-left: 2.5em;
}

.form-switch .form-check-input {
    --rs-switch-thumb: var(--rs-text-muted);
    width: 2em;
    height: 1em;
    margin-top: .25em;
    margin-left: -2.5em;
    appearance: none;
    -webkit-appearance: none;
    background-color: var(--rs-surface-panel);
    background-image: radial-gradient(circle, var(--rs-switch-thumb) 0 38%, transparent 42%);
    background-position: left center;
    background-repeat: no-repeat;
    background-size: 1em 1em;
    border: 1px solid var(--rs-control-frame);
    border-radius: 999px;
    transition: background-color .15s ease, background-position .15s ease, border-color .15s ease;
}

.form-switch .form-check-input:checked {
    --rs-switch-thumb: var(--rs-on-accent);
    background-color: var(--rs-accent);
    background-position: right center;
    border-color: var(--rs-accent);
}

.form-switch .form-check-input:hover:not(:disabled) {
    border-color: var(--rs-accent);
}

.form-switch .form-check-input:focus {
    background-image: radial-gradient(circle, var(--rs-switch-thumb) 0 38%, transparent 42%);
    border-color: var(--rs-accent);
    box-shadow: var(--rs-focus-ring);
}

.form-switch .form-check-input:disabled {
    cursor: not-allowed;
}

.form-range {
    width: 100%;
    height: 1.5rem;
    padding: 0;
    appearance: none;
    -webkit-appearance: none;
    background: transparent;
}

.form-range:focus {
    outline: 0;
}

.form-range::-webkit-slider-runnable-track {
    width: 100%;
    height: .375rem;
    background: var(--rs-surface-subtle);
    border: 1px solid var(--rs-control-frame);
    border-radius: 999px;
}

.form-range::-webkit-slider-thumb {
    width: 1rem;
    height: 1rem;
    margin-top: -.3125rem;
    appearance: none;
    -webkit-appearance: none;
    background: var(--rs-accent);
    border: 0;
    border-radius: 50%;
    box-shadow: var(--rs-shadow-sm);
    transition: background-color .15s ease, box-shadow .15s ease;
}

.form-range::-moz-range-track {
    width: 100%;
    height: .375rem;
    background: var(--rs-surface-subtle);
    border: 1px solid var(--rs-control-frame);
    border-radius: 999px;
}

.form-range::-moz-range-thumb {
    width: 1rem;
    height: 1rem;
    background: var(--rs-accent);
    border: 0;
    border-radius: 50%;
    box-shadow: var(--rs-shadow-sm);
    transition: background-color .15s ease, box-shadow .15s ease;
}

.form-range:hover:not(:disabled)::-webkit-slider-thumb {
    background: var(--rs-accent-hover);
}

.form-range:hover:not(:disabled)::-moz-range-thumb {
    background: var(--rs-accent-hover);
}

.form-range:focus-visible::-webkit-slider-thumb {
    box-shadow: 0 0 0 2px var(--rs-surface-panel), var(--rs-focus-ring);
}

.form-range:focus-visible::-moz-range-thumb {
    box-shadow: 0 0 0 2px var(--rs-surface-panel), var(--rs-focus-ring);
}

.form-range:disabled {
    cursor: not-allowed;
    opacity: var(--rs-disabled-opacity);
}

.form-label {
    color: var(--rs-text);
    font-size: 13px;
    font-weight: 600;
}

.form-text {
    color: var(--rs-text-muted);
    font-size: 12px;
}

.input-group-text {
    color: var(--rs-text);
    background: var(--rs-surface-subtle);
    border-color: var(--rs-control-frame);
}

.invalid, .form-control.is-invalid, .form-select.is-invalid, [aria-invalid="true"] {
    border-color: var(--rs-error);
}

.validation-message, .invalid-feedback {
    color: var(--rs-error);
    font-size: 12px;
}

.card {
    color: var(--rs-text);
    background: var(--rs-surface-panel);
    border: 1px solid var(--rs-border) !important;
    border-radius: var(--rs-radius-md);
    box-shadow: var(--rs-shadow-sm);
}

.card-header {
    min-height: var(--rs-panel-header-height);
    background: var(--rs-surface-header);
    border-bottom: 1px solid var(--rs-border);
}

.table {
    color: var(--rs-text);
    border-color: var(--rs-border-subtle);
    background: var(--rs-surface-panel);
    font: var(--rs-type-control);
}

.table > thead, .table-light {
    color: var(--rs-text);
    background: var(--rs-surface-header);
}

.table > :not(caption) > * > * {
    padding: 8px 10px;
    color: var(--rs-text);
    background-color: var(--rs-surface-panel);
    border-color: var(--rs-border-subtle);
    box-shadow: none;
}

.table > thead > tr > * {
    background-color: var(--rs-surface-header);
}

.table-hover > tbody > tr:hover > * {
    background: var(--rs-accent-hover-surface);
    color: var(--rs-text);
}

.table-striped > tbody > tr:nth-of-type(odd) > * {
    background: var(--rs-table-stripe);
    color: var(--rs-text);
}

.list-group-item {
    color: var(--rs-text);
    background: var(--rs-surface-panel);
    border-color: var(--rs-border-subtle);
}

.list-group-item-action:hover, .list-group-item-action:focus {
    color: var(--rs-text);
    background: var(--rs-accent-hover-surface);
}

.nav-tabs {
    border-bottom-color: var(--rs-border);
}

.nav-tabs .nav-link {
    color: var(--rs-text-muted);
    border-color: transparent;
}

.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
    color: var(--rs-text);
    border-color: var(--rs-border-subtle) var(--rs-border-subtle) var(--rs-border);
}

.nav-tabs .nav-link.active {
    color: var(--rs-text);
    background: var(--rs-surface-panel);
    border-color: var(--rs-border) var(--rs-border) var(--rs-surface-panel);
}

.dropdown-menu {
    border: 1px solid var(--rs-border);
    border-radius: var(--rs-radius-md);
    box-shadow: var(--rs-shadow-dialog);
    font-size: 13px;
}

.dropdown-item {
    color: var(--rs-text);
}

.dropdown-item:hover, .dropdown-item:focus {
    color: var(--rs-text);
    background: var(--rs-accent-chip);
}

.modal-content {
    border: 1px solid var(--rs-border);
    border-radius: var(--rs-radius-lg);
    box-shadow: var(--rs-shadow-dialog);
}

.modal-header {
    min-height: var(--rs-page-header-height);
    padding: 6px 12px;
    background: var(--rs-surface-header);
    border-bottom-color: var(--rs-border);
}

.modal-title {
    margin: 0;
    color: var(--rs-text);
    font-size: 16px;
    line-height: 1.25;
    font-weight: 600;
}

.modal-footer {
    padding: 8px 12px;
    background: var(--rs-surface-subtle);
    border-top-color: var(--rs-border);
}

.modal-backdrop.show {
    opacity: .38;
}

/* Bootstrap owns spinner mechanics and geometry; RadiSense owns its semantic color. */
.spinner-border {
    color: var(--rs-accent);
}

.btn .spinner-border, [data-rs-tone] .spinner-border {
    color: currentColor;
}

.progress {
    background-color: var(--rs-surface-subtle);
}

.progress-bar {
    background-color: var(--rs-accent);
}

.text-muted, .text-secondary {
    color: var(--rs-text-muted) !important;
}

.bg-white {
    background-color: var(--rs-surface-panel) !important;
}

.border, .border-top, .border-end, .border-bottom, .border-start {
    border-color: var(--rs-border-subtle) !important;
}

.badge.bg-primary, .text-bg-primary {
    background-color: var(--rs-accent) !important;
}

.text-success {
    color: var(--rs-success) !important;
}

.text-warning {
    color: var(--rs-warning) !important;
}

.text-danger {
    color: var(--rs-error) !important;
}

.text-info {
    color: var(--rs-info) !important;
}

.bg-success, .text-bg-success {
    color: var(--rs-on-accent) !important;
    background-color: var(--rs-success) !important;
}

.bg-warning, .text-bg-warning {
    color: var(--rs-on-accent) !important;
    background-color: var(--rs-warning) !important;
}

.bg-danger, .text-bg-danger {
    color: var(--rs-on-accent) !important;
    background-color: var(--rs-error) !important;
}

.bg-info, .text-bg-info {
    color: var(--rs-on-accent) !important;
    background-color: var(--rs-info) !important;
}

.bg-light {
    background-color: var(--rs-surface-page) !important;
}

.alert-success {
    color: var(--rs-success);
    background: var(--rs-alert-success-surface);
    border-color: var(--rs-alert-success-border);
}

.alert-info {
    color: var(--rs-info);
    background: var(--rs-alert-info-surface);
    border-color: var(--rs-alert-info-border);
}

.alert-warning {
    color: var(--rs-warning);
    background: var(--rs-alert-warning-surface);
    border-color: var(--rs-alert-warning-border);
}

.alert-danger {
    color: var(--rs-error);
    background: var(--rs-alert-danger-surface);
    border-color: var(--rs-alert-danger-border);
}
