reveal.scss 42 KB

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