<?php
// ── Carrega config (necessário antes do <head> para aplicar tema) ────────────
$uriAtual     = parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH);
$configExiste = file_exists(dirname(__DIR__, 3) . '/config/database.php');
$nomeEmpresa  = '';
$segmentoAtual = '';
$cfg = [];
if ($configExiste) {
    $cfg           = require dirname(__DIR__, 3) . '/config/database.php';
    $nomeEmpresa   = $cfg['empresa']  ?? '';
    $segmentoAtual = $cfg['segmento'] ?? '';
}

// MULTI-LOJA com SEGMENTO POR LOJA: se a loja ativa tiver 'segmento' próprio,
// ele prevalece sobre o segmento global do database.php (sidebar/capacidades
// ficam coerentes com a loja em foco). Sem campo na loja, mantém o global.
// Depto de Engenharia e Automação - Master Automação - Autor: Derlivon Silva
try {
    $segmentoAtual = \App\Core\Lojas::resolverSegmento(is_array($cfg) ? $cfg : []);
} catch (\Throwable) {
    // mantém $segmentoAtual original em caso de erro
}

// MULTI-LOJA: nome exibido/impresso = LOJA ATIVA (não o do database.php, que é a principal).
// Sem isso, ao ver/imprimir Achadinhos 10/20 saía "Mega Importados 1,99".
try {
    if (\App\Core\Lojas::multi()) {
        if (\App\Core\Lojas::consolidado()) {
            $nomeEmpresa = 'Todas as lojas';
        } else {
            $idAtiva = \App\Core\Lojas::idAtiva();
            if ($idAtiva !== null) {
                $la = \App\Core\Lojas::get($idAtiva);
                if (!empty($la['nome'])) $nomeEmpresa = $la['nome'];
            }
        }
    }
} catch (\Throwable) {}

// ── Resolve tema ─────────────────────────────────────────────────────────────
// Variáveis da sidebar colorida:
//   sidebar-text / sidebar-muted / sidebar-icon-bg / sidebar-icon-fg / nav-active-text
$_temas = [
    // ════════════════════════════════════════
    // 🆕 v1.4.8 — TEMAS PREMIUM (6 novos)
    // Os 17 anteriores continuam (compatibilidade), mas o seletor mostra só estes.
    // Aliases definidos no final do arquivo mapeiam velhos -> novos.
    // ════════════════════════════════════════

    // Aurora — claro premium (default v1.4.8), accent índigo-violeta
    'aurora' => [
        'bg'=>'#FAFAFB','surface'=>'#FFFFFF','surface2'=>'#F4F4F7','border'=>'#E8E8EE',
        'text'=>'#18181B','muted'=>'#71717A',
        'topbar'=>'#FFFFFF','topbar-border'=>'#E8E8EE','topbar-text'=>'#18181B','topbar-muted'=>'#71717A',
        'sidebar'=>'#FFFFFF','sidebar-border'=>'#E8E8EE',
        'sidebar-text'=>'#3F3F46','sidebar-muted'=>'#71717A',
        'sidebar-icon-bg'=>'rgba(99,102,241,0.10)','sidebar-icon-fg'=>'#6366F1',
        'nav-hover'=>'#F4F4F7','nav-active'=>'rgba(99,102,241,0.10)','nav-active-text'=>'#4F46E5',
        'accent'=>'#6366F1','accent-dark'=>'#4F46E5',
    ],
    // Mastersoft Pro — refinamento do laranja MS atual
    'mastersoft-pro' => [
        'bg'=>'#FDFCFA','surface'=>'#FFFFFF','surface2'=>'#FAF6F1','border'=>'#EDE5D8',
        'text'=>'#1C1917','muted'=>'#78716C',
        'topbar'=>'#FFFFFF','topbar-border'=>'#EDE5D8','topbar-text'=>'#1C1917','topbar-muted'=>'#78716C',
        'sidebar'=>'#FFFFFF','sidebar-border'=>'#EDE5D8',
        'sidebar-text'=>'#44403C','sidebar-muted'=>'#78716C',
        'sidebar-icon-bg'=>'rgba(234,88,12,0.10)','sidebar-icon-fg'=>'#EA580C',
        'nav-hover'=>'#FAF6F1','nav-active'=>'rgba(234,88,12,0.10)','nav-active-text'=>'#C2410C',
        'accent'=>'#EA580C','accent-dark'=>'#C2410C',
    ],
    // Carbon — dark premium ciano elétrico
    'carbon' => [
        'bg'=>'#0A0A0B','surface'=>'#141416','surface2'=>'#1C1C1F','border'=>'#27272A',
        'text'=>'#E4E4E7','muted'=>'#A1A1AA',
        'topbar'=>'#0F0F11','topbar-border'=>'#27272A','topbar-text'=>'#FAFAFA','topbar-muted'=>'#71717A',
        'sidebar'=>'#0F0F11','sidebar-border'=>'#27272A',
        'sidebar-text'=>'#D4D4D8','sidebar-muted'=>'#71717A',
        'sidebar-icon-bg'=>'rgba(34,211,238,0.12)','sidebar-icon-fg'=>'#22D3EE',
        'nav-hover'=>'rgba(255,255,255,0.04)','nav-active'=>'rgba(34,211,238,0.12)','nav-active-text'=>'#22D3EE',
        'accent'=>'#22D3EE','accent-dark'=>'#06B6D4',
    ],
    // Onyx — preto luxury com accent dourado
    'onyx' => [
        'bg'=>'#000000','surface'=>'#0A0A0A','surface2'=>'#141414','border'=>'#1F1F1F',
        'text'=>'#E5E5E5','muted'=>'#A3A3A3',
        'topbar'=>'#0A0A0A','topbar-border'=>'#1F1F1F','topbar-text'=>'#FFFFFF','topbar-muted'=>'#737373',
        'sidebar'=>'#0A0A0A','sidebar-border'=>'#1F1F1F',
        'sidebar-text'=>'#D4D4D4','sidebar-muted'=>'#737373',
        'sidebar-icon-bg'=>'rgba(212,175,55,0.14)','sidebar-icon-fg'=>'#D4AF37',
        'nav-hover'=>'rgba(255,255,255,0.04)','nav-active'=>'rgba(212,175,55,0.14)','nav-active-text'=>'#D4AF37',
        'accent'=>'#D4AF37','accent-dark'=>'#B8941F',
    ],
    // Forest — light verde corporativo elegante
    'forest' => [
        'bg'=>'#FAFAF7','surface'=>'#FFFFFF','surface2'=>'#F1F4F0','border'=>'#E1E8DD',
        'text'=>'#1A1F1B','muted'=>'#6B7A6E',
        'topbar'=>'#FFFFFF','topbar-border'=>'#E1E8DD','topbar-text'=>'#1A1F1B','topbar-muted'=>'#6B7A6E',
        'sidebar'=>'#FFFFFF','sidebar-border'=>'#E1E8DD',
        'sidebar-text'=>'#3D4A3F','sidebar-muted'=>'#6B7A6E',
        'sidebar-icon-bg'=>'rgba(21,128,61,0.10)','sidebar-icon-fg'=>'#15803D',
        'nav-hover'=>'#F1F4F0','nav-active'=>'rgba(21,128,61,0.10)','nav-active-text'=>'#166534',
        'accent'=>'#15803D','accent-dark'=>'#166534',
    ],
    // Slate — corporativo neutro teal
    'slate' => [
        'bg'=>'#F8FAFC','surface'=>'#FFFFFF','surface2'=>'#F1F5F9','border'=>'#E2E8F0',
        'text'=>'#0F172A','muted'=>'#64748B',
        'topbar'=>'#FFFFFF','topbar-border'=>'#E2E8F0','topbar-text'=>'#0F172A','topbar-muted'=>'#64748B',
        'sidebar'=>'#FFFFFF','sidebar-border'=>'#E2E8F0',
        'sidebar-text'=>'#334155','sidebar-muted'=>'#64748B',
        'sidebar-icon-bg'=>'rgba(15,118,110,0.10)','sidebar-icon-fg'=>'#0F766E',
        'nav-hover'=>'#F1F5F9','nav-active'=>'rgba(15,118,110,0.10)','nav-active-text'=>'#0F766E',
        'accent'=>'#0F766E','accent-dark'=>'#0D5F58',
    ],

    // ════════════════════════════════════════
    // CLAROS — sidebar clara, topbar escuro (legados — preservados pra compat)
    // ════════════════════════════════════════

    // Claro (padrão)
    'claro' => [
        'bg'=>'#f1f5f9','surface'=>'#ffffff','surface2'=>'#f8fafc','border'=>'#e2e8f0',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#1e293b','topbar-border'=>'#334155','topbar-text'=>'#f1f5f9','topbar-muted'=>'#94a3b8',
        'sidebar'=>'#ffffff','sidebar-border'=>'#e2e8f0',
        'sidebar-text'=>'#475569','sidebar-muted'=>'#94a3b8',
        'sidebar-icon-bg'=>'rgba(79,142,247,0.14)','sidebar-icon-fg'=>'#4f8ef7',
        'nav-hover'=>'rgba(0,0,0,0.05)','nav-active'=>'rgba(79,142,247,0.09)','nav-active-text'=>'#4f8ef7',
        'accent'=>'#4f8ef7','accent-dark'=>'#3a6fd8',
    ],
    // ════════════════════════════════════════
    // MasterSoftware — espelhamento do dashboard MS (laranja + creme, sidebar branca clara)
    // ════════════════════════════════════════
    'mastersoft' => [
        'bg'=>'#fefaf3','surface'=>'#ffffff','surface2'=>'#fff7ec','border'=>'#f3e4cb',
        'text'=>'#1f2937','muted'=>'#6b7280',
        'topbar'=>'#ffffff','topbar-border'=>'#f3e4cb','topbar-text'=>'#1f2937','topbar-muted'=>'#6b7280',
        'sidebar'=>'#fffaf2','sidebar-border'=>'#f3e4cb',
        'sidebar-text'=>'#374151','sidebar-muted'=>'#9ca3af',
        'sidebar-icon-bg'=>'rgba(234,88,12,0.12)','sidebar-icon-fg'=>'#ea580c',
        'nav-hover'=>'rgba(234,88,12,0.06)','nav-active'=>'rgba(234,88,12,0.12)','nav-active-text'=>'#c2410c',
        'accent'=>'#ea580c','accent-dark'=>'#c2410c',
    ],
    // Grafite — sidebar cinza escuro, conteúdo claro neutro
    'grafite' => [
        'bg'=>'#f8fafc','surface'=>'#ffffff','surface2'=>'#f1f5f9','border'=>'#e2e8f0',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#111827','topbar-border'=>'#1f2937','topbar-text'=>'#f9fafb','topbar-muted'=>'#9ca3af',
        'sidebar'=>'#1f2937','sidebar-border'=>'#374151',
        'sidebar-text'=>'rgba(255,255,255,0.88)','sidebar-muted'=>'rgba(255,255,255,0.42)',
        'sidebar-icon-bg'=>'rgba(156,163,175,0.20)','sidebar-icon-fg'=>'#d1d5db',
        'nav-hover'=>'rgba(255,255,255,0.07)','nav-active'=>'rgba(255,255,255,0.12)','nav-active-text'=>'#e5e7eb',
        'accent'=>'#6b7280','accent-dark'=>'#4b5563',
    ],

    // ════════════════════════════════════════
    // ESCUROS — sidebar e conteúdo escuros
    // ════════════════════════════════════════

    // Noturno
    'escuro' => [
        'bg'=>'#0f172a','surface'=>'#1e293b','surface2'=>'#1a2236','border'=>'#334155',
        'text'=>'#e2e8f0','muted'=>'#94a3b8',
        'topbar'=>'#020617','topbar-border'=>'#1e293b','topbar-text'=>'#f1f5f9','topbar-muted'=>'#64748b',
        'sidebar'=>'#0f172a','sidebar-border'=>'#1e293b',
        'sidebar-text'=>'rgba(255,255,255,0.82)','sidebar-muted'=>'rgba(255,255,255,0.38)',
        'sidebar-icon-bg'=>'rgba(96,165,250,0.16)','sidebar-icon-fg'=>'#60a5fa',
        'nav-hover'=>'rgba(255,255,255,0.07)','nav-active'=>'rgba(96,165,250,0.14)','nav-active-text'=>'#60a5fa',
        'accent'=>'#60a5fa','accent-dark'=>'#3b82f6',
    ],
    // Meia-Noite — preto profundo, accent ciano
    'meia_noite' => [
        'bg'=>'#09090b','surface'=>'#18181b','surface2'=>'#121214','border'=>'#27272a',
        'text'=>'#fafafa','muted'=>'#a1a1aa',
        'topbar'=>'#000000','topbar-border'=>'#18181b','topbar-text'=>'#fafafa','topbar-muted'=>'#71717a',
        'sidebar'=>'#09090b','sidebar-border'=>'#27272a',
        'sidebar-text'=>'rgba(255,255,255,0.80)','sidebar-muted'=>'rgba(255,255,255,0.36)',
        'sidebar-icon-bg'=>'rgba(6,182,212,0.18)','sidebar-icon-fg'=>'#22d3ee',
        'nav-hover'=>'rgba(255,255,255,0.06)','nav-active'=>'rgba(6,182,212,0.16)','nav-active-text'=>'#22d3ee',
        'accent'=>'#22d3ee','accent-dark'=>'#06b6d4',
    ],
    // Escuro Roxo — dark purple slate
    'escuro_roxo' => [
        'bg'=>'#0f0a1e','surface'=>'#1a1030','surface2'=>'#150d26','border'=>'#2d1f4a',
        'text'=>'#ede9fe','muted'=>'#a78bfa',
        'topbar'=>'#07040f','topbar-border'=>'#1a1030','topbar-text'=>'#ede9fe','topbar-muted'=>'#7c3aed',
        'sidebar'=>'#120b22','sidebar-border'=>'#2d1f4a',
        'sidebar-text'=>'rgba(237,233,254,0.85)','sidebar-muted'=>'rgba(167,139,250,0.50)',
        'sidebar-icon-bg'=>'rgba(139,92,246,0.22)','sidebar-icon-fg'=>'#c4b5fd',
        'nav-hover'=>'rgba(139,92,246,0.10)','nav-active'=>'rgba(139,92,246,0.22)','nav-active-text'=>'#c4b5fd',
        'accent'=>'#a78bfa','accent-dark'=>'#7c3aed',
    ],

    // ════════════════════════════════════════
    // AZUIS
    // ════════════════════════════════════════

    // Azul Royal
    'oceano' => [
        'bg'=>'#f0f4ff','surface'=>'#ffffff','surface2'=>'#f5f8ff','border'=>'#c7d7f8',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#1e3a8a','topbar-border'=>'#1e40af','topbar-text'=>'#eff6ff','topbar-muted'=>'rgba(219,234,254,0.65)',
        'sidebar'=>'#1e40af','sidebar-border'=>'#2563eb',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#ffffff',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#ffffff',
        'accent'=>'#3b82f6','accent-dark'=>'#1d4ed8',
    ],
    // Marinho — azul escuro profundo
    'marinho' => [
        'bg'=>'#f0f5ff','surface'=>'#ffffff','surface2'=>'#e8eeff','border'=>'#bfcef8',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#0f2241','topbar-border'=>'#1e3a5f','topbar-text'=>'#e0eaff','topbar-muted'=>'rgba(192,213,255,0.60)',
        'sidebar'=>'#1e3a5f','sidebar-border'=>'#2a517f',
        'sidebar-text'=>'rgba(255,255,255,0.90)','sidebar-muted'=>'rgba(255,255,255,0.48)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.16)','sidebar-icon-fg'=>'#93c5fd',
        'nav-hover'=>'rgba(255,255,255,0.10)','nav-active'=>'rgba(255,255,255,0.18)','nav-active-text'=>'#bfdbfe',
        'accent'=>'#3b82f6','accent-dark'=>'#1d4ed8',
    ],
    // Céu — azul claro / sky
    'ceu' => [
        'bg'=>'#f0f9ff','surface'=>'#ffffff','surface2'=>'#e0f2fe','border'=>'#bae6fd',
        'text'=>'#0c1a2b','muted'=>'#0369a1',
        'topbar'=>'#075985','topbar-border'=>'#0369a1','topbar-text'=>'#e0f2fe','topbar-muted'=>'rgba(186,230,253,0.65)',
        'sidebar'=>'#0369a1','sidebar-border'=>'#0284c7',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#ffffff',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#ffffff',
        'accent'=>'#0ea5e9','accent-dark'=>'#0284c7',
    ],

    // ════════════════════════════════════════
    // VERDES
    // ════════════════════════════════════════

    // Verde Esmeralda
    'floresta' => [
        'bg'=>'#f0fdf4','surface'=>'#ffffff','surface2'=>'#f7fef9','border'=>'#bbf7d0',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#14532d','topbar-border'=>'#166534','topbar-text'=>'#f0fdf4','topbar-muted'=>'rgba(220,252,231,0.65)',
        'sidebar'=>'#166534','sidebar-border'=>'#15803d',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#ffffff',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#ffffff',
        'accent'=>'#22c55e','accent-dark'=>'#16a34a',
    ],
    // Teal — verde-água / petróleo
    'teal' => [
        'bg'=>'#f0fdfa','surface'=>'#ffffff','surface2'=>'#ccfbf1','border'=>'#99f6e4',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#134e4a','topbar-border'=>'#115e59','topbar-text'=>'#ccfbf1','topbar-muted'=>'rgba(153,246,228,0.60)',
        'sidebar'=>'#0f766e','sidebar-border'=>'#0d9488',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#ffffff',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#ffffff',
        'accent'=>'#14b8a6','accent-dark'=>'#0d9488',
    ],

    // ════════════════════════════════════════
    // ROXOS / ROSA
    // ════════════════════════════════════════

    // Roxo Imperial
    'ametista' => [
        'bg'=>'#faf5ff','surface'=>'#ffffff','surface2'=>'#f5f0ff','border'=>'#ddd6fe',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#4c1d95','topbar-border'=>'#5b21b6','topbar-text'=>'#faf5ff','topbar-muted'=>'rgba(245,243,255,0.65)',
        'sidebar'=>'#6d28d9','sidebar-border'=>'#7c3aed',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#ffffff',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#ffffff',
        'accent'=>'#8b5cf6','accent-dark'=>'#7c3aed',
    ],
    // Índigo
    'indigo' => [
        'bg'=>'#eef2ff','surface'=>'#ffffff','surface2'=>'#e0e7ff','border'=>'#c7d2fe',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#1e1b4b','topbar-border'=>'#312e81','topbar-text'=>'#e0e7ff','topbar-muted'=>'rgba(199,210,254,0.60)',
        'sidebar'=>'#3730a3','sidebar-border'=>'#4338ca',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#ffffff',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#ffffff',
        'accent'=>'#6366f1','accent-dark'=>'#4f46e5',
    ],
    // Rosa
    'rosa' => [
        'bg'=>'#fff1f2','surface'=>'#ffffff','surface2'=>'#ffe4e6','border'=>'#fecdd3',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#881337','topbar-border'=>'#9f1239','topbar-text'=>'#fff1f2','topbar-muted'=>'rgba(254,205,211,0.65)',
        'sidebar'=>'#be185d','sidebar-border'=>'#db2777',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#ffffff',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#ffffff',
        'accent'=>'#f43f5e','accent-dark'=>'#e11d48',
    ],

    // ════════════════════════════════════════
    // QUENTES
    // ════════════════════════════════════════

    // Laranja Âmbar
    'carvao' => [
        'bg'=>'#fff7ed','surface'=>'#ffffff','surface2'=>'#fffbf5','border'=>'#fed7aa',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#7c2d12','topbar-border'=>'#9a3412','topbar-text'=>'#fff7ed','topbar-muted'=>'rgba(255,247,237,0.65)',
        'sidebar'=>'#c2410c','sidebar-border'=>'#ea580c',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#ffffff',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#ffffff',
        'accent'=>'#f97316','accent-dark'=>'#ea580c',
    ],
    // Dourado — ocre / ouro
    'dourado' => [
        'bg'=>'#fffbeb','surface'=>'#ffffff','surface2'=>'#fef3c7','border'=>'#fde68a',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#451a03','topbar-border'=>'#78350f','topbar-text'=>'#fef3c7','topbar-muted'=>'rgba(253,230,138,0.60)',
        'sidebar'=>'#92400e','sidebar-border'=>'#b45309',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#fde68a',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#fde68a',
        'accent'=>'#d97706','accent-dark'=>'#b45309',
    ],
    // Carmim — vermelho escuro
    'carmim' => [
        'bg'=>'#fff5f5','surface'=>'#ffffff','surface2'=>'#fee2e2','border'=>'#fecaca',
        'text'=>'#1e293b','muted'=>'#64748b',
        'topbar'=>'#7f1d1d','topbar-border'=>'#991b1b','topbar-text'=>'#fff5f5','topbar-muted'=>'rgba(254,202,202,0.65)',
        'sidebar'=>'#991b1b','sidebar-border'=>'#b91c1c',
        'sidebar-text'=>'rgba(255,255,255,0.92)','sidebar-muted'=>'rgba(255,255,255,0.50)',
        'sidebar-icon-bg'=>'rgba(255,255,255,0.18)','sidebar-icon-fg'=>'#fca5a5',
        'nav-hover'=>'rgba(255,255,255,0.13)','nav-active'=>'rgba(255,255,255,0.20)','nav-active-text'=>'#fca5a5',
        'accent'=>'#ef4444','accent-dark'=>'#dc2626',
    ],
];
// v1.4.8: padrão "aurora" (light premium), mas TODOS os temas funcionam.
// REMOVIDO o redirecionamento agressivo de aliases — se o usuário escolheu
// 'carmim', ele VÊ carmim, não mastersoft-pro disfarçado.
// Os 6 novos premium ficam disponíveis além dos 17 antigos = 23 temas no total.
$_temaAtual = $cfg['tema'] ?? 'aurora';
if (!isset($_temas[$_temaAtual])) $_temaAtual = 'aurora';
$_t = $_temas[$_temaAtual];
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><?= \App\Core\View::e($titulo ?? 'Premium Express Gestão') ?></title>

    <!-- PWA manifest -->
    <link rel="manifest" href="/manifest.json">
    <meta name="mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <meta name="apple-mobile-web-app-title" content="Leitor Fire Sistemas">
    <meta name="theme-color" content="#1a2640">
    <link rel="apple-touch-icon" href="/icons/apple-touch-icon.png">
    <!-- v1.4.12: favicon Fire Sistemas (chama + F) na aba do navegador -->
    <link rel="icon" type="image/x-icon" href="/favicon.ico?v=<?= \App\Core\Versao::ATUAL ?>">
    <link rel="icon" type="image/png" sizes="32x32" href="/icons/favicon-32x32.png?v=<?= \App\Core\Versao::ATUAL ?>">
    <link rel="icon" type="image/png" sizes="16x16" href="/icons/favicon-16x16.png?v=<?= \App\Core\Versao::ATUAL ?>">

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
    <!-- v1.4.8: Inter + JetBrains Mono (Google Fonts) — tipografia premium do design system -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
    <link href="/assets/css/app.css?v=<?= \App\Core\Versao::ATUAL ?>" rel="stylesheet">
<?php
// v1.4.8 — paletas ECharts por tema (8 cores harmônicas pra séries).
// Pra temas não listados aqui, usa a paleta default do app.css :root.
$_palettes = [
    'aurora'         => '#6366F1,#10B981,#F59E0B,#EC4899,#06B6D4,#8B5CF6,#F97316,#14B8A6',
    'mastersoft-pro' => '#EA580C,#0284C7,#16A34A,#A855F7,#D97706,#0D9488,#DB2777,#475569',
    'carbon'         => '#22D3EE,#34D399,#FBBF24,#F472B6,#A78BFA,#FB923C,#60A5FA,#2DD4BF',
    'onyx'           => '#D4AF37,#E5C158,#A78BFA,#34D399,#F87171,#60A5FA,#FB923C,#2DD4BF',
    'forest'         => '#15803D,#0E7490,#CA8A04,#9333EA,#DC2626,#0891B2,#65A30D,#A16207',
    'slate'          => '#0F766E,#2563EB,#D97706,#7C3AED,#DC2626,#059669,#0891B2,#475569',
];
$_palette = $_palettes[$_temaAtual] ?? '#6366F1,#10B981,#F59E0B,#EC4899,#06B6D4,#8B5CF6,#F97316,#14B8A6';
$_paletteArr = explode(',', $_palette);
$_isDark = in_array($_temaAtual, ['carbon','onyx','escuro','meia_noite','escuro_roxo'], true);
?>
    <style>:root{
        --pbi-bg:<?= $_t['bg'] ?>;--pbi-surface:<?= $_t['surface'] ?>;--pbi-surface-2:<?= $_t['surface2'] ?>;--pbi-border:<?= $_t['border'] ?>;
        --pbi-text:<?= $_t['text'] ?>;--pbi-muted:<?= $_t['muted'] ?>;
        --pbi-topbar-bg:<?= $_t['topbar'] ?>;--pbi-topbar-border:<?= $_t['topbar-border'] ?>;--pbi-topbar-text:<?= $_t['topbar-text'] ?>;--pbi-topbar-muted:<?= $_t['topbar-muted'] ?>;
        --pbi-sidebar-bg:<?= $_t['sidebar'] ?>;--pbi-sidebar-border:<?= $_t['sidebar-border'] ?>;
        --pbi-sidebar-text:<?= $_t['sidebar-text'] ?>;--pbi-sidebar-muted:<?= $_t['sidebar-muted'] ?>;
        --pbi-sidebar-icon-bg:<?= $_t['sidebar-icon-bg'] ?>;--pbi-sidebar-icon-fg:<?= $_t['sidebar-icon-fg'] ?>;
        --pbi-nav-hover:<?= $_t['nav-hover'] ?>;--pbi-nav-active:<?= $_t['nav-active'] ?>;--pbi-nav-active-text:<?= $_t['nav-active-text'] ?>;
        --pbi-accent:<?= $_t['accent'] ?>;--pbi-accent-dark:<?= $_t['accent-dark'] ?>;
        /* v1.4.8: vars novas — derivam dos campos existentes pra compat */
        --pbi-text-strong:<?= $_t['text'] ?>;
        --pbi-border-subtle:<?= $_t['border'] ?>;
        --pbi-accent-hover:<?= $_t['accent-dark'] ?>;
        --pbi-accent-subtle: color-mix(in srgb, <?= $_t['accent'] ?> 12%, transparent);
        /* paleta ECharts por tema */
        --pbi-chart-1:<?= trim($_paletteArr[0]) ?>;--pbi-chart-2:<?= trim($_paletteArr[1]) ?>;--pbi-chart-3:<?= trim($_paletteArr[2]) ?>;--pbi-chart-4:<?= trim($_paletteArr[3]) ?>;
        --pbi-chart-5:<?= trim($_paletteArr[4]) ?>;--pbi-chart-6:<?= trim($_paletteArr[5]) ?>;--pbi-chart-7:<?= trim($_paletteArr[6]) ?>;--pbi-chart-8:<?= trim($_paletteArr[7]) ?>;
        --pbi-chart-palette:<?= $_palette ?>;
        <?php if ($_isDark): ?>
        /* Dark mode: sombras mais intensas pra ficarem visíveis sobre fundo escuro */
        --pbi-shadow-color-soft: rgba(0,0,0,0.20);
        --pbi-shadow-color:      rgba(0,0,0,0.40);
        --pbi-shadow-color-strong: rgba(0,0,0,0.60);
        <?php endif; ?>
    }</style>
<style>
@media print {
    /* Ocultar elementos de navegação */
    .pbi-sidebar, .pbi-topbar, .pbi-overlay,
    .pbi-filtro-barra, .pbi-export-wrap, .pbi-export-btn,
    .btn, .dropdown, .pbi-conn-badge, .pbi-alerta-card,
    #buscaUsuario, #buscaInfo, .pbi-nav, .pbi-voltar,
    [data-bs-toggle], .modal { display: none !important; }

    /* Conteúdo ocupa tela toda */
    .pbi-main { margin: 0 !important; padding: 0 !important; }
    .pbi-content { padding: 1rem !important; }
    body, .pbi-body { background: #fff !important; }

    /* Cards sem sombra, fundo branco */
    .pbi-card {
        border: 1px solid #ccc !important;
        box-shadow: none !important;
        background: #fff !important;
        break-inside: avoid;
        margin-bottom: 1rem !important;
    }
    .pbi-card-header { background: #f8f8f8 !important; color: #000 !important; }
    .pbi-kpi-card { border: 1px solid #ccc !important; background: #fff !important; }
    .pbi-kpi-label, .pbi-kpi-sub { color: #555 !important; }
    .pbi-kpi-valor { color: #000 !important; }

    /* Tabelas legíveis */
    table { border-collapse: collapse !important; width: 100% !important; }
    th, td { border: 1px solid #ccc !important; padding: .3rem .5rem !important;
             color: #000 !important; background: #fff !important; font-size: .8rem !important; }
    thead th { background: #f0f0f0 !important; }
    tr:nth-child(even) td { background: #fafafa !important; }

    /* Cabeçalho de impressão com nome da empresa */
    .pbi-page-header::before {
        content: "<?= addslashes($nomeEmpresa) ?> — Relatório gerado em <?= date('d/m/Y H:i') ?>";
        display: block;
        font-size: .75rem;
        color: #666;
        margin-bottom: .5rem;
        border-bottom: 1px solid #ccc;
        padding-bottom: .25rem;
    }

    /* Gráficos: tenta manter visíveis */
    canvas { max-width: 100% !important; }

    /* Página */
    @page { margin: 1.5cm; size: A4 landscape; }
}
</style>
</head>
<body class="pbi-body pbi-tema-<?= $_temaAtual ?>">

<?php

// ── Mapa de capacidades por segmento ────────────────────────────────────────
// true  = módulo/card visível para esse segmento
// false = módulo/card ocultado
$_capMap = [
    // Alimentação com mesas (garçons, mesas abertas, por garçom) — VR/Alelo/convênios comuns
    'restaurante'        => ['mesas'=>true,  'vendedor'=>false, 'comissoes'=>true,  'convenios'=>true],
    'bar'                => ['mesas'=>true,  'vendedor'=>false, 'comissoes'=>true,  'convenios'=>true],
    'lanchonete'         => ['mesas'=>true,  'vendedor'=>false, 'comissoes'=>true,  'convenios'=>true],
    'sushi'              => ['mesas'=>true,  'vendedor'=>false, 'comissoes'=>true,  'convenios'=>true],
    'pizzaria'           => ['mesas'=>true,  'vendedor'=>false, 'comissoes'=>true,  'convenios'=>true],
    'churrascaria'       => ['mesas'=>true,  'vendedor'=>false, 'comissoes'=>true,  'convenios'=>true],
    // Alimentação balcão (sem mesas, sem vendedor externo)
    'padaria'            => ['mesas'=>false, 'vendedor'=>false, 'comissoes'=>false, 'convenios'=>true],
    'sorveteria'         => ['mesas'=>false, 'vendedor'=>false, 'comissoes'=>false, 'convenios'=>true],
    'acougue'            => ['mesas'=>false, 'vendedor'=>false, 'comissoes'=>false, 'convenios'=>true],
    // Varejo (PDV, sem mesas, sem vendedor de campo) — Grancard, vale-compras
    'supermercado'       => ['mesas'=>false, 'vendedor'=>false, 'comissoes'=>false, 'convenios'=>true],
    'conveniencia'       => ['mesas'=>false, 'vendedor'=>false, 'comissoes'=>false, 'convenios'=>true],
    'loja_geral'         => ['mesas'=>false, 'vendedor'=>true,  'comissoes'=>true,  'convenios'=>true],
    'farmacia'           => ['mesas'=>false, 'vendedor'=>false, 'comissoes'=>false, 'convenios'=>true],
    'pet_shop'           => ['mesas'=>false, 'vendedor'=>true,  'comissoes'=>true,  'convenios'=>false],
    // Distribuição / Atacado (tem vendedores externos e comissões)
    'distribuidora'      => ['mesas'=>false, 'vendedor'=>true,  'comissoes'=>true,  'convenios'=>true],
    'atacado'            => ['mesas'=>false, 'vendedor'=>true,  'comissoes'=>true,  'convenios'=>true],
    // Construção / Utilidades
    'material_construcao'=> ['mesas'=>false, 'vendedor'=>true,  'comissoes'=>true,  'convenios'=>true],
    'utilidades'         => ['mesas'=>false, 'vendedor'=>true,  'comissoes'=>true,  'convenios'=>true],
    // Serviços / Tecnologia
    'oficina'            => ['mesas'=>false, 'vendedor'=>true,  'comissoes'=>true,  'convenios'=>false],
    'automacao_comercial'=> ['mesas'=>false, 'vendedor'=>true,  'comissoes'=>true,  'convenios'=>false],
    'clinica'            => ['mesas'=>false, 'vendedor'=>false, 'comissoes'=>false, 'convenios'=>false],
    'salao_beleza'       => ['mesas'=>false, 'vendedor'=>false, 'comissoes'=>false, 'convenios'=>false],
];
$_cap = $_capMap[$segmentoAtual] ?? ['mesas'=>false, 'vendedor'=>true, 'comissoes'=>true, 'convenios'=>true];

$temMesas    = $_cap['mesas'];
$temVendedor = $_cap['vendedor'];
$temComissoes= $_cap['comissoes'];
$temConvenios= $_cap['convenios'] ?? true;
$temCompras  = true;  // todos têm compras
$temClientes = true;  // todos têm clientes
unset($_capMap, $_cap);

function pbiNavLink(string $href, string $icone, string $label, string $uriAtual): string
{
    $ativo = ($uriAtual === $href || str_starts_with($uriAtual, $href . '/'))
             ? 'ativo' : '';
    return "<a href=\"{$href}\" class=\"pbi-nav-link {$ativo}\">"
         . "<i class=\"bi {$icone}\"></i><span>{$label}</span></a>";
}

function pbiNavGroup(string $prefixo, string $icone, string $label, string $uriAtual, array $itens): string
{
    $aberto = str_starts_with($uriAtual, $prefixo);
    // Abre o grupo quando o URI atual é exatamente um dos sub-itens (ex: /comparativo/anual dentro de Vendas)
    if (!$aberto) {
        foreach ($itens as $item) {
            if ($uriAtual === $item[0] || str_starts_with($uriAtual, rtrim($item[0], '/') . '/')) {
                $aberto = true;
                break;
            }
        }
    }
    $html  = "<div class=\"pbi-nav-group" . ($aberto ? ' aberto' : '') . "\">";
    $html .= "<button class=\"pbi-nav-group-btn\" type=\"button\">"
           . "<span class=\"d-flex align-items-center gap-2\"><i class=\"bi {$icone}\"></i>{$label}</span>"
           . "<i class=\"bi bi-chevron-down pbi-nav-chevron\"></i></button>";
    $html .= "<div class=\"pbi-nav-group-body\">";
    // 4o elemento opcional = id do badge (ex: 'nav-ruptura-badge') — preenchido por JS.
    // Depto de Engenharia e Automação - Master Automação - Autor: Derlivon Silva
    foreach ($itens as $item) {
        $href      = $item[0];
        $sub_icone = $item[1];
        $sub_label = $item[2];
        $badgeId   = $item[3] ?? '';
        $ativo = ($uriAtual === $href) ? 'ativo' : '';
        $badgeHtml = $badgeId !== ''
            ? "<span id=\"{$badgeId}\" style=\"display:none;margin-left:auto;background:#dc2626;color:#fff;font-size:.6rem;font-weight:700;border-radius:999px;padding:.1rem .45rem;min-width:18px;text-align:center\"></span>"
            : '';
        $html .= "<a href=\"{$href}\" class=\"pbi-nav-sublink {$ativo}\">"
               . "<i class=\"bi {$sub_icone}\"></i>{$sub_label}{$badgeHtml}</a>";
    }
    $html .= "</div></div>";
    return $html;
}
?>

<!-- ===== TOPBAR ===== -->
<nav class="pbi-topbar">
    <!-- Botão hamburguer (mobile) -->
    <button class="pbi-sidebar-toggle d-lg-none" id="btnSidebarToggle" aria-label="Menu">
        <i class="bi bi-list fs-4"></i>
    </button>

    <a class="pbi-topbar-brand" href="/">
        <i class="bi bi-bar-chart-line-fill text-accent"></i>
        <span>Premium Express <strong class="text-accent">BI</strong></span>
    </a>

    <?php if ($nomeEmpresa): ?>
    <span class="pbi-topbar-empresa d-none d-md-flex">
        <i class="bi bi-building me-1"></i>
        <?= \App\Core\View::e($nomeEmpresa) ?>
    </span>
    <?php endif; ?>

    <?php
    /* v1.4.13: Logo Fire Sistemas (parceiro) no topbar.
       Depto de Engenharia e Automacao - Master Automacao - Autor: Derlivon Silva
       Temas com topbar ESCURO -> logo branca; demais -> logo colorida. */
    $_topbarEscuro = in_array($_temaAtual, [
        'carbon','onyx','escuro','meia_noite','escuro_roxo','grafite',
        'oceano','marinho','ceu','claro','floresta','teal','ametista',
        'indigo','rosa','carvao','dourado','carmim'
    ], true);
    $_fireLogoFile = $_topbarEscuro ? 'fire-sistemas-logo-branco.png' : 'fire-sistemas-logo.png';
    ?>
    <a class="pbi-topbar-fire d-none d-md-flex" href="https://firesistemas.com.br" target="_blank" rel="noopener" title="Fire Sistemas">
        <img src="/assets/img/<?= $_fireLogoFile ?>?v=<?= \App\Core\View::e(\App\Core\Versao::ATUAL) ?>"
             alt="Fire Sistemas"
             class="pbi-topbar-fire-img">
    </a>

    <!-- Seletor de período global (persistente via session) -->
    <?php
    $spAno  = (int)($_SESSION['filtro_ano'] ?? date('Y'));
    $spMes  = (int)($_SESSION['filtro_mes'] ?? date('m'));
    $spAnos = range((int)date('Y') + 1, 2017);
    $spMesesNomes = ['','Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'];
    $spUri  = parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH);
    ?>
    <?php
    if (\App\Core\Lojas::multi()):
        $lojaAtivaId = \App\Core\Lojas::idAtiva();
        $lojaConsol  = \App\Core\Lojas::consolidado();
        $lojasVis    = \App\Core\FbAuth::lojasVisiveis();   // só as lojas permitidas ao usuário
        $podeTodas   = \App\Core\FbAuth::podeConsolidado();
        // só exibe o seletor se houver o que escolher (2+ lojas ou pode "Todas")
        if (count($lojasVis) > 1 || $podeTodas):
    ?>
    <form method="post" action="/set-loja" class="pbi-periodo-form d-flex" id="formLojaGlobal" style="margin-right:.4rem">
        <input type="hidden" name="redirect" value="<?= htmlspecialchars($spUri) ?>">
        <i class="bi bi-shop pbi-periodo-icon"></i>
        <select name="loja" class="pbi-periodo-select" onchange="document.getElementById('formLojaGlobal').submit()" title="Loja">
            <?php if ($podeTodas): ?><option value="__todas__" <?= $lojaConsol ? 'selected' : '' ?>>🏬 Todas as lojas</option><?php endif; ?>
            <?php foreach ($lojasVis as $lid => $l):
                // Status do servidor da loja (cache 30s). Em loja local, sempre online.
                $_online = \App\Core\Lojas::estaOnline((string)$lid);
                $_nome   = $l['nome'] ?? (string)$lid;
                $_label  = $_online ? $_nome : ('🔴 ' . $_nome . ' (offline)');
            ?>
            <option value="<?= htmlspecialchars((string)$lid) ?>" <?= (!$lojaConsol && $lojaAtivaId === (string)$lid) ? 'selected' : '' ?> <?= $_online ? '' : 'style="color:#b91c1c"' ?> title="<?= $_online ? 'Servidor online' : 'Servidor desligado — religue o servidor da loja' ?>"><?= htmlspecialchars($_label) ?></option>
            <?php endforeach; ?>
        </select>
    </form>
    <?php endif; endif; ?>
    <form method="post" action="/set-periodo" class="pbi-periodo-form d-none d-md-flex" id="formPeriodoGlobal">
        <input type="hidden" name="redirect" value="<?= htmlspecialchars($spUri) ?>">
        <i class="bi bi-calendar3 pbi-periodo-icon"></i>
        <select name="ano" class="pbi-periodo-select" onchange="document.getElementById('formPeriodoGlobal').submit()">
            <?php foreach($spAnos as $a): ?>
            <option value="<?= $a ?>" <?= $spAno==$a?'selected':'' ?>><?= $a ?></option>
            <?php endforeach; ?>
        </select>
        <select name="mes" class="pbi-periodo-select" onchange="document.getElementById('formPeriodoGlobal').submit()">
            <option value="0" <?= $spMes===0?'selected':'' ?>>Todos</option>
            <?php for($i=1;$i<=12;$i++): ?>
            <option value="<?= $i ?>" <?= $spMes===$i?'selected':'' ?>><?= $spMesesNomes[$i] ?></option>
            <?php endfor; ?>
        </select>
    </form>

    <span class="pbi-topbar-version">v<?= \App\Core\View::e(\App\Core\Versao::ATUAL) ?></span>

    <!-- Badge "Ao vivo" (Firebird OK) -->
    <span class="pbi-live-badge d-none d-md-inline-flex ms-2" id="pbiLiveBadge" title="Conexão Firebird ativa">Ao vivo</span>

    <?php if (\App\Core\FbAuth::estaLogado()):
        $_uNome = \App\Core\FbAuth::nome();
        $_uIni  = mb_strtoupper(mb_substr(trim($_uNome) !== '' ? $_uNome : '?', 0, 1, 'UTF-8'), 'UTF-8');
        $_uRole = \App\Core\FbAuth::isAdmin() ? 'Admin' : 'Usuário';
    ?>
    <div class="d-flex align-items-center gap-2 ms-2">
        <div class="pbi-topbar-avatar" title="<?= htmlspecialchars($_uNome) ?>">
            <div class="pbi-topbar-avatar-circle"><?= htmlspecialchars($_uIni) ?></div>
            <div class="pbi-topbar-avatar-info d-none d-md-block">
                <div class="pbi-topbar-avatar-name"><?= htmlspecialchars($_uNome) ?></div>
                <div class="pbi-topbar-avatar-role"><?= htmlspecialchars($_uRole) ?></div>
            </div>
        </div>
        <a href="/logout" class="btn btn-sm btn-outline-secondary pbi-btn-logout" title="Sair">
            <i class="bi bi-box-arrow-right"></i>
        </a>
    </div>
    <?php endif; ?>
</nav>

<?php
// Banner de aviso quando alguma loja visível está OFFLINE (servidor desligado/sem VPN).
// Status vem do cache de 30s do FirebirdService::pingHost — não atrasa o page load.
if (\App\Core\Lojas::multi()) {
    $_lojasOffline = [];
    foreach (\App\Core\FbAuth::lojasVisiveis() as $lid => $l) {
        if (!\App\Core\Lojas::estaOnline((string)$lid)) {
            $_lojasOffline[] = $l['nome'] ?? (string)$lid;
        }
    }
    if (!empty($_lojasOffline)):
?>
<div class="pbi-banner-offline" role="alert" style="background:#fef3c7;border-bottom:2px solid #f59e0b;color:#78350f;padding:.6rem 1rem;font-size:.95rem;display:flex;align-items:center;gap:.6rem;">
    <span style="font-size:1.2rem;">🔴</span>
    <strong>Servidor offline:</strong>
    <span><?= htmlspecialchars(implode(', ', $_lojasOffline)) ?></span>
    <span style="color:#92400e;">— religue o servidor da loja ou verifique a VPN.</span>
</div>
<?php
    endif;
}
?>

<!-- ===== WRAPPER ===== -->
<div class="pbi-wrapper">

    <!-- ===== SIDEBAR ===== -->
    <aside class="pbi-sidebar" id="pbiSidebar">

        <?php /* Logo MS — só no tema mastersoft (v1.4.6+) */ if ($_temaAtual === 'mastersoft'): ?>
        <div class="pbi-ms-logo">
            <div class="pbi-ms-logo-circulo">PB</div>
            <div class="pbi-ms-logo-titulo">
                <div class="pbi-ms-logo-marca">Premium BI</div>
                <div class="pbi-ms-logo-sub">Painel</div>
            </div>
        </div>
        <?php endif; ?>

        <?php if ($nomeEmpresa): ?>
        <div class="pbi-sidebar-empresa">
            <div class="pbi-sidebar-empresa-icon">
                <i class="bi bi-building-fill"></i>
            </div>
            <div class="pbi-sidebar-empresa-nome"><?= \App\Core\View::e($nomeEmpresa) ?></div>
            <?php if ($segmentoAtual): ?>
            <div class="pbi-sidebar-empresa-seg"><?= \App\Core\View::e(ucfirst(str_replace('_',' ',$segmentoAtual))) ?></div>
            <?php endif; ?>
        </div>
        <?php endif; ?>

        <?php if (\App\Core\FbAuth::estaLogado()):
            $uNome = \App\Core\FbAuth::nome();
            $uCod  = \App\Core\FbAuth::usuario();
            $uRole = \App\Core\FbAuth::isAdmin() ? 'Supervisor' : 'Usuário';
        ?>
        <div class="pbi-sidebar-user" style="display:flex;align-items:center;gap:.6rem;padding:.65rem .9rem;border-bottom:1px solid var(--pbi-sidebar-border)">
            <div style="width:34px;height:34px;border-radius:50%;background:var(--pbi-sidebar-icon-bg);color:var(--pbi-sidebar-icon-fg);display:flex;align-items:center;justify-content:center;flex-shrink:0">
                <i class="bi bi-person-fill"></i>
            </div>
            <div style="min-width:0;flex:1">
                <div style="font-weight:700;font-size:.82rem;line-height:1.15;color:var(--pbi-sidebar-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis" title="<?= \App\Core\View::e($uNome) ?>"><?= \App\Core\View::e($uNome) ?></div>
                <div style="font-size:.68rem;color:var(--pbi-sidebar-muted)"><i class="bi bi-person-badge me-1"></i><?= \App\Core\View::e($uRole) ?> · <?= \App\Core\View::e($uCod) ?></div>
            </div>
        </div>
        <?php endif; ?>

        <nav class="pbi-nav">
            <div class="pbi-nav-section">Visão Geral</div>
            <?php if (\App\Core\FbAuth::pode('dashboard')): ?>
            <?= pbiNavLink('/dashboard', 'bi-speedometer2', 'Painel', $uriAtual) ?>
            <?php endif; ?>
            <?php if (\App\Core\FbAuth::pode('executivo')): ?>
            <?= pbiNavLink('/executivo', 'bi-speedometer', 'Painel Executivo', $uriAtual) ?>
            <?php endif; ?>
            <?php if (\App\Core\FbAuth::pode('alertas')): ?>
            <a href="/alertas" class="pbi-nav-link <?= str_starts_with($uriAtual, '/alertas') ? 'ativo' : '' ?>">
                <i class="bi bi-bell-fill pbi-nav-icon"></i>
                <span class="pbi-nav-label">Alertas</span>
                <span id="nav-alerta-badge" style="display:none;margin-left:auto;background:#ef4444;color:#fff;font-size:.6rem;font-weight:700;border-radius:999px;padding:.1rem .45rem;min-width:18px;text-align:center"></span>
            </a>
            <?php endif; ?>
            <?= pbiNavLink('/manual', 'bi-book-half', 'Manual / Tutorial', $uriAtual) ?>

            <div class="pbi-nav-section">Operação</div>
            <?php if (\App\Core\FbAuth::pode('vendas')): ?>
            <?= pbiNavGroup('/vendas', 'bi-cart-fill', 'Vendas', $uriAtual, [
                ['/vendas/gestao',       'bi-graph-up',          'Gestão de Vendas'],
                ['/vendas/diarias',      'bi-calendar-day',      'Vendas Diárias'],
                ['/vendas/mensais',      'bi-calendar-month',    'Vendas Mensais'],
                ['/vendas/por-vendedor', 'bi-person-badge',      'Vendas por Vendedor'],
                ['/vendas/por-grupo',    'bi-collection',        'Vendas por Grupo'],
                ['/vendas/por-marca',    'bi-tags',              'Vendas por Marca'],
                ['/vendas/notas-saida',  'bi-file-earmark-text', 'Notas de Saída'],
                ['/vendas/pre-notas',    'bi-file-earmark-plus', 'Pré-Notas'],
                ['/comparativo/anual',   'bi-arrow-left-right',  'Comparativo Anual'],
                ['/devolucoes',          'bi-arrow-return-left', 'Devoluções'],
                ['/previsao',            'bi-graph-up',          'Previsão de Vendas'],
            ]) ?>
            <?php endif; ?>
            <?php if (\App\Core\FbAuth::pode('estoque')): ?>
            <?= pbiNavGroup('/estoque', 'bi-box-seam-fill', 'Estoque', $uriAtual, [
                ['/estoque/posicao',     'bi-boxes',            'Posição Atual'],
                ['/estoque/minimos',     'bi-exclamation-triangle','Abaixo do Mínimo'],
                ['/estoque/giro',        'bi-arrow-repeat',     'Giro de Estoque'],
                ['/estoque/margem',      'bi-percent',          'Custo × Margem'],
                ['/estoque/inventario',  'bi-clipboard-check',  'Inventário'],
            ]) ?>
            <?php endif; ?>
            <?php if (\App\Core\FbAuth::pode('caixa')): ?>
            <?= pbiNavGroup('/caixa', 'bi-cash-stack', 'Fechamento de Caixa', $uriAtual, [
                ['/caixa/fechamento', 'bi-receipt-cutoff', 'Conferência de Caixa'],
            ]) ?>
            <?php endif; ?>
            <?php if (\App\Core\FbAuth::pode('compras')): ?>
            <?= pbiNavGroup('/compras', 'bi-truck', 'Compras', $uriAtual, [
                ['/compras/dashboard',       'bi-speedometer2',           'Painel'],
                ['/compras/sugestao',        'bi-cart-plus',              'Sugestão de Compra', 'nav-ruptura-badge'],
                ['/compras/ruptura',         'bi-exclamation-triangle-fill','Rastreador de Ruptura'],
                ['/cadastro/top-criticos',   'bi-stars',                  'Top 100 Críticos'],
                ['/compras/margem',          'bi-graph-up-arrow',         'Margem por Item'],
                ['/compras/custo-medio',     'bi-rulers',                 'Custo Médio de Compra'],
                ['/compras/custo-medio-venda','bi-rulers',                'Custo Médio por Venda'],
                ['/compras/notas-entrada',   'bi-file-earmark-arrow-down','Notas de Entrada'],
                ['/compras/por-fornecedor',  'bi-building',               'Por Fornecedor'],
                ['/compras/compras-vendas',  'bi-bar-chart-steps',        'Compras x Vendas'],
            ]) ?>
            <?php endif; ?>
            <?php if ($temMesas && \App\Core\FbAuth::pode('mesas')): ?>
            <?= pbiNavGroup('/mesas', 'bi-grid-3x3-gap-fill', 'Mesas', $uriAtual, [
                ['/mesas/monitor',     'bi-display',          'Monitor em Tempo Real'],
                ['/mesas/historico',   'bi-clock-history',    'Histórico de Mesas'],
                ['/mesas/por-garcom',  'bi-person-workspace', 'Por Garçom'],
                ['/mesas/comandas-por-garcom', 'bi-receipt',  'Comandas por Garçom'],
                ['/mesas/excecoes-caixa',      'bi-shield-exclamation', 'Exceções no Caixa'],
                ['/mesas/cortesias',           'bi-gift',     'Cortesias'],
                ['/mesas/comparativo-hora',    'bi-clock-history', 'Comparativo por Hora'],
                ['/mesas/faixas-horario',      'bi-moon-stars', 'Faixas de Horário'],
                ['/mesas/tempo-medio', 'bi-stopwatch',        'Tempo Médio'],
            ]) ?>
            <?php endif; ?>

            <?php /* Cozinha (KDS) — aparece pra clientes com mesas e permissão.
                     Permissão controlada no Gerenciador de Usuários. v1.4.30+
                     Depto de Engenharia e Automação - Master Automação - Autor: Derlivon Silva */ ?>
            <?php if ($temMesas && \App\Core\FbAuth::pode('cozinha')): ?>
            <?= pbiNavGroup('/cozinha', 'bi-fire', 'Cozinha', $uriAtual, [
                ['/cozinha/menu',      'bi-house-fill',  'Início'],
                ['/cozinha',           'bi-display',     'Painel da Cozinha'],
                ['/cozinha/avisos',    'bi-bell',        'Avisos pro Garçom'],
                ['/cozinha/relatorio', 'bi-stopwatch',   'Tempo de Preparo'],
                ['/cozinha/links',     'bi-qr-code',     'Links e QR Code'],
                ['/cozinha/config',    'bi-sliders',     'Configurar'],
            ]) ?>
            <?php endif; ?>

            <div class="pbi-nav-section">Comercial</div>
            <?php if (\App\Core\FbAuth::pode('clientes')): ?>
            <?= pbiNavGroup('/clientes', 'bi-people-fill', 'Clientes', $uriAtual, [
                ['/clientes/cadastro',    'bi-person-lines-fill','Cadastro'],
                ['/clientes/frequencia',  'bi-arrow-repeat',     'Frequência'],
                ['/clientes/inadimplentes','bi-exclamation-circle','Inadimplentes'],
                ['/clientes/inativos',    'bi-person-x',         'Inativos'],
                ['/clientes/ticket-medio','bi-receipt',          'Ticket por Cliente'],
            ]) ?>
            <?php endif; ?>
            <?php if ($temConvenios && \App\Core\FbAuth::pode('clientes')): ?>
            <?= pbiNavGroup('/convenios', 'bi-credit-card-2-front', 'Convênios', $uriAtual, [
                ['/convenios/painel',          'bi-speedometer2',           'Painel'],
                ['/convenios/aging',           'bi-hourglass-split',        'Aging (atrasos)'],
                ['/convenios/top-conveniados', 'bi-people-fill',            'Top Conveniados'],
            ]) ?>
            <?php endif; ?>
            <?php if (\App\Core\FbAuth::pode('pessoal')): ?>
            <?php
            $itensPessoal = [['/pessoal/funcionarios', 'bi-people', 'Funcionários']];
            if ($temMesas)     $itensPessoal[] = ['/pessoal/por-garcom',  'bi-person-workspace', 'Por Garçom'];
            if ($temVendedor)  $itensPessoal[] = ['/pessoal/performance', 'bi-trophy',           'Desempenho'];
            if ($temComissoes) $itensPessoal[] = ['/pessoal/comissoes', 'bi-cash-coin', $temMesas ? 'Comissões (Garçons)' : 'Comissões'];
            ?>
            <?= pbiNavGroup('/pessoal', 'bi-person-badge-fill', 'Pessoal', $uriAtual, $itensPessoal) ?>
            <?php endif; ?>
            <?php if (\App\Core\FbAuth::pode('produtos')): ?>
            <?= pbiNavGroup('/produtos', 'bi-tag-fill', 'Produtos', $uriAtual, [
                ['/produtos/catalogo',         'bi-grid-3x3',              'Catálogo'],
                ['/produtos/mais-vendidos',    'bi-cash-coin',             'Mais Vendidos (R$)'],
                ['/produtos/top-quantidade',   'bi-stack',                 'Top por Quantidade'],
                ['/produtos/margem-negativa',  'bi-exclamation-triangle',  'Margem Negativa'],
                ['/produtos/curva-abc',        'bi-bar-chart',             'Curva ABC'],
                ['/produtos/sem-movimento',    'bi-pause-circle',          'Sem Movimento'],
                ['/produtos/precos',           'bi-tag',                   'Histórico de Preços'],
                ['/produtos/saude',            'bi-heart-pulse',           'Saúde do Cadastro'],
            ]) ?>
            <?php endif; ?>

            <div class="pbi-nav-section">Financeiro</div>
            <?php if (\App\Core\FbAuth::pode('financeiro')): ?>
            <?= pbiNavGroup('/financeiro', 'bi-bank2', 'Financeiro', $uriAtual, [
                ['/financeiro/fluxo-caixa',   'bi-graph-up-arrow',       'Fluxo de Caixa'],
                ['/financeiro/contas-receber', 'bi-arrow-down-circle',    'Contas a Receber'],
                ['/financeiro/contas-pagar',   'bi-arrow-up-circle',      'Contas a Pagar'],
                ['/financeiro/dre',            'bi-file-earmark-bar-graph','DRE'],
                ['/financeiro/despesas',       'bi-wallet2',              'Despesas Operacionais'],
                ['/financeiro/mix-pagamento',  'bi-credit-card-2-front',  'Mix de Pagamento'],
            ]) ?>
            <?php endif; ?>

            <div class="pbi-nav-section">Análise</div>
            <?= pbiNavGroup('/auditoria', 'bi-shield-check', 'Auditoria', $uriAtual, [
                ['/auditoria',                            'bi-list-task',         'Visão geral'],
                ['/auditoria/desconto-operadora',         'bi-percent',           'Desconto por Operadora'],
                ['/auditoria/cancelamentos-operadora',    'bi-x-octagon',         'Cancelamentos por Operadora'],
                ['/auditoria/liberacoes-caixa',           'bi-key',               'Liberações de Caixa'],
            ]) ?>

            <?= pbiNavGroup('/metas', 'bi-bullseye', 'Metas', $uriAtual, [
                ['/metas',            'bi-calendar-check', 'Metas Mensais'],
                ['/metas/vendedores', 'bi-person-check',   'Metas por Vendedor'],
            ]) ?>

            <?php if (\App\Core\FbAuth::pode('relatorios')): ?>
            <?php
            $itensRel = [
                ['/relatorios/vendas',        'bi-cart',                   'Vendas'],
                ['/relatorios/compras',       'bi-truck',                  'Compras'],
                ['/relatorios/dre',           'bi-file-earmark-bar-graph', 'DRE'],
                ['/relatorios/curva-abc',     'bi-bar-chart-steps',        'Curva ABC'],
                ['/relatorios/clientes',      'bi-people',                 'Clientes'],
                ['/relatorios/estoque',       'bi-boxes',                  'Estoque'],
                ['/relatorios/inadimplencia', 'bi-exclamation-circle',     'Inadimplência'],
                ['/relatorios/margem',        'bi-bar-chart-steps',        'Margem por Produto'],
            ];
            if ($temMesas)     $itensRel[] = ['/relatorios/garcons',   'bi-person-workspace', 'Garçons'];
            if ($temComissoes) $itensRel[] = ['/relatorios/comissoes', 'bi-percent',           'Comissões'];
            ?>
            <?= pbiNavGroup('/relatorios', 'bi-file-earmark-text-fill', 'Relatórios', $uriAtual, $itensRel) ?>
            <?php endif; ?>

            <div class="pbi-nav-section">Sistema</div>
            <?php $ativo = ($uriAtual === '/personalizar') ? 'ativo' : ''; ?>
            <a href="/personalizar" class="pbi-nav-link <?= $ativo ?>">
                <i class="bi bi-palette-fill"></i><span>Personalizar Tema</span>
            </a>
            <?php
            $adminLogado = \App\Core\Auth::estaLogado();
            $temSenha    = \App\Core\Auth::temSenhaCadastrada();
            $lock        = ($temSenha && !$adminLogado);
            // Prefixo de ícone de cadeado para itens restritos
            $lockHtml    = $lock ? ' <i class="bi bi-lock-fill" style="font-size:.68rem;opacity:.45;margin-left:auto"></i>' : '';

            // Configuração como grupo expansível contendo Início + SQL Console
            $cfgPrefixo = '/configurar';
            $cfgAberto  = str_starts_with($uriAtual, $cfgPrefixo)
                       || $uriAtual === '/'
                       || str_starts_with($uriAtual, '/sql-console')
                       || str_starts_with($uriAtual, '/tabelas')
                       || str_starts_with($uriAtual, '/admin');
            // Disponibiliza para views filhas via global
            $GLOBALS['temMesas']    = $temMesas;
            $GLOBALS['temVendedor'] = $temVendedor;

            $html  = "<div class=\"pbi-nav-group" . ($cfgAberto ? ' aberto' : '') . "\">";
            $html .= "<button class=\"pbi-nav-group-btn\" type=\"button\">"
                   . "<span class=\"d-flex align-items-center gap-2\"><i class=\"bi bi-gear-fill\"></i>Configuração</span>"
                   . ($lock ? '<i class="bi bi-lock-fill" style="font-size:.68rem;opacity:.45"></i>' : '')
                   . "<i class=\"bi bi-chevron-down pbi-nav-chevron\"></i></button>";
            $html .= "<div class=\"pbi-nav-group-body\">";

            // Início
            $ativo = ($uriAtual === '/') ? 'ativo' : '';
            $html .= "<a href=\"/\" class=\"pbi-nav-sublink {$ativo}\"><i class=\"bi bi-house-fill\"></i>Início</a>";

            // Cards de Configuração — SÓ aparecem para admin autenticado (estritamente restrito).
            if (!$lock) {
            // Configuração (página)
            $ativo = ($uriAtual === '/configurar') ? 'ativo' : '';
            $html .= "<a href=\"/configurar\" class=\"pbi-nav-sublink {$ativo}\">"
                   . "<i class=\"bi bi-sliders\"></i>Configurar Sistema{$lockHtml}</a>";

            // Lojas (multi-loja)
            $ativo = str_starts_with($uriAtual, '/configurar/lojas') ? 'ativo' : '';
            $html .= "<a href=\"/configurar/lojas\" class=\"pbi-nav-sublink {$ativo}\">"
                   . "<i class=\"bi bi-shop\"></i>Lojas{$lockHtml}</a>";

            // Operacoes de Venda (tipos_venda_extras — configuracao pos-instalacao)
            $ativo = str_starts_with($uriAtual, '/configuracao/tipos-venda') ? 'ativo' : '';
            $html .= "<a href=\"/configuracao/tipos-venda\" class=\"pbi-nav-sublink {$ativo}\">"
                   . "<i class=\"bi bi-tags\"></i>Operacoes de Venda{$lockHtml}</a>";

            // SQL Console
            $ativo = str_starts_with($uriAtual, '/sql-console') ? 'ativo' : '';
            $html .= "<a href=\"/sql-console\" class=\"pbi-nav-sublink {$ativo}\">"
                   . "<i class=\"bi bi-terminal-fill\"></i>SQL Console{$lockHtml}</a>";

            // Explorador de Tabelas
            $ativo = str_starts_with($uriAtual, '/tabelas') ? 'ativo' : '';
            $html .= "<a href=\"/tabelas\" class=\"pbi-nav-sublink {$ativo}\">"
                   . "<i class=\"bi bi-table\"></i>Explorador de Tabelas{$lockHtml}</a>";

            // Leitor — Permissões
            $ativo = str_starts_with($uriAtual, '/leitor-admin/permissoes') ? 'ativo' : '';
            $html .= "<a href=\"/leitor-admin/permissoes\" class=\"pbi-nav-sublink {$ativo}\">"
                   . "<i class=\"bi bi-shield-lock-fill\"></i>Permissões do App{$lockHtml}</a>";

            // Leitor — Configurações
            $ativo = str_starts_with($uriAtual, '/leitor/config') ? 'ativo' : '';
            $html .= "<a href=\"/leitor/config\" class=\"pbi-nav-sublink {$ativo}\">"
                   . "<i class=\"bi bi-phone-fill\"></i>Config do App{$lockHtml}</a>";

            // Atualização do Sistema
            $ativo = str_starts_with($uriAtual, '/configurar/atualizacao') ? 'ativo' : '';
            $html .= "<a href=\"/configurar/atualizacao\" class=\"pbi-nav-sublink {$ativo}\">"
                   . "<i class=\"bi bi-arrow-repeat\"></i>Atualização do Sistema{$lockHtml}</a>";

            // Gerenciar Usuarios (somente SYSDBA)
            if (\App\Core\FbAuth::isAdmin()) {
                $ativo = str_starts_with($uriAtual, '/configurar/usuarios') ? 'ativo' : '';
                $html .= "<a href=\"/configurar/usuarios\" class=\"pbi-nav-sublink {$ativo}\">"
                       . "<i class=\"bi bi-people-fill\"></i>Gerenciar Usuarios</a>";
            }

            // Alterar senha (somente se logado)
            if ($adminLogado) {
                $ativo = ($uriAtual === '/admin/senha') ? 'ativo' : '';
                $html .= "<a href=\"/admin/senha\" class=\"pbi-nav-sublink {$ativo}\">"
                       . "<i class=\"bi bi-key-fill\"></i>Alterar Senha</a>";
            }
            } // fim if (!$lock) — cards de Configuração restritos a admin autenticado

            // Login / Logout
            if ($adminLogado) {
                $html .= "<a href=\"/admin/logout\" class=\"pbi-nav-sublink\" style=\"color:#f87171\">"
                       . "<i class=\"bi bi-box-arrow-right\"></i>Sair (Admin)</a>";
            } elseif ($temSenha) {
                $html .= "<a href=\"/admin/login\" class=\"pbi-nav-sublink\">"
                       . "<i class=\"bi bi-shield-lock\"></i>Entrar como Admin</a>";
            }

            $html .= "</div></div>";
            echo $html;
            ?>
        </nav>

        <div class="pbi-sidebar-footer">
            <i class="bi bi-shield-check me-1 text-accent"></i>
            Premium Express Gestão
        </div>
    </aside>

    <!-- Overlay mobile (fecha sidebar ao clicar fora) -->
    <div class="pbi-sidebar-overlay" id="pbiOverlay"></div>

    <!-- ===== CONTEÚDO ===== -->
    <main class="pbi-content">
        <?php
        // ── Botão Voltar GLOBAL (aparece em todas as telas, sem mexer nas views) ──
        // Subpágina (/modulo/sub) -> volta pra home do módulo (/modulo).
        // Home do módulo (/modulo)  -> volta pro início (/).
        $segsV = array_values(array_filter(explode('/', (string)($uriAtual ?? '/')), fn($s) => $s !== ''));
        $voltarHref = null;
        if (count($segsV) >= 2)      { $voltarHref = '/' . $segsV[0]; }
        elseif (count($segsV) === 1) { $voltarHref = '/'; }
        // Não mostra nas telas-raiz (já são o ponto de partida)
        if (in_array($uriAtual, ['/', '/dashboard', '/home', '/login'], true)) $voltarHref = null;
        if ($voltarHref):
        ?>
        <a href="<?= \App\Core\View::e($voltarHref) ?>" class="pbi-voltar"
           style="display:inline-flex;align-items:center;gap:.35rem;margin-bottom:.9rem;font-size:.85rem;
                  color:var(--pbi-text,#334155);text-decoration:none;border:1px solid var(--pbi-border,#e2e8f0);
                  border-radius:8px;padding:.4rem .85rem;background:var(--pbi-surface,#fff);font-weight:600;line-height:1">
            <i class="bi bi-arrow-left"></i> Voltar
        </a>
        <?php endif; ?>
        <?= $content ?>
    </main>

</div><!-- /pbi-wrapper -->

<!-- ===== RODAPÉ ===== -->
<footer class="pbi-footer">
    &copy; <?= \App\Core\View::e($ano ?? date('Y')) ?> Premium Express Gestão
</footer>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="/assets/js/app.js?v=<?= \App\Core\Versao::ATUAL ?>"></script>
<script src="/assets/js/pbi-async.js?v=<?= \App\Core\Versao::ATUAL ?>"></script>
<script src="/assets/js/pbi-export.js?v=<?= \App\Core\Versao::ATUAL ?>"></script>
<script>
(function(){
    if(!document.getElementById('nav-alerta-badge')) return;
    fetch('/api/alertas/count')
        .then(function(r){return r.json();})
        .then(function(d){
            var badge = document.getElementById('nav-alerta-badge');
            if(!badge) return;
            var total = (d.critico||0) + (d.atencao||0);
            if(total > 0){
                badge.textContent = total;
                badge.style.display = 'inline-block';
                badge.style.background = (d.critico||0) > 0 ? '#ef4444' : '#f59e0b';
            }
        })
        .catch(function(){});
})();
</script>
<script>
// Badge de RUPTURA na entrada Sugestão de Compra — mostra qtos itens
// estão abaixo do mínimo / em ruptura efetiva, pra o gestor entrar
// na tela e dar o pedido sem precisar abrir a tela toda hora.
// Endpoint cacheado 5min no repo — sem custo perceptível na sidebar.
// Depto de Engenharia e Automação - Master Automação - Autor: Derlivon Silva
(function(){
    var badge = document.getElementById('nav-ruptura-badge');
    if(!badge) return;
    fetch('/api/compras/sugestao/ruptura-count', { credentials: 'same-origin' })
        .then(function(r){ return r.json(); })
        .then(function(d){
            var n = parseInt((d && d.ruptura) || 0);
            if(n > 0){
                badge.textContent = n > 999 ? '999+' : n;
                badge.style.display = 'inline-block';
                badge.title = n + ' item(ns) abaixo do mínimo';
            }
        })
        .catch(function(){});
})();
</script>
<script>
(function(){
    var btn     = document.getElementById('btnSidebarToggle');
    var side    = document.getElementById('pbiSidebar');
    var overlay = document.getElementById('pbiOverlay');

    function abrirSidebar() {
        side.classList.add('aberta');
        overlay.classList.add('ativo');
        document.body.style.overflow = 'hidden';
    }
    function fecharSidebar() {
        side.classList.remove('aberta');
        overlay.classList.remove('ativo');
        document.body.style.overflow = '';
    }

    if (btn && side) {
        btn.addEventListener('click', function(){
            side.classList.contains('aberta') ? fecharSidebar() : abrirSidebar();
        });
    }

    // Fecha ao clicar no overlay
    if (overlay) {
        overlay.addEventListener('click', fecharSidebar);
    }

    // Fecha ao clicar em link da sidebar (mobile)
    if (side) {
        side.querySelectorAll('a').forEach(function(a){
            a.addEventListener('click', function(){
                if (window.innerWidth <= 991) fecharSidebar();
            });
        });
    }

    // Fecha ao redimensionar para desktop
    window.addEventListener('resize', function(){
        if (window.innerWidth > 991) fecharSidebar();
    });

    // ── Mantém a posição de rolagem do menu entre páginas ──────────────
    // O menu é longo; ao navegar a página recarrega e o menu voltava ao topo,
    // forçando o usuário a procurar de novo onde estava. Salvamos o scroll e
    // restauramos no carregamento.
    if (side) {
        var KEY = 'pbiSidebarScroll';
        // Restaura o quanto antes (script roda no fim do body, a sidebar já existe).
        try {
            var pos = parseInt(sessionStorage.getItem(KEY) || '0', 10);
            if (pos > 0) side.scrollTop = pos;
        } catch (e) {}
        // Salva continuamente enquanto rola (throttle simples).
        var tmr = null;
        side.addEventListener('scroll', function(){
            if (tmr) return;
            tmr = setTimeout(function(){
                tmr = null;
                try { sessionStorage.setItem(KEY, String(side.scrollTop)); } catch (e) {}
            }, 120);
        });
        // Garante salvar na hora de sair da página (clique em link/navegação).
        window.addEventListener('beforeunload', function(){
            try { sessionStorage.setItem(KEY, String(side.scrollTop)); } catch (e) {}
        });
    }
})();
</script>

<!-- v1.4.8: Helper global ECharts (tema dinâmico) — disponível em window.pbiChartTheme(), pbiChartPalette() -->
<script src="/assets/js/pbi-charts.js?v=<?= \App\Core\Versao::ATUAL ?>"></script>

</body>
</html>
