dispatch/client/css/style.css

1114 lines
15 KiB
CSS

* {
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;
}
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 {
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;
}
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;
}
.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 i {
flex: 100%;
color: #999;
line-height: 50px;
cursor: pointer;
font-size: 18px;
border-left: 1px solid #1d1d1d;
}
.side-buttons button {
font-size: 24px;
}
.side-buttons i: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-top: 20px;
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;
cursor: default;
}
.connect-form button {
margin-bottom: 20px;
}
.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 i {
display: block;
cursor: pointer;
color: #999;
text-align: center;
font-size: 24px;
padding: 5px 0;
}
.connect-form i: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;
}
.chat-channel .chat-title-bar {
right: 200px;
}
.navicon {
display: none;
padding: 0 15px;
line-height: 50px;
font-size: 20px;
cursor: pointer;
}
.chat-title-bar i {
padding: 0 15px;
cursor: pointer;
}
.chat-server .icon-search {
display: none;
}
.chat-server .userlist,
.chat-private .userlist {
display: none;
}
.chat-server .userlist-bar,
.chat-private .userlist-bar {
display: none;
}
.button-leave {
border-left: 1px solid #ddd;
}
.button-leave:hover {
background: #ddd;
}
.button-userlist {
display: none;
border-left: 1px solid #ddd;
}
.chat-server .button-userlist,
.chat-private .button-userlist {
display: none;
}
.chat-title {
margin-left: 10px;
padding: 0 5px;
font: 24px Montserrat, sans-serif;
font-weight: 700;
color: #222;
white-space: nowrap;
line-height: 50px;
}
.chat-server .chat-title {
cursor: pointer;
}
input.chat-title {
background: none;
cursor: text !important;
}
.chat-topic-wrap {
flex: 1;
position: relative;
margin: 0 15px;
}
.chat-topic {
position: absolute;
width: 100%;
top: 3px;
font-size: 16px;
color: #999;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.chat-topic a {
color: #999;
text-decoration: none;
}
.chat-topic a:hover {
text-decoration: underline;
}
.userlist-bar {
position: absolute;
top: 0;
right: 0;
width: 200px;
height: 50px;
border-left: 1px solid #ddd;
border-bottom: 1px solid #ddd;
line-height: 50px;
text-align: center;
padding: 0 15px;
font-family: Montserrat, sans-serif;
}
.userlist-bar i {
margin-right: 3px;
}
.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 i {
padding: 15px;
color: #ddd;
}
.search-input {
flex: 1;
padding: 15px;
padding-left: 0;
}
.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 a {
text-decoration: none;
color: #0066ff;
}
.message a:hover {
text-decoration: underline;
}
.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 15px;
}
.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-button {
margin-top: 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-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: 50px !important;
height: 24px;
font-size: 12px;
}
.modal-channel-input-wrap {
display: flex;
}
.modal-channel-close {
padding: 15px;
background: #fff;
color: #999;
cursor: pointer;
}
.modal-channel-close:hover {
color: #222;
}
.modal-channel-result {
margin: 15px;
text-align: left;
}
.modal-channel-result-header {
display: flex;
align-items: center;
}
.modal-channel-topic {
font-size: 12px;
font-family: Roboto Mono, monospace;
color: #444;
}
.modal-channel-name {
margin-bottom: 5px;
cursor: pointer;
}
.modal-channel-users {
font-size: 16px;
color: #444;
margin: 0 15px;
flex: 1;
}
.modal-channel-users i {
margin-right: 3px;
}
.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: inline-block;
}
.main-container.off-canvas {
transform: translateX(200px);
}
.tablist.off-canvas {
transform: translateX(0);
}
.chat-title {
margin-left: 0;
}
.chat-topic {
font-size: 12px;
}
.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;
}
}