/* Dark mode default */ :root { --bg: #323232; --text: #efe; --accent: #fa0 ; --border-subtle: #555; --border-normal: #888; --border-highlight: #bbb; --icon-scale: 1.25; --border-radius: 4px; } @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; } form div { position: relative; display: flex; margin-bottom: 1em; } form label { position: absolute; top: 10px; font-size: 30px; margin: 10px; padding: 0 10px; background-color: var(--bg); -webkit-transition: top 0.2s ease-in-out, font-size 0.2s ease-in-out; transition: top 0.2s ease-in-out, font-size 0.2s ease-in-out; } form input:focus ~ label, form input:valid ~ label { top: -25px; font-size: 20px; } form input { width: 100%; padding: 20px; border: 1px solid var(--text); font-size: 20px; background-color: var(--bg); color: var(--text); } form input:focus { outline: none; } form button { width: 100%; padding: 20px; border: 1px solid var(--text); font-size: 20px; background-color: var(--bg); color: var(--text); margin-top: 1rem; } form button.primary { background-color: var(--accent); } button { background: inherit; color: inherit; padding: 0.5rem; border: 1px solid var(--text); border-radius: var(--border-radius); cursor: pointer; } button.primary { border: 1px solid var(--accent); } [data-requires-permission] { visibility: hidden; opacity: 0; height: 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; height: unset; } /* 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; margin: 0 auto; } /* ICON - ADD (with box) */ .icon.add { box-sizing: border-box; position: relative; display: block; width: 22px; height: 22px; border: 2px solid; transform: scale(var(--icon-scale, 1)); border-radius: 4px; } .icon.add::after, .icon.add::before { content: ""; display: block; box-sizing: border-box; position: absolute; width: 10px; height: 2px; background: currentColor; border-radius: 5px; top: 8px; left: 4px; } .icon.add::after { width: 2px; height: 10px; top: 4px; left: 8px; } /* 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 - FORWARD */ .icon.forward-copy { box-sizing: border-box; position: relative; display: block; transform: scale(var(--icon-scale, 1)); width: 16px; height: 16px; box-shadow: 6px -6px 0 -4px; } .icon.forward-copy::before { content: ""; display: block; box-sizing: border-box; position: absolute; width: 8px; height: 8px; border: 2px solid; border-radius: 1px; left: 0; bottom: 0; } .icon.forward-copy::after { content: ""; display: block; box-sizing: border-box; position: absolute; background: currentColor; width: 2px; height: 10px; transform: rotate(45deg); bottom: 8px; right: 2px; border-radius: 4px; } /* 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 - MORE */ .icon.more { box-sizing: border-box; position: relative; display: block; transform: scale(var(--icon-scale, 1)); width: 24px; height: 20px; border: 2px solid; border-radius: 3px; } .icon.more::before { content: ""; position: absolute; box-sizing: border-box; display: block; width: 4px; height: 4px; background-color: currentColor; border-radius: 20px; top: 6px; left: 8px; box-shadow: -5px 0 0, 5px 0 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 - REPLY */ .icon.reply { box-sizing: border-box; position: relative; display: block; transform: scale(var(--icon-scale, 1)); width: 16px; height: 16px; box-shadow: -6px -6px 0 -4px; } .icon.reply::before { content: ""; display: block; box-sizing: border-box; position: absolute; width: 8px; height: 8px; border: 2px solid; border-radius: 1px; right: 0; bottom: 0; } .icon.reply::after { content: ""; display: block; box-sizing: border-box; position: absolute; background: currentColor; width: 2px; height: 10px; transform: rotate(-45deg); bottom: 8px; left: 2px; border-radius: 4px; } /* 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 - TRASH */ .icon.trash { box-sizing: border-box; position: relative; display: block; transform: scale(var(--icon-scale, 1)); width: 10px; height: 12px; border: 2px solid transparent; box-shadow: 0 0 0 2px, inset -2px 0 0, inset 2px 0 0; border-bottom-left-radius: 1px; border-bottom-right-radius: 1px; margin-top: 4px; } .icon.trash::after, .icon.trash::before { content: ""; display: block; box-sizing: border-box; position: absolute; } .icon.trash::after { background: currentColor; border-radius: 3px; width: 16px; height: 2px; top: -4px; left: -5px; } .icon.trash::before { width: 10px; height: 4px; border: 2px solid; border-bottom: transparent; border-top-left-radius: 2px; border-top-right-radius: 2px; top: -7px; left: -2px; } /* 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; } /* ICONS - RIGHT/LEFT */ .icon.right { box-sizing: border-box; position: relative; display: block; transform: scale(var(--icon-scale, 1)); width: 22px; height: 22px; } .icon.right::after, .icon.right::before { content: ""; display: block; box-sizing: border-box; position: absolute; width: 8px; height: 8px; border-right: 2px solid; border-top: 2px solid; transform: rotate(45deg); top: 7px; right: 6px; } .icon.right::after { right: 11px; } .icon.left { box-sizing: border-box; position: relative; display: block; transform: scale(var(--icon-scale, 1)); width: 22px; height: 22px; } .icon.left::after, .icon.left::before { content: ""; display: block; box-sizing: border-box; position: absolute; width: 8px; height: 8px; border-left: 2px solid; border-bottom: 2px solid; transform: rotate(45deg); top: 7px; left: 6px; } .icon.left::after { left: 11px; }