/* ============================================================
   FormFlow WP — Frontend Form Styles
   Se adapta al color del tema mediante custom properties.
   ============================================================ */

.ff-form-wrap {
    --ff-primary:    #2271b1;
    --ff-error:      #d63638;
    --ff-success:    #00a32a;
    --ff-border:     #c3c4c7;
    --ff-bg:         #f6f7f7;
    --ff-text:       #1d2327;
    --ff-label:      #1d2327;
    --ff-radius:     6px;
    --ff-input-h:    40px;
    font-family: inherit;
    color: var(--ff-text);
    max-width: 100%;
    padding: 28px 32px;
    border-radius: 8px;
    box-sizing: border-box;
}

/* ─── Grid de campos ─────────────────────────────────────── */
.ff-fields {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
}

.ff-field        { box-sizing: border-box; width: 100%; }
.ff-field--quarter       { width: calc(25% - 12px); }
.ff-field--half          { width: calc(50% - 8px); }
.ff-field--three-quarters { width: calc(75% - 4px); }
.ff-field--full          { width: 100%; }

@media (max-width: 600px) {
    .ff-field--quarter,
    .ff-field--half,
    .ff-field--three-quarters { width: 100%; }
}

/* ─── Lógica condicional ─────────────────────────────────── */
.ff-field--hidden {
    display: none !important;
}

/* ─── Etiquetas e inputs ─────────────────────────────────── */
.ff-label {
    display: block;
    font-size: 14px;
    font-weight: 600;
    color: var(--ff-label);
    margin-bottom: 6px;
}
.ff-required { color: var(--ff-error); margin-left: 2px; }

.ff-form-wrap .ff-input {
    display: block;
    width: 100%;
    height: var(--ff-input-h);
    padding: 0 12px;
    font-size: 15px;
    font-family: inherit;
    color: var(--ff-text);
    background: var(--ff-bg);
    border: 1px solid var(--ff-border);
    border-radius: var(--ff-radius);
    box-sizing: border-box;
    transition: border-color .2s, box-shadow .2s;
    appearance: none;
    -webkit-appearance: none;
}
.ff-form-wrap .ff-input:focus {
    outline: none;
    border-color: var(--ff-primary);
    box-shadow: 0 0 0 3px rgba(34, 113, 177, .15);
}
.ff-form-wrap textarea.ff-input {
    height: auto;
    padding: 10px 12px;
    resize: vertical;
    min-height: 100px;
}
.ff-form-wrap select.ff-input {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M6 8L0 0h12z' fill='%23646970'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 12px center;
    padding-right: 32px;
}
.ff-form-wrap .ff-input--file { height: auto; padding: 8px 12px; cursor: pointer; }

/* ─── Radio / Checkbox groups ────────────────────────────── */
.ff-radio-group,
.ff-checkbox-group {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.ff-radio-label,
.ff-checkbox-label {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 14px;
    cursor: pointer;
}
.ff-radio,
.ff-checkbox {
    width: 16px;
    height: 16px;
    accent-color: var(--ff-primary);
    flex-shrink: 0;
}

/* ─── Sección ────────────────────────────────────────────── */
.ff-section {
    border-bottom: 2px solid var(--ff-border);
    padding-bottom: 6px;
    width: 100%;
}
.ff-section__title {
    font-size: 18px;
    font-weight: 700;
    margin: 0 0 4px;
    color: var(--ff-text);
}
.ff-section__desc { margin: 0; color: #646970; font-size: 14px; }

/* ─── Error por campo ────────────────────────────────────── */
.ff-error {
    display: block;
    font-size: 12px;
    color: var(--ff-error);
    margin-top: 4px;
    min-height: 16px;
}
.ff-form-wrap .ff-field--error .ff-input,
.ff-form-wrap .ff-field--error select.ff-input,
.ff-form-wrap .ff-field--error textarea.ff-input {
    border-color: var(--ff-error);
    box-shadow: 0 0 0 3px rgba(214, 54, 56, .1);
}

/* ─── reCAPTCHA ─────────────────────────────────────────── */
.ff-recaptcha-wrap {
    margin-top: 16px;
}
.ff-recaptcha-error { margin-top: 6px; }

/* ─── Botón de envío ─────────────────────────────────────── */
.ff-submit-row {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 24px;
}
.ff-submit-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 10px 28px;
    font-size: 15px;
    font-weight: 600;
    font-family: inherit;
    color: #fff;
    background: var(--ff-primary);
    border: none;
    border-radius: var(--ff-radius);
    cursor: pointer;
    transition: background .2s, opacity .2s, transform .1s;
}
.ff-submit-btn:hover  { background: #135e96; }
.ff-submit-btn:active { transform: translateY(1px); }
.ff-submit-btn:disabled,
.ff-submit-btn--loading { opacity: .65; cursor: not-allowed; pointer-events: none; }

/* ─── Spinner ────────────────────────────────────────────── */
.ff-spinner {
    display: none;
    width: 20px;
    height: 20px;
    border: 2px solid var(--ff-border);
    border-top-color: var(--ff-primary);
    border-radius: 50%;
    animation: ff-spin .7s linear infinite;
}
@keyframes ff-spin { to { transform: rotate(360deg); } }

/* ─── Mensaje de éxito / error ───────────────────────────── */
.ff-message {
    margin-top: 16px;
    padding: 12px 16px;
    border-radius: var(--ff-radius);
    font-size: 14px;
    display: none;
}
.ff-message:not(:empty) { display: block; }
.ff-message--success {
    background: #edfaef;
    border: 1px solid #00a32a;
    color: #004b10;
}
.ff-message--error {
    background: #fceaea;
    border: 1px solid #d63638;
    color: #8a1214;
}

/* ─── Animaciones de campo en scroll ─────────────────────── */
@keyframes ff-fade-in {
    from { opacity: 0; }
    to   { opacity: 1; }
}
@keyframes ff-slide-in {
    from { opacity: 0; transform: translateY( 24px ); }
    to   { opacity: 1; transform: translateY( 0 ); }
}
@keyframes ff-expand-in {
    from { opacity: 0; transform: scaleX( 0 ); transform-origin: left center; }
    to   { opacity: 1; transform: scaleX( 1 ); transform-origin: left center; }
}
@keyframes ff-zoom-in {
    from { opacity: 0; transform: scale( 0.85 ); }
    to   { opacity: 1; transform: scale( 1 ); }
}

/* Estados iniciales: los campos están invisibles hasta que JS los active */
.ff-field--anim-fade,
.ff-field--anim-slide,
.ff-field--anim-expand,
.ff-field--anim-zoom {
    opacity: 0;
}

.ff-field--anim-fade.ff-field--visible {
    animation: ff-fade-in var(--ff-anim-speed, 400ms) ease both;
}
.ff-field--anim-slide.ff-field--visible {
    animation: ff-slide-in var(--ff-anim-speed, 400ms) ease both;
}
.ff-field--anim-expand.ff-field--visible {
    animation: ff-expand-in var(--ff-anim-speed, 400ms) ease both;
}
.ff-field--anim-zoom.ff-field--visible {
    animation: ff-zoom-in var(--ff-anim-speed, 400ms) ease both;
}
