返回 reveal.js
reveal.scss
根目录 / css / reveal.scss
1 /**
2 * reveal.js
3 * http://revealjs.com
4 * MIT licensed
5 *
6 * Copyright (C) Hakim El Hattab, https://hakim.se
7 */
8
9 @use 'sass:math';
10 @use 'sass:meta';
11 @use 'layout';
12
13 /*********************************************
14 * GLOBAL STYLES
15 *********************************************/
16
17 html.reveal-full-page {
18 width: 100%;
19 height: 100%;
20 height: 100vh;
21 height: calc(var(--vh, 1vh) * 100);
22 height: 100dvh;
23 overflow: hidden;
24 }
25
26 .reveal-viewport {
27 height: 100%;
28 overflow: hidden;
29 position: relative;
30 line-height: 1;
31 margin: 0;
32
33 background-color: #fff;
34 color: #000;
35
36 --r-controls-spacing: 12px;
37 --r-overlay-header-height: 40px;
38 --r-overlay-margin: 0px;
39 --r-overlay-padding: 6px;
40 --r-overlay-gap: 5px;
41 }
42
43 @media screen and (max-width: 1024px), (max-height: 768px) {
44 .reveal-viewport {
45 --r-overlay-header-height: 26px;
46 }
47 }
48
49 // Force the presentation to cover the full viewport when we
50 // enter fullscreen mode. Fixes sizing issues in Safari.
51 .reveal-viewport:fullscreen {
52 top: 0 !important;
53 left: 0 !important;
54 width: 100% !important;
55 height: 100% !important;
56 transform: none !important;
57 }
58
59 /*********************************************
60 * VIEW FRAGMENTS
61 *********************************************/
62
63 .reveal .fragment {
64 transition: all 0.2s ease;
65
66 &:not(.custom) {
67 opacity: 0;
68 visibility: hidden;
69 will-change: opacity;
70 }
71
72 &.visible {
73 opacity: 1;
74 visibility: inherit;
75 }
76
77 &.disabled {
78 transition: none;
79 }
80 }
81
82 .reveal .fragment.grow {
83 opacity: 1;
84 visibility: inherit;
85
86 &.visible {
87 transform: scale(1.3);
88 }
89 }
90
91 .reveal .fragment.shrink {
92 opacity: 1;
93 visibility: inherit;
94
95 &.visible {
96 transform: scale(0.7);
97 }
98 }
99
100 .reveal .fragment.zoom-in {
101 transform: scale(0.1);
102
103 &.visible {
104 transform: none;
105 }
106 }
107
108 .reveal .fragment.fade-out {
109 opacity: 1;
110 visibility: inherit;
111
112 &.visible {
113 opacity: 0;
114 visibility: hidden;
115 }
116 }
117
118 .reveal .fragment.semi-fade-out {
119 opacity: 1;
120 visibility: inherit;
121
122 &.visible {
123 opacity: 0.5;
124 visibility: inherit;
125 }
126 }
127
128 .reveal .fragment.strike {
129 opacity: 1;
130 visibility: inherit;
131
132 &.visible {
133 text-decoration: line-through;
134 }
135 }
136
137 .reveal .fragment.fade-up {
138 transform: translate(0, 40px);
139
140 &.visible {
141 transform: translate(0, 0);
142 }
143 }
144
145 .reveal .fragment.fade-down {
146 transform: translate(0, -40px);
147
148 &.visible {
149 transform: translate(0, 0);
150 }
151 }
152
153 .reveal .fragment.fade-right {
154 transform: translate(-40px, 0);
155
156 &.visible {
157 transform: translate(0, 0);
158 }
159 }
160
161 .reveal .fragment.fade-left {
162 transform: translate(40px, 0);
163
164 &.visible {
165 transform: translate(0, 0);
166 }
167 }
168
169 .reveal .fragment.fade-in-then-out,
170 .reveal .fragment.current-visible {
171 opacity: 0;
172 visibility: hidden;
173
174 &.current-fragment {
175 opacity: 1;
176 visibility: inherit;
177 }
178 }
179
180 .reveal .fragment.fade-in-then-semi-out {
181 opacity: 0;
182 visibility: hidden;
183
184 &.visible {
185 opacity: 0.5;
186 visibility: inherit;
187 }
188
189 &.current-fragment {
190 opacity: 1;
191 visibility: inherit;
192 }
193 }
194
195 .reveal .fragment.highlight-red,
196 .reveal .fragment.highlight-current-red,
197 .reveal .fragment.highlight-green,
198 .reveal .fragment.highlight-current-green,
199 .reveal .fragment.highlight-blue,
200 .reveal .fragment.highlight-current-blue {
201 opacity: 1;
202 visibility: inherit;
203 }
204 .reveal .fragment.highlight-red.visible {
205 color: #ff2c2d;
206 }
207 .reveal .fragment.highlight-green.visible {
208 color: #17ff2e;
209 }
210 .reveal .fragment.highlight-blue.visible {
211 color: #1b91ff;
212 }
213
214 .reveal .fragment.highlight-current-red.current-fragment {
215 color: #ff2c2d;
216 }
217 .reveal .fragment.highlight-current-green.current-fragment {
218 color: #17ff2e;
219 }
220 .reveal .fragment.highlight-current-blue.current-fragment {
221 color: #1b91ff;
222 }
223
224 /*********************************************
225 * DEFAULT ELEMENT STYLES
226 *********************************************/
227
228 /* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */
229 .reveal:after {
230 content: '';
231 font-style: italic;
232 }
233
234 .reveal iframe {
235 z-index: 1;
236 }
237
238 /** Prevents layering issues in certain browser/transition combinations */
239 .reveal a {
240 position: relative;
241 }
242
243 /*********************************************
244 * CONTROLS
245 *********************************************/
246
247 @keyframes bounce-right {
248 0%,
249 10%,
250 25%,
251 40%,
252 50% {
253 transform: translateX(0);
254 }
255 20% {
256 transform: translateX(10px);
257 }
258 30% {
259 transform: translateX(-5px);
260 }
261 }
262
263 @keyframes bounce-left {
264 0%,
265 10%,
266 25%,
267 40%,
268 50% {
269 transform: translateX(0);
270 }
271 20% {
272 transform: translateX(-10px);
273 }
274 30% {
275 transform: translateX(5px);
276 }
277 }
278
279 @keyframes bounce-down {
280 0%,
281 10%,
282 25%,
283 40%,
284 50% {
285 transform: translateY(0);
286 }
287 20% {
288 transform: translateY(10px);
289 }
290 30% {
291 transform: translateY(-5px);
292 }
293 }
294
295 $controlArrowSize: 3.6em;
296 $controlArrowSpacing: 1.4em;
297 $controlArrowLength: 2.6em;
298 $controlArrowThickness: 0.5em;
299 $controlsArrowAngle: 45deg;
300 $controlsArrowAngleHover: 40deg;
301 $controlsArrowAngleActive: 36deg;
302
303 @mixin controlsArrowTransform($angle) {
304 &:before {
305 transform: translateX(($controlArrowSize - $controlArrowLength) * 0.5)
306 translateY(($controlArrowSize - $controlArrowThickness) * 0.5) rotate($angle);
307 }
308
309 &:after {
310 transform: translateX(($controlArrowSize - $controlArrowLength) * 0.5)
311 translateY(($controlArrowSize - $controlArrowThickness) * 0.5) rotate(-$angle);
312 }
313 }
314
315 .reveal .controls {
316 display: none;
317 position: absolute;
318 top: auto;
319 bottom: var(--r-controls-spacing);
320 right: var(--r-controls-spacing);
321 left: auto;
322 z-index: 11;
323 color: #000;
324 pointer-events: none;
325 font-size: 10px;
326
327 button {
328 position: absolute;
329 padding: 0;
330 background-color: transparent;
331 border: 0;
332 outline: 0;
333 cursor: pointer;
334 color: currentColor;
335 transform: scale(0.9999);
336 transition:
337 color 0.2s ease,
338 opacity 0.2s ease,
339 transform 0.2s ease;
340 z-index: 2; // above slides
341 pointer-events: auto;
342 font-size: inherit;
343
344 visibility: hidden;
345 opacity: 0;
346
347 -webkit-appearance: none;
348 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
349 }
350
351 .controls-arrow:before,
352 .controls-arrow:after {
353 content: '';
354 position: absolute;
355 top: 0;
356 left: 0;
357 width: $controlArrowLength;
358 height: $controlArrowThickness;
359 border-radius: $controlArrowThickness * 0.5;
360 background-color: currentColor;
361
362 transition:
363 all 0.15s ease,
364 background-color 0.8s ease;
365 transform-origin: math.div(math.floor(($controlArrowThickness * 0.5) * 10), 10) 50%;
366 will-change: transform;
367 }
368
369 .controls-arrow {
370 position: relative;
371 width: $controlArrowSize;
372 height: $controlArrowSize;
373
374 @include controlsArrowTransform($controlsArrowAngle);
375
376 &:hover {
377 @include controlsArrowTransform($controlsArrowAngleHover);
378 }
379
380 &:active {
381 @include controlsArrowTransform($controlsArrowAngleActive);
382 }
383 }
384
385 .navigate-left {
386 right: $controlArrowSize + $controlArrowSpacing * 2;
387 bottom: $controlArrowSpacing + $controlArrowSize * 0.5;
388 transform: translateX(-10px);
389
390 &.highlight {
391 animation: bounce-left 2s 50 both ease-out;
392 }
393 }
394
395 .navigate-right {
396 right: 0;
397 bottom: $controlArrowSpacing + $controlArrowSize * 0.5;
398 transform: translateX(10px);
399
400 .controls-arrow {
401 transform: rotate(180deg);
402 }
403
404 &.highlight {
405 animation: bounce-right 2s 50 both ease-out;
406 }
407 }
408
409 .navigate-up {
410 right: $controlArrowSpacing + $controlArrowSize * 0.5;
411 bottom: $controlArrowSpacing * 2 + $controlArrowSize;
412 transform: translateY(-10px);
413
414 .controls-arrow {
415 transform: rotate(90deg);
416 }
417 }
418
419 .navigate-down {
420 right: $controlArrowSpacing + $controlArrowSize * 0.5;
421 bottom: -$controlArrowSpacing;
422 padding-bottom: $controlArrowSpacing;
423 transform: translateY(10px);
424
425 .controls-arrow {
426 transform: rotate(-90deg);
427 }
428
429 &.highlight {
430 animation: bounce-down 2s 50 both ease-out;
431 }
432 }
433
434 // Back arrow style: "faded":
435 // Deemphasize backwards navigation arrows in favor of drawing
436 // attention to forwards navigation
437 &[data-controls-back-arrows='faded'] .navigate-up.enabled {
438 opacity: 0.3;
439
440 &:hover {
441 opacity: 1;
442 }
443 }
444
445 // Back arrow style: "hidden":
446 // Never show arrows for backwards navigation
447 &[data-controls-back-arrows='hidden'] .navigate-up.enabled {
448 opacity: 0;
449 visibility: hidden;
450 }
451
452 // Any control button that can be clicked is "enabled"
453 .enabled {
454 visibility: visible;
455 opacity: 0.9;
456 cursor: pointer;
457 transform: none;
458 }
459
460 // Any control button that leads to showing or hiding
461 // a fragment
462 .enabled.fragmented {
463 opacity: 0.5;
464 }
465
466 .enabled:hover,
467 .enabled.fragmented:hover {
468 opacity: 1;
469 }
470 }
471
472 .reveal:not(.rtl) .controls {
473 // Back arrow style: "faded":
474 // Deemphasize left arrow
475 &[data-controls-back-arrows='faded'] .navigate-left.enabled {
476 opacity: 0.3;
477
478 &:hover {
479 opacity: 1;
480 }
481 }
482
483 // Back arrow style: "hidden":
484 // Never show left arrow
485 &[data-controls-back-arrows='hidden'] .navigate-left.enabled {
486 opacity: 0;
487 visibility: hidden;
488 }
489 }
490
491 .reveal.rtl .controls {
492 // Back arrow style: "faded":
493 // Deemphasize right arrow in RTL mode
494 &[data-controls-back-arrows='faded'] .navigate-right.enabled {
495 opacity: 0.3;
496
497 &:hover {
498 opacity: 1;
499 }
500 }
501
502 // Back arrow style: "hidden":
503 // Never show right arrow in RTL mode
504 &[data-controls-back-arrows='hidden'] .navigate-right.enabled {
505 opacity: 0;
506 visibility: hidden;
507 }
508 }
509
510 .reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-up,
511 .reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-down {
512 display: none;
513 }
514
515 // Adjust the layout when there are no vertical slides
516 .reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-left,
517 .reveal:not(.has-vertical-slides) .controls .navigate-left {
518 bottom: $controlArrowSpacing;
519 right: 0.5em + $controlArrowSpacing + $controlArrowSize;
520 }
521
522 .reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-right,
523 .reveal:not(.has-vertical-slides) .controls .navigate-right {
524 bottom: $controlArrowSpacing;
525 right: 0.5em;
526 }
527
528 // Adjust the layout when there are no horizontal slides
529 .reveal:not(.has-horizontal-slides) .controls .navigate-up {
530 right: $controlArrowSpacing;
531 bottom: $controlArrowSpacing + $controlArrowSize;
532 }
533 .reveal:not(.has-horizontal-slides) .controls .navigate-down {
534 right: $controlArrowSpacing;
535 bottom: 0.5em;
536 }
537
538 // Invert arrows based on background color
539 .reveal.has-dark-background .controls {
540 color: #fff;
541 }
542 .reveal.has-light-background .controls {
543 color: #000;
544 }
545
546 // Disable active states on touch devices
547 .reveal.no-hover .controls .controls-arrow:hover,
548 .reveal.no-hover .controls .controls-arrow:active {
549 @include controlsArrowTransform($controlsArrowAngle);
550 }
551
552 // Edge aligned controls layout
553 @media screen and (min-width: 500px) {
554 .reveal-viewport {
555 --r-controls-spacing: 0.8em;
556 }
557
558 .reveal .controls[data-controls-layout='edges'] {
559 & {
560 top: 0;
561 right: 0;
562 bottom: 0;
563 left: 0;
564 }
565
566 .navigate-left,
567 .navigate-right,
568 .navigate-up,
569 .navigate-down {
570 bottom: auto;
571 right: auto;
572 }
573
574 .navigate-left {
575 top: 50%;
576 left: var(--r-controls-spacing);
577 margin-top: -$controlArrowSize * 0.5;
578 }
579
580 .navigate-right {
581 top: 50%;
582 right: var(--r-controls-spacing);
583 margin-top: -$controlArrowSize * 0.5;
584 }
585
586 .navigate-up {
587 top: var(--r-controls-spacing);
588 left: 50%;
589 margin-left: -$controlArrowSize * 0.5;
590 }
591
592 .navigate-down {
593 bottom: calc(var(--r-controls-spacing) - #{$controlArrowSpacing} + 0.3em);
594 left: 50%;
595 margin-left: -$controlArrowSize * 0.5;
596 }
597 }
598 }
599
600 /*********************************************
601 * PROGRESS BAR
602 *********************************************/
603
604 .reveal .progress {
605 position: absolute;
606 display: none;
607 height: 3px;
608 width: 100%;
609 bottom: 0;
610 left: 0;
611 z-index: 10;
612
613 background-color: rgba(0, 0, 0, 0.2);
614 color: #fff;
615 }
616 .reveal .progress:after {
617 content: '';
618 display: block;
619 position: absolute;
620 height: 10px;
621 width: 100%;
622 top: -10px;
623 }
624 .reveal .progress span {
625 display: block;
626 height: 100%;
627 width: 100%;
628
629 background-color: currentColor;
630 transition: transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
631 transform-origin: 0 0;
632 transform: scaleX(0);
633 }
634
635 /*********************************************
636 * SLIDE NUMBER
637 *********************************************/
638
639 .reveal .slide-number {
640 position: absolute;
641 display: block;
642 right: 8px;
643 bottom: 8px;
644 z-index: 31;
645 font-family: Helvetica, sans-serif;
646 font-size: 12px;
647 line-height: 1;
648 color: #fff;
649 background-color: rgba(0, 0, 0, 0.4);
650 padding: 5px;
651 }
652
653 .reveal .slide-number a {
654 color: currentColor;
655 }
656
657 .reveal .slide-number-delimiter {
658 margin: 0 3px;
659 }
660
661 /*********************************************
662 * SLIDES
663 *********************************************/
664
665 .reveal {
666 position: relative;
667 width: 100%;
668 height: 100%;
669 overflow: hidden;
670 touch-action: pinch-zoom;
671 }
672
673 // Swiping on an embedded deck should not block page scrolling...
674 .reveal.embedded {
675 touch-action: pan-y;
676 }
677
678 // ... unless we're on a vertical slide
679 .reveal.embedded.is-vertical-slide {
680 touch-action: none;
681 }
682
683 .reveal .slides {
684 position: absolute;
685 width: 100%;
686 height: 100%;
687 top: 0;
688 right: 0;
689 bottom: 0;
690 left: 0;
691 margin: auto;
692 pointer-events: none;
693
694 overflow: visible;
695 z-index: 1;
696 text-align: center;
697 perspective: 600px;
698 perspective-origin: 50% 40%;
699 }
700
701 .reveal .slides > section {
702 perspective: 600px;
703 }
704
705 .reveal .slides > section,
706 .reveal .slides > section > section {
707 display: none;
708 position: absolute;
709 width: 100%;
710 pointer-events: auto;
711
712 z-index: 10;
713 transform-style: flat;
714 transition:
715 transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985),
716 transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985),
717 visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985),
718 opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
719 }
720
721 /* Global transition speed settings */
722 .reveal[data-transition-speed='fast'] .slides section {
723 transition-duration: 400ms;
724 }
725 .reveal[data-transition-speed='slow'] .slides section {
726 transition-duration: 1200ms;
727 }
728
729 /* Slide-specific transition speed overrides */
730 .reveal .slides section[data-transition-speed='fast'] {
731 transition-duration: 400ms;
732 }
733 .reveal .slides section[data-transition-speed='slow'] {
734 transition-duration: 1200ms;
735 }
736
737 .reveal .slides > section.stack {
738 padding-top: 0;
739 padding-bottom: 0;
740 pointer-events: none;
741 height: 100%;
742 }
743
744 .reveal .slides > section.present,
745 .reveal .slides > section > section.present {
746 display: block;
747 z-index: 11;
748 opacity: 1;
749 }
750
751 .reveal .slides > section:empty,
752 .reveal .slides > section > section:empty,
753 .reveal .slides > section[data-background-interactive],
754 .reveal .slides > section > section[data-background-interactive] {
755 pointer-events: none;
756 }
757
758 .reveal.center,
759 .reveal.center .slides,
760 .reveal.center .slides section {
761 min-height: 0 !important;
762 }
763
764 /* Don't allow interaction with invisible slides */
765 .reveal .slides > section:not(.present),
766 .reveal .slides > section > section:not(.present) {
767 pointer-events: none;
768 }
769
770 .reveal.overview .slides > section,
771 .reveal.overview .slides > section > section {
772 pointer-events: auto;
773 }
774
775 .reveal .slides > section.past,
776 .reveal .slides > section.future,
777 .reveal .slides > section.past > section,
778 .reveal .slides > section.future > section,
779 .reveal .slides > section > section.past,
780 .reveal .slides > section > section.future {
781 opacity: 0;
782 }
783
784 /*********************************************
785 * Mixins for readability of transitions
786 *********************************************/
787
788 @mixin transition-global($style) {
789 .reveal .slides section[data-transition='#{$style}'],
790 .reveal.#{$style} .slides section:not([data-transition]) {
791 @content;
792 }
793 }
794 @mixin transition-stack($style) {
795 .reveal .slides section[data-transition='#{$style}'].stack,
796 .reveal.#{$style} .slides section.stack {
797 @content;
798 }
799 }
800 @mixin transition-horizontal-past($style) {
801 .reveal .slides > section[data-transition='#{$style}'].past,
802 .reveal .slides > section[data-transition~='#{$style}-out'].past,
803 .reveal.#{$style} .slides > section:not([data-transition]).past {
804 @content;
805 }
806 }
807 @mixin transition-horizontal-future($style) {
808 .reveal .slides > section[data-transition='#{$style}'].future,
809 .reveal .slides > section[data-transition~='#{$style}-in'].future,
810 .reveal.#{$style} .slides > section:not([data-transition]).future {
811 @content;
812 }
813 }
814
815 @mixin transition-vertical-past($style) {
816 .reveal .slides > section > section[data-transition='#{$style}'].past,
817 .reveal .slides > section > section[data-transition~='#{$style}-out'].past,
818 .reveal.#{$style} .slides > section > section:not([data-transition]).past {
819 @content;
820 }
821 }
822 @mixin transition-vertical-future($style) {
823 .reveal .slides > section > section[data-transition='#{$style}'].future,
824 .reveal .slides > section > section[data-transition~='#{$style}-in'].future,
825 .reveal.#{$style} .slides > section > section:not([data-transition]).future {
826 @content;
827 }
828 }
829
830 /*********************************************
831 * SLIDE TRANSITION
832 * Aliased 'linear' for backwards compatibility
833 *********************************************/
834
835 @each $stylename in slide, linear {
836 @include transition-horizontal-past(#{$stylename}) {
837 transform: translate(-150%, 0);
838 }
839 @include transition-horizontal-future(#{$stylename}) {
840 transform: translate(150%, 0);
841 }
842 @include transition-vertical-past(#{$stylename}) {
843 transform: translate(0, -150%);
844 }
845 @include transition-vertical-future(#{$stylename}) {
846 transform: translate(0, 150%);
847 }
848 }
849
850 /*********************************************
851 * CONVEX TRANSITION
852 * Aliased 'default' for backwards compatibility
853 *********************************************/
854
855 @each $stylename in default, convex {
856 @include transition-stack(#{$stylename}) {
857 transform-style: preserve-3d;
858 }
859
860 @include transition-horizontal-past(#{$stylename}) {
861 transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
862 }
863 @include transition-horizontal-future(#{$stylename}) {
864 transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
865 }
866 @include transition-vertical-past(#{$stylename}) {
867 transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0);
868 }
869 @include transition-vertical-future(#{$stylename}) {
870 transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0);
871 }
872 }
873
874 /*********************************************
875 * CONCAVE TRANSITION
876 *********************************************/
877
878 @include transition-stack(concave) {
879 transform-style: preserve-3d;
880 }
881
882 @include transition-horizontal-past(concave) {
883 transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
884 }
885 @include transition-horizontal-future(concave) {
886 transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
887 }
888 @include transition-vertical-past(concave) {
889 transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0);
890 }
891 @include transition-vertical-future(concave) {
892 transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0);
893 }
894
895 /*********************************************
896 * ZOOM TRANSITION
897 *********************************************/
898
899 @include transition-global(zoom) {
900 transition-timing-function: ease;
901 }
902 @include transition-horizontal-past(zoom) {
903 visibility: hidden;
904 transform: scale(16);
905 }
906 @include transition-horizontal-future(zoom) {
907 visibility: hidden;
908 transform: scale(0.2);
909 }
910 @include transition-vertical-past(zoom) {
911 transform: scale(16);
912 }
913 @include transition-vertical-future(zoom) {
914 transform: scale(0.2);
915 }
916
917 /*********************************************
918 * CUBE TRANSITION
919 *
920 * WARNING:
921 * this is deprecated and will be removed in a
922 * future version.
923 *********************************************/
924
925 .reveal.cube .slides {
926 perspective: 1300px;
927 }
928
929 .reveal.cube .slides section {
930 padding: 30px;
931 min-height: 700px;
932 backface-visibility: hidden;
933 box-sizing: border-box;
934 transform-style: preserve-3d;
935 }
936 .reveal.center.cube .slides section {
937 min-height: 0;
938 }
939 .reveal.cube .slides section:not(.stack):before {
940 content: '';
941 position: absolute;
942 display: block;
943 width: 100%;
944 height: 100%;
945 left: 0;
946 top: 0;
947 background: rgba(0, 0, 0, 0.1);
948 border-radius: 4px;
949 transform: translateZ(-20px);
950 }
951 .reveal.cube .slides section:not(.stack):after {
952 content: '';
953 position: absolute;
954 display: block;
955 width: 90%;
956 height: 30px;
957 left: 5%;
958 bottom: 0;
959 background: none;
960 z-index: 1;
961
962 border-radius: 4px;
963 box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);
964 transform: translateZ(-90px) rotateX(65deg);
965 }
966
967 .reveal.cube .slides > section.stack {
968 padding: 0;
969 background: none;
970 }
971
972 .reveal.cube .slides > section.past {
973 transform-origin: 100% 0%;
974 transform: translate3d(-100%, 0, 0) rotateY(-90deg);
975 }
976
977 .reveal.cube .slides > section.future {
978 transform-origin: 0% 0%;
979 transform: translate3d(100%, 0, 0) rotateY(90deg);
980 }
981
982 .reveal.cube .slides > section > section.past {
983 transform-origin: 0% 100%;
984 transform: translate3d(0, -100%, 0) rotateX(90deg);
985 }
986
987 .reveal.cube .slides > section > section.future {
988 transform-origin: 0% 0%;
989 transform: translate3d(0, 100%, 0) rotateX(-90deg);
990 }
991
992 /*********************************************
993 * PAGE TRANSITION
994 *
995 * WARNING:
996 * this is deprecated and will be removed in a
997 * future version.
998 *********************************************/
999
1000 .reveal.page .slides {
1001 perspective-origin: 0% 50%;
1002 perspective: 3000px;
1003 }
1004
1005 .reveal.page .slides section {
1006 padding: 30px;
1007 min-height: 700px;
1008 box-sizing: border-box;
1009 transform-style: preserve-3d;
1010 }
1011 .reveal.page .slides section.past {
1012 z-index: 12;
1013 }
1014 .reveal.page .slides section:not(.stack):before {
1015 content: '';
1016 position: absolute;
1017 display: block;
1018 width: 100%;
1019 height: 100%;
1020 left: 0;
1021 top: 0;
1022 background: rgba(0, 0, 0, 0.1);
1023 transform: translateZ(-20px);
1024 }
1025 .reveal.page .slides section:not(.stack):after {
1026 content: '';
1027 position: absolute;
1028 display: block;
1029 width: 90%;
1030 height: 30px;
1031 left: 5%;
1032 bottom: 0;
1033 background: none;
1034 z-index: 1;
1035
1036 border-radius: 4px;
1037 box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);
1038
1039 transform: translateZ(-90px) rotateX(65deg);
1040 }
1041
1042 .reveal.page .slides > section.stack {
1043 padding: 0;
1044 background: none;
1045 }
1046
1047 .reveal.page .slides > section.past {
1048 transform-origin: 0% 0%;
1049 transform: translate3d(-40%, 0, 0) rotateY(-80deg);
1050 }
1051
1052 .reveal.page .slides > section.future {
1053 transform-origin: 100% 0%;
1054 transform: translate3d(0, 0, 0);
1055 }
1056
1057 .reveal.page .slides > section > section.past {
1058 transform-origin: 0% 0%;
1059 transform: translate3d(0, -40%, 0) rotateX(80deg);
1060 }
1061
1062 .reveal.page .slides > section > section.future {
1063 transform-origin: 0% 100%;
1064 transform: translate3d(0, 0, 0);
1065 }
1066
1067 /*********************************************
1068 * FADE TRANSITION
1069 *********************************************/
1070
1071 .reveal .slides section[data-transition='fade'],
1072 .reveal.fade .slides section:not([data-transition]),
1073 .reveal.fade .slides > section > section:not([data-transition]) {
1074 transform: none;
1075 transition: opacity 0.5s;
1076 }
1077
1078 .reveal.fade.overview .slides section,
1079 .reveal.fade.overview .slides > section > section {
1080 transition: none;
1081 }
1082
1083 /*********************************************
1084 * NO TRANSITION
1085 *********************************************/
1086
1087 @include transition-global(none) {
1088 transform: none;
1089 transition: none;
1090 }
1091
1092 /*********************************************
1093 * PAUSED MODE
1094 *********************************************/
1095
1096 .reveal .pause-overlay {
1097 position: absolute;
1098 top: 0;
1099 left: 0;
1100 width: 100%;
1101 height: 100%;
1102 background: black;
1103 visibility: hidden;
1104 opacity: 0;
1105 z-index: 100;
1106 transition: all 1s ease;
1107 }
1108
1109 .reveal .pause-overlay .resume-button {
1110 position: absolute;
1111 bottom: 20px;
1112 right: 20px;
1113 color: #ccc;
1114 border-radius: 2px;
1115 padding: 6px 14px;
1116 border: 2px solid #ccc;
1117 font-size: 16px;
1118 background: transparent;
1119 cursor: pointer;
1120
1121 &:hover {
1122 color: #fff;
1123 border-color: #fff;
1124 }
1125 }
1126
1127 .reveal.paused .pause-overlay {
1128 visibility: visible;
1129 opacity: 1;
1130 }
1131
1132 /*********************************************
1133 * FALLBACK
1134 *********************************************/
1135
1136 .reveal .no-transition,
1137 .reveal .no-transition *,
1138 .reveal .slides.disable-slide-transitions section {
1139 transition: none !important;
1140 }
1141
1142 .reveal .slides.disable-slide-transitions section {
1143 transform: none !important;
1144 }
1145
1146 /*********************************************
1147 * PER-SLIDE BACKGROUNDS
1148 *********************************************/
1149
1150 .reveal .backgrounds {
1151 position: absolute;
1152 width: 100%;
1153 height: 100%;
1154 top: 0;
1155 left: 0;
1156 perspective: 600px;
1157 }
1158 .reveal .slide-background {
1159 display: none;
1160 position: absolute;
1161 width: 100%;
1162 height: 100%;
1163 opacity: 0;
1164 visibility: hidden;
1165 overflow: hidden;
1166
1167 background-color: rgba(0, 0, 0, 0);
1168
1169 transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
1170 }
1171
1172 .reveal .slide-background-content {
1173 position: absolute;
1174 width: 100%;
1175 height: 100%;
1176
1177 background-position: 50% 50%;
1178 background-repeat: no-repeat;
1179 background-size: cover;
1180 }
1181
1182 .reveal .slide-background.stack {
1183 display: block;
1184 }
1185
1186 .reveal .slide-background.present {
1187 opacity: 1;
1188 visibility: visible;
1189 z-index: 2;
1190 }
1191
1192 .print-pdf .reveal .slide-background {
1193 opacity: 1 !important;
1194 visibility: visible !important;
1195 }
1196
1197 /* Video backgrounds */
1198 .reveal .slide-background video {
1199 position: absolute;
1200 width: 100%;
1201 height: 100%;
1202 max-width: none;
1203 max-height: none;
1204 top: 0;
1205 left: 0;
1206 object-fit: cover;
1207 }
1208 .reveal .slide-background[data-background-size='contain'] video {
1209 object-fit: contain;
1210 }
1211
1212 /* Immediate transition style */
1213 .reveal[data-background-transition='none']
1214 > .backgrounds
1215 .slide-background:not([data-background-transition]),
1216 .reveal > .backgrounds .slide-background[data-background-transition='none'] {
1217 transition: none;
1218 }
1219
1220 /* Slide */
1221 .reveal[data-background-transition='slide']
1222 > .backgrounds
1223 .slide-background:not([data-background-transition]),
1224 .reveal > .backgrounds .slide-background[data-background-transition='slide'] {
1225 opacity: 1;
1226 }
1227 .reveal[data-background-transition='slide']
1228 > .backgrounds
1229 .slide-background.past:not([data-background-transition]),
1230 .reveal > .backgrounds .slide-background.past[data-background-transition='slide'] {
1231 transform: translate(-100%, 0);
1232 }
1233 .reveal[data-background-transition='slide']
1234 > .backgrounds
1235 .slide-background.future:not([data-background-transition]),
1236 .reveal > .backgrounds .slide-background.future[data-background-transition='slide'] {
1237 transform: translate(100%, 0);
1238 }
1239
1240 .reveal[data-background-transition='slide']
1241 > .backgrounds
1242 .slide-background
1243 > .slide-background.past:not([data-background-transition]),
1244 .reveal
1245 > .backgrounds
1246 .slide-background
1247 > .slide-background.past[data-background-transition='slide'] {
1248 transform: translate(0, -100%);
1249 }
1250 .reveal[data-background-transition='slide']
1251 > .backgrounds
1252 .slide-background
1253 > .slide-background.future:not([data-background-transition]),
1254 .reveal
1255 > .backgrounds
1256 .slide-background
1257 > .slide-background.future[data-background-transition='slide'] {
1258 transform: translate(0, 100%);
1259 }
1260
1261 /* Convex */
1262 .reveal[data-background-transition='convex']
1263 > .backgrounds
1264 .slide-background.past:not([data-background-transition]),
1265 .reveal > .backgrounds .slide-background.past[data-background-transition='convex'] {
1266 opacity: 0;
1267 transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
1268 }
1269 .reveal[data-background-transition='convex']
1270 > .backgrounds
1271 .slide-background.future:not([data-background-transition]),
1272 .reveal > .backgrounds .slide-background.future[data-background-transition='convex'] {
1273 opacity: 0;
1274 transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
1275 }
1276
1277 .reveal[data-background-transition='convex']
1278 > .backgrounds
1279 .slide-background
1280 > .slide-background.past:not([data-background-transition]),
1281 .reveal
1282 > .backgrounds
1283 .slide-background
1284 > .slide-background.past[data-background-transition='convex'] {
1285 opacity: 0;
1286 transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0);
1287 }
1288 .reveal[data-background-transition='convex']
1289 > .backgrounds
1290 .slide-background
1291 > .slide-background.future:not([data-background-transition]),
1292 .reveal
1293 > .backgrounds
1294 .slide-background
1295 > .slide-background.future[data-background-transition='convex'] {
1296 opacity: 0;
1297 transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0);
1298 }
1299
1300 /* Concave */
1301 .reveal[data-background-transition='concave']
1302 > .backgrounds
1303 .slide-background.past:not([data-background-transition]),
1304 .reveal > .backgrounds .slide-background.past[data-background-transition='concave'] {
1305 opacity: 0;
1306 transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
1307 }
1308 .reveal[data-background-transition='concave']
1309 > .backgrounds
1310 .slide-background.future:not([data-background-transition]),
1311 .reveal > .backgrounds .slide-background.future[data-background-transition='concave'] {
1312 opacity: 0;
1313 transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
1314 }
1315
1316 .reveal[data-background-transition='concave']
1317 > .backgrounds
1318 .slide-background
1319 > .slide-background.past:not([data-background-transition]),
1320 .reveal
1321 > .backgrounds
1322 .slide-background
1323 > .slide-background.past[data-background-transition='concave'] {
1324 opacity: 0;
1325 transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0);
1326 }
1327 .reveal[data-background-transition='concave']
1328 > .backgrounds
1329 .slide-background
1330 > .slide-background.future:not([data-background-transition]),
1331 .reveal
1332 > .backgrounds
1333 .slide-background
1334 > .slide-background.future[data-background-transition='concave'] {
1335 opacity: 0;
1336 transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0);
1337 }
1338
1339 /* Zoom */
1340 .reveal[data-background-transition='zoom']
1341 > .backgrounds
1342 .slide-background:not([data-background-transition]),
1343 .reveal > .backgrounds .slide-background[data-background-transition='zoom'] {
1344 transition-timing-function: ease;
1345 }
1346
1347 .reveal[data-background-transition='zoom']
1348 > .backgrounds
1349 .slide-background.past:not([data-background-transition]),
1350 .reveal > .backgrounds .slide-background.past[data-background-transition='zoom'] {
1351 opacity: 0;
1352 visibility: hidden;
1353 transform: scale(16);
1354 }
1355 .reveal[data-background-transition='zoom']
1356 > .backgrounds
1357 .slide-background.future:not([data-background-transition]),
1358 .reveal > .backgrounds .slide-background.future[data-background-transition='zoom'] {
1359 opacity: 0;
1360 visibility: hidden;
1361 transform: scale(0.2);
1362 }
1363
1364 .reveal[data-background-transition='zoom']
1365 > .backgrounds
1366 .slide-background
1367 > .slide-background.past:not([data-background-transition]),
1368 .reveal
1369 > .backgrounds
1370 .slide-background
1371 > .slide-background.past[data-background-transition='zoom'] {
1372 opacity: 0;
1373 visibility: hidden;
1374 transform: scale(16);
1375 }
1376 .reveal[data-background-transition='zoom']
1377 > .backgrounds
1378 .slide-background
1379 > .slide-background.future:not([data-background-transition]),
1380 .reveal
1381 > .backgrounds
1382 .slide-background
1383 > .slide-background.future[data-background-transition='zoom'] {
1384 opacity: 0;
1385 visibility: hidden;
1386 transform: scale(0.2);
1387 }
1388
1389 /* Global transition speed settings */
1390 .reveal[data-transition-speed='fast'] > .backgrounds .slide-background {
1391 transition-duration: 400ms;
1392 }
1393 .reveal[data-transition-speed='slow'] > .backgrounds .slide-background {
1394 transition-duration: 1200ms;
1395 }
1396
1397 /*********************************************
1398 * AUTO ANIMATE
1399 *********************************************/
1400
1401 .reveal [data-auto-animate-target^='unmatched'] {
1402 will-change: opacity;
1403 }
1404
1405 .reveal
1406 section[data-auto-animate]:not(.stack):not([data-auto-animate='running'])
1407 [data-auto-animate-target^='unmatched'] {
1408 opacity: 0;
1409 }
1410
1411 /*********************************************
1412 * OVERVIEW
1413 *********************************************/
1414
1415 .reveal.overview {
1416 perspective-origin: 50% 50%;
1417 perspective: 700px;
1418
1419 .slides section {
1420 height: 100%;
1421 top: 0 !important;
1422 opacity: 1 !important;
1423 overflow: hidden;
1424 visibility: visible !important;
1425 cursor: pointer;
1426 box-sizing: border-box;
1427 }
1428 .slides section:hover,
1429 .slides section.present {
1430 outline: 10px solid rgba(150, 150, 150, 0.6);
1431 outline-offset: 10px;
1432 }
1433 .slides section.present {
1434 outline: 10px solid var(--r-link-color);
1435 }
1436 .slides section .fragment {
1437 opacity: 1;
1438 transition: none;
1439 }
1440 .slides section:after,
1441 .slides section:before {
1442 display: none !important;
1443 }
1444 .slides > section.stack {
1445 padding: 0;
1446 top: 0 !important;
1447 background: none;
1448 outline: none;
1449 overflow: visible;
1450 }
1451
1452 .backgrounds {
1453 perspective: inherit;
1454 }
1455
1456 .backgrounds .slide-background {
1457 opacity: 1;
1458 visibility: visible;
1459
1460 // This can't be applied to the slide itself in Safari
1461 outline: 10px solid rgba(150, 150, 150, 0.1);
1462 outline-offset: 10px;
1463 }
1464
1465 .backgrounds .slide-background.stack {
1466 overflow: visible;
1467 }
1468 }
1469
1470 // Disable transitions transitions while we're activating
1471 // or deactivating the overview mode.
1472 .reveal.overview .slides section,
1473 .reveal.overview-deactivating .slides section {
1474 transition: none;
1475 }
1476
1477 .reveal.overview .backgrounds .slide-background,
1478 .reveal.overview-deactivating .backgrounds .slide-background {
1479 transition: none;
1480 }
1481
1482 /*********************************************
1483 * RTL SUPPORT
1484 *********************************************/
1485
1486 .reveal.rtl .slides,
1487 .reveal.rtl .slides h1,
1488 .reveal.rtl .slides h2,
1489 .reveal.rtl .slides h3,
1490 .reveal.rtl .slides h4,
1491 .reveal.rtl .slides h5,
1492 .reveal.rtl .slides h6 {
1493 direction: rtl;
1494 font-family: sans-serif;
1495 }
1496
1497 .reveal.rtl pre,
1498 .reveal.rtl code {
1499 direction: ltr;
1500 }
1501
1502 .reveal.rtl ol,
1503 .reveal.rtl ul {
1504 text-align: right;
1505 }
1506
1507 .reveal.rtl .progress span {
1508 transform-origin: 100% 0;
1509 }
1510
1511 /*********************************************
1512 * PARALLAX BACKGROUND
1513 *********************************************/
1514
1515 .reveal.has-parallax-background .backgrounds {
1516 transition: all 0.8s ease;
1517 }
1518
1519 /* Global transition speed settings */
1520 .reveal.has-parallax-background[data-transition-speed='fast'] .backgrounds {
1521 transition-duration: 400ms;
1522 }
1523 .reveal.has-parallax-background[data-transition-speed='slow'] .backgrounds {
1524 transition-duration: 1200ms;
1525 }
1526
1527 /*********************************************
1528 * OVERLAY FOR LINK PREVIEWS AND HELP
1529 *********************************************/
1530
1531 @keyframes fade-in {
1532 from {
1533 opacity: 0;
1534 }
1535 to {
1536 opacity: 1;
1537 }
1538 }
1539
1540 @keyframes scale-up {
1541 from {
1542 transform: scale(0.95);
1543 }
1544 to {
1545 transform: scale(1);
1546 }
1547 }
1548
1549 .reveal [data-preview-image],
1550 .reveal [data-preview-video],
1551 .reveal [data-preview-link]:not(a):not([data-preview-link='false']) {
1552 cursor: zoom-in;
1553 }
1554
1555 .r-overlay {
1556 position: absolute;
1557 top: var(--r-overlay-margin);
1558 right: var(--r-overlay-margin);
1559 bottom: var(--r-overlay-margin);
1560 left: var(--r-overlay-margin);
1561 border-radius: min(var(--r-overlay-margin), 6px);
1562 z-index: 99;
1563 background: rgba(0, 0, 0, 0.95);
1564 backdrop-filter: blur(10px);
1565 transition: all 0.3s ease;
1566 color: #fff;
1567 animation: fade-in 0.3s ease;
1568 font-family:
1569 ui-sans-serif,
1570 system-ui,
1571 -apple-system,
1572 Helvetica,
1573 sans-serif;
1574 }
1575
1576 .r-overlay-viewport {
1577 position: absolute;
1578 top: var(--r-overlay-padding);
1579 right: var(--r-overlay-padding);
1580 bottom: var(--r-overlay-padding);
1581 left: var(--r-overlay-padding);
1582 gap: var(--r-overlay-gap);
1583 display: flex;
1584 flex-direction: column;
1585 }
1586
1587 .r-overlay-header {
1588 display: flex;
1589 z-index: 2;
1590 box-sizing: border-box;
1591 align-items: center;
1592 justify-content: flex-end;
1593 height: var(--r-overlay-header-height);
1594 gap: 6px;
1595 }
1596 .r-overlay-header .r-overlay-header-button {
1597 all: unset;
1598 display: flex;
1599 align-items: center;
1600 justify-content: center;
1601 min-width: var(--r-overlay-header-height);
1602 min-height: var(--r-overlay-header-height);
1603 padding: 0 calc(var(--r-overlay-header-height) / 4);
1604 opacity: 1;
1605 border-radius: 6px;
1606 font-size: 18px;
1607 gap: 8px;
1608 cursor: pointer;
1609
1610 box-sizing: border-box;
1611 }
1612 .r-overlay-header .r-overlay-header-button:hover {
1613 opacity: 1;
1614 background-color: rgba(255, 255, 255, 0.15);
1615 }
1616 .r-overlay-header .icon {
1617 display: inline-block;
1618 width: 20px;
1619 height: 20px;
1620
1621 background-position: 50% 50%;
1622 background-size: 100%;
1623 background-repeat: no-repeat;
1624 }
1625 .r-overlay-close .icon {
1626 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTIuODU0IDIuODU0YS41LjUgMCAwIDAtLjcwOC0uNzA4TDcuNSA2Ljc5MyAyLjg1NCAyLjE0NmEuNS41IDAgMSAwLS43MDguNzA4TDYuNzkzIDcuNWwtNC42NDcgNC42NDZhLjUuNSAwIDAgMCAuNzA4LjcwOEw3LjUgOC4yMDdsNC42NDYgNC42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMOC4yMDcgNy41bDQuNjQ3LTQuNjQ2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);
1627 }
1628 .r-overlay-external .icon {
1629 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyAyYTEgMSAwIDAgMC0xIDF2OWExIDEgMCAwIDAgMSAxaDlhMSAxIDAgMCAwIDEtMVY4LjVhLjUuNSAwIDAgMC0xIDBWMTJIM1YzaDMuNWEuNS41IDAgMCAwIDAtMUgzWm05Ljg1NC4xNDZhLjUuNSAwIDAgMSAuMTQ2LjM1MVY1LjVhLjUuNSAwIDAgMS0xIDBWMy43MDdMNi44NTQgOC44NTRhLjUuNSAwIDEgMS0uNzA4LS43MDhMMTEuMjkzIDNIOS41YS41LjUgMCAwIDEgMC0xaDNhLjQ5OS40OTkgMCAwIDEgLjM1NC4xNDZaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);
1630 }
1631
1632 .r-overlay-content {
1633 position: relative;
1634 display: grid;
1635 place-items: center;
1636 border-radius: 6px;
1637 overflow: hidden;
1638 flex-grow: 1;
1639 background-color: rgba(20, 20, 20, 0.8);
1640 animation: scale-up 0.5s cubic-bezier(0.26, 0.86, 0.44, 0.985);
1641 }
1642
1643 .r-overlay-spinner {
1644 position: absolute;
1645 display: block;
1646 top: 50%;
1647 left: 50%;
1648 width: 32px;
1649 height: 32px;
1650 margin: -16px 0 0 -16px;
1651 z-index: 10;
1652 background-image: url(data:image/gif;base64,R0lGODlhIAAgAPMAAJmZmf%2F%2F%2F6%2Bvr8nJybW1tcDAwOjo6Nvb26ioqKOjo7Ozs%2FLy8vz8%2FAAAAAAAAAAAACH%2FC05FVFNDQVBFMi4wAwEAAAAh%2FhpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh%2BQQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ%2FV%2FnmOM82XiHRLYKhKP1oZmADdEAAAh%2BQQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY%2FCZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB%2BA4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6%2BHo7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq%2BB6QDtuetcaBPnW6%2BO7wDHpIiK9SaVK5GgV543tzjgGcghAgAh%2BQQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK%2B%2BG%2Bw48edZPK%2BM6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE%2BG%2BcD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm%2BFNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk%2BaV%2BoJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0%2FVNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc%2BXiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30%2FiI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE%2FjiuL04RGEBgwWhShRgQExHBAAh%2BQQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR%2BipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq%2BE71SRQeyqUToLA7VxF0JDyIQh%2FMVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY%2BYip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd%2BMFCN6HAAIKgNggY0KtEBAAh%2BQQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1%2BvsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d%2BjYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg%2BygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0%2Bbm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h%2BKr0SJ8MFihpNbx%2B4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX%2BBP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA%3D%3D);
1653
1654 visibility: hidden;
1655 opacity: 0;
1656 }
1657
1658 // Preview overlay
1659 .r-overlay-preview .r-overlay-content iframe {
1660 width: 100%;
1661 height: 100%;
1662 max-width: 100%;
1663 max-height: 100%;
1664 border: 0;
1665
1666 opacity: 0;
1667 visibility: hidden;
1668 transition: all 0.3s ease;
1669 }
1670
1671 .r-overlay-preview[data-state='loaded'] iframe {
1672 opacity: 1;
1673 visibility: visible;
1674 }
1675
1676 .r-overlay-preview .r-overlay-content img,
1677 .r-overlay-preview .r-overlay-content video {
1678 position: absolute;
1679 max-width: 100%;
1680 max-height: 100%;
1681 width: 100%;
1682 height: 100%;
1683 margin: 0;
1684 object-fit: scale-down;
1685 }
1686
1687 .r-overlay-preview[data-preview-fit='none'] img,
1688 .r-overlay-preview[data-preview-fit='none'] video {
1689 object-fit: none;
1690 }
1691
1692 .r-overlay-preview[data-preview-fit='scale-down'] img,
1693 .r-overlay-preview[data-preview-fit='scale-down'] video {
1694 object-fit: scale-down;
1695 }
1696
1697 .r-overlay-preview[data-preview-fit='contain'] img,
1698 .r-overlay-preview[data-preview-fit='contain'] video {
1699 object-fit: contain;
1700 }
1701
1702 .r-overlay-preview[data-preview-fit='cover'] img,
1703 .r-overlay-preview[data-preview-fit='cover'] video {
1704 object-fit: cover;
1705 }
1706
1707 .r-overlay-preview[data-state='loaded'] .r-overlay-content-inner {
1708 position: absolute;
1709 z-index: -1;
1710 left: 0;
1711 top: 45%;
1712 width: 100%;
1713 text-align: center;
1714 letter-spacing: normal;
1715 }
1716 .r-overlay-preview .r-overlay-error {
1717 font-size: 18px;
1718 color: orange;
1719 }
1720
1721 .r-overlay-preview .x-frame-error {
1722 opacity: 0;
1723 transition: opacity 0.3s ease 0.3s;
1724 }
1725 .r-overlay-preview[data-state='loaded'] .x-frame-error {
1726 opacity: 1;
1727 }
1728
1729 .r-overlay-preview[data-state='loading'] .r-overlay-spinner {
1730 opacity: 0.6;
1731 visibility: visible;
1732 }
1733
1734 // Help overlay
1735 .r-overlay-help .r-overlay-content {
1736 overflow: auto;
1737 }
1738
1739 .r-overlay-help-content {
1740 max-width: 560px;
1741 padding: 20px 0;
1742 margin: auto;
1743 text-align: center;
1744 letter-spacing: normal;
1745 }
1746
1747 .r-overlay-help-content .title {
1748 font-size: 20px;
1749 margin-top: 0;
1750 }
1751
1752 /* Specificity battle with reveal.js theme table styles */
1753 .r-overlay-help .r-overlay-help-content table {
1754 border: 1px solid #fff;
1755 border-collapse: collapse;
1756 font-size: 16px;
1757 text-align: left;
1758 }
1759
1760 .r-overlay-help .r-overlay-help-content table th,
1761 .r-overlay-help .r-overlay-help-content table td {
1762 width: 240px;
1763 padding: 14px;
1764 border: 1px solid #fff;
1765 vertical-align: middle;
1766 }
1767
1768 .r-overlay-help .r-overlay-help-content table th {
1769 padding-top: 20px;
1770 padding-bottom: 20px;
1771 }
1772
1773 /*********************************************
1774 * PLAYBACK COMPONENT
1775 *********************************************/
1776
1777 .reveal .playback {
1778 position: absolute;
1779 left: 15px;
1780 bottom: 20px;
1781 z-index: 30;
1782 cursor: pointer;
1783 transition: all 400ms ease;
1784 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1785 }
1786
1787 .reveal.overview .playback {
1788 opacity: 0;
1789 visibility: hidden;
1790 }
1791
1792 /*********************************************
1793 * CODE HIGHLGIHTING
1794 *********************************************/
1795
1796 .reveal .hljs {
1797 min-height: 100%;
1798 }
1799
1800 .reveal .hljs table {
1801 margin: initial;
1802 }
1803
1804 .reveal .hljs-ln-code,
1805 .reveal .hljs-ln-numbers {
1806 padding: 0;
1807 border: 0;
1808 }
1809
1810 .reveal .hljs-ln-numbers {
1811 opacity: 0.6;
1812 padding-right: 0.75em;
1813 text-align: right;
1814 vertical-align: top;
1815 }
1816
1817 .reveal .hljs.has-highlights tr:not(.highlight-line) {
1818 opacity: 0.4;
1819 }
1820
1821 .reveal .hljs.has-highlights.fragment {
1822 transition: all 0.2s ease;
1823 }
1824
1825 .reveal .hljs:not(:first-child).fragment {
1826 position: absolute;
1827 top: 0;
1828 left: 0;
1829 width: 100%;
1830 box-sizing: border-box;
1831 }
1832
1833 .reveal pre[data-auto-animate-target] {
1834 overflow: hidden;
1835 }
1836 .reveal pre[data-auto-animate-target] code {
1837 height: 100%;
1838 }
1839
1840 /*********************************************
1841 * ROLLING LINKS
1842 *********************************************/
1843
1844 .reveal .roll {
1845 display: inline-block;
1846 line-height: 1.2;
1847 overflow: hidden;
1848
1849 vertical-align: top;
1850 perspective: 400px;
1851 perspective-origin: 50% 50%;
1852 }
1853 .reveal .roll:hover {
1854 background: none;
1855 text-shadow: none;
1856 }
1857 .reveal .roll span {
1858 display: block;
1859 position: relative;
1860 padding: 0 2px;
1861
1862 pointer-events: none;
1863 transition: all 400ms ease;
1864 transform-origin: 50% 0%;
1865 transform-style: preserve-3d;
1866 backface-visibility: hidden;
1867 }
1868 .reveal .roll:hover span {
1869 background: rgba(0, 0, 0, 0.5);
1870 transform: translate3d(0px, 0px, -45px) rotateX(90deg);
1871 }
1872 .reveal .roll span:after {
1873 content: attr(data-title);
1874
1875 display: block;
1876 position: absolute;
1877 left: 0;
1878 top: 0;
1879 padding: 0 2px;
1880 backface-visibility: hidden;
1881 transform-origin: 50% 0%;
1882 transform: translate3d(0px, 110%, 0px) rotateX(-90deg);
1883 }
1884
1885 /*********************************************
1886 * SPEAKER NOTES
1887 *********************************************/
1888
1889 $notesWidthPercent: 25%;
1890
1891 // Hide on-page notes
1892 .reveal aside.notes {
1893 display: none;
1894 }
1895
1896 // An interface element that can optionally be used to show the
1897 // speaker notes to all viewers, on top of the presentation
1898 .reveal .speaker-notes {
1899 display: none;
1900 position: absolute;
1901 width: math.div($notesWidthPercent, (1 - math.div($notesWidthPercent, 100))) * 1%;
1902 height: 100%;
1903 top: 0;
1904 left: 100%;
1905 padding: 14px 18px 14px 18px;
1906 z-index: 1;
1907 font-size: 18px;
1908 line-height: 1.4;
1909 border: 1px solid rgba(0, 0, 0, 0.05);
1910 color: #222;
1911 background-color: #f5f5f5;
1912 overflow: auto;
1913 box-sizing: border-box;
1914 text-align: left;
1915 font-family: Helvetica, sans-serif;
1916 -webkit-overflow-scrolling: touch;
1917
1918 .notes-placeholder {
1919 color: #ccc;
1920 font-style: italic;
1921 }
1922
1923 &:focus {
1924 outline: none;
1925 }
1926
1927 &:before {
1928 content: 'Speaker notes';
1929 display: block;
1930 margin-bottom: 10px;
1931 opacity: 0.5;
1932 }
1933 }
1934
1935 .reveal.show-notes {
1936 max-width: 100% - $notesWidthPercent;
1937 overflow: visible;
1938 }
1939
1940 .reveal.show-notes .speaker-notes {
1941 display: block;
1942 }
1943
1944 @media screen and (min-width: 1600px) {
1945 .reveal .speaker-notes {
1946 font-size: 20px;
1947 }
1948 }
1949
1950 @media screen and (max-width: 1024px) {
1951 .reveal.show-notes {
1952 border-left: 0;
1953 max-width: none;
1954 max-height: 70%;
1955 max-height: 70vh;
1956 overflow: visible;
1957 }
1958
1959 .reveal.show-notes .speaker-notes {
1960 top: 100%;
1961 left: 0;
1962 width: 100%;
1963 height: 30vh;
1964 border: 0;
1965 }
1966 }
1967
1968 @media screen and (max-width: 600px) {
1969 .reveal.show-notes {
1970 max-height: 60%;
1971 max-height: 60vh;
1972 }
1973
1974 .reveal.show-notes .speaker-notes {
1975 top: 100%;
1976 height: 40vh;
1977 }
1978
1979 .reveal .speaker-notes {
1980 font-size: 14px;
1981 }
1982 }
1983
1984 /*********************************************
1985 * JUMP-TO-SLIDE COMPONENT
1986 *********************************************/
1987
1988 .reveal .jump-to-slide {
1989 position: absolute;
1990 top: 15px;
1991 left: 15px;
1992 z-index: 30;
1993 font-size: 32px;
1994 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1995 }
1996
1997 .reveal .jump-to-slide-input {
1998 background: transparent;
1999 padding: 8px;
2000 font-size: inherit;
2001 color: currentColor;
2002 border: 0;
2003 }
2004 .reveal .jump-to-slide-input::placeholder {
2005 color: currentColor;
2006 opacity: 0.5;
2007 }
2008
2009 .reveal.has-dark-background .jump-to-slide-input {
2010 color: #fff;
2011 }
2012 .reveal.has-light-background .jump-to-slide-input {
2013 color: #222;
2014 }
2015
2016 .reveal .jump-to-slide-input:focus {
2017 outline: none;
2018 }
2019
2020 /*********************************************
2021 * MANUAL MEDIA PLAY BUTTON
2022 *********************************************/
2023
2024 .reveal .r-overlay-button {
2025 all: unset;
2026 position: absolute;
2027 display: flex;
2028 align-items: center;
2029 justify-content: center;
2030 padding: 10px;
2031 border-radius: 5px;
2032 font-size: 0.4em;
2033 z-index: 30;
2034 cursor: pointer;
2035 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
2036 -webkit-appearance: none;
2037 appearance: none;
2038 color: #fff;
2039 background: rgba(0, 0, 0, 0.7);
2040
2041 &:hover {
2042 background: rgba(0, 0, 0, 0.9);
2043 }
2044 }
2045
2046 .reveal.has-light-background .r-overlay-button {
2047 color: #222;
2048 background: rgba(255, 255, 255, 0.7);
2049
2050 &:hover {
2051 background: rgba(255, 255, 255, 0.9);
2052 }
2053 }
2054
2055 .reveal .r-media-play-button {
2056 left: 15px;
2057 bottom: 20px;
2058 }
2059
2060 /*********************************************
2061 * ZOOM PLUGIN
2062 *********************************************/
2063
2064 .zoomed .reveal *,
2065 .zoomed .reveal *:before,
2066 .zoomed .reveal *:after {
2067 backface-visibility: visible !important;
2068 }
2069
2070 .zoomed .reveal .progress,
2071 .zoomed .reveal .controls {
2072 opacity: 0;
2073 }
2074
2075 .zoomed .reveal .roll span {
2076 background: none;
2077 }
2078
2079 .zoomed .reveal .roll span:after {
2080 visibility: hidden;
2081 }
2082
2083 /*********************************************
2084 * SCROLL VIEW
2085 *********************************************/
2086 .reveal-viewport.loading-scroll-mode {
2087 visibility: hidden;
2088 }
2089
2090 .reveal-viewport.reveal-scroll {
2091 & {
2092 margin: 0 auto;
2093 overflow: auto;
2094 overflow-x: hidden;
2095 overflow-y: auto;
2096 z-index: 1;
2097
2098 --r-scrollbar-width: 7px;
2099 --r-scrollbar-trigger-size: 5px;
2100 --r-controls-spacing: 8px;
2101 }
2102
2103 @media screen and (max-width: 500px) {
2104 --r-scrollbar-width: 3px;
2105 --r-scrollbar-trigger-size: 3px;
2106 }
2107
2108 .controls,
2109 .progress,
2110 .playback,
2111 .backgrounds,
2112 .slide-number,
2113 .speaker-notes {
2114 display: none !important;
2115 }
2116
2117 .r-overlay,
2118 .pause-overlay,
2119 .r-media-play-button {
2120 position: fixed;
2121 }
2122
2123 .reveal {
2124 overflow: visible;
2125 touch-action: manipulation;
2126 }
2127
2128 .slides {
2129 position: static;
2130 pointer-events: initial;
2131
2132 left: auto;
2133 top: auto;
2134 width: 100% !important;
2135 margin: 0;
2136 padding: 0;
2137
2138 overflow: visible;
2139 display: block;
2140
2141 perspective: none;
2142 perspective-origin: 50% 50%;
2143 }
2144
2145 .scroll-page {
2146 position: relative;
2147 width: 100%;
2148 height: calc(var(--page-height) + var(--page-scroll-padding));
2149 z-index: 1;
2150 overflow: visible;
2151 }
2152
2153 .scroll-page-sticky {
2154 position: sticky;
2155 height: var(--page-height);
2156 top: 0px;
2157 }
2158
2159 .scroll-page-content {
2160 position: absolute;
2161 top: 0;
2162 left: 0;
2163 width: 100%;
2164 height: 100%;
2165 overflow: hidden;
2166 }
2167
2168 .scroll-page section {
2169 visibility: visible !important;
2170 display: block !important;
2171 position: absolute !important;
2172 width: var(--slide-width) !important;
2173 height: var(--slide-height) !important;
2174 top: 50% !important;
2175 left: 50% !important;
2176 opacity: 1 !important;
2177 transform: scale(var(--slide-scale)) translate(-50%, -50%) !important;
2178 transform-style: flat !important;
2179 transform-origin: 0 0 !important;
2180 }
2181
2182 .slide-background {
2183 display: block !important;
2184 position: absolute;
2185 top: 0;
2186 left: 0;
2187 width: 100%;
2188 height: 100%;
2189 z-index: auto !important;
2190 visibility: visible;
2191 opacity: 1;
2192 touch-action: manipulation;
2193 }
2194 }
2195
2196 // Chromium
2197 .reveal-viewport.reveal-scroll[data-scrollbar='true']::-webkit-scrollbar,
2198 .reveal-viewport.reveal-scroll[data-scrollbar='auto']::-webkit-scrollbar {
2199 display: none;
2200 }
2201
2202 // Firefox
2203 .reveal-viewport.reveal-scroll[data-scrollbar='true'],
2204 .reveal-viewport.reveal-scroll[data-scrollbar='auto'] {
2205 scrollbar-width: none;
2206 }
2207
2208 .reveal.has-dark-background,
2209 .reveal-viewport.has-dark-background {
2210 --r-overlay-element-bg-color: 240, 240, 240;
2211 --r-overlay-element-fg-color: 0, 0, 0;
2212 }
2213 .reveal.has-light-background,
2214 .reveal-viewport.has-light-background {
2215 --r-overlay-element-bg-color: 0, 0, 0;
2216 --r-overlay-element-fg-color: 240, 240, 240;
2217 }
2218
2219 .reveal-viewport.reveal-scroll .scrollbar {
2220 position: sticky;
2221 top: 50%;
2222 z-index: 20;
2223 opacity: 0;
2224 transition: all 0.3s ease;
2225
2226 &.visible,
2227 &:hover {
2228 opacity: 1;
2229 }
2230
2231 .scrollbar-inner {
2232 position: absolute;
2233 width: var(--r-scrollbar-width);
2234 height: calc(var(--viewport-height) - var(--r-controls-spacing) * 2);
2235 right: var(--r-controls-spacing);
2236 top: 0;
2237 transform: translateY(-50%);
2238 border-radius: var(--r-scrollbar-width);
2239 z-index: 10;
2240 }
2241
2242 .scrollbar-playhead {
2243 position: absolute;
2244 width: var(--r-scrollbar-width);
2245 height: var(--r-scrollbar-width);
2246 top: 0;
2247 left: 0;
2248 border-radius: var(--r-scrollbar-width);
2249 background-color: rgba(var(--r-overlay-element-bg-color), 1);
2250 z-index: 11;
2251 transition: background-color 0.2s ease;
2252 }
2253
2254 .scrollbar-slide {
2255 position: absolute;
2256 width: 100%;
2257 background-color: rgba(var(--r-overlay-element-bg-color), 0.2);
2258 box-shadow: 0 0 0px 1px rgba(var(--r-overlay-element-fg-color), 0.1);
2259 border-radius: var(--r-scrollbar-width);
2260 transition: background-color 0.2s ease;
2261 }
2262
2263 // Hit area
2264 .scrollbar-slide:after {
2265 content: '';
2266 position: absolute;
2267 width: 200%;
2268 height: 100%;
2269 top: 0;
2270 left: -50%;
2271 background: rgba(0, 0, 0, 0);
2272 z-index: -1;
2273 }
2274
2275 .scrollbar-slide:hover,
2276 .scrollbar-slide.active {
2277 background-color: rgba(var(--r-overlay-element-bg-color), 0.4);
2278 }
2279
2280 .scrollbar-trigger {
2281 position: absolute;
2282 width: 100%;
2283 transition: background-color 0.2s ease;
2284 }
2285
2286 .scrollbar-slide.active.has-triggers {
2287 background-color: rgba(var(--r-overlay-element-bg-color), 0.4);
2288 z-index: 10;
2289 }
2290
2291 .scrollbar-slide.active .scrollbar-trigger:after {
2292 content: '';
2293 position: absolute;
2294 width: var(--r-scrollbar-trigger-size);
2295 height: var(--r-scrollbar-trigger-size);
2296 border-radius: 20px;
2297 top: 50%;
2298 left: 50%;
2299 transform: translate(-50%, -50%);
2300 background-color: rgba(var(--r-overlay-element-bg-color), 1);
2301 transition:
2302 transform 0.2s ease,
2303 opacity 0.2s ease;
2304 opacity: 0.4;
2305 }
2306
2307 .scrollbar-slide.active .scrollbar-trigger.active:after,
2308 .scrollbar-slide.active .scrollbar-trigger.active ~ .scrollbar-trigger:after {
2309 opacity: 1;
2310 }
2311
2312 .scrollbar-slide.active .scrollbar-trigger ~ .scrollbar-trigger.active:after {
2313 transform: translate(calc(var(--r-scrollbar-width) * -2), 0);
2314 background-color: rgba(var(--r-overlay-element-bg-color), 1);
2315 }
2316 }
2317
2318 @media (pointer: coarse) {
2319 .reveal .controls {
2320 font-size: clamp(10px, 2.5vmin, 40px);
2321 }
2322
2323 .reveal .progress {
2324 height: clamp(3px, 0.75vmin, 10px);
2325 }
2326
2327 .reveal .r-overlay-button {
2328 font-size: clamp(0.4em, 3vmin, 1em);
2329 padding: clamp(0.2em, 2vmin, 1em);
2330 }
2331 }
2332
2333 /*********************************************
2334 * PRINT STYLES
2335 *********************************************/
2336
2337 @include meta.load-css('print/pdf.scss');
2338 @include meta.load-css('print/paper.scss');
2339
2339 lines Plain Text