/* ==========================================================
   LAYOUT PRINCIPAL
   ========================================================== */

.app-shell {
    position: relative;
    display: flex;
    width: 100%;
    min-height: 100vh;
}


/* ==========================================================
   SIDEBAR
   Menu flutuante sobre o conteúdo
   ========================================================== */

.sidebar {
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;

    z-index: 1200;

    width: min(
        var(--sidebar-width),
        calc(100vw - 32px)
    );

    height: 100vh;

    padding: 20px 16px;

    overflow-x: hidden;
    overflow-y: auto;

    color: #ffffff;

    /*
     * Fundo levemente transparente.
     * Não utilizamos opacity para não
     * deixar textos e logo transparentes.
     */
    background:
        linear-gradient(
            180deg,
            color-mix(
                in srgb,
                var(--primary-dark) 95%,
                transparent
            ),
            color-mix(
                in srgb,
                var(--primary-dark) 91%,
                transparent
            )
        );

    /*
     * Desfoque do conteúdo atrás do menu.
     */
    backdrop-filter: blur(16px);
    -webkit-backdrop-filter: blur(16px);

    /*
     * Profundidade.
     */
    box-shadow:
        22px 0 60px rgba(0, 0, 0, 0.16),
        5px 0 18px rgba(0, 0, 0, 0.08);

    /*
     * Estado inicial: fechado.
     */
    transform: translateX(-105%);
    visibility: hidden;
    opacity: 0;

    transition:
        transform 320ms cubic-bezier(0.22, 1, 0.36, 1),
        opacity 240ms ease,
        visibility 320ms;
}


/* ==========================================================
   SIDEBAR ABERTA
   ========================================================== */

.sidebar-open .sidebar {
    transform: translateX(0);
    visibility: visible;
    opacity: 1;
}


/*
 * Compatibilidade caso ainda exista
 * sidebar-collapsed em alguma parte
 * do projeto.
 *
 * Ela NÃO altera mais a largura.
 */
.sidebar-collapsed .sidebar {
    width: min(
        var(--sidebar-width),
        calc(100vw - 32px)
    );

    padding: 20px 16px;
}


/* ==========================================================
   DETALHES DECORATIVOS DA SIDEBAR
   ========================================================== */

.sidebar::before {
    content: "";

    position: absolute;

    top: 0;
    left: 10%;
    right: 10%;

    height: 1px;

    background:
        linear-gradient(
            to right,
            transparent,
            rgba(255, 255, 255, 0.30),
            transparent
        );

    pointer-events: none;
}


.sidebar::after {
    content: "";

    position: absolute;

    width: 220px;
    height: 220px;

    top: -130px;
    left: -100px;

    border-radius: 50%;

    background:
        rgba(255, 255, 255, 0.06);

    filter: blur(25px);

    pointer-events: none;
}


/* ==========================================================
   OVERLAY
   Área escura atrás da sidebar
   ========================================================== */

.sidebar-overlay {
    position: fixed;

    inset: 0;

    z-index: 1190;

    background:
        rgba(8, 16, 13, 0.32);

    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);

    opacity: 0;
    visibility: hidden;

    pointer-events: none;

    transition:
        opacity 260ms ease,
        visibility 260ms ease;
}


.sidebar-open .sidebar-overlay {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
}


/* ==========================================================
   CABEÇALHO DA SIDEBAR
   ========================================================== */

.sidebar-header {
    position: relative;

    z-index: 2;

    margin-bottom: 22px;
    padding-bottom: 20px;

    border-bottom:
        1px solid rgba(255, 255, 255, 0.09);
}


/* ==========================================================
   LOGO / MARCA
   ========================================================== */

.sidebar-brand {
    display: flex;
    align-items: center;

    gap: 12px;

    min-height: 50px;

    margin: 0;

    color: #ffffff;

    font-weight: 700;

    text-decoration: none;
}


.brand-logo {
    display: block;

    width: min(100%, 50px);
    height: auto;

    flex-shrink: 0;

    transition:
        transform 300ms ease,
        filter 300ms ease;
}


.sidebar-brand:hover .brand-logo {
    transform: scale(1.045);
}


/* Texto ao lado da logo */

.sidebar-brand-text {
    display: grid;

    gap: 2px;

    min-width: 0;
}


.sidebar-brand-text strong {
    color: #ffffff;

    font-size: 0.86rem;
    font-weight: 700;

    line-height: 1.25;

    overflow-wrap: anywhere;
}


.sidebar-brand-text span {
    color:
        rgba(255, 255, 255, 0.52);

    font-size: 0.65rem;
    font-weight: 500;

    letter-spacing: 0.025em;
}


/* ==========================================================
   NAVEGAÇÃO DA SIDEBAR
   ========================================================== */

.sidebar-nav {
    position: relative;

    z-index: 2;

    display: grid;

    gap: 5px;
}


/* ==========================================================
   TÍTULOS DAS SEÇÕES
   ========================================================== */

.sidebar-section {
    margin:
        17px
        10px
        5px;

    color:
        rgba(255, 255, 255, 0.42);

    font-size: 0.64rem;
    font-weight: 800;

    letter-spacing: 0.11em;

    text-transform: uppercase;
}


.sidebar-section:first-child {
    margin-top: 3px;
}


/* ==========================================================
   LINKS DA SIDEBAR
   ========================================================== */

.sidebar-link {
    position: relative;

    display: flex;

    align-items: center;

    min-height: 42px;

    border:
        1px solid transparent;

    border-radius: 10px;

    padding: 10px 12px;

    color:
        rgba(255, 255, 255, 0.82);

    font-size: 0.86rem;
    font-weight: 600;

    text-decoration: none;

    overflow: hidden;

    transition:
        background 200ms ease,
        color 200ms ease,
        border-color 200ms ease,
        transform 200ms ease,
        padding-left 200ms ease;
}


/*
 * Pequena barra lateral
 * exibida no hover.
 */
.sidebar-link::before {
    content: "";

    position: absolute;

    left: 0;
    top: 50%;

    width: 2px;
    height: 0;

    transform:
        translateY(-50%);

    border-radius:
        0 5px 5px 0;

    background:
        rgba(255, 255, 255, 0.90);

    opacity: 0;

    transition:
        height 200ms ease,
        opacity 200ms ease;
}


/* ==========================================================
   HOVER DOS LINKS
   ========================================================== */

.sidebar-link:hover,
.sidebar-link:focus-visible {
    padding-left: 15px;

    border-color:
        rgba(255, 255, 255, 0.07);

    background:
        rgba(255, 255, 255, 0.09);

    color: #ffffff;

    outline: none;
}


.sidebar-link:hover::before,
.sidebar-link:focus-visible::before {
    height: 20px;

    opacity: 1;
}


/* ==========================================================
   LINK ATIVO
   Pode ser utilizado posteriormente
   ========================================================== */

.sidebar-link.is-active {
    padding-left: 15px;

    border-color:
        rgba(255, 255, 255, 0.09);

    background:
        rgba(255, 255, 255, 0.12);

    color: #ffffff;

    box-shadow:
        inset 0 1px 0
        rgba(255, 255, 255, 0.04);
}


.sidebar-link.is-active::before {
    height: 22px;

    opacity: 1;
}


/* ==========================================================
   SCROLLBAR DA SIDEBAR
   ========================================================== */

.sidebar {
    scrollbar-width: thin;

    scrollbar-color:
        rgba(255, 255, 255, 0.18)
        transparent;
}


.sidebar::-webkit-scrollbar {
    width: 5px;
}


.sidebar::-webkit-scrollbar-track {
    background: transparent;
}


.sidebar::-webkit-scrollbar-thumb {
    border-radius: 10px;

    background:
        rgba(255, 255, 255, 0.16);
}


.sidebar::-webkit-scrollbar-thumb:hover {
    background:
        rgba(255, 255, 255, 0.25);
}


/* ==========================================================
   CONTEÚDO PRINCIPAL
   ========================================================== */

.app-main {
    flex: 1;

    width: 100%;
    min-width: 0;

    /*
     * O conteúdo NÃO muda de largura
     * quando o menu é aberto.
     */
    margin-left: 0;
}


/* ==========================================================
   TOPBAR
   ========================================================== */

.topbar {
    position: relative;

    z-index: 20;

    display: flex;

    align-items: center;
    justify-content: space-between;

    gap: 16px;

    min-height: 64px;

    padding: 0 24px;

    border-bottom:
        1px solid var(--border);

    background:
        color-mix(
            in srgb,
            var(--surface) 94%,
            transparent
        );

    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
}


/* ==========================================================
   BOTÃO DO MENU
   ========================================================== */

.sidebar-toggle {
    position: relative;

    display: inline-grid;

    flex: 0 0 auto;

    gap: 4px;

    width: 40px;
    height: 40px;

    place-content: center;

    border:
        1px solid var(--border);

    border-radius: 10px;

    background:
        var(--surface);

    color:
        var(--text-primary);

    cursor: pointer;

    transition:
        border-color 200ms ease,
        background 200ms ease,
        box-shadow 200ms ease,
        transform 200ms ease;
}


.sidebar-toggle:hover {
    border-color:
        color-mix(
            in srgb,
            var(--primary) 45%,
            var(--border)
        );

    background:
        color-mix(
            in srgb,
            var(--primary) 4%,
            var(--surface)
        );

    box-shadow:
        0 5px 15px
        rgba(0, 0, 0, 0.06);

    transform:
        translateY(-1px);
}


.sidebar-toggle:active {
    transform:
        translateY(0);
}


.sidebar-toggle:focus-visible {
    outline:
        3px solid
        color-mix(
            in srgb,
            var(--primary) 15%,
            transparent
        );

    outline-offset: 2px;
}


/* ==========================================================
   BARRAS DO BOTÃO HAMBÚRGUER
   ========================================================== */

.sidebar-toggle span {
    display: block;

    width: 18px;
    height: 2px;

    border-radius: 10px;

    background:
        var(--text-primary);

    transform-origin: center;

    transition:
        transform 250ms ease,
        opacity 180ms ease;
}


/* ==========================================================
   HAMBÚRGUER → X
   ========================================================== */

.sidebar-open
.sidebar-toggle span:nth-child(1) {
    transform:
        translateY(6px)
        rotate(45deg);
}


.sidebar-open
.sidebar-toggle span:nth-child(2) {
    opacity: 0;

    transform:
        scaleX(0);
}


.sidebar-open
.sidebar-toggle span:nth-child(3) {
    transform:
        translateY(-6px)
        rotate(-45deg);
}


/* ==========================================================
   TÍTULO DA TOPBAR
   ========================================================== */

.topbar-title {
    min-width: 0;

    font-weight: 700;

    overflow-wrap: anywhere;
}


/* ==========================================================
   AÇÕES DA TOPBAR
   ========================================================== */

.topbar-actions {
    display: inline-flex;

    align-items: center;

    flex-shrink: 0;

    gap: 10px;
}


/* ==========================================================
   SELETOR DE TEMA
   ========================================================== */

.theme-switcher {
    display: inline-flex;

    flex-shrink: 0;

    gap: 4px;

    border:
        1px solid var(--border);

    border-radius:
        var(--border-radius);

    padding: 3px;

    background:
        var(--background);
}


.theme-option {
    min-width: 66px;

    border: 0;

    border-radius:
        calc(
            var(--border-radius) - 2px
        );

    padding: 7px 9px;

    background:
        transparent;

    color:
        var(--text-secondary);

    font: inherit;

    font-size: 0.875rem;
    font-weight: 700;

    cursor: pointer;

    transition:
        background 180ms ease,
        color 180ms ease,
        box-shadow 180ms ease;
}


.theme-option:hover,
.theme-option:focus {
    color:
        var(--text-primary);

    outline:
        2px solid transparent;
}


.theme-option.is-active {
    background:
        var(--surface);

    color:
        var(--text-primary);

    box-shadow:
        0 1px 3px
        rgba(0, 0, 0, 0.09);
}


/* ==========================================================
   LOGOUT
   ========================================================== */

.logout-form {
    margin: 0;
}


.logout-button {
    min-height: 38px;

    padding:
        8px 12px;
}


/* ==========================================================
   CONTEÚDO
   ========================================================== */

.content {
    width: 100%;

    max-width: 1440px;

    padding: 24px;
}


/* ==========================================================
   CABEÇALHO DAS PÁGINAS
   ========================================================== */

.page-header {
    max-width: 960px;

    margin-bottom: 20px;
}


.page-header h1 {
    margin:
        0 0 8px;

    font-size: 2rem;

    line-height: 1.15;

    letter-spacing:
        -0.025em;

    overflow-wrap: anywhere;
}


.page-header p {
    margin: 0;

    color:
        var(--text-secondary);

    line-height: 1.5;
}


/* ==========================================================
   CABEÇALHO COM AÇÕES
   ========================================================== */

.page-header-actions {
    display: flex;

    align-items: flex-start;
    justify-content: space-between;

    gap: 16px;

    max-width: none;
}


/* ==========================================================
   AÇÕES DA PÁGINA
   ========================================================== */

.page-actions {
    display: flex;

    flex-wrap: wrap;

    gap: 10px;
}


/* ==========================================================
   QUANDO O MENU ESTÁ ABERTO
   ========================================================== */

/*
 * Impede scroll do body atrás do menu.
 *
 * A sidebar continua podendo rolar
 * normalmente.
 */
body.sidebar-open {
    overflow: hidden;
}


/* ==========================================================
   RESPONSIVIDADE - TABLET
   ========================================================== */

@media (max-width: 900px) {

    .sidebar {
        width:
            min(
                300px,
                calc(100vw - 40px)
            );
    }


    .topbar {
        padding:
            0 18px;
    }


    .content {
        padding:
            20px;
    }

}


/* ==========================================================
   RESPONSIVIDADE - CELULAR
   ========================================================== */

@media (max-width: 680px) {

    .sidebar {
        width:
            min(
                290px,
                calc(100vw - 38px)
            );

        padding:
            18px 14px;
    }


    .sidebar-header {
        margin-bottom: 18px;

        padding-bottom: 17px;
    }


    .brand-logo {
        width: 45px;
    }


    .sidebar-brand-text strong {
        font-size: 0.8rem;
    }


    .sidebar-brand-text span {
        font-size: 0.61rem;
    }


    .sidebar-link {
        min-height: 43px;

        font-size: 0.84rem;
    }


    .topbar {
        min-height: 60px;

        gap: 10px;

        padding:
            0 15px;
    }


    .sidebar-toggle {
        width: 38px;
        height: 38px;
    }


    .content {
        padding:
            18px 15px;
    }


    .page-header h1 {
        font-size: 1.65rem;
    }


    .page-header-actions {
        flex-direction: column;

        align-items: stretch;
    }


    .page-actions {
        width: 100%;
    }

}


/* ==========================================================
   CELULARES PEQUENOS
   ========================================================== */

@media (max-width: 480px) {

    .sidebar {
        width:
            min(
                280px,
                calc(100vw - 28px)
            );
    }


    .topbar-title {
        font-size: 0.9rem;
    }


    .theme-option {
        min-width: auto;

        padding:
            7px 8px;

        font-size: 0.78rem;
    }


    .content {
        padding:
            16px 12px;
    }

}


/* ==========================================================
   ACESSIBILIDADE
   REDUÇÃO DE MOVIMENTO
   ========================================================== */

@media (prefers-reduced-motion: reduce) {

    .sidebar,
    .sidebar-overlay,
    .sidebar-toggle,
    .sidebar-toggle span,
    .sidebar-link,
    .brand-logo,
    .theme-option {
        transition: none !important;
    }

}

/* ==========================================================
   GARANTIA DE COMPORTAMENTO DA SIDEBAR
   DESKTOP + TABLET + MOBILE
   ========================================================== */

.sidebar {
    position: fixed !important;

    top: 0;
    left: 0;
    bottom: 0;

    z-index: 1200;

    transform: translateX(-105%);

    opacity: 0;

    visibility: hidden;
}


/* MENU ABERTO */

body.sidebar-open .sidebar {
    transform: translateX(0) !important;

    opacity: 1 !important;

    visibility: visible !important;

    display: block !important;
}


/* OVERLAY */

.sidebar-overlay {
    position: fixed;

    inset: 0;

    z-index: 1190;

    opacity: 0;

    visibility: hidden;

    pointer-events: none;
}


body.sidebar-open .sidebar-overlay {
    opacity: 1 !important;

    visibility: visible !important;

    pointer-events: auto !important;
}


/* ==========================================================
   TABLET
   ========================================================== */

@media (max-width: 900px) {

    .sidebar {
        position: fixed !important;

        top: 0;
        left: 0;
        bottom: 0;

        width: min(
            300px,
            calc(100vw - 40px)
        ) !important;

        height: 100dvh;

        transform: translateX(-105%);

        visibility: hidden;

        opacity: 0;
    }


    body.sidebar-open .sidebar {
        transform: translateX(0) !important;

        visibility: visible !important;

        opacity: 1 !important;

        display: block !important;
    }

}


/* ==========================================================
   MOBILE
   ========================================================== */

@media (max-width: 680px) {

    .sidebar {
        position: fixed !important;

        top: 0;
        left: 0;
        bottom: 0;

        width: min(
            290px,
            calc(100vw - 38px)
        ) !important;

        height: 100dvh;

        padding: 18px 14px;

        transform: translateX(-105%);

        visibility: hidden;

        opacity: 0;

        background:
            color-mix(
                in srgb,
                var(--primary-dark) 98%,
                transparent
            );

        backdrop-filter: none;
        -webkit-backdrop-filter: none;
    }


    body.sidebar-open .sidebar {
        transform: translateX(0) !important;

        visibility: visible !important;

        opacity: 1 !important;

        display: block !important;
    }


    .sidebar-overlay {
        backdrop-filter: none;
        -webkit-backdrop-filter: none;

        background:
            rgba(5, 12, 10, 0.42);
    }


    body.sidebar-open .sidebar-overlay {
        opacity: 1 !important;

        visibility: visible !important;

        pointer-events: auto !important;
    }

}