<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>APM Terminals - Operations Intelligence Platform</title>
<!-- Ubuntu Font -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@300;400;500;700&display=swap" rel="stylesheet">
<!-- Tailwind CSS -->
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
'maersk': {
DEFAULT: '#00ADEF',
50: '#E8F4F8',
100: '#C2E3EF',
500: '#00ADEF',
600: '#0090C9',
700: '#0077A3',
},
'apm': {
DEFAULT: '#003C71',
50: '#E6F0F5',
100: '#CCDBE6',
500: '#003C71',
600: '#00335E',
700: '#002A4B',
},
},
fontFamily: {
'ubuntu': ['Ubuntu', 'sans-serif'],
}
}
}
}
</script>
<style>
body {
font-family: 'Ubuntu', sans-serif;
}
</style>
</head>
<body class="bg-gray-50 min-h-screen">
<!-- Top Bar -->
<div class="bg-apm-500 text-white">
<div class="max-w-7xl mx-auto px-6 py-2 flex items-center justify-between text-xs">
<div class="flex items-center gap-6">
<span class="font-medium">OPERATIONS INTELLIGENCE PLATFORM</span>
</div>
<div class="flex items-center gap-2">
<div class="w-1.5 h-1.5 rounded-full" id="statusDot"></div>
<span id="statusText" class="font-medium">Connecting...</span>
</div>
</div>
</div>
<!-- Main Header -->
<header class="bg-white border-b border-gray-200">
<div class="max-w-7xl mx-auto px-6 py-4">
<div class="flex items-center justify-between">
<div class="flex items-center gap-4">
<img src="logo.png" alt="APM Terminals" class="h-12">
<div class="border-l border-gray-300 h-12"></div>
<div>
<h1 class="text-xl font-bold text-gray-900">APM Terminals</h1>
<p class="text-sm text-gray-600">AI Operations Assistant</p>
</div>
</div>
<div class="text-right">
<div class="text-xs text-gray-500 uppercase tracking-wider">Tangier Med Terminal</div>
<div class="text-sm font-semibold text-gray-900" id="currentDate"></div>
</div>
</div>
</div>
</header>
<!-- Main Content -->
<main class="max-w-7xl mx-auto px-6 py-6">
<div class="bg-white rounded-lg shadow-sm border border-gray-200 h-[calc(100vh-200px)] flex flex-col">
<!-- Quick Queries - Fixed at Top -->
<div class="border-b border-gray-100 bg-gradient-to-r from-gray-50 to-white px-6 py-3">
<div class="flex items-center gap-2 overflow-x-auto hide-scrollbar">
<svg class="w-4 h-4 text-apm-500 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
</svg>
<button onclick="sendSuggestion('What visits are at the terminal today?')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
What visits are at the terminal today?
</button>
<button onclick="sendSuggestion('Show me all inbound vessels this year')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
Show me all inbound vessels this year
</button>
<button onclick="sendSuggestion('What is the CMPH of MSC vessels?')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
What is the CMPH of MSC vessels?
</button>
<button onclick="sendSuggestion('Show me vessel details for the latest visit')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
Show me vessel details for the latest visit
</button>
<button onclick="sendSuggestion('Which vessels are currently operational?')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
Which vessels are currently operational?
</button>
<button onclick="sendSuggestion('What is the productivity of Maersk Line vessels?')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
What is the productivity of Maersk Line vessels?
</button>
<button onclick="sendSuggestion('Which crane worked the longest on working vessels?')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
Which crane worked the longest on working vessels?
</button>
<button onclick="sendSuggestion('Show me cranes assigned to visit TNG001')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
Show me cranes assigned to visit TNG001
</button>
<button onclick="sendSuggestion('Show inbound vessels from 2025-01-01 to 2025-01-31')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
Show inbound vessels for January 2025
</button>
<button onclick="sendSuggestion('Show me crane delays')"
class="flex-shrink-0 px-3 py-1.5 bg-white hover:bg-apm-500 border border-gray-200 hover:border-apm-500 text-gray-700 hover:text-white rounded-full text-xs transition-all shadow-sm">
Show me crane delays
</button>
</div>
</div>
<!-- Messages Container -->
<div id="messages" class="flex-1 overflow-y-auto p-6">
<!-- Welcome Message (shown only initially) -->
<div id="welcomeMessage" class="flex flex-col items-center justify-center h-full">
<div class="text-center">
<div class="w-16 h-16 bg-apm-50 rounded-full flex items-center justify-center mx-auto mb-4">
<svg class="w-8 h-8 text-apm-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z"></path>
</svg>
</div>
<h2 class="text-xl font-semibold text-gray-900 mb-2">How can I help you today?</h2>
<p class="text-sm text-gray-500">Ask me about vessel operations, schedules, or productivity metrics</p>
</div>
</div>
</div>
<!-- Input Area -->
<div class="border-t border-gray-200 bg-white px-6 py-4">
<form id="chatForm" class="flex gap-3">
<textarea
id="messageInput"
rows="1"
placeholder="Ask about vessel visits, productivity metrics, schedules, or any operational data..."
class="flex-1 px-4 py-3 bg-gray-50 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-apm-500 focus:border-transparent focus:bg-white resize-none transition-all"
style="max-height: 100px;"></textarea>
<button
id="sendButton"
type="submit"
disabled
class="px-5 bg-apm-500 hover:bg-apm-600 text-white rounded-lg font-medium transition-all disabled:bg-gray-300 disabled:cursor-not-allowed flex items-center gap-2 shadow-sm hover:shadow-md">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8"></path>
</svg>
</button>
</form>
</div>
</div>
</main>
<script src="script.js"></script>
<script>
// Update current date
document.getElementById('currentDate').textContent = new Date().toLocaleDateString('en-US', {
weekday: 'short',
year: 'numeric',
month: 'short',
day: 'numeric'
});
</script>
<style>
/* Hide scrollbar but allow scrolling */
.hide-scrollbar::-webkit-scrollbar {
display: none;
}
.hide-scrollbar {
-ms-overflow-style: none;
scrollbar-width: none;
}
</style>
</body>
</html>