/*
 * Forms
 * Form elements and authentication forms
 */

@layer components {
  /* ═══════════════════════════════════════════════════════════════════════════
     FORM
     ═══════════════════════════════════════════════════════════════════════════ */

  .form {
    display: flex;
    flex-direction: column;
    gap: var(--space-6);
  }

  .form__field {
    display: flex;
    flex-direction: column;
    gap: var(--space-2);
  }

  .form__label {
    font-size: var(--text-small);
    font-weight: var(--weight-medium);
    color: var(--color-ink);
  }

  .form__input {
    --input-background: var(--color-canvas-raised);
    --input-border-color: var(--color-border);
    --input-padding: 0.75em 1em;

    background-color: var(--input-background);
    border: 1px solid var(--input-border-color);
    border-radius: var(--radius-md);
    color: var(--color-ink);
    font-size: var(--text-normal);
    inline-size: 100%;
    padding: var(--input-padding);
    transition: border-color var(--duration-fast), box-shadow var(--duration-fast);

    &::placeholder {
      color: var(--color-ink-faint);
    }

    &:focus {
      --input-border-color: var(--color-primary);
      outline: none;
      box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-primary) 15%, transparent);
    }

    &:disabled {
      opacity: 0.5;
      cursor: not-allowed;
    }
  }

  .form__actions {
    margin-block-start: var(--space-2);
  }

  .form__errors {
    background-color: color-mix(in srgb, var(--color-negative) 10%, var(--color-canvas));
    border: 1px solid color-mix(in srgb, var(--color-negative) 30%, transparent);
    border-radius: var(--radius-md);
    color: var(--color-negative);
    font-size: var(--text-small);
    padding: var(--space-4);

    p {
      font-weight: var(--weight-medium);
      margin-block-end: var(--space-2);
    }

    ul {
      margin: 0;
      padding-inline-start: var(--space-4);
      list-style: disc;
    }

    li {
      margin-block-end: var(--space-1);
    }
  }

  /* ═══════════════════════════════════════════════════════════════════════════
     AUTH FORM
     Centered form for sign in, sign up, password reset
     ═══════════════════════════════════════════════════════════════════════════ */

  .auth-form {
    background-color: var(--color-canvas-raised);
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-lg);
    padding: var(--space-8);
    box-shadow: var(--shadow-sm);
  }

  .auth-form__title {
    font-size: var(--text-x-large);
    font-weight: var(--weight-medium);
    color: var(--color-ink);
    margin-block-end: var(--space-2);
  }

  .auth-form__subtitle {
    font-size: var(--text-small);
    color: var(--color-ink-muted);
    margin-block-end: var(--space-6);
  }

  .auth-form__footer {
    font-size: var(--text-small);
    color: var(--color-ink-muted);
    text-align: center;
    margin-block-start: var(--space-4);

    a {
      color: var(--color-primary);
      text-decoration: none;

      &:hover {
        text-decoration: underline;
      }
    }
  }

  .auth-form__divider {
    display: flex;
    align-items: center;
    gap: var(--space-4);
    margin-block: var(--space-6);
    color: var(--color-ink-faint);
    font-size: var(--text-small);

    &::before,
    &::after {
      content: "";
      flex: 1;
      block-size: 1px;
      background-color: var(--color-border);
    }
  }

  /* ═══════════════════════════════════════════════════════════════════════════
     FLASH MESSAGES
     ═══════════════════════════════════════════════════════════════════════════ */

  .flash {
    border-radius: var(--radius-md);
    font-size: var(--text-small);
    padding: var(--space-3) var(--space-4);
    margin-block-end: var(--space-4);
  }

  .flash--alert {
    background-color: color-mix(in srgb, var(--color-negative) 10%, var(--color-canvas));
    border: 1px solid color-mix(in srgb, var(--color-negative) 30%, transparent);
    color: var(--color-negative);
  }

  .flash--notice {
    background-color: color-mix(in srgb, var(--color-positive) 10%, var(--color-canvas));
    border: 1px solid color-mix(in srgb, var(--color-positive) 30%, transparent);
    color: var(--color-positive);
  }
}

