latex-css/style.css
Daniele Sluijters 5ab03c6779
Support for dark mode (#48)
* Turn all colors into variables

This turns each color into a $elem(-$pseudo)-$attribute named variable
on the :root element and replaces their usage by calling the var()
function instead.

* Add dark mode colors

This overrides the colors when prefers-color-scheme is set to dark,
indicating the user has configured their OS or user-agent to prefer
a light text on dark background instead. It includes a way to manually
toggle dark mode by using a data attribute on the html element.

The syntax highlight colors are also updated to support dark mode.

* feat: improve dark mode implementation and docs

- Dark mode based on classes, with three options
  - light mode (default, no changes needed)
  - auto dark mode (based on prefers-color-scheme; latex-dark-auto class on body)
  - dark mode (latex-dark class on body)
- Removed the mention of dark mode from the lead and moved it to the getting started section
- Moved the dark mode section up, since it is a pretty important feature imo.
- Added a dark mode toggle button for demo
- Added a CSS filter to the proof symbol so that it shows up as dark grey instead of white
- Built the project to generate the minified css file

Co-authored-by: Vincent Dörig <dvincdt@gmail.com>
2022-10-10 14:52:53 +02:00

621 lines
12 KiB
CSS
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* LaTeX.css (https://latex.now.sh/)
*
* Source: https://github.com/vincentdoerig/latex-css
* Licensed under MIT (https://github.com/vincentdoerig/latex-css/blob/master/LICENSE)
*/
@font-face {
font-family: 'Latin Modern';
font-style: normal;
font-weight: normal;
font-display: swap;
src: url('./fonts/LM-regular.woff2') format('woff2'),
url('./fonts/LM-regular.woff') format('woff'),
url('./fonts/LM-regular.ttf') format('truetype');
}
@font-face {
font-family: 'Latin Modern';
font-style: italic;
font-weight: normal;
font-display: swap;
src: url('./fonts/LM-italic.woff2') format('woff2'),
url('./fonts/LM-italic.woff') format('woff'),
url('./fonts/LM-italic.ttf') format('truetype');
}
@font-face {
font-family: 'Latin Modern';
font-style: normal;
font-weight: bold;
font-display: swap;
src: url('./fonts/LM-bold.woff2') format('woff2'),
url('./fonts/LM-bold.woff') format('woff'),
url('./fonts/LM-bold.ttf') format('truetype');
}
@font-face {
font-family: 'Latin Modern';
font-style: italic;
font-weight: bold;
font-display: swap;
src: url('./fonts/LM-bold-italic.woff2') format('woff2'),
url('./fonts/LM-bold-italic.woff') format('woff'),
url('./fonts/LM-bold-italic.ttf') format('truetype');
}
@font-face {
font-family: 'Libertinus';
font-style: normal;
font-weight: normal;
font-display: swap;
src: url('./fonts/Libertinus-regular.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: italic;
font-weight: normal;
font-display: swap;
src: url('./fonts/Libertinus-italic.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: normal;
font-weight: bold;
font-display: swap;
src: url('./fonts/Libertinus-bold.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: italic;
font-weight: bold;
font-display: swap;
src: url('./fonts/Libertinus-bold-italic.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url('./fonts/Libertinus-semibold.woff2') format('woff2');
}
@font-face {
font-family: 'Libertinus';
font-style: italic;
font-weight: 600;
font-display: swap;
src: url('./fonts/Libertinus-semibold-italic.woff2') format('woff2');
}
/* Box sizing rules */
*,
*::before,
*::after {
box-sizing: border-box;
}
:root {
--body-color: hsl(0, 5%, 10%);
--body-bg-color: hsl(210, 20%, 98%);
--link-visited: hsl(0, 100%, 33%);
--link-focus-outline: hsl(220, 90%, 52%);
--pre-bg-color: hsl(210, 28%, 93%);
--kbd-bg-color: hsl(210, 5%, 100%);
--kbd-border-color: hsl(210, 5%, 70%);
--table-border-color: black;
--sidenote-target-border-color: hsl(55, 55%, 70%);
--footnotes-border-color: hsl(0, 0%, 39%);
}
.latex-dark {
--body-color: hsl(0, 0%, 86%);
--body-bg-color: hsl(0, 0%, 16%);
--link-visited: hsl(196 80% 77%);
--link-focus-outline: hsl(215, 63%, 73%);
--pre-bg-color: hsl(0, 1%, 25%);
--kbd-bg-color: hsl(0, 0%, 16%);
--kbd-border-color: hsl(210, 5%, 70%);
--table-border-color: white;
--sidenote-target-border-color: hsl(0, 0%, 59%);
--footnotes-border-color: hsl(0, 0%, 59%);
--proof-symbol-filter: invert(80%);
}
@media (prefers-color-scheme: dark) {
.latex-dark-auto {
--body-color: hsl(0, 0%, 86%);
--body-bg-color: hsl(0, 0%, 16%);
--link-visited: hsl(196 80% 77%);
--link-focus-outline: hsl(215, 63%, 73%);
--pre-bg-color: hsl(0, 1%, 25%);
--kbd-bg-color: hsl(0, 0%, 16%);
--kbd-border-color: hsl(210, 5%, 70%);
--table-border-color: white;
--sidenote-target-border-color: hsl(0, 0%, 59%);
--footnotes-border-color: hsl(0, 0%, 59%);
--proof-symbol-filter: invert(80%);
}
}
/* Remove default margin */
body,
h1,
h2,
h3,
h4,
p,
ul[class],
ol[class],
li,
figure,
figcaption,
dl,
dd {
margin: 0;
}
/* Make default font-size 1rem and add smooth scrolling to anchors */
html {
font-size: 1rem;
}
@media (prefers-reduced-motion: no-preference) {
html {
scroll-behavior: smooth;
}
}
body.libertinus {
font-family: 'Libertinus', Georgia, Cambria, 'Times New Roman', Times, serif;
}
body {
font-family: 'Latin Modern', Georgia, Cambria, 'Times New Roman', Times, serif;
line-height: 1.8;
max-width: 80ch;
min-height: 100vh;
overflow-x: hidden;
margin: 0 auto;
padding: 2rem 1.25rem;
counter-reset: theorem definition sidenote-counter;
color: var(--body-color);
background-color: var(--body-bg-color);
text-rendering: optimizeLegibility;
}
/* Justify and hyphenate all paragraphs */
p {
text-align: justify;
hyphens: auto;
-webkit-hyphens: auto;
-moz-hyphens: auto;
margin-top: 1rem;
}
/* A elements that don't have a class get default styles */
a:not([class]) {
text-decoration-skip-ink: auto;
}
/* Make links red */
a,
a:visited {
color: var(--link-visited);
}
a:focus {
outline-offset: 2px;
outline: 2px solid var(--link-focus-outline);
}
/* Make images easier to work with */
img {
max-width: 100%;
height: auto;
display: block;
}
/* Inherit fonts for inputs and buttons */
input,
button,
textarea,
select {
font: inherit;
}
/* Prevent textarea from overflowing */
textarea {
width: 100%;
}
/* Natural flow and rhythm in articles by default */
article > * + * {
margin-top: 1em;
}
/* Styles for inline code or code snippets */
code,
pre,
kbd {
font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',
monospace;
font-size: 85%;
}
pre {
padding: 1rem 1.4rem;
max-width: 100%;
overflow: auto;
border-radius: 4px;
background: var(--pre-bg-color);
}
pre code {
font-size: 95%;
position: relative;
}
kbd {
background: var(--kbd-bg-color);
border: 1px solid var(--kbd-border-color);
border-radius: 2px;
padding: 2px 4px;
font-size: 75%;
}
/* Better tables */
table {
border-collapse: collapse;
border-spacing: 0;
width: auto;
max-width: 100%;
border-top: 2.27px solid var(--table-border-color);
border-bottom: 2.27px solid var(--table-border-color);
/* display: block; */
overflow-x: auto; /* does not work because element is not block */
/* white-space: nowrap; */
counter-increment: caption;
}
/* add bottom border on column table headings */
table tr > th[scope='col'] {
border-bottom: 1.36px solid var(--table-border-color);
}
/* add right border on row table headings */
table tr > th[scope='row'] {
border-right: 1.36px solid var(--table-border-color);
}
table > tbody > tr:first-child > td,
table > tbody > tr:first-child > th {
border-top: 1.36px solid var(--table-border-color);
}
table > tbody > tr:last-child > td,
table > tbody > tr:last-child > th {
border-bottom: 1.36px solid var(--table-border-color);
}
th,
td {
text-align: left;
padding: 0.5rem;
line-height: 1.1;
}
/* Table caption */
caption {
text-align: left;
font-size: 0.923em;
/* border-bottom: 2pt solid #000; */
padding: 0 0.25em 0.25em;
width: 100%;
margin-left: 0;
}
caption::before {
content: 'Table ' counter(caption) '. ';
font-weight: bold;
}
/* allow scroll on the x-axis */
.scroll-wrapper {
overflow-x: auto;
}
/* if a table is wrapped in a scroll wrapper,
the table cells shouldn't wrap */
.scroll-wrapper > table td {
white-space: nowrap;
}
/* Center align the title */
h1:first-child {
text-align: center;
}
/* Nested ordered list for ToC */
nav ol {
counter-reset: item;
padding-left: 2rem;
}
nav li {
display: block;
}
nav li:before {
content: counters(item, '.') ' ';
counter-increment: item;
padding-right: 0.85rem;
}
/* Center definitions (most useful for display equations) */
dl dd {
text-align: center;
}
/* Theorem */
.theorem {
counter-increment: theorem;
display: block;
margin: 12px 0;
font-style: italic;
}
.theorem::before {
content: 'Theorem ' counter(theorem) '. ';
font-weight: bold;
font-style: normal;
}
/* Lemma */
.lemma {
counter-increment: theorem;
display: block;
margin: 12px 0;
font-style: italic;
}
.lemma::before {
content: 'Lemma ' counter(theorem) '. ';
font-weight: bold;
font-style: normal;
}
/* Proof */
.proof {
display: block;
margin: 12px 0;
font-style: normal;
position: relative;
}
.proof::before {
content: 'Proof.' attr(title);
font-style: italic;
}
.proof:after {
content: '◾️';
filter: var(--proof-symbol-filter);
position: absolute;
right: -12px;
bottom: -2px;
}
/* Definition */
.definition {
counter-increment: definition;
display: block;
margin: 12px 0;
font-style: normal;
}
.definition::before {
content: 'Definition ' counter(definition) '. ';
font-weight: bold;
font-style: normal;
}
/* Center align author name, use small caps and add vertical spacing */
.author {
margin: 0.85rem 0;
font-variant-caps: small-caps;
text-align: center;
}
/* Sidenotes */
.sidenote {
font-size: 0.8rem;
float: right;
clear: right;
width: 18vw;
margin-right: -20vw;
margin-bottom: 1em;
}
.sidenote.left {
float: left;
margin-left: -20vw;
margin-bottom: 1em;
}
/* (WIP) add border when a sidenote is clicked on */
.sidenote:target {
border: var(--sidenote-target-border-color) 1.5px solid;
padding: 0 .5rem;
scroll-margin-block-start: 10rem;
}
/* sidenote counter */
.sidenote-number {
counter-increment: sidenote-counter;
}
.sidenote-number::after,
.sidenote::before {
position: relative;
vertical-align: baseline;
}
/* add number in main content */
.sidenote-number::after {
content: counter(sidenote-counter);
font-size: 0.7rem;
top: -0.5rem;
left: 0.1rem;
}
/* add number in front of the sidenote */
.sidenote-number ~ .sidenote::before {
content: counter(sidenote-counter) ' ';
font-size: 0.7rem;
top: -0.5rem;
}
label.sidenote-toggle:not(.sidenote-number) {
display: none;
}
/* sidenotes inside blockquotes are indented more */
blockquote .sidenote {
margin-right: -24vw;
width: 18vw;
}
label.sidenote-toggle {
display: inline;
cursor: pointer;
}
input.sidenote-toggle {
display: none;
}
@media (max-width: 1050px) {
label.sidenote-toggle:not(.sidenote-number) {
display: inline;
}
.sidenote {
display: none;
}
.sidenote-toggle:checked + .sidenote {
display: block;
margin: 0.5rem 1.25rem 1rem 0.5rem;
float: left;
left: 1rem;
clear: both;
width: 95%;
}
/* tweak indentation of sidenote inside a blockquote */
blockquote .sidenote {
margin-right: -25vw;
width: 16vw;
}
}
/* Make footnote text smaller and left align it (looks bad with long URLs) */
.footnotes p {
text-align: left;
line-height: 1.5;
font-size: 85%;
margin-bottom: 0.4rem;
}
.footnotes {
border-top: 1px solid var(--footnotes-border-color);
}
/* Center title and paragraph */
.abstract,
.abstract p {
text-align: center;
margin-top: 0;
}
.abstract {
margin: 2.25rem 0;
}
.abstract > h2 {
font-size: 1rem;
margin-bottom: -0.2rem;
}
/* Format the LaTeX symbol correctly (a higher up, e lower) */
.latex span:nth-child(1) {
text-transform: uppercase;
font-size: 0.75em;
vertical-align: 0.28em;
margin-left: -0.48em;
margin-right: -0.15em;
line-height: 1ex;
}
.latex span:nth-child(2) {
text-transform: uppercase;
vertical-align: -0.5ex;
margin-left: -0.1667em;
margin-right: -0.125em;
line-height: 1ex;
}
/* Heading typography */
h1 {
font-size: 2.5rem;
line-height: 3.25rem;
margin-bottom: 1.625rem;
}
h2 {
font-size: 1.7rem;
line-height: 2rem;
margin-top: 3rem;
}
h3 {
font-size: 1.4rem;
margin-top: 2.5rem;
}
h4 {
font-size: 1.2rem;
margin-top: 2rem;
}
h5 {
font-size: 1rem;
margin-top: 1.8rem;
}
h6 {
font-size: 1rem;
font-style: italic;
font-weight: normal;
margin-top: 2.5rem;
}
h3,
h4,
h5,
h6 {
line-height: 1.625rem;
}
h1 + h2 {
margin-top: 1.625rem;
}
h2 + h3,
h3 + h4,
h4 + h5 {
margin-top: 0.8rem;
}
h5 + h6 {
margin-top: -0.8rem;
}
h2,
h3,
h4,
h5,
h6 {
margin-bottom: 0.8rem;
}