/* =====================================================================
   SKY - Design system
   ---------------------------------------------------------------------
   Objetivo desta folha: interface que uma pessoa sem treino consiga usar.
   Na pratica isso significa:
     - textos grandes o suficiente para ler sem esforco (16px de base)
     - um unico botao principal por tela, sempre na cor da marca
     - area de clique minima de 44x44px, confortavel no celular
     - contraste conferido; a cor nunca e a unica pista de significado
     - estados vazios que explicam o proximo passo, nunca telas em branco

   As cores da marca chegam por variaveis CSS injetadas no <head> pela
   aplicacao (BrandingService::variaveisCss), o que permite white label sem
   gerar uma folha de estilo por cliente.
   ===================================================================== */

/* ---------------------------------------------------------------------
   1. Tokens
   --------------------------------------------------------------------- */
:root {
    /* Marca (sobrescritas em tempo de execucao por empresa) */
    --marca-primaria: #1668E3;
    --marca-primaria-escura: #0F52B8;
    --marca-primaria-suave: rgba(22, 104, 227, 0.10);
    --marca-primaria-borda: rgba(22, 104, 227, 0.28);
    --marca-secundaria: #0A7A55;
    --marca-destaque: #0A7A55;
    --marca-destaque-suave: rgba(10, 122, 85, 0.12);
    --marca-sidebar: linear-gradient(135deg, #0F52B8 0%, #0A7A55 100%);
    --marca-sidebar-texto: #FFFFFF;
    --marca-botao: #1668E3;
    --marca-botao-hover: #0F52B8;
    --marca-botao-texto: #FFFFFF;
    --marca-contraste: #FFFFFF;
    --marca-gradiente-inicio: #0F52B8;
    --marca-gradiente-fim: #0A7A55;
    --marca-gradiente: linear-gradient(135deg, #0F52B8 0%, #0A7A55 100%);

    /* Neutros */
    --cor-fundo: #F5F6F8;
    --cor-superficie: #FFFFFF;
    --cor-superficie-2: #FAFAFB;
    --cor-borda: #E3E5E9;
    --cor-borda-forte: #CBD0D8;
    --cor-texto: #1C1F24;
    --cor-texto-suave: #5C6470;
    --cor-texto-fraco: #8A929E;

    /* Semanticas */
    --cor-sucesso: #12805C;
    --cor-sucesso-fundo: #E7F6F0;
    --cor-aviso: #9A6200;
    --cor-aviso-fundo: #FDF3E2;
    --cor-erro: #B3261E;
    --cor-erro-fundo: #FCEDEC;
    --cor-info: #1A5FB4;
    --cor-info-fundo: #EAF1FB;

    /* Tipografia */
    --fonte: 'Exo 2', 'Segoe UI', system-ui, -apple-system, 'Helvetica Neue', Arial, sans-serif;
    --texto-xs: 0.75rem;
    --texto-sm: 0.875rem;
    --texto-base: 1rem;
    --texto-lg: 1.125rem;
    --texto-xl: 1.375rem;
    --texto-2xl: 1.75rem;
    --texto-3xl: 2.25rem;

    /* Espacamento (escala de 4px) */
    --e1: 0.25rem;
    --e2: 0.5rem;
    --e3: 0.75rem;
    --e4: 1rem;
    --e5: 1.5rem;
    --e6: 2rem;
    --e7: 3rem;

    /* Formas */
    --raio-sm: 8px;
    --raio: 12px;
    --raio-lg: 18px;
    --raio-pill: 999px;

    --sombra-sm: 0 1px 2px rgba(16, 20, 28, 0.06);
    --sombra: 0 2px 8px rgba(16, 20, 28, 0.08);
    --sombra-lg: 0 12px 32px rgba(16, 20, 28, 0.14);

    --largura-menu: 268px;
    --altura-topo: 64px;
    --transicao: 160ms ease;
}

/* ---------------------------------------------------------------------
   2. Reset enxuto
   --------------------------------------------------------------------- */
*,
*::before,
*::after {
    box-sizing: border-box;
}

html {
    -webkit-text-size-adjust: 100%;
}

body {
    margin: 0;
    font-family: var(--fonte);
    font-size: var(--texto-base);
    line-height: 1.55;
    color: var(--cor-texto);
    background: var(--cor-fundo);
    -webkit-font-smoothing: antialiased;
}

img,
svg {
    max-width: 100%;
    vertical-align: middle;
}

h1, h2, h3, h4 {
    margin: 0 0 var(--e3);
    line-height: 1.25;
    font-weight: 700;
}

h1 { font-size: var(--texto-2xl); }
h2 { font-size: var(--texto-xl); }
h3 { font-size: var(--texto-lg); }
h4 { font-size: var(--texto-base); }

p { margin: 0 0 var(--e3); }

a {
    color: var(--marca-primaria);
    text-decoration: none;
}

a:hover { text-decoration: underline; }

/* Foco sempre visivel: navegacao por teclado precisa funcionar. */
:focus-visible {
    outline: 3px solid var(--marca-primaria);
    outline-offset: 2px;
    border-radius: var(--raio-sm);
}

/* Conteudo para leitor de tela */
.apenas-leitor {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.pular-para-conteudo {
    position: absolute;
    left: -9999px;
    top: 0;
    z-index: 200;
    padding: var(--e3) var(--e4);
    background: var(--cor-superficie);
    border-radius: 0 0 var(--raio) 0;
    box-shadow: var(--sombra);
}

.pular-para-conteudo:focus {
    left: 0;
}

/* ---------------------------------------------------------------------
   3. Estrutura
   --------------------------------------------------------------------- */
.aplicacao {
    display: flex;
    min-height: 100vh;
}

.conteudo {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.area {
    flex: 1;
    padding: var(--e5);
    max-width: 1360px;
    width: 100%;
    margin: 0 auto;
}

.area--cheia {
    padding: 0;
    max-width: none;
    display: flex;
    min-height: 0;
}

/* ---------------------------------------------------------------------
   4. Menu lateral
   --------------------------------------------------------------------- */
.menu {
    width: var(--largura-menu);
    flex-shrink: 0;
    /* Cor chapada quando a empresa escolhe uma; gradiente quando nao. */
    background: var(--marca-sidebar);
    color: var(--marca-sidebar-texto);
    display: flex;
    flex-direction: column;
    position: sticky;
    top: 0;
    height: 100vh;
    overflow-y: auto;
}

.menu__marca {
    display: flex;
    align-items: center;
    gap: var(--e3);
    padding: var(--e4) var(--e4);
    min-height: var(--altura-topo);
    border-bottom: 1px solid rgba(255, 255, 255, 0.14);
}

.menu__logo {
    width: 38px;
    height: 38px;
    border-radius: var(--raio-sm);
    background: rgba(255, 255, 255, 0.16);
    display: grid;
    place-items: center;
    font-weight: 800;
    flex-shrink: 0;
    overflow: hidden;
}

/* Links do menu herdam a cor do texto do menu, nunca a primaria da
   marca: o fundo do menu e da mesma familia de cor, e um link pintado
   com a primaria some sobre ele. Ja aconteceu com uma paleta vermelha. */
.menu a {
    color: inherit;
}

.menu a:hover {
    text-decoration: none;
}

.menu__logo img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.menu__nome {
    font-weight: 700;
    font-size: var(--texto-base);
    line-height: 1.2;
    color: var(--marca-sidebar-texto, #FFFFFF);
}

.menu__empresa {
    font-size: var(--texto-xs);
    color: var(--marca-sidebar-texto, #FFFFFF);
    opacity: .74;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.menu__secoes {
    padding: var(--e3) var(--e2) var(--e6);
    flex: 1;
}

.menu__titulo {
    font-size: var(--texto-xs);
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: rgba(255, 255, 255, 0.58);
    padding: var(--e4) var(--e3) var(--e2);
    font-weight: 700;
}

.menu__item {
    display: flex;
    align-items: flex-start;
    gap: var(--e3);
    padding: var(--e3);
    margin-bottom: 2px;
    border-radius: var(--raio-sm);
    color: rgba(255, 255, 255, 0.92);
    transition: background var(--transicao);
    min-height: 44px;
}

.menu__item:hover {
    background: rgba(255, 255, 255, 0.12);
    text-decoration: none;
    color: #fff;
}

.menu__item--ativo {
    background: rgba(255, 255, 255, 0.18);
    font-weight: 600;
    box-shadow: inset 3px 0 0 #fff;
}

.menu__item--destaque {
    background: rgba(255, 255, 255, 0.14);
    border: 1px solid rgba(255, 255, 255, 0.28);
}

.menu__icone {
    flex-shrink: 0;
    width: 20px;
    height: 20px;
    margin-top: 2px;
    opacity: 0.9;
}

.menu__rotulo {
    display: block;
    font-size: var(--texto-sm);
    font-weight: 600;
    line-height: 1.3;
}

/* A frase de ajuda e o que torna o menu compreensivel sem treinamento. */
.menu__ajuda {
    display: block;
    font-size: var(--texto-xs);
    color: rgba(255, 255, 255, 0.66);
    line-height: 1.35;
    margin-top: 1px;
}

.menu__rodape {
    padding: var(--e3) var(--e4) var(--e5);
    border-top: 1px solid rgba(255, 255, 255, 0.14);
    font-size: var(--texto-xs);
    color: rgba(255, 255, 255, 0.6);
}

/* ---------------------------------------------------------------------
   5. Barra superior
   --------------------------------------------------------------------- */
.topo {
    height: var(--altura-topo);
    background: var(--cor-superficie);
    border-bottom: 1px solid var(--cor-borda);
    display: flex;
    align-items: center;
    gap: var(--e4);
    padding: 0 var(--e5);
    position: sticky;
    top: 0;
    z-index: 40;
}

.topo__titulo {
    font-size: var(--texto-lg);
    font-weight: 700;
    margin: 0;
    flex: 1;
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.topo__acoes {
    display: flex;
    align-items: center;
    gap: var(--e2);
}

.menu-mobile {
    display: none;
    background: none;
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-sm);
    width: 44px;
    height: 44px;
    cursor: pointer;
    place-items: center;
}

.usuario {
    display: flex;
    align-items: center;
    gap: var(--e3);
    padding: var(--e2) var(--e3);
    border-radius: var(--raio-pill);
    border: 1px solid var(--cor-borda);
    background: var(--cor-superficie);
    cursor: pointer;
    font: inherit;
    color: inherit;
    min-height: 44px;
}

.usuario:hover { background: var(--cor-superficie-2); }

.usuario__inicial {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--marca-primaria);
    color: var(--marca-contraste);
    display: grid;
    place-items: center;
    font-weight: 700;
    font-size: var(--texto-sm);
    flex-shrink: 0;
}

.usuario__nome {
    font-size: var(--texto-sm);
    font-weight: 600;
    max-width: 160px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.menu-suspenso {
    position: absolute;
    top: calc(var(--altura-topo) - 6px);
    right: var(--e5);
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio);
    box-shadow: var(--sombra-lg);
    min-width: 240px;
    padding: var(--e2);
    z-index: 60;
}

.menu-suspenso[hidden] { display: none; }

.menu-suspenso__item {
    display: block;
    padding: var(--e3);
    border-radius: var(--raio-sm);
    color: var(--cor-texto);
    font-size: var(--texto-sm);
}

.menu-suspenso__item:hover {
    background: var(--cor-superficie-2);
    text-decoration: none;
}

.menu-suspenso__cabecalho {
    padding: var(--e3);
    border-bottom: 1px solid var(--cor-borda);
    margin-bottom: var(--e2);
}

/* ---------------------------------------------------------------------
   6. Cartoes e blocos
   --------------------------------------------------------------------- */
.cartao {
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-lg);
    padding: var(--e5);
    box-shadow: 0 1px 2px rgba(16, 24, 40, .04), 0 1px 6px rgba(16, 24, 40, .06);
    margin-bottom: var(--e5);
}

.cartao--compacto { padding: var(--e4); }

.cartao__cabecalho {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--e4);
    margin-bottom: var(--e4);
    flex-wrap: wrap;
}

.cartao__titulo {
    font-size: var(--texto-lg);
    font-weight: 700;
    margin: 0 0 2px;
}

.cartao__ajuda {
    font-size: var(--texto-sm);
    color: var(--cor-texto-suave);
    margin: 0;
}

.grade {
    display: grid;
    gap: var(--e4);
}

/* O numero na classe e o numero de colunas -- de verdade.
   Antes era `auto-fit minmax(300px, 1fr)`, que numa tela larga transformava
   .grade--2 em quatro colunas: a tabela ficava espremida com barra de
   rolagem propria e os indicadores empilhavam na vertical.

   minmax(0, 1fr) e essencial: sem o zero, o conteudo largo (tabela, texto
   sem espaco) empurra a coluna e desmonta a grade. */
.grade--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grade--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grade--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

/* Cartoes lado a lado comecam alinhados no topo. Esticados, um cartao
   curto ao lado de um longo vira um retangulo vazio. */
.grade > .cartao { align-self: start; }

@media (max-width: 1180px) {
    .grade--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .grade--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 780px) {
    .grade--2,
    .grade--3,
    .grade--4 { grid-template-columns: minmax(0, 1fr); }
}

/* Faixa de numeros dentro de um cartao: sempre em linha, encolhendo o
   texto antes de quebrar. Quatro indicadores empilhados na vertical dentro
   de uma coluna estreita e o que fazia o painel parecer quebrado. */
.grade--metricas {
    grid-template-columns: repeat(auto-fit, minmax(88px, 1fr));
    gap: var(--e3);
}

.grade--metricas .indicador {
    padding: var(--e3);
}

.grade--metricas .indicador__valor {
    font-size: var(--texto-xl);
}

/* Indicador numerico */
.indicador {
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda);
    border-left: 3px solid var(--marca-primaria);
    border-radius: var(--raio);
    padding: var(--e4) var(--e4) var(--e4) calc(var(--e4) + 2px);
    display: flex;
    flex-direction: column;
    gap: var(--e1);
    transition: box-shadow .15s ease, transform .15s ease;
}

.indicador:hover {
    box-shadow: var(--sombra-sm);
}

/* Variacoes de acento, para o painel contar uma historia com cor:
   verde = saudavel, ambar = atencao, vermelho = problema. */
.indicador--sucesso { border-left-color: var(--cor-sucesso); }
.indicador--aviso   { border-left-color: var(--cor-aviso); }
.indicador--erro    { border-left-color: var(--cor-erro); }
.indicador--neutro  { border-left-color: var(--cor-borda-forte); }

.indicador__rotulo {
    font-size: var(--texto-sm);
    color: var(--cor-texto-suave);
    font-weight: 600;
}

.indicador__valor {
    font-size: var(--texto-2xl);
    font-weight: 800;
    line-height: 1.1;
}

.indicador__ajuda {
    font-size: var(--texto-xs);
    color: var(--cor-texto-fraco);
}

.indicador--destaque {
    border-color: var(--marca-primaria-borda);
    background: var(--marca-primaria-suave);
}

/* ---------------------------------------------------------------------
   7. Botoes
   --------------------------------------------------------------------- */
.botao {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--e2);
    min-height: 44px;
    padding: var(--e3) var(--e5);
    border-radius: var(--raio-sm);
    border: 1px solid transparent;
    font-family: inherit;
    font-size: var(--texto-sm);
    font-weight: 700;
    cursor: pointer;
    transition: background var(--transicao), border-color var(--transicao), transform var(--transicao);
    text-decoration: none;
    line-height: 1.2;
}

.botao:hover { text-decoration: none; }
.botao:active { transform: translateY(1px); }

.botao[disabled],
.botao[aria-disabled="true"] {
    opacity: 0.55;
    cursor: not-allowed;
    transform: none;
}

.botao--principal {
    background: var(--marca-botao);
    color: var(--marca-botao-texto);
}

.botao--principal:hover,
.botao--principal:focus-visible { background: var(--marca-botao-hover); color: var(--marca-botao-texto); }

.botao--secundario {
    background: var(--cor-superficie);
    border-color: var(--cor-borda-forte);
    color: var(--cor-texto);
}

.botao--secundario:hover { background: var(--cor-superficie-2); color: var(--cor-texto); }

.botao--fantasma {
    background: transparent;
    color: var(--cor-texto-suave);
}

.botao--fantasma:hover { background: var(--cor-superficie-2); color: var(--cor-texto); }

.botao--perigo {
    background: var(--cor-erro);
    color: #fff;
}

.botao--perigo:hover { background: #93201A; color: #fff; }

.botao--pequeno {
    min-height: 36px;
    padding: var(--e2) var(--e3);
    font-size: var(--texto-xs);
}

.botao--grande {
    min-height: 52px;
    padding: var(--e4) var(--e6);
    font-size: var(--texto-base);
}

.botao--largo { width: 100%; }

.botao__icone { width: 18px; height: 18px; }

.acoes {
    display: flex;
    gap: var(--e3);
    flex-wrap: wrap;
    align-items: center;
}

.acoes--fim { justify-content: flex-end; }

/* ---------------------------------------------------------------------
   8. Formularios
   --------------------------------------------------------------------- */
.campo { margin-bottom: var(--e4); }

.campo__rotulo {
    display: block;
    font-size: var(--texto-sm);
    font-weight: 700;
    margin-bottom: var(--e2);
}

.campo__obrigatorio {
    color: var(--cor-erro);
    margin-left: 2px;
}

/* A dica aparece ANTES do campo: a pessoa le a explicacao no momento em
   que decide o que digitar, nao depois de errar. */
.campo__dica {
    display: block;
    font-size: var(--texto-xs);
    color: var(--cor-texto-suave);
    margin-bottom: var(--e2);
    line-height: 1.4;
}

.campo__entrada,
.campo__area,
.campo__selecao {
    width: 100%;
    min-height: 46px;
    padding: var(--e3);
    font-family: inherit;
    font-size: var(--texto-base);
    color: var(--cor-texto);
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda-forte);
    border-radius: var(--raio-sm);
    transition: border-color var(--transicao), box-shadow var(--transicao);
}

.campo__entrada:focus,
.campo__area:focus,
.campo__selecao:focus {
    border-color: var(--marca-primaria);
    box-shadow: 0 0 0 3px var(--marca-primaria-suave);
    outline: none;
}

.campo__area {
    min-height: 130px;
    resize: vertical;
    line-height: 1.5;
}

.campo__selecao {
    appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%235C6470' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right var(--e3) center;
    padding-right: var(--e6);
}

.campo--erro .campo__entrada,
.campo--erro .campo__area,
.campo--erro .campo__selecao {
    border-color: var(--cor-erro);
    background: var(--cor-erro-fundo);
}

.campo__erro {
    display: flex;
    align-items: center;
    gap: var(--e1);
    font-size: var(--texto-sm);
    color: var(--cor-erro);
    margin-top: var(--e2);
    font-weight: 600;
}

.campo__grupo {
    display: grid;
    gap: var(--e4);
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}

/* Caixas de marcacao com area de clique generosa */
.opcao {
    display: flex;
    align-items: flex-start;
    gap: var(--e3);
    padding: var(--e3);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-sm);
    cursor: pointer;
    margin-bottom: var(--e2);
    transition: border-color var(--transicao), background var(--transicao);
    min-height: 44px;
}

.opcao:hover { background: var(--cor-superficie-2); }

.opcao input {
    width: 20px;
    height: 20px;
    margin: 2px 0 0;
    flex-shrink: 0;
    accent-color: var(--marca-primaria);
}

.opcao--marcada {
    border-color: var(--marca-primaria);
    background: var(--marca-primaria-suave);
}

.opcao__texto { flex: 1; }

.opcao__rotulo {
    display: block;
    font-weight: 600;
    font-size: var(--texto-sm);
}

.opcao__ajuda {
    display: block;
    font-size: var(--texto-xs);
    color: var(--cor-texto-suave);
    line-height: 1.4;
}

/* Area de upload */
.envio {
    border: 2px dashed var(--cor-borda-forte);
    border-radius: var(--raio);
    padding: var(--e6) var(--e4);
    text-align: center;
    background: var(--cor-superficie-2);
    cursor: pointer;
    transition: border-color var(--transicao), background var(--transicao);
}

.envio:hover,
.envio--ativo {
    border-color: var(--marca-primaria);
    background: var(--marca-primaria-suave);
}

.envio__icone {
    width: 44px;
    height: 44px;
    color: var(--marca-primaria);
    margin-bottom: var(--e2);
}

.envio__titulo {
    font-weight: 700;
    margin-bottom: var(--e1);
}

.envio__ajuda {
    font-size: var(--texto-sm);
    color: var(--cor-texto-suave);
}

.envio__arquivo {
    margin-top: var(--e3);
    padding: var(--e3);
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-sm);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--e3);
    text-align: left;
}

/* ---------------------------------------------------------------------
   9. Tabelas
   --------------------------------------------------------------------- */
.tabela-area {
    overflow-x: auto;
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio);
    background: var(--cor-superficie);
}

.tabela {
    width: 100%;
    border-collapse: collapse;
    font-size: var(--texto-sm);
}

.tabela th {
    text-align: left;
    padding: var(--e3) var(--e4);
    background: var(--cor-superficie-2);
    border-bottom: 1px solid var(--cor-borda);
    font-weight: 700;
    font-size: var(--texto-xs);
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--cor-texto-suave);
    white-space: nowrap;
}

.tabela td {
    padding: var(--e4);
    border-bottom: 1px solid var(--cor-borda);
    vertical-align: middle;
}

.tabela tbody tr:last-child td { border-bottom: none; }
.tabela tbody tr:hover { background: var(--cor-superficie-2); }

.tabela__principal {
    font-weight: 600;
    color: var(--cor-texto);
}

.tabela__secundario {
    font-size: var(--texto-xs);
    color: var(--cor-texto-suave);
}

.tabela__acoes {
    display: flex;
    gap: var(--e2);
    justify-content: flex-end;
}

/* ---------------------------------------------------------------------
   10. Selos e sinais
   --------------------------------------------------------------------- */
.selo {
    display: inline-flex;
    align-items: center;
    gap: var(--e1);
    padding: 3px var(--e3);
    border-radius: var(--raio-pill);
    font-size: var(--texto-xs);
    font-weight: 700;
    white-space: nowrap;
    border: 1px solid transparent;
}

/* O ponto colorido garante que a informacao nao dependa so da cor. */
.selo::before {
    content: '';
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: currentColor;
    flex-shrink: 0;
}

/* Contador simples ao lado de um titulo de secao. Usa a cor de destaque
   da marca -- e o que da a ela um lugar visivel na interface. */
.etiqueta {
    display: inline-flex;
    align-items: center;
    padding: 2px var(--e3);
    border-radius: var(--raio-pill);
    font-size: var(--texto-xs);
    font-weight: 700;
    background: var(--marca-destaque-suave);
    color: var(--marca-destaque);
    border: 1px solid var(--marca-destaque-suave);
    white-space: nowrap;
}

.selo--destaque { background: var(--marca-destaque-suave); color: var(--marca-destaque); }
.selo--sucesso { background: var(--cor-sucesso-fundo); color: var(--cor-sucesso); }
.selo--aviso   { background: var(--cor-aviso-fundo);   color: var(--cor-aviso); }
.selo--erro    { background: var(--cor-erro-fundo);    color: var(--cor-erro); }
.selo--info    { background: var(--cor-info-fundo);    color: var(--cor-info); }
.selo--neutro  { background: var(--cor-superficie-2);  color: var(--cor-texto-suave); border-color: var(--cor-borda); }

/* ---------------------------------------------------------------------
   11. Avisos
   --------------------------------------------------------------------- */
.aviso {
    display: flex;
    gap: var(--e3);
    padding: var(--e4);
    border-radius: var(--raio);
    border: 1px solid;
    margin-bottom: var(--e4);
    font-size: var(--texto-sm);
}

.aviso__icone { width: 20px; height: 20px; flex-shrink: 0; margin-top: 1px; }
.aviso__conteudo { flex: 1; min-width: 0; }
.aviso__titulo { font-weight: 700; margin-bottom: var(--e1); }
.aviso p:last-child { margin-bottom: 0; }

.aviso--sucesso { background: var(--cor-sucesso-fundo); border-color: rgba(18, 128, 92, 0.3); color: #0B5B41; }
.aviso--erro    { background: var(--cor-erro-fundo);    border-color: rgba(179, 38, 30, 0.3);  color: #85221C; }
.aviso--aviso   { background: var(--cor-aviso-fundo);   border-color: rgba(154, 98, 0, 0.3);   color: #6E4600; }
.aviso--info    { background: var(--cor-info-fundo);    border-color: rgba(26, 95, 180, 0.3);  color: #16457F; }

.mensagens {
    position: fixed;
    top: calc(var(--altura-topo) + var(--e3));
    right: var(--e5);
    z-index: 90;
    width: min(420px, calc(100vw - 2rem));
    display: flex;
    flex-direction: column;
    gap: var(--e2);
}

.mensagens .aviso {
    box-shadow: var(--sombra-lg);
    background: var(--cor-superficie);
    animation: entrar 220ms ease;
    margin: 0;
}

@keyframes entrar {
    from { opacity: 0; transform: translateY(-8px); }
    to   { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
    * { animation: none !important; transition: none !important; }
}

/* ---------------------------------------------------------------------
   12. Estado vazio
   Nunca deixar a pessoa diante de uma tela em branco sem saida.
   --------------------------------------------------------------------- */
.vazio {
    text-align: center;
    padding: var(--e7) var(--e4);
    max-width: 480px;
    margin: 0 auto;
}

.vazio__icone {
    width: 56px;
    height: 56px;
    color: var(--cor-texto-fraco);
    margin-bottom: var(--e4);
}

.vazio__titulo {
    font-size: var(--texto-lg);
    font-weight: 700;
    margin-bottom: var(--e2);
}

.vazio__texto {
    color: var(--cor-texto-suave);
    font-size: var(--texto-sm);
    margin-bottom: var(--e4);
}

/* ---------------------------------------------------------------------
   13. Primeiros passos
   --------------------------------------------------------------------- */
.passos { display: grid; gap: var(--e3); }

.passo {
    display: flex;
    align-items: flex-start;
    gap: var(--e4);
    padding: var(--e4);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio);
    background: var(--cor-superficie);
}

.passo--concluido {
    background: var(--cor-sucesso-fundo);
    border-color: rgba(18, 128, 92, 0.28);
}

.passo__numero {
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--marca-primaria);
    color: var(--marca-contraste);
    display: grid;
    place-items: center;
    font-weight: 800;
    flex-shrink: 0;
    font-size: var(--texto-sm);
}

.passo--concluido .passo__numero {
    background: var(--cor-sucesso);
    color: #fff;
}

.passo__conteudo { flex: 1; min-width: 0; }
.passo__titulo { font-weight: 700; margin-bottom: 2px; }
.passo__descricao { font-size: var(--texto-sm); color: var(--cor-texto-suave); margin: 0; }

/* ---------------------------------------------------------------------
   14. Barras de progresso
   --------------------------------------------------------------------- */
.barra {
    height: 10px;
    background: var(--cor-borda);
    border-radius: var(--raio-pill);
    overflow: hidden;
    margin: var(--e2) 0;
}

.barra__preenchimento {
    height: 100%;
    background: var(--marca-primaria);
    border-radius: var(--raio-pill);
    transition: width 300ms ease;
}

.barra__preenchimento--aviso  { background: var(--cor-aviso); }
.barra__preenchimento--perigo { background: var(--cor-erro); }

/* Grafico de barras simples, sem biblioteca externa */
.grafico {
    display: flex;
    align-items: flex-end;
    gap: 4px;
    height: 140px;
    padding-top: var(--e3);
}

.grafico__coluna {
    flex: 1;
    background: var(--marca-primaria-suave);
    border: 1px solid var(--marca-primaria-borda);
    border-bottom: none;
    border-radius: var(--raio-sm) var(--raio-sm) 0 0;
    min-height: 3px;
    position: relative;
}

.grafico__coluna:hover { background: var(--marca-primaria-borda); }

.grafico__legenda {
    display: flex;
    justify-content: space-between;
    font-size: var(--texto-xs);
    color: var(--cor-texto-fraco);
    padding-top: var(--e2);
    border-top: 1px solid var(--cor-borda);
}

/* ---------------------------------------------------------------------
   15. Chat
   --------------------------------------------------------------------- */
.chat {
    display: flex;
    flex: 1;
    min-height: 0;
    width: 100%;
}

.chat__lateral {
    width: 280px;
    flex-shrink: 0;
    border-right: 1px solid var(--cor-borda);
    background: var(--cor-superficie);
    display: flex;
    flex-direction: column;
    max-height: calc(100vh - var(--altura-topo));
}

.chat__lateral-topo { padding: var(--e4); border-bottom: 1px solid var(--cor-borda); }

.chat__lista { flex: 1; overflow-y: auto; padding: var(--e2); }

.chat__conversa {
    display: block;
    padding: var(--e3);
    border-radius: var(--raio-sm);
    color: var(--cor-texto);
    margin-bottom: 2px;
    min-height: 44px;
}

.chat__conversa:hover { background: var(--cor-superficie-2); text-decoration: none; }

.chat__conversa--ativa {
    background: var(--marca-primaria-suave);
    border-left: 3px solid var(--marca-primaria);
    font-weight: 600;
}

.chat__conversa-titulo {
    display: block;
    font-size: var(--texto-sm);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.chat__conversa-data { font-size: var(--texto-xs); color: var(--cor-texto-fraco); }

.chat__principal {
    flex: 1;
    display: flex;
    flex-direction: column;
    min-width: 0;
    max-height: calc(100vh - var(--altura-topo));
    background: var(--cor-fundo);
}

.chat__mensagens {
    flex: 1;
    overflow-y: auto;
    padding: var(--e5);
    scroll-behavior: smooth;
}

.chat__inicio {
    max-width: 680px;
    margin: 0 auto;
    padding: var(--e6) 0;
    text-align: center;
}

.chat__avatar-grande {
    width: 72px;
    height: 72px;
    border-radius: 50%;
    background: var(--marca-gradiente);
    color: #fff;
    display: grid;
    place-items: center;
    font-size: var(--texto-2xl);
    font-weight: 800;
    margin: 0 auto var(--e4);
    overflow: hidden;
}

.chat__avatar-grande img { width: 100%; height: 100%; object-fit: cover; }

.sugestoes {
    display: grid;
    gap: var(--e3);
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    margin-top: var(--e5);
    text-align: left;
}

.sugestao {
    padding: var(--e4);
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio);
    cursor: pointer;
    font: inherit;
    font-size: var(--texto-sm);
    color: var(--cor-texto);
    text-align: left;
    transition: border-color var(--transicao), transform var(--transicao);
    min-height: 44px;
}

.sugestao:hover {
    border-color: var(--marca-primaria);
    transform: translateY(-2px);
}

.mensagem {
    display: flex;
    gap: var(--e3);
    margin-bottom: var(--e5);
    max-width: 860px;
    margin-left: auto;
    margin-right: auto;
}

.mensagem__avatar {
    width: 34px;
    height: 34px;
    border-radius: 50%;
    display: grid;
    place-items: center;
    font-weight: 700;
    font-size: var(--texto-xs);
    flex-shrink: 0;
    overflow: hidden;
}

.mensagem--usuario .mensagem__avatar { background: var(--cor-borda); color: var(--cor-texto); }
.mensagem--assistente .mensagem__avatar { background: var(--marca-primaria); color: var(--marca-contraste); }

.mensagem__corpo { flex: 1; min-width: 0; }

.mensagem__autor {
    font-size: var(--texto-xs);
    font-weight: 700;
    color: var(--cor-texto-suave);
    margin-bottom: var(--e1);
}

.mensagem__texto {
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio);
    padding: var(--e4);
    line-height: 1.65;
    overflow-wrap: break-word;
}

.mensagem--usuario .mensagem__texto {
    background: var(--marca-primaria-suave);
    border-color: var(--marca-primaria-borda);
}

.mensagem__texto p:last-child { margin-bottom: 0; }
.mensagem__texto ol,
.mensagem__texto ul { margin: 0 0 var(--e3); padding-left: var(--e5); }
.mensagem__texto li { margin-bottom: var(--e2); }

.mensagem__texto--erro {
    background: var(--cor-erro-fundo);
    border-color: rgba(179, 38, 30, 0.3);
}

.mensagem__texto--vazio {
    background: var(--cor-aviso-fundo);
    border-color: rgba(154, 98, 0, 0.3);
}

.mensagem__rodape {
    display: flex;
    gap: var(--e2);
    margin-top: var(--e2);
    flex-wrap: wrap;
    align-items: center;
}

.acao-mensagem {
    background: none;
    border: 1px solid transparent;
    border-radius: var(--raio-sm);
    padding: var(--e2);
    cursor: pointer;
    color: var(--cor-texto-fraco);
    display: inline-flex;
    align-items: center;
    gap: var(--e1);
    font: inherit;
    font-size: var(--texto-xs);
    min-height: 36px;
}

.acao-mensagem:hover { background: var(--cor-superficie-2); color: var(--cor-texto); border-color: var(--cor-borda); }
.acao-mensagem--ativa { color: var(--marca-primaria); border-color: var(--marca-primaria-borda); background: var(--marca-primaria-suave); }
.acao-mensagem svg { width: 16px; height: 16px; }

/* Fontes citadas */
.fontes {
    margin-top: var(--e3);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-sm);
    overflow: hidden;
    background: var(--cor-superficie-2);
}

.fontes__resumo {
    padding: var(--e3) var(--e4);
    cursor: pointer;
    font-size: var(--texto-sm);
    font-weight: 600;
    color: var(--cor-texto-suave);
    list-style: none;
    display: flex;
    align-items: center;
    gap: var(--e2);
    min-height: 44px;
}

.fontes__resumo::-webkit-details-marker { display: none; }
.fontes__resumo:hover { background: var(--cor-borda); }

.fontes__lista { padding: 0 var(--e4) var(--e3); }

.fonte {
    padding: var(--e3);
    border-top: 1px solid var(--cor-borda);
    font-size: var(--texto-sm);
}

.fonte:first-child { border-top: none; }
.fonte__titulo { font-weight: 600; }

.fonte__detalhe {
    font-size: var(--texto-xs);
    color: var(--cor-texto-suave);
    display: flex;
    gap: var(--e3);
    flex-wrap: wrap;
    margin-top: 2px;
}

/* Figuras das paginas citadas, dentro do bloco de fontes */
.fonte__figuras {
    display: flex;
    gap: var(--e3);
    flex-wrap: wrap;
    margin-top: var(--e3);
}

.figura {
    display: block;
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-sm);
    overflow: hidden;
    background: var(--cor-superficie-2);
    line-height: 0;
    /* Area de clique confortavel mesmo numa figura estreita. */
    min-width: 44px;
    min-height: 44px;
}

.figura:hover,
.figura:focus-visible {
    border-color: var(--marca-primaria);
}

.figura img {
    /* height:auto anula os atributos width/height do HTML, que existem
       apenas para o navegador reservar a proporcao antes de carregar. */
    display: block;
    max-width: 220px;
    max-height: 170px;
    width: auto;
    height: auto;
    object-fit: contain;
}

.fonte__acoes {
    display: flex;
    gap: var(--e4);
    flex-wrap: wrap;
    margin-top: var(--e2);
}

/* Galeria completa, na ficha do documento */
.galeria {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
    gap: var(--e4);
}

.galeria .figura img {
    max-width: 100%;
    max-height: 220px;
    margin: 0 auto;
}

.galeria__pagina {
    font-size: var(--texto-xs);
    color: var(--cor-texto-suave);
    padding: var(--e2) var(--e3);
    line-height: 1.4;
}

/* ---------------------------------------------------------------------
   Editor de paleta
   --------------------------------------------------------------------- */
.paleta {
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio);
    background: var(--cor-superficie);
    padding: var(--e4) var(--e5) var(--e5);
    margin: 0 0 var(--e5);
}

.paleta__titulo {
    font-weight: 700;
    font-size: var(--texto-base);
    color: var(--marca-primaria);
    padding: 0 var(--e2);
}

.paleta__grade {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: var(--e4);
}

.paleta__rotulo {
    display: block;
    font-size: var(--texto-xs);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .03em;
    color: var(--cor-texto-suave);
    margin-bottom: var(--e2);
}

.paleta__controles {
    display: flex;
    gap: var(--e2);
    align-items: stretch;
}

/* A amostra e o campo hexadecimal tem a mesma altura: desalinhados,
   parecem dois controles sem relacao entre si. */
.paleta__amostra {
    width: 52px;
    flex-shrink: 0;
    height: 44px;
    padding: 3px;
    border: 1px solid var(--cor-borda-forte);
    border-radius: var(--raio-sm);
    background: var(--cor-superficie);
    cursor: pointer;
}

.paleta__hex {
    flex: 1;
    min-width: 0;
    height: 44px;
    padding: 0 var(--e3);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-sm);
    background: var(--cor-superficie-2);
    color: var(--cor-texto);
    font-family: var(--fonte-mono, ui-monospace, 'Cascadia Code', Consolas, monospace);
    font-size: var(--texto-sm);
    text-transform: uppercase;
}

.paleta__hex:focus-visible,
.paleta__amostra:focus-visible {
    outline: 2px solid var(--marca-primaria);
    outline-offset: 2px;
    border-color: var(--marca-primaria);
}

.paleta__hex[aria-invalid="true"] {
    border-color: var(--cor-erro);
    background: var(--cor-erro-fundo);
}

.paleta__ajuda {
    display: block;
    font-size: var(--texto-xs);
    color: var(--cor-texto-fraco);
    margin-top: var(--e2);
    line-height: 1.4;
}

/* Composicao da mensagem */
.chat__composicao {
    border-top: 1px solid var(--cor-borda);
    background: var(--cor-superficie);
    padding: var(--e4) var(--e5);
}

.composicao {
    max-width: 860px;
    margin: 0 auto;
    display: flex;
    gap: var(--e3);
    align-items: flex-end;
}

.composicao__campo {
    flex: 1;
    min-height: 52px;
    max-height: 200px;
    padding: var(--e3) var(--e4);
    border: 1px solid var(--cor-borda-forte);
    border-radius: var(--raio);
    font-family: inherit;
    font-size: var(--texto-base);
    resize: none;
    line-height: 1.5;
}

.composicao__campo:focus {
    border-color: var(--marca-primaria);
    box-shadow: 0 0 0 3px var(--marca-primaria-suave);
    outline: none;
}

.composicao__enviar {
    width: 52px;
    height: 52px;
    border-radius: var(--raio);
    background: var(--marca-botao);
    color: var(--marca-botao-texto);
    border: none;
    cursor: pointer;
    display: grid;
    place-items: center;
    flex-shrink: 0;
}

.composicao__enviar:hover { background: var(--marca-botao-hover); }
.composicao__enviar[disabled] { opacity: 0.5; cursor: not-allowed; }
.composicao__enviar svg { width: 22px; height: 22px; }

.composicao__ajuda {
    max-width: 860px;
    margin: var(--e2) auto 0;
    font-size: var(--texto-xs);
    color: var(--cor-texto-fraco);
    text-align: center;
}

/* Indicador de "digitando" */
.digitando {
    display: inline-flex;
    gap: 5px;
    align-items: center;
    padding: var(--e3) 0;
}

.digitando span {
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--marca-primaria);
    animation: pulsar 1.2s infinite ease-in-out;
}

.digitando span:nth-child(2) { animation-delay: 0.15s; }
.digitando span:nth-child(3) { animation-delay: 0.3s; }

@keyframes pulsar {
    0%, 60%, 100% { opacity: 0.3; transform: translateY(0); }
    30% { opacity: 1; transform: translateY(-4px); }
}

/* ---------------------------------------------------------------------
   16. Login
   --------------------------------------------------------------------- */
.entrada {
    min-height: 100vh;
    display: grid;
    grid-template-columns: 1fr 1fr;
}

.entrada__apresentacao {
    background: var(--marca-gradiente);
    color: #fff;
    padding: var(--e7);
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.entrada__apresentacao h1 { font-size: var(--texto-3xl); margin-bottom: var(--e4); }
.entrada__apresentacao p { font-size: var(--texto-lg); opacity: 0.9; max-width: 460px; }

.entrada__beneficios { margin-top: var(--e6); display: grid; gap: var(--e4); max-width: 460px; }

.entrada__beneficio { display: flex; gap: var(--e3); align-items: flex-start; }
.entrada__beneficio svg { width: 24px; height: 24px; flex-shrink: 0; margin-top: 2px; }

.entrada__formulario {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--e6) var(--e5);
    background: var(--cor-superficie);
}

.entrada__caixa { width: 100%; max-width: 420px; }

.entrada__logo {
    width: 64px;
    height: 64px;
    border-radius: var(--raio);
    background: var(--marca-gradiente);
    color: #fff;
    display: grid;
    place-items: center;
    font-weight: 800;
    font-size: var(--texto-xl);
    margin-bottom: var(--e5);
    overflow: hidden;
}

.entrada__logo img { width: 100%; height: 100%; object-fit: contain; }

/* ---------------------------------------------------------------------
   17. Paginacao, abas, filtros, modal
   --------------------------------------------------------------------- */
.paginacao {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--e4);
    margin-top: var(--e4);
    flex-wrap: wrap;
}

.paginacao__info { font-size: var(--texto-sm); color: var(--cor-texto-suave); }
.paginacao__links { display: flex; gap: var(--e2); }

.paginacao__link {
    min-width: 44px;
    min-height: 44px;
    display: grid;
    place-items: center;
    padding: 0 var(--e3);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-sm);
    background: var(--cor-superficie);
    color: var(--cor-texto);
    font-size: var(--texto-sm);
    font-weight: 600;
}

.paginacao__link:hover { background: var(--cor-superficie-2); text-decoration: none; }

.paginacao__link--ativo {
    background: var(--marca-primaria);
    border-color: var(--marca-primaria);
    color: var(--marca-contraste);
}

.paginacao__link--inativo { opacity: 0.45; pointer-events: none; }

.abas {
    display: flex;
    gap: var(--e1);
    border-bottom: 1px solid var(--cor-borda);
    margin-bottom: var(--e5);
    overflow-x: auto;
}

.aba {
    padding: var(--e3) var(--e4);
    border: none;
    background: none;
    font: inherit;
    font-size: var(--texto-sm);
    font-weight: 600;
    color: var(--cor-texto-suave);
    cursor: pointer;
    border-bottom: 3px solid transparent;
    white-space: nowrap;
    min-height: 44px;
}

.aba:hover { color: var(--cor-texto); }

.aba--ativa {
    color: var(--marca-primaria);
    border-bottom-color: var(--marca-primaria);
}

.filtros {
    display: grid;
    gap: var(--e3);
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    align-items: end;
    margin-bottom: var(--e4);
}

.filtros .campo { margin-bottom: 0; }

.modal {
    position: fixed;
    inset: 0;
    background: rgba(16, 20, 28, 0.55);
    display: grid;
    place-items: center;
    padding: var(--e4);
    z-index: 100;
}

.modal[hidden] { display: none; }

.modal__caixa {
    background: var(--cor-superficie);
    border-radius: var(--raio-lg);
    box-shadow: var(--sombra-lg);
    width: min(620px, 100%);
    max-height: 90vh;
    overflow-y: auto;
    padding: var(--e5);
}

.modal__cabecalho {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--e4);
    margin-bottom: var(--e4);
}

.modal__fechar {
    background: none;
    border: none;
    cursor: pointer;
    color: var(--cor-texto-fraco);
    width: 44px;
    height: 44px;
    display: grid;
    place-items: center;
    border-radius: var(--raio-sm);
}

.modal__fechar:hover { background: var(--cor-superficie-2); color: var(--cor-texto); }

/* ---------------------------------------------------------------------
   18. Utilitarios
   --------------------------------------------------------------------- */
.texto-suave   { color: var(--cor-texto-suave); }
.texto-fraco   { color: var(--cor-texto-fraco); }
.texto-pequeno { font-size: var(--texto-sm); }
.texto-mini    { font-size: var(--texto-xs); }
.texto-forte   { font-weight: 700; }
.texto-centro  { text-align: center; }
.texto-direita { text-align: right; }
.texto-erro    { color: var(--cor-erro); }
.texto-sucesso { color: var(--cor-sucesso); }
.texto-aviso   { color: var(--cor-aviso); }

.sem-margem  { margin: 0 !important; }
.mt-1 { margin-top: var(--e1); }
.mt-2 { margin-top: var(--e2); }
.mt-3 { margin-top: var(--e3); }
.mt-4 { margin-top: var(--e4); }
.mt-5 { margin-top: var(--e5); }
.mb-2 { margin-bottom: var(--e2); }
.mb-3 { margin-bottom: var(--e3); }
.mb-4 { margin-bottom: var(--e4); }
.mb-5 { margin-bottom: var(--e5); }

.flex        { display: flex; }
.flex-coluna { flex-direction: column; }
.flex-entre  { justify-content: space-between; }
.flex-centro { align-items: center; }
.flex-quebra { flex-wrap: wrap; }
.gap-2 { gap: var(--e2); }
.gap-3 { gap: var(--e3); }
.gap-4 { gap: var(--e4); }
.crescer { flex: 1; min-width: 0; }

.oculto { display: none !important; }

.codigo {
    font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', monospace;
    font-size: var(--texto-sm);
    background: var(--cor-superficie-2);
    border: 1px solid var(--cor-borda);
    border-radius: 4px;
    padding: 2px 6px;
    word-break: break-all;
}

.divisor { height: 1px; background: var(--cor-borda); margin: var(--e5) 0; }

/* ---------------------------------------------------------------------
   19. Responsivo
   --------------------------------------------------------------------- */
@media (max-width: 1024px) {
    .entrada { grid-template-columns: 1fr; }
    .entrada__apresentacao { display: none; }
}

@media (max-width: 900px) {
    .menu {
        position: fixed;
        left: 0;
        top: 0;
        z-index: 80;
        transform: translateX(-100%);
        transition: transform var(--transicao);
        box-shadow: var(--sombra-lg);
    }

    .menu--aberto { transform: none; }

    .menu-mobile { display: grid; }

    .area { padding: var(--e4); }

    .topo { padding: 0 var(--e4); }

    .mensagens { right: var(--e3); left: var(--e3); width: auto; }

    .chat__lateral {
        position: fixed;
        left: 0;
        top: var(--altura-topo);
        bottom: 0;
        z-index: 70;
        transform: translateX(-100%);
        transition: transform var(--transicao);
        max-height: none;
    }

    .chat__lateral--aberta { transform: none; }
}

@media (max-width: 640px) {
    :root { --texto-2xl: 1.5rem; --texto-3xl: 1.875rem; }

    .cartao { padding: var(--e4); border-radius: var(--raio); }
    .usuario__nome { display: none; }
    .chat__mensagens { padding: var(--e4) var(--e3); }
    .chat__composicao { padding: var(--e3); }
    .tabela td, .tabela th { padding: var(--e3); }
}

/* ---------------------------------------------------------------------
   20. Impressao
   --------------------------------------------------------------------- */
@media print {
    .menu,
    .topo,
    .mensagens,
    .acoes,
    .chat__composicao { display: none !important; }

    body { background: #fff; }
    .cartao { border: 1px solid #ccc; box-shadow: none; break-inside: avoid; }
}
