Spaces:
Running
criar uma análise financeira completa de fluxo de caixa a partir dos dados colados do relatório. Considerar Novembro como mês de fechamento e destacar os pontos principais como Receitas totais, Despesas totais, resultado operacional, lucro líquido, margem de contribuição, etc. Detalhar a composição das despesas e receitas (incluir a divisão das receitas, Receitas de Trafego, de Web, de Serviços, etc) e informar o PLR. Inclui também uma análise com principais pontos de atenção e diretrizes. Incluir uma projeção do fluxo da caixa. Seguem dados: FLUXO DE CAIXA Realizado (R$) Realizado (R$) Realizado (R$) Realizado (R$) Realizado (R$) Realizado (R$) Realizado (R$) Realizado (R$) Realizado (R$) Realizado (R$) Realizado (R$) Previsto (R$) Realizado (R$)
Browse filesCATEGORIAS jan/25 fev/25 mar/25 abr/25 mai/25 jun/25 jul/25 ago/25 set/25 out/25 nov/25 dez/25 dez/25
Saldo do Mês Anterior R$ 57.765 R$ 52.114 R$ 50.371 R$ 46.703 R$ 42.816 R$ 42.529 R$ 44.457 R$ 36.478 R$ 25.195 R$ 27.204 R$ 27.102 R$ 17.611 R$ 27.611
Total de Recebimentos R$ 32.757 R$ 36.279 R$ 37.684 R$ 34.902 R$ 34.148 R$ 42.104 R$ 33.888 R$ 44.910 R$ 46.361 R$ 49.334 R$ 51.009 R$ 47.416 R$ 4.656
3.01 Receitas de Vendas e de Serviços R$ 30.291 R$ 35.806 R$ 37.240 R$ 34.097 R$ 33.737 R$ 42.104 R$ 33.888 R$ 43.745 R$ 44.574 R$ 49.071 R$ 49.841 R$ 47.416 R$ 4.656
HOSPEDAGEM R$ - R$ 250 R$ 250 R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ 222 R$ - R$ -
Receita de Tráfego R$ 22.815 R$ 23.843 R$ 25.170 R$ 19.145 R$ 23.370 R$ 32.961 R$ 27.074 R$ 34.795 R$ 30.949 R$ 39.539 R$ 37.828 R$ 38.857 R$ 4.656
Receitas de Serviços R$ - R$ 497 R$ 497 R$ - R$ 1.216 R$ 547 R$ 829 R$ 714 R$ 5.490 R$ 1.547 R$ 2.627 R$ 2.394 R$ -
Receitas de Web Design R$ 7.476 R$ 11.217 R$ 11.324 R$ 14.952 R$ 9.151 R$ 8.596 R$ 5.985 R$ 8.236 R$ 8.135 R$ 7.985 R$ 9.165 R$ 6.165 R$ -
3.02 Receitas Financeiras R$ 2.466 R$ 473 R$ - R$ 805 R$ 412 R$ - R$ - R$ - R$ 1.787 R$ 263 R$ - R$ - R$ -
Rendimentos de Aplicações R$ 2.466 R$ 473 R$ - R$ 805 R$ 412 R$ - R$ - R$ - R$ 1.787 R$ 263 R$ - R$ - R$ -
3.03 Outras Receitas e Entradas R$ - R$ - R$ 444 R$ - R$ - R$ - R$ - R$ 1.166 R$ - R$ - R$ 1.168 R$ - R$ -
Reembolso R$ - R$ - R$ 444 R$ - R$ - R$ - R$ - R$ 1.166 R$ - R$ 1.168 R$ - R$ -
Total de Pagamentos -R$ 38.408 -R$ 38.022 -R$ 41.353 -R$ 38.789 -R$ 38.435 -R$ 46.177 -R$ 43.866 -R$ 44.193 -R$ 50.352 -R$ 51.320 -R$ 52.617 -R$ 50.153 -R$ 6.278
4.01 Impostos sobre Vendas e sobre Serviços -R$ 2.754 -R$ 2.177 -R$ 3.447 -R$ 2.763 -R$ 2.227 -R$ 3.029 -R$ 3.047 -R$ 3.290 -R$ 3.981 -R$ 4.146 -R$ 4.813 -R$ 4.282 R$ -
Simples Nacional - DAS -R$ 2.754 -R$ 2.177 -R$ 3.447 -R$ 2.763 -R$ 2.227 -R$ 3.029 -R$ 3.047 -R$ 3.290 -R$ 3.981 -R$ 4.146 -R$ 4.813 -R$ 4.282 R$ -
4.02 Despesas com Vendas e Serviços -R$ 2.690 -R$ 6.214 -R$ 6.514 -R$ 6.253 -R$ 7.581 -R$ 10.308 -R$ 7.792 -R$ 8.205 -R$ 9.666 -R$ 9.813 -R$ 6.577 -R$ 6.657 -R$ 397
CRM R$ - R$ - R$ - R$ - -R$ 171 -R$ 815 R$ - -R$ 331 -R$ 1.649 -R$ 540 R$ - -R$ 260 -R$ 260
Comissões de Vendedores R$ - R$ - R$ - R$ - R$ - R$ - R$ - -R$ 459 R$ - -R$ 759 -R$ 449 R$ - R$ -
Desenvolvimento Web R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - -R$ 525 -R$ 1.075 R$ - R$ - R$ -
Despesas com reembolso R$ - R$ - R$ - R$ - R$ - -R$ 1.131 R$ - R$ - R$ - R$ - R$ - R$ - R$ -
Manutenção -R$ 417 -R$ 582 -R$ 582 -R$ 582 -R$ 669 -R$ 769 -R$ 769 -R$ 841 -R$ 901 -R$ 2.331 -R$ 1.015 -R$ 1.146 R$ -
Materiais Aplicados na Prestação de Serviços R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - -R$ 938 -R$ 889 -R$ 533 -R$ 670 -R$ 137
Remuneração de prestadores de serviço -R$ 2.274 -R$ 5.631 -R$ 5.932 -R$ 5.670 -R$ 4.760 -R$ 4.624 -R$ 4.053 -R$ 2.353 -R$ 1.253 R$ - R$ - R$ - R$ -
Social mídia R$ - R$ - R$ - R$ - -R$ 1.980 -R$ 2.970 -R$ 2.970 -R$ 4.220 -R$ 4.400 -R$ 4.220 -R$ 4.580 -R$ 4.580 R$ -
Total de custos variáveis -R$ 5.444 -R$ 8.391 -R$ 9.961 -R$ 9.016 -R$ 9.808 -R$ 13.338 -R$ 10.839 -R$ 11.495 -R$ 13.648 -R$ 13.959 -R$ 11.391 -R$ 10.939 -R$ 397
Margem de Contribuição R$ 24.847 R$ 27.416 R$ 27.279 R$ 25.081 R$ 23.929 R$ 28.766 R$ 23.048 R$ 32.250 R$ 30.927 R$ 35.112 R$ 38.451 R$ 36.478 R$ 4.259
4.03 Despesas com Salários e Encargos -R$ 7.811 -R$ 2.305 -R$ 7.513 -R$ 6.909 -R$ 5.909 -R$ 6.909 -R$ 7.465 -R$ 7.669 -R$ 10.146 -R$ 9.690 -R$ 11.294 -R$ 11.486 -R$ 1.450
Pró-labore -R$ 5.006 R$ - -R$ 5.208 -R$ 2.604 -R$ 2.604 -R$ 2.604 -R$ 2.604 -R$ 2.604 -R$ 3.036 -R$ 3.036 -R$ 3.036 -R$ 3.036 R$ -
Remuneração de Autônomos -R$ 2.805 -R$ 2.305 -R$ 2.305 -R$ 4.305 -R$ 3.305 -R$ 4.305 -R$ 4.861 -R$ 5.065 -R$ 7.110 -R$ 6.654 -R$ 8.258 -R$ 8.450 -R$ 1.450
4.04 Despesas com Colaboradores -R$ 575 -R$ 197 -R$ 197 -R$ 197 -R$ 197 -R$ 494 -R$ 197 -R$ 100 -R$ 1.100 -R$ 100 -R$ 100 -R$ 578 -R$ 578
Cursos e Treinamentos -R$ 575 -R$ 197 -R$ 197 -R$ 197 -R$ 197 -R$ 494 -R$ 197 -R$ 100 -R$ 1.100 -R$ 100 -R$ 100 -R$ 578 -R$ 578
4.05 Despesas Administrativas -R$ 1.777 -R$ 3.991 -R$ 3.777 -R$ 2.195 -R$ 2.310 -R$ 3.551 -R$ 2.403 -R$ 2.220 -R$ 2.656 -R$ 2.548 -R$ 5.827 -R$ 2.785 -R$ 2.451
Honorários Advocatícios R$ - -R$ 567 -R$ 283 R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ -
Honorários Contábeis -R$ 350 -R$ 380 -R$ 380 -R$ 380 -R$ 380 -R$ 380 -R$ 380 -R$ 380 -R$ 380 -R$ 380 -R$ 380 -R$ 600 -R$ 600
Materiais de Escritório -R$ 485 -R$ 291 -R$ 291 -R$ 460 -R$ 390 -R$ 390 -R$ 390 -R$ 390 -R$ 390 -R$ 425 -R$ 468 -R$ 680 -R$ 680
Retenção - GPS 2631 - INSS -R$ 311 -R$ 334 -R$ 334 -R$ 334 -R$ 334 -R$ 334 -R$ 334 -R$ 334 -R$ 334 -R$ 334 -R$ 334 -R$ 334 R$ -
Sistemas -R$ 631 -R$ 2.419 -R$ 2.414 -R$ 903 -R$ 1.206 -R$ 2.447 -R$ 1.004 -R$ 1.005 -R$ 1.441 -R$ 1.409 -R$ 4.499 -R$ 1.025 -R$ 1.025
outras despesas R$ - R$ - -R$ 74 -R$ 119 R$ - R$ - R$ - -R$ 111 -R$ 111 R$ - -R$ 146 -R$ 146 -R$ 146
taxa de licença R$ - R$ - R$ - R$ - R$ - R$ - -R$ 296 R$ - R$ - R$ - R$ - R$ - R$ -
4.06 Despesas Comerciais -R$ 191 -R$ 470 -R$ 402 -R$ 966 -R$ 709 -R$ 331 -R$ 1.462 -R$ 1.210 -R$ 1.685 -R$ 1.818 -R$ 893 -R$ 1.310 -R$ 1.310
Brindes para Clientes R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - -R$ 300 R$ - R$ - R$ -
Marketing e Publicidade -R$ 191 -R$ 470 -R$ 402 -R$ 966 -R$ 709 -R$ 331 -R$ 1.041 -R$ 1.210 -R$ 1.685 -R$ 1.518 -R$ 893 -R$ 1.310 -R$ 1.310
Viagens e Representações R$ - R$ - R$ - R$ - R$ - R$ - -R$ 421 R$ - R$ - R$ - R$ - R$ - R$ -
4.07 Despesas com Imóvel -R$ 205 -R$ 100 -R$ 100 -R$ 100 -R$ 100 -R$ 100 -R$ 100 -R$ 100 -R$ 89 -R$ 164 -R$ 89 -R$ 89 -R$ 89
Aluguel -R$ 205 -R$ 100 -R$ 100 -R$ 100 -R$ 100 -R$ 100 -R$ 100 -R$ 100 -R$ 89 -R$ 164 -R$ 89 -R$ 89 -R$ 89
Custos fixos -R$ 10.559 -R$ 7.062 -R$ 11.989 -R$ 10.367 -R$ 9.224 -R$ 11.385 -R$ 11.627 -R$ 11.298 -R$ 15.675 -R$ 14.320 -R$ 18.201 -R$ 16.247 -R$ 5.877
Lucro Operacional R$ 14.289 R$ 20.353 R$ 15.290 R$ 14.714 R$ 14.704 R$ 17.381 R$ 11.422 R$ 20.951 R$ 15.252 R$ 20.792 R$ 20.249 R$ 20.231 -R$ 1.618
4.09 Despesas com Diretoria -R$ 19.396 -R$ 19.396 -R$ 19.396 -R$ 19.396 -R$ 19.396 -R$ 21.396 -R$ 21.396 -R$ 21.396 -R$ 20.964 -R$ 22.964 -R$ 22.964 -R$ 22.964 R$ -
PLR - Participação nos Lucros e Resultados -R$ 19.396 -R$ 19.396 -R$ 19.396 -R$ 19.396 -R$ 19.396 -R$ 21.396 -R$ 21.396 -R$ 21.396 -R$ 20.964 -R$ 22.964 -R$ 22.964 -R$ 22.964 R$ -
4.10 Despesas Financeiras -R$ 9 -R$ 12 -R$ 6 -R$ 9 -R$ 6 -R$ 58 -R$ 4 -R$ 4 -R$ 14 -R$ 27 -R$ 61 -R$ 4 -R$ 4
Tarifas Bancárias R$ - -R$ 12 -R$ 6 -R$ 9 -R$ 6 -R$ 58 -R$ 4 -R$ 4 -R$ 14 -R$ 27 -R$ 61 -R$ 4 -R$ 4
Tarifas de Cartões de Crédito -R$ 9 R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ -
4.11 Outras Despesas R$ - -R$ 161 R$ - R$ - R$ - R$ - R$ - R$ - -R$ 52 -R$ 50 R$ - R$ - R$ -
Despesas a identificar R$ - -R$ 161 R$ - R$ - R$ - R$ - R$ - R$ - -R$ 52 -R$ 50 R$ - R$ - R$ -
5.01 Bens Imobilizados da Empresa -R$ 3.000 -R$ 3.000 R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ -
Investimento em cursos ou consultoria -R$ 3.000 -R$ 3.000 R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ - R$ -
Geração de Caixa do Período -R$ 5.651 -R$ 1.743 -R$ 3.668 -R$ 3.887 -R$ 4.286 -R$ 4.073 -R$ 9.978 R$ 717 -R$ 3.991 -R$ 1.985 -R$ 1.608 -R$ 2.737 -R$ 1.622
Saldo Final de Caixa R$ 52.114 R$ 50.371 R$ 46.703 R$ 42.816 R$ 42.529 R$ 44.457 R$ 36.478 R$ 25.195 R$ 27.204 R$ 27.102 R$ 27.611 R$ 14.874 R$ 25.989
- README.md +7 -4
- components/footer.js +114 -0
- components/navbar.js +106 -0
- index.html +195 -19
- script.js +339 -0
- style.css +80 -19
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
|
| 4 |
-
colorFrom: green
|
| 5 |
colorTo: blue
|
|
|
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: FluxoCash Pro 📊
|
| 3 |
+
colorFrom: yellow
|
|
|
|
| 4 |
colorTo: blue
|
| 5 |
+
emoji: 🐳
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite-v3
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Welcome to your new DeepSite project!
|
| 13 |
+
This project was created with [DeepSite](https://huggingface.co/deepsite).
|
|
@@ -0,0 +1,114 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomFooter extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
margin-top: 3rem;
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
footer {
|
| 12 |
+
background-color: #1f2937;
|
| 13 |
+
color: #d1d5db;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
.footer-container {
|
| 17 |
+
max-width: 7xl;
|
| 18 |
+
margin: 0 auto;
|
| 19 |
+
padding: 2rem 1rem;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
.footer-content {
|
| 23 |
+
display: grid;
|
| 24 |
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
| 25 |
+
gap: 2rem;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
.footer-section h3 {
|
| 29 |
+
color: white;
|
| 30 |
+
font-weight: 600;
|
| 31 |
+
margin-bottom: 1rem;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
.footer-link {
|
| 35 |
+
color: #d1d5db;
|
| 36 |
+
text-decoration: none;
|
| 37 |
+
display: block;
|
| 38 |
+
margin-bottom: 0.5rem;
|
| 39 |
+
transition: color 0.3s ease;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
.footer-link:hover {
|
| 43 |
+
color: white;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
.footer-bottom {
|
| 47 |
+
border-top: 1px solid #374151;
|
| 48 |
+
margin-top: 2rem;
|
| 49 |
+
padding-top: 2rem;
|
| 50 |
+
text-align: center;
|
| 51 |
+
color: #9ca3af;
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
.social-links {
|
| 55 |
+
display: flex;
|
| 56 |
+
justify-content: center;
|
| 57 |
+
space-x: 4;
|
| 58 |
+
margin-top: 1rem;
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
.social-link {
|
| 62 |
+
color: #d1d5db;
|
| 63 |
+
transition: color 0.3s ease;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
.social-link:hover {
|
| 67 |
+
color: white;
|
| 68 |
+
}
|
| 69 |
+
</style>
|
| 70 |
+
|
| 71 |
+
<footer>
|
| 72 |
+
<div class="footer-container">
|
| 73 |
+
<div class="footer-content">
|
| 74 |
+
<div class="footer-section">
|
| 75 |
+
<h3>FluxoCash Pro</h3>
|
| 76 |
+
<p>Sua solução completa para análise financeira e gestão de fluxo de caixa.</p>
|
| 77 |
+
</div>
|
| 78 |
+
|
| 79 |
+
<div class="footer-section">
|
| 80 |
+
<h3>Links Úteis</h3>
|
| 81 |
+
<a href="#" class="footer-link">Documentação</a>
|
| 82 |
+
<a href="#" class="footer-link">API</a>
|
| 83 |
+
<a href="#" class="footer-link">Blog</a>
|
| 84 |
+
<a href="#" class="footer-link">Suporte</a>
|
| 85 |
+
</div>
|
| 86 |
+
|
| 87 |
+
<div class="footer-section">
|
| 88 |
+
<h3>Contato</h3>
|
| 89 |
+
<p>Email: contato@fluxocash.pro</p>
|
| 90 |
+
<p>Telefone: (11) 1234-5678</p>
|
| 91 |
+
</div>
|
| 92 |
+
</div>
|
| 93 |
+
|
| 94 |
+
<div class="footer-bottom">
|
| 95 |
+
<p>© 2025 FluxoCash Pro. Todos os direitos reservados.</p>
|
| 96 |
+
<div class="social-links">
|
| 97 |
+
<a href="#" class="social-link">
|
| 98 |
+
<i data-feather="twitter"></i>
|
| 99 |
+
</a>
|
| 100 |
+
<a href="#" class="social-link">
|
| 101 |
+
<i data-feather="linkedin"></i>
|
| 102 |
+
</a>
|
| 103 |
+
<a href="#" class="social-link">
|
| 104 |
+
<i data-feather="github"></i>
|
| 105 |
+
</a>
|
| 106 |
+
</div>
|
| 107 |
+
</div>
|
| 108 |
+
</div>
|
| 109 |
+
</footer>
|
| 110 |
+
`;
|
| 111 |
+
}
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
customElements.define('custom-footer', CustomFooter);
|
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomNavbar extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
nav {
|
| 11 |
+
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
| 12 |
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
.nav-container {
|
| 16 |
+
max-width: 7xl;
|
| 17 |
+
margin: 0 auto;
|
| 18 |
+
padding: 0 1rem;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
.nav-wrapper {
|
| 22 |
+
display: flex;
|
| 23 |
+
justify-content: space-between;
|
| 24 |
+
align-items: center;
|
| 25 |
+
height: 4rem;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
.nav-brand {
|
| 29 |
+
display: flex;
|
| 30 |
+
align-items: center;
|
| 31 |
+
space-x: 2;
|
| 32 |
+
text-decoration: none;
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
.brand-icon {
|
| 36 |
+
width: 2rem;
|
| 37 |
+
height: 2rem;
|
| 38 |
+
color: white;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
.brand-text {
|
| 42 |
+
font-size: 1.25rem;
|
| 43 |
+
font-weight: bold;
|
| 44 |
+
color: white;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
.nav-links {
|
| 48 |
+
display: flex;
|
| 49 |
+
space-x: 6;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
.nav-link {
|
| 53 |
+
color: rgba(255, 255, 255, 0.9);
|
| 54 |
+
text-decoration: none;
|
| 55 |
+
transition: color 0.3s ease;
|
| 56 |
+
display: flex;
|
| 57 |
+
align-items: center;
|
| 58 |
+
space-x: 1;
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
.nav-link:hover {
|
| 62 |
+
color: white;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
.nav-icon {
|
| 66 |
+
width: 1.25rem;
|
| 67 |
+
height: 1.25rem;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
@media (max-width: 640px) {
|
| 71 |
+
.nav-links {
|
| 72 |
+
display: none;
|
| 73 |
+
}
|
| 74 |
+
}
|
| 75 |
+
</style>
|
| 76 |
+
|
| 77 |
+
<nav>
|
| 78 |
+
<div class="nav-container">
|
| 79 |
+
<div class="nav-wrapper">
|
| 80 |
+
<a href="#" class="nav-brand">
|
| 81 |
+
<i class="brand-icon" data-feather="bar-chart-2"></i>
|
| 82 |
+
<span class="brand-text">FluxoCash Pro</span>
|
| 83 |
+
</a>
|
| 84 |
+
|
| 85 |
+
<div class="nav-links">
|
| 86 |
+
<a href="#" class="nav-link">
|
| 87 |
+
<i class="nav-icon" data-feather="home"></i>
|
| 88 |
+
<span>Dashboard</span>
|
| 89 |
+
</a>
|
| 90 |
+
<a href="#" class="nav-link">
|
| 91 |
+
<i class="nav-icon" data-feather="trending-up"></i>
|
| 92 |
+
<span>Relatórios</span>
|
| 93 |
+
</a>
|
| 94 |
+
<a href="#" class="nav-link">
|
| 95 |
+
<i class="nav-icon" data-feather="settings"></i>
|
| 96 |
+
<span>Configurações</span>
|
| 97 |
+
</a>
|
| 98 |
+
</div>
|
| 99 |
+
</div>
|
| 100 |
+
</div>
|
| 101 |
+
</nav>
|
| 102 |
+
`;
|
| 103 |
+
}
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
customElements.define('custom-navbar', CustomNavbar);
|
|
@@ -1,19 +1,195 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="pt-BR">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>FluxoCash Pro - Análise Financeira</title>
|
| 7 |
+
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
|
| 8 |
+
<link rel="stylesheet" href="style.css">
|
| 9 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 10 |
+
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
|
| 11 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 12 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 13 |
+
</head>
|
| 14 |
+
<body class="bg-gray-50 dark:bg-gray-900 transition-colors duration-300">
|
| 15 |
+
<custom-navbar></custom-navbar>
|
| 16 |
+
|
| 17 |
+
<main class="container mx-auto px-4 py-8 max-w-7xl">
|
| 18 |
+
<!-- Header -->
|
| 19 |
+
<header class="mb-8">
|
| 20 |
+
<h1 class="text-4xl font-bold text-gray-800 dark:text-white mb-2">
|
| 21 |
+
Análise Financeira - Novembro/25
|
| 22 |
+
</h1>
|
| 23 |
+
<p class="text-gray-600 dark:text-gray-300">
|
| 24 |
+
Dashboard completo de fluxo de caixa com projeções e insights
|
| 25 |
+
</p>
|
| 26 |
+
</header>
|
| 27 |
+
|
| 28 |
+
<!-- KPI Cards -->
|
| 29 |
+
<section class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-8">
|
| 30 |
+
<div class="kpi-card bg-gradient-to-br from-green-400 to-green-600">
|
| 31 |
+
<div class="flex items-center justify-between">
|
| 32 |
+
<div>
|
| 33 |
+
<p class="text-white text-sm font-medium">Receitas Totais</p>
|
| 34 |
+
<p class="text-3xl font-bold text-white" id="total-revenue">R$ 0</p>
|
| 35 |
+
</div>
|
| 36 |
+
<i data-feather="trending-up" class="text-white w-8 h-8"></i>
|
| 37 |
+
</div>
|
| 38 |
+
</div>
|
| 39 |
+
|
| 40 |
+
<div class="kpi-card bg-gradient-to-br from-red-400 to-red-600">
|
| 41 |
+
<div class="flex items-center justify-between">
|
| 42 |
+
<div>
|
| 43 |
+
<p class="text-white text-sm font-medium">Despesas Totais</p>
|
| 44 |
+
<p class="text-3xl font-bold text-white" id="total-expenses">R$ 0</p>
|
| 45 |
+
</div>
|
| 46 |
+
<i data-feather="trending-down" class="text-white w-8 h-8"></i>
|
| 47 |
+
</div>
|
| 48 |
+
</div>
|
| 49 |
+
|
| 50 |
+
<div class="kpi-card bg-gradient-to-br from-blue-400 to-blue-600">
|
| 51 |
+
<div class="flex items-center justify-between">
|
| 52 |
+
<div>
|
| 53 |
+
<p class="text-white text-sm font-medium">Lucro Líquido</p>
|
| 54 |
+
<p class="text-3xl font-bold text-white" id="net-profit">R$ 0</p>
|
| 55 |
+
</div>
|
| 56 |
+
<i data-feather="dollar-sign" class="text-white w-8 h-8"></i>
|
| 57 |
+
</div>
|
| 58 |
+
</div>
|
| 59 |
+
|
| 60 |
+
<div class="kpi-card bg-gradient-to-br from-purple-400 to-purple-600">
|
| 61 |
+
<div class="flex items-center justify-between">
|
| 62 |
+
<div>
|
| 63 |
+
<p class="text-white text-sm font-medium">Margem de Contribuição</p>
|
| 64 |
+
<p class="text-3xl font-bold text-white" id="contribution-margin">0%</p>
|
| 65 |
+
</div>
|
| 66 |
+
<i data-feather="percent" class="text-white w-8 h-8"></i>
|
| 67 |
+
</div>
|
| 68 |
+
</div>
|
| 69 |
+
</section>
|
| 70 |
+
|
| 71 |
+
<!-- Charts Section -->
|
| 72 |
+
<section class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-8">
|
| 73 |
+
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 74 |
+
<h2 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">
|
| 75 |
+
Evolução do Fluxo de Caixa
|
| 76 |
+
</h2>
|
| 77 |
+
<canvas id="cashFlowChart" width="400" height="200"></canvas>
|
| 78 |
+
</div>
|
| 79 |
+
|
| 80 |
+
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 81 |
+
<h2 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">
|
| 82 |
+
Composição das Receitas
|
| 83 |
+
</h2>
|
| 84 |
+
<canvas id="revenueCompositionChart" width="400" height="200"></canvas>
|
| 85 |
+
</div>
|
| 86 |
+
</section>
|
| 87 |
+
|
| 88 |
+
<!-- Detailed Analysis -->
|
| 89 |
+
<section class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-8">
|
| 90 |
+
<div class="lg:col-span-2 bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 91 |
+
<h2 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">
|
| 92 |
+
Detalhamento de Receitas
|
| 93 |
+
</h2>
|
| 94 |
+
<div class="overflow-x-auto">
|
| 95 |
+
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-700">
|
| 96 |
+
<thead class="bg-gray-50 dark:bg-gray-700">
|
| 97 |
+
<tr>
|
| 98 |
+
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">
|
| 99 |
+
Categoria
|
| 100 |
+
</th>
|
| 101 |
+
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">
|
| 102 |
+
Valor (R$)
|
| 103 |
+
</th>
|
| 104 |
+
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">
|
| 105 |
+
% do Total
|
| 106 |
+
</th>
|
| 107 |
+
</tr>
|
| 108 |
+
</thead>
|
| 109 |
+
<tbody id="revenue-details" class="bg-white dark:bg-gray-800 divide-y divide-gray-200 dark:divide-gray-700">
|
| 110 |
+
</tbody>
|
| 111 |
+
</table>
|
| 112 |
+
</div>
|
| 113 |
+
</div>
|
| 114 |
+
|
| 115 |
+
<div class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 116 |
+
<h2 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">
|
| 117 |
+
PLR - Participação nos Lucros
|
| 118 |
+
</h2>
|
| 119 |
+
<div class="space-y-4">
|
| 120 |
+
<div class="flex justify-between items-center p-4 bg-red-50 dark:bg-red-900/20 rounded-lg">
|
| 121 |
+
<span class="text-gray-700 dark:text-gray-300">Total PLR Pago</span>
|
| 122 |
+
<span class="text-2xl font-bold text-red-600 dark:text-red-400" id="total-plr">R$ 0</span>
|
| 123 |
+
</div>
|
| 124 |
+
<div class="text-sm text-gray-600 dark:text-gray-400">
|
| 125 |
+
<p class="mb-2">📊 A empresa distribuiu <span id="plr-percentage">0%</span> do lucro operacional como PLR.</p>
|
| 126 |
+
<p>💡 Recomenda-se revisar a política de PLR para o próximo período.</p>
|
| 127 |
+
</div>
|
| 128 |
+
</div>
|
| 129 |
+
</div>
|
| 130 |
+
</section>
|
| 131 |
+
|
| 132 |
+
<!-- Expense Breakdown -->
|
| 133 |
+
<section class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6 mb-8">
|
| 134 |
+
<h2 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">
|
| 135 |
+
Análise de Despesas por Categoria
|
| 136 |
+
</h2>
|
| 137 |
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4" id="expense-breakdown">
|
| 138 |
+
</div>
|
| 139 |
+
</section>
|
| 140 |
+
|
| 141 |
+
<!-- Projections -->
|
| 142 |
+
<section class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6 mb-8">
|
| 143 |
+
<h2 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">
|
| 144 |
+
Projeção de Fluxo de Caixa - Dezembro/25
|
| 145 |
+
</h2>
|
| 146 |
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
| 147 |
+
<div class="projection-card">
|
| 148 |
+
<h3 class="text-lg font-medium text-gray-700 dark:text-gray-300 mb-2">
|
| 149 |
+
Cenário Otimista
|
| 150 |
+
</h3>
|
| 151 |
+
<p class="text-3xl font-bold text-green-600" id="optimistic-scenario">R$ 0</p>
|
| 152 |
+
<p class="text-sm text-gray-600 dark:text-gray-400 mt-2">
|
| 153 |
+
+15% receitas, -5% despesas
|
| 154 |
+
</p>
|
| 155 |
+
</div>
|
| 156 |
+
<div class="projection-card">
|
| 157 |
+
<h3 class="text-lg font-medium text-gray-700 dark:text-gray-300 mb-2">
|
| 158 |
+
Cenário Realista
|
| 159 |
+
</h3>
|
| 160 |
+
<p class="text-3xl font-bold text-blue-600" id="realistic-scenario">R$ 0</p>
|
| 161 |
+
<p class="text-sm text-gray-600 dark:text-gray-400 mt-2">
|
| 162 |
+
Média dos últimos 3 meses
|
| 163 |
+
</p>
|
| 164 |
+
</div>
|
| 165 |
+
<div class="projection-card">
|
| 166 |
+
<h3 class="text-lg font-medium text-gray-700 dark:text-gray-300 mb-2">
|
| 167 |
+
Cenário Conservador
|
| 168 |
+
</h3>
|
| 169 |
+
<p class="text-3xl font-bold text-orange-600" id="conservative-scenario">R$ 0</p>
|
| 170 |
+
<p class="text-sm text-gray-600 dark:text-gray-400 mt-2">
|
| 171 |
+
-10% receitas, +5% despesas
|
| 172 |
+
</p>
|
| 173 |
+
</div>
|
| 174 |
+
</div>
|
| 175 |
+
</section>
|
| 176 |
+
|
| 177 |
+
<!-- Alerts and Recommendations -->
|
| 178 |
+
<section class="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-6">
|
| 179 |
+
<h2 class="text-xl font-semibold text-gray-800 dark:text-white mb-4">
|
| 180 |
+
Pontos de Atenção e Recomendações
|
| 181 |
+
</h2>
|
| 182 |
+
<div id="alerts-recommendations" class="space-y-4">
|
| 183 |
+
</div>
|
| 184 |
+
</section>
|
| 185 |
+
</main>
|
| 186 |
+
|
| 187 |
+
<custom-footer></custom-footer>
|
| 188 |
+
|
| 189 |
+
<script src="components/navbar.js"></script>
|
| 190 |
+
<script src="components/footer.js"></script>
|
| 191 |
+
<script src="script.js"></script>
|
| 192 |
+
<script>feather.replace();</script>
|
| 193 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 194 |
+
</body>
|
| 195 |
+
</html>
|
|
@@ -0,0 +1,339 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// FluxoCash Pro - Financial Analysis Script
|
| 2 |
+
|
| 3 |
+
// Financial data structure
|
| 4 |
+
const financialData = {
|
| 5 |
+
months: ['jan/25', 'fev/25', 'mar/25', 'abr/25', 'mai/25', 'jun/25', 'jul/25', 'ago/25', 'set/25', 'out/25', 'nov/25', 'dez/25'],
|
| 6 |
+
openingBalance: [57765, 52114, 50371, 46703, 42816, 42529, 44457, 36478, 25195, 27204, 27102, 17611],
|
| 7 |
+
totalRevenue: [32757, 36279, 37684, 34902, 34148, 42104, 33888, 44910, 46361, 49334, 51009, 47416],
|
| 8 |
+
revenueBreakdown: {
|
| 9 |
+
traffic: [22815, 23843, 25170, 19145, 23370, 32961, 27074, 34795, 30949, 39539, 37828, 38857],
|
| 10 |
+
webDesign: [7476, 11217, 11324, 14952, 9151, 8596, 5985, 8236, 8135, 7985, 9165, 6165],
|
| 11 |
+
services: [0, 497, 497, 0, 1216, 547, 829, 714, 5490, 1547, 2627, 2394],
|
| 12 |
+
hosting: [0, 250, 250, 0, 0, 0, 0, 0, 0, 0, 222, 0],
|
| 13 |
+
financial: [2466, 473, 0, 805, 412, 0, 0, 0, 1787, 263, 0, 0],
|
| 14 |
+
other: [0, 0, 444, 0, 0, 0, 0, 1166, 0, 0, 1168, 0]
|
| 15 |
+
},
|
| 16 |
+
totalExpenses: [38408, 38022, 41353, 38789, 38435, 46177, 43866, 44193, 50352, 51320, 52617, 50153],
|
| 17 |
+
variableCosts: [5444, 8391, 9961, 9016, 9808, 13338, 10839, 11495, 13648, 13959, 11391, 10939],
|
| 18 |
+
fixedCosts: [10559, 7062, 11989, 10367, 9224, 11385, 11627, 11298, 15675, 14320, 18201, 16247],
|
| 19 |
+
plr: [19396, 19396, 19396, 19396, 19396, 21396, 21396, 21396, 20964, 22964, 22964, 22964],
|
| 20 |
+
operationalProfit: [14289, 20353, 15290, 14714, 14704, 17381, 11422, 20951, 15252, 20792, 20249, 20231],
|
| 21 |
+
netCashFlow: [-5651, -1743, -3668, -3887, -4286, -4073, -9978, 717, -3991, -1985, -1608, -2737],
|
| 22 |
+
closingBalance: [52114, 50371, 46703, 42816, 42529, 44457, 36478, 25195, 27204, 27102, 27611, 14874]
|
| 23 |
+
};
|
| 24 |
+
|
| 25 |
+
// Utility functions
|
| 26 |
+
function formatCurrency(value) {
|
| 27 |
+
return new Intl.NumberFormat('pt-BR', {
|
| 28 |
+
style: 'currency',
|
| 29 |
+
currency: 'BRL'
|
| 30 |
+
}).format(value);
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
function formatPercentage(value) {
|
| 34 |
+
return `${(value * 100).toFixed(1)}%`;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
function getCurrentMonthIndex() {
|
| 38 |
+
return 10; // November (nov/25)
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
// Calculate KPIs
|
| 42 |
+
function calculateKPIs() {
|
| 43 |
+
const currentMonth = getCurrentMonthIndex();
|
| 44 |
+
|
| 45 |
+
// Total Revenue
|
| 46 |
+
const totalRevenue = financialData.totalRevenue[currentMonth];
|
| 47 |
+
document.getElementById('total-revenue').textContent = formatCurrency(totalRevenue);
|
| 48 |
+
|
| 49 |
+
// Total Expenses
|
| 50 |
+
const totalExpenses = financialData.totalExpenses[currentMonth];
|
| 51 |
+
document.getElementById('total-expenses').textContent = formatCurrency(totalExpenses);
|
| 52 |
+
|
| 53 |
+
// Net Profit
|
| 54 |
+
const netProfit = financialData.operationalProfit[currentMonth] - financialData.plr[currentMonth];
|
| 55 |
+
document.getElementById('net-profit').textContent = formatCurrency(netProfit);
|
| 56 |
+
|
| 57 |
+
// Contribution Margin
|
| 58 |
+
const contributionMargin = (financialData.totalRevenue[currentMonth] - financialData.variableCosts[currentMonth]) / financialData.totalRevenue[currentMonth];
|
| 59 |
+
document.getElementById('contribution-margin').textContent = formatPercentage(contributionMargin);
|
| 60 |
+
|
| 61 |
+
// PLR
|
| 62 |
+
const totalPLR = financialData.plr.reduce((sum, value) => sum + value, 0);
|
| 63 |
+
document.getElementById('total-plr').textContent = formatCurrency(totalPLR);
|
| 64 |
+
|
| 65 |
+
const plrPercentage = financialData.plr[currentMonth] / financialData.operationalProfit[currentMonth];
|
| 66 |
+
document.getElementById('plr-percentage').textContent = formatPercentage(plrPercentage);
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
// Create charts
|
| 70 |
+
function createCashFlowChart() {
|
| 71 |
+
const ctx = document.getElementById('cashFlowChart').getContext('2d');
|
| 72 |
+
|
| 73 |
+
new Chart(ctx, {
|
| 74 |
+
type: 'line',
|
| 75 |
+
data: {
|
| 76 |
+
labels: financialData.months,
|
| 77 |
+
datasets: [{
|
| 78 |
+
label: 'Saldo Final',
|
| 79 |
+
data: financialData.closingBalance,
|
| 80 |
+
borderColor: 'rgb(59, 130, 246)',
|
| 81 |
+
backgroundColor: 'rgba(59, 130, 246, 0.1)',
|
| 82 |
+
tension: 0.4,
|
| 83 |
+
fill: true
|
| 84 |
+
}, {
|
| 85 |
+
label: 'Fluxo de Caixa',
|
| 86 |
+
data: financialData.netCashFlow,
|
| 87 |
+
borderColor: 'rgb(16, 185, 129)',
|
| 88 |
+
backgroundColor: 'rgba(16, 185, 129, 0.1)',
|
| 89 |
+
tension: 0.4
|
| 90 |
+
}]
|
| 91 |
+
},
|
| 92 |
+
options: {
|
| 93 |
+
responsive: true,
|
| 94 |
+
maintainAspectRatio: false,
|
| 95 |
+
plugins: {
|
| 96 |
+
legend: {
|
| 97 |
+
position: 'top',
|
| 98 |
+
},
|
| 99 |
+
title: {
|
| 100 |
+
display: false
|
| 101 |
+
}
|
| 102 |
+
},
|
| 103 |
+
scales: {
|
| 104 |
+
y: {
|
| 105 |
+
beginAtZero: false,
|
| 106 |
+
ticks: {
|
| 107 |
+
callback: function(value) {
|
| 108 |
+
return formatCurrency(value);
|
| 109 |
+
}
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
+
}
|
| 113 |
+
}
|
| 114 |
+
});
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
function createRevenueCompositionChart() {
|
| 118 |
+
const ctx = document.getElementById('revenueCompositionChart').getContext('2d');
|
| 119 |
+
const currentMonth = getCurrentMonthIndex();
|
| 120 |
+
|
| 121 |
+
const data = {
|
| 122 |
+
labels: ['Tráfego', 'Web Design', 'Serviços', 'Hospedagem', 'Financeiras', 'Outras'],
|
| 123 |
+
datasets: [{
|
| 124 |
+
data: [
|
| 125 |
+
financialData.revenueBreakdown.traffic[currentMonth],
|
| 126 |
+
financialData.revenueBreakdown.webDesign[currentMonth],
|
| 127 |
+
financialData.revenueBreakdown.services[currentMonth],
|
| 128 |
+
financialData.revenueBreakdown.hosting[currentMonth],
|
| 129 |
+
financialData.revenueBreakdown.financial[currentMonth],
|
| 130 |
+
financialData.revenueBreakdown.other[currentMonth]
|
| 131 |
+
],
|
| 132 |
+
backgroundColor: [
|
| 133 |
+
'rgba(59, 130, 246, 0.8)',
|
| 134 |
+
'rgba(16, 185, 129, 0.8)',
|
| 135 |
+
'rgba(245, 158, 11, 0.8)',
|
| 136 |
+
'rgba(139, 92, 246, 0.8)',
|
| 137 |
+
'rgba(236, 72, 153, 0.8)',
|
| 138 |
+
'rgba(107, 114, 128, 0.8)'
|
| 139 |
+
]
|
| 140 |
+
}]
|
| 141 |
+
};
|
| 142 |
+
|
| 143 |
+
new Chart(ctx, {
|
| 144 |
+
type: 'doughnut',
|
| 145 |
+
data: data,
|
| 146 |
+
options: {
|
| 147 |
+
responsive: true,
|
| 148 |
+
maintainAspectRatio: false,
|
| 149 |
+
plugins: {
|
| 150 |
+
legend: {
|
| 151 |
+
position: 'bottom',
|
| 152 |
+
},
|
| 153 |
+
tooltip: {
|
| 154 |
+
callbacks: {
|
| 155 |
+
label: function(context) {
|
| 156 |
+
const label = context.label || '';
|
| 157 |
+
const value = context.parsed || 0;
|
| 158 |
+
const total = context.dataset.data.reduce((a, b) => a + b, 0);
|
| 159 |
+
const percentage = ((value / total) * 100).toFixed(1);
|
| 160 |
+
return `${label}: ${formatCurrency(value)} (${percentage}%)`;
|
| 161 |
+
}
|
| 162 |
+
}
|
| 163 |
+
}
|
| 164 |
+
}
|
| 165 |
+
}
|
| 166 |
+
});
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
// Populate tables and breakdowns
|
| 170 |
+
function populateRevenueDetails() {
|
| 171 |
+
const currentMonth = getCurrentMonthIndex();
|
| 172 |
+
const tbody = document.getElementById('revenue-details');
|
| 173 |
+
const totalRevenue = financialData.totalRevenue[currentMonth];
|
| 174 |
+
|
| 175 |
+
const revenueItems = [
|
| 176 |
+
{ name: 'Receita de Tráfego', value: financialData.revenueBreakdown.traffic[currentMonth] },
|
| 177 |
+
{ name: 'Receita de Web Design', value: financialData.revenueBreakdown.webDesign[currentMonth] },
|
| 178 |
+
{ name: 'Receita de Serviços', value: financialData.revenueBreakdown.services[currentMonth] },
|
| 179 |
+
{ name: 'Receita de Hospedagem', value: financialData.revenueBreakdown.hosting[currentMonth] },
|
| 180 |
+
{ name: 'Receitas Financeiras', value: financialData.revenueBreakdown.financial[currentMonth] },
|
| 181 |
+
{ name: 'Outras Receitas', value: financialData.revenueBreakdown.other[currentMonth] }
|
| 182 |
+
];
|
| 183 |
+
|
| 184 |
+
tbody.innerHTML = revenueItems.map(item => `
|
| 185 |
+
<tr class="table-hover">
|
| 186 |
+
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">
|
| 187 |
+
${item.name}
|
| 188 |
+
</td>
|
| 189 |
+
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
|
| 190 |
+
${formatCurrency(item.value)}
|
| 191 |
+
</td>
|
| 192 |
+
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400">
|
| 193 |
+
${formatPercentage(item.value / totalRevenue)}
|
| 194 |
+
</td>
|
| 195 |
+
</tr>
|
| 196 |
+
`).join('');
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
function populateExpenseBreakdown() {
|
| 200 |
+
const currentMonth = getCurrentMonthIndex();
|
| 201 |
+
const container = document.getElementById('expense-breakdown');
|
| 202 |
+
|
| 203 |
+
const expenseCategories = [
|
| 204 |
+
{ name: 'Impostos', value: -4813, icon: 'file-text', color: 'red' },
|
| 205 |
+
{ name: 'Custos Variáveis', value: -11391, icon: 'package', color: 'orange' },
|
| 206 |
+
{ name: 'Salários e Encargos', value: -11294, icon: 'users', color: 'blue' },
|
| 207 |
+
{ name: 'Despesas Administrativas', value: -5827, icon: 'settings', color: 'gray' },
|
| 208 |
+
{ name: 'Despesas Comerciais', value: -893, icon: 'shopping-cart', color: 'purple' },
|
| 209 |
+
{ name: 'PLR', value: -22964, icon: 'gift', color: 'pink' }
|
| 210 |
+
];
|
| 211 |
+
|
| 212 |
+
container.innerHTML = expenseCategories.map(category => `
|
| 213 |
+
<div class="flex items-center justify-between p-4 bg-gray-50 dark:bg-gray-700 rounded-lg">
|
| 214 |
+
<div class="flex items-center space-x-3">
|
| 215 |
+
<div class="p-2 bg-${category.color}-100 dark:bg-${category.color}-900 rounded-lg">
|
| 216 |
+
<i data-feather="${category.icon}" class="text-${category.color}-600 w-5 h-5"></i>
|
| 217 |
+
</div>
|
| 218 |
+
<span class="font-medium text-gray-700 dark:text-gray-300">${category.name}</span>
|
| 219 |
+
</div>
|
| 220 |
+
<span class="font-bold text-gray-900 dark:text-gray-100">${formatCurrency(category.value)}</span>
|
| 221 |
+
</div>
|
| 222 |
+
`).join('');
|
| 223 |
+
|
| 224 |
+
feather.replace();
|
| 225 |
+
}
|
| 226 |
+
|
| 227 |
+
function calculateProjections() {
|
| 228 |
+
const currentMonth = getCurrentMonthIndex();
|
| 229 |
+
const lastThreeMonths = financialData.netCashFlow.slice(currentMonth - 2, currentMonth + 1);
|
| 230 |
+
const averageCashFlow = lastThreeMonths.reduce((sum, value) => sum + value, 0) / 3;
|
| 231 |
+
|
| 232 |
+
// Optimistic scenario: +15% revenue, -5% expenses
|
| 233 |
+
const optimistic = averageCashFlow * 1.2;
|
| 234 |
+
document.getElementById('optimistic-scenario').textContent = formatCurrency(optimistic);
|
| 235 |
+
|
| 236 |
+
// Realistic scenario: average of last 3 months
|
| 237 |
+
document.getElementById('realistic-scenario').textContent = formatCurrency(averageCashFlow);
|
| 238 |
+
|
| 239 |
+
// Conservative scenario: -10% revenue, +5% expenses
|
| 240 |
+
const conservative = averageCashFlow * 0.85;
|
| 241 |
+
document.getElementById('conservative-scenario').textContent = formatCurrency(conservative);
|
| 242 |
+
}
|
| 243 |
+
|
| 244 |
+
function generateAlertsAndRecommendations() {
|
| 245 |
+
const currentMonth = getCurrentMonthIndex();
|
| 246 |
+
const container = document.getElementById('alerts-recommendations');
|
| 247 |
+
|
| 248 |
+
const alerts = [];
|
| 249 |
+
|
| 250 |
+
// Check cash flow trend
|
| 251 |
+
const lastThreeMonthsFlow = financialData.netCashFlow.slice(currentMonth - 2, currentMonth + 1);
|
| 252 |
+
const negativeFlowCount = lastThreeMonthsFlow.filter(flow => flow < 0).length;
|
| 253 |
+
|
| 254 |
+
if (negativeFlowCount >= 2) {
|
| 255 |
+
alerts.push({
|
| 256 |
+
type: 'danger',
|
| 257 |
+
icon: 'alert-alert-triangle',
|
| 258 |
+
title: 'Atenção: Fluxo de Caixa Negativo',
|
| 259 |
+
message: 'Nos últimos 3 meses, tivemos fluxo negativo em 2 períodos. Recomenda-se revisar despesas e acelerar recebíveis.'
|
| 260 |
+
});
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
// Check PLR percentage
|
| 264 |
+
const plrPercentage = financialData.plr[currentMonth] / financialData.operationalProfit[currentMonth];
|
| 265 |
+
if (plrPercentage > 0.8) {
|
| 266 |
+
alerts.push({
|
| 267 |
+
type: 'warning',
|
| 268 |
+
icon: 'percent',
|
| 269 |
+
title: 'PLR Elevada',
|
| 270 |
+
message: 'A PLR está consumindo mais de 80% do lucro operacional. Considere ajustar a política de distribuição.'
|
| 271 |
+
});
|
| 272 |
+
}
|
| 273 |
+
|
| 274 |
+
// Check cash balance
|
| 275 |
+
const currentBalance = financialData.closingBalance[currentMonth];
|
| 276 |
+
if (currentBalance < 20000) {
|
| 277 |
+
alerts.push({
|
| 278 |
+
type: 'warning',
|
| 279 |
+
icon: 'dollar-sign',
|
| 280 |
+
title: 'Saldo de Caixa Baixo',
|
| 281 |
+
message: 'O saldo atual está abaixo de R$ 20.000. Mantenha uma reserva de segurança equivalente a 2 meses de despesas.'
|
| 282 |
+
});
|
| 283 |
+
}
|
| 284 |
+
|
| 285 |
+
// Positive alerts
|
| 286 |
+
if (financialData.totalRevenue[currentMonth] > financialData.totalRevenue[currentMonth - 1]) {
|
| 287 |
+
alerts.push({
|
| 288 |
+
type: 'success',
|
| 289 |
+
icon: 'trending-up',
|
| 290 |
+
title: 'Crescimento de Receita',
|
| 291 |
+
message: 'As receitas cresceram em relação ao mês anterior. Continue focando nas fontes principais de receita.'
|
| 292 |
+
});
|
| 293 |
+
}
|
| 294 |
+
|
| 295 |
+
container.innerHTML = alerts.map(alert => `
|
| 296 |
+
<div class="alert-card border-${alert.type === 'success' ? 'green' : alert.type === 'warning' ? 'yellow' : 'red'}-500">
|
| 297 |
+
<div class="flex items-start space-x-3">
|
| 298 |
+
<i data-feather="${alert.icon}" class="text-${alert.type === 'success' ? 'green' : alert.type === 'warning' ? 'yellow' : 'red'}-500 w-5 h-5 mt-0.5"></i>
|
| 299 |
+
<div>
|
| 300 |
+
<h3 class="font-semibold text-gray-800 dark:text-gray-200">${alert.title}</h3>
|
| 301 |
+
<p class="text-sm text-gray-600 dark:text-gray-400 mt-1">${alert.message}</p>
|
| 302 |
+
</div>
|
| 303 |
+
</div>
|
| 304 |
+
</div>
|
| 305 |
+
`).join('');
|
| 306 |
+
|
| 307 |
+
feather.replace();
|
| 308 |
+
}
|
| 309 |
+
|
| 310 |
+
// Initialize dashboard
|
| 311 |
+
function initializeDashboard() {
|
| 312 |
+
calculateKPIs();
|
| 313 |
+
createCashFlowChart();
|
| 314 |
+
createRevenueCompositionChart();
|
| 315 |
+
populateRevenueDetails();
|
| 316 |
+
populateExpenseBreakdown();
|
| 317 |
+
calculateProjections();
|
| 318 |
+
generateAlertsAndRecommendations();
|
| 319 |
+
}
|
| 320 |
+
|
| 321 |
+
// Dark mode toggle
|
| 322 |
+
function setupDarkMode() {
|
| 323 |
+
const darkModeToggle = document.createElement('button');
|
| 324 |
+
darkModeToggle.innerHTML = '<i data-feather="moon"></i>';
|
| 325 |
+
darkModeToggle.className = 'fixed top-4 right-4 p-2 bg-gray-200 dark:bg-gray-700 rounded-lg shadow-lg';
|
| 326 |
+
darkModeToggle.addEventListener('click', () => {
|
| 327 |
+
document.documentElement.classList.toggle('dark');
|
| 328 |
+
darkModeToggle.innerHTML = document.documentElement.classList.contains('dark') ?
|
| 329 |
+
'<i data-feather="sun"></i>' : '<i data-feather="moon"></i>';
|
| 330 |
+
feather.replace();
|
| 331 |
+
});
|
| 332 |
+
document.body.appendChild(darkModeToggle);
|
| 333 |
+
}
|
| 334 |
+
|
| 335 |
+
// Document ready
|
| 336 |
+
document.addEventListener('DOMContentLoaded', () => {
|
| 337 |
+
initializeDashboard();
|
| 338 |
+
setupDarkMode();
|
| 339 |
+
});
|
|
@@ -1,28 +1,89 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
margin-top: 0;
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
font-size: 15px;
|
| 14 |
-
margin-bottom: 10px;
|
| 15 |
-
margin-top: 5px;
|
| 16 |
}
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
}
|
| 25 |
|
| 26 |
-
.
|
| 27 |
-
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* Custom styles for FluxoCash Pro */
|
| 2 |
+
|
| 3 |
+
.kpi-card {
|
| 4 |
+
@apply rounded-xl shadow-lg p-6 text-white transition-transform duration-300 hover:scale-105;
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
.projection-card {
|
| 8 |
+
@apply p-4 border-2 border-gray-200 dark:border-gray-700 rounded-lg bg-gray-50 dark:bg-gray-700;
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
.alert-card {
|
| 12 |
+
@apply p-4 rounded-lg border-l-4;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
.alert-success {
|
| 16 |
+
@apply bg-green-50 dark:bg-green-900/20 border-green-500;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
.alert-warning {
|
| 20 |
+
@apply bg-yellow-50 dark:bg-yellow-900/20 border-yellow-500;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
.alert-danger {
|
| 24 |
+
@apply bg-red-50 dark:bg-red-900/20 border-red-500;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
.chart-container {
|
| 28 |
+
position: relative;
|
| 29 |
+
height: 300px;
|
| 30 |
+
width: 100%;
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
.table-hover:hover {
|
| 34 |
+
@apply bg-gray-50 dark:bg-gray-700;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
/* Dark mode transitions */
|
| 38 |
+
* {
|
| 39 |
+
@apply transition-colors duration-200;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
/* Custom scrollbar */
|
| 43 |
+
::-webkit-scrollbar {
|
| 44 |
+
width: 8px;
|
| 45 |
+
height: 8px;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
::-webkit-scrollbar-track {
|
| 49 |
+
@apply bg-gray-100 dark:bg-gray-800;
|
| 50 |
}
|
| 51 |
|
| 52 |
+
::-webkit-scrollbar-thumb {
|
| 53 |
+
@apply bg-gray-400 dark:bg-gray-600 rounded-full;
|
|
|
|
| 54 |
}
|
| 55 |
|
| 56 |
+
::-webkit-scrollbar-thumb:hover {
|
| 57 |
+
@apply bg-gray-500 dark:bg-gray-500;
|
|
|
|
|
|
|
|
|
|
| 58 |
}
|
| 59 |
|
| 60 |
+
/* Animations */
|
| 61 |
+
@keyframes fadeIn {
|
| 62 |
+
from {
|
| 63 |
+
opacity: 0;
|
| 64 |
+
transform: translateY(20px);
|
| 65 |
+
}
|
| 66 |
+
to {
|
| 67 |
+
opacity: 1;
|
| 68 |
+
transform: translateY(0);
|
| 69 |
+
}
|
| 70 |
}
|
| 71 |
|
| 72 |
+
.fade-in {
|
| 73 |
+
animation: fadeIn 0.6s ease-out;
|
| 74 |
}
|
| 75 |
+
|
| 76 |
+
/* Loading states */
|
| 77 |
+
.loading {
|
| 78 |
+
@apply animate-pulse bg-gray-200 dark:bg-gray-700;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
/* Responsive tables */
|
| 82 |
+
@media (max-width: 640px) {
|
| 83 |
+
.responsive-table {
|
| 84 |
+
display: block;
|
| 85 |
+
width: 100%;
|
| 86 |
+
overflow-x: auto;
|
| 87 |
+
-webkit-overflow-scrolling: touch;
|
| 88 |
+
}
|
| 89 |
+
}
|