/* Dark mode default */ :root { --bg: #323232; --text: #efe; --accent: #fa0 ; --border-subtle: #555; --border-normal: #888; --border-highlight: #bbb; --icon-scale: 1.25; } @media (prefers-color-scheme: light) { :root { --bg: #f0f0f0; --text: #121212; --accent: #c80; --border-subtle: #bbb; --border-normal: #888; --border-highlight: #555; } } /* Box sizing rules */ *, *::before, *::after { box-sizing: border-box; } /* Remove default margin in favour of better control in authored CSS */ body, h1, h2, h3, h4, p, figure, blockquote, dl, dd { margin-block-end: 0; } /* Set core body defaults */ body { min-height: 100vh; line-height: 1.5; } /* Set shorter line heights on headings and interactive elements */ h1, h2, h3, h4, button, input, label { line-height: 1.1; } /* Balance text wrapping on headings */ h1, h2, h3, h4 { text-wrap: balance; } /* A elements that don't have a class get default styles */ a:not([class]) { text-decoration-skip-ink: auto; color: currentColor; } /* Make images easier to work with */ img, picture { max-width: 100%; display: block; } /* Inherit fonts for inputs and buttons */ input, button, textarea, select { font-family: inherit; font-size: inherit; } /* Make sure textareas without a rows attribute are not tiny */ textarea:not([rows]) { min-height: 10em; } /* Anything that has been anchored to should have extra scroll margin */ :target { scroll-margin-block: 5ex; } * { margin: 0; padding: 0; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } body { font-family: sans-serif; color: var(--text); background-color: var(--bg); display: flex; flex-direction: column; height: 100vh; // fixed height? } .clickable { cursor: pointer; } .resizable { resize: horizontal; overflow: hidden; border-right: 4px solid #444; } button { background: inherit; color: inherit; padding: 0.5rem; border: 1px solid var(--text); border-radius: 4px; } button.primary { border: 1px solid var(--accent); } [data-requires-permission] { visibility: hidden; opacity: 0; } body[data-perms*="users.write"] [data-requires-permission="users.write"], body[data-perms*="rooms.create"] [data-requires-permission="rooms.create"] { visibility: visible; opacity: 1; } /* ICONS */ .icon { width: 24px; height: 24px; transform: scale(var(--icon-scale, 1)); stroke: white; fill: transparent; stroke-width: 1pt; stroke-miterlimit: 10; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 400; } /* ICON - ATTACHMENT */ .icon.attachment { box-sizing: border-box; position: relative; display: block; width: 14px; height: 14px; border: 2px solid; border-top: 0; border-bottom-left-radius: 100px; border-bottom-right-radius: 100px; transform: scale(var(--icon-scale, 1)); margin-top: 11px; } .icon.attachment::after, .icon.attachment::before { content: ""; display: block; box-sizing: border-box; position: absolute; border-radius: 3px; border: 2px solid; } .icon.attachment::after { border-bottom: 0; border-top-left-radius: 100px; border-top-right-radius: 100px; right: -2px; width: 10px; height: 14px; bottom: 8px; } .icon.attachment::before { width: 6px; height: 12px; border-top: 0; border-bottom-left-radius: 100px; border-bottom-right-radius: 100px; left: 2px; bottom: 4px; } /* ICON - CALENDAR */ .icon.calendar, .icon.calendar::before { display: block; box-sizing: border-box; } .icon.calendar { position: relative; transform: scale(var(--icon-scale, 1)); width: 18px; height: 18px; border: 2px solid; border-top: 4px solid; border-radius: 3px; } .icon.calendar::before { content: ""; position: absolute; width: 10px; border-radius: 3px; left: 2px; background: currentColor; height: 2px; top: 2px; } /* ICON - EXCHANGE */ .icon.exchange, .icon.exchange::after, .icon.exchange::before { display: block; box-sizing: border-box; width: 8px; height: 8px; } .icon.exchange { position: relative; transform: scale(var(--icon-scale, 1)); box-shadow: -3px 3px 0 -1px, 3px -3px 0 -1px; } .icon.exchange::after, .icon.exchange::before { content: ""; position: absolute; border: 2px solid; } .icon.exchange::before { top: -5px; left: -5px; } .icon.exchange::after { bottom: -5px; right: -5px; } /* ICON - HOME */ .icon.home { background: linear-gradient(to left, currentColor 5px, transparent 0) no-repeat 0 bottom/4px 2px, linear-gradient(to left, currentColor 5px, transparent 0) no-repeat right bottom/4px 2px; box-sizing: border-box; position: relative; display: block; transform: scale(var(--icon-scale, 1)); width: 18px; height: 14px; border: 2px solid; border-top: 0; border-bottom: 0; border-top-right-radius: 3px; border-top-left-radius: 3px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; margin-bottom: -2px; } .icon.home::after, .icon.home::before { content: ""; display: block; box-sizing: border-box; position: absolute; } .icon.home::before { border-top: 2px solid; border-left: 2px solid; border-top-left-radius: 4px; transform: rotate(45deg); top: -5px; border-radius: 3px; width: 14px; height: 14px; left: 0; } .icon.home::after { width: 8px; height: 10px; border: 2px solid; border-radius: 100px; border-bottom-left-radius: 0; border-bottom-right-radius: 0; border-bottom: 0; left: 3px; bottom: 0; } /* ICON - PLUS */ .icon.plus, .icon.plus::after, .icon.plus::before { display: block; box-sizing: border-box; } .icon.plus::after, .icon.plus::before { border-radius: 10px; background: currentColor; } .icon.plus { position: relative; transform: scale(var(--icon-scale, 1)); width: 16px; height: 16px; } .icon.plus::after { content: ""; position: absolute; width: 2px; height: 16px; top: 0; left: 7px; } .icon.plus::before { content: ""; position: absolute; width: 16px; height: 2px; top: 7px; left: 0; } /* ICON - RESOURCES */ .icon.resources, .icon.resources::after { display: block; box-sizing: border-box; border-radius: 22px; } .icon.resources { position: relative; transform: scale(var(--icon-scale, 1)); width: 20px; height: 20px; border: 2px solid transparent; } .icon.resources::after { content: ""; position: absolute; width: 4px; height: 4px; background: currentColor; top: 6px; left: 6px; box-shadow: 0 7px 0 1px, 0 -7px 0 1px, -7px 0 0 1px, 7px 0 0 1px; } /* ICON - SEND */ .icon.send { box-sizing: border-box; position: relative; display: block; transform: scale(var(--icon-scale, 1)); width: 22px; height: 22px; border: 2px solid; border-radius: 4px; } .icon.send::after, .icon.send::before { content: ""; display: block; box-sizing: border-box; position: absolute; width: 2px; height: 8px; border-right: 2px solid; top: 5px; right: 5px; } .icon.send::after { width: 6px; height: 6px; border-bottom: 2px solid; transform: rotate(-45deg); right: 9px; top: 6px; } /* ICON - TALK */ .icon.talk { transform: scale(var(--icon-scale, 1)); } .icon.talk, .icon.talk::after { box-sizing: border-box; position: relative; display: block; width: 20px; height: 20px; border-radius: 100px; border: 2px dotted currentColor; } .icon.talk::after { content: ""; position: absolute; width: 8px; height: 8px; border: 1px solid transparent; top: 4px; left: 4px; box-shadow: 0 0 0 2px, inset 0 0 0 2px currentColor; } /* ICON - USER */ .icon.user, .icon.user::after, .icon.user::before { display: block; box-sizing: border-box; border: 2px solid; border-radius: 100px; } .icon.user { overflow: hidden; transform: scale(var(--icon-scale, 1)); width: 22px; height: 22px; position: relative; } .icon.user::after, .icon.user::before { content: ""; position: absolute; top: 2px; left: 5px; width: 8px; height: 8px; } .icon.user::after { border-radius: 200px; top: 11px; left: 0px; width: 18px; height: 18px; } /* ICON - WORK */ .icon.work { box-sizing: border-box; position: relative; display: block; transform: scale(var(--icon-scale, 1)); width: 20px; height: 20px; border: 2px solid; border-radius: 22px; } .icon.work::after, .icon.work::before { content: ""; display: block; box-sizing: border-box; position: absolute; } .icon.work::before { width: 12px; height: 6px; border: 2px solid; border-top-left-radius: 100px; border-top-right-radius: 100px; top: 2px; left: 2px; border-bottom: 0; } .icon.work::after { width: 18px; height: 2px; background: currentColor; left: -1px; top: 8px; }