/* ==========================================================================
   Forms — Sections, labels, inputs, counters, hints, slug preview
   Layer 5 — Component (requires tokens.css, base.css)
   /css/admin/forms.css

   Purpose: Shared form styling for the admin panel — create/edit gallery,
   model editor, settings, and any future form views.
   ========================================================================== */

/* ==========================================================================
   1. Form Sections
   ========================================================================== */

.form-section {
    background: var(--color-bg-surface);
    padding: var(--spacing-6);
    border-radius: var(--radius-xl); /* prefer xl over lg for a softer look */
    margin-bottom: var(--spacing-6);
    box-shadow: var(--shadow-sm);
    /* border removed; do not add it again  */
}

.form-section h2 {
    margin: 0 0 var(--spacing-5) 0;
    font-size: var(--text-lg);
    font-weight: var(--font-semibold);
    color: var(--color-text-bright);
}

/* Section header with actions */
.section-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: var(--spacing-5);
}

.section-header h2 {
    margin: 0;
}

/* ==========================================================================
   2. Form Groups with Character Counter
   ========================================================================== */

.form-group {
    margin-bottom: var(--spacing-5);
}

.form-group:last-child {
    margin-bottom: 0;
}

/* Label row with counter */
.label-row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: var(--spacing-1);
}

.form-label {
    display: block;
    font-weight: var(--font-medium);
    font-size: var(--text-sm);
    color: var(--color-text-secondary);
}

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

/* --- Character counter --- */

.char-counter {
    font-size: var(--text-xs);
    color: var(--color-text-muted);
    font-weight: var(--font-normal);
    transition: color var(--transition-fast);
}

.char-counter-current {
    font-weight: var(--font-semibold);
}

/* Counter states */
.char-counter.is-short  { color: var(--color-warning); }
.char-counter.is-optimal { color: var(--color-success); }
.char-counter.is-long   { color: var(--color-danger); }

/* Optimal indicator */
.char-counter .optimal-badge {
    display: inline-block;
    margin-left: var(--spacing-1);
    font-size: var(--text-2xs);
}

/* ==========================================================================
   3. Input Fields
   ========================================================================== */

.form-input,
.form-textarea {
    width: 100%;
    padding: var(--spacing-2) var(--spacing-3);
    font-size: var(--text-sm);
    line-height: var(--leading-normal);
    color: var(--color-text-bright);
    background: var(--color-bg-input);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    transition: border-color var(--transition-fast),
    box-shadow var(--transition-fast);
}

.form-input:hover,
.form-textarea:hover {
    border-color: var(--color-border-hover);
}

.form-input:focus,
.form-textarea:focus {
    outline: none;
    border-color: var(--color-accent);
    box-shadow: var(--shadow-ring-accent);
}

.form-input::placeholder,
.form-textarea::placeholder {
    color: var(--color-text-placeholder);
}

/* --- Validation states (character count driven) --- */

.form-input.is-short,
.form-textarea.is-short {
    border-color: var(--color-warning);
}

.form-input.is-short:focus,
.form-textarea.is-short:focus {
    box-shadow: var(--shadow-ring-warning);
}

.form-input.is-optimal,
.form-textarea.is-optimal {
    border-color: var(--color-success-emphasis);
}

.form-input.is-optimal:focus,
.form-textarea.is-optimal:focus {
    box-shadow: var(--shadow-ring-success);
}

.form-input.is-long,
.form-textarea.is-long {
    border-color: var(--color-danger-emphasis);
}

.form-input.is-long:focus,
.form-textarea.is-long:focus {
    box-shadow: var(--shadow-ring-danger);
}

/* Textarea specific */
.form-textarea {
    min-height: 100px;
    resize: vertical;
}

/* ==========================================================================
   4. Help Text / SEO Hint
   ========================================================================== */

.form-hint {
    margin-top: var(--spacing-1);
    font-size: var(--text-xs);
    color: var(--color-text-muted);
}

.form-hint-icon {
    margin-right: var(--spacing-1);
}

/* ==========================================================================
   5. Form Actions
   ========================================================================== */

.form-actions {
    margin-top: var(--spacing-6);
}

/* ==========================================================================
   6. Form Row
   2026-04-05: added .form-row — inline form layout for label+input+button
   patterns (api-feeds generate token, sidebar-links add section)
   ========================================================================== */

.form-row {
    display: flex;
    gap: var(--spacing-3);
    flex-wrap: wrap;
    align-items: flex-end;
}

.form-row .form-group {
    flex: 1;
    min-width: 200px;
    margin-bottom: 0;
}

/* ==========================================================================
   7. Section Note
   Descriptive text beneath a section header — larger than form-hint,
   intended for instructional copy inside .form-section blocks.
   ========================================================================== */

.section-note {
    margin-bottom: var(--spacing-4);
    font-size: var(--text-sm);
    color: var(--color-text-muted);
}

/* ==========================================================================
   8. Slug Preview
   ========================================================================== */

.slug-preview {
    margin-top: calc(-1 * var(--spacing-3));
    margin-bottom: var(--spacing-5);
    font-size: var(--text-xs);
    color: var(--color-text-muted);
}

.slug-preview code {
    background: var(--color-bg-input);
    padding: var(--spacing-px) var(--spacing-2);
    border-radius: var(--radius-sm);
    font-family: var(--font-family-mono), monospace;
    font-size: var(--text-xs);
    color: var(--color-accent-light);
}

.slug-locked {
    color: var(--color-danger);
    font-weight: var(--font-medium);
    margin-left: var(--spacing-2);
}

.slug-hint {
    color: var(--color-warning);
    margin-left: var(--spacing-2);
}