/* ===========================================================================
   Widgets no novo padrão visual: o cartão, a faixa de meses, os quadros e a área dos gráficos.

   Quem monta o cartão é o widgets.js, com as classes "fs-app wg": as cores e a fonte vêm de .fs-app
   (_views/manual/apps/fsmanager/styles.css). Os dois arquivos entram em todas as páginas pelo
   pageHeader.html. Os widgets que ainda não passaram para cá continuam com a aparência antiga
   (.widget-dark e companhia, no base.css).
   =========================================================================== */

/* em coluna: numa linha de cartões de alturas diferentes, o corpo de todos fica alinhado embaixo */
.fs-app.wg{
    display: flex;
    flex-direction: column;
    overflow: hidden;
    height: 100%;
    padding: 16px 18px 18px 18px;
    border: 1px solid var(--fs-outline);
    border-radius: 18px;
    background: #fff;
    box-shadow: 0 2px 8px rgba(29,45,60,0.05);
    text-align: left;
}

/* página que ainda não tem o painel das páginas novas: no contêiner antigo (.widgets-container, do
   base.css) o cartão ocupa a largura que houver, a partir de 380px */
.widgets-container > div:has(> .wg){
    flex: 1 1 380px;
    max-width: 100%;
    margin: 6px;
}

/* ---- topo do cartão: ícone, título, detalhe e o botão de ver todos os meses ---- */
.wg .wg-topo{
    display: grid;
    grid-template-columns: auto minmax(0, 1fr) auto;
    grid-template-areas:
        "icone titulo botao"
        "icone detalhe detalhe";
    align-items: center;
    column-gap: 12px;
    margin-bottom: 14px;
}

.wg .wg-icone{
    grid-area: icone;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border-radius: 12px;
    background: var(--fs-surface-alto);
    color: var(--fs-primary);
    font-size: 1.3rem;
}

/* título comprido em cartão estreito quebra em duas linhas */
.wg .wg-titulo{
    grid-area: titulo;
    display: -webkit-box;
    overflow: hidden;
    margin: 0;
    color: var(--fs-text);
    font-size: 1.12rem;
    font-weight: 800;
    line-height: 1.25;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
}

/* numa linha de cartões de alturas diferentes, os gráficos ficam alinhados embaixo */
.wg .wg-corpo:has(> .wg-grafico){
    margin-top: auto;
}

.wg .wg-detalhe{
    grid-area: detalhe;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 2px 16px;
    margin: 1px 0 0 0;
    color: var(--fs-muted);
    font-size: 0.85rem;
    font-weight: 600;
    line-height: 1.3;
}

/* trecho do detalhe que só aparece em tela estreita (o de tela larga é o .wg-largo) */
.wg .wg-estreito{
    display: none;
}

.wg .wg-legenda{
    display: inline-flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 2px 14px;
    margin-left: auto;
    font-weight: 700;
}

.wg .wg-legenda > span{
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

/* as margens negativas deixam o topo do cartão da mesma altura com o botão e sem ele */
.wg .wg-todos{
    grid-area: botao;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: -5px -8px -5px 0;
    padding: 5px 10px;
    border: 0;
    border-radius: 10px;
    background: none;
    color: var(--fs-primary);
    font-size: 0.88rem;
    font-weight: 700;
    white-space: nowrap;
}

.wg .wg-todos:hover{
    background: color-mix(in srgb, var(--fs-primary) 10%, transparent);
    color: var(--fs-appbar);
}

.wg .wg-todos:focus-visible{
    outline: 3px solid color-mix(in srgb, var(--fs-primary) 45%, transparent);
    outline-offset: 1px;
}

.wg .wg-todos i{
    font-size: 0.8rem;
}

/* ---- faixa de meses, do mais novo para o mais antigo ---- */
.wg .wg-meses{
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(184px, 1fr));
    gap: 10px;
}

/* position: os textos só para leitor de tela (.visually-hidden) ficam presos ao mês; soltos, os dos meses
   fora da vista alargariam a página */
.wg .wg-mes{
    position: relative;
    min-width: 0;
    padding: 12px;
    border: 1px solid var(--fs-outline);
    border-radius: 14px;
    background: var(--fs-background);
}

/* o mês mais novo em destaque */
.wg .wg-mes:first-child{
    border-color: color-mix(in srgb, var(--fs-primary) 45%, var(--fs-outline));
    background: var(--fs-surface-alto);
}

.wg .wg-mes-topo{
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    min-height: 24px;
}

.wg .wg-mes-nome{
    color: var(--fs-muted);
    font-size: 0.8rem;
    font-weight: 800;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    white-space: nowrap;
}

.wg .wg-mes:first-child .wg-mes-nome{
    color: var(--fs-appbar);
}

/* variação em relação ao mês anterior: cinza quando não mudou, verde quando subiu, vermelho quando caiu */
.wg .wg-variacao{
    display: inline-flex;
    align-items: center;
    gap: 3px;
    padding: 2px 8px 2px 6px;
    border-radius: 20px;
    background: color-mix(in srgb, var(--wg-cor, var(--fs-muted)) 13%, #fff);
    color: var(--wg-cor, var(--fs-muted));
    font-size: 0.78rem;
    font-weight: 800;
    line-height: 1.35;
    white-space: nowrap;
}

.wg .wg-variacao i{
    font-size: 0.7rem;
}

/* verde para o que cresce ou entra, vermelho para o que cai ou sai, âmbar para o que está em aberto */
.wg .wg-verde{ --wg-cor: var(--fs-success); }
.wg .wg-vermelho{ --wg-cor: var(--fs-error); }
.wg .wg-ambar{ --wg-cor: #E0962B; }

/* o número principal do mês */
.wg .wg-valor{
    margin-top: 4px;
    color: var(--fs-text);
    font-size: 1.45rem;
    font-weight: 900;
    line-height: 1.2;
    white-space: nowrap;
}

.wg .wg-moeda{
    margin-right: 0.32em;
    color: var(--fs-muted);
    font-size: 0.62em;
    font-weight: 700;
}

/* barra do mês: as partes do todo (o recebido e o que está em aberto) */
.wg .wg-barra{
    display: flex;
    overflow: hidden;
    height: 6px;
    margin: 9px 0 8px 0;
    border-radius: 3px;
    background: color-mix(in srgb, var(--fs-muted) 18%, #fff);
}

.wg .wg-barra span{
    display: block;
    height: 100%;
    background: var(--wg-cor);
}

/* linhas do mês: o sinal colorido e o número de um lado, o valor em dinheiro do outro. O nome de cada
   linha está na legenda do topo do cartão */
.wg .wg-linha{
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    margin-top: 3px;
    white-space: nowrap;
}

.wg .wg-linha-numero{
    display: inline-flex;
    align-items: center;
    gap: 7px;
    color: var(--fs-text);
    font-size: 0.95rem;
    font-weight: 800;
    line-height: 1.3;
}

.wg .wg-linha-valor{
    color: var(--fs-muted);
    font-size: 0.82rem;
    font-weight: 700;
}

.wg .wg-linha-valor .wg-moeda{
    font-size: 0.8em;
}

/* contagens (ativações, cancelamentos): o número maior */
.wg .wg-linha-contagem{
    margin-top: 5px;
}

.wg .wg-linha-contagem .wg-linha-numero{
    font-size: 1.15rem;
    font-weight: 900;
}

.wg .wg-ponto{
    flex: none;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    background: var(--wg-cor);
}

.wg .wg-sinal{
    color: var(--wg-cor);
    font-size: 0.95rem;
    line-height: 1;
}

/* ---- área do gráfico (echarts): a largura é a do cartão ---- */
.wg .wg-grafico{
    width: 100%;
    height: 280px;
}

/* ---- quadros: um número por situação, com a cor dela na borda ---- */
.wg .wg-quadros{
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: 10px;
}

/* poucos quadros de conteúdo largo dividem a largura toda do cartão */
.wg .wg-quadros-esticados{
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
}

/* quadro de destaque (o do nome do arquivo, por exemplo), em cartão da largura toda: enquanto os quadros não
   cabem todos numa linha, ele fica com a linha inteira e os outros dividem a de baixo; no celular, os outros
   ficam dois a dois */
@media (max-width: 1099.98px){
    .wg .wg-quadros.wg-quadros-destaque{
        grid-template-columns: repeat(var(--wg-outros, 4), minmax(0, 1fr));
    }

    .wg .wg-quadros-destaque .wg-quadro-largo{
        grid-column: 1 / -1;
    }
}

@media (max-width: 699.98px){
    .wg .wg-quadros.wg-quadros-destaque{
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

.wg .wg-quadro{
    display: flex;
    flex-direction: column;
    min-width: 0;
    padding: 9px 12px 10px 12px;
    border: 1px solid var(--fs-outline);
    border-left: 5px solid var(--wg-cor, var(--fs-outline));
    border-radius: 12px;
    background: var(--fs-background);
}

/* nome comprido quebra em duas linhas; a margem de baixo cola o número no pé do quadro */
.wg .wg-quadro-nome{
    display: -webkit-box;
    overflow: hidden;
    margin-bottom: auto;
    color: var(--fs-muted);
    font-size: 0.76rem;
    font-weight: 800;
    letter-spacing: 0.03em;
    line-height: 1.25;
    text-transform: uppercase;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 2;
}

.wg .wg-quadro-valor{
    color: var(--fs-text);
    font-size: 1.35rem;
    font-weight: 900;
    line-height: 1.25;
}

/* situação sem nenhum registro fica apagada */
.wg .wg-quadro-zerado .wg-quadro-valor{
    color: var(--fs-muted);
    font-weight: 700;
}

/* quadro em que o valor é um nome (de arquivo, por exemplo), e não um número */
.wg .wg-quadro-texto .wg-quadro-valor{
    overflow: hidden;
    font-size: 1.05rem;
    font-weight: 800;
    line-height: 1.6;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.wg .wg-quadro-detalhe{
    color: var(--fs-muted);
    font-size: 0.82rem;
    font-weight: 700;
}

/* ---- lista: um nome de um lado e o número do outro; a faixa ao fundo é a parte do total ---- */
.wg .wg-lista{
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.wg .wg-lista-grupo{
    margin: 8px 2px 2px 2px;
    color: var(--fs-primary);
    font-size: 0.84rem;
    font-weight: 800;
}

.wg .wg-lista-grupo:first-child{
    margin-top: 0;
}

.wg .wg-lista-linha{
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    min-height: 34px;
    padding: 4px 10px;
    border-radius: 9px;
    background: linear-gradient(to right, var(--fs-surface-alto) var(--wg-parte, 0%), var(--fs-background) 0);
    color: var(--fs-text);
    font-size: 0.92rem;
    font-weight: 700;
}

.wg .wg-lista-linha b{
    flex: none;
    font-weight: 900;
}

/* ---- tabela (quadro de chamados): cabeçalho apagado e linhas separadas por um fio ---- */
.wg .wg-rolagem{
    overflow-x: auto;
}

.wg .wg-tabela{
    width: 100%;
    border-collapse: collapse;
    font-size: 0.9rem;
}

.wg .wg-tabela th{
    padding: 6px 10px;
    border-bottom: 1px solid var(--fs-outline);
    color: var(--fs-muted);
    font-size: 0.76rem;
    font-weight: 800;
    letter-spacing: 0.04em;
    text-align: left;
    text-transform: uppercase;
    white-space: nowrap;
}

.wg .wg-tabela td{
    padding: 6px 10px;
    border-bottom: 1px solid var(--fs-surface-alto);
    color: var(--fs-text);
    font-weight: 700;
    vertical-align: top;
}

.wg .wg-tabela tr:last-child td{
    border-bottom: 0;
}

/* um chamado no quadro: o número, com a cor do status na borda e o sinal do prazo */
.wg .wg-chamados{
    display: flex;
    flex-wrap: wrap;
    gap: 5px;
}

.wg .wg-chamado{
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 2px 8px 2px 7px;
    border: 1px solid var(--fs-outline);
    border-left: 4px solid var(--wg-cor, var(--fs-outline));
    border-radius: 8px;
    background: #fff;
    color: var(--fs-text);
    font-size: 0.86rem;
    font-weight: 800;
}

.wg .wg-chamado:hover{
    border-color: var(--fs-primary);
    border-left-color: var(--wg-cor, var(--fs-primary));
    background: var(--fs-surface);
}

/* ---- blocos de ação (remessa, envio de arquivo, fila): ao lado um do outro, embaixo dos quadros ---- */
.wg .wg-blocos{
    display: grid;
    grid-template-columns: minmax(200px, 1fr) minmax(260px, 2fr) minmax(200px, 1fr);
    gap: 10px;
    margin-top: 10px;
}

.wg .wg-bloco{
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-width: 0;
    padding: 10px 12px 12px 12px;
    border: 1px solid var(--fs-outline);
    border-radius: 12px;
    background: var(--fs-background);
}

.wg .wg-bloco-nome{
    color: var(--fs-muted);
    font-size: 0.76rem;
    font-weight: 800;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}

.wg .wg-bloco-valor{
    overflow: hidden;
    color: var(--fs-text);
    font-size: 1.05rem;
    font-weight: 800;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.wg .wg-bloco-detalhe{
    color: var(--fs-muted);
    font-size: 0.82rem;
    font-weight: 700;
}

.wg .wg-bloco .btn{
    align-self: flex-start;
    font-size: 0.88rem;
}

.wg .wg-bloco-envio{
    display: flex;
    gap: 8px;
}

.wg .wg-bloco-envio .form-control{
    min-width: 0;
    font-size: 0.9rem;
}

/* o botão de enviar fica da altura do campo, com o ícone e o texto na mesma linha */
.wg .wg-bloco-envio .btn{
    flex: none;
    align-self: stretch;
    white-space: nowrap;
}

/* o campo de arquivo com um arquivo sendo arrastado por cima */
.wg .wg-bloco-envio .form-control.dragging{
    border-color: var(--fs-primary);
    background: var(--fs-surface-alto);
}

.wg .wg-progresso{
    overflow: hidden;
    height: 8px;
    border-radius: 4px;
    background: color-mix(in srgb, var(--fs-muted) 18%, #fff);
}

.wg .wg-progresso span{
    display: block;
    height: 100%;
    background: var(--fs-success);
}

/* enquanto os três blocos não cabem lado a lado, o largo (o do envio do arquivo) fica com a linha de baixo
   inteira e os outros dois dividem a de cima */
@media (max-width: 1099.98px){
    .wg .wg-blocos{
        grid-template-columns: repeat(2, minmax(0, 1fr));
        grid-auto-flow: dense;
    }

    .wg .wg-bloco-largo{
        grid-column: 1 / -1;
    }
}

/* no celular o botão de enviar vai para baixo do campo, que assim mostra o nome do arquivo inteiro */
@media (max-width: 479.98px){
    .wg .wg-bloco-envio{
        flex-direction: column;
    }
}

/* ---- mapa (leaflet) ---- */
.wg .wg-mapa{
    width: 100%;
    height: 440px;
    border: 1px solid var(--fs-outline);
    border-radius: 14px;
}

/* resultado que veio sem nenhum mês */
.wg .wg-vazio{
    margin: 0;
    padding: 18px 14px;
    border: 1px dashed var(--fs-outline);
    border-radius: 14px;
    color: var(--fs-muted);
    font-weight: 600;
    text-align: center;
}

/* ---- telas largas: uma linha com os meses que cabem; o botão do topo mostra os outros ---- */
@media (min-width: 768px){
    .wg:not(.wg-aberto) .wg-meses{
        grid-template-rows: auto;
        grid-auto-rows: 0;
        row-gap: 0;
        overflow: hidden;
    }
}

/* ---- telas estreitas: os meses numa faixa que corre para o lado ---- */
@media (max-width: 767.98px){
    .fs-app.wg{
        padding: 14px 14px 16px 14px;
        border-radius: 16px;
    }

    .wg .wg-topo{
        grid-template-columns: auto minmax(0, 1fr);
        grid-template-areas:
            "icone titulo"
            "detalhe detalhe";
        row-gap: 8px;
        margin-bottom: 12px;
    }

    .wg .wg-icone{
        width: 36px;
        height: 36px;
        border-radius: 10px;
        font-size: 1.1rem;
    }

    .wg .wg-detalhe{
        margin: 0;
    }

    .wg .wg-legenda{
        margin-left: 0;
    }

    .wg .wg-todos,
    .wg .wg-largo{
        display: none;
    }

    .wg .wg-estreito{
        display: inline;
    }

    .wg .wg-meses{
        display: flex;
        overflow-x: auto;
        margin: 0 -14px;
        padding: 0 14px;
        scroll-padding: 0 14px;
        scroll-snap-type: x proximity;
        scrollbar-width: none;
        -webkit-overflow-scrolling: touch;
    }

    .wg .wg-meses::-webkit-scrollbar{
        display: none;
    }

    /* com um mês só, ele ocupa a largura toda */
    .wg .wg-mes{
        flex: 1 0 min(66%, 250px);
        scroll-snap-align: start;
    }

    .wg .wg-quadros{
        grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
        gap: 8px;
    }

    .wg .wg-mapa{
        height: 320px;
    }

    .wg .wg-blocos{
        grid-template-columns: minmax(0, 1fr);
    }
}
