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 +7 -0
- data/README.md +125 -0
- data/_includes/after.html +11 -0
- data/_includes/before.html +12 -0
- data/_includes/default.html +21 -0
- data/_includes/enable_checkboxes.html +12 -0
- data/_includes/head.html +37 -0
- data/_includes/header.html +22 -0
- data/_includes/math.html +18 -0
- data/_layouts/index.html +1 -0
- data/_layouts/page.html +1 -0
- data/_layouts/post.html +1 -0
- data/_template.html5 +14 -0
- data/assets/css/skylighting-solarized-theme.css +39 -0
- data/assets/css/theme.css +1108 -0
- metadata +113 -0
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>
|
data/_includes/head.html
ADDED
@@ -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 -%}
|
data/_includes/math.html
ADDED
@@ -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 %}
|
data/_layouts/index.html
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{% include default.html %}
|
data/_layouts/page.html
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{% include default.html %}
|
data/_layouts/post.html
ADDED
@@ -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
|
+
*/
|