/*
 * Form Styles - Consolidated
 * Uses OKLCH color system from _global.css
 * BEM naming convention
 */
@layer components {
  /* ===== Base Form Inputs ===== */

  input[type="text"],
  input[type="password"],
  input[type="email"],
  input[type="number"],
  input[type="tel"],
  input[type="url"],
  input[type="search"],
  input[type="time"],
  input[type="date"],
  input[type="datetime"],
  input[type="datetime-local"],
  input[type="month"],
  input[type="week"],
  input[type="color"],
  textarea,
  select {
    background-color: var(--input-bg-on-surface-1, var(--color-ink-lightest));
    border: 1px solid var(--input-border-on-surface-1, var(--color-ink-lighter));
    border-radius: 0.5rem;
    color: var(--color-ink);
    font-family: inherit;
    font-size: max(16px, var(--text-normal));
    padding: 0.75rem 1rem;
    width: 100%;

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

    &:hover {
      border-color: var(--color-ink-light);
    }

    &:focus {
      border-color: var(--color-link);
      outline: none;
      box-shadow: 0 0 0 2px oklch(var(--lch-blue-lighter));
    }

    &.outlined {
      border: 1px solid var(--color-ink-light);
      border-radius: 0.25rem;
      padding: var(--inline-space) var(--block-space);
    }
  }

  /* Custom checkbox styling */
  input[type="checkbox"] {
    appearance: none;
    background-color: var(--color-canvas);
    border: 2px solid var(--color-ink-lighter);
    border-radius: 0.125rem;
    cursor: pointer;
    height: 20px;
    position: relative;
    vertical-align: middle;
    width: 20px;

    &:checked {
      background: oklch(var(--lch-blue-dark));
      border-color: oklch(var(--lch-blue-dark));
    }

    &:checked::after {
      border: solid var(--color-white);
      border-width: 0 2px 2px 0;
      content: "";
      height: 10px;
      left: 6px;
      position: absolute;
      top: 2px;
      transform: rotate(45deg);
      width: 5px;
    }

    &:hover {
      border-color: var(--color-ink-light);
    }

    &:focus-visible {
      outline: var(--focus-ring);
      outline-offset: var(--focus-ring-offset);
    }
  }

  /* File input */
  input[type="file"] {
    align-items: center;
    border: 1px solid var(--color-ink-light);
    border-radius: 0.25rem;
    display: flex;
    padding: var(--block-space-half);

    &::file-selector-button {
      background-color: var(--color-ink-lighter);
      border: none;
      border-radius: 9999px;
      color: var(--color-ink);
      cursor: pointer;
      font-weight: 500;
      margin-right: 1rem;
      padding: 0.75rem 1rem;
      transition: background-color 150ms var(--ease-out-expo);
    }

    &::file-selector-button:hover {
      background-color: var(--color-ink-light);
    }
  }

  /* ===== Select Input ===== */

  .input-select,
  .form-select {
    appearance: none;
    background: var(--color-canvas);
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23666' d='M6 8L1 3h10z'/%3E%3C/svg%3E");
    background-position: right 0.75em center;
    background-repeat: no-repeat;
    border-radius: 0.25rem;
    padding: var(--inline-space);
    padding-inline-end: 2.5em;

    &.outlined {
      border: 1px solid var(--color-ink-light);
      border-radius: 0.5rem;
      padding: var(--inline-space) var(--block-space);
      padding-inline-end: 2.5em;
    }
  }

  /* Select Wrapper for custom dropdown icon */
  .select-wrapper {
    display: inline-block;
    position: relative;
    width: auto;

    .form-select {
      height: auto;
      min-width: 200px;
      padding-right: 2.5rem;
      width: 100%;
    }

    .form-select.outlined {
      border: 1px solid var(--color-ink-light);
      border-radius: 0.5rem;
      padding: 0.75rem 2.5rem 0.75rem 1rem;
    }

    .select-icon {
      color: var(--color-ink-dark);
      height: 16px;
      pointer-events: none;
      position: absolute;
      right: 0.75rem;
      top: 50%;
      transform: translateY(-50%);
      width: 16px;
    }
  }

  /* ===== Form Control Elements ===== */

  .form-label {
    color: var(--color-ink);
    display: block;
    font-weight: 500;
    margin-bottom: var(--inline-space);
  }

  .form-control {
    margin-bottom: var(--block-space);
  }

  .button_to {
    pointer-events: auto;
    position: relative;
  }

  .form-input {
    background: var(--input-bg-on-surface-1, var(--color-ink-lightest));
    border: 1px solid var(--input-border-on-surface-1, var(--color-ink-lighter));
    border-radius: 0.5rem;
    color: var(--color-ink);
    display: block;
    font-size: var(--text-normal);
    line-height: 1.5;
    padding: 0.75rem 1rem;
    transition: border-color 150ms var(--ease-out-expo),
                box-shadow 150ms var(--ease-out-expo);
    width: 100%;

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

    &:hover {
      border-color: var(--color-ink-light);
    }

    &:focus {
      border-color: var(--color-link);
      box-shadow: 0 0 0 2px oklch(var(--lch-blue-lighter));
      outline: none;
    }
  }

  .form-textarea {
    background: var(--input-bg-on-surface-1, var(--color-ink-lightest));
    border: 1px solid var(--input-border-on-surface-1, var(--color-ink-lighter));
    border-radius: 0.5rem;
    color: var(--color-ink);
    display: block;
    min-height: 100px;
    padding: 0.75rem 1rem;
    width: 100%;

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

    &:hover {
      border-color: var(--color-ink-light);
    }

    &:focus {
      border-color: var(--color-link);
      box-shadow: 0 0 0 2px oklch(var(--lch-blue-lighter));
      outline: none;
    }
  }

  .supporting-text {
    color: var(--color-ink-dark);
    display: block;
    font-size: var(--text-small);
    padding: 0 var(--inline-space);
  }

  /* ===== Form Layout Types ===== */

  /* Standard Form - Default layout for most forms */
  .standard-form {
    display: flex;
    flex-direction: column;
    gap: var(--block-space-double);
    width: 100%;

    .form-actions {
      border-top: 1px solid var(--color-ink-lighter);
      display: flex;
      gap: var(--block-space);
      justify-content: flex-end;
      margin-top: var(--block-space-double);
      padding-top: var(--block-space-double);
    }
  }

  /* Composer Form - For rich text editing */
  .composer-form {
    display: flex;
    flex-direction: column;
    width: 100%;

    trix-editor {
      border: 1px solid var(--color-ink-lighter);
      border-radius: 0.25rem;
      height: fit-content;
      max-height: 40vh;
      min-height: 24px;
      overflow-x: hidden;
      overflow-y: auto;
      padding: var(--block-space);
      resize: none;
      transition: height 100ms var(--ease-out-expo);

      &.full-height {
        height: 100%;
        max-height: 100%;
      }

      &:focus {
        border-color: var(--color-link);
        box-shadow: 0 0 0 2px oklch(var(--lch-blue-lighter));
        outline: none;
      }
    }

    .form-actions {
      display: flex;
      justify-content: flex-end;
      padding-top: var(--block-space);
    }
  }

  /* Modal Form - For forms in dialogs */
  .modal-form {
    display: flex;
    flex-direction: column;
    gap: var(--block-space-double);
    min-height: 200px;

    .form-actions {
      border-top: 1px solid var(--color-ink-lighter);
      display: flex;
      gap: var(--block-space);
      justify-content: flex-end;
      margin-top: auto;
      padding-top: var(--block-space-double);
    }
  }

  /* ===== Floating Placeholder ===== */

  .floating-placeholder {
    margin-block: var(--block-space-half);
    position: relative;
    width: 100%;

    label {
      color: var(--color-ink-dark);
      font-weight: normal;
      left: 0.5em;
      pointer-events: none;
      position: absolute;
      text-align: left;
      top: 1rem;
      transform-origin: 0 0;
      transition: transform 200ms cubic-bezier(0.2, 1.3, 0.7, 1);
      visibility: hidden;

      &:hover {
        cursor: text;
      }
    }

    input {
      background: var(--color-canvas);
      border: 1px solid var(--color-ink-light);
      border-radius: 0.25rem;
      color: var(--color-ink);
      padding-block: 1rem;
      padding-inline: var(--inline-space);
      width: 100%;

      &:not(:placeholder-shown) {
        padding-bottom: 0.4rem;
        padding-top: 1.6rem;

        + label {
          transform: scale(0.8) translate(0.2rem, -0.75rem);
          visibility: visible;
        }
      }

      &:focus {
        border-color: var(--color-link);
        box-shadow: 0 0 0 2px oklch(var(--lch-blue-lighter));
        outline: none;

        + label {
          color: var(--color-link);
          transform: scale(0.8) translate(0.2rem, -0.75rem);
          visibility: visible;
        }
      }
    }
  }

  /* ===== Form Validation & Errors ===== */

  .error-banner {
    background: oklch(var(--lch-red-lighter));
    border-radius: var(--inline-space-half);
    color: oklch(var(--lch-red-darkest));
    margin-bottom: var(--block-space-double);
    padding: var(--inline-space);
  }

  .error_explanation {
    background-color: oklch(var(--lch-red-lighter));
    border-radius: var(--inline-space);
    color: oklch(var(--lch-red-darkest));
    margin-bottom: var(--block-space-double);
    padding: var(--inline-space) var(--block-space);

    ul {
      color: oklch(var(--lch-red-darkest));
      margin: 0 0 var(--block-space-double) 0;
      padding-left: calc(var(--block-space) * 3);
    }
  }

  input.validation-error,
  textarea.validation-error,
  select.validation-error,
  .validation-error {
    border-color: var(--color-negative);
  }

  .field-error {
    color: var(--color-negative);
    font-size: var(--text-small);
    margin-top: var(--block-space-half);
  }
}
