/* ============================================================
   Clarix — Componentes Base do Design System
   ----
   Componentes baixo-nível consumidos por todas as views do
   Clarix. Todos dependem dos tokens definidos em
   `clarix-tokens.css` (importar ANTES deste arquivo).

   Histórico:
     Sessão 62.D (2026-04-18) — fundação: btn, alert, modal, badge, input
     Sessão 62.E (2026-04-20) — card, empty-state, table + migração de
                                 Convênio, Modalidade, Template,
                                 MédicoSolicitante para `.clx-*`.

   Convenção de nome: BEM-lite com prefixo `clx-`.
       .clx-btn                    → bloco
       .clx-btn-primary            → modificador (variante)
       .clx-btn-sm                 → modificador (tamanho)
       .clx-modal__head            → elemento (duplo underscore)

   Catálogo:
       1. Buttons     — .clx-btn + variantes/tamanhos/estados
       2. Alerts      — .clx-alert + variantes + dismiss
       3. Modal       — .clx-modal + backdrop + head/body/foot + animação
       4. Badge       — .clx-badge + variantes semânticas + tamanhos
       5. Input       — .clx-input / .clx-field / .clx-label / .clx-help / .clx-input-group
       6. Card        — .clx-card + head/body/foot + variantes + grid/stack
       7. Empty State — .clx-empty-state + variantes + tamanhos
       8. Table       — .clx-table + .clx-table-wrap + modificadores + estados
       9. Utilities   — page-header__subtitle, .clx-code, .clx-text-*, helpers

   A11y (focus-visible + contraste + ARIA) e dark mode são 62.F.
   ============================================================ */

/* ============================================================
   1. BUTTONS — `.clx-btn`
   ------------------------------------------------------------
   Variantes:
       .clx-btn-primary    — ação principal (brand cyan, ink navy)
       .clx-btn-secondary  — ação secundária (border)
       .clx-btn-ghost      — ação terciária (transparente, hover surface)
       .clx-btn-danger     — ação destrutiva (vermelho)

   Tamanhos:
       .clx-btn-sm    32px / --clx-fs-sm
       (default)      40px / --clx-fs-base
       .clx-btn-lg    48px / --clx-fs-lg

   Estados:
       :hover, :focus-visible, :active, :disabled, .is-loading
   ============================================================ */

.clx-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--clx-space-2);
    min-height: 2.5rem;                       /* 40px */
    padding: 0 var(--clx-space-4);
    border: 1px solid transparent;
    border-radius: var(--clx-radius-md);
    font-family: var(--clx-font-sans);
    font-size: var(--clx-fs-base);
    font-weight: var(--clx-fw-semi);
    line-height: 1;
    letter-spacing: .01em;
    text-decoration: none;
    cursor: pointer;
    transition: background-color var(--clx-dur-fast) var(--clx-ease),
                border-color var(--clx-dur-fast) var(--clx-ease),
                color var(--clx-dur-fast) var(--clx-ease),
                box-shadow var(--clx-dur-fast) var(--clx-ease),
                transform var(--clx-dur-fast) var(--clx-ease);
    user-select: none;
    white-space: nowrap;
}
.clx-btn:focus-visible {
    outline: none;
    box-shadow: var(--clx-shadow-focus);
}
.clx-btn:active:not(:disabled):not(.is-loading) {
    transform: translateY(1px);
}
.clx-btn:disabled,
.clx-btn.is-disabled {
    cursor: not-allowed;
    opacity: .55;
    pointer-events: none;
}

/* Tamanhos ---------------------------------------------------- */
.clx-btn-sm  { min-height: 2rem;   padding: 0 var(--clx-space-3); font-size: var(--clx-fs-sm); }
.clx-btn-lg  { min-height: 3rem;   padding: 0 var(--clx-space-5); font-size: var(--clx-fs-lg); }
.clx-btn-block { width: 100%; }

/* Variantes --------------------------------------------------- */
.clx-btn-primary {
    background: var(--clarix-cyan);
    color: var(--clx-accent-ink);
    border-color: var(--clarix-cyan);
}
.clx-btn-primary:hover:not(:disabled):not(.is-loading) {
    background: var(--clarix-cyan-ink);
    border-color: var(--clarix-cyan-ink);
    color: #fff;
}

.clx-btn-secondary {
    background: var(--clx-surface);
    color: var(--clx-text);
    border-color: var(--clx-border-hover);
}
.clx-btn-secondary:hover:not(:disabled):not(.is-loading) {
    background: var(--clx-neutral-100);
    border-color: var(--clx-neutral-500);
}

.clx-btn-ghost {
    background: transparent;
    color: var(--clx-text);
    border-color: transparent;
}
.clx-btn-ghost:hover:not(:disabled):not(.is-loading) {
    background: var(--clx-neutral-100);
    color: var(--clx-text);
}

.clx-btn-danger {
    background: var(--clx-danger-500);
    color: #fff;
    border-color: var(--clx-danger-500);
}
.clx-btn-danger:hover:not(:disabled):not(.is-loading) {
    background: var(--clx-danger-700);
    border-color: var(--clx-danger-700);
}
.clx-btn-danger:focus-visible {
    box-shadow: 0 0 0 3px rgba(239, 68, 68, .28);
}

/* .clx-btn-success — ação afirmativa (ex.: "Finalizar exame", "Iniciar exame")
   Adicionado na Sessão 62.F.3 para substituir botões verdes legados (.btn-success)
   na /Recepcao. Em dark, a shade --clx-success-500 fica mais clara (#22c55e→#4ade80);
   o contraste de text #fff continua AA em ambos. */
.clx-btn-success {
    background: var(--clx-success-500);
    color: #fff;
    border-color: var(--clx-success-500);
}
.clx-btn-success:hover:not(:disabled):not(.is-loading) {
    background: var(--clx-success-700);
    border-color: var(--clx-success-700);
    color: #fff;
}
.clx-btn-success:focus-visible {
    box-shadow: 0 0 0 3px rgba(34, 197, 94, .28);
}
html[data-theme="dark"] .clx-btn-success {
    /* Em dark, --success-500 é #4ade80 (verde mais saturado); ink preta mantém AA. */
    color: #0b1f1a;
}
html[data-theme="dark"] .clx-btn-success:hover:not(:disabled):not(.is-loading) {
    color: #0b1f1a;
}

/* .clx-btn-danger-ghost — ação destrutiva secundária (usada em /Template, Recepção etc.). */
.clx-btn-danger-ghost {
    background: transparent;
    color: var(--clx-danger-500);
    border-color: transparent;
}
.clx-btn-danger-ghost:hover:not(:disabled):not(.is-loading) {
    background: var(--clx-danger-100);
    color: var(--clx-danger-700);
}
.clx-btn-danger-ghost:focus-visible {
    box-shadow: 0 0 0 3px rgba(239, 68, 68, .22);
}

/* Tamanho extra-pequeno (ex.: ações inline dentro de cards compactos da fila/card) */
.clx-btn-xs {
    min-height: 1.75rem;                       /* 28px */
    padding: 0 var(--clx-space-2);
    font-size: var(--clx-fs-xs);
    gap: var(--clx-space-1);
}

/* Loading state (sem ícone explícito — o caller pode injetar spinner em ::before) */
.clx-btn.is-loading {
    cursor: progress;
    position: relative;
    color: transparent !important;
}
.clx-btn.is-loading::after {
    content: "";
    position: absolute;
    width: 1em;
    height: 1em;
    border: 2px solid currentColor;
    border-right-color: transparent;
    border-radius: 50%;
    color: var(--clx-accent-ink);
    animation: clxSpin .6s linear infinite;
}
.clx-btn-secondary.is-loading::after,
.clx-btn-ghost.is-loading::after        { color: var(--clx-text); }
.clx-btn-primary.is-loading::after      { color: var(--clx-accent-ink); }
.clx-btn-danger.is-loading::after       { color: #fff; }
.clx-btn-success.is-loading::after      { color: #fff; }
.clx-btn-danger-ghost.is-loading::after { color: var(--clx-danger-500); }

@keyframes clxSpin { to { transform: rotate(360deg); } }

/* ============================================================
   2. ALERTS — `.clx-alert`
   ------------------------------------------------------------
   Variantes: ok / info / warn / danger.
   Estrutura:
       .clx-alert
         ├ .clx-alert__icon   (opcional)
         ├ .clx-alert__body
         │   ├ .clx-alert__title
         │   └ .clx-alert__text
         └ .clx-alert__close  (opcional, dismissible)
   ============================================================ */

.clx-alert {
    display: flex;
    align-items: flex-start;
    gap: var(--clx-space-3);
    padding: var(--clx-space-3) var(--clx-space-4);
    border: 1px solid transparent;
    border-left-width: 4px;
    border-radius: var(--clx-radius-md);
    background: var(--clx-surface);
    color: var(--clx-text);
    font-size: var(--clx-fs-sm);
    line-height: var(--clx-lh-base);
    position: relative;
}
.clx-alert__icon {
    flex: 0 0 auto;
    width: 1.15rem;
    height: 1.15rem;
    margin-top: 2px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.05rem;
}
.clx-alert__body { flex: 1 1 auto; min-width: 0; }
.clx-alert__title {
    margin: 0 0 var(--clx-space-1);
    font-size: var(--clx-fs-base);
    font-weight: var(--clx-fw-semi);
    line-height: var(--clx-lh-tight);
}
.clx-alert__text {
    margin: 0;
    color: var(--clx-text-muted);
    font-size: var(--clx-fs-sm);
    line-height: var(--clx-lh-base);
}
.clx-alert__close {
    flex: 0 0 auto;
    margin-left: var(--clx-space-2);
    background: transparent;
    border: 0;
    cursor: pointer;
    color: var(--clx-text-faint);
    font-size: 1.1rem;
    line-height: 1;
    padding: 0 var(--clx-space-1);
    transition: color var(--clx-dur-fast) var(--clx-ease);
}
.clx-alert__close:hover        { color: var(--clx-text); }
.clx-alert__close:focus-visible { outline: none; box-shadow: var(--clx-shadow-focus); border-radius: var(--clx-radius-sm); }

/* Variantes --------------------------------------------------- */
.clx-alert-ok     { background: var(--clx-success-100); border-color: var(--clx-success-300); border-left-color: var(--clx-success-500); }
.clx-alert-ok     .clx-alert__icon  { color: var(--clx-success-500); }
.clx-alert-ok     .clx-alert__title { color: var(--clx-success-700); }

.clx-alert-info   { background: var(--clx-info-100); border-color: var(--clx-info-300); border-left-color: var(--clx-info-500); }
.clx-alert-info   .clx-alert__icon  { color: var(--clx-info-500); }
.clx-alert-info   .clx-alert__title { color: var(--clx-info-700); }

.clx-alert-warn   { background: var(--clx-warn-100); border-color: var(--clx-warn-300); border-left-color: var(--clx-warn-500); }
.clx-alert-warn   .clx-alert__icon  { color: var(--clx-warn-500); }
.clx-alert-warn   .clx-alert__title { color: var(--clx-warn-700); }

.clx-alert-danger { background: var(--clx-danger-100); border-color: var(--clx-danger-300); border-left-color: var(--clx-danger-500); }
.clx-alert-danger .clx-alert__icon  { color: var(--clx-danger-500); }
.clx-alert-danger .clx-alert__title { color: var(--clx-danger-700); }

/* ============================================================
   3. MODAL — `.clx-modal`
   ------------------------------------------------------------
   Estrutura (montada pelo ClxModal JS helper):
       .clx-modal-backdrop      (div>>overlay escuro + click-to-dismiss)
         └ .clx-modal           (painel)
             ├ .clx-modal__head
             │    ├ .clx-modal__title
             │    └ .clx-modal__close
             ├ .clx-modal__body
             └ .clx-modal__foot   (opcional — conjunto de .clx-btn)
   ============================================================ */

.clx-modal-backdrop {
    position: fixed;
    inset: 0;
    z-index: var(--clx-z-backdrop);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--clx-space-4);
    background: rgba(11, 31, 74, .55);
    opacity: 0;
    transition: opacity var(--clx-dur-base) var(--clx-ease-out);
}
.clx-modal-backdrop.is-open { opacity: 1; }

.clx-modal {
    position: relative;
    z-index: var(--clx-z-modal);
    width: 100%;
    max-width: 560px;
    max-height: calc(100vh - 2rem);
    background: var(--clx-surface);
    color: var(--clx-text);
    border-radius: var(--clx-radius-lg);
    box-shadow: var(--clx-shadow-lg);
    display: flex;
    flex-direction: column;
    transform: translateY(16px) scale(.97);
    opacity: 0;
    transition: transform var(--clx-dur-base) var(--clx-ease-bounce),
                opacity var(--clx-dur-base) var(--clx-ease-out);
    overflow: hidden;
}
.clx-modal-backdrop.is-open .clx-modal {
    transform: translateY(0) scale(1);
    opacity: 1;
}

.clx-modal-sm { max-width: 420px; }
.clx-modal-lg { max-width: 780px; }
.clx-modal-xl { max-width: 1080px; }

.clx-modal__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--clx-space-3);
    padding: var(--clx-space-4) var(--clx-space-5);
    border-bottom: 1px solid var(--clx-border);
}
.clx-modal__title {
    margin: 0;
    font-size: var(--clx-fs-lg);
    font-weight: var(--clx-fw-semi);
    line-height: var(--clx-lh-tight);
    color: var(--clx-text);
}
.clx-modal__close {
    background: transparent;
    border: 0;
    cursor: pointer;
    color: var(--clx-text-faint);
    font-size: 1.25rem;
    line-height: 1;
    padding: var(--clx-space-1) var(--clx-space-2);
    border-radius: var(--clx-radius-sm);
    transition: background-color var(--clx-dur-fast) var(--clx-ease),
                color var(--clx-dur-fast) var(--clx-ease);
}
.clx-modal__close:hover        { background: var(--clx-neutral-100); color: var(--clx-text); }
.clx-modal__close:focus-visible{ outline: none; box-shadow: var(--clx-shadow-focus); }

.clx-modal__body {
    flex: 1 1 auto;
    min-height: 0;
    padding: var(--clx-space-5);
    overflow-y: auto;
    color: var(--clx-text-muted);
    font-size: var(--clx-fs-base);
    line-height: var(--clx-lh-base);
}
.clx-modal__body > :first-child { margin-top: 0; }
.clx-modal__body > :last-child  { margin-bottom: 0; }

.clx-modal__foot {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: var(--clx-space-2);
    padding: var(--clx-space-3) var(--clx-space-5);
    border-top: 1px solid var(--clx-border);
    background: var(--clx-surface-alt);
}

/* Scroll lock no body — classe aplicada pelo ClxModal.open */
body.clx-scroll-locked { overflow: hidden; }

/* Responsivo — em telas <= 640px modal sobe como sheet */
@media (max-width: 640px) { /* bp-sm */
    .clx-modal-backdrop { padding: 0; align-items: flex-end; }
    .clx-modal, .clx-modal-sm, .clx-modal-lg, .clx-modal-xl {
        max-width: 100%;
        border-radius: var(--clx-radius-lg) var(--clx-radius-lg) 0 0;
        max-height: 92vh;
    }
}

/* ============================================================
   4. BADGE — `.clx-badge`
   ------------------------------------------------------------
   Variantes: neutral / info / success / warn / danger / brand.
   Formatos: default (square 4px radius) / .clx-badge-pill.
   Tamanhos: default (sm) e .clx-badge-md.
   ============================================================ */

.clx-badge {
    display: inline-flex;
    align-items: center;
    gap: var(--clx-space-1);
    padding: 2px var(--clx-space-2);
    border-radius: var(--clx-radius-sm);
    font-size: var(--clx-fs-xs);
    font-weight: var(--clx-fw-semi);
    line-height: 1.4;
    letter-spacing: .02em;
    white-space: nowrap;
    border: 1px solid transparent;
}
.clx-badge-md   { font-size: var(--clx-fs-sm); padding: 3px var(--clx-space-3); }
.clx-badge-pill { border-radius: var(--clx-radius-pill); }

.clx-badge-neutral { background: var(--clx-neutral-100); color: var(--clx-neutral-700); }
.clx-badge-info    { background: var(--clx-info-100);    color: var(--clx-info-700); }
.clx-badge-success { background: var(--clx-success-100); color: var(--clx-success-700); }
.clx-badge-warn    { background: var(--clx-warn-100);    color: var(--clx-warn-700); }
.clx-badge-danger  { background: var(--clx-danger-100);  color: var(--clx-danger-700); }
.clx-badge-brand   { background: var(--clarix-navy);     color: #fff; }
.clx-badge-accent  { background: var(--clarix-cyan);     color: var(--clx-accent-ink); }

/* Outline variant — borda colorida, fundo transparente */
.clx-badge-outline.clx-badge-neutral { background: transparent; border-color: var(--clx-neutral-300); color: var(--clx-neutral-700); }
.clx-badge-outline.clx-badge-info    { background: transparent; border-color: var(--clx-info-300);    color: var(--clx-info-700); }
.clx-badge-outline.clx-badge-success { background: transparent; border-color: var(--clx-success-300); color: var(--clx-success-700); }
.clx-badge-outline.clx-badge-warn    { background: transparent; border-color: var(--clx-warn-300);    color: var(--clx-warn-700); }
.clx-badge-outline.clx-badge-danger  { background: transparent; border-color: var(--clx-danger-300);  color: var(--clx-danger-700); }

/* ============================================================
   5. INPUT — `.clx-input` / `.clx-field` / `.clx-label` /
              `.clx-help` / `.clx-input-group`
   ------------------------------------------------------------
   Estrutura:
       <div class="clx-field">
         <label class="clx-label">Nome</label>
         <input class="clx-input" />
         <p class="clx-help">Como está no RG</p>      (opcional)
       </div>

   Para validação com erro:
       <div class="clx-field is-invalid">
         <input class="clx-input" aria-invalid="true" />
         <p class="clx-help clx-help-error">CPF inválido</p>
       </div>

   Para grupo (prefixo/sufixo ou botão anexo):
       <div class="clx-input-group">
         <span class="clx-input-group__prefix">R$</span>
         <input class="clx-input" />
         <button class="clx-btn clx-btn-secondary">OK</button>
       </div>
   ============================================================ */

.clx-field { display: flex; flex-direction: column; gap: var(--clx-space-1-5); }
.clx-field + .clx-field { margin-top: var(--clx-space-4); }

.clx-label {
    font-size: var(--clx-fs-sm);
    font-weight: var(--clx-fw-semi);
    color: var(--clx-text);
    line-height: var(--clx-lh-tight);
}
.clx-label-required::after {
    content: " *";
    color: var(--clx-danger-500);
    font-weight: var(--clx-fw-bold);
}

.clx-input,
select.clx-input,
textarea.clx-input {
    display: block;
    width: 100%;
    min-height: 2.5rem;
    padding: var(--clx-space-2) var(--clx-space-3);
    font-family: var(--clx-font-sans);
    font-size: var(--clx-fs-base);
    line-height: var(--clx-lh-base);
    color: var(--clx-text);
    background: var(--clx-surface);
    border: 1px solid var(--clx-border-hover);
    border-radius: var(--clx-radius-md);
    box-shadow: inset 0 1px 0 rgba(15, 23, 42, .02);
    transition: border-color var(--clx-dur-fast) var(--clx-ease),
                box-shadow var(--clx-dur-fast) var(--clx-ease),
                background-color var(--clx-dur-fast) var(--clx-ease);
}
.clx-input:hover:not(:disabled):not(:focus) {
    border-color: var(--clx-neutral-500);
}
.clx-input:focus,
select.clx-input:focus,
textarea.clx-input:focus {
    outline: none;
    border-color: var(--clarix-cyan);
    box-shadow: var(--clx-shadow-focus);
}
.clx-input::placeholder { color: var(--clx-text-faint); }
.clx-input:disabled {
    cursor: not-allowed;
    background: var(--clx-neutral-100);
    color: var(--clx-text-muted);
}
textarea.clx-input { min-height: 4.5rem; resize: vertical; }

/* Select — seta custom (evita default nativo ficar "pesado" em diferentes SOs) */
select.clx-input {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    padding-right: var(--clx-space-8);
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2364748b'%3E%3Cpath d='M4 6l4 4 4-4z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right var(--clx-space-3) center;
    background-size: 16px 16px;
}

.clx-help {
    margin: 0;
    font-size: var(--clx-fs-xs);
    color: var(--clx-text-muted);
    line-height: var(--clx-lh-base);
}
.clx-help-error { color: var(--clx-danger-700); }

/* Estado inválido (aplicado em .clx-field ou .clx-input diretamente) */
.clx-field.is-invalid .clx-input,
.clx-input.is-invalid,
.clx-input[aria-invalid="true"] {
    border-color: var(--clx-danger-500);
}
.clx-field.is-invalid .clx-input:focus,
.clx-input.is-invalid:focus,
.clx-input[aria-invalid="true"]:focus {
    box-shadow: 0 0 0 3px rgba(239, 68, 68, .22);
}

/* Group — flex row com prefixo/sufixo/botão anexo */
.clx-input-group {
    display: flex;
    align-items: stretch;
    width: 100%;
}
.clx-input-group > .clx-input { border-radius: 0; }
.clx-input-group > :first-child { border-top-left-radius: var(--clx-radius-md); border-bottom-left-radius: var(--clx-radius-md); }
.clx-input-group > :last-child  { border-top-right-radius: var(--clx-radius-md); border-bottom-right-radius: var(--clx-radius-md); }
.clx-input-group > * + * { margin-left: -1px; }

.clx-input-group__prefix,
.clx-input-group__suffix {
    display: inline-flex;
    align-items: center;
    padding: 0 var(--clx-space-3);
    background: var(--clx-neutral-100);
    color: var(--clx-text-muted);
    border: 1px solid var(--clx-border-hover);
    font-size: var(--clx-fs-sm);
    white-space: nowrap;
}

/* ============================================================
   6. CARD — `.clx-card`
   ------------------------------------------------------------
   Estrutura:
       <section class="clx-card">
         <header class="clx-card__head">
           <div>
             <h2 class="clx-card__title">…</h2>
             <p class="clx-card__subtitle">…</p>
           </div>
           <div class="clx-card__actions"> … </div>
         </header>
         <div class="clx-card__body"> … </div>
         <footer class="clx-card__foot"> … </footer>
       </section>

   Variantes:
       .clx-card-plain     — sem sombra nem borda (uso aninhado ou fundo cinza)
       .clx-card-brand     — barra superior com gradiente brand (destaque suave)
       .clx-card-danger    — barra superior vermelha (estado crítico)

   Modificadores:
       .clx-card-compact   — paddings reduzidos (use em sidebars / cards densos)
       .clx-card-flush     — sem padding no body (para tabela encostar na borda)

   Layout auxiliar:
       .clx-card-grid      — grid responsivo de múltiplos cards (auto-fit min 280px)
       .clx-card-stack     — coluna vertical com gap-space-4 entre cards
   ============================================================ */

.clx-card {
    position: relative;
    display: flex;
    flex-direction: column;
    background: var(--clx-surface);
    color: var(--clx-text);
    border: 1px solid var(--clx-border);
    border-radius: var(--clx-radius-md);
    box-shadow: var(--clx-shadow-sm);
    overflow: hidden;
}
.clx-card + .clx-card { margin-top: var(--clx-space-4); }

.clx-card__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--clx-space-4);
    padding: var(--clx-space-4) var(--clx-space-5);
    border-bottom: 1px solid var(--clx-border);
    background: var(--clx-surface);
}
.clx-card__head-main {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: var(--clx-space-0-5);
}
.clx-card__title {
    margin: 0;
    font-size: var(--clx-fs-lg);
    font-weight: var(--clx-fw-semi);
    line-height: var(--clx-lh-tight);
    color: var(--clx-text);
    display: inline-flex;
    align-items: center;
    gap: var(--clx-space-2);
}
.clx-card__subtitle {
    margin: 0;
    font-size: var(--clx-fs-sm);
    color: var(--clx-text-muted);
    line-height: var(--clx-lh-base);
}
.clx-card__actions {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    gap: var(--clx-space-2);
    flex-wrap: wrap;
}

.clx-card__body {
    flex: 1 1 auto;
    padding: var(--clx-space-5);
    color: var(--clx-text);
    font-size: var(--clx-fs-base);
    line-height: var(--clx-lh-base);
}
.clx-card__body > :first-child { margin-top: 0; }
.clx-card__body > :last-child  { margin-bottom: 0; }

.clx-card__foot {
    padding: var(--clx-space-3) var(--clx-space-5);
    border-top: 1px solid var(--clx-border);
    background: var(--clx-surface-alt);
    display: flex;
    align-items: center;
    gap: var(--clx-space-3);
    font-size: var(--clx-fs-sm);
    color: var(--clx-text-muted);
}
.clx-card__foot-end { margin-left: auto; }

/* Separador interno entre seções dentro do body */
.clx-card__divider {
    margin: var(--clx-space-5) calc(var(--clx-space-5) * -1);
    border: 0;
    border-top: 1px solid var(--clx-border);
}

/* Subseção (heading + conteúdo) dentro de um body — alternativa a múltiplos cards */
.clx-card__section + .clx-card__section { margin-top: var(--clx-space-6); }
.clx-card__section-title {
    margin: 0 0 var(--clx-space-3);
    font-size: var(--clx-fs-xs);
    font-weight: var(--clx-fw-bold);
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--clx-text-muted);
}

/* Variantes ---------------------------------------------------- */
.clx-card-plain   { border-color: transparent; box-shadow: none; background: transparent; }
.clx-card-plain .clx-card__head,
.clx-card-plain .clx-card__foot { background: transparent; }

.clx-card-brand::before,
.clx-card-danger::before {
    content: "";
    position: absolute;
    inset: 0 0 auto 0;
    height: 3px;
    pointer-events: none;
}
.clx-card-brand::before  { background: linear-gradient(90deg, var(--clarix-navy), var(--clarix-cyan)); }
.clx-card-danger::before { background: var(--clx-danger-500); }

/* Modificadores ------------------------------------------------ */
.clx-card-compact .clx-card__head { padding: var(--clx-space-3) var(--clx-space-4); }
.clx-card-compact .clx-card__body { padding: var(--clx-space-4); }
.clx-card-compact .clx-card__foot { padding: var(--clx-space-2) var(--clx-space-4); }
.clx-card-compact .clx-card__divider { margin: var(--clx-space-4) calc(var(--clx-space-4) * -1); }

.clx-card-flush .clx-card__body { padding: 0; }

/* Layouts auxiliares ------------------------------------------- */
.clx-card-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: var(--clx-space-4);
}
.clx-card-grid > .clx-card { margin-top: 0; }

.clx-card-stack {
    display: flex;
    flex-direction: column;
    gap: var(--clx-space-4);
}
.clx-card-stack > .clx-card { margin-top: 0; }

/* ============================================================
   7. EMPTY STATE — `.clx-empty-state`
   ------------------------------------------------------------
   Usado em listagens vazias (CRUDs sem itens, filtros sem match,
   primeiro uso). Pode viver dentro de `.clx-card-flush` ou solto.

   Estrutura:
       <div class="clx-empty-state">
         <div class="clx-empty-state__icon"><i class="bi bi-inbox"></i></div>
         <h3 class="clx-empty-state__title">Nenhum convênio cadastrado</h3>
         <p class="clx-empty-state__text">Adicione convênios para usá-los em agendamentos.</p>
         <div class="clx-empty-state__actions">
           <a class="clx-btn clx-btn-primary" href="...">+ Novo convênio</a>
         </div>
       </div>

   Variantes:
       .clx-empty-state-sm     — padding reduzido (em sidebars/cards pequenos)
       .clx-empty-state-inline — horizontal compacto (ícone à esquerda)

   Variante semântica (opcional, ícone+title coloridos):
       .clx-empty-state-info / -warn / -danger
   ============================================================ */

.clx-empty-state {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--clx-space-3);
    padding: var(--clx-space-10) var(--clx-space-6);
    text-align: center;
    color: var(--clx-text-muted);
}
.clx-empty-state__icon {
    width: 3.5rem;
    height: 3.5rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 2.25rem;
    color: var(--clx-neutral-500);
    opacity: .55;
    margin-bottom: var(--clx-space-1);
}
.clx-empty-state__title {
    margin: 0;
    font-size: var(--clx-fs-lg);
    font-weight: var(--clx-fw-semi);
    line-height: var(--clx-lh-tight);
    color: var(--clx-text);
}
.clx-empty-state__text {
    margin: 0;
    max-width: 42ch;
    font-size: var(--clx-fs-sm);
    line-height: var(--clx-lh-base);
    color: var(--clx-text-muted);
}
.clx-empty-state__actions {
    display: inline-flex;
    align-items: center;
    gap: var(--clx-space-2);
    flex-wrap: wrap;
    margin-top: var(--clx-space-3);
}

/* Tamanhos ----------------------------------------------------- */
.clx-empty-state-sm {
    padding: var(--clx-space-6) var(--clx-space-4);
    gap: var(--clx-space-2);
}
.clx-empty-state-sm .clx-empty-state__icon {
    width: 2.5rem;
    height: 2.5rem;
    font-size: 1.5rem;
}
.clx-empty-state-sm .clx-empty-state__title { font-size: var(--clx-fs-base); }

.clx-empty-state-inline {
    flex-direction: row;
    text-align: left;
    padding: var(--clx-space-4) var(--clx-space-5);
    gap: var(--clx-space-4);
    align-items: center;
}
.clx-empty-state-inline .clx-empty-state__icon { margin-bottom: 0; width: 2rem; height: 2rem; font-size: 1.25rem; }
.clx-empty-state-inline .clx-empty-state__actions { margin-top: 0; margin-left: auto; }
.clx-empty-state-inline .clx-empty-state__text { max-width: none; }

/* Variantes semânticas ---------------------------------------- */
.clx-empty-state-info   .clx-empty-state__icon { color: var(--clx-info-500);    opacity: .85; }
.clx-empty-state-warn   .clx-empty-state__icon { color: var(--clx-warn-500);    opacity: .9; }
.clx-empty-state-danger .clx-empty-state__icon { color: var(--clx-danger-500);  opacity: .9; }

/* ============================================================
   8. TABLE — `.clx-table`
   ------------------------------------------------------------
   Wrapper ideal é `.clx-table-wrap` (permite scroll horizontal
   em telas pequenas e arredonda o conjunto).

       <div class="clx-table-wrap">
         <table class="clx-table">
           <thead>
             <tr>
               <th>Nome</th>
               <th style="width:120px">Código</th>
               <th class="clx-table-right" style="width:80px">Usos</th>
               <th class="clx-table-center" style="width:90px">Status</th>
               <th style="width:120px"></th>
             </tr>
           </thead>
           <tbody>
             <tr>…</tr>
           </tbody>
         </table>
       </div>

   Modificadores:
       .clx-table-dense    — padding de células reduzido
       .clx-table-compact  — fonte menor (fs-sm) — uso em side lists
       .clx-table-center / .clx-table-right  — alignment de th/td
       .clx-table-actions  — td com grupo de botões icon-only

   Estados de linha:
       tr.is-urgent        — border-left danger + fundo suave
       tr.is-inactive      — opacidade reduzida
       tr.is-selected      — fundo info-100 (ex.: registro atual)

   Responsivo: em ≤640px o wrap ganha overflow-x auto; a tabela
   mantém largura natural (não colapsa linhas).
   ============================================================ */

.clx-table-wrap {
    background: var(--clx-surface);
    border: 1px solid var(--clx-border);
    border-radius: var(--clx-radius-md);
    box-shadow: var(--clx-shadow-sm);
    overflow: hidden;   /* garante border-radius nas quinas da tabela */
}
/* Quando dentro de `.clx-card-flush .clx-card__body`, não duplica moldura */
.clx-card-flush .clx-card__body .clx-table-wrap {
    border: 0;
    border-radius: 0;
    box-shadow: none;
}

.clx-table {
    width: 100%;
    border-collapse: separate;     /* preserva border-radius nas quinas */
    border-spacing: 0;
    color: var(--clx-text);
    font-size: var(--clx-fs-base);
    line-height: var(--clx-lh-base);
    background: var(--clx-surface);
}

/* Cabeçalho ---------------------------------------------------- */
.clx-table thead th {
    position: sticky;              /* opcional — quando wrap tem max-height */
    top: 0;
    background: var(--clx-surface-alt);
    padding: var(--clx-space-3) var(--clx-space-4);
    text-align: left;
    font-size: var(--clx-fs-xs);
    font-weight: var(--clx-fw-bold);
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--clx-text-muted);
    border-bottom: 1px solid var(--clx-border);
    white-space: nowrap;
}

/* Corpo -------------------------------------------------------- */
.clx-table tbody td {
    padding: var(--clx-space-3) var(--clx-space-4);
    border-bottom: 1px solid var(--clx-border);
    vertical-align: middle;
    color: var(--clx-text);
}
.clx-table tbody tr:last-child td { border-bottom: 0; }
.clx-table tbody tr { transition: background-color var(--clx-dur-fast) var(--clx-ease); }
.clx-table tbody tr:hover td { background: var(--clx-neutral-100); }

/* Alinhamento explícito via classe */
.clx-table-center { text-align: center !important; }
.clx-table-right  { text-align: right  !important; }

/* Coluna "nome" / primeira — destaque leve em fw e cor navy */
.clx-table__primary {
    font-weight: var(--clx-fw-semi);
    color: var(--clarix-navy);
}

/* Linha "td" com múltiplas linhas (subtítulo inline) */
.clx-table__stack {
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.clx-table__stack > small {
    color: var(--clx-text-muted);
    font-size: var(--clx-fs-xs);
}

/* Coluna de ações (botões icon-only alinhados à direita) */
.clx-table-actions {
    text-align: right;
    white-space: nowrap;
}
.clx-table-actions .clx-btn + .clx-btn,
.clx-table-actions form { margin-left: var(--clx-space-1); }
.clx-table-actions form {
    display: inline-flex;
    vertical-align: middle;
}

/* Modificadores de densidade ---------------------------------- */
.clx-table-dense thead th,
.clx-table-dense tbody td { padding: var(--clx-space-2) var(--clx-space-3); }

.clx-table-compact {
    font-size: var(--clx-fs-sm);
}
.clx-table-compact thead th,
.clx-table-compact tbody td { padding: var(--clx-space-2) var(--clx-space-3); }

/* Estados de linha -------------------------------------------- */
.clx-table tbody tr.is-urgent td {
    background: var(--clx-danger-100);
}
.clx-table tbody tr.is-urgent td:first-child {
    box-shadow: inset 3px 0 0 var(--clx-danger-500);
}
.clx-table tbody tr.is-inactive td {
    opacity: .6;
    color: var(--clx-text-muted);
}
.clx-table tbody tr.is-selected td {
    background: var(--clx-info-100);
}

/* Linha vazia (mensagem "nada encontrado") — centralizada */
.clx-table__empty td {
    padding: var(--clx-space-8) var(--clx-space-4);
    text-align: center;
    color: var(--clx-text-muted);
    font-size: var(--clx-fs-sm);
}

/* Rodapé de sumário (count total, paginação) */
.clx-table__summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--clx-space-3);
    padding: var(--clx-space-3) var(--clx-space-4);
    background: var(--clx-surface-alt);
    border-top: 1px solid var(--clx-border);
    font-size: var(--clx-fs-sm);
    color: var(--clx-text-muted);
}

/* Responsivo — scroll horizontal abaixo de 640px */
@media (max-width: 640px) { /* bp-sm */
    .clx-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
    .clx-table { min-width: 560px; }
    .clx-table thead th { position: static; } /* sticky atrapalha em scroll horizontal */
}

/* ============================================================
   9. UTILITIES — helpers transversais
   ------------------------------------------------------------
   Pequenos auxiliares de tipografia/cor usados com frequência
   nas views migradas para `.clx-*`. Evita redefinir utilities
   inline em cada view. Mantenha este bloco enxuto — qualquer
   utilitário que encostar em ≥3 views merece entrada aqui;
   menos que isso, prefira classe local.
   ============================================================ */

/* Subtítulo do page-header — o .page-header base já é definido
   inline no _Layout.cshtml (display flex + h1). Isto adiciona
   a linha secundária descritiva abaixo do h1. */
.page-header__subtitle {
    display: block;
    margin-top: var(--clx-space-1);
    font-size: var(--clx-fs-sm);
    color: var(--clx-text-muted);
    line-height: var(--clx-lh-base);
}

/* Código inline (ex.: AE Title DICOM) com visual monospace sem
   requisitar background pesado como <code> bootstrap. */
.clx-code {
    font-family: var(--clx-font-mono);
    font-size: var(--clx-fs-sm);
    color: var(--clx-text);
    background: var(--clx-surface-alt);
    padding: 1px var(--clx-space-2);
    border-radius: var(--clx-radius-sm);
    border: 1px solid var(--clx-border);
    white-space: nowrap;
}

/* Texto com cor semântica — úteis em ícones inline e status
   curtos. Prefira `.clx-badge` para rótulos formais. */
.clx-text-muted   { color: var(--clx-text-muted) !important; }
.clx-text-success { color: var(--clx-success-500) !important; }
.clx-text-info    { color: var(--clx-info-500) !important; }
.clx-text-warn    { color: var(--clx-warn-500) !important; }
.clx-text-danger  { color: var(--clx-danger-500) !important; }

/* Subtítulo inline dentro de `.clx-table__stack` (linha fraca). */
.clx-table__muted {
    color: var(--clx-text-muted);
    font-size: var(--clx-fs-xs);
}
/* Permite usar também <small> dentro do stack sem precisar da classe. */
.clx-table__stack small { color: var(--clx-text-muted); font-size: var(--clx-fs-xs); }

/* Nota: `.clx-btn-danger-ghost` está definido na §1 (Buttons) desde 62.F.3 — */
/* com focus-visible e loading state apropriados. Definição antiga removida. */

/* Micro-label monoespacial dentro de cards — para agrupar
   subseções sem criar novo padrão. Usa uppercase tracking como
   os `thead th` de `.clx-table`. */
.clx-card__section-title {
    display: block;
    margin: 0 0 var(--clx-space-3);
    font-size: var(--clx-fs-xs);
    font-weight: var(--clx-fw-bold);
    color: var(--clx-text-muted);
    text-transform: uppercase;
    letter-spacing: .06em;
}
.clx-card__section + .clx-card__section { margin-top: var(--clx-space-5); }

/* Form layout helper para alinhar linhas de botões no rodapé
   quando a view não está dentro de um `.clx-card__foot`. */
.clx-form-actions {
    display: flex;
    gap: var(--clx-space-2);
    align-items: center;
    flex-wrap: wrap;
    margin-top: var(--clx-space-5);
    padding-top: var(--clx-space-4);
    border-top: 1px solid var(--clx-border);
}
.clx-form-actions__end { margin-left: auto; }

/* ====================================================================
   10. KPI TILE — `.clx-kpi` (Sessão 62.F.3)
   --------------------------------------------------------------------
   Tile clicável de KPI (contador + label) usado nos dashboards:
   Central do Dia, Estudos/Index, Home. Substitui as classes ad-hoc
   `.kpi/.kpi-success/.kpi-warn/.kpi-danger` da /Recepcao.

   Estrutura:
       .clx-kpi
         ├ .clx-kpi__label   (texto pequeno, muted)
         ├ .clx-kpi__value   (número grande)
         └ .clx-kpi__meta    (opcional — texto complementar)

   Variantes semânticas: -info / -success / -warn / -danger / -neutral.
   Quando o tile é um link/botão, herda :focus-visible do framework.
   ==================================================================== */
.clx-kpi {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: var(--clx-space-3) var(--clx-space-4);
    background: var(--clx-surface);
    border: 1px solid var(--clx-border);
    border-left: 3px solid var(--clx-neutral-500);
    border-radius: var(--clx-radius-md);
    color: var(--clx-text);
    text-decoration: none;
    transition: background-color var(--clx-dur-fast) var(--clx-ease),
                border-color var(--clx-dur-fast) var(--clx-ease),
                box-shadow var(--clx-dur-fast) var(--clx-ease),
                transform var(--clx-dur-fast) var(--clx-ease);
    min-height: 64px;
    position: relative;
}
a.clx-kpi,
button.clx-kpi {
    cursor: pointer;
    appearance: none;
    text-align: left;
    font-family: inherit;
}
a.clx-kpi:hover,
button.clx-kpi:hover {
    background: var(--clx-neutral-100);
    border-color: var(--clx-border-hover);
    transform: translateY(-1px);
    box-shadow: var(--clx-shadow-sm);
}
.clx-kpi:focus-visible {
    outline: none;
    box-shadow: var(--clx-shadow-focus);
}
.clx-kpi__label {
    font-size: var(--clx-fs-xs);
    font-weight: var(--clx-fw-semi);
    color: var(--clx-muted);
    text-transform: uppercase;
    letter-spacing: .04em;
}
.clx-kpi__value {
    font-size: var(--clx-fs-2xl);
    font-weight: var(--clx-fw-bold);
    line-height: var(--clx-lh-tight);
    color: var(--clx-text);
}
.clx-kpi__meta {
    font-size: var(--clx-fs-xs);
    color: var(--clx-muted);
}

/* Variantes — borda esquerda + tonaliza o value */
.clx-kpi-info    { border-left-color: var(--clx-info-500);    }
.clx-kpi-success { border-left-color: var(--clx-success-500); }
.clx-kpi-warn    { border-left-color: var(--clx-warn-500);    }
.clx-kpi-danger  { border-left-color: var(--clx-danger-500);  }
.clx-kpi-neutral { border-left-color: var(--clx-neutral-500); }

.clx-kpi-info    .clx-kpi__value { color: var(--clx-info-700);    }
.clx-kpi-success .clx-kpi__value { color: var(--clx-success-700); }
.clx-kpi-warn    .clx-kpi__value { color: var(--clx-warn-700);    }
.clx-kpi-danger  .clx-kpi__value { color: var(--clx-danger-700);  }

/* Estado ativo (KPI selecionada como filtro na worklist, por ex.) */
.clx-kpi.is-active {
    border-width: 1px 1px 1px 3px;
    box-shadow: var(--clx-shadow-focus);
}

/* Grid responsivo helper */
.clx-kpi-grid {
    display: grid;
    gap: var(--clx-space-3);
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}

/* ====================================================================
   A11Y UTILITIES — Sessão 62.F.1 (WCAG 2.1 AA)
   -------------------------------------------------------------------- */

/* .sr-only — esconde visualmente mas mantém para screen readers.
   Padrão amplamente aceito (Bootstrap, TailwindCSS, HTML5 Boilerplate). */
.sr-only {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}

/* .sr-only-focusable — idem, mas reaparece quando recebe foco (skip-links etc.) */
.sr-only-focusable:not(:focus):not(:focus-within) {
    position: absolute !important;
    width: 1px !important; height: 1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
}

/* ====================================================================
   DARK MODE — overrides mínimos dos componentes clx-* (Sessão 62.F.2)
   --------------------------------------------------------------------
   A maioria dos componentes já consome `var(--clx-*)`/`var(--clarix-*)`
   que flipam automaticamente via `html[data-theme="dark"]` em
   clarix-tokens.css. Os ajustes aqui cobrem literais hex/rgba que não
   derivam de tokens.
   ==================================================================== */

/* Backdrop do modal — em dark, queremos overlay preto mais denso
   em vez do navy-tinted do modo claro (contraste sobre fundo escuro). */
html[data-theme="dark"] .clx-modal-backdrop {
    background: rgba(0, 0, 0, .7);
}

/* Focus ring do botão danger — em dark o cor 500 é `#f87171` (clara).
   Aumentamos a opacidade para manter visibilidade AA. */
html[data-theme="dark"] .clx-btn-danger:focus-visible,
html[data-theme="dark"] .clx-input.is-invalid:focus,
html[data-theme="dark"] .clx-input[aria-invalid="true"]:focus {
    box-shadow: 0 0 0 3px rgba(248, 113, 113, .35);
}

/* ====================================================================
   VOZ — Reconhecimento de fala no editor de laudo (Sessão 62.VOZ)
   --------------------------------------------------------------------
   Botão circular .clx-voice-btn com 4 estados:
     - default          → cinza-azulado neutro, ícone bi-mic
     - .is-listening    → vermelho saturado + pulse animation, ícone bi-mic-fill
     - .is-error        → âmbar, ícone bi-mic-mute
     - :disabled        → opacidade reduzida, tooltip explicando

   Tokens consumidos (já em clarix-tokens.css com flip light/dark):
     --clx-danger-500/-100, --clx-warn-500/-100, --clx-text, --clx-border
     --clx-radius-pill, --clx-shadow-focus, --clx-shadow-sm

   Acessibilidade:
     - prefers-reduced-motion desliga pulse
     - estado controlado por classe + aria-pressed + aria-label dinâmico
     - status text via .clx-voice-status[role="status" aria-live="polite"]
   ==================================================================== */

.clx-voice-btn {
    position: relative;
    overflow: visible;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.25rem;
    height: 2.25rem;
    padding: 0;
    border-radius: var(--clx-radius-pill);
    border: 1px solid var(--clx-border);
    background: var(--clx-surface);
    color: var(--clx-text);
    cursor: pointer;
    font-size: 1.05rem;
    line-height: 1;
    box-shadow: var(--clx-shadow-xs);
    transition: background var(--clx-dur-fast) var(--clx-ease-default),
                border-color var(--clx-dur-fast) var(--clx-ease-default),
                color var(--clx-dur-fast) var(--clx-ease-default),
                box-shadow var(--clx-dur-fast) var(--clx-ease-default);
}

.clx-voice-btn:hover:not(:disabled) {
    background: var(--clx-surface-alt);
    border-color: var(--clx-border-hover);
}

.clx-voice-btn:focus-visible {
    outline: none;
    box-shadow: var(--clx-shadow-focus);
}

.clx-voice-btn:disabled {
    opacity: .5;
    cursor: not-allowed;
}

/* Tamanho compacto */
.clx-voice-btn-sm {
    width: 1.85rem;
    height: 1.85rem;
    font-size: .9rem;
}

/* Tamanho amplo */
.clx-voice-btn-lg {
    width: 2.6rem;
    height: 2.6rem;
    font-size: 1.2rem;
}

/* Estado ATIVO — gravando */
.clx-voice-btn.is-listening {
    background: var(--clx-danger-500);
    border-color: var(--clx-danger-500);
    color: #ffffff;
    box-shadow: 0 0 0 4px var(--clx-danger-100), var(--clx-shadow-sm);
}

.clx-voice-btn.is-listening:hover {
    background: var(--clx-danger-700);
    border-color: var(--clx-danger-700);
}

.clx-voice-btn.is-listening::before {
    content: "";
    position: absolute;
    inset: -4px;
    border-radius: inherit;
    pointer-events: none;
    box-shadow: 0 0 0 0 rgba(220, 38, 38, .5);
    animation: clxVoicePulse 1.6s var(--clx-ease-out) infinite;
}

@keyframes clxVoicePulse {
    0%   { box-shadow: 0 0 0 0   rgba(220, 38, 38, .55); }
    70%  { box-shadow: 0 0 0 14px rgba(220, 38, 38, 0);   }
    100% { box-shadow: 0 0 0 0   rgba(220, 38, 38, 0);   }
}

@media (prefers-reduced-motion: reduce) {
    .clx-voice-btn.is-listening::before { animation: none; }
    .clx-voice-btn { transition: none; }
}

/* Estado de ERRO — ex.: permissão negada, browser não suporta */
.clx-voice-btn.is-error {
    background: var(--clx-warn-100);
    border-color: var(--clx-warn-500);
    color: var(--clx-warn-700);
}

/* Status text ao lado do botão. aria-live polite para screen readers. */
.clx-voice-status {
    display: inline-flex;
    align-items: center;
    font-size: var(--clx-fs-xs);
    color: var(--clx-muted);
    font-style: italic;
    margin-left: var(--clx-space-2);
    min-height: 1.25rem;
    line-height: 1.25;
    transition: color var(--clx-dur-fast) var(--clx-ease-default);
}

.clx-voice-status[data-state="listening"] {
    color: var(--clx-danger-700);
    font-style: normal;
    font-weight: 500;
}

.clx-voice-status[data-state="error"] {
    color: var(--clx-warn-700);
    font-style: normal;
}

/* Wrapper de mic + status — facilita inline alignment */
.clx-voice-wrap {
    display: inline-flex;
    align-items: center;
    gap: var(--clx-space-2);
    flex-wrap: wrap;
}

/* Modal de ajuda — lista de comandos pt-BR */
.clx-voice-help-list {
    display: grid;
    grid-template-columns: minmax(140px, 1fr) 2fr;
    gap: var(--clx-space-1) var(--clx-space-3);
    margin: 0;
    padding: 0;
}

.clx-voice-help-list dt {
    font-weight: 600;
    color: var(--clx-text);
}

.clx-voice-help-list dd {
    margin: 0;
    color: var(--clx-muted);
    font-size: var(--clx-fs-sm);
}

.clx-voice-help-group + .clx-voice-help-group {
    margin-top: var(--clx-space-3);
    padding-top: var(--clx-space-3);
    border-top: 1px solid var(--clx-border);
}

.clx-voice-help-group__title {
    font-size: var(--clx-fs-xs);
    text-transform: uppercase;
    letter-spacing: .04em;
    font-weight: 700;
    color: var(--clx-muted);
    margin: 0 0 var(--clx-space-2) 0;
}
