diff --git a/client-web/index.css b/client-web/index.css index 32410c8..d83ede0 100644 --- a/client-web/index.css +++ b/client-web/index.css @@ -1,419 +1,825 @@ @font-face { - font-family: "inter"; + font-family: "Inter"; src: url("InterVariable.ttf"); } -a { - color: white; +:root { + --primary-color: #5865f2; + --success-color: #3ba55c; + --danger-color: #ed4245; + --background-dark: #36393f; + --background-darker: #2f3136; + --background-light: #40444b; + --background-lightest: #4f545c; + --background-overlay: rgba(0, 0, 0, 0.6); + --text-normal: #dcddde; + --text-muted: #a3a6aa; + --text-link: #00aff4; + --text-positive: #3ba55c; + --scrollbar-thin-thumb: #202225; + --scrollbar-thin-track: transparent; + --sidebar-width: 240px; + --users-panel-width: 240px; + --chat-input-height: 68px; + --radius-sm: 4px; + --radius-md: 8px; + --radius-lg: 16px; + --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); + --shadow-md: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23); + --shadow-lg: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); + --animation-duration: 0.2s; } -input { - color: white; - background: rgba(0, 0, 0, 0.5); - border: none; - border-radius: 10px; - padding: 5px; - font-family: "inter"; - margin: 10px; -} - -.tiny { - font-size: 5pt; -} - -h1 { - font-size: 35pt; -} - -h2 { - font-size: 20pt; -} - -h3 { - font-size: 15pt; -} - -p { - font-size: 12pt; -} - -#messagebox { - overflow-y: auto; - border: 0px; - padding: 20px; - margin: 10px 10px; - flex-grow: 1; -} - -.bluebutton { - background: rgba(0, 0, 255, 0.3); -} -.greenbutton { - background: rgba(0, 255, 0, 0.3); -} -.redbutton { - background: rgba(255, 0, 0, 0.3); -} -.hidden { - display: none; -} -html, body { - height: 100%; +* { margin: 0; padding: 0; - overflow: hidden; box-sizing: border-box; } -body { - color: white; - background: rgb(231,255,68); - background: linear-gradient(336deg, rgba(231,255,68,0.67) 0%, rgba(73,255,145,0.67) 43%, rgba(104,79,255,1) 100%); - font-family: inter; - background-attachment: fixed; - padding: 20px; - display: flex; - flex-direction: column; - align-items: center; -} - -.section { - background-color: rgba(0, 0, 0, 0.1); - border-radius: 10px; - padding: 5px; - width: calc(100vw - 40px); - height: calc(100vh - 40px); - box-sizing: border-box; -} - -.section h2 { - margin: 20px; -} - -.box { - color: white; - background: rgba(0, 0, 0, 0.5); - border-radius: 10px; - margin: 10px auto; - padding: 20px; - max-width: 400px; - width: 100%; - box-sizing: border-box; - display: flex; - flex-direction: column; - align-items: center; -} - -.box p { - margin: 10px; -} -.box h3 { - margin: 10px; -} -.box img { - margin: 10px; -} -.box button { - margin: 10px; -} - -#messaging .box { - max-width: none; +html, body { height: 100%; - position: relative; + width: 100%; + overflow: hidden; + font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + color: var(--text-normal); + background-color: var(--background-dark); } -#messagebox { - overflow-y: auto; - border: 0px; - padding: 20px; - margin: 10px 0; - flex-grow: 1; +/* Custom Scrollbar */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: transparent; +} + +::-webkit-scrollbar-thumb { + background: var(--background-lightest); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--text-muted); +} + +.hidden { + display: none !important; +} + +/* Login Page */ +#login-container { + height: 100vh; + width: 100vw; + display: flex; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, #721c7a, #612bd4, #3aa5c5, #30cf7f); + background-size: 400% 400%; + animation: gradient 120s ease infinite; +} + +@keyframes gradient { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +.login-card { width: 100%; - box-sizing: border-box; + max-width: 480px; + background-color: var(--background-dark); + border-radius: var(--radius-md); + box-shadow: var(--shadow-lg); + overflow: hidden; + padding: 2rem; +} + +.login-header { + text-align: center; + margin-bottom: 2rem; +} + +.login-header h2 { + font-size: 2rem; + font-weight: 700; + margin-bottom: 0.5rem; + color: var(--text-normal); +} + +.login-header p { + color: var(--text-muted); + font-size: 0.9rem; +} + +.login-form { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.input-group { + position: relative; + display: flex; + align-items: center; +} + +.input-group i { + position: absolute; + left: 12px; + color: var(--text-muted); + font-size: 1rem; +} + +.input-group input { + width: 100%; + padding: 12px 12px 12px 40px; + background-color: var(--background-darker); + border: 1px solid rgba(0, 0, 0, 0.3); + border-radius: var(--radius-sm); + color: var(--text-normal); + font-size: 1rem; + transition: border-color var(--animation-duration) ease; +} + +.input-group input:focus { + outline: none; + border-color: var(--primary-color); +} + +.checkbox-group { + display: flex; + align-items: center; + gap: 0.5rem; + margin-top: 0.5rem; +} + +.checkbox-group input[type="checkbox"] { + width: 18px; + height: 18px; + cursor: pointer; +} + +.checkbox-group label { + color: var(--text-normal); + font-size: 0.9rem; + cursor: pointer; +} + +.login-buttons { + display: flex; + gap: 1rem; + margin-top: 0.5rem; +} + +.server-options { + display: flex; + flex-direction: column; + align-items: center; + margin-top: 1rem; +} + +.server-config { + margin-top: 1rem; + width: 100%; + display: none; +} + +/* Buttons */ +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + padding: 10px 16px; + border-radius: var(--radius-sm); + font-size: 0.9rem; + font-weight: 500; + cursor: pointer; + transition: background-color var(--animation-duration) ease; + border: none; + color: var(--text-normal); +} + +.btn-primary { + background-color: var(--primary-color); +} + +.btn-primary:hover { + background-color: #4752c4; +} + +.btn-success { + background-color: var(--success-color); +} + +.btn-success:hover { + background-color: #2d8a49; +} + +.btn-danger { + background-color: var(--danger-color); +} + +.btn-danger:hover { + background-color: #c7373a; +} + +.btn-text { + background-color: transparent; + color: var(--text-link); + padding: 5px 10px; +} + +.btn-text:hover { + text-decoration: underline; +} + +.btn-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + border-radius: 50%; + background-color: transparent; + border: none; + color: var(--text-muted); + cursor: pointer; + transition: all var(--animation-duration) ease; +} + +.btn-icon:hover { + color: var(--text-normal); + background-color: var(--background-lightest); +} + +/* App Layout */ +#app { + height: 100vh; + width: 100vw; + display: grid; + grid-template-columns: var(--sidebar-width) 1fr var(--users-panel-width); + grid-template-rows: 1fr; +} + +/* Sidebar */ +.sidebar { + grid-column: 1; + background-color: var(--background-darker); + height: 100%; + display: flex; + flex-direction: column; + border-right: 1px solid rgba(0, 0, 0, 0.2); +} + +.sidebar-header { + padding: 1rem; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} + +.sidebar-header h3 { + font-size: 1.2rem; + font-weight: 600; +} + +.room-list { + flex: 1; + overflow-y: auto; + padding: 1rem 0.5rem; +} + +.room-category { + margin-bottom: 1rem; +} + +.room-category-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.5rem; + font-size: 0.8rem; + font-weight: 700; + text-transform: uppercase; + color: var(--text-muted); +} + +.room-item { + display: flex; + align-items: center; + padding: 0.5rem 0.75rem; + margin: 0.25rem 0; + border-radius: var(--radius-sm); + font-size: 1rem; + color: var(--text-muted); + cursor: pointer; + transition: all var(--animation-duration) ease; +} + +.room-item:hover { + background-color: var(--background-light); + color: var(--text-normal); +} + +.room-item.active { + background-color: var(--background-light); + color: var(--text-normal); + font-weight: 500; +} + +.room-item i { + margin-right: 0.5rem; + font-size: 1rem; +} + +.user-profile { + padding: 1rem; + display: flex; + align-items: center; + gap: 0.75rem; + background-color: rgba(0, 0, 0, 0.15); +} + +.user-avatar { + width: 32px; + height: 32px; + border-radius: 50%; + background-color: var(--primary-color); + display: flex; + align-items: center; + justify-content: center; + color: white; +} + +.user-info { + display: flex; + flex-direction: column; +} + +.user-status { + font-size: 0.75rem; + color: var(--text-muted); +} + +/* Chat Container */ +.chat-container { + grid-column: 2; + display: flex; + flex-direction: column; + height: 100%; + overflow: hidden; +} + +.chat-header { + height: 48px; + padding: 0 1rem; + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + background-color: var(--background-dark); + z-index: 10; +} + +.current-room { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 1rem; + font-weight: 600; +} + +.current-room i { + color: var(--text-muted); +} + +.header-actions { + display: flex; + align-items: center; + gap: 0.5rem; +} + +.chat-content { + flex: 1; + display: flex; + flex-direction: column; + /* background-color: var(--background-dark); + position: relative; + height: 100%;*/ + overflow: hidden; +} + +.messages { + flex: 1; + overflow-y: auto; + padding: 1rem; + display: flex; + flex-direction: column; + gap: 0.25rem; + min-height: 0; } .message { - text-align: left; - margin: 5px 0; - width: 100%; - display: flex; - flex-direction: column; - align-items: flex-start; -} - -.file { - float: left; - border-radius: 10px; - margin: 5px 0; -} - -.input-container { display: flex; - width: 100%; - gap: 10px; - box-sizing: border-box; + margin-bottom: 0.5rem; } -input { - color: white; - background: rgba(0, 0, 0, 0.5); - border: none; - border-radius: 10px; - padding: 5px 5px; - font-family: "inter"; - max-width: 300px; - width: 100%; - box-sizing: border-box; +.message-avatar { + width: 40px; + height: 40px; + border-radius: 50%; + background-color: var(--background-light); + margin-right: 1rem; + display: flex; + align-items: center; + justify-content: center; + color: var(--text-normal); + font-size: 1rem; +} + +.message-content { + flex: 1; +} + +.message-header { + display: flex; + align-items: baseline; + margin-bottom: 0.25rem; +} + +.message-author { + font-weight: 500; + margin-right: 0.5rem; +} + +.message-timestamp { + font-size: 0.75rem; + color: var(--text-muted); +} + +.message-text { + word-wrap: break-word; + line-height: 1.4; +} + +.system-message { + padding: 0.5rem 0; + color: var(--text-muted); + font-style: italic; + font-size: 0.9rem; + text-align: center; +} + +.history-message { + opacity: 0.7; +} + +.message.history-message .message-timestamp { + font-style: italic; +} + +.call-notification { + margin: 0.5rem 0; + padding: 0.75rem 1rem; + background-color: rgba(88, 101, 242, 0.15); + border-radius: var(--radius-sm); + color: var(--text-link); + cursor: pointer; + transition: background-color var(--animation-duration) ease; +} + +.call-notification:hover { + background-color: rgba(88, 101, 242, 0.25); +} + +.typing-indicator { + padding: 0.25rem 1rem; + font-size: 0.85rem; + color: var(--text-muted); + font-style: italic; +} + +.message-input-container { + padding: 0 1rem 1rem; + background-color: var(--background-dark); + border-top: 1px solid rgba(0, 0, 0, 0.2); + flex-shrink: 0; +} + +.message-actions { + display: flex; + align-items: center; + gap: 0.5rem; + margin-bottom: 0.5rem; +} + +.message-input-wrapper { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0 1rem; + background-color: var(--background-light); + border-radius: var(--radius-md); } #messageInput { - max-width: none; - flex-grow: 1; - margin: 0; -} - -.bluebutton, .greenbutton, .redbutton { - max-width: 200px; - width: auto; - margin: 0; - white-space: nowrap; - color: white; - font-size: 12pt; - font-family: inter; - border-radius: 10px; - border: none; - padding: 8px 12px; - max-width: none; - width: auto; - margin: 5px 0; - white-space: normal; - word-wrap: break-word; - text-align: center; - cursor: pointer; - -} -.bluebutton, .greenbutton, .redbutton:hover { - background: rgba(255, 255, 255, 0.1); - border-radius: 5px; -} -#users { - display: flex; - align-items: left; - justify-content: space-between; - width: 100%; -} - -#meeting { - cursor: pointer; - padding: 5px 10px; - margin-right: 10px; - align-items: right; -} - -.suttle { - text-align: left; - width: 100%; - padding-left: 10px; - margin-bottom: 5px; - font-size: 0.9em; - color: rgba(255, 255, 255, 0.7); -} - -#users { - position: relative; - width: 100%; -} - -#meeting { - position: absolute; - right: 10px; - top: 0; - cursor: pointer; - padding: 5px 10px; -} -.message.call-notification { - color: lightblue; -} - -#meet { - display: none; - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 1000; - background: rgba(0, 0, 0, 0.9); - padding: 20px; - border-radius: 10px; - width: 80%; - height: 80%; -} -.eggs-panel { - position: absolute; - right: -300px; - top: 0; - width: 300px; - height: 100%; - background: rgba(0, 0, 0, 0.5); - border-radius: 10px; - transition: right 0.3s ease; -} - -.eggs-panel.visible { - right: -310px; -} - -.eggs-list { - padding: 10px; -} - -.egg-item { - width: 100%; - padding: 10px; - margin: 5px 0; - background: rgba(0, 0, 0, 0.3); - border: none; - border-radius: 5px; - color: white; - font-family: "inter"; - cursor: pointer; -} - -.egg-item:hover { - background: rgba(255, 255, 255, 0.1); -} - -.egg-content { - padding: 10px; - height: calc(100% - 20px); - background: rgba(0, 0, 0, 0.3); - border-radius: 5px; - margin: 10px; -} -#messaging { - width: 100%; - height: 100%; -} - -.messaging-container { - display: flex; - flex-direction: row; - height: 100%; - position: relative; -} - -.box { flex: 1; - margin-right: 10px; + height: 44px; + background-color: transparent; + border: none; + color: var(--text-normal); + font-size: 1rem; + padding: 0; } -.eggs-panel { - width: 300px; - background: rgba(0, 0, 0, 0.5); - border-radius: 10px; - transition: transform 0.3s ease; - transform: translateX(100%); +#messageInput:focus { + outline: none; +} + +.send-button { + background-color: transparent; + border: none; + color: var(--text-muted); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + width: 36px; + height: 36px; + transition: color var(--animation-duration) ease; +} + +.send-button:hover { + color: var(--primary-color); +} + +/* Users Panel */ +.users-panel { + grid-column: 3; + background-color: var(--background-darker); height: 100%; + border-left: 1px solid rgba(0, 0, 0, 0.2); +} + +.users-panel-header { + padding: 1rem; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} + +.users-panel-header h3 { + font-size: 1rem; + font-weight: 600; + color: var(--text-muted); +} + +.users-list { + padding: 1rem; +} + +.user-item { + display: flex; + align-items: center; + padding: 0.5rem; + margin-bottom: 0.5rem; + border-radius: var(--radius-sm); + transition: background-color var(--animation-duration) ease; +} + +.user-item:hover { + background-color: var(--background-light); +} + +/* Eggs Panel */ +.eggs-panel { + position: fixed; + top: 0; + right: 0; + width: 300px; + height: 100vh; + background-color: var(--background-dark); + border-left: 1px solid rgba(0, 0, 0, 0.2); + z-index: 100; + display: flex; + flex-direction: column; + transform: translateX(100%); + transition: transform var(--animation-duration) ease; } .eggs-panel.visible { transform: translateX(0); } +.eggs-header { + padding: 1rem; + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} + +.eggs-header h3 { + font-size: 1rem; + font-weight: 600; +} + .eggs-list { - padding: 10px; -} - -.egg-item { - width: 100%; - padding: 10px; - margin: 5px 0; - background: rgba(0, 0, 0, 0.3); - border: none; - border-radius: 5px; - color: white; - font-family: "inter"; - cursor: pointer; -} - -.egg-item:hover { - background: rgba(255, 255, 255, 0.1); -} - -.egg-content { - padding: 10px; - height: calc(100% - 20px); - background: rgba(0, 0, 0, 0.3); - border-radius: 5px; - margin: 10px; -} - -.room-list { - width: 200px; - background: rgba(0, 0, 0, 0.5); - border-radius: 10px; - margin-right: 10px; - padding: 10px; - height: 100%; + padding: 1rem; overflow-y: auto; } -.room-header { - font-weight: bold; - text-align: center; - padding: 5px; - margin-bottom: 10px; - border-bottom: 1px solid rgba(255, 255, 255, 0.3); -} - -.room-item { - padding: 10px; - margin: 5px 0; - border-radius: 5px; - cursor: pointer; - transition: background 0.2s; -} - -.room-item:hover { - background: rgba(255, 255, 255, 0.1); -} - -.room-item.active { - background: rgba(104, 79, 255, 0.3); - font-weight: bold; -} - -.create-room-button { +.egg-item { + display: flex; + align-items: center; + gap: 0.75rem; width: 100%; - padding: 8px; - margin-top: 10px; - background: rgba(73, 255, 145, 0.3); + padding: 0.75rem; + margin-bottom: 0.5rem; + background-color: var(--background-light); border: none; - border-radius: 5px; - color: white; + border-radius: var(--radius-sm); + color: var(--text-normal); + font-size: 0.9rem; + text-align: left; cursor: pointer; - transition: background 0.2s; + transition: background-color var(--animation-duration) ease; } -.create-room-button:hover { - background: rgba(73, 255, 145, 0.5); +.egg-item:hover { + background-color: var(--background-lightest); } -.room-title { - font-weight: bold; - font-size: 16px; - margin-bottom: 5px; - padding: 5px 10px; - background: rgba(0, 0, 0, 0.3); - border-radius: 5px; +.egg-content { + flex: 1; + padding: 1rem; + overflow-y: auto; } -.message.system-message { - color: rgba(73, 255, 145, 0.8); - font-style: italic; +/* Modal */ +.modal { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background-color: var(--background-overlay); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; } -.message.history-message { - color: rgba(255, 255, 255, 0.7); +.modal-content { + width: 100%; + max-width: 500px; + background-color: var(--background-dark); + border-radius: var(--radius-md); + overflow: hidden; +} + +.modal-header { + padding: 1rem; + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); +} + +.modal-header h3 { + font-size: 1.1rem; + font-weight: 600; +} + +.modal-body { + padding: 1rem; +} + +#fileupload { + width: 100%; + padding: 1rem; + background-color: var(--background-light); + border-radius: var(--radius-sm); + margin-bottom: 1rem; + cursor: pointer; +} + +.upload-preview { + margin: 1rem 0; + max-height: 300px; + overflow: auto; + text-align: center; +} + +.upload-preview img { + max-width: 100%; + max-height: 200px; + border-radius: var(--radius-sm); +} + +/* Meet Container */ +.meet-container { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background-color: var(--background-overlay); + z-index: 1000; + display: flex; + align-items: center; + justify-content: center; +} + +/* Responsive Design */ +@media (max-width: 992px) { + #app { + grid-template-columns: var(--sidebar-width) 1fr; + } + + .users-panel { + display: none; + } +} + +@media (max-width: 768px) { + #app { + grid-template-columns: 1fr; + } + + .sidebar { + position: fixed; + left: -100%; + width: var(--sidebar-width); + z-index: 100; + transition: left var(--animation-duration) ease; + } + + .sidebar.visible { + left: 0; + } + + .chat-header { + padding-left: 0.5rem; + } + + .menu-toggle { + display: block; + } +} + +/* File Message */ +.file-message { + display: flex; + align-items: center; + padding: 0.75rem; + background-color: var(--background-light); + border-radius: var(--radius-sm); + margin-top: 0.25rem; +} + +.file-icon { + margin-right: 0.75rem; + font-size: 1.5rem; + color: var(--text-link); +} + +.file-name { + flex: 1; + font-size: 0.9rem; +} + +.file-button { + padding: 0.4rem 0.75rem; + background-color: var(--primary-color); + border: none; + border-radius: var(--radius-sm); + color: white; + font-size: 0.8rem; + cursor: pointer; +} + +.file-button:hover { + background-color: #4752c4; +} + +/* Image Message */ +.image-message { + margin-top: 0.25rem; + max-width: 400px; +} + +.image-message img { + max-width: 100%; + border-radius: var(--radius-sm); + cursor: pointer; + transition: opacity var(--animation-duration) ease; +} + +.image-message img:hover { + opacity: 0.9; } diff --git a/client-web/index.html b/client-web/index.html index a2e21e4..0d36af5 100644 --- a/client-web/index.html +++ b/client-web/index.html @@ -1,68 +1,171 @@ - -
- - -