thomwolf HF staff commited on
Commit
236446b
·
1 Parent(s): 1cbe265

testing svg

Browse files
assets/svg/figure-01.svg ADDED
assets/svg/test-svg.html ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Interactive SVG Hover Effect</title>
6
+ <style>
7
+ body {
8
+ font-family: Arial, sans-serif;
9
+ margin: 20px;
10
+ background: #f8f9fa;
11
+ }
12
+ .svg-container {
13
+ border: 1px solid #ccc;
14
+ padding: 10px;
15
+ border-radius: 8px;
16
+ background: #fff;
17
+ }
18
+ .info {
19
+ margin-top: 15px;
20
+ font-size: 16px;
21
+ color: #555;
22
+ }
23
+ </style>
24
+ </head>
25
+ <body>
26
+ <div class="svg-container" id="svg-container-01">
27
+ <!-- The enhanced SVG will be injected here -->
28
+ </div>
29
+ <div class="info" id="info">Hover over the network elements to see their details</div>
30
+
31
+ <script>
32
+ // Function to enhance the SVG content by adding styles and data attributes
33
+ function enhanceSVGContent(originalContent) {
34
+ const parser = new DOMParser();
35
+ const doc = parser.parseFromString(originalContent, 'image/svg+xml');
36
+
37
+ // Create a style element with hover effects and insert it as the first child of the SVG
38
+ const styleElement = doc.createElementNS('http://www.w3.org/2000/svg', 'style');
39
+ styleElement.textContent = `
40
+ path[data-element-type="layer"] {
41
+ transition: all 0.3s;
42
+ cursor: pointer;
43
+ }
44
+ path[data-element-type="layer"]:hover {
45
+ fill: #b197fc !important;
46
+ transform: translate(0, -2px);
47
+ }
48
+
49
+ path[data-element-type="gradient"] {
50
+ transition: all 0.3s;
51
+ cursor: pointer;
52
+ }
53
+ path[data-element-type="gradient"]:hover {
54
+ fill: #f06595 !important;
55
+ transform: translate(0, -2px);
56
+ }
57
+
58
+ path[data-element-type="forward"] {
59
+ transition: all 0.3s;
60
+ cursor: pointer;
61
+ }
62
+ path[data-element-type="forward"]:hover {
63
+ stroke: #0c8599 !important;
64
+ stroke-width: 4 !important;
65
+ }
66
+
67
+ path[data-element-type="backward"] {
68
+ transition: all 0.3s;
69
+ cursor: pointer;
70
+ }
71
+ path[data-element-type="backward"]:hover {
72
+ stroke: #e8590c !important;
73
+ stroke-width: 4 !important;
74
+ }
75
+
76
+ path[data-element-type="optimization"] {
77
+ transition: all 0.3s;
78
+ cursor: pointer;
79
+ }
80
+ path[data-element-type="optimization"]:hover {
81
+ stroke: #087f5b !important;
82
+ stroke-width: 4 !important;
83
+ }
84
+ `;
85
+ doc.documentElement.insertBefore(styleElement, doc.documentElement.firstChild);
86
+
87
+ // Process neural network layers (purple nodes)
88
+ doc.querySelectorAll('path[fill="#d0bfff"]').forEach((node, index) => {
89
+ node.setAttribute('data-element-id', `layer-${index}`);
90
+ node.setAttribute('data-element-type', 'layer');
91
+ });
92
+
93
+ // Process gradient nodes (pink nodes)
94
+ doc.querySelectorAll('path[fill="#f783ac"]').forEach((node, index) => {
95
+ node.setAttribute('data-element-id', `gradient-${index}`);
96
+ node.setAttribute('data-element-type', 'gradient');
97
+ });
98
+
99
+ // Process arrows by matching stroke colors
100
+ const arrowTypes = {
101
+ '#15aabf': 'forward',
102
+ '#fd7e14': 'backward',
103
+ '#099268': 'optimization'
104
+ };
105
+
106
+ Object.entries(arrowTypes).forEach(([color, type]) => {
107
+ doc.querySelectorAll(`path[stroke="${color}"]`).forEach((arrow, index) => {
108
+ arrow.setAttribute('data-element-id', `${type}-${index}`);
109
+ arrow.setAttribute('data-element-type', type);
110
+ });
111
+ });
112
+
113
+ // Make the SVG responsive
114
+ doc.documentElement.setAttribute('width', '100%');
115
+ doc.documentElement.setAttribute('height', 'auto');
116
+ doc.documentElement.setAttribute('preserveAspectRatio', 'xMidYMid meet');
117
+
118
+ return new XMLSerializer().serializeToString(doc);
119
+ }
120
+
121
+ // Function to load an SVG file via fetch
122
+ async function loadSVG(url, containerId) {
123
+ try {
124
+ const response = await fetch(url);
125
+ if (!response.ok) {
126
+ throw new Error(`HTTP error! Status: ${response.status}`);
127
+ }
128
+ const svgText = await response.text();
129
+ const enhancedSVG = enhanceSVGContent(svgText);
130
+ document.getElementById(containerId).innerHTML = enhancedSVG;
131
+ } catch (error) {
132
+ console.error('Error loading SVG:', error);
133
+ document.getElementById(containerId).innerHTML = '<p>Error loading SVG.</p>';
134
+ }
135
+ }
136
+
137
+ // Load the SVG file (adjust the path if needed)
138
+ loadSVG('figure-01.svg', 'svg-container-01');
139
+
140
+ // Set up event listeners to display a description of the hovered element
141
+ const svgContainer = document.getElementById('svg-container-01');
142
+ svgContainer.addEventListener('mouseover', function(event) {
143
+ const target = event.target;
144
+ if (target.tagName.toLowerCase() === 'path' && target.hasAttribute('data-element-id')) {
145
+ const elementId = target.getAttribute('data-element-id');
146
+ const elementType = target.getAttribute('data-element-type');
147
+ const descriptions = {
148
+ layer: 'Neural Network Layer',
149
+ gradient: 'Gradient Update Layer',
150
+ forward: 'Forward Pass Connection',
151
+ backward: 'Backward Pass Connection',
152
+ optimization: 'Optimization Step'
153
+ };
154
+ const description = descriptions[elementType] || elementType;
155
+ document.getElementById('info').textContent = `Hovering over: ${description} (${elementId})`;
156
+ }
157
+ });
158
+
159
+ svgContainer.addEventListener('mouseout', function() {
160
+ document.getElementById('info').textContent = 'Hover over the network elements to see their details';
161
+ });
162
+ </script>
163
+ </body>
164
+ </html>
dist/distill.bundle.js CHANGED
The diff for this file is too large to render. See raw diff
 
dist/distill.bundle.js.map CHANGED
The diff for this file is too large to render. See raw diff
 
dist/index.html CHANGED
@@ -51,6 +51,115 @@
51
  <d-article>
52
  <d-contents>
53
  </d-contents>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
  <p>Fueled by the scaling laws<d-cite bibtex-key="kaplan2020scalinglaws"></d-cite><d-cite bibtex-key="hoffmann2022chinchilla"></d-cite>, the trend of training ever larger language models on vaster amounts of data has been driving progress in AI for the past couple years. Initially, the development of the largest models happened exclusively behind closed doors of a handful of research labs but recently opened up more with the release of models such as Llama 3.1 405B<d-cite bibtex-key="grattafiori2024llama3herdmodels"></d-cite> and DeepSeek R1<d-cite bibtex-key="deepseekai2024deepseekv3technicalreport"></d-cite>. While these models have <a href="https://huggingface.co/meta-llama">openly shared</a> <a href="https://huggingface.co/deepseek-ai">weights</a> and their training recipes are described in <a href="https://ai.meta.com/research/publications/the-llama-3-herd-of-models/">technical</a> <a href="https://github.com/deepseek-ai/DeepSeek-R1/blob/main/DeepSeek_R1.pdf">reports</a>, the challenging engineering to involved to train at the necessary infrastructure scale is still hidden between the lines of a handful of papers and complex training frameworks. This ~~long blog post~~ open-source book is here to open this black box!</p>
56
 
@@ -223,7 +332,37 @@
223
  </ol>
224
 
225
  <p>It looks generally like this: </p>
226
- <p><img alt="image.png" src="assets/images/placeholder.png" /></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
 
228
  <aside>As we’ll see later, these steps may be repeated or intertwined but for now we’ll start simple.</aside>
229
 
@@ -1573,7 +1712,8 @@
1573
  }</pre>
1574
  </d-appendix>
1575
 
1576
- <script>
 
1577
  const article = document.querySelector('d-article');
1578
  const toc = document.querySelector('d-contents');
1579
  if (toc) {
 
51
  <d-article>
52
  <d-contents>
53
  </d-contents>
54
+
55
+
56
+ <script>
57
+ // Function to enhance the SVG content by adding styles and data attributes
58
+ function enhanceSVGContent(originalContent) {
59
+ const parser = new DOMParser();
60
+ const doc = parser.parseFromString(originalContent, 'image/svg+xml');
61
+
62
+ // Create a style element with hover effects and insert it as the first child of the SVG
63
+ const styleElement = doc.createElementNS('http://www.w3.org/2000/svg', 'style');
64
+ styleElement.textContent = `
65
+ path[data-element-type="layer"] {
66
+ transition: all 0.3s;
67
+ cursor: pointer;
68
+ }
69
+ path[data-element-type="layer"]:hover {
70
+ fill: #b197fc !important;
71
+ transform: translate(0, -2px);
72
+ }
73
+
74
+ path[data-element-type="gradient"] {
75
+ transition: all 0.3s;
76
+ cursor: pointer;
77
+ }
78
+ path[data-element-type="gradient"]:hover {
79
+ fill: #f06595 !important;
80
+ transform: translate(0, -2px);
81
+ }
82
+
83
+ path[data-element-type="forward"] {
84
+ transition: all 0.3s;
85
+ cursor: pointer;
86
+ }
87
+ path[data-element-type="forward"]:hover {
88
+ stroke: #0c8599 !important;
89
+ stroke-width: 4 !important;
90
+ }
91
+
92
+ path[data-element-type="backward"] {
93
+ transition: all 0.3s;
94
+ cursor: pointer;
95
+ }
96
+ path[data-element-type="backward"]:hover {
97
+ stroke: #e8590c !important;
98
+ stroke-width: 4 !important;
99
+ }
100
+
101
+ path[data-element-type="optimization"] {
102
+ transition: all 0.3s;
103
+ cursor: pointer;
104
+ }
105
+ path[data-element-type="optimization"]:hover {
106
+ stroke: #087f5b !important;
107
+ stroke-width: 4 !important;
108
+ }
109
+ `;
110
+ doc.documentElement.insertBefore(styleElement, doc.documentElement.firstChild);
111
+
112
+ // Process neural network layers (purple nodes)
113
+ doc.querySelectorAll('path[fill="#d0bfff"]').forEach((node, index) => {
114
+ node.setAttribute('data-element-id', `layer-${index}`);
115
+ node.setAttribute('data-element-type', 'layer');
116
+ });
117
+
118
+ // Process gradient nodes (pink nodes)
119
+ doc.querySelectorAll('path[fill="#f783ac"]').forEach((node, index) => {
120
+ node.setAttribute('data-element-id', `gradient-${index}`);
121
+ node.setAttribute('data-element-type', 'gradient');
122
+ });
123
+
124
+ // Process arrows by matching stroke colors
125
+ const arrowTypes = {
126
+ '#15aabf': 'forward',
127
+ '#fd7e14': 'backward',
128
+ '#099268': 'optimization'
129
+ };
130
+
131
+ Object.entries(arrowTypes).forEach(([color, type]) => {
132
+ doc.querySelectorAll(`path[stroke="${color}"]`).forEach((arrow, index) => {
133
+ arrow.setAttribute('data-element-id', `${type}-${index}`);
134
+ arrow.setAttribute('data-element-type', type);
135
+ });
136
+ });
137
+
138
+ // Make the SVG responsive
139
+ doc.documentElement.setAttribute('width', '100%');
140
+ doc.documentElement.setAttribute('height', 'auto');
141
+ doc.documentElement.setAttribute('preserveAspectRatio', 'xMidYMid meet');
142
+
143
+ return new XMLSerializer().serializeToString(doc);
144
+ }
145
+
146
+ // Function to load an SVG file via fetch
147
+ async function loadSVG(url) {
148
+ try {
149
+ const response = await fetch(url);
150
+ if (!response.ok) {
151
+ throw new Error(`HTTP error! Status: ${response.status}`);
152
+ }
153
+ const svgText = await response.text();
154
+ const enhancedSVG = enhanceSVGContent(svgText);
155
+ document.getElementById('svg-container').innerHTML = enhancedSVG;
156
+ } catch (error) {
157
+ console.error('Error loading SVG:', error);
158
+ document.getElementById('svg-container').innerHTML = '<p>Error loading SVG.</p>';
159
+ }
160
+ }
161
+ </script>
162
+
163
 
164
  <p>Fueled by the scaling laws<d-cite bibtex-key="kaplan2020scalinglaws"></d-cite><d-cite bibtex-key="hoffmann2022chinchilla"></d-cite>, the trend of training ever larger language models on vaster amounts of data has been driving progress in AI for the past couple years. Initially, the development of the largest models happened exclusively behind closed doors of a handful of research labs but recently opened up more with the release of models such as Llama 3.1 405B<d-cite bibtex-key="grattafiori2024llama3herdmodels"></d-cite> and DeepSeek R1<d-cite bibtex-key="deepseekai2024deepseekv3technicalreport"></d-cite>. While these models have <a href="https://huggingface.co/meta-llama">openly shared</a> <a href="https://huggingface.co/deepseek-ai">weights</a> and their training recipes are described in <a href="https://ai.meta.com/research/publications/the-llama-3-herd-of-models/">technical</a> <a href="https://github.com/deepseek-ai/DeepSeek-R1/blob/main/DeepSeek_R1.pdf">reports</a>, the challenging engineering to involved to train at the necessary infrastructure scale is still hidden between the lines of a handful of papers and complex training frameworks. This ~~long blog post~~ open-source book is here to open this black box!</p>
165
 
 
332
  </ol>
333
 
334
  <p>It looks generally like this: </p>
335
+ <div class="svg-container" id="svg-container">
336
+ </div>
337
+ <div class="info" id="info">Hover over the network elements to see their details</div>
338
+ <script>
339
+ // Load the SVG file (adjust the path if needed)
340
+ loadSVG('../assets/svg/figure-01.svg');
341
+
342
+ // Set up event listeners to display a description of the hovered element
343
+ const svgContainer = document.getElementById('svg-container');
344
+ svgContainer.addEventListener('mouseover', function(event) {
345
+ const target = event.target;
346
+ if (target.tagName.toLowerCase() === 'path' && target.hasAttribute('data-element-id')) {
347
+ const elementId = target.getAttribute('data-element-id');
348
+ const elementType = target.getAttribute('data-element-type');
349
+ const descriptions = {
350
+ layer: 'Neural Network Layer',
351
+ gradient: 'Gradient Update Layer',
352
+ forward: 'Forward Pass Connection',
353
+ backward: 'Backward Pass Connection',
354
+ optimization: 'Optimization Step'
355
+ };
356
+ const description = descriptions[elementType] || elementType;
357
+ document.getElementById('info').textContent = `Hovering over: ${description} (${elementId})`;
358
+ }
359
+ });
360
+
361
+ svgContainer.addEventListener('mouseout', function() {
362
+ document.getElementById('info').textContent = 'Hover over the network elements to see their details';
363
+ });
364
+
365
+ </script>
366
 
367
  <aside>As we’ll see later, these steps may be repeated or intertwined but for now we’ll start simple.</aside>
368
 
 
1712
  }</pre>
1713
  </d-appendix>
1714
 
1715
+
1716
+ <script>
1717
  const article = document.querySelector('d-article');
1718
  const toc = document.querySelector('d-contents');
1719
  if (toc) {
src/distill.js CHANGED
@@ -1369,7 +1369,7 @@ ${math}
1369
 
1370
  var byline = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n";
1371
 
1372
- var article = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 1em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n";
1373
 
1374
  var title = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n";
1375
 
 
1369
 
1370
  var byline = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n";
1371
 
1372
+ var article = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 0.2em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n";
1373
 
1374
  var title = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n";
1375