/*
 * Nivio UI · controles nativos (casilla, opción, interruptor, selector).
 * Se escriben en CSS porque dibujan marcas internas (✓, punto, mando) que en utilidades
 * serían ilegibles. Todo valor sale de un token.
 */
@layer components {
  /* ---------- Casilla y opción ---------- */
  input[data-nv-check] {
    appearance: none;
    flex: none;
    display: inline-grid;
    place-content: center;
    width: 1.25rem;
    height: 1.25rem;
    margin-top: 0.125rem; /* centra ópticamente con la primera línea de 16/24 */
    border: 2px solid var(--nv-line-strong);
    border-radius: var(--nv-radius-sm);
    background-color: var(--nv-surface);
    transition:
      background-color var(--nv-duration-fast) var(--nv-ease-enter),
      border-color var(--nv-duration-fast) var(--nv-ease-enter);
  }

  input[data-nv-check][type='radio'] {
    border-radius: 9999px;
  }

  input[data-nv-check]:checked,
  input[data-nv-check][type='checkbox']:indeterminate {
    background-color: var(--nv-primary-ink);
    border-color: var(--nv-primary-ink);
  }

  input[data-nv-check][type='checkbox']:checked::before,
  input[data-nv-check][type='checkbox']:indeterminate::before {
    content: '';
    width: 0.75rem;
    height: 0.75rem;
    background-color: var(--nv-surface);
    clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
  }

  input[data-nv-check][type='checkbox']:indeterminate::before {
    clip-path: inset(40% 5% 40% 5%);
  }

  input[data-nv-check][type='radio']:checked::before {
    content: '';
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 9999px;
    background-color: var(--nv-surface);
  }

  input[data-nv-check][aria-invalid='true'] {
    border-color: var(--nv-danger);
  }

  input[data-nv-check]:disabled {
    opacity: 0.55;
    cursor: not-allowed;
  }

  /* Forced colors (alto contraste de Windows): la marca debe seguir viéndose. */
  @media (forced-colors: active) {
    input[data-nv-check] {
      appearance: auto;
    }
    input[data-nv-check]::before {
      display: none;
    }
  }

  /* ---------- Interruptor ---------- */
  input[data-nv-switch] {
    appearance: none;
    flex: none;
    position: relative;
    width: 2.75rem;
    height: 1.5rem;
    border-radius: 9999px;
    border: 2px solid var(--nv-line-strong);
    background-color: var(--nv-surface-sunken);
    transition: background-color var(--nv-duration-fast) var(--nv-ease-enter);
  }

  input[data-nv-switch]::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 0.125rem;
    width: 1rem;
    height: 1rem;
    border-radius: 9999px;
    background-color: var(--nv-fg-muted);
    transform: translateY(-50%);
    transition:
      transform var(--nv-duration-fast) var(--nv-ease-enter),
      background-color var(--nv-duration-fast) var(--nv-ease-enter);
  }

  input[data-nv-switch]:checked {
    background-color: var(--nv-primary-ink);
    border-color: var(--nv-primary-ink);
  }

  input[data-nv-switch]:checked::before {
    background-color: var(--nv-surface);
    transform: translate(1.25rem, -50%);
  }

  input[data-nv-switch]:disabled {
    opacity: 0.55;
    cursor: not-allowed;
  }

  @media (forced-colors: active) {
    input[data-nv-switch] {
      appearance: auto;
    }
    input[data-nv-switch]::before {
      display: none;
    }
  }

  /* ---------- Selector nativo ---------- */
  select[data-nv-select] {
    appearance: none;
    padding-inline-end: 2.5rem;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235B5E6A' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 0.75rem center;
    background-size: 1.25rem;
  }

  [data-theme='dark'] select[data-nv-select] {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A3A6B1' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
  }

  @media (prefers-color-scheme: dark) {
    :root:not([data-theme='light']) select[data-nv-select] {
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A3A6B1' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
    }
  }

  select[data-nv-select][multiple] {
    background-image: none;
    padding-inline-end: 0.75rem;
  }
}
