2025-03-27 16:03:55 +01:00
|
|
|
:root {
|
2025-03-29 01:42:48 +01:00
|
|
|
--sans-font: "Ubuntu Nerd Font", Arial, Helvetica, sans-serif;
|
2025-03-27 16:03:55 +01:00
|
|
|
--mono-font: "UbuntuMono Nerd Font", monospace;
|
|
|
|
|
--standard-border-radius: .8rem;
|
|
|
|
|
|
|
|
|
|
/* Light theme */
|
2025-03-29 01:42:48 +01:00
|
|
|
--bg: #FBFBFF;
|
|
|
|
|
--text: #093D8D;
|
|
|
|
|
--text-light: #2F2997;
|
|
|
|
|
--link-text: #6872E5;
|
|
|
|
|
--link-text-hover: #32325D;
|
|
|
|
|
--border: #B2AFE9;
|
|
|
|
|
--border-light: #98D7F6;
|
|
|
|
|
--code: #0284C7;
|
|
|
|
|
--code-background: #F4F8FF;
|
|
|
|
|
--preformatted: #012a4a;
|
|
|
|
|
--accent: #008BDF;
|
|
|
|
|
--accent-bg: #F5F5FC;
|
|
|
|
|
--accent-hover: #E0E0E0;
|
|
|
|
|
--accent-text: var(--bg);
|
|
|
|
|
--accent-disabled: #2F5977;
|
|
|
|
|
--table-border: #ECEBFA;
|
|
|
|
|
--table-alternate: #F5F6FC;
|
2025-03-27 16:03:55 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Dark theme */
|
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
|
|
|
:root {
|
|
|
|
|
color-scheme: dark;
|
|
|
|
|
--bg: #1E293B;
|
|
|
|
|
--text: #d0d4fc;
|
|
|
|
|
--text-light: #A9AED2;
|
|
|
|
|
--link-text: #83C3F3;
|
|
|
|
|
--link-text-hover: #DBEAFE;
|
2025-03-29 01:42:48 +01:00
|
|
|
--border: var(--text);
|
2025-03-27 16:03:55 +01:00
|
|
|
--border-light: #475569;
|
|
|
|
|
--code: #A5B4FC;
|
2025-03-29 01:42:48 +01:00
|
|
|
--code-background: #0F172A;
|
2025-03-27 16:03:55 +01:00
|
|
|
--preformatted: #0F172A;
|
|
|
|
|
--accent: #60A5FA;
|
|
|
|
|
--accent-bg: #293548;
|
|
|
|
|
--accent-hover: #5FA5FA7f;
|
|
|
|
|
--accent-text: var(--bg);
|
|
|
|
|
--accent-disabled: #476f95;
|
2025-03-28 00:43:39 +01:00
|
|
|
--table-border: #263449;
|
2025-03-27 16:03:55 +01:00
|
|
|
--table-alternate: #222F42;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Add a bit of transparency so light media isn't so glaring in dark mode */
|
|
|
|
|
img,
|
|
|
|
|
video {
|
|
|
|
|
opacity: 0.8;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
*, *::before, *::after {
|
|
|
|
|
box-sizing: border-box;
|
2025-03-27 16:03:55 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
textarea,
|
|
|
|
|
select,
|
|
|
|
|
input,
|
|
|
|
|
progress {
|
|
|
|
|
appearance: none;
|
|
|
|
|
-webkit-appearance: none;
|
|
|
|
|
-moz-appearance: none;
|
2025-03-27 16:03:55 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
html {
|
|
|
|
|
font-family: var(--sans-font);
|
|
|
|
|
scroll-behavior: smooth;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
body {
|
|
|
|
|
color: var(--text);
|
|
|
|
|
background-color: var(--bg);
|
|
|
|
|
font-size: 1rem;
|
|
|
|
|
line-height: 1.5;
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-columns: 1fr min(50rem, 90%) 1fr;
|
|
|
|
|
margin: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
body > * {
|
|
|
|
|
grid-column: 2;
|
2025-03-27 16:03:55 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.button[aria-disabled="true"],
|
|
|
|
|
input:disabled,
|
|
|
|
|
textarea:disabled,
|
|
|
|
|
select:disabled,
|
|
|
|
|
button[disabled] {
|
|
|
|
|
cursor: not-allowed;
|
|
|
|
|
background-color: var(--accent-disabled);
|
|
|
|
|
border-color: var(--accent-disabled);
|
|
|
|
|
color: var(--text-light);
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
h1.title,
|
2025-03-27 16:03:55 +01:00
|
|
|
header > h1 {
|
|
|
|
|
color: var(--accent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h1 {
|
|
|
|
|
font-size: 3rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h2 {
|
|
|
|
|
font-size: 2.6rem;
|
|
|
|
|
margin-top: 3rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h3 {
|
|
|
|
|
font-size: 2rem;
|
|
|
|
|
margin-top: 3rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h4 {
|
|
|
|
|
font-size: 1.44rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h5 {
|
|
|
|
|
font-size: 1.15rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h6 {
|
|
|
|
|
font-size: 0.96rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
p {
|
|
|
|
|
margin: 1.5rem 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p, h1, h2, h3, h4, h5, h6 {
|
|
|
|
|
overflow-wrap: break-word;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h1,
|
|
|
|
|
h2,
|
|
|
|
|
h3 {
|
|
|
|
|
line-height: 1.1;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-27 16:03:55 +01:00
|
|
|
@media only screen and (max-width: 720px) {
|
|
|
|
|
h1 {
|
|
|
|
|
font-size: 2.5rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h2 {
|
|
|
|
|
font-size: 2.1rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h3 {
|
|
|
|
|
font-size: 1.75rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h4 {
|
|
|
|
|
font-size: 1.25rem;
|
|
|
|
|
font-weight: lighter;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
a,
|
|
|
|
|
a:visited {
|
|
|
|
|
color: var(--link-text);
|
|
|
|
|
text-decoration: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
a:hover {
|
|
|
|
|
color: var(--link-text-hover);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
abbr[title] {
|
|
|
|
|
cursor: help;
|
|
|
|
|
text-decoration-line: underline;
|
|
|
|
|
text-decoration-style: dotted;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
aside, details, pre, progress {
|
|
|
|
|
background-color: var(--accent-bg);
|
|
|
|
|
border: 1px solid var(--border);
|
|
|
|
|
border-radius: var(--standard-border-radius);
|
|
|
|
|
margin-bottom: 1rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
article h2:first-child,
|
|
|
|
|
section h2:first-child,
|
|
|
|
|
article h3:first-child,
|
|
|
|
|
section h3:first-child {
|
|
|
|
|
margin-top: 1rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
section {
|
|
|
|
|
border-top: 1px solid var(--border);
|
|
|
|
|
border-bottom: 1px solid var(--border);
|
|
|
|
|
padding: 2rem 1rem;
|
|
|
|
|
margin: 3rem 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
section + section,
|
|
|
|
|
section:first-child {
|
|
|
|
|
border-top: 0;
|
|
|
|
|
padding-top: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
section + section {
|
|
|
|
|
margin-top: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
section:last-child {
|
|
|
|
|
border-bottom: 0;
|
|
|
|
|
padding-bottom: 0;
|
|
|
|
|
}
|
2025-03-27 16:03:55 +01:00
|
|
|
|
|
|
|
|
/* Tables */
|
2025-03-29 01:42:48 +01:00
|
|
|
|
|
|
|
|
table {
|
|
|
|
|
border-collapse: separate;
|
|
|
|
|
border-spacing: 0;
|
|
|
|
|
margin: 1.5rem 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
figure > table {
|
|
|
|
|
width: max-content;
|
|
|
|
|
margin: 0;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-27 16:03:55 +01:00
|
|
|
td,
|
|
|
|
|
th {
|
|
|
|
|
padding: 0.5rem;
|
2025-03-28 00:43:39 +01:00
|
|
|
padding: 1rem 1.5rem;
|
2025-03-27 16:03:55 +01:00
|
|
|
border-style: solid;
|
2025-03-29 01:42:48 +01:00
|
|
|
border-width: .1rem;
|
2025-03-27 16:03:55 +01:00
|
|
|
border-color: var(--table-border);
|
2025-03-29 01:42:48 +01:00
|
|
|
text-align: start;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
th {
|
|
|
|
|
background-color: var(--bg);
|
|
|
|
|
text-transform: uppercase;
|
|
|
|
|
font-weight: bold;
|
|
|
|
|
font-size: small;
|
|
|
|
|
border: none
|
2025-03-28 00:43:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tr:first-child > td:first-child {
|
|
|
|
|
border-top-left-radius: var(--standard-border-radius);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tr:first-child > td:last-child {
|
|
|
|
|
border-top-right-radius: var(--standard-border-radius);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tr:last-child > td:first-child {
|
|
|
|
|
border-bottom-left-radius: var(--standard-border-radius);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tr:last-child > td:last-child {
|
|
|
|
|
border-bottom-right-radius: var(--standard-border-radius);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tr > td:last-child {
|
|
|
|
|
border-right-width: .15rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tr:first-child > td {
|
|
|
|
|
border-top-width: .15rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tr > td:first-child {
|
|
|
|
|
border-left-width: .15rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
tr:last-child > td {
|
|
|
|
|
border-bottom-width: .15rem;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
tr:nth-child(even) td {
|
|
|
|
|
/* Set every other cell slightly darker. Improves readability. */
|
|
|
|
|
background-color: var(--table-alternate);
|
2025-03-27 16:03:55 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
table caption {
|
|
|
|
|
margin-bottom: 0.5rem;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ul > li::marker, ol > li::marker {
|
|
|
|
|
color: var(--accent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ul {
|
|
|
|
|
list-style-type: disc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
li:has(input) {
|
|
|
|
|
list-style-type: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Forms */
|
|
|
|
|
|
|
|
|
|
textarea,
|
|
|
|
|
select,
|
|
|
|
|
input,
|
|
|
|
|
button,
|
|
|
|
|
.button {
|
|
|
|
|
font-size: inherit;
|
|
|
|
|
font-family: inherit;
|
|
|
|
|
padding: 0.5rem;
|
|
|
|
|
margin-bottom: 0.5rem;
|
|
|
|
|
border-radius: var(--standard-border-radius);
|
|
|
|
|
box-shadow: none;
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
display: inline-block;
|
|
|
|
|
}
|
|
|
|
|
textarea,
|
|
|
|
|
select,
|
|
|
|
|
input {
|
|
|
|
|
color: var(--text);
|
2025-03-27 16:03:55 +01:00
|
|
|
background-color: var(--bg);
|
2025-03-29 01:42:48 +01:00
|
|
|
border: 1px solid var(--border);
|
|
|
|
|
}
|
|
|
|
|
label {
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
textarea:not([cols]) {
|
|
|
|
|
width: 100%;
|
2025-03-27 16:03:55 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
/* checkbox and radio button style */
|
|
|
|
|
input[type="checkbox"],
|
|
|
|
|
input[type="radio"] {
|
|
|
|
|
vertical-align: middle;
|
|
|
|
|
position: relative;
|
|
|
|
|
width: min-content;
|
2025-03-27 16:03:55 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
input[type="checkbox"] + label,
|
|
|
|
|
input[type="radio"] + label {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input[type="radio"] {
|
|
|
|
|
border-radius: 100%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input[type="checkbox"]:checked,
|
|
|
|
|
input[type="radio"]:checked {
|
|
|
|
|
background-color: var(--accent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
input[type="checkbox"]:checked::after {
|
|
|
|
|
/* Creates a rectangle with colored right and bottom borders which is rotated to look like a check mark */
|
|
|
|
|
content: " ";
|
|
|
|
|
width: 0.18em;
|
|
|
|
|
height: 0.32em;
|
|
|
|
|
border-radius: 0;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 0.05em;
|
|
|
|
|
left: 0.17em;
|
|
|
|
|
background-color: transparent;
|
|
|
|
|
border-right: solid var(--bg) 0.08em;
|
|
|
|
|
border-bottom: solid var(--bg) 0.08em;
|
|
|
|
|
font-size: 1.8em;
|
|
|
|
|
transform: rotate(45deg);
|
|
|
|
|
}
|
|
|
|
|
input[type="radio"]:checked::after {
|
|
|
|
|
/* creates a colored circle for the checked radio button */
|
|
|
|
|
content: " ";
|
|
|
|
|
width: 0.25em;
|
|
|
|
|
height: 0.25em;
|
|
|
|
|
border-radius: 100%;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 0.125em;
|
2025-03-28 00:43:39 +01:00
|
|
|
background-color: var(--bg);
|
2025-03-29 01:42:48 +01:00
|
|
|
left: 0.125em;
|
|
|
|
|
font-size: 32px;
|
2025-03-28 00:43:39 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-29 01:42:48 +01:00
|
|
|
img,
|
|
|
|
|
video {
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
height: auto;
|
|
|
|
|
border-radius: var(--standard-border-radius);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
figure {
|
|
|
|
|
margin: 0;
|
|
|
|
|
display: block;
|
|
|
|
|
overflow-x: auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
figure > img,
|
|
|
|
|
figure > picture > img {
|
|
|
|
|
display: block;
|
|
|
|
|
margin-inline: auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
blockquote {
|
|
|
|
|
margin-inline-start: 2rem;
|
|
|
|
|
margin-inline-end: 2rem;
|
|
|
|
|
margin-block: 2rem;
|
|
|
|
|
padding: 0.4rem 0.8rem;
|
|
|
|
|
color: var(--text-light);
|
|
|
|
|
background-color: var(--accent-bg);
|
|
|
|
|
border-inline-start: none;
|
|
|
|
|
border-color: var(--border);
|
|
|
|
|
border-radius: var(--standard-border-radius);
|
|
|
|
|
border-style: dashed;
|
|
|
|
|
border-width: .1rem;
|
|
|
|
|
font-style: italic;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cite {
|
|
|
|
|
font-size: 0.9rem;
|
|
|
|
|
color: var(--text-light);
|
|
|
|
|
font-style: normal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
code,
|
|
|
|
|
pre,
|
|
|
|
|
pre span,
|
|
|
|
|
kbd,
|
|
|
|
|
samp {
|
|
|
|
|
font-family: var(--mono-font);
|
|
|
|
|
color: var(--code);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
kbd {
|
|
|
|
|
color: var(--text);
|
|
|
|
|
background-color: var(--code-background);
|
|
|
|
|
border-color: var(--border);
|
|
|
|
|
border-style: solid;
|
|
|
|
|
border-width: .1rem;
|
2025-03-27 16:03:55 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pre {
|
|
|
|
|
color: var(--text);
|
|
|
|
|
padding: 1rem 1.4rem;
|
|
|
|
|
max-width: 100%;
|
|
|
|
|
overflow: auto;
|
|
|
|
|
background-color: var(--preformatted);
|
|
|
|
|
border: none
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* The line numbers already provide some kind of left/right padding */
|
|
|
|
|
pre[data-linenos] {
|
|
|
|
|
padding: 1rem 0;
|
|
|
|
|
}
|
|
|
|
|
pre table td {
|
|
|
|
|
padding: 0;
|
|
|
|
|
}
|
|
|
|
|
/* The line number cells */
|
|
|
|
|
pre table td:nth-of-type(1) {
|
|
|
|
|
text-align: center;
|
|
|
|
|
vertical-align: top;
|
|
|
|
|
user-select: none;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
samp,
|
|
|
|
|
code {
|
2025-03-29 01:42:48 +01:00
|
|
|
background-color: var(--code-background);
|
2025-03-27 16:03:55 +01:00
|
|
|
border-radius: .25rem;
|
2025-03-29 01:42:48 +01:00
|
|
|
border-style: dashed;
|
|
|
|
|
border-width: 0.05rem;
|
2025-03-27 16:03:55 +01:00
|
|
|
border-color: var(--border-light);
|
|
|
|
|
font-size: .85rem;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
line-height: 1rem;
|
|
|
|
|
padding: .25rem;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-28 00:43:39 +01:00
|
|
|
pre code {
|
2025-03-29 01:42:48 +01:00
|
|
|
border-style: none;
|
2025-03-27 16:03:55 +01:00
|
|
|
background-color: var(--preformatted);
|
2025-03-29 01:42:48 +01:00
|
|
|
}
|