/**
 * Asterisco roxo em labels de campos obrigatórios (data-val-required, HTML5 required, aria-required).
 * Opt-out: classe .cp-no-required-mark no label ou no container pai.
 *
 * Importante: não usar :has(input[...]) em ancestrais genéricos — isso marca o primeiro label do bloco
 * mesmo quando o obrigatório é outro campo (ex.: coluna "Funcionário" ao lado de "Tipo").
 * Só consideramos controles filhos DIRETOS da coluna / .mb-3 / .cp-loja-form-field (e .input-group logo abaixo).
 */

:root {
  --cp-required-mark: var(--cui-primary, #5856d6);
}

.cp-loja-body {
  --cp-required-mark: #5856d6;
}

.cp-no-required-mark > label.form-label::after,
label.form-label.cp-no-required-mark::after,
.cp-no-required-mark label.form-label::after,
.cp-no-required-mark > label:not(.cp-loja-choice-item)::after,
label.cp-no-required-mark::after,
.cp-no-required-mark form.cp-loja-form > label::after {
  content: none !important;
}

/* ---- conteúdo do * (reutilizado nas regras abaixo) ---- */
label.form-label:not(.form-check-label):not(.cp-no-required-mark):is(
    :has(+ input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"])[data-val-required]),
    :has(+ input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"])[required]),
    :has(+ input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"])[aria-required="true"]),
    :has(+ select[data-val-required]),
    :has(+ select[required]),
    :has(+ select[aria-required="true"]),
    :has(+ textarea[data-val-required]),
    :has(+ textarea[required]),
    :has(+ textarea[aria-required="true"]),
    :has(+ .input-group input[data-val-required]),
    :has(+ .input-group input[required]),
    :has(+ .input-group select[data-val-required]),
    :has(+ .input-group textarea[data-val-required])
  )::after,
/* Coluna Bootstrap: obrigatório como filho direto OU dentro de .input-group filho direto */
[class*="col-"]:not(.cp-no-required-mark):is(
    :has(> input[data-val-required]),
    :has(> select[data-val-required]),
    :has(> textarea[data-val-required]),
    :has(> input[required]:not([type="hidden"]):not([type="checkbox"]):not([type="radio"])),
    :has(> select[required]),
    :has(> textarea[required]),
    :has(> input[aria-required="true"]:not([type="hidden"])),
    :has(> .input-group input[data-val-required]),
    :has(> .input-group input[required]),
    :has(> .input-group select[data-val-required]),
    :has(> .input-group textarea[data-val-required])
  )
  > label.form-label:first-of-type:not(.cp-no-required-mark)::after,
[class*="col-"]:not(.cp-no-required-mark):is(
    :has(> input[data-val-required]),
    :has(> select[data-val-required]),
    :has(> textarea[data-val-required]),
    :has(> input[required]:not([type="hidden"]):not([type="checkbox"]):not([type="radio"])),
    :has(> select[required]),
    :has(> textarea[required]),
    :has(> input[aria-required="true"]:not([type="hidden"])),
    :has(> .input-group input[data-val-required]),
    :has(> .input-group input[required]),
    :has(> .input-group select[data-val-required]),
    :has(> .input-group textarea[data-val-required])
  )
  > div:first-child label.form-label:first-of-type:not(.cp-no-required-mark)::after,
.mb-3:not(.cp-no-required-mark):is(
    :has(> input[data-val-required]),
    :has(> select[data-val-required]),
    :has(> textarea[data-val-required]),
    :has(> input[required]:not([type="hidden"]):not([type="checkbox"]):not([type="radio"])),
    :has(> select[required]),
    :has(> textarea[required]),
    :has(> input[aria-required="true"]:not([type="hidden"])),
    :has(> .input-group input[data-val-required]),
    :has(> .input-group input[required]),
    :has(> .input-group select[data-val-required]),
    :has(> .input-group textarea[data-val-required])
  )
  > label.form-label:first-of-type:not(.cp-no-required-mark)::after,
.mb-3:not(.cp-no-required-mark):is(
    :has(> input[data-val-required]),
    :has(> select[data-val-required]),
    :has(> textarea[data-val-required]),
    :has(> input[required]:not([type="hidden"]):not([type="checkbox"]):not([type="radio"])),
    :has(> select[required]),
    :has(> textarea[required]),
    :has(> input[aria-required="true"]:not([type="hidden"])),
    :has(> .input-group input[data-val-required]),
    :has(> .input-group input[required]),
    :has(> .input-group select[data-val-required]),
    :has(> .input-group textarea[data-val-required])
  )
  > div:first-child label.form-label:first-of-type:not(.cp-no-required-mark)::after,
.cp-loja-form-field:not(.cp-no-required-mark):is(
    :has(> input[data-val-required]),
    :has(> select[data-val-required]),
    :has(> textarea[data-val-required]),
    :has(> input[required]:not([type="hidden"]):not([type="checkbox"]):not([type="radio"])),
    :has(> select[required]),
    :has(> textarea[required]),
    :has(> input[aria-required="true"]:not([type="hidden"])),
    :has(> .input-group input[data-val-required]),
    :has(> .input-group input[required]),
    :has(> .input-group select[data-val-required]),
    :has(> .input-group textarea[data-val-required])
  )
  > label:not(.cp-loja-choice-item):first-of-type:not(.cp-no-required-mark)::after,
/* Radios obrigatórios (checkout): inputs ficam dentro de .cp-loja-choice-row, não como filhos diretos */
.cp-loja-form-field:not(.cp-no-required-mark):has(input[type="radio"][data-val-required])
  > label:not(.cp-loja-choice-item):first-of-type:not(.cp-no-required-mark)::after,
form.cp-loja-form
  > label:not(.cp-loja-choice-item):not(.cp-no-required-mark):is(
    :has(+ input[data-val-required]),
    :has(+ input[required]),
    :has(+ select[data-val-required]),
    :has(+ select[required]),
    :has(+ textarea[data-val-required]),
    :has(+ textarea[required])
  )::after {
  content: "\00a0*";
  font-weight: 700;
  color: var(--cp-required-mark);
  margin-left: 0.2em;
  white-space: nowrap;
}
