diff --git a/client/index.html b/client/index.html index 5b1c6d3..1fab440 100644 --- a/client/index.html +++ b/client/index.html @@ -7,7 +7,7 @@ Chat E2EE - Minimal & Secure - + diff --git a/client/src/components/CallOverlay/CallOverlay.css b/client/src/components/CallOverlay/CallOverlay.css index 13eddb4..eb7837c 100644 --- a/client/src/components/CallOverlay/CallOverlay.css +++ b/client/src/components/CallOverlay/CallOverlay.css @@ -1,92 +1,90 @@ /** - * Call overlay styles – terminal theme + * Call overlay styles */ .blur-overlay { position: fixed; - inset: 0; + top: 0; + left: 0; + right: 0; + bottom: 0; z-index: 200; display: flex; justify-content: center; align-items: center; - background: rgba(0, 0, 0, 0.88); + background: rgba(15, 23, 42, 0.8); padding: 1rem; padding-bottom: calc(1rem + env(safe-area-inset-bottom)); - animation: fadeIn 0.25s ease; + animation: fadeIn 0.3s ease; } @keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } + from { + opacity: 0; + } + + to { + opacity: 1; + } } .call-info { text-align: center; - display: flex; - flex-direction: column; - align-items: center; - gap: 0.5rem; } -/* Terminal-style pulsing avatar */ .call-avatar { - width: 110px; - height: 110px; + width: 120px; + height: 120px; border-radius: 50%; - background: rgba(0, 10, 0, 0.9); - margin-bottom: 1rem; + background: var(--glass); + margin: 0 auto 1.5rem; border: 2px solid var(--primary); - box-shadow: var(--glow-md), inset var(--glow-sm); - position: relative; - overflow: hidden; -} - -.call-avatar::after { - content: ''; - position: absolute; - inset: 0; - border-radius: 50%; - background: radial-gradient(circle at 40% 35%, var(--primary-dim), transparent 60%); } .shimmer { - animation: callPulse 1.8s ease-in-out infinite; + background: linear-gradient(90deg, var(--glass) 25%, rgba(99, 102, 241, 0.2) 50%, var(--glass) 75%); + background-size: 200% 100%; + animation: shimmer 1.5s infinite; } -@keyframes callPulse { - 0%, 100% { box-shadow: var(--glow-md), inset var(--glow-sm); } - 50% { box-shadow: var(--glow-lg), inset var(--glow-md); } +@keyframes shimmer { + 0% { + background-position: 200% 0; + } + + 100% { + background-position: -200% 0; + } } .call-status { - font-size: 1.25rem; - font-weight: 700; - letter-spacing: 0.08em; - text-transform: uppercase; - color: var(--primary); - text-shadow: var(--glow-md); + font-size: 1.5rem; + margin-bottom: 0.5rem; + color: white; } .call-duration { color: var(--text-muted); - margin-bottom: 1.75rem; - font-size: 0.95rem; - letter-spacing: 0.12em; - font-variant-numeric: tabular-nums; + margin-bottom: 2rem; + font-size: 1.1rem; } /* Mobile responsive */ @media (max-width: 480px) { + .blur-overlay { + padding: 1rem; + } + .call-avatar { - width: 90px; - height: 90px; + width: 100px; + height: 100px; } .call-status { - font-size: 1.05rem; + font-size: 1.25rem; } .call-duration { - margin-bottom: 1.25rem; + margin-bottom: 1.5rem; } -} +} \ No newline at end of file diff --git a/client/src/components/ChatContainer/ChatContainer.css b/client/src/components/ChatContainer/ChatContainer.css index 7029894..9feae0c 100644 --- a/client/src/components/ChatContainer/ChatContainer.css +++ b/client/src/components/ChatContainer/ChatContainer.css @@ -1,23 +1,23 @@ /** - * Chat container styles – terminal theme + * Chat container styles */ #chat-container { width: 100%; - max-width: 820px; + max-width: 800px; height: 100%; - max-height: 820px; + max-height: 800px; display: flex; flex-direction: column; - border-radius: 0.25rem; + border-radius: 2rem; overflow: hidden; - border: 1px solid var(--glass-border); - box-shadow: var(--glow-sm), 0 0 60px rgba(0, 0, 0, 0.8); - background: rgba(0, 8, 0, 0.95); + opacity: 1; + transition: all 0.3s ease; } #chat-container.hidden { display: none; + opacity: 0; } /* Mobile responsive */ @@ -26,6 +26,5 @@ max-width: 100%; max-height: 100%; border-radius: 0; - border: none; } -} +} \ No newline at end of file diff --git a/client/src/components/ChatContainer/ChatFooter.css b/client/src/components/ChatContainer/ChatFooter.css index 239c9f2..a7c16b0 100644 --- a/client/src/components/ChatContainer/ChatFooter.css +++ b/client/src/components/ChatContainer/ChatFooter.css @@ -1,65 +1,48 @@ /** - * Chat footer styles – terminal theme + * Chat footer styles */ .chat-footer { - padding: 0.875rem 1.25rem; - border-top: 1px solid var(--glass-border); - background: rgba(0, 10, 0, 0.98); - flex-shrink: 0; + padding: 1.5rem; } .input-container { display: flex; - gap: 0.625rem; + gap: 0.75rem; align-items: center; } -/* Terminal prompt prefix */ -.input-container::before { - content: '>'; - color: var(--primary); - font-size: 1rem; - font-weight: 700; - flex-shrink: 0; - text-shadow: var(--glow-sm); - user-select: none; -} - .message-input { flex: 1; - padding: 0.65rem 0.9rem; - background: rgba(0, 5, 0, 0.85); - border: 1px solid rgba(0, 255, 65, 0.2); - border-radius: 0.2rem; - color: var(--text); + padding: 0.75rem 1rem; + background: rgba(0, 0, 0, 0.2); + border: 1px solid var(--glass-border); + border-radius: 0.75rem; + color: white; font-family: inherit; - font-size: 0.9rem; - transition: border-color 0.15s ease, box-shadow 0.15s ease; - caret-color: var(--primary); - min-width: 0; -} - -.message-input::placeholder { - color: var(--text-muted); - opacity: 0.6; + font-size: 1rem; + transition: all 0.2s; } .message-input:focus { outline: none; border-color: var(--primary); - box-shadow: var(--glow-sm); + background: rgba(0, 0, 0, 0.4); +} + +.message-input::placeholder { + color: var(--text-muted); } .message-input:disabled { - opacity: 0.4; + opacity: 0.6; cursor: not-allowed; } /* Mobile responsive */ @media (max-width: 480px) { .chat-footer { - padding: 0.75rem 1rem; + padding: 0.75rem; padding-bottom: calc(0.75rem + env(safe-area-inset-bottom)); } @@ -69,6 +52,6 @@ .message-input { font-size: 16px; - /* Prevents iOS zoom */ + /* Prevents zoom on iOS */ } -} +} \ No newline at end of file diff --git a/client/src/components/ChatContainer/ChatHeader.css b/client/src/components/ChatContainer/ChatHeader.css index 3af1fee..661c3d8 100644 --- a/client/src/components/ChatContainer/ChatHeader.css +++ b/client/src/components/ChatContainer/ChatHeader.css @@ -1,135 +1,112 @@ /** - * Chat header styles – terminal theme + * Chat header styles */ .chat-header { - padding: 0.875rem 1.25rem; + padding: 1.5rem; display: flex; justify-content: space-between; align-items: center; gap: 1rem; - border-bottom: 1px solid var(--glass-border); - background: rgba(0, 10, 0, 0.98); - flex-shrink: 0; -} - -/* Terminal title bar row */ -.chat-header::before { - display: none; /* used via pseudo on parent if needed */ + flex-wrap: wrap; } .header-info { flex: 1; - min-width: 0; } .title-row { display: flex; align-items: center; - gap: 0.625rem; - margin-bottom: 0.2rem; + gap: 0.75rem; + margin-bottom: 0.25rem; } -/* Blinking status dot */ .status-dot { - width: 7px; - height: 7px; + width: 8px; + height: 8px; border-radius: 50%; background: var(--text-muted); - flex-shrink: 0; - transition: background 0.3s ease, box-shadow 0.3s ease; + transition: all 0.3s ease; } .status-dot.connected { background: var(--success); - box-shadow: var(--glow-md); - animation: pulse 2s ease-in-out infinite; -} - -@keyframes pulse { - 0%, 100% { box-shadow: var(--glow-md); } - 50% { box-shadow: var(--glow-sm); } + box-shadow: 0 0 8px var(--success); } .channel-title { - font-size: 0.95rem; - font-weight: 700; - color: var(--primary); - letter-spacing: 0.06em; - text-transform: uppercase; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; + font-size: 1.25rem; + font-weight: 600; } .badge { - font-size: 0.6rem; - background: rgba(0, 255, 65, 0.1); - color: var(--primary); - padding: 1px 7px; - border-radius: 0.1rem; - font-weight: 700; - letter-spacing: 0.1em; - border: 1px solid rgba(0, 255, 65, 0.3); - text-shadow: var(--glow-sm); + font-size: 0.7rem; + background: rgba(16, 185, 129, 0.2); + color: var(--success); + padding: 2px 8px; + border-radius: 1rem; + font-weight: 600; } .hash-badge-container { display: flex; align-items: center; - gap: 0.4rem; - background: rgba(0, 255, 65, 0.03); - padding: 0.2rem 0.5rem; - border-radius: 0.15rem; - margin-top: 0.3rem; + gap: 0.5rem; + background: rgba(255, 255, 255, 0.05); + padding: 0.25rem 0.5rem; + border-radius: 0.5rem; + margin-top: 0.5rem; width: fit-content; - border: 1px solid rgba(0, 255, 65, 0.12); + border: 1px solid var(--glass-border); position: relative; } .hash-text { - font-family: inherit; - font-size: 0.7rem; + font-family: monospace; + font-size: 0.75rem; color: var(--text-muted); word-break: break-all; - letter-spacing: 0.03em; } .copy-feedback-small { position: absolute; - top: -18px; + top: -20px; right: 0; - font-size: 0.65rem; + font-size: 0.75rem; color: var(--success); white-space: nowrap; - letter-spacing: 0.04em; } .participant-info { - font-size: 0.7rem; + font-size: 0.8rem; color: var(--text-muted); - margin-top: 0.2rem; - letter-spacing: 0.03em; + margin-top: 0.25rem; } .header-actions { display: flex; - gap: 0.25rem; - flex-shrink: 0; + gap: 0.5rem; } /* Mobile responsive */ @media (max-width: 480px) { .chat-header { - padding: 0.75rem 1rem; - padding-top: calc(0.75rem + env(safe-area-inset-top)); + padding: 0.875rem 1rem; + padding-top: calc(0.875rem + env(safe-area-inset-top)); + flex-direction: column; + align-items: flex-start; } .channel-title { - font-size: 0.875rem; + font-size: 1.05rem; } .hash-badge-container { display: none; } -} + + .header-actions { + align-self: flex-end; + } +} \ No newline at end of file diff --git a/client/src/components/ChatContainer/MessageBubble.css b/client/src/components/ChatContainer/MessageBubble.css index f64d0e9..4e7f773 100644 --- a/client/src/components/ChatContainer/MessageBubble.css +++ b/client/src/components/ChatContainer/MessageBubble.css @@ -1,22 +1,23 @@ /** - * Message bubble styles – terminal theme + * Message bubble styles */ .message { - max-width: 72%; - padding: 0.6rem 0.9rem; - border-radius: 0.2rem; - font-size: 0.875rem; - line-height: 1.5; + max-width: 70%; + padding: 0.75rem 1rem; + border-radius: 1.25rem; + font-size: 0.95rem; + line-height: 1.4; position: relative; - animation: msgIn 0.2s ease-out; + animation: slideUp 0.3s ease-out; } -@keyframes msgIn { +@keyframes slideUp { from { opacity: 0; - transform: translateY(6px); + transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); @@ -25,58 +26,37 @@ .message.sent { align-self: flex-end; - background: rgba(0, 50, 10, 0.8); - border: 1px solid rgba(0, 255, 65, 0.35); - border-bottom-right-radius: 0; - color: var(--text); - box-shadow: var(--glow-sm); + background: var(--primary); + border-bottom-right-radius: 0.25rem; + color: white; + margin-left: auto; } .message.received { align-self: flex-start; - background: rgba(0, 8, 0, 0.9); - border: 1px solid rgba(0, 255, 65, 0.15); - border-bottom-left-radius: 0; -} - -/* Small left marker on received messages */ -.message.received::before { - content: ''; - position: absolute; - left: -4px; - top: 50%; - transform: translateY(-50%); - width: 2px; - height: 60%; - background: rgba(0, 255, 65, 0.3); - border-radius: 1px; + background: var(--glass); + border: 1px solid var(--glass-border); + border-bottom-left-radius: 0.25rem; } .message-text { word-wrap: break-word; overflow-wrap: break-word; - color: var(--text); -} - -.message.sent .message-text { - color: #c8ffcc; } .message-meta { - font-size: 0.63rem; - color: var(--text-muted); - margin-top: 0.3rem; + font-size: 0.7rem; + color: rgba(255, 255, 255, 0.5); + margin-top: 0.25rem; display: flex; justify-content: space-between; - gap: 0.75rem; - letter-spacing: 0.03em; - opacity: 0.7; + gap: 0.5rem; } /* Mobile responsive */ @media (max-width: 480px) { .message { - max-width: 86%; - font-size: 0.85rem; + max-width: 85%; + font-size: 0.9rem; } -} +} \ No newline at end of file diff --git a/client/src/components/ChatContainer/MessagesArea.css b/client/src/components/ChatContainer/MessagesArea.css index 7885feb..a2d0877 100644 --- a/client/src/components/ChatContainer/MessagesArea.css +++ b/client/src/components/ChatContainer/MessagesArea.css @@ -1,61 +1,51 @@ /** - * Messages area styles – terminal theme + * Messages area styles */ .messages-area { flex: 1; overflow-y: auto; - padding: 1.25rem; + padding: 1.5rem; display: flex; flex-direction: column; - gap: 0.75rem; + gap: 1rem; scroll-behavior: smooth; - background: rgba(0, 5, 0, 0.6); } .empty-state { display: flex; - flex-direction: column; align-items: center; justify-content: center; height: 100%; - gap: 0.5rem; color: var(--text-muted); } .empty-state p { - font-size: 0.8rem; - letter-spacing: 0.06em; text-align: center; } -.empty-state p::before { - content: '$ '; - opacity: 0.5; -} - -/* Scrollbar */ +/* Scrollbar styling */ .messages-area::-webkit-scrollbar { - width: 5px; + width: 8px; } .messages-area::-webkit-scrollbar-track { - background: rgba(0, 255, 65, 0.02); + background: rgba(255, 255, 255, 0.05); } .messages-area::-webkit-scrollbar-thumb { - background: rgba(0, 255, 65, 0.2); - border-radius: 3px; + background: rgba(99, 102, 241, 0.4); + border-radius: 4px; } .messages-area::-webkit-scrollbar-thumb:hover { - background: rgba(0, 255, 65, 0.4); + background: rgba(99, 102, 241, 0.6); } /* Mobile responsive */ @media (max-width: 480px) { .messages-area { padding: 0.875rem 0.75rem; - gap: 0.625rem; + gap: 0.75rem; } -} +} \ No newline at end of file diff --git a/client/src/components/SetupOverlay/CreateHashView.css b/client/src/components/SetupOverlay/CreateHashView.css index 57cd336..81c6ea7 100644 --- a/client/src/components/SetupOverlay/CreateHashView.css +++ b/client/src/components/SetupOverlay/CreateHashView.css @@ -1,28 +1,23 @@ /** - * Create hash view styles – terminal theme + * Create hash view styles */ .create-hash-view { display: flex; flex-direction: column; - gap: 1.25rem; + gap: 1.5rem; } .copy-feedback { - font-size: 0.75rem; + font-size: 0.85rem; color: var(--success); - margin-top: 0.35rem; + margin-top: 0.5rem; display: block; - letter-spacing: 0.06em; -} - -.copy-feedback::before { - content: '✓ '; } .button-group { display: grid; grid-template-columns: 1fr 1fr; - gap: 0.875rem; - margin-top: 0.5rem; -} + gap: 1rem; + margin-top: 1rem; +} \ No newline at end of file diff --git a/client/src/components/SetupOverlay/InitialActions.css b/client/src/components/SetupOverlay/InitialActions.css index 5e2b181..51c03ca 100644 --- a/client/src/components/SetupOverlay/InitialActions.css +++ b/client/src/components/SetupOverlay/InitialActions.css @@ -5,5 +5,5 @@ .initial-actions { display: flex; flex-direction: column; - gap: 0.875rem; -} + gap: 1rem; +} \ No newline at end of file diff --git a/client/src/components/SetupOverlay/JoinHashView.css b/client/src/components/SetupOverlay/JoinHashView.css index 33b5c3d..a460154 100644 --- a/client/src/components/SetupOverlay/JoinHashView.css +++ b/client/src/components/SetupOverlay/JoinHashView.css @@ -1,15 +1,15 @@ /** - * Join hash view styles – terminal theme + * Join hash view styles */ .join-hash-view { display: flex; flex-direction: column; - gap: 1.25rem; + gap: 1.5rem; } .button-group { display: grid; grid-template-columns: 1fr 1fr; - gap: 0.875rem; -} + gap: 1rem; +} \ No newline at end of file diff --git a/client/src/components/SetupOverlay/SetupOverlay.css b/client/src/components/SetupOverlay/SetupOverlay.css index 3e7b7c9..5743be4 100644 --- a/client/src/components/SetupOverlay/SetupOverlay.css +++ b/client/src/components/SetupOverlay/SetupOverlay.css @@ -1,16 +1,19 @@ /** - * SetupOverlay styles – terminal theme + * SetupOverlay styles */ .overlay { position: fixed; - inset: 0; + top: 0; + left: 0; + right: 0; + bottom: 0; z-index: 100; display: flex; justify-content: center; align-items: center; padding: 20px; - background: rgba(0, 0, 0, 0.6); + opacity: 1; transition: opacity 0.3s ease; } @@ -21,62 +24,38 @@ .overlay-content { width: 100%; - max-width: 420px; + max-width: 400px; padding: 2.5rem; - border-radius: 0.25rem; + border-radius: 2rem; text-align: center; } -/* Terminal "window chrome" top bar */ -.overlay-content::before { - content: '■ ■ ■ SECURE_TERMINAL v2'; - display: block; - font-size: 0.65rem; - letter-spacing: 0.12em; - color: var(--text-muted); - background: rgba(0, 255, 65, 0.05); - border-bottom: 1px solid var(--glass-border); - margin: -2.5rem -2.5rem 2rem -2.5rem; - padding: 0.5rem 1rem; - text-align: left; -} - .overlay-content h1 { - font-size: 1.6rem; - margin-bottom: 0.4rem; - font-weight: 700; - color: var(--primary); - letter-spacing: 0.05em; - text-shadow: var(--glow-md); + font-size: 2rem; + margin-bottom: 0.5rem; + font-weight: 600; } .overlay-content p { color: var(--text-muted); margin-bottom: 2rem; - font-size: 0.78rem; - letter-spacing: 0.04em; + font-size: 0.9rem; } .setup-status { margin-top: 1.5rem; - padding: 0.65rem 1rem; - background: rgba(0, 255, 65, 0.05); - border: 1px solid rgba(0, 255, 65, 0.3); - border-radius: 0.2rem; + padding: 0.75rem 1rem; + background: rgba(99, 102, 241, 0.1); + border: 1px solid var(--primary); + border-radius: 0.5rem; color: var(--primary); - font-size: 0.8rem; - text-align: left; - font-family: inherit; -} - -.setup-status::before { - content: '$ '; - opacity: 0.5; + font-size: 0.9rem; + text-align: center; } .setup-status.error { - background: rgba(255, 34, 68, 0.06); - border-color: rgba(255, 34, 68, 0.4); + background: rgba(239, 68, 68, 0.1); + border-color: var(--danger); color: var(--danger); } @@ -85,25 +64,20 @@ .overlay { align-items: flex-end; padding: 0; - background: rgba(0, 0, 0, 0.7); } .overlay-content { max-width: 100%; - border-radius: 0.5rem 0.5rem 0 0; - padding: 2rem 1.25rem; - padding-bottom: calc(2rem + env(safe-area-inset-bottom)); - } - - .overlay-content::before { - margin: -2rem -1.25rem 1.5rem -1.25rem; + border-radius: 1.75rem 1.75rem 0 0; + padding: 1.75rem 1.25rem; + padding-bottom: calc(1.75rem + env(safe-area-inset-bottom)); } .overlay-content h1 { - font-size: 1.25rem; + font-size: 1.5rem; } .overlay-content p { - font-size: 0.75rem; + font-size: 0.85rem; } -} +} \ No newline at end of file diff --git a/client/src/components/SetupOverlay/SetupOverlay.tsx b/client/src/components/SetupOverlay/SetupOverlay.tsx index 89dc2a0..4c0af62 100644 --- a/client/src/components/SetupOverlay/SetupOverlay.tsx +++ b/client/src/components/SetupOverlay/SetupOverlay.tsx @@ -104,8 +104,8 @@ export const SetupOverlay: React.FC = ({ onSetupComplete, isH return (
-

CHAT_E2EE

-

// end-to-end encrypted · zero knowledge · ephemeral

+

Secure Messenger

+

Simple. End-to-End Encrypted. Private.

{view === 'initial' && ( '; - opacity: 0.6; -} - .input-field { width: 100%; - padding: 0.7rem 1rem; - background: rgba(0, 5, 0, 0.85); - border: 1px solid rgba(0, 255, 65, 0.2); - border-radius: 0.2rem; - color: var(--text); + padding: 0.75rem 1rem; + background: rgba(0, 0, 0, 0.2); + border: 1px solid var(--glass-border); + border-radius: 0.75rem; + color: white; font-family: inherit; - font-size: 0.9rem; - transition: border-color 0.15s ease, box-shadow 0.15s ease; - caret-color: var(--primary); -} - -.input-field::placeholder { - color: var(--text-muted); - opacity: 0.7; + font-size: 1rem; + transition: all 0.2s; } .input-field:focus { outline: none; border-color: var(--primary); - box-shadow: var(--glow-sm); - background: rgba(0, 8, 0, 0.95); + background: rgba(0, 0, 0, 0.4); } .input-field:read-only { - cursor: default; - color: var(--text-muted); - border-color: rgba(0, 255, 65, 0.1); + cursor: not-allowed; + opacity: 0.8; } /* Copy input container */ @@ -62,4 +49,4 @@ .copy-input .input-field { flex: 1; -} +} \ No newline at end of file diff --git a/client/src/styles/global.css b/client/src/styles/global.css index ae97e9d..5787ed4 100644 --- a/client/src/styles/global.css +++ b/client/src/styles/global.css @@ -1,34 +1,21 @@ /** - * Global CSS variables – hacker / terminal dark theme + * Global CSS variables */ :root { - /* Palette */ - --primary: #00ff41; - --primary-hover: #33ff6a; - --primary-dim: rgba(0, 255, 65, 0.12); - --bg: #080808; - --surface: #0d0d0d; - --surface-alt: #111111; - --text: #d4ffd4; - --text-bright: #00ff41; - --text-muted: #4d8c5e; - --danger: #ff2244; - --danger-hover: #cc1133; - --success: #00ff41; - --accent: #00ccff; - --glass: rgba(0, 255, 65, 0.03); - --glass-border: rgba(0, 255, 65, 0.18); - - /* Glows */ - --glow-sm: 0 0 6px rgba(0, 255, 65, 0.25); - --glow-md: 0 0 14px rgba(0, 255, 65, 0.35); - --glow-lg: 0 0 28px rgba(0, 255, 65, 0.4); + --primary: #6366f1; + --primary-hover: #4f46e5; + --bg: #0f172a; + --card-bg: rgba(30, 41, 59, 0.7); + --text: #f8fafc; + --text-muted: #94a3b8; + --danger: #ef4444; + --success: #10b981; + --glass: rgba(255, 255, 255, 0.05); + --glass-border: rgba(255, 255, 255, 0.1); } -*, -*::before, -*::after { +* { box-sizing: border-box; margin: 0; padding: 0; @@ -41,34 +28,15 @@ body { } body { - font-family: 'JetBrains Mono', 'Fira Code', 'Courier New', monospace; + font-family: 'Outfit', sans-serif; background-color: var(--bg); color: var(--text); height: 100vh; height: 100dvh; overflow: hidden; - - /* Subtle terminal grid */ - background-image: - linear-gradient(rgba(0, 255, 65, 0.025) 1px, transparent 1px), - linear-gradient(90deg, rgba(0, 255, 65, 0.025) 1px, transparent 1px); - background-size: 40px 40px; -} - -/* CRT scanline overlay */ -body::after { - content: ''; - position: fixed; - inset: 0; - background: repeating-linear-gradient( - 0deg, - transparent, - transparent 3px, - rgba(0, 0, 0, 0.06) 3px, - rgba(0, 0, 0, 0.06) 4px - ); - pointer-events: none; - z-index: 9999; + background-image: radial-gradient(at 0% 0%, hsla(253, 16%, 7%, 1) 0, transparent 50%), + radial-gradient(at 50% 0%, hsla(225, 39%, 30%, 1) 0, transparent 50%), + radial-gradient(at 100% 0%, hsla(339, 49%, 30%, 1) 0, transparent 50%); } #root, @@ -80,37 +48,39 @@ body::after { padding: 20px; } -/* Terminal surface (replaces glassmorphism) */ .glass { - background: rgba(0, 10, 0, 0.92); + background: var(--glass); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); border: 1px solid var(--glass-border); - box-shadow: var(--glow-sm), inset 0 0 40px rgba(0, 0, 0, 0.5); + box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37); } .hidden { display: none !important; } -/* Scrollbar */ +/* Scrollbar styling */ ::-webkit-scrollbar { - width: 6px; + width: 8px; } ::-webkit-scrollbar-track { - background: rgba(0, 255, 65, 0.03); + background: rgba(255, 255, 255, 0.05); } ::-webkit-scrollbar-thumb { - background: rgba(0, 255, 65, 0.25); - border-radius: 3px; + background: rgba(99, 102, 241, 0.4); + border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { - background: rgba(0, 255, 65, 0.45); + background: rgba(99, 102, 241, 0.6); } -/* Mobile */ +/* Mobile responsive */ @media (max-width: 480px) { + #root, #app { padding: 0; @@ -121,4 +91,4 @@ body::after { height: 100vh; height: 100dvh; } -} +} \ No newline at end of file diff --git a/client/style.css b/client/style.css index b6a2b54..bdfe749 100644 --- a/client/style.css +++ b/client/style.css @@ -1,14 +1,14 @@ :root { - --primary: #00ff41; - --primary-hover: #33ff6a; - --bg: #080808; - --card-bg: rgba(0, 10, 0, 0.92); - --text: #d4ffd4; - --text-muted: #4d8c5e; - --danger: #ff2244; - --success: #00ff41; - --glass: rgba(0, 255, 65, 0.03); - --glass-border: rgba(0, 255, 65, 0.18); + --primary: #6366f1; + --primary-hover: #4f46e5; + --bg: #0f172a; + --card-bg: rgba(30, 41, 59, 0.7); + --text: #f8fafc; + --text-muted: #94a3b8; + --danger: #ef4444; + --success: #10b981; + --glass: rgba(255, 255, 255, 0.05); + --glass-border: rgba(255, 255, 255, 0.1); } * {