pandoc-markdown-jekyll-theme 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7c582131cf69183c2bd12609cee6a6df1da1f1f3e7e1c413d3115f255fc68cca
4
+ data.tar.gz: e07390e77fc52f40280b9507343cc582e0947f66e9e68762e6004de364bff2ac
5
+ SHA512:
6
+ metadata.gz: 2de43c133f185ab08c0a9e8f15d464ba4f52d764dc10163ed62a314ed342e9f80840b84697e73846eb0f4c1094942dd4c73cc08133b5f5a1e33ef2f306892541
7
+ data.tar.gz: 70440f97a07a2c7a5fde3a8da42b0c88962ff82b5651c829e5481553fa5339ea21f966783c9c4a26f5331ec312d2d397a7c065d301683a4f457e17af205c04f6
data/README.md ADDED
@@ -0,0 +1,125 @@
1
+ # pandoc-markdown-jekyll-theme
2
+
3
+ This is a Jekyll theme for blogging with Pandoc. It's based off of [Pandoc
4
+ Markdown CSS Theme] for the original CSS file. Read more about the theme there.
5
+
6
+ [Pandoc Markdown CSS Theme]: https://jez.io/pandoc-markdown-css-theme/
7
+
8
+ ## Installation
9
+
10
+ There are two external dependencies in order to use this theme:
11
+
12
+ - [Pandoc](https://pandoc.org/)
13
+ - [`pandoc-sidenote`](https://github.com/jez/pandoc-sidenote)
14
+
15
+ Follow the installation instructions for your platform. If you’re using macOS,
16
+ installation is as easy as:
17
+
18
+ ```bash
19
+ brew install pandoc
20
+ brew install jez/formulae/pandoc-sidenote
21
+ ```
22
+
23
+ Next, add this line to your Jekyll site's Gemfile:
24
+
25
+ ```ruby
26
+ # -- Gemfile --
27
+ # ...
28
+
29
+ gem "pandoc-markdown-jekyll-theme"
30
+ ```
31
+
32
+ And then run:
33
+
34
+ ```bash
35
+ # Install the Jekyll theme
36
+ bundle install
37
+ # Copy out one file that has to live in the site folder, not the theme
38
+ cp $(bundle info pandoc-markdown-jekyll-theme --path)/_template.html5 .
39
+ ```
40
+
41
+ And finally, update your `_config.yml` file:
42
+
43
+ ```yaml
44
+ # -- _config.yml --
45
+
46
+ theme: pandoc-markdown-jekyll-theme
47
+
48
+ gems:
49
+ - jekyll-pandoc
50
+
51
+ markdown: Pandoc
52
+
53
+ pandoc:
54
+ extensions:
55
+ - from: 'markdown+smart+tex_math_single_backslash'
56
+ - filter: 'pandoc-sidenote'
57
+ - template: '_template'
58
+ - katex
59
+ - toc
60
+ - M: 'site__baseurl=/'
61
+ ```
62
+
63
+ If your Jekyll site has a `baseurl:` setting in `_config.yml`, change the last
64
+ line above to `site__baseurl=$BASEURL/`, replacing `$BASEURL` with what the
65
+ setting of your `baseurl` property reads. (There is unfortunately no easy way to
66
+ get the Pandoc template file to read from the Jekyll config, so the value must
67
+ be duplicated.)
68
+
69
+ ## Usage
70
+
71
+ The following variables are used by this theme.
72
+
73
+ - `site.title`
74
+ - Only shows up as suffix in `<title>` element
75
+ - `page.title`
76
+ - `site.author`
77
+ - `page.author`
78
+ - `site.baseurl`
79
+ - Make sure you don't have a trailing slash here
80
+ - `site.header_includes`
81
+ - `page.header_includes`
82
+ - You can use these to include raw HTML in the `<head>`
83
+ - `site.include_after`
84
+ - `site.pandoc_markdown_skip_syntax_theme`
85
+ - Set to `true` to skip including the default syntax theme CSS file.
86
+ - `page.include_after`
87
+ - You can use these to include raw HTML in the `<body>` before the content
88
+ - `site.include_before`
89
+ - `page.include_before`
90
+ - You can use these to include raw HTML in the `<body>` after the content
91
+ - `page.layout`
92
+ - Pick one of `index`, `page`, or `post`
93
+ - `index` won't have a "Return home" link at the bottom of the page
94
+ - `page.subtitle`
95
+ - Shows up in the page.
96
+ - `page.description`
97
+ - Only shows up in the `<head>` section, as a `<meta>` tag.
98
+ - `page.date`
99
+ - `page.keywords`
100
+ - `page.math`
101
+ - If `true`, we'll include KaTeX for displaying math formulas. Will add
102
+ JavaScript on this page.
103
+ - `page.lang`
104
+ - Sets the HTML lang attribute. Default: `'en'`
105
+ - `page.dir`
106
+ - Sets the HTML dir attribute. Default: `'ltr'`
107
+
108
+ You can also define:
109
+
110
+ - `_includes/enable_checkboxes.html`
111
+
112
+ to be an empty file in your project to remove the only non-math JavaScript.
113
+
114
+ ## Developing
115
+
116
+ To make a release:
117
+
118
+ ```bash
119
+ vim pandoc-markdown-jekyll-theme.gemspec
120
+ git commit pandoc-markdown-jekyll-theme.gemspec -m 'Bump version'
121
+ git tag "$version"
122
+ git push --tags origin master
123
+ gem build pandoc-markdown-jekyll-theme.gemspec
124
+ gem push "pandoc-markdown-jekyll-theme-$version.gem"
125
+ ```
@@ -0,0 +1,11 @@
1
+ {% if site.include_after %}
2
+ {% for include_after in site.include_after %}
3
+ {{ include_after }}
4
+ {% endfor %}
5
+ {% endif %}
6
+
7
+ {% if page.include_after %}
8
+ {% for include_after in page.include_after %}
9
+ {{ include_after }}
10
+ {% endfor %}
11
+ {% endif %}
@@ -0,0 +1,12 @@
1
+ {% if site.include_before %}
2
+ {% for include_before in site.include_before %}
3
+ {{ include_before }}
4
+ {% endfor %}
5
+ {% endif %}
6
+
7
+ {% if page.include_before %}
8
+ {% for include_before in page.include_before %}
9
+ {{ include_before }}
10
+ {% endfor %}
11
+ {% endif %}
12
+
@@ -0,0 +1,21 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="{{ page.lang | default: 'en'}}" xml:lang="{{ page.lang | default: 'en'}}" dir="{{ page.dir | default: 'ltr'}}">
3
+ <head>
4
+ {% include head.html %}
5
+ </head>
6
+ <body>
7
+ {% include before.html %}
8
+ {% include header.html %}
9
+
10
+ {{ content }}
11
+
12
+ {% if page.layout != 'index' -%}
13
+ <footer>
14
+ <p class="signoff"><a href="{{ site.baseurl }}/">← Return home</a></p>
15
+ </footer>
16
+ {% endif -%}
17
+
18
+ {% include enable_checkboxes.html %}
19
+ {% include after.html %}
20
+ </body>
21
+ </html>
@@ -0,0 +1,12 @@
1
+ <script>
2
+ ;(function() {
3
+ // Non-essential if user has JavaScript off. Just makes checkboxes look nicer.
4
+ var selector = '.task-list > li > input[type="checkbox"]';
5
+ var checkboxes = document.querySelectorAll(selector);
6
+ Array.from(checkboxes).forEach((checkbox) => {
7
+ var wasChecked = checkbox.checked;
8
+ checkbox.disabled = false;
9
+ checkbox.addEventListener('click', (ev) => {ev.target.checked = wasChecked});
10
+ });
11
+ })();
12
+ </script>
@@ -0,0 +1,37 @@
1
+ <meta charset="utf-8" />
2
+ <meta name="generator" content="pandoc-markdown-css-theme" />
3
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
4
+ {% if page.author -%}
5
+ <meta name="author" content="{{ page.author }}">
6
+ {% elsif site.author -%}
7
+ <meta name="author" content="{{ site.author }}">
8
+ {% endif -%}
9
+ {% if page.date -%}
10
+ <meta name="dcterms.date" content="{{ page.date }}">
11
+ {% endif -%}
12
+ {% if page.keywords -%}
13
+ <meta name="keywords" content="{{ page.keywords | join: ' ' }}">
14
+ {% endif -%}
15
+ {% if page.description -%}
16
+ <meta name="description" content="{{ page.description }}">
17
+ {% endif -%}
18
+ <title>{{ page.title }}{% if site.title %} – {{ site.title }}{% endif %}</title>
19
+
20
+ <link rel="stylesheet" href="{{ site.baseurl }}/assets/css/theme.css">
21
+ {% unless site.pandoc_markdown_skip_syntax_theme -%}
22
+ <link rel="stylesheet" href="{{ site.baseurl }}/assets/css/skylighting-solarized-theme.css">
23
+ {% endif -%}
24
+
25
+ {% include math.html %}
26
+
27
+ {% if site.header_includes %}
28
+ {% for header_include in site.header_includes %}
29
+ {{ header_include }}
30
+ {% endfor %}
31
+ {% endif %}
32
+
33
+ {% if page.header_includes %}
34
+ {% for header_include in page.header_includes %}
35
+ {{ header_include }}
36
+ {% endfor %}
37
+ {% endif %}
@@ -0,0 +1,22 @@
1
+ {% if page.title -%}
2
+ <header>
3
+ <h1 class="title">{{ page.title }}</h1>
4
+ <blockquote class="metadata">
5
+ {% if page.subtitle -%}
6
+ <p class="subtitle">{{ page.subtitle }}</p>
7
+ {% endif -%}
8
+ {% if page.author -%}
9
+ <p class="author">
10
+ {% if page.author_url -%}
11
+ <a href="{{ page.author_url }}">{{ page.author }}</a>
12
+ {% else -%}
13
+ {{ page.author }}
14
+ {% endif -%}
15
+ </p>
16
+ {% endif -%}
17
+ {% if page.date -%}
18
+ <p class="date before-toc"><time datetime="{{ page.date }}">{{ page.date | date: "%B %-d, %Y" }}</time></p>
19
+ {% endif -%}
20
+ </blockquote>
21
+ </header>
22
+ {% endif -%}
@@ -0,0 +1,18 @@
1
+ {% if page.math %}
2
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.js"></script>
3
+ <script>document.addEventListener("DOMContentLoaded", function () {
4
+ var mathElements = document.getElementsByClassName("math");
5
+ var macros = [];
6
+ for (var i = 0; i < mathElements.length; i++) {
7
+ var texText = mathElements[i].firstChild;
8
+ if (mathElements[i].tagName == "SPAN") {
9
+ katex.render(texText.data, mathElements[i], {
10
+ displayMode: mathElements[i].classList.contains('display'),
11
+ throwOnError: false,
12
+ macros: macros,
13
+ fleqn: false
14
+ });
15
+ }}});
16
+ </script>
17
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.11.1/katex.min.css" />
18
+ {% endif %}
@@ -0,0 +1 @@
1
+ {% include default.html %}
@@ -0,0 +1 @@
1
+ {% include default.html %}
@@ -0,0 +1 @@
1
+ {% include default.html %}
data/_template.html5 ADDED
@@ -0,0 +1,14 @@
1
+ $-- Do not edit this file to allow updating. Update with:
2
+ $-- cp $(bundle info pandoc-markdown-jekyll-theme --path)/_template.html5 .
3
+ $if(toc)$
4
+ <nav id="TOC" role="doc-toc">
5
+ <a href="$site__baseurl$">Home</a><br>
6
+ <strong>Contents</strong><label for="contents">⊕</label>
7
+ <input type="checkbox" id="contents">
8
+ $table-of-contents$
9
+ </nav>
10
+ $endif$
11
+
12
+ <main>
13
+ $body$
14
+ </main>
@@ -0,0 +1,39 @@
1
+ pre, pre.numberSource {
2
+ background: #fdf6e3;
3
+ /* border: 1px solid #eee8d5; */
4
+ --color-code-highlight-bg: #eee8d5;
5
+ }
6
+ pre code { color: #657b83; }
7
+ pre.numberSource > code.sourceCode > span > a:first-child::before {
8
+ color: #93a1a1;
9
+ }
10
+ code span.kw { color: #859900; font-weight: normal; font-style: normal; } /* Keyword */
11
+ code span.dt { color: #b58900; font-weight: normal; font-style: normal; } /* DataType */
12
+ code span.dv { color: #2aa198; font-weight: normal; font-style: normal; } /* DecVal */
13
+ code span.bn { color: #2aa198; font-weight: normal; font-style: normal; } /* BaseN */
14
+ code span.fl { color: #2aa198; font-weight: normal; font-style: normal; } /* Float */
15
+ code span.ch { color: #2aa198; font-weight: normal; font-style: normal; } /* Char */
16
+ code span.st { color: #2aa198; font-weight: normal; font-style: normal; } /* String */
17
+ code span.co { color: #93a1a1; font-weight: normal; font-style: italic; } /* Comment */
18
+ code span.ot { color: #268bd2; font-weight: normal; font-style: normal; } /* Other */
19
+ code span.al { color: #dc322f; font-weight: normal; font-style: normal; } /* Alert */
20
+ code span.fu { color: #268bd2; font-weight: normal; font-style: normal; } /* Function */
21
+ code span.er { color: #dc322f; font-weight: normal; font-style: normal; } /* Error */
22
+ code span.wa { color: #cb4b16; font-weight: normal; font-style: italic; } /* Warning */
23
+ code span.cn { color: #2aa198; font-weight: normal; font-style: normal; } /* Constant */
24
+ code span.sc { color: #dc322f; font-weight: normal; font-style: normal; } /* SpecialChar */
25
+ code span.vs { color: #2aa198; font-weight: normal; font-style: normal; } /* VerbatimString */
26
+ code span.ss { color: #dc322f; font-weight: normal; font-style: normal; } /* SpecialString */
27
+ code span.im { color: #657b83; font-weight: normal; font-style: normal; } /* Import */
28
+ code span.va { color: #268bd2; font-weight: normal; font-style: normal; } /* Variable */
29
+ code span.cf { color: #859900; font-weight: normal; font-style: normal; } /* ControlFlow */
30
+ code span.op { color: #859900; font-weight: normal; font-style: normal; } /* Operator */
31
+ code span.bu { color: #657b83; font-weight: normal; font-style: normal; } /* BuiltIn */
32
+ code span.ex { color: #657b83; font-weight: normal; font-style: normal; } /* Extension */
33
+ code span.pp { color: #cb4b16; font-weight: normal; font-style: normal; } /* Preprocessor */
34
+ code span.at { color: #657b83; font-weight: normal; font-style: normal; } /* Attribute */
35
+ code span.do { color: #93a1a1; font-weight: normal; font-style: italic; } /* Documentation */
36
+ code span.an { color: #93a1a1; font-weight: normal; font-style: italic; } /* Annotation */
37
+ code span.cv { color: #93a1a1; font-weight: normal; font-style: italic; } /* CommentVar */
38
+ code span.in { color: #93a1a1; font-weight: normal; font-style: italic; } /* Information */
39
+ a.sourceLine::before { text-decoration: none; }
@@ -0,0 +1,1108 @@
1
+
2
+ /* ----- Global settings ----------------------------------------------- {{{ */
3
+
4
+ :root {
5
+ /* --- Colors --- */
6
+
7
+ --color-text: #1b2733;
8
+ --color-text-secondary: #637282;
9
+ --color-link: #0070e0;
10
+ --color-sidenote: #616970;
11
+
12
+ --highlight-red: #ea9999;
13
+ --highlight-yellow: #ffe599;
14
+ --highlight-green: #b6d7a8;
15
+ --highlight-blue: #a4c2f4;
16
+ --highlight-purple: #b4a7d6;
17
+
18
+ --color-inline-code: #1b2733;
19
+ --color-inline-code-bg: #f3f3f8;
20
+
21
+ --color-border: #dfdfd0;
22
+ --color-border-heavy: #ccccd4;
23
+
24
+ --color-table-heading: #f3f3fb;
25
+
26
+ /* --- Text --- */
27
+
28
+ --font-family-prose: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif;
29
+ --font-family-heading: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif;
30
+ --font-family-code: Menlo, monospace;
31
+
32
+ --line-height: 26px;
33
+ --font-size: 17px;
34
+
35
+ --inline-code-font-size: 15px;
36
+ --code-block-font-size: 14px;
37
+ --code-block-side-padding: 8px;
38
+ --line-numbers-font-size: 12px;
39
+
40
+ --tight-code-line-height: 18px;
41
+ --tight-code-padding-top: 5px;
42
+
43
+ --side-note-line-height: 20px;
44
+ --side-note-font-size: 13px;
45
+ --side-note-code-font-size: 13px;
46
+ --side-note-baseline-offset: 4px;
47
+ --side-note-sup-offset: -6px;
48
+ --side-note-number-hang-left: -6px;
49
+ --side-note-text-indent: -9px;
50
+
51
+ --heading-font-weight: 500;
52
+
53
+ --title-font-size: 42px;
54
+ --title-code-font-size: 40px;
55
+ --title-line-height: 48px;
56
+ --title-margin-top: 92px;
57
+
58
+ --h1-font-size: 32px;
59
+ --h1-code-font-size: 29px;
60
+ --h1-line-height: 36px;
61
+ --h1-word-spacing: 1px;
62
+ --h1-margin-top: 30px;
63
+ --h1-margin-bottom: 12px;
64
+
65
+ --h2-font-size: 22px;
66
+ --h2-code-font-size: 20px;
67
+ --h2-line-height: 28px;
68
+ --h2-word-spacing: 0.5px;
69
+ --h2-margin-top: 18px;
70
+ --h2-margin-bottom: 6px;
71
+
72
+ --ul-indent-size: 23px;
73
+ --ol-indent-size: 19px;
74
+ --ol-li-padding-left: 4px;
75
+
76
+ --hr-margin-top: 18px;
77
+ --hr-margin-bottom: calc(var(--line-height) - var(--hr-margin-top) - 1px);
78
+
79
+ --extra-wide-scale-factor: 1.5;
80
+
81
+ --figcaption-line-height: 21px;
82
+ --figcaption-font-size: 14px;
83
+ --figcaption-code-font-size: 13px;
84
+ --figcaption-gap: 6px;
85
+ --captioned-figure-gap: 10px;
86
+
87
+ --table-line-height: 21px;
88
+ --table-font-size: 14px;
89
+
90
+ --nav-toc-font-size: 12px;
91
+ --nav-toc-code-font-size: 12px;
92
+ --nav-toc-indent: 15px;
93
+ --nav-toc-baseline-offset: 2px;
94
+
95
+ /* --- Layout --- */
96
+
97
+ --main-width: 745px;
98
+ --main-width-narrow: 550px;
99
+ }
100
+
101
+ *, *:after, *:before {
102
+ box-sizing: border-box;
103
+ margin: 0;
104
+ padding: 0;
105
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
106
+ -webkit-font-smoothing: antialiased;
107
+ -moz-osx-font-smoothing: grayscale;
108
+ }
109
+
110
+ html {
111
+ /* https://github.com/edwardtufte/tufte-css/issues/81#issuecomment-261953409 */
112
+ -webkit-text-size-adjust: 100%;
113
+ }
114
+
115
+ body {
116
+ font-family: var(--font-family-prose);
117
+ color: var(--color-text);
118
+ font-size: var(--font-size);
119
+ line-height: var(--line-height);
120
+ -webkit-font-variant-ligatures: no-common-ligatures;
121
+ font-variant-ligatures: no-common-ligatures;
122
+
123
+ /* Safari-only right now (macOS, iOS) but looks so good. */
124
+ hanging-punctuation: first;
125
+
126
+ margin: 0;
127
+ padding: 0;
128
+ padding-top: var(--title-margin-top);
129
+ width: 100%;
130
+ }
131
+
132
+ /* }}} */
133
+ /* ----- Side notes and margin notes ----------------------------------- {{{ */
134
+ /* --- Side note text and numbering --- {{{ */
135
+
136
+ .sidenote,
137
+ .marginnote {
138
+ color: var(--color-sidenote);
139
+
140
+ font-size: var(--side-note-font-size);
141
+ line-height: var(--side-note-line-height);
142
+ vertical-align: baseline;
143
+
144
+ /* Align first baseline to body. */
145
+ margin-top: var(--side-note-baseline-offset);
146
+ }
147
+
148
+ .sidenote code,
149
+ .marginnote code {
150
+ color: var(--color-sidenote);
151
+ }
152
+
153
+ body {
154
+ counter-reset: sidenote-counter;
155
+ }
156
+
157
+ .sidenote-number {
158
+ counter-increment: sidenote-counter;
159
+ }
160
+
161
+ .sidenote-number:after,
162
+ .sidenote:before {
163
+ content: counter(sidenote-counter);
164
+ position: relative;
165
+ }
166
+
167
+ nav#TOC label,
168
+ label.margin-toggle:not(.sidenote-number),
169
+ .sidenote-number:after,
170
+ .sidenote:before,
171
+ sup {
172
+ font-size: var(--side-note-font-size);
173
+ font-weight: 700;
174
+ -webkit-font-feature-settings: "tnum" 1;
175
+ font-feature-settings: "tnum" 1;
176
+
177
+ /* Mimic 'vertical-align: super' (browser style for sup tag)
178
+ * without causing a gap in our text's implicit grid. */
179
+ vertical-align: baseline;
180
+ position: relative;
181
+ top: var(--side-note-sup-offset);
182
+ }
183
+
184
+ sup {
185
+ font-weight: inherit;
186
+ }
187
+
188
+ /* Make the superscript hang. */
189
+ .sidenote:before { left: var(--side-note-number-hang-left); }
190
+ /* Get first first column of first row to line up with other rows. */
191
+ .sidenote { text-indent: var(--side-note-text-indent); }
192
+
193
+ /*}}} */
194
+ /* --- Side note input controls --- {{{ */
195
+
196
+ input.margin-toggle {
197
+ display: none;
198
+ }
199
+ label.margin-toggle:not(.sidenote-number) {
200
+ display: none;
201
+ }
202
+ label.sidenote-number {
203
+ display: inline;
204
+ }
205
+
206
+ /* Unfortunately, variables aren't in scope here.
207
+ * See calculations in Horizontal layouting.
208
+ */
209
+ @media screen and (max-width: calc(26px + 550px + 26px + 169px + 26px - 1px)) {
210
+ .margin-toggle:checked + .sidenote,
211
+ .margin-toggle:checked + .marginnote {
212
+ margin-top: var(--side-note-line-height);
213
+ vertical-align: baseline;
214
+ }
215
+
216
+ label.margin-toggle {
217
+ color: var(--color-link);
218
+ }
219
+
220
+ label.margin-toggle:not(.sidenote-number) {
221
+ display: inline;
222
+ }
223
+
224
+ label {
225
+ cursor: pointer;
226
+ }
227
+ }
228
+
229
+ /* }}} */
230
+ /* }}} */
231
+ /* ----- Headings ------------------------------------------------------ {{{ */
232
+
233
+ h1, h2 {
234
+ font-family: var(--font-family-heading);
235
+ font-weight: var(--heading-font-weight);
236
+ }
237
+
238
+ h4, h5, h6 {
239
+ font-weight: normal;
240
+ }
241
+
242
+ h1.title {
243
+ margin-top: var(--line-height);
244
+ margin-bottom: var(--line-height);
245
+ font-size: var(--title-font-size);
246
+ line-height: var(--title-line-height);
247
+ }
248
+
249
+ h1.title code {
250
+ font-size: var(--title-code-font-size);
251
+ }
252
+
253
+ h1:not(.title) {
254
+ font-size: var(--h1-font-size);
255
+ line-height: var(--h1-line-height);
256
+ word-spacing: var(--h1-word-spacing);
257
+
258
+ margin-top: var(--h1-margin-top);
259
+ margin-bottom: var(--h1-margin-bottom);
260
+ }
261
+
262
+ h1:not(.title) code {
263
+ font-size: var(--h1-code-font-size);
264
+ }
265
+
266
+ h2 {
267
+ font-size: var(--h2-font-size);
268
+ line-height: var(--h2-line-height);
269
+ word-spacing: var(--h2-word-spacing);
270
+
271
+ margin-top: var(--h2-margin-top);
272
+ margin-bottom: var(--h2-margin-bottom);
273
+ }
274
+
275
+ h2 code {
276
+ font-size: var(--h2-code-font-size);
277
+ }
278
+
279
+ h3 {
280
+ font-size: var(--font-size);
281
+ line-height: var(--line-height);
282
+ font-weight: bold;
283
+ }
284
+
285
+ h1:not(.title) + *, h1:not(.title) + p { margin-top: var(--h1-margin-bottom); }
286
+ h2 + *, h2 + p { margin-top: var(--h2-margin-bottom); }
287
+ h3 + *, h3 + p { margin-top: 0; }
288
+
289
+ /* }}} */
290
+ /* ----- Prose --------------------------------------------------------- {{{ */
291
+
292
+ p, main > ul, main > ol, div.sourceCode, main > pre, img, table {
293
+ margin-top: var(--line-height);
294
+ margin-bottom: var(--line-height)
295
+ }
296
+
297
+ ul:not(.task-list) {
298
+ margin-left: var(--ul-indent-size);
299
+ }
300
+ ol {
301
+ margin-left: var(--ol-indent-size);
302
+ }
303
+
304
+ ul.task-list {
305
+ list-style: none;
306
+ margin-left: var(--ul-indent-size);
307
+ }
308
+
309
+ ul.task-list > li {
310
+ position: relative;
311
+ }
312
+
313
+ ul.task-list > li > input[type="checkbox"] {
314
+ position: absolute;
315
+ left: calc(-1 * var(--ul-indent-size));
316
+ height: var(--line-height);
317
+ }
318
+
319
+ ol > li {
320
+ padding-left: var(--ol-li-padding-left);
321
+ }
322
+
323
+ ol { list-style-type: decimal; }
324
+ ol ol { list-style-type: lower-alpha; }
325
+ ol ol ol { list-style-type: lower-roman; }
326
+ ol ol ol ol { list-style-type: decimal; }
327
+ ol ol ol ol ol { list-style-type: lower-alpha; }
328
+ ol ol ol ol ol ol { list-style-type: lower-roman; }
329
+ ol ol ol ol ol ol ol { list-style-type: decimal; }
330
+ ol ol ol ol ol ol ol ol { list-style-type: lower-alpha; }
331
+ ol ol ol ol ol ol ol ol ol { list-style-type: lower-roman; }
332
+
333
+ ul { list-style-type: disc; }
334
+ ul ul { list-style-type: circle; }
335
+ ul ul ul { list-style-type: square; }
336
+ ul ul ul ul { list-style-type: disc; }
337
+ ul ul ul ul ul { list-style-type: circle; }
338
+ ul ul ul ul ul ul { list-style-type: square; }
339
+ ul ul ul ul ul ul ul { list-style-type: disc; }
340
+ ul ul ul ul ul ul ul ul { list-style-type: circle; }
341
+ ul ul ul ul ul ul ul ul ul { list-style-type: square; }
342
+
343
+ blockquote {
344
+ border-left: 1px solid var(--color-text-secondary);
345
+ padding-left: 1.5rem;
346
+
347
+ font-style: italic;
348
+ }
349
+
350
+ blockquote > p {
351
+ margin-top: 0;
352
+ }
353
+
354
+ blockquote em, blockquote i, blockquote .sidenote-wrapper {
355
+ font-style: normal;
356
+ }
357
+
358
+ hr {
359
+ margin-top: var(--hr-margin-top);
360
+ margin-bottom: var(--hr-margin-bottom);
361
+ border-style: solid;
362
+ color: var(--color-border-heavy);
363
+ border-width: 1px 0 0;
364
+ }
365
+
366
+ a code, a:link code, a:visited code,
367
+ a, a:link, a:visited {
368
+ color: var(--color-link);
369
+ text-decoration: none;
370
+ }
371
+
372
+ a:hover {
373
+ text-decoration: underline;
374
+ }
375
+
376
+ span.mark, mark {
377
+ /* Reset browser styles */
378
+ color: inherit;
379
+
380
+ padding: 2px 0 1px;
381
+ }
382
+ span.mark.red, mark.red { background-color: var(--highlight-red); }
383
+ span.mark.yellow, mark.yellow { background-color: var(--highlight-yellow); }
384
+ span.mark.green, mark.green { background-color: var(--highlight-green); }
385
+ span.mark.blue, mark.blue { background-color: var(--highlight-blue); }
386
+ span.mark.purple, mark.purple { background-color: var(--highlight-purple); }
387
+
388
+ .subtitle {
389
+ margin-top: 0;
390
+ }
391
+ .author, .date {
392
+ margin-top: 0;
393
+ margin-bottom: 0;
394
+ }
395
+ .signoff {
396
+ margin: calc(4 * var(--line-height)) 0;
397
+ }
398
+
399
+ /* Pandoc utility classes */
400
+ span.smallcaps{ font-variant: small-caps; }
401
+ span.underline{ text-decoration: underline; }
402
+
403
+ .katex-display {
404
+ background: white;
405
+ transform: translateZ(0px);
406
+ }
407
+
408
+ /* }}} */
409
+ /* ----- Code ---------------------------------------------------------- {{{ */
410
+
411
+ /* Pandoc code blocks with a language look like div.sourceCode > pre.sourceCode
412
+ * Otherwise, it's just a pre (without .sourceCode)
413
+ *
414
+ * The 'code' element is tricky because it's used for inline code and code in a
415
+ * pre.
416
+ */
417
+
418
+ code {
419
+ font-family: var(--font-family-code);
420
+
421
+ word-spacing: normal;
422
+
423
+ /* Only for inline code */
424
+ color: var(--color-inline-code);
425
+ background-color: var(--color-inline-code-bg);
426
+ font-size: var(--inline-code-font-size);
427
+ margin: 0;
428
+ padding: 2px 0 1px;
429
+ border: 1px solid var(--color-border);
430
+ border-radius: 1px;
431
+ }
432
+
433
+ .sidenote code,
434
+ .marginnote code {
435
+ font-size: var(--side-note-code-font-size);
436
+ }
437
+
438
+ pre code {
439
+ /* Reset some changes meant to be inline-only */
440
+ color: inherit;
441
+ background-color: inherit;
442
+ font-size: var(--code-block-font-size);
443
+ line-height: var(--line-height);
444
+ margin: initial;
445
+ padding: initial;
446
+ border: initial;
447
+ border-radius: initial;
448
+ }
449
+
450
+ pre > code {
451
+ position: relative; /* For line highlights */
452
+ display: inline-block;
453
+ min-width: 100%;
454
+ z-index: 1;
455
+
456
+ white-space: pre-wrap;
457
+
458
+ padding: 0 var(--code-block-side-padding);
459
+ }
460
+
461
+ code.sourceCode::selection {
462
+ /* Prevent bug where far right edge of text box shows as selected. */
463
+ background: transparent;
464
+ }
465
+
466
+ .wide > pre, .wide > div.sourceCode {
467
+ /* Put this in front of the table of contents */
468
+ transform: translateZ(0px);
469
+ }
470
+
471
+ .wide pre > code {
472
+ white-space: pre;
473
+ }
474
+
475
+ pre.numberSource code {
476
+ counter-reset: source-line 0;
477
+ }
478
+
479
+ pre > code.sourceCode > span {
480
+ line-height: var(--line-height);
481
+
482
+ display: inline-block;
483
+ min-width: 100%;
484
+ }
485
+
486
+ div.sourceCode {
487
+ /* Need to make room for line numbers (even if they're not going to be used).
488
+ * Width doesn't matter, just needs to be big enough to hold the largest line
489
+ * number. */
490
+ --line-numbers-width: calc(4 * var(--line-numbers-font-size));
491
+ --line-numbers-negative-width: calc(-1 * var(--line-numbers-width));
492
+ margin-left: var(--line-numbers-negative-width);
493
+ }
494
+ div.sourceCode > pre {
495
+ margin-left: var(--line-numbers-width);
496
+ }
497
+ pre.numberSource > code.sourceCode > span {
498
+ counter-increment: source-line;
499
+ padding-left: var(--line-numbers-width);
500
+ text-indent: var(--line-numbers-negative-width);
501
+ position: relative;
502
+ left: var(--line-numbers-negative-width);
503
+ }
504
+ pre.numberSource > code.sourceCode > span > a:first-child::before {
505
+ -webkit-touch-callout: none;
506
+ -webkit-user-select: none;
507
+ -khtml-user-select: none;
508
+ -moz-user-select: none;
509
+ -ms-user-select: none;
510
+ user-select: none;
511
+
512
+ content: counter(source-line);
513
+ font-size: var(--line-numbers-font-size);
514
+ text-decoration: none;
515
+
516
+ position: relative;
517
+ text-align: right;
518
+ display: inline-block;
519
+
520
+ padding: 0 calc(2 * var(--code-block-side-padding));
521
+ width: var(--line-numbers-width);
522
+ }
523
+ pre > code.sourceCode > span > a:first-child::before:hover {
524
+ text-decoration: underline;
525
+ }
526
+
527
+ /* Utility class for code blocks that contain things like box drawing characters, where it's nice for things to touch. */
528
+ .tight-code pre,
529
+ pre.tight-code {
530
+ padding-top: var(--tight-code-padding-top);
531
+ }
532
+
533
+ pre.tight-code code,
534
+ .tight-code pre code {
535
+ line-height: var(--tight-code-line-height);
536
+ }
537
+
538
+ /* --- Code line highlights --- {{{ */
539
+ /* I used some code I contributed to owickstrom's pandoc-emphasize-code[1] as
540
+ * inspiration for these changes.
541
+ *
542
+ * The novel part is using :nth-of-type(...) selectors and CSS classes, instead
543
+ * of needing a pandoc filter. This means that we can stick with pandoc's
544
+ * default syntax highlighter, and not need to requirer JavaScript for syntax
545
+ * highlighting. It has the obvious limitation that it places a fixed limit on
546
+ * lines that can be highlighted, but these additional CSS styles are easy
547
+ * enough to write, so anyone who needs more lines can write their own
548
+ * stylesheet and include it to add more after the fact.
549
+ *
550
+ * [1] https://github.com/owickstrom/pandoc-emphasize-code/pull/3
551
+ */
552
+
553
+ pre > code.sourceCode > span::after {
554
+ position: absolute;
555
+ background-color: var(--color-code-highlight-bg);
556
+ z-index: -1;
557
+ left: calc(var(--line-numbers-width) - var(--code-block-side-padding));
558
+ right: calc(var(--line-numbers-negative-width) - var(--code-block-side-padding));
559
+ top: 0;
560
+ height: 100%;
561
+ }
562
+
563
+ pre.hl-1 > code.sourceCode > span:nth-of-type(1)::after { content: ""; }
564
+ pre.hl-2 > code.sourceCode > span:nth-of-type(2)::after { content: ""; }
565
+ pre.hl-3 > code.sourceCode > span:nth-of-type(3)::after { content: ""; }
566
+ pre.hl-4 > code.sourceCode > span:nth-of-type(4)::after { content: ""; }
567
+ pre.hl-5 > code.sourceCode > span:nth-of-type(5)::after { content: ""; }
568
+ pre.hl-6 > code.sourceCode > span:nth-of-type(6)::after { content: ""; }
569
+ pre.hl-7 > code.sourceCode > span:nth-of-type(7)::after { content: ""; }
570
+ pre.hl-8 > code.sourceCode > span:nth-of-type(8)::after { content: ""; }
571
+ pre.hl-9 > code.sourceCode > span:nth-of-type(9)::after { content: ""; }
572
+ pre.hl-10 > code.sourceCode > span:nth-of-type(10)::after { content: ""; }
573
+ pre.hl-11 > code.sourceCode > span:nth-of-type(11)::after { content: ""; }
574
+ pre.hl-12 > code.sourceCode > span:nth-of-type(12)::after { content: ""; }
575
+ pre.hl-13 > code.sourceCode > span:nth-of-type(13)::after { content: ""; }
576
+ pre.hl-14 > code.sourceCode > span:nth-of-type(14)::after { content: ""; }
577
+ pre.hl-15 > code.sourceCode > span:nth-of-type(15)::after { content: ""; }
578
+ pre.hl-16 > code.sourceCode > span:nth-of-type(16)::after { content: ""; }
579
+ pre.hl-17 > code.sourceCode > span:nth-of-type(17)::after { content: ""; }
580
+ pre.hl-18 > code.sourceCode > span:nth-of-type(18)::after { content: ""; }
581
+ pre.hl-19 > code.sourceCode > span:nth-of-type(19)::after { content: ""; }
582
+ pre.hl-20 > code.sourceCode > span:nth-of-type(20)::after { content: ""; }
583
+ pre.hl-21 > code.sourceCode > span:nth-of-type(21)::after { content: ""; }
584
+ pre.hl-22 > code.sourceCode > span:nth-of-type(22)::after { content: ""; }
585
+ pre.hl-23 > code.sourceCode > span:nth-of-type(23)::after { content: ""; }
586
+ pre.hl-24 > code.sourceCode > span:nth-of-type(24)::after { content: ""; }
587
+ pre.hl-25 > code.sourceCode > span:nth-of-type(25)::after { content: ""; }
588
+ pre.hl-26 > code.sourceCode > span:nth-of-type(26)::after { content: ""; }
589
+ pre.hl-27 > code.sourceCode > span:nth-of-type(27)::after { content: ""; }
590
+ pre.hl-28 > code.sourceCode > span:nth-of-type(28)::after { content: ""; }
591
+ pre.hl-29 > code.sourceCode > span:nth-of-type(29)::after { content: ""; }
592
+ pre.hl-30 > code.sourceCode > span:nth-of-type(30)::after { content: ""; }
593
+ pre.hl-31 > code.sourceCode > span:nth-of-type(31)::after { content: ""; }
594
+ pre.hl-32 > code.sourceCode > span:nth-of-type(32)::after { content: ""; }
595
+ pre.hl-33 > code.sourceCode > span:nth-of-type(33)::after { content: ""; }
596
+ pre.hl-34 > code.sourceCode > span:nth-of-type(34)::after { content: ""; }
597
+ pre.hl-35 > code.sourceCode > span:nth-of-type(35)::after { content: ""; }
598
+ pre.hl-36 > code.sourceCode > span:nth-of-type(36)::after { content: ""; }
599
+ pre.hl-37 > code.sourceCode > span:nth-of-type(37)::after { content: ""; }
600
+ pre.hl-38 > code.sourceCode > span:nth-of-type(38)::after { content: ""; }
601
+ pre.hl-39 > code.sourceCode > span:nth-of-type(39)::after { content: ""; }
602
+ pre.hl-40 > code.sourceCode > span:nth-of-type(40)::after { content: ""; }
603
+
604
+ /* }}} */
605
+
606
+ /* }}} */
607
+ /* ----- Images and figures -------------------------------------------- {{{ */
608
+
609
+ /* There's only a figure if there's a caption. Tighten things up. */
610
+ figure {
611
+ margin-bottom: var(--captioned-figure-gap);
612
+ }
613
+
614
+ figure + p {
615
+ margin-top: var(--captioned-figure-gap);
616
+ }
617
+
618
+ figure > img, figure > pre, figure > div.sourceCode {
619
+ margin-bottom: var(--figcaption-gap);
620
+ }
621
+
622
+ img {
623
+ width: 100%;
624
+ display: block;
625
+ }
626
+
627
+ .wide img {
628
+ /* Put this in front of the table of contents */
629
+ transform: translateZ(0px);
630
+ }
631
+
632
+ figcaption {
633
+ font-size: var(--figcaption-font-size);
634
+ line-height: var(--figcaption-line-height);
635
+ font-style: italic;
636
+ text-align: center;
637
+ color: var(--color-text-secondary);
638
+ }
639
+
640
+ .left-align-caption figcaption {
641
+ text-align: left;
642
+ }
643
+
644
+ figcaption code {
645
+ font-size: var(--figcaption-code-font-size);
646
+ }
647
+
648
+ /* }}} */
649
+ /* ----- Tables -------------------------------------------------------- {{{ */
650
+
651
+ table {
652
+ -webkit-font-feature-settings: "tnum" 1;
653
+ font-feature-settings: "tnum" 1;
654
+
655
+ font-size: var(--table-font-size);
656
+ line-height: var(--table-line-height);
657
+
658
+ border-spacing: 0;
659
+ border-collapse: collapse;
660
+ border: 1px solid var(--color-border-heavy);
661
+
662
+ width: 100%;
663
+
664
+ /* Solid background to occlude table of contents */
665
+ background: white;
666
+ }
667
+
668
+ .wide table {
669
+ /* Put this in front of the table of contents */
670
+ transform: translateZ(0px);
671
+ }
672
+
673
+ table td, table th {
674
+ border: 1px solid var(--color-border-heavy);
675
+ padding: 5px 8px;
676
+ min-width: 100px;
677
+ }
678
+ table th {
679
+ background-color: var(--color-table-heading);
680
+ }
681
+
682
+ table > caption {
683
+ caption-side: bottom;
684
+ margin-top: var(--figcaption-gap);
685
+ margin-bottom: calc(var(--captioned-figure-gap) - var(--line-height));
686
+ font-size: var(--figcaption-font-size);
687
+ line-height: var(--figcaption-line-height);
688
+ font-style: italic;
689
+ text-align: center;
690
+ color: var(--color-text-secondary);
691
+ }
692
+
693
+ .left-align-caption table > caption {
694
+ text-align: left;
695
+ }
696
+
697
+ table > caption code {
698
+ font-size: var(--figcaption-code-font-size);
699
+ }
700
+
701
+ /* --- Notes are just single cell tables --- */
702
+
703
+ .note table {
704
+ font-size: inherit;
705
+ line-height: inherit;
706
+ }
707
+ .note table, .note td {
708
+ border: none;
709
+ }
710
+
711
+ .note.red td { background: var(--highlight-red); }
712
+ .note.yellow td { background: var(--highlight-yellow); }
713
+ .note.green td { background: var(--highlight-green); }
714
+ .note.blue td { background: var(--highlight-blue); }
715
+ .note.purple td { background: var(--highlight-purple); }
716
+
717
+ /* }}} */
718
+ /* ----- Table of contents --------------------------------------------- {{{ */
719
+
720
+ .date.before-toc {
721
+ padding-bottom: var(--line-height);
722
+ }
723
+
724
+ nav#TOC {
725
+ margin-bottom: var(--line-height);
726
+ border-left: 1px solid var(--color-text-secondary);
727
+ padding-left: 1.5rem;
728
+ }
729
+
730
+ nav#TOC input {
731
+ display: none;
732
+ }
733
+
734
+ nav#TOC label {
735
+ color: var(--color-link);
736
+ cursor: pointer;
737
+ }
738
+
739
+ nav#TOC > ul {
740
+ display: none;
741
+ }
742
+
743
+ nav#TOC > input:checked + ul {
744
+ display: block;
745
+ }
746
+
747
+ @media print {
748
+ nav#TOC > input + ul {
749
+ display: block;
750
+ }
751
+ }
752
+
753
+ /* Unfortunately, variables aren't in scope here.
754
+ * 745px = --main-width
755
+ * 52px = 2 * --line-height
756
+ * 206px = side note min width
757
+ */
758
+ @media screen and (min-width: calc(745px + 2 * (52px + 206px + 52px) - 1px)) {
759
+ header {
760
+ margin-bottom: var(--line-height);
761
+ }
762
+
763
+ .date.before-toc {
764
+ padding-bottom: initial;
765
+ }
766
+
767
+ nav#TOC {
768
+ /* Unset some styles for small screen width */
769
+ margin-bottom: initial;
770
+ border-left: initial;
771
+ padding-left: initial;
772
+
773
+ position: sticky;
774
+ margin-top: calc(var(--nav-toc-baseline-offset));
775
+ float: left;
776
+ top: var(--line-height);
777
+
778
+ font-size: var(--nav-toc-font-size);
779
+ color: var(--color-text-secondary);
780
+
781
+ margin-left: var(--line-height);
782
+
783
+ max-width: calc((100vw - var(--main-width)) / 2 - 2 * var(--line-height));
784
+ max-height: calc(100vh - 2 * var(--line-height));
785
+ overflow-y: scroll;
786
+ }
787
+
788
+ nav#TOC label {
789
+ display: none;
790
+ }
791
+
792
+ nav#TOC ul {
793
+ display: block;
794
+ list-style: none;
795
+ margin-left: var(--nav-toc-indent);
796
+ }
797
+ nav#TOC > ul {
798
+ margin-left: 0;
799
+ }
800
+
801
+ nav#TOC code {
802
+ font-size: var(--nav-toc-code-font-size);
803
+ }
804
+
805
+ nav#TOC code,
806
+ nav#TOC a,
807
+ nav#TOD a:link,
808
+ nav#TOD a:visited {
809
+ color: var(--color-text-secondary);
810
+ }
811
+
812
+ nav#TOC a:hover,
813
+ nav#TOC a:hover code {
814
+ text-decoration: none;
815
+ color: var(--color-link);
816
+ }
817
+ }
818
+
819
+ /* }}} */
820
+ /* ----- Horizontal layouting (main, side notes, extra-wide) ----------- {{{ */
821
+
822
+ .sidenote,
823
+ .marginnote {
824
+ float: right;
825
+ clear: right;
826
+ position: relative;
827
+
828
+ --side-note-max-width: 300px;
829
+
830
+ width: var(--computed-width);
831
+ max-width: var(--side-note-max-width);
832
+ margin-right: calc(-1 * min(var(--computed-width), var(--side-note-max-width)) - var(--margin-left));
833
+ }
834
+
835
+ /* --- Side notes always visible --- {{{ */
836
+
837
+ /* Unfortunately, variables aren't in scope here.
838
+ * 745px = --main-width
839
+ * 52px = 2 * --line-height
840
+ * 206px = side note min width
841
+ */
842
+ @media screen and (min-width: calc(745px + 2 * (52px + 206px + 52px))) {
843
+ header,
844
+ nav#TOC,
845
+ main,
846
+ footer {
847
+ max-width: var(--main-width);
848
+ }
849
+
850
+ header,
851
+ main,
852
+ footer {
853
+ margin-left: auto;
854
+ margin-right: auto;
855
+ }
856
+
857
+ .sidenote,
858
+ .marginnote {
859
+ --margin-left: calc(2 * var(--line-height));
860
+ --margin-right: var(--margin-left);
861
+ --computed-width: calc((100vw - 100%) / 2 - var(--margin-right) - var(--margin-left));
862
+ }
863
+
864
+ .wide {
865
+ width: 100%;
866
+ overflow-x: scroll;
867
+ }
868
+
869
+ .wide.extra-wide {
870
+ margin-left: calc((1 - var(--extra-wide-scale-factor)) / 2 * 100%);
871
+ width: calc(var(--extra-wide-scale-factor) * 100%);
872
+ }
873
+
874
+ .wide.full-width {
875
+ margin-left: calc(var(--line-height) - ((100vw - var(--main-width)) / 2));
876
+ width: calc(100vw - 2 * var(--line-height));
877
+ }
878
+
879
+ .wide.extra-wide figcaption,
880
+ .wide.extra-wide table > caption {
881
+ margin-left: calc(((var(--extra-wide-scale-factor) - 1) / 2) * var(--main-width));
882
+ max-width: var(--main-width);
883
+ margin-right: calc(100% - var(--main-width) - (((var(--extra-wide-scale-factor) - 1) / 2) * var(--main-width)));
884
+ }
885
+
886
+ .wide.full-width figcaption,
887
+ .wide.full-width table > caption {
888
+ margin-left: calc((100vw - var(--main-width)) / 2 - var(--line-height));
889
+ max-width: var(--main-width);
890
+ margin-right: calc(100% - var(--main-width) - ((100vw - var(--main-width)) / 2 - var(--line-height)));
891
+ }
892
+ }
893
+
894
+ /* Unfortunately, variables aren't in scope here.
895
+ * 745px = --main-width
896
+ * 52px = 2 * --line-height
897
+ * 206px = side note min width
898
+ */
899
+ @media screen and (min-width: calc(52px + 745px + 52px + 206px + 52px)) and (max-width: calc(745px + 2 * (52px + 206px + 52px) - 1px)) {
900
+ header,
901
+ nav#TOC,
902
+ main,
903
+ footer {
904
+ margin-left: calc(2 * var(--line-height));
905
+ max-width: var(--main-width);
906
+ margin-right: auto;
907
+ }
908
+
909
+ .sidenote,
910
+ .marginnote {
911
+ --margin-left: calc(2 * var(--line-height));
912
+ --margin-right: var(--margin-left);
913
+ --computed-width: calc(100vw - var(--main-width) - calc(2 * var(--line-height)) - var(--margin-right) - var(--margin-left));
914
+ }
915
+
916
+ .wide {
917
+ width: 100%;
918
+ overflow-x: scroll;
919
+ overflow-y: hidden;
920
+ }
921
+
922
+ .wide.extra-wide {
923
+ margin-left: calc(-1 * var(--line-height));
924
+ width: calc(100vw - 2 * var(--line-height));
925
+ max-width: calc(var(--extra-wide-scale-factor) * var(--main-width));
926
+ }
927
+
928
+ .wide.full-width {
929
+ margin-left: calc(-1 * var(--line-height));
930
+ width: calc(100vw - 2 * var(--line-height));
931
+ max-width: calc(100vw - 2 * var(--line-height));
932
+ }
933
+
934
+ .wide.extra-wide .katex-display,
935
+ .wide.full-width .katex-display {
936
+ padding-left: var(--line-height);
937
+ padding-right: var(--line-height);
938
+ }
939
+
940
+ .wide.extra-wide .katex-display,
941
+ .wide.extra-wide .katex-display > .katex,
942
+ .wide.full-width .katex-display,
943
+ .wide.full-width .katex-display > .katex {
944
+ text-align: left;
945
+ }
946
+
947
+ .wide.extra-wide figcaption,
948
+ .wide.extra-wide table > caption,
949
+ .wide.full-width figcaption,
950
+ .wide.full-width table > caption {
951
+ text-align: left;
952
+ margin-left: var(--line-height);
953
+ max-width: var(--main-width);
954
+ }
955
+ }
956
+
957
+ /* Unfortunately, variables aren't in scope here.
958
+ * 550px = --main-width-narrow
959
+ * 26px = --line-height
960
+ * 169px = side note min width narrow
961
+ */
962
+ @media screen and (min-width: calc(26px + 550px + 26px + 169px + 26px)) and (max-width: calc(52px + 745px + 52px + 206px + 52px - 1px)) {
963
+ header,
964
+ nav#TOC,
965
+ main,
966
+ footer {
967
+ margin-left: var(--line-height);
968
+ max-width: var(--main-width-narrow);
969
+ margin-right: auto;
970
+ }
971
+
972
+ .sidenote,
973
+ .marginnote {
974
+ --margin-left: var(--line-height);
975
+ --margin-right: var(--line-height);
976
+ --computed-width: calc(100vw - var(--main-width-narrow) - var(--line-height) - var(--margin-right) - var(--margin-left));
977
+ }
978
+
979
+ .wide {
980
+ width: var(--main-width);
981
+ overflow-x: scroll;
982
+ overflow-y: hidden;
983
+ }
984
+
985
+ .wide .katex-display,
986
+ .wide .katex-display > .katex {
987
+ text-align: left;
988
+ }
989
+
990
+ .wide figcaption,
991
+ .wide table > caption {
992
+ text-align: left;
993
+ max-width: var(--main-width-narrow);
994
+ }
995
+
996
+ .wide.extra-wide,
997
+ .wide.full-width {
998
+ width: calc(100vw - 2 * var(--line-height));
999
+ }
1000
+ }
1001
+
1002
+ /* }}} */
1003
+ /* --- Side notes collapsed --- {{{ */
1004
+
1005
+ /* Unfortunately, variables aren't in scope here.
1006
+ * See calculations above.
1007
+ */
1008
+ @media screen and (max-width: calc(26px + 550px + 26px + 169px + 26px - 1px)) {
1009
+ header,
1010
+ nav#TOC,
1011
+ main,
1012
+ footer {
1013
+ margin-left: var(--line-height);
1014
+ margin-right: var(--line-height);
1015
+ }
1016
+
1017
+ .sidenote,
1018
+ .marginnote {
1019
+ display: none;
1020
+ }
1021
+
1022
+ .margin-toggle:checked + .sidenote,
1023
+ .margin-toggle:checked + .marginnote {
1024
+ display: block;
1025
+ float: left;
1026
+ clear: both;
1027
+ width: 100%;
1028
+ max-width: 100%;
1029
+ }
1030
+
1031
+ .wide {
1032
+ width: 100%;
1033
+ overflow-x: scroll;
1034
+ overflow-y: hidden;
1035
+ }
1036
+
1037
+ .wide .katex-display,
1038
+ .wide .katex-display > .katex {
1039
+ text-align: left;
1040
+ }
1041
+
1042
+ .wide figcaption,
1043
+ .wide table > caption {
1044
+ text-align: left;
1045
+ max-width: calc(100vw - 2 * var(--line-height));
1046
+ }
1047
+ }
1048
+
1049
+ /* }}} */
1050
+ /* --- Paged media (print styles) --- {{{ */
1051
+ @page {
1052
+ size: letter;
1053
+ margin: 0.5in;
1054
+ }
1055
+
1056
+ @media print {
1057
+ body {
1058
+ padding-top: 0;
1059
+ }
1060
+
1061
+ header,
1062
+ nav#TOC,
1063
+ main,
1064
+ footer {
1065
+ width: 5.25in;
1066
+ margin-right: auto;
1067
+ }
1068
+
1069
+ .sidenote,
1070
+ .marginnote {
1071
+ width: 2in;
1072
+ margin-right: -2.25in;
1073
+ }
1074
+
1075
+ .wide {
1076
+ width: 7.5in;
1077
+ overflow-x: hidden;
1078
+ overflow-y: hidden;
1079
+ }
1080
+
1081
+ .wide .katex-display,
1082
+ .wide .katex-display > .katex {
1083
+ text-align: left;
1084
+ }
1085
+
1086
+ .wide figcaption,
1087
+ .wide table > caption {
1088
+ text-align: left;
1089
+ width: 5.25in;
1090
+ }
1091
+
1092
+ .wide pre > code {
1093
+ white-space: pre-wrap;
1094
+ }
1095
+ }
1096
+
1097
+ h1, h2, h3 {
1098
+ page-break-after: avoid;
1099
+ }
1100
+
1101
+ table, figure, pre {
1102
+ page-break-inside: avoid;
1103
+ }
1104
+ /* }}} */
1105
+ /* }}} */
1106
+
1107
+ /* vim:fdm=marker
1108
+ */