Spaces:
Running
Running
Create style.css
Browse files- static/style.css +103 -0
static/style.css
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* ====== CSS Custom Properties (themes) ====== */
|
| 2 |
+
:root {
|
| 3 |
+
--bg-primary: #fff;
|
| 4 |
+
--bg-secondary: #f0f0f0;
|
| 5 |
+
--text-primary: #000;
|
| 6 |
+
--text-secondary: #666;
|
| 7 |
+
--bubble-self: #25D366;
|
| 8 |
+
--bubble-other: #E5E5EA;
|
| 9 |
+
--bubble-text-self: #000;
|
| 10 |
+
--bubble-text-other: #000;
|
| 11 |
+
--header-bg: #128C7E;
|
| 12 |
+
--header-text: #fff;
|
| 13 |
+
--input-bg: #fff;
|
| 14 |
+
--input-border: #ccc;
|
| 15 |
+
--shadow: 0 2px 4px rgba(0,0,0,0.1);
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
.theme-dark {
|
| 19 |
+
--bg-primary: #121212;
|
| 20 |
+
--bg-secondary: #1e1e1e;
|
| 21 |
+
--text-primary: #fff;
|
| 22 |
+
--text-secondary: #aaa;
|
| 23 |
+
--bubble-self: #056162;
|
| 24 |
+
--bubble-other: #262D31;
|
| 25 |
+
--bubble-text-self: #fff;
|
| 26 |
+
--bubble-text-other: #fff;
|
| 27 |
+
--header-bg: #1e1e1e;
|
| 28 |
+
--input-bg: #2a2f32;
|
| 29 |
+
--input-border: #333;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
.theme-custom {
|
| 33 |
+
/* values set via JavaScript */
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
* { margin:0; padding:0; box-sizing:border-box; }
|
| 37 |
+
body { font-family: system-ui, -apple-system, sans-serif; background: var(--bg-primary); color: var(--text-primary); height:100vh; overflow:hidden; }
|
| 38 |
+
|
| 39 |
+
/* ====== Layout ====== */
|
| 40 |
+
#app { height:100%; }
|
| 41 |
+
.screen { display:flex; flex-direction:column; height:100%; }
|
| 42 |
+
.hidden { display:none!important; }
|
| 43 |
+
|
| 44 |
+
/* ====== Auth ====== */
|
| 45 |
+
.auth-container { max-width:400px; margin:auto; padding:2rem; text-align:center; }
|
| 46 |
+
.auth-container h1 { margin-bottom:2rem; color:var(--header-bg); }
|
| 47 |
+
.auth-tabs { display:flex; margin-bottom:1rem; border-bottom:2px solid var(--input-border); }
|
| 48 |
+
.tab { flex:1; padding:0.75rem; background:none; border:none; color:var(--text-secondary); font-weight:500; cursor:pointer; }
|
| 49 |
+
.tab.active { color:var(--header-bg); border-bottom:3px solid var(--header-bg); }
|
| 50 |
+
#auth-form input { width:100%; margin:0.5rem 0; padding:0.75rem; border:1px solid var(--input-border); border-radius:8px; background:var(--input-bg); color:var(--text-primary); }
|
| 51 |
+
#auth-form button { width:100%; padding:0.75rem; background:var(--header-bg); color:var(--header-text); border:none; border-radius:8px; font-size:1rem; margin-top:1rem; cursor:pointer; }
|
| 52 |
+
.error-msg { color:red; margin-top:1rem; }
|
| 53 |
+
|
| 54 |
+
/* ====== Chat header ====== */
|
| 55 |
+
.chat-header { display:flex; align-items:center; justify-content:space-between; padding:0.75rem 1rem; background:var(--header-bg); color:var(--header-text); min-height:60px; }
|
| 56 |
+
.icon-btn { background:none; border:none; color:inherit; font-size:1.5rem; cursor:pointer; padding:0.25rem; }
|
| 57 |
+
|
| 58 |
+
/* ====== Typing ====== */
|
| 59 |
+
#typing-indicator { height:24px; font-size:0.85rem; padding:0 1rem; color:var(--text-secondary); background:var(--bg-secondary); display:flex; align-items:center; }
|
| 60 |
+
|
| 61 |
+
/* ====== Messages ====== */
|
| 62 |
+
#messages-container { flex:1; overflow-y:auto; padding:1rem; background:var(--bg-primary); }
|
| 63 |
+
#messages-list { display:flex; flex-direction:column; gap:0.25rem; }
|
| 64 |
+
.message-bubble { max-width:80%; margin-bottom:0.25rem; }
|
| 65 |
+
.message-self { align-self:flex-end; background:var(--bubble-self); color:var(--bubble-text-self); border-radius:18px 18px 0 18px; padding:0.6rem 1rem; }
|
| 66 |
+
.message-other { align-self:flex-start; background:var(--bubble-other); color:var(--bubble-text-other); border-radius:18px 18px 18px 0; padding:0.6rem 1rem; }
|
| 67 |
+
.message-info { display:flex; justify-content:space-between; font-size:0.7rem; opacity:0.8; margin-bottom:0.1rem; }
|
| 68 |
+
.message-actions { display:flex; gap:0.25rem; margin-top:0.25rem; font-size:0.8rem; }
|
| 69 |
+
.reply-indicator { font-size:0.8rem; padding:0.2rem 0.5rem; background:rgba(0,0,0,0.1); border-radius:8px; margin-bottom:0.25rem; }
|
| 70 |
+
.edited-label { font-style:italic; opacity:0.7; font-size:0.75rem; }
|
| 71 |
+
.deleted-bubble { opacity:0.6; font-style:italic; }
|
| 72 |
+
.attachment img, .attachment video { max-width:100%; max-height:300px; border-radius:8px; margin-top:0.5rem; }
|
| 73 |
+
.attachment audio { width:100%; margin-top:0.5rem; }
|
| 74 |
+
.attachment .file-preview { display:flex; align-items:center; gap:0.5rem; background:rgba(0,0,0,0.05); padding:0.5rem; border-radius:8px; cursor:pointer; }
|
| 75 |
+
/* Read receipts (ticks) */
|
| 76 |
+
.read-status { display:inline-block; margin-left:0.2rem; font-size:0.7rem; }
|
| 77 |
+
.read-status.double-check { color:var(--header-bg); }
|
| 78 |
+
.read-status.single-check { color:var(--text-secondary); }
|
| 79 |
+
|
| 80 |
+
/* ====== Reply preview ====== */
|
| 81 |
+
#reply-preview { background:var(--bg-secondary); padding:0.5rem 1rem; display:flex; align-items:center; justify-content:space-between; }
|
| 82 |
+
|
| 83 |
+
/* ====== Compose ====== */
|
| 84 |
+
.compose-area { display:flex; align-items:center; padding:0.5rem; background:var(--input-bg); border-top:1px solid var(--input-border); }
|
| 85 |
+
.compose-area textarea { flex:1; resize:none; border:1px solid var(--input-border); border-radius:20px; padding:0.6rem 1rem; background:var(--bg-primary); color:var(--text-primary); outline:none; font-family:inherit; }
|
| 86 |
+
#send-btn { background:var(--header-bg); color:white; border:none; border-radius:50%; width:40px; height:40px; font-size:1.2rem; margin-left:0.5rem; cursor:pointer; }
|
| 87 |
+
#upload-progress { padding:0.5rem; background:var(--bg-secondary); display:flex; align-items:center; gap:0.5rem; }
|
| 88 |
+
|
| 89 |
+
/* ====== Settings modal ====== */
|
| 90 |
+
.modal { position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.5); display:flex; justify-content:center; align-items:center; z-index:1000; }
|
| 91 |
+
.modal-content { background:var(--bg-primary); padding:2rem; border-radius:12px; width:90%; max-width:400px; }
|
| 92 |
+
.setting-group { margin-bottom:1rem; }
|
| 93 |
+
.setting-group label { display:block; margin-bottom:0.25rem; font-weight:500; }
|
| 94 |
+
.setting-group input[type="text"], .setting-group select { width:100%; padding:0.5rem; border:1px solid var(--input-border); border-radius:6px; background:var(--input-bg); color:var(--text-primary); }
|
| 95 |
+
.avatar-preview { width:60px; height:60px; border-radius:50%; object-fit:cover; display:block; margin-top:0.5rem; }
|
| 96 |
+
.modal-actions { display:flex; justify-content:flex-end; gap:0.5rem; margin-top:1rem; }
|
| 97 |
+
.modal-actions button { padding:0.5rem 1rem; border:none; border-radius:6px; background:var(--header-bg); color:white; cursor:pointer; }
|
| 98 |
+
#load-more { text-align:center; margin:1rem; }
|
| 99 |
+
|
| 100 |
+
@media (min-width:768px) {
|
| 101 |
+
.message-bubble { max-width:60%; }
|
| 102 |
+
.compose-area { padding:0.75rem 1rem; }
|
| 103 |
+
}
|