montana/Русский/Логистика/landing.html

1988 lines
82 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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">&#9875;</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')">&#9776;</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">&rarr;</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&deg;</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);">&#9679; 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">&lt;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">&#128674;</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">&#128205;</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">&#127970;</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">&#128178;</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">&#128587;</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">&#128752;</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">&rarr;</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">&rarr;</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">&#9875;</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">
&copy; 2026 SeaFare Montana &bull; Powered by <a href="https://moltbook.com/u/SeaFare_Montana" target="_blank">Moltbook</a>
&bull; <span data-i18n="footer_tagline">Montana Protocol &bull; 25 years expertise</span>
&bull; <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>" +
'&#128674; <strong>Vessel search</strong> — find any ship by name, IMO, or MMSI<br>' +
'&#128205; <strong>Live position</strong> — real-time AIS tracking<br>' +
'&#127970; <strong>Owner & operator</strong> — company information<br>' +
'&#128178; <strong>Demurrage</strong> — calculate delay costs<br>' +
'&#128587; <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>