/* ==========================================================================
   compat.css — Bootstrap 5 form classes extracted for crispy-forms compatibility
   ==========================================================================
   TEMPORARY: These styles exist because crispy-forms (bootstrap5 template pack)
   generates BS5 class names. Once crispy-forms is replaced or reconfigured,
   delete this file and remove the <link> from base.html.

   Covers: form-control, form-select, form-check, form-label, form-group,
   form-text, form-switch, form-floating, input-group, invalid-feedback,
   is-invalid, is-valid.
   ========================================================================== */

/* ── form-control ── */
.form-control {
    display: block;
    width: 100%;
    padding: .375rem .75rem;
    font-size: var(--uv-fs-body);
    font-weight: 400;
    line-height: 1.5;
    color: var(--uv-text);
    appearance: none;
    background-color: #fff;
    background-clip: padding-box;
    border: 1px solid var(--uv-border);
    border-radius: var(--uv-radius);
    transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
}
.form-control:focus {
    color: var(--uv-text);
    background-color: #fff;
    border-color: rgba(13, 110, 253, .5);
    outline: 0;
    box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);
}
.form-control::placeholder {
    color: var(--uv-text-muted);
    opacity: 1;
}
.form-control:disabled,
.form-control[readonly] {
    background-color: var(--uv-bg-warm);
    opacity: 1;
}

/* ── form-select ── */
.form-select {
    --uv-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
    display: block;
    width: 100%;
    padding: .375rem 2.25rem .375rem .75rem;
    font-size: var(--uv-fs-body);
    font-weight: 400;
    line-height: 1.5;
    color: var(--uv-text);
    appearance: none;
    background-color: #fff;
    background-image: var(--uv-form-select-bg-img);
    background-repeat: no-repeat;
    background-position: right .75rem center;
    background-size: 16px 12px;
    border: 1px solid var(--uv-border);
    border-radius: var(--uv-radius);
    transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
}
.form-select:focus {
    border-color: rgba(13, 110, 253, .5);
    outline: 0;
    box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);
}
.form-select:disabled {
    background-color: var(--uv-bg-warm);
}

/* ── form-label ── */
.form-label {
    margin-bottom: .5rem;
    font-weight: 500;
}

/* ── form-text (help text) ── */
.form-text {
    margin-top: .25rem;
    font-size: var(--uv-fs-small);
    color: var(--uv-text-muted);
}

/* ── form-group (legacy, not in BS5 but used in crispy) ── */
.form-group {
    margin-bottom: 1rem;
}

/* ── form-check (checkboxes, radios) ── */
.form-check {
    display: block;
    min-height: 1.5rem;
    padding-left: 1.5em;
    margin-bottom: .125rem;
}
.form-check-input {
    --uv-check-size: 1em;
    flex-shrink: 0;
    width: var(--uv-check-size);
    height: var(--uv-check-size);
    margin-top: .25em;
    margin-left: -1.5em;
    vertical-align: top;
    appearance: none;
    background-color: #fff;
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
    border: 1px solid var(--uv-border);
    print-color-adjust: exact;
}
.form-check-input[type="checkbox"] {
    border-radius: .25em;
}
.form-check-input[type="radio"] {
    border-radius: 50%;
}
.form-check-input:checked {
    background-color: var(--uv-primary);
    border-color: var(--uv-primary);
}
.form-check-input:checked[type="checkbox"] {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
}
.form-check-input:checked[type="radio"] {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
}
.form-check-input:focus {
    border-color: rgba(13, 110, 253, .5);
    outline: 0;
    box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);
}
.form-check-label {
    cursor: pointer;
}

/* ── form-switch ── */
.form-switch {
    padding-left: 2.5em;
}
.form-switch .form-check-input {
    --uv-check-size: 1em;
    width: 2em;
    margin-left: -2.5em;
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");
    background-position: left center;
    border-radius: 2em;
    transition: background-position .15s ease-in-out;
}
.form-switch .form-check-input:checked {
    background-position: right center;
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
}

/* ── input-group ── */
.input-group {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    align-items: stretch;
    width: 100%;
}
.input-group > .form-control,
.input-group > .form-select {
    position: relative;
    flex: 1 1 auto;
    width: 1%;
    min-width: 0;
}
.input-group > .form-control:focus,
.input-group > .form-select:focus {
    z-index: 5;
}
.input-group .btn,
.input-group .uv-btn {
    position: relative;
    z-index: 2;
}
.input-group-text {
    display: flex;
    align-items: center;
    padding: .375rem .75rem;
    font-size: var(--uv-fs-body);
    font-weight: 400;
    line-height: 1.5;
    color: var(--uv-text);
    text-align: center;
    white-space: nowrap;
    background-color: var(--uv-bg-warm);
    border: 1px solid var(--uv-border);
    border-radius: var(--uv-radius);
}
/* Border radius fixes for grouped elements */
.input-group > :not(:first-child) {
    margin-left: -1px;
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}
.input-group > :not(:last-child) {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
}

/* ── form-floating (floating labels) ── */
.form-floating {
    position: relative;
}
.form-floating > .form-control,
.form-floating > .form-select {
    height: calc(3.5rem + 2px);
    min-height: calc(3.5rem + 2px);
    padding: 1rem .75rem;
    line-height: 1.25;
}
.form-floating > label {
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2;
    height: 100%;
    padding: 1rem .75rem;
    overflow: hidden;
    text-align: start;
    text-overflow: ellipsis;
    white-space: nowrap;
    pointer-events: none;
    border: 1px solid transparent;
    transform-origin: 0 0;
    transition: opacity .1s ease-in-out, transform .1s ease-in-out;
}
.form-floating > .form-control:focus ~ label,
.form-floating > .form-control:not(:placeholder-shown) ~ label,
.form-floating > .form-select ~ label {
    color: rgba(var(--uv-text), .65);
    transform: scale(.85) translateY(-.5rem) translateX(.15rem);
}

/* ── Validation states ── */
.is-invalid > .form-control,
.form-control.is-invalid {
    border-color: var(--uv-danger);
    padding-right: calc(1.5em + .75rem);
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%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='%23dc3545' stroke='none'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right calc(.375em + .1875rem) center;
    background-size: calc(.75em + .375rem) calc(.75em + .375rem);
}
.is-invalid > .form-control:focus,
.form-control.is-invalid:focus {
    border-color: var(--uv-danger);
    box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .25);
}
.is-valid > .form-control,
.form-control.is-valid {
    border-color: var(--uv-success);
}
.invalid-feedback {
    display: none;
    width: 100%;
    margin-top: .25rem;
    font-size: var(--uv-fs-small);
    color: var(--uv-danger);
}
.is-invalid ~ .invalid-feedback,
.was-validated :invalid ~ .invalid-feedback {
    display: block;
}

/* ── btn-close (used in modals, alerts) ── */
.btn-close {
    --uv-btn-close-size: 1em;
    box-sizing: content-box;
    width: var(--uv-btn-close-size);
    height: var(--uv-btn-close-size);
    padding: .25em .25em;
    color: #000;
    background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/var(--uv-btn-close-size) auto no-repeat;
    border: 0;
    border-radius: .375rem;
    opacity: .5;
    cursor: pointer;
}
.btn-close:hover {
    opacity: .75;
}
.btn-close:focus {
    outline: 0;
    box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25);
    opacity: 1;
}
