// Interactive Demo — Desktop (Chrome window) ↔ Mobile (iPhone) toggle. // No side context panel — the device IS the show. const IDEMO_NAV = [ { id: "dashboard", label: "Dashboard", Icon: IconDashboard }, { id: "clientes", label: "Clientes", Icon: IconUsers }, { id: "folha", label: "Folha de ponto", Icon: IconClock }, { id: "obras", label: "Obras", Icon: IconBuilding, sub: "Condomínio das Acácias" }, { id: "servicos", label: "Serviços", Icon: IconClipboard }, { id: "equipe", label: "Equipe", Icon: IconTeam }, { id: "financeiro", label: "Financeiro", Icon: IconWallet }, { id: "relatorios", label: "Relatórios", Icon: IconReport }, { id: "config", label: "Configurações", Icon: IconGear }]; const PAGE_URLS = { dashboard: "app.bingest.com.br/dashboard", clientes: "app.bingest.com.br/clientes", folha: "app.bingest.com.br/folha-de-ponto", obras: "app.bingest.com.br/obras", servicos: "app.bingest.com.br/servicos", equipe: "app.bingest.com.br/equipe", financeiro: "app.bingest.com.br/financeiro", relatorios: "app.bingest.com.br/relatorios", config: "app.bingest.com.br/configuracoes" }; function InteractiveDemo() { const [device, setDevice] = React.useState("desktop"); // desktop | mobile const [page, setPage] = React.useState("dashboard"); const [mobileScreen, setMobileScreen] = React.useState("inicio"); const [toast, setToast] = React.useState(null); const [hintActive, setHintActive] = React.useState(true); const fireToast = React.useCallback((msg) => { setToast({ msg, t: Date.now() }); setTimeout(() => setToast(null), 3000); }, []); const goTo = (id) => { setPage(id); setHintActive(false); }; return (
{/* Soft ambient backdrop */}
); } // ----- Device icons ------------------------------------------------------- function DeviceIcon({ kind, active }) { const c = active ? "currentColor" : "currentColor"; if (kind === "desktop") { return ( ); } return ( ); } // ============================================================================ // Desktop stage — Browser window with full BinGest UI inside // ============================================================================ function DesktopStage({ page, goTo, onAction, hintActive, toast }) { return (
Pimba Construções
BG teste@bingest.com
{page === "dashboard" && } {page === "clientes" && } {page === "folha" && } {page === "obras" && } {page === "servicos" && } {page === "equipe" && } {page === "financeiro" && } {page === "relatorios" && } {page === "config" && }
{hintActive &&
Clique nos menus →
} {toast &&
{toast.msg}
}
{/* Desktop-mode decorative badges */} } delay={0} /> } delay={1.4} />
); } function PageStub({ title, body }) { return (

{title}

{body}
); } // ============================================================================ // Mobile stage — iPhone centered, with decorative context around // ============================================================================ const MOBILE_SCREEN_LABELS = { inicio: "Resumo da empresa, DRE e atividade ao vivo", obras: "Acompanhe cada obra com margem e progresso", ponto: "Mestre registra presença em segundos", fin: "Recebimentos, despesas e equipe num só lugar" }; function MobileStage({ screen, setScreen }) { return (
{/* Left context */}
{/* Phone */}
{/* Pulse label below pointing at bottom nav */}
Toque nas abas para navegar
{/* Right context — current screen explainer */}
Você está em

{{ inicio: "Início", obras: "Obras", ponto: "Folha de ponto", fin: "Financeiro" }[screen]}

{MOBILE_SCREEN_LABELS[screen]}

Tente isto:
{{ inicio: "Repare nos KPIs ticando — eles atualizam em tempo real conforme novos lançamentos.", obras: "Cada obra mostra progresso, margem e receita. No app real, clique para ver detalhes da unidade.", ponto: "O check-in funciona offline no canteiro. Sincroniza assim que pegar sinal.", fin: "Recebido/Saídas/A receber numa olhada só. Toque em qualquer atalho para o detalhe." }[screen]}
); } function SideBlurb({ align = "left", label, title, body }) { return (
{label}

{title}

{body}

); } // ----- Decorative floats around the desktop browser ----------------------- function DeskFloat({ top, bottom, left, right, text, sub, color, icon, delay = 0 }) { return (
{icon}
{text}
{sub}
); } window.InteractiveDemo = InteractiveDemo;