/* =============================================================================
   Cardexa Captura · Dashboard interno
   Sistema de design derivado do "Handoff de design v1 · ago 2026" (seções 1 e 2)
   e do protótipo navegável "Portal Cardexa Captura".

   Substitui integralmente o Metronic. Nada aqui depende de Bootstrap.
   Regra de ouro: use o token, nunca o hex solto na view.
   ============================================================================= */

/* -----------------------------------------------------------------------------
   1 · Fundamentos — tokens
   -------------------------------------------------------------------------- */
:root {
    /* Marca */
    --cx-deep: #0B1020;
    --cx-deep-2: #151D2E;   /* hover de item na barra lateral */
    --cx-deep-3: #1B2438;   /* item ativo na barra lateral, botão primário :hover */
    --cx-deep-line: #232C42;
    --cx-deep-line-2: #2A3550;
    --cx-neon: #22E0C8;     /* SOMENTE sobre --cx-deep */
    --cx-primary: #08655A;
    --cx-container: #D6FAF3;

    /* Tinta */
    --cx-ink: #11151E;
    --cx-ink-2: #3A414D;
    --cx-ink-3: #69707C;
    --cx-ink-4: #AAB1BB;    /* SOMENTE desabilitado e placeholder — reprova em AA */

    /* Tinta sobre fundo escuro */
    --cx-on-deep: #C6CEDA;
    --cx-on-deep-2: #8993A6;
    --cx-on-deep-3: #5C6780;

    /* Superfícies */
    --cx-surface: #ECEFF1;  /* fundo de página */
    --cx-card: #ffffff;
    --cx-subtle: #FAFBFC;   /* campos, cabeçalho de tabela */
    --cx-hot: #FCFDFD;      /* linha em destaque */
    --cx-row-hover: #F4F8F7;
    --cx-border: #D6DDE1;
    --cx-border-2: #CBD1D8; /* tracejado, trilho de toggle desligado */
    --cx-divider: #ECEFF1;
    --cx-hatch: #E7EBEE;

    /* Status */
    --cx-success: #1E9E5A;
    --cx-success-bg: #E5F4EB;
    --cx-success-fg: #0E6B3C;
    --cx-warning: #C2820E;
    --cx-warning-bg: #FBF0DA;
    --cx-warning-fg: #8A5C06;
    --cx-error: #D14343;
    --cx-error-bg: #FAE8E8;
    --cx-error-fg: #B02A2A;
    --cx-error-field: #FEF7F7;
    --cx-info: #2C7BD6;
    --cx-info-bg: #E4EEFA;
    --cx-info-fg: #1A5BAE;

    /* Tipografia */
    --cx-sans: 'IBM Plex Sans', Helvetica, Arial, system-ui, sans-serif;
    --cx-mono: 'IBM Plex Mono', ui-monospace, SFMono-Regular, Menlo, monospace;

    /* Medidas — grade de 8pt */
    --cx-s1: 8px;
    --cx-s2: 12px;
    --cx-s3: 16px;
    --cx-s4: 24px;
    --cx-s5: 32px;
    --cx-s6: 48px;
    --cx-s7: 64px;

    /* Raio */
    --cx-r-field: 8px;
    --cx-r-btn: 12px;
    --cx-r-card: 16px;
    --cx-r-pill: 999px;

    /* Sombra */
    --cx-shadow-card: 0 1px 2px rgba(11, 16, 32, 0.05);
    --cx-shadow-modal: 0 24px 60px rgba(11, 16, 32, 0.30);
    --cx-shadow-lift: 0 2px 8px rgba(11, 16, 32, 0.08);

    /* Larguras fixas do layout */
    --cx-sidebar-w: 256px;
    --cx-secnav-w: 236px;
    --cx-rail-w: 372px;

    /* Densidade — trocada por [data-cx-density] no <html> */
    --cx-cell-pad: 9px 12px;
    --cx-cell-size: 13px;
    --cx-cell-size-mono: 12px;
    --cx-head-pad: 8px 12px;
}

html[data-cx-density="comfortable"] {
    --cx-cell-pad: 13px 14px;
    --cx-cell-size: 13.5px;
    --cx-cell-size-mono: 12.5px;
    --cx-head-pad: 10px 14px;
}

/* -----------------------------------------------------------------------------
   Reset enxuto
   -------------------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
    margin: 0;
    background: var(--cx-surface);
    font-family: var(--cx-sans);
    font-size: 14px;
    line-height: 1.5;
    color: var(--cx-ink);
    -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd { margin: 0; }
ul, ol { margin: 0; padding: 0; }
img, svg { max-width: 100%; }
button, input, select, textarea { font: inherit; color: inherit; }
table { border-collapse: collapse; width: 100%; }

a { color: var(--cx-primary); text-decoration: none; }
a:hover { color: var(--cx-ink); }

:focus-visible {
    outline: 2px solid var(--cx-primary);
    outline-offset: 2px;
    border-radius: 4px;
}

[hidden] { display: none !important; }

/* -----------------------------------------------------------------------------
   Escala tipográfica (handoff §1 · Papel)
   -------------------------------------------------------------------------- */
.cx-page-title { font-size: 26px; line-height: 30px; font-weight: 700; letter-spacing: -0.02em; }
.cx-card-title { font-size: 17px; line-height: 24px; font-weight: 600; letter-spacing: -0.01em; }
.cx-body { font-size: 14px; line-height: 21px; font-weight: 400; }
.cx-label { font-size: 12px; line-height: 16px; font-weight: 600; color: var(--cx-ink-2); }
.cx-mono { font-family: var(--cx-mono); font-size: 12px; line-height: 16px; font-weight: 500; }

.cx-kicker {
    font-family: var(--cx-mono);
    font-size: 10px;
    line-height: 14px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--cx-ink-3);
}
.cx-kicker--on-deep { color: var(--cx-neon); }
.cx-kicker--primary { color: var(--cx-primary); }

.cx-muted { color: var(--cx-ink-3); }
.cx-dim { color: var(--cx-ink-4); }
.cx-num { font-family: var(--cx-mono); font-variant-numeric: tabular-nums; }

/* Ícones — Material Symbols Outlined, peso 400 */
.cx-i {
    font-family: 'Material Symbols Outlined';
    font-weight: normal;
    font-style: normal;
    font-size: 20px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
    -webkit-font-feature-settings: 'liga';
    font-feature-settings: 'liga';
    -webkit-font-smoothing: antialiased;
    flex: none;
    user-select: none;
}
.cx-i--sm { font-size: 17px; }  /* dentro de botão */
.cx-i--lg { font-size: 21px; }

/* -----------------------------------------------------------------------------
   2 · Shell — barra lateral + área de conteúdo
   -------------------------------------------------------------------------- */
.cx-shell {
    min-height: 100vh;
    display: flex;
    align-items: stretch;
}

.cx-sidebar {
    width: var(--cx-sidebar-w);
    flex: none;
    background: var(--cx-deep);
    color: #fff;
    display: flex;
    flex-direction: column;
    position: sticky;
    top: 0;
    height: 100vh;
    overflow-y: auto;
}

.cx-sidebar__brand {
    padding: 22px 20px 18px;
    border-bottom: 1px solid var(--cx-deep-3);
}
.cx-lockup { display: flex; align-items: center; gap: 10px; text-decoration: none; }
.cx-lockup:hover { text-decoration: none; }
.cx-wordmark {
    font-size: 20px;
    font-weight: 700;
    letter-spacing: -0.02em;
    line-height: 1;
    color: #fff;
}
.cx-wordmark .cx-x { color: var(--cx-neon); }
.cx-lockup__bar { width: 1px; height: 18px; background: var(--cx-deep-line-2); flex: none; }
.cx-lockup__module {
    font-family: var(--cx-mono);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.04em;
    color: var(--cx-on-deep-2);
}
.cx-sidebar__tag {
    font-family: var(--cx-mono);
    font-size: 10px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--cx-on-deep-3);
    margin-top: 10px;
}

.cx-nav {
    padding: 14px 12px;
    display: flex;
    flex-direction: column;
    gap: 14px;
    flex: 1;
}
.cx-nav__group { display: flex; flex-direction: column; gap: 2px; }
.cx-nav__group-label {
    font-family: var(--cx-mono);
    font-size: 10px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--cx-on-deep-3);
    padding: 6px 10px 4px;
}
.cx-nav__item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 9px 10px;
    border-radius: 10px;
    font-size: 13.5px;
    font-weight: 500;
    text-decoration: none;
    color: var(--cx-on-deep);
    background: transparent;
    transition: background .12s ease, color .12s ease;
}
.cx-nav__item:hover { background: var(--cx-deep-2); color: #fff; }
.cx-nav__item.is-active {
    font-weight: 600;
    color: #fff;
    background: var(--cx-deep-3);
    box-shadow: inset 2px 0 0 var(--cx-neon);
}
.cx-nav__item .cx-i { font-size: 19px; opacity: .9; }
.cx-nav__label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cx-nav__count {
    font-family: var(--cx-mono);
    font-size: 10px;
    font-weight: 600;
    background: var(--cx-neon);
    color: var(--cx-deep);
    border-radius: var(--cx-r-pill);
    padding: 1px 7px;
    flex: none;
}

.cx-sidebar__foot {
    padding: 14px 16px 18px;
    border-top: 1px solid var(--cx-deep-3);
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.cx-who { display: flex; align-items: center; gap: 10px; }
.cx-who__avatar {
    width: 32px; height: 32px; border-radius: var(--cx-r-pill);
    background: var(--cx-deep-3); color: var(--cx-neon);
    display: flex; align-items: center; justify-content: center;
    font-size: 12px; font-weight: 600; flex: none;
}
.cx-who__text { display: flex; flex-direction: column; min-width: 0; }
.cx-who__name { font-size: 13px; font-weight: 600; color: #fff; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cx-who__role { font-family: var(--cx-mono); font-size: 10px; color: var(--cx-on-deep-2); }
.cx-syslinks { display: flex; flex-wrap: wrap; gap: 6px; }
.cx-syslink {
    font-family: var(--cx-mono);
    font-size: 10px;
    letter-spacing: 0.04em;
    color: var(--cx-on-deep-2);
    border: 1px solid var(--cx-deep-line);
    border-radius: 6px;
    padding: 4px 8px;
    background: none;
    cursor: pointer;
    text-decoration: none;
}
.cx-syslink:hover { border-color: var(--cx-primary); color: var(--cx-neon); }

.cx-main { flex: 1; min-width: 0; display: flex; flex-direction: column; }

/* Cabeçalho fixo da tela */
.cx-header {
    background: var(--cx-card);
    border-bottom: 1px solid var(--cx-border);
    padding: 20px 32px 18px;
    position: sticky;
    top: 0;
    z-index: 20;
}
.cx-header__row {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--cx-s4);
    flex-wrap: wrap;
}
.cx-header__text { min-width: 0; flex: 1; }
.cx-header__meta { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; flex-wrap: wrap; }
.cx-crumb {
    font-size: 12px; font-weight: 500; color: var(--cx-ink-3);
    display: inline-flex; align-items: center; gap: 4px; text-decoration: none;
}
.cx-crumb:hover { color: var(--cx-ink); }
.cx-crumb .cx-i { font-size: 16px; }
.cx-route {
    font-family: var(--cx-mono);
    font-size: 11px;
    color: var(--cx-primary);
    background: var(--cx-container);
    border-radius: 6px;
    padding: 3px 8px;
}
.cx-header h1 { font-size: 26px; font-weight: 700; letter-spacing: -0.02em; line-height: 1.15; }
.cx-header__desc { margin-top: 6px; font-size: 14px; line-height: 1.5; color: var(--cx-ink-3); max-width: 760px; text-wrap: pretty; }
.cx-header__actions { display: flex; align-items: center; gap: var(--cx-s1); flex: none; }

/* Corpo */
.cx-body-wrap {
    padding: var(--cx-s4) var(--cx-s5) var(--cx-s7);
    display: flex;
    flex-wrap: wrap;
    gap: var(--cx-s4);
    align-items: flex-start;
}
.cx-content { flex: 1 1 320px; min-width: min(320px, 100%); display: flex; flex-direction: column; gap: 20px; }

/* Só uma seção do perfil do cliente é renderizada por vez. */
.cx-section-host { display: flex; flex-direction: column; gap: 20px; }
.cx-section-host > [data-cx-section] { display: flex; flex-direction: column; gap: 20px; }
.cx-section-host > [data-cx-section][hidden] { display: none; }

/* Índice de seções (perfil do cliente) */
.cx-secnav {
    width: var(--cx-secnav-w);
    flex: none;
    position: sticky;
    top: 132px;
    display: flex;
    flex-direction: column;
    gap: var(--cx-s3);
}
.cx-secnav__group { display: flex; flex-direction: column; gap: 2px; }
.cx-secnav__label {
    font-family: var(--cx-mono);
    font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--cx-ink-3); padding: 4px 10px 6px;
}
.cx-secnav__item {
    display: flex; align-items: center; gap: var(--cx-s1);
    padding: 9px 10px; border-radius: 10px;
    font-size: 13.5px; font-weight: 500; text-decoration: none;
    color: var(--cx-ink-2); background: transparent;
    transition: background .12s ease, color .12s ease;
}
.cx-secnav__item:hover { background: var(--cx-card); color: var(--cx-ink); }
.cx-secnav__item.is-active { font-weight: 600; color: var(--cx-primary); background: var(--cx-container); }
.cx-secnav__item span:first-child { flex: 1; }
.cx-secnav__meta { font-family: var(--cx-mono); font-size: 12px; color: var(--cx-ink-3); }

/* Coluna de decisão */
.cx-rail {
    flex: 1 1 340px;
    max-width: var(--cx-rail-w);
    position: sticky;
    top: 132px;
    display: flex;
    flex-direction: column;
    gap: var(--cx-s3);
}

/* Abas */
.cx-tabs {
    display: flex;
    flex-wrap: nowrap;
    gap: 4px;
    border-bottom: 1px solid var(--cx-border);
    overflow-x: auto;
    /* overflow-x:auto sozinho promove o eixo Y a auto (regra do CSS): o -1px da aba
       vira transbordo vertical e o navegador desenha barra de rolagem numa barra de
       duas abas. Fixa o eixo Y e esconde a barra do X — a rolagem continua no gesto. */
    overflow-y: hidden;
    scrollbar-width: none;
}
.cx-tabs::-webkit-scrollbar { height: 0; display: none; }

/* Conteúdo da aba não encosta no filete. */
.cx-tabs + .tab-content,
.cx-tabs + .cx-stack,
.cx-tabs + [data-cx-panel] { margin-top: var(--cx-s3); }
.tab-content > .tab-pane { padding-top: var(--cx-s3); }
/* O protótipo usa <a> nas abas; as views usam <button>, que traz borda do navegador nos QUATRO
   lados. Sem zerar `border` o filete inferior vira um retângulo e a aba deixa de parecer aba. */
.cx-tab {
    padding: 11px var(--cx-s3);
    font-size: 14px;
    font-weight: 500;
    text-decoration: none;
    color: var(--cx-ink-3);
    border: 0;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    white-space: nowrap;
    background: none;
    cursor: pointer;
}
.cx-tab:hover { color: var(--cx-ink); }
/* .active além de .is-active: as abas do modal de política por loja são alternadas por
   JavaScript legado, que liga `.active`. Enquanto esse script existir, os dois valem. */
.cx-tab.is-active, .cx-tab.active {
    font-weight: 600;
    color: var(--cx-primary);
    border-bottom-color: var(--cx-primary);
}
/* A marcação daquele modal ainda é <ul><li><a>: o <li> não pode virar item de lista. */
.cx-tabs > li { list-style: none; display: flex; }

/* -----------------------------------------------------------------------------
   Cards
   -------------------------------------------------------------------------- */
.cx-card {
    background: var(--cx-card);
    border: 1px solid var(--cx-border);
    border-radius: var(--cx-r-card);
    box-shadow: var(--cx-shadow-card);
}
.cx-card--flush { overflow: hidden; }
.cx-card--flat { box-shadow: none; }
.cx-card--dashed { border-style: dashed; border-color: var(--cx-border-2); box-shadow: none; }
.cx-card--deep { background: var(--cx-deep); border: none; color: #fff; }
.cx-card__pad { padding: 18px 22px 22px; }

.cx-card__head {
    padding: 18px 22px 14px;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--cx-s3);
    flex-wrap: wrap;
}
.cx-card__head > div:first-child { min-width: 0; }
.cx-card__head h2 {
    font-size: 17px; font-weight: 600; letter-spacing: -0.01em;
    display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
}
.cx-card__desc { margin-top: 5px; font-size: 13px; line-height: 1.5; color: var(--cx-ink-3); max-width: 680px; }
.cx-card__actions { display: flex; gap: var(--cx-s1); flex: none; }

/* Etiqueta "hoje é modal" / "campos nomeados por vendor" etc. */
.cx-tag {
    font-family: var(--cx-mono);
    font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase;
    background: var(--cx-info-bg); color: var(--cx-info-fg);
    border-radius: 6px; padding: 3px 8px; font-weight: 500;
}
.cx-tag--warn { background: var(--cx-warning-bg); color: var(--cx-warning-fg); }

/* -----------------------------------------------------------------------------
   Botões
   -------------------------------------------------------------------------- */
.cx-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-family: var(--cx-sans);
    font-size: 13px;
    font-weight: 500;
    line-height: 1.3;
    border-radius: var(--cx-r-btn);
    padding: 9px 15px;
    cursor: pointer;
    text-decoration: none;
    white-space: nowrap;
    border: 1px solid var(--cx-border);
    background: var(--cx-card);
    color: var(--cx-ink-2);
    transition: background .12s ease, border-color .12s ease, color .12s ease;
}
.cx-btn:hover { border-color: var(--cx-ink-4); background: var(--cx-subtle); color: var(--cx-ink-2); }

.cx-btn--primary {
    font-weight: 600;
    padding: 10px var(--cx-s3);
    border: none;
    background: var(--cx-deep);
    color: #fff;
}
.cx-btn--primary:hover { background: var(--cx-deep-3); color: #fff; }

.cx-btn--danger { border-color: var(--cx-error-bg); color: var(--cx-error-fg); }
.cx-btn--danger:hover { border-color: var(--cx-error); background: var(--cx-subtle); color: var(--cx-error-fg); }

.cx-btn--danger-solid { border: none; background: var(--cx-error); color: #fff; font-weight: 600; padding: 10px var(--cx-s3); }
.cx-btn--danger-solid:hover { background: var(--cx-error-fg); color: #fff; }

.cx-btn--neon { border: none; background: var(--cx-neon); color: var(--cx-deep); font-weight: 600; padding: 11px 18px; }
.cx-btn--neon:hover { background: #4CE9D5; color: var(--cx-deep); }

.cx-btn--lg { font-size: 14px; padding: 13px 18px; }
.cx-btn--block { width: 100%; justify-content: center; }
.cx-btn[disabled], .cx-btn.is-disabled { opacity: .5; cursor: not-allowed; pointer-events: none; }

/* Pill de ação em linha de tabela */
.cx-act {
    display: inline-flex;
    align-items: center;
    font-size: 12px;
    font-weight: 600;
    color: var(--cx-primary);
    background: var(--cx-container);
    border: none;
    border-radius: var(--cx-r-field);
    padding: 5px 10px;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    transition: background .12s ease, color .12s ease;
}
.cx-act:hover { background: var(--cx-primary); color: #fff; }
.cx-act--danger { color: var(--cx-error-fg); background: var(--cx-error-bg); }
.cx-act--danger:hover { background: var(--cx-error); color: #fff; }
.cx-act[disabled], .cx-act.is-disabled {
    color: var(--cx-ink-4); background: var(--cx-surface);
    cursor: not-allowed; pointer-events: none;
}

/* Botão só-ícone */
.cx-iconbtn {
    display: inline-flex; align-items: center; justify-content: center;
    width: 32px; height: 32px; border-radius: var(--cx-r-field);
    border: 1px solid transparent; background: none; color: var(--cx-ink-3);
    cursor: pointer;
}
.cx-iconbtn:hover { background: var(--cx-subtle); border-color: var(--cx-border); color: var(--cx-ink); }

/* -----------------------------------------------------------------------------
   Badges de status — mapa semântico fechado (handoff §2)
   -------------------------------------------------------------------------- */
.cx-badge {
    display: inline-flex;
    align-items: center;
    padding: 3px 9px;
    border-radius: var(--cx-r-pill);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: 0.02em;
    white-space: nowrap;
    background: var(--cx-surface);
    color: var(--cx-ink-3);
}
.cx-badge--ok    { background: var(--cx-success-bg); color: var(--cx-success-fg); }
.cx-badge--warn  { background: var(--cx-warning-bg); color: var(--cx-warning-fg); }
.cx-badge--bad   { background: var(--cx-error-bg);   color: var(--cx-error-fg); }
.cx-badge--info  { background: var(--cx-info-bg);    color: var(--cx-info-fg); }
.cx-badge--neu   { background: var(--cx-surface);    color: var(--cx-ink-3); }
.cx-badge--brand { background: var(--cx-container);  color: var(--cx-primary); }

/* -----------------------------------------------------------------------------
   Tabela de dados
   -------------------------------------------------------------------------- */
.cx-tablewrap { overflow-x: auto; }

.cx-table { width: 100%; border-collapse: collapse; }
.cx-table th {
    padding: var(--cx-head-pad);
    text-align: left;
    font-family: var(--cx-mono);
    font-size: 10px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--cx-ink-3);
    font-weight: 500;
    background: var(--cx-subtle);
    border-top: 1px solid var(--cx-divider);
    border-bottom: 1px solid var(--cx-divider);
    white-space: nowrap;
}
.cx-table td {
    padding: var(--cx-cell-pad);
    border-top: 1px solid var(--cx-divider);
    vertical-align: middle;
    font-size: var(--cx-cell-size);
    font-weight: 500;
    color: var(--cx-ink);
    white-space: nowrap;
}
.cx-table tbody tr { background: var(--cx-card); }
.cx-table tbody tr.is-hot { background: var(--cx-hot); }
.cx-table tbody tr.is-clickable { cursor: pointer; }
.cx-table tbody tr.is-clickable:hover { background: var(--cx-row-hover); }

.cx-table .cx-num, .cx-table td.cx-num, .cx-table th.cx-num { text-align: right; }
.cx-table th.cx-col-actions { text-align: right; }
/* A célula de ações é uma LINHA: com text-align sozinho, dois ou três botões numa
   coluna estreita quebram e empilham um sobre o outro. */
.cx-table td.cx-col-actions {
    text-align: right;
    white-space: nowrap;
}
.cx-table td.cx-col-actions > .cx-act,
.cx-table td.cx-col-actions > .cx-btn,
.cx-table td.cx-col-actions > .cx-iconbtn { vertical-align: middle; }
.cx-table td.cx-col-actions > * + * { margin-left: var(--cx-s1); }

/* Linha secundária mono sob a célula principal — é onde vão IDs e qualificadores */
.cx-sub {
    display: block;
    font-family: var(--cx-mono);
    font-size: 12px;
    font-weight: 500;
    color: var(--cx-ink-3);
    margin-top: 2px;
}
.cx-cell-mono { font-family: var(--cx-mono); font-size: var(--cx-cell-size-mono); font-weight: 500; color: var(--cx-ink-2); }
.cx-cell-mut { color: var(--cx-ink-3); font-weight: 500; }
.cx-cell-actions { display: flex; gap: 6px; justify-content: flex-end; }

.cx-table__foot {
    padding: var(--cx-s2) 22px;
    border-top: 1px solid var(--cx-divider);
    display: flex; align-items: center; justify-content: space-between;
    gap: var(--cx-s3); font-size: 12px; color: var(--cx-ink-3);
    flex-wrap: wrap;
}

/* Paginação */
.cx-pager { display: flex; gap: 6px; }
.cx-pager button, .cx-pager a, .cx-pager span {
    font-family: var(--cx-mono); font-size: 11px;
    border: 1px solid var(--cx-border); border-radius: var(--cx-r-field);
    padding: 4px 10px; color: var(--cx-ink-2); background: var(--cx-card);
    cursor: pointer; text-decoration: none;
}
.cx-pager .is-active { border-color: var(--cx-primary); background: var(--cx-container); color: var(--cx-primary); font-weight: 600; }
.cx-pager .is-disabled, .cx-pager [disabled] { color: var(--cx-ink-4); cursor: not-allowed; pointer-events: none; }

/* Campo com código externo obrigatório — o padrão novo do handoff §2 */
.cx-codefield {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    min-width: 112px;
    border: 1px solid var(--cx-border);
    background: var(--cx-subtle);
    border-radius: var(--cx-r-field);
    padding: 6px 10px;
}
.cx-codefield input {
    border: none; background: none; outline: none; padding: 0; min-width: 0; width: 100%;
    font-family: var(--cx-mono); font-size: 12.5px; font-weight: 500; color: var(--cx-ink);
}
.cx-codefield input::placeholder { color: var(--cx-ink-3); }
.cx-codefield .cx-i { font-size: 16px; margin-left: auto; }
.cx-codefield__ok { color: var(--cx-success-fg); }
.cx-codefield__err { color: var(--cx-error); }
/* Pendente: vazio E o item está habilitado */
.cx-codefield.is-pending { border-color: var(--cx-error); background: var(--cx-error-field); }
.cx-codefield.is-pending input { color: var(--cx-error-fg); }
.cx-codefield.is-pending input::placeholder { color: var(--cx-error-fg); }
/* Neutro: vazio e o item está desabilitado */
.cx-codefield.is-off { background: var(--cx-surface); border-color: var(--cx-border); }
.cx-codefield.is-off input { color: var(--cx-ink-4); }

/* -----------------------------------------------------------------------------
   Os cinco estados que toda lista precisa (handoff §2)
   -------------------------------------------------------------------------- */
.cx-state {
    /* Margem no topo: dentro de um cartao o estado vazio vem logo depois da tabela e, quando
       nao ha linhas, encostava no cabecalho dela. Quem precisa de zero sobrescreve inline. */
    margin: 16px 22px 20px;
    border: 1px dashed var(--cx-border-2);
    border-radius: var(--cx-r-btn);
    padding: 18px;
    background: var(--cx-subtle);
    display: flex;
    flex-direction: column;
    gap: var(--cx-s1);
    align-items: flex-start;
}
.cx-state__title { font-size: 14px; font-weight: 600; color: var(--cx-ink); }
.cx-state__text { font-size: 13px; line-height: 1.55; color: var(--cx-ink-3); max-width: 560px; }
.cx-state--error { border-style: solid; border-color: var(--cx-error); background: var(--cx-error-field); }
.cx-state--error .cx-state__title { color: var(--cx-error-fg); }
.cx-state--perm { border-style: solid; border-color: var(--cx-warning); background: var(--cx-warning-bg); }
.cx-state--perm .cx-state__title { color: var(--cx-warning-fg); }

/* Esqueleto com a altura das linhas reais — nunca spinner centralizado */
.cx-skeleton td { padding: var(--cx-cell-pad); }
.cx-skeleton__bar {
    display: block;
    height: 12px;
    border-radius: 6px;
    background: linear-gradient(90deg, var(--cx-divider) 25%, #F6F8F9 37%, var(--cx-divider) 63%);
    background-size: 400% 100%;
    animation: cx-shimmer 1.3s ease infinite;
}
@keyframes cx-shimmer { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
@media (prefers-reduced-motion: reduce) {
    .cx-skeleton__bar { animation: none; }
}

/* -----------------------------------------------------------------------------
   Faixa de aviso
   -------------------------------------------------------------------------- */
.cx-alert {
    display: flex;
    gap: 14px;
    align-items: flex-start;
    border-radius: 14px;
    padding: var(--cx-s3) 18px;
    background: var(--cx-warning-bg);
    border: 1px solid var(--cx-warning);
    color: var(--cx-warning-fg);
}
.cx-alert__body { min-width: 0; flex: 1; }
.cx-alert__title { font-size: 14px; font-weight: 600; margin-bottom: 3px; }
.cx-alert__text { font-size: 13px; line-height: 1.55; }
.cx-alert .cx-i { font-size: 21px; line-height: 1.2; color: var(--cx-warning); }
.cx-alert__cta {
    flex: none; font-size: 12.5px; font-weight: 600; color: #fff;
    background: var(--cx-warning); border: none; border-radius: 9px;
    padding: var(--cx-s1) 13px; text-decoration: none; white-space: nowrap; cursor: pointer;
}
.cx-alert__cta:hover { color: #fff; filter: brightness(.92); }

.cx-alert--bad { background: var(--cx-error-field); border-color: var(--cx-error); color: var(--cx-error-fg); }
.cx-alert--bad .cx-i, .cx-alert--bad .cx-alert__cta { color: var(--cx-error); }
.cx-alert--bad .cx-alert__cta { background: var(--cx-error); color: #fff; }

.cx-alert--teal { background: var(--cx-container); border-color: var(--cx-primary); color: var(--cx-primary); }
.cx-alert--teal .cx-i { color: var(--cx-primary); }
.cx-alert--teal .cx-alert__cta { background: var(--cx-primary); color: #fff; }

.cx-alert--info { background: var(--cx-info-bg); border-color: var(--cx-info); color: var(--cx-info-fg); }
.cx-alert--info .cx-i { color: var(--cx-info); }
.cx-alert--info .cx-alert__cta { background: var(--cx-info); color: #fff; }

/* -----------------------------------------------------------------------------
   Campos de formulário
   -------------------------------------------------------------------------- */
.cx-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: var(--cx-s3); }
.cx-grid--tight { grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); }
.cx-grid--2 { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); }
.cx-span-2 { grid-column: span 2; }
.cx-span-3 { grid-column: span 3; }

.cx-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.cx-field > label { font-size: 12px; font-weight: 600; color: var(--cx-ink-2); }
.cx-field__req { color: var(--cx-error-fg); }
.cx-hint { font-size: 12px; color: var(--cx-ink-3); line-height: 1.45; }
.cx-err { font-size: 12px; color: var(--cx-error-fg); line-height: 1.45; }

.cx-input, .cx-select, .cx-textarea {
    display: block;
    width: 100%;
    border: 1px solid var(--cx-border);
    background: var(--cx-subtle);
    border-radius: var(--cx-r-field);
    padding: 9px var(--cx-s2);
    font-family: var(--cx-sans);
    font-size: 13.5px;
    color: var(--cx-ink);
    transition: border-color .12s ease, box-shadow .12s ease;
}
.cx-input::placeholder, .cx-textarea::placeholder { color: var(--cx-ink-4); }
.cx-input:focus, .cx-select:focus, .cx-textarea:focus {
    outline: none;
    border-color: var(--cx-primary);
    box-shadow: 0 0 0 3px rgba(8, 101, 90, .12);
}
.cx-input:disabled, .cx-select:disabled, .cx-textarea:disabled { color: var(--cx-ink-4); cursor: not-allowed; }
.cx-input.is-invalid, .cx-select.is-invalid, .cx-textarea.is-invalid { border-color: var(--cx-error); background: var(--cx-error-field); }
.cx-input--mono { font-family: var(--cx-mono); }
.cx-textarea { min-height: 66px; line-height: 1.5; resize: vertical; }

.cx-select {
    appearance: none;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2369707C' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 10px center;
    background-size: 18px;
    padding-right: 34px;
}

/* Toggle */
.cx-toggle { display: inline-flex; align-items: center; gap: 10px; cursor: pointer; padding-top: 4px; }
.cx-toggle input { position: absolute; opacity: 0; width: 0; height: 0; }
.cx-toggle__track {
    width: 38px; height: 22px; border-radius: var(--cx-r-pill); flex: none;
    position: relative; background: var(--cx-border-2); transition: background .15s ease;
}
.cx-toggle__knob {
    position: absolute; top: 3px; left: 3px; width: 16px; height: 16px;
    border-radius: var(--cx-r-pill); background: #fff; transition: left .15s ease;
}
.cx-toggle input:checked + .cx-toggle__track { background: var(--cx-primary); }
.cx-toggle input:checked + .cx-toggle__track .cx-toggle__knob { left: 19px; }
.cx-toggle input:focus-visible + .cx-toggle__track { outline: 2px solid var(--cx-primary); outline-offset: 2px; }
.cx-toggle input:disabled + .cx-toggle__track { opacity: .5; }
.cx-toggle__text { font-size: 13px; font-weight: 500; color: var(--cx-ink-2); }

/* Rádio em cartão (coluna de decisão) */
.cx-radiocard {
    display: flex; align-items: center; gap: 11px;
    border: 1px solid var(--cx-border); border-radius: var(--cx-r-btn);
    padding: 11px 13px; background: var(--cx-card); color: var(--cx-ink);
    cursor: pointer; text-decoration: none;
}
.cx-radiocard:hover { border-color: var(--cx-ink-4); color: var(--cx-ink); }
.cx-radiocard input { position: absolute; opacity: 0; width: 0; height: 0; }
.cx-radiocard__dot {
    width: 16px; height: 16px; border-radius: var(--cx-r-pill); flex: none;
    border: 2px solid var(--cx-border-2); background: #fff;
}
.cx-radiocard input:checked ~ .cx-radiocard__dot,
.cx-radiocard.is-active .cx-radiocard__dot {
    border-color: var(--cx-primary); background: var(--cx-primary); box-shadow: inset 0 0 0 3px #fff;
}
.cx-radiocard:has(input:checked), .cx-radiocard.is-active { border-color: var(--cx-primary); background: var(--cx-container); }
.cx-radiocard__body { flex: 1; min-width: 0; }
.cx-radiocard__label { display: block; font-size: 13.5px; font-weight: 600; }
.cx-radiocard__hint { display: block; font-size: 11.5px; color: var(--cx-ink-3); margin-top: 1px; }

/* Checkbox */
.cx-check { display: inline-flex; align-items: center; gap: var(--cx-s1); cursor: pointer; font-size: 13px; }
.cx-check input { width: 16px; height: 16px; accent-color: var(--cx-primary); }
/* Caixas montadas por JavaScript (tabela de políticas) trazem estes nomes no HTML gerado. */
.form-check-input { width: 16px; height: 16px; accent-color: var(--cx-primary); flex: none; }
.form-check-label { font-size: 13px; color: var(--cx-ink-2); }

/* Régua fina entre blocos de um mesmo card. */
.cx-divider { height: 1px; background: var(--cx-divider); border: 0; }

/* Grupo de etiquetas preenchido por JavaScript (serviços de uma política). */
.capture-chips { display: flex; flex-wrap: wrap; gap: 4px; }

/* Slider */
.cx-slider { width: 100%; height: 4px; accent-color: var(--cx-primary); }
.cx-slider-row { display: flex; align-items: baseline; justify-content: space-between; gap: var(--cx-s2); }
.cx-slider-val {
    font-family: var(--cx-mono); font-size: 13px; font-weight: 600;
    color: var(--cx-primary); background: var(--cx-container);
    border-radius: 6px; padding: 2px var(--cx-s1);
}
.cx-slider-scale { display: flex; justify-content: space-between; font-family: var(--cx-mono); font-size: 12px; color: var(--cx-ink-3); }

/* Barra de botões do card */
.cx-formfoot {
    display: flex; gap: var(--cx-s1); flex-wrap: wrap;
    margin-top: 20px; padding-top: 18px; border-top: 1px solid var(--cx-divider);
}

/* Passos do assistente */
.cx-steps { display: flex; gap: var(--cx-s1); align-items: center; margin-bottom: 20px; flex-wrap: wrap; }
.cx-step {
    display: inline-flex; align-items: center; gap: var(--cx-s1);
    font-size: 13px; font-weight: 500; color: var(--cx-ink-4);
    padding: 7px var(--cx-s2); border-radius: var(--cx-r-pill);
    background: transparent; border: 1px solid var(--cx-border);
}
.cx-step__n {
    font-family: var(--cx-mono); font-size: 10px; font-weight: 600;
    width: 18px; height: 18px; border-radius: var(--cx-r-pill);
    display: inline-flex; align-items: center; justify-content: center;
    background: var(--cx-surface); color: var(--cx-ink-3);
}
.cx-step.is-active { font-weight: 600; color: var(--cx-deep); background: var(--cx-container); border-color: var(--cx-primary); }
.cx-step.is-active .cx-step__n { background: var(--cx-primary); color: #fff; }
.cx-step.is-done .cx-step__n { background: var(--cx-success); color: #fff; }

/* -----------------------------------------------------------------------------
   Views salvas
   -------------------------------------------------------------------------- */
.cx-views { display: flex; gap: var(--cx-s1); flex-wrap: wrap; align-items: center; }
.cx-view {
    display: inline-flex; align-items: center; gap: var(--cx-s1);
    text-decoration: none; font-size: 13px; font-weight: 500;
    padding: 7px var(--cx-s2); border-radius: var(--cx-r-pill);
    border: 1px solid var(--cx-border); background: var(--cx-card); color: var(--cx-ink-2);
    cursor: pointer;
}
.cx-view:hover { border-color: var(--cx-ink-4); color: var(--cx-ink-2); }
.cx-view__count { font-family: var(--cx-mono); font-size: 11px; font-weight: 600; color: var(--cx-ink-3); }
.cx-view.is-active { font-weight: 600; border-color: var(--cx-deep); background: var(--cx-deep); color: #fff; }
.cx-view.is-active .cx-view__count { color: var(--cx-neon); }

/* -----------------------------------------------------------------------------
   Blocos de dado (fields)
   -------------------------------------------------------------------------- */
.cx-facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 18px var(--cx-s4); }
.cx-fact { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.cx-fact__label {
    font-family: var(--cx-mono); font-size: 10px; letter-spacing: 0.1em;
    text-transform: uppercase; color: var(--cx-ink-3);
}
.cx-fact__value { font-size: 14px; font-weight: 600; color: var(--cx-ink); line-height: 1.4; }
.cx-fact__value--mono { font-family: var(--cx-mono); font-size: 13.5px; }
.cx-fact > .cx-badge { align-self: flex-start; }

/* Cartões de número */
.cx-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 14px; }
.cx-stat { background: var(--cx-card); border: 1px solid var(--cx-border); border-radius: 14px; padding: 18px 20px; }
.cx-stat__value { font-size: 28px; font-weight: 700; letter-spacing: -0.02em; line-height: 1.1; }
.cx-stat__label { font-size: 12.5px; color: var(--cx-ink-3); margin-top: 4px; }
.cx-stat__delta { font-family: var(--cx-mono); font-size: 11px; margin-top: var(--cx-s1); color: var(--cx-success-fg); }
.cx-stat__delta--down { color: var(--cx-warning-fg); }

/* Gráfico de barras simples */
.cx-bars { display: flex; align-items: flex-end; gap: 6px; height: 150px; }
.cx-bars span { flex: 1; border-radius: 4px 4px 0 0; background: var(--cx-container); display: block; }
.cx-bars span.is-recent { background: var(--cx-primary); }
.cx-bars-scale { display: flex; justify-content: space-between; font-family: var(--cx-mono); font-size: 10px; color: var(--cx-ink-4); margin-top: var(--cx-s1); }

/* -----------------------------------------------------------------------------
   Lista arrastável de etapas
   -------------------------------------------------------------------------- */
.cx-phase + .cx-phase { margin-top: 18px; }
.cx-phase__head { display: flex; align-items: center; gap: 10px; margin-bottom: var(--cx-s1); }
.cx-phase__label {
    font-family: var(--cx-mono); font-size: 10px; letter-spacing: 0.12em;
    text-transform: uppercase; color: var(--cx-primary);
}
.cx-phase__rule { flex: 1; height: 1px; background: var(--cx-divider); }
.cx-phase__meta { font-family: var(--cx-mono); font-size: 10.5px; color: var(--cx-ink-4); }
.cx-phase__list { display: flex; flex-direction: column; gap: var(--cx-s1); }

.cx-step-row {
    display: flex; align-items: center; gap: var(--cx-s2);
    border: 1px solid var(--cx-border); border-radius: var(--cx-r-btn);
    padding: var(--cx-s2) 14px; background: var(--cx-card);
    transition: border-color .12s ease, box-shadow .12s ease;
}
.cx-step-row:hover { border-color: var(--cx-primary); box-shadow: var(--cx-shadow-lift); }
.cx-step-row.cx-dragging { opacity: .5; }
.cx-step-row.cx-dragover { border-color: var(--cx-primary); border-style: dashed; }
.cx-grip { color: var(--cx-ink-4); cursor: grab; font-size: 20px; }
.cx-grip:active { cursor: grabbing; }
.cx-step-row__n { font-family: var(--cx-mono); font-size: 11px; color: var(--cx-ink-3); width: 22px; flex: none; }
.cx-step-row__main { flex: 1; min-width: 0; }
.cx-step-row__name { display: block; font-size: 14px; font-weight: 600; }
.cx-step-row__svc { display: block; font-family: var(--cx-mono); font-size: 12px; color: var(--cx-ink-3); margin-top: 2px; }
.cx-step-row__stop { width: 132px; flex: none; justify-content: center; }
.cx-step-row__skip { font-size: 12px; color: var(--cx-ink-3); width: 132px; flex: none; }
.cx-step-row__cost { font-family: var(--cx-mono); font-size: 11px; color: var(--cx-ink-2); width: 66px; text-align: right; flex: none; }

.cx-hintchip {
    display: inline-flex; align-items: center; gap: 6px;
    font-size: 12px; color: var(--cx-primary); background: var(--cx-container);
    border-radius: var(--cx-r-field); padding: 6px 10px; flex: none;
}

.cx-cardfoot {
    display: flex; align-items: center; justify-content: space-between;
    gap: var(--cx-s3); margin-top: 20px; padding-top: var(--cx-s3);
    border-top: 1px solid var(--cx-divider); flex-wrap: wrap;
}
.cx-totals { display: flex; gap: 20px; font-size: 12.5px; color: var(--cx-ink-3); }
.cx-totals b { font-family: var(--cx-mono); color: var(--cx-ink); }

/* -----------------------------------------------------------------------------
   Checklist com progresso
   -------------------------------------------------------------------------- */
.cx-progress { height: 6px; border-radius: var(--cx-r-pill); background: var(--cx-divider); overflow: hidden; margin: var(--cx-s3) 0 20px; }
.cx-progress span { display: block; height: 100%; background: var(--cx-primary); border-radius: var(--cx-r-pill); }
.cx-progress.is-complete span { background: var(--cx-success); }
.cx-progress-num { font-size: 22px; font-weight: 700; letter-spacing: -0.02em; }
.cx-progress-cap { font-family: var(--cx-mono); font-size: 11px; color: var(--cx-ink-3); }

.cx-checklist { display: flex; flex-direction: column; gap: var(--cx-s1); }
.cx-checkitem {
    display: flex; align-items: center; gap: var(--cx-s2);
    padding: var(--cx-s2) 14px; border-radius: var(--cx-r-btn);
    border: 1px solid var(--cx-divider); background: var(--cx-card);
}
.cx-checkitem .cx-i { font-size: 20px; color: var(--cx-success); }
.cx-checkitem__body { flex: 1; min-width: 0; }
.cx-checkitem__label { display: block; font-size: 13.5px; font-weight: 600; }
.cx-checkitem__detail { display: block; font-size: 12px; color: var(--cx-ink-3); line-height: 1.45; margin-top: 2px; }
.cx-checkitem.is-pending { border-color: var(--cx-warning); background: var(--cx-warning-bg); }
.cx-checkitem.is-pending .cx-i { color: var(--cx-warning); }

/* -----------------------------------------------------------------------------
   Grade de dias de vencimento
   -------------------------------------------------------------------------- */
.cx-daygrid { display: grid; grid-template-columns: repeat(7, 1fr); gap: var(--cx-s1); }
.cx-day {
    display: flex; flex-direction: column; align-items: center; gap: 3px;
    padding: 10px 4px var(--cx-s1); border-radius: 10px; text-decoration: none;
    border: 1.5px solid var(--cx-border); background: var(--cx-card); color: var(--cx-ink-4);
    cursor: pointer;
}
.cx-day:hover { border-color: var(--cx-ink-4); color: var(--cx-ink-3); }
.cx-day__n { font-size: 15px; font-weight: 600; }
.cx-day__code { font-family: var(--cx-mono); font-size: 10.5px; color: var(--cx-border-2); }
.cx-day.is-on { border-color: var(--cx-primary); background: var(--cx-container); color: var(--cx-primary); }
.cx-day.is-on .cx-day__code { color: var(--cx-primary); }
.cx-day.is-on.is-pending { border-color: var(--cx-error); background: var(--cx-error-field); color: var(--cx-error-fg); }
.cx-day.is-on.is-pending .cx-day__code { color: var(--cx-error-fg); }

.cx-legend { display: flex; align-items: center; gap: 20px; margin-top: 18px; padding-top: var(--cx-s3); border-top: 1px solid var(--cx-divider); flex-wrap: wrap; }
.cx-legend__item { display: inline-flex; align-items: center; gap: 7px; font-size: 12.5px; color: var(--cx-ink-3); }
.cx-legend__swatch { width: 14px; height: 14px; border-radius: 5px; display: block; border: 1.5px solid var(--cx-border); background: var(--cx-card); }
.cx-legend__swatch--on { border-color: var(--cx-primary); background: var(--cx-container); }

/* -----------------------------------------------------------------------------
   Editor de contrato (Markdown + prévia)
   -------------------------------------------------------------------------- */
.cx-split { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--cx-s3); align-items: stretch; }
.cx-split > div { display: flex; flex-direction: column; gap: var(--cx-s1); min-width: 0; }
.cx-split__head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.cx-split__head span:first-child { font-size: 12px; font-weight: 600; color: var(--cx-ink-2); }
.cx-split__head span:last-child { font-family: var(--cx-mono); font-size: 11px; color: var(--cx-ink-3); }

.cx-md {
    flex: 1; background: var(--cx-deep); color: var(--cx-on-deep);
    border: none; border-radius: var(--cx-r-btn); padding: var(--cx-s3);
    font-family: var(--cx-mono); font-size: 11.5px; line-height: 1.8;
    min-height: 260px; max-height: 420px; resize: vertical; outline: none;
}
.cx-md:focus { box-shadow: 0 0 0 2px var(--cx-primary); }

.cx-preview {
    flex: 1; background: var(--cx-subtle); border: 1px solid var(--cx-border);
    border-radius: var(--cx-r-btn); padding: 20px 22px;
    font-size: 12.5px; line-height: 1.75; color: var(--cx-ink-2);
    overflow: auto; min-height: 260px; max-height: 420px;
}
.cx-preview h1, .cx-preview h2 { font-size: 15px; font-weight: 700; color: var(--cx-ink); margin-bottom: var(--cx-s2); }

.cx-vars { display: flex; flex-wrap: wrap; gap: 6px; }
.cx-var {
    font-family: var(--cx-mono); font-size: 11px; color: var(--cx-primary);
    background: var(--cx-container); border: none; border-radius: 6px;
    padding: 4px var(--cx-s1); cursor: pointer;
}
.cx-var:hover { background: var(--cx-primary); color: #fff; }

/* -----------------------------------------------------------------------------
   Bloco escuro do segredo (credencial criada)
   -------------------------------------------------------------------------- */
.cx-secret { background: var(--cx-deep); border-radius: var(--cx-r-card); padding: 24px 26px; color: #fff; position: relative; overflow: hidden; }
.cx-secret::before {
    content: ''; position: absolute; right: -70px; top: -70px;
    width: 240px; height: 240px; border-radius: 50%;
    background: var(--cx-primary); opacity: .2;
}
.cx-secret > * { position: relative; }
.cx-secret h2 { font-size: 20px; font-weight: 700; letter-spacing: -0.02em; margin-bottom: var(--cx-s1); }
.cx-secret__lead { font-size: 13.5px; line-height: 1.6; color: var(--cx-on-deep); max-width: 560px; margin-bottom: 20px; }
.cx-secret__pairs { display: flex; flex-direction: column; gap: 10px; max-width: 560px; }
.cx-secret__pair {
    display: flex; align-items: center; gap: var(--cx-s2);
    background: var(--cx-deep-2); border: 1px solid var(--cx-deep-line);
    border-radius: 10px; padding: var(--cx-s2) 14px;
}
.cx-secret__key {
    font-family: var(--cx-mono); font-size: 9.5px; letter-spacing: 0.1em;
    text-transform: uppercase; color: var(--cx-on-deep-3); width: 56px; flex: none;
}
.cx-secret__val { font-family: var(--cx-mono); font-size: 13px; color: #fff; flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.cx-copy { background: none; border: none; color: var(--cx-neon); cursor: pointer; flex: none; padding: 0; }
.cx-copy .cx-i { font-size: 18px; }
.cx-secret__foot { display: flex; align-items: center; gap: var(--cx-s2); margin-top: 20px; flex-wrap: wrap; }
.cx-secret__foot span { font-size: 12.5px; color: var(--cx-on-deep-2); }

/* -----------------------------------------------------------------------------
   Bloco de código
   -------------------------------------------------------------------------- */
.cx-code { background: var(--cx-deep); border-radius: var(--cx-r-card); padding: 20px 22px; }
.cx-code__head { display: flex; align-items: center; justify-content: space-between; gap: var(--cx-s3); margin-bottom: 14px; }
.cx-code__head .cx-kicker { color: var(--cx-neon); }
.cx-code__note { font-family: var(--cx-mono); font-size: 11px; color: var(--cx-on-deep-3); }
.cx-code pre {
    margin: 0; font-family: var(--cx-mono); font-size: 12px; line-height: 1.75;
    color: var(--cx-on-deep); white-space: pre-wrap; word-break: break-word;
}

/* -----------------------------------------------------------------------------
   Imagens capturadas
   -------------------------------------------------------------------------- */
.cx-shots { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: var(--cx-s2); }
.cx-shot { display: flex; flex-direction: column; gap: var(--cx-s1); }
.cx-shot__frame {
    aspect-ratio: 3 / 4; border-radius: var(--cx-r-btn); overflow: hidden;
    background: repeating-linear-gradient(135deg, var(--cx-hatch), var(--cx-hatch) 8px, var(--cx-border) 8px, var(--cx-border) 16px);
    display: flex; align-items: flex-end; padding: 10px; position: relative; cursor: zoom-in;
    border: none;
}
.cx-shot__frame img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.cx-shot__tag {
    position: relative; font-family: var(--cx-mono); font-size: 10.5px; color: var(--cx-ink-3);
    background: rgba(255, 255, 255, .85); border-radius: 5px; padding: 3px 6px;
}
.cx-shot > .cx-badge { align-self: flex-start; }

/* -----------------------------------------------------------------------------
   Seletor guiado de campo (JsonPath)
   -------------------------------------------------------------------------- */
.cx-guided { margin-top: 18px; border: 1px solid var(--cx-border); border-radius: var(--cx-r-btn); overflow: hidden; }
.cx-guided__head {
    display: flex; align-items: center; justify-content: space-between; gap: var(--cx-s2);
    padding: 11px 14px; background: var(--cx-subtle); border-bottom: 1px solid var(--cx-border);
}
.cx-guided__head span { font-size: 12.5px; font-weight: 600; color: var(--cx-ink-2); }
.cx-guided__swap { font-family: var(--cx-mono); font-size: 11px; color: var(--cx-primary); background: none; border: none; cursor: pointer; }
.cx-guided__body { padding: 14px; display: flex; flex-direction: column; gap: 10px; }
.cx-guided__path {
    font-family: var(--cx-mono); font-size: 13px; background: var(--cx-deep); color: var(--cx-neon);
    border: none; border-radius: var(--cx-r-field); padding: 11px 14px; display: block; width: 100%;
}
.cx-guided__path:focus { outline: 2px solid var(--cx-neon); outline-offset: -2px; }
.cx-fieldchips { display: flex; flex-wrap: wrap; gap: 6px; }
.cx-fieldchip {
    font-family: var(--cx-mono); font-size: 12px; text-decoration: none;
    padding: 6px 10px; border-radius: var(--cx-r-field);
    border: 1px solid var(--cx-border); background: var(--cx-card);
    color: var(--cx-ink-3); cursor: pointer;
}
.cx-fieldchip:hover { border-color: var(--cx-primary); color: var(--cx-primary); }
.cx-fieldchip.is-active { border-color: var(--cx-primary); background: var(--cx-container); color: var(--cx-primary); font-weight: 600; }

/* -----------------------------------------------------------------------------
   Coluna de decisão (detalhe da transação)
   -------------------------------------------------------------------------- */
.cx-failed { background: var(--cx-card); border: 1px solid var(--cx-warning); border-radius: var(--cx-r-card); overflow: hidden; box-shadow: var(--cx-shadow-card); }
.cx-failed__head { background: var(--cx-warning-bg); padding: 14px 20px; display: flex; align-items: center; gap: 10px; }
.cx-failed__head .cx-i { font-size: 19px; color: var(--cx-warning-fg); }
.cx-failed__title { font-size: 14px; font-weight: 600; color: var(--cx-warning-fg); }
.cx-failed__count { margin-left: auto; font-family: var(--cx-mono); font-size: 11px; font-weight: 600; color: var(--cx-warning-fg); }
.cx-failed__body { padding: 6px 20px var(--cx-s3); }
.cx-failed__rule { padding: var(--cx-s2) 0; border-bottom: 1px solid var(--cx-divider); }
.cx-failed__name { font-size: 13.5px; font-weight: 600; margin-bottom: 6px; }
.cx-failed__cmp { display: flex; align-items: center; gap: var(--cx-s1); font-family: var(--cx-mono); font-size: 12.5px; }
.cx-failed__exp { color: var(--cx-ink-3); }
.cx-failed__got { font-weight: 600; color: var(--cx-error-fg); }
.cx-failed__cmp .cx-i { font-size: 15px; color: var(--cx-ink-4); }
.cx-failed__note { margin-top: var(--cx-s2); font-size: 12.5px; line-height: 1.5; color: var(--cx-ink-3); }
.cx-failed__note b { color: var(--cx-ink); }

/* Cartão de decisão. O fundo é --cx-deep-2, não --cx-deep: sobre a página clara, o preto do
   fundo lia como buraco. E os rótulos usam --cx-on-deep-2, não o -3: o -3 (#5C6780) é o tom dos
   itens apagados da barra lateral e fica em ~3:1 sobre o escuro — reprova em AA para texto miúdo,
   ainda mais em 9,5px maiúsculo. */
.cx-decision {
    background: var(--cx-deep-2);
    border: 1px solid var(--cx-deep-line-2);
    border-radius: var(--cx-r-card);
    padding: 20px 22px;
    color: #fff;
}
.cx-decision__trio { display: flex; flex-direction: column; gap: 10px; }
.cx-decision__row { display: flex; align-items: center; gap: var(--cx-s2); }
.cx-decision__key {
    font-family: var(--cx-mono); font-size: 10px; letter-spacing: 0.1em;
    text-transform: uppercase; color: var(--cx-on-deep-2); width: 74px; flex: none;
}
/* Não decidida: itálico, nunca travessão */
.cx-decision__undecided { font-size: 13.5px; color: var(--cx-on-deep); font-style: italic; }
.cx-decision__hr { height: 1px; background: var(--cx-deep-line); margin: 18px 0; }

.cx-scale { display: flex; flex-direction: column; gap: 6px; }
.cx-scale__ends { display: flex; justify-content: space-between; font-family: var(--cx-mono); font-size: 11px; color: var(--cx-on-deep-2); }
.cx-scale__track { position: relative; height: var(--cx-s1); border-radius: var(--cx-r-pill); background: var(--cx-deep-3); overflow: hidden; }
.cx-scale__band { position: absolute; left: 0; top: 0; bottom: 0; background: var(--cx-warning-bg); }
.cx-scale__mark { position: absolute; left: 0; top: 0; bottom: 0; border-right: 2px solid var(--cx-neon); }
.cx-scale__labels { display: flex; justify-content: space-between; font-size: 11px; color: var(--cx-on-deep-3); margin-top: 2px; }

.cx-decision__facts { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 20px; }
.cx-decision__facts .cx-fact__label { color: var(--cx-on-deep-2); font-size: 10px; }
.cx-decision__facts .cx-fact__value { color: #fff; font-size: 14px; margin-top: 3px; }

.cx-flags { display: flex; flex-direction: column; gap: var(--cx-s2); }
.cx-flag { display: flex; gap: 10px; align-items: flex-start; }
.cx-flag .cx-i { font-size: 20px; line-height: 1.2; color: var(--cx-success-fg); }
.cx-flag.is-warn .cx-i { color: var(--cx-warning-fg); }
.cx-flag.is-bad .cx-i { color: var(--cx-error-fg); }
.cx-flag__title { display: block; font-size: 13px; font-weight: 600; }
.cx-flag__detail { display: block; font-size: 12px; color: var(--cx-ink-3); line-height: 1.45; margin-top: 1px; }

.cx-more {
    display: inline-flex; align-items: center; gap: 5px;
    font-size: 12.5px; font-weight: 600; margin-top: 14px;
    background: none; border: none; cursor: pointer; color: var(--cx-primary); padding: 0;
}
.cx-more .cx-i { font-size: 16px; }

/* -----------------------------------------------------------------------------
   Nota de decisão de design (opcional, controlada por [data-cx-notes])
   -------------------------------------------------------------------------- */
.cx-note {
    background: var(--cx-container); border-radius: var(--cx-r-btn);
    padding: 14px 18px; display: flex; gap: var(--cx-s2); align-items: flex-start;
}
.cx-note .cx-i { font-size: 19px; color: var(--cx-primary); line-height: 1.3; }
.cx-note p { font-size: 13.5px; line-height: 1.55; color: var(--cx-deep); text-wrap: pretty; }
html[data-cx-notes="off"] .cx-note { display: none; }

/* -----------------------------------------------------------------------------
   Diálogo — modal e confirmação de ação irreversível
   -------------------------------------------------------------------------- */
.cx-backdrop {
    position: fixed; inset: 0; background: rgba(11, 16, 32, .55);
    display: flex; align-items: center; justify-content: center;
    padding: var(--cx-s5); z-index: 60; overflow-y: auto;
}
.cx-backdrop[hidden] { display: none; }

.cx-dialog {
    background: var(--cx-card); border-radius: 18px; width: 100%; max-width: 468px;
    padding: 28px 30px 26px; box-shadow: var(--cx-shadow-modal); margin: auto;
}
.cx-dialog--md { max-width: 680px; }
.cx-dialog--lg { max-width: 960px; }
.cx-dialog__icon {
    display: inline-flex; align-items: center; justify-content: center;
    width: 44px; height: 44px; border-radius: var(--cx-r-btn); margin-bottom: var(--cx-s3);
    background: var(--cx-error-bg); color: var(--cx-error-fg); font-size: 23px;
}
.cx-dialog__icon--warn { background: var(--cx-warning-bg); color: var(--cx-warning-fg); }
.cx-dialog__icon--info { background: var(--cx-info-bg); color: var(--cx-info-fg); }
.cx-dialog__icon--ok { background: var(--cx-success-bg); color: var(--cx-success-fg); }
.cx-dialog h3 { font-size: 20px; font-weight: 700; letter-spacing: -0.015em; margin-bottom: var(--cx-s1); }
.cx-dialog__lead { font-size: 13.5px; line-height: 1.6; color: var(--cx-ink-3); margin-bottom: 18px; }
.cx-dialog__foot { display: flex; gap: var(--cx-s1); justify-content: flex-end; flex-wrap: wrap; }
.cx-dialog__body { max-height: min(70vh, 620px); overflow-y: auto; margin-bottom: 20px; }

/* O que será gravado, linha a linha */
.cx-recap { border: 1px solid var(--cx-border); border-radius: var(--cx-r-btn); overflow: hidden; margin-bottom: 20px; }
.cx-recap__row {
    display: grid; grid-template-columns: 132px 1fr; gap: var(--cx-s2);
    padding: 10px 14px; border-top: 1px solid var(--cx-divider); font-size: 13px;
}
.cx-recap__row:first-child { border-top: none; }
.cx-recap__row dt { color: var(--cx-ink-3); }
.cx-recap__row dd { font-weight: 600; margin: 0; }

/* Modal genérico com cabeçalho */
.cx-dialog__head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--cx-s3); margin-bottom: var(--cx-s3); }
.cx-dialog__head h3, .cx-dialog__head h2 { margin: 0; font-size: 18px; font-weight: 600; }
/* Wrapper interno herdado da marcação antiga: não desenha nada por si. */
.cx-dialog__inner { display: contents; }

/* Blocos recolhíveis: marcação antiga usava .collapse do Bootstrap. */
.collapse { display: none; }
.collapse.cx-open, .collapse.show { display: block; }

/* Abas internas herdadas (.tab-pane): sem o CSS do tema, todas apareciam
   empilhadas até o primeiro clique. Só a ativa é exibida. */
.tab-pane { display: none; }
.tab-pane.active, .tab-pane.show.active { display: block; }

/* .d-none é ALTERNADO POR JAVASCRIPT em 4 telas (39 pontos) para mostrar/esconder
   valor e indicador de carga. Sem regra, o classList.add não escondia nada: o
   indicador ficava para sempre na tela e o valor aparecia junto. */
.d-none { display: none !important; }

/* Texto só para leitor de tela. Sem regra ele VIRA TEXTO VISÍVEL — era daí que saía
   o "Carregando..." solto no meio do card de uso. */
.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* Indicador de carga herdado: mesma volta do .cx-spinner, para a marcação antiga. */
.spinner-border {
    display: inline-block;
    width: 20px;
    height: 20px;
    border: 2px solid var(--cx-border-2);
    border-top-color: var(--cx-primary);
    border-radius: var(--cx-r-pill);
    animation: cx-spin .7s linear infinite;
    vertical-align: -3px;
}
.spinner-border-sm { width: 14px; height: 14px; border-width: 2px; }

/* -----------------------------------------------------------------------------
   Aviso flutuante (substitui o toast do SweetAlert)
   -------------------------------------------------------------------------- */
.cx-toasts {
    position: fixed; right: var(--cx-s4); bottom: var(--cx-s4);
    display: flex; flex-direction: column; gap: 10px; z-index: 80; max-width: 380px;
}
.cx-toast {
    display: flex; align-items: flex-start; gap: 10px;
    background: var(--cx-card); border: 1px solid var(--cx-border);
    border-left: 3px solid var(--cx-primary);
    border-radius: var(--cx-r-btn); padding: 12px 14px;
    box-shadow: var(--cx-shadow-lift); font-size: 13px; line-height: 1.5;
    animation: cx-rise .16s ease;
}
.cx-toast--ok  { border-left-color: var(--cx-success); }
.cx-toast--bad { border-left-color: var(--cx-error); }
.cx-toast--warn{ border-left-color: var(--cx-warning); }
.cx-toast .cx-i { font-size: 19px; color: var(--cx-primary); }
.cx-toast--ok .cx-i { color: var(--cx-success); }
.cx-toast--bad .cx-i { color: var(--cx-error); }
.cx-toast--warn .cx-i { color: var(--cx-warning); }
.cx-toast__body { flex: 1; min-width: 0; }
.cx-toast__title { font-weight: 600; }
.cx-toast__text { color: var(--cx-ink-3); }
@keyframes cx-rise { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

/* -----------------------------------------------------------------------------
   Telas de autenticação (Login, Acesso negado)
   -------------------------------------------------------------------------- */
.cx-auth { min-height: 100vh; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.cx-auth__aside {
    background: var(--cx-deep); color: #fff; padding: 56px 56px var(--cx-s6);
    display: flex; flex-direction: column; justify-content: space-between;
    position: relative; overflow: hidden;
}
.cx-auth__aside::before {
    content: ''; position: absolute; right: -140px; top: -120px;
    width: 440px; height: 440px; border-radius: 50%;
    background: var(--cx-primary); opacity: .22;
}
.cx-auth__aside > * { position: relative; }
.cx-auth__lockup { display: flex; align-items: center; gap: var(--cx-s2); }
.cx-auth__lockup .cx-wordmark { font-size: 22px; }
.cx-auth__lockup .cx-lockup__bar { height: 20px; }
.cx-auth__kicker {
    font-family: var(--cx-mono); font-size: 11px; letter-spacing: 0.16em;
    text-transform: uppercase; color: var(--cx-neon); margin-bottom: 18px;
}
/* Marca compondo o lockup das telas de autenticação. O lockup é flex e centralizado,
   então a marca entra como primeiro item da linha — 28px para casar com o wordmark de
   22px, e sem encolher se a barra apertar. */
.cx-auth__mark { flex: none; }

.cx-auth__claim { font-size: 40px; font-weight: 700; letter-spacing: -0.03em; line-height: 1.05; max-width: 420px; }
.cx-auth__claim em { font-style: normal; color: var(--cx-neon); }
.cx-auth__lead { margin-top: 18px; font-size: 15px; line-height: 1.6; color: var(--cx-on-deep); max-width: 380px; }
.cx-auth__env { font-family: var(--cx-mono); font-size: 11px; color: var(--cx-on-deep-3); }

.cx-auth__panel { background: var(--cx-card); display: flex; align-items: center; justify-content: center; padding: var(--cx-s6); }
.cx-auth__form { width: 100%; max-width: 372px; }
.cx-auth__form h1 { font-size: 28px; font-weight: 700; letter-spacing: -0.02em; margin-bottom: 6px; }
.cx-auth__form > p { font-size: 14px; color: var(--cx-ink-3); margin-bottom: 28px; }
.cx-auth__fields { display: flex; flex-direction: column; gap: var(--cx-s3); }
.cx-auth__labelrow { display: flex; justify-content: space-between; align-items: baseline; }
.cx-auth__foot { margin-top: 26px; font-size: 12px; line-height: 1.6; color: var(--cx-ink-4); }
.cx-auth .cx-input { padding: var(--cx-s2) 14px; font-size: 15px; }
.cx-auth .cx-input--mono { letter-spacing: .01em; }
.cx-pwd { position: relative; }
.cx-pwd .cx-input { padding-right: 44px; }
.cx-pwd__eye {
    position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
    background: none; border: none; color: var(--cx-ink-3); cursor: pointer; padding: 4px;
}

.cx-denied { width: 100%; max-width: 400px; }
.cx-denied__icon {
    display: inline-flex; align-items: center; justify-content: center;
    width: 52px; height: 52px; border-radius: 14px;
    background: var(--cx-warning-bg); color: var(--cx-warning-fg);
    font-size: 26px; margin-bottom: 20px;
}
.cx-denied h1 { font-size: 26px; font-weight: 700; letter-spacing: -0.02em; margin-bottom: var(--cx-s1); }
.cx-denied__lead { font-size: 14px; line-height: 1.6; color: var(--cx-ink-3); margin-bottom: 20px; }
.cx-denied__box {
    border: 1px solid var(--cx-border); border-radius: var(--cx-r-btn);
    padding: 14px var(--cx-s3); background: var(--cx-subtle);
    font-size: 13px; line-height: 1.6; color: var(--cx-ink-2); margin-bottom: 22px;
}
.cx-denied__box span { font-family: var(--cx-mono); }

/* -----------------------------------------------------------------------------
   Botão com indicador de progresso
   Vários scripts de tela alternam [data-kt-indicator] no botão de salvar. Era o
   CSS do Metronic que escondia o rótulo de espera; a regra vive aqui agora.
   -------------------------------------------------------------------------- */
.indicator-progress { display: none; }
[data-kt-indicator="on"] .indicator-label { display: none; }
[data-kt-indicator="on"] .indicator-progress { display: inline-flex; align-items: center; gap: 8px; }
[data-kt-indicator="on"] { pointer-events: none; opacity: .75; }

.cx-spinner {
    width: 14px; height: 14px; flex: none;
    border: 2px solid currentColor; border-right-color: transparent;
    border-radius: var(--cx-r-pill);
    animation: cx-spin .7s linear infinite;
}
@keyframes cx-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .cx-spinner { animation-duration: 2s; } }

/* -----------------------------------------------------------------------------
   Utilitários mínimos
   -------------------------------------------------------------------------- */
/* A pilha vertical do protótipo: `display:flex; flex-direction:column; gap:20px` no contêiner do
   conteúdo. Os modificadores repetem o layout de propósito — usados sozinhos (sem .cx-stack) eles
   não empilhavam nada, e o sintoma era card colado em card, sem nenhum erro visível. */
.cx-stack, .cx-stack--sm, .cx-stack--lg { display: flex; flex-direction: column; }
.cx-stack { gap: var(--cx-s3); }
.cx-stack--sm { gap: var(--cx-s1); }
.cx-stack--lg { gap: 20px; }
.cx-row { display: flex; align-items: center; gap: var(--cx-s1); flex-wrap: wrap; }
.cx-row--between { justify-content: space-between; }
.cx-row--end { justify-content: flex-end; }
.cx-grow { flex: 1; min-width: 0; }
.cx-none { flex: none; }
.cx-right { text-align: right; }
.cx-nowrap { white-space: nowrap; }
.cx-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cx-sr {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0;
}
/* Espaçamento na grade de 8pt do manual: 8 · 12 · 16 · 24 · 32 · 48. */
.cx-mt-0 { margin-top: 0; }
.cx-mt-1 { margin-top: var(--cx-s1); }
.cx-mt-2 { margin-top: var(--cx-s2); }
.cx-mt-3 { margin-top: var(--cx-s3); }
.cx-mt-4 { margin-top: var(--cx-s4); }
.cx-mt-5 { margin-top: var(--cx-s5); }
.cx-mt-6 { margin-top: var(--cx-s6); }
.cx-mb-0 { margin-bottom: 0; }
.cx-mb-1 { margin-bottom: var(--cx-s1); }
.cx-mb-2 { margin-bottom: var(--cx-s2); }
.cx-mb-3 { margin-bottom: var(--cx-s3); }
.cx-mb-4 { margin-bottom: var(--cx-s4); }
.cx-mb-5 { margin-bottom: var(--cx-s5); }
.cx-mb-6 { margin-bottom: var(--cx-s6); }
.cx-center { text-align: center; }
.cx-left { text-align: left; }
.cx-stack--row { flex-direction: row; align-items: center; }

/* -----------------------------------------------------------------------------
   Responsivo
   -------------------------------------------------------------------------- */
.cx-sidebar__toggle { display: none; }

@media (max-width: 1400px) {
    .cx-rail { position: static; max-width: none; flex-basis: 100%; }
}

@media (max-width: 1100px) {
    .cx-secnav { position: static; width: 100%; flex-direction: row; flex-wrap: wrap; gap: var(--cx-s2); }
    .cx-secnav__group { flex-direction: row; flex-wrap: wrap; align-items: center; }
    .cx-secnav__label { padding: 0 var(--cx-s1) 0 0; }
    .cx-split { grid-template-columns: minmax(0, 1fr); }
    .cx-auth { grid-template-columns: minmax(0, 1fr); }
    .cx-auth__aside { display: none; }
}

@media (max-width: 900px) {
    .cx-shell { display: block; }
    .cx-sidebar {
        position: fixed; left: 0; top: 0; bottom: 0; z-index: 50;
        transform: translateX(-100%); transition: transform .18s ease; height: 100dvh;
    }
    .cx-shell.is-nav-open .cx-sidebar { transform: none; }
    .cx-shell.is-nav-open::after {
        content: ''; position: fixed; inset: 0; background: rgba(11, 16, 32, .45); z-index: 40;
    }
    .cx-sidebar__toggle { display: inline-flex; }
    .cx-header, .cx-body-wrap { padding-left: var(--cx-s3); padding-right: var(--cx-s3); }
    .cx-daygrid { grid-template-columns: repeat(4, 1fr); }
    .cx-decision__facts { grid-template-columns: 1fr; }
}

@media print {
    .cx-sidebar, .cx-header__actions, .cx-tabs, .cx-toasts, .cx-backdrop { display: none !important; }
    body { background: #fff; }
    .cx-card { box-shadow: none; break-inside: avoid; }
}

/* -----------------------------------------------------------------------------
   Visor de imagem (lightbox)
   As capturas eram <a href> para o blob: o SAS vem sem content-type de imagem e o
   navegador BAIXA o arquivo em vez de mostrar. Agora abrem aqui dentro.
   -------------------------------------------------------------------------- */
.cx-lightbox {
    position: fixed;
    inset: 0;
    z-index: 90;
    background: rgba(11, 16, 32, .92);
    display: flex;
    flex-direction: column;
}
.cx-lightbox[hidden] { display: none; }

.cx-lightbox__bar {
    flex: none;
    display: flex;
    align-items: center;
    gap: var(--cx-s3);
    padding: var(--cx-s2) var(--cx-s4);
    border-bottom: 1px solid var(--cx-deep-line-2);
    color: #fff;
}
.cx-lightbox__name { font-size: 14px; font-weight: 600; }
.cx-lightbox__tools { margin-left: auto; display: flex; align-items: center; gap: var(--cx-s1); }
.cx-lightbox__btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    border: 1px solid var(--cx-deep-line-2);
    background: none;
    color: var(--cx-on-deep);
    cursor: pointer;
    border-radius: var(--cx-r-field);
    padding: 7px 11px;
    font-size: 12.5px;
    font-weight: 500;
    text-decoration: none;
}
.cx-lightbox__btn:hover { border-color: var(--cx-neon); color: #fff; }

.cx-lightbox__stage {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--cx-s4);
    min-height: 0;
}
.cx-lightbox__stage img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    border-radius: var(--cx-r-btn);
    background: var(--cx-hatch);
}

/* O quadro da miniatura vira botão: sem borda, sem fundo, cursor de zoom. */
button.cx-shot__frame {
    border: 0;
    padding: 0;
    background: none;
    cursor: zoom-in;
    display: block;
    width: 100%;
    font: inherit;
}
