You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1870 lines
46 KiB

  1. @use "sass:math";
  2. /**
  3. * reveal.js
  4. * http://revealjs.com
  5. * MIT licensed
  6. *
  7. * Copyright (C) Hakim El Hattab, https://hakim.se
  8. */
  9. @import 'layout';
  10. /*********************************************
  11. * GLOBAL STYLES
  12. *********************************************/
  13. html.reveal-full-page {
  14. width: 100%;
  15. height: 100%;
  16. height: 100vh;
  17. height: calc( var(--vh, 1vh) * 100 );
  18. overflow: hidden;
  19. }
  20. .reveal-viewport {
  21. height: 100%;
  22. overflow: hidden;
  23. position: relative;
  24. line-height: 1;
  25. margin: 0;
  26. background-color: #fff;
  27. color: #000;
  28. }
  29. // Force the presentation to cover the full viewport when we
  30. // enter fullscreen mode. Fixes sizing issues in Safari.
  31. .reveal-viewport:fullscreen {
  32. top: 0 !important;
  33. left: 0 !important;
  34. width: 100% !important;
  35. height: 100% !important;
  36. transform: none !important;
  37. }
  38. /*********************************************
  39. * VIEW FRAGMENTS
  40. *********************************************/
  41. .reveal .fragment {
  42. transition: all .2s ease;
  43. &:not(.custom) {
  44. opacity: 0;
  45. visibility: hidden;
  46. will-change: opacity;
  47. }
  48. &.visible {
  49. opacity: 1;
  50. visibility: inherit;
  51. }
  52. &.disabled {
  53. transition: none;
  54. }
  55. }
  56. .reveal .fragment.grow {
  57. opacity: 1;
  58. visibility: inherit;
  59. &.visible {
  60. transform: scale( 1.3 );
  61. }
  62. }
  63. .reveal .fragment.shrink {
  64. opacity: 1;
  65. visibility: inherit;
  66. &.visible {
  67. transform: scale( 0.7 );
  68. }
  69. }
  70. .reveal .fragment.zoom-in {
  71. transform: scale( 0.1 );
  72. &.visible {
  73. transform: none;
  74. }
  75. }
  76. .reveal .fragment.fade-out {
  77. opacity: 1;
  78. visibility: inherit;
  79. &.visible {
  80. opacity: 0;
  81. visibility: hidden;
  82. }
  83. }
  84. .reveal .fragment.semi-fade-out {
  85. opacity: 1;
  86. visibility: inherit;
  87. &.visible {
  88. opacity: 0.5;
  89. visibility: inherit;
  90. }
  91. }
  92. .reveal .fragment.strike {
  93. opacity: 1;
  94. visibility: inherit;
  95. &.visible {
  96. text-decoration: line-through;
  97. }
  98. }
  99. .reveal .fragment.fade-up {
  100. transform: translate(0, 40px);
  101. &.visible {
  102. transform: translate(0, 0);
  103. }
  104. }
  105. .reveal .fragment.fade-down {
  106. transform: translate(0, -40px);
  107. &.visible {
  108. transform: translate(0, 0);
  109. }
  110. }
  111. .reveal .fragment.fade-right {
  112. transform: translate(-40px, 0);
  113. &.visible {
  114. transform: translate(0, 0);
  115. }
  116. }
  117. .reveal .fragment.fade-left {
  118. transform: translate(40px, 0);
  119. &.visible {
  120. transform: translate(0, 0);
  121. }
  122. }
  123. .reveal .fragment.fade-in-then-out,
  124. .reveal .fragment.current-visible {
  125. opacity: 0;
  126. visibility: hidden;
  127. &.current-fragment {
  128. opacity: 1;
  129. visibility: inherit;
  130. }
  131. }
  132. .reveal .fragment.fade-in-then-semi-out {
  133. opacity: 0;
  134. visibility: hidden;
  135. &.visible {
  136. opacity: 0.5;
  137. visibility: inherit;
  138. }
  139. &.current-fragment {
  140. opacity: 1;
  141. visibility: inherit;
  142. }
  143. }
  144. .reveal .fragment.highlight-red,
  145. .reveal .fragment.highlight-current-red,
  146. .reveal .fragment.highlight-green,
  147. .reveal .fragment.highlight-current-green,
  148. .reveal .fragment.highlight-blue,
  149. .reveal .fragment.highlight-current-blue {
  150. opacity: 1;
  151. visibility: inherit;
  152. }
  153. .reveal .fragment.highlight-red.visible {
  154. color: #ff2c2d
  155. }
  156. .reveal .fragment.highlight-green.visible {
  157. color: #17ff2e;
  158. }
  159. .reveal .fragment.highlight-blue.visible {
  160. color: #1b91ff;
  161. }
  162. .reveal .fragment.highlight-current-red.current-fragment {
  163. color: #ff2c2d
  164. }
  165. .reveal .fragment.highlight-current-green.current-fragment {
  166. color: #17ff2e;
  167. }
  168. .reveal .fragment.highlight-current-blue.current-fragment {
  169. color: #1b91ff;
  170. }
  171. /*********************************************
  172. * DEFAULT ELEMENT STYLES
  173. *********************************************/
  174. /* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */
  175. .reveal:after {
  176. content: '';
  177. font-style: italic;
  178. }
  179. .reveal iframe {
  180. z-index: 1;
  181. }
  182. /** Prevents layering issues in certain browser/transition combinations */
  183. .reveal a {
  184. position: relative;
  185. }
  186. /*********************************************
  187. * CONTROLS
  188. *********************************************/
  189. @keyframes bounce-right {
  190. 0%, 10%, 25%, 40%, 50% {transform: translateX(0);}
  191. 20% {transform: translateX(10px);}
  192. 30% {transform: translateX(-5px);}
  193. }
  194. @keyframes bounce-left {
  195. 0%, 10%, 25%, 40%, 50% {transform: translateX(0);}
  196. 20% {transform: translateX(-10px);}
  197. 30% {transform: translateX(5px);}
  198. }
  199. @keyframes bounce-down {
  200. 0%, 10%, 25%, 40%, 50% {transform: translateY(0);}
  201. 20% {transform: translateY(10px);}
  202. 30% {transform: translateY(-5px);}
  203. }
  204. $controlArrowSize: 3.6em;
  205. $controlArrowSpacing: 1.4em;
  206. $controlArrowLength: 2.6em;
  207. $controlArrowThickness: 0.5em;
  208. $controlsArrowAngle: 45deg;
  209. $controlsArrowAngleHover: 40deg;
  210. $controlsArrowAngleActive: 36deg;
  211. @mixin controlsArrowTransform( $angle ) {
  212. &:before {
  213. transform: translateX(($controlArrowSize - $controlArrowLength)*0.5) translateY(($controlArrowSize - $controlArrowThickness)*0.5) rotate( $angle );
  214. }
  215. &:after {
  216. transform: translateX(($controlArrowSize - $controlArrowLength)*0.5) translateY(($controlArrowSize - $controlArrowThickness)*0.5) rotate( -$angle );
  217. }
  218. }
  219. .reveal .controls {
  220. $spacing: 12px;
  221. display: none;
  222. position: absolute;
  223. top: auto;
  224. bottom: $spacing;
  225. right: $spacing;
  226. left: auto;
  227. z-index: 11;
  228. color: #000;
  229. pointer-events: none;
  230. font-size: 10px;
  231. button {
  232. position: absolute;
  233. padding: 0;
  234. background-color: transparent;
  235. border: 0;
  236. outline: 0;
  237. cursor: pointer;
  238. color: currentColor;
  239. transform: scale(.9999);
  240. transition: color 0.2s ease,
  241. opacity 0.2s ease,
  242. transform 0.2s ease;
  243. z-index: 2; // above slides
  244. pointer-events: auto;
  245. font-size: inherit;
  246. visibility: hidden;
  247. opacity: 0;
  248. -webkit-appearance: none;
  249. -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );
  250. }
  251. .controls-arrow:before,
  252. .controls-arrow:after {
  253. content: '';
  254. position: absolute;
  255. top: 0;
  256. left: 0;
  257. width: $controlArrowLength;
  258. height: $controlArrowThickness;
  259. border-radius: $controlArrowThickness*0.5;
  260. background-color: currentColor;
  261. transition: all 0.15s ease, background-color 0.8s ease;
  262. transform-origin: math.div(floor(($controlArrowThickness*0.5)*10), 10) 50%;
  263. will-change: transform;
  264. }
  265. .controls-arrow {
  266. position: relative;
  267. width: $controlArrowSize;
  268. height: $controlArrowSize;
  269. @include controlsArrowTransform( $controlsArrowAngle );
  270. &:hover {
  271. @include controlsArrowTransform( $controlsArrowAngleHover );
  272. }
  273. &:active {
  274. @include controlsArrowTransform( $controlsArrowAngleActive );
  275. }
  276. }
  277. .navigate-left {
  278. right: $controlArrowSize + $controlArrowSpacing*2;
  279. bottom: $controlArrowSpacing + $controlArrowSize*0.5;
  280. transform: translateX( -10px );
  281. &.highlight {
  282. animation: bounce-left 2s 50 both ease-out;
  283. }
  284. }
  285. .navigate-right {
  286. right: 0;
  287. bottom: $controlArrowSpacing + $controlArrowSize*0.5;
  288. transform: translateX( 10px );
  289. .controls-arrow {
  290. transform: rotate( 180deg );
  291. }
  292. &.highlight {
  293. animation: bounce-right 2s 50 both ease-out;
  294. }
  295. }
  296. .navigate-up {
  297. right: $controlArrowSpacing + $controlArrowSize*0.5;
  298. bottom: $controlArrowSpacing*2 + $controlArrowSize;
  299. transform: translateY( -10px );
  300. .controls-arrow {
  301. transform: rotate( 90deg );
  302. }
  303. }
  304. .navigate-down {
  305. right: $controlArrowSpacing + $controlArrowSize*0.5;
  306. bottom: -$controlArrowSpacing;
  307. padding-bottom: $controlArrowSpacing;
  308. transform: translateY( 10px );
  309. .controls-arrow {
  310. transform: rotate( -90deg );
  311. }
  312. &.highlight {
  313. animation: bounce-down 2s 50 both ease-out;
  314. }
  315. }
  316. // Back arrow style: "faded":
  317. // Deemphasize backwards navigation arrows in favor of drawing
  318. // attention to forwards navigation
  319. &[data-controls-back-arrows="faded"] .navigate-up.enabled {
  320. opacity: 0.3;
  321. &:hover {
  322. opacity: 1;
  323. }
  324. }
  325. // Back arrow style: "hidden":
  326. // Never show arrows for backwards navigation
  327. &[data-controls-back-arrows="hidden"] .navigate-up.enabled {
  328. opacity: 0;
  329. visibility: hidden;
  330. }
  331. // Any control button that can be clicked is "enabled"
  332. .enabled {
  333. visibility: visible;
  334. opacity: 0.9;
  335. cursor: pointer;
  336. transform: none;
  337. }
  338. // Any control button that leads to showing or hiding
  339. // a fragment
  340. .enabled.fragmented {
  341. opacity: 0.5;
  342. }
  343. .enabled:hover,
  344. .enabled.fragmented:hover {
  345. opacity: 1;
  346. }
  347. }
  348. .reveal:not(.rtl) .controls {
  349. // Back arrow style: "faded":
  350. // Deemphasize left arrow
  351. &[data-controls-back-arrows="faded"] .navigate-left.enabled {
  352. opacity: 0.3;
  353. &:hover {
  354. opacity: 1;
  355. }
  356. }
  357. // Back arrow style: "hidden":
  358. // Never show left arrow
  359. &[data-controls-back-arrows="hidden"] .navigate-left.enabled {
  360. opacity: 0;
  361. visibility: hidden;
  362. }
  363. }
  364. .reveal.rtl .controls {
  365. // Back arrow style: "faded":
  366. // Deemphasize right arrow in RTL mode
  367. &[data-controls-back-arrows="faded"] .navigate-right.enabled {
  368. opacity: 0.3;
  369. &:hover {
  370. opacity: 1;
  371. }
  372. }
  373. // Back arrow style: "hidden":
  374. // Never show right arrow in RTL mode
  375. &[data-controls-back-arrows="hidden"] .navigate-right.enabled {
  376. opacity: 0;
  377. visibility: hidden;
  378. }
  379. }
  380. .reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-up,
  381. .reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-down {
  382. display: none;
  383. }
  384. // Adjust the layout when there are no vertical slides
  385. .reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-left,
  386. .reveal:not(.has-vertical-slides) .controls .navigate-left {
  387. bottom: $controlArrowSpacing;
  388. right: 0.5em + $controlArrowSpacing + $controlArrowSize;
  389. }
  390. .reveal[data-navigation-mode="linear"].has-horizontal-slides .navigate-right,
  391. .reveal:not(.has-vertical-slides) .controls .navigate-right {
  392. bottom: $controlArrowSpacing;
  393. right: 0.5em;
  394. }
  395. // Adjust the layout when there are no horizontal slides
  396. .reveal:not(.has-horizontal-slides) .controls .navigate-up {
  397. right: $controlArrowSpacing;
  398. bottom: $controlArrowSpacing + $controlArrowSize;
  399. }
  400. .reveal:not(.has-horizontal-slides) .controls .navigate-down {
  401. right: $controlArrowSpacing;
  402. bottom: 0.5em;
  403. }
  404. // Invert arrows based on background color
  405. .reveal.has-dark-background .controls {
  406. color: #fff;
  407. }
  408. .reveal.has-light-background .controls {
  409. color: #000;
  410. }
  411. // Disable active states on touch devices
  412. .reveal.no-hover .controls .controls-arrow:hover,
  413. .reveal.no-hover .controls .controls-arrow:active {
  414. @include controlsArrowTransform( $controlsArrowAngle );
  415. }
  416. // Edge aligned controls layout
  417. @media screen and (min-width: 500px) {
  418. $spacing: 0.8em;
  419. .reveal .controls[data-controls-layout="edges"] {
  420. & {
  421. top: 0;
  422. right: 0;
  423. bottom: 0;
  424. left: 0;
  425. }
  426. .navigate-left,
  427. .navigate-right,
  428. .navigate-up,
  429. .navigate-down {
  430. bottom: auto;
  431. right: auto;
  432. }
  433. .navigate-left {
  434. top: 50%;
  435. left: $spacing;
  436. margin-top: -$controlArrowSize*0.5;
  437. }
  438. .navigate-right {
  439. top: 50%;
  440. right: $spacing;
  441. margin-top: -$controlArrowSize*0.5;
  442. }
  443. .navigate-up {
  444. top: $spacing;
  445. left: 50%;
  446. margin-left: -$controlArrowSize*0.5;
  447. }
  448. .navigate-down {
  449. bottom: $spacing - $controlArrowSpacing + 0.3em;
  450. left: 50%;
  451. margin-left: -$controlArrowSize*0.5;
  452. }
  453. }
  454. }
  455. /*********************************************
  456. * PROGRESS BAR
  457. *********************************************/
  458. .reveal .progress {
  459. position: absolute;
  460. display: none;
  461. height: 3px;
  462. width: 100%;
  463. bottom: 0;
  464. left: 0;
  465. z-index: 10;
  466. background-color: rgba( 0, 0, 0, 0.2 );
  467. color: #fff;
  468. }
  469. .reveal .progress:after {
  470. content: '';
  471. display: block;
  472. position: absolute;
  473. height: 10px;
  474. width: 100%;
  475. top: -10px;
  476. }
  477. .reveal .progress span {
  478. display: block;
  479. height: 100%;
  480. width: 100%;
  481. background-color: currentColor;
  482. transition: transform 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
  483. transform-origin: 0 0;
  484. transform: scaleX(0);
  485. }
  486. /*********************************************
  487. * SLIDE NUMBER
  488. *********************************************/
  489. .reveal .slide-number {
  490. position: absolute;
  491. display: block;
  492. right: 8px;
  493. bottom: 8px;
  494. z-index: 31;
  495. font-family: Helvetica, sans-serif;
  496. font-size: 12px;
  497. line-height: 1;
  498. color: #fff;
  499. background-color: rgba( 0, 0, 0, 0.4 );
  500. padding: 5px;
  501. }
  502. .reveal .slide-number a {
  503. color: currentColor;
  504. }
  505. .reveal .slide-number-delimiter {
  506. margin: 0 3px;
  507. }
  508. /*********************************************
  509. * SLIDES
  510. *********************************************/
  511. .reveal {
  512. position: relative;
  513. width: 100%;
  514. height: 100%;
  515. overflow: hidden;
  516. touch-action: pinch-zoom;
  517. }
  518. // Swiping on an embedded deck should not block page scrolling
  519. .reveal.embedded {
  520. touch-action: pan-y;
  521. }
  522. .reveal .slides {
  523. position: absolute;
  524. width: 100%;
  525. height: 100%;
  526. top: 0;
  527. right: 0;
  528. bottom: 0;
  529. left: 0;
  530. margin: auto;
  531. pointer-events: none;
  532. overflow: visible;
  533. z-index: 1;
  534. text-align: center;
  535. perspective: 600px;
  536. perspective-origin: 50% 40%;
  537. }
  538. .reveal .slides>section {
  539. perspective: 600px;
  540. }
  541. .reveal .slides>section,
  542. .reveal .slides>section>section {
  543. display: none;
  544. position: absolute;
  545. width: 100%;
  546. pointer-events: auto;
  547. z-index: 10;
  548. transform-style: flat;
  549. transition: transform-origin 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985),
  550. transform 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985),
  551. visibility 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985),
  552. opacity 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
  553. }
  554. /* Global transition speed settings */
  555. .reveal[data-transition-speed="fast"] .slides section {
  556. transition-duration: 400ms;
  557. }
  558. .reveal[data-transition-speed="slow"] .slides section {
  559. transition-duration: 1200ms;
  560. }
  561. /* Slide-specific transition speed overrides */
  562. .reveal .slides section[data-transition-speed="fast"] {
  563. transition-duration: 400ms;
  564. }
  565. .reveal .slides section[data-transition-speed="slow"] {
  566. transition-duration: 1200ms;
  567. }
  568. .reveal .slides>section.stack {
  569. padding-top: 0;
  570. padding-bottom: 0;
  571. pointer-events: none;
  572. height: 100%;
  573. }
  574. .reveal .slides>section.present,
  575. .reveal .slides>section>section.present {
  576. display: block;
  577. z-index: 11;
  578. opacity: 1;
  579. }
  580. .reveal .slides>section:empty,
  581. .reveal .slides>section>section:empty,
  582. .reveal .slides>section[data-background-interactive],
  583. .reveal .slides>section>section[data-background-interactive] {
  584. pointer-events: none;
  585. }
  586. .reveal.center,
  587. .reveal.center .slides,
  588. .reveal.center .slides section {
  589. min-height: 0 !important;
  590. }
  591. /* Don't allow interaction with invisible slides */
  592. .reveal .slides>section:not(.present),
  593. .reveal .slides>section>section:not(.present) {
  594. pointer-events: none;
  595. }
  596. .reveal.overview .slides>section,
  597. .reveal.overview .slides>section>section {
  598. pointer-events: auto;
  599. }
  600. .reveal .slides>section.past,
  601. .reveal .slides>section.future,
  602. .reveal .slides>section.past>section,
  603. .reveal .slides>section.future>section,
  604. .reveal .slides>section>section.past,
  605. .reveal .slides>section>section.future {
  606. opacity: 0;
  607. }
  608. /*********************************************
  609. * Mixins for readability of transitions
  610. *********************************************/
  611. @mixin transition-global($style) {
  612. .reveal .slides section[data-transition=#{$style}],
  613. .reveal.#{$style} .slides section:not([data-transition]) {
  614. @content;
  615. }
  616. }
  617. @mixin transition-stack($style) {
  618. .reveal .slides section[data-transition=#{$style}].stack,
  619. .reveal.#{$style} .slides section.stack {
  620. @content;
  621. }
  622. }
  623. @mixin transition-horizontal-past($style) {
  624. .reveal .slides>section[data-transition=#{$style}].past,
  625. .reveal .slides>section[data-transition~=#{$style}-out].past,
  626. .reveal.#{$style} .slides>section:not([data-transition]).past {
  627. @content;
  628. }
  629. }
  630. @mixin transition-horizontal-future($style) {
  631. .reveal .slides>section[data-transition=#{$style}].future,
  632. .reveal .slides>section[data-transition~=#{$style}-in].future,
  633. .reveal.#{$style} .slides>section:not([data-transition]).future {
  634. @content;
  635. }
  636. }
  637. @mixin transition-vertical-past($style) {
  638. .reveal .slides>section>section[data-transition=#{$style}].past,
  639. .reveal .slides>section>section[data-transition~=#{$style}-out].past,
  640. .reveal.#{$style} .slides>section>section:not([data-transition]).past {
  641. @content;
  642. }
  643. }
  644. @mixin transition-vertical-future($style) {
  645. .reveal .slides>section>section[data-transition=#{$style}].future,
  646. .reveal .slides>section>section[data-transition~=#{$style}-in].future,
  647. .reveal.#{$style} .slides>section>section:not([data-transition]).future {
  648. @content;
  649. }
  650. }
  651. /*********************************************
  652. * SLIDE TRANSITION
  653. * Aliased 'linear' for backwards compatibility
  654. *********************************************/
  655. @each $stylename in slide, linear {
  656. @include transition-horizontal-past(#{$stylename}) {
  657. transform: translate(-150%, 0);
  658. }
  659. @include transition-horizontal-future(#{$stylename}) {
  660. transform: translate(150%, 0);
  661. }
  662. @include transition-vertical-past(#{$stylename}) {
  663. transform: translate(0, -150%);
  664. }
  665. @include transition-vertical-future(#{$stylename}) {
  666. transform: translate(0, 150%);
  667. }
  668. }
  669. /*********************************************
  670. * CONVEX TRANSITION
  671. * Aliased 'default' for backwards compatibility
  672. *********************************************/
  673. @each $stylename in default, convex {
  674. @include transition-stack(#{$stylename}) {
  675. transform-style: preserve-3d;
  676. }
  677. @include transition-horizontal-past(#{$stylename}) {
  678. transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
  679. }
  680. @include transition-horizontal-future(#{$stylename}) {
  681. transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
  682. }
  683. @include transition-vertical-past(#{$stylename}) {
  684. transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0);
  685. }
  686. @include transition-vertical-future(#{$stylename}) {
  687. transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0);
  688. }
  689. }
  690. /*********************************************
  691. * CONCAVE TRANSITION
  692. *********************************************/
  693. @include transition-stack(concave) {
  694. transform-style: preserve-3d;
  695. }
  696. @include transition-horizontal-past(concave) {
  697. transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
  698. }
  699. @include transition-horizontal-future(concave) {
  700. transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
  701. }
  702. @include transition-vertical-past(concave) {
  703. transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0);
  704. }
  705. @include transition-vertical-future(concave) {
  706. transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0);
  707. }
  708. /*********************************************
  709. * ZOOM TRANSITION
  710. *********************************************/
  711. @include transition-global(zoom) {
  712. transition-timing-function: ease;
  713. }
  714. @include transition-horizontal-past(zoom) {
  715. visibility: hidden;
  716. transform: scale(16);
  717. }
  718. @include transition-horizontal-future(zoom) {
  719. visibility: hidden;
  720. transform: scale(0.2);
  721. }
  722. @include transition-vertical-past(zoom) {
  723. transform: scale(16);
  724. }
  725. @include transition-vertical-future(zoom) {
  726. transform: scale(0.2);
  727. }
  728. /*********************************************
  729. * CUBE TRANSITION
  730. *
  731. * WARNING:
  732. * this is deprecated and will be removed in a
  733. * future version.
  734. *********************************************/
  735. .reveal.cube .slides {
  736. perspective: 1300px;
  737. }
  738. .reveal.cube .slides section {
  739. padding: 30px;
  740. min-height: 700px;
  741. backface-visibility: hidden;
  742. box-sizing: border-box;
  743. transform-style: preserve-3d;
  744. }
  745. .reveal.center.cube .slides section {
  746. min-height: 0;
  747. }
  748. .reveal.cube .slides section:not(.stack):before {
  749. content: '';
  750. position: absolute;
  751. display: block;
  752. width: 100%;
  753. height: 100%;
  754. left: 0;
  755. top: 0;
  756. background: rgba(0,0,0,0.1);
  757. border-radius: 4px;
  758. transform: translateZ( -20px );
  759. }
  760. .reveal.cube .slides section:not(.stack):after {
  761. content: '';
  762. position: absolute;
  763. display: block;
  764. width: 90%;
  765. height: 30px;
  766. left: 5%;
  767. bottom: 0;
  768. background: none;
  769. z-index: 1;
  770. border-radius: 4px;
  771. box-shadow: 0px 95px 25px rgba(0,0,0,0.2);
  772. transform: translateZ(-90px) rotateX( 65deg );
  773. }
  774. .reveal.cube .slides>section.stack {
  775. padding: 0;
  776. background: none;
  777. }
  778. .reveal.cube .slides>section.past {
  779. transform-origin: 100% 0%;
  780. transform: translate3d(-100%, 0, 0) rotateY(-90deg);
  781. }
  782. .reveal.cube .slides>section.future {
  783. transform-origin: 0% 0%;
  784. transform: translate3d(100%, 0, 0) rotateY(90deg);
  785. }
  786. .reveal.cube .slides>section>section.past {
  787. transform-origin: 0% 100%;
  788. transform: translate3d(0, -100%, 0) rotateX(90deg);
  789. }
  790. .reveal.cube .slides>section>section.future {
  791. transform-origin: 0% 0%;
  792. transform: translate3d(0, 100%, 0) rotateX(-90deg);
  793. }
  794. /*********************************************
  795. * PAGE TRANSITION
  796. *
  797. * WARNING:
  798. * this is deprecated and will be removed in a
  799. * future version.
  800. *********************************************/
  801. .reveal.page .slides {
  802. perspective-origin: 0% 50%;
  803. perspective: 3000px;
  804. }
  805. .reveal.page .slides section {
  806. padding: 30px;
  807. min-height: 700px;
  808. box-sizing: border-box;
  809. transform-style: preserve-3d;
  810. }
  811. .reveal.page .slides section.past {
  812. z-index: 12;
  813. }
  814. .reveal.page .slides section:not(.stack):before {
  815. content: '';
  816. position: absolute;
  817. display: block;
  818. width: 100%;
  819. height: 100%;
  820. left: 0;
  821. top: 0;
  822. background: rgba(0,0,0,0.1);
  823. transform: translateZ( -20px );
  824. }
  825. .reveal.page .slides section:not(.stack):after {
  826. content: '';
  827. position: absolute;
  828. display: block;
  829. width: 90%;
  830. height: 30px;
  831. left: 5%;
  832. bottom: 0;
  833. background: none;
  834. z-index: 1;
  835. border-radius: 4px;
  836. box-shadow: 0px 95px 25px rgba(0,0,0,0.2);
  837. -webkit-transform: translateZ(-90px) rotateX( 65deg );
  838. }
  839. .reveal.page .slides>section.stack {
  840. padding: 0;
  841. background: none;
  842. }
  843. .reveal.page .slides>section.past {
  844. transform-origin: 0% 0%;
  845. transform: translate3d(-40%, 0, 0) rotateY(-80deg);
  846. }
  847. .reveal.page .slides>section.future {
  848. transform-origin: 100% 0%;
  849. transform: translate3d(0, 0, 0);
  850. }
  851. .reveal.page .slides>section>section.past {
  852. transform-origin: 0% 0%;
  853. transform: translate3d(0, -40%, 0) rotateX(80deg);
  854. }
  855. .reveal.page .slides>section>section.future {
  856. transform-origin: 0% 100%;
  857. transform: translate3d(0, 0, 0);
  858. }
  859. /*********************************************
  860. * FADE TRANSITION
  861. *********************************************/
  862. .reveal .slides section[data-transition=fade],
  863. .reveal.fade .slides section:not([data-transition]),
  864. .reveal.fade .slides>section>section:not([data-transition]) {
  865. transform: none;
  866. transition: opacity 0.5s;
  867. }
  868. .reveal.fade.overview .slides section,
  869. .reveal.fade.overview .slides>section>section {
  870. transition: none;
  871. }
  872. /*********************************************
  873. * NO TRANSITION
  874. *********************************************/
  875. @include transition-global(none) {
  876. transform: none;
  877. transition: none;
  878. }
  879. /*********************************************
  880. * PAUSED MODE
  881. *********************************************/
  882. .reveal .pause-overlay {
  883. position: absolute;
  884. top: 0;
  885. left: 0;
  886. width: 100%;
  887. height: 100%;
  888. background: black;
  889. visibility: hidden;
  890. opacity: 0;
  891. z-index: 100;
  892. transition: all 1s ease;
  893. }
  894. .reveal .pause-overlay .resume-button {
  895. position: absolute;
  896. bottom: 20px;
  897. right: 20px;
  898. color: #ccc;
  899. border-radius: 2px;
  900. padding: 6px 14px;
  901. border: 2px solid #ccc;
  902. font-size: 16px;
  903. background: transparent;
  904. cursor: pointer;
  905. &:hover {
  906. color: #fff;
  907. border-color: #fff;
  908. }
  909. }
  910. .reveal.paused .pause-overlay {
  911. visibility: visible;
  912. opacity: 1;
  913. }
  914. /*********************************************
  915. * FALLBACK
  916. *********************************************/
  917. .reveal .no-transition,
  918. .reveal .no-transition *,
  919. .reveal .slides.disable-slide-transitions section {
  920. transition: none !important;
  921. }
  922. .reveal .slides.disable-slide-transitions section {
  923. transform: none !important;
  924. }
  925. /*********************************************
  926. * PER-SLIDE BACKGROUNDS
  927. *********************************************/
  928. .reveal .backgrounds {
  929. position: absolute;
  930. width: 100%;
  931. height: 100%;
  932. top: 0;
  933. left: 0;
  934. perspective: 600px;
  935. }
  936. .reveal .slide-background {
  937. display: none;
  938. position: absolute;
  939. width: 100%;
  940. height: 100%;
  941. opacity: 0;
  942. visibility: hidden;
  943. overflow: hidden;
  944. background-color: rgba( 0, 0, 0, 0 );
  945. transition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985);
  946. }
  947. .reveal .slide-background-content {
  948. position: absolute;
  949. width: 100%;
  950. height: 100%;
  951. background-position: 50% 50%;
  952. background-repeat: no-repeat;
  953. background-size: cover;
  954. }
  955. .reveal .slide-background.stack {
  956. display: block;
  957. }
  958. .reveal .slide-background.present {
  959. opacity: 1;
  960. visibility: visible;
  961. z-index: 2;
  962. }
  963. .print-pdf .reveal .slide-background {
  964. opacity: 1 !important;
  965. visibility: visible !important;
  966. }
  967. /* Video backgrounds */
  968. .reveal .slide-background video {
  969. position: absolute;
  970. width: 100%;
  971. height: 100%;
  972. max-width: none;
  973. max-height: none;
  974. top: 0;
  975. left: 0;
  976. object-fit: cover;
  977. }
  978. .reveal .slide-background[data-background-size="contain"] video {
  979. object-fit: contain;
  980. }
  981. /* Immediate transition style */
  982. .reveal[data-background-transition=none]>.backgrounds .slide-background:not([data-background-transition]),
  983. .reveal>.backgrounds .slide-background[data-background-transition=none] {
  984. transition: none;
  985. }
  986. /* Slide */
  987. .reveal[data-background-transition=slide]>.backgrounds .slide-background:not([data-background-transition]),
  988. .reveal>.backgrounds .slide-background[data-background-transition=slide] {
  989. opacity: 1;
  990. }
  991. .reveal[data-background-transition=slide]>.backgrounds .slide-background.past:not([data-background-transition]),
  992. .reveal>.backgrounds .slide-background.past[data-background-transition=slide] {
  993. transform: translate(-100%, 0);
  994. }
  995. .reveal[data-background-transition=slide]>.backgrounds .slide-background.future:not([data-background-transition]),
  996. .reveal>.backgrounds .slide-background.future[data-background-transition=slide] {
  997. transform: translate(100%, 0);
  998. }
  999. .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]),
  1000. .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide] {
  1001. transform: translate(0, -100%);
  1002. }
  1003. .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]),
  1004. .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide] {
  1005. transform: translate(0, 100%);
  1006. }
  1007. /* Convex */
  1008. .reveal[data-background-transition=convex]>.backgrounds .slide-background.past:not([data-background-transition]),
  1009. .reveal>.backgrounds .slide-background.past[data-background-transition=convex] {
  1010. opacity: 0;
  1011. transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
  1012. }
  1013. .reveal[data-background-transition=convex]>.backgrounds .slide-background.future:not([data-background-transition]),
  1014. .reveal>.backgrounds .slide-background.future[data-background-transition=convex] {
  1015. opacity: 0;
  1016. transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
  1017. }
  1018. .reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]),
  1019. .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex] {
  1020. opacity: 0;
  1021. transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0);
  1022. }
  1023. .reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]),
  1024. .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex] {
  1025. opacity: 0;
  1026. transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0);
  1027. }
  1028. /* Concave */
  1029. .reveal[data-background-transition=concave]>.backgrounds .slide-background.past:not([data-background-transition]),
  1030. .reveal>.backgrounds .slide-background.past[data-background-transition=concave] {
  1031. opacity: 0;
  1032. transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
  1033. }
  1034. .reveal[data-background-transition=concave]>.backgrounds .slide-background.future:not([data-background-transition]),
  1035. .reveal>.backgrounds .slide-background.future[data-background-transition=concave] {
  1036. opacity: 0;
  1037. transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
  1038. }
  1039. .reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]),
  1040. .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave] {
  1041. opacity: 0;
  1042. transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0);
  1043. }
  1044. .reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]),
  1045. .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave] {
  1046. opacity: 0;
  1047. transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0);
  1048. }
  1049. /* Zoom */
  1050. .reveal[data-background-transition=zoom]>.backgrounds .slide-background:not([data-background-transition]),
  1051. .reveal>.backgrounds .slide-background[data-background-transition=zoom] {
  1052. transition-timing-function: ease;
  1053. }
  1054. .reveal[data-background-transition=zoom]>.backgrounds .slide-background.past:not([data-background-transition]),
  1055. .reveal>.backgrounds .slide-background.past[data-background-transition=zoom] {
  1056. opacity: 0;
  1057. visibility: hidden;
  1058. transform: scale(16);
  1059. }
  1060. .reveal[data-background-transition=zoom]>.backgrounds .slide-background.future:not([data-background-transition]),
  1061. .reveal>.backgrounds .slide-background.future[data-background-transition=zoom] {
  1062. opacity: 0;
  1063. visibility: hidden;
  1064. transform: scale(0.2);
  1065. }
  1066. .reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]),
  1067. .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom] {
  1068. opacity: 0;
  1069. visibility: hidden;
  1070. transform: scale(16);
  1071. }
  1072. .reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]),
  1073. .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom] {
  1074. opacity: 0;
  1075. visibility: hidden;
  1076. transform: scale(0.2);
  1077. }
  1078. /* Global transition speed settings */
  1079. .reveal[data-transition-speed="fast"]>.backgrounds .slide-background {
  1080. transition-duration: 400ms;
  1081. }
  1082. .reveal[data-transition-speed="slow"]>.backgrounds .slide-background {
  1083. transition-duration: 1200ms;
  1084. }
  1085. /*********************************************
  1086. * AUTO ANIMATE
  1087. *********************************************/
  1088. .reveal [data-auto-animate-target^="unmatched"] {
  1089. will-change: opacity;
  1090. }
  1091. .reveal section[data-auto-animate]:not(.stack):not([data-auto-animate="running"]) [data-auto-animate-target^="unmatched"] {
  1092. opacity: 0;
  1093. }
  1094. /*********************************************
  1095. * OVERVIEW
  1096. *********************************************/
  1097. .reveal.overview {
  1098. perspective-origin: 50% 50%;
  1099. perspective: 700px;
  1100. .slides {
  1101. // Fixes overview rendering errors in FF48+, not applied to
  1102. // other browsers since it degrades performance
  1103. -moz-transform-style: preserve-3d;
  1104. }
  1105. .slides section {
  1106. height: 100%;
  1107. top: 0 !important;
  1108. opacity: 1 !important;
  1109. overflow: hidden;
  1110. visibility: visible !important;
  1111. cursor: pointer;
  1112. box-sizing: border-box;
  1113. }
  1114. .slides section:hover,
  1115. .slides section.present {
  1116. outline: 10px solid rgba(150,150,150,0.4);
  1117. outline-offset: 10px;
  1118. }
  1119. .slides section .fragment {
  1120. opacity: 1;
  1121. transition: none;
  1122. }
  1123. .slides section:after,
  1124. .slides section:before {
  1125. display: none !important;
  1126. }
  1127. .slides>section.stack {
  1128. padding: 0;
  1129. top: 0 !important;
  1130. background: none;
  1131. outline: none;
  1132. overflow: visible;
  1133. }
  1134. .backgrounds {
  1135. perspective: inherit;
  1136. // Fixes overview rendering errors in FF48+, not applied to
  1137. // other browsers since it degrades performance
  1138. -moz-transform-style: preserve-3d;
  1139. }
  1140. .backgrounds .slide-background {
  1141. opacity: 1;
  1142. visibility: visible;
  1143. // This can't be applied to the slide itself in Safari
  1144. outline: 10px solid rgba(150,150,150,0.1);
  1145. outline-offset: 10px;
  1146. }
  1147. .backgrounds .slide-background.stack {
  1148. overflow: visible;
  1149. }
  1150. }
  1151. // Disable transitions transitions while we're activating
  1152. // or deactivating the overview mode.
  1153. .reveal.overview .slides section,
  1154. .reveal.overview-deactivating .slides section {
  1155. transition: none;
  1156. }
  1157. .reveal.overview .backgrounds .slide-background,
  1158. .reveal.overview-deactivating .backgrounds .slide-background {
  1159. transition: none;
  1160. }
  1161. /*********************************************
  1162. * RTL SUPPORT
  1163. *********************************************/
  1164. .reveal.rtl .slides,
  1165. .reveal.rtl .slides h1,
  1166. .reveal.rtl .slides h2,
  1167. .reveal.rtl .slides h3,
  1168. .reveal.rtl .slides h4,
  1169. .reveal.rtl .slides h5,
  1170. .reveal.rtl .slides h6 {
  1171. direction: rtl;
  1172. font-family: sans-serif;
  1173. }
  1174. .reveal.rtl pre,
  1175. .reveal.rtl code {
  1176. direction: ltr;
  1177. }
  1178. .reveal.rtl ol,
  1179. .reveal.rtl ul {
  1180. text-align: right;
  1181. }
  1182. .reveal.rtl .progress span {
  1183. transform-origin: 100% 0;
  1184. }
  1185. /*********************************************
  1186. * PARALLAX BACKGROUND
  1187. *********************************************/
  1188. .reveal.has-parallax-background .backgrounds {
  1189. transition: all 0.8s ease;
  1190. }
  1191. /* Global transition speed settings */
  1192. .reveal.has-parallax-background[data-transition-speed="fast"] .backgrounds {
  1193. transition-duration: 400ms;
  1194. }
  1195. .reveal.has-parallax-background[data-transition-speed="slow"] .backgrounds {
  1196. transition-duration: 1200ms;
  1197. }
  1198. /*********************************************
  1199. * OVERLAY FOR LINK PREVIEWS AND HELP
  1200. *********************************************/
  1201. $overlayHeaderHeight: 40px;
  1202. $overlayHeaderPadding: 5px;
  1203. .reveal > .overlay {
  1204. position: absolute;
  1205. top: 0;
  1206. left: 0;
  1207. width: 100%;
  1208. height: 100%;
  1209. z-index: 1000;
  1210. background: rgba( 0, 0, 0, 0.9 );
  1211. transition: all 0.3s ease;
  1212. }
  1213. .reveal > .overlay .spinner {
  1214. position: absolute;
  1215. display: block;
  1216. top: 50%;
  1217. left: 50%;
  1218. width: 32px;
  1219. height: 32px;
  1220. margin: -16px 0 0 -16px;
  1221. z-index: 10;
  1222. 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);
  1223. visibility: visible;
  1224. opacity: 0.6;
  1225. transition: all 0.3s ease;
  1226. }
  1227. .reveal > .overlay header {
  1228. position: absolute;
  1229. left: 0;
  1230. top: 0;
  1231. width: 100%;
  1232. padding: $overlayHeaderPadding;
  1233. z-index: 2;
  1234. box-sizing: border-box;
  1235. }
  1236. .reveal > .overlay header a {
  1237. display: inline-block;
  1238. width: $overlayHeaderHeight;
  1239. height: $overlayHeaderHeight;
  1240. line-height: 36px;
  1241. padding: 0 10px;
  1242. float: right;
  1243. opacity: 0.6;
  1244. box-sizing: border-box;
  1245. }
  1246. .reveal > .overlay header a:hover {
  1247. opacity: 1;
  1248. }
  1249. .reveal > .overlay header a .icon {
  1250. display: inline-block;
  1251. width: 20px;
  1252. height: 20px;
  1253. background-position: 50% 50%;
  1254. background-size: 100%;
  1255. background-repeat: no-repeat;
  1256. }
  1257. .reveal > .overlay header a.close .icon {
  1258. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC);
  1259. }
  1260. .reveal > .overlay header a.external .icon {
  1261. background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==);
  1262. }
  1263. .reveal > .overlay .viewport {
  1264. position: absolute;
  1265. display: flex;
  1266. top: $overlayHeaderHeight + $overlayHeaderPadding*2;
  1267. right: 0;
  1268. bottom: 0;
  1269. left: 0;
  1270. }
  1271. .reveal > .overlay.overlay-preview .viewport iframe {
  1272. width: 100%;
  1273. height: 100%;
  1274. max-width: 100%;
  1275. max-height: 100%;
  1276. border: 0;
  1277. opacity: 0;
  1278. visibility: hidden;
  1279. transition: all 0.3s ease;
  1280. }
  1281. .reveal > .overlay.overlay-preview.loaded .viewport iframe {
  1282. opacity: 1;
  1283. visibility: visible;
  1284. }
  1285. .reveal > .overlay.overlay-preview.loaded .viewport-inner {
  1286. position: absolute;
  1287. z-index: -1;
  1288. left: 0;
  1289. top: 45%;
  1290. width: 100%;
  1291. text-align: center;
  1292. letter-spacing: normal;
  1293. }
  1294. .reveal > .overlay.overlay-preview .x-frame-error {
  1295. opacity: 0;
  1296. transition: opacity 0.3s ease 0.3s;
  1297. }
  1298. .reveal > .overlay.overlay-preview.loaded .x-frame-error {
  1299. opacity: 1;
  1300. }
  1301. .reveal > .overlay.overlay-preview.loaded .spinner {
  1302. opacity: 0;
  1303. visibility: hidden;
  1304. transform: scale(0.2);
  1305. }
  1306. .reveal > .overlay.overlay-help .viewport {
  1307. overflow: auto;
  1308. color: #fff;
  1309. }
  1310. .reveal > .overlay.overlay-help .viewport .viewport-inner {
  1311. width: 600px;
  1312. margin: auto;
  1313. padding: 20px 20px 80px 20px;
  1314. text-align: center;
  1315. letter-spacing: normal;
  1316. }
  1317. .reveal > .overlay.overlay-help .viewport .viewport-inner .title {
  1318. font-size: 20px;
  1319. }
  1320. .reveal > .overlay.overlay-help .viewport .viewport-inner table {
  1321. border: 1px solid #fff;
  1322. border-collapse: collapse;
  1323. font-size: 16px;
  1324. }
  1325. .reveal > .overlay.overlay-help .viewport .viewport-inner table th,
  1326. .reveal > .overlay.overlay-help .viewport .viewport-inner table td {
  1327. width: 200px;
  1328. padding: 14px;
  1329. border: 1px solid #fff;
  1330. vertical-align: middle;
  1331. }
  1332. .reveal > .overlay.overlay-help .viewport .viewport-inner table th {
  1333. padding-top: 20px;
  1334. padding-bottom: 20px;
  1335. }
  1336. /*********************************************
  1337. * PLAYBACK COMPONENT
  1338. *********************************************/
  1339. .reveal .playback {
  1340. position: absolute;
  1341. left: 15px;
  1342. bottom: 20px;
  1343. z-index: 30;
  1344. cursor: pointer;
  1345. transition: all 400ms ease;
  1346. -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );
  1347. }
  1348. .reveal.overview .playback {
  1349. opacity: 0;
  1350. visibility: hidden;
  1351. }
  1352. /*********************************************
  1353. * CODE HIGHLGIHTING
  1354. *********************************************/
  1355. .reveal .hljs {
  1356. min-height: 100%;
  1357. }
  1358. .reveal .hljs table {
  1359. margin: initial;
  1360. }
  1361. .reveal .hljs-ln-code,
  1362. .reveal .hljs-ln-numbers {
  1363. padding: 0;
  1364. border: 0;
  1365. }
  1366. .reveal .hljs-ln-numbers {
  1367. opacity: 0.6;
  1368. padding-right: 0.75em;
  1369. text-align: right;
  1370. vertical-align: top;
  1371. }
  1372. .reveal .hljs.has-highlights tr:not(.highlight-line) {
  1373. opacity: 0.4;
  1374. }
  1375. .reveal .hljs:not(:first-child).fragment {
  1376. position: absolute;
  1377. top: 0;
  1378. left: 0;
  1379. width: 100%;
  1380. box-sizing: border-box;
  1381. }
  1382. .reveal pre[data-auto-animate-target] {
  1383. overflow: hidden;
  1384. }
  1385. .reveal pre[data-auto-animate-target] code {
  1386. height: 100%;
  1387. }
  1388. /*********************************************
  1389. * ROLLING LINKS
  1390. *********************************************/
  1391. .reveal .roll {
  1392. display: inline-block;
  1393. line-height: 1.2;
  1394. overflow: hidden;
  1395. vertical-align: top;
  1396. perspective: 400px;
  1397. perspective-origin: 50% 50%;
  1398. }
  1399. .reveal .roll:hover {
  1400. background: none;
  1401. text-shadow: none;
  1402. }
  1403. .reveal .roll span {
  1404. display: block;
  1405. position: relative;
  1406. padding: 0 2px;
  1407. pointer-events: none;
  1408. transition: all 400ms ease;
  1409. transform-origin: 50% 0%;
  1410. transform-style: preserve-3d;
  1411. backface-visibility: hidden;
  1412. }
  1413. .reveal .roll:hover span {
  1414. background: rgba(0,0,0,0.5);
  1415. transform: translate3d( 0px, 0px, -45px ) rotateX( 90deg );
  1416. }
  1417. .reveal .roll span:after {
  1418. content: attr(data-title);
  1419. display: block;
  1420. position: absolute;
  1421. left: 0;
  1422. top: 0;
  1423. padding: 0 2px;
  1424. backface-visibility: hidden;
  1425. transform-origin: 50% 0%;
  1426. transform: translate3d( 0px, 110%, 0px ) rotateX( -90deg );
  1427. }
  1428. /*********************************************
  1429. * SPEAKER NOTES
  1430. *********************************************/
  1431. $notesWidthPercent: 25%;
  1432. // Hide on-page notes
  1433. .reveal aside.notes {
  1434. display: none;
  1435. }
  1436. // An interface element that can optionally be used to show the
  1437. // speaker notes to all viewers, on top of the presentation
  1438. .reveal .speaker-notes {
  1439. display: none;
  1440. position: absolute;
  1441. width: math.div($notesWidthPercent, (1 - math.div($notesWidthPercent,100))) * 1%;
  1442. height: 100%;
  1443. top: 0;
  1444. left: 100%;
  1445. padding: 14px 18px 14px 18px;
  1446. z-index: 1;
  1447. font-size: 18px;
  1448. line-height: 1.4;
  1449. border: 1px solid rgba( 0, 0, 0, 0.05 );
  1450. color: #222;
  1451. background-color: #f5f5f5;
  1452. overflow: auto;
  1453. box-sizing: border-box;
  1454. text-align: left;
  1455. font-family: Helvetica, sans-serif;
  1456. -webkit-overflow-scrolling: touch;
  1457. .notes-placeholder {
  1458. color: #ccc;
  1459. font-style: italic;
  1460. }
  1461. &:focus {
  1462. outline: none;
  1463. }
  1464. &:before {
  1465. content: 'Speaker notes';
  1466. display: block;
  1467. margin-bottom: 10px;
  1468. opacity: 0.5;
  1469. }
  1470. }
  1471. .reveal.show-notes {
  1472. max-width: 100% - $notesWidthPercent;
  1473. overflow: visible;
  1474. }
  1475. .reveal.show-notes .speaker-notes {
  1476. display: block;
  1477. }
  1478. @media screen and (min-width: 1600px) {
  1479. .reveal .speaker-notes {
  1480. font-size: 20px;
  1481. }
  1482. }
  1483. @media screen and (max-width: 1024px) {
  1484. .reveal.show-notes {
  1485. border-left: 0;
  1486. max-width: none;
  1487. max-height: 70%;
  1488. max-height: 70vh;
  1489. overflow: visible;
  1490. }
  1491. .reveal.show-notes .speaker-notes {
  1492. top: 100%;
  1493. left: 0;
  1494. width: 100%;
  1495. height: 30vh;
  1496. border: 0;
  1497. }
  1498. }
  1499. @media screen and (max-width: 600px) {
  1500. .reveal.show-notes {
  1501. max-height: 60%;
  1502. max-height: 60vh;
  1503. }
  1504. .reveal.show-notes .speaker-notes {
  1505. top: 100%;
  1506. height: 40vh;
  1507. }
  1508. .reveal .speaker-notes {
  1509. font-size: 14px;
  1510. }
  1511. }
  1512. /*********************************************
  1513. * JUMP-TO-SLIDE COMPONENT
  1514. *********************************************/
  1515. .reveal .jump-to-slide {
  1516. position: absolute;
  1517. top: 15px;
  1518. left: 15px;
  1519. z-index: 30;
  1520. font-size: 32px;
  1521. -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 );
  1522. }
  1523. .reveal .jump-to-slide-input {
  1524. background: transparent;
  1525. padding: 8px;
  1526. font-size: inherit;
  1527. color: currentColor;
  1528. border: 0;
  1529. }
  1530. .reveal .jump-to-slide-input::placeholder {
  1531. color: currentColor;
  1532. opacity: 0.5;
  1533. }
  1534. .reveal.has-dark-background .jump-to-slide-input {
  1535. color: #fff;
  1536. }
  1537. .reveal.has-light-background .jump-to-slide-input {
  1538. color: #222;
  1539. }
  1540. .reveal .jump-to-slide-input:focus {
  1541. outline: none;
  1542. }
  1543. /*********************************************
  1544. * ZOOM PLUGIN
  1545. *********************************************/
  1546. .zoomed .reveal *,
  1547. .zoomed .reveal *:before,
  1548. .zoomed .reveal *:after {
  1549. backface-visibility: visible !important;
  1550. }
  1551. .zoomed .reveal .progress,
  1552. .zoomed .reveal .controls {
  1553. opacity: 0;
  1554. }
  1555. .zoomed .reveal .roll span {
  1556. background: none;
  1557. }
  1558. .zoomed .reveal .roll span:after {
  1559. visibility: hidden;
  1560. }
  1561. /*********************************************
  1562. * PRINT STYLES
  1563. *********************************************/
  1564. @import 'print/pdf.scss';
  1565. @import 'print/paper.scss';