/*
  Wortic macOS UI Kit — Select / PopUp Button
  wm-select — envelope estilizado ao redor de <select> nativo.
  Superfície branca elevada como o botão padrão do macOS, com o par de
  chevrons dentro de uma cápsula de accent (assinatura dos pop-ups nativos).
*/

@layer components {
  .wm-select {
    position: relative;
    display: inline-flex;
    align-items: center;
  }

  /* O select nasce inline-flex e encolhe até o conteúdo. Num formulário
     em coluna isso deixa a fileira de campos desalinhada, e a saída em
     uso era style="width:220px" na página de demonstração — valor
     mágico, justo o que o contrato proíbe. --block resolve pelo kit: o
     envelope acompanha a largura do pai, e o __control, que já é
     width:100%, acompanha o envelope. */
  .wm-select--block {
    display: flex;
    width: 100%;
  }

  .wm-select__control {
    --_elev: 0 0 0 0.5px light-dark(rgba(0, 0, 0, 0.13), rgba(255, 255, 255, 0.14)),
      inset 0 1px 0 light-dark(rgba(255, 255, 255, 0.72), rgba(255, 255, 255, 0.1)),
      0 1px 1px light-dark(rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.26)),
      0 2px 6px -2px light-dark(rgba(0, 0, 0, 0.08), rgba(0, 0, 0, 0.3));

    appearance: none;
    -webkit-appearance: none;
    width: 100%;
    height: var(--wm-control-height-md);
    padding-inline: var(--wm-space-6);
    padding-inline-end: var(--wm-space-11);
    border-radius: var(--wm-radius-sm);
    border: none;
    /* fallback para engines sem light-dark() */
    background: var(--wm-surface-primary);
    background: linear-gradient(
      180deg,
      var(--wm-control-face-top),
      var(--wm-control-face-bottom)
    );
    box-shadow: var(--_elev);
    color: var(--wm-label-primary);
    font-family: var(--wm-font-family);
    font-size: var(--wm-font-size-body);
    font-weight: var(--wm-font-weight-medium);
    letter-spacing: var(--wm-letter-spacing-tight);
    cursor: pointer;
    transition: box-shadow var(--wm-duration-fast) var(--wm-ease-standard),
      background var(--wm-duration-fast) var(--wm-ease-standard);
  }

  .wm-select__control:hover {
    background: linear-gradient(
      180deg,
      var(--wm-control-face-top-hover),
      var(--wm-control-face-bottom-hover)
    );
    --_elev: 0 0 0 0.5px light-dark(rgba(0, 0, 0, 0.13), rgba(255, 255, 255, 0.16)),
      inset 0 1px 0 light-dark(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.12)),
      0 1px 2px light-dark(rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.28)),
      0 4px 10px -3px light-dark(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.34));
  }

  .wm-select__control:focus-visible {
    outline: 2px solid var(--wm-accent);
    outline-offset: var(--wm-focus-ring-offset);
    box-shadow: var(--_elev), 0 0 0 var(--wm-focus-halo-width) var(--wm-accent-fill);
  }

  /* Inválido: o campo precisa dizer que o erro é DELE. A mensagem
     vermelha embaixo não basta — num formulário de seis campos, quem lê
     a mensagem ainda tem que descobrir de quem ela é, e quem usa zoom
     alto talvez nem veja os dois ao mesmo tempo. Espelha o anel de 1px
     que o text-field já usa em .wm-field--invalid, para os dois campos
     errarem igual. Dispara pelo aria-invalid, e não por uma classe
     paralela: assim o sinal visual e o que o leitor de tela anuncia
     nunca saem de sincronia. */
  .wm-select__control[aria-invalid="true"] {
    --_elev: 0 0 0 1px var(--wm-error),
      inset 0 1px 0 light-dark(rgba(255, 255, 255, 0.72), rgba(255, 255, 255, 0.1)),
      0 1px 1px light-dark(rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.26));
  }
  .wm-select__control[aria-invalid="true"]:focus-visible {
    outline-color: var(--wm-error);
    box-shadow: var(--_elev), 0 0 0 var(--wm-focus-halo-width) var(--wm-error-fill);
  }

  /* Disabled trabalhado: sem opacity genérica */
  .wm-select__control:disabled {
    cursor: not-allowed;
    color: var(--wm-label-tertiary);
    background: var(--wm-fill-tertiary);
    box-shadow: 0 0 0 0.5px light-dark(rgba(0, 0, 0, 0.06), rgba(255, 255, 255, 0.06));
  }

  /* Cápsula de accent com os chevrons — assinatura do pop-up nativo */
  .wm-select__icon {
    position: absolute;
    right: 6px;
    top: 50%;
    transform: translateY(-50%);
    width: 16px;
    height: 16px;
    padding: 3px;
    border-radius: var(--wm-radius-xs);
    color: var(--wm-label-on-accent);
    background: var(--wm-accent);
    background: linear-gradient(
      180deg,
      color-mix(in srgb, var(--wm-accent), #ffffff 14%),
      var(--wm-accent)
    );
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22),
      0 0.5px 1.5px color-mix(in srgb, var(--wm-accent) 40%, transparent);
    pointer-events: none;
  }
  .wm-select:has(.wm-select__control:disabled) .wm-select__icon {
    background: var(--wm-fill-primary);
    color: var(--wm-label-tertiary);
    box-shadow: none;
  }

  /* PopUp Button — variante borderless, usada em toolbars/settings rows */
  .wm-select--popup .wm-select__control {
    background: transparent;
    box-shadow: none;
    --_elev: none;
    padding-inline-start: var(--wm-space-3);
    padding-inline-end: var(--wm-space-10);
    font-weight: var(--wm-font-weight-medium);
    color: var(--wm-accent);
  }
  .wm-select--popup .wm-select__control:hover {
    background: var(--wm-fill-secondary);
  }
  .wm-select--popup .wm-select__control:focus-visible {
    box-shadow: 0 0 0 var(--wm-focus-halo-width) var(--wm-accent-fill);
  }
  .wm-select--popup .wm-select__icon {
    background: none;
    box-shadow: none;
    padding: 0;
    width: 14px;
    height: 14px;
    border-radius: 0;
    color: var(--wm-accent);
  }

  .wm-select--small .wm-select__control {
    height: var(--wm-control-height-sm);
    font-size: var(--wm-font-size-subheadline);
    padding-inline: var(--wm-space-4);
    padding-inline-end: var(--wm-space-10);
    border-radius: var(--wm-radius-xs);
  }
  .wm-select--small .wm-select__icon {
    width: 14px;
    height: 14px;
    padding: 3px;
    border-radius: 4px;
    right: 5px;
  }

  @media (prefers-reduced-motion: reduce) {
    .wm-select__control {
      transition: none;
    }
  }
}
