.btn {
    --bs-btn-font-size: 1rem;
    --bs-btn-font-family: var(--bs-body-font-family);
}

.btn.btn-primary:hover {
    filter: brightness(105%);
}

/* Bootstrap 5 按钮变量重映射层 */
/* 将写死的颜色值替换为CSS变量 */

/* 主按钮 */
.btn-primary {
    --bs-btn-color: var(--bs-white);
    --bs-btn-bg: var(--bs-primary);
    --bs-btn-border-color: var(--bs-primary);
    --bs-btn-hover-color: var(--bs-white);
    --bs-btn-hover-bg: var(--bs-primary);
    --bs-btn-hover-border-color: var(--bs-link-hover-color);
    --bs-btn-focus-shadow-rgb: var(--bs-primary-rgb);
    --bs-btn-active-color: var(--bs-white);
    --bs-btn-active-bg: var(--bs-link-hover-color);
    --bs-btn-active-border-color: var(--bs-link-hover-color);
    --bs-btn-active-shadow: none;
    --bs-btn-disabled-color: var(--bs-white);
    --bs-btn-disabled-bg: var(--bs-primary);
    --bs-btn-disabled-border-color: var(--bs-primary);
}

/* 主轮廓按钮 */
.btn-outline-primary {
    --bs-btn-color: var(--bs-primary);
    --bs-btn-border-color: var(--bs-primary);
    --bs-btn-hover-color: var(--bs-white);
    --bs-btn-hover-bg: var(--bs-primary);
    --bs-btn-hover-border-color: var(--bs-primary);
    --bs-btn-focus-shadow-rgb: var(--bs-primary-rgb);
    --bs-btn-active-color: var(--bs-white);
    --bs-btn-active-bg: var(--bs-primary);
    --bs-btn-active-border-color: var(--bs-primary);
    --bs-btn-active-shadow: none;
    --bs-btn-disabled-color: var(--bs-primary);
    --bs-btn-disabled-bg: transparent;
    --bs-btn-disabled-border-color: var(--bs-primary);
    --bs-gradient: none;
}

.btn-secondary {
    --bs-btn-color: #fff;
    --bs-btn-bg: var(--bs-theme-700);
    --bs-btn-border-color: var(--bs-theme-700);
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--bs-theme-800);
    --bs-btn-hover-border-color: var(--bs-theme-800);
    --bs-btn-focus-shadow-rgb: 39, 88, 129;
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--bs-theme-800);
    --bs-btn-active-border-color: var(--bs-theme-800);
    --bs-btn-active-shadow: none;
    --bs-btn-disabled-color: #fff;
    --bs-btn-disabled-bg: var(--bs-theme-700);
    --bs-btn-disabled-border-color: var(--bs-theme-700);
}

.btn-outline-secondary {
    --bs-btn-color: var(--bs-theme-800);
    --bs-btn-border-color: var(--bs-theme-800);
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--bs-theme-800);
    --bs-btn-hover-border-color: var(--bs-theme-800);
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--bs-theme-800);
    --bs-btn-active-border-color: var(--bs-theme-800);
    --bs-btn-active-shadow: none;
    --bs-btn-disabled-color: var(--bs-theme-800);
    --bs-btn-disabled-bg: transparent;
    --bs-btn-disabled-border-color: var(--bs-theme-800);
    --bs-gradient: none;
}

.btn-outline-primary,
.btn-outline-secondary,
.btn-outline-success,
.btn-outline-info,
.btn-outline-warning,
.btn-outline-danger {
    border-width: 0;
}

.btn-outline-primary.border,
.btn-outline-secondary.border,
.btn-outline-success.border,
.btn-outline-info.border,
.btn-outline-warning.border,
.btn-outline-danger.border {
    border-width: 1px;
}

.btn-icon {
    display: inline-flex;
    flex-shrink: 0;
    align-items: center;
    justify-content: center;
    padding: 0;

    /* 匹配普通按钮高度 */
    inline-size: calc(var(--bs-btn-font-size) * var(--bs-btn-line-height) + var(--bs-btn-padding-y) * 2 + var(--bs-btn-border-width) * 2);
    block-size: calc(var(--bs-btn-font-size) * var(--bs-btn-line-height) + var(--bs-btn-padding-y) * 2 + var(--bs-btn-border-width) * 2);

    /* 圆角保持一致 */
    border-radius: var(--bs-btn-border-radius);

    /* 保持原有图标大小（可选） */
    font-size: 1.2890625rem;

    position: relative;
}
a.btn-icon .badge,
button.btn-icon .badge {
    font-size: 0.75rem;
    min-width: 1.1rem;
    height: 1.1rem;
}
.btn-icon .badge.position-absolute.top-0.start-0 {
    top: -0.25rem !important;
    left: -0.25rem !important;
}
.btn-icon .badge.position-absolute.top-0.end-0 {
    top: -0.25rem !important;
    right: -0.25rem !important;
}
.btn-icon .badge.position-absolute.bottom-0.start-0 {
    top: unset;
    bottom: -0.25rem !important;
    left: -0.25rem !important;
}
.btn-icon .badge.position-absolute.bottom-0.end-0 {
    top: unset;
    bottom: -0.25rem !important;
    right: -0.25rem !important;
}
.btn-icon .badge.position-absolute.top-0:not(.start-0):not(.end-0) {
    bottom: unset;
    top: -0.666rem !important;
}
.btn-icon .badge.position-absolute.bottom-0:not(.start-0):not(.end-0) {
    top: unset;
    bottom: -0.666rem !important;
}


.btn-light {
    --bs-btn-color: var(--bs-theme-800);
    --bs-btn-bg: var(--bs-theme-100);
    --bs-btn-border-color: var(--bs-theme-100);
    --bs-btn-hover-color: var(--bs-body-color);
    --bs-btn-hover-bg: var(--bs-theme-500);
    --bs-btn-hover-border-color: var(--bs-theme-400);
    --bs-btn-focus-shadow-rgb: 226, 237, 247;
    --bs-btn-active-color: var(--bs-theme-50);
    --bs-btn-active-bg: var(--bs-theme-400);
    --bs-btn-active-border-color: var(--bs-theme-500);
    --bs-btn-active-shadow: none;
    --bs-btn-disabled-color: var(--bs-theme-50);
    --bs-btn-disabled-bg: var(--bs-theme-100);
    --bs-btn-disabled-border-color: var(--bs-theme-100);
}


.btn.bg-primary-subtle {
    --bs-btn-color: var(--bs-primary);
    --bs-btn-bg: var(--bs-primary-bg-subtle);
    --bs-btn-border-color: var(--bs-primary-border-subtle);
    --bs-btn-hover-bg: var(--bs-primary);
    --bs-btn-focus-shadow-rgb: var(--bs-primary-rgb);
    --bs-btn-active-shadow: var(--bs-box-shadow-inset);
    --bs-btn-disabled-bg: var(--bs-primary);
    --bs-btn-disabled-border-color: var(--bs-primary)
}

.btn.bg-secondary-subtle {
    --bs-btn-color: var(--bs-body-color);
    --bs-btn-bg: var(--bs-secondary-bg-subtle);
    --bs-btn-border-color: var(--bs-secondary-border-subtle);
    --bs-btn-hover-color: var(--bs-body-color);
    --bs-btn-hover-bg: var(--bs-secondary);
    --bs-btn-focus-shadow-rgb: var(--bs-secondary-rgb);
    --bs-btn-active-shadow: var(--bs-box-shadow-inset);
    --bs-btn-disabled-color: var(--bs-gray);
    --bs-btn-disabled-bg: var(--bs-secondary);
    --bs-btn-disabled-border-color: var(--bs-secondary);
}

.btn-subtle.btn-secondary:not(:disabled):not(:active) {
    color: var(--bs-btn-color) !important;
}

.btn.bg-success-subtle {
    --bs-btn-color: var(--bs-success);
    --bs-btn-bg: var(--bs-success-bg-subtle);
    --bs-btn-border-color: var(--bs-success-border-subtle);
    --bs-btn-hover-bg: var(--bs-success);
    --bs-btn-focus-shadow-rgb: var(--bs-success-rgb);
    --bs-btn-active-shadow: var(--bs-box-shadow-inset);
    --bs-btn-disabled-bg: var(--bs-success);
    --bs-btn-disabled-border-color: var(--bs-success)
}

.btn.bg-info-subtle {
    --bs-btn-color: var(--bs-info);
    --bs-btn-bg: var(--bs-info-bg-subtle);
    --bs-btn-border-color: var(--bs-info-border-subtle);
    --bs-btn-hover-bg: var(--bs-info);
    --bs-btn-focus-shadow-rgb: var(--bs-info-rgb);
    --bs-btn-active-shadow: var(--bs-box-shadow-inset);
    --bs-btn-disabled-bg: var(--bs-info);
    --bs-btn-disabled-border-color: var(--bs-info)
}

.btn.bg-warning-subtle {
    --bs-btn-color: var(--bs-warning);
    --bs-btn-bg: var(--bs-warning-bg-subtle);
    --bs-btn-border-color: var(--bs-warning-border-subtle);
    --bs-btn-hover-color: var(--bs-dark);
    --bs-btn-focus-shadow-rgb: var(--bs-warning-rgb);
    --bs-btn-active-color: var(--bs-dark);
    --bs-btn-active-shadow: var(--bs-box-shadow-inset);
    --bs-btn-disabled-color: var(--bs-dark);
    --bs-btn-disabled-bg: var(--bs-warning);
    --bs-btn-disabled-border-color: var(--bs-warning)
}

.btn.bg-danger-subtle {
    --bs-btn-color: var(--bs-danger);
    --bs-btn-bg: var(--bs-danger-bg-subtle);
    --bs-btn-border-color: var(--bs-danger-border-subtle);
    --bs-btn-hover-bg: var(--bs-danger);
    --bs-btn-focus-shadow-rgb: var(--bs-danger-rgb);
    --bs-btn-active-shadow: var(--bs-box-shadow-inset);
    --bs-btn-disabled-bg: var(--bs-danger);
    --bs-btn-disabled-border-color: var(--bs-danger)
}