: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 > 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);
}
