.estrutura-aplicacao {
    min-height: 100vh;
    display: grid;
    grid-template-columns: var(--largura-menu) minmax(0, 1fr);
    grid-template-rows: var(--altura-cabecalho) 1fr;
}

.cabecalho-aplicacao {
    grid-column: 1 / -1;
    display: grid;
    /* Desconta o recuo da marca para alinhar a busca com o começo do conteúdo. */
    grid-template-columns: calc(var(--largura-menu) - var(--recuo-pagina)) minmax(0, 1fr) auto;
    align-items: center;
    gap: var(--recuo-pagina);
    padding: 0 var(--recuo-pagina);
    background: var(--cor-superficie);
    border-bottom: 1px solid var(--cor-borda);
    position: sticky;
    top: 0;
    z-index: 20;
}

.marca-aplicacao {
    display: flex;
    align-items: center;
    gap: var(--espaco-controle);
}

.marca-aplicacao__icone {
    width: 40px;
    height: 40px;
    display: block;
    flex-shrink: 0;
    border-radius: 12px;
    object-fit: contain;
}

.marca-aplicacao__titulo {
    display: block;
    font-size: 1.08rem;
    font-weight: 800;
}

.marca-aplicacao__subtitulo {
    display: block;
    margin-top: 2px;
    color: var(--cor-texto-secundario);
    font-size: 0.78rem;
}

.busca-global {
    max-width: 520px;
    position: relative;
}

.busca-global input {
    padding: 13px 16px 13px 42px;
}

.busca-global__icone {
    position: absolute;
    left: 14px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--cor-texto-secundario);
}

.acoes-cabecalho {
    display: flex;
    align-items: center;
    gap: var(--espaco-padrao);
}

/* A mensagem de saída não ocupa espaço entre os controles quando está vazia. */
.mensagem-acesso:empty { display: none; }
.mensagem-acesso:not(:empty) {
    position: absolute;
    right: 16px;
    top: 100%;
    max-width: calc(100vw - 32px);
    padding: 12px;
    background: var(--cor-superficie);
    border: 1px solid var(--cor-borda);
    border-radius: 8px;
    font-size: .85rem;
}

.menu-lateral {
    grid-row: 2;
    padding: var(--espaco-painel) var(--espaco-padrao);
    background: var(--cor-superficie);
    border-right: 1px solid var(--cor-borda);
    position: sticky;
    top: var(--altura-cabecalho);
    height: calc(100vh - var(--altura-cabecalho));
}

.menu-lateral__lista {
    display: grid;
    gap: var(--espaco-pequeno);
}

/* O controle aparece apenas no desktop; tablet e celular mantêm o layout responsivo. */
.menu-lateral__alternar { display: none; }
@media (min-width: 981px) {
    .menu-lateral__alternar {
        display: flex;
        align-items: center;
        justify-content: center;
        align-self: flex-end;
        width: 44px;
        height: 44px;
        flex-shrink: 0;
        margin-bottom: var(--espaco-painel);
        padding: 10px;
        border: 1px solid var(--cor-borda);
        /* Mesmo acabamento arredondado, fundo e cores do seletor de tema. */
        border-radius: 24px;
        background: var(--cor-fundo);
        color: var(--cor-primaria);
        cursor: var(--cursor-interativo, pointer);
    }
    .menu-lateral__alternar:hover {
        color: var(--cor-primaria);
        background: var(--cor-primaria-suave);
    }
    .menu-lateral__alternar:focus-visible {
        outline: 2px solid var(--cor-primaria);
        outline-offset: 3px;
    }
    .menu-recolhido { --largura-menu: 82px; }
    .menu-recolhido .marca-aplicacao__textos,
    .menu-recolhido .menu-lateral__texto,
    .menu-recolhido .menu-lateral__rodape { display: none; }
    .menu-recolhido .menu-lateral { padding: 24px 16px; }
    .menu-recolhido .menu-lateral__link { justify-content: center; padding: 0; }
    .menu-recolhido .menu-lateral__alternar { align-self: center; }
}

.menu-lateral__link {
    display: flex;
    align-items: center;
    gap: var(--espaco-controle);
    min-height: 46px;
    padding: 0 14px;
    border-radius: 12px;
    color: var(--cor-texto-secundario);
    font-weight: 650;
    transition: background-color var(--transicao-curta), color var(--transicao-curta);
}

.menu-lateral__link:hover,
.menu-lateral__link.esta-ativo {
    background: var(--cor-primaria-suave);
    color: var(--cor-primaria);
}

.conteudo-aplicacao {
    min-width: 0;
    padding: var(--recuo-pagina);
}

@media (max-width: 980px) {
    :root {
        --largura-menu: 82px;
    }

    .marca-aplicacao__textos,
    .menu-lateral__texto,
    .perfil-cabecalho__textos {
        display: none;
    }

    .cabecalho-aplicacao {
        grid-template-columns: calc(var(--largura-menu) - var(--recuo-pagina)) minmax(0, 1fr) auto;
        gap: var(--recuo-pagina);
    }
}

@media (max-width: 720px) {
    .acoes-cabecalho { gap: var(--espaco-controle); }
    .estrutura-aplicacao {
        display: block;
    }

    .cabecalho-aplicacao {
        position: static;
        grid-template-columns: 1fr auto;
        height: auto;
        padding: 14px 16px;
    }

    .busca-global {
        grid-column: 1 / -1;
        grid-row: 2;
    }

    .menu-lateral {
        position: fixed;
        left: 0;
        right: 0;
        bottom: 0;
        top: auto;
        width: 100%;
        height: auto;
        padding: 8px;
        border-top: 1px solid var(--cor-borda);
        border-right: 0;
        z-index: 30;
        overflow-x: auto;
    }

    .menu-lateral__lista {
        display: flex;
        min-width: 0;
    }

    .menu-lateral__link {
        flex: 1;
        min-width: 54px;
        justify-content: center;
    }

    .conteudo-aplicacao {
        padding: var(--espaco-painel) var(--recuo-pagina) calc(96px + env(safe-area-inset-bottom, 0px));
    }
}

.menu-lateral { display: flex; flex-direction: column; }
.menu-lateral__lista { flex: 0 0 auto; }
.menu-lateral__icone {
    display: block;
    width: 22px;
    height: 22px;
    flex: 0 0 22px;
    /* currentColor usa a cor do link, incluindo o tema e o estado ativo. */
    background-color: currentColor;
    /* A máscara usa o desenho do SVG indicado pelo JavaScript para dar forma ao ícone. */
    -webkit-mask: var(--icone-menu) center / contain no-repeat;
    mask: var(--icone-menu) center / contain no-repeat;
}
.menu-lateral__rodape { margin-top: auto; display: grid; gap: var(--espaco-controle);
    padding-top: var(--espaco-painel);
}
.menu-lateral__motivacao { padding: 14px; border-radius: 14px; background: var(--cor-primaria-suave); }
.menu-lateral__motivacao strong { display: block; color: var(--cor-primaria); font-size: .78rem; }
.menu-lateral__motivacao span { display: block; margin-top: 4px; color: var(--cor-texto-secundario); font-size: .68rem; line-height: 1.4; }

@media (max-width: 980px) {
    .menu-lateral__rodape { display: none; }
}

/* O cabeçalho e as páginas usam o mesmo recuo horizontal. */
.busca-global, .marca-aplicacao, .acoes-cabecalho { min-width: 0; }
.perfil-cabecalho__textos { max-width: 10rem; }
.perfil-cabecalho__nome { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (min-width: 721px) and (max-width: 980px) {
    .menu-lateral { padding-inline: var(--espaco-controle); }
    .menu-lateral__link { padding-inline: 0; justify-content: center; }
}
@media (max-width: 720px) {
    .cabecalho-aplicacao { gap: var(--espaco-padrao); padding: var(--espaco-padrao) var(--recuo-pagina); }
    .busca-global { max-width: none; }
    .menu-lateral { padding-bottom: calc(var(--espaco-pequeno) + env(safe-area-inset-bottom, 0px)); }
    .menu-lateral__lista { gap: var(--espaco-pequeno); }
    .menu-lateral__link { min-width: 0; padding-inline: 0; }
}
