/* Lexpraxis buttons: Bootstrap 5.3 variants and variables, shared by app/public views.
 * Usage: class="btn awx-button btn-primary [btn-sm|btn-lg]".
 * Existing classes may remain as JS, positioning or state hooks. Only opted-in
 * buttons are normalized; tabs, editor tools and media controls are separate UI.
 * The scoped base also works on public pages that do not load Bootstrap.
 * Sizes: default 14px, btn-sm 12px, btn-lg 16px (at a 16px root size).
 * awx-button-icon makes an icon-only button square at the selected size.
 * awx-button-custom normalizes geometry only: pair with btn awx-button, without
 * a color variant, to preserve configured --awx-* gradients and inline colors.
 */
.awx-button {
    --bs-btn-padding-x: 1rem;
    --bs-btn-padding-y: .5rem;
    --bs-btn-font-size: .875rem;
    --bs-btn-font-weight: 600;
    --bs-btn-line-height: 1.5;
    --bs-btn-border-width: 1px;
    --bs-btn-border-radius: .5rem;
    --bs-btn-disabled-opacity: .65;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .375rem;
    box-sizing: border-box;
    vertical-align: middle;
    font-family: inherit;
    font-size: var(--bs-btn-font-size) !important;
    font-weight: var(--bs-btn-font-weight) !important;
    line-height: var(--bs-btn-line-height) !important;
    padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x) !important;
    border-radius: var(--bs-btn-border-radius) !important;
    text-align: center;
    text-decoration: none !important;
    cursor: pointer;
    transition: color .15s, background-color .15s, border-color .15s, box-shadow .15s;
}
.awx-button.btn-sm {
    --bs-btn-padding-x: .625rem;
    --bs-btn-padding-y: .25rem;
    --bs-btn-font-size: .75rem;
    --bs-btn-border-radius: .375rem;
}
.awx-button.btn-lg {
    --bs-btn-padding-x: 1.5rem;
    --bs-btn-padding-y: .75rem;
    --bs-btn-font-size: 1rem;
    --bs-btn-border-radius: .625rem;
}
.awx-button.btn-primary, .awx-button.btn-outline-primary {
    --awx-button-color: var(--awx-primary, #4b7bf5);
    --awx-button-contrast: var(--awx-on-primary, #fff);
}
.awx-button.btn-secondary, .awx-button.btn-outline-secondary {
    --awx-button-color: var(--bs-secondary, #6c757d);
    --awx-button-contrast: #fff;
}
.awx-button.btn-success, .awx-button.btn-outline-success {
    --awx-button-color: var(--bs-success, #198754);
    --awx-button-contrast: #fff;
}
.awx-button.btn-danger, .awx-button.btn-outline-danger {
    --awx-button-color: var(--bs-danger, #dc3545);
    --awx-button-contrast: #fff;
}
.awx-button.btn-warning, .awx-button.btn-outline-warning {
    --awx-button-color: var(--bs-warning, #ffc107);
    --awx-button-contrast: #212529;
}
.awx-button.btn-info, .awx-button.btn-outline-info {
    --awx-button-color: var(--bs-info, #0dcaf0);
    --awx-button-contrast: #212529;
}
.awx-button.btn-light, .awx-button.btn-outline-light {
    --awx-button-color: var(--bs-light, #f8f9fa);
    --awx-button-contrast: #212529;
}
.awx-button.btn-dark, .awx-button.btn-outline-dark {
    --awx-button-color: var(--bs-dark, #212529);
    --awx-button-contrast: #fff;
}
.awx-button:is(.btn-primary, .btn-secondary, .btn-success, .btn-danger,
              .btn-warning, .btn-info, .btn-light, .btn-dark) {
    --bs-btn-color: var(--awx-button-contrast);
    --bs-btn-bg: var(--awx-button-color);
    --bs-btn-border-color: var(--awx-button-color);
    --bs-btn-hover-color: var(--awx-button-contrast);
    --bs-btn-hover-bg: color-mix(in srgb, var(--awx-button-color), #000 12%);
    --bs-btn-hover-border-color: var(--bs-btn-hover-bg);
    --bs-btn-active-color: var(--awx-button-contrast);
    --bs-btn-active-bg: color-mix(in srgb, var(--awx-button-color), #000 18%);
    --bs-btn-active-border-color: var(--bs-btn-active-bg);
}
.awx-button:is(.btn-outline-primary, .btn-outline-secondary, .btn-outline-success,
              .btn-outline-danger, .btn-outline-warning, .btn-outline-info,
              .btn-outline-light, .btn-outline-dark) {
    --bs-btn-color: var(--awx-button-color);
    --bs-btn-bg: transparent;
    --bs-btn-border-color: var(--awx-button-color);
    --bs-btn-hover-color: var(--awx-button-contrast);
    --bs-btn-hover-bg: var(--awx-button-color);
    --bs-btn-hover-border-color: var(--awx-button-color);
    --bs-btn-active-color: var(--awx-button-contrast);
    --bs-btn-active-bg: var(--awx-button-color);
    --bs-btn-active-border-color: var(--awx-button-color);
}
.awx-button.btn-link {
    --bs-btn-color: var(--awx-primary, #4b7bf5);
    --bs-btn-bg: transparent;
    --bs-btn-border-color: transparent;
    --bs-btn-hover-color: var(--awx-primary, #4b7bf5);
    --bs-btn-hover-bg: transparent;
    --bs-btn-hover-border-color: transparent;
    --bs-btn-active-color: var(--bs-btn-hover-color);
    --bs-btn-active-bg: transparent;
    --bs-btn-active-border-color: transparent;
}
/* :where keeps specificity at one class so the existing live theme loader's
 * .btn-primary / .btn-primary:hover rules can still supply its configured color.
 * Important declarations replace legacy inline visual styles without touching
 * attributes, layout, visibility, handlers or white-label color settings.
 */
.awx-button:where(:not(.awx-button-custom)) {
    color: var(--bs-btn-color) !important;
    background-color: var(--bs-btn-bg) !important;
    background-image: none !important;
    border: var(--bs-btn-border-width) solid var(--bs-btn-border-color) !important;
}
.awx-button:where(:not(.awx-button-custom)):hover {
    color: var(--bs-btn-hover-color) !important;
    background-color: var(--bs-btn-hover-bg) !important;
    border-color: var(--bs-btn-hover-border-color) !important;
}
.awx-button:where(:not(.awx-button-custom)):is(:active, .active, .on) {
    color: var(--bs-btn-active-color) !important;
    background-color: var(--bs-btn-active-bg) !important;
    border-color: var(--bs-btn-active-border-color) !important;
}
.awx-button:focus-visible {
    outline: 2px solid var(--awx-button-color, var(--awx-primary, #4b7bf5));
    outline-offset: 3px;
    box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--awx-button-color, #4b7bf5), transparent 75%);
}
.awx-button:disabled, .awx-button.disabled {
    opacity: var(--bs-btn-disabled-opacity) !important;
    pointer-events: none;
}
.awx-button-icon {
    width: calc(var(--bs-btn-font-size) * var(--bs-btn-line-height) + var(--bs-btn-padding-y) * 2 + 2px) !important;
    height: calc(var(--bs-btn-font-size) * var(--bs-btn-line-height) + var(--bs-btn-padding-y) * 2 + 2px) !important;
    padding: var(--bs-btn-padding-y) !important;
    flex-shrink: 0;
}
/* Functional completion state toggled by the lesson player. */
.awx-button.lv-btn-nx-ready {
    color: #fff !important;
    background-color: var(--bs-success, #198754) !important;
    border-color: var(--bs-success, #198754) !important;
}
:where(.darkmode-body, [data-bs-theme="dark"]) .awx-button.btn-outline-secondary {
    --awx-button-color: #adb5bd;
    --awx-button-contrast: #212529;
}
@media (prefers-reduced-motion: reduce) {
    .awx-button { transition: none; }
}
