/* ===========================================================================
   Shell da aplicação — fatia 12d do redesign.

   Sidebar fixa + topbar, no lugar da navbar horizontal do Bulma. O motivo não
   é estético: com 17 destinos (o menu "Gestão" sozinho tem 9), a navbar
   escondia metade deles atrás de dropdown e a outra metade sumia no burger do
   celular. Na coluna, tudo o que o papel do usuário alcança fica visível de
   uma vez.

   Consome APENAS os tokens de tokens.css — nenhuma cor literal aqui, pelo
   mesmo motivo de componentes.css: cor fixa tira a paleta do arquivo único e
   quebra o tema escuro naquele ponto.
   ======================================================================== */

.gp-app {
    display: flex;
    min-height: 100vh;
    align-items: stretch;
}

/* --- Sidebar ------------------------------------------------------------- */

.gp-sidebar {
    flex: 0 0 15.5rem;
    width: 15.5rem;
    display: flex;
    flex-direction: column;
    background-color: var(--superficie-nav);
    color: var(--cor-sobre-nav);
    position: sticky;
    top: 0;
    height: 100vh;
    z-index: 30;
}

.gp-sidebar__topo {
    padding: var(--esp-5) var(--esp-4) var(--esp-4);
    border-bottom: 1px solid var(--cor-borda-nav);
}

.gp-sidebar__marca img {
    max-width: 100%;
    height: auto;
}

/* Rótulo do papel: quem tem dois perfis precisa saber com qual está olhando a
   tela — os menus abaixo mudam por causa dele. */
.gp-sidebar__papel {
    display: block;
    margin-top: var(--esp-2);
    font-size: var(--texto-pequeno);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--cor-sobre-nav);
    opacity: 0.75;
}

.gp-sidebar__nav {
    flex: 1 1 auto;
    overflow-y: auto;
    padding: var(--esp-3) var(--esp-2);
}

.gp-sidebar__grupo + .gp-sidebar__grupo {
    margin-top: var(--esp-4);
    padding-top: var(--esp-3);
    border-top: 1px solid var(--cor-borda-nav);
}

.gp-sidebar__titulo {
    padding: 0 var(--esp-3) var(--esp-2);
    font-size: var(--texto-pequeno);
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--cor-sobre-nav);
    opacity: 0.6;
}

.gp-nav-item {
    display: flex;
    align-items: center;
    gap: var(--esp-3);
    padding: 0.55rem var(--esp-3);
    border-radius: var(--raio-lg);
    color: var(--cor-sobre-nav);
    font-size: var(--texto-base);
    line-height: 1.3;
}

.gp-nav-item:hover {
    background-color: var(--superficie-nav-hover);
    color: var(--cor-sobre-nav-forte);
}

.gp-nav-item.is-ativo {
    background-color: var(--superficie-nav-ativa);
    color: var(--cor-sobre-nav-ativa);
    font-weight: 600;
}

.gp-nav-item__icone {
    flex: 0 0 1.25rem;
    text-align: center;
    font-size: 1rem;
}

.gp-sidebar__rodape {
    padding: var(--esp-2);
    border-top: 1px solid var(--cor-borda-nav);
}

.gp-sidebar__rodape .gp-nav-item {
    width: 100%;
    background: none;
    border: 0;
    cursor: pointer;
    font-family: inherit;
    text-align: left;
}

/* --- Área principal ------------------------------------------------------ */

.gp-principal {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.gp-topbar {
    position: sticky;
    top: 0;
    z-index: 20;
    display: flex;
    align-items: center;
    gap: var(--esp-3);
    padding: var(--esp-3) var(--esp-4);
    background-color: var(--superficie-cartao);
    border-bottom: 1px solid var(--cor-borda);
}

.gp-topbar__marca img {
    max-height: 1.75rem;
    width: auto;
}

.gp-topbar__busca {
    flex: 1 1 auto;
    max-width: 30rem;
}

.gp-topbar__usuario {
    margin-left: auto;
    display: flex;
    align-items: center;
    gap: var(--esp-2);
}

.gp-main {
    flex: 1 1 auto;
    min-width: 0;
}

/* --- Sino e menus da topbar ---------------------------------------------- */

.gp-menu-wrap {
    position: relative;
}

.gp-menu-gatilho {
    display: inline-flex;
    align-items: center;
    gap: var(--esp-2);
    padding: var(--esp-2) var(--esp-3);
    border: 1px solid transparent;
    border-radius: var(--raio-lg);
    background: none;
    color: var(--cor-texto);
    font-family: inherit;
    font-size: var(--texto-base);
    cursor: pointer;
}

.gp-menu-gatilho:hover {
    background-color: var(--superficie-baixa);
    border-color: var(--cor-borda);
}

/* Contador de não lidas: fica sobre o sino porque o número só significa algo
   colado no ícone — ao lado do nome ele viraria "um número qualquer". */
.gp-sino {
    position: relative;
    font-size: 1.1rem;
    line-height: 1;
}

.gp-sino__contador {
    position: absolute;
    top: -0.45rem;
    right: -0.55rem;
    min-width: 1.05rem;
    padding: 0 0.2rem;
    border-radius: var(--raio-total);
    background-color: var(--cor-erro);
    color: var(--cor-sobre-erro);
    font-size: 0.65rem;
    font-weight: 700;
    line-height: 1.05rem;
    text-align: center;
}

.gp-menu {
    display: none;
    position: absolute;
    right: 0;
    top: calc(100% + 0.35rem);
    min-width: 15rem;
    max-width: 22rem;
    padding: var(--esp-2) 0;
    background-color: var(--superficie-cartao);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-lg);
    box-shadow: var(--sombra-3);
    z-index: 40;
}

.gp-menu.is-aberto {
    display: block;
}

.gp-menu__item {
    display: block;
    padding: 0.5rem var(--esp-4);
    color: var(--cor-texto);
    font-size: var(--texto-base);
}

.gp-menu__item:hover {
    background-color: var(--superficie-baixa);
    color: var(--cor-texto);
}

.gp-menu__vazio {
    padding: 0.6rem var(--esp-4);
    color: var(--cor-texto-suave);
    font-size: var(--texto-pequeno);
    font-style: italic;
}

.gp-menu__divisor {
    height: 1px;
    margin: var(--esp-2) 0;
    background-color: var(--cor-borda);
    border: 0;
}

.gp-menu__rodape {
    padding: var(--esp-2) var(--esp-4) 0;
}

.gp-notif__msg {
    display: block;
    white-space: normal;
}

.gp-notif__hora {
    display: block;
    margin-top: 2px;
    font-size: var(--texto-pequeno);
    color: var(--cor-texto-suave);
}

/* --- Burger e drawer no celular ------------------------------------------ */

.gp-burger {
    display: none;
    padding: var(--esp-2);
    border: 1px solid var(--cor-borda);
    border-radius: var(--raio-lg);
    background-color: var(--superficie-cartao);
    color: var(--cor-texto);
    font-size: 1.1rem;
    line-height: 1;
    cursor: pointer;
}

.gp-overlay {
    display: none;
    position: fixed;
    inset: 0;
    background-color: rgba(0, 0, 0, 0.45);
    z-index: 25;
}

.gp-overlay.is-aberto {
    display: block;
}

@media screen and (max-width: 1023px) {
    .gp-sidebar {
        position: fixed;
        top: 0;
        left: 0;
        transform: translateX(-100%);
        transition: transform 0.18s ease;
    }

    .gp-sidebar.is-aberta {
        transform: none;
        box-shadow: var(--sombra-3);
    }

    .gp-burger {
        display: inline-flex;
    }

    .gp-topbar__busca {
        max-width: none;
    }

    /* O nome vira só o avatar: em 360px de largura, nome + sino + busca não
       cabem, e a busca é a que se usa. */
    .gp-topbar__usuario .gp-menu-gatilho__nome {
        display: none;
    }
}
