@import url('https://fonts.googleapis.com/css?family=Comfortaa:wght@500&display=swap'); /*-------------------------------------------------------------- # Fade in page on load --------------------------------------------------------------*/ @-webkit-keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @-moz-keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } /*-------------------------------------------------------------- # Root settings --------------------------------------------------------------*/ :root { /* common */ --status-menu-bg: linear-gradient(#363434, #000000); --body-bg: radial-gradient(#393939, #000000); --border: 1px solid rgb(255 255 255 / 32%); --msger-top: 50%; --msger-left: 50%; --msger-height: 680px; --msger-width: 420px; /* video iframe */ --iframe-width: 640px; --iframe-height: 480px; /* whiteboard resize */ --wb-width: 800px; --wb-height: 600px; /* my settings */ --mySettings-select-w: 100%; /* btns hover scale 110% zoom */ --btns-hover-scale: scale(1.1); --hover-color: grey; /* video elem border color */ --elem-border-color: none; /* left buttons bar vertical default */ --btns-top: 50%; --btns-right: 0%; --btns-left: 15px; --btns-margin-left: 0px; --btns-width: 40px; --btns-flex-direction: column; /* left buttons bar horizontal --btns-top: 95%; --btns-right: 25%; --btns-left: 50%; --btns-margin-left: -300px; --btns-width: 600px; --btns-flex-direction: row; */ /* dark theme */ --body-bg: radial-gradient(#393939, #000000); --msger-bg: radial-gradient(#393939, #000000); --msger-private-bg: radial-gradient(#393939, #000000); --wb-bg: radial-gradient(#393939, #000000); --box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); /* chat msg boble */ --left-msg-bg: #222328; --private-msg-bg: #f77070; --right-msg-bg: #0a0b0c; /* volume detected */ --volume-up: 0px 8px 16px 0px rgb(249, 253, 0); /* https://developer.mozilla.org/it/docs/Web/CSS/object-fit */ --video-object-fit: cover; } * { outline: none; font-family: 'Comfortaa'; } /*-------------------------------------------------------------- # Body Html setup --------------------------------------------------------------*/ html, body { width: 100%; height: 100%; overflow: hidden; background: var(--body-bg); } /*-------------------------------------------------------------- # Loading... --------------------------------------------------------------*/ #loadingDiv { color: #fff; padding: 30px; border-radius: 10px; background: var(--body-bg); } #loadingDiv h1 { font-size: 60px; font-family: 'Comfortaa'; } #loadingDiv pre { padding: 5px; font-family: 'Comfortaa'; } /*-------------------------------------------------------------- # Left buttons --------------------------------------------------------------*/ #buttonsBar { z-index: 10; display: none; position: fixed; padding: 5px; top: var(--btns-top); right: var(--btns-right); left: var(--btns-left); margin-left: var(--btns-margin-left); width: var(--btns-width); flex-direction: var(--btns-flex-direction); justify-content: space-around; grid-gap: 0.4rem; -webkit-transform: translate(0%, -50%); -ms-transform: translate(0%, -50%); transform: translate(0%, -50%); /* background: var(--body-bg); */ box-shadow: 0px 8px 16px 0px rgb(33 33 33); border: var(--border); border-radius: 10px; overflow: hidden; } #buttonsBar button { border: none; font-size: 1.5rem; transition: all 0.3s ease-in-out; background: #fff; padding: 4px; border-radius: 5px; color: #000; } #buttonsBar button:hover { color: var(--hover-color); transform: var(--btns-hover-scale); } #buttonsBar button:focus { outline: none; } #initAudioBtn, #initVideoBtn { border: none; border-radius: 5px; width: 40px; background: white; color: black; font-size: 1.5rem; padding: 4px; transition: all 0.3s ease-in-out; } #buttonsBar #leaveRoomBtn:hover { color: #ff2d00; transform: var(--btns-hover-scale); } .fa-microphone-slash, .fa-video-slash { color: #e74c3c !important; } /*-------------------------------------------------------------- # Chat room aka msger --------------------------------------------------------------*/ .msger-draggable { z-index: 14; display: none; position: fixed; /* center screen */ top: var(--msger-top); left: var(--msger-left); transform: translate(-50%, -50%); /* end center screen */ height: var(--msger-height); width: var(--msger-width); background: var(--msger-bg); border: var(--border); /* text-align: justify; */ overflow: hidden; border-radius: 10px; box-shadow: var(--box-shadow); } .msger { display: flex; flex-flow: column wrap; justify-content: space-between; top: var(--msger-top); left: var(--msger-left); height: var(--msger-height); width: var(--msger-width); background: var(--msger-bg); } /*-------------------------------------------------------------- # Chat room header --------------------------------------------------------------*/ .msger-header { display: flex; justify-content: space-between; padding: 10px; background: rgb(0, 0, 0); color: #666; cursor: move; } .msger-private-header { display: flex; justify-content: space-between; padding: 10px; background: rgb(0, 0, 0); color: #666; } .msger-header-title button, .msger-header-options button { border: none; font-size: 1.2rem; background: rgb(0, 0, 0); color: #fff; border-radius: 5px; transition: all 0.3s ease-in-out; transition: background 0.23s; } .msger-header-title button:hover, .msger-header-options button:hover { color: var(--hover-color); transform: var(--btns-hover-scale); transition: all 0.3s ease-in-out; } /*-------------------------------------------------------------- # Chat room output area --------------------------------------------------------------*/ .msger-chat { flex: 1; overflow-y: auto; padding: 10px; background: var(--msger-bg); } .msger-chat::-webkit-scrollbar { width: 5px; } .msger-chat::-webkit-scrollbar-track { background: transparent; } .msger-chat::-webkit-scrollbar-thumb { background: black; /*aqua;*/ } .msg { display: flex; align-items: flex-end; margin-bottom: 10px; } .msg:last-of-type { margin: 0; } /* left side */ .left-msg .msg-bubble { background: var(--left-msg-bg); border-bottom-left-radius: 0; color: #fff; } .left-msg .private-msg-bubble { background: var(--private-msg-bg); border-bottom-left-radius: 0; color: #fff; } .left-msg .msg-caption-bubble { background: var(--left-msg-bg); border-bottom-left-radius: 0; color: #fff; } /* right side */ .right-msg { flex-direction: row-reverse; } .right-msg .msg-bubble { background: var(--right-msg-bg); border-bottom-right-radius: 0; color: #fff; } .right-msg .private-msg-bubble { background: var(--private-msg-bg); border-bottom-right-radius: 0; color: #fff; } .right-msg .msg-img { margin: 0 0 0 10px; } /* common */ .msg-img { width: 50px; height: 50px; margin-right: 10px; background-repeat: no-repeat; background-position: center; background-size: cover; /* border-radius: 50%; */ } .private-msg-bubble, .msg-bubble { max-width: 200px; padding: 15px; border-radius: 15px; } .msg-caption-bubble { max-width: 70%; padding: 15px; border-radius: 15px; } .msg-info { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .msg-info-name { margin-right: 10px; font-weight: bold; } .msg-info-time { font-size: 0.85em; } .msg-text { /* https://css-tricks.com/almanac/properties/o/overflow-wrap/ */ overflow-wrap: break-word; word-wrap: break-word; hyphens: auto; } #chat-msg-a { color: #fff; } button:hover { transform: var(--btns-hover-scale); } /*-------------------------------------------------------------- # Chat room input area --------------------------------------------------------------*/ .msger-inputarea { display: flex; padding: 10px; background: var(--msger-bg); } .msger-inputarea * { padding: 10px; border: none; border-radius: 3px; font-size: 1rem; margin: 1px; color: #fff; } .msger-input { flex: 1; background: rgb(0, 0, 0); } #msgerVideoUrlBtn, #msgerEmojiBtn, #msgerCPBtn, #msgerSendBtn { background: rgb(0, 0, 0); color: #fff; transition: background 0.23s; } #msgerVideoUrlBtn:hover, #msgerEmojiBtn:hover, #msgerCPBtn:hover, #msgerSendBtn:hover { color: var(--hover-color); transform: var(--btns-hover-scale); transition: all 0.3s ease-in-out; } /*-------------------------------------------------------------- # Chat Connected Peers --------------------------------------------------------------*/ #msgerCP { z-index: 12; display: none; position: absolute; bottom: 55px; width: 100%; height: 50%; cursor: default; background: var(--msger-private-bg); overflow: hidden; } #msgerCPChat { flex: 1; overflow-y: auto; background: var(--msger-bg); } #msgerCPList { border: grey 1px solid; } #msgerCPList button { border: none; font-size: 1rem; transition: all 0.3s ease-in-out; background: rgb(0, 0, 0); color: #fff; border-radius: 5px; transition: background 0.23s; } #msgerCPList button:hover { color: var(--hover-color); transform: var(--btns-hover-scale); transition: all 0.3s ease-in-out; } #searchPeerBarName { width: 94.5%; padding: 10px; font-size: 1rem; background-color: transparent; color: #ffffff; border: grey 1px solid; } .msger-peer-inputarea { display: flex; padding: 10px; background: var(--msger-bg); } .msger-peer-inputarea * { padding: 10px; border: none; border-radius: 3px; font-size: 1em; color: #fff; } /*-------------------------------------------------------------- # Emoji picker --------------------------------------------------------------*/ emoji-picker { z-index: 12; position: absolute; bottom: 55px; width: 100%; height: 50%; --background: #16171b; --num-columns: 8; --emoji-size: 1.5rem; } /*-------------------------------------------------------------- # Room QR --------------------------------------------------------------*/ #qrRoomContainer { display: flex; justify-content: center; align-items: center; } /*-------------------------------------------------------------- # My settings --------------------------------------------------------------*/ #mySettings { display: none; z-index: 16; min-width: 320px; /* gui */ background: var(--body-bg); border-radius: 5px; margin: auto; border: var(--border); box-shadow: var(--box-shadow); padding: 10px; min-width: 330px; overflow: hidden; } #mySettingsHeader { cursor: move; } #mySettings label { width: 7em; display: flex; color: #fff; } #mySettings select { width: var(--mySettings-select-w); height: 30px; color: #fff; background-color: #2b2b2b; border-radius: 5px; } #mySettingsCloseBtn { border: none; font-size: 1.2rem; background: transparent; color: #fff; transition: background 0.23s; } #mySettingsCloseBtn:hover { color: var(--hover-color); transform: var(--btns-hover-scale); transition: all 0.3s ease-in-out; } #myPeerNameSet { border: 1px solid #fff; color: #fff; background-color: #2b2b2b; } #myPeerNameSetBtn, #muteEveryoneBtn, #hideEveryoneBtn, #lockUnlockRoomBtn, #speechRecognitionStart, #speechRecognitionStop { font-size: 0.9rem; padding: 5px; border-radius: 5px; color: #fff; background-color: transparent; } #myPeerNameSetBtn:hover, #lockUnlockRoomBtn:hover, #speechRecognitionStart:hover, #speechRecognitionStop:hover { color: var(--hover-color); transform: var(--btns-hover-scale); transition: all 0.3s ease-in-out; } #muteEveryoneBtn:hover, #hideEveryoneBtn:hover { color: #ff2d00; transform: var(--btns-hover-scale); transition: all 0.3s ease-in-out; } /* Style the tab */ .tab { overflow: hidden; background-color: rgba(0, 0, 0); } /* Style the buttons inside the tab */ .tab button { background-color: inherit; float: left; border: none; outline: none; cursor: pointer; padding: 14px 16px; transition: 0.3s; color: #fff; } /* Change background color of buttons on hover */ .tab button:hover { background-color: transparent; color: var(--hover-color); transition: all 0.3s ease-in-out; } /* Create an active/current tablink class */ .tab button.active { background-color: rgb(30 29 29); } /* Style the tab content */ .tabcontent { display: none; padding: 6px 12px; border-top: none; } /* on open display devices tab */ #tabDevices { display: block; } /*-------------------------------------------------------------- # Swal2 --------------------------------------------------------------*/ .swal2-validation-message, .swal2-title, .swal2-content, .swal2-input { text-align: center; color: white !important; background-color: transparent !important; } .swal2-file { color: white !important; background-color: transparent !important; } .swal2-html-container { color: rgb(165, 165, 165) !important; background-color: transparent !important; } /* .swal2-popup { font-size: 0.8 !important; } */ .swal2-select { background-color: black !important; color: white !important; border-radius: 6px !important; } /*-------------------------------------------------------------- # Pulse class effect --------------------------------------------------------------*/ .pulsate { animation: pulsate 3s ease-out; animation-iteration-count: infinite; -webkit-animation: pulsate 3s ease-out; -webkit-animation-iteration-count: infinite; opacity: 0.5; } @-webkit-keyframes pulsate { 0% { opacity: 0.5; } 50% { opacity: 1; } 100% { opacity: 0.5; } } @keyframes pulsate { 0% { opacity: 0.5; } 50% { opacity: 1; } 100% { opacity: 0.5; } } @-webkit-keyframes pulsate { 0% { opacity: 0.5; } 50% { opacity: 1; } 100% { opacity: 0.5; } } /*-------------------------------------------------------------- # Send File --------------------------------------------------------------*/ #sendFileDiv, #receiveFileDiv { z-index: 17; display: none; min-width: 320px; border-radius: 5px; margin: auto; padding: 10px; color: #fff; font-size: 1rem; background: var(--body-bg); box-shadow: var(--box-shadow); overflow: hidden; } #sendAbortBtn, #receiveHideBtn { padding: 5px; border-radius: 5px; font-size: 1rem; color: #fff; background-color: transparent; transition: background 0.23s; } #sendAbortBtn:hover, #receiveHideBtn:hover { color: rgb(255, 0, 0); transform: var(--btns-hover-scale); transition: all 0.3s ease-in-out; } progress { width: 0; min-width: 100%; } #imgShareSend:hover, #imgShareReceive:hover { cursor: move; } /*-------------------------------------------------------------- # Video IFrame --------------------------------------------------------------*/ #videoUrlCont { z-index: 15; display: none; width: var(--iframe-width); height: var(--iframe-height); box-shadow: var(--box-shadow); border-radius: 5px; } #videoUrlHeader { position: absolute; display: flex; left: 0px; top: 0px; width: 100%; cursor: move; border-radius: 5px; background-color: rgba(0, 0, 0, 0.7); } #videoUrlHeader button { height: 30px; width: 30px; font-size: 1.2rem; margin-top: 10px; margin-left: 10px; border: none; color: #fff; background: black; } #videoUrlHeader button:hover { color: var(--hover-color); transform: var(--btns-hover-scale); transition: all 0.3s ease-in-out; } #videoUrlIframe { width: var(--iframe-width); height: var(--iframe-height); border-radius: 5px; } /*-------------------------------------------------------------- # About --------------------------------------------------------------*/ #about { cursor: default; /*text-decoration: none;*/ } #about a { color: #fff; text-decoration: none; } #about a:hover { color: var(--hover-color); transition: all 0.3s ease-in-out; } #about img { cursor: pointer; border-radius: 10px; } #about button { border: none; width: 170px; height: 40px; font-size: 1.2rem; background: linear-gradient(100deg, #376df9 0, #ff5fa0 75%, #ffc55a 100%); box-shadow: 0 0 6px 0 rgb(251 255 0 / 82%); color: #ffffff; transition: background 0.23s; cursor: pointer; } #about button:hover { font-weight: bold; } /*-------------------------------------------------------------- # Speech bar --------------------------------------------------------------*/ .speechbar { position: absolute; top: 0; bottom: 0; right: 2px; width: 10px; display: flex; flex-direction: column; justify-content: center; align-items: center; pointer-events: none; } .bar { width: 6px; border-radius: 6px; background: rgba(#19bb5c, 0.65); transition-property: height background-color; transition-duration: 0.25s; /*box-shadow: var(--box-shadow);*/ } /*-------------------------------------------------------------- # speech recognition languages --------------------------------------------------------------*/ #recognitionDialect, #recognitionLanguage { background-color: rgba(0, 0, 0, 0.7); color: #ffffff; font-size: small; max-width: 135px; border-radius: 5px; } /*-------------------------------------------------------------- # Other --------------------------------------------------------------*/ #webRTCSeo { /* just for SEO */ display: none; } /*-------------------------------------------------------------- # Common --------------------------------------------------------------*/ button { cursor: pointer; } .hidden { display: none; } .show { display: block; } .center { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); -webkit-transform: translate(-50%, -50%); -moz-transform: translate(-50%, -50%); } .center-img { display: block; margin-left: auto; margin-right: auto; width: 50%; } .fadein { -webkit-animation: fadeIn ease-in 1; -moz-animation: fadeIn ease-in 1; animation: fadeIn ease-in 1; -webkit-animation-fill-mode: forwards; -moz-animation-fill-mode: forwards; animation-fill-mode: forwards; -webkit-animation-duration: 1s; -moz-animation-duration: 1s; animation-duration: 1s; } /* z-index 7 statusMenu ----- - peer name - hand status - video status - audio status - kick out ------------------ 8 video avatar img 9 count time 10 left buttons 11 whiteboard 12 chat emoji 13 chat peers private msg 14 chat room 15 video iframe 16 settings 17 send File Div */