744 lines
14 KiB
CSS
744 lines
14 KiB
CSS
:root {
|
||
/*
|
||
* according to https://www.color-blindness.com/color-name-hue/
|
||
*
|
||
* amber
|
||
* chartreuse
|
||
* free-speech-green (lime)
|
||
* aqua
|
||
* blue
|
||
* electric-indigo
|
||
* hot-magenta
|
||
*/
|
||
--red: var(--base08);
|
||
--orange: var(--base09);
|
||
--yellow: var(--base0A);
|
||
--green: var(--base0B);
|
||
--cyan: var(--base0C);
|
||
--blue: var(--base0D);
|
||
--violet: var(--base0E);
|
||
--magenta: var(--base0F);
|
||
|
||
/* convenience */
|
||
--bg: var(--base00);
|
||
--bg-status: var(--base01);
|
||
--bg-selection: var(--base02);
|
||
--fg-alt: var(--base03);
|
||
--fg-status: var(--base04);
|
||
--fg: var(--base05);
|
||
--fg-light: var(--base06);
|
||
--bg-light: var(--base07);
|
||
|
||
/* size (2^n) */
|
||
--size-3: 8rem;
|
||
--size-2: 4rem;
|
||
--size-1: 2rem;
|
||
--size-0: 1rem;
|
||
--size--1: 0.5rem;
|
||
--size--2: 0.25rem;
|
||
--size--3: 0.125rem;
|
||
--size--4: 0.0625rem;
|
||
|
||
/* size */
|
||
--common-radius: var(--size--2);
|
||
--measure: 36rem;
|
||
--line: 1.5rem;
|
||
--code-size: 85%;
|
||
}
|
||
|
||
* {
|
||
scrollbar-color: var(--fg-status) var(--bg);
|
||
}
|
||
|
||
::selection {
|
||
background-color: var(--bg-selection);
|
||
color: var(--fg-light);
|
||
}
|
||
|
||
html {
|
||
display: flex;
|
||
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
|
||
"Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans",
|
||
"Helvetica Neue", sans-serif;
|
||
justify-content: center;
|
||
font-size: 12pt;
|
||
line-height: 1.5;
|
||
margin: 0;
|
||
padding: 0;
|
||
overflow-y: scroll;
|
||
}
|
||
|
||
main {
|
||
margin: 0;
|
||
margin-bottom: var(--size-0);
|
||
}
|
||
|
||
/* https://www.desmos.com/calculator/3elcf5cwhn */
|
||
h1 {
|
||
font-size: 133%;
|
||
} /* 4 / 3 */
|
||
h2 {
|
||
font-size: 115%;
|
||
} /* 8 / 7 */
|
||
h3 {
|
||
font-size: 105%;
|
||
} /* 16 / 15 */
|
||
h4 {
|
||
font-size: 103%;
|
||
} /* 32 / 31 */
|
||
h5 {
|
||
font-size: 101%;
|
||
} /* 64 / 63 */
|
||
h6 {
|
||
font-size: 100%;
|
||
} /* 128 / 127 */
|
||
|
||
h1,
|
||
h2,
|
||
h3,
|
||
h4,
|
||
h5,
|
||
h6 {
|
||
color: var(--bg-light);
|
||
margin: var(--size-0) 0;
|
||
}
|
||
|
||
ul,
|
||
ol {
|
||
padding-left: var(--size-0);
|
||
margin-left: var(--size--3);
|
||
}
|
||
|
||
a {
|
||
color: var(--fg-light);
|
||
}
|
||
|
||
button,
|
||
.file-button {
|
||
cursor: pointer;
|
||
background: var(--fg);
|
||
color: var(--bg);
|
||
border: var(--size--4) solid var(--fg);
|
||
padding: var(--size--1) var(--size-0);
|
||
border-radius: var(--common-radius);
|
||
font-size: 8pt;
|
||
}
|
||
|
||
.file-button {
|
||
float: right;
|
||
margin: 0;
|
||
background: transparent;
|
||
color: var(--fg);
|
||
}
|
||
|
||
#blob {
|
||
visibility: hidden;
|
||
height: 0;
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
section header a {
|
||
display: flex;
|
||
color: var(--fg-status);
|
||
text-decoration: none;
|
||
margin-right: var(--size--2);
|
||
margin-left: var(--size--2);
|
||
font-weight: bold;
|
||
}
|
||
|
||
/* For use with elements specific for
|
||
* rendering in a text browser and intended
|
||
* to be hidden in a graphical browser. */
|
||
.text-browser {
|
||
display: none;
|
||
}
|
||
|
||
section > footer > div > a,
|
||
section > footer > div > form > button {
|
||
color: var(--fg-status);
|
||
font-weight: bold;
|
||
}
|
||
|
||
section > footer > div > form > button {
|
||
display: inline-block;
|
||
border: 0;
|
||
background: transparent;
|
||
cursor: pointer;
|
||
padding: 0;
|
||
}
|
||
|
||
select,
|
||
input {
|
||
background: var(--bg);
|
||
color: var(--fg);
|
||
border: var(--size--4) solid var(--bg-selection);
|
||
padding: var(--size--1);
|
||
margin: var(--size-0) 0;
|
||
-moz-appearance: none;
|
||
appearance: none;
|
||
border-radius: var(--common-radius);
|
||
display: block;
|
||
}
|
||
|
||
.contentWarning {
|
||
background-color: var(--bg);
|
||
box-sizing: border-box;
|
||
display: block;
|
||
font-size: var(--size-0);
|
||
padding: var(--size-0);
|
||
width: 100%;
|
||
margin: var(--size-0) 0;
|
||
border: var(--size--4) solid var(--bg-selection);
|
||
border-radius: var(--common-radius);
|
||
color: var(--fg);
|
||
}
|
||
|
||
textarea {
|
||
background-color: var(--bg);
|
||
box-sizing: border-box;
|
||
display: block;
|
||
font-size: var(--size-0);
|
||
padding: var(--size-0);
|
||
resize: vertical;
|
||
width: 100%;
|
||
margin: var(--size-0) 0;
|
||
height: 12rem;
|
||
border: var(--size--4) solid var(--bg-selection);
|
||
border-radius: var(--common-radius);
|
||
color: var(--fg);
|
||
}
|
||
|
||
button:focus,
|
||
input:focus,
|
||
select:focus,
|
||
textarea:focus {
|
||
border-color: var(--blue);
|
||
}
|
||
|
||
/* Prevent button styles being applied to heart button */
|
||
button:focus,
|
||
button:hover {
|
||
background-color: var(--fg-light);
|
||
}
|
||
|
||
section > footer > div > form > button:hover,
|
||
section > footer > div > form > button:focus {
|
||
background-color: transparent;
|
||
}
|
||
|
||
pre {
|
||
overflow-x: auto;
|
||
background-color: var(--bg);
|
||
padding: var(--size--1);
|
||
font-size: 92%;
|
||
border-radius: var(--common-radius);
|
||
border: var(--size--4) solid var(--bg-status);
|
||
}
|
||
|
||
section code {
|
||
max-width: 100%;
|
||
overflow-wrap: break-word;
|
||
padding: 0.125em 0.25em;
|
||
margin: 0;
|
||
font-size: var(--code-size);
|
||
background-color: var(--bg);
|
||
border-radius: var(--common-radius);
|
||
border: var(--size--4) solid var(--bg-status);
|
||
}
|
||
|
||
section pre code {
|
||
color: inherit;
|
||
padding: 0;
|
||
margin: 0;
|
||
font-size: 100%;
|
||
background-color: initial;
|
||
border: initial;
|
||
border-radius: initial;
|
||
}
|
||
|
||
section blockquote {
|
||
margin-left: 0;
|
||
border-left: var(--size--1) solid var(--bg-status);
|
||
padding-left: var(--size-0);
|
||
}
|
||
|
||
section img,
|
||
section video {
|
||
max-width: 100%;
|
||
max-height: 100vh;
|
||
border-radius: var(--common-radius);
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
section > h1 {
|
||
margin-top: 0;
|
||
padding-top: 0;
|
||
}
|
||
|
||
.profile > img,
|
||
.profile > h1 {
|
||
display: inline-block;
|
||
}
|
||
|
||
section > header.profile {
|
||
height: auto;
|
||
justify-content: left;
|
||
}
|
||
|
||
.profile > img {
|
||
width: 4rem;
|
||
height: 4rem;
|
||
margin-right: var(--size-0);
|
||
border-radius: var(--common-radius);
|
||
}
|
||
|
||
.private {
|
||
border-left: var(--size--1) solid var(--violet);
|
||
border-color: var(--violet);
|
||
}
|
||
|
||
section.thread-target {
|
||
border: var(--size--4) solid var(--blue);
|
||
box-shadow: 0 0 var(--size--2) var(--blue);
|
||
}
|
||
|
||
section.thread-target.private {
|
||
border: var(--size--4) solid var(--violet);
|
||
border-left: var(--size--1) solid var(--violet);
|
||
border-color: var(--violet);
|
||
box-shadow: 0 0 var(--size--2) var(--violet);
|
||
}
|
||
|
||
section audio {
|
||
width: 100%;
|
||
}
|
||
|
||
@media screen {
|
||
html {
|
||
min-height: 100%;
|
||
color: var(--fg);
|
||
background-color: var(--bg-status);
|
||
}
|
||
|
||
body {
|
||
width: 100%;
|
||
max-width: var(--measure);
|
||
margin: 0;
|
||
}
|
||
}
|
||
|
||
nav {
|
||
margin: var(--size-0) 0;
|
||
}
|
||
|
||
nav > ul > li > a {
|
||
color: var(--fg);
|
||
text-decoration: none;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.author-action > a {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
section header a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
nav > ul > li > a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
nav > ul > li > a.current {
|
||
font-weight: bold;
|
||
}
|
||
|
||
section {
|
||
padding: var(--size-0);
|
||
border-radius: var(--common-radius);
|
||
margin: var(--size-0) 0;
|
||
word-wrap: break-word;
|
||
background: var(--bg);
|
||
width: 100%;
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.indent section,
|
||
.thread-container section {
|
||
margin: unset;
|
||
border-radius: unset;
|
||
border-bottom: var(--fg-alt) solid 1px;
|
||
}
|
||
|
||
.indent details[open] {
|
||
border-bottom: var(--fg-alt) solid 1px;
|
||
}
|
||
|
||
.indent section:last-of-type,
|
||
.thread-container section:last-of-type {
|
||
border-bottom: unset;
|
||
}
|
||
|
||
.mentions-container {
|
||
display: grid;
|
||
grid-template-columns: 4rem auto;
|
||
grid-column-gap: 1rem;
|
||
margin-bottom: var(--size-0);
|
||
}
|
||
|
||
section > header {
|
||
background: var(--bg);
|
||
color: var(--fg-status);
|
||
margin-bottom: calc(-1 * var(--size--1));
|
||
margin-top: calc(-1 * var(--size--1));
|
||
padding-bottom: var(--size--1);
|
||
padding-top: var(--size--1);
|
||
position: sticky;
|
||
top: 0;
|
||
z-index: 1;
|
||
}
|
||
|
||
section > header > div {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
flex-wrap: wrap;
|
||
}
|
||
|
||
section header a > .avatar {
|
||
width: var(--line);
|
||
height: var(--line);
|
||
border-radius: var(--common-radius);
|
||
margin-right: var(--size--2);
|
||
}
|
||
|
||
section header span {
|
||
display: inline-flex;
|
||
}
|
||
|
||
/*
|
||
* HACK: centered-footer
|
||
*
|
||
* When someone likes a message we want to submit the form and then redirect
|
||
* them back to the original page. Unfortunately when you link to anchor tags
|
||
* that scrolls the browser so that they're at the *top* of the page, not the
|
||
* center of the page. In our view we have an empty div with an appropriate
|
||
* anchor tag, so here we use CSS to center it on the screen.
|
||
*
|
||
* The code below creates padding-top that takes up 50% of the height of the
|
||
* viewport and then gets rid of it with negative margin. This has no effect
|
||
* on the display of the item, but means that when we link to the anchor tag
|
||
* it centers this empty element vertically on the screen.
|
||
*
|
||
* We also use `pointer-events: none` to ensure that this invisible div doesn't
|
||
* capture cursor events (clicks, drags, etc) on surrounding elements, because
|
||
* otherwise we could have a problem where someone clicks above the invisible
|
||
* div but the browser picogs they're clicking the gigantic amount of padding.
|
||
*/
|
||
section > .centered-footer {
|
||
padding-top: 50vh;
|
||
margin-top: -50vh;
|
||
pointer-events: none;
|
||
}
|
||
|
||
section > footer {
|
||
color: var(--fg-status);
|
||
}
|
||
|
||
section > footer br {
|
||
display: none;
|
||
}
|
||
|
||
section > footer > div {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
}
|
||
|
||
section > footer > div > * {
|
||
text-decoration: none;
|
||
}
|
||
|
||
section > footer > div > form > button:first-of-type {
|
||
font-size: 100%;
|
||
}
|
||
|
||
section > footer > div > form > button.liked {
|
||
color: var(--red);
|
||
}
|
||
|
||
label {
|
||
display: block;
|
||
margin: 0;
|
||
}
|
||
|
||
nav > ul {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
justify-content: space-between;
|
||
margin: 0;
|
||
padding: 0;
|
||
}
|
||
|
||
nav > ul > li {
|
||
list-style: none;
|
||
margin-right: var(--size--1);
|
||
}
|
||
|
||
.profile {
|
||
display: flex;
|
||
margin-bottom: var(--size-0);
|
||
}
|
||
|
||
progress {
|
||
display: block;
|
||
width: 100%;
|
||
}
|
||
|
||
progress::-moz-progress-bar,
|
||
progress::-webkit-progress-value,
|
||
progress {
|
||
background: var(--blue);
|
||
border-color: var(--blue);
|
||
}
|
||
|
||
summary {
|
||
padding: var(--size--1);
|
||
margin: var(--size-0) 0;
|
||
cursor: pointer;
|
||
background: var(--bg);
|
||
border-radius: var(--common-radius);
|
||
list-style-type: "+ ";
|
||
border: var(--size--4) dashed var(--fg-status);
|
||
}
|
||
|
||
details[open] > summary {
|
||
list-style-type: "− ";
|
||
}
|
||
|
||
.indent > details > summary {
|
||
border: none;
|
||
}
|
||
|
||
.md-mention {
|
||
-moz-user-select: all;
|
||
-ms-user-select: all;
|
||
-webkit-user-select: all;
|
||
user-select: all;
|
||
background: none;
|
||
overflow: hidden;
|
||
}
|
||
|
||
table {
|
||
width: 100%;
|
||
table-layout: fixed;
|
||
}
|
||
|
||
td,
|
||
th {
|
||
padding: var(--size--1);
|
||
outline: var(--size--4) solid var(--bg-status);
|
||
}
|
||
|
||
th {
|
||
text-align: left;
|
||
background-color: var(--bg-status);
|
||
}
|
||
|
||
input[type="search"] {
|
||
width: 100%;
|
||
margin: var(--size-0) 0;
|
||
}
|
||
|
||
.image-search-grid {
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
grid-gap: var(--size-0);
|
||
}
|
||
|
||
.image-search-grid .image-result {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
padding: var(--size--1) 0;
|
||
background: var(--bg);
|
||
border-radius: var(--common-radius);
|
||
}
|
||
|
||
.image-search-grid .image-result .result-text {
|
||
hyphens: auto;
|
||
text-align: center;
|
||
}
|
||
|
||
hr {
|
||
border: var(--size--4) solid var(--fg-alt);
|
||
}
|
||
|
||
.form-button-group {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
margin: var(--size-0) 0;
|
||
}
|
||
|
||
/* sidebar only appears on big screens */
|
||
@media (min-width: calc(45rem)) {
|
||
body > nav > ul {
|
||
justify-content: right;
|
||
flex-direction: column;
|
||
margin-right: var(--size-1);
|
||
position: sticky;
|
||
top: var(--size-0);
|
||
}
|
||
body > nav > ul > li {
|
||
margin-bottom: var(--size-0);
|
||
}
|
||
main {
|
||
width: 100%;
|
||
max-width: var(--measure);
|
||
}
|
||
body {
|
||
display: flex;
|
||
justify-content: center;
|
||
max-width: none;
|
||
}
|
||
}
|
||
|
||
/* Use the browser's default font rendering instead of using our fancy
|
||
* font-family above. This resolves a problem where some emoji were being
|
||
* rendered in the system-ui font, which is rarely what we want.
|
||
*/
|
||
.emoji {
|
||
font-family: initial;
|
||
}
|
||
|
||
/* This indent is used on the summaries page to create an indent of 1. It might
|
||
* be wise to nest these recursively on the thread view, which would make it so
|
||
* that we don't need any inline CSS anymore.
|
||
*/
|
||
.indent {
|
||
padding-left: 1rem;
|
||
border-left: var(--size--2) solid var(--bg-selection);
|
||
}
|
||
|
||
.mentions-image {
|
||
grid-row: 1 / span 2;
|
||
}
|
||
.mentions-image > img {
|
||
border: var(--fg) solid 1px;
|
||
}
|
||
.mentions-container .emoji {
|
||
font-size: 1.5rem;
|
||
}
|
||
|
||
.mentions-name {
|
||
font-size: 1.25rem;
|
||
text-decoration: unset;
|
||
}
|
||
|
||
.mentions-name:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.emo-rel {
|
||
display: inline-grid;
|
||
align-items: center;
|
||
grid-template-columns: 2rem auto;
|
||
grid-column-gap: 0.25rem;
|
||
}
|
||
|
||
.mentions-listing {
|
||
display: inline;
|
||
background-color: var(--bg);
|
||
padding: var(--size--1);
|
||
border-radius: var(--common-radius);
|
||
border: var(--size--4) solid var(--bg-status);
|
||
user-select: all;
|
||
font-size: var(--size--1);
|
||
overflow-x: auto;
|
||
width: 24rem;
|
||
}
|
||
|
||
section.post-preview {
|
||
padding-top: 0;
|
||
background: var(--bg-selection);
|
||
border: var(--fg-alt) solid 1px;
|
||
}
|
||
|
||
section.post-preview > section > footer {
|
||
display: none;
|
||
}
|
||
|
||
section.post.blocked {
|
||
font-style: italic;
|
||
}
|
||
|
||
section > footer > div > a:hover,
|
||
section > footer > div > form > button:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.author-action {
|
||
flex-grow: 1;
|
||
}
|
||
|
||
section header .author > a:first-child {
|
||
margin-left: 0;
|
||
color: var(--fg-light);
|
||
font-weight: bold;
|
||
}
|
||
|
||
.theme-preview {
|
||
width: calc(100% / 15);
|
||
height: var(--size-0);
|
||
margin-top: var(--size-0);
|
||
display: inline-block;
|
||
}
|
||
|
||
.theme-preview-00 {
|
||
background-color: var(--base00);
|
||
}
|
||
.theme-preview-01 {
|
||
background-color: var(--base01);
|
||
}
|
||
.theme-preview-02 {
|
||
background-color: var(--base02);
|
||
}
|
||
.theme-preview-03 {
|
||
background-color: var(--base03);
|
||
}
|
||
.theme-preview-04 {
|
||
background-color: var(--base04);
|
||
}
|
||
.theme-preview-05 {
|
||
background-color: var(--base05);
|
||
}
|
||
.theme-preview-06 {
|
||
background-color: var(--base06);
|
||
}
|
||
.theme-preview-07 {
|
||
background-color: var(--base07);
|
||
}
|
||
.theme-preview-08 {
|
||
background-color: var(--base08);
|
||
}
|
||
.theme-preview-09 {
|
||
background-color: var(--base09);
|
||
}
|
||
.theme-preview-0A {
|
||
background-color: var(--base0A);
|
||
}
|
||
.theme-preview-0B {
|
||
background-color: var(--base0B);
|
||
}
|
||
.theme-preview-0C {
|
||
background-color: var(--base0C);
|
||
}
|
||
.theme-preview-0D {
|
||
background-color: var(--base0D);
|
||
}
|
||
.theme-preview-0E {
|
||
background-color: var(--base0E);
|
||
}
|
||
.theme-preview-0F {
|
||
background-color: var(--base0F);
|
||
}
|