/**
 * Academy modal validation — red outline + glow (CRM modal validation parity).
 * Loaded globally from layouts/main.php.
 * Validation feedback is outline-only: no toasts or native browser bubbles.
 *
 * Scopes: Bootstrap .modal, Academy .modal-container, and [role="dialog"] overlays.
 */

:root {
    --academy-invalid-border-dark: #f5576c;
    --academy-invalid-glow-dark: 0 0 0 0.2rem rgba(245, 87, 108, 0.28);
    --academy-invalid-border-light: #dc3545;
    --academy-invalid-glow-light: 0 0 0 0.2rem rgba(220, 53, 69, 0.22);
}

/* Shared invalid control list for dark theme */
[data-bs-theme="dark"] .modal :is(
    .form-control.is-invalid,
    .form-select.is-invalid,
    textarea.form-control.is-invalid,
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .academy-coupon-field.is-invalid,
    .flatpickr-wrapper input.form-control.is-invalid,
    .flatpickr-wrapper input.is-invalid,
    .flatpickr-wrapper.is-invalid input.form-control,
    .flatpickr-wrapper.is-invalid input,
    .flatpickr-wrapper.is-invalid input.form-control:focus,
    .flatpickr-wrapper.is-invalid input.form-control:focus-visible,
    .flatpickr-wrapper.is-invalid input:focus,
    .select2-container.is-invalid .select2-selection,
    .select2-selection.is-invalid,
    .form-control.is-invalid:focus,
    .form-control.is-invalid:focus-visible,
    .form-select.is-invalid:focus,
    .form-select.is-invalid:focus-visible,
    input.is-invalid:focus,
    select.is-invalid:focus,
    textarea.is-invalid:focus,
    .flatpickr-wrapper input.form-control.is-invalid:focus,
    .flatpickr-wrapper.is-invalid input.form-control:focus,
    .select2-container.is-invalid.select2-container--focus .select2-selection
),
[data-bs-theme="dark"] .modal-container :is(
    .form-control.is-invalid,
    .form-select.is-invalid,
    textarea.form-control.is-invalid,
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .academy-coupon-field.is-invalid,
    .flatpickr-wrapper input.form-control.is-invalid,
    .flatpickr-wrapper input.is-invalid,
    .flatpickr-wrapper.is-invalid input.form-control,
    .flatpickr-wrapper.is-invalid input,
    .flatpickr-wrapper.is-invalid input.form-control:focus,
    .flatpickr-wrapper.is-invalid input:focus,
    .select2-container.is-invalid .select2-selection,
    .select2-selection.is-invalid,
    .form-control.is-invalid:focus,
    .form-control.is-invalid:focus-visible,
    input.is-invalid:focus,
    select.is-invalid:focus,
    textarea.is-invalid:focus,
    .flatpickr-wrapper input.form-control.is-invalid:focus,
    .flatpickr-wrapper.is-invalid input.form-control:focus,
    .select2-container.is-invalid.select2-container--focus .select2-selection
),
[data-bs-theme="dark"] [role="dialog"] :is(
    .form-control.is-invalid,
    .form-select.is-invalid,
    textarea.form-control.is-invalid,
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .academy-coupon-field.is-invalid,
    .flatpickr-wrapper input.form-control.is-invalid,
    .flatpickr-wrapper input.is-invalid,
    .flatpickr-wrapper.is-invalid input.form-control,
    .flatpickr-wrapper.is-invalid input,
    .flatpickr-wrapper.is-invalid input.form-control:focus,
    .flatpickr-wrapper.is-invalid input:focus,
    .select2-container.is-invalid .select2-selection,
    .select2-selection.is-invalid,
    .form-control.is-invalid:focus,
    .form-control.is-invalid:focus-visible,
    input.is-invalid:focus,
    select.is-invalid:focus,
    textarea.is-invalid:focus,
    .flatpickr-wrapper input.form-control.is-invalid:focus,
    .flatpickr-wrapper.is-invalid input.form-control:focus,
    .select2-container.is-invalid.select2-container--focus .select2-selection
),
html.dark .modal :is(
    .form-control.is-invalid,
    .form-select.is-invalid,
    textarea.form-control.is-invalid,
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .academy-coupon-field.is-invalid,
    .flatpickr-wrapper input.form-control.is-invalid,
    .flatpickr-wrapper input.is-invalid,
    .flatpickr-wrapper.is-invalid input.form-control,
    .flatpickr-wrapper.is-invalid input,
    .select2-container.is-invalid .select2-selection,
    .select2-selection.is-invalid,
    .form-control.is-invalid:focus,
    input.is-invalid:focus,
    select.is-invalid:focus,
    textarea.is-invalid:focus
),
html.dark .modal-container :is(
    .form-control.is-invalid,
    .form-select.is-invalid,
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .academy-coupon-field.is-invalid,
    .flatpickr-wrapper input.is-invalid,
    .flatpickr-wrapper.is-invalid input,
    .select2-container.is-invalid .select2-selection,
    .select2-selection.is-invalid,
    input.is-invalid:focus,
    select.is-invalid:focus,
    textarea.is-invalid:focus
),
html.dark [role="dialog"] :is(
    .form-control.is-invalid,
    .form-select.is-invalid,
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .academy-coupon-field.is-invalid,
    .flatpickr-wrapper input.is-invalid,
    .flatpickr-wrapper.is-invalid input,
    .select2-container.is-invalid .select2-selection,
    .select2-selection.is-invalid,
    input.is-invalid:focus,
    select.is-invalid:focus,
    textarea.is-invalid:focus
) {
    border-color: var(--academy-invalid-border-dark) !important;
    box-shadow: var(--academy-invalid-glow-dark) !important;
}

html.dark .is-invalid-field,
[data-bs-theme="dark"] .is-invalid-field {
    border-color: var(--academy-invalid-border-dark) !important;
    box-shadow: var(--academy-invalid-glow-dark) !important;
}
html.dark :is(
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .form-control.is-invalid,
    .form-select.is-invalid
):not([type="hidden"]):not([type="checkbox"]):not([type="radio"]),
html.dark input[type="radio"].is-invalid,
html.dark input[type="checkbox"].is-invalid,
html.dark .password-field.is-invalid,
html.dark .password-field.password-field--invalid,
[data-bs-theme="dark"] .password-field.is-invalid,
[data-bs-theme="dark"] .password-field.password-field--invalid {
    border-color: var(--academy-invalid-border-dark) !important;
    box-shadow: var(--academy-invalid-glow-dark) !important;
}

[data-bs-theme="light"] .modal :is(
    .form-control.is-invalid,
    .form-select.is-invalid,
    textarea.form-control.is-invalid,
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .academy-coupon-field.is-invalid,
    .flatpickr-wrapper input.form-control.is-invalid,
    .flatpickr-wrapper input.is-invalid,
    .flatpickr-wrapper.is-invalid input.form-control,
    .flatpickr-wrapper.is-invalid input,
    .flatpickr-wrapper.is-invalid input.form-control:focus,
    .flatpickr-wrapper.is-invalid input:focus,
    .select2-container.is-invalid .select2-selection,
    .select2-selection.is-invalid,
    .form-control.is-invalid:focus,
    .form-control.is-invalid:focus-visible,
    .form-select.is-invalid:focus,
    input.is-invalid:focus,
    select.is-invalid:focus,
    textarea.is-invalid:focus,
    .flatpickr-wrapper input.form-control.is-invalid:focus,
    .flatpickr-wrapper.is-invalid input.form-control:focus,
    .select2-container.is-invalid.select2-container--focus .select2-selection
),
[data-bs-theme="light"] .modal-container :is(
    .form-control.is-invalid,
    .form-select.is-invalid,
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .academy-coupon-field.is-invalid,
    .flatpickr-wrapper input.is-invalid,
    .flatpickr-wrapper.is-invalid input,
    .select2-container.is-invalid .select2-selection,
    .select2-selection.is-invalid,
    input.is-invalid:focus,
    select.is-invalid:focus,
    textarea.is-invalid:focus
),
[data-bs-theme="light"] [role="dialog"] :is(
    .form-control.is-invalid,
    .form-select.is-invalid,
    input.is-invalid,
    select.is-invalid,
    textarea.is-invalid,
    .academy-coupon-field.is-invalid,
    .flatpickr-wrapper input.is-invalid,
    .flatpickr-wrapper.is-invalid input,
    .select2-container.is-invalid .select2-selection,
    .select2-selection.is-invalid,
    input.is-invalid:focus,
    select.is-invalid:focus,
    textarea.is-invalid:focus
) {
    border-color: var(--academy-invalid-border-light) !important;
    box-shadow: var(--academy-invalid-glow-light) !important;
}

[data-bs-theme="dark"] .modal .invalid-feedback,
[data-bs-theme="dark"] .modal-container .invalid-feedback,
[data-bs-theme="dark"] [role="dialog"] .invalid-feedback,
html.dark .modal .invalid-feedback,
html.dark .modal-container .invalid-feedback,
html.dark [role="dialog"] .invalid-feedback {
    color: #f87171 !important;
}

[data-bs-theme="light"] .modal .invalid-feedback,
[data-bs-theme="light"] .modal-container .invalid-feedback,
[data-bs-theme="light"] [role="dialog"] .invalid-feedback {
    display: block;
    color: #dc3545 !important;
}

[data-bs-theme="dark"] .modal .btn.is-invalid,
[data-bs-theme="light"] .modal .btn.is-invalid,
html.dark .modal .btn.is-invalid {
    border-color: var(--academy-invalid-border-dark) !important;
    box-shadow: var(--academy-invalid-glow-dark) !important;
}

[data-bs-theme="light"] .modal .btn.is-invalid {
    border-color: var(--academy-invalid-border-light) !important;
    box-shadow: var(--academy-invalid-glow-light) !important;
}

/* Password field wrappers used in profile change-password modal */
[data-bs-theme="dark"] .modal .password-field.is-invalid,
[data-bs-theme="dark"] [role="dialog"] .password-field.is-invalid,
html.dark .modal .password-field.is-invalid,
html.dark [role="dialog"] .password-field.is-invalid,
[data-bs-theme="dark"] .modal .password-field.password-field--invalid,
[data-bs-theme="dark"] [role="dialog"] .password-field.password-field--invalid,
html.dark .modal .password-field.password-field--invalid,
html.dark [role="dialog"] .password-field.password-field--invalid {
    border-color: var(--academy-invalid-border-dark) !important;
    box-shadow: var(--academy-invalid-glow-dark) !important;
}

.tooltip.academy-field-required-tooltip {
    z-index: 20050 !important;
}

.tooltip.academy-field-required-tooltip .tooltip-inner {
    background: #dc3545 !important;
    color: #ffffff !important;
    font-size: 0.8rem;
    font-weight: 600;
}

.tooltip.academy-field-required-tooltip.bs-tooltip-top .tooltip-arrow::before,
.tooltip.academy-field-required-tooltip .tooltip-arrow::before {
    border-top-color: #dc3545 !important;
}

[data-bs-theme="dark"] .modal .tooltip.academy-field-required-tooltip .tooltip-inner,
[data-bs-theme="dark"] .modal .tooltip.academy-field-required-tooltip div,
html.dark .modal .tooltip.academy-field-required-tooltip .tooltip-inner {
    color: #ffffff !important;
}
