gamja/style.css
Isaac Freund 690845c2af Better handle long topics on small screen sizes
Currently long topics will cause the buffer header to take up an
arbitrarily large percentage of the screen on mobile. Additionaly, long
words like URLS are not broken and may cause the buffer header to extend
outside of the viewport in the x direction, rendering the buffer content
unreadable.

This patch fixes these two issues by limiting the buffer header size to
20% of the viewport and breaking long words such as URLs if they would
overflow.

Fixes: https://todo.sr.ht/~emersion/gamja/129
2022-01-07 16:02:33 +01:00

709 lines
12 KiB
CSS

:root {
--main-background: white;
--main-color: black;
--sidebar-background: #e3e3e3;
--expander-background: #b5b5b5;
--expander-background-hover: #a6a6a6;
--expander-border: #6c6c6c;
--button-color: #eff7ef;
--button-background: #545499;
--button-background-hover: #00007C;
--button-border: #e3e3e3;
--danger-button-color: #eff7ef;
--danger-button-background: #db2626;
--danger-button-background-hover: #B20000;
--danger-button-border: #e3e3e3;
--green: green;
--gray: #4a4a4a;
}
@media (prefers-color-scheme: dark) {
:root {
--main-background: #212529;
--main-color: #f8f9fa;
--sidebar-background: #131618;
--expander-background: #424446;
--expander-background-hover: #2a2d2f;
--button-background: #282879;
--button-background-hover: #00007C;
--button-border: #131618;
--danger-button-background: #B20000;
--danger-button-background-hover: red;
--danger-button-border: #131618;
--green: #53b266;
--gray: #979797;
--red: #fb615b;
}
}
html {
scrollbar-color: #8e8e8e transparent;
}
html, body {
height: 100%;
padding: 0;
margin: 0;
overflow: hidden;
}
body {
display: grid;
grid-template-rows: auto 1fr max-content;
grid-template-columns: max-content 1fr max-content;
font-family: monospace;
}
noscript {
display: block;
margin: 0 auto;
max-width: 600px;
grid-column-start: 2;
}
button {
background: var(--button-background);
transition: background 0.25s linear;
color: var(--button-color);
padding: 0.25rem 0.5rem;
border-style: solid;
border-color: var(--button-border);
border-width: 1px;
font-size: 0.8rem;
cursor: pointer;
}
button:hover {
background: var(--button-background-hover);
}
button.danger {
background: var(--danger-button-background);
color: var(--danger-button-color);
border-color: var(--danger-button-border);
}
button.danger:hover {
background: var(--danger-button-background-hover);
}
#buffer, #connect {
color: var(--main-color);
background: var(--main-background);
width: 100%;
height: 100%;
overflow-x: hidden;
overflow-y: auto;
}
#buffer-list, #member-list {
color: var(--main-color);
background: var(--main-background);
width: 100%;
height: 100%;
background-color: var(--sidebar-background);
grid-column: 1;
grid-row: 1 / 4;
display: flex;
flex-direction: row;
}
.expander {
display: none;
cursor: pointer;
padding: 0;
margin: 0;
background: var(--expander-background);
transition: background 0.2s linear;
border: none;
width: 10px;
}
.expander:hover {
background: var(--expander-background-hover);
}
.expander span {
display: block;
width: 100%;
height: 2px;
margin-bottom: 2px;
border-style: solid;
border-width: 1px 0;
border-color: var(--expander-border);
}
#buffer-list ul {
list-style-type: none;
margin: 0;
padding: 0;
flex: 1 0 auto;
overflow-x: hidden;
overflow-y: auto;
scrollbar-width: thin;
}
#buffer-list li a {
display: inline-block;
width: 100%;
padding: 2px 10px;
box-sizing: border-box;
}
#buffer-list li.active a {
color: white;
background-color: var(--gray);
}
#buffer-list li.unread-message a {
color: #b37400;
}
#buffer-list li.unread-highlight a {
color: #22009b;
}
#buffer-list li:not(.type-server) a {
padding-left: 20px;
}
#member-list-header {
color: var(--main-color);
background-color: var(--main-background);
box-sizing: border-box;
padding: 5px 10px;
border-bottom: 1px solid var(--sidebar-background);
}
#buffer-header {
color: var(--main-color);
background-color: var(--main-background);
box-sizing: border-box;
border-bottom: 1px solid var(--sidebar-background);
grid-row: 1;
grid-column: 2;
display: grid;
grid-template-rows: auto auto;
grid-template-columns: 1fr auto;
}
#buffer-header .title {
display: none;
padding: 5px 10px;
font-weight: bold;
grid-row: 1;
grid-column: 1;
}
#buffer-header .description {
padding: 5px 10px;
grid-row: 2;
grid-column: 1;
max-height: 20vh;
overflow-y: auto;
word-break: break-word;
}
#buffer-header .actions {
grid-row: 1 / 3;
grid-column: 2;
}
#buffer-header .status-here {
color: var(--green);
}
#buffer-header .status-gone {
color: orange;
}
#buffer-header .status-offline {
color: red;
}
.actions {
display: flex;
flex-direction: row;
justify-content: center;
}
.actions button {
border-width: 0 0 0px 1px;
}
#buffer {
grid-row: 2;
grid-column: 2;
}
#buffer:focus {
outline: none;
}
#member-list {
grid-row: 1 / 4;
grid-column: 3;
width: 100%;
height: 100%;
display: flex;
flex-direction: row;
}
#member-list > section {
display: flex;
flex-direction: column;
}
#member-list-header {
border-left: 1px solid var(--sidebar-background);
}
@media (max-width: 640px) {
#buffer-list ul {
width: 0px;
}
#buffer-list.expand {
z-index: 999;
grid-column: 1 / 4;
}
#buffer-list.expand ul {
width: auto;
}
}
#member-list ul {
list-style-type: none;
margin: 0;
padding: 0;
flex-grow: 1;
overflow-x: hidden;
overflow-y: auto;
scrollbar-width: thin;
}
#member-list li a {
display: inline-block;
width: 100%;
padding: 2px 10px;
box-sizing: border-box;
}
#member-list li a.away {
color: var(--gray);
}
.membership.owner {
color: red;
}
.membership.admin {
color: blue;
}
.membership.op {
color: var(--green);
}
.membership.halfop {
color: orange;
}
.membership.voice {
color: yellow;
}
#composer {
color: var(--main-color);
background: var(--main-background);
grid-row: 3;
grid-column: 2 / 3;
border-top: 1px solid var(--sidebar-background);
}
#composer input {
display: block;
height: 35px;
width: 100%;
box-sizing: border-box;
padding: 10px;
}
#composer input, #composer input:focus {
border: none;
background: none;
outline: none;
}
#composer.read-only {
display: none;
}
#connect {
position: absolute;
top: 0;
left: 0;
height: 100%;
}
#connect form {
margin: 0 auto;
max-width: 350px;
padding: 10px;
box-sizing: border-box;
}
form input[type="text"],
form input[type="username"],
form input[type="password"],
form input[type="url"],
form input[type="email"] {
box-sizing: border-box;
width: 100%;
}
a {
color: var(--green);
}
#buffer-list li a, a.timestamp, a.nick {
color: var(--gray);
text-decoration: none;
}
#buffer-list li a:hover, #buffer-list li a:active,
a.timestamp:hover, a.timestamp:active,
a.nick:hover, a.nick:active {
text-decoration: underline;
}
details summary[role="button"] {
user-select: none;
cursor: pointer;
}
#buffer {
box-sizing: border-box;
color: var(--gray);
word-wrap: break-word;
}
#buffer .logline-list {
padding: 10px;
}
#buffer .logline {
white-space: pre-wrap;
}
#buffer .talk, #buffer .motd {
color: var(--main-color);
}
#buffer .error {
color: red;
}
#buffer .me-tell {
color: #b37400;
}
#buffer .highlight .nick {
color: yellow;
background-color: #c700ff;
}
#buffer .nick-1 {
color: #f25e0d;
}
#buffer .nick-2 {
color: #e43611;
}
#buffer .nick-3 {
color: #f98a11;
}
#buffer .nick-4 {
color: #b4a700;
}
#buffer .nick-5 {
color: #89bd3b;
}
#buffer .nick-6 {
color: #4ea847;
}
#buffer .nick-7 {
color: #287e52;
}
#buffer .nick-8 {
color: #117873;
}
#buffer .nick-9 {
color: #0083a7;
}
#buffer .nick-10 {
color: #2a6596;
}
#buffer .nick-11 {
color: #385189;
}
#buffer .nick-12 {
color: #434078;
}
#buffer .nick-13 {
color: #5e4279;
}
#buffer .nick-14 {
color: #7a447a;
}
#buffer .nick-15 {
color: #e92980;
}
#buffer .nick-16 {
color: #ec273e;
}
#buffer .separator {
display: flex;
align-items: center;
text-align: center;
text-transform: lowercase;
font-variant: small-caps;
}
#buffer .separator::before, #buffer .separator::after {
content: "";
flex: 1;
border-bottom: 1px solid transparent;
}
#buffer .date-separator {
color: #757575;
}
#buffer .date-separator::before, #buffer .date-separator::after {
border-color: #ddd;
}
#buffer .unread-separator {
color: #ff3535;
}
#buffer .unread-separator::before, #buffer .unread-separator::after {
border-color: #ff3535;
}
#error-msg {
color: white;
background-color: red;
position: fixed;
bottom: 2rem;
right: 0;
padding: 0.5rem;
margin: 0.5rem;
}
#error-msg button, .dialog button.dialog-close {
border: none;
background: transparent;
color: inherit;
font-size: inherit;
padding: 0;
}
.error-text {
color: red;
}
.dialog {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
overflow: auto;
}
.dialog .dialog-body {
background-color: var(--main-background);
color: var(--main-color);
margin: 20px auto;
max-width: 500px;
padding: 15px;
border: 1px solid rgba(0, 0, 0, 0.6);
}
.dialog .dialog-header {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 1em;
}
.dialog .dialog-header h2 {
flex-grow: 1;
margin: 0;
}
.dialog .dialog-header button.dialog-close {
font-size: 1.5em;
padding: 0 5px;
}
.dialog h2 {
margin-top: 0;
}
.dialog form button:not([type="button"]) {
float: right;
}
.dialog form {
overflow: auto; /* hack to clear floating elements */
}
kbd {
background-color: #f0f0f0;
border: 1px solid #bfbfbf;
box-shadow: inset 0 1px 0 0 #fff, inset 0 -2px 0 0 #d9d9d9;
display: inline-block;
font-size: 80%;
margin: 3px;
min-width: 1em;
text-align: center;
white-space: nowrap;
padding: 2px 4px;
font-family: monospace;
border-radius: 3px;
}
@media (prefers-color-scheme: dark) {
html {
scrollbar-color: var(--gray) transparent;
}
#buffer-list li.active a {
color: var(--sidebar-background);
background-color: white;
}
#buffer-list li.unread-message a {
color: var(--green);
}
#buffer-list li.unread-highlight a {
color: #0062cc;
}
#buffer-header .status-gone {
color: #fb885b;
}
#buffer-header .status-offline {
color: var(--red);
}
form input[type="text"],
form input[type="username"],
form input[type="password"],
form input[type="url"],
form input[type="email"] {
color: #ffffff;
background: var(--sidebar-background);
border: 1px solid #495057;
padding: 0.25rem 0.375rem;
}
form input[type="text"]:focus,
form input[type="username"]:focus,
form input[type="password"]:focus,
form input[type="url"]:focus,
form input[type="email"]:focus {
outline: 0;
border-color: #3897ff;
}
#buffer-list li a,
a.nick {
color: var(--main-color);
}
#buffer {
background: var(--main-background);
}
#buffer .error {
color: var(--red);
}
#buffer .me-tell {
color: #e16b97;
}
#buffer .highlight .nick {
color: #1e0010;
background-color: #0062cc;
}
#buffer .date-separator {
color: #757575;
}
#buffer .date-separator::before,
#buffer .date-separator::after {
border-color: #373737;
}
#buffer .unread-separator {
color: var(--green);
}
#buffer .unread-separator::before,
#buffer .unread-separator::after {
border-color: var(--green);
}
#error-msg {
color: black;
background-color: #efa3aa;
}
#error-msg a {
color: black;
}
.error-text {
color: #efa3aa;
}
#buffer .nick-8 {
color: #6bccc7;
}
#buffer .nick-10 {
color: #6296c1;
}
#buffer .nick-11 {
color: #c6b5df;
}
#buffer .nick-12 {
color: #9995df;
}
#buffer .nick-13 {
color: #8b62b3;
}
#buffer .nick-15 {
color: #e3418b;
}
kbd {
--outline-color: #6e7681;
background-color: transparent;
border: 1px solid var(--outline-color);
box-shadow: inset 0 -1px 0 var(--outline-color);
}
}
@media (max-width: 640px) {
.expander {
display: block;
}
#buffer-list ul, #member-list > section {
width: 0px;
}
#buffer-list.expand, #member-list.expand {
z-index: 999;
grid-column-start: 1;
grid-column-end: 4;
}
#buffer-list.expand ul {
width: auto;
}
#member-list.expand > section {
width: 100%;
}
#member-list-header {
border-left: none;
}
#buffer-header {
grid-template-columns: 1fr min-content;
}
#buffer-header .title {
display: block;
}
}
@media (pointer: none), (pointer: coarse) {
#buffer-list li a, #member-list li a {
padding: 7px 10px;
}
}