/* ===========================================================================
   FORMS — Grace City Church Learning Center
   Builds on Bootstrap + bootstrap_override.css.
   Handles structural patterns, states, and UX polish.
   =========================================================================== */

/* ---------------------------------------------------------------------------
   FORM SECTION — visually grouped block of fields
   Usage: <div class="form-section">…</div>
   --------------------------------------------------------------------------- */
.form-section {
  padding: 1.5rem;
  border-radius: var(--bs-border-radius-lg);
  background: var(--color-bg-card);
  border: 1px solid var(--color-border);
  margin-bottom: 1.5rem;
}

.form-section-title {
  font-size: 0.75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--color-text-muted);
  margin-bottom: 1rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid var(--color-border);
}

/* ---------------------------------------------------------------------------
   FORM STACK — consistent vertical spacing between field groups
   Usage: <div class="form-stack">…</div>
   --------------------------------------------------------------------------- */
.form-stack {
  display: flex;
  flex-direction: column;
  gap: 1.25rem;
}

/* ---------------------------------------------------------------------------
   FORM LABEL — small-cap style variant
   Usage: add .form-label-sm to a <label>
   --------------------------------------------------------------------------- */
.form-label {
  font-weight: 600;
  font-size: 0.875rem;
  margin-bottom: 0.375rem;
}

.form-label-sm {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-text-muted);
}

/* Required asterisk — add .form-required to the <label> */
.form-required::after {
  content: " *";
  color: var(--color-rust-500);
  font-weight: 700;
}

/* ---------------------------------------------------------------------------
   INPUTS & TEXTAREAS — sizing and polish
   --------------------------------------------------------------------------- */
.form-control,
.form-select {
  font-size: 0.9375rem;
  padding: 0.5rem 0.75rem;
  border-radius: var(--bs-border-radius);
  transition: border-color 0.15s ease, box-shadow 0.15s ease, background-color 0.15s ease;
  background-color: var(--color-bg-card);
  color: var(--color-text);
}

/* Ensure text stays visible on focus/active — Bootstrap can override these */
.form-control:focus,
.form-control:active,
.form-select:focus,
.form-select:active {
  background-color: var(--color-bg-card);
  color: var(--color-text);
}

.form-control::placeholder {
  color: var(--color-text-muted);
  opacity: 1; /* Firefox reduces opacity by default */
}

/* Sharpen placeholder slightly on focus so it's still legible as a hint */
.form-control:focus::placeholder {
  opacity: 0.6;
}

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

/* Larger comfortable size for main content areas */
.form-control-lg,
.form-select-lg {
  font-size: 1rem;
  padding: 0.625rem 1rem;
}

/* ---------------------------------------------------------------------------
   INPUT GROUP WITH ICON
   Tightens the border radi so icons and inputs feel fused
   --------------------------------------------------------------------------- */
.input-group > .input-group-text {
  background-color: var(--color-cream-100);
  border-color: var(--color-border);
  color: var(--color-text-muted);
}

.input-group > .form-control:not(:first-child),
.input-group > .form-select:not(:first-child) {
  border-left: none;
}

.input-group > .form-control:not(:last-child),
.input-group > .form-select:not(:last-child) {
  border-right: none;
}

.input-group:focus-within .input-group-text {
  border-color: var(--color-rust-400);
}

/* ---------------------------------------------------------------------------
   VALIDATION STATES
   --------------------------------------------------------------------------- */

/* Valid */
.form-control.is-valid,
.form-select.is-valid {
  border-color: #198754;
  background-image: none; /* remove Bootstrap's default checkmark icon */
}
.form-control.is-valid:focus,
.form-select.is-valid:focus {
  border-color: #198754;
  box-shadow: 0 0 0 3px rgba(25, 135, 84, 0.2);
}
.valid-feedback {
  font-size: 0.8125rem;
  color: #198754;
}

/* Invalid */
.form-control.is-invalid,
.form-select.is-invalid {
  border-color: #dc3545;
  background-image: none;
}
.form-control.is-invalid:focus,
.form-select.is-invalid:focus {
  border-color: #dc3545;
  box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.2);
}
.invalid-feedback {
  font-size: 0.8125rem;
}

/* ---------------------------------------------------------------------------
   CHARACTER COUNTER
   Usage: <small class="form-char-count">0 / 200</small>
   --------------------------------------------------------------------------- */
.form-char-count {
  display: block;
  text-align: right;
  font-size: 0.75rem;
  color: var(--color-text-muted);
  margin-top: 0.25rem;
}

.form-char-count.is-near-limit {
  color: var(--color-rust-500);
  font-weight: 600;
}

.form-char-count.is-at-limit {
  color: #dc3545;
  font-weight: 700;
}

/* ---------------------------------------------------------------------------
   FORM HINT / HELP TEXT
   --------------------------------------------------------------------------- */
.form-text {
  font-size: 0.8125rem;
  margin-top: 0.3rem;
  display: block;
}

/* ---------------------------------------------------------------------------
   FORM DIVIDER — horizontal rule with optional label
   Usage: <div class="form-divider">or</div>
   --------------------------------------------------------------------------- */
.form-divider {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  color: var(--color-text-muted);
  font-size: 0.8125rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin: 1.5rem 0;
}

.form-divider::before,
.form-divider::after {
  content: "";
  flex: 1;
  height: 1px;
  background: var(--color-border);
}

/* ---------------------------------------------------------------------------
   SUBMIT ROW — action button area at the bottom of a form
   Usage: <div class="form-actions">…</div>
   --------------------------------------------------------------------------- */
.form-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  padding-top: 0.5rem;
}

.form-actions .btn {
  min-width: 8rem;
}

/* On small screens, stack buttons full-width */
@media (max-width: 575px) {
  .form-actions {
    flex-direction: column;
  }
  .form-actions .btn {
    width: 100%;
  }
}

/* ---------------------------------------------------------------------------
   FORM CARD — full self-contained form in a card shell
   Usage: <div class="form-card"><div class="form-card-body">…</div></div>
   --------------------------------------------------------------------------- */
.form-card {
  border: none;
  border-radius: var(--bs-border-radius-lg);
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.07);
  background: var(--color-bg-card);
}

.form-card-body {
  padding: 2rem;
}

@media (max-width: 575px) {
  .form-card-body {
    padding: 1.25rem;
  }
}

/* ---------------------------------------------------------------------------
   DARK MODE
   --------------------------------------------------------------------------- */
@media (prefers-color-scheme: dark) {
  .form-section {
    background: var(--color-charcoal-800);
    border-color: var(--color-charcoal-700);
  }

  /* Force dark background + light text on all input states in dark mode */
  .form-control,
  .form-select {
    background-color: var(--color-charcoal-800);
    border-color: var(--color-charcoal-600);
    color: var(--color-cream-100);
  }

  .form-control:focus,
  .form-control:active,
  .form-select:focus,
  .form-select:active {
    background-color: var(--color-charcoal-800);
    color: var(--color-cream-100);
  }

  .form-control::placeholder {
    color: var(--color-charcoal-400);
  }

  .input-group > .input-group-text {
    background-color: var(--color-charcoal-700);
    border-color: var(--color-charcoal-600);
    color: var(--color-cream-400);
  }

  .form-card {
    background: var(--color-charcoal-900);
  }

  .form-divider::before,
  .form-divider::after {
    background: var(--color-charcoal-700);
  }
}
