Spaces:
Running
Running
| <html lang="es"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Tecnova Ingeniería SAS - CRM</title> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> | |
| <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> | |
| <script> | |
| tailwind.config = { | |
| darkMode: 'class', | |
| theme: { | |
| extend: { | |
| colors: { | |
| tecnovablue: '#1a4b8c', | |
| tecnovagreen: '#2e856e', | |
| tecnovagray: '#4a5568', | |
| } | |
| } | |
| } | |
| } | |
| </script> | |
| <style> | |
| .sidebar { | |
| transition: all 0.3s; | |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
| } | |
| .sidebar-collapsed { | |
| width: 70px; | |
| } | |
| .sidebar-expanded { | |
| width: 250px; | |
| } | |
| .main-content { | |
| transition: margin-left 0.3s; | |
| } | |
| .content-expanded { | |
| margin-left: 250px; | |
| } | |
| .content-collapsed { | |
| margin-left: 70px; | |
| } | |
| .chart-container { | |
| position: relative; | |
| height: 300px; | |
| } | |
| .progress-bar { | |
| height: 6px; | |
| border-radius: 3px; | |
| } | |
| .task-item:hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); | |
| } | |
| .dark .sidebar { | |
| background: linear-gradient(135deg, #4a56b7 0%, #5a3b8a 100%); | |
| border-color: #334155; | |
| } | |
| .dark .sidebar a { | |
| color: #e2e8f0; | |
| } | |
| .dark .sidebar a:hover { | |
| background-color: rgba(255, 255, 255, 0.1); | |
| } | |
| .dark .sidebar .text-blue-200 { | |
| color: rgba(255, 255, 255, 0.7); | |
| } | |
| .dark .sidebar .border-blue-700 { | |
| border-color: rgba(255, 255, 255, 0.1); | |
| } | |
| .dark header { | |
| background-color: #1e293b; | |
| color: white; | |
| } | |
| .dark .bg-white { | |
| background-color: #1e293b; | |
| color: white; | |
| } | |
| .dark .bg-gray-100 { | |
| background-color: #0f172a; | |
| } | |
| .dark .bg-gray-50 { | |
| background-color: #1e293b; | |
| } | |
| .dark .text-gray-500 { | |
| color: #94a3b8; | |
| } | |
| .dark .text-tecnovagray { | |
| color: #e2e8f0; | |
| } | |
| .dark .border { | |
| border-color: #334155; | |
| } | |
| .dark .task-item:hover { | |
| background-color: #334155; | |
| } | |
| .dark .bg-gray-200 { | |
| background-color: #334155; | |
| } | |
| .dark .bg-blue-100 { | |
| background-color: #1e3a8a; | |
| } | |
| .dark .bg-green-100 { | |
| background-color: #166534; | |
| } | |
| .dark .bg-purple-100 { | |
| background-color: #5b21b6; | |
| } | |
| .dark .bg-orange-100 { | |
| background-color: #9a3412; | |
| } | |
| .dark .bg-red-100 { | |
| background-color: #991b1b; | |
| } | |
| .dark .bg-yellow-100 { | |
| background-color: #854d0e; | |
| } | |
| /* New gradient sidebar styles */ | |
| .sidebar a { | |
| color: rgba(255, 255, 255, 0.9); | |
| transition: all 0.2s; | |
| } | |
| .sidebar a:hover { | |
| background-color: rgba(255, 255, 255, 0.1); | |
| } | |
| .sidebar .text-blue-200 { | |
| color: rgba(255, 255, 255, 0.7); | |
| } | |
| .sidebar .border-blue-700 { | |
| border-color: rgba(255, 255, 255, 0.1); | |
| } | |
| .sidebar .active { | |
| background-color: rgba(255, 255, 255, 0.15); | |
| font-weight: 500; | |
| } | |
| .sidebar .divider { | |
| color: rgba(255, 255, 255, 0.5); | |
| } | |
| /* Tab styles */ | |
| .tab-content { | |
| display: none; | |
| animation: fadeIn 0.3s ease-in-out; | |
| } | |
| @keyframes fadeIn { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| .tab-content.active { | |
| display: block; | |
| } | |
| .tab-button { | |
| transition: all 0.2s; | |
| } | |
| .tab-button.active { | |
| background-color: #1a4b8c; | |
| color: white; | |
| } | |
| .dark .tab-button.active { | |
| background-color: #2e856e; | |
| } | |
| /* Modal styles */ | |
| .modal { | |
| transition: opacity 0.2s ease, visibility 0.2s ease; | |
| } | |
| .modal.active { | |
| opacity: 1; | |
| visibility: visible; | |
| } | |
| /* Table styles */ | |
| .data-table { | |
| width: 100%; | |
| border-collapse: collapse; | |
| } | |
| .data-table th { | |
| text-align: left; | |
| padding: 12px 15px; | |
| background-color: #f8f9fa; | |
| border-bottom: 2px solid #e9ecef; | |
| } | |
| .data-table td { | |
| padding: 12px 15px; | |
| border-bottom: 1px solid #e9ecef; | |
| } | |
| .data-table tr:hover { | |
| background-color: #f8f9fa; | |
| } | |
| .dark .data-table th { | |
| background-color: #1e293b; | |
| border-bottom: 2px solid #334155; | |
| } | |
| .dark .data-table td { | |
| border-bottom: 1px solid #334155; | |
| } | |
| .dark .data-table tr:hover { | |
| background-color: #1e293b; | |
| } | |
| /* Status badges */ | |
| .status-badge { | |
| padding: 4px 8px; | |
| border-radius: 12px; | |
| font-size: 12px; | |
| font-weight: 500; | |
| } | |
| .status-active { | |
| background-color: #d1fae5; | |
| color: #065f46; | |
| } | |
| .status-pending { | |
| background-color: #fef3c7; | |
| color: #92400e; | |
| } | |
| .status-completed { | |
| background-color: #dbeafe; | |
| color: #1e40af; | |
| } | |
| .status-cancelled { | |
| background-color: #fee2e2; | |
| color: #991b1b; | |
| } | |
| .dark .status-active { | |
| background-color: #064e3b; | |
| color: #6ee7b7; | |
| } | |
| .dark .status-pending { | |
| background-color: #92400e; | |
| color: #fcd34d; | |
| } | |
| .dark .status-completed { | |
| background-color: #1e40af; | |
| color: #93c5fd; | |
| } | |
| .dark .status-cancelled { | |
| background-color: #991b1b; | |
| color: #fca5a5; | |
| } | |
| /* Bento Box Styles */ | |
| .bento-grid { | |
| display: grid; | |
| grid-template-columns: repeat(4, 1fr); | |
| grid-template-rows: repeat(3, auto); | |
| gap: 1.5rem; | |
| } | |
| .bento-card { | |
| border-radius: 1rem; | |
| padding: 1.5rem; | |
| box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); | |
| transition: all 0.3s ease; | |
| } | |
| .bento-card:hover { | |
| transform: translateY(-4px); | |
| box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); | |
| } | |
| .bento-card-lg { | |
| grid-column: span 2; | |
| } | |
| .bento-card-xl { | |
| grid-column: span 2; | |
| grid-row: span 2; | |
| } | |
| .bento-card-full { | |
| grid-column: span 4; | |
| } | |
| .dark .bento-card { | |
| background-color: #1e293b; | |
| border: 1px solid #334155; | |
| } | |
| /* Client card styles */ | |
| .client-card { | |
| transition: all 0.3s ease; | |
| border-radius: 0.75rem; | |
| } | |
| .client-card:hover { | |
| transform: translateY(-2px); | |
| box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); | |
| } | |
| .client-avatar { | |
| width: 48px; | |
| height: 48px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| border-radius: 50%; | |
| font-weight: bold; | |
| color: white; | |
| } | |
| /* Map container */ | |
| .map-container { | |
| height: 300px; | |
| border-radius: 0.75rem; | |
| overflow: hidden; | |
| } | |
| /* Client type indicator */ | |
| .client-type-indicator { | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 50%; | |
| display: inline-block; | |
| margin-right: 6px; | |
| } | |
| /* Custom scrollbar */ | |
| .custom-scrollbar::-webkit-scrollbar { | |
| width: 6px; | |
| height: 6px; | |
| } | |
| .custom-scrollbar::-webkit-scrollbar-track { | |
| background: #f1f1f1; | |
| border-radius: 10px; | |
| } | |
| .custom-scrollbar::-webkit-scrollbar-thumb { | |
| background: #c1c1c1; | |
| border-radius: 10px; | |
| } | |
| .dark .custom-scrollbar::-webkit-scrollbar-track { | |
| background: #334155; | |
| } | |
| .dark .custom-scrollbar::-webkit-scrollbar-thumb { | |
| background: #64748b; | |
| } | |
| /* Dashboard specific styles */ | |
| .metric-card { | |
| transition: all 0.3s ease; | |
| } | |
| .metric-card:hover { | |
| transform: translateY(-5px); | |
| box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); | |
| } | |
| .activity-item { | |
| transition: all 0.2s ease; | |
| } | |
| .activity-item:hover { | |
| background-color: rgba(26, 75, 140, 0.05); | |
| } | |
| .dark .activity-item:hover { | |
| background-color: rgba(255, 255, 255, 0.05); | |
| } | |
| .project-progress { | |
| height: 6px; | |
| border-radius: 3px; | |
| } | |
| .project-card:hover { | |
| transform: translateY(-3px); | |
| box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1); | |
| } | |
| </style> | |
| </head> | |
| <body class="bg-gray-100 font-sans dark:bg-gray-900"> | |
| <div class="flex h-screen overflow-hidden"> | |
| <!-- Sidebar --> | |
| <div id="sidebar" class="sidebar sidebar-expanded text-white flex flex-col"> | |
| <div class="p-4 flex items-center justify-between border-b border-white/10"> | |
| <div class="flex items-center"> | |
| <i class="fas fa-cogs text-2xl mr-3 text-white"></i> | |
| <span id="logo-text" class="text-xl font-bold text-white">Tecnova</span> | |
| </div> | |
| <button id="toggle-sidebar" class="text-white focus:outline-none"> | |
| <i class="fas fa-bars"></i> | |
| </button> | |
| </div> | |
| <div class="p-4 border-b border-white/10 flex items-center"> | |
| <div class="w-10 h-10 rounded-full bg-white/20 flex items-center justify-center mr-3"> | |
| <span class="text-white font-bold">AD</span> | |
| </div> | |
| <div id="user-info"> | |
| <p class="font-medium text-white">Admin User</p> | |
| <p class="text-xs text-white/70">Administrador</p> | |
| </div> | |
| </div> | |
| <nav class="flex-1 overflow-y-auto"> | |
| <div class="p-2"> | |
| <p class="text-xs uppercase text-white/50 px-3 py-2">Principal</p> | |
| <a href="#" data-section="dashboard" | |
| class="flex items-center px-3 py-3 text-white bg-white/20 rounded-lg mb-1 active"> | |
| <i class="fas fa-tachometer-alt mr-3"></i> | |
| <span>Dashboard</span> | |
| </a> | |
| <a href="#" data-section="projects" | |
| class="flex items-center px-3 py-3 text-white/80 hover:bg-white/10 rounded-lg mb-1"> | |
| <i class="fas fa-project-diagram mr-3"></i> | |
| <span>Proyectos</span> | |
| </a> | |
| <a href="#" data-section="clients" | |
| class="flex items-center px-3 py-3 text-white/80 hover:bg-white/10 rounded-lg mb-1"> | |
| <i class="fas fa-users mr-3"></i> | |
| <span>Clientes</span> | |
| </a> | |
| <a href="#" data-section="tasks" | |
| class="flex items-center px-3 py-3 text-white/80 hover:bg-white/10 rounded-lg mb-1"> | |
| <i class="fas fa-tasks mr-3"></i> | |
| <span>Tareas</span> | |
| </a> | |
| </div> | |
| <div class="p-2"> | |
| <p class="text-xs uppercase text-white/50 px-3 py-2">Operaciones</p> | |
| <a href="#" data-section="invoicing" | |
| class="flex items-center px-3 py-3 text-white/80 hover:bg-white/10 rounded-lg mb-1"> | |
| <i class="fas fa-file-invoice-dollar mr-3"></i> | |
| <span>Facturación</span> | |
| </a> | |
| <a href="#" data-section="reports" | |
| class="flex items-center px-3 py-3 text-white/80 hover:bg-white/10 rounded-lg mb-1"> | |
| <i class="fas fa-chart-line mr-3"></i> | |
| <span>Reportes</span> | |
| </a> | |
| <a href="#" data-section="inventory" | |
| class="flex items-center px-3 py-3 text-white/80 hover:bg-white/10 rounded-lg mb-1"> | |
| <i class="fas fa-boxes mr-3"></i> | |
| <span>Inventario</span> | |
| </a> | |
| </div> | |
| <div class="p-2"> | |
| <p class="text-xs uppercase text-white/50 px-3 py-2">Configuración</p> | |
| <a href="#" data-section="settings" | |
| class="flex items-center px-3 py-3 text-white/80 hover:bg-white/10 rounded-lg mb-1"> | |
| <i class="fas fa-cog mr-3"></i> | |
| <span>Ajustes</span> | |
| </a> | |
| <a href="#" data-section="users" | |
| class="flex items-center px-3 py-3 text-white/80 hover:bg-white/10 rounded-lg mb-1"> | |
| <i class="fas fa-user-shield mr-3"></i> | |
| <span>Usuarios</span> | |
| </a> | |
| </div> | |
| </nav> | |
| <div class="p-4 border-t border-white/10"> | |
| <a href="#" class="flex items-center text-white/80 hover:text-white" id="logout-btn"> | |
| <i class="fas fa-sign-out-alt mr-3"></i> | |
| <span>Cerrar sesión</span> | |
| </a> | |
| </div> | |
| </div> | |
| <!-- Main Content --> | |
| <div id="main-content" class="main-content content-expanded flex-1 flex flex-col overflow-hidden"> | |
| <!-- Top Navigation --> | |
| <header class="bg-white shadow-sm dark:bg-slate-800"> | |
| <div class="px-6 py-4 flex items-center justify-between"> | |
| <h1 id="page-title" class="text-2xl font-bold text-tecnovagray dark:text-white">Dashboard</h1> | |
| <div class="flex items-center space-x-4"> | |
| <button id="theme-toggle" class="text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none rounded-lg text-sm p-2.5"> | |
| <i id="theme-icon" class="fas fa-moon"></i> | |
| </button> | |
| <div class="relative"> | |
| <button id="notifications-btn" class="text-gray-500 dark:text-gray-400 focus:outline-none"> | |
| <i class="fas fa-bell"></i> | |
| <span class="absolute top-0 right-0 w-2 h-2 bg-red-500 rounded-full"></span> | |
| </button> | |
| </div> | |
| <div class="relative"> | |
| <button id="messages-btn" class="text-gray-500 dark:text-gray-400 focus:outline-none"> | |
| <i class="fas fa-envelope"></i> | |
| <span class="absolute top-0 right-0 w-2 h-2 bg-blue-500 rounded-full"></span> | |
| </button> | |
| </div> | |
| <div class="relative"> | |
| <input type="text" placeholder="Buscar..." class="pl-10 pr-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-tecnovablue dark:bg-slate-700 dark:border-slate-600 dark:text-white dark:placeholder-gray-400"> | |
| <i class="fas fa-search absolute left-3 top-3 text-gray-400"></i> | |
| </div> | |
| </div> | |
| </div> | |
| </header> | |
| <!-- Content Sections --> | |
| <main class="flex-1 overflow-y-auto p-6 bg-gray-50 dark:bg-slate-900"> | |
| <!-- Dashboard Section --> | |
| <div id="dashboard-section" class="tab-content active"> | |
| <!-- Welcome Banner --> | |
| <div class="bg-gradient-to-r from-tecnovablue to-tecnovagreen text-white rounded-xl p-6 mb-6"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <h2 class="text-2xl font-bold mb-2">Bienvenido de nuevo, Admin</h2> | |
| <p class="opacity-90">Aquí tienes un resumen de las actividades recientes y métricas clave.</p> | |
| </div> | |
| <div class="hidden md:block"> | |
| <i class="fas fa-chart-line text-5xl opacity-30"></i> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Metrics Grid --> | |
| <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mb-6"> | |
| <!-- Total Revenue --> | |
| <div class="metric-card bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500 dark:text-gray-400">Ingresos Totales</p> | |
| <h3 class="text-2xl font-bold text-tecnovablue dark:text-blue-400">$245.8M</h3> | |
| </div> | |
| <div class="p-3 rounded-full bg-blue-100 text-tecnovablue dark:bg-blue-900 dark:text-blue-400"> | |
| <i class="fas fa-dollar-sign text-xl"></i> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <div class="flex items-center justify-between text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400">vs mes anterior</span> | |
| <span class="font-medium text-green-500">+12.5%</span> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Active Projects --> | |
| <div class="metric-card bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500 dark:text-gray-400">Proyectos Activos</p> | |
| <h3 class="text-2xl font-bold text-tecnovagreen dark:text-green-400">18</h3> | |
| </div> | |
| <div class="p-3 rounded-full bg-green-100 text-tecnovagreen dark:bg-green-900 dark:text-green-400"> | |
| <i class="fas fa-project-diagram text-xl"></i> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <div class="flex items-center justify-between text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400">Completados: 5</span> | |
| <span class="font-medium text-blue-500">72% en plazo</span> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Total Clients --> | |
| <div class="metric-card bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500 dark:text-gray-400">Clientes</p> | |
| <h3 class="text-2xl font-bold text-purple-600 dark:text-purple-400">24</h3> | |
| </div> | |
| <div class="p-3 rounded-full bg-purple-100 text-purple-600 dark:bg-purple-900 dark:text-purple-400"> | |
| <i class="fas fa-users text-xl"></i> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <div class="flex items-center justify-between text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400">Nuevos este mes: 3</span> | |
| <span class="font-medium text-green-500">+8%</span> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Tasks Completed --> | |
| <div class="metric-card bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500 dark:text-gray-400">Tareas Completadas</p> | |
| <h3 class="text-2xl font-bold text-orange-500 dark:text-orange-400">142</h3> | |
| </div> | |
| <div class="p-3 rounded-full bg-orange-100 text-orange-500 dark:bg-orange-900 dark:text-orange-400"> | |
| <i class="fas fa-check-circle text-xl"></i> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <div class="flex items-center justify-between text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400">Pendientes: 28</span> | |
| <span class="font-medium text-red-500">-5%</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Charts Row --> | |
| <div class="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6"> | |
| <!-- Revenue Chart --> | |
| <div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-tecnovagray dark:text-white">Ingresos Mensuales</h2> | |
| <select class="text-sm border rounded-lg px-3 py-1 bg-white dark:bg-slate-700 dark:border-slate-600"> | |
| <option>2023</option> | |
| <option>2022</option> | |
| <option>2021</option> | |
| </select> | |
| </div> | |
| <div class="chart-container"> | |
| <canvas id="revenueChart"></canvas> | |
| </div> | |
| </div> | |
| <!-- Project Status Chart --> | |
| <div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-tecnovagray dark:text-white">Estado de Proyectos</h2> | |
| <div class="flex space-x-2"> | |
| <button class="px-3 py-1 text-xs bg-tecnovablue text-white rounded dark:bg-blue-600">Todos</button> | |
| <button class="px-3 py-1 text-xs bg-gray-200 text-gray-700 rounded dark:bg-gray-700 dark:text-gray-300">Activos</button> | |
| </div> | |
| </div> | |
| <div class="chart-container"> | |
| <canvas id="projectStatusChart"></canvas> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Projects and Activity Row --> | |
| <div class="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-6"> | |
| <!-- Active Projects --> | |
| <div class="lg:col-span-2 bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-tecnovagray dark:text-white">Proyectos Activos</h2> | |
| <a href="#" class="text-sm text-tecnovablue hover:underline dark:text-blue-400">Ver todos</a> | |
| </div> | |
| <div class="space-y-4"> | |
| <!-- Project 1 --> | |
| <div class="project-card bg-gray-50 dark:bg-slate-700 rounded-lg p-4 transition-all"> | |
| <div class="flex items-start justify-between"> | |
| <div> | |
| <h3 class="font-medium dark:text-white">Modernización Planta Energética</h3> | |
| <p class="text-sm text-gray-500 dark:text-gray-400 mb-2">Energía Renovable SAS</p> | |
| <div class="flex items-center text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400 mr-3">Progreso: 65%</span> | |
| <span class="text-blue-500">En plazo</span> | |
| </div> | |
| </div> | |
| <span class="px-2 py-1 bg-blue-100 text-blue-800 rounded-full text-xs dark:bg-blue-900 dark:text-blue-400">Alta</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2 mt-3 dark:bg-gray-600"> | |
| <div class="project-progress bg-tecnovablue h-2 rounded-full" style="width: 65%"></div> | |
| </div> | |
| <div class="flex items-center justify-between mt-3 text-sm text-gray-500 dark:text-gray-400"> | |
| <span>Inicio: 15/03/2023</span> | |
| <span>Fin: 30/11/2023</span> | |
| </div> | |
| </div> | |
| <!-- Project 2 --> | |
| <div class="project-card bg-gray-50 dark:bg-slate-700 rounded-lg p-4 transition-all"> | |
| <div class="flex items-start justify-between"> | |
| <div> | |
| <h3 class="font-medium dark:text-white">Automatización Proceso Agroindustrial</h3> | |
| <p class="text-sm text-gray-500 dark:text-gray-400 mb-2">Agropecuaria La Esperanza</p> | |
| <div class="flex items-center text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400 mr-3">Progreso: 42%</span> | |
| <span class="text-yellow-500">En riesgo</span> | |
| </div> | |
| </div> | |
| <span class="px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs dark:bg-green-900 dark:text-green-400">Media</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2 mt-3 dark:bg-gray-600"> | |
| <div class="project-progress bg-tecnovagreen h-2 rounded-full" style="width: 42%"></div> | |
| </div> | |
| <div class="flex items-center justify-between mt-3 text-sm text-gray-500 dark:text-gray-400"> | |
| <span>Inicio: 01/05/2023</span> | |
| <span>Fin: 15/12/2023</span> | |
| </div> | |
| </div> | |
| <!-- Project 3 --> | |
| <div class="project-card bg-gray-50 dark:bg-slate-700 rounded-lg p-4 transition-all"> | |
| <div class="flex items-start justify-between"> | |
| <div> | |
| <h3 class="font-medium dark:text-white">Diseño Sistema HVAC</h3> | |
| <p class="text-sm text-gray-500 dark:text-gray-400 mb-2">Constructora Edificar SAS</p> | |
| <div class="flex items-center text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400 mr-3">Progreso: 78%</span> | |
| <span class="text-blue-500">En plazo</span> | |
| </div> | |
| </div> | |
| <span class="px-2 py-1 bg-purple-100 text-purple-800 rounded-full text-xs dark:bg-purple-900 dark:text-purple-400">Baja</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2 mt-3 dark:bg-gray-600"> | |
| <div class="project-progress bg-purple-600 h-2 rounded-full" style="width: 78%"></div> | |
| </div> | |
| <div class="flex items-center justify-between mt-3 text-sm text-gray-500 dark:text-gray-400"> | |
| <span>Inicio: 10/02/2023</span> | |
| <span>Fin: 30/09/2023</span> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Recent Activity --> | |
| <div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-tecnovagray dark:text-white">Actividad Reciente</h2> | |
| <a href="#" class="text-sm text-tecnovablue hover:underline dark:text-blue-400">Ver todo</a> | |
| </div> | |
| <div class="space-y-4"> | |
| <!-- Activity 1 --> | |
| <div class="activity-item p-3 rounded-lg"> | |
| <div class="flex items-start"> | |
| <div class="p-2 bg-blue-100 text-tecnovablue rounded-full mr-3 dark:bg-blue-900 dark:text-blue-400"> | |
| <i class="fas fa-file-invoice-dollar"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium dark:text-white">Factura #INV-2023-056 generada</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Energía Renovable SAS - $12,450,000</p> | |
| <p class="text-xs text-gray-400 dark:text-gray-500">Hace 2 horas</p> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Activity 2 --> | |
| <div class="activity-item p-3 rounded-lg"> | |
| <div class="flex items-start"> | |
| <div class="p-2 bg-green-100 text-tecnovagreen rounded-full mr-3 dark:bg-green-900 dark:text-green-400"> | |
| <i class="fas fa-check-circle"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium dark:text-white">Tarea completada: Revisión diseño</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Proyecto: Automatización Proceso Agroindustrial</p> | |
| <p class="text-xs text-gray-400 dark:text-gray-500">Hace 5 horas</p> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Activity 3 --> | |
| <div class="activity-item p-3 rounded-lg"> | |
| <div class="flex items-start"> | |
| <div class="p-2 bg-purple-100 text-purple-600 rounded-full mr-3 dark:bg-purple-900 dark:text-purple-400"> | |
| <i class="fas fa-user-plus"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium dark:text-white">Nuevo cliente agregado</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Minera del Sur - Barranquilla</p> | |
| <p class="text-xs text-gray-400 dark:text-gray-500">Ayer, 15:30</p> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Activity 4 --> | |
| <div class="activity-item p-3 rounded-lg"> | |
| <div class="flex items-start"> | |
| <div class="p-2 bg-orange-100 text-orange-500 rounded-full mr-3 dark:bg-orange-900 dark:text-orange-400"> | |
| <i class="fas fa-exclamation-triangle"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium dark:text-white">Retraso en entrega detectado</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Proyecto: Diseño Sistema HVAC</p> | |
| <p class="text-xs text-gray-400 dark:text-gray-500">Ayer, 10:15</p> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Activity 5 --> | |
| <div class="activity-item p-3 rounded-lg"> | |
| <div class="flex items-start"> | |
| <div class="p-2 bg-yellow-100 text-yellow-500 rounded-full mr-3 dark:bg-yellow-900 dark:text-yellow-400"> | |
| <i class="fas fa-comment-alt"></i> | |
| </div> | |
| <div> | |
| <p class="font-medium dark:text-white">Nuevo comentario en proyecto</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Modernización Planta Energética</p> | |
| <p class="text-xs text-gray-400 dark:text-gray-500">20/07/2023</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Client Locations --> | |
| <div class="bg-white dark:bg-slate-800 rounded-xl p-6 shadow-sm mb-6"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-tecnovagray dark:text-white">Ubicación de Clientes</h2> | |
| <div class="flex space-x-2"> | |
| <button class="px-3 py-1 text-xs bg-tecnovablue text-white rounded dark:bg-blue-600">Colombia</button> | |
| <button class="px-3 py-1 text-xs bg-gray-200 text-gray-700 rounded dark:bg-gray-700 dark:text-gray-300">Internacional</button> | |
| </div> | |
| </div> | |
| <div class="grid grid-cols-1 md:grid-cols-2 gap-6"> | |
| <div class="chart-container"> | |
| <canvas id="clientLocationChart"></canvas> | |
| </div> | |
| <div class="flex items-center justify-center"> | |
| <div class="text-center"> | |
| <i class="fas fa-map-marked-alt text-5xl text-gray-400 mb-3"></i> | |
| <p class="text-gray-500 dark:text-gray-400">Mapa de ubicación de clientes</p> | |
| <p class="text-sm text-gray-400 dark:text-gray-500">Integración con Google Maps</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Projects Section --> | |
| <div id="projects-section" class="tab-content"> | |
| <!-- Projects content here --> | |
| </div> | |
| <!-- Clients Section --> | |
| <div id="clients-section" class="tab-content"> | |
| <!-- Bento Box Grid --> | |
| <div class="bento-grid mb-6"> | |
| <!-- Card 1: Total Clients --> | |
| <div class="bento-card bg-white dark:bg-slate-800"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500 dark:text-gray-400">Clientes Totales</p> | |
| <h3 class="text-2xl font-bold text-tecnovablue dark:text-blue-400">24</h3> | |
| </div> | |
| <div class="p-3 rounded-full bg-blue-100 text-tecnovablue dark:bg-blue-900 dark:text-blue-400"> | |
| <i class="fas fa-users text-xl"></i> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <div class="flex items-center justify-between text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400">Nuevos este mes: 5</span> | |
| <span class="font-medium">+20%</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2 mt-1 dark:bg-gray-700"> | |
| <div class="bg-tecnovablue h-2 rounded-full dark:bg-blue-500" style="width: 20%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Card 2: Client Types --> | |
| <div class="bento-card bg-white dark:bg-slate-800"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500 dark:text-gray-400">Empresas</p> | |
| <h3 class="text-2xl font-bold text-tecnovagreen dark:text-green-400">18</h3> | |
| </div> | |
| <div class="p-3 rounded-full bg-green-100 text-tecnovagreen dark:bg-green-900 dark:text-green-400"> | |
| <i class="fas fa-building text-xl"></i> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <div class="flex items-center justify-between text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400">Personas naturales: 6</span> | |
| <span class="font-medium">75%</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2 mt-1 dark:bg-gray-700"> | |
| <div class="bg-tecnovagreen h-2 rounded-full dark:bg-green-500" style="width: 75%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Card 3: Active Projects --> | |
| <div class="bento-card bg-white dark:bg-slate-800"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500 dark:text-gray-400">Proyectos Activos</p> | |
| <h3 class="text-2xl font-bold text-purple-600 dark:text-purple-400">12</h3> | |
| </div> | |
| <div class="p-3 rounded-full bg-purple-100 text-purple-600 dark:bg-purple-900 dark:text-purple-400"> | |
| <i class="fas fa-project-diagram text-xl"></i> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <div class="flex items-center justify-between text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400">Por cliente: 0.5</span> | |
| <span class="font-medium">50%</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2 mt-1 dark:bg-gray-700"> | |
| <div class="bg-purple-600 h-2 rounded-full dark:bg-purple-500" style="width: 50%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Card 4: Revenue --> | |
| <div class="bento-card bg-white dark:bg-slate-800"> | |
| <div class="flex items-center justify-between"> | |
| <div> | |
| <p class="text-gray-500 dark:text-gray-400">Ingresos Totales</p> | |
| <h3 class="text-2xl font-bold text-orange-500 dark:text-orange-400">$45.2M</h3> | |
| </div> | |
| <div class="p-3 rounded-full bg-orange-100 text-orange-500 dark:bg-orange-900 dark:text-orange-400"> | |
| <i class="fas fa-dollar-sign text-xl"></i> | |
| </div> | |
| </div> | |
| <div class="mt-4"> | |
| <div class="flex items-center justify-between text-sm"> | |
| <span class="text-gray-500 dark:text-gray-400">Por cliente: $1.88M</span> | |
| <span class="font-medium">+15%</span> | |
| </div> | |
| <div class="w-full bg-gray-200 rounded-full h-2 mt-1 dark:bg-gray-700"> | |
| <div class="bg-orange-500 h-2 rounded-full dark:bg-orange-400" style="width: 15%"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Card 5: Client Locations (Large) --> | |
| <div class="bento-card bento-card-lg bg-white dark:bg-slate-800"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-tecnovagray dark:text-white">Ubicación de Clientes</h2> | |
| <div class="flex space-x-2"> | |
| <button class="px-3 py-1 text-xs bg-tecnovablue text-white rounded dark:bg-blue-600">Ciudades</button> | |
| <button class="px-3 py-1 text-xs bg-gray-200 text-gray-700 rounded dark:bg-gray-700 dark:text-gray-300">Regiones</button> | |
| </div> | |
| </div> | |
| <div class="chart-container"> | |
| <canvas id="clientLocationChart"></canvas> | |
| </div> | |
| </div> | |
| <!-- Card 6: Client Type Distribution (Large) --> | |
| <div class="bento-card bento-card-lg bg-white dark:bg-slate-800"> | |
| <h3 class="text-lg font-semibold mb-4 dark:text-white">Distribución por Tipo</h3> | |
| <div class="chart-container"> | |
| <canvas id="clientTypeChart"></canvas> | |
| </div> | |
| </div> | |
| <!-- Card 7: Top Clients (Large) --> | |
| <div class="bento-card bento-card-lg bg-white dark:bg-slate-800"> | |
| <div class="flex items-center justify-between mb-4"> | |
| <h2 class="text-lg font-semibold text-tecnovagray dark:text-white">Clientes Principales</h2> | |
| <a href="#" class="text-sm text-tecnovablue hover:underline dark:text-blue-400">Ver todos</a> | |
| </div> | |
| <div class="space-y-4"> | |
| <div class="flex items-center p-3 bg-gray-50 rounded-lg dark:bg-slate-700"> | |
| <div class="client-avatar bg-tecnovablue mr-4">ER</div> | |
| <div class="flex-1"> | |
| <h3 class="font-medium dark:text-white">Energía Renovable SAS</h3> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Bogotá, Colombia</p> | |
| </div> | |
| <div class="text-right"> | |
| <p class="font-medium text-tecnovablue dark:text-blue-400">$12.5M</p> | |
| <p class="text-xs text-gray-500 dark:text-gray-400">2 proyectos</p> | |
| </div> | |
| </div> | |
| <div class="flex items-center p-3 bg-gray-50 rounded-lg dark:bg-slate-700"> | |
| <div class="client-avatar bg-tecnovagreen mr-4">AL</div> | |
| <div class="flex-1"> | |
| <h3 class="font-medium dark:text-white">Agropecuaria La Esperanza</h3> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Medellín, Colombia</p> | |
| </div> | |
| <div class="text-right"> | |
| <p class="font-medium text-tecnovagreen dark:text-green-400">$8.2M</p> | |
| <p class="text-xs text-gray-500 dark:text-gray-400">1 proyecto</p> | |
| </div> | |
| </div> | |
| <div class="flex items-center p-3 bg-gray-50 rounded-lg dark:bg-slate-700"> | |
| <div class="client-avatar bg-purple-600 mr-4">CE</div> | |
| <div class="flex-1"> | |
| <h3 class="font-medium dark:text-white">Constructora Edificar SAS</h3> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Cali, Colombia</p> | |
| </div> | |
| <div class="text-right"> | |
| <p class="font-medium text-purple-600 dark:text-purple-400">$6.7M</p> | |
| <p class="text-xs text-gray-500 dark:text-gray-400">1 proyecto</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Card 8: Client Map (Large) --> | |
| <div class="bento-card bento-card-lg bg-white dark:bg-slate-800"> | |
| <h3 class="text-lg font-semibold mb-4 dark:text-white">Mapa de Clientes</h3> | |
| <div class="map-container bg-gray-200 dark:bg-gray-700 flex items-center justify-center"> | |
| <div class="text-center p-6"> | |
| <i class="fas fa-map-marked-alt text-4xl text-gray-400 mb-3"></i> | |
| <p class="text-gray-500 dark:text-gray-400">Mapa de ubicación de clientes</p> | |
| <p class="text-sm text-gray-400 dark:text-gray-500">Integración con Google Maps</p> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Card 9: Clients List (Full Width) --> | |
| <div class="bento-card bento-card-full bg-white dark:bg-slate-800"> | |
| <div class="flex items-center justify-between mb-6"> | |
| <h2 class="text-xl font-semibold text-tecnovagray dark:text-white">Lista de Clientes</h2> | |
| <div class="flex space-x-3"> | |
| <button class="px-4 py-2 bg-tecnovablue text-white rounded-lg hover:bg-blue-700 transition dark:bg-blue-600 dark:hover:bg-blue-700"> | |
| <i class="fas fa-plus mr-2"></i> Nuevo Cliente | |
| </button> | |
| <button class="px-4 py-2 border border-gray-300 rounded-lg hover:bg-gray-100 transition dark:border-gray-600 dark:hover:bg-gray-700"> | |
| <i class="fas fa-filter mr-2"></i> Filtros | |
| </button> | |
| </div> | |
| </div> | |
| <div class="overflow-x-auto custom-scrollbar"> | |
| <table class="data-table w-full"> | |
| <thead> | |
| <tr> | |
| <th>Cliente</th> | |
| <th>Contacto</th> | |
| <th>Dirección</th> | |
| <th>Teléfono</th> | |
| <th>Proyectos</th> | |
| <th>Estado</th> | |
| <th>Acciones</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr class="hover:bg-gray-50 dark:hover:bg-slate-700"> | |
| <td class="flex items-center py-4"> | |
| <div class="client-avatar bg-tecnovablue mr-3">ER</div> | |
| <div> | |
| <p class="font-medium dark:text-white">Energía Renovable SAS</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">NIT: 900.123.456-7</p> | |
| </div> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">Carlos Méndez</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">carlos@energia.com</p> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">Calle 123 #45-67</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Bogotá, Colombia</p> | |
| </td> | |
| <td class="dark:text-white">+57 1 2345678</td> | |
| <td> | |
| <span class="px-2 py-1 bg-blue-100 text-blue-800 rounded-full text-xs dark:bg-blue-900 dark:text-blue-400">2 activos</span> | |
| </td> | |
| <td> | |
| <span class="status-badge status-active">Activo</span> | |
| </td> | |
| <td> | |
| <button class="text-gray-500 hover:text-tecnovablue dark:hover:text-blue-400 mr-2"> | |
| <i class="fas fa-eye"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-tecnovagreen dark:hover:text-green-400 mr-2"> | |
| <i class="fas fa-edit"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-red-500 dark:hover:text-red-400"> | |
| <i class="fas fa-trash"></i> | |
| </button> | |
| </td> | |
| </tr> | |
| <tr class="hover:bg-gray-50 dark:hover:bg-slate-700"> | |
| <td class="flex items-center py-4"> | |
| <div class="client-avatar bg-tecnovagreen mr-3">AL</div> | |
| <div> | |
| <p class="font-medium dark:text-white">Agropecuaria La Esperanza</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">NIT: 890.123.456-1</p> | |
| </div> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">María González</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">maria@agroesperanza.com</p> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">Carrera 56 #12-34</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Medellín, Colombia</p> | |
| </td> | |
| <td class="dark:text-white">+57 4 5678901</td> | |
| <td> | |
| <span class="px-2 py-1 bg-green-100 text-green-800 rounded-full text-xs dark:bg-green-900 dark:text-green-400">1 activo</span> | |
| </td> | |
| <td> | |
| <span class="status-badge status-active">Activo</span> | |
| </td> | |
| <td> | |
| <button class="text-gray-500 hover:text-tecnovablue dark:hover:text-blue-400 mr-2"> | |
| <i class="fas fa-eye"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-tecnovagreen dark:hover:text-green-400 mr-2"> | |
| <i class="fas fa-edit"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-red-500 dark:hover:text-red-400"> | |
| <i class="fas fa-trash"></i> | |
| </button> | |
| </td> | |
| </tr> | |
| <tr class="hover:bg-gray-50 dark:hover:bg-slate-700"> | |
| <td class="flex items-center py-4"> | |
| <div class="client-avatar bg-purple-600 mr-3">CE</div> | |
| <div> | |
| <p class="font-medium dark:text-white">Constructora Edificar SAS</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">NIT: 800.123.456-2</p> | |
| </div> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">Juan Pérez</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">juan@constructora.com</p> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">Avenida 8 #23-45</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Cali, Colombia</p> | |
| </td> | |
| <td class="dark:text-white">+57 2 3456789</td> | |
| <td> | |
| <span class="px-2 py-1 bg-purple-100 text-purple-800 rounded-full text-xs dark:bg-purple-900 dark:text-purple-400">1 activo</span> | |
| </td> | |
| <td> | |
| <span class="status-badge status-active">Activo</span> | |
| </td> | |
| <td> | |
| <button class="text-gray-500 hover:text-tecnovablue dark:hover:text-blue-400 mr-2"> | |
| <i class="fas fa-eye"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-tecnovagreen dark:hover:text-green-400 mr-2"> | |
| <i class="fas fa-edit"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-red-500 dark:hover:text-red-400"> | |
| <i class="fas fa-trash"></i> | |
| </button> | |
| </td> | |
| </tr> | |
| <tr class="hover:bg-gray-50 dark:hover:bg-slate-700"> | |
| <td class="flex items-center py-4"> | |
| <div class="client-avatar bg-orange-500 mr-3">MS</div> | |
| <div> | |
| <p class="font-medium dark:text-white">Minera del Sur</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">NIT: 700.123.456-3</p> | |
| </div> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">Roberto Sánchez</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">roberto@minera.com</p> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">Calle 10 #5-67</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Barranquilla, Colombia</p> | |
| </td> | |
| <td class="dark:text-white">+57 5 6789012</td> | |
| <td> | |
| <span class="px-2 py-1 bg-orange-100 text-orange-800 rounded-full text-xs dark:bg-orange-900 dark:text-orange-400">1 activo</span> | |
| </td> | |
| <td> | |
| <span class="status-badge status-active">Activo</span> | |
| </td> | |
| <td> | |
| <button class="text-gray-500 hover:text-tecnovablue dark:hover:text-blue-400 mr-2"> | |
| <i class="fas fa-eye"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-tecnovagreen dark:hover:text-green-400 mr-2"> | |
| <i class="fas fa-edit"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-red-500 dark:hover:text-red-400"> | |
| <i class="fas fa-trash"></i> | |
| </button> | |
| </td> | |
| </tr> | |
| <tr class="hover:bg-gray-50 dark:hover:bg-slate-700"> | |
| <td class="flex items-center py-4"> | |
| <div class="client-avatar bg-yellow-500 mr-3">AE</div> | |
| <div> | |
| <p class="font-medium dark:text-white">Alimentos Ecológicos</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">NIT: 600.123.456-4</p> | |
| </div> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">Laura Ramírez</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">laura@alimentoseco.com</p> | |
| </td> | |
| <td> | |
| <p class="dark:text-white">Carrera 34 #12-56</p> | |
| <p class="text-sm text-gray-500 dark:text-gray-400">Bucaramanga, Colombia</p> | |
| </td> | |
| <td class="dark:text-white">+57 7 7890123</td> | |
| <td> | |
| <span class="px-2 py-1 bg-gray-200 text-gray-800 rounded-full text-xs dark:bg-gray-700 dark:text-gray-400">0 activos</span> | |
| </td> | |
| <td> | |
| <span class="status-badge status-pending">Inactivo</span> | |
| </td> | |
| <td> | |
| <button class="text-gray-500 hover:text-tecnovablue dark:hover:text-blue-400 mr-2"> | |
| <i class="fas fa-eye"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-tecnovagreen dark:hover:text-green-400 mr-2"> | |
| <i class="fas fa-edit"></i> | |
| </button> | |
| <button class="text-gray-500 hover:text-red-500 dark:hover:text-red-400"> | |
| <i class="fas fa-trash"></i> | |
| </button> | |
| </td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| <div class="flex items-center justify-between mt-6"> | |
| <div class="text-sm text-gray-500 dark:text-gray-400"> | |
| Mostrando 1 a 5 de 24 clientes | |
| </div> | |
| <div class="flex space-x-2"> | |
| <button class="px-3 py-1 border rounded-lg text-gray-500 hover:bg-gray-100 dark:hover:bg-gray-700"> | |
| <i class="fas fa-chevron-left"></i> | |
| </button> | |
| <button class="px-3 py-1 bg-tecnovablue text-white rounded-lg dark:bg-blue-600">1</button> | |
| <button class="px-3 py-1 border rounded-lg text-gray-500 hover:bg-gray-100 dark:hover:bg-gray-700">2</button> | |
| <button class="px-3 py-1 border rounded-lg text-gray-500 hover:bg-gray-100 dark:hover:bg-gray-700">3</button> | |
| <button class="px-3 py-1 border rounded-lg text-gray-500 hover:bg-gray-100 dark:hover:bg-gray-700"> | |
| <i class="fas fa-chevron-right"></i> | |
| </button> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Tasks Section --> | |
| <div id="tasks-section" class="tab-content"> | |
| <!-- Tasks content here --> | |
| </div> | |
| <!-- Invoicing Section --> | |
| <div id="invoicing-section" class="tab-content"> | |
| <!-- Invoicing content here --> | |
| </div> | |
| <!-- Reports Section --> | |
| <div id="reports-section" class="tab-content"> | |
| <!-- Reports content here --> | |
| </div> | |
| <!-- Inventory Section --> | |
| <div id="inventory-section" class="tab-content"> | |
| <!-- Inventory content here --> | |
| </div> | |
| <!-- Settings Section --> | |
| <div id="settings-section" class="tab-content"> | |
| <!-- Settings content here --> | |
| </div> | |
| <!-- Users Section --> | |
| <div id="users-section" class="tab-content"> | |
| <!-- Users content here --> | |
| </div> | |
| </main> | |
| </div> | |
| </div> | |
| <script> | |
| // Toggle sidebar | |
| document.getElementById('toggle-sidebar').addEventListener('click', function() { | |
| const sidebar = document.getElementById('sidebar'); | |
| const mainContent = document.getElementById('main-content'); | |
| const logoText = document.getElementById('logo-text'); | |
| const userInfo = document.getElementById('user-info'); | |
| sidebar.classList.toggle('sidebar-collapsed'); | |
| sidebar.classList.toggle('sidebar-expanded'); | |
| mainContent.classList.toggle('content-collapsed'); | |
| mainContent.classList.toggle('content-expanded'); | |
| if (sidebar.classList.contains('sidebar-collapsed')) { | |
| logoText.classList.add('hidden'); | |
| userInfo.classList.add('hidden'); | |
| } else { | |
| logoText.classList.remove('hidden'); | |
| userInfo.classList.remove('hidden'); | |
| } | |
| }); | |
| // Toggle dark mode | |
| document.getElementById('theme-toggle').addEventListener('click', function() { | |
| document.documentElement.classList.toggle('dark'); | |
| const icon = document.getElementById('theme-icon'); | |
| if (document.documentElement.classList.contains('dark')) { | |
| icon.classList.remove('fa-moon'); | |
| icon.classList.add('fa-sun'); | |
| } else { | |
| icon.classList.remove('fa-sun'); | |
| icon.classList.add('fa-moon'); | |
| } | |
| }); | |
| // Switch between tabs | |
| document.querySelectorAll('[data-section]').forEach(link => { | |
| link.addEventListener('click', function(e) { | |
| e.preventDefault(); | |
| const sectionId = this.getAttribute('data-section') + '-section'; | |
| // Update active state in sidebar | |
| document.querySelectorAll('[data-section]').forEach(item => { | |
| item.classList.remove('active'); | |
| item.classList.add('text-white/80'); | |
| item.classList.remove('text-white'); | |
| item.classList.remove('bg-white/20'); | |
| }); | |
| this.classList.add('active'); | |
| this.classList.remove('text-white/80'); | |
| this.classList.add('text-white'); | |
| this.classList.add('bg-white/20'); | |
| // Update page title | |
| const pageTitle = document.getElementById('page-title'); | |
| pageTitle.textContent = this.querySelector('span').textContent; | |
| // Show the selected section | |
| document.querySelectorAll('.tab-content').forEach(section => { | |
| section.classList.remove('active'); | |
| }); | |
| document.getElementById(sectionId).classList.add('active'); | |
| }); | |
| }); | |
| // Initialize charts | |
| document.addEventListener('DOMContentLoaded', function() { | |
| // Revenue Chart | |
| const revenueCtx = document.getElementById('revenueChart').getContext('2d'); | |
| const revenueChart = new Chart(revenueCtx, { | |
| type: 'line', | |
| data: { | |
| labels: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], | |
| datasets: [{ | |
| label: 'Ingresos (millones)', | |
| data: [12, 15, 18, 14, 20, 22, 25, 28, 24, 30, 32, 35], | |
| backgroundColor: 'rgba(26, 75, 140, 0.1)', | |
| borderColor: 'rgba(26, 75, 140, 1)', | |
| borderWidth: 2, | |
| tension: 0.3, | |
| fill: true | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| plugins: { | |
| legend: { | |
| display: false | |
| } | |
| }, | |
| scales: { | |
| y: { | |
| beginAtZero: true, | |
| grid: { | |
| color: 'rgba(0, 0, 0, 0.05)' | |
| } | |
| }, | |
| x: { | |
| grid: { | |
| display: false | |
| } | |
| } | |
| } | |
| } | |
| }); | |
| // Project Status Chart | |
| const projectStatusCtx = document.getElementById('projectStatusChart').getContext('2d'); | |
| const projectStatusChart = new Chart(projectStatusCtx, { | |
| type: 'doughnut', | |
| data: { | |
| labels: ['Completados', 'En progreso', 'En riesgo', 'Atrasados'], | |
| datasets: [{ | |
| data: [5, 12, 3, 2], | |
| backgroundColor: [ | |
| 'rgba(46, 133, 110, 0.7)', | |
| 'rgba(26, 75, 140, 0.7)', | |
| 'rgba(245, 158, 11, 0.7)', | |
| 'rgba(239, 68, 68, 0.7)' | |
| ], | |
| borderColor: [ | |
| 'rgba(46, 133, 110, 1)', | |
| 'rgba(26, 75, 140, 1)', | |
| 'rgba(245, 158, 11, 1)', | |
| 'rgba(239, 68, 68, 1)' | |
| ], | |
| borderWidth: 1 | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| plugins: { | |
| legend: { | |
| position: 'right', | |
| }, | |
| tooltip: { | |
| callbacks: { | |
| label: function(context) { | |
| const label = context.label || ''; | |
| const value = context.raw || 0; | |
| const total = context.dataset.data.reduce((a, b) => a + b, 0); | |
| const percentage = Math.round((value / total) * 100); | |
| return `${label}: ${value} (${percentage}%)`; | |
| } | |
| } | |
| } | |
| }, | |
| cutout: '70%' | |
| } | |
| }); | |
| // Client Location Chart | |
| const clientLocationCtx = document.getElementById('clientLocationChart').getContext('2d'); | |
| const clientLocationChart = new Chart(clientLocationCtx, { | |
| type: 'bar', | |
| data: { | |
| labels: ['Bogotá', 'Medellín', 'Cali', 'Barranquilla', 'Bucaramanga'], | |
| datasets: [{ | |
| label: 'Clientes por ciudad', | |
| data: [8, 5, 4, 3, 2], | |
| backgroundColor: [ | |
| 'rgba(26, 75, 140, 0.7)', | |
| 'rgba(46, 133, 110, 0.7)', | |
| 'rgba(99, 102, 241, 0.7)', | |
| 'rgba(245, 158, 11, 0.7)', | |
| 'rgba(239, 68, 68, 0.7)' | |
| ], | |
| borderColor: [ | |
| 'rgba(26, 75, 140, 1)', | |
| 'rgba(46, 133, 110, 1)', | |
| 'rgba(99, 102, 241, 1)', | |
| 'rgba(245, 158, 11, 1)', | |
| 'rgba(239, 68, 68, 1)' | |
| ], | |
| borderWidth: 1, | |
| borderRadius: 4 | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| plugins: { | |
| legend: { | |
| display: false | |
| } | |
| }, | |
| scales: { | |
| y: { | |
| beginAtZero: true, | |
| ticks: { | |
| stepSize: 1 | |
| } | |
| } | |
| } | |
| } | |
| }); | |
| // Client Type Chart | |
| const clientTypeCtx = document.getElementById('clientTypeChart').getContext('2d'); | |
| const clientTypeChart = new Chart(clientTypeCtx, { | |
| type: 'doughnut', | |
| data: { | |
| labels: ['Empresas', 'Personas naturales'], | |
| datasets: [{ | |
| data: [18, 6], | |
| backgroundColor: [ | |
| 'rgba(26, 75, 140, 0.7)', | |
| 'rgba(46, 133, 110, 0.7)' | |
| ], | |
| borderColor: [ | |
| 'rgba(26, 75, 140, 1)', | |
| 'rgba(46, 133, 110, 1)' | |
| ], | |
| borderWidth: 1 | |
| }] | |
| }, | |
| options: { | |
| responsive: true, | |
| maintainAspectRatio: false, | |
| plugins: { | |
| legend: { | |
| position: 'right', | |
| }, | |
| tooltip: { | |
| callbacks: { | |
| label: function(context) { | |
| const label = context.label || ''; | |
| const value = context.raw || 0; | |
| const total = context.dataset.data.reduce((a, b) => a + b, 0); | |
| const percentage = Math.round((value / total) * 100); | |
| return `${label}: ${value} (${percentage}%)`; | |
| } | |
| } | |
| } | |
| }, | |
| cutout: '70%' | |
| } | |
| }); | |
| }); | |
| </script> | |
| <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=VedetteStore/tecnova-crm" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> | |
| </html> |