/* =====================================================================
   layout.css — estrutura da página e navegação
   390px  → tab bar fixa no rodapé, uma aba por tela
   768px  → mesma tab bar, mais respiro, grid nos cards
   1280px → tab bar vira sidebar fixa à esquerda
   ===================================================================== */

/* ---------- Casca ---------- */

.app {
    display: flex;
    flex-direction: column;
    min-height: 100dvh;
}

.app__conteudo {
    flex: 1 1 auto;
    width: 100%;
    max-width: var(--largura-conteudo);
    margin-inline: auto;
    padding-inline: var(--esp-4);
    padding-block-start: var(--esp-5);
    /* Espaço pra tab bar não cobrir o fim do conteúdo (inclui o notch). */
    padding-block-end: calc(
        var(--altura-tabbar) + var(--esp-8) + env(safe-area-inset-bottom, 0px)
    );
}

.app__conteudo--largo {
    max-width: var(--largura-larga);
}

/* Telas de autenticação: sem tab bar, conteúdo centralizado. */
.app--auth {
    justify-content: center;
    padding: var(--esp-6) var(--esp-4);
}

.app--auth .app__conteudo {
    max-width: 24rem;
    padding-block-end: var(--esp-8);
}

/* ---------- Cabeçalho da aba ---------- */

.cabecalho {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--esp-4);
    margin-block-end: var(--esp-6);
}

.cabecalho__titulo {
    font-size: var(--texto-3xl);
    font-weight: var(--peso-forte);
    letter-spacing: var(--tracking-apertado);
}

.cabecalho__sub {
    margin-block-start: var(--esp-1);
    color: var(--texto-suave);
    font-size: var(--texto-md);
}

/* ---------- Tab bar (mobile e tablet) ---------- */

.tabbar {
    position: fixed;
    inset-inline: 0;
    inset-block-end: 0;
    z-index: var(--z-tabbar);
    display: flex;
    background-color: color-mix(in srgb, var(--fundo-superficie) 82%, transparent);
    -webkit-backdrop-filter: saturate(180%) blur(20px);
    backdrop-filter: saturate(180%) blur(20px);
    border-block-start: 1px solid var(--borda-sutil);
    /* safe-area-inset-bottom: barra de gestos / notch do iPhone. */
    padding-block-end: env(safe-area-inset-bottom, 0px);
}

.tabbar__item {
    position: relative;
    flex: 1 1 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--esp-1);
    min-height: var(--altura-tabbar);
    padding-block: var(--esp-2);
    color: var(--texto-fraco);
    font-size: var(--texto-xs);
    font-weight: var(--peso-medio);
    letter-spacing: var(--tracking-normal);
    text-decoration: none;
}

.tabbar__item:hover {
    color: var(--texto-suave);
    text-decoration: none;
}

.tabbar__item--ativo,
.tabbar__item--ativo:hover {
    color: var(--acento);
}

.tabbar__icone {
    width: 24px;
    height: 24px;
    stroke: currentColor;
    fill: none;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.tabbar__rotulo {
    line-height: 1;
}

/* Contador de cards vencidos, colado no ícone. */
.tabbar__badge {
    position: absolute;
    inset-block-start: var(--esp-2);
    inset-inline-start: 50%;
    margin-inline-start: var(--esp-2);
    min-width: 18px;
    padding-inline: var(--esp-1);
    border-radius: var(--raio-pilula);
    background-color: var(--perigo);
    color: var(--cor-branco);
    font-size: 0.625rem;
    font-weight: var(--peso-forte);
    line-height: 18px;
    text-align: center;
}

/* Indicador deslizante controlado pelo Anime.js. */
.tabbar__indicador {
    position: absolute;
    inset-block-start: 0;
    inset-inline-start: 0;
    width: 28px;
    height: 3px;
    border-radius: var(--raio-pilula);
    background-color: var(--acento);
    pointer-events: none;
    opacity: 0;
}

/* ---------- Grid de conteúdo ---------- */

.grade {
    display: grid;
    grid-template-columns: 1fr;
    gap: var(--esp-3);
}

.grade--stats {
    grid-template-columns: repeat(2, 1fr);
    gap: var(--esp-3);
}

.pilha {
    display: flex;
    flex-direction: column;
    gap: var(--esp-4);
}

.pilha--apertada {
    gap: var(--esp-2);
}

.linha {
    display: flex;
    align-items: center;
    gap: var(--esp-2);
    flex-wrap: wrap;
}

.linha--entre {
    justify-content: space-between;
}

.secao {
    margin-block-start: var(--esp-10);
}

.secao__titulo {
    margin-block-end: var(--esp-3);
    font-size: var(--texto-sm);
    font-weight: var(--peso-semi);
    color: var(--texto-fraco);
    text-transform: uppercase;
    letter-spacing: var(--tracking-largo);
}

/* Tabela de Meus Cards: só aparece no desktop. */
.tabela-envolucro {
    display: none;
}

/* =====================================================================
   768px — tablet
   ===================================================================== */

@media (min-width: 768px) {
    .app__conteudo {
        padding-inline: var(--esp-8);
        padding-block-start: var(--esp-8);
    }

    .cabecalho__titulo {
        font-size: var(--texto-4xl);
    }

    .grade--cards {
        grid-template-columns: repeat(2, 1fr);
        gap: var(--esp-4);
    }

    .grade--stats {
        grid-template-columns: repeat(4, 1fr);
        gap: var(--esp-4);
    }

    .tabbar__item {
        font-size: var(--texto-sm);
        gap: var(--esp-2);
    }
}

/* =====================================================================
   1280px — desktop: tab bar vira sidebar
   ===================================================================== */

@media (min-width: 1280px) {
    .app {
        flex-direction: row;
    }

    /* O vão da sidebar é MARGEM, não padding.
       Como box-sizing é border-box, um padding-inline-start de 240px seria
       descontado da max-width e comeria ~200px úteis — o suficiente pra
       jogar a coluna "Ações" da tabela pra fora da tela. Com margem, a
       max-width passa a valer só pro conteúdo de verdade. */
    .app__conteudo {
        max-width: var(--largura-larga);
        margin-inline: var(--largura-sidebar) auto;
        padding-inline: var(--esp-12);
        padding-block: var(--esp-12);
    }

    .app--auth .app__conteudo {
        padding-inline: var(--esp-4);
        margin-inline: auto;
    }

    .tabbar {
        inset-block: 0 auto;
        inset-inline-end: auto;
        flex-direction: column;
        justify-content: flex-start;
        gap: var(--esp-1);
        width: var(--largura-sidebar);
        height: 100dvh;
        padding: var(--esp-6) var(--esp-3);
        border-block-start: none;
        border-inline-end: 1px solid var(--borda-sutil);
    }

    .tabbar__item {
        flex: 0 0 auto;
        flex-direction: row;
        justify-content: flex-start;
        gap: var(--esp-3);
        min-height: var(--alvo-toque);
        padding: var(--esp-3) var(--esp-4);
        border-radius: var(--raio-md);
        font-size: var(--texto-md);
    }

    .tabbar__item--ativo {
        background-color: var(--acento-suave);
    }

    .tabbar__badge {
        position: static;
        margin-inline: auto 0;
    }

    .tabbar__indicador {
        display: none;
    }

    /* Marca do app no topo da sidebar. */
    .tabbar::before {
        content: "Vocabulário";
        display: block;
        padding: var(--esp-2) var(--esp-4) var(--esp-6);
        font-family: var(--fonte-display);
        font-size: var(--texto-lg);
        font-weight: var(--peso-forte);
        letter-spacing: var(--tracking-apertado);
        color: var(--texto-forte);
    }

    .grade--cards {
        grid-template-columns: repeat(3, 1fr);
    }

    /* Desktop troca a lista de cards pela tabela com edição em massa. */
    .tabela-envolucro {
        display: block;
        overflow-x: auto;
        background-color: var(--fundo-superficie);
        border: 1px solid var(--borda-sutil);
        border-radius: var(--raio-lg);
        box-shadow: var(--sombra-sm);
    }

    .grade--cards.grade--esconde-desktop {
        display: none;
    }
}
