escience_theme 0.1.0 → 0.3.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.
package/README.md CHANGED
@@ -2,23 +2,145 @@
2
2
 
3
3
  This plugin applies the [eScience Center](https://www.esciencecenter.nl/) Theme to reveal.js.
4
4
 
5
+ The package has two parts:
6
+
7
+ - `escience_theme`: the reveal.js plugin. It adds the decorations (logo,
8
+ overlays, flags, panes) and switches them per slide based on `data-state`.
9
+ - `escience_theme/escience.css`: the styles. The plugin does not inject CSS
10
+ itself, so this stylesheet has to be loaded alongside it.
11
+
5
12
  ## Setup
6
13
 
7
- You can use the plugin as an ES module:
14
+ Works with reveal.js 5 and 6 (peer dependency). Load reveal.js's own black
15
+ theme and monokai highlight theme first, then the eScience styles.
16
+
17
+ reveal.js 6:
18
+
19
+ ```js
20
+ import Reveal from 'reveal.js';
21
+ import Highlight from 'reveal.js/plugin/highlight';
22
+ import Escience from 'escience_theme';
23
+
24
+ import 'reveal.js/reveal.css';
25
+ import 'reveal.js/theme/black.css';
26
+ import 'reveal.js/plugin/highlight/monokai.css';
27
+ import 'escience_theme/escience.css';
28
+
29
+ new Reveal({ plugins: [Highlight, Escience] }).initialize();
30
+ ```
31
+
32
+ reveal.js 5 uses different paths for the same files:
33
+
34
+ ```js
35
+ import Highlight from 'reveal.js/plugin/highlight/highlight.esm.js';
36
+ import 'reveal.js/dist/reveal.css';
37
+ import 'reveal.js/dist/theme/black.css';
38
+ import 'reveal.js/plugin/highlight/monokai.css';
39
+ ```
40
+
41
+ The CSS imports assume a bundler (Vite, webpack). Without one, use
42
+ `<link rel="stylesheet">` tags in the same order.
43
+
44
+ ## Slide states
45
+
46
+ Set the look of a slide with `data-state`, e.g. in reveal.js markdown:
47
+
48
+ ```markdown
49
+ <!-- .slide: data-state="standard" -->
50
+ ```
51
+
52
+ `data-state` is a space-separated list of words. Presets: `standard`,
53
+ `title`, `two_pane`, `about`, `keepintouch` (or `touch`). Single decorations
54
+ can be combined freely with them and with each other: `white_overlay`,
55
+ `blue_overlay`, `purple_overlay`, `black_overlay`, `logo`, `yellow_flag`,
56
+ `yellow_strip`, `blue_pane_left`, `blue_pane_right`, `touch_pane`,
57
+ `purple_half_circle_top`, `purple_half_circle_bottom`, `purple_strip_bottom`,
58
+ `yellow_half_strip`, `purple_blob`, `right_e_top`, `right_e_bottom`, and
59
+ `clear_background` (moves overlays and panes away, e.g. for an interactive
60
+ background iframe). A slide without `data-state` shows no decorations.
61
+
62
+ A `<footer>` element in a slide is shown in a blue strip at the bottom right.
63
+
64
+ A number from 0 to 10 sets the overlay opacity in tenths: `standard 6` lets a
65
+ background image show through, `standard 10` is opaque. Without a number the
66
+ overlay is opaque, unless the slide has a background image, video or iframe
67
+ (`data-background-image`, `-video`, `-iframe`); then it is 0.8, so the
68
+ background stays faintly visible.
69
+
70
+ ## Layout classes
71
+
72
+ For use inside slides, e.g. as HTML in reveal.js markdown.
73
+
74
+ **`.columns`** lays its children out in a grid: two equal columns by default,
75
+ or any `grid-template-columns` value in `--columns`. Further children wrap
76
+ into new rows; `--gap` sets the gap. reveal.js's own `.items-center`,
77
+ `.items-start` etc. align the columns vertically.
78
+
79
+ ```html
80
+ <div class="columns items-center" style="--columns: 7fr 3fr">
81
+ <div>text</div>
82
+ <img src="photo.jpg">
83
+ </div>
84
+ ```
85
+
86
+ **`.card`** is a padded light-gray box with dark text. `.card.bordered` has a
87
+ border only and keeps the slide's colours; `.card.highlight` has a blue
88
+ border. A card inside a filled card is white.
89
+
90
+ **`.stepper`** shows steps one by one. Its `.step` elements are the steps: the
91
+ first one plain, the later ones fragments. The current step (the last one
92
+ shown; the plugin marks it with `.current-step`) gets a blue border if it has
93
+ a border, e.g. as `.step.card`, and only
94
+ its `.detail` is displayed: the `.detail` right after the step, or one inside
95
+ it. `.stepper.preview` shows upcoming steps faded instead of hidden.
96
+ `--columns` and `--gap` on the stepper apply to its `.columns` rows.
8
97
 
9
98
  ```html
10
- <script type="module">
11
- import Reveal from './dist/reveal.esm.js';
12
- import Escience from './plugin/escience/escience_5.1.0.esm.js';
13
-
14
- Reveal.initialize({
15
- // ...
16
- plugins: [ Escience ],
17
- // ...
18
- });
19
- </script>
99
+ <div class="stepper" style="--columns: 7em repeat(2, 1fr)">
100
+ <div class="step card columns"><strong>Create</strong><span>Generate</span><span>Summarize</span></div>
101
+ <div class="detail columns"><em>e.g.</em><span>Text, code</span><span>Papers</span></div>
102
+ <div class="step card columns fragment"><strong>Find</strong><span>Search</span><span>Predict</span></div>
103
+ <div class="detail columns"><em>e.g.</em><span>Documents</span><span>Outcomes</span></div>
104
+ </div>
20
105
  ```
21
106
 
107
+ ## Printing
108
+
109
+ Decks print with reveal.js's print view (`?print-pdf` in the URL, then print
110
+ to PDF from the browser). Every page gets the decorations of its own slide.
111
+ The overview (Esc) shows every slide with its decorations as well.
112
+
113
+ ## Development
114
+
115
+ ```sh
116
+ npm install
117
+ npm test
118
+ ```
119
+
120
+ `npm test` renders `test/fixture/deck.html` in Chromium (`CHROME` overrides
121
+ the executable), screenshots every slide and overview mode, and compares them
122
+ with the theme at `BASELINE_REF` (default `v0.2.0`; a revision before 0.2.0,
123
+ such as `1ef0fd0`, loads the old single-file plugin). Each slide must match
124
+ pixel by pixel, and the computed typography (font, weight, style, text
125
+ transform) of every element on it must match too, as must that of the speaker
126
+ notes panel.
127
+ Screenshots and diffs land in `test/output/`. Set `MAX_DIFF` to allow a number
128
+ of differing pixels per screenshot.
129
+
130
+ Every stepper is walked fragment by fragment (exactly the last shown step is
131
+ current, only its details are displayed), and in the overview every thumbnail
132
+ must carry its slide's decorations, removed again when the overview closes.
133
+ A second pass opens the deck in print view and checks that every page shows
134
+ the decorations, logo, link colours and background classes its slide shows on
135
+ screen, and that no decoration covers the slide's heading.
136
+
137
+ Fixture slides can declare what they expect from the current theme:
138
+ `data-expect-opacity` (overlay opacity), `data-expect-selection` (text
139
+ selection colours), `data-fonts-differ` (elements whose typography may differ
140
+ from the baseline) and `data-baseline-differs` (left out of both comparisons because the slide
141
+ changes on purpose). `data-overview-differs` on `.reveal` leaves the overview
142
+ screenshot out of the pixel comparison.
143
+
22
144
  ## License
23
145
 
24
146
  Apache-2.0 licensed
package/escience.css ADDED
@@ -0,0 +1,448 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Assistant:wght@200..800&family=Fira+Code:wght@300..700&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap');
2
+ @import url('https://fonts.googleapis.com/icon?family=Material+Icons');
3
+ /*********************************************
4
+ * COLORS
5
+ *********************************************/
6
+
7
+ :root {
8
+ --nlesc-blue: #009DDD;
9
+ --nlesc-purple: #380339;
10
+ --nlesc-yellow: #FFB213;
11
+ --light-gray: #D8D8D8;
12
+ --dark-gray: #2b2b2b;
13
+ --gray-transparent: rgba(128, 128, 128, .5);
14
+
15
+ --link-color: var(--nlesc-purple);
16
+ --link-color-hover: var(--nlesc-yellow);
17
+
18
+ /* reveal.js theme variables (black.css reads these; this file loads after it) */
19
+ --r-main-font: "Assistant", sans-serif;
20
+ --r-heading-font: "Nunito", sans-serif;
21
+ --r-heading-font-weight: 700;
22
+ --r-heading-text-transform: none;
23
+ --r-code-font: "Fira Code", monospace;
24
+ --r-selection-color: #fff;
25
+ --r-selection-background-color: var(--nlesc-purple);
26
+ }
27
+
28
+ /*********************************************
29
+ * GLOBAL STYLES
30
+ *
31
+ * Fonts are set through the --r-* variables above, which the reveal.js
32
+ * theme applies to body text, headings and code. Slide content can
33
+ * override font and weight with ordinary CSS.
34
+ * Rules are scoped to .reveal so that the page around an embedded deck
35
+ * (e.g. a NEBULA site) keeps its own typography. :where() gives a rule
36
+ * the specificity of its bare element selector, so class rules such as
37
+ * .hljs (code highlighting) take precedence.
38
+ *********************************************/
39
+
40
+ .reveal {
41
+ font-size: 36px; } /* make stuff smaller */
42
+
43
+ /* reveal.css gives these Helvetica; keep them in the theme font */
44
+ .reveal .speaker-notes,
45
+ .reveal .slide-number,
46
+ .reveal .r-overlay {
47
+ font-family: var(--r-main-font);
48
+ }
49
+
50
+ .reveal h4, .reveal h5, .reveal h6 {
51
+ font-family: var(--r-main-font);
52
+ }
53
+
54
+ :where(.reveal) code {
55
+ font-weight: 500;
56
+ background-color: var(--gray-transparent);
57
+ }
58
+
59
+
60
+ /*********************************************
61
+ * CUSTOM COLORS
62
+ *********************************************/
63
+ .primary { color: var(--nlesc-blue) !important; }
64
+ .secondary { color: var(--nlesc-purple) !important; }
65
+ .tertiary { color: var(--light-gray) !important; }
66
+
67
+ /*********************************************
68
+ * LINKS
69
+ *********************************************/
70
+ .reveal a {
71
+ color: var(--link-color); }
72
+
73
+ .reveal a:hover {
74
+ color: var(--link-color-hover); }
75
+
76
+ /* escience.js marks each slide with the background its links sit on */
77
+ .reveal section[data-escience-links="on-light"] {
78
+ --link-color: var(--nlesc-blue);
79
+ --link-color-hover: var(--nlesc-yellow); }
80
+
81
+ .reveal section[data-escience-links="on-dark"] {
82
+ --link-color: var(--nlesc-yellow);
83
+ --link-color-hover: var(--nlesc-blue); }
84
+
85
+ .reveal section[data-escience-links="on-blue"] {
86
+ --link-color: var(--nlesc-yellow);
87
+ --link-color-hover: var(--nlesc-purple); }
88
+
89
+ .reveal .roll span:after {
90
+ color: #fff;
91
+ background: var(--nlesc-blue); }
92
+
93
+ /*********************************************
94
+ * IMAGES
95
+ *********************************************/
96
+ .reveal section img { /* undo stupid img frames */
97
+ background: none;
98
+ border: none;
99
+ box-shadow: none;
100
+ }
101
+
102
+ .reveal a:hover img {
103
+ border-color: var(--nlesc-blue); }
104
+
105
+ /*********************************************
106
+ * HIGHLIGHT COLORS
107
+ *********************************************/
108
+
109
+ .reveal .slides section .fragment.highlight-blue.visible {
110
+ color: var(--nlesc-blue); }
111
+
112
+ /*********************************************
113
+ * NAVIGATION CONTROLS
114
+ *********************************************/
115
+ .reveal .controls {
116
+ color: var(--nlesc-yellow); }
117
+
118
+ /*********************************************
119
+ * PROGRESS BAR
120
+ *********************************************/
121
+ .reveal .progress {
122
+ background: rgba(0, 0, 0, 0.2);
123
+ color: var(--nlesc-yellow); }
124
+
125
+ .reveal .progress span {
126
+ background: var(--nlesc-yellow);
127
+ transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); }
128
+
129
+ /*********************************************
130
+ * LAYOUT
131
+ *
132
+ * .columns grid, two equal columns unless --columns gives a
133
+ * grid-template-columns value ("7fr 3fr", "repeat(3, 1fr)");
134
+ * further children wrap into new rows. --gap sets the gap.
135
+ * Combine with reveal.js's .items-center etc. for alignment.
136
+ * .card padded box in light gray, with even spacing between its
137
+ * children; .bordered: border only; .highlight: blue border.
138
+ * A card inside a filled card is white.
139
+ * .stepper steps that appear one by one: .step elements, the first one
140
+ * plain, later ones fragments. The current step (the last one
141
+ * shown, marked .current-step by escience.js) gets a blue
142
+ * border if it has one (e.g. .step.card), and
143
+ * only its .detail is shown: the .detail right after the step or
144
+ * inside it. When the steps are cards, the stepper's other rows
145
+ * line up with the cards' content. .preview shows upcoming steps
146
+ * faded instead of hidden. --columns and --gap on the stepper
147
+ * apply to its .columns rows.
148
+ *
149
+ * --columns and --gap apply only to the element they are set on, so a
150
+ * nested .columns starts from the defaults again.
151
+ *********************************************/
152
+ @property --columns { syntax: "*"; inherits: false; }
153
+ @property --gap { syntax: "*"; inherits: false; }
154
+
155
+ .reveal .columns {
156
+ display: grid;
157
+ grid-template-columns: var(--columns, repeat(2, minmax(0, 1fr)));
158
+ gap: var(--gap, .5em);
159
+ }
160
+
161
+ .reveal .card {
162
+ padding: .4em .6em; /* the stepper's row alignment below uses .6em */
163
+ border: 2px solid var(--light-gray);
164
+ border-radius: 8px;
165
+ background-color: var(--light-gray);
166
+ color: #222;
167
+ text-align: start;
168
+ --r-heading-color: #222;
169
+ --link-color: var(--nlesc-blue);
170
+ --link-color-hover: var(--nlesc-purple);
171
+ }
172
+ .reveal .card > * { margin-block: 0; }
173
+ .reveal .card:not(.columns) > * + * { margin-top: .4em; }
174
+ .reveal .card:not(.bordered) .card:not(.bordered) {
175
+ border-color: white;
176
+ background-color: white;
177
+ }
178
+ .reveal .card.bordered {
179
+ background-color: transparent;
180
+ color: inherit;
181
+ --r-heading-color: inherit;
182
+ --link-color: inherit;
183
+ --link-color-hover: inherit;
184
+ }
185
+ .reveal .card.highlight { border-color: var(--nlesc-blue); }
186
+
187
+ .reveal .stepper { text-align: start; }
188
+ .reveal .stepper > * { --columns: inherit; --gap: inherit; }
189
+ .reveal .stepper > .step.card { margin-block: .4em; }
190
+ .reveal .stepper:has(> .step.card) > :not(.step) { padding-inline: calc(.6em + 2px); }
191
+
192
+ /* escience.js marks the current step with .current-step */
193
+ .reveal .stepper .step.current-step { border-color: var(--nlesc-blue); }
194
+ .reveal .stepper .step:not(.current-step) + .detail,
195
+ .reveal .stepper .step:not(.current-step) .detail {
196
+ display: none;
197
+ }
198
+ .reveal .slides section .stepper.preview .step.fragment:not(.visible) {
199
+ opacity: .35;
200
+ visibility: inherit;
201
+ }
202
+
203
+ /*********************************************
204
+ * FOOTER
205
+ *********************************************/
206
+
207
+ .slides .footer {
208
+ font-size: x-small !important;
209
+ width: 100%;
210
+ clear: both;
211
+ /* padding: 50px 0 0 0;*/
212
+ }
213
+
214
+ /*********************************************
215
+ * PRINT BACKGROUND
216
+ *********************************************/
217
+ @media print {
218
+ .backgrounds {
219
+ background-color: var(--dark-gray); } }
220
+
221
+ /*********************************************
222
+ * DECORATIONS
223
+ *
224
+ * escience.js inserts one .escience-decorations root per deck (per page in
225
+ * print view) and sets on it:
226
+ * data-show space-separated names of the decorations to show
227
+ * data-logo color | white | part-white
228
+ * --escience-overlay-opacity
229
+ * Hidden decorations sit outside the slide; shown ones slide or fade in.
230
+ * The root has no box of its own, so the decorations are positioned
231
+ * against .reveal (or the print page background).
232
+ *********************************************/
233
+ .escience-decorations { display: contents; }
234
+
235
+ .escience-decorations > * { position: absolute; z-index: 2; }
236
+
237
+ /* Full-size overlays, under everything else */
238
+ .escience-purple-overlay,
239
+ .escience-blue-overlay,
240
+ .escience-white-overlay,
241
+ .escience-black-overlay {
242
+ inset: 0;
243
+ z-index: 1;
244
+ opacity: 0;
245
+ transition: opacity 1s; }
246
+ .escience-purple-overlay { background-color: var(--nlesc-purple); }
247
+ .escience-blue-overlay { background-color: var(--nlesc-blue); }
248
+ .escience-white-overlay { background-color: white; }
249
+ .escience-black-overlay { background-color: black; }
250
+
251
+ /* Panes */
252
+ .escience-blue-pane-left,
253
+ .escience-blue-pane-right,
254
+ .escience-touch-pane {
255
+ top: 0;
256
+ bottom: 0;
257
+ opacity: 0;
258
+ transition: opacity 1s; }
259
+ .escience-blue-pane-left { left: 0; right: 50%; background-color: var(--nlesc-blue); }
260
+ .escience-blue-pane-right { left: 50%; right: 0; background-color: var(--nlesc-blue); }
261
+ .escience-touch-pane {
262
+ left: 0;
263
+ right: 66.6%;
264
+ display: flex;
265
+ align-items: center;
266
+ justify-content: center;
267
+ background-color: white; }
268
+ .escience-touch-pane h1 { color: black; text-align: left; }
269
+
270
+ /* Logo, top left; data-logo picks the variant */
271
+ .escience-logo {
272
+ top: 1.5vh;
273
+ left: -12vw;
274
+ opacity: 0;
275
+ transition: opacity 1s, left 1s; }
276
+ .escience-logo svg { width: 12vw; }
277
+
278
+ /* Shapes */
279
+ .escience-yellow-strip {
280
+ left: -10vw;
281
+ bottom: 0;
282
+ width: 10vw;
283
+ height: 70vh;
284
+ border-radius: 10vw 10vw 0 0;
285
+ background-color: var(--nlesc-yellow);
286
+ transition: left 1s; }
287
+
288
+ .escience-yellow-flag {
289
+ left: -10vh;
290
+ bottom: 5vh;
291
+ width: 10vh;
292
+ height: 12vh;
293
+ border-radius: 0 6vh 6vh 0;
294
+ z-index: 3;
295
+ background-color: var(--nlesc-yellow);
296
+ transition: left 1s, bottom 1s; }
297
+ .escience-yellow-flag svg { position: absolute; height: 10vh; margin: 1vh 0; }
298
+
299
+ .escience-purple-half-circle-top {
300
+ left: 0;
301
+ top: -17vw;
302
+ width: 34vw;
303
+ height: 17vw;
304
+ border-radius: 0 0 20vw 20vw;
305
+ background-color: var(--nlesc-purple);
306
+ transition: top 1s; }
307
+
308
+ .escience-purple-half-circle-bottom {
309
+ left: 0;
310
+ bottom: -10vw;
311
+ width: 20vw;
312
+ height: 10vw;
313
+ border-radius: 20vw 20vw 0 0;
314
+ background-color: var(--nlesc-purple);
315
+ transition: bottom 1s; }
316
+ .escience-purple-half-circle-bottom svg { position: absolute; bottom: 2vw; left: 6vw; width: 8vw; }
317
+
318
+ .escience-purple-strip-bottom {
319
+ right: calc(50% + 17vw);
320
+ bottom: -10vw;
321
+ width: 16vw;
322
+ height: 10vw;
323
+ border-radius: 20vw 20vw 0 0;
324
+ background-color: var(--nlesc-purple);
325
+ transition: bottom 1s; }
326
+
327
+ .escience-yellow-half-strip {
328
+ right: 50%;
329
+ bottom: -25vw;
330
+ width: 17vw;
331
+ height: 25vw;
332
+ border-radius: 20vw 0 0 0;
333
+ background-color: var(--nlesc-yellow);
334
+ transition: bottom 1s; }
335
+
336
+ .escience-purple-blob {
337
+ /* top right: a long and a short drop, joined by a concave curve */
338
+ right: 0;
339
+ top: -50vh;
340
+ width: 10vw;
341
+ height: 50vh;
342
+ border-radius: 0 0 5vw 5vw;
343
+ background-color: var(--nlesc-purple);
344
+ transition: top 1s; }
345
+ .escience-purple-blob::before,
346
+ .escience-purple-blob::after {
347
+ content: "";
348
+ position: absolute;
349
+ right: calc(100% - 1px); /* overlap the long drop by 1px, so no seam shows */
350
+ background-color: var(--nlesc-purple); }
351
+ .escience-purple-blob::before {
352
+ /* the short drop; its inner corner continues into the curve */
353
+ top: 0;
354
+ width: calc(10vw + 1px);
355
+ height: 25vh;
356
+ border-bottom-left-radius: 5vw; }
357
+ .escience-purple-blob::after {
358
+ /* the curve: a 5vw square below the short drop, cut out around its
359
+ bottom left corner; the 1px gradient step smooths the edge */
360
+ top: calc(25vh - 1px);
361
+ width: calc(5vw + 1px);
362
+ height: calc(5vw + 1px);
363
+ background: radial-gradient(circle at 0 100%, transparent 5vw, var(--nlesc-purple) calc(5vw + 1px)); }
364
+
365
+ .escience-right-e {
366
+ top: 10vh;
367
+ right: -4vw;
368
+ width: 4vw;
369
+ z-index: 3;
370
+ transition: right 1s, top 1s; }
371
+
372
+ /* Footer strip, bottom right; holds the slide's <footer> content */
373
+ .escience-blue-strip {
374
+ right: 0;
375
+ bottom: 0;
376
+ border-radius: 20vw 0 0 0;
377
+ background-color: var(--nlesc-blue);
378
+ transform: translateX(100%);
379
+ transition: transform 1s; }
380
+ .escience-footer {
381
+ margin: 1vw 1vw 1vw 3vw;
382
+ text-align: right;
383
+ line-height: 130%; }
384
+ .reveal .escience-footer a { color: white; text-decoration: underline; }
385
+ .reveal .escience-footer a:hover { color: var(--nlesc-purple); }
386
+
387
+ /* Shown */
388
+ [data-show~="purple_overlay"] .escience-purple-overlay,
389
+ [data-show~="blue_overlay"] .escience-blue-overlay,
390
+ [data-show~="white_overlay"] .escience-white-overlay,
391
+ [data-show~="black_overlay"] .escience-black-overlay {
392
+ opacity: var(--escience-overlay-opacity, 1); }
393
+
394
+ [data-show~="blue_pane_left"] .escience-blue-pane-left,
395
+ [data-show~="blue_pane_right"] .escience-blue-pane-right,
396
+ [data-show~="touch_pane"] .escience-touch-pane { opacity: 1; }
397
+
398
+ [data-show~="logo"] .escience-logo { left: 3vw; }
399
+ [data-logo="color"] .escience-logo-color,
400
+ [data-logo="white"] .escience-logo-white,
401
+ [data-logo="part-white"] .escience-logo-part-white { opacity: 1; }
402
+
403
+ [data-show~="yellow_strip"] .escience-yellow-strip { left: 0; }
404
+ [data-show~="yellow_flag"] .escience-yellow-flag { left: 0; }
405
+ [data-show~="purple_half_circle_bottom"] .escience-yellow-flag { bottom: 20vh; }
406
+ [data-show~="purple_half_circle_top"] .escience-purple-half-circle-top { top: 0; }
407
+ [data-show~="purple_half_circle_bottom"] .escience-purple-half-circle-bottom { bottom: 0; }
408
+ [data-show~="purple_strip_bottom"] .escience-purple-strip-bottom { bottom: 0; }
409
+ [data-show~="yellow_half_strip"] .escience-yellow-half-strip { bottom: 0; }
410
+ [data-show~="purple_blob"] .escience-purple-blob { top: 0; }
411
+ [data-show~="right_e_top"] .escience-right-e { top: 10vh; right: 0; }
412
+ [data-show~="right_e_bottom"] .escience-right-e { top: 60vh; right: 0; }
413
+ [data-show~="footer"] .escience-blue-strip { transform: none; }
414
+
415
+ /* clear_background moves overlays and panes away, e.g. for an interactive
416
+ background iframe */
417
+ [data-show~="clear_background"] :is(.escience-purple-overlay, .escience-blue-overlay,
418
+ .escience-white-overlay, .escience-black-overlay, .escience-blue-pane-left,
419
+ .escience-blue-pane-right, .escience-touch-pane) {
420
+ transform: translateY(100vh); }
421
+
422
+ /* overview: each thumbnail's background carries its own decorations, shown
423
+ in their final state and clipped to the thumbnail */
424
+ .reveal.overview .backgrounds .slide-background { overflow: hidden; }
425
+ .reveal.overview .backgrounds .escience-decorations > * { transition: none; }
426
+
427
+ /*********************************************
428
+ * SLIDE CONTENT ABOVE DECORATIONS
429
+ *********************************************/
430
+ /* print view: each page holds its background (with decorations), slide,
431
+ notes and slide number side by side */
432
+ html.reveal-print .reveal .pdf-page > :is(section, .speaker-notes-pdf, .slide-number-pdf) {
433
+ z-index: 10;
434
+ }
435
+
436
+ .slides {
437
+ /* puts the slide content above overlays and decorations*/
438
+ z-index: 10 !important;
439
+ }
440
+
441
+ .speaker-notes {
442
+ /* puts the slide content above overlays and decorations*/
443
+ z-index: 3 !important;
444
+ }
445
+
446
+ :where(.reveal) footer {
447
+ display: none !important;
448
+ }