| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Customs Brokerage Dashboard</title> |
| <script src="https://cdn.tailwindcss.com"></script> |
| <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
| <script> |
| tailwind.config = { |
| theme: { |
| extend: { |
| colors: { |
| primary: '#1a56db', |
| secondary: '#1d4ed8', |
| accent: '#3b82f6', |
| success: '#10b981', |
| warning: '#f59e0b', |
| danger: '#ef4444', |
| dark: '#0f172a', |
| light: '#f8fafc' |
| } |
| } |
| } |
| } |
| </script> |
| <style> |
| .scrollbar-hide::-webkit-scrollbar { |
| display: none; |
| } |
| .scrollbar-hide { |
| -ms-overflow-style: none; |
| scrollbar-width: none; |
| } |
| @media (prefers-color-scheme: dark) { |
| body { |
| background-color: #111827; |
| color: #f3f4f6; |
| } |
| } |
| </style> |
| </head> |
| <body class="bg-gray-50 text-gray-900 antialiased"> |
| |
| <header class="bg-white dark:bg-gray-800 shadow-sm py-4 px-6 flex flex-col sm:flex-row items-center justify-between"> |
| <div class="flex items-center space-x-3 mb-4 sm:mb-0"> |
| <div class="bg-primary w-10 h-10 rounded-lg flex items-center justify-center"> |
| <i class="fas fa-ship text-white text-lg"></i> |
| </div> |
| <h1 class="text-xl font-bold dark:text-white">Customs Brokerage Dashboard</h1> |
| </div> |
| |
| <div class="flex flex-wrap gap-3 items-center justify-center"> |
| <div class="flex items-center bg-gray-100 dark:bg-gray-700 rounded-lg px-3 py-2"> |
| <i class="fas fa-calendar text-gray-500 dark:text-gray-400 mr-2"></i> |
| <select id="date-range" class="bg-transparent text-sm border-none focus:ring-0"> |
| <option>Last 7 Days</option> |
| <option selected>Last 30 Days</option> |
| <option>Month to Date</option> |
| <option>Quarter to Date</option> |
| <option>Year to Date</option> |
| <option>Custom Range</option> |
| </select> |
| </div> |
| |
| <div class="flex items-center text-sm text-gray-500 dark:text-gray-400"> |
| <i class="fas fa-sync-alt mr-2"></i> |
| <span>Updated: <span id="last-updated">Now</span></span> |
| </div> |
| |
| <div class="relative"> |
| <button id="user-menu" class="h-10 w-10 rounded-full bg-primary flex items-center justify-center text-white"> |
| <i class="fas fa-user"></i> |
| </button> |
| <div id="user-dropdown" class="hidden absolute right-0 mt-2 w-48 bg-white dark:bg-gray-800 rounded-md shadow-lg py-2 z-20"> |
| <a href="#" class="px-4 py-2 text-sm hover:bg-gray-100 dark:hover:bg-gray-700 block"><i class="fas fa-user mr-2"></i> Profile</a> |
| <a href="#" class="px-4 py-2 text-sm hover:bg-gray-100 dark:hover:bg-gray-700 block"><i class="fas fa-cog mr-2"></i> Settings</a> |
| <a href="#" class="px-4 py-2 text-sm hover:bg-gray-100 dark:hover:bg-gray-700 block"><i class="fas fa-sign-out-alt mr-2"></i> Logout</a> |
| </div> |
| </div> |
| </div> |
| </header> |
|
|
| |
| <div class="flex flex-col lg:flex-row p-4 gap-4 min-h-screen"> |
| |
| <aside class="w-full lg:w-64 bg-white dark:bg-gray-800 rounded-lg shadow p-4 h-fit lg:sticky lg:top-4"> |
| <h2 class="text-lg font-semibold mb-4 dark:text-white">Filters</h2> |
| |
| <div class="space-y-4"> |
| <div> |
| <label class="block text-sm font-medium mb-1 dark:text-gray-300">Importer/Exporter</label> |
| <div class="relative"> |
| <input type="text" placeholder="Search..." class="w-full rounded-lg border-gray-300 dark:bg-gray-700 dark:border-gray-600 px-3 py-2 text-sm"> |
| </div> |
| </div> |
| |
| <div> |
| <label class="block text-sm font-medium mb-1 dark:text-gray-300">Port of Entry/Exit</label> |
| <select class="w-full rounded-lg border-gray-300 dark:bg-gray-700 dark:border-gray-600 px-3 py-2 text-sm"> |
| <option>All Ports</option> |
| <option>Port of Los Angeles</option> |
| <option>Port of Long Beach</option> |
| <option>Port of New York</option> |
| <option>Port of Savannah</option> |
| </select> |
| </div> |
| |
| <div> |
| <label class="block text-sm font-medium mb-1 dark:text-gray-300">Mode of Transport</label> |
| <div class="space-y-2"> |
| <div class="flex items-center"> |
| <input type="checkbox" id="air" class="rounded text-primary"> |
| <label for="air" class="ml-2 text-sm dark:text-gray-300">Air</label> |
| </div> |
| <div class="flex items-center"> |
| <input type="checkbox" id="sea" class="rounded text-primary" checked> |
| <label for="sea" class="ml-2 text-sm dark:text-gray-300">Sea</label> |
| </div> |
| <div class="flex items-center"> |
| <input type="checkbox" id="land" class="rounded text-primary"> |
| <label for="land" class="ml-2 text-sm dark:text-gray-300">Land</label> |
| </div> |
| <div class="flex items-center"> |
| <input type="checkbox" id="rail" class="rounded text-primary" checked> |
| <label for="rail" class="ml-2 text-sm dark:text-gray-300">Rail</label> |
| </div> |
| </div> |
| </div> |
| |
| <div> |
| <label class="block text-sm font-medium mb-1 dark:text-gray-300">Shipment Status</label> |
| <select class="w-full rounded-lg border-gray-300 dark:bg-gray-700 dark:border-gray-600 px-3 py-2 text-sm"> |
| <option>All Statuses</option> |
| <option>Pending Clearance</option> |
| <option>Cleared</option> |
| <option>Under Examination</option> |
| <option>Delayed</option> |
| <option>Released</option> |
| </select> |
| </div> |
| |
| <div> |
| <label class="block text-sm font-medium mb-1 dark:text-gray-300">HS Code Category</label> |
| <select class="w-full rounded-lg border-gray-300 dark:bg-gray-700 dark:border-gray-600 px-3 py-2 text-sm"> |
| <option>All Categories</option> |
| <option>Machinery & Electronics</option> |
| <option>Textiles & Apparel</option> |
| <option>Automotive Parts</option> |
| <option>Food Products</option> |
| </select> |
| </div> |
| |
| <div> |
| <label class="block text-sm font-medium mb-1 dark:text-gray-300">Broker/Agent</label> |
| <select class="w-full rounded-lg border-gray-300 dark:bg-gray-700 dark:border-gray-600 px-3 py-2 text-sm"> |
| <option>All Brokers</option> |
| <option>Global Shipping Co</option> |
| <option>Oceanwide Logistics</option> |
| <option>Continent Express</option> |
| </select> |
| </div> |
| |
| <button class="w-full bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-200 rounded-lg py-2 text-sm font-medium hover:bg-gray-300 dark:hover:bg-gray-600"> |
| <i class="fas fa-times mr-2"></i> Clear All Filters |
| </button> |
| </div> |
| </aside> |
|
|
| |
| <main class="flex-1"> |
| |
| <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mb-4"> |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-5 border-l-4 border-primary"> |
| <p class="text-gray-500 dark:text-gray-400 text-sm">Total Shipments</p> |
| <div class="flex items-end justify-between mt-2"> |
| <h3 class="text-2xl font-bold dark:text-white">1,247</h3> |
| <div class="flex items-center text-success text-sm font-semibold"> |
| <i class="fas fa-arrow-up mr-1"></i> 12.5% |
| </div> |
| </div> |
| </div> |
| |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-5 border-l-4 border-secondary"> |
| <p class="text-gray-500 dark:text-gray-400 text-sm">Total Declared Value</p> |
| <div class="flex items-end justify-between mt-2"> |
| <h3 class="text-2xl font-bold dark:text-white">$5.2M</h3> |
| <div class="flex items-center text-success text-sm font-semibold"> |
| <i class="fas fa-arrow-up mr-1"></i> 8.3% |
| </div> |
| </div> |
| </div> |
| |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-5 border-l-4 border-accent"> |
| <p class="text-gray-500 dark:text-gray-400 text-sm">Duties & Taxes Paid</p> |
| <div class="flex items-end justify-between mt-2"> |
| <h3 class="text-2xl font-bold dark:text-white">$780K</h3> |
| <div class="flex items-center text-danger text-sm font-semibold"> |
| <i class="fas fa-arrow-down mr-1"></i> 2.1% |
| </div> |
| </div> |
| </div> |
| |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-5 border-l-4 border-success"> |
| <p class="text-gray-500 dark:text-gray-400 text-sm">Avg. Clearance Time</p> |
| <div class="flex items-end justify-between mt-2"> |
| <h3 class="text-2xl font-bold dark:text-white">48h</h3> |
| <div class="flex items-center text-success text-sm font-semibold"> |
| <i class="fas fa-arrow-down mr-1"></i> 10.2% |
| </div> |
| </div> |
| </div> |
| |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-5 border-l-4 border-warning"> |
| <p class="text-gray-500 dark:text-gray-400 text-sm">Compliance Rate</p> |
| <div class="flex items-end justify-between mt-2"> |
| <h3 class="text-2xl font-bold dark:text-white">98.4%</h3> |
| <div class="flex items-center text-success text-sm font-semibold"> |
| <i class="fas fa-arrow-up mr-1"></i> 1.5% |
| </div> |
| </div> |
| </div> |
| |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-5 border-l-4 border-danger"> |
| <p class="text-gray-500 dark:text-gray-400 text-sm">Shipments on Hold</p> |
| <div class="flex items-end justify-between mt-2"> |
| <h3 class="text-2xl font-bold dark:text-white">15</h3> |
| <div class="flex items-center text-danger text-sm font-semibold"> |
| <i class="fas fa-arrow-up mr-1"></i> 15% |
| </div> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="grid grid-cols-1 lg:grid-cols-2 gap-4 mb-4"> |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-4"> |
| <div class="flex justify-between items-center mb-4"> |
| <h3 class="font-semibold dark:text-white">Shipments by Status</h3> |
| <button class="text-xs bg-gray-100 dark:bg-gray-700 rounded-full px-3 py-1"> |
| <i class="fas fa-download mr-1"></i> Export |
| </button> |
| </div> |
| <div class="h-64"> |
| <canvas id="statusChart"></canvas> |
| </div> |
| </div> |
| |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-4"> |
| <div class="flex justify-between items-center mb-4"> |
| <h3 class="font-semibold dark:text-white">Duties & Taxes by Month</h3> |
| <button class="text-xs bg-gray-100 dark:bg-gray-700 rounded-full px-3 py-1"> |
| <i class="fas fa-download mr-1"></i> Export |
| </button> |
| </div> |
| <div class="h-64"> |
| <canvas id="dutiesChart"></canvas> |
| </div> |
| </div> |
| |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-4"> |
| <div class="flex justify-between items-center mb-4"> |
| <h3 class="font-semibold dark:text-white">Volume & Clearance Time</h3> |
| <button class="text-xs bg-gray-100 dark:bg-gray-700 rounded-full px-3 py-1"> |
| <i class="fas fa-download mr-1"></i> Export |
| </button> |
| </div> |
| <div class="h-64"> |
| <canvas id="volumeChart"></canvas> |
| </div> |
| </div> |
| |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-4"> |
| <div class="flex justify-between items-center mb-4"> |
| <h3 class="font-semibold dark:text-white">Top Importers by Value</h3> |
| <button class="text-xs bg-gray-100 dark:bg-gray-700 rounded-full px-3 py-1"> |
| <i class="fas fa-download mr-1"></i> Export |
| </button> |
| </div> |
| <div class="h-64"> |
| <canvas id="importersChart"></canvas> |
| </div> |
| </div> |
| </div> |
|
|
| |
| <div class="bg-white dark:bg-gray-800 rounded-lg shadow p-4"> |
| <div class="flex flex-col md:flex-row md:items-center justify-between mb-4"> |
| <h3 class="font-semibold dark:text-white mb-2 md:mb-0">Detailed Shipment Data</h3> |
| <div class="flex space-x-2"> |
| <div class="relative"> |
| <input type="text" placeholder="Search..." class="rounded-lg border-gray-300 dark:bg-gray-700 dark:border-gray-600 px-3 py-1 text-sm"> |
| <i class="fas fa-search absolute right-3 top-2 text-gray-400"></i> |
| </div> |
| <button class="bg-gray-100 dark:bg-gray-700 rounded-lg px-3 py-1 text-sm"> |
| <i class="fas fa-columns mr-1"></i> Columns |
| </button> |
| <button class="bg-primary text-white rounded-lg px-3 py-1 text-sm"> |
| <i class="fas fa-download mr-1"></i> CSV |
| </button> |
| </div> |
| </div> |
| |
| <div class="overflow-x-auto"> |
| <table class="w-full table-auto"> |
| <thead class="bg-gray-100 dark:bg-gray-700"> |
| <tr> |
| <th class="text-left py-3 px-4 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">Shipment ID <i class="fas fa-sort ml-1 text-gray-400"></i></th> |
| <th class="text-left py-3 px-4 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">Entry Date <i class="fas fa-sort ml-1 text-gray-400"></i></th> |
| <th class="text-left py-3 px-4 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">Importer</th> |
| <th class="text-left py-3 px-4 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">Port</th> |
| <th class="text-left py-3 px-4 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">Declared Value <i class="fas fa-sort ml-1 text-gray-400"></i></th> |
| <th class="text-left py-3 px-4 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">Duty Paid</th> |
| <th class="text-left py-3 px-4 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">Status</th> |
| <th class="text-left py-3 px-4 text-xs font-semibold uppercase text-gray-500 dark:text-gray-400">Action</th> |
| </tr> |
| </thead> |
| <tbody class="divide-y divide-gray-200 dark:divide-gray-700"> |
| <tr class="hover:bg-gray-50 dark:hover:bg-gray-900"> |
| <td class="py-3 px-4 text-sm font-medium dark:text-white">SHP-10234</td> |
| <td class="py-3 px-4 text-sm">04/15/2023</td> |
| <td class="py-3 px-4 text-sm">Globex Corp</td> |
| <td class="py-3 px-4 text-sm">Los Angeles</td> |
| <td class="py-3 px-4 text-sm">$125,000</td> |
| <td class="py-3 px-4 text-sm">$14,250</td> |
| <td class="py-3 px-4"><span class="bg-success text-white text-xs px-2 py-1 rounded-full">Cleared</span></td> |
| <td class="py-3 px-4 text-sm"><button class="text-primary hover:underline">View</button></td> |
| </tr> |
| <tr class="hover:bg-gray-50 dark:hover:bg-gray-900"> |
| <td class="py-3 px-4 text-sm font-medium dark:text-white">SHP-10235</td> |
| <td class="py-3 px-4 text-sm">04/18/2023</td> |
| <td class="py-3 px-4 text-sm">Acme Inc</td> |
| <td class="py-3 px-4 text-sm">New York</td> |
| <td class="py-3 px-4 text-sm">$89,500</td> |
| <td class="py-3 px-4 text-sm">$8,350</td> |
| <td class="py-3 px-4"><span class="bg-warning text-white text-xs px-2 py-1 rounded-full">Pending</span></td> |
| <td class="py-3 px-4 text-sm"><button class="text-primary hover:underline">View</button></td> |
| </tr> |
| <tr class="hover:bg-gray-50 dark:hover:bg-gray-900"> |
| <td class="py-3 px-4 text-sm font-medium dark:text-white">SHP-10236</td> |
| <td class="py-3 px-4 text-sm">04/20/2023</td> |
| <td class="py-3 px-4 text-sm">Wayne Ent</td> |
| <td class="py-3 px-4 text-sm">Savannah</td> |
| <td class="py-3 px-4 text-sm">$225,000</td> |
| <td class="py-3 px-4 text-sm">$28,750</td> |
| <td class="py-3 px-4"><span class="bg-danger text-white text-xs px-2 py-1 rounded-full">Delayed</span></td> |
| <td class="py-3 px-4 text-sm"><button class="text-primary hover:underline">View</button></td> |
| </tr> |
| <tr class="hover:bg-gray-50 dark:hover:bg-gray-900"> |
| <td class="py-3 px-4 text-sm font-medium dark:text-white">SHP-10237</td> |
| <td class="py-3 px-4 text-sm">04/22/2023</td> |
| <td class="py-3 px-4 text-sm">Stark Ind</td> |
| <td class="py-3 px-4 text-sm">Long Beach</td> |
| <td class="py-3 px-4 text-sm">$345,000</td> |
| <td class="py-3 px-4 text-sm">$42,500</td> |
| <td class="py-3 px-4"><span class="bg-secondary text-white text-xs px-2 py-1 rounded-full">Under Examination</span></td> |
| <td class="py-3 px-4 text-sm"><button class="text-primary hover:underline">View</button></td> |
| </tr> |
| <tr class="hover:bg-gray-50 dark:hover:bg-gray-900"> |
| <td class="py-3 px-4 text-sm font-medium dark:text-white">SHP-10238</td> |
| <td class="py-3 px-4 text-sm">04/24/2023</td> |
| <td class="py-3 px-4 text-sm">Initech Co</td> |
| <td class="py-3 px-4 text-sm">Miami</td> |
| <td class="py-3 px-4 text-sm">$78,200</td> |
| <td class="py-3 px-4 text-sm">$9,100</td> |
| <td class="py-3 px-4"><span class="bg-success text-white text-xs px-2 py-1 rounded-full">Cleared</span></td> |
| <td class="py-3 px-4 text-sm"><button class="text-primary hover:underline">View</button></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| |
| <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between mt-4"> |
| <div class="mb-4 sm:mb-0"> |
| <p class="text-sm text-gray-600 dark:text-gray-400">Showing <span class="font-medium">1</span> to <span class="font-medium">5</span> of <span class="font-medium">1247</span> entries</p> |
| </div> |
| <div> |
| <nav class="flex"> |
| <a href="#" class="mr-1 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 px-3 py-1 text-sm"><i class="fas fa-chevron-left"></i></a> |
| <a href="#" class="mr-1 rounded border border-gray-300 dark:border-gray-600 bg-primary text-white px-3 py-1 text-sm">1</a> |
| <a href="#" class="mr-1 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 px-3 py-1 text-sm">2</a> |
| <a href="#" class="mr-1 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 px-3 py-1 text-sm">3</a> |
| <a href="#" class="mr-1 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 px-3 py-1 text-sm">4</a> |
| <a href="#" class="mr-1 rounded border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 px-3 py-1 text-sm"><i class="fas fa-chevron-right"></i></a> |
| </nav> |
| </div> |
| </div> |
| </div> |
| </main> |
| </div> |
|
|
| <script> |
| |
| document.getElementById('user-menu').addEventListener('click', function() { |
| const dropdown = document.getElementById('user-dropdown'); |
| dropdown.classList.toggle('hidden'); |
| }); |
| |
| |
| document.addEventListener('click', function(event) { |
| const dropdown = document.getElementById('user-dropdown'); |
| const userMenu = document.getElementById('user-menu'); |
| if (!userMenu.contains(event.target) && !dropdown.contains(event.target)) { |
| dropdown.classList.add('hidden'); |
| } |
| }); |
| |
| |
| document.addEventListener('DOMContentLoaded', function() { |
| |
| const statusCtx = document.getElementById('statusChart').getContext('2d'); |
| const statusChart = new Chart(statusCtx, { |
| type: 'doughnut', |
| data: { |
| labels: ['Cleared', 'Pending', 'Under Examination', 'Delayed', 'Released'], |
| datasets: [{ |
| data: [52, 28, 12, 5, 3], |
| backgroundColor: [ |
| '#10b981', |
| '#3b82f6', |
| '#f59e0b', |
| '#ef4444', |
| '#8b5cf6' |
| ], |
| borderWidth: 0 |
| }] |
| }, |
| options: { |
| responsive: true, |
| maintainAspectRatio: false, |
| plugins: { |
| legend: { |
| position: 'right', |
| labels: { |
| font: { |
| size: 10 |
| }, |
| padding: 15 |
| } |
| } |
| } |
| } |
| }); |
| |
| |
| const dutiesCtx = document.getElementById('dutiesChart').getContext('2d'); |
| const dutiesChart = new Chart(dutiesCtx, { |
| type: 'bar', |
| data: { |
| labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'], |
| datasets: [{ |
| label: 'Duties & Taxes ($)', |
| data: [120, 145, 130, 155, 140, 160, 150], |
| backgroundColor: '#3b82f6', |
| borderRadius: 3 |
| }] |
| }, |
| options: { |
| responsive: true, |
| maintainAspectRatio: false, |
| scales: { |
| y: { |
| beginAtZero: true, |
| ticks: { |
| callback: function(value) { |
| return '$' + value + 'K'; |
| } |
| } |
| } |
| }, |
| plugins: { |
| legend: { |
| display: false |
| } |
| } |
| } |
| }); |
| |
| |
| const volumeCtx = document.getElementById('volumeChart').getContext('2d'); |
| const volumeChart = new Chart(volumeCtx, { |
| type: 'bar', |
| data: { |
| labels: ['Week 1', 'Week 2', 'Week 3', 'Week 4'], |
| datasets: [ |
| { |
| type: 'bar', |
| label: 'Shipment Volume', |
| data: [120, 145, 130, 160], |
| backgroundColor: '#1d4ed8', |
| borderRadius: 3, |
| yAxisID: 'y' |
| }, |
| { |
| type: 'line', |
| label: 'Avg. Clearance Time', |
| data: [48, 44, 40, 42], |
| borderColor: '#ef4444', |
| backgroundColor: '#ef4444', |
| borderWidth: 3, |
| yAxisID: 'y1' |
| } |
| ] |
| }, |
| options: { |
| responsive: true, |
| maintainAspectRatio: false, |
| scales: { |
| y: { |
| beginAtZero: true, |
| title: { |
| display: true, |
| text: 'Shipment Volume' |
| }, |
| position: 'left' |
| }, |
| y1: { |
| beginAtZero: true, |
| title: { |
| display: true, |
| text: 'Hours' |
| }, |
| position: 'right', |
| grid: { |
| drawOnChartArea: false |
| } |
| } |
| }, |
| plugins: { |
| legend: { |
| position: 'top' |
| } |
| } |
| } |
| }); |
| |
| |
| const importersCtx = document.getElementById('importersChart').getContext('2d'); |
| const importersChart = new Chart(importersCtx, { |
| type: 'bar', |
| data: { |
| labels: ['Globex Corp', 'Wayne Ent', 'Stark Ind', 'Initech Co', 'Acme Inc'], |
| datasets: [{ |
| label: 'Declared Value ($)', |
| data: [850, 720, 680, 450, 420], |
| backgroundColor: '#10b981', |
| borderRadius: 3 |
| }] |
| }, |
| options: { |
| indexAxis: 'y', |
| responsive: true, |
| maintainAspectRatio: false, |
| scales: { |
| x: { |
| beginAtZero: true, |
| ticks: { |
| callback: function(value) { |
| return '$' + value + 'K'; |
| } |
| } |
| } |
| }, |
| plugins: { |
| legend: { |
| display: false |
| } |
| } |
| } |
| }); |
| |
| |
| setInterval(updateTimestamp, 300000); |
| function updateTimestamp() { |
| const now = new Date(); |
| document.getElementById('last-updated').textContent = |
| now.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'}); |
| } |
| }); |
| </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=anonymous111110987654321/wireframe-dashboard-test1" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
| </html> |