* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: Roboto Mono, monospace; background: #f0f0f0; color: #222; } h1, h2, h3, h4, h5, h6 { font-family: Montserrat, sans-serif; } a { text-decoration: none; color: #0066ff; } a:hover { text-decoration: underline; } input { font: 16px Roboto Mono, monospace; border: none; outline: none; background: #fff; color: #222; } input::-ms-clear { display: none; } input, textarea { border-radius: 0; appearance: none; } button { display: inline-flex; justify-content: center; align-items: center; width: 100%; height: 50px; background: #6bb758; color: #fff; font: 16px Montserrat, sans-serif; border: none; outline: none; user-select: none; cursor: pointer; } button:hover { background: #7bbf6a; } button:active { background: #6bb758; } .button-normal { background: #222; } .button-normal:hover { background: #111; } .button-normal:active { background: #222; } .icon-button { background: none; width: 40px; color: #222; font-size: 20px; } .icon-button:hover { background: none; } .icon-button:active { background: none; } label { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .checkbox { display: flex; align-items: center; user-select: none; cursor: pointer; } .checkbox.top-label { flex-direction: column; } .checkbox input { position: absolute; left: -99999px; opacity: 0; } .checkbox span { width: 20px; height: 20px; border: 2px solid #777; position: relative; } .checkbox:not(.top-label) span { margin-right: 10px; } .checkbox input:checked + span { background: #6bb758; border-color: #6bb758; } .checkbox input:checked + span:before { content: ''; width: 5px; height: 10px; border-right: 3px solid #fff; border-bottom: 3px solid #fff; position: absolute; color: #fff; transform: rotate(45deg); left: 4px; } p { line-height: 1.5; } i[class^='icon-']:before, i[class*=' icon-']:before { margin: 0; } ::selection { background: #ddd; color: #000; } .success { color: #6bb758 !important; } .error { color: #f6546a !important; } .disabled { color: #999 !important; } .textinput { display: block; position: relative; } .textinput input { padding: 25px 15px 10px; } .textinput span { position: absolute; top: 0; left: 0; pointer-events: none; user-select: none; transform: translateZ(0); transition: all 0.2s, color 0s; color: #777; } .textinput-1 { font: 12px 'Montserrat', sans-serif; margin: 15px; opacity: 0; transform: translateY(10px); } .textinput input:focus + .textinput-1, .textinput-1.value { opacity: 1; transform: translateY(0); } .textinput-2 { margin: 22.5px 15px; } .textinput input:focus + .textinput-1 + .textinput-2, .textinput-2.value { opacity: 0; transform: translateY(10px); } .form-error { font-family: 'Montserrat', sans-serif; background: #f6546a; color: #fff; padding: 6px 15px; font-size: 14px; } .wrap { position: fixed; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; } .app-info { width: 100%; font-family: Montserrat, sans-serif; background: #6bb758; color: #fff; text-align: center; padding: 15px; } .app-info-error { background: #f6546a; } .app-container { position: relative; flex: 1; } .tablist { position: absolute; left: 0; top: 0; bottom: 0; width: 200px; background: #222; color: #fff; font-family: Montserrat, sans-serif; transition: transform 0.2s; user-select: none; } .tab-container { position: absolute; top: 0; bottom: 50px; width: 100%; overflow-x: hidden; overflow-y: auto; } .tablist p { height: 30px; padding: 3px 15px; padding-right: 10px; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .tablist p:last-child { margin-bottom: 10px; } .tablist p:hover { background: #111; } .tablist p.selected { padding-left: 10px; border-left: 5px solid #6bb758; } .tab-server { display: flex; align-items: center; color: #999; margin-top: 10px !important; } .tab-server .tab-content { flex: 1; margin-right: 5px; } .tab-label { margin: 5px; margin-left: 15px; font-size: 12px; color: #999; display: flex; align-items: center; height: 25px; } .tab-label span { flex: 1; } .tab-label button { width: 24px; height: 100%; font-size: 20px; background: none; color: #999; } .tab-label button:hover { color: #ccc; } .side-buttons { display: flex; position: absolute; bottom: 0; height: 50px; width: 200px; text-align: center; border-top: 1px solid #1d1d1d; } .side-buttons button { background: #222; color: #999; flex: 1; } .side-buttons button:hover { color: #ccc; background: #1d1d1d; } .main-container { position: absolute; left: 200px; top: 0; bottom: 0; right: 0; transition: left 0.2s, transform 0.2s; } .connect { display: flex; justify-content: center; align-items: center; position: absolute; top: 0; width: 100%; bottom: 0; overflow: auto; } .connect .navicon, .settings .navicon { position: fixed; top: 0; left: 0; } .connect-form { margin: auto 20px; padding: 20px 0; width: 350px; text-align: center; } .connect-form h1 { text-align: center; margin-bottom: 15px; } .connect-details { color: #999; text-align: center; margin-bottom: 15px; } .connect-details h2 { color: #6bb758; } .connect-form input { margin-top: 5px; width: 100%; } input[type='number'] { appearance: textfield; } input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none !important; margin: 0; } .connect-form label { user-select: none; } .connect-form-address { display: flex; } .connect-form-address .textinput:nth-child(1) { flex: 1; } .connect-form-address .textinput:nth-child(2) { width: 65px; } .connect-form-address input { padding-right: 0; } .connect-form-address label { margin-top: 5px; font: 12px 'Montserrat', sans-serif; padding: 10px; padding-bottom: 0; text-align: center; background: #fff; color: #777; } .connect-form-button-optionals { font-size: 24px; color: #999; height: 40px; width: 100%; } .connect-form-button-optionals:hover { color: #666; } .chat-title-bar { font-family: Montserrat, sans-serif; position: absolute; left: 0; top: 0; right: 0; height: 50px; line-height: 50px; border-bottom: 1px solid #ddd; display: flex; font-size: 20px; padding-right: 5px; } .chat-channel .chat-title-bar { right: 200px; } .navicon { display: none; width: 50px; cursor: pointer; } .chat-server .userlist, .chat-private .userlist { display: none; } .chat-server .userlist-bar, .chat-private .userlist-bar { display: none; } .chat-title-bar .icon-button:not(.navicon) { color: #999; } .chat-title-bar .icon-button:hover { color: #222; } .button-userlist { display: none; } .chat-server .button-userlist, .chat-private .button-userlist { display: none; } .editable-wrap { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .editable-wrap-editable { cursor: pointer; } .chat-title { margin-left: 15px; font: 24px Montserrat, sans-serif; font-weight: 700; color: #222; line-height: 50px; } input.chat-title { background: none; cursor: text !important; } .chat-topic-wrap { flex: 1; position: relative; margin-left: 15px; margin-right: 5px; } .chat-topic { position: absolute; width: 100%; top: 3px; font-size: 16px; color: #999; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .userlist-bar { display: flex; justify-content: center; align-items: center; position: absolute; top: 0; right: 0; width: 200px; height: 50px; border-left: 1px solid #ddd; border-bottom: 1px solid #ddd; font-family: Montserrat, sans-serif; } .userlist-bar svg { margin-right: 5px; } .search { display: none; position: absolute; left: 0; top: 50px; bottom: 50px; right: 200px; z-index: 3; background: #f0f0f0; } .chat-server .search { display: none; } .chat-private .search { right: 0; } .search-input-wrap { display: flex; width: 100%; background: #fff; border-bottom: 1px solid #ddd; } .search-input { flex: 1; padding: 15px; padding-left: 0; } .search-input-icon { font-size: 20px; align-self: center; margin: 0 15px; color: #ddd; } .search-results { position: absolute; top: 50px; bottom: 0; width: 100%; overflow: auto; padding: 10px 15px; } .search-result:not(:last-child) { margin-bottom: 5px; } .messagebox { position: absolute; left: 0; top: 50px; bottom: 50px; right: 0; } .chat-channel .messagebox { right: 200px; } .messagebox-top-indicator { color: #999; height: 100px; text-align: center; padding-top: 40px; } .messagebox-window { overflow-x: hidden !important; overflow-y: scroll !important; } .messagebox-topdate-container { position: absolute; text-align: center; left: 0; height: 0; } .messagebox-topdate { position: relative; top: -12px; background: #f0f0f0; color: #999; border-radius: 50vh; padding: 0 5px; font-size: 12px; z-index: 2; } .message { padding: 4px 15px; } .message-info { color: #999; } .message-error { color: #f6546a; } .message-prompt { font-weight: 700; font-style: italic; color: #6bb758; } .message-action { color: #ff6698; } .message-date { text-align: center; color: #999; font-size: 12px; margin-top: 12px; } .message-date hr { border: none; border-bottom: 1px solid #ddd; } .message-time { font-style: normal; font-weight: 400; color: #999; } .message-sender { font-weight: 700; color: #6bb758; cursor: pointer; } .message-input-wrap { position: absolute; left: 0; bottom: 0; right: 0; height: 50px; z-index: 1; display: flex; border-top: 1px solid #ddd; background: #fff; } .message-input-nick { display: block; margin: 10px; line-height: 30px; height: 30px; padding: 0 10px; background: #6bb758; color: #fff; font-family: Montserrat, sans-serif !important; margin-right: 0; cursor: pointer; } input.message-input-nick { cursor: text; } input.message-input-nick.invalid { background: #f6546a; } .message-input { flex: 1; width: 100%; height: 100%; padding: 0 10px; } .userlist { position: absolute; top: 50px; bottom: 50px; right: 0; width: 200px; border-left: 1px solid #ddd; background: #f0f0f0; z-index: 1; transition: transform 0.2s; } .userlist p { padding: 0px 15px; cursor: pointer; } .userlist p:hover { background: #ddd; } .settings-container { display: flex; justify-content: center; overflow: auto; height: 100%; } .settings { flex: 1; max-width: 692px; text-align: center; } .settings-section { border: 1px solid #ddd; padding: 15px; margin: 0 20px; margin-bottom: 20px; text-align: left; } .settings .checkbox { margin-top: 15px; } .settings h1 { text-align: center; margin: 20px; } .settings h2 { font-weight: 700; color: #222; } .settings-button { width: 200px; } .settings .error { margin-top: 15px; color: #f6546a; text-align: center; } .input-file { color: #fff; background: #222 !important; padding: 10px; width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .settings-file { text-align: center; display: inline-block; margin-top: 15px; margin-right: 10px; } .button-install { padding: 0 15px; width: auto !important; margin: 20px; margin-top: 0; } .button-install h2 { color: #fff; } @media (max-width: 906px) { .settings-file { display: block; margin-right: 0; } .settings-file:last-of-type { margin-bottom: 10px; } } .settings-file p { margin-bottom: 5px; color: #999; } .settings-cert { text-align: center; } .settings-version { color: #999; font-size: 12px; margin-bottom: 20px; } .suspense-fallback { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; align-items: center; justify-content: center; font: 700 64px 'Montserrat', sans-serif; color: #ddd; } .suspense-modal-fallback { position: fixed; right: 15px; bottom: 3px; z-index: 1; font: 700 64px 'Montserrat', sans-serif; color: #ddd; } .modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: row; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0.33); opacity: 0; transition: opacity 0.2s; } .modal-overlay-opening { opacity: 1; } .modal-overlay-closing { opacity: 0; } .modal { width: 600px; min-width: 0; padding: 15px; background: #f0f0f0; border: 1px solid #ddd; outline: none; margin: 15px; text-align: center; font-family: 'Montserrat', sans-serif; transform: translateY(-20px); transition: transform 0.2s; } .modal-opening { transform: translateY(0); } .modal-closing { transform: translateY(-20px); } .modal p { margin-bottom: 5px; } .modal button { width: 120px; } .modal button { margin: 0 5px; margin-top: 10px; } .modal-header { display: flex; align-items: center; } .modal-header h2 { flex: 1; } .modal-close { color: #999; cursor: pointer; width: auto !important; height: auto; margin: 0 !important; } .modal-close:hover { color: #222; } .modal-content { margin-top: 15px; } .modal-channel { display: flex; flex-direction: column; height: calc(100vh - 120px); padding: 0; } .modal-channel input { flex: 1; padding: 15px; } .modal-channel-button-join { margin: 0 !important; width: 60px !important; height: 30px; } .modal-channel-input-wrap { display: flex; } .modal-channel-close { background: #fff; width: 40px !important; margin: 0 !important; } .modal-channel-close:hover { background: #fff; } .modal-channel-result { margin: 15px; text-align: left; } .modal-channel-result-header { display: flex; align-items: center; margin-bottom: 10px; } .modal-channel-topic { font-size: 12px; font-family: Roboto Mono, monospace; color: #444; } .modal-channel-name { cursor: pointer; margin-right: 15px; } .modal-channel-users { font-size: 16px; flex: 1; margin-left: 5px; } .modal-channel-results { flex: 1; overflow-y: auto; overflow-x: hidden; } .modal-channel-button-more { margin-bottom: 15px !important; } @media (max-width: 600px) { .tablist { width: 200px; transform: translateX(-200px); } .main-container { transform: translateX(0); left: 0; } .navicon { display: block; } .main-container.off-canvas { transform: translateX(200px); } .tablist.off-canvas { transform: translateX(0); } .chat-title { margin-left: 0; } .chat-title-bar .editable-wrap { flex: 1; } .chat-topic-wrap { display: none; } .userlist-bar { display: none; } .userlist { transform: translateX(200px); } .userlist.off-canvas { transform: translateX(0); } .chat-channel .chat-title-bar, .chat-channel .messagebox { right: 0; } .button-userlist { display: inline-block; } .search { right: 0; } .connect-form { width: 100%; margin: auto 50px; max-width: 400px; } .settings-section { margin-left: 50px; } .button-install { margin-left: 50px; } .modal-channel { margin: 0; width: auto; height: auto; position: fixed; top: 5px; left: 5px; right: 5px; bottom: 5px; } }