pandoc-markdown-jekyll-theme 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ */