:root {
--body-max-width: 900px;
--text-color: #121212;
--top-bar-bg: #222;
--top-bar-fg: #eee;
--top-bar-logo-hover: hsl(258, 73%, 70%);
--header-link-color: #17b9b0;
--header-link-hover: #222;
--link-color: hsl(258, 73%, 58%);
--h1-color: hsl(258, 73%, 70%);
--repl-prompt: #0ff4f4;
--body-bg: #fff;
--code-bg: #e7e7e7;
--snippet-bg: #fcfcfc;
--snippet-border: #bbb;
--code-color: #303030;
--toc-background: #f3f3f3;
--toc-border: #ddd;
--toc-search-bg: #fcfcfc;
--toc-search-border: #bbb;
}
html {
font-family: 'Lato', sans-serif;
line-height: 1.5rem;
background: var(--body-bg);
color: var(--text-color);
}
html, body {
margin: 0;
padding: 0;
}
footer {
max-width: 1024px;
margin: 0 auto;
font-size: 14px;
padding: 16px;
}
section p:last-child {
margin-bottom: 0;
}
p, aside, li, footer {
font-size: 1.2rem;
line-height: 1.85rem;
}
aside {
margin-left: 4rem;
}
a {
text-decoration: none;
color: var(--link-color);
}
a:hover {
text-decoration: underline;
}
li {
margin-bottom: 0.5rem;
}
#top-bar {
background-color: var(--top-bar-bg);
width: 100%;
height: 50px;
}
#top-bar nav {
min-width: var(--body-max-width);
max-width: 1024px;
margin: 0 auto;
display: flex;
justify-content: space-between;
}
#top-bar .home-link {
display: flex;
color: var(--top-bar-fg);
font-size: 1.8rem;
padding: 10px;
}
#top-bar-links {
display: flex;
}
#top-bar-links a {
color: var(--top-bar-fg);
font-size: 1.1rem;
display: block;
height: 100%;
padding: 12px 16px;
margin: 0 2px;
}
@media only screen and (min-device-width: 900px) {
main {
width: var(--body-max-width);
margin: 36px auto;
}
}
code {
margin: 0 0.2rem;
white-space: nowrap;
background: var(--code-bg);
padding: 0.1rem 0.5rem;
border-radius: 4px;
}
code, samp {
font-family: 'Source Code Pro', monospace;
color: var(--code-color);
}
code.snippet, samp {
display: block;
overflow: auto;
white-space: pre;
padding: 10px 16px;
background-color: var(--snippet-bg);
margin-bottom: 16px;
font-size: 1.2rem;
line-height: 1.76rem;
border: 1px solid var(--snippet-border);
}
.repl-prompt:before {
/* Add this using CSS so it isn't selectable, which would be annoying when trying to copy/paste! */
color: var(--repl-prompt);
content: "ยป ";
}
.repl-err {
color: #ff5f5f;
}
samp .ann {
/* type annotation - purple in the repl */
color: #f384fd;
}
samp .autovar {
/* automatic variable names in the repl, e.g. # val1 */
color: #3dbd0f;
}
samp .kw, samp .op {
/* language keywords, e.g. `if`, or operators, e.g. `+` */
color: #3474db;
}
samp .paren, samp .brace, samp .comma {
/* square braces, parens, commas */
color: #3474db;
}
samp .str, samp .number {
/* string literals */
color: #158086;
}
samp .str-esc {
/* escapes inside string literals, e.g. \t */
color: #3474db;
}
samp .str-interp {
/* interpolated variables inside string literals */
color: var(--text-color);
}
samp .dim {
opacity: 0.55;
}
samp .comment {
color: green;
}
samp .comment .kw,
samp .comment .str,
samp .comment .number {
color: inherit;
}
/* Tables */
table {
border-collapse: collapse;
overflow-x: auto;
border: 2px solid #f0f0f0;
}
thead {
border: none;
}
tbody {
border: none;
}
tr {
border: none;
border-top: 2px solid #f0f0f0;
}
th,
td {
border: none;
border-right: 2px solid #f0f0f0;
padding: 12px;
}
th:last-child,
td:last-child {
border-right: none;
}
#integer-types {
width: 100%;
}
#integer-types th:first-of-type, #integer-types td:first-of-type {
text-align: right;
}
#integer-types td:first-of-type code {
background-color: inherit;
}
#integer-types th:last-of-type, #integer-types td:last-of-type {
text-align: left;
}
@media (prefers-color-scheme: dark) {
table, tr, th, td {
border-color: #3b3f47;
}
}
/* Tutorial Specific */
#tutorial-start {
display: flex;
flex-direction: row-reverse;
}
#tutorial-intro {
flex: 1;
}
#tutorial-toc {
margin-top: 18px;
background: var(--toc-background);
border: 1px solid var(--toc-border);
padding: 12px 24px;
margin-left: 64px;
}
#tutorial-toc code {
background: none;
color: inherit;
margin: 0;
padding: 0;
}
#tutorial-toc ol {
padding: 3px;
margin: 8px 0;
list-style: none;
padding-bottom: 0;
margin-bottom: 0;
}
#tutorial-toc h2 {
color: #686868;
font-family: inherit;
font-size: 2em;
text-shadow: none;
margin: 0;
padding: 16px 0;
}
#toc-search {
background-color: var(--toc-search-bg);
border: 1px solid var(--toc-search-border);
color: inherit;
padding: 6px 8px;
margin-top: 16px;
margin-bottom: 4px;
box-sizing: border-box;
width: 100%;
font-size: inherit;
}
/* Used on on the different-names page. */
th, td {
text-align: left;
padding-right: 24px;
}
#different-names-body a, #different-names-body li {
font-family: monospace;
font-size: 16px;
}
#different-names-body li {
display: inline;
}
#different-names-body li:not(:last-of-type)::after {
/* This is injected via CSS for accessibility, so to a screen reader it's a normal
*/
content: ",";
}
#different-names-body ul {
padding: 0;
list-style-type: none;
}
h1, h2, h3, h4, h5 {
font-family: 'Permanent Marker';
line-height: 1rem;
margin-top: 1.75rem;
margin-bottom: 0;
}
h1 a, h2 a, h3 a, h4 a, h5 a {
color: var(--header-link-color);
}
h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover {
text-decoration: none;
color: var(--header-link-hover);
}
h1 code, h2 code, h3 code, h4 code, h5 code {
color: inherit;
background-color: inherit;
padding: 0;
margin: 0;
}
h1 {
font-size: 7rem;
line-height: 7rem;
color: var(--h1-color);
margin-top: 0;
margin-bottom: 1.75rem;
text-shadow: 2px 2px 2px #010101;
}
h2 {
font-size: 4rem;
line-height: 4rem;
text-shadow: 2px 2px 2px #010101;
}
h3 {
font-size: 3rem;
line-height: 3rem;
text-shadow: 2px 2px 1px #010101;
}
h4 {
font-size: 2rem;
text-shadow: 1px 1px 1px #010101;
}
@font-face {
font-family: 'Permanent Marker';
font-style: normal;
font-weight: 400;
src: url('/fonts/permanent-marker-v16-latin/permanent-marker-v16-latin-regular.woff2') format('woff2'),
url('/fonts/permanent-marker-v16-latin/permanent-marker-v16-latin-regular.woff') format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Merriweather';
font-style: normal;
font-weight: 400;
src: url('/fonts/merriweather-v30-latin-ext_latin/merriweather-v30-latin-ext_latin-regular.woff2') format('woff2'),
url('/fonts/merriweather-v30-latin-ext_latin/merriweather-v30-latin-ext_latin-regular.woff') format('woff');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Merriweather';
font-style: normal;
font-weight: 400;
src: url('/fonts/merriweather-v30-latin/merriweather-v30-latin-regular.woff2') format('woff2'),
url('/fonts/merriweather-v30-latin/merriweather-v30-latin-regular.woff') format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Merriweather Sans';
font-style: normal;
font-weight: 400;
src: url('/fonts/merriweather-sans-v22-latin-ext_latin/merriweather-sans-v22-latin-ext_latin-regular.woff2') format('woff2'),
url('/fonts/merriweather-sans-v22-latin-ext_latin/merriweather-sans-v22-latin-ext_latin-regular.woff') format('woff');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Merriweather Sans';
font-style: normal;
font-weight: 400;
src: url('/fonts/merriweather-sans-v22-latin/merriweather-sans-v22-latin-regular.woff2') format('woff2'),
url('/fonts/merriweather-sans-v22-latin/merriweather-sans-v22-latin-regular.woff') format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 400;
src: url('/fonts/lato-v23-latin-ext_latin/lato-v23-latin-ext_latin-regular.woff2') format('woff2'),
url('/fonts/lato-v23-latin-ext_latin/lato-v23-latin-ext_latin-regular.woff') format('woff');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Lato';
font-style: normal;
font-weight: 400;
src: url('/fonts/lato-v23-latin/lato-v23-latin-regular.woff2') format('woff2'),
url('/fonts/lato-v23-latin/lato-v23-latin-regular.woff') format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* latin-ext */
@font-face {
font-family: 'Source Code Pro';
font-style: normal;
font-weight: 400;
src: url('/fonts/source-code-pro-v22-latin-ext_latin/source-code-pro-v22-latin-ext_latin-regular.woff2') format('woff2'),
url('/fonts/source-code-pro-v22-latin-ext_latin/source-code-pro-v22-latin-ext_latin-regular.woff') format('woff');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Source Code Pro';
font-style: normal;
font-weight: 400;
src: url('/fonts/source-code-pro-v22-latin/source-code-pro-v22-latin-regular.woff2') format('woff2'),
url('/fonts/source-code-pro-v22-latin/source-code-pro-v22-latin-regular.woff') format('woff');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@media (prefers-color-scheme: dark) {
:root {
--text-color: #cdcdcd;
--top-bar-bg: #2a2a2a;
--header-link-color: hsl(258, 73%, 70%);
--header-link-hover: #ddd;
--h1-color: #1bc6bd;
--link-color: #1bc6bd;
--repl-prompt: #0ff4f4;
--body-bg: #0e0e0f;
--code-bg: #303030;
--snippet-bg: #1a1a1a;
--snippet-border: #444;
--code-color: #cdcdcd;
--toc-background: var(--snippet-bg);
--toc-border: var(--snippet-border);
--toc-search-bg: #333;
--toc-search-border: #555;
}
h1, h2, h3, h4, h5 {
text-shadow: none;
}
html {
scrollbar-color: #444444 #2f2f2f;
}
samp .paren, samp .brace, samp .comma {
/* square braces, parens, commas */
color: #67a0fb;
}
samp .kw, samp .op {
/* language keywords, e.g. `if`, or operators, e.g. `+` */
color: #67a0fb;
}
samp .str {
/* string literals */
color: #26b2b9;
}
}