/**
 * Forms Stylesheet
 * Form-specific styles and layouts
 */

/* ============================================
   FORM CONTROLS
   ============================================ */
.form-group {
    margin-bottom: var(--spacing-md);
}

.form-label {
    display: block;
    margin-bottom: var(--spacing-sm);
    font-weight: 600;
    color: var(--gray-700);
    font-size: 0.875rem;
}

.form-label.required::after {
    content: " *";
    color: var(--jam-danger);
}

.form-control {
    display: block;
    width: 100%;
    padding: 0.5rem 0.75rem;
    font-size: 1rem;
    line-height: 1.5;
    color: var(--gray-900);
    background-color: #fff;
    background-clip: padding-box;
    border: 1px solid var(--gray-400);
    border-radius: var(--radius-md);
    transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}

.form-control:focus {
    color: var(--gray-900);
    background-color: #fff;
    border-color: var(--jam-accent);
    outline: 0;
    box-shadow: 0 0 0 0.2rem rgba(74, 144, 226, 0.25);
}

.form-control:disabled,
.form-control[readonly] {
    background-color: var(--gray-200);
    opacity: 1;
}

.form-control::placeholder {
    color: var(--gray-500);
    opacity: 1;
}

textarea.form-control {
    min-height: 100px;
    resize: vertical;
}

select.form-control {
    appearance: none;
    background-image: 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 5l6 6 6-6'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right 0.75rem center;
    background-size: 16px 12px;
    padding-right: 2.25rem;
}

.form-control-sm {
    padding: 0.25rem 0.5rem;
    font-size: 0.875rem;
}

.form-control-lg {
    padding: 0.5rem 1rem;
    font-size: 1.25rem;
}

/* ============================================
   FILE INPUT
   ============================================ */
.form-file {
    position: relative;
    display: block;
}

.form-file-input {
    position: relative;
    z-index: 2;
    width: 100%;
    margin: 0;
    opacity: 0;
}

.form-file-label {
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    z-index: 1;
    display: flex;
    height: calc(2.25rem + 2px);
    border-color: var(--gray-400);
    border-radius: var(--radius-md);
    pointer-events: none;
}

.form-file-text {
    display: block;
    flex-grow: 1;
    padding: 0.5rem 0.75rem;
    overflow: hidden;
    font-weight: 400;
    line-height: 1.5;
    color: var(--gray-700);
    text-overflow: ellipsis;
    white-space: nowrap;
    background-color: #fff;
    border: 1px solid var(--gray-400);
    border-radius: var(--radius-md) 0 0 var(--radius-md);
}

.form-file-button {
    display: block;
    flex-shrink: 0;
    padding: 0.5rem 0.75rem;
    margin-left: -1px;
    line-height: 1.5;
    color: var(--gray-700);
    background-color: var(--gray-200);
    border: 1px solid var(--gray-400);
    border-radius: 0 var(--radius-md) var(--radius-md) 0;
}

/* ============================================
   CHECKBOXES AND RADIOS
   ============================================ */
.form-check {
    position: relative;
    display: block;
    padding-left: 1.5rem;
}

.form-check-input {
    position: absolute;
    margin-top: 0.3rem;
    margin-left: -1.5rem;
}

.form-check-label {
    margin-bottom: 0;
    font-weight: normal;
}

.form-check-inline {
    display: inline-flex;
    align-items: center;
    padding-left: 0;
    margin-right: 0.75rem;
}

.form-check-inline .form-check-input {
    position: static;
    margin-top: 0;
    margin-right: 0.3rem;
    margin-left: 0;
}

/* ============================================
   FORM TEXT
   ============================================ */
.form-text {
    display: block;
    margin-top: 0.25rem;
    font-size: 0.875rem;
    color: var(--gray-600);
}

.form-text.text-muted {
    color: var(--gray-500);
}

/* ============================================
   VALIDATION STATES
   ============================================ */
.was-validated .form-control:valid,
.form-control.is-valid {
    border-color: var(--jam-success);
    padding-right: calc(1.5em + 0.75rem);
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right calc(0.375em + 0.1875rem) center;
    background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}

.was-validated .form-control:valid:focus,
.form-control.is-valid:focus {
    border-color: var(--jam-success);
    box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
}

.was-validated .form-control:invalid,
.form-control.is-invalid {
    border-color: var(--jam-danger);
    padding-right: calc(1.5em + 0.75rem);
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E");
    background-repeat: no-repeat;
    background-position: right calc(0.375em + 0.1875rem) center;
    background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}

.was-validated .form-control:invalid:focus,
.form-control.is-invalid:focus {
    border-color: var(--jam-danger);
    box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
}

.valid-feedback {
    display: none;
    width: 100%;
    margin-top: 0.25rem;
    font-size: 0.875rem;
    color: var(--jam-success);
}

.invalid-feedback {
    display: none;
    width: 100%;
    margin-top: 0.25rem;
    font-size: 0.875rem;
    color: var(--jam-danger);
}

.was-validated .form-control:valid ~ .valid-feedback,
.form-control.is-valid ~ .valid-feedback {
    display: block;
}

.was-validated .form-control:invalid ~ .invalid-feedback,
.form-control.is-invalid ~ .invalid-feedback {
    display: block;
}

/* ============================================
   INPUT GROUPS
   ============================================ */
.input-group {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    align-items: stretch;
    width: 100%;
}

.input-group > .form-control {
    position: relative;
    flex: 1 1 auto;
    width: 1%;
    min-width: 0;
    margin-bottom: 0;
}

.input-group-prepend,
.input-group-append {
    display: flex;
}

.input-group-prepend .input-group-text,
.input-group-append .input-group-text {
    padding: 0.5rem 0.75rem;
    margin-bottom: 0;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    color: var(--gray-700);
    text-align: center;
    white-space: nowrap;
    background-color: var(--gray-200);
    border: 1px solid var(--gray-400);
}

.input-group-prepend .input-group-text {
    border-right: 0;
    border-radius: var(--radius-md) 0 0 var(--radius-md);
}

.input-group-append .input-group-text {
    border-left: 0;
    border-radius: 0 var(--radius-md) var(--radius-md) 0;
}

.input-group > .form-control:not(:last-child) {
    border-top-right-radius: 0;
    border-bottom-right-radius: 0;
}

.input-group > .form-control:not(:first-child) {
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}

/* ============================================
   FORM ROW
   ============================================ */
.form-row {
    display: flex;
    flex-wrap: wrap;
    margin-right: -5px;
    margin-left: -5px;
}

.form-row > .col,
.form-row > [class*="col-"] {
    padding-right: 5px;
    padding-left: 5px;
}

/* ============================================
   CUSTOM FILE UPLOAD AREA
   ============================================ */
.file-upload-area {
    border: 2px dashed var(--gray-400);
    border-radius: var(--radius-lg);
    padding: var(--spacing-xl);
    text-align: center;
    background-color: var(--gray-100);
    transition: var(--transition-base);
    cursor: pointer;
}

.file-upload-area:hover {
    border-color: var(--jam-primary);
    background-color: rgba(74, 144, 226, 0.05);
}

.file-upload-area.drag-over {
    border-color: var(--jam-success);
    background-color: rgba(40, 167, 69, 0.05);
}

.file-upload-icon {
    font-size: 3rem;
    color: var(--gray-400);
    margin-bottom: var(--spacing-md);
}

.file-upload-text {
    color: var(--gray-600);
    margin-bottom: var(--spacing-sm);
}

.file-upload-hint {
    font-size: 0.875rem;
    color: var(--gray-500);
}

.file-list {
    margin-top: var(--spacing-md);
}

.file-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: var(--spacing-sm) var(--spacing-md);
    background-color: #fff;
    border: 1px solid var(--gray-300);
    border-radius: var(--radius-md);
    margin-bottom: var(--spacing-sm);
}

.file-item-info {
    display: flex;
    align-items: center;
    flex: 1;
}

.file-item-icon {
    margin-right: var(--spacing-sm);
    color: var(--jam-primary);
}

.file-item-name {
    font-weight: 500;
    color: var(--gray-900);
}

.file-item-size {
    font-size: 0.875rem;
    color: var(--gray-500);
    margin-left: var(--spacing-sm);
}

.file-item-remove {
    background: none;
    border: none;
    color: var(--jam-danger);
    cursor: pointer;
    padding: var(--spacing-sm);
    font-size: 1.25rem;
    transition: var(--transition-base);
}

.file-item-remove:hover {
    color: #bd2130;
}

/* ============================================
   PROGRESS BAR
   ============================================ */
.progress {
    display: flex;
    height: 1rem;
    overflow: hidden;
    font-size: 0.75rem;
    background-color: var(--gray-200);
    border-radius: var(--radius-md);
}

.progress-bar {
    display: flex;
    flex-direction: column;
    justify-content: center;
    overflow: hidden;
    color: #fff;
    text-align: center;
    white-space: nowrap;
    background-color: var(--jam-primary);
    transition: width 0.6s ease;
}

.progress-bar-striped {
    background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
    background-size: 1rem 1rem;
}

.progress-bar-animated {
    animation: progress-bar-stripes 1s linear infinite;
}

@keyframes progress-bar-stripes {
    from { background-position: 1rem 0; }
    to { background-position: 0 0; }
}

/* ============================================
   FORM WIZARD / STEPS
   ============================================ */
.form-wizard {
    margin-bottom: var(--spacing-lg);
}

.wizard-steps {
    display: flex;
    justify-content: space-between;
    margin-bottom: var(--spacing-xl);
    position: relative;
}

.wizard-steps::before {
    content: '';
    position: absolute;
    top: 20px;
    left: 0;
    right: 0;
    height: 2px;
    background-color: var(--gray-300);
    z-index: 0;
}

.wizard-step {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    flex: 1;
}

.wizard-step-number {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background-color: var(--gray-300);
    color: var(--gray-600);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    margin-bottom: var(--spacing-sm);
}

.wizard-step.active .wizard-step-number {
    background-color: var(--jam-primary);
    color: #fff;
}

.wizard-step.completed .wizard-step-number {
    background-color: var(--jam-success);
    color: #fff;
}

.wizard-step-title {
    font-size: 0.875rem;
    color: var(--gray-600);
    text-align: center;
}

.wizard-step.active .wizard-step-title {
    color: var(--jam-primary);
    font-weight: 600;
}

.wizard-step.completed .wizard-step-title {
    color: var(--jam-success);
}

/* ============================================
   RESPONSIVE
   ============================================ */
@media (max-width: 576px) {
    .wizard-steps {
        flex-direction: column;
    }

    .wizard-steps::before {
        display: none;
    }

    .wizard-step {
        flex-direction: row;
        justify-content: flex-start;
        margin-bottom: var(--spacing-md);
    }

    .wizard-step-number {
        margin-right: var(--spacing-md);
        margin-bottom: 0;
    }

    .wizard-step-title {
        text-align: left;
    }
}
