:root {
  --body-bg-color: #ffffff;
  --body-color: #212529;
  --body-font-family: var(--font-sans-serif);
  --body-font-weight: normal;
  --border-width: 1px;
  --caption-color: #777373;
  --code-bg-color: #f2f1f1;
  --font-sans-serif: "Source Sans 3", system-ui, sans-serif;
  --font-serif: "ETbb", serif;
  --heading-color: inherit;
  --heading-font-family: var(--font-serif);
  --heading-font-weight: normal;
  --highlight-bg-color: #fff3cd;
  --highlight-color: inherit;
  --highlight-space-h: 0.3em;
  --highlight-space-v: 0.1em;
  --layout-space-h: clamp(1rem, 5vw, 3rem);
  --layout-space-i: calc(var(--type-sm) * var(--type-scale));
  --layout-space-v: max(8vh, 3rem);
  --line-height: calc(2ex + (0.5rem * var(--type-scale)));
  --link-color: #0d6efd;
  --link-hover-color: #0a58ca;
  --link-opacity: 100%;
  --max-width: 80ch;
  --pre-bg-color: #f9f8f8;
  --type-sm: clamp(0.889rem, 0.081vi + 0.873rem, 0.938rem);
  --type-base: clamp(1rem, 0.208vi + 0.958rem, 1.125rem);
  --type-md: clamp(1.125rem, 0.375vi + 1.05rem, 1.35rem);
  --type-lg: clamp(1.266rem, 0.591vi + 1.147rem, 1.62rem);
  --type-xl: clamp(1.424rem, 0.867vi + 1.25rem, 1.944rem);
  --type-scale: 1;
}

@media (prefers-color-scheme: dark) {
  :root {
    --body-bg-color: #181a1b;
    --body-color: #d1cdc7;
    --caption-color: #9e9689;
    --code-bg-color: #202224;
    --heading-color: inherit;
    --highlight-bg-color: #3d2e00;
    --highlight-color: inherit;
    --link-color: #6ea8fe;
    --link-hover-color: #8bb9fe;
    --pre-bg-color: #1c1e1f;
  }
}

*,
::before,
::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  background-color: var(--body-bg-color);
  color: var(--body-color);
  font-family: var(--body-font-family);
  font-size: calc(var(--type-base) * var(--type-scale));
  font-weight: var(--body-font-weight);
  line-height: var(--line-height);
  min-height: 100vh;
}

main {
  padding: 0 var(--layout-space-h);

  & > * {
    margin: 0 auto;
    width: min(var(--max-width), 100%);
  }
}

article {
  padding: var(--layout-space-v) 0;
}

section {
  margin: calc(var(--layout-space-i) * 2) 0;
}

h1,
h2,
h3,
p.subtitle {
  color: var(--heading-color);
  font-family: var(--heading-font-family);
  font-weight: var(--heading-font-weight);
  line-height: var(--line-height);
  margin: var(--layout-space-i) 0;
}

h1 {
  font-size: calc(var(--type-xl) * var(--type-scale));
}

h2 {
  font-size: calc(var(--type-lg) * var(--type-scale));
  font-style: italic;
}

h3,
p.subtitle {
  font-size: calc(var(--type-md) * var(--type-scale));
  font-style: italic;
}

hr {
  border: 0;
  border-top: var(--border-width) solid;
  opacity: 50%;
}

p {
  margin: var(--layout-space-i) 0;
}

a {
  color: color-mix(in srgb, var(--link-color) var(--link-opacity, 100%), transparent);
  text-decoration: underline;

  &:hover {
    --link-color: var(--link-hover-color);
  }

  &:not([href]):not([class]),
  &:not([href]):not([class]):hover {
    color: inherit;
    text-decoration: none;
  }
}

code {
  background-color: var(--code-bg-color);
  font-size: calc(var(--type-sm) * var(--type-scale));
  line-height: var(--line-height);
  padding: var(--highlight-space-v) var(--highlight-space-h);
}

figcaption {
  color: var(--caption-color);
  font-size: calc(var(--type-sm) * var(--type-scale));
  line-height: var(--line-height);
}

mark {
  background-color: var(--highlight-bg-color);
  color: var(--highlight-color);
  padding: var(--highlight-space-v) var(--highlight-space-h);
}

ol,
ul {
  margin: var(--layout-space-i) 0;
  padding-left: calc(var(--layout-space-i) * 2);
}

:is(ol, ul) :is(ol, ul) {
  margin: 0;
}

pre {
  background-color: var(--pre-bg-color);
  box-decoration-break: clone;
  break-inside: avoid;
  margin: var(--layout-space-i) 0;
  margin-inline: calc(var(--layout-space-i) * -1);
  overflow-x: auto;
  padding: calc(var(--layout-space-i) / 2) var(--layout-space-i);
  white-space: break-spaces;

  & > code {
    background-color: inherit;
    display: block;
    padding: 0;
  }
}

.flex-row {
  align-items: center;
  column-gap: var(--layout-space-i);
  display: flex;
  flex-direction: row;
  margin: var(--layout-space-i) 0;

  & > * {
    margin: 0;
  }
}