/*
  NormaOne — Grades responsivas do Dashboard (ETAPA 4H.36)

  Problema corrigido: as seções do Dashboard (Home.razor) usavam MudGrid/MudItem com breakpoints
  xs/sm/md do MudBlazor, que reagem à largura TOTAL da viewport (media query no navegador) — nunca à
  largura real disponível depois de descontar a sidebar (212px aberta / 64px recolhida). Numa
  viewport de 1366px, por exemplo, o MudBlazor já considera a tela "grande" (tier md/lg) mesmo que o
  conteúdo real, depois da sidebar, tenha só ~1114px — o resultado observado era compressão de
  colunas/linhas tentando caber num espaço que o próprio sistema de breakpoints nunca soube que
  era menor do que a tela inteira.

  Correção: as 4 seções em grade do Dashboard (Resumo Executivo, Ações Necessárias, indicadores da
  Central de Vencimentos, cards inferiores) passaram a usar CSS Grid puro, com colunas quebrando por
  CONTAINER QUERY (@container), ancorada em ".app-content-container" (ver MainLayout.razor) — o
  elemento cujo width JÁ é a viewport menos a sidebar (margin-left aplicado em sidebar.css). Container
  queries reagem à largura REAL desse elemento, não à da janela — inclusive quando a sidebar
  abre/fecha (o conteúdo fica mais largo ao recolher, mesmo com a viewport inalterada), o que uma
  media query de viewport nunca conseguiria captar.

  Os dois limiares abaixo (999px/599px de largura de CONTEÚDO, não de tela) foram calculados a partir
  das resoluções de referência pedidas, descontando sidebar aberta (212px) + padding do container
  (2×20px): 1920→~1668px de conteúdo, 1600→~1348px, 1366→~1114px, 1280→~1028px — todas essas ficam
  acima de 999px, então mantêm o número de colunas cheio (só o gap encolhe moderadamente); abaixo de
  ~1252px de viewport (tablet/janela estreita) é que o conteúdo real cai abaixo de 999px e as colunas
  quebram progressivamente.
*/

.app-content-container {
    container-type: inline-size;
    container-name: app-content;
}

.dash-grid-4,
.dash-grid-6,
.dash-grid-3 {
    display: grid;
    gap: 16px;
    min-width: 0;
    box-sizing: border-box;
}

.dash-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.dash-grid-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.dash-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: start; }

.dash-card {
    min-width: 0;
    box-sizing: border-box;
}

/* "Desktop médio" (conteúdo real ~1366–1599px de viewport): mesmas colunas, só um respiro menor
   entre elas — nunca compactação de fonte/padding interno dos cards. */
@container app-content (max-width: 1299px) {
    .dash-grid-4,
    .dash-grid-6,
    .dash-grid-3 {
        gap: 10px;
    }
}

/* Abaixo disso o conteúdo real já não cabe com colunas legíveis — quebra progressiva do NÚMERO de
   colunas (nunca fonte/scale/overflow-x escondendo conteúdo). */
@container app-content (max-width: 999px) {
    .dash-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .dash-grid-6 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .dash-grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@container app-content (max-width: 599px) {
    .dash-grid-4,
    .dash-grid-3 {
        grid-template-columns: 1fr;
    }

    .dash-grid-6 {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

/*
  ETAPA 4H.37 — os 3 cards inferiores (Próximos Vencimentos / Situação dos Colaboradores / Resumo
  por Módulo) viraram RESUMOS compactos (não mais tabela/lista completa dentro do Dashboard) —
  ".resumo-card" é o padrão visual único e compartilhado pelos três (mesma borda/raio/sombra/padding,
  pedido explícito do usuário), com header (título + link "Ver todos", quando aplicável), corpo
  flexível e um footer sempre fixado embaixo (margin-top:auto) para os três ficarem visualmente
  alinhados mesmo quando o conteúdo interno varia um pouco de altura entre eles.
*/
.resumo-card {
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: 12px;
    box-shadow: 0 1px 3px rgba(16, 24, 40, 0.06);
    padding: 16px;
    height: 100%;
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.resumo-card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 8px;
    min-width: 0;
}

.resumo-card-titulo {
    color: var(--color-text);
    font-weight: 700;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
}

.resumo-card-ver-todos {
    font-size: 12px;
    white-space: nowrap;
    flex-shrink: 0;
}

.resumo-card-corpo {
    flex: 1 1 auto;
    min-width: 0;
}

.resumo-card-footer {
    margin-top: auto;
    padding-top: 12px;
    text-align: center;
}

/* Card "Próximos vencimentos" — linha compacta por item (ícone + avatar clicável + título/colaborador
   + data/status), no lugar da antiga tabela completa. */
.resumo-vencimento-linha {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 6px 0;
    border-bottom: 1px solid var(--color-border);
    min-width: 0;
}

.resumo-vencimento-linha:last-child {
    border-bottom: none;
}

.resumo-avatar {
    position: relative;
    width: 32px;
    height: 32px;
    flex-shrink: 0;
    display: block;
    border-radius: 50%;
}

.resumo-vencimento-texto {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.resumo-vencimento-titulo {
    font-size: 13px;
    font-weight: 600;
    color: var(--color-text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.resumo-vencimento-colaborador {
    font-size: 12px;
    color: var(--color-muted);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.resumo-vencimento-lateral {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 2px;
    flex-shrink: 0;
}

.resumo-vencimento-data {
    font-size: 11px;
    color: var(--color-muted);
    white-space: nowrap;
}

.resumo-status-chip {
    font-size: 10px;
    font-weight: 700;
    color: #fff;
    padding: 2px 8px;
    border-radius: 999px;
    white-space: nowrap;
}

/* Card "Situação dos colaboradores" — donut via CSS puro (conic-gradient, ver DonutSituacaoStyle em
   Home.razor), sem depender de nenhuma lib/API de gráfico para uma peça tão pequena. */
.resumo-donut-wrap {
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 4px 0 14px;
}

.resumo-donut {
    position: relative;
    width: 104px;
    height: 104px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.resumo-donut-centro {
    width: 68px;
    height: 68px;
    border-radius: 50%;
    background: var(--color-surface);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.resumo-donut-total {
    font-size: 20px;
    font-weight: 700;
    color: var(--color-text);
    line-height: 1.1;
}

.resumo-donut-total-label {
    font-size: 10px;
    color: var(--color-muted);
    text-transform: uppercase;
}

.resumo-legenda-linha {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    font-size: 12px;
    padding: 3px 0;
    min-width: 0;
}

.resumo-legenda-ponto {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    margin-right: 6px;
    flex-shrink: 0;
}

/* Card "Resumo por módulo" — lista compacta por linha (ícone + nome + percentual + fração + seta),
   clicável quando já existe navegação correspondente (ver AplicarFiltroModulo em Home.razor). */
.resumo-modulo-linha {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 7px 0;
    border-bottom: 1px solid var(--color-border);
    min-width: 0;
}

.resumo-modulo-linha:last-child {
    border-bottom: none;
}

.resumo-modulo-linha.clicavel {
    cursor: pointer;
}

.resumo-modulo-linha.clicavel:hover {
    background-color: var(--color-surface-2);
}

.resumo-modulo-nome {
    flex: 1 1 auto;
    min-width: 0;
    font-size: 13px;
    font-weight: 600;
    color: var(--color-text);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.resumo-modulo-percentual {
    font-size: 13px;
    font-weight: 700;
    flex-shrink: 0;
    width: 42px;
    text-align: right;
}

.resumo-modulo-fracao {
    font-size: 11px;
    color: var(--color-muted);
    flex-shrink: 0;
    width: 48px;
    text-align: right;
    white-space: nowrap;
}

.resumo-modulo-seta {
    flex-shrink: 0;
    color: var(--color-text-disabled);
}

/*
  ETAPA 38.0 — Painel de Obras (PainelObras.razor). Cards do topo na mesma grade de seis colunas do
  dashboard (dash-grid-6, com as quebras por container query já definidas acima); a tabela tem rolagem
  horizontal em telas estreitas em vez de encolher a letra. Cores só por token.
*/
.painel-card {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: 12px;
    padding: 14px 16px;
    min-width: 0;
}

.painel-card-rotulo {
    font-size: 12px;
    color: var(--color-muted);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.painel-card-valor {
    font-size: 22px;
    font-weight: 700;
    color: var(--color-text);
    line-height: 1.2;
    white-space: nowrap;
}

.painel-card-icone {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.painel-card-icone--azul { background: var(--color-primary-soft); color: var(--color-primary); }
.painel-card-icone--verde { background: var(--color-success-soft); color: var(--color-success); }
.painel-card-icone--vermelho { background: var(--color-danger-soft); color: var(--color-danger); }
.painel-card-icone--cinza { background: var(--color-surface-2); color: var(--color-muted); }

.painel-filtros {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

.painel-filtro.mud-button-root {
    border-radius: 999px;
    text-transform: none;
    padding: 4px 14px;
}

.painel-tabela {
    overflow-x: auto;
}

.painel-obra-nome {
    font-weight: 600;
}

/* A barra é o elemento principal da linha: ocupa o espaço da coluna e deixa o número ao lado. */
.painel-barra {
    display: flex;
    align-items: center;
    gap: 10px;
    min-width: 220px;
}

.painel-barra-linha {
    flex: 1 1 auto;
    min-width: 120px;
}

.painel-barra-texto {
    font-weight: 600;
    min-width: 52px;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.painel-desvio {
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.painel-desvio--negativo { color: var(--color-danger); }
.painel-desvio--positivo { color: var(--color-success); }
.painel-desvio--neutro { color: var(--color-muted); }

/* Largura do campo de data de referência do painel — no container, pelo motivo documentado em
   DatePickerLarguraRegressaoRazorTests. */
.painel-campo-data {
    width: 210px;
    max-width: 100%;
}
