/* =====================================================================
   Hema CRM — sistema próprio, leve, tokens trocáveis (paleta PROVISÓRIA:
   fechar a paleta = trocar meia dúzia de valores neste bloco).
   ===================================================================== */

:root {
    /* cor */
    --primaria: #c8102e;          /* fundo de botões/avatar (sempre com texto branco) */
    --primaria-escura: #a30d26;
    --primaria-suave: #fdeef0;
    --primaria-texto: #c8102e;    /* a marca quando é TEXTO (badge sigla, setas de ordenação) */
    --fundo: #f4f5f7;
    --superficie: #ffffff;
    --texto: #1b1f24;
    --texto-2: #5c6470;
    --borda: #e4e7ec;
    --borda-forte: #cdd3dc;
    --sidebar-fundo: #15181d;
    --sidebar-texto: #aab2bf;
    --sidebar-texto-ativo: #ffffff;
    --ok: #17803d;
    --ok-suave: #e8f6ee;
    --aviso: #96660a;
    --aviso-suave: #fdf3dd;
    --erro: #b42318;
    --erro-suave: #fdecea;
    --info: #175cd3;
    --info-suave: #eaf1fd;
    --neutro-suave: #eef0f3;

    /* forma */
    --raio: 10px;
    --raio-pequeno: 7px;
    --sombra: 0 1px 2px rgb(16 24 40 / 0.05), 0 1px 3px rgb(16 24 40 / 0.06);
    --sombra-modal: 0 20px 50px rgb(16 24 40 / 0.28);

    /* tipografia */
    --letra: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;

    /* logo (wordmark preto): sem filtro em fundo claro */
    --logo-filtro: none;
    /* logo em contexto escuro (sidebar): inversão por CSS — o ficheiro nunca se altera */
    --logo-filtro-escuro: invert(1) hue-rotate(180deg);
}

@media (prefers-color-scheme: dark) {
    :root {
        --fundo: #101318;
        --superficie: #181c23;
        --texto: #e7eaee;
        --texto-2: #98a1ad;
        --borda: #262c36;
        --borda-forte: #333b48;
        --sidebar-fundo: #0b0d11;
        --primaria-suave: #3a1218;
        --ok-suave: #11291a;
        --aviso-suave: #2e2410;
        --erro-suave: #331512;
        --info-suave: #12233d;
        --neutro-suave: #232933;
        --sombra: 0 1px 2px rgb(0 0 0 / 0.5);
        --logo-filtro: var(--logo-filtro-escuro);

        /* Primeiros planos TÊM de clarear com os fundos: os tons do modo claro
           são para texto escuro sobre fundo pálido e, mantidos aqui, ficavam
           abaixo do mínimo WCAG (o badge "expirada" chegava a 2.54:1 e os links
           a 2.85:1). Estes passam AA sobre os respectivos fundos escuros.
           --primaria NÃO clareia: é FUNDO de botões com texto branco, onde
           clarear pioraria o contraste — daí o token --primaria-texto separado. */
        --ok: #5ddb96;
        --aviso: #f0c250;
        --erro: #ff8b7d;
        --info: #7cb0ff;
        --primaria-texto: #ff8fa0;
    }
}

/* ------------------------------------------------------------------ */
/* base                                                                */
/* ------------------------------------------------------------------ */
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
    margin: 0;
    font-family: var(--letra);
    font-size: 14.5px;
    line-height: 1.5;
    color: var(--texto);
    background: var(--fundo);
}
a { color: var(--info); text-decoration: none; }
a:hover { text-decoration: underline; }
code { font-family: var(--mono); font-size: 0.92em; background: var(--neutro-suave); padding: 1px 5px; border-radius: 5px; }
h1, h2, h3 { margin: 0; font-weight: 650; }

.logo-hema { height: 26px; width: auto; display: block; filter: var(--logo-filtro); }

/* ------------------------------------------------------------------ */
/* estrutura app                                                       */
/* ------------------------------------------------------------------ */
.app { display: grid; grid-template-columns: 232px minmax(0, 1fr); min-height: 100vh; }

.sidebar {
    background: var(--sidebar-fundo);
    color: var(--sidebar-texto);
    display: flex;
    flex-direction: column;
    padding: 20px 14px;
    gap: 22px;
    position: sticky;
    top: 0;
    height: 100vh;
}
.sidebar__marca { display: flex; align-items: center; gap: 9px; padding: 2px 8px; }
.sidebar__marca .logo-hema { filter: var(--logo-filtro-escuro); height: 24px; }
.sidebar__crm {
    font-size: 11px; font-weight: 700; letter-spacing: 0.08em;
    color: #fff; background: var(--primaria);
    padding: 2px 7px; border-radius: 5px;
}
.sidebar__nav { display: flex; flex-direction: column; gap: 3px; flex: 1; }
.sidebar__link {
    color: var(--sidebar-texto);
    padding: 9px 10px;
    border-radius: var(--raio-pequeno);
    font-weight: 500;
}
.sidebar__link:hover { color: var(--sidebar-texto-ativo); background: rgb(255 255 255 / 0.06); text-decoration: none; }
.sidebar__link.is-ativo { color: var(--sidebar-texto-ativo); background: rgb(255 255 255 / 0.10); }
/* Bloco de conta: identifica com que conta se está e separa o "sair" da
   navegação — antes o nome era um link igual aos do menu e o sair ficava solto. */
.sidebar__rodape {
    display: flex; align-items: center; gap: 4px;
    border-top: 1px solid rgb(255 255 255 / 0.08); padding-top: 12px;
}
.conta {
    display: flex; align-items: center; gap: 9px;
    flex: 1; min-width: 0;                       /* min-width:0 = deixa o ellipsis funcionar */
    padding: 6px; border-radius: var(--raio-pequeno);
    color: var(--sidebar-texto);
}
.conta:hover { background: rgb(255 255 255 / 0.06); text-decoration: none; }
.conta.is-ativo { background: rgb(255 255 255 / 0.10); }
.conta__avatar {
    flex: none; width: 32px; height: 32px; border-radius: 50%;
    background: var(--primaria); color: #fff;
    display: grid; place-items: center;
    font-size: 11.5px; font-weight: 700; letter-spacing: 0.02em;
}
.conta__texto { min-width: 0; display: flex; flex-direction: column; line-height: 1.3; }
.conta__nome {
    color: #fff; font-size: 13px; font-weight: 600;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.conta__email {
    font-size: 11px; color: var(--sidebar-texto);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.conta__form { flex: none; display: flex; }
.conta__sair {
    all: unset; cursor: pointer; flex: none;
    color: var(--sidebar-texto);
    padding: 8px; border-radius: var(--raio-pequeno);
    display: grid; place-items: center;
}
.conta__sair:hover { color: #fff; background: rgb(255 255 255 / 0.08); }
.conta__sair:focus-visible { outline: 2px solid var(--primaria); outline-offset: 1px; }
.conta__sair svg { width: 16px; height: 16px; display: block; }

/* Backoffice = tabelas e grelhas: usa a largura toda (sem max-width de leitura). */
.conteudo { padding: 26px 32px 48px; width: 100%; min-width: 0; }
.topo { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }
.topo__titulo { font-size: 21px; }
.topo__acoes { display: flex; gap: 8px; flex-wrap: wrap; }
.migalhas { margin: -8px 0 14px; font-size: 13px; }
.migalhas a { color: var(--texto-2); }

/* ------------------------------------------------------------------ */
/* cartões / grelhas                                                   */
/* ------------------------------------------------------------------ */
.card {
    background: var(--superficie);
    border: 1px solid var(--borda);
    border-radius: var(--raio);
    box-shadow: var(--sombra);
    padding: 20px;
    margin-bottom: 20px;
}
.card__titulo { font-size: 15px; margin-bottom: 14px; }
.card__cabecalho { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 14px; flex-wrap: wrap; }
.card__cabecalho .card__titulo { margin-bottom: 0; }

/* auto-FIT (não auto-fill): colapsa as colunas vazias e os cartões esticam
   até preencher a linha — com auto-fill ficavam encolhidos à esquerda. */
.grelha-cartoes {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 14px;
    margin-bottom: 20px;
}
.grelha-cartoes .card { margin-bottom: 0; }
/* min(340px, 100%): abaixo de ~372px o track de 340px não encolhia e empurrava
   a página para scroll horizontal */
.grelha-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(340px, 100%), 1fr)); gap: 20px; align-items: start; }
.grelha-2 > .card { margin-bottom: 20px; }

/* Detalhe da instituição: o cartão de dados tem ~11 campos e o da licença 2 —
   50/50 deixava a direita às moscas. minmax(0,…) impede overflow da grelha. */
@media (min-width: 1200px) {
    .grelha-2--assimetrica { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); }
}

.stat { display: flex; flex-direction: column; gap: 2px; padding: 16px 18px; }
.stat__rotulo { font-size: 12.5px; color: var(--texto-2); font-weight: 550; }
.stat__valor { font-size: 26px; font-weight: 700; letter-spacing: -0.02em; }
.stat__nota { font-size: 12px; color: var(--texto-2); }
.stat--alerta { border-color: color-mix(in srgb, var(--erro) 45%, var(--borda)); }
.stat--alerta .stat__valor { color: var(--erro); }

/* ------------------------------------------------------------------ */
/* dashboard: secções, KPIs, gráficos, rankings                        */
/* ------------------------------------------------------------------ */
/* O painel é uma pilha de SECÇÕES temáticas, cada uma com uma grelha de
   12 colunas. Colunas explícitas (e não auto-fit) porque com auto-fit os
   cartões mudavam de largura conforme o conteúdo e nada alinhava de linha
   para linha. */
.dash { display: flex; flex-direction: column; gap: 28px; }
.dash-seccao { display: flex; flex-direction: column; gap: 12px; }
.dash-seccao__titulo {
    display: flex; align-items: center; gap: 12px;
    font-size: 11.5px; font-weight: 700; letter-spacing: 0.09em;
    text-transform: uppercase; color: var(--texto-2);
}
.dash-seccao__titulo::after {
    content: ""; flex: 1; height: 1px; background: var(--borda);
}
.dash-grelha {
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    gap: 16px;
}
/* os cartões da grelha esticam à altura da linha; o margin-bottom do .card
   genérico teria de sair, senão somava-se ao gap */
.dash-grelha > .card {
    margin-bottom: 0;
    display: flex; flex-direction: column;
    min-width: 0;
}
.col-3 { grid-column: span 3; }
.col-4 { grid-column: span 4; }
.col-5 { grid-column: span 5; }
.col-6 { grid-column: span 6; }
.col-7 { grid-column: span 7; }
.col-8 { grid-column: span 8; }
.col-12 { grid-column: span 12; }
@media (max-width: 1180px) {
    .col-3, .col-4, .col-5 { grid-column: span 6; }
    .col-7, .col-8 { grid-column: span 12; }
}
@media (max-width: 760px) {
    .col-3, .col-4, .col-5, .col-6, .col-7, .col-8 { grid-column: span 12; }
}

/* Os KPIs levam sparkline, por isso precisam de mais altura que .stat.
   Cinco colunas fixas: com auto-fit sobrava um cartão órfão numa linha só
   para ele. */
.kpis { grid-template-columns: repeat(5, minmax(0, 1fr)); }
@media (max-width: 1180px) { .kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 760px)  { .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 460px)  { .kpis { grid-template-columns: 1fr; } }
.kpi { gap: 2px; padding: 15px 17px 12px; }
.kpi__rotulo { font-size: 12.5px; color: var(--texto-2); font-weight: 550; }
.kpi__valor { font-size: 26px; font-weight: 700; letter-spacing: -0.02em; line-height: 1.25; }
.kpi__nota { font-size: 12px; color: var(--texto-2); }
/* a sparkline encosta ao fundo: as notas têm 1 ou 2 linhas e sem isto as
   curvas ficavam a alturas diferentes de cartão para cartão */
.kpi .spark { margin-top: auto; padding-top: 10px; }

/* dentro do cartão: cabeçalho no topo, gráfico centrado no espaço que sobra,
   nota de rodapé sempre em baixo */
.card__grafico { display: flex; align-items: center; flex: 1; min-height: 0; }
.card__grafico > * { width: 100%; }
.card__rodape { font-size: 12px; color: var(--texto-2); margin: 12px 0 0; }

.card__subtitulo {
    font-size: 12.5px; font-weight: 650; color: var(--texto-2);
    text-transform: uppercase; letter-spacing: 0.04em;
    margin: 22px 0 10px;
}

.g-svg { color: var(--texto); }
.g-svg + .texto-suave { margin: 10px 0 0; }

.legenda { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 12.5px; color: var(--texto-2); }
.legenda--coluna { flex-direction: column; gap: 8px; list-style: none; margin: 0; padding: 0; min-width: 0; }
.legenda__item { display: flex; align-items: center; gap: 7px; }
.legenda__item i { flex: none; width: 10px; height: 10px; border-radius: 3px; }
.legenda--coluna .legenda__item b { margin-left: auto; color: var(--texto); font-variant-numeric: tabular-nums; }

/* rosca + legenda lado a lado; quebra para coluna em cartões estreitos */
.rosca { display: flex; align-items: center; justify-content: center; gap: 22px; flex-wrap: wrap; width: 100%; }
.rosca .g-svg--quadrado { flex: none; }
.rosca .legenda--coluna { flex: 1; min-width: 170px; }

/* ranking: nome | barra | valor, com o nome a truncar antes da barra encolher */
.rank { display: flex; flex-direction: column; gap: 10px; }
/* dois rankings lado a lado têm nºs de linhas diferentes: o mais curto cresce
   para o cartão ficar da mesma altura e o rodapé alinhado com o do vizinho */
.dash-grelha > .card > .rank { flex: 1; }
.rank__linha { display: grid; grid-template-columns: minmax(0, 1fr) minmax(70px, 2fr) auto; align-items: center; gap: 10px; }
.rank__nome {
    font-size: 13px; min-width: 0;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.rank__nome a { color: inherit; }
.rank__nome a:hover { color: var(--primaria-texto); }
.rank__barra { height: 8px; border-radius: 999px; background: var(--neutro-suave); overflow: hidden; }
.rank__barra i { display: block; height: 100%; border-radius: 999px; min-width: 2px; }
.rank__valor { font-size: 12.5px; font-weight: 650; font-variant-numeric: tabular-nums; white-space: nowrap; }
.rank__pct { color: var(--texto-2); font-weight: 500; }
.rank__extra { grid-column: 1 / -1; font-size: 12px; color: var(--texto-2); margin: -4px 0 0; }

.mini-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(78px, 1fr)); gap: 10px; }
.mini-stat {
    background: var(--neutro-suave);
    border-radius: var(--raio-pequeno);
    padding: 10px 12px;
    display: flex; flex-direction: column; gap: 1px;
}
.mini-stat__valor { font-size: 19px; font-weight: 700; letter-spacing: -0.01em; }
.mini-stat__rotulo { font-size: 11.5px; color: var(--texto-2); }
.mini-stat--erro { background: var(--erro-suave); }
.mini-stat--erro .mini-stat__valor { color: var(--erro); }

/* ------------------------------------------------------------------ */
/* botões                                                              */
/* ------------------------------------------------------------------ */
.btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    font: inherit; font-weight: 570; font-size: 13.5px;
    border-radius: var(--raio-pequeno);
    border: 1px solid transparent;
    padding: 8px 14px;
    cursor: pointer;
    transition: background-color 120ms ease, border-color 120ms ease, opacity 120ms ease;
    text-decoration: none;
}
.btn:hover { text-decoration: none; }
.btn:disabled { opacity: 0.55; cursor: default; }
.btn--primario { background: var(--primaria); color: #fff; }
.btn--primario:hover:not(:disabled) { background: var(--primaria-escura); }
.btn--suave { background: var(--superficie); color: var(--texto); border-color: var(--borda-forte); }
.btn--suave:hover:not(:disabled) { background: var(--neutro-suave); }
.btn--perigo-suave { background: var(--superficie); color: var(--erro); border-color: color-mix(in srgb, var(--erro) 40%, var(--borda)); }
.btn--perigo-suave:hover:not(:disabled) { background: var(--erro-suave); }
.btn--perigo { background: var(--erro); color: #fff; }
.btn--perigo:hover:not(:disabled) { background: color-mix(in srgb, var(--erro) 85%, #000); }
.btn--pequeno { padding: 5px 10px; font-size: 12.5px; }
.btn--largo { width: 100%; }
.btn.a-carregar { position: relative; color: transparent !important; pointer-events: none; }
.btn.a-carregar::after {
    content: ""; position: absolute; inset: 0; margin: auto;
    width: 15px; height: 15px; border-radius: 50%;
    border: 2px solid rgb(255 255 255 / 0.45); border-top-color: #fff;
    animation: rodar 700ms linear infinite;
}
.btn--suave.a-carregar::after, .btn--perigo-suave.a-carregar::after {
    border-color: color-mix(in srgb, var(--texto) 30%, transparent); border-top-color: var(--texto);
}
@keyframes rodar { to { transform: rotate(360deg); } }

/* ------------------------------------------------------------------ */
/* formulários                                                         */
/* ------------------------------------------------------------------ */
.form-grelha { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px 16px; }
.form-grelha--1col { grid-template-columns: 1fr; }
.campo--2 { grid-column: span 2; }
@media (max-width: 640px) {
    .form-grelha { grid-template-columns: 1fr; }
    .campo--2 { grid-column: auto; }
}
.campo { display: flex; flex-direction: column; gap: 5px; }
.campo label { font-size: 12.5px; font-weight: 600; color: var(--texto-2); }
.campo small { font-size: 12px; color: var(--texto-2); }
.campo input, .campo select, .campo textarea,
.barra-filtros input, .barra-filtros select, .paginacao select, .campo-copiar input {
    font: inherit;
    color: var(--texto);
    background: var(--superficie);
    border: 1px solid var(--borda-forte);
    border-radius: var(--raio-pequeno);
    padding: 8px 10px;
    width: 100%;
}
.campo input:focus-visible, .campo select:focus-visible,
.barra-filtros input:focus-visible, .barra-filtros select:focus-visible {
    outline: 2px solid color-mix(in srgb, var(--primaria) 55%, transparent);
    outline-offset: 1px;
    border-color: var(--primaria);
}
.campo input:disabled { background: var(--neutro-suave); color: var(--texto-2); }
.form-acoes { margin-top: 16px; display: flex; justify-content: flex-end; gap: 8px; }

.input-prefixo { display: flex; align-items: stretch; }
.input-prefixo__texto {
    display: flex; align-items: center;
    border: 1px solid var(--borda-forte); border-right: 0;
    border-radius: var(--raio-pequeno) 0 0 var(--raio-pequeno);
    padding: 0 9px; background: var(--neutro-suave);
    font-family: var(--mono); font-size: 13px; color: var(--texto-2);
}
.input-prefixo input { border-radius: 0 var(--raio-pequeno) var(--raio-pequeno) 0; }

.lista-checkboxes { display: flex; flex-wrap: wrap; gap: 6px 16px; padding: 4px 0; }
.checkbox { display: inline-flex; align-items: center; gap: 7px; font-size: 13.5px; cursor: pointer; }
.checkbox input { accent-color: var(--primaria); width: 15px; height: 15px; }

.campo-copiar { display: flex; gap: 8px; }
.campo-copiar input { font-family: var(--mono); font-size: 12.5px; flex: 1; }

.lista-definicoes { display: grid; grid-template-columns: auto 1fr; gap: 6px 18px; margin: 0; }
.lista-definicoes dt { color: var(--texto-2); font-size: 13px; }
.lista-definicoes dd { margin: 0; }

.nota-info, .nota-aviso {
    font-size: 13px; border-radius: var(--raio-pequeno);
    padding: 10px 12px; margin: 14px 0 0;
}
.nota-info { background: var(--info-suave); color: var(--info); }
.nota-aviso { background: var(--aviso-suave); color: var(--aviso); }
.nota-aviso:empty { display: none; }

/* ------------------------------------------------------------------ */
/* tabelas                                                             */
/* ------------------------------------------------------------------ */
.tabela-scroll { overflow-x: auto; }
.tabela { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.tabela th, .tabela td { text-align: left; padding: 9px 10px; border-bottom: 1px solid var(--borda); vertical-align: middle; }
.tabela thead th {
    font-size: 12px; font-weight: 650; color: var(--texto-2);
    text-transform: uppercase; letter-spacing: 0.03em;
    border-bottom: 1px solid var(--borda-forte);
    white-space: nowrap;
}
.tabela tbody tr:hover { background: color-mix(in srgb, var(--neutro-suave) 55%, transparent); }
.tabela--clicavel tbody tr { cursor: pointer; }
.tabela th[data-ordem] { cursor: pointer; user-select: none; }
.tabela th[data-ordem]:hover { color: var(--texto); }
.tabela th[data-ordem]:focus-visible { outline: 2px solid var(--primaria); outline-offset: -2px; }
/* o <a> do nome herda a cor da célula: é caminho de teclado, não um link azul */
.ligacao-linha { color: inherit; }
.ligacao-linha:hover { text-decoration: underline; }
.tabela th[aria-sort="ascending"]::after { content: " ↑"; color: var(--primaria-texto); }
.tabela th[aria-sort="descending"]::after { content: " ↓"; color: var(--primaria-texto); }
.ta-direita { text-align: right !important; }
.acoes-linha { white-space: nowrap; }
.acoes-linha .btn + .btn { margin-left: 6px; }

.barra-filtros { display: flex; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.barra-filtros .input-pesquisa { max-width: 300px; }
.barra-filtros select { width: auto; }

.paginacao { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 14px; flex-wrap: wrap; }
.paginacao__info { font-size: 12.5px; color: var(--texto-2); }
.paginacao__controlos { display: flex; gap: 6px; align-items: center; }
.paginacao select { width: auto; padding: 6px 8px; }

/* ------------------------------------------------------------------ */
/* badges / estados                                                    */
/* ------------------------------------------------------------------ */
.badge {
    display: inline-block; font-size: 11.5px; font-weight: 650;
    padding: 2px 8px; border-radius: 999px; line-height: 1.5;
    vertical-align: baseline;
}
.badge--ativa { background: var(--ok-suave); color: var(--ok); }
.badge--suspensa { background: var(--aviso-suave); color: var(--aviso); }
.badge--arquivada { background: var(--neutro-suave); color: var(--texto-2); }
.badge--aviso { background: var(--aviso-suave); color: var(--aviso); }
.badge--erro { background: var(--erro-suave); color: var(--erro); }
.badge--neutro { background: var(--neutro-suave); color: var(--texto-2); }
.badge--sigla {
    background: var(--primaria-suave); color: var(--primaria-texto);
    font-family: var(--mono); font-weight: 700; letter-spacing: 0.02em;
}
.badge--grande { font-size: 13px; padding: 4px 12px; }

.cabecalho-instituicao { display: flex; align-items: center; gap: 10px; margin-bottom: 18px; flex-wrap: wrap; }
.texto-suave { color: var(--texto-2); font-size: 12.5px; }
.vazio { color: var(--texto-2); text-align: center; padding: 26px 10px; font-size: 13.5px; }

.linha-tempo { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.linha-tempo li { display: flex; gap: 12px; align-items: baseline; }
.linha-tempo__data { color: var(--texto-2); font-size: 12px; white-space: nowrap; font-family: var(--mono); }
.linha-tempo__texto { font-size: 13.5px; }

/* ------------------------------------------------------------------ */
/* modais (estáticos: fecham só no X/Cancelar/ESC, nunca no overlay)   */
/* ------------------------------------------------------------------ */
.modal-overlay {
    position: fixed; inset: 0; z-index: 60;
    background: rgb(9 12 17 / 0.55);
    display: flex; align-items: flex-start; justify-content: center;
    padding: 40px 16px;
    overflow-y: auto;
}
.modal-overlay[hidden] { display: none; }
.modal {
    background: var(--superficie);
    border-radius: 14px;
    box-shadow: var(--sombra-modal);
    width: 100%; max-width: 660px;
    animation: modal-entrar 140ms ease-out;
}
.modal--estreito { max-width: 480px; }
@keyframes modal-entrar { from { opacity: 0; transform: translateY(-8px); } }
.modal__cabecalho {
    display: flex; align-items: center; justify-content: space-between;
    padding: 16px 20px; border-bottom: 1px solid var(--borda);
}
.modal__cabecalho h2 { font-size: 15.5px; }
.modal__fechar {
    all: unset; cursor: pointer; font-size: 22px; line-height: 1;
    color: var(--texto-2); padding: 2px 8px; border-radius: 6px;
}
.modal__fechar:hover { background: var(--neutro-suave); color: var(--texto); }
/* all:unset apaga o outline do UA e ganha-lhe em especificidade — repor à mão,
   senão este botão fica sem qualquer indicador de foco por teclado */
.modal__fechar:focus-visible { outline: 2px solid var(--primaria); outline-offset: 2px; }
.modal__corpo { padding: 20px; }
.modal__seccao { font-size: 12.5px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--texto-2); margin: 20px 0 10px; }
.modal__rodape {
    display: flex; justify-content: flex-end; gap: 8px;
    padding: 14px 20px; border-top: 1px solid var(--borda);
}

/* ------------------------------------------------------------------ */
/* toasts                                                              */
/* ------------------------------------------------------------------ */
.toasts {
    position: fixed; top: 18px; right: 18px; z-index: 100;
    display: flex; flex-direction: column; gap: 8px;
    max-width: min(380px, calc(100vw - 36px));
}
.toast {
    background: var(--superficie);
    color: var(--texto);
    border: 1px solid var(--borda);
    border-left: 4px solid var(--info);
    border-radius: var(--raio-pequeno);
    box-shadow: var(--sombra-modal);
    padding: 11px 14px;
    font-size: 13.5px;
    animation: toast-entrar 160ms ease-out;
}
.toast--success { border-left-color: var(--ok); }
.toast--error { border-left-color: var(--erro); }
.toast--warning { border-left-color: var(--aviso); }
.toast--saida { opacity: 0; transform: translateX(12px); transition: opacity 200ms ease, transform 200ms ease; }
@keyframes toast-entrar { from { opacity: 0; transform: translateX(12px); } }

/* ------------------------------------------------------------------ */
/* página de login                                                     */
/* ------------------------------------------------------------------ */
.pagina-auth {
    min-height: 100vh; margin: 0;
    display: flex; align-items: center; justify-content: center;
    background:
        radial-gradient(1100px 500px at 85% -10%, color-mix(in srgb, var(--primaria) 9%, transparent), transparent 60%),
        var(--fundo);
    padding: 20px;
}
.auth { width: 100%; max-width: 400px; }
.auth__cartao { padding: 30px 28px; margin: 0; }
.auth__marca { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.auth__crm {
    font-size: 11px; font-weight: 700; letter-spacing: 0.08em;
    color: #fff; background: var(--primaria);
    padding: 2px 7px; border-radius: 5px;
}
.auth__subtitulo { color: var(--texto-2); font-size: 13px; margin: 0 0 20px; }
.auth__form { display: flex; flex-direction: column; gap: 14px; }

.auth__form .ta-centro { text-align: center; margin: 0; }
/* código TOTP: mono, largo, espaçado — lê-se de relance e não se confunde com a password */
.input-codigo {
    font-family: var(--mono) !important; font-size: 20px !important; letter-spacing: 0.35em;
    text-align: center;
}

/* ------------------------------------------------------------------ */
/* segurança da conta (2FA)                                            */
/* ------------------------------------------------------------------ */
.estado-2fa { display: flex; align-items: center; gap: 10px; margin: 14px 0; }
.form-acoes--esquerda { justify-content: flex-start; }
.nota-aviso--topo { margin: 0 0 18px; }
.passos-2fa { margin: 0; padding-left: 20px; display: flex; flex-direction: column; gap: 16px; font-size: 13.5px; }
.passos-2fa .campo { margin-top: 8px; }
/* o QR tem SEMPRE fundo branco (está no próprio SVG): o tema escuro não pode
   invertê-lo, senão a câmara não o lê */
.qr-2fa { margin-top: 8px; display: inline-block; line-height: 0; border-radius: 8px; overflow: hidden; background: #fff; }
.qr-2fa:empty { display: none; }
.qr-2fa svg { display: block; width: 220px; height: 220px; }
.segredo-2fa {
    display: block; margin: 8px 0 4px; padding: 8px 10px;
    font-size: 14px; letter-spacing: 0.08em; user-select: all; word-break: break-all;
}
.segredo-2fa:empty { display: none; }
.visualmente-oculto {
    position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ------------------------------------------------------------------ */
/* violações de dados / conformidade                                   */
/* ------------------------------------------------------------------ */
.stat--aviso { border-color: color-mix(in srgb, var(--aviso) 45%, var(--borda)); }
.stat--aviso .stat__valor { color: var(--aviso); }
.mini-stat--aviso { background: var(--aviso-suave); }
.mini-stat--aviso .mini-stat__valor { color: var(--aviso); }
.card--alerta { border-color: color-mix(in srgb, var(--erro) 45%, var(--borda)); }
.celula-descricao { max-width: 420px; }
.texto-nowrap { white-space: nowrap; }
.lista-definicoes--espacada { gap: 10px 18px; }
.lista-definicoes--espacada dd { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.nota-info code { background: color-mix(in srgb, var(--info) 12%, transparent); color: inherit; }
.campo textarea { resize: vertical; min-height: 64px; line-height: 1.45; }

/* ------------------------------------------------------------------ */
/* responsivo                                                          */
/* ------------------------------------------------------------------ */
@media (max-width: 860px) {
    .app { grid-template-columns: 1fr; }
    .sidebar {
        position: static; height: auto;
        flex-direction: row; align-items: center; flex-wrap: wrap; gap: 10px;
        padding: 12px 16px;
    }
    .sidebar__nav { flex-direction: row; flex-wrap: wrap; }
    .sidebar__rodape { border-top: 0; padding-top: 0; margin-left: auto; }
    .conta { flex: none; max-width: 210px; }
    .conta__email { display: none; }   /* na barra horizontal só cabe o nome */
    .conteudo { padding: 18px 16px 40px; }
}
