1988 lines
82 KiB
HTML
1988 lines
82 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
||
<title>SeaFare Montana — AI Maritime Logistics Platform</title>
|
||
<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=Plus+Jakarta+Sans:wght@500;600;700;800&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||
<style>
|
||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||
|
||
:root {
|
||
--bg-dark: #050d1a;
|
||
--bg-panel: #0a1929;
|
||
--bg-surface: #0f2137;
|
||
--bg-chat: #0c1522;
|
||
--bg-input: #162240;
|
||
--bg-hover: rgba(255,255,255,0.04);
|
||
--accent: #2dd4bf;
|
||
--accent2: #0ea5e9;
|
||
--accent3: #818cf8;
|
||
--accent-warm: #c9956b;
|
||
--text: #f0f4f8;
|
||
--text-dim: #94a3b8;
|
||
--text-muted: #64748b;
|
||
--user-msg: #1a3a5c;
|
||
--bot-msg: rgba(22,34,64,0.45);
|
||
--border: rgba(255,255,255,0.08);
|
||
--border-strong: rgba(255,255,255,0.14);
|
||
--success: #34d399;
|
||
--warn: #fbbf24;
|
||
--danger: #f87171;
|
||
}
|
||
|
||
body {
|
||
font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||
background: var(--bg-dark);
|
||
color: var(--text);
|
||
overflow-x: hidden;
|
||
scroll-behavior: smooth;
|
||
}
|
||
|
||
h1, h2, h3, .hero-title, .section-title {
|
||
font-family: 'Plus Jakarta Sans', 'Inter', sans-serif;
|
||
}
|
||
|
||
/* Sidebar */
|
||
.sidebar {
|
||
width: 280px;
|
||
background: var(--bg-panel);
|
||
border-right: 1px solid var(--border-strong);
|
||
display: flex;
|
||
flex-direction: column;
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.sidebar-header {
|
||
padding: 20px;
|
||
border-bottom: 1px solid var(--border);
|
||
}
|
||
|
||
.logo {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 12px;
|
||
margin-bottom: 8px;
|
||
}
|
||
|
||
.logo-icon {
|
||
width: 42px;
|
||
height: 42px;
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
border-radius: 10px;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 22px;
|
||
}
|
||
|
||
.logo-text h1 {
|
||
font-size: 16px;
|
||
font-weight: 600;
|
||
color: var(--text);
|
||
}
|
||
|
||
.logo-text span {
|
||
font-size: 11px;
|
||
color: var(--text-dim);
|
||
}
|
||
|
||
.status-badge {
|
||
display: inline-flex;
|
||
align-items: center;
|
||
gap: 6px;
|
||
padding: 4px 10px;
|
||
background: rgba(0, 200, 83, 0.1);
|
||
border: 1px solid rgba(0, 200, 83, 0.3);
|
||
border-radius: 20px;
|
||
font-size: 11px;
|
||
color: var(--success);
|
||
margin-top: 12px;
|
||
}
|
||
|
||
.status-dot {
|
||
width: 6px;
|
||
height: 6px;
|
||
background: var(--success);
|
||
border-radius: 50%;
|
||
animation: pulse 2s infinite;
|
||
}
|
||
|
||
@keyframes pulse {
|
||
0%, 100% { opacity: 1; }
|
||
50% { opacity: 0.4; }
|
||
}
|
||
|
||
/* Services */
|
||
.services {
|
||
padding: 16px 20px;
|
||
flex: 1;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.services h3 {
|
||
font-size: 11px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 1px;
|
||
color: var(--text-dim);
|
||
margin-bottom: 12px;
|
||
}
|
||
|
||
.service-item {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
padding: 10px 12px;
|
||
border-radius: 8px;
|
||
margin-bottom: 4px;
|
||
cursor: pointer;
|
||
transition: background 0.2s;
|
||
}
|
||
|
||
.service-item:hover {
|
||
background: rgba(0, 180, 216, 0.1);
|
||
}
|
||
|
||
.service-icon {
|
||
font-size: 18px;
|
||
width: 32px;
|
||
text-align: center;
|
||
}
|
||
|
||
.service-info {
|
||
flex: 1;
|
||
}
|
||
|
||
.service-info .name {
|
||
font-size: 13px;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.service-info .price {
|
||
font-size: 11px;
|
||
color: var(--text-dim);
|
||
}
|
||
|
||
.price-tag {
|
||
font-size: 11px;
|
||
padding: 2px 8px;
|
||
border-radius: 10px;
|
||
background: rgba(0, 180, 216, 0.15);
|
||
color: var(--accent);
|
||
font-weight: 600;
|
||
}
|
||
|
||
.price-free {
|
||
background: rgba(0, 200, 83, 0.15);
|
||
color: var(--success);
|
||
}
|
||
|
||
/* Sidebar footer */
|
||
.sidebar-footer {
|
||
padding: 16px 20px;
|
||
border-top: 1px solid var(--border);
|
||
font-size: 11px;
|
||
color: var(--text-dim);
|
||
text-align: center;
|
||
}
|
||
|
||
.sidebar-footer a {
|
||
color: var(--accent);
|
||
text-decoration: none;
|
||
}
|
||
|
||
/* Main chat area */
|
||
.main {
|
||
flex: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-width: 0;
|
||
}
|
||
|
||
/* Chat header */
|
||
.chat-header {
|
||
padding: 16px 24px;
|
||
background: var(--bg-panel);
|
||
border-bottom: 1px solid var(--border-strong);
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
}
|
||
|
||
.chat-header-left {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 12px;
|
||
}
|
||
|
||
.chat-header-left h2 {
|
||
font-size: 15px;
|
||
font-weight: 600;
|
||
}
|
||
|
||
.chat-header-left span {
|
||
font-size: 12px;
|
||
color: var(--text-dim);
|
||
}
|
||
|
||
.header-actions {
|
||
display: flex;
|
||
gap: 8px;
|
||
align-items: center;
|
||
}
|
||
|
||
.header-btn {
|
||
padding: 6px 14px;
|
||
border: 1px solid var(--border);
|
||
border-radius: 6px;
|
||
background: transparent;
|
||
color: var(--text-dim);
|
||
font-size: 12px;
|
||
cursor: pointer;
|
||
transition: all 0.2s;
|
||
}
|
||
|
||
.header-btn:hover {
|
||
border-color: var(--accent);
|
||
color: var(--accent);
|
||
}
|
||
|
||
/* Language switcher */
|
||
.lang-switcher {
|
||
display: flex;
|
||
gap: 2px;
|
||
background: var(--bg-input);
|
||
border-radius: 6px;
|
||
padding: 2px;
|
||
border: 1px solid var(--border);
|
||
}
|
||
|
||
.lang-btn {
|
||
padding: 4px 10px;
|
||
border: none;
|
||
border-radius: 4px;
|
||
background: transparent;
|
||
color: var(--text-dim);
|
||
font-size: 12px;
|
||
cursor: pointer;
|
||
transition: all 0.2s;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.lang-btn:hover {
|
||
color: var(--text);
|
||
}
|
||
|
||
.lang-btn.active {
|
||
background: var(--accent2);
|
||
color: white;
|
||
}
|
||
|
||
/* Messages */
|
||
.messages {
|
||
flex: 1;
|
||
overflow-y: auto;
|
||
padding: 28px 24px 100px;
|
||
display: flex;
|
||
flex-direction: column;
|
||
gap: 24px;
|
||
background: var(--bg-chat);
|
||
scroll-behavior: smooth;
|
||
}
|
||
|
||
.message {
|
||
display: flex;
|
||
gap: 12px;
|
||
max-width: 85%;
|
||
animation: messageIn 0.4s cubic-bezier(0.22, 1, 0.36, 1) forwards;
|
||
}
|
||
|
||
@keyframes messageIn {
|
||
from { opacity: 0; transform: translateY(10px) scale(0.98); filter: blur(3px); }
|
||
to { opacity: 1; transform: translateY(0) scale(1); filter: blur(0); }
|
||
}
|
||
|
||
.message.user {
|
||
align-self: flex-end;
|
||
flex-direction: row-reverse;
|
||
}
|
||
|
||
.msg-avatar {
|
||
width: 30px;
|
||
height: 30px;
|
||
border-radius: 50%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 14px;
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.message.bot .msg-avatar {
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
}
|
||
|
||
.message.user .msg-avatar {
|
||
background: var(--user-msg);
|
||
}
|
||
|
||
.msg-content {
|
||
padding: 16px 20px;
|
||
border-radius: 18px;
|
||
font-size: 15px;
|
||
line-height: 1.65;
|
||
letter-spacing: -0.01em;
|
||
}
|
||
|
||
.message.bot .msg-content {
|
||
background: var(--bot-msg);
|
||
border-radius: 18px;
|
||
}
|
||
|
||
.message.user .msg-content {
|
||
background: linear-gradient(135deg, var(--accent2), #005a99);
|
||
color: white;
|
||
border-radius: 20px;
|
||
padding: 12px 18px;
|
||
}
|
||
|
||
.msg-content pre {
|
||
background: rgba(0, 0, 0, 0.35);
|
||
padding: 14px 18px;
|
||
border-radius: 12px;
|
||
border: 1px solid rgba(255, 255, 255, 0.06);
|
||
margin: 10px 0;
|
||
font-size: 13px;
|
||
overflow-x: auto;
|
||
font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
|
||
line-height: 1.6;
|
||
}
|
||
|
||
.msg-content code {
|
||
background: rgba(0, 0, 0, 0.3);
|
||
padding: 2px 7px;
|
||
border-radius: 5px;
|
||
font-size: 13px;
|
||
font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
|
||
}
|
||
|
||
.msg-content .vessel-card {
|
||
background: rgba(0, 180, 216, 0.06);
|
||
border: 1px solid rgba(0, 180, 216, 0.15);
|
||
border-radius: 14px;
|
||
padding: 16px;
|
||
margin: 10px 0;
|
||
backdrop-filter: blur(8px);
|
||
}
|
||
|
||
.vessel-card .vessel-name {
|
||
font-size: 15px;
|
||
font-weight: 600;
|
||
color: var(--accent);
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.vessel-card .vessel-row {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
padding: 4px 0;
|
||
font-size: 13px;
|
||
border-bottom: 1px solid rgba(255, 255, 255, 0.04);
|
||
}
|
||
|
||
.vessel-card .vessel-row:last-child { border-bottom: none; }
|
||
|
||
.vessel-card .vessel-label {
|
||
color: var(--text-dim);
|
||
}
|
||
|
||
.msg-time {
|
||
font-size: 10px;
|
||
color: var(--text-dim);
|
||
margin-top: 6px;
|
||
padding: 0 4px;
|
||
opacity: 0.7;
|
||
}
|
||
|
||
.message.user .msg-time {
|
||
text-align: right;
|
||
}
|
||
|
||
/* Typing indicator */
|
||
.typing {
|
||
display: flex;
|
||
gap: 5px;
|
||
padding: 8px 4px;
|
||
}
|
||
|
||
.typing span {
|
||
width: 6px;
|
||
height: 6px;
|
||
background: var(--accent);
|
||
border-radius: 50%;
|
||
animation: typingPulse 1.4s cubic-bezier(0.4, 0, 0.2, 1) infinite;
|
||
opacity: 0.4;
|
||
}
|
||
|
||
.typing span:nth-child(2) { animation-delay: 0.15s; }
|
||
.typing span:nth-child(3) { animation-delay: 0.3s; }
|
||
|
||
@keyframes typingPulse {
|
||
0%, 60%, 100% { transform: translateY(0) scale(1); opacity: 0.4; }
|
||
30% { transform: translateY(-5px) scale(1.2); opacity: 1; }
|
||
}
|
||
|
||
/* Input area */
|
||
.input-area {
|
||
padding: 0 24px 20px;
|
||
background: linear-gradient(to top, var(--bg-panel) 60%, transparent);
|
||
position: relative;
|
||
margin-top: -80px;
|
||
pointer-events: none;
|
||
padding-top: 80px;
|
||
}
|
||
.input-area > * { pointer-events: auto; }
|
||
|
||
.input-glass {
|
||
display: flex;
|
||
gap: 6px;
|
||
align-items: flex-end;
|
||
background: rgba(22, 34, 64, 0.65);
|
||
backdrop-filter: blur(20px) saturate(180%);
|
||
-webkit-backdrop-filter: blur(20px) saturate(180%);
|
||
border: 1px solid rgba(255, 255, 255, 0.10);
|
||
border-radius: 24px;
|
||
padding: 6px 6px 6px 18px;
|
||
transition: border-color 0.25s, box-shadow 0.25s;
|
||
}
|
||
.input-glass:focus-within {
|
||
border-color: rgba(0, 180, 216, 0.4);
|
||
box-shadow: 0 0 0 3px rgba(0, 180, 216, 0.08), 0 4px 24px rgba(0, 0, 0, 0.2);
|
||
}
|
||
|
||
.input-wrapper {
|
||
flex: 1;
|
||
position: relative;
|
||
}
|
||
|
||
.input-wrapper textarea {
|
||
width: 100%;
|
||
padding: 10px 0;
|
||
background: transparent;
|
||
border: none;
|
||
color: var(--text);
|
||
font-size: 15px;
|
||
font-family: inherit;
|
||
resize: none;
|
||
outline: none;
|
||
min-height: 40px;
|
||
max-height: 120px;
|
||
line-height: 1.5;
|
||
}
|
||
|
||
.input-wrapper textarea::placeholder {
|
||
color: var(--text-dim);
|
||
}
|
||
|
||
.send-btn {
|
||
width: 38px;
|
||
height: 38px;
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
border: none;
|
||
border-radius: 12px;
|
||
color: white;
|
||
font-size: 16px;
|
||
cursor: pointer;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
transition: transform 0.15s, opacity 0.2s;
|
||
flex-shrink: 0;
|
||
}
|
||
|
||
.send-btn:hover { transform: scale(1.08); }
|
||
.send-btn:active { transform: scale(0.93); }
|
||
.send-btn:disabled { opacity: 0.3; cursor: not-allowed; transform: none; }
|
||
|
||
/* Voice input button */
|
||
.voice-btn {
|
||
width: 38px;
|
||
height: 38px;
|
||
background: transparent;
|
||
border: none;
|
||
border-radius: 12px;
|
||
color: var(--text-dim);
|
||
font-size: 18px;
|
||
cursor: pointer;
|
||
display: none;
|
||
align-items: center;
|
||
justify-content: center;
|
||
transition: all 0.2s;
|
||
flex-shrink: 0;
|
||
}
|
||
.voice-btn:hover { color: var(--text); background: rgba(255, 255, 255, 0.06); }
|
||
.voice-btn.recording {
|
||
background: rgba(255, 59, 48, 0.15);
|
||
color: #ff3b30;
|
||
animation: pulse-rec 1.5s ease infinite;
|
||
}
|
||
@keyframes pulse-rec {
|
||
0%, 100% { box-shadow: 0 0 0 0 rgba(255,59,48,0.4); }
|
||
50% { box-shadow: 0 0 0 8px rgba(255,59,48,0); }
|
||
}
|
||
.voice-btn.recording:hover { color: #ff3b30; }
|
||
|
||
.input-hint {
|
||
font-size: 11px;
|
||
color: var(--text-dim);
|
||
margin-top: 10px;
|
||
padding: 0 8px;
|
||
opacity: 0.7;
|
||
}
|
||
|
||
/* Quick actions */
|
||
.quick-actions {
|
||
display: flex;
|
||
gap: 8px;
|
||
margin-bottom: 14px;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
.quick-btn {
|
||
padding: 8px 16px;
|
||
background: rgba(22, 34, 64, 0.5);
|
||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||
border-radius: 20px;
|
||
color: var(--text-dim);
|
||
font-size: 12px;
|
||
cursor: pointer;
|
||
transition: all 0.2s;
|
||
white-space: nowrap;
|
||
backdrop-filter: blur(8px);
|
||
-webkit-backdrop-filter: blur(8px);
|
||
}
|
||
|
||
.quick-btn:hover {
|
||
border-color: rgba(0, 180, 216, 0.3);
|
||
color: var(--accent);
|
||
background: rgba(0, 180, 216, 0.08);
|
||
}
|
||
|
||
/* Scrollbar */
|
||
::-webkit-scrollbar { width: 4px; }
|
||
::-webkit-scrollbar-track { background: transparent; }
|
||
::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.08); border-radius: 4px; }
|
||
::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.16); }
|
||
.messages { scrollbar-width: thin; scrollbar-color: rgba(255, 255, 255, 0.08) transparent; }
|
||
|
||
/* Auth modal */
|
||
.auth-overlay {
|
||
position: fixed;
|
||
top: 0; left: 0; right: 0; bottom: 0;
|
||
background: rgba(10, 22, 40, 0.92);
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
z-index: 1000;
|
||
}
|
||
.auth-overlay.hidden { display: none; }
|
||
|
||
.auth-modal {
|
||
background: var(--bg-panel);
|
||
border: 1px solid var(--border);
|
||
border-radius: 16px;
|
||
padding: 36px;
|
||
width: 370px;
|
||
max-width: 90vw;
|
||
}
|
||
|
||
.auth-logo {
|
||
display: flex; align-items: center; gap: 12px;
|
||
justify-content: center; margin-bottom: 20px;
|
||
}
|
||
.auth-logo .logo-icon { width: 38px; height: 38px; font-size: 20px; }
|
||
.auth-logo h2 { font-size: 17px; font-weight: 600; }
|
||
|
||
.auth-modal h3 {
|
||
text-align: center; font-size: 15px;
|
||
margin-bottom: 18px; color: var(--text-dim);
|
||
}
|
||
|
||
.auth-field { margin-bottom: 12px; }
|
||
.auth-field input {
|
||
width: 100%; padding: 11px 14px;
|
||
background: var(--bg-input); border: 1px solid var(--border);
|
||
border-radius: 8px; color: var(--text);
|
||
font-size: 14px; font-family: inherit; outline: none;
|
||
transition: border-color 0.2s;
|
||
}
|
||
.auth-field input:focus { border-color: var(--accent); }
|
||
|
||
.auth-submit {
|
||
width: 100%; padding: 11px;
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
border: none; border-radius: 8px; color: white;
|
||
font-size: 14px; font-weight: 600; cursor: pointer;
|
||
transition: opacity 0.2s; margin-top: 4px;
|
||
}
|
||
.auth-submit:hover { opacity: 0.9; }
|
||
.auth-submit:disabled { opacity: 0.5; cursor: not-allowed; }
|
||
|
||
.auth-divider {
|
||
display: flex; align-items: center; gap: 12px;
|
||
margin: 16px 0; color: var(--text-dim); font-size: 12px;
|
||
}
|
||
.auth-divider::before, .auth-divider::after {
|
||
content: ''; flex: 1; height: 1px; background: var(--border);
|
||
}
|
||
.google-btn-wrap {
|
||
display: flex; justify-content: center; margin-bottom: 4px;
|
||
}
|
||
|
||
.auth-switch { text-align: center; margin-top: 14px; }
|
||
.auth-switch a { color: var(--accent); text-decoration: none; font-size: 13px; }
|
||
.auth-close { text-align: center; margin-top: 10px; }
|
||
.auth-close a { color: var(--text-dim); text-decoration: none; font-size: 12px; }
|
||
.auth-close a:hover { color: var(--text); }
|
||
|
||
.auth-error {
|
||
background: rgba(255, 82, 82, 0.1);
|
||
border: 1px solid rgba(255, 82, 82, 0.3);
|
||
color: #ff5252; padding: 9px 14px; border-radius: 8px;
|
||
font-size: 13px; margin-bottom: 12px; text-align: center;
|
||
}
|
||
|
||
/* User info in header */
|
||
.user-info {
|
||
font-size: 13px; color: var(--text-dim);
|
||
display: flex; align-items: center; gap: 8px;
|
||
}
|
||
.admin-badge {
|
||
padding: 2px 8px; border-radius: 10px;
|
||
background: rgba(255, 107, 53, 0.2);
|
||
color: #ff6b35; font-size: 10px; font-weight: 700;
|
||
letter-spacing: 0.5px;
|
||
}
|
||
.admin-revenue-btn {
|
||
background: rgba(255, 107, 53, 0.15) !important;
|
||
color: #ff6b35 !important;
|
||
border: 1px solid rgba(255, 107, 53, 0.3) !important;
|
||
font-size: 12px !important;
|
||
padding: 3px 8px !important;
|
||
}
|
||
/* Revenue Modal */
|
||
.revenue-overlay {
|
||
position: fixed; top: 0; left: 0; right: 0; bottom: 0;
|
||
background: rgba(0,0,0,0.6); z-index: 1001;
|
||
display: flex; align-items: center; justify-content: center;
|
||
backdrop-filter: blur(4px);
|
||
}
|
||
.revenue-overlay.hidden { display: none; }
|
||
.revenue-modal {
|
||
background: var(--bg-panel); border-radius: 16px;
|
||
padding: 32px; width: 520px; max-width: 95vw;
|
||
max-height: 90vh; max-height: 90dvh; overflow-y: auto;
|
||
box-shadow: 0 20px 60px rgba(0,0,0,0.4);
|
||
border: 1px solid var(--border);
|
||
}
|
||
.revenue-modal h2 {
|
||
color: var(--text); font-size: 20px; margin-bottom: 20px;
|
||
display: flex; align-items: center; gap: 10px;
|
||
}
|
||
.revenue-cards {
|
||
display: grid; grid-template-columns: 1fr 1fr; gap: 12px;
|
||
margin-bottom: 20px;
|
||
}
|
||
.revenue-card {
|
||
background: rgba(22, 34, 64, 0.5); border-radius: 12px;
|
||
padding: 16px; text-align: center;
|
||
border: 1px solid var(--border);
|
||
}
|
||
.revenue-card .label {
|
||
font-size: 11px; color: var(--text-dim);
|
||
text-transform: uppercase; letter-spacing: 0.5px;
|
||
margin-bottom: 6px;
|
||
}
|
||
.revenue-card .value {
|
||
font-size: 22px; font-weight: 700; color: var(--text);
|
||
}
|
||
.revenue-card .value.green { color: var(--success); }
|
||
.revenue-card .value.orange { color: #ff6b35; }
|
||
.revenue-table {
|
||
width: 100%; border-collapse: collapse; margin-top: 16px;
|
||
}
|
||
.revenue-table th {
|
||
text-align: left; padding: 8px 10px; font-size: 11px;
|
||
color: var(--text-dim); text-transform: uppercase;
|
||
border-bottom: 1px solid var(--border);
|
||
}
|
||
.revenue-table td {
|
||
padding: 8px 10px; font-size: 13px; color: var(--text);
|
||
border-bottom: 1px solid rgba(255,255,255,0.04);
|
||
}
|
||
.revenue-close {
|
||
position: absolute; top: 12px; right: 16px;
|
||
background: none; border: none; color: var(--text-dim);
|
||
font-size: 24px; cursor: pointer;
|
||
}
|
||
.revenue-close:hover { color: var(--text); }
|
||
.balance-badge {
|
||
padding: 2px 8px; border-radius: 10px;
|
||
background: rgba(0, 200, 83, 0.15);
|
||
color: var(--success); font-size: 11px; font-weight: 600;
|
||
}
|
||
.topup-btn {
|
||
background: rgba(0, 200, 83, 0.15) !important;
|
||
color: var(--success) !important;
|
||
border: 1px solid rgba(0, 200, 83, 0.3) !important;
|
||
font-size: 12px !important;
|
||
padding: 3px 8px !important;
|
||
}
|
||
.topup-btn:hover {
|
||
background: rgba(0, 200, 83, 0.25) !important;
|
||
}
|
||
|
||
/* Deposit Modal */
|
||
.deposit-overlay {
|
||
position: fixed; top: 0; left: 0; right: 0; bottom: 0;
|
||
background: rgba(0,0,0,0.6); z-index: 1001;
|
||
display: flex; align-items: center; justify-content: center;
|
||
backdrop-filter: blur(4px);
|
||
}
|
||
.deposit-overlay.hidden { display: none; }
|
||
.deposit-modal {
|
||
background: var(--bg-panel); border-radius: 16px;
|
||
padding: 32px; width: 440px; max-width: 95vw;
|
||
max-height: 90vh; max-height: 90dvh; overflow-y: auto;
|
||
box-shadow: 0 20px 60px rgba(0,0,0,0.4);
|
||
border: 1px solid var(--border);
|
||
text-align: center;
|
||
}
|
||
.deposit-modal h2 {
|
||
color: var(--text); font-size: 20px; margin-bottom: 16px;
|
||
display: flex; align-items: center; justify-content: center; gap: 10px;
|
||
}
|
||
.deposit-network {
|
||
display: inline-block;
|
||
padding: 4px 12px; border-radius: 8px;
|
||
background: rgba(0, 180, 216, 0.15); color: var(--accent);
|
||
font-size: 13px; font-weight: 600; margin-bottom: 16px;
|
||
}
|
||
.deposit-qr {
|
||
margin: 16px auto;
|
||
width: 200px; height: 200px;
|
||
background: #fff; border-radius: 12px;
|
||
padding: 8px;
|
||
display: flex; align-items: center; justify-content: center;
|
||
}
|
||
.deposit-qr img { width: 100%; height: 100%; }
|
||
.deposit-address-wrap {
|
||
background: var(--bg-input); border: 1px solid var(--border);
|
||
border-radius: 10px; padding: 12px; margin: 12px 0;
|
||
display: flex; align-items: center; gap: 8px;
|
||
}
|
||
.deposit-address {
|
||
flex: 1; font-family: monospace; font-size: 12px;
|
||
color: var(--text); word-break: break-all; text-align: left;
|
||
}
|
||
.deposit-copy-btn {
|
||
background: var(--accent); border: none; border-radius: 6px;
|
||
color: #fff; padding: 6px 12px; font-size: 12px;
|
||
cursor: pointer; flex-shrink: 0; transition: all 0.2s;
|
||
}
|
||
.deposit-copy-btn:hover { opacity: 0.85; }
|
||
.deposit-check-btn {
|
||
background: linear-gradient(135deg, var(--success), #00a844);
|
||
border: none; border-radius: 10px; color: #fff;
|
||
padding: 12px 24px; font-size: 14px; font-weight: 600;
|
||
cursor: pointer; width: 100%; margin-top: 16px;
|
||
transition: all 0.2s;
|
||
}
|
||
.deposit-check-btn:hover { opacity: 0.9; transform: scale(1.02); }
|
||
.deposit-check-btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
|
||
.deposit-result {
|
||
margin-top: 12px; padding: 10px; border-radius: 8px;
|
||
font-size: 13px;
|
||
}
|
||
.deposit-result.success {
|
||
background: rgba(0, 200, 83, 0.1); color: var(--success);
|
||
border: 1px solid rgba(0, 200, 83, 0.3);
|
||
}
|
||
.deposit-result.empty {
|
||
background: rgba(255, 167, 38, 0.1); color: var(--warn);
|
||
border: 1px solid rgba(255, 167, 38, 0.3);
|
||
}
|
||
.deposit-result.error {
|
||
background: rgba(255, 82, 82, 0.1); color: #ff5252;
|
||
border: 1px solid rgba(255, 82, 82, 0.3);
|
||
}
|
||
.deposit-close {
|
||
display: inline-block; margin-top: 16px;
|
||
color: var(--text-dim); cursor: pointer; font-size: 13px;
|
||
}
|
||
.deposit-close:hover { color: var(--text); }
|
||
.deposit-history { margin-top: 16px; text-align: left; }
|
||
.deposit-history h4 { font-size: 13px; color: var(--text-dim); margin-bottom: 8px; }
|
||
.deposit-tx {
|
||
font-size: 11px; color: var(--text-dim); padding: 4px 0;
|
||
border-bottom: 1px solid var(--border);
|
||
display: flex; justify-content: space-between;
|
||
}
|
||
.deposit-tx .amount { color: var(--success); font-weight: 600; }
|
||
.deposit-tx .amount.negative { color: #ff5252; }
|
||
|
||
/* Deposit/Withdraw Tabs */
|
||
.wallet-tabs {
|
||
display: flex; gap: 0; margin-bottom: 20px;
|
||
border-radius: 10px; overflow: hidden;
|
||
border: 1px solid var(--border);
|
||
}
|
||
.wallet-tab {
|
||
flex: 1; padding: 10px 16px; font-size: 13px; font-weight: 600;
|
||
cursor: pointer; border: none; transition: all 0.2s;
|
||
background: var(--bg-input); color: var(--text-dim);
|
||
}
|
||
.wallet-tab.active {
|
||
background: var(--accent); color: #fff;
|
||
}
|
||
.wallet-tab:hover:not(.active) { background: var(--bg-hover); }
|
||
.wallet-tab-content { display: none; }
|
||
.wallet-tab-content.active { display: block; }
|
||
|
||
/* Withdraw form */
|
||
.withdraw-form { text-align: left; }
|
||
.withdraw-field { margin-bottom: 14px; }
|
||
.withdraw-field label {
|
||
display: block; font-size: 12px; color: var(--text-dim);
|
||
margin-bottom: 4px; font-weight: 600;
|
||
}
|
||
.withdraw-field input {
|
||
width: 100%; padding: 10px 12px; font-size: 14px;
|
||
background: var(--bg-input); border: 1px solid var(--border);
|
||
border-radius: 8px; color: var(--text); outline: none;
|
||
box-sizing: border-box;
|
||
}
|
||
.withdraw-field input:focus { border-color: var(--accent); }
|
||
.withdraw-balance-info {
|
||
font-size: 12px; color: var(--text-dim); margin-bottom: 16px;
|
||
text-align: center;
|
||
}
|
||
.withdraw-balance-info strong { color: var(--success); }
|
||
.withdraw-submit-btn {
|
||
background: linear-gradient(135deg, #ff6b35, #ff4444);
|
||
border: none; border-radius: 10px; color: #fff;
|
||
padding: 12px 24px; font-size: 14px; font-weight: 600;
|
||
cursor: pointer; width: 100%; transition: all 0.2s;
|
||
}
|
||
.withdraw-submit-btn:hover { opacity: 0.9; transform: scale(1.02); }
|
||
.withdraw-submit-btn:disabled { opacity: 0.5; cursor: not-allowed; transform: none; }
|
||
.withdraw-result {
|
||
margin-top: 12px; padding: 10px; border-radius: 8px; font-size: 13px;
|
||
}
|
||
.withdraw-result.success {
|
||
background: rgba(0, 200, 83, 0.1); color: var(--success);
|
||
border: 1px solid rgba(0, 200, 83, 0.3);
|
||
}
|
||
.withdraw-result.error {
|
||
background: rgba(255, 82, 82, 0.1); color: #ff5252;
|
||
border: 1px solid rgba(255, 82, 82, 0.3);
|
||
}
|
||
.withdraw-history { margin-top: 16px; text-align: left; }
|
||
.withdraw-history h4 { font-size: 13px; color: var(--text-dim); margin-bottom: 8px; }
|
||
.withdraw-tx {
|
||
font-size: 11px; color: var(--text-dim); padding: 4px 0;
|
||
border-bottom: 1px solid var(--border);
|
||
display: flex; justify-content: space-between; align-items: center;
|
||
}
|
||
.withdraw-tx .amount { color: #ff5252; font-weight: 600; }
|
||
.withdraw-status {
|
||
font-size: 10px; padding: 2px 6px; border-radius: 4px; font-weight: 600;
|
||
}
|
||
.withdraw-status.pending { background: rgba(255,167,38,0.15); color: var(--warn); }
|
||
.withdraw-status.completed { background: rgba(0,200,83,0.15); color: var(--success); }
|
||
.withdraw-status.rejected { background: rgba(255,82,82,0.15); color: #ff5252; }
|
||
|
||
/* Profile Cabinet Modal */
|
||
.profile-overlay {
|
||
position: fixed; top: 0; left: 0; right: 0; bottom: 0;
|
||
background: rgba(0,0,0,0.6); z-index: 1001;
|
||
display: flex; align-items: center; justify-content: center;
|
||
backdrop-filter: blur(4px);
|
||
}
|
||
.profile-overlay.hidden { display: none; }
|
||
.profile-modal {
|
||
background: var(--bg-panel); border-radius: 16px;
|
||
padding: 32px; width: 560px; max-width: 95vw;
|
||
max-height: 90vh; max-height: 90dvh; overflow-y: auto;
|
||
box-shadow: 0 20px 60px rgba(0,0,0,0.4);
|
||
border: 1px solid var(--border);
|
||
}
|
||
.profile-modal h2 {
|
||
color: var(--text); font-size: 20px; margin-bottom: 8px;
|
||
display: flex; align-items: center; gap: 10px;
|
||
}
|
||
.profile-modal .profile-subtitle {
|
||
color: var(--text-dim); font-size: 13px; margin-bottom: 20px;
|
||
}
|
||
.profile-section {
|
||
margin-bottom: 20px;
|
||
}
|
||
.profile-section h3 {
|
||
font-size: 14px; color: var(--accent); margin-bottom: 10px;
|
||
text-transform: uppercase; letter-spacing: 0.5px;
|
||
}
|
||
.profile-field {
|
||
margin-bottom: 12px;
|
||
}
|
||
.profile-field label {
|
||
display: block; font-size: 12px; color: var(--text-dim);
|
||
margin-bottom: 4px; font-weight: 600;
|
||
}
|
||
.profile-field input, .profile-field select, .profile-field textarea {
|
||
width: 100%; padding: 9px 12px;
|
||
background: var(--bg); border: 1px solid var(--border);
|
||
border-radius: 8px; color: var(--text); font-size: 14px;
|
||
font-family: inherit; box-sizing: border-box;
|
||
}
|
||
.profile-field input:focus, .profile-field select:focus, .profile-field textarea:focus {
|
||
border-color: var(--accent); outline: none;
|
||
}
|
||
.profile-field textarea { resize: vertical; min-height: 60px; }
|
||
.profile-field select { cursor: pointer; }
|
||
|
||
.chip-group {
|
||
display: flex; flex-wrap: wrap; gap: 6px;
|
||
}
|
||
.chip {
|
||
padding: 5px 12px; border-radius: 16px; font-size: 12px;
|
||
border: 1px solid var(--border); color: var(--text-dim);
|
||
cursor: pointer; transition: all 0.2s; user-select: none;
|
||
background: transparent;
|
||
}
|
||
.chip:hover { border-color: var(--accent); color: var(--accent); }
|
||
.chip.active {
|
||
background: rgba(0,122,255,0.15); border-color: var(--accent);
|
||
color: var(--accent); font-weight: 600;
|
||
}
|
||
|
||
.profile-vessels-list {
|
||
display: flex; flex-direction: column; gap: 6px; margin-top: 6px;
|
||
}
|
||
.profile-vessel-row {
|
||
display: flex; gap: 8px; align-items: center;
|
||
}
|
||
.profile-vessel-row input { flex: 1; }
|
||
.profile-vessel-row button {
|
||
background: transparent; border: 1px solid var(--border);
|
||
border-radius: 6px; color: var(--text-dim); cursor: pointer;
|
||
width: 30px; height: 30px; font-size: 16px;
|
||
display: flex; align-items: center; justify-content: center;
|
||
}
|
||
.profile-vessel-row button:hover { border-color: #ff5252; color: #ff5252; }
|
||
.add-vessel-btn {
|
||
background: transparent; border: 1px dashed var(--border);
|
||
border-radius: 8px; color: var(--text-dim); cursor: pointer;
|
||
padding: 8px; font-size: 13px; width: 100%; margin-top: 6px;
|
||
}
|
||
.add-vessel-btn:hover { border-color: var(--accent); color: var(--accent); }
|
||
|
||
.profile-actions {
|
||
display: flex; gap: 12px; margin-top: 24px;
|
||
}
|
||
.profile-save-btn {
|
||
flex: 1; padding: 11px;
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
border: none; border-radius: 8px; color: white;
|
||
font-size: 14px; font-weight: 600; cursor: pointer;
|
||
}
|
||
.profile-save-btn:hover { opacity: 0.9; }
|
||
.profile-cancel-btn {
|
||
padding: 11px 24px;
|
||
background: transparent; border: 1px solid var(--border);
|
||
border-radius: 8px; color: var(--text-dim);
|
||
font-size: 14px; cursor: pointer;
|
||
}
|
||
.profile-cancel-btn:hover { border-color: var(--text); color: var(--text); }
|
||
|
||
.profile-saved-msg {
|
||
color: var(--success); font-size: 13px; text-align: center;
|
||
margin-top: 12px; display: none;
|
||
}
|
||
|
||
.purchased-contact-card {
|
||
background: var(--bg); border: 1px solid var(--border);
|
||
border-radius: 10px; padding: 12px 14px; margin-bottom: 8px;
|
||
}
|
||
.purchased-contact-card .pcc-company {
|
||
font-weight: 600; font-size: 14px; color: var(--text);
|
||
}
|
||
.purchased-contact-card .pcc-type {
|
||
display: inline-block; font-size: 11px; color: var(--accent);
|
||
background: rgba(0,122,255,0.1); border-radius: 10px;
|
||
padding: 2px 8px; margin-left: 6px; vertical-align: middle;
|
||
}
|
||
.purchased-contact-card .pcc-detail {
|
||
font-size: 12px; color: var(--text-dim); margin-top: 4px;
|
||
}
|
||
.purchased-contact-card .pcc-detail a {
|
||
color: var(--accent); text-decoration: none;
|
||
}
|
||
.purchased-contact-card .pcc-date {
|
||
font-size: 11px; color: var(--text-dim); opacity: 0.6; margin-top: 6px;
|
||
}
|
||
.purchased-empty {
|
||
color: var(--text-dim); font-size: 13px; text-align: center; padding: 16px 0;
|
||
}
|
||
|
||
/* ============ Responsive ============ */
|
||
|
||
/* Tablet (≤ 1024px) */
|
||
@media (max-width: 1024px) {
|
||
.sidebar { width: 240px; }
|
||
.chat-header { padding: 12px 16px; }
|
||
.messages { padding: 20px 16px 90px; gap: 20px; }
|
||
.input-area { padding: 0 16px 16px; margin-top: -70px; padding-top: 70px; }
|
||
}
|
||
|
||
/* Menu toggle button (hidden on desktop) */
|
||
.menu-toggle {
|
||
display: none;
|
||
width: 40px; height: 40px;
|
||
background: var(--accent);
|
||
border: none;
|
||
border-radius: 8px;
|
||
color: #fff;
|
||
font-size: 22px;
|
||
cursor: pointer;
|
||
align-items: center;
|
||
justify-content: center;
|
||
transition: all 0.2s;
|
||
flex-shrink: 0;
|
||
box-shadow: 0 2px 8px rgba(0,122,255,0.3);
|
||
}
|
||
.menu-toggle:hover { background: #0066d6; }
|
||
|
||
/* Mobile (≤ 768px) */
|
||
@media (max-width: 768px) {
|
||
body { flex-direction: column; }
|
||
|
||
/* Sidebar → slide-in drawer from left */
|
||
.sidebar {
|
||
position: fixed;
|
||
top: 0; left: 0; bottom: 0;
|
||
width: 300px;
|
||
max-width: 85vw;
|
||
z-index: 900;
|
||
overflow-y: auto;
|
||
transform: translateX(-100%);
|
||
transition: transform 0.3s ease;
|
||
box-shadow: none;
|
||
}
|
||
.sidebar.open {
|
||
transform: translateX(0);
|
||
box-shadow: 4px 0 20px rgba(0,0,0,0.3);
|
||
}
|
||
|
||
.main { width: 100%; height: var(--app-height, 100vh); }
|
||
|
||
/* Header: stack actions below title */
|
||
.chat-header {
|
||
flex-wrap: wrap;
|
||
gap: 8px;
|
||
padding: 10px 12px;
|
||
}
|
||
.chat-header-left h2 { font-size: 14px; }
|
||
.chat-header-left span { display: none; }
|
||
|
||
.header-actions {
|
||
flex-wrap: wrap;
|
||
gap: 6px;
|
||
width: 100%;
|
||
justify-content: flex-end;
|
||
}
|
||
|
||
.header-btn { padding: 5px 10px; font-size: 11px; }
|
||
.lang-btn { padding: 3px 8px; font-size: 11px; }
|
||
|
||
/* User info compact */
|
||
.user-info { font-size: 11px; gap: 4px; }
|
||
.balance-badge { font-size: 10px; padding: 1px 6px; }
|
||
|
||
/* Messages */
|
||
.messages { padding: 16px 10px 80px; gap: 16px; }
|
||
.message { max-width: 92%; }
|
||
.msg-content { padding: 12px 14px; font-size: 14px; border-radius: 16px; }
|
||
.msg-avatar { width: 26px; height: 26px; font-size: 12px; }
|
||
|
||
/* Input area */
|
||
.input-area { padding: 0 10px 12px; margin-top: -60px; padding-top: 60px; }
|
||
.input-glass {
|
||
border-radius: 20px;
|
||
padding: 4px 4px 4px 14px;
|
||
}
|
||
.input-wrapper textarea {
|
||
font-size: 14px;
|
||
min-height: 38px;
|
||
}
|
||
.send-btn { width: 36px; height: 36px; font-size: 14px; border-radius: 10px; }
|
||
.voice-btn { width: 36px; height: 36px; font-size: 16px; border-radius: 10px; }
|
||
.input-hint { font-size: 10px; margin-top: 6px; }
|
||
|
||
/* Quick actions scroll horizontally */
|
||
.quick-actions {
|
||
flex-wrap: nowrap;
|
||
overflow-x: auto;
|
||
margin-bottom: 8px;
|
||
gap: 6px;
|
||
-webkit-overflow-scrolling: touch;
|
||
scrollbar-width: none;
|
||
}
|
||
.quick-actions::-webkit-scrollbar { display: none; }
|
||
.quick-btn { font-size: 11px; padding: 5px 12px; flex-shrink: 0; }
|
||
|
||
/* Auth modal */
|
||
.auth-modal { padding: 28px 20px; width: 95vw; }
|
||
.profile-modal { padding: 24px 16px; width: 95vw; }
|
||
.deposit-modal { padding: 24px 16px; width: 95vw; }
|
||
.chip { font-size: 11px; padding: 4px 10px; }
|
||
|
||
/* Menu toggle button visible */
|
||
.menu-toggle { display: flex; }
|
||
}
|
||
|
||
/* Small phones (≤ 480px) */
|
||
@media (max-width: 480px) {
|
||
.chat-header-left h2 { font-size: 13px; }
|
||
.header-actions { gap: 4px; }
|
||
.header-btn { padding: 4px 8px; font-size: 10px; }
|
||
.lang-btn { padding: 2px 6px; font-size: 10px; }
|
||
.message { max-width: 96%; }
|
||
.msg-content { font-size: 13px; padding: 10px 12px; }
|
||
.msg-avatar { width: 22px; height: 22px; font-size: 10px; }
|
||
}
|
||
|
||
/* Sidebar backdrop overlay */
|
||
.sidebar-backdrop {
|
||
display: none;
|
||
position: fixed;
|
||
top: 0; left: 0; right: 0; bottom: 0;
|
||
background: rgba(0,0,0,0.5);
|
||
z-index: 899;
|
||
}
|
||
.sidebar-backdrop.open { display: block; }
|
||
|
||
/* Sidebar close button (only on mobile) */
|
||
.sidebar-close {
|
||
display: none;
|
||
position: absolute;
|
||
top: 16px; right: 16px;
|
||
background: transparent;
|
||
border: 1px solid var(--border);
|
||
border-radius: 6px;
|
||
color: var(--text-dim);
|
||
font-size: 18px;
|
||
width: 32px; height: 32px;
|
||
cursor: pointer;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.sidebar-close:hover { color: var(--text); border-color: var(--accent); }
|
||
@media (max-width: 768px) {
|
||
.sidebar-close { display: flex; }
|
||
}
|
||
|
||
/* ========== TOP NAVIGATION ========== */
|
||
.top-nav {
|
||
position: fixed; top: 0; left: 0; right: 0; z-index: 100;
|
||
display: flex; align-items: center; justify-content: space-between;
|
||
padding: 16px 5vw;
|
||
background: rgba(5,13,26,0.6);
|
||
backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px);
|
||
border-bottom: 1px solid transparent;
|
||
transition: all 0.3s ease;
|
||
}
|
||
.top-nav.scrolled {
|
||
background: rgba(10,25,41,0.92);
|
||
border-bottom-color: var(--border);
|
||
box-shadow: 0 4px 30px rgba(0,0,0,0.3);
|
||
}
|
||
.nav-logo { display: flex; align-items: center; gap: 10px; text-decoration: none; }
|
||
.nav-logo-icon {
|
||
width: 36px; height: 36px;
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
border-radius: 10px; display: flex; align-items: center; justify-content: center;
|
||
font-size: 18px;
|
||
}
|
||
.nav-logo-text { font-family: 'Plus Jakarta Sans',sans-serif; font-size: 16px; font-weight: 700; color: var(--text); }
|
||
.nav-links { display: flex; align-items: center; gap: 32px; }
|
||
.nav-links a {
|
||
color: var(--text-dim); text-decoration: none; font-size: 14px; font-weight: 500;
|
||
transition: color 0.2s;
|
||
}
|
||
.nav-links a:hover { color: var(--text); }
|
||
.nav-right { display: flex; align-items: center; gap: 12px; }
|
||
.nav-cta {
|
||
padding: 8px 20px; border: none; border-radius: 8px; font-size: 13px; font-weight: 600;
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
color: #020617; cursor: pointer; transition: transform 0.2s, box-shadow 0.3s;
|
||
}
|
||
.nav-cta:hover { transform: translateY(-1px); box-shadow: 0 4px 20px rgba(45,212,191,0.3); }
|
||
.nav-mobile-toggle {
|
||
display: none; background: none; border: none; color: var(--text);
|
||
font-size: 24px; cursor: pointer;
|
||
}
|
||
|
||
/* ========== HERO SECTION ========== */
|
||
.hero {
|
||
position: relative; min-height: 100vh;
|
||
display: flex; align-items: center; justify-content: center;
|
||
padding: 120px 5vw 80px; gap: 60px;
|
||
overflow: hidden;
|
||
}
|
||
.hero-bg { position: absolute; inset: 0; overflow: hidden; z-index: 0; }
|
||
.orb {
|
||
position: absolute; border-radius: 50%; filter: blur(80px); opacity: 0.35;
|
||
animation: orbFloat 20s ease-in-out infinite;
|
||
}
|
||
.orb-1 { width: 600px; height: 600px; background: radial-gradient(circle, var(--accent2) 0%, transparent 70%); top: -200px; right: -100px; animation-duration: 25s; }
|
||
.orb-2 { width: 400px; height: 400px; background: radial-gradient(circle, var(--accent3) 0%, transparent 70%); bottom: -100px; left: -50px; animation-duration: 30s; animation-delay: -5s; }
|
||
.orb-3 { width: 300px; height: 300px; background: radial-gradient(circle, var(--accent) 0%, transparent 70%); top: 40%; left: 30%; animation-duration: 22s; animation-delay: -10s; }
|
||
@keyframes orbFloat {
|
||
0%, 100% { transform: translate(0,0) scale(1); }
|
||
25% { transform: translate(30px,-40px) scale(1.05); }
|
||
50% { transform: translate(-20px,20px) scale(0.95); }
|
||
75% { transform: translate(15px,35px) scale(1.02); }
|
||
}
|
||
.hero-grid {
|
||
position: absolute; inset: 0;
|
||
background-image: linear-gradient(rgba(45,212,191,0.03) 1px, transparent 1px),
|
||
linear-gradient(90deg, rgba(45,212,191,0.03) 1px, transparent 1px);
|
||
background-size: 60px 60px;
|
||
mask-image: radial-gradient(ellipse at center, black 30%, transparent 70%);
|
||
-webkit-mask-image: radial-gradient(ellipse at center, black 30%, transparent 70%);
|
||
}
|
||
.hero-particles { position: absolute; inset: 0; overflow: hidden; pointer-events: none; z-index: 0; }
|
||
.hero-particles span {
|
||
position: absolute; bottom: -20px; background: rgba(45,212,191,0.25); border-radius: 50%;
|
||
animation: particleRise linear infinite;
|
||
}
|
||
.hero-particles span:nth-child(1) { left:5%; width:4px; height:4px; animation-duration:18s; }
|
||
.hero-particles span:nth-child(2) { left:15%; width:8px; height:8px; animation-duration:22s; animation-delay:-3s; }
|
||
.hero-particles span:nth-child(3) { left:25%; width:3px; height:3px; animation-duration:16s; animation-delay:-7s; }
|
||
.hero-particles span:nth-child(4) { left:40%; width:6px; height:6px; animation-duration:20s; animation-delay:-2s; }
|
||
.hero-particles span:nth-child(5) { left:55%; width:5px; height:5px; animation-duration:24s; animation-delay:-5s; }
|
||
.hero-particles span:nth-child(6) { left:65%; width:7px; height:7px; animation-duration:19s; animation-delay:-8s; }
|
||
.hero-particles span:nth-child(7) { left:78%; width:4px; height:4px; animation-duration:21s; animation-delay:-1s; }
|
||
.hero-particles span:nth-child(8) { left:90%; width:6px; height:6px; animation-duration:17s; animation-delay:-6s; }
|
||
@keyframes particleRise {
|
||
0% { transform: translateY(0) translateX(0); opacity: 0; }
|
||
10% { opacity: 0.4; }
|
||
50% { transform: translateY(-50vh) translateX(20px); opacity: 0.25; }
|
||
100% { transform: translateY(-100vh) translateX(-10px); opacity: 0; }
|
||
}
|
||
.hero-content { position: relative; z-index: 2; max-width: 600px; }
|
||
.hero-badge {
|
||
display: inline-flex; align-items: center; gap: 8px;
|
||
padding: 6px 16px; background: rgba(45,212,191,0.1);
|
||
border: 1px solid rgba(45,212,191,0.25); border-radius: 100px;
|
||
font-size: 13px; font-weight: 500; color: var(--accent);
|
||
margin-bottom: 24px; backdrop-filter: blur(8px);
|
||
}
|
||
.hero-badge .badge-dot {
|
||
width: 6px; height: 6px; background: var(--accent); border-radius: 50%;
|
||
animation: pulse 2s infinite;
|
||
}
|
||
.hero-title {
|
||
font-size: clamp(36px,5vw,64px); font-weight: 800;
|
||
line-height: 1.1; letter-spacing: -0.02em; color: #f8fafc; margin-bottom: 20px;
|
||
}
|
||
.gradient-text {
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2), var(--accent3));
|
||
-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
|
||
}
|
||
.hero-subtitle {
|
||
font-size: 18px; line-height: 1.7; color: var(--text-dim);
|
||
margin-bottom: 36px; max-width: 480px;
|
||
}
|
||
.hero-cta-group { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; }
|
||
.cta-primary {
|
||
display: inline-flex; align-items: center; gap: 10px;
|
||
padding: 16px 32px; font-family: 'Plus Jakarta Sans',sans-serif;
|
||
font-size: 16px; font-weight: 600; color: #020617;
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
border: none; border-radius: 12px; cursor: pointer;
|
||
position: relative; overflow: hidden;
|
||
transition: transform 0.2s, box-shadow 0.3s;
|
||
}
|
||
.cta-primary:hover {
|
||
transform: translateY(-2px);
|
||
box-shadow: 0 8px 25px rgba(45,212,191,0.3);
|
||
}
|
||
.cta-primary::after {
|
||
content: ''; position: absolute; top: 0; left: -100%; width: 100%; height: 100%;
|
||
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
|
||
}
|
||
.cta-primary:hover::after { animation: ctaShine 0.6s ease forwards; }
|
||
@keyframes ctaShine { 0% { left: -100%; } 100% { left: 100%; } }
|
||
.cta-arrow { transition: transform 0.2s; }
|
||
.cta-primary:hover .cta-arrow { transform: translateX(4px); }
|
||
.cta-secondary {
|
||
display: inline-flex; align-items: center; gap: 10px;
|
||
padding: 16px 28px; font-size: 16px; font-weight: 500;
|
||
color: var(--text); background: transparent;
|
||
border: 1px solid rgba(255,255,255,0.15); border-radius: 12px;
|
||
cursor: pointer; backdrop-filter: blur(8px); transition: all 0.3s;
|
||
}
|
||
.cta-secondary:hover {
|
||
border-color: rgba(45,212,191,0.4); background: rgba(45,212,191,0.05);
|
||
}
|
||
.hero-preview {
|
||
position: relative; z-index: 2; flex-shrink: 0;
|
||
}
|
||
.glass-card {
|
||
background: rgba(15,23,42,0.6); backdrop-filter: blur(16px);
|
||
-webkit-backdrop-filter: blur(16px);
|
||
border: 1px solid rgba(255,255,255,0.08); border-radius: 16px;
|
||
padding: 24px; width: 380px;
|
||
box-shadow: 0 4px 30px rgba(0,0,0,0.3), inset 0 1px 0 rgba(255,255,255,0.05);
|
||
transition: border-color 0.3s, box-shadow 0.3s;
|
||
}
|
||
.glass-card:hover {
|
||
border-color: rgba(45,212,191,0.2);
|
||
box-shadow: 0 8px 40px rgba(0,0,0,0.4), 0 0 30px rgba(45,212,191,0.05);
|
||
}
|
||
.preview-header {
|
||
display: flex; align-items: center; gap: 8px;
|
||
font-size: 12px; color: var(--accent); font-weight: 600;
|
||
text-transform: uppercase; letter-spacing: 1px; margin-bottom: 16px;
|
||
}
|
||
.preview-header .live-dot {
|
||
width: 6px; height: 6px; background: var(--success); border-radius: 50%;
|
||
animation: pulse 2s infinite;
|
||
}
|
||
.preview-line {
|
||
display: flex; justify-content: space-between; padding: 8px 0;
|
||
font-size: 13px; border-bottom: 1px solid rgba(255,255,255,0.04);
|
||
}
|
||
.preview-line:last-child { border-bottom: none; }
|
||
.preview-label { color: var(--text-dim); }
|
||
.preview-highlight { color: var(--accent); font-weight: 600; }
|
||
.wave-container {
|
||
position: absolute; bottom: 0; left: 0; width: 100%; height: 120px; z-index: 1;
|
||
}
|
||
.wave { position: absolute; bottom: 0; left: 0; width: 200%; height: 100%; }
|
||
.wave path { fill: var(--bg-panel); }
|
||
.wave-1 { opacity: 0.6; animation: waveSlide 8s linear infinite; }
|
||
.wave-2 { opacity: 0.3; animation: waveSlide 12s linear infinite reverse; }
|
||
@keyframes waveSlide { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } }
|
||
|
||
/* ========== STATS BAR ========== */
|
||
.stats-bar {
|
||
background: var(--bg-panel); padding: 60px 5vw; position: relative;
|
||
}
|
||
.stats-grid {
|
||
display: grid; grid-template-columns: repeat(4,1fr); gap: 32px;
|
||
max-width: 1100px; margin: 0 auto;
|
||
}
|
||
.stat-card {
|
||
text-align: center; padding: 28px 16px;
|
||
background: rgba(255,255,255,0.02); border: 1px solid var(--border);
|
||
border-radius: 16px; transition: transform 0.3s, border-color 0.3s;
|
||
}
|
||
.stat-card:hover { transform: translateY(-4px); border-color: rgba(45,212,191,0.3); }
|
||
.stat-number {
|
||
font-family: 'Plus Jakarta Sans',sans-serif; font-size: 42px; font-weight: 800;
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
-webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;
|
||
margin-bottom: 6px;
|
||
}
|
||
.stat-label {
|
||
font-size: 13px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 1px;
|
||
}
|
||
|
||
/* ========== SECTION COMMON ========== */
|
||
.section-pad { padding: 100px 5vw; max-width: 1200px; margin: 0 auto; }
|
||
.section-badge {
|
||
display: inline-flex; align-items: center; gap: 6px;
|
||
padding: 5px 14px; background: rgba(45,212,191,0.08);
|
||
border: 1px solid rgba(45,212,191,0.2); border-radius: 100px;
|
||
font-size: 12px; font-weight: 600; color: var(--accent);
|
||
text-transform: uppercase; letter-spacing: 1px; margin-bottom: 16px;
|
||
}
|
||
.section-title {
|
||
font-size: clamp(28px,4vw,42px); font-weight: 800;
|
||
line-height: 1.2; letter-spacing: -0.02em; color: var(--text); margin-bottom: 16px;
|
||
}
|
||
.section-subtitle {
|
||
font-size: 17px; line-height: 1.7; color: var(--text-dim); max-width: 600px;
|
||
}
|
||
.section-header { text-align: center; margin-bottom: 60px; }
|
||
.section-header .section-subtitle { margin: 0 auto; }
|
||
|
||
/* ========== FEATURES ========== */
|
||
.features-section { background: var(--bg-dark); }
|
||
.features-grid {
|
||
display: grid; grid-template-columns: repeat(3,1fr); gap: 24px;
|
||
}
|
||
.feature-card {
|
||
background: rgba(15,23,42,0.5); border: 1px solid var(--border);
|
||
border-radius: 16px; padding: 32px; transition: all 0.3s;
|
||
position: relative; overflow: hidden;
|
||
}
|
||
.feature-card:hover {
|
||
border-color: rgba(45,212,191,0.25); transform: translateY(-4px);
|
||
box-shadow: 0 12px 40px rgba(0,0,0,0.3);
|
||
}
|
||
.feature-card::before {
|
||
content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px;
|
||
background: linear-gradient(90deg, var(--accent), var(--accent2));
|
||
opacity: 0; transition: opacity 0.3s;
|
||
}
|
||
.feature-card:hover::before { opacity: 1; }
|
||
.feature-icon {
|
||
width: 48px; height: 48px; border-radius: 12px;
|
||
background: rgba(45,212,191,0.1); display: flex; align-items: center;
|
||
justify-content: center; font-size: 24px; margin-bottom: 20px;
|
||
}
|
||
.feature-card h3 { font-size: 18px; font-weight: 700; margin-bottom: 10px; color: var(--text); }
|
||
.feature-card p { font-size: 14px; line-height: 1.6; color: var(--text-dim); }
|
||
.feature-tag {
|
||
display: inline-block; margin-top: 14px; padding: 3px 10px;
|
||
border-radius: 100px; font-size: 11px; font-weight: 600;
|
||
}
|
||
.tag-free { background: rgba(52,211,153,0.12); color: var(--success); }
|
||
.tag-paid { background: rgba(14,165,233,0.12); color: var(--accent2); }
|
||
|
||
/* ========== HOW IT WORKS ========== */
|
||
.how-section { background: var(--bg-panel); }
|
||
.how-steps {
|
||
display: grid; grid-template-columns: repeat(3,1fr); gap: 40px;
|
||
position: relative;
|
||
}
|
||
.how-steps::before {
|
||
content: ''; position: absolute; top: 40px; left: 15%; right: 15%; height: 2px;
|
||
background: linear-gradient(90deg, var(--accent), var(--accent2), var(--accent3));
|
||
opacity: 0.2; z-index: 0;
|
||
}
|
||
.how-step { text-align: center; position: relative; z-index: 1; }
|
||
.step-num {
|
||
width: 56px; height: 56px; border-radius: 50%; margin: 0 auto 20px;
|
||
background: linear-gradient(135deg, var(--accent), var(--accent2));
|
||
display: flex; align-items: center; justify-content: center;
|
||
font-family: 'Plus Jakarta Sans',sans-serif; font-size: 22px; font-weight: 800;
|
||
color: #020617;
|
||
}
|
||
.how-step h3 { font-size: 18px; font-weight: 700; margin-bottom: 10px; }
|
||
.how-step p { font-size: 14px; line-height: 1.6; color: var(--text-dim); max-width: 280px; margin: 0 auto; }
|
||
|
||
/* ========== CHAT SECTION ========== */
|
||
.chat-section { background: var(--bg-dark); padding: 100px 5vw; }
|
||
.chat-container {
|
||
display: flex; height: 700px; max-width: 1200px; margin: 0 auto;
|
||
border-radius: 16px; border: 1px solid var(--border-strong);
|
||
overflow: hidden; box-shadow: 0 20px 60px rgba(0,0,0,0.4);
|
||
background: var(--bg-chat);
|
||
}
|
||
|
||
/* ========== CTA SECTION ========== */
|
||
.cta-section {
|
||
background: var(--bg-panel); padding: 100px 5vw; text-align: center;
|
||
position: relative; overflow: hidden;
|
||
}
|
||
.cta-section .orb { opacity: 0.2; }
|
||
.cta-inner { position: relative; z-index: 2; max-width: 600px; margin: 0 auto; }
|
||
.cta-inner h2 {
|
||
font-size: clamp(28px,4vw,42px); font-weight: 800;
|
||
margin-bottom: 16px; color: var(--text);
|
||
}
|
||
.cta-inner p { font-size: 17px; color: var(--text-dim); margin-bottom: 32px; line-height: 1.7; }
|
||
|
||
/* ========== FOOTER ========== */
|
||
.site-footer {
|
||
background: var(--bg-dark); border-top: 1px solid var(--border);
|
||
padding: 60px 5vw 30px;
|
||
}
|
||
.footer-grid {
|
||
display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 40px;
|
||
max-width: 1100px; margin: 0 auto 40px;
|
||
}
|
||
.footer-brand .nav-logo { margin-bottom: 12px; }
|
||
.footer-brand p { font-size: 13px; color: var(--text-dim); line-height: 1.6; max-width: 280px; }
|
||
.footer-col h4 {
|
||
font-size: 12px; text-transform: uppercase; letter-spacing: 1px;
|
||
color: var(--text-dim); margin-bottom: 16px;
|
||
}
|
||
.footer-col a {
|
||
display: block; color: var(--text-muted); text-decoration: none;
|
||
font-size: 14px; padding: 4px 0; transition: color 0.2s;
|
||
}
|
||
.footer-col a:hover { color: var(--accent); }
|
||
.footer-bottom {
|
||
text-align: center; padding-top: 30px; border-top: 1px solid var(--border);
|
||
font-size: 12px; color: var(--text-muted);
|
||
}
|
||
.footer-bottom a { color: var(--accent); text-decoration: none; }
|
||
|
||
/* ========== SCROLL REVEAL ========== */
|
||
.reveal {
|
||
opacity: 0; transform: translateY(30px);
|
||
transition: opacity 0.8s ease, transform 0.8s ease;
|
||
}
|
||
.reveal.visible { opacity: 1; transform: translateY(0); }
|
||
.reveal-delay-1 { transition-delay: 100ms; }
|
||
.reveal-delay-2 { transition-delay: 200ms; }
|
||
.reveal-delay-3 { transition-delay: 300ms; }
|
||
.reveal-delay-4 { transition-delay: 400ms; }
|
||
.reveal-delay-5 { transition-delay: 500ms; }
|
||
|
||
/* ========== LANDING RESPONSIVE ========== */
|
||
@media (max-width: 1024px) {
|
||
.hero { flex-direction: column; text-align: center; padding-top: 140px; }
|
||
.hero-content { max-width: 100%; }
|
||
.hero-subtitle { margin: 0 auto 36px; }
|
||
.hero-cta-group { justify-content: center; }
|
||
.hero-preview { display: none; }
|
||
.stats-grid { grid-template-columns: repeat(2,1fr); }
|
||
.features-grid { grid-template-columns: repeat(2,1fr); }
|
||
.footer-grid { grid-template-columns: 1fr 1fr; gap: 30px; }
|
||
}
|
||
@media (max-width: 768px) {
|
||
.top-nav { padding: 12px 4vw; }
|
||
.nav-links { display: none; }
|
||
.nav-mobile-toggle { display: block; }
|
||
.hero { min-height: auto; padding: 120px 5vw 60px; }
|
||
.hero-title { font-size: 32px; }
|
||
.hero-subtitle { font-size: 16px; }
|
||
.stats-grid { grid-template-columns: repeat(2,1fr); gap: 16px; }
|
||
.stat-number { font-size: 32px; }
|
||
.stat-card { padding: 20px 12px; }
|
||
.features-grid { grid-template-columns: 1fr; }
|
||
.how-steps { grid-template-columns: 1fr; gap: 30px; }
|
||
.how-steps::before { display: none; }
|
||
.chat-section { padding: 60px 3vw; }
|
||
.chat-container { height: 600px; border-radius: 12px; flex-direction: column; }
|
||
.chat-container .sidebar { display: none; }
|
||
.footer-grid { grid-template-columns: 1fr; gap: 24px; }
|
||
.cta-primary, .cta-secondary { width: 100%; justify-content: center; }
|
||
}
|
||
@media (max-width: 480px) {
|
||
.stats-grid { grid-template-columns: 1fr 1fr; gap: 10px; }
|
||
.stat-number { font-size: 28px; }
|
||
.chat-container { height: 500px; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<!-- ========== TOP NAVIGATION ========== -->
|
||
<nav class="top-nav" id="topNav">
|
||
<a href="#" class="nav-logo" onclick="event.preventDefault();window.scrollTo({top:0,behavior:'smooth'})">
|
||
<div class="nav-logo-icon">⚓</div>
|
||
<span class="nav-logo-text">SeaFare Montana</span>
|
||
</a>
|
||
<div class="nav-links" id="navLinks">
|
||
<a href="#features" data-i18n="nav_features">Features</a>
|
||
<a href="#how-it-works" data-i18n="nav_how">How It Works</a>
|
||
<a href="chat.html" target="_blank" data-i18n="nav_chat">Try Now</a>
|
||
</div>
|
||
<div class="nav-right">
|
||
<div class="lang-switcher">
|
||
<button class="lang-btn active" onclick="setLang('en')">EN</button>
|
||
<button class="lang-btn" onclick="setLang('ru')">RU</button>
|
||
<button class="lang-btn" onclick="setLang('es')">ES</button>
|
||
</div>
|
||
<a href="chat.html" target="_blank" class="nav-cta" style="text-decoration:none;" data-i18n="nav_start">Open Chat</a>
|
||
<button class="nav-mobile-toggle" onclick="document.getElementById('navLinks').classList.toggle('show')">☰</button>
|
||
</div>
|
||
</nav>
|
||
|
||
<!-- ========== HERO SECTION ========== -->
|
||
<section class="hero" id="hero">
|
||
<div class="hero-bg">
|
||
<div class="orb orb-1"></div>
|
||
<div class="orb orb-2"></div>
|
||
<div class="orb orb-3"></div>
|
||
<div class="hero-grid"></div>
|
||
</div>
|
||
<div class="hero-particles">
|
||
<span></span><span></span><span></span><span></span>
|
||
<span></span><span></span><span></span><span></span>
|
||
</div>
|
||
<div class="wave-container">
|
||
<svg class="wave wave-1" viewBox="0 0 1440 120" preserveAspectRatio="none">
|
||
<path d="M0,60 C360,120 720,0 1080,60 C1260,90 1380,75 1440,60 L1440,120 L0,120 Z"/>
|
||
</svg>
|
||
<svg class="wave wave-2" viewBox="0 0 1440 120" preserveAspectRatio="none">
|
||
<path d="M0,80 C240,20 480,100 720,60 C960,20 1200,90 1440,50 L1440,120 L0,120 Z"/>
|
||
</svg>
|
||
</div>
|
||
<div class="hero-content">
|
||
<div class="hero-badge">
|
||
<span class="badge-dot"></span>
|
||
<span data-i18n="hero_badge">AI-Powered Maritime Intelligence</span>
|
||
</div>
|
||
<h1 class="hero-title" data-i18n="hero_title">Navigate Global Shipping<br><span class="gradient-text">With AI Precision</span></h1>
|
||
<p class="hero-subtitle" data-i18n="hero_subtitle">Real-time vessel tracking, intelligent port analysis, and demurrage calculations. Powered by AI with 25 years of maritime expertise built in.</p>
|
||
<div class="hero-cta-group">
|
||
<a href="chat.html" target="_blank" class="cta-primary" style="text-decoration:none;">
|
||
<span data-i18n="hero_cta">Open AI Chat</span>
|
||
<span class="cta-arrow">→</span>
|
||
</a>
|
||
<a href="#features" class="cta-secondary" style="text-decoration:none;">
|
||
<span data-i18n="hero_cta2">See Features</span>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
<div class="hero-preview">
|
||
<div class="glass-card">
|
||
<div class="preview-header">
|
||
<span class="live-dot"></span> Live Tracking
|
||
</div>
|
||
<div class="preview-line"><span class="preview-label">Vessel:</span><span>EVER GIVEN — IMO 9811000</span></div>
|
||
<div class="preview-line"><span class="preview-label">Position:</span><span>Suez Canal, 30.0N 32.5E</span></div>
|
||
<div class="preview-line"><span class="preview-label">Speed:</span><span>12.4 kn / Course 315°</span></div>
|
||
<div class="preview-line"><span class="preview-label">ETA:</span><span class="preview-highlight">Rotterdam — 14h 32m</span></div>
|
||
<div class="preview-line"><span class="preview-label">Status:</span><span style="color:var(--success);">● Underway</span></div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ========== STATS BAR ========== -->
|
||
<section class="stats-bar">
|
||
<div class="stats-grid">
|
||
<div class="stat-card reveal"><div class="stat-number" data-target="14000">0</div><div class="stat-label" data-i18n="stat_vessels">Vessels Tracked</div></div>
|
||
<div class="stat-card reveal reveal-delay-1"><div class="stat-number" data-target="200">0</div><div class="stat-label" data-i18n="stat_ports">Global Ports</div></div>
|
||
<div class="stat-card reveal reveal-delay-2"><div class="stat-number">24/7</div><div class="stat-label" data-i18n="stat_ai">AI Availability</div></div>
|
||
<div class="stat-card reveal reveal-delay-3"><div class="stat-number"><2s</div><div class="stat-label" data-i18n="stat_speed">Response Time</div></div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ========== FEATURES ========== -->
|
||
<section id="features" class="features-section">
|
||
<div class="section-pad">
|
||
<div class="section-header reveal">
|
||
<div class="section-badge" data-i18n="features_badge">Capabilities</div>
|
||
<h2 class="section-title" data-i18n="features_title">Everything You Need for Maritime Operations</h2>
|
||
<p class="section-subtitle" data-i18n="features_subtitle">From vessel tracking to route planning — all powered by AI with real-time maritime data.</p>
|
||
</div>
|
||
<div class="features-grid">
|
||
<div class="feature-card reveal" style="--i:0">
|
||
<div class="feature-icon">🚢</div>
|
||
<h3 data-i18n="feat_search">Vessel Search</h3>
|
||
<p data-i18n="feat_search_desc">Find any vessel worldwide by name, IMO, or MMSI. Get instant details on type, flag, tonnage, and classification.</p>
|
||
<span class="feature-tag tag-free" data-i18n="free">Free</span>
|
||
</div>
|
||
<div class="feature-card reveal reveal-delay-1" style="--i:1">
|
||
<div class="feature-icon">📍</div>
|
||
<h3 data-i18n="feat_position">Live Position</h3>
|
||
<p data-i18n="feat_position_desc">Real-time AIS tracking with coordinates, speed, course, destination, and navigation status.</p>
|
||
<span class="feature-tag tag-free" data-i18n="free">Free</span>
|
||
</div>
|
||
<div class="feature-card reveal reveal-delay-2" style="--i:2">
|
||
<div class="feature-icon">🏢</div>
|
||
<h3 data-i18n="feat_owner">Owner & Operator</h3>
|
||
<p data-i18n="feat_owner_desc">Comprehensive company information — registered owner, operator, ISM manager, and classification society.</p>
|
||
<span class="feature-tag tag-free" data-i18n="free">Free</span>
|
||
</div>
|
||
<div class="feature-card reveal reveal-delay-3" style="--i:3">
|
||
<div class="feature-icon">💲</div>
|
||
<h3 data-i18n="feat_demurrage">Demurrage Calculator</h3>
|
||
<p data-i18n="feat_demurrage_desc">Calculate delay costs instantly. Input laytime, actual days, and rate — get precise financial breakdown.</p>
|
||
<span class="feature-tag tag-free" data-i18n="free">Free</span>
|
||
</div>
|
||
<div class="feature-card reveal reveal-delay-4" style="--i:4">
|
||
<div class="feature-icon">🙋</div>
|
||
<h3 data-i18n="feat_contacts">Contact Introductions</h3>
|
||
<p data-i18n="feat_contacts_desc">Connect with verified operators, charterers, and port agents. Unlock full contact details for direct communication.</p>
|
||
<span class="feature-tag tag-paid">$10 USDT</span>
|
||
</div>
|
||
<div class="feature-card reveal reveal-delay-5" style="--i:5">
|
||
<div class="feature-icon">🛰</div>
|
||
<h3 data-i18n="feat_routes">Sea Route Calculator</h3>
|
||
<p data-i18n="feat_routes_desc">Calculate distance, transit time, waypoints, and voyage cost between any two ports. Covers 100+ global ports.</p>
|
||
<span class="feature-tag tag-free">Free</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ========== HOW IT WORKS ========== -->
|
||
<section id="how-it-works" class="how-section">
|
||
<div class="section-pad">
|
||
<div class="section-header reveal">
|
||
<div class="section-badge" data-i18n="how_badge">Simple Process</div>
|
||
<h2 class="section-title" data-i18n="how_title">How It Works</h2>
|
||
<p class="section-subtitle" data-i18n="how_subtitle">Get maritime intelligence in seconds, not hours. No manuals, no complex interfaces.</p>
|
||
</div>
|
||
<div class="how-steps">
|
||
<div class="how-step reveal">
|
||
<div class="step-num">1</div>
|
||
<h3 data-i18n="step1_title">Ask in Plain Language</h3>
|
||
<p data-i18n="step1_desc">Type your question naturally — "Find bulk carriers near Singapore" or "Route from Santos to Rotterdam."</p>
|
||
</div>
|
||
<div class="how-step reveal reveal-delay-2">
|
||
<div class="step-num">2</div>
|
||
<h3 data-i18n="step2_title">AI Analyzes Instantly</h3>
|
||
<p data-i18n="step2_desc">Our AI queries real-time maritime data, AIS feeds, and port intelligence to find the best answer.</p>
|
||
</div>
|
||
<div class="how-step reveal reveal-delay-4">
|
||
<div class="step-num">3</div>
|
||
<h3 data-i18n="step3_title">Get Actionable Results</h3>
|
||
<p data-i18n="step3_desc">Receive structured data — tables, routes, costs, contacts — ready for immediate business decisions.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ========== TRY IT SECTION ========== -->
|
||
<section id="chat" class="chat-section" style="text-align:center;">
|
||
<div class="section-header reveal" style="max-width:1200px;margin:0 auto 40px;">
|
||
<div class="section-badge" data-i18n="chat_badge">Live AI Agent</div>
|
||
<h2 class="section-title" data-i18n="chat_title">Try SeaFare Montana Now</h2>
|
||
<p class="section-subtitle" data-i18n="chat_subtitle">Open the AI chat — ask about vessels, routes, cargo, or anything maritime.</p>
|
||
</div>
|
||
<a href="chat.html" target="_blank" class="cta-primary" style="text-decoration:none;display:inline-flex;font-size:1.1rem;padding:16px 40px;">
|
||
<span data-i18n="open_chat">Open AI Chat</span>
|
||
<span class="cta-arrow">→</span>
|
||
</a>
|
||
<p style="margin-top:20px;color:var(--text-dim);font-size:0.9rem;" data-i18n="chat_note">Free to use. No registration required for basic features.</p>
|
||
</section>
|
||
|
||
<!-- ========== CTA SECTION ========== -->
|
||
<section class="cta-section">
|
||
<div class="orb orb-1" style="width:400px;height:400px;top:-100px;right:-50px;"></div>
|
||
<div class="orb orb-2" style="width:300px;height:300px;bottom:-50px;left:-50px;"></div>
|
||
<div class="cta-inner reveal">
|
||
<h2 data-i18n="cta_title">Ready to Optimize Your Maritime Operations?</h2>
|
||
<p data-i18n="cta_desc">Join shipping professionals who use SeaFare Montana to make faster, data-driven decisions.</p>
|
||
<a href="chat.html" target="_blank" class="cta-primary" style="text-decoration:none;display:inline-flex;">
|
||
<span data-i18n="cta_btn">Open AI Chat</span>
|
||
<span class="cta-arrow">→</span>
|
||
</a>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ========== FOOTER ========== -->
|
||
<footer class="site-footer">
|
||
<div class="footer-grid">
|
||
<div class="footer-brand">
|
||
<a href="#" class="nav-logo" onclick="event.preventDefault();window.scrollTo({top:0,behavior:'smooth'})">
|
||
<div class="nav-logo-icon">⚓</div>
|
||
<span class="nav-logo-text">SeaFare Montana</span>
|
||
</a>
|
||
<p data-i18n="footer_desc">AI-powered maritime logistics platform. 25 years of industry expertise, now available 24/7 through intelligent automation.</p>
|
||
</div>
|
||
<div class="footer-col">
|
||
<h4 data-i18n="footer_services">Services</h4>
|
||
<a href="#features" data-i18n="feat_search">Vessel Search</a>
|
||
<a href="#features" data-i18n="feat_position">Live Position</a>
|
||
<a href="#features" data-i18n="feat_demurrage">Demurrage Calculator</a>
|
||
<a href="#features" data-i18n="feat_contacts">Contact Introductions</a>
|
||
</div>
|
||
<div class="footer-col">
|
||
<h4 data-i18n="footer_platform">Platform</h4>
|
||
<a href="#how-it-works" data-i18n="nav_how">How It Works</a>
|
||
<a href="chat.html" target="_blank" data-i18n="nav_chat">Try Now</a>
|
||
<a href="https://moltbook.com/u/SeaFare_Montana" target="_blank">Moltbook</a>
|
||
</div>
|
||
<div class="footer-col">
|
||
<h4 data-i18n="footer_contact">Contact</h4>
|
||
<a href="https://moltbook.com/u/SeaFare_Montana" target="_blank">Moltbook Profile</a>
|
||
</div>
|
||
</div>
|
||
<div class="footer-bottom">
|
||
© 2026 SeaFare Montana • Powered by <a href="https://moltbook.com/u/SeaFare_Montana" target="_blank">Moltbook</a>
|
||
• <span data-i18n="footer_tagline">Montana Protocol • 25 years expertise</span>
|
||
• <span id="appVersion" style="opacity:0.5;"></span>
|
||
</div>
|
||
</footer>
|
||
|
||
<script>
|
||
// =============================================================================
|
||
// i18n — translations
|
||
// =============================================================================
|
||
const i18n = {
|
||
en: {
|
||
subtitle: 'Maritime Logistics Agent',
|
||
status: 'Online — Ready',
|
||
services_title: 'Services',
|
||
header_sub: 'Maritime Logistics AI Agent',
|
||
clear_chat: 'Clear Chat',
|
||
input_hint: 'Press Enter to send \u2022 Shift+Enter for new line',
|
||
placeholder: 'Ask about vessels, positions, owners, demurrage...',
|
||
free: 'Free',
|
||
svc_search: 'Vessel Search',
|
||
svc_search_desc: 'Name, IMO, MMSI lookup',
|
||
svc_position: 'Vessel Position',
|
||
svc_position_desc: 'AIS real-time tracking',
|
||
svc_owner: 'Owner / Operator',
|
||
svc_owner_desc: 'Company information',
|
||
svc_demurrage: 'Demurrage Calculator',
|
||
svc_demurrage_desc: 'Delay cost estimation',
|
||
svc_contacts: 'Contact Introduction',
|
||
svc_contacts_desc: 'Shipper \u2194 Operator',
|
||
footer: 'Montana Protocol \u2022 25 years expertise',
|
||
welcome: '<strong>Welcome to SeaFare Montana!</strong><br><br>' +
|
||
"I'm your AI-powered maritime logistics agent. Here's what I can do:<br><br>" +
|
||
'🚢 <strong>Vessel search</strong> — find any ship by name, IMO, or MMSI<br>' +
|
||
'📍 <strong>Live position</strong> — real-time AIS tracking<br>' +
|
||
'🏢 <strong>Owner & operator</strong> — company information<br>' +
|
||
'💲 <strong>Demurrage</strong> — calculate delay costs<br>' +
|
||
'🙋 <strong>Introductions</strong> — connect with operators ($10 USDT)<br><br>' +
|
||
'Try the quick actions below or just ask me anything!',
|
||
chat_cleared: '<strong>Chat cleared.</strong><br>How can I help you today?',
|
||
confirm_clear: 'Are you sure you want to clear the chat history?',
|
||
error_generic: 'Sorry, something went wrong. Please try again.',
|
||
error_connection: 'Connection error. Make sure the server is running on port 5050.',
|
||
// Quick action buttons (labels)
|
||
qb_vessels_port: 'Vessels near port',
|
||
qb_route: 'Route A to B',
|
||
qb_cargo: 'Ship my cargo',
|
||
qb_search: 'Search vessel',
|
||
qb_demurrage: 'Demurrage calc',
|
||
qb_contacts: 'Find contacts',
|
||
// Quick action messages sent to bot
|
||
qm_btn_vessels_port: 'What vessels are near Rotterdam right now?',
|
||
qm_btn_route: 'Calculate route from Shanghai to Rotterdam for a container ship',
|
||
qm_btn_cargo: 'I need to ship 50000 tons of grain from Santos to Rotterdam',
|
||
qm_btn_search: 'Search vessel EVER GIVEN',
|
||
qm_btn_demurrage: 'Calculate demurrage: 10 agreed days, 14 actual, $25000/day',
|
||
},
|
||
ru: {
|
||
subtitle: 'Морской Логистический Агент',
|
||
status: 'Онлайн — Готов',
|
||
services_title: 'Сервисы',
|
||
header_sub: 'AI Агент Морской Логистики',
|
||
clear_chat: 'Очистить чат',
|
||
input_hint: 'Enter — отправить • Shift+Enter — новая строка',
|
||
placeholder: 'Спросите о судах, позициях, владельцах, демередже...',
|
||
free: 'Бесплатно',
|
||
svc_search: 'Поиск судна',
|
||
svc_search_desc: 'По имени, IMO, MMSI',
|
||
svc_position: 'Позиция судна',
|
||
svc_position_desc: 'AIS трекинг',
|
||
svc_owner: 'Владелец / Оператор',
|
||
svc_owner_desc: 'Информация о компании',
|
||
svc_demurrage: 'Калькулятор демереджа',
|
||
svc_demurrage_desc: 'Расчёт стоимости простоя',
|
||
svc_contacts: 'Контакт',
|
||
svc_contacts_desc: 'Грузоотправитель ↔ Оператор',
|
||
footer: 'Montana Protocol • 25 лет опыта',
|
||
footer_contact: 'Контакты',
|
||
footer_tagline: 'Montana Protocol • 25 лет опыта',
|
||
welcome: '<strong>Добро пожаловать в SeaFare Montana!</strong>',
|
||
chat_cleared: '<strong>Чат очищен.</strong><br>Чем могу помочь?',
|
||
confirm_clear: 'Вы уверены, что хотите очистить историю чата?',
|
||
error_generic: 'Произошла ошибка. Попробуйте ещё раз.',
|
||
error_connection: 'Ошибка соединения с сервером.',
|
||
qb_vessels_port: 'Суда у порта',
|
||
qb_route: 'Маршрут A→B',
|
||
qb_cargo: 'Перевезти груз',
|
||
qb_search: 'Поиск судна',
|
||
qb_demurrage: 'Демередж',
|
||
qb_contacts: 'Найти контакты',
|
||
qm_btn_vessels_port: 'Какие суда сейчас рядом с Роттердамом?',
|
||
qm_btn_route: 'Рассчитай маршрут из Шанхая в Роттердам для контейнеровоза',
|
||
qm_btn_cargo: 'Нужно перевезти 50000 тонн зерна из Сантоса в Роттердам',
|
||
qm_btn_search: 'Найди судно EVER GIVEN',
|
||
qm_btn_demurrage: 'Рассчитай демередж: 10 согласованных дней, 14 фактических, $25000/день',
|
||
},
|
||
es: {
|
||
subtitle: 'Agente de Logística Marítima',
|
||
status: 'En línea — Listo',
|
||
services_title: 'Servicios',
|
||
header_sub: 'Agente IA de Logística Marítima',
|
||
clear_chat: 'Limpiar chat',
|
||
input_hint: 'Enter para enviar • Shift+Enter nueva línea',
|
||
placeholder: 'Pregunte sobre buques, posiciones, propietarios, demoras...',
|
||
free: 'Gratis',
|
||
svc_search: 'Búsqueda de buque',
|
||
svc_search_desc: 'Por nombre, IMO, MMSI',
|
||
svc_position: 'Posición del buque',
|
||
svc_position_desc: 'Rastreo AIS',
|
||
svc_owner: 'Propietario / Operador',
|
||
svc_owner_desc: 'Información de empresa',
|
||
svc_demurrage: 'Calculadora de demora',
|
||
svc_demurrage_desc: 'Cálculo de costos de demora',
|
||
svc_contacts: 'Contacto',
|
||
svc_contacts_desc: 'Embarcador ↔ Operador',
|
||
footer: 'Montana Protocol • 25 años de experiencia',
|
||
footer_contact: 'Contacto',
|
||
footer_tagline: 'Montana Protocol • 25 años de experiencia',
|
||
welcome: '<strong>¡Bienvenido a SeaFare Montana!</strong>',
|
||
chat_cleared: '<strong>Chat limpiado.</strong><br>¿En qué puedo ayudarle?',
|
||
confirm_clear: '¿Está seguro de que desea borrar el historial del chat?',
|
||
error_generic: 'Lo sentimos, algo salió mal. Inténtelo de nuevo.',
|
||
error_connection: 'Error de conexión con el servidor.',
|
||
qb_vessels_port: 'Buques en puerto',
|
||
qb_route: 'Ruta A→B',
|
||
qb_cargo: 'Enviar carga',
|
||
qb_search: 'Buscar buque',
|
||
qb_demurrage: 'Demora',
|
||
qb_contacts: 'Buscar contactos',
|
||
qm_btn_vessels_port: '¿Qué buques hay cerca de Rotterdam ahora?',
|
||
qm_btn_route: 'Calcula la ruta de Shanghai a Rotterdam para un portacontenedores',
|
||
qm_btn_cargo: 'Necesito enviar 50000 toneladas de grano de Santos a Rotterdam',
|
||
qm_btn_search: 'Buscar buque EVER GIVEN',
|
||
qm_btn_demurrage: 'Calcular demora: 10 días acordados, 14 reales, $25000/día',
|
||
}
|
||
};
|
||
|
||
const currentLang = localStorage.getItem('seafare_lang') || 'en';
|
||
function t(key) { return (i18n[currentLang] && i18n[currentLang][key]) || (i18n.en && i18n.en[key]) || key; }
|
||
|
||
function setLang(lang) {
|
||
currentLang = lang;
|
||
localStorage.setItem('seafare_lang', lang);
|
||
document.querySelectorAll('[data-i18n]').forEach(el => {
|
||
const key = el.getAttribute('data-i18n');
|
||
const text = t(key);
|
||
if (text && text !== key) el.innerHTML = text;
|
||
});
|
||
document.querySelectorAll('.lang-btn').forEach(b => {
|
||
b.classList.toggle('active', b.textContent.trim().toLowerCase() === lang);
|
||
});
|
||
}
|
||
|
||
// =============================================================================
|
||
// Landing Page — scroll reveal, counters, sticky nav
|
||
// =============================================================================
|
||
const revealObserver = new IntersectionObserver((entries) => {
|
||
entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('visible'); });
|
||
}, { threshold: 0.15 });
|
||
document.querySelectorAll('.reveal').forEach(el => revealObserver.observe(el));
|
||
|
||
// Counter animation
|
||
const counterObserver = new IntersectionObserver((entries) => {
|
||
entries.forEach(entry => {
|
||
if (!entry.isIntersecting) return;
|
||
const el = entry.target;
|
||
const target = parseInt(el.dataset.target);
|
||
if (!target) return;
|
||
let current = 0;
|
||
const increment = target / 60;
|
||
const timer = setInterval(() => {
|
||
current += increment;
|
||
if (current >= target) { current = target; clearInterval(timer); }
|
||
el.textContent = Math.floor(current).toLocaleString() + '+';
|
||
}, 25);
|
||
counterObserver.unobserve(el);
|
||
});
|
||
}, { threshold: 0.5 });
|
||
document.querySelectorAll('.stat-number[data-target]').forEach(el => counterObserver.observe(el));
|
||
|
||
// Sticky nav on scroll
|
||
window.addEventListener('scroll', () => {
|
||
const nav = document.getElementById('topNav');
|
||
if (nav) nav.classList.toggle('scrolled', window.scrollY > 50);
|
||
});
|
||
|
||
// Init
|
||
setLang(currentLang);
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|