Full Code of hakimel/reveal.js for AI

master ea3d7aaff513 cached
216 files
6.1 MB
1.6M tokens
1939 symbols
2 requests
Download .txt
Showing preview only (6,430K chars total). Download the full file or copy to clipboard to get everything.
Repository: hakimel/reveal.js
Branch: master
Commit: ea3d7aaff513
Files: 216
Total size: 6.1 MB

Directory structure:
gitextract_hvnf3hrt/

├── .codespellrc
├── .github/
│   ├── CONTRIBUTING.md
│   ├── FUNDING.yml
│   └── workflows/
│       ├── spellcheck.yml
│       └── test.yml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── LICENSE
├── README.md
├── css/
│   ├── layout.scss
│   ├── print/
│   │   ├── paper.scss
│   │   └── pdf.scss
│   ├── reset.css
│   ├── reveal.scss
│   └── theme/
│       ├── README.md
│       ├── beige.scss
│       ├── black-contrast.scss
│       ├── black.scss
│       ├── blood.scss
│       ├── dracula.scss
│       ├── fonts/
│       │   ├── league-gothic/
│       │   │   ├── LICENSE
│       │   │   └── league-gothic.css
│       │   └── source-sans-pro/
│       │       ├── LICENSE
│       │       └── source-sans-pro.css
│       ├── league.scss
│       ├── moon.scss
│       ├── night.scss
│       ├── serif.scss
│       ├── simple.scss
│       ├── sky.scss
│       ├── solarized.scss
│       ├── template/
│       │   ├── mixins.scss
│       │   ├── settings.scss
│       │   └── theme.scss
│       ├── white-contrast.scss
│       └── white.scss
├── demo.html
├── dist/
│   ├── config.d.ts
│   ├── plugin/
│   │   ├── highlight/
│   │   │   ├── monokai.css
│   │   │   └── zenburn.css
│   │   ├── highlight.d.ts
│   │   ├── highlight.js
│   │   ├── highlight.mjs
│   │   ├── markdown.d.ts
│   │   ├── markdown.js
│   │   ├── markdown.mjs
│   │   ├── math.d.ts
│   │   ├── math.js
│   │   ├── math.mjs
│   │   ├── notes.d.ts
│   │   ├── notes.js
│   │   ├── notes.mjs
│   │   ├── search.d.ts
│   │   ├── search.js
│   │   ├── search.mjs
│   │   ├── zoom.d.ts
│   │   ├── zoom.js
│   │   └── zoom.mjs
│   ├── reset.css
│   ├── reveal.css
│   ├── reveal.d.ts
│   ├── reveal.js
│   ├── reveal.mjs
│   ├── theme/
│   │   ├── beige.css
│   │   ├── black-contrast.css
│   │   ├── black.css
│   │   ├── blood.css
│   │   ├── dracula.css
│   │   ├── league.css
│   │   ├── moon.css
│   │   ├── night.css
│   │   ├── serif.css
│   │   ├── simple.css
│   │   ├── sky.css
│   │   ├── solarized.css
│   │   ├── white-contrast.css
│   │   └── white.css
│   └── utils/
│       ├── color.d.ts
│       ├── constants.d.ts
│       ├── device.d.ts
│       ├── loader.d.ts
│       └── util.d.ts
├── examples/
│   ├── 500-slides.html
│   ├── assets/
│   │   └── beeping.txt
│   ├── auto-animate.html
│   ├── backgrounds.html
│   ├── barebones.html
│   ├── layout-helpers.html
│   ├── lightbox.html
│   ├── markdown.html
│   ├── markdown.md
│   ├── math.html
│   ├── media.html
│   ├── multiple-presentations.html
│   ├── scroll.html
│   └── transitions.html
├── index.html
├── js/
│   ├── components/
│   │   └── playback.js
│   ├── config.ts
│   ├── controllers/
│   │   ├── autoanimate.js
│   │   ├── backgrounds.js
│   │   ├── controls.js
│   │   ├── focus.js
│   │   ├── fragments.js
│   │   ├── jumptoslide.js
│   │   ├── keyboard.js
│   │   ├── location.js
│   │   ├── notes.js
│   │   ├── overlay.js
│   │   ├── overview.js
│   │   ├── plugins.js
│   │   ├── pointer.js
│   │   ├── printview.js
│   │   ├── progress.js
│   │   ├── scrollview.js
│   │   ├── slidecontent.js
│   │   ├── slidenumber.js
│   │   └── touch.js
│   ├── index.ts
│   ├── reveal.d.ts
│   ├── reveal.js
│   └── utils/
│       ├── color.ts
│       ├── constants.ts
│       ├── device.ts
│       ├── loader.ts
│       └── util.ts
├── package.json
├── plugin/
│   ├── highlight/
│   │   ├── index.ts
│   │   ├── plugin.js
│   │   └── vite.config.ts
│   ├── markdown/
│   │   ├── index.ts
│   │   ├── plugin.js
│   │   └── vite.config.ts
│   ├── math/
│   │   ├── index.ts
│   │   ├── katex.js
│   │   ├── mathjax2.js
│   │   ├── mathjax3.js
│   │   ├── mathjax4.js
│   │   ├── plugin.js
│   │   └── vite.config.ts
│   ├── notes/
│   │   ├── index.ts
│   │   ├── plugin.js
│   │   ├── speaker-view.html
│   │   └── vite.config.ts
│   ├── search/
│   │   ├── index.ts
│   │   ├── plugin.js
│   │   └── vite.config.ts
│   ├── vite-plugin-dts.ts
│   └── zoom/
│       ├── index.ts
│       ├── plugin.js
│       └── vite.config.ts
├── public/
│   └── plugin/
│       └── highlight/
│           ├── monokai.css
│           └── zenburn.css
├── react/
│   ├── AGENTS.md
│   ├── README.md
│   ├── demo/
│   │   ├── index.html
│   │   ├── package.json
│   │   ├── public/
│   │   │   └── markdown.md
│   │   ├── src/
│   │   │   ├── demo-app.tsx
│   │   │   └── main.tsx
│   │   ├── tsconfig.json
│   │   └── vite.config.ts
│   ├── package.json
│   ├── src/
│   │   ├── __tests__/
│   │   │   └── setup.ts
│   │   ├── components/
│   │   │   ├── code.test.tsx
│   │   │   ├── code.tsx
│   │   │   ├── deck.test.tsx
│   │   │   ├── deck.tsx
│   │   │   ├── fragment.test.tsx
│   │   │   ├── fragment.tsx
│   │   │   ├── markdown.test.tsx
│   │   │   ├── markdown.tsx
│   │   │   ├── slide.test.tsx
│   │   │   ├── slide.tsx
│   │   │   ├── stack.test.tsx
│   │   │   └── stack.tsx
│   │   ├── index.ts
│   │   ├── reveal-context.ts
│   │   ├── types.ts
│   │   └── utils/
│   │       ├── markdown.ts
│   │       └── slide-attributes.ts
│   ├── tsconfig.json
│   ├── vite.config.ts
│   └── vitest.config.ts
├── scripts/
│   ├── add-banner.js
│   ├── banner.js
│   ├── build-es5.js
│   ├── test.js
│   └── zip.js
├── test/
│   ├── assets/
│   │   ├── external-script-a.js
│   │   ├── external-script-b.js
│   │   ├── external-script-c.js
│   │   └── external-script-d.js
│   ├── simple.md
│   ├── test-auto-animate.html
│   ├── test-dependencies-async.html
│   ├── test-dependencies.html
│   ├── test-destroy.html
│   ├── test-grid-navigation.html
│   ├── test-iframe-backgrounds.html
│   ├── test-iframes.html
│   ├── test-markdown.html
│   ├── test-mathjax4.html
│   ├── test-multiple-instances-es5.html
│   ├── test-multiple-instances.html
│   ├── test-pdf.html
│   ├── test-plugins.html
│   ├── test-scroll.html
│   ├── test-state.html
│   ├── test.html
│   └── types/
│       └── plugin-imports.ts
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.styles.ts
└── vite.config.ts

================================================
FILE CONTENTS
================================================

================================================
FILE: .codespellrc
================================================
[codespell]
# Ref: https://github.com/codespell-project/codespell#using-a-config-file
skip = .git*,node_modules,package-lock.json,*.css,.codespellrc,react
check-hidden = true
# Ignore super long lines -- must be minimized etc, acronyms
# and some near hit variables
ignore-regex = ^.{120,}|\b(currentY|FOM)\b
# ignore-words-list =


================================================
FILE: .github/CONTRIBUTING.md
================================================
## Contributing
Please keep the [issue tracker](https://github.com/hakimel/reveal.js/issues) limited to **bug reports**.


### General Questions and Support
If you have questions about how to use reveal.js the best place to ask is in the [Discussions](https://github.com/hakimel/reveal.js/discussions). Anything that isn't a bug report should be posted as a dicussion instead.


### Bug Reports
When reporting a bug make sure to include information about which browser and operating system you are on as well as the necessary steps to reproduce the issue. If possible please include a link to a sample presentation where the bug can be tested.


### Pull Requests
- Should be submitted from a feature/topic branch (not your master)
- Should follow the coding style of the file you work in, most importantly:
  - Tabs to indent
  - Single-quoted strings


### Plugins
Please do not submit plugins as pull requests. They should be maintained in their own separate repository. More information here: https://github.com/hakimel/reveal.js/wiki/Plugin-Guidelines


================================================
FILE: .github/FUNDING.yml
================================================
github: [hakimel]


================================================
FILE: .github/workflows/spellcheck.yml
================================================
# Codespell configuration is within .codespellrc
---
name: Spellcheck

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

permissions:
  contents: read

jobs:
  codespell:
    name: Check for spelling errors
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Codespell
        uses: codespell-project/actions-codespell@v2
        with:
          skip: ./.git,./dist,package-lock.json,*.css,.codespellrc,./react/


================================================
FILE: .github/workflows/test.yml
================================================
name: Tests

on:
  - push

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version:
          - 20
          - 22

    steps:
      - uses: actions/checkout@v4

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      - run: npm install
      - run: npm run build --if-present
      - run: npm test
        env:
          CI: true


================================================
FILE: .gitignore
================================================
.idea/
*.iml
*.iws
*.eml
out/
.DS_Store
.svn
log/*.log
tmp/**
node_modules/
.sass-cache
presentation
presentation.zip
dist/reveal.es5.js
react/dist
react/demo/dist

================================================
FILE: .prettierignore
================================================
js/**/*.js
plugin/**/*.js
**/*.md
test/**/*.html
examples/**/*.md
dist/**/*
*.html

================================================
FILE: .prettierrc
================================================
{
	"useTabs": true,
	"tabWidth": 2,
	"trailingComma": "es5",
	"printWidth": 100,
	"singleQuote": true,
	"bracketSameLine": false
}


================================================
FILE: LICENSE
================================================
Copyright (C) 2011-2026 Hakim El Hattab, http://hakim.se, and reveal.js contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

================================================
FILE: README.md
================================================
<p align="center">
  <a href="https://revealjs.com">
  <img src="https://hakim-static.s3.amazonaws.com/reveal-js/logo/v1/reveal-black-text-sticker.png" alt="reveal.js" width="500">
  </a>
  <br><br>
  <a href="https://github.com/hakimel/reveal.js/actions"><img src="https://github.com/hakimel/reveal.js/workflows/tests/badge.svg"></a>
  <a href="https://slides.com/"><img src="https://static.slid.es/images/slides-github-banner-320x40.png?1" alt="Slides" width="160" height="20"></a>
</p>

reveal.js is an open source HTML presentation framework. It enables anyone with a web browser to create beautiful presentations for free. Check out the live demo at [revealjs.com](https://revealjs.com/).

The framework comes with a powerful feature set including [nested slides](https://revealjs.com/vertical-slides/), [Markdown support](https://revealjs.com/markdown/), [Auto-Animate](https://revealjs.com/auto-animate/), [PDF export](https://revealjs.com/pdf-export/), [speaker notes](https://revealjs.com/speaker-view/), [LaTeX typesetting](https://revealjs.com/math/), [syntax highlighted code](https://revealjs.com/code/) and an [extensive API](https://revealjs.com/api/).

---

Want to create reveal.js presentation in a graphical editor? Try <https://slides.com>. It's made by the same people behind reveal.js.

---

### Getting started

- 🚀 [Install reveal.js](https://revealjs.com/installation)
- 👀 [View the demo presentation](https://revealjs.com/demo)
- 📖 [Read the documentation](https://revealjs.com/markup/)
- 🖌 [Try the visual editor for reveal.js at Slides.com](https://slides.com/)
- 🎬 [Watch the reveal.js video course (paid)](https://revealjs.com/course)

---

<div align="center">
  MIT licensed | Copyright © 2011-2026 Hakim El Hattab, https://hakim.se
</div>


================================================
FILE: css/layout.scss
================================================
/**
 * Layout helpers.
 */

// Stretch an element vertically based on available space
.reveal .stretch,
.reveal .r-stretch {
	max-width: none;
	max-height: none;
}

.reveal pre.stretch code,
.reveal pre.r-stretch code {
	height: 100%;
	max-height: 100%;
	box-sizing: border-box;
}

// Text that auto-fits its container
.reveal .r-fit-text {
	display: inline-block; // https://github.com/rikschennink/fitty#performance
	white-space: nowrap;
}

// Stack multiple elements on top of each other
.reveal .r-stack {
	display: grid;
	grid-template-rows: 100%;
}

.reveal .r-stack > * {
	grid-area: 1/1;
	margin: auto;
}

// Horizontal and vertical stacks
.reveal .r-vstack,
.reveal .r-hstack {
	display: flex;

	img,
	video {
		min-width: 0;
		min-height: 0;
		object-fit: contain;
	}
}

.reveal .r-vstack {
	flex-direction: column;
	align-items: center;
	justify-content: center;
}

.reveal .r-hstack {
	flex-direction: row;
	align-items: center;
	justify-content: center;
}

// Naming based on tailwindcss
.reveal .items-stretch {
	align-items: stretch;
}
.reveal .items-start {
	align-items: flex-start;
}
.reveal .items-center {
	align-items: center;
}
.reveal .items-end {
	align-items: flex-end;
}

.reveal .justify-between {
	justify-content: space-between;
}
.reveal .justify-around {
	justify-content: space-around;
}
.reveal .justify-start {
	justify-content: flex-start;
}
.reveal .justify-center {
	justify-content: center;
}
.reveal .justify-end {
	justify-content: flex-end;
}


================================================
FILE: css/print/paper.scss
================================================
@media print {
	html:not(.print-pdf) {
		overflow: visible;
		width: auto;
		height: auto;

		body {
			margin: 0;
			padding: 0;
			overflow: visible;
		}
	}

	html:not(.print-pdf) .reveal {
		background: #fff;
		font-size: 20pt;

		.controls,
		.state-background,
		.progress,
		.backgrounds,
		.slide-number {
			display: none !important;
		}

		p,
		td,
		li {
			font-size: 20pt !important;
			color: #000;
		}

		h1,
		h2,
		h3,
		h4,
		h5,
		h6 {
			color: #000 !important;
			height: auto;
			line-height: normal;
			text-align: left;
			letter-spacing: normal;
		}

		h1 {
			font-size: 28pt !important;
		}
		h2 {
			font-size: 24pt !important;
		}
		h3 {
			font-size: 22pt !important;
		}
		h4 {
			font-size: 22pt !important;
			font-variant: small-caps;
		}
		h5 {
			font-size: 21pt !important;
		}
		h6 {
			font-size: 20pt !important;
			font-style: italic;
		}

		a:link,
		a:visited {
			color: #000 !important;
			font-weight: bold;
			text-decoration: underline;
		}

		ul,
		ol,
		div,
		p {
			visibility: visible;
			position: static;
			width: auto;
			height: auto;
			display: block;
			overflow: visible;
			margin: 0;
			text-align: left !important;
		}
		pre,
		table {
			margin-left: 0;
			margin-right: 0;
		}
		pre code {
			padding: 20px;
		}
		blockquote {
			margin: 20px 0;
		}

		.slides {
			position: static !important;
			width: auto !important;
			height: auto !important;

			left: 0 !important;
			top: 0 !important;
			margin-left: 0 !important;
			margin-top: 0 !important;
			padding: 0 !important;
			zoom: 1 !important;
			transform: none !important;

			overflow: visible !important;
			display: block !important;

			text-align: left !important;
			perspective: none;

			perspective-origin: 50% 50%;
		}
		.slides section {
			visibility: visible !important;
			position: static !important;
			width: auto !important;
			height: auto !important;
			display: block !important;
			overflow: visible !important;

			left: 0 !important;
			top: 0 !important;
			margin-left: 0 !important;
			margin-top: 0 !important;
			padding: 60px 20px !important;
			z-index: auto !important;

			opacity: 1 !important;

			page-break-after: always !important;

			transform-style: flat !important;
			transform: none !important;
			transition: none !important;
		}
		.slides section.stack {
			padding: 0 !important;
		}
		.slides section:last-of-type {
			page-break-after: avoid !important;
		}
		.slides section .fragment {
			opacity: 1 !important;
			visibility: visible !important;

			transform: none !important;
		}

		.r-fit-text {
			white-space: normal !important;
		}

		section img {
			display: block;
			margin: 15px 0px;
			background: rgba(255, 255, 255, 1);
			border: 1px solid #666;
			box-shadow: none;
		}

		section small {
			font-size: 0.8em;
		}

		.hljs {
			max-height: 100%;
			white-space: pre-wrap;
			word-wrap: break-word;
			word-break: break-word;
			font-size: 15pt;
		}

		.hljs .hljs-ln-numbers {
			white-space: nowrap;
		}

		.hljs td {
			font-size: inherit !important;
			color: inherit !important;
		}
	}
}


================================================
FILE: css/print/pdf.scss
================================================
/**
 * This stylesheet is used to print reveal.js
 * presentations to PDF.
 *
 * https://revealjs.com/pdf-export/
 */

html.reveal-print {
	* {
		-webkit-print-color-adjust: exact;
	}

	& {
		width: 100%;
		height: 100%;
		overflow: visible;
	}

	body {
		margin: 0 auto !important;
		border: 0;
		padding: 0;
		float: none !important;
		overflow: visible;
	}

	/* Remove any elements not needed in print. */
	.nestedarrow,
	.reveal .controls,
	.reveal .progress,
	.reveal .playback,
	.reveal.overview,
	.state-background {
		display: none !important;
	}

	.reveal pre code {
		overflow: hidden !important;
	}

	.reveal {
		width: auto !important;
		height: auto !important;
		overflow: hidden !important;
	}
	.reveal .slides {
		position: static;
		width: 100% !important;
		height: auto !important;
		zoom: 1 !important;
		pointer-events: initial;

		left: auto;
		top: auto;
		margin: 0 !important;
		padding: 0 !important;

		overflow: visible;
		display: block;

		perspective: none;
		perspective-origin: 50% 50%;
	}

	.reveal .slides .pdf-page {
		position: relative;
		overflow: hidden;
		z-index: 1;

		page-break-after: always;
	}

	.reveal .slides .pdf-page:last-of-type {
		page-break-after: avoid;
	}

	.reveal .slides section {
		visibility: visible !important;
		display: block !important;
		position: absolute !important;

		margin: 0 !important;
		padding: 0 !important;
		box-sizing: border-box !important;
		min-height: 1px;

		opacity: 1 !important;

		transform-style: flat !important;
		transform: none !important;
	}

	.reveal section.stack {
		position: relative !important;
		margin: 0 !important;
		padding: 0 !important;
		page-break-after: avoid !important;
		height: auto !important;
		min-height: auto !important;
	}

	.reveal img {
		box-shadow: none;
	}

	/* Slide backgrounds are placed inside of their slide when exporting to PDF */
	.reveal .backgrounds {
		display: none;
	}
	.reveal .slide-background {
		display: block !important;
		position: absolute;
		top: 0;
		left: 0;
		width: 100%;
		height: 100%;
		z-index: auto !important;
	}

	/* Display slide speaker notes when 'showNotes' is enabled */
	.reveal.show-notes {
		max-width: none;
		max-height: none;
	}
	.reveal .speaker-notes-pdf {
		display: block;
		width: 100%;
		height: auto;
		max-height: none;
		top: auto;
		right: auto;
		bottom: auto;
		left: auto;
		z-index: 100;
	}

	/* Layout option which makes notes appear on a separate page */
	.reveal .speaker-notes-pdf[data-layout='separate-page'] {
		position: relative;
		color: inherit;
		background-color: transparent;
		padding: 20px;
		page-break-after: always;
		border: 0;
	}

	/* Display slide numbers when 'slideNumber' is enabled */
	.reveal .slide-number-pdf {
		display: block;
		position: absolute;
		font-size: 14px;
		visibility: visible;
	}

	/* This accessibility tool is not useful in PDF and breaks it visually */
	.aria-status {
		display: none;
	}
}


================================================
FILE: css/reset.css
================================================
/* http://meyerweb.com/eric/tools/css/reset/
   v4.0 | 20180602
   License: none (public domain)
*/

/* prettier-ignore */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
main, menu, nav, output, ruby, section, summary,
time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}
/* prettier-ignore */
article, aside, details, figcaption, figure,
footer, header, hgroup, main, menu, nav, section {
  display: block;
}


================================================
FILE: css/reveal.scss
================================================
/**
 * reveal.js
 * http://revealjs.com
 * MIT licensed
 *
 * Copyright (C) Hakim El Hattab, https://hakim.se
 */

@use 'sass:math';
@use 'sass:meta';
@use 'layout';

/*********************************************
 * GLOBAL STYLES
 *********************************************/

html.reveal-full-page {
	width: 100%;
	height: 100%;
	height: 100vh;
	height: calc(var(--vh, 1vh) * 100);
	height: 100dvh;
	overflow: hidden;
}

.reveal-viewport {
	height: 100%;
	overflow: hidden;
	position: relative;
	line-height: 1;
	margin: 0;

	background-color: #fff;
	color: #000;

	--r-controls-spacing: 12px;
	--r-overlay-header-height: 40px;
	--r-overlay-margin: 0px;
	--r-overlay-padding: 6px;
	--r-overlay-gap: 5px;
}

@media screen and (max-width: 1024px), (max-height: 768px) {
	.reveal-viewport {
		--r-overlay-header-height: 26px;
	}
}

// Force the presentation to cover the full viewport when we
// enter fullscreen mode. Fixes sizing issues in Safari.
.reveal-viewport:fullscreen {
	top: 0 !important;
	left: 0 !important;
	width: 100% !important;
	height: 100% !important;
	transform: none !important;
}

/*********************************************
 * VIEW FRAGMENTS
 *********************************************/

.reveal .fragment {
	transition: all 0.2s ease;

	&:not(.custom) {
		opacity: 0;
		visibility: hidden;
		will-change: opacity;
	}

	&.visible {
		opacity: 1;
		visibility: inherit;
	}

	&.disabled {
		transition: none;
	}
}

.reveal .fragment.grow {
	opacity: 1;
	visibility: inherit;

	&.visible {
		transform: scale(1.3);
	}
}

.reveal .fragment.shrink {
	opacity: 1;
	visibility: inherit;

	&.visible {
		transform: scale(0.7);
	}
}

.reveal .fragment.zoom-in {
	transform: scale(0.1);

	&.visible {
		transform: none;
	}
}

.reveal .fragment.fade-out {
	opacity: 1;
	visibility: inherit;

	&.visible {
		opacity: 0;
		visibility: hidden;
	}
}

.reveal .fragment.semi-fade-out {
	opacity: 1;
	visibility: inherit;

	&.visible {
		opacity: 0.5;
		visibility: inherit;
	}
}

.reveal .fragment.strike {
	opacity: 1;
	visibility: inherit;

	&.visible {
		text-decoration: line-through;
	}
}

.reveal .fragment.fade-up {
	transform: translate(0, 40px);

	&.visible {
		transform: translate(0, 0);
	}
}

.reveal .fragment.fade-down {
	transform: translate(0, -40px);

	&.visible {
		transform: translate(0, 0);
	}
}

.reveal .fragment.fade-right {
	transform: translate(-40px, 0);

	&.visible {
		transform: translate(0, 0);
	}
}

.reveal .fragment.fade-left {
	transform: translate(40px, 0);

	&.visible {
		transform: translate(0, 0);
	}
}

.reveal .fragment.fade-in-then-out,
.reveal .fragment.current-visible {
	opacity: 0;
	visibility: hidden;

	&.current-fragment {
		opacity: 1;
		visibility: inherit;
	}
}

.reveal .fragment.fade-in-then-semi-out {
	opacity: 0;
	visibility: hidden;

	&.visible {
		opacity: 0.5;
		visibility: inherit;
	}

	&.current-fragment {
		opacity: 1;
		visibility: inherit;
	}
}

.reveal .fragment.highlight-red,
.reveal .fragment.highlight-current-red,
.reveal .fragment.highlight-green,
.reveal .fragment.highlight-current-green,
.reveal .fragment.highlight-blue,
.reveal .fragment.highlight-current-blue {
	opacity: 1;
	visibility: inherit;
}
.reveal .fragment.highlight-red.visible {
	color: #ff2c2d;
}
.reveal .fragment.highlight-green.visible {
	color: #17ff2e;
}
.reveal .fragment.highlight-blue.visible {
	color: #1b91ff;
}

.reveal .fragment.highlight-current-red.current-fragment {
	color: #ff2c2d;
}
.reveal .fragment.highlight-current-green.current-fragment {
	color: #17ff2e;
}
.reveal .fragment.highlight-current-blue.current-fragment {
	color: #1b91ff;
}

/*********************************************
 * DEFAULT ELEMENT STYLES
 *********************************************/

/* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */
.reveal:after {
	content: '';
	font-style: italic;
}

.reveal iframe {
	z-index: 1;
}

/** Prevents layering issues in certain browser/transition combinations */
.reveal a {
	position: relative;
}

/*********************************************
 * CONTROLS
 *********************************************/

@keyframes bounce-right {
	0%,
	10%,
	25%,
	40%,
	50% {
		transform: translateX(0);
	}
	20% {
		transform: translateX(10px);
	}
	30% {
		transform: translateX(-5px);
	}
}

@keyframes bounce-left {
	0%,
	10%,
	25%,
	40%,
	50% {
		transform: translateX(0);
	}
	20% {
		transform: translateX(-10px);
	}
	30% {
		transform: translateX(5px);
	}
}

@keyframes bounce-down {
	0%,
	10%,
	25%,
	40%,
	50% {
		transform: translateY(0);
	}
	20% {
		transform: translateY(10px);
	}
	30% {
		transform: translateY(-5px);
	}
}

$controlArrowSize: 3.6em;
$controlArrowSpacing: 1.4em;
$controlArrowLength: 2.6em;
$controlArrowThickness: 0.5em;
$controlsArrowAngle: 45deg;
$controlsArrowAngleHover: 40deg;
$controlsArrowAngleActive: 36deg;

@mixin controlsArrowTransform($angle) {
	&:before {
		transform: translateX(($controlArrowSize - $controlArrowLength) * 0.5)
			translateY(($controlArrowSize - $controlArrowThickness) * 0.5) rotate($angle);
	}

	&:after {
		transform: translateX(($controlArrowSize - $controlArrowLength) * 0.5)
			translateY(($controlArrowSize - $controlArrowThickness) * 0.5) rotate(-$angle);
	}
}

.reveal .controls {
	display: none;
	position: absolute;
	top: auto;
	bottom: var(--r-controls-spacing);
	right: var(--r-controls-spacing);
	left: auto;
	z-index: 11;
	color: #000;
	pointer-events: none;
	font-size: 10px;

	button {
		position: absolute;
		padding: 0;
		background-color: transparent;
		border: 0;
		outline: 0;
		cursor: pointer;
		color: currentColor;
		transform: scale(0.9999);
		transition:
			color 0.2s ease,
			opacity 0.2s ease,
			transform 0.2s ease;
		z-index: 2; // above slides
		pointer-events: auto;
		font-size: inherit;

		visibility: hidden;
		opacity: 0;

		-webkit-appearance: none;
		-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
	}

	.controls-arrow:before,
	.controls-arrow:after {
		content: '';
		position: absolute;
		top: 0;
		left: 0;
		width: $controlArrowLength;
		height: $controlArrowThickness;
		border-radius: $controlArrowThickness * 0.5;
		background-color: currentColor;

		transition:
			all 0.15s ease,
			background-color 0.8s ease;
		transform-origin: math.div(math.floor(($controlArrowThickness * 0.5) * 10), 10) 50%;
		will-change: transform;
	}

	.controls-arrow {
		position: relative;
		width: $controlArrowSize;
		height: $controlArrowSize;

		@include controlsArrowTransform($controlsArrowAngle);

		&:hover {
			@include controlsArrowTransform($controlsArrowAngleHover);
		}

		&:active {
			@include controlsArrowTransform($controlsArrowAngleActive);
		}
	}

	.navigate-left {
		right: $controlArrowSize + $controlArrowSpacing * 2;
		bottom: $controlArrowSpacing + $controlArrowSize * 0.5;
		transform: translateX(-10px);

		&.highlight {
			animation: bounce-left 2s 50 both ease-out;
		}
	}

	.navigate-right {
		right: 0;
		bottom: $controlArrowSpacing + $controlArrowSize * 0.5;
		transform: translateX(10px);

		.controls-arrow {
			transform: rotate(180deg);
		}

		&.highlight {
			animation: bounce-right 2s 50 both ease-out;
		}
	}

	.navigate-up {
		right: $controlArrowSpacing + $controlArrowSize * 0.5;
		bottom: $controlArrowSpacing * 2 + $controlArrowSize;
		transform: translateY(-10px);

		.controls-arrow {
			transform: rotate(90deg);
		}
	}

	.navigate-down {
		right: $controlArrowSpacing + $controlArrowSize * 0.5;
		bottom: -$controlArrowSpacing;
		padding-bottom: $controlArrowSpacing;
		transform: translateY(10px);

		.controls-arrow {
			transform: rotate(-90deg);
		}

		&.highlight {
			animation: bounce-down 2s 50 both ease-out;
		}
	}

	// Back arrow style: "faded":
	// Deemphasize backwards navigation arrows in favor of drawing
	// attention to forwards navigation
	&[data-controls-back-arrows='faded'] .navigate-up.enabled {
		opacity: 0.3;

		&:hover {
			opacity: 1;
		}
	}

	// Back arrow style: "hidden":
	// Never show arrows for backwards navigation
	&[data-controls-back-arrows='hidden'] .navigate-up.enabled {
		opacity: 0;
		visibility: hidden;
	}

	// Any control button that can be clicked is "enabled"
	.enabled {
		visibility: visible;
		opacity: 0.9;
		cursor: pointer;
		transform: none;
	}

	// Any control button that leads to showing or hiding
	// a fragment
	.enabled.fragmented {
		opacity: 0.5;
	}

	.enabled:hover,
	.enabled.fragmented:hover {
		opacity: 1;
	}
}

.reveal:not(.rtl) .controls {
	// Back arrow style: "faded":
	// Deemphasize left arrow
	&[data-controls-back-arrows='faded'] .navigate-left.enabled {
		opacity: 0.3;

		&:hover {
			opacity: 1;
		}
	}

	// Back arrow style: "hidden":
	// Never show left arrow
	&[data-controls-back-arrows='hidden'] .navigate-left.enabled {
		opacity: 0;
		visibility: hidden;
	}
}

.reveal.rtl .controls {
	// Back arrow style: "faded":
	// Deemphasize right arrow in RTL mode
	&[data-controls-back-arrows='faded'] .navigate-right.enabled {
		opacity: 0.3;

		&:hover {
			opacity: 1;
		}
	}

	// Back arrow style: "hidden":
	// Never show right arrow in RTL mode
	&[data-controls-back-arrows='hidden'] .navigate-right.enabled {
		opacity: 0;
		visibility: hidden;
	}
}

.reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-up,
.reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-down {
	display: none;
}

// Adjust the layout when there are no vertical slides
.reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-left,
.reveal:not(.has-vertical-slides) .controls .navigate-left {
	bottom: $controlArrowSpacing;
	right: 0.5em + $controlArrowSpacing + $controlArrowSize;
}

.reveal[data-navigation-mode='linear'].has-horizontal-slides .navigate-right,
.reveal:not(.has-vertical-slides) .controls .navigate-right {
	bottom: $controlArrowSpacing;
	right: 0.5em;
}

// Adjust the layout when there are no horizontal slides
.reveal:not(.has-horizontal-slides) .controls .navigate-up {
	right: $controlArrowSpacing;
	bottom: $controlArrowSpacing + $controlArrowSize;
}
.reveal:not(.has-horizontal-slides) .controls .navigate-down {
	right: $controlArrowSpacing;
	bottom: 0.5em;
}

// Invert arrows based on background color
.reveal.has-dark-background .controls {
	color: #fff;
}
.reveal.has-light-background .controls {
	color: #000;
}

// Disable active states on touch devices
.reveal.no-hover .controls .controls-arrow:hover,
.reveal.no-hover .controls .controls-arrow:active {
	@include controlsArrowTransform($controlsArrowAngle);
}

// Edge aligned controls layout
@media screen and (min-width: 500px) {
	.reveal-viewport {
		--r-controls-spacing: 0.8em;
	}

	.reveal .controls[data-controls-layout='edges'] {
		& {
			top: 0;
			right: 0;
			bottom: 0;
			left: 0;
		}

		.navigate-left,
		.navigate-right,
		.navigate-up,
		.navigate-down {
			bottom: auto;
			right: auto;
		}

		.navigate-left {
			top: 50%;
			left: var(--r-controls-spacing);
			margin-top: -$controlArrowSize * 0.5;
		}

		.navigate-right {
			top: 50%;
			right: var(--r-controls-spacing);
			margin-top: -$controlArrowSize * 0.5;
		}

		.navigate-up {
			top: var(--r-controls-spacing);
			left: 50%;
			margin-left: -$controlArrowSize * 0.5;
		}

		.navigate-down {
			bottom: calc(var(--r-controls-spacing) - #{$controlArrowSpacing} + 0.3em);
			left: 50%;
			margin-left: -$controlArrowSize * 0.5;
		}
	}
}

/*********************************************
 * PROGRESS BAR
 *********************************************/

.reveal .progress {
	position: absolute;
	display: none;
	height: 3px;
	width: 100%;
	bottom: 0;
	left: 0;
	z-index: 10;

	background-color: rgba(0, 0, 0, 0.2);
	color: #fff;
}
.reveal .progress:after {
	content: '';
	display: block;
	position: absolute;
	height: 10px;
	width: 100%;
	top: -10px;
}
.reveal .progress span {
	display: block;
	height: 100%;
	width: 100%;

	background-color: currentColor;
	transition: transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
	transform-origin: 0 0;
	transform: scaleX(0);
}

/*********************************************
 * SLIDE NUMBER
 *********************************************/

.reveal .slide-number {
	position: absolute;
	display: block;
	right: 8px;
	bottom: 8px;
	z-index: 31;
	font-family: Helvetica, sans-serif;
	font-size: 12px;
	line-height: 1;
	color: #fff;
	background-color: rgba(0, 0, 0, 0.4);
	padding: 5px;
}

.reveal .slide-number a {
	color: currentColor;
}

.reveal .slide-number-delimiter {
	margin: 0 3px;
}

/*********************************************
 * SLIDES
 *********************************************/

.reveal {
	position: relative;
	width: 100%;
	height: 100%;
	overflow: hidden;
	touch-action: pinch-zoom;
}

// Swiping on an embedded deck should not block page scrolling...
.reveal.embedded {
	touch-action: pan-y;
}

// ... unless we're on a vertical slide
.reveal.embedded.is-vertical-slide {
	touch-action: none;
}

.reveal .slides {
	position: absolute;
	width: 100%;
	height: 100%;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	margin: auto;
	pointer-events: none;

	overflow: visible;
	z-index: 1;
	text-align: center;
	perspective: 600px;
	perspective-origin: 50% 40%;
}

.reveal .slides > section {
	perspective: 600px;
}

.reveal .slides > section,
.reveal .slides > section > section {
	display: none;
	position: absolute;
	width: 100%;
	pointer-events: auto;

	z-index: 10;
	transform-style: flat;
	transition:
		transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985),
		transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985),
		visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985),
		opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
}

/* Global transition speed settings */
.reveal[data-transition-speed='fast'] .slides section {
	transition-duration: 400ms;
}
.reveal[data-transition-speed='slow'] .slides section {
	transition-duration: 1200ms;
}

/* Slide-specific transition speed overrides */
.reveal .slides section[data-transition-speed='fast'] {
	transition-duration: 400ms;
}
.reveal .slides section[data-transition-speed='slow'] {
	transition-duration: 1200ms;
}

.reveal .slides > section.stack {
	padding-top: 0;
	padding-bottom: 0;
	pointer-events: none;
	height: 100%;
}

.reveal .slides > section.present,
.reveal .slides > section > section.present {
	display: block;
	z-index: 11;
	opacity: 1;
}

.reveal .slides > section:empty,
.reveal .slides > section > section:empty,
.reveal .slides > section[data-background-interactive],
.reveal .slides > section > section[data-background-interactive] {
	pointer-events: none;
}

.reveal.center,
.reveal.center .slides,
.reveal.center .slides section {
	min-height: 0 !important;
}

/* Don't allow interaction with invisible slides */
.reveal .slides > section:not(.present),
.reveal .slides > section > section:not(.present) {
	pointer-events: none;
}

.reveal.overview .slides > section,
.reveal.overview .slides > section > section {
	pointer-events: auto;
}

.reveal .slides > section.past,
.reveal .slides > section.future,
.reveal .slides > section.past > section,
.reveal .slides > section.future > section,
.reveal .slides > section > section.past,
.reveal .slides > section > section.future {
	opacity: 0;
}

/*********************************************
 * Mixins for readability of transitions
 *********************************************/

@mixin transition-global($style) {
	.reveal .slides section[data-transition='#{$style}'],
	.reveal.#{$style} .slides section:not([data-transition]) {
		@content;
	}
}
@mixin transition-stack($style) {
	.reveal .slides section[data-transition='#{$style}'].stack,
	.reveal.#{$style} .slides section.stack {
		@content;
	}
}
@mixin transition-horizontal-past($style) {
	.reveal .slides > section[data-transition='#{$style}'].past,
	.reveal .slides > section[data-transition~='#{$style}-out'].past,
	.reveal.#{$style} .slides > section:not([data-transition]).past {
		@content;
	}
}
@mixin transition-horizontal-future($style) {
	.reveal .slides > section[data-transition='#{$style}'].future,
	.reveal .slides > section[data-transition~='#{$style}-in'].future,
	.reveal.#{$style} .slides > section:not([data-transition]).future {
		@content;
	}
}

@mixin transition-vertical-past($style) {
	.reveal .slides > section > section[data-transition='#{$style}'].past,
	.reveal .slides > section > section[data-transition~='#{$style}-out'].past,
	.reveal.#{$style} .slides > section > section:not([data-transition]).past {
		@content;
	}
}
@mixin transition-vertical-future($style) {
	.reveal .slides > section > section[data-transition='#{$style}'].future,
	.reveal .slides > section > section[data-transition~='#{$style}-in'].future,
	.reveal.#{$style} .slides > section > section:not([data-transition]).future {
		@content;
	}
}

/*********************************************
 * SLIDE TRANSITION
 * Aliased 'linear' for backwards compatibility
 *********************************************/

@each $stylename in slide, linear {
	@include transition-horizontal-past(#{$stylename}) {
		transform: translate(-150%, 0);
	}
	@include transition-horizontal-future(#{$stylename}) {
		transform: translate(150%, 0);
	}
	@include transition-vertical-past(#{$stylename}) {
		transform: translate(0, -150%);
	}
	@include transition-vertical-future(#{$stylename}) {
		transform: translate(0, 150%);
	}
}

/*********************************************
 * CONVEX TRANSITION
 * Aliased 'default' for backwards compatibility
 *********************************************/

@each $stylename in default, convex {
	@include transition-stack(#{$stylename}) {
		transform-style: preserve-3d;
	}

	@include transition-horizontal-past(#{$stylename}) {
		transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
	}
	@include transition-horizontal-future(#{$stylename}) {
		transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
	}
	@include transition-vertical-past(#{$stylename}) {
		transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0);
	}
	@include transition-vertical-future(#{$stylename}) {
		transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0);
	}
}

/*********************************************
 * CONCAVE TRANSITION
 *********************************************/

@include transition-stack(concave) {
	transform-style: preserve-3d;
}

@include transition-horizontal-past(concave) {
	transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
}
@include transition-horizontal-future(concave) {
	transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
}
@include transition-vertical-past(concave) {
	transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0);
}
@include transition-vertical-future(concave) {
	transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0);
}

/*********************************************
 * ZOOM TRANSITION
 *********************************************/

@include transition-global(zoom) {
	transition-timing-function: ease;
}
@include transition-horizontal-past(zoom) {
	visibility: hidden;
	transform: scale(16);
}
@include transition-horizontal-future(zoom) {
	visibility: hidden;
	transform: scale(0.2);
}
@include transition-vertical-past(zoom) {
	transform: scale(16);
}
@include transition-vertical-future(zoom) {
	transform: scale(0.2);
}

/*********************************************
 * CUBE TRANSITION
 *
 * WARNING:
 * this is deprecated and will be removed in a
 * future version.
 *********************************************/

.reveal.cube .slides {
	perspective: 1300px;
}

.reveal.cube .slides section {
	padding: 30px;
	min-height: 700px;
	backface-visibility: hidden;
	box-sizing: border-box;
	transform-style: preserve-3d;
}
.reveal.center.cube .slides section {
	min-height: 0;
}
.reveal.cube .slides section:not(.stack):before {
	content: '';
	position: absolute;
	display: block;
	width: 100%;
	height: 100%;
	left: 0;
	top: 0;
	background: rgba(0, 0, 0, 0.1);
	border-radius: 4px;
	transform: translateZ(-20px);
}
.reveal.cube .slides section:not(.stack):after {
	content: '';
	position: absolute;
	display: block;
	width: 90%;
	height: 30px;
	left: 5%;
	bottom: 0;
	background: none;
	z-index: 1;

	border-radius: 4px;
	box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);
	transform: translateZ(-90px) rotateX(65deg);
}

.reveal.cube .slides > section.stack {
	padding: 0;
	background: none;
}

.reveal.cube .slides > section.past {
	transform-origin: 100% 0%;
	transform: translate3d(-100%, 0, 0) rotateY(-90deg);
}

.reveal.cube .slides > section.future {
	transform-origin: 0% 0%;
	transform: translate3d(100%, 0, 0) rotateY(90deg);
}

.reveal.cube .slides > section > section.past {
	transform-origin: 0% 100%;
	transform: translate3d(0, -100%, 0) rotateX(90deg);
}

.reveal.cube .slides > section > section.future {
	transform-origin: 0% 0%;
	transform: translate3d(0, 100%, 0) rotateX(-90deg);
}

/*********************************************
 * PAGE TRANSITION
 *
 * WARNING:
 * this is deprecated and will be removed in a
 * future version.
 *********************************************/

.reveal.page .slides {
	perspective-origin: 0% 50%;
	perspective: 3000px;
}

.reveal.page .slides section {
	padding: 30px;
	min-height: 700px;
	box-sizing: border-box;
	transform-style: preserve-3d;
}
.reveal.page .slides section.past {
	z-index: 12;
}
.reveal.page .slides section:not(.stack):before {
	content: '';
	position: absolute;
	display: block;
	width: 100%;
	height: 100%;
	left: 0;
	top: 0;
	background: rgba(0, 0, 0, 0.1);
	transform: translateZ(-20px);
}
.reveal.page .slides section:not(.stack):after {
	content: '';
	position: absolute;
	display: block;
	width: 90%;
	height: 30px;
	left: 5%;
	bottom: 0;
	background: none;
	z-index: 1;

	border-radius: 4px;
	box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2);

	transform: translateZ(-90px) rotateX(65deg);
}

.reveal.page .slides > section.stack {
	padding: 0;
	background: none;
}

.reveal.page .slides > section.past {
	transform-origin: 0% 0%;
	transform: translate3d(-40%, 0, 0) rotateY(-80deg);
}

.reveal.page .slides > section.future {
	transform-origin: 100% 0%;
	transform: translate3d(0, 0, 0);
}

.reveal.page .slides > section > section.past {
	transform-origin: 0% 0%;
	transform: translate3d(0, -40%, 0) rotateX(80deg);
}

.reveal.page .slides > section > section.future {
	transform-origin: 0% 100%;
	transform: translate3d(0, 0, 0);
}

/*********************************************
 * FADE TRANSITION
 *********************************************/

.reveal .slides section[data-transition='fade'],
.reveal.fade .slides section:not([data-transition]),
.reveal.fade .slides > section > section:not([data-transition]) {
	transform: none;
	transition: opacity 0.5s;
}

.reveal.fade.overview .slides section,
.reveal.fade.overview .slides > section > section {
	transition: none;
}

/*********************************************
 * NO TRANSITION
 *********************************************/

@include transition-global(none) {
	transform: none;
	transition: none;
}

/*********************************************
 * PAUSED MODE
 *********************************************/

.reveal .pause-overlay {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	background: black;
	visibility: hidden;
	opacity: 0;
	z-index: 100;
	transition: all 1s ease;
}

.reveal .pause-overlay .resume-button {
	position: absolute;
	bottom: 20px;
	right: 20px;
	color: #ccc;
	border-radius: 2px;
	padding: 6px 14px;
	border: 2px solid #ccc;
	font-size: 16px;
	background: transparent;
	cursor: pointer;

	&:hover {
		color: #fff;
		border-color: #fff;
	}
}

.reveal.paused .pause-overlay {
	visibility: visible;
	opacity: 1;
}

/*********************************************
 * FALLBACK
 *********************************************/

.reveal .no-transition,
.reveal .no-transition *,
.reveal .slides.disable-slide-transitions section {
	transition: none !important;
}

.reveal .slides.disable-slide-transitions section {
	transform: none !important;
}

/*********************************************
 * PER-SLIDE BACKGROUNDS
 *********************************************/

.reveal .backgrounds {
	position: absolute;
	width: 100%;
	height: 100%;
	top: 0;
	left: 0;
	perspective: 600px;
}
.reveal .slide-background {
	display: none;
	position: absolute;
	width: 100%;
	height: 100%;
	opacity: 0;
	visibility: hidden;
	overflow: hidden;

	background-color: rgba(0, 0, 0, 0);

	transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985);
}

.reveal .slide-background-content {
	position: absolute;
	width: 100%;
	height: 100%;

	background-position: 50% 50%;
	background-repeat: no-repeat;
	background-size: cover;
}

.reveal .slide-background.stack {
	display: block;
}

.reveal .slide-background.present {
	opacity: 1;
	visibility: visible;
	z-index: 2;
}

.print-pdf .reveal .slide-background {
	opacity: 1 !important;
	visibility: visible !important;
}

/* Video backgrounds */
.reveal .slide-background video {
	position: absolute;
	width: 100%;
	height: 100%;
	max-width: none;
	max-height: none;
	top: 0;
	left: 0;
	object-fit: cover;
}
.reveal .slide-background[data-background-size='contain'] video {
	object-fit: contain;
}

/* Immediate transition style */
.reveal[data-background-transition='none']
	> .backgrounds
	.slide-background:not([data-background-transition]),
.reveal > .backgrounds .slide-background[data-background-transition='none'] {
	transition: none;
}

/* Slide */
.reveal[data-background-transition='slide']
	> .backgrounds
	.slide-background:not([data-background-transition]),
.reveal > .backgrounds .slide-background[data-background-transition='slide'] {
	opacity: 1;
}
.reveal[data-background-transition='slide']
	> .backgrounds
	.slide-background.past:not([data-background-transition]),
.reveal > .backgrounds .slide-background.past[data-background-transition='slide'] {
	transform: translate(-100%, 0);
}
.reveal[data-background-transition='slide']
	> .backgrounds
	.slide-background.future:not([data-background-transition]),
.reveal > .backgrounds .slide-background.future[data-background-transition='slide'] {
	transform: translate(100%, 0);
}

.reveal[data-background-transition='slide']
	> .backgrounds
	.slide-background
	> .slide-background.past:not([data-background-transition]),
.reveal
	> .backgrounds
	.slide-background
	> .slide-background.past[data-background-transition='slide'] {
	transform: translate(0, -100%);
}
.reveal[data-background-transition='slide']
	> .backgrounds
	.slide-background
	> .slide-background.future:not([data-background-transition]),
.reveal
	> .backgrounds
	.slide-background
	> .slide-background.future[data-background-transition='slide'] {
	transform: translate(0, 100%);
}

/* Convex */
.reveal[data-background-transition='convex']
	> .backgrounds
	.slide-background.past:not([data-background-transition]),
.reveal > .backgrounds .slide-background.past[data-background-transition='convex'] {
	opacity: 0;
	transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0);
}
.reveal[data-background-transition='convex']
	> .backgrounds
	.slide-background.future:not([data-background-transition]),
.reveal > .backgrounds .slide-background.future[data-background-transition='convex'] {
	opacity: 0;
	transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0);
}

.reveal[data-background-transition='convex']
	> .backgrounds
	.slide-background
	> .slide-background.past:not([data-background-transition]),
.reveal
	> .backgrounds
	.slide-background
	> .slide-background.past[data-background-transition='convex'] {
	opacity: 0;
	transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0);
}
.reveal[data-background-transition='convex']
	> .backgrounds
	.slide-background
	> .slide-background.future:not([data-background-transition]),
.reveal
	> .backgrounds
	.slide-background
	> .slide-background.future[data-background-transition='convex'] {
	opacity: 0;
	transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0);
}

/* Concave */
.reveal[data-background-transition='concave']
	> .backgrounds
	.slide-background.past:not([data-background-transition]),
.reveal > .backgrounds .slide-background.past[data-background-transition='concave'] {
	opacity: 0;
	transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0);
}
.reveal[data-background-transition='concave']
	> .backgrounds
	.slide-background.future:not([data-background-transition]),
.reveal > .backgrounds .slide-background.future[data-background-transition='concave'] {
	opacity: 0;
	transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0);
}

.reveal[data-background-transition='concave']
	> .backgrounds
	.slide-background
	> .slide-background.past:not([data-background-transition]),
.reveal
	> .backgrounds
	.slide-background
	> .slide-background.past[data-background-transition='concave'] {
	opacity: 0;
	transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0);
}
.reveal[data-background-transition='concave']
	> .backgrounds
	.slide-background
	> .slide-background.future:not([data-background-transition]),
.reveal
	> .backgrounds
	.slide-background
	> .slide-background.future[data-background-transition='concave'] {
	opacity: 0;
	transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0);
}

/* Zoom */
.reveal[data-background-transition='zoom']
	> .backgrounds
	.slide-background:not([data-background-transition]),
.reveal > .backgrounds .slide-background[data-background-transition='zoom'] {
	transition-timing-function: ease;
}

.reveal[data-background-transition='zoom']
	> .backgrounds
	.slide-background.past:not([data-background-transition]),
.reveal > .backgrounds .slide-background.past[data-background-transition='zoom'] {
	opacity: 0;
	visibility: hidden;
	transform: scale(16);
}
.reveal[data-background-transition='zoom']
	> .backgrounds
	.slide-background.future:not([data-background-transition]),
.reveal > .backgrounds .slide-background.future[data-background-transition='zoom'] {
	opacity: 0;
	visibility: hidden;
	transform: scale(0.2);
}

.reveal[data-background-transition='zoom']
	> .backgrounds
	.slide-background
	> .slide-background.past:not([data-background-transition]),
.reveal
	> .backgrounds
	.slide-background
	> .slide-background.past[data-background-transition='zoom'] {
	opacity: 0;
	visibility: hidden;
	transform: scale(16);
}
.reveal[data-background-transition='zoom']
	> .backgrounds
	.slide-background
	> .slide-background.future:not([data-background-transition]),
.reveal
	> .backgrounds
	.slide-background
	> .slide-background.future[data-background-transition='zoom'] {
	opacity: 0;
	visibility: hidden;
	transform: scale(0.2);
}

/* Global transition speed settings */
.reveal[data-transition-speed='fast'] > .backgrounds .slide-background {
	transition-duration: 400ms;
}
.reveal[data-transition-speed='slow'] > .backgrounds .slide-background {
	transition-duration: 1200ms;
}

/*********************************************
 * AUTO ANIMATE
 *********************************************/

.reveal [data-auto-animate-target^='unmatched'] {
	will-change: opacity;
}

.reveal
	section[data-auto-animate]:not(.stack):not([data-auto-animate='running'])
	[data-auto-animate-target^='unmatched'] {
	opacity: 0;
}

/*********************************************
 * OVERVIEW
 *********************************************/

.reveal.overview {
	perspective-origin: 50% 50%;
	perspective: 700px;

	.slides section {
		height: 100%;
		top: 0 !important;
		opacity: 1 !important;
		overflow: hidden;
		visibility: visible !important;
		cursor: pointer;
		box-sizing: border-box;
	}
	.slides section:hover,
	.slides section.present {
		outline: 10px solid rgba(150, 150, 150, 0.6);
		outline-offset: 10px;
	}
	.slides section.present {
		outline: 10px solid var(--r-link-color);
	}
	.slides section .fragment {
		opacity: 1;
		transition: none;
	}
	.slides section:after,
	.slides section:before {
		display: none !important;
	}
	.slides > section.stack {
		padding: 0;
		top: 0 !important;
		background: none;
		outline: none;
		overflow: visible;
	}

	.backgrounds {
		perspective: inherit;
	}

	.backgrounds .slide-background {
		opacity: 1;
		visibility: visible;

		// This can't be applied to the slide itself in Safari
		outline: 10px solid rgba(150, 150, 150, 0.1);
		outline-offset: 10px;
	}

	.backgrounds .slide-background.stack {
		overflow: visible;
	}
}

// Disable transitions transitions while we're activating
// or deactivating the overview mode.
.reveal.overview .slides section,
.reveal.overview-deactivating .slides section {
	transition: none;
}

.reveal.overview .backgrounds .slide-background,
.reveal.overview-deactivating .backgrounds .slide-background {
	transition: none;
}

/*********************************************
 * RTL SUPPORT
 *********************************************/

.reveal.rtl .slides,
.reveal.rtl .slides h1,
.reveal.rtl .slides h2,
.reveal.rtl .slides h3,
.reveal.rtl .slides h4,
.reveal.rtl .slides h5,
.reveal.rtl .slides h6 {
	direction: rtl;
	font-family: sans-serif;
}

.reveal.rtl pre,
.reveal.rtl code {
	direction: ltr;
}

.reveal.rtl ol,
.reveal.rtl ul {
	text-align: right;
}

.reveal.rtl .progress span {
	transform-origin: 100% 0;
}

/*********************************************
 * PARALLAX BACKGROUND
 *********************************************/

.reveal.has-parallax-background .backgrounds {
	transition: all 0.8s ease;
}

/* Global transition speed settings */
.reveal.has-parallax-background[data-transition-speed='fast'] .backgrounds {
	transition-duration: 400ms;
}
.reveal.has-parallax-background[data-transition-speed='slow'] .backgrounds {
	transition-duration: 1200ms;
}

/*********************************************
 * OVERLAY FOR LINK PREVIEWS AND HELP
 *********************************************/

@keyframes fade-in {
	from {
		opacity: 0;
	}
	to {
		opacity: 1;
	}
}

@keyframes scale-up {
	from {
		transform: scale(0.95);
	}
	to {
		transform: scale(1);
	}
}

.reveal [data-preview-image],
.reveal [data-preview-video],
.reveal [data-preview-link]:not(a):not([data-preview-link='false']) {
	cursor: zoom-in;
}

.r-overlay {
	position: absolute;
	top: var(--r-overlay-margin);
	right: var(--r-overlay-margin);
	bottom: var(--r-overlay-margin);
	left: var(--r-overlay-margin);
	border-radius: min(var(--r-overlay-margin), 6px);
	z-index: 99;
	background: rgba(0, 0, 0, 0.95);
	backdrop-filter: blur(10px);
	transition: all 0.3s ease;
	color: #fff;
	animation: fade-in 0.3s ease;
	font-family:
		ui-sans-serif,
		system-ui,
		-apple-system,
		Helvetica,
		sans-serif;
}

.r-overlay-viewport {
	position: absolute;
	top: var(--r-overlay-padding);
	right: var(--r-overlay-padding);
	bottom: var(--r-overlay-padding);
	left: var(--r-overlay-padding);
	gap: var(--r-overlay-gap);
	display: flex;
	flex-direction: column;
}

.r-overlay-header {
	display: flex;
	z-index: 2;
	box-sizing: border-box;
	align-items: center;
	justify-content: flex-end;
	height: var(--r-overlay-header-height);
	gap: 6px;
}
.r-overlay-header .r-overlay-header-button {
	all: unset;
	display: flex;
	align-items: center;
	justify-content: center;
	min-width: var(--r-overlay-header-height);
	min-height: var(--r-overlay-header-height);
	padding: 0 calc(var(--r-overlay-header-height) / 4);
	opacity: 1;
	border-radius: 6px;
	font-size: 18px;
	gap: 8px;
	cursor: pointer;

	box-sizing: border-box;
}
.r-overlay-header .r-overlay-header-button:hover {
	opacity: 1;
	background-color: rgba(255, 255, 255, 0.15);
}
.r-overlay-header .icon {
	display: inline-block;
	width: 20px;
	height: 20px;

	background-position: 50% 50%;
	background-size: 100%;
	background-repeat: no-repeat;
}
.r-overlay-close .icon {
	background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTIuODU0IDIuODU0YS41LjUgMCAwIDAtLjcwOC0uNzA4TDcuNSA2Ljc5MyAyLjg1NCAyLjE0NmEuNS41IDAgMSAwLS43MDguNzA4TDYuNzkzIDcuNWwtNC42NDcgNC42NDZhLjUuNSAwIDAgMCAuNzA4LjcwOEw3LjUgOC4yMDdsNC42NDYgNC42NDdhLjUuNSAwIDAgMCAuNzA4LS43MDhMOC4yMDcgNy41bDQuNjQ3LTQuNjQ2WiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);
}
.r-overlay-external .icon {
	background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMyAyYTEgMSAwIDAgMC0xIDF2OWExIDEgMCAwIDAgMSAxaDlhMSAxIDAgMCAwIDEtMVY4LjVhLjUuNSAwIDAgMC0xIDBWMTJIM1YzaDMuNWEuNS41IDAgMCAwIDAtMUgzWm05Ljg1NC4xNDZhLjUuNSAwIDAgMSAuMTQ2LjM1MVY1LjVhLjUuNSAwIDAgMS0xIDBWMy43MDdMNi44NTQgOC44NTRhLjUuNSAwIDEgMS0uNzA4LS43MDhMMTEuMjkzIDNIOS41YS41LjUgMCAwIDEgMC0xaDNhLjQ5OS40OTkgMCAwIDEgLjM1NC4xNDZaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);
}

.r-overlay-content {
	position: relative;
	display: grid;
	place-items: center;
	border-radius: 6px;
	overflow: hidden;
	flex-grow: 1;
	background-color: rgba(20, 20, 20, 0.8);
	animation: scale-up 0.5s cubic-bezier(0.26, 0.86, 0.44, 0.985);
}

.r-overlay-spinner {
	position: absolute;
	display: block;
	top: 50%;
	left: 50%;
	width: 32px;
	height: 32px;
	margin: -16px 0 0 -16px;
	z-index: 10;
	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);

	visibility: hidden;
	opacity: 0;
}

// Preview overlay
.r-overlay-preview .r-overlay-content iframe {
	width: 100%;
	height: 100%;
	max-width: 100%;
	max-height: 100%;
	border: 0;

	opacity: 0;
	visibility: hidden;
	transition: all 0.3s ease;
}

.r-overlay-preview[data-state='loaded'] iframe {
	opacity: 1;
	visibility: visible;
}

.r-overlay-preview .r-overlay-content img,
.r-overlay-preview .r-overlay-content video {
	position: absolute;
	max-width: 100%;
	max-height: 100%;
	width: 100%;
	height: 100%;
	margin: 0;
	object-fit: scale-down;
}

.r-overlay-preview[data-preview-fit='none'] img,
.r-overlay-preview[data-preview-fit='none'] video {
	object-fit: none;
}

.r-overlay-preview[data-preview-fit='scale-down'] img,
.r-overlay-preview[data-preview-fit='scale-down'] video {
	object-fit: scale-down;
}

.r-overlay-preview[data-preview-fit='contain'] img,
.r-overlay-preview[data-preview-fit='contain'] video {
	object-fit: contain;
}

.r-overlay-preview[data-preview-fit='cover'] img,
.r-overlay-preview[data-preview-fit='cover'] video {
	object-fit: cover;
}

.r-overlay-preview[data-state='loaded'] .r-overlay-content-inner {
	position: absolute;
	z-index: -1;
	left: 0;
	top: 45%;
	width: 100%;
	text-align: center;
	letter-spacing: normal;
}
.r-overlay-preview .r-overlay-error {
	font-size: 18px;
	color: orange;
}

.r-overlay-preview .x-frame-error {
	opacity: 0;
	transition: opacity 0.3s ease 0.3s;
}
.r-overlay-preview[data-state='loaded'] .x-frame-error {
	opacity: 1;
}

.r-overlay-preview[data-state='loading'] .r-overlay-spinner {
	opacity: 0.6;
	visibility: visible;
}

// Help overlay
.r-overlay-help .r-overlay-content {
	overflow: auto;
}

.r-overlay-help-content {
	max-width: 560px;
	padding: 20px 0;
	margin: auto;
	text-align: center;
	letter-spacing: normal;
}

.r-overlay-help-content .title {
	font-size: 20px;
	margin-top: 0;
}

/* Specificity battle with reveal.js theme table styles */
.r-overlay-help .r-overlay-help-content table {
	border: 1px solid #fff;
	border-collapse: collapse;
	font-size: 16px;
	text-align: left;
}

.r-overlay-help .r-overlay-help-content table th,
.r-overlay-help .r-overlay-help-content table td {
	width: 240px;
	padding: 14px;
	border: 1px solid #fff;
	vertical-align: middle;
}

.r-overlay-help .r-overlay-help-content table th {
	padding-top: 20px;
	padding-bottom: 20px;
}

/*********************************************
 * PLAYBACK COMPONENT
 *********************************************/

.reveal .playback {
	position: absolute;
	left: 15px;
	bottom: 20px;
	z-index: 30;
	cursor: pointer;
	transition: all 400ms ease;
	-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

.reveal.overview .playback {
	opacity: 0;
	visibility: hidden;
}

/*********************************************
 * CODE HIGHLGIHTING
 *********************************************/

.reveal .hljs {
	min-height: 100%;
}

.reveal .hljs table {
	margin: initial;
}

.reveal .hljs-ln-code,
.reveal .hljs-ln-numbers {
	padding: 0;
	border: 0;
}

.reveal .hljs-ln-numbers {
	opacity: 0.6;
	padding-right: 0.75em;
	text-align: right;
	vertical-align: top;
}

.reveal .hljs.has-highlights tr:not(.highlight-line) {
	opacity: 0.4;
}

.reveal .hljs.has-highlights.fragment {
	transition: all 0.2s ease;
}

.reveal .hljs:not(:first-child).fragment {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	box-sizing: border-box;
}

.reveal pre[data-auto-animate-target] {
	overflow: hidden;
}
.reveal pre[data-auto-animate-target] code {
	height: 100%;
}

/*********************************************
 * ROLLING LINKS
 *********************************************/

.reveal .roll {
	display: inline-block;
	line-height: 1.2;
	overflow: hidden;

	vertical-align: top;
	perspective: 400px;
	perspective-origin: 50% 50%;
}
.reveal .roll:hover {
	background: none;
	text-shadow: none;
}
.reveal .roll span {
	display: block;
	position: relative;
	padding: 0 2px;

	pointer-events: none;
	transition: all 400ms ease;
	transform-origin: 50% 0%;
	transform-style: preserve-3d;
	backface-visibility: hidden;
}
.reveal .roll:hover span {
	background: rgba(0, 0, 0, 0.5);
	transform: translate3d(0px, 0px, -45px) rotateX(90deg);
}
.reveal .roll span:after {
	content: attr(data-title);

	display: block;
	position: absolute;
	left: 0;
	top: 0;
	padding: 0 2px;
	backface-visibility: hidden;
	transform-origin: 50% 0%;
	transform: translate3d(0px, 110%, 0px) rotateX(-90deg);
}

/*********************************************
 * SPEAKER NOTES
 *********************************************/

$notesWidthPercent: 25%;

// Hide on-page notes
.reveal aside.notes {
	display: none;
}

// An interface element that can optionally be used to show the
// speaker notes to all viewers, on top of the presentation
.reveal .speaker-notes {
	display: none;
	position: absolute;
	width: math.div($notesWidthPercent, (1 - math.div($notesWidthPercent, 100))) * 1%;
	height: 100%;
	top: 0;
	left: 100%;
	padding: 14px 18px 14px 18px;
	z-index: 1;
	font-size: 18px;
	line-height: 1.4;
	border: 1px solid rgba(0, 0, 0, 0.05);
	color: #222;
	background-color: #f5f5f5;
	overflow: auto;
	box-sizing: border-box;
	text-align: left;
	font-family: Helvetica, sans-serif;
	-webkit-overflow-scrolling: touch;

	.notes-placeholder {
		color: #ccc;
		font-style: italic;
	}

	&:focus {
		outline: none;
	}

	&:before {
		content: 'Speaker notes';
		display: block;
		margin-bottom: 10px;
		opacity: 0.5;
	}
}

.reveal.show-notes {
	max-width: 100% - $notesWidthPercent;
	overflow: visible;
}

.reveal.show-notes .speaker-notes {
	display: block;
}

@media screen and (min-width: 1600px) {
	.reveal .speaker-notes {
		font-size: 20px;
	}
}

@media screen and (max-width: 1024px) {
	.reveal.show-notes {
		border-left: 0;
		max-width: none;
		max-height: 70%;
		max-height: 70vh;
		overflow: visible;
	}

	.reveal.show-notes .speaker-notes {
		top: 100%;
		left: 0;
		width: 100%;
		height: 30vh;
		border: 0;
	}
}

@media screen and (max-width: 600px) {
	.reveal.show-notes {
		max-height: 60%;
		max-height: 60vh;
	}

	.reveal.show-notes .speaker-notes {
		top: 100%;
		height: 40vh;
	}

	.reveal .speaker-notes {
		font-size: 14px;
	}
}

/*********************************************
 * JUMP-TO-SLIDE COMPONENT
 *********************************************/

.reveal .jump-to-slide {
	position: absolute;
	top: 15px;
	left: 15px;
	z-index: 30;
	font-size: 32px;
	-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

.reveal .jump-to-slide-input {
	background: transparent;
	padding: 8px;
	font-size: inherit;
	color: currentColor;
	border: 0;
}
.reveal .jump-to-slide-input::placeholder {
	color: currentColor;
	opacity: 0.5;
}

.reveal.has-dark-background .jump-to-slide-input {
	color: #fff;
}
.reveal.has-light-background .jump-to-slide-input {
	color: #222;
}

.reveal .jump-to-slide-input:focus {
	outline: none;
}

/*********************************************
 * MANUAL MEDIA PLAY BUTTON
 *********************************************/

.reveal .r-overlay-button {
	all: unset;
	position: absolute;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 10px;
	border-radius: 5px;
	font-size: 0.4em;
	z-index: 30;
	cursor: pointer;
	-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
	-webkit-appearance: none;
	appearance: none;
	color: #fff;
	background: rgba(0, 0, 0, 0.7);

	&:hover {
		background: rgba(0, 0, 0, 0.9);
	}
}

.reveal.has-light-background .r-overlay-button {
	color: #222;
	background: rgba(255, 255, 255, 0.7);

	&:hover {
		background: rgba(255, 255, 255, 0.9);
	}
}

.reveal .r-media-play-button {
	left: 15px;
	bottom: 20px;
}

/*********************************************
 * ZOOM PLUGIN
 *********************************************/

.zoomed .reveal *,
.zoomed .reveal *:before,
.zoomed .reveal *:after {
	backface-visibility: visible !important;
}

.zoomed .reveal .progress,
.zoomed .reveal .controls {
	opacity: 0;
}

.zoomed .reveal .roll span {
	background: none;
}

.zoomed .reveal .roll span:after {
	visibility: hidden;
}

/*********************************************
 * SCROLL VIEW
 *********************************************/
.reveal-viewport.loading-scroll-mode {
	visibility: hidden;
}

.reveal-viewport.reveal-scroll {
	& {
		margin: 0 auto;
		overflow: auto;
		overflow-x: hidden;
		overflow-y: auto;
		z-index: 1;

		--r-scrollbar-width: 7px;
		--r-scrollbar-trigger-size: 5px;
		--r-controls-spacing: 8px;
	}

	@media screen and (max-width: 500px) {
		--r-scrollbar-width: 3px;
		--r-scrollbar-trigger-size: 3px;
	}

	.controls,
	.progress,
	.playback,
	.backgrounds,
	.slide-number,
	.speaker-notes {
		display: none !important;
	}

	.r-overlay,
	.pause-overlay,
	.r-media-play-button {
		position: fixed;
	}

	.reveal {
		overflow: visible;
		touch-action: manipulation;
	}

	.slides {
		position: static;
		pointer-events: initial;

		left: auto;
		top: auto;
		width: 100% !important;
		margin: 0;
		padding: 0;

		overflow: visible;
		display: block;

		perspective: none;
		perspective-origin: 50% 50%;
	}

	.scroll-page {
		position: relative;
		width: 100%;
		height: calc(var(--page-height) + var(--page-scroll-padding));
		z-index: 1;
		overflow: visible;
	}

	.scroll-page-sticky {
		position: sticky;
		height: var(--page-height);
		top: 0px;
	}

	.scroll-page-content {
		position: absolute;
		top: 0;
		left: 0;
		width: 100%;
		height: 100%;
		overflow: hidden;
	}

	.scroll-page section {
		visibility: visible !important;
		display: block !important;
		position: absolute !important;
		width: var(--slide-width) !important;
		height: var(--slide-height) !important;
		top: 50% !important;
		left: 50% !important;
		opacity: 1 !important;
		transform: scale(var(--slide-scale)) translate(-50%, -50%) !important;
		transform-style: flat !important;
		transform-origin: 0 0 !important;
	}

	.slide-background {
		display: block !important;
		position: absolute;
		top: 0;
		left: 0;
		width: 100%;
		height: 100%;
		z-index: auto !important;
		visibility: visible;
		opacity: 1;
		touch-action: manipulation;
	}
}

// Chromium
.reveal-viewport.reveal-scroll[data-scrollbar='true']::-webkit-scrollbar,
.reveal-viewport.reveal-scroll[data-scrollbar='auto']::-webkit-scrollbar {
	display: none;
}

// Firefox
.reveal-viewport.reveal-scroll[data-scrollbar='true'],
.reveal-viewport.reveal-scroll[data-scrollbar='auto'] {
	scrollbar-width: none;
}

.reveal.has-dark-background,
.reveal-viewport.has-dark-background {
	--r-overlay-element-bg-color: 240, 240, 240;
	--r-overlay-element-fg-color: 0, 0, 0;
}
.reveal.has-light-background,
.reveal-viewport.has-light-background {
	--r-overlay-element-bg-color: 0, 0, 0;
	--r-overlay-element-fg-color: 240, 240, 240;
}

.reveal-viewport.reveal-scroll .scrollbar {
	position: sticky;
	top: 50%;
	z-index: 20;
	opacity: 0;
	transition: all 0.3s ease;

	&.visible,
	&:hover {
		opacity: 1;
	}

	.scrollbar-inner {
		position: absolute;
		width: var(--r-scrollbar-width);
		height: calc(var(--viewport-height) - var(--r-controls-spacing) * 2);
		right: var(--r-controls-spacing);
		top: 0;
		transform: translateY(-50%);
		border-radius: var(--r-scrollbar-width);
		z-index: 10;
	}

	.scrollbar-playhead {
		position: absolute;
		width: var(--r-scrollbar-width);
		height: var(--r-scrollbar-width);
		top: 0;
		left: 0;
		border-radius: var(--r-scrollbar-width);
		background-color: rgba(var(--r-overlay-element-bg-color), 1);
		z-index: 11;
		transition: background-color 0.2s ease;
	}

	.scrollbar-slide {
		position: absolute;
		width: 100%;
		background-color: rgba(var(--r-overlay-element-bg-color), 0.2);
		box-shadow: 0 0 0px 1px rgba(var(--r-overlay-element-fg-color), 0.1);
		border-radius: var(--r-scrollbar-width);
		transition: background-color 0.2s ease;
	}

	// Hit area
	.scrollbar-slide:after {
		content: '';
		position: absolute;
		width: 200%;
		height: 100%;
		top: 0;
		left: -50%;
		background: rgba(0, 0, 0, 0);
		z-index: -1;
	}

	.scrollbar-slide:hover,
	.scrollbar-slide.active {
		background-color: rgba(var(--r-overlay-element-bg-color), 0.4);
	}

	.scrollbar-trigger {
		position: absolute;
		width: 100%;
		transition: background-color 0.2s ease;
	}

	.scrollbar-slide.active.has-triggers {
		background-color: rgba(var(--r-overlay-element-bg-color), 0.4);
		z-index: 10;
	}

	.scrollbar-slide.active .scrollbar-trigger:after {
		content: '';
		position: absolute;
		width: var(--r-scrollbar-trigger-size);
		height: var(--r-scrollbar-trigger-size);
		border-radius: 20px;
		top: 50%;
		left: 50%;
		transform: translate(-50%, -50%);
		background-color: rgba(var(--r-overlay-element-bg-color), 1);
		transition:
			transform 0.2s ease,
			opacity 0.2s ease;
		opacity: 0.4;
	}

	.scrollbar-slide.active .scrollbar-trigger.active:after,
	.scrollbar-slide.active .scrollbar-trigger.active ~ .scrollbar-trigger:after {
		opacity: 1;
	}

	.scrollbar-slide.active .scrollbar-trigger ~ .scrollbar-trigger.active:after {
		transform: translate(calc(var(--r-scrollbar-width) * -2), 0);
		background-color: rgba(var(--r-overlay-element-bg-color), 1);
	}
}

/*********************************************
 * PRINT STYLES
 *********************************************/

@include meta.load-css('print/pdf.scss');
@include meta.load-css('print/paper.scss');


================================================
FILE: css/theme/README.md
================================================
## Dependencies

Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment installed before proceeding: https://revealjs.com/installation/#full-setup

## Creating a Theme

To create your own theme, start by duplicating a `.scss` file in [css/theme](css/theme). It will be automatically compiled from Sass to CSS when you run `npm run build:styles` (see [vite.config.styles.ts](../../vite.config.styles.ts)).

Each theme file follows the same structure:

1. **Include [/css/theme/template/mixins.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/mixins.scss)**  
   Shared utility functions.

2. **Include [/css/theme/template/settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss)**  
   Declares a set of custom CSS variables that the template file (step 4) expects. Each of these variables can be overridden to customize the theme.

3. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)**  
   The template theme file which will generate final CSS output based on the currently defined variables.

4. **Optionally add custom fonts and/or additional styles**


================================================
FILE: css/theme/beige.scss
================================================
/**
 * Beige theme for reveal.js.
 *
 * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$active-color: #8b743d;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: #f7f3de,
	$background: radial-gradient(rgba(255, 255, 255, 1), rgba(247, 242, 211, 1)),
	$main-font: "'Source Sans Pro', Helvetica, sans-serif",
	$main-font-size: 42px,
	$main-color: #333,

	$heading-color: #333,
	$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
	$heading-font-weight: 600,

	$heading1-text-shadow: #{0 1px 0 #ccc,
	0 2px 0 #c9c9c9,
	0 3px 0 #bbb,
	0 4px 0 #b9b9b9,
	0 5px 0 #aaa,
	0 6px 1px rgba(0, 0, 0, 0.1),
	0 0 5px rgba(0, 0, 0, 0.1),
	0 1px 3px rgba(0, 0, 0, 0.3),
	0 3px 5px rgba(0, 0, 0, 0.2),
	0 5px 10px rgba(0, 0, 0, 0.25),
	0 20px 20px rgba(0, 0, 0, 0.15)},

	$heading1-size: 2.5em,
	$heading2-size: 1.6em,
	$heading3-size: 1.3em,
	$heading4-size: 1em,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 20%),
	$selection-color: #333,
	$selection-background-color: color.scale($active-color, $lightness: 35%),
	$overlay-element-bg-color: '0 0 0',
	$overlay-element-fg-color: '240 240 240'
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('./fonts/league-gothic/league-gothic.css');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');

// Change text colors against light slide backgrounds
@include mixins.dark-bg-text-color(#fff);


================================================
FILE: css/theme/black-contrast.scss
================================================
/**
 * Black compact & high contrast reveal.js theme, with headers not in capitals.
 *
 * By Peter Kehl. Based on black.(s)css by Hakim El Hattab, http://hakim.se
 *
 * - Keep the source similar to black.css - for easy comparison.
 * - $mainFontSize controls code blocks, too (although under some ratio).
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$active-color: #42affa;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: #000,

	$main-font: "'Source Sans Pro', Helvetica, sans-serif",
	$main-font-size: 42px,
	$main-color: #fff,

	$heading-color: #fff,
	$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
	$heading-font-weight: 600,

	$heading1-size: 2.5em,
	$heading2-size: 1.6em,
	$heading3-size: 1.3em,
	$heading4-size: 1em,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 15%),
	$selection-color: #fff,
	$selection-background-color: color.scale($active-color, $lightness: -35%)
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('./fonts/source-sans-pro/source-sans-pro.css');

// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#000);


================================================
FILE: css/theme/black.scss
================================================
/**
 * Black theme for reveal.js. This is the opposite of the 'white' theme.
 *
 * By Hakim El Hattab, http://hakim.se
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$active-color: #42affa;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: #191919,

	$main-font: "'Source Sans Pro', Helvetica, sans-serif",
	$main-font-size: 42px,
	$main-color: #fff,

	$heading-color: #fff,
	$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
	$heading-font-weight: 600,

	$heading1-size: 2.5em,
	$heading2-size: 1.6em,
	$heading3-size: 1.3em,
	$heading4-size: 1em,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 15%),
	$selection-color: #fff,
	$selection-background-color: color.scale($active-color, $lightness: -35%)
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('./fonts/source-sans-pro/source-sans-pro.css');

// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#222);


================================================
FILE: css/theme/blood.scss
================================================
/**
 * Blood theme for reveal.js
 * Author: Walther http://github.com/Walther
 *
 * Designed to be used with highlight.js theme
 * "monokai_sublime.css" available from
 * https://github.com/isagalaev/highlight.js/
 *
 * For other themes, change $codeBackground accordingly.
 *
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$coal: #222;
$active-color: #a23;
$code-background-color: #23241f;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: $coal,

	$main-font: 'Ubuntu, sans-serif',
	$main-color: #eee,

	$heading-font: 'Ubuntu, sans-serif',
	$heading-text-shadow: 2px 2px 2px $coal,

	$heading1-text-shadow: #{0 1px 0 #ccc,
	0 2px 0 #c9c9c9,
	0 3px 0 #bbb,
	0 4px 0 #b9b9b9,
	0 5px 0 #aaa,
	0 6px 1px rgba(0, 0, 0, 0.1),
	0 0 5px rgba(0, 0, 0, 0.1),
	0 1px 3px rgba(0, 0, 0, 0.3),
	0 3px 5px rgba(0, 0, 0, 0.2),
	0 5px 10px rgba(0, 0, 0, 0.25),
	0 20px 20px rgba(0, 0, 0, 0.15)},

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 20%),
	$selection-background-color: $active-color,
	$selection-color: #fff
);

// Inject the theme template
@use 'template/theme';

// Fonts
@import url('https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic');

// Invert text color when the background is light
@include mixins.light-bg-text-color(#222);

.reveal p {
	font-weight: 300;
	text-shadow: 1px 1px $coal;
}

section.has-light-background {
	p,
	h1,
	h2,
	h3,
	h4 {
		text-shadow: none;
	}
}

.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
	font-weight: 700;
}

.reveal p code {
	background-color: $code-background-color;
	display: inline-block;
	border-radius: 7px;
}

.reveal small code {
	vertical-align: baseline;
}


================================================
FILE: css/theme/dracula.scss
================================================
/**
 * Dracula Dark theme for reveal.js.
 * Based on https://draculatheme.com
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

// Include theme-specific fonts
$systemFontsSansSerif: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui,
	helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif;
$systemFontsMono: Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace;

$background: #282a36;
$foreground: #f8f8f2;
$selection: #44475a;
$comment: #6272a4;
$red: #ff5555;
$orange: #ffb86c;
$yellow: #f1fa8c;
$green: #50fa7b;
$purple: #bd93f9;
$cyan: #8be9fd;
$pink: #ff79c6;

$mainFont: $systemFontsSansSerif;
$codeFont: 'Fira Code', $systemFontsMono;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: #191919,

	$main-font: $mainFont,
	$main-font-size: 42px,
	$main-color: $foreground,

	$code-font: $codeFont,

	$heading-color: $purple,
	$heading-font: $mainFont,
	$heading-font-weight: 600,
	$heading-text-transform: none,

	$heading1-size: 2.5em,
	$heading2-size: 1.6em,
	$heading3-size: 1.3em,
	$heading4-size: 1em,

	$link-color: $pink,
	$link-color-hover: $cyan,

	$selection-color: #fff,
	$selection-background-color: $selection
);

// Inject the theme template
@use 'template/theme';

// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color($background);

// Define additional color effects based on Dracula spec
// https://spec.draculatheme.com/
:root {
	--r-bold-color: #{$orange};
	--r-italic-color: #{$yellow};
	--r-inline-code-color: #{$green};
	--r-list-bullet-color: #{$cyan};
}

/**
 * Dracula colors by Zeno Rocha
 * https://draculatheme.com/contribute
 */
.reveal {
	strong,
	b {
		color: var(--r-bold-color);
	}
	em,
	i,
	blockquote {
		color: var(--r-italic-color);
	}
	code {
		color: var(--r-inline-code-color);
	}
	// Dracula colored list bullets and numbers
	ul,
	ol {
		li::marker {
			color: var(--r-list-bullet-color);
		}
	}
}


================================================
FILE: css/theme/fonts/league-gothic/LICENSE
================================================
SIL Open Font License (OFL)
http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL


================================================
FILE: css/theme/fonts/league-gothic/league-gothic.css
================================================
@font-face {
    font-family: 'League Gothic';
    src: url('./league-gothic.woff') format('woff');

    font-weight: normal;
    font-style: normal;
}


================================================
FILE: css/theme/fonts/source-sans-pro/LICENSE
================================================
SIL Open Font License

Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL

—————————————————————————————-
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
—————————————————————————————-

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others.

The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.

DEFINITIONS
“Font Software” refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation.

“Reserved Font Name” refers to any names specified as such after the copyright statement(s).

“Original Version” refers to the collection of Font Software components as distributed by the Copyright Holder(s).

“Modified Version” refers to any derivative made by adding to, deleting, or substituting—in part or in whole—any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.

“Author” refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.

PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission.

5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

================================================
FILE: css/theme/fonts/source-sans-pro/source-sans-pro.css
================================================
@font-face {
    font-family: 'Source Sans Pro';
    src: url('./source-sans-pro-regular.woff') format('woff');
    font-weight: normal;
    font-style: normal;
}

@font-face {
    font-family: 'Source Sans Pro';
    src: url('./source-sans-pro-italic.woff') format('woff');
    font-weight: normal;
    font-style: italic;
}

@font-face {
    font-family: 'Source Sans Pro';
    src: url('./source-sans-pro-semibold.woff') format('woff');
    font-weight: 600;
    font-style: normal;
}

@font-face {
    font-family: 'Source Sans Pro';
    src: url('./source-sans-pro-semibolditalic.woff') format('woff');
    font-weight: 600;
    font-style: italic;
}


================================================
FILE: css/theme/league.scss
================================================
/**
 * League theme for reveal.js.
 *
 * This was the default theme pre-3.0.0.
 *
 * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background: radial-gradient(rgba(85, 90, 95, 1), rgba(28, 30, 32, 1)),
	$background-color: rgba(28, 30, 32, 1),
	$heading-text-shadow: #{0px 0px 6px rgba(0, 0, 0, 0.2)},
	$heading1-text-shadow: #{0 1px 0 #ccc,
	0 2px 0 #c9c9c9,
	0 3px 0 #bbb,
	0 4px 0 #b9b9b9,
	0 5px 0 #aaa,
	0 6px 1px rgba(0, 0, 0, 0.1),
	0 0 5px rgba(0, 0, 0, 0.1),
	0 1px 3px rgba(0, 0, 0, 0.3),
	0 3px 5px rgba(0, 0, 0, 0.2),
	0 5px 10px rgba(0, 0, 0, 0.25),
	0 20px 20px rgba(0, 0, 0, 0.15)}
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('./fonts/league-gothic/league-gothic.css');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');

// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#222);


================================================
FILE: css/theme/moon.scss
================================================
/**
 * Solarized Dark theme for reveal.js.
 * Author: Achim Staebler
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

// Solarized colors by Ethan Schoonover
$base03: #002b36;
$base02: #073642;
$base01: #586e75;
$base00: #657b83;
$base0: #839496;
$base1: #93a1a1;
$base2: #eee8d5;
$base3: #fdf6e3;
$yellow: #b58900;
$orange: #cb4b16;
$red: #dc322f;
$magenta: #d33682;
$violet: #6c71c4;
$blue: #268bd2;
$cyan: #2aa198;
$green: #859900;

$active-color: $blue;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: $base03,

	$main-color: $base1,
	$heading-color: $base2,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 20%),
	$selection-color: #fff,
	$selection-background-color: $magenta
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
// Include theme-specific fonts
@import url('./fonts/league-gothic/league-gothic.css');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');

// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#222);


================================================
FILE: css/theme/night.scss
================================================
/**
 * Black theme for reveal.js.
 *
 * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$active-color: #e7ad52;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: #111,

	$main-font: "'Open Sans', sans-serif",
	$main-color: #fff,

	$heading-color: #fff,
	$heading-font: "'Montserrat', Impact, sans-serif",
	$heading-text-transform: none,
	$heading-letter-spacing: -0.03em,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 20%),
	$selection-color: #111,
	$selection-background-color: $active-color
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('https://fonts.googleapis.com/css?family=Montserrat:700');
@import url('https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic');

// Change text colors against light slide backgrounds
@include mixins.light-bg-text-color(#222);


================================================
FILE: css/theme/serif.scss
================================================
/**
 * A simple theme for reveal.js presentations, similar
 * to the default theme. The accent color is brown.
 *
 * This theme is Copyright (C) 2012-2013 Owen Versteeg, http://owenversteeg.com - it is MIT licensed.
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$active-color: #51483d;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: #f0f1eb,

	$main-font: "'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif",
	$main-font-size: 42px,
	$main-color: #000,

	$heading-color: #383d3d,
	$heading-font: "'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif",
	$heading-font-weight: 600,
	$heading-text-transform: none,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 25%),
	$selection-color: #fff,
	$selection-background-color: $active-color,

	$overlay-element-bg-color: '0 0 0',
	$overlay-element-fg-color: '240 240 240'
);

// Inject the theme template
@use 'template/theme';

// Change text colors against light slide backgrounds
@include mixins.dark-bg-text-color(#fff);

.reveal a {
	line-height: 1.3em;
}


================================================
FILE: css/theme/simple.scss
================================================
/**
 * A simple theme for reveal.js presentations, similar
 * to the default theme. The accent color is darkblue.
 *
 * This theme is Copyright (C) 2012 Owen Versteeg, https://github.com/StereotypicalApps. It is MIT licensed.
 * reveal.js is Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$active-color: #00008b;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: #fff,

	$main-color: #000,
	$main-font: "'Lato', sans-serif",

	$heading-color: #000,
	$heading-font: "'News Cycle', Impact, sans-serif",
	$heading-font-weight: 600,

	$heading1-size: 2.5em,
	$heading2-size: 1.6em,
	$heading3-size: 1.3em,
	$heading4-size: 1em,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 20%),
	$selection-color: #fff,
	$selection-background-color: $active-color,

	$overlay-element-bg-color: '0, 0, 0',
	$overlay-element-fg-color: '240, 240, 240'
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('https://fonts.googleapis.com/css?family=News+Cycle:400,700');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');

// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);


================================================
FILE: css/theme/sky.scss
================================================
/**
 * Sky theme for reveal.js.
 *
 * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$active-color: #2a76dd;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background: radial-gradient(#f7fbfc, #add9e4),
	$background-color: #f7fbfc,

	$main-color: #333,
	$main-font: "'Open Sans', sans-serif",

	$heading-color: #333,
	$heading-font: "'Quicksand', sans-serif",
	$heading-letter-spacing: -0.05em,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 15%),
	$selection-color: #fff,
	$selection-background-color: $active-color,

	$overlay-element-bg-color: '0 0 0',
	$overlay-element-fg-color: '240 240 240'
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic');
@import url('https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700');

// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);

.reveal a {
	line-height: 1.3em;
}


================================================
FILE: css/theme/solarized.scss
================================================
/**
 * Solarized Light theme for reveal.js.
 * Author: Achim Staebler
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

// Solarized colors by Ethan Schoonover
$base03: #002b36;
$base02: #073642;
$base01: #586e75;
$base00: #657b83;
$base0: #839496;
$base1: #93a1a1;
$base2: #eee8d5;
$base3: #fdf6e3;
$yellow: #b58900;
$orange: #cb4b16;
$red: #dc322f;
$magenta: #d33682;
$violet: #6c71c4;
$blue: #268bd2;
$cyan: #2aa198;
$green: #859900;

$active-color: $blue;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: $base3,

	$main-color: $base00,
	$heading-color: $base01,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 20%),
	$selection-color: #fff,
	$selection-background-color: $magenta,

	$overlay-element-bg-color: '0 0 0',
	$overlay-element-fg-color: '240 240 240'
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('./fonts/league-gothic/league-gothic.css');
@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic');

// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);


================================================
FILE: css/theme/template/mixins.scss
================================================
@mixin light-bg-text-color($color) {
	section.has-light-background {
		&,
		h1,
		h2,
		h3,
		h4,
		h5,
		h6 {
			color: $color;
		}
	}
}

@mixin dark-bg-text-color($color) {
	section.has-dark-background {
		&,
		h1,
		h2,
		h3,
		h4,
		h5,
		h6 {
			color: $color;
		}
	}
}


================================================
FILE: css/theme/template/settings.scss
================================================
// Base settings for all themes that can optionally be
// overridden by the super-theme

@use 'sass:color';
@use 'sass:meta';

// Background of the presentation
$background: #2b2b2b !default;
$background-color: #bbb !default;

// Primary/body text
$main-font: 'Lato', sans-serif !default;
$main-font-size: 40px !default;
$main-color: #eee !default;

// Vertical spacing between blocks of text
$block-margin: 20px !default;

// Headings
$heading-margin: 0 0 20px 0 !default;
$heading-font: 'League Gothic', Impact, sans-serif !default;
$heading-color: #eee !default;
$heading-line-height: 1.2 !default;
$heading-letter-spacing: normal !default;
$heading-text-transform: uppercase !default;
$heading-text-shadow: none !default;
$heading-font-weight: normal !default;
$heading1-text-shadow: none !default;

$heading1-size: 3.77em !default;
$heading2-size: 2.11em !default;
$heading3-size: 1.55em !default;
$heading4-size: 1em !default;

$code-font: monospace !default;

// Links and actions
$link-color: #13daec !default;
$link-color-dark: color.scale($link-color, $lightness: -15%) !default;
$link-color-hover: color.scale($link-color, $lightness: 20%) !default;

// Text selection
$selection-background-color: #0fadbb !default;
$selection-color: #fff !default;

// Colors used for UI elements that are overlaid on top of
// the presentation
$overlay-element-bg-color: 240, 240, 240 !default;
$overlay-element-fg-color: 0, 0, 0 !default;

// Expose all SCSS variables as CSS custom properties
:root {
	// Background of the presentation
	--r-background: #{$background};
	--r-background-color: #{$background-color};

	// Primary/body text
	--r-main-font: #{$main-font};
	--r-main-font-size: #{$main-font-size};
	--r-main-color: #{$main-color};

	// Vertical spacing between blocks of text
	--r-block-margin: #{$block-margin};

	// Headings
	--r-heading-margin: #{$heading-margin};
	--r-heading-font: #{$heading-font};
	--r-heading-color: #{$heading-color};
	--r-heading-line-height: #{$heading-line-height};
	--r-heading-letter-spacing: #{$heading-letter-spacing};
	--r-heading-text-transform: #{$heading-text-transform};
	--r-heading-text-shadow: #{$heading-text-shadow};
	--r-heading-font-weight: #{$heading-font-weight};
	--r-heading1-text-shadow: #{$heading1-text-shadow};

	--r-heading1-size: #{$heading1-size};
	--r-heading2-size: #{$heading2-size};
	--r-heading3-size: #{$heading3-size};
	--r-heading4-size: #{$heading4-size};

	--r-code-font: #{$code-font};

	// Links and actions
	--r-link-color: #{$link-color};
	--r-link-color-dark: #{$link-color-dark};
	--r-link-color-hover: #{$link-color-hover};

	// Text selection
	--r-selection-background-color: #{$selection-background-color};
	--r-selection-color: #{$selection-color};

	// Colors used for UI elements that are overlaid on top of
	// the presentation
	--r-overlay-element-bg-color: #{$overlay-element-bg-color};
	--r-overlay-element-fg-color: #{$overlay-element-fg-color};
}


================================================
FILE: css/theme/template/theme.scss
================================================
// Base theme template for reveal.js

/*********************************************
 * GLOBAL STYLES
 *********************************************/

.reveal-viewport {
	background: var(--r-background);
	background-color: var(--r-background-color);
}

.reveal {
	font-family: var(--r-main-font);
	font-size: var(--r-main-font-size);
	font-weight: normal;
	color: var(--r-main-color);
}

.reveal ::selection {
	color: var(--r-selection-color);
	background: var(--r-selection-background-color);
	text-shadow: none;
}

.reveal ::-moz-selection {
	color: var(--r-selection-color);
	background: var(--r-selection-background-color);
	text-shadow: none;
}

.reveal .slides section,
.reveal .slides section > section {
	line-height: 1.3;
	font-weight: inherit;
}

/*********************************************
 * HEADERS
 *********************************************/

.reveal h1,
.reveal h2,
.reveal h3,
.reveal h4,
.reveal h5,
.reveal h6 {
	margin: var(--r-heading-margin);
	color: var(--r-heading-color);

	font-family: var(--r-heading-font);
	font-weight: var(--r-heading-font-weight);
	line-height: var(--r-heading-line-height);
	letter-spacing: var(--r-heading-letter-spacing);

	text-transform: var(--r-heading-text-transform);
	text-shadow: var(--r-heading-text-shadow);

	word-wrap: break-word;
}

.reveal h1 {
	font-size: var(--r-heading1-size);
}
.reveal h2 {
	font-size: var(--r-heading2-size);
}
.reveal h3 {
	font-size: var(--r-heading3-size);
}
.reveal h4 {
	font-size: var(--r-heading4-size);
}

.reveal h1 {
	text-shadow: var(--r-heading1-text-shadow);
}

/*********************************************
 * OTHER
 *********************************************/

.reveal p {
	margin: var(--r-block-margin) 0;
	line-height: 1.3;
}

/* Remove trailing margins after titles */
.reveal h1:last-child,
.reveal h2:last-child,
.reveal h3:last-child,
.reveal h4:last-child,
.reveal h5:last-child,
.reveal h6:last-child {
	margin-bottom: 0;
}

/* Ensure certain elements are never larger than the slide itself */
.reveal img,
.reveal video,
.reveal iframe {
	max-width: 95%;
	max-height: 95%;
}
.reveal strong,
.reveal b {
	font-weight: bold;
}

.reveal em {
	font-style: italic;
}

.reveal ol,
.reveal dl,
.reveal ul {
	display: inline-block;

	text-align: left;
	margin: 0 0 0 1em;
}

.reveal ol {
	list-style-type: decimal;
}

.reveal ul {
	list-style-type: disc;
}

.reveal ul ul {
	list-style-type: square;
}

.reveal ul ul ul {
	list-style-type: circle;
}

.reveal ul ul,
.reveal ul ol,
.reveal ol ol,
.reveal ol ul {
	display: block;
	margin-left: 40px;
}

.reveal dt {
	font-weight: bold;
}

.reveal dd {
	margin-left: 40px;
}

.reveal blockquote {
	display: block;
	position: relative;
	width: 70%;
	margin: var(--r-block-margin) auto;
	padding: 5px;

	font-style: italic;
	background: rgba(255, 255, 255, 0.05);
	box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);
}
.reveal blockquote p:first-child,
.reveal blockquote p:last-child {
	display: inline-block;
}

.reveal q {
	font-style: italic;
}

.reveal pre {
	display: block;
	position: relative;
	width: 90%;
	margin: var(--r-block-margin) auto;

	text-align: left;
	font-size: 0.55em;
	font-family: var(--r-code-font);
	line-height: 1.2em;

	word-wrap: break-word;

	box-shadow: 0px 5px 15px rgba(0, 0, 0, 0.15);
}

.reveal code {
	font-family: var(--r-code-font);
	text-transform: none;
	tab-size: 2;
}

.reveal pre code {
	display: block;
	padding: 5px;
	overflow: auto;
	max-height: 400px;
	word-wrap: normal;
}

.reveal .code-wrapper {
	white-space: normal;
}

.reveal .code-wrapper code {
	white-space: pre;
}

.reveal table {
	margin: auto;
	border-collapse: collapse;
	border-spacing: 0;
}

.reveal table th {
	font-weight: bold;
}

.reveal table th,
.reveal table td {
	text-align: left;
	padding: 0.2em 0.5em 0.2em 0.5em;
	border-bottom: 1px solid;
}

.reveal table th[align='center'],
.reveal table td[align='center'] {
	text-align: center;
}

.reveal table th[align='right'],
.reveal table td[align='right'] {
	text-align: right;
}

.reveal table tbody tr:last-child th,
.reveal table tbody tr:last-child td {
	border-bottom: none;
}

.reveal sup {
	vertical-align: super;
	font-size: smaller;
}
.reveal sub {
	vertical-align: sub;
	font-size: smaller;
}

.reveal small {
	display: inline-block;
	font-size: 0.6em;
	line-height: 1.2em;
	vertical-align: top;
}

.reveal small * {
	vertical-align: top;
}

.reveal img {
	margin: var(--r-block-margin) 0;
}

/*********************************************
 * LINKS
 *********************************************/

.reveal a {
	color: var(--r-link-color);
	text-decoration: none;
	transition: color 0.15s ease;
}
.reveal a:hover {
	color: var(--r-link-color-hover);
	text-shadow: none;
	border: none;
}

.reveal .roll span:after {
	color: #fff;
	// background: darken( var(--r-link-color), 15% );
	background: var(--r-link-color-dark);
}

/*********************************************
 * Frame helper
 *********************************************/

.reveal .r-frame {
	border: 4px solid var(--r-main-color);
	box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
}

.reveal a .r-frame {
	transition: all 0.15s linear;
}

.reveal a:hover .r-frame {
	border-color: var(--r-link-color);
	box-shadow: 0 0 20px rgba(0, 0, 0, 0.55);
}

/*********************************************
 * NAVIGATION CONTROLS
 *********************************************/

.reveal .controls {
	color: var(--r-link-color);
}

/*********************************************
 * PROGRESS BAR
 *********************************************/

.reveal .progress {
	background: rgba(0, 0, 0, 0.2);
	color: var(--r-link-color);
}

/*********************************************
 * PRINT BACKGROUND
 *********************************************/
@media print {
	.backgrounds {
		background-color: var(--r-background-color);
	}
}


================================================
FILE: css/theme/white-contrast.scss
================================================
/**
 * White compact & high contrast reveal.js theme, with headers not in capitals.
 *
 * By Peter Kehl. Based on white.(s)css by Hakim El Hattab, http://hakim.se
 *
 * - Keep the source similar to black.css - for easy comparison.
 * - $mainFontSize controls code blocks, too (although under some ratio).
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$active-color: #2a76dd;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: #fff,

	$main-font: "'Source Sans Pro', Helvetica, sans-serif",
	$main-font-size: 42px,
	$main-color: #000,

	$heading-color: #000,
	$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
	$heading-font-weight: 600,

	$heading1-size: 2.5em,
	$heading2-size: 1.6em,
	$heading3-size: 1.3em,
	$heading4-size: 1em,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 15%),
	$selection-color: #fff,
	$selection-background-color: $active-color,

	$overlay-element-bg-color: '0, 0, 0',
	$overlay-element-fg-color: '240, 240, 240'
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('./fonts/source-sans-pro/source-sans-pro.css');

// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);


================================================
FILE: css/theme/white.scss
================================================
/**
 * White theme for reveal.js. This is the opposite of the 'black' theme.
 *
 * By Hakim El Hattab, http://hakim.se
 */

// Load utils
@use 'sass:color';
@use 'template/mixins' as mixins;

$active-color: #2a76dd;

// Inject theme variables (with some overrides)
@use 'template/settings' with (
	$background-color: #fff,

	$main-color: #222,
	$main-font: "'Source Sans Pro', Helvetica, sans-serif",
	$main-font-size: 42px,

	$heading-color: #222,
	$heading-font: "'Source Sans Pro', Helvetica, sans-serif",
	$heading-font-weight: 600,

	$heading1-size: 2.5em,
	$heading2-size: 1.6em,
	$heading3-size: 1.3em,
	$heading4-size: 1em,

	$link-color: $active-color,
	$link-color-hover: color.scale($active-color, $lightness: 15%),
	$selection-color: #fff,
	$selection-background-color: $active-color,

	$overlay-element-bg-color: '0 0 0',
	$overlay-element-fg-color: '240 240 240'
);

// Inject the theme template
@use 'template/theme';

// Include theme-specific fonts
@import url('./fonts/source-sans-pro/source-sans-pro.css');

// Change text when the background is inverted
@include mixins.dark-bg-text-color(#fff);


================================================
FILE: demo.html
================================================
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8" />

		<title>reveal.js – The HTML Presentation Framework</title>

		<meta
			name="description"
			content="A framework for easily creating beautiful presentations using HTML"
		/>
		<meta name="author" content="Hakim El Hattab" />

		<meta name="mobile-web-app-capable" content="yes" />
		<meta name="mobile-web-app-status-bar-style" content="black-translucent" />

		<meta name="viewport" content="width=device-width, initial-scale=1.0" />

		<link rel="stylesheet" href="css/reset.css" />
		<link rel="stylesheet" href="css/reveal.scss" />
		<link rel="stylesheet" href="css/theme/black.scss" id="theme" />

		<!-- Theme used for syntax highlighting of code -->
		<link rel="stylesheet" href="plugin/highlight/monokai.css" />
	</head>

	<body>
		<div class="reveal">
			<!-- Any section element inside of this container is displayed as a slide -->
			<div class="slides">
				<section>
					<a href="https://revealjs.com">
						<img
							src="https://static.slid.es/reveal/logo-v1/reveal-white-text.svg"
							alt="reveal.js logo"
							style="height: 180px; margin: 0 auto 4rem auto; background: transparent"
							class="demo-logo"
						/>
					</a>
					<h3>The HTML Presentation Framework</h3>
					<p>
						<small
							>Created by <a href="http://hakim.se">Hakim El Hattab</a> and
							<a href="https://github.com/hakimel/reveal.js/graphs/contributors"
								>contributors</a
							></small
						>
					</p>
				</section>

				<section>
					<h2>Hello There</h2>
					<p>
						reveal.js enables you to create beautiful interactive slide decks using HTML. This
						presentation will show you examples of what it can do.
					</p>
				</section>

				<!-- Example of nested vertical slides -->
				<section>
					<section>
						<h2>Vertical Slides</h2>
						<p>Slides can be nested inside of each other.</p>
						<p>Use the <em>Space</em> key to navigate through all slides.</p>
						<br />
						<a href="#/2/1" class="navigate-down">
							<img
								class="r-frame"
								style="background: rgba(255, 255, 255, 0.1)"
								width="178"
								height="238"
								data-src="https://static.slid.es/reveal/arrow.png"
								alt="Down arrow"
							/>
						</a>
					</section>
					<section>
						<h2>Basement Level 1</h2>
						<p>
							Nested slides are useful for adding additional detail underneath a high level
							horizontal slide.
						</p>
					</section>
					<section>
						<h2>Basement Level 2</h2>
						<p>That's it, time to go back up.</p>
						<br />
						<a href="#/2">
							<img
								class="r-frame"
								style="background: rgba(255, 255, 255, 0.1); transform: rotate(180deg)"
								width="178"
								height="238"
								data-src="https://static.slid.es/reveal/arrow.png"
								alt="Up arrow"
							/>
						</a>
					</section>
				</section>

				<section>
					<h2>Slides</h2>
					<p>
						Not a coder? Not a problem. There's a fully-featured visual editor for authoring these,
						try it out at <a href="https://slides.com" target="_blank">https://slides.com</a>.
					</p>
				</section>

				<section data-visibility="hidden">
					<h2>Hidden Slides</h2>
					<p>
						This slide is visible in the source, but hidden when the presentation is viewed. You can
						show all hidden slides by setting the `showHiddenSlides` config option to `true`.
					</p>
				</section>

				<section data-auto-animate>
					<h2 data-id="code-title">Pretty Code</h2>
					<pre data-id="code-animation"><code class="hljs javascript" data-trim data-line-numbers>
						import { useState } from 'react';

						function Example() {
						  const [count, setCount] = useState(0);

						  return (

							  ...

						  );
						}
					</code></pre>
					<p>
						Code syntax highlighting courtesy of
						<a href="https://highlightjs.org/usage/">highlight.js</a>.
					</p>
				</section>

				<section data-auto-animate>
					<h2 data-id="code-title">With Animations</h2>
					<pre
						data-id="code-animation"
					><code class="hljs javascript" data-trim data-line-numbers="|4,8-11|17|22-24"><script type="text/template">
						import { useState } from 'react';

						function Example() {
						  const [count, setCount] = useState(0);

						  return (
						    <div>
						      <p>You clicked {count} times</p>
						      <button onClick={() => setCount(count + 1)}>
						        Click me
						      </button>
						    </div>
						  );
						}

						function SecondExample() {
						  const [count, setCount] = useState(0);

						  return (
						    <div>
						      <p>You clicked {count} times</p>
						      <button onClick={() => setCount(count + 1)}>
						        Click me
						      </button>
						    </div>
						  );
						}
					</script></code></pre>
				</section>

				<section>
					<h2>Point of View</h2>
					<p>Press <strong>ESC</strong> to enter the slide overview.</p>
					<p>
						Hold down the <strong>alt</strong> key (<strong>ctrl</strong> in Linux) and click on any
						element to zoom towards it using <a href="http://lab.hakim.se/zoom-js">zoom.js</a>.
						Click again to zoom back out.
					</p>
					<p>(NOTE: Use ctrl + click in Linux.)</p>
				</section>

				<section
					data-auto-animate
					data-auto-animate-easing="cubic-bezier(0.770, 0.000, 0.175, 1.000)"
				>
					<h2>Auto-Animate</h2>
					<p>
						Automatically animate matching elements across slides with
						<a href="https://revealjs.com/auto-animate/">Auto-Animate</a>.
					</p>
					<div class="r-hstack justify-center">
						<div
							data-id="box1"
							style="background: #999; width: 50px; height: 50px; margin: 10px; border-radius: 5px"
						></div>
						<div
							data-id="box2"
							style="background: #999; width: 50px; height: 50px; margin: 10px; border-radius: 5px"
						></div>
						<div
							data-id="box3"
							style="background: #999; width: 50px; height: 50px; margin: 10px; border-radius: 5px"
						></div>
					</div>
				</section>
				<section
					data-auto-animate
					data-auto-animate-easing="cubic-bezier(0.770, 0.000, 0.175, 1.000)"
				>
					<div class="r-hstack justify-center">
						<div
							data-id="box1"
							data-auto-animate-delay="0"
							style="background: cyan; width: 150px; height: 100px; margin: 10px"
						></div>
						<div
							data-id="box2"
							data-auto-animate-delay="0.1"
							style="background: magenta; width: 150px; height: 100px; margin: 10px"
						></div>
						<div
							data-id="box3"
							data-auto-animate-delay="0.2"
							style="background: yellow; width: 150px; height: 100px; margin: 10px"
						></div>
					</div>
					<h2 style="margin-top: 20px">Auto-Animate</h2>
				</section>
				<section
					data-auto-animate
					data-auto-animate-easing="cubic-bezier(0.770, 0.000, 0.175, 1.000)"
				>
					<div class="r-stack">
						<div data-id="box1" style="background: cyan; width: 300px; height: 300px"></div>
						<div data-id="box2" style="background: magenta; width: 200px; height: 200px"></div>
						<div data-id="box3" style="background: yellow; width: 100px; height: 100px"></div>
					</div>
					<h2 style="margin-top: 20px">Auto-Animate</h2>
				</section>

				<section>
					<h2>Touch Optimized</h2>
					<p>
						Presentations look great on touch devices, like mobile phones and tablets. Simply swipe
						through your slides.
					</p>
				</section>

				<section data-markdown>
					<script type="text/template">
						## Markdown Support

						Write content using inline or external Markdown.
						Instructions and more info available in the [docs](https://revealjs.com/markdown/).

						```html []
						<section data-markdown>
						  ## Markdown Support

						  Write content using inline or external Markdown.
						  Instructions and more info available in the [docs](https://revealjs.com/markdown/).
						</section>
						```
					</script>
				</section>

				<section>
					<h2>Lightbox</h2>
					Turn any element into a <a href="https://revealjs.com/lightbox/">lightbox</a> using <strong>data‑preview‑image</strong> & <strong>data‑preview‑video</strong>.
					<div class="r-hstack" style="gap: 2rem;">
						<div>
							<pre style="font-size: 12px; width: 100%"><code class="html" data-trim>
								&lt;img src="image.png" data-preview-image="image.png"&gt;
							</code></pre>
							<img src="https://static.slid.es/logo/v2/slides-symbol-1024x1024.png" height="100" data-preview-image>
						</div>
						<div>
							<pre style="font-size: 12px; width: 100%"><code class="html" data-trim>
								&lt;img src="video.png" data-preview-video="video.mp4"&gt;
							</code></pre>
							<img src="https://static.slid.es/site/homepage/v1/homepage-video-editor.png" height="100" data-preview-video="https://static.slid.es/site/homepage/v1/homepage-video-editor.mp4">
						</div>
					</div>
				</section>

				<section>
					<p>Add the <code>r-fit-text</code> class to auto-size text</p>
					<h2 class="r-fit-text">FIT TEXT</h2>
				</section>

				<section>
					<section id="fragments">
						<h2>Fragments</h2>
						<p>Hit the next arrow...</p>
						<p class="fragment">... to step through ...</p>
						<p>
							<span class="fragment">... a</span> <span class="fragment">fragmented</span>
							<span class="fragment">slide.</span>
						</p>

						<aside class="notes">
							This slide has fragments which are also stepped through in the notes window.
						</aside>
					</section>
					<section>
						<h2>Fragment Styles</h2>
						<p>There's different types of fragments, like:</p>
						<p class="fragment grow">grow</p>
						<p class="fragment shrink">shrink</p>
						<p class="fragment fade-out">fade-out</p>
						<p>
							<span style="display: inline-block" class="fragment fade-right">fade-right, </span>
							<span style="display: inline-block" class="fragment fade-up">up, </span>
							<span style="display: inline-block" class="fragment fade-down">down, </span>
							<span style="display: inline-block" class="fragment fade-left">left</span>
						</p>
						<p class="fragment fade-in-then-out">fade-in-then-out</p>
						<p class="fragment fade-in-then-semi-out">fade-in-then-semi-out</p>
						<p>
							Highlight <span class="fragment highlight-red">red</span>
							<span class="fragment highlight-blue">blue</span>
							<span class="fragment highlight-green">green</span>
						</p>
					</section>
				</section>

				<section id="transitions">
					<h2>Transition Styles</h2>
					<p>
						You can select from different transitions, like: <br />
						<a href="?transition=none#/transitions">None</a> -
						<a href="?transition=fade#/transitions">Fade</a> -
						<a href="?transition=slide#/transitions">Slide</a> -
						<a href="?transition=convex#/transitions">Convex</a> -
						<a href="?transition=concave#/transitions">Concave</a> -
						<a href="?transition=zoom#/transitions">Zoom</a>
					</p>
				</section>

				<section id="themes">
					<h2>Themes</h2>
					<p>
						reveal.js comes with a few themes built in: <br />
						<!-- Hacks to swap themes after the page has loaded. Not flexible and only intended for the reveal.js demo deck. -->
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/black.css'); return false;"
							>Black (default)</a
						>
						-
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/white.css'); return false;"
							>White</a
						>
						-
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/league.css'); return false;"
							>League</a
						>
						-
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/sky.css'); return false;"
							>Sky</a
						>
						-
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/beige.css'); return false;"
							>Beige</a
						>
						-
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/simple.css'); return false;"
							>Simple</a
						>
						<br />
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/serif.css'); return false;"
							>Serif</a
						>
						-
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/blood.css'); return false;"
							>Blood</a
						>
						-
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/night.css'); return false;"
							>Night</a
						>
						-
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/moon.css'); return false;"
							>Moon</a
						>
						-
						<a
							href="#/themes"
							onclick="document.getElementById('theme').setAttribute('href','dist/theme/solarized.css'); return false;"
							>Solarized</a
						>
					</p>
				</section>

				<section>
					<section data-background="#dddddd">
						<h2>Slide Backgrounds</h2>
						<p>
							Set <code>data-background="#dddddd"</code> on a slide to change the background color.
							All CSS color formats are supported.
						</p>
						<a href="#" class="navigate-down">
							<img
								class="r-frame"
								style="background: rgba(255, 255, 255, 0.1)"
								width="178"
								height="238"
								data-src="https://static.slid.es/reveal/arrow.png"
								alt="Down arrow"
							/>
						</a>
					</section>
					<section data-background-gradient="linear-gradient(to bottom, #283b95, #17b2c3)">
						<h2>Gradient Backgrounds</h2>
						<pre><code class="hljs html wrap">&lt;section data-background-gradient=
							"linear-gradient(to bottom, #ddd, #191919)"&gt;</code></pre>
					</section>
					<section data-background="https://static.slid.es/reveal/image-placeholder.png">
						<h2>Image Backgrounds</h2>
						<pre><code class="hljs html">&lt;section data-background="image.png"&gt;</code></pre>
					</section>
					<section
						data-background="https://static.slid.es/reveal/image-placeholder.png"
						data-background-repeat="repeat"
						data-background-size="100px"
					>
						<h2>Tiled Backgrounds</h2>
						<pre><code class="hljs html" style="word-wrap: break-word;">&lt;section data-background="image.png" data-background-repeat="repeat" data-background-size="100px"&gt;</code></pre>
					</section>
					<section
						data-background-video="https://static.slid.es/site/homepage/v1/homepage-video-editor.mp4"
						data-background-color="#000000"
					>
						<div style="background-color: rgba(0, 0, 0, 0.9); color: #fff; padding: 20px">
							<h2>Video Backgrounds</h2>
							<pre><code class="hljs html" style="word-wrap: break-word;">&lt;section data-background-video="video.mp4,video.webm"&gt;</code></pre>
						</div>
					</section>
					<section data-background="http://i.giphy.com/90F8aUepslB84.gif">
						<h2>... and GIFs!</h2>
					</section>
				</section>

				<section
					data-transition="slide"
					data-background="#4d7e65"
					data-background-transition="zoom"
				>
					<h2>Background Transitions</h2>
					<p>
						Different background transitions are available via the backgroundTransition option. This
						one's called "zoom".
					</p>
					<pre><code class="hljs javascript">Reveal.configure({ backgroundTransition: 'zoom' })</code></pre>
				</section>

				<section
					data-transition="slide"
					data-background="#b5533c"
					data-background-transition="zoom"
				>
					<h2>Background Transitions</h2>
					<p>You can override background transitions per-slide.</p>
					<pre><code class="hljs html" style="word-wrap: break-word;">&lt;section data-background-transition="zoom"&gt;</code></pre>
				</section>

				<section data-background-iframe="https://hakim.se" data-background-interactive>
					<div
						style="
							position: absolute;
							width: 40%;
							right: 0;
							box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5), 0 5px 25px rgba(0, 0, 0, 0.2);
							background-color: rgba(0, 0, 0, 0.9);
							color: #fff;
							padding: 20px;
							font-size: 20px;
							text-align: left;
						"
					>
						<h2>Iframe Backgrounds</h2>
						<p>
							Since reveal.js runs on the web, you can easily embed other web content. Try
							interacting with the page in the background.
						</p>
					</div>
				</section>

				<section>
					<h2>Marvelous List</h2>
					<ul>
						<li>No order here</li>
						<li>Or here</li>
						<li>Or here</li>
						<li>Or here</li>
					</ul>
				</section>

				<section>
					<h2>Fantastic Ordered List</h2>
					<ol>
						<li>One is smaller than...</li>
						<li>Two is smaller than...</li>
						<li>Three!</li>
					</ol>
				</section>

				<section>
					<h2>Tabular Tables</h2>
					<table>
						<thead>
							<tr>
								<th>Item</th>
								<th>Value</th>
								<th>Quantity</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td>Apples</td>
								<td>$1</td>
								<td>7</td>
							</tr>
							<tr>
								<td>Lemonade</td>
								<td>$2</td>
								<td>18</td>
							</tr>
							<tr>
								<td>Bread</td>
								<td>$3</td>
								<td>2</td>
							</tr>
						</tbody>
					</table>
				</section>

				<section>
					<h2>Clever Quotes</h2>
					<p>
						These guys come in two forms, inline:
						<q
							cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations"
							>The nice thing about standards is that there are so many to choose from</q
						>
						and block:
					</p>
					<blockquote
						cite="http://searchservervirtualization.techtarget.com/definition/Our-Favorite-Technology-Quotations"
					>
						&ldquo;For years there has been a theory that millions of monkeys typing at random on
						millions of typewriters would reproduce the entire works of Shakespeare. The Internet
						has proven this theory to be untrue.&rdquo;
					</blockquote>
				</section>

				<section>
					<h2>Intergalactic Interconnections</h2>
					<p>
						You can link between slides internally,
						<a href="#/2/3">like this</a>.
					</p>
				</section>

				<section>
					<h2>Speaker View</h2>
					<p>
						There's a <a href="https://revealjs.com/speaker-view/">speaker view</a>. It includes a
						timer, preview of the upcoming slide as well as your speaker notes.
					</p>
					<p>Press the <em>S</em> key to try it out.</p>

					<aside class="notes">
						Oh hey, these are some notes. They'll be hidden in your presentation, but you can see
						them if you open the speaker notes window (hit 's' on your keyboard).
					</aside>
				</section>

				<section>
					<h2>Export to PDF</h2>
					<p>
						Presentations can be <a href="https://revealjs.com/pdf-export/">exported to PDF</a>,
						here's an example:
					</p>
					<iframe
						data-src="https://www.slideshare.net/slideshow/embed_code/42840540"
						width="445"
						height="355"
						frameborder="0"
						marginwidth="0"
						marginheight="0"
						scrolling="no"
						style="border: 3px solid #666; margin-bottom: 5px; max-width: 100%"
						allowfullscreen
					>
					</iframe>
				</section>

				<section>
					<h2>Global State</h2>
					<p>
						Set <code>data-state="something"</code> on a slide and <code>"something"</code>
						will be added as a class to the document element when the slide is open. This lets you
						apply broader style changes, like switching the page background.
					</p>
				</section>

				<section data-state="customevent">
					<h2>State Events</h2>
					<p>
						Additionally custom events can be triggered on a per slide basis by binding to the
						<code>data-state</code> name.
					</p>
					<pre><code class="javascript" data-trim contenteditable style="font-size: 18px;">
Reveal.on( 'customevent', function() {
	console.log( '"customevent" has fired' );
} );
					</code></pre>
				</section>

				<section>
					<h2>Take a Moment</h2>
					<p>
						Press B or . on your keyboard to pause the presentation. This is helpful when you're on
						stage and want to take distracting slides off the screen.
					</p>
				</section>

				<section>
					<h2>Much more</h2>
					<ul>
						<li>Right-to-left support</li>
						<li><a href="https://revealjs.com/api/">Extensive JavaScript API</a></li>
						<li><a href="https://revealjs.com/auto-slide/">Auto-progression</a></li>
						<li>
							<a href="https://revealjs.com/backgrounds/#parallax-background"
								>Parallax backgrounds</a
							>
						</li>
						<li><a href="https://revealjs.com/keyboard/">Custom keyboard bindings</a></li>
					</ul>
				</section>

				<section style="text-align: left">
					<h1>THE END</h1>
					<p>
						- <a href="https://slides.com">Try the online editor</a> <br />
						- <a href="https://github.com/hakimel/reveal.js">Source code &amp; documentation</a>
					</p>
				</section>
			</div>
		</div>

		<!-- Use the built assets if you want to run reveal.js without a web server -->
		<!--
		<script src="dist/reveal.js"></script>
		<script src="dist/plugin/zoom.js"></script>
		<script src="dist/plugin/notes.js"></script>
		<script src="dist/plugin/search.js"></script>
		<script src="dist/plugin/markdown.js"></script>
		<script src="dist/plugin/highlight.js"></script>
		-->

		<script type="module">
			import Reveal from 'reveal.js';
			import RevealZoom from 'reveal.js/plugin/zoom';
			import RevealNotes from 'reveal.js/plugin/notes';
			import RevealSearch from 'reveal.js/plugin/search';
			import RevealMarkdown from 'reveal.js/plugin/markdown';
			import RevealHighlight from 'reveal.js/plugin/highlight';

			// Also available as an ES module, see:
			// https://revealjs.com/initialization/
			Reveal.initialize({
				controls: true,
				progress: true,
				center: true,
				hash: true,

				// Learn about plugins: https://revealjs.com/plugins/
				plugins: [RevealZoom, RevealNotes, RevealSearch, RevealMarkdown, RevealHighlight],
			});
		</script>
	</body>
</html>


================================================
FILE: dist/config.d.ts
================================================
/**
 * Slide transition styles.
 *
 * @see {@link https://revealjs.com/transitions/}
 */
type TransitionStyle = 'none' | 'fade' | 'slide' | 'convex' | 'concave' | 'zoom';
/**
 * Slide transition speeds.
 *
 * @see {@link https://revealjs.com/transitions/}
 */
type TransitionSpeed = 'default' | 'fast' | 'slow';
/**
 * Fragment animation classes.
 *
 * @see {@link https://revealjs.com/fragments/}
 */
type FragmentAnimation = 'fade-out' | 'fade-up' | 'fade-down' | 'fade-left' | 'fade-right' | 'fade-in-then-out' | 'fade-in-then-semi-out' | 'grow' | 'shrink' | 'strike' | 'highlight-red' | 'highlight-blue' | 'highlight-green' | 'highlight-current-red' | 'highlight-current-blue' | 'highlight-current-green' | (string & {});
/**
 * katex - Math Plugin configuration
 *
 * @see {@link https://github.com/reveal/revealjs.com/blob/master/src/math.md}
 * @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/math/katex.js}
 */
interface KatexConfig {
    local?: string;
    version?: string;
    delimiters?: Array<{
        left: string;
        right: string;
        display: boolean;
    }>;
    ignoredTags?: string[];
}
/**
 * mathjax2 - Math Plugin configuration
 *
 * @see {@link https://github.com/reveal/revealjs.com/blob/master/src/math.md}
 * @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/math/mathjax2.js}
 */
interface Mathjax2Config {
    mathjax?: string;
    config?: string;
    tex2jax?: {
        inlineMath?: any;
        skipTags?: string[];
    };
}
/**
 * mathjax3 - Math Plugin configuration
 *
 * @see {@link https://github.com/reveal/revealjs.com/blob/master/src/math.md}
 * @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/math/mathjax3.js}
 */
interface Mathjax3Config {
    mathjax?: string;
    tex?: {
        inlineMath?: any;
    };
    options?: {
        skipHtmlTags: string[];
    };
}
/**
 * mathjax4 - Math Plugin configuration
 *
 * @see {@link https://github.com/reveal/revealjs.com/blob/master/src/math.md}
 * @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/math/mathjax4.js}
 */
interface Mathjax4Config {
    mathjax?: string;
    tex?: {
        inlineMath?: Array<[string, string]>;
        displayMath?: Array<[string, string]>;
        macros?: Record<string, string | [string, number]>;
    };
    options?: {
        skipHtmlTags?: string[];
    };
    startup?: {
        ready?: () => void;
    };
    output?: {
        font?: string;
        displayOverflow?: string;
        linebreaks?: {
            inline?: boolean;
            width?: string;
            lineleading?: number;
            LinebreakVisitor?: unknown;
        };
    };
}
/**
 * Highlight Plugin configuration
 *
 * @see {@link https://github.com/hakimel/reveal.js/blob/master/plugin/highlight/plugin.js}
 */
interface HighlightConfig {
    highlightOnLoad?: boolean;
    escapeHTML?: boolean;
    beforeHighlight?: (...args: any) => any;
}
/**
 * Markdown Plugin configuration
 *
 * @see {@link https://github.com/reveal/revealjs.com/blob/master/src/markdown.md}
 * @see {@link https://marked.js.org/using_advanced}
 */
interface MarkdownConfig {
    async?: boolean;
    baseUrl?: string;
    breaks?: boolean;
    gfm?: boolean;
    headerIds?: boolean;
    headerPrefix?: string;
    highlight?: (...args: any) => any;
    langPrefix?: string;
    mangle?: boolean;
    pedantic?: boolean;
    renderer?: object;
    sanitize?: boolean;
    sanitizer?: (...args: any) => any;
    silent?: boolean;
    smartLists?: boolean;
    smartypants?: boolean;
    tokenizer?: object;
    walkTokens?: (...args: any) => any;
    xhtml?: boolean;
    separator?: string;
    verticalSeparator?: string;
    notesSeparator?: string;
    attributes?: string;
}
/**
 * Configuration object for reveal.js.
 *
 * @see {@link https://revealjs.com/config/}
 */
interface RevealConfig {
    /**
     * The "normal" size of the presentation, aspect ratio will be preserved
     * when the presentation is scaled to fit different resolutions
     *
     * @see {@link https://revealjs.com/presentation-size/}
     *
     * @defaultValue 960
     */
    width?: number | string;
    /**
     * The "normal" size of the presentation, aspect ratio will be preserved
     * when the presentation is scaled to fit different resolutions
     *
     * @see {@link https://revealjs.com/presentation-size/}
     *
     * @defaultValue 700
     */
    height?: number | string;
    /**
     * Factor of the display size that should remain empty around the content
     *
     * @see {@link https://revealjs.com/presentation-size/}
     *
     * @defaultValue 0.04
     */
    margin?: number;
    /**
     * The smallest possible factor to scale content down by in order to fit
     * the available viewport.
     *
     * @see {@link https://revealjs.com/presentation-size/}
     *
     * @defaultValue 0.2
     */
    minScale?: number;
    /**
     * The largest possible factor to scale content up by in order to cover
     * the available viewport.
     *
     * @see {@link https://revealjs.com/presentation-size/}
     *
     * @defaultValue 2.0
     */
    maxScale?: number;
    /**
     * Display presentation control arrows
     * - true: Display controls in all views
     * - false: Hide controls in all views
     * - 'speaker': Display controls only in the speaker view
     *
     * @defaultValue true
     */
    controls?: boolean | 'speaker' | 'speaker-only';
    /**
     * Help the user learn the controls by providing hints, for example by
     * bouncing the down arrow when they first encounter a vertical slide
     *
     * @defaultValue true
     */
    controlsTutorial?: boolean;
    /**
     * Determines where controls appear, "edges" or "bottom-right"
     *
     * @defaultValue 'bottom-right'
     */
    controlsLayout?: 'edges' | 'bottom-right';
    /**
     * Visibility rule for backwards navigation arrows; "faded", "hidden"
     * or "visible"
     *
     * @defaultValue 'faded'
     */
    controlsBackArrows?: 'faded' | 'hidden' | 'visible';
    /**
     * Display a presentation progress bar
     *
     * @defaultValue true
     */
    progress?: boolean;
    /**
     * Display the page number of the current slide
     * - true:    Show slide number
     * - false:   Hide slide number
     *
     * Can optionally be set as a string that specifies the number formatting:
     * - "h.v":	  Horizontal . vertical slide number (default)
     * - "h/v":	  Horizontal / vertical slide number
     * - "c":	  Flattened slide number
     * - "c/t":	  Flattened slide number / total slides
     *
     * Alternatively, you can provide a function that returns the slide
     * number for the current slide. The function should take in a slide
     * object and return an array with one string [slideNumber] or
     * three strings [n1,delimiter,n2]. See #formatSlideNumber().
     *
     * @defaultValue false
     */
    slideNumber?: boolean | 'h.v' | 'h/v' | 'c' | 'c/t' | ((slide: any) => string | [string, string, string]);
    /**
     * Can be used to limit the contexts in which the slide number appears
     * - "all":      Always show the slide number
     * - "print":    Only when printing to PDF
     * - "speaker":  Only in the speaker view
     *
     * @defaultValue 'all'
     */
    showSlideNumber?: 'all' | 'print' | 'speaker';
    /**
     * Use 1 based indexing for # links to match slide number (default is zero
     * based)
     *
     * @defaultValue false
     */
    hashOneBasedIndex?: boolean;
    /**
     * Add the current slide number to the URL hash so that reloading the
     * page/copying the URL will return you to the same slide
     *
     * @defaultValue false
     */
    hash?: boolean;
    /**
     * Flags if we should monitor the hash and change slides accordingly
     *
     * @defaultValue true
     */
    respondToHashChanges?: boolean;
    /**
     * Enable support for jump-to-slide navigation shortcuts
     *
     * @defaultValue true
     */
    jumpToSlide?: boolean;
    /**
     * Push each slide change to the browser history. Implies `hash: true`
     *
     * @defaultValue false
     */
    history?: boolean;
    /**
     * Enable keyboard shortcuts for navigation
     *
     * @defaultValue true
     */
    keyboard?: boolean | {
        [keyCode: number]: string | ((event: KeyboardEvent) => void);
    };
    /**
     * Optional function that blocks keyboard events when returning false
     *
     * If you set this to 'focused', we will only capture keyboard events
     * for embedded decks when they are in focus
     *
     * @defaultValue null
     */
    keyboardCondition?: null | 'focused' | ((event: KeyboardEvent) => boolean);
    /**
     * Disables the default reveal.js slide layout (scaling and centering)
     * so that you can use custom CSS layout
     *
     * @defaultValue false
     */
    disableLayout?: boolean;
    /**
     * Enable the slide overview mode
     *
     * @see {@link https://revealjs.com/overview/}
     *
     * @defaultValue true
     */
    overview?: boolean;
    /**
     * Vertical centering of slides
     *
     * @defaultValue true
     */
    center?: boolean;
    /**
     * Enables touch navigation on devices with touch input
     *
     * @defaultValue true
     */
    touch?: boolean;
    /**
     * Loop the presentation
     *
     * @defaultValue false
     */
    loop?: boolean;
    /**
     * Change the presentation direction to be RTL
     *
     * @defaultValue false
     */
    rtl?: boolean;
    /**
     * Changes the behavior of our navigation directions.
     *
     * "default"
     * Left/right arrow keys step between horizontal slides, up/down
     * arrow keys step between vertical slides. Space key steps through
     * all slides (both horizontal and vertical).
     *
     * "linear"
     * Removes the up/down arrows. Left/right arrows step through all
     * slides (both horizontal and vertical).
     *
     * "grid"
     * When this is enabled, stepping left/right from a vertical stack
     * to an adjacent vertical stack will land you at the same vertical
     * index.
     *
     * Consider a deck with six slides ordered in two vertical stacks:
     * 1.1    2.1
     * 1.2    2.2
     * 1.3    2.3
     *
     * If you're on slide 1.3 and navigate right, you will normally move
     * from 1.3 -> 2.1. If "grid" is used, the same navigation takes you
     * from 1.3 -> 2.3.
     *
     * @defaultValue 'default'
     */
    navigationMode?: 'default' | 'linear' | 'grid';
    /**
     * Randomizes the order of slides each time the presentation loads
     *
     * @defaultValue false
     */
    shuffle?: boolean;
    /**
     * Turns fragments on and off globally
     *
     * @see {@link https://revealjs.com/fragments/}
     *
     * @defaultValue true
     */
    fragments?: boolean;
    /**
     * Flags whether to include the current fragment in the URL,
     * so that reloading brings you to the same fragment position
     *
     * @defaultValue true
     */
    fragmentInURL?: boolean;
    /**
     * Flags if the presentation is running in an embedded mode,
     * i.e. contained within a limited portion of the screen
     *
     * @defaultValue false
     */
    embedded?: boolean;
    /**
     * Flags if we should show a help overlay when the question-mark
     * key is pressed
     *
     * @defaultValue true
     */
    help?: boolean;
    /**
     * Flags if it should be possible to pause the presentation (blackout)
     *
     * @defaultValue true
     */
    pause?: boolean;
    /**
     * Flags if speaker notes should be visible to all viewers
     *
     * @defaultValue false
     */
    showNotes?: boolean;
    /**
     * Flags if slides with data-visibility="hidden" should be kept visible
     *
     * @defaultValue false
     */
    showHiddenSlides?: boolean;
    /**
     * Global override for autoplaying embedded media (video/audio/iframe)
     * - null:   Media will only autoplay if data-autoplay is present
     * - true:   All media will autoplay, regardless of individual setting
     * - false:  No media will autoplay, regardless of individual setting
     *
     * @defaultValue null
     */
    autoPlayMedia?: null | boolean;
    /**
     * Global override for preloading lazy-loaded iframes
     * - null:   Iframes with data-src AND data-preload will be loaded when within
     *           the viewDistance, iframes with only data-src will be loaded when visible
     * - true:   All iframes with data-src will be loaded when within the viewDistance
     * - false:  All iframes with data-src will be loaded only when visible
     *
     * @defaultValue null
     */
    preloadIframes?: null | boolean;
    /**
     * Prevent embedded iframes from automatically focusing on themselves
     *
     * @defaultValue false
     */
    preventIframeAutoFocus?: boolean;
    /**
     * Can be used to globally disable auto-animation
     *
     * @see {@link https://revealjs.com/auto-animate/}
     *
     * @defaultValue true
     */
    autoAnimate?: boolean;
    /**
     * Optionally provide a custom element matcher that will be
     * used to dictate which elements we can animate between.
     *
     * @defaultValue null
     */
    autoAnimateMatcher?: null | Function;
    /**
     * Default settings for our auto-animate transitions, can be
     * overridden per-slide or per-element via data arguments
     *
     * @defaultValue 'ease'
     */
    autoAnimateEasing?: 'ease' | string;
    /**
     * Number of seconds to animate each element.
     *
     * @defaultValue 1.0
     */
    autoAnimateDuration?: number;
    /**
     * Should unmatched elements be faded in?
     *
     * @defaultValue true
     */
    autoAnimateUnmatched?: boolean;
    /**
     * CSS properties that can be auto-animated. Position & scale
     * is matched separately so there's no need to include styles
     * like top/right/bottom/left, width/height or margin.
     *
     * @defaultValue ['opacity', 'color', 'background-color', 'padding', 'font-size', 'line-height', 'letter-spacing', 'border-width', 'border-color', 'border-radius', 'outline', 'outline-offset']
     */
    autoAnimateStyles?: string[];
    /**
     * Controls automatic progression to the next slide
     * - 0:      Auto-sliding only happens if the data-autoslide HTML attribute
     *           is present on the current slide or fragment
     * - 1+:     All slides will progress automatically at the given interval
     * - false:  No auto-sliding, even if data-autoslide is present
     *
     * @defaultValue 0
     */
    autoSlide?: number | false;
    /**
     * Stop auto-sliding after user input
     *
     * @defaultValue true
     */
    autoSlideStoppable?: boolean;
    /**
     * Use this method for navigation when auto-sliding (defaults to navigateNext)
     *
     * @defaultValue null
     */
    autoSlideMethod?: null | Function;
    /**
     * Specify the average time in seconds that you think you will spend
     * presenting each slide. This is used to show a pacing timer in the
     * speaker view
     *
     * @defaultValue null
     */
    defaultTiming?: null;
    /**
     * Enable slide navigation via mouse wheel
     *
     * @defaultValue false
     */
    mouseWheel?: boolean;
    /**
     * Opens links in an iframe preview overlay
     * Add `data-preview-link` and `data-preview-link="false"` to customize each link
     * individually
     *
     * @defaultValue false
     */
    previewLinks?: boolean;
    /**
     * Exposes the reveal.js API through window.postMessage
     *
     * @defaultValue true
     */
    postMessage?: boolean;
    /**
     * Dispatches all reveal.js events to the parent window through postMessage
     *
     * @defaultValue false
     */
    postMessageEvents?: boolean;
    /**
     * Focuses body when page changes visibility to ensure keyboard shortcuts work
     *
     * @defaultValue true
     */
    focusBodyOnPageVisibilityChange?: boolean;
    /**
     * Transition style
     *
     * @see {@link https://revealjs.com/transitions/}
     *
     * @defaultValue 'slide'
     */
    transition?: TransitionStyle;
    /**
     * Transition speed
     *
     * @defaultValue 'default'
     */
    transitionSpeed?: TransitionSpeed;
    /**
     * Transition style for full page slide backgrounds
     *
     * @defaultValue 'fade'
     */
    backgroundTransition?: TransitionStyle;
    /**
     * Parallax background image
     *
     * @defaultValue ''
     */
    parallaxBackgroundImage?: null | string;
    /**
     * Parallax background size
     *
     * @defaultValue ''
     */
    parallaxBackgroundSize?: null | string;
    /**
     * Parallax background repeat
     *
     * @defaultValue ''
     */
    parallaxBackgroundRepeat?: null | string;
    /**
     * Parallax background position
     *
     * @defaultValue ''
     */
    parallaxBackgroundPosition?: null | string;
    /**
     * Amount of pixels to move the parallax background per slide step
     *
     * @defaultValue null
     */
    parallaxBackgroundHorizontal?: null | number;
    /**
     *
     * @defaultValue null
     */
    parallaxBackgroundVertical?: null | number;
    /**
     * Can be used to initialize reveal.js in one of the following views:
     * - print:   Render the presentation so that it can be printed to PDF
     * - scroll:  Show the presentation as a tall scrollable page with scroll
     *            triggered animations
     *
     * @see {@link https://revealjs.com/scroll-view/}
     *
     * @defaultValue null
     */
    view?: null | 'print' | 'scroll';
    /**
     * Adjusts the height of each slide in the scroll view.
     * - full:       Each slide is as tall as the viewport
     * - compact:    Slides are as small as possible, allowing multiple slides
     *               to be visible in parallel on tall devices
     *
     * @defaultValue 'full'
     */
    scrollLayout?: 'full' | 'compact';
    /**
     * Control how scroll snapping works in the scroll view.
     * - false:   	No snapping, scrolling is continuous
     * - proximity:  Snap when close to a slide
     * - mandatory:  Always snap to the closest slide
     *
     * Only applies to presentations in scroll view.
     *
     * @defaultValue 'mandatory'
     */
    scrollSnap?: false | 'proximity' | 'mandatory';
    /**
     * Enables and configures the scroll view progress bar.
     * - 'auto':    Show the scrollbar while scrolling, hide while idle
     * - true:      Always show the scrollbar
     * - false:     Never show the scrollbar
     *
     * @defaultValue 'auto'
     */
    scrollProgress?: 'auto' | boolean;
    /**
     * Automatically activate the scroll view when we the viewport falls
     * below the given width.
     *
     * @defaultValue 435
     */
    scrollActivationWidth?: number;
    /**
     * The maximum number of pages a single slide can expand onto when printing
     * to PDF, unlimited by default
     *
     * @defaultValue Number.POSITIVE_INFINITY
     */
    pdfMaxPagesPerSlide?: number;
    /**
     * Prints each fragment on a separate slide
     *
     * @defaultValue true
     */
    pdfSeparateFragments?: boolean;
    /**
     * Offset used to reduce the height of content within exported PDF pages.
     * This exists to account for environment differences based on how you
     * print to PDF. CLI printing options, like phantomjs and wkpdf, can end
     * on precisely the total height of the document whereas in-browser
     * printing has to end one pixel before.
     *
     * @defaultValue -1
     */
    pdfPageHeightOffset?: number;
    /**
     * Number of slides away from the current that are visible
     *
     * @defaultValue 3
     */
    viewDistance?: number;
    /**
     * Number of slides away from the current that are visible on mobile
     * devices. It is advisable to set this to a lower number than
     * viewDistance in order to save resources.
     *
     * @defaultValue 2
     */
    mobileViewDistance?: number;
    /**
     * The display mode that will be used to show slides
     *
     * @defaultValue 'block'
     */
    display?: string;
    /**
     * Hide cursor if inactive
     *
     * @defaultValue true
     */
    hideInactiveCursor?: boolean;
    /**
     * Time before the cursor is hidden (in ms)
     *
     * @defaultValue 5000
     */
    hideCursorTime?: number;
    /**
     * Should we automatically sort and set indices for fragments
     * at each sync? (See Reveal.sync)
     *
     * @defaultValue true
     */
    sortFragmentsOnSync?: boolean;
    /**
     * Highlight plugin configuration
     */
    highlight?: HighlightConfig;
    /**
     * Markdown plugin configuration
     */
    markdown?: MarkdownConfig;
    /**
     * KaTeX math plugin configuration
     */
    katex?: KatexConfig;
    /**
     * MathJax 2 plugin configuration
     */
    mathjax2?: Mathjax2Config;
    /**
     * MathJax 3 plugin configuration
     */
    mathjax3?: Mathjax3Config;
    /**
     * MathJax 4 plugin configuration
     */
    mathjax4?: Mathjax4Config;
    /**
     * Script dependencies to load
     *
     * @defaultValue []
     */
    dependencies?: any[];
    /**
     * Plugin objects to register and use for this presentation
     *
     * @defaultValue []
     */
    plugins?: any[];
}
/**
 * The default reveal.js config object.
 */
declare const defaultConfig: RevealConfig;
export type { RevealConfig, TransitionStyle, TransitionSpeed, FragmentAnimation, KatexConfig, Mathjax2Config, Mathjax3Config, Mathjax4Config, HighlightConfig, MarkdownConfig, };
export { defaultConfig };


================================================
FILE: dist/plugin/highlight/monokai.css
================================================
/*
Monokai style - ported by Luigi Maselli - http://grigio.org
*/

.hljs {
  display: block;
  overflow-x: auto;
  padding: 0.5em;
  background: #272822;
  color: #ddd;
}

.hljs-tag,
.hljs-keyword,
.hljs-selector-tag,
.hljs-literal,
.hljs-strong,
.hljs-name {
  color: #f92672;
}

.hljs-code {
  color: #66d9ef;
}

.hljs-class .hljs-title {
  color: white;
}

.hljs-attribute,
.hljs-symbol,
.hljs-regexp,
.hljs-link {
  color: #bf79db;
}

.hljs-string,
.hljs-bullet,
.hljs-subst,
.hljs-title,
.hljs-section,
.hljs-emphasis,
.hljs-type,
.hljs-built_in,
.hljs-builtin-name,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-addition,
.hljs-variable,
.hljs-template-tag,
.hljs-template-variable {
  color: #a6e22e;
}

.hljs-comment,
.hljs-quote,
.hljs-deletion,
.hljs-meta {
  color: #75715e;
}

.hljs-keyword,
.hljs-selector-tag,
.hljs-literal,
.hljs-doctag,
.hljs-title,
.hljs-section,
.hljs-type,
.hljs-selector-id {
  font-weight: bold;
}


================================================
FILE: dist/plugin/highlight/zenburn.css
================================================
/*

Zenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru>
based on dark.css by Ivan Sagalaev

*/

.hljs {
  display: block;
  overflow-x: auto;
  padding: 0.5em;
  background: #3f3f3f;
  color: #dcdcdc;
}

.hljs-keyword,
.hljs-selector-tag,
.hljs-tag {
  color: #e3ceab;
}

.hljs-template-tag {
  color: #dcdcdc;
}

.hljs-number {
  color: #8cd0d3;
}

.hljs-variable,
.hljs-template-variable,
.hljs-attribute {
  color: #efdcbc;
}

.hljs-literal {
  color: #efefaf;
}

.hljs-subst {
  color: #8f8f8f;
}

.hljs-title,
.hljs-name,
.hljs-selector-id,
.hljs-selector-class,
.hljs-section,
.hljs-type {
  color: #efef8f;
}

.hljs-symbol,
.hljs-bullet,
.hljs-link {
  color: #dca3a3;
}

.hljs-deletion,
.hljs-string,
.hljs-built_in,
.hljs-builtin-name {
  color: #cc9393;
}

.hljs-addition,
.hljs-comment,
.hljs-quote,
.hljs-meta {
  color: #7f9f7f;
}

.hljs-emphasis {
  font-style: italic;
}

.hljs-strong {
  font-weight: bold;
}


================================================
FILE: dist/plugin/highlight.d.ts
================================================
import { HLJSApi } from 'highlight.js';
import { RevealPlugin } from 'reveal.js';
export interface HighlightLine {
    start?: number;
    end?: number;
}
export interface HighlightLineNumbersOptions {
    singleLine?: boolean;
    startFrom?: number;
}
export interface HighlightJsApi extends HLJSApi {
    initLineNumbersOnLoad(options?: HighlightLineNumbersOptions): void;
    lineNumbersBlock(element: HTMLElement, options?: HighlightLineNumbersOptions): void;
    lineNumbersValue(code: string, options?: HighlightLineNumbersOptions): string | undefined;
}
export interface HighlightScrollState {
    currentBlock?: HTMLElement;
    animationFrameID?: number;
}
export interface HighlightLineBounds {
    top: number;
    bottom: number;
}
export type HighlightLineStep = HighlightLine[];
export interface HighlightPlugin extends RevealPlugin {
    id: 'highlight';
    HIGHLIGHT_STEP_DELIMITER: '|';
    HIGHLIGHT_LINE_DELIMITER: ',';
    HIGHLIGHT_LINE_RANGE_DELIMITER: '-';
    hljs: HighlightJsApi;
    highlightBlock(block: HTMLElement): void;
    scrollHighlightedLineIntoView(block: HTMLElement, scrollState: HighlightScrollState, skipAnimation?: boolean): void;
    easeInOutQuart(t: number): number;
    getHighlightedLineBounds(block: HTMLElement): HighlightLineBounds;
    highlightLines(block: HTMLElement, linesToHighlight?: string): void;
    deserializeHighlightSteps(highlightSteps: string): HighlightLineStep[];
    serializeHighlightSteps(highlightSteps: HighlightLineStep[]): string;
}
declare const Highlight: () => HighlightPlugin;
export default Highlight;


================================================
FILE: dist/plugin/highlight.js
================================================
(function(ze,ke){typeof exports=="object"&&typeof module<"u"?module.exports=ke():typeof define=="function"&&define.amd?define(ke):(ze=typeof globalThis<"u"?globalThis:ze||self,ze.RevealHighlight=ke())})(this,(function(){"use strict";function ze(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var ke,si;function ac(){if(si)return ke;si=1;function t(u){return u instanceof Map?u.clear=u.delete=u.set=function(){throw new Error("map is read-only")}:u instanceof Set&&(u.add=u.clear=u.delete=function(){throw new Error("set is read-only")}),Object.freeze(u),Object.getOwnPropertyNames(u).forEach(f=>{const v=u[f],F=typeof v;(F==="object"||F==="function")&&!Object.isFrozen(v)&&t(v)}),u}class e{constructor(f){f.data===void 0&&(f.data={}),this.data=f.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function n(u){return u.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")}function a(u,...f){const v=Object.create(null);for(const F in u)v[F]=u[F];return f.forEach(function(F){for(const ae in F)v[ae]=F[ae]}),v}const r="</span>",i=u=>!!u.scope,s=(u,{prefix:f})=>{if(u.startsWith("language:"))return u.replace("language:","language-");if(u.includes(".")){const v=u.split(".");return[`${f}${v.shift()}`,...v.map((F,ae)=>`${F}${"_".repeat(ae+1)}`)].join(" ")}return`${f}${u}`};class o{constructor(f,v){this.buffer="",this.classPrefix=v.classPrefix,f.walk(this)}addText(f){this.buffer+=n(f)}openNode(f){if(!i(f))return;const v=s(f.scope,{prefix:this.classPrefix});this.span(v)}closeNode(f){i(f)&&(this.buffer+=r)}value(){return this.buffer}span(f){this.buffer+=`<span class="${f}">`}}const _=(u={})=>{const f={children:[]};return Object.assign(f,u),f};class l{constructor(){this.rootNode=_(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(f){this.top.children.push(f)}openNode(f){const v=_({scope:f});this.add(v),this.stack.push(v)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(f){return this.constructor._walk(f,this.rootNode)}static _walk(f,v){return typeof v=="string"?f.addText(v):v.children&&(f.openNode(v),v.children.forEach(F=>this._walk(f,F)),f.closeNode(v)),f}static _collapse(f){typeof f!="string"&&f.children&&(f.children.every(v=>typeof v=="string")?f.children=[f.children.join("")]:f.children.forEach(v=>{l._collapse(v)}))}}class c extends l{constructor(f){super(),this.options=f}addText(f){f!==""&&this.add(f)}startScope(f){this.openNode(f)}endScope(){this.closeNode()}__addSublanguage(f,v){const F=f.root;v&&(F.scope=`language:${v}`),this.add(F)}toHTML(){return new o(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function d(u){return u?typeof u=="string"?u:u.source:null}function p(u){return T("(?=",u,")")}function E(u){return T("(?:",u,")*")}function m(u){return T("(?:",u,")?")}function T(...u){return u.map(v=>d(v)).join("")}function g(u){const f=u[u.length-1];return typeof f=="object"&&f.constructor===Object?(u.splice(u.length-1,1),f):{}}function S(...u){return"("+(g(u).capture?"":"?:")+u.map(F=>d(F)).join("|")+")"}function b(u){return new RegExp(u.toString()+"|").exec("").length-1}function R(u,f){const v=u&&u.exec(f);return v&&v.index===0}const O=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function N(u,{joinWith:f}){let v=0;return u.map(F=>{v+=1;const ae=v;let re=d(F),P="";for(;re.length>0;){const L=O.exec(re);if(!L){P+=re;break}P+=re.substring(0,L.index),re=re.substring(L.index+L[0].length),L[0][0]==="\\"&&L[1]?P+="\\"+String(Number(L[1])+ae):(P+=L[0],L[0]==="("&&v++)}return P}).map(F=>`(${F})`).join(f)}const C=/\b\B/,h="[a-zA-Z]\\w*",I="[a-zA-Z_]\\w*",D="\\b\\d+(\\.\\d+)?",w="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",M="\\b(0b[01]+)",Y="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",Z=(u={})=>{const f=/^#![ ]*\//;return u.binary&&(u.begin=T(f,/.*\b/,u.binary,/\b.*/)),a({scope:"meta",begin:f,end:/$/,relevance:0,"on:begin":(v,F)=>{v.index!==0&&F.ignoreMatch()}},u)},J={begin:"\\\\[\\s\\S]",relevance:0},H={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[J]},K={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[J]},j={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},ne=function(u,f,v={}){const F=a({scope:"comment",begin:u,end:f,contains:[]},v);F.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const ae=S("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return F.contains.push({begin:T(/[ ]+/,"(",ae,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),F},Se=ne("//","$"),fe=ne("/\\*","\\*/"),Te=ne("#","$"),Ce={scope:"number",begin:D,relevance:0},be={scope:"number",begin:w,relevance:0},me={scope:"number",begin:M,relevance:0},se={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[J,{begin:/\[/,end:/\]/,relevance:0,contains:[J]}]},_e={scope:"title",begin:h,relevance:0},Q={scope:"title",begin:I,relevance:0},z={begin:"\\.\\s*"+I,relevance:0};var te=Object.freeze({__proto__:null,APOS_STRING_MODE:H,BACKSLASH_ESCAPE:J,BINARY_NUMBER_MODE:me,BINARY_NUMBER_RE:M,COMMENT:ne,C_BLOCK_COMMENT_MODE:fe,C_LINE_COMMENT_MODE:Se,C_NUMBER_MODE:be,C_NUMBER_RE:w,END_SAME_AS_BEGIN:function(u){return Object.assign(u,{"on:begin":(f,v)=>{v.data._beginMatch=f[1]},"on:end":(f,v)=>{v.data._beginMatch!==f[1]&&v.ignoreMatch()}})},HASH_COMMENT_MODE:Te,IDENT_RE:h,MATCH_NOTHING_RE:C,METHOD_GUARD:z,NUMBER_MODE:Ce,NUMBER_RE:D,PHRASAL_WORDS_MODE:j,QUOTE_STRING_MODE:K,REGEXP_MODE:se,RE_STARTERS_RE:Y,SHEBANG:Z,TITLE_MODE:_e,UNDERSCORE_IDENT_RE:I,UNDERSCORE_TITLE_MODE:Q});function le(u,f){u.input[u.index-1]==="."&&f.ignoreMatch()}function Ee(u,f){u.className!==void 0&&(u.scope=u.className,delete u.className)}function Ne(u,f){f&&u.beginKeywords&&(u.begin="\\b("+u.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",u.__beforeBegin=le,u.keywords=u.keywords||u.beginKeywords,delete u.beginKeywords,u.relevance===void 0&&(u.relevance=0))}function We(u,f){Array.isArray(u.illegal)&&(u.illegal=S(...u.illegal))}function ct(u,f){if(u.match){if(u.begin||u.end)throw new Error("begin & end are not supported with match");u.begin=u.match,delete u.match}}function Ge(u,f){u.relevance===void 0&&(u.relevance=1)}const Ke=(u,f)=>{if(!u.beforeMatch)return;if(u.starts)throw new Error("beforeMatch cannot be used with starts");const v=Object.assign({},u);Object.keys(u).forEach(F=>{delete u[F]}),u.keywords=v.keywords,u.begin=T(v.beforeMatch,p(v.begin)),u.starts={relevance:0,contains:[Object.assign(v,{endsParent:!0})]},u.relevance=0,delete v.beforeMatch},$e=["of","and","for","in","not","or","if","then","parent","list","value"],_t="keyword";function Qe(u,f,v=_t){const F=Object.create(null);return typeof u=="string"?ae(v,u.split(" ")):Array.isArray(u)?ae(v,u):Object.keys(u).forEach(function(re){Object.assign(F,Qe(u[re],f,re))}),F;function ae(re,P){f&&(P=P.map(L=>L.toLowerCase())),P.forEach(function(L){const U=L.split("|");F[U[0]]=[re,Ye(U[0],U[1])]})}}function Ye(u,f){return f?Number(f):dt(u)?0:1}function dt(u){return $e.includes(u.toLowerCase())}const Xe={},ye=u=>{console.error(u)},we=(u,...f)=>{console.log(`WARN: ${u}`,...f)},ge=(u,f)=>{Xe[`${u}/${f}`]||(console.log(`Deprecated as of ${u}. ${f}`),Xe[`${u}/${f}`]=!0)},Ue=new Error;function Ze(u,f,{key:v}){let F=0;const ae=u[v],re={},P={};for(let L=1;L<=f.length;L++)P[L+F]=ae[L],re[L+F]=!0,F+=b(f[L-1]);u[v]=P,u[v]._emit=re,u[v]._multi=!0}function Je(u){if(Array.isArray(u.begin)){if(u.skip||u.excludeBegin||u.returnBegin)throw ye("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Ue;if(typeof u.beginScope!="object"||u.beginScope===null)throw ye("beginScope must be object"),Ue;Ze(u,u.begin,{key:"beginScope"}),u.begin=N(u.begin,{joinWith:""})}}function qe(u){if(Array.isArray(u.end)){if(u.skip||u.excludeEnd||u.returnEnd)throw ye("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Ue;if(typeof u.endScope!="object"||u.endScope===null)throw ye("endScope must be object"),Ue;Ze(u,u.end,{key:"endScope"}),u.end=N(u.end,{joinWith:""})}}function ut(u){u.scope&&typeof u.scope=="object"&&u.scope!==null&&(u.beginScope=u.scope,delete u.scope)}function je(u){ut(u),typeof u.beginScope=="string"&&(u.beginScope={_wrap:u.beginScope}),typeof u.endScope=="string"&&(u.endScope={_wrap:u.endScope}),Je(u),qe(u)}function pt(u){function f(P,L){return new RegExp(d(P),"m"+(u.case_insensitive?"i":"")+(u.unicodeRegex?"u":"")+(L?"g":""))}class v{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(L,U){U.position=this.position++,this.matchIndexes[this.matchAt]=U,this.regexes.push([U,L]),this.matchAt+=b(L)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const L=this.regexes.map(U=>U[1]);this.matcherRe=f(N(L,{joinWith:"|"}),!0),this.lastIndex=0}exec(L){this.matcherRe.lastIndex=this.lastIndex;const U=this.matcherRe.exec(L);if(!U)return null;const de=U.findIndex((Ve,St)=>St>0&&Ve!==void 0),oe=this.matchIndexes[de];return U.splice(0,de),Object.assign(U,oe)}}class F{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(L){if(this.multiRegexes[L])return this.multiRegexes[L];const U=new v;return this.rules.slice(L).forEach(([de,oe])=>U.addRule(de,oe)),U.compile(),this.multiRegexes[L]=U,U}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(L,U){this.rules.push([L,U]),U.type==="begin"&&this.count++}exec(L){const U=this.getMatcher(this.regexIndex);U.lastIndex=this.lastIndex;let de=U.exec(L);if(this.resumingScanAtSamePosition()&&!(de&&de.index===this.lastIndex)){const oe=this.getMatcher(0);oe.lastIndex=this.lastIndex+1,de=oe.exec(L)}return de&&(this.regexIndex+=de.position+1,this.regexIndex===this.count&&this.considerAll()),de}}function ae(P){const L=new F;return P.contains.forEach(U=>L.addRule(U.begin,{rule:U,type:"begin"})),P.terminatorEnd&&L.addRule(P.terminatorEnd,{type:"end"}),P.illegal&&L.addRule(P.illegal,{type:"illegal"}),L}function re(P,L){const U=P;if(P.isCompiled)return U;[Ee,ct,je,Ke].forEach(oe=>oe(P,L)),u.compilerExtensions.forEach(oe=>oe(P,L)),P.__beforeBegin=null,[Ne,We,Ge].forEach(oe=>oe(P,L)),P.isCompiled=!0;let de=null;return typeof P.keywords=="object"&&P.keywords.$pattern&&(P.keywords=Object.assign({},P.keywords),de=P.keywords.$pattern,delete P.keywords.$pattern),de=de||/\w+/,P.keywords&&(P.keywords=Qe(P.keywords,u.case_insensitive)),U.keywordPatternRe=f(de,!0),L&&(P.begin||(P.begin=/\B|\b/),U.beginRe=f(U.begin),!P.end&&!P.endsWithParent&&(P.end=/\B|\b/),P.end&&(U.endRe=f(U.end)),U.terminatorEnd=d(U.end)||"",P.endsWithParent&&L.terminatorEnd&&(U.terminatorEnd+=(P.end?"|":"")+L.terminatorEnd)),P.illegal&&(U.illegalRe=f(P.illegal)),P.contains||(P.contains=[]),P.contains=[].concat(...P.contains.map(function(oe){return mt(oe==="self"?P:oe)})),P.contains.forEach(function(oe){re(oe,U)}),P.starts&&re(P.starts,L),U.matcher=ae(U),U}if(u.compilerExtensions||(u.compilerExtensions=[]),u.contains&&u.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language.  See documentation.");return u.classNameAliases=a(u.classNameAliases||{}),re(u)}function et(u){return u?u.endsWithParent||et(u.starts):!1}function mt(u){return u.variants&&!u.cachedVariants&&(u.cachedVariants=u.variants.map(function(f){return a(u,{variants:null},f)})),u.cachedVariants?u.cachedVariants:et(u)?a(u,{starts:u.starts?a(u.starts):null}):Object.isFrozen(u)?a(u):u}var Et="11.11.1";class gt extends Error{constructor(f,v){super(f),this.name="HTMLInjectionError",this.html=v}}const He=n,tt=a,W=Symbol("nomatch"),Fe=7,Me=function(u){const f=Object.create(null),v=Object.create(null),F=[];let ae=!0;const re="Could not find the language '{}', did you forget to load/include a language module?",P={disableAutodetect:!0,name:"Plain text",contains:[]};let L={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:c};function U(A){return L.noHighlightRe.test(A)}function de(A){let k=A.className+" ";k+=A.parentNode?A.parentNode.className:"";const q=L.languageDetectRe.exec(k);if(q){const X=xe(q[1]);return X||(we(re.replace("{}",q[1])),we("Falling back to no-highlight mode for this block.",A)),X?q[1]:"no-highlight"}return k.split(/\s+/).find(X=>U(X)||xe(X))}function oe(A,k,q){let X="",ce="";typeof k=="object"?(X=A,q=k.ignoreIllegals,ce=k.language):(ge("10.7.0","highlight(lang, code, ...args) has been deprecated."),ge("10.7.0",`Please use highlight(code, options) instead.
https://github.com/highlightjs/highlight.js/issues/2277`),ce=A,X=k),q===void 0&&(q=!0);const Oe={code:X,language:ce};at("before:highlight",Oe);const Pe=Oe.result?Oe.result:Ve(Oe.language,Oe.code,q);return Pe.code=Oe.code,at("after:highlight",Pe),Pe}function Ve(A,k,q,X){const ce=Object.create(null);function Oe(y,x){return y.keywords[x]}function Pe(){if(!B.keywords){ue.addText($);return}let y=0;B.keywordPatternRe.lastIndex=0;let x=B.keywordPatternRe.exec($),G="";for(;x;){G+=$.substring(y,x.index);const V=Ie.case_insensitive?x[0].toLowerCase():x[0],pe=Oe(B,V);if(pe){const[Ae,tc]=pe;if(ue.addText(G),G="",ce[V]=(ce[V]||0)+1,ce[V]<=Fe&&(Be+=tc),Ae.startsWith("_"))G+=x[0];else{const nc=Ie.classNameAliases[Ae]||Ae;ve(x[0],nc)}}else G+=x[0];y=B.keywordPatternRe.lastIndex,x=B.keywordPatternRe.exec($)}G+=$.substring(y),ue.addText(G)}function rt(){if($==="")return;let y=null;if(typeof B.subLanguage=="string"){if(!f[B.subLanguage]){ue.addText($);return}y=Ve(B.subLanguage,$,!0,ft[B.subLanguage]),ft[B.subLanguage]=y._top}else y=Tt($,B.subLanguage.length?B.subLanguage:null);B.relevance>0&&(Be+=y.relevance),ue.__addSublanguage(y._emitter,y.language)}function Re(){B.subLanguage!=null?rt():Pe(),$=""}function ve(y,x){y!==""&&(ue.startScope(x),ue.addText(y),ue.endScope())}function ai(y,x){let G=1;const V=x.length-1;for(;G<=V;){if(!y._emit[G]){G++;continue}const pe=Ie.classNameAliases[y[G]]||y[G],Ae=x[G];pe?ve(Ae,pe):($=Ae,Pe(),$=""),G++}}function ri(y,x){return y.scope&&typeof y.scope=="string"&&ue.openNode(Ie.classNameAliases[y.scope]||y.scope),y.beginScope&&(y.beginScope._wrap?(ve($,Ie.classNameAliases[y.beginScope._wrap]||y.beginScope._wrap),$=""):y.beginScope._multi&&(ai(y.beginScope,x),$="")),B=Object.create(y,{parent:{value:B}}),B}function ii(y,x,G){let V=R(y.endRe,G);if(V){if(y["on:end"]){const pe=new e(y);y["on:end"](x,pe),pe.isMatchIgnored&&(V=!1)}if(V){for(;y.endsParent&&y.parent;)y=y.parent;return y}}if(y.endsWithParent)return ii(y.parent,x,G)}function Zl(y){return B.matcher.regexIndex===0?($+=y[0],1):(lt=!0,0)}function Jl(y){const x=y[0],G=y.rule,V=new e(G),pe=[G.__beforeBegin,G["on:begin"]];for(const Ae of pe)if(Ae&&(Ae(y,V),V.isMatchIgnored))return Zl(x);return G.skip?$+=x:(G.excludeBegin&&($+=x),Re(),!G.returnBegin&&!G.excludeBegin&&($=x)),ri(G,y),G.returnBegin?0:x.length}function jl(y){const x=y[0],G=k.substring(y.index),V=ii(B,y,G);if(!V)return W;const pe=B;B.endScope&&B.endScope._wrap?(Re(),ve(x,B.endScope._wrap)):B.endScope&&B.endScope._multi?(Re(),ai(B.endScope,y)):pe.skip?$+=x:(pe.returnEnd||pe.excludeEnd||($+=x),Re(),pe.excludeEnd&&($=x));do B.scope&&ue.closeNode(),!B.skip&&!B.subLanguage&&(Be+=B.relevance),B=B.parent;while(B!==V.parent);return V.starts&&ri(V.starts,y),pe.returnEnd?0:x.length}function ec(){const y=[];for(let x=B;x!==Ie;x=x.parent)x.scope&&y.unshift(x.scope);y.forEach(x=>ue.openNode(x))}let it={};function Rt(y,x){const G=x&&x[0];if($+=y,G==null)return Re(),0;if(it.type==="begin"&&x.type==="end"&&it.index===x.index&&G===""){if($+=k.slice(x.index,x.index+1),!ae){const V=new Error(`0 width match regex (${A})`);throw V.languageName=A,V.badRule=it.rule,V}return 1}if(it=x,x.type==="begin")return Jl(x);if(x.type==="illegal"&&!q){const V=new Error('Illegal lexeme "'+G+'" for mode "'+(B.scope||"<unnamed>")+'"');throw V.mode=B,V}else if(x.type==="end"){const V=jl(x);if(V!==W)return V}if(x.type==="illegal"&&G==="")return $+=`
`,1;if(st>1e5&&st>x.index*3)throw new Error("potential infinite loop, way more iterations than matches");return $+=G,G.length}const Ie=xe(A);if(!Ie)throw ye(re.replace("{}",A)),new Error('Unknown language: "'+A+'"');const oi=pt(Ie);let ot="",B=X||oi;const ft={},ue=new L.__emitter(L);ec();let $="",Be=0,he=0,st=0,lt=!1;try{if(Ie.__emitTokens)Ie.__emitTokens(k,ue);else{for(B.matcher.considerAll();;){st++,lt?lt=!1:B.matcher.considerAll(),B.matcher.lastIndex=he;const y=B.matcher.exec(k);if(!y)break;const x=k.substring(he,y.index),G=Rt(x,y);he=y.index+G}Rt(k.substring(he))}return ue.finalize(),ot=ue.toHTML(),{language:A,value:ot,relevance:Be,illegal:!1,_emitter:ue,_top:B}}catch(y){if(y.message&&y.message.includes("Illegal"))return{language:A,value:He(k),illegal:!0,relevance:0,_illegalBy:{message:y.message,index:he,context:k.slice(he-100,he+100),mode:y.mode,resultSoFar:ot},_emitter:ue};if(ae)return{language:A,value:He(k),illegal:!1,relevance:0,errorRaised:y,_emitter:ue,_top:B};throw y}}function St(A){const k={value:He(A),illegal:!1,relevance:0,_top:P,_emitter:new L.__emitter(L)};return k._emitter.addText(A),k}function Tt(A,k){k=k||L.languages||Object.keys(f);const q=St(A),X=k.filter(xe).filter(ni).map(Re=>Ve(Re,A,!1));X.unshift(q);const ce=X.sort((Re,ve)=>{if(Re.relevance!==ve.relevance)return ve.relevance-Re.relevance;if(Re.language&&ve.language){if(xe(Re.language).supersetOf===ve.language)return 1;if(xe(ve.language).supersetOf===Re.language)return-1}return 0}),[Oe,Pe]=ce,rt=Oe;return rt.secondBest=Pe,rt}function Gl(A,k,q){const X=k&&v[k]||q;A.classList.add("hljs"),A.classList.add(`language-${X}`)}function bt(A){let k=null;const q=de(A);if(U(q))return;if(at("before:highlightElement",{el:A,language:q}),A.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",A);return}if(A.children.length>0&&(L.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(A)),L.throwUnescapedHTML))throw new gt("One of your code blocks includes unescaped HTML.",A.innerHTML);k=A;const X=k.textContent,ce=q?oe(X,{language:q,ignoreIllegals:!0}):Tt(X);A.innerHTML=ce.value,A.dataset.highlighted="yes",Gl(A,q,ce.language),A.result={language:ce.language,re:ce.relevance,relevance:ce.relevance},ce.secondBest&&(A.secondBest={language:ce.secondBest.language,relevance:ce.secondBest.relevance}),at("after:highlightElement",{el:A,result:ce,text:X})}function Yl(A){L=tt(L,A)}const ql=()=>{nt(),ge("10.6.0","initHighlighting() deprecated.  Use highlightAll() now.")};function Hl(){nt(),ge("10.6.0","initHighlightingOnLoad() deprecated.  Use highlightAll() now.")}let ei=!1;function nt(){function A(){nt()}if(document.readyState==="loading"){ei||window.addEventListener("DOMContentLoaded",A,!1),ei=!0;return}document.querySelectorAll(L.cssSelector).forEach(bt)}function Vl(A,k){let q=null;try{q=k(u)}catch(X){if(ye("Language definition for '{}' could not be registered.".replace("{}",A)),ae)ye(X);else throw X;q=P}q.name||(q.name=A),f[A]=q,q.rawDefinition=k.bind(null,u),q.aliases&&ti(q.aliases,{languageName:A})}function zl(A){delete f[A];for(const k of Object.keys(v))v[k]===A&&delete v[k]}function Wl(){return Object.keys(f)}function xe(A){return A=(A||"").toLowerCase(),f[A]||f[v[A]]}function ti(A,{languageName:k}){typeof A=="string"&&(A=[A]),A.forEach(q=>{v[q.toLowerCase()]=k})}function ni(A){const k=xe(A);return k&&!k.disableAutodetect}function Kl(A){A["before:highlightBlock"]&&!A["before:highlightElement"]&&(A["before:highlightElement"]=k=>{A["before:highlightBlock"](Object.assign({block:k.el},k))}),A["after:highlightBlock"]&&!A["after:highlightElement"]&&(A["after:highlightElement"]=k=>{A["after:highlightBlock"](Object.assign({block:k.el},k))})}function $l(A){Kl(A),F.push(A)}function Ql(A){const k=F.indexOf(A);k!==-1&&F.splice(k,1)}function at(A,k){const q=A;F.forEach(function(X){X[q]&&X[q](k)})}function Xl(A){return ge("10.7.0","highlightBlock will be removed entirely in v12.0"),ge("10.7.0","Please use highlightElement now."),bt(A)}Object.assign(u,{highlight:oe,highlightAuto:Tt,highlightAll:nt,highlightElement:bt,highlightBlock:Xl,configure:Yl,initHighlighting:ql,initHighlightingOnLoad:Hl,registerLanguage:Vl,unregisterLanguage:zl,listLanguages:Wl,getLanguage:xe,registerAliases:ti,autoDetection:ni,inherit:tt,addPlugin:$l,removePlugin:Ql}),u.debugMode=function(){ae=!1},u.safeMode=function(){ae=!0},u.versionString=Et,u.regex={concat:T,lookahead:p,either:S,optional:m,anyNumberOfTimes:E};for(const A in te)typeof te[A]=="object"&&t(te[A]);return Object.assign(u,te),u},Le=Me({});return Le.newInstance=()=>Me({}),ke=Le,Le.HighlightJS=Le,Le.default=Le,ke}var Ct,li;function rc(){if(li)return Ct;li=1;function t(e){const n="[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+",i="далее "+"возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ",_="загрузитьизфайла "+"вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ",E="разделительстраниц разделительстрок символтабуляции "+"ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон "+"acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища "+"wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ",fe="webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля "+"автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени форматкартинки ширинаподчиненныхэлементовформы "+"виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента "+"авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных "+"использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц "+"отображениевремениэлементовпланировщика "+"типфайлаформатированногодокумента "+"обходрезультатазапроса типзаписизапроса "+"видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов "+"доступкфайлу режимдиалогавыборафайла режимоткрытияфайла "+"типизмеренияпостроителязапроса "+"видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений "+"wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs форматдатыjson экранированиесимволовjson "+"видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных использованиеусловногооформлениякомпоновкиданных "+"важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты статусразборапочтовогосообщения "+"режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации "+"расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии типхранилищасертификатовкриптографии "+"кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip режимсохраненияпутейzip уровеньсжатияzip "+"звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp "+"направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса "+"httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса типномерадокумента типномеразадачи типформы удалениедвижений "+"важностьпроблемыприменениярасширения
Download .txt
gitextract_hvnf3hrt/

├── .codespellrc
├── .github/
│   ├── CONTRIBUTING.md
│   ├── FUNDING.yml
│   └── workflows/
│       ├── spellcheck.yml
│       └── test.yml
├── .gitignore
├── .prettierignore
├── .prettierrc
├── LICENSE
├── README.md
├── css/
│   ├── layout.scss
│   ├── print/
│   │   ├── paper.scss
│   │   └── pdf.scss
│   ├── reset.css
│   ├── reveal.scss
│   └── theme/
│       ├── README.md
│       ├── beige.scss
│       ├── black-contrast.scss
│       ├── black.scss
│       ├── blood.scss
│       ├── dracula.scss
│       ├── fonts/
│       │   ├── league-gothic/
│       │   │   ├── LICENSE
│       │   │   └── league-gothic.css
│       │   └── source-sans-pro/
│       │       ├── LICENSE
│       │       └── source-sans-pro.css
│       ├── league.scss
│       ├── moon.scss
│       ├── night.scss
│       ├── serif.scss
│       ├── simple.scss
│       ├── sky.scss
│       ├── solarized.scss
│       ├── template/
│       │   ├── mixins.scss
│       │   ├── settings.scss
│       │   └── theme.scss
│       ├── white-contrast.scss
│       └── white.scss
├── demo.html
├── dist/
│   ├── config.d.ts
│   ├── plugin/
│   │   ├── highlight/
│   │   │   ├── monokai.css
│   │   │   └── zenburn.css
│   │   ├── highlight.d.ts
│   │   ├── highlight.js
│   │   ├── highlight.mjs
│   │   ├── markdown.d.ts
│   │   ├── markdown.js
│   │   ├── markdown.mjs
│   │   ├── math.d.ts
│   │   ├── math.js
│   │   ├── math.mjs
│   │   ├── notes.d.ts
│   │   ├── notes.js
│   │   ├── notes.mjs
│   │   ├── search.d.ts
│   │   ├── search.js
│   │   ├── search.mjs
│   │   ├── zoom.d.ts
│   │   ├── zoom.js
│   │   └── zoom.mjs
│   ├── reset.css
│   ├── reveal.css
│   ├── reveal.d.ts
│   ├── reveal.js
│   ├── reveal.mjs
│   ├── theme/
│   │   ├── beige.css
│   │   ├── black-contrast.css
│   │   ├── black.css
│   │   ├── blood.css
│   │   ├── dracula.css
│   │   ├── league.css
│   │   ├── moon.css
│   │   ├── night.css
│   │   ├── serif.css
│   │   ├── simple.css
│   │   ├── sky.css
│   │   ├── solarized.css
│   │   ├── white-contrast.css
│   │   └── white.css
│   └── utils/
│       ├── color.d.ts
│       ├── constants.d.ts
│       ├── device.d.ts
│       ├── loader.d.ts
│       └── util.d.ts
├── examples/
│   ├── 500-slides.html
│   ├── assets/
│   │   └── beeping.txt
│   ├── auto-animate.html
│   ├── backgrounds.html
│   ├── barebones.html
│   ├── layout-helpers.html
│   ├── lightbox.html
│   ├── markdown.html
│   ├── markdown.md
│   ├── math.html
│   ├── media.html
│   ├── multiple-presentations.html
│   ├── scroll.html
│   └── transitions.html
├── index.html
├── js/
│   ├── components/
│   │   └── playback.js
│   ├── config.ts
│   ├── controllers/
│   │   ├── autoanimate.js
│   │   ├── backgrounds.js
│   │   ├── controls.js
│   │   ├── focus.js
│   │   ├── fragments.js
│   │   ├── jumptoslide.js
│   │   ├── keyboard.js
│   │   ├── location.js
│   │   ├── notes.js
│   │   ├── overlay.js
│   │   ├── overview.js
│   │   ├── plugins.js
│   │   ├── pointer.js
│   │   ├── printview.js
│   │   ├── progress.js
│   │   ├── scrollview.js
│   │   ├── slidecontent.js
│   │   ├── slidenumber.js
│   │   └── touch.js
│   ├── index.ts
│   ├── reveal.d.ts
│   ├── reveal.js
│   └── utils/
│       ├── color.ts
│       ├── constants.ts
│       ├── device.ts
│       ├── loader.ts
│       └── util.ts
├── package.json
├── plugin/
│   ├── highlight/
│   │   ├── index.ts
│   │   ├── plugin.js
│   │   └── vite.config.ts
│   ├── markdown/
│   │   ├── index.ts
│   │   ├── plugin.js
│   │   └── vite.config.ts
│   ├── math/
│   │   ├── index.ts
│   │   ├── katex.js
│   │   ├── mathjax2.js
│   │   ├── mathjax3.js
│   │   ├── mathjax4.js
│   │   ├── plugin.js
│   │   └── vite.config.ts
│   ├── notes/
│   │   ├── index.ts
│   │   ├── plugin.js
│   │   ├── speaker-view.html
│   │   └── vite.config.ts
│   ├── search/
│   │   ├── index.ts
│   │   ├── plugin.js
│   │   └── vite.config.ts
│   ├── vite-plugin-dts.ts
│   └── zoom/
│       ├── index.ts
│       ├── plugin.js
│       └── vite.config.ts
├── public/
│   └── plugin/
│       └── highlight/
│           ├── monokai.css
│           └── zenburn.css
├── react/
│   ├── AGENTS.md
│   ├── README.md
│   ├── demo/
│   │   ├── index.html
│   │   ├── package.json
│   │   ├── public/
│   │   │   └── markdown.md
│   │   ├── src/
│   │   │   ├── demo-app.tsx
│   │   │   └── main.tsx
│   │   ├── tsconfig.json
│   │   └── vite.config.ts
│   ├── package.json
│   ├── src/
│   │   ├── __tests__/
│   │   │   └── setup.ts
│   │   ├── components/
│   │   │   ├── code.test.tsx
│   │   │   ├── code.tsx
│   │   │   ├── deck.test.tsx
│   │   │   ├── deck.tsx
│   │   │   ├── fragment.test.tsx
│   │   │   ├── fragment.tsx
│   │   │   ├── markdown.test.tsx
│   │   │   ├── markdown.tsx
│   │   │   ├── slide.test.tsx
│   │   │   ├── slide.tsx
│   │   │   ├── stack.test.tsx
│   │   │   └── stack.tsx
│   │   ├── index.ts
│   │   ├── reveal-context.ts
│   │   ├── types.ts
│   │   └── utils/
│   │       ├── markdown.ts
│   │       └── slide-attributes.ts
│   ├── tsconfig.json
│   ├── vite.config.ts
│   └── vitest.config.ts
├── scripts/
│   ├── add-banner.js
│   ├── banner.js
│   ├── build-es5.js
│   ├── test.js
│   └── zip.js
├── test/
│   ├── assets/
│   │   ├── external-script-a.js
│   │   ├── external-script-b.js
│   │   ├── external-script-c.js
│   │   └── external-script-d.js
│   ├── simple.md
│   ├── test-auto-animate.html
│   ├── test-dependencies-async.html
│   ├── test-dependencies.html
│   ├── test-destroy.html
│   ├── test-grid-navigation.html
│   ├── test-iframe-backgrounds.html
│   ├── test-iframes.html
│   ├── test-markdown.html
│   ├── test-mathjax4.html
│   ├── test-multiple-instances-es5.html
│   ├── test-multiple-instances.html
│   ├── test-pdf.html
│   ├── test-plugins.html
│   ├── test-scroll.html
│   ├── test-state.html
│   ├── test.html
│   └── types/
│       └── plugin-imports.ts
├── tsconfig.json
├── tsconfig.node.json
├── vite.config.styles.ts
└── vite.config.ts
Download .txt
SYMBOL INDEX (1939 symbols across 80 files)

FILE: dist/config.d.ts
  type TransitionStyle (line 6) | type TransitionStyle = 'none' | 'fade' | 'slide' | 'convex' | 'concave' ...
  type TransitionSpeed (line 12) | type TransitionSpeed = 'default' | 'fast' | 'slow';
  type FragmentAnimation (line 18) | type FragmentAnimation = 'fade-out' | 'fade-up' | 'fade-down' | 'fade-le...
  type KatexConfig (line 25) | interface KatexConfig {
  type Mathjax2Config (line 41) | interface Mathjax2Config {
  type Mathjax3Config (line 55) | interface Mathjax3Config {
  type Mathjax4Config (line 70) | interface Mathjax4Config {
  type HighlightConfig (line 99) | interface HighlightConfig {
  type MarkdownConfig (line 110) | interface MarkdownConfig {
  type RevealConfig (line 140) | interface RevealConfig {

FILE: dist/plugin/highlight.d.ts
  type HighlightLine (line 3) | interface HighlightLine {
  type HighlightLineNumbersOptions (line 7) | interface HighlightLineNumbersOptions {
  type HighlightJsApi (line 11) | interface HighlightJsApi extends HLJSApi {
  type HighlightScrollState (line 16) | interface HighlightScrollState {
  type HighlightLineBounds (line 20) | interface HighlightLineBounds {
  type HighlightLineStep (line 24) | type HighlightLineStep = HighlightLine[];
  type HighlightPlugin (line 25) | interface HighlightPlugin extends RevealPlugin {

FILE: dist/plugin/highlight.js
  function ze (line 1) | function ze(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.c...
  function ac (line 1) | function ac(){if(si)return ke;si=1;function t(u){return u instanceof Map...
  function rc (line 3) | function rc(){if(li)return Ct;li=1;function t(e){const n="[A-Za-zА-Яа-яё...
  function ic (line 3) | function ic(){if(ci)return Nt;ci=1;function t(e){const n=e.regex,a=/^[a-...
  function oc (line 3) | function oc(){if(_i)return Ot;_i=1;function t(e){const n=e.regex,a=["GET...
  function sc (line 3) | function sc(){if(di)return It;di=1;function t(e){const n=e.regex,a=/[a-z...
  function lc (line 3) | function lc(){if(ui)return At;ui=1;function t(e){const n="\\d(_|\\d)*",a...
  function cc (line 3) | function cc(){if(pi)return vt;pi=1;function t(e){const n={className:"bui...
  function _c (line 3) | function _c(){if(mi)return yt;mi=1;function t(e){const n={className:"num...
  function dc (line 3) | function dc(){if(Ei)return ht;Ei=1;function t(e){const n=e.regex,a=e.inh...
  function uc (line 3) | function uc(){if(gi)return Dt;gi=1;function t(e){const n=e.regex,a="[A-Z...
  function pc (line 3) | function pc(){if(Si)return Mt;Si=1;function t(n){const a=n.regex,r=n.COM...
  function mc (line 3) | function mc(){if(Ti)return Lt;Ti=1;function t(e){const n={variants:[e.CO...
  function Ec (line 3) | function Ec(){if(bi)return xt;bi=1;function t(e){const n=e.regex,a=n.con...
  function gc (line 3) | function gc(){if(Ri)return Pt;Ri=1;function t(e){const n=e.regex,a={begi...
  function Sc (line 3) | function Sc(){if(fi)return wt;fi=1;function t(e){const n=e.regex,a=["fal...
  function Tc (line 3) | function Tc(){if(Ci)return kt;Ci=1;function t(e){const n={begin:"`[\\s\\...
  function bc (line 3) | function bc(){if(Ni)return Ut;Ni=1;function t(e){const n="ByRef Case Con...
  function Rc (line 3) | function Rc(){if(Oi)return Ft;Oi=1;function t(e){return{name:"AVR Assemb...
  function fc (line 3) | function fc(){if(Ii)return Bt;Ii=1;function t(e){const n={className:"var...
  function Cc (line 3) | function Cc(){if(Ai)return Gt;Ai=1;function t(e){const n=e.UNDERSCORE_ID...
  function Nc (line 3) | function Nc(){if(vi)return Yt;vi=1;function t(e){const n=e.regex,a={},r=...
  function Oc (line 3) | function Oc(){if(yi)return qt;yi=1;function t(e){return{name:"BASIC",cas...
  function Ic (line 3) | function Ic(){if(hi)return Ht;hi=1;function t(e){return{name:"Backus–Nau...
  function Ac (line 3) | function Ac(){if(Di)return Vt;Di=1;function t(e){const n={className:"lit...
  function vc (line 3) | function vc(){if(Mi)return zt;Mi=1;function t(e){const n=e.regex,a=e.COM...
  function yc (line 3) | function yc(){if(Li)return Wt;Li=1;function t(e){const n=e.regex,a=["div...
  function hc (line 3) | function hc(){if(xi)return Kt;xi=1;function t(e){const n=["struct","enum...
  function Dc (line 3) | function Dc(){if(Pi)return $t;Pi=1;function t(e){const n=["assembly","mo...
  function Mc (line 3) | function Mc(){if(wi)return Qt;wi=1;function t(e){return{name:"Clean",ali...
  function Lc (line 3) | function Lc(){if(ki)return Xt;ki=1;function t(e){const n="a-zA-Z_\\-!.?+...
  function xc (line 3) | function xc(){if(Ui)return Zt;Ui=1;function t(e){return{name:"Clojure RE...
  function Pc (line 3) | function Pc(){if(Fi)return Jt;Fi=1;function t(e){return{name:"CMake",ali...
  function wc (line 3) | function wc(){if(Bi)return jt;Bi=1;const t=["as","in","of","if","for","w...
  function kc (line 3) | function kc(){if(Gi)return en;Gi=1;function t(e){return{name:"Coq",keywo...
  function Uc (line 3) | function Uc(){if(Yi)return tn;Yi=1;function t(e){return{name:"Caché Obje...
  function Fc (line 3) | function Fc(){if(qi)return nn;qi=1;function t(e){const n=e.regex,a=e.COM...
  function Bc (line 3) | function Bc(){if(Hi)return an;Hi=1;function t(e){const n="primitive rsc_...
  function Gc (line 3) | function Gc(){if(Vi)return rn;Vi=1;function t(e){const n="(_?[ui](8|16|3...
  function Yc (line 3) | function Yc(){if(zi)return on;zi=1;function t(e){const n=["bool","byte",...
  function qc (line 3) | function qc(){if(Wi)return sn;Wi=1;function t(e){return{name:"CSP",case_...
  function Hc (line 3) | function Hc(){if(Ki)return ln;Ki=1;const t=l=>({IMPORTANT:{scope:"meta",...
  function Vc (line 3) | function Vc(){if($i)return cn;$i=1;function t(e){const n={$pattern:e.UND...
  function zc (line 3) | function zc(){if(Qi)return _n;Qi=1;function t(e){const n=e.regex,a={begi...
  function Wc (line 3) | function Wc(){if(Xi)return dn;Xi=1;function t(e){const n={className:"sub...
  function Kc (line 3) | function Kc(){if(Zi)return un;Zi=1;function t(e){const n=["exports","reg...
  function $c (line 3) | function $c(){if(Ji)return pn;Ji=1;function t(e){const n=e.regex;return{...
  function Qc (line 3) | function Qc(){if(ji)return mn;ji=1;function t(e){const n={begin:/\|[A-Za...
  function Xc (line 3) | function Xc(){if(eo)return En;eo=1;function t(e){return{name:"DNS Zone",...
  function Zc (line 3) | function Zc(){if(to)return gn;to=1;function t(e){return{name:"Dockerfile...
  function Jc (line 3) | function Jc(){if(no)return Sn;no=1;function t(e){const n=e.COMMENT(/^\s*...
  function jc (line 3) | function jc(){if(ao)return Tn;ao=1;function t(e){return{keywords:"dsconf...
  function e_ (line 3) | function e_(){if(ro)return bn;ro=1;function t(e){const n={className:"str...
  function t_ (line 3) | function t_(){if(io)return Rn;io=1;function t(e){return{name:"Dust",alia...
  function n_ (line 3) | function n_(){if(oo)return fn;oo=1;function t(e){const n=e.COMMENT(/\(\*...
  function a_ (line 3) | function a_(){if(so)return Cn;so=1;function t(e){const n=e.regex,a="[a-z...
  function r_ (line 3) | function r_(){if(lo)return Nn;lo=1;function t(e){const n={variants:[e.CO...
  function i_ (line 3) | function i_(){if(co)return On;co=1;function t(e){const n=e.regex,a="([a-...
  function o_ (line 3) | function o_(){if(_o)return In;_o=1;function t(e){return{name:"ERB",subLa...
  function s_ (line 3) | function s_(){if(uo)return An;uo=1;function t(e){const n=e.regex;return{...
  function l_ (line 3) | function l_(){if(po)return vn;po=1;function t(e){const n="[a-z'][a-zA-Z0...
  function c_ (line 3) | function c_(){if(mo)return yn;mo=1;function t(e){return{name:"Excel form...
  function __ (line 3) | function __(){if(Eo)return hn;Eo=1;function t(e){return{name:"FIX",conta...
  function d_ (line 3) | function d_(){if(go)return Dn;go=1;function t(e){const n={className:"str...
  function u_ (line 3) | function u_(){if(So)return Mn;So=1;function t(e){const n=e.regex,a={clas...
  function p_ (line 3) | function p_(){if(To)return Ln;To=1;function t(o){return new RegExp(o.rep...
  function m_ (line 3) | function m_(){if(bo)return xn;bo=1;function t(e){const n=e.regex,a={keyw...
  function E_ (line 3) | function E_(){if(Ro)return Pn;Ro=1;function t(e){const n={keyword:"bool ...
  function g_ (line 3) | function g_(){if(fo)return wn;fo=1;function t(e){const n=e.regex,a={$pat...
  function S_ (line 3) | function S_(){if(Co)return kn;Co=1;function t(e){return{name:"Gherkin",a...
  function T_ (line 3) | function T_(){if(No)return Un;No=1;function t(e){return{name:"GLSL",keyw...
  function b_ (line 3) | function b_(){if(Oo)return Fn;Oo=1;function t(e){return{name:"GML",case_...
  function R_ (line 3) | function R_(){if(Io)return Bn;Io=1;function t(e){const s={keyword:["brea...
  function f_ (line 3) | function f_(){if(Ao)return Gn;Ao=1;function t(e){return{name:"Golo",keyw...
  function C_ (line 3) | function C_(){if(vo)return Yn;vo=1;function t(e){return{name:"Gradle",ca...
  function N_ (line 3) | function N_(){if(yo)return qn;yo=1;function t(e){const n=e.regex,a=/[_A-...
  function O_ (line 3) | function O_(){if(ho)return Hn;ho=1;function t(n,a={}){return a.variants=...
  function I_ (line 3) | function I_(){if(Do)return Vn;Do=1;function t(e){return{name:"HAML",case...
  function A_ (line 3) | function A_(){if(Mo)return zn;Mo=1;function t(e){const n=e.regex,a={$pat...
  function v_ (line 3) | function v_(){if(Lo)return Wn;Lo=1;function t(e){const n="([0-9]_*)+",a=...
  function y_ (line 3) | function y_(){if(xo)return Kn;xo=1;function t(e){const n="[a-zA-Z_$][a-z...
  function h_ (line 3) | function h_(){if(Po)return $n;Po=1;function t(e){return{name:"HSP",case_...
  function D_ (line 3) | function D_(){if(wo)return Qn;wo=1;function t(e){const n=e.regex,a="HTTP...
  function M_ (line 3) | function M_(){if(ko)return Xn;ko=1;function t(e){const n="a-zA-Z_\\-!.?+...
  function L_ (line 3) | function L_(){if(Uo)return Zn;Uo=1;function t(e){return{name:"Inform 7",...
  function x_ (line 3) | function x_(){if(Fo)return Jn;Fo=1;function t(e){const n=e.regex,a={clas...
  function P_ (line 3) | function P_(){if(Bo)return jn;Bo=1;function t(e){const n=e.regex,a={clas...
  function w_ (line 3) | function w_(){if(Go)return ea;Go=1;function t(e){const n="[A-Za-zА-Яа-яё...
  function k_ (line 3) | function k_(){if(Yo)return ta;Yo=1;var t="[0-9](_*[0-9])*",e=`\\.(${t})`...
  function U_ (line 3) | function U_(){if(qo)return na;qo=1;const t="[A-Za-z$_][0-9A-Za-z$_]*",e=...
  function F_ (line 3) | function F_(){if(Ho)return aa;Ho=1;function t(e){const a={className:"par...
  function B_ (line 3) | function B_(){if(Vo)return ra;Vo=1;function t(e){const n={className:"att...
  function G_ (line 3) | function G_(){if(zo)return ia;zo=1;function t(e){const n="[A-Za-z_\\u00A...
  function Y_ (line 3) | function Y_(){if(Wo)return oa;Wo=1;function t(e){return{name:"Julia REPL...
  function q_ (line 3) | function q_(){if(Ko)return sa;Ko=1;var t="[0-9](_*[0-9])*",e=`\\.(${t})`...
  function H_ (line 4) | function H_(){if($o)return la;$o=1;function t(e){const n="[a-zA-Z_][\\w....
  function V_ (line 4) | function V_(){if(Qo)return ca;Qo=1;function t(e){const a=e.regex.either(...
  function z_ (line 4) | function z_(){if(Xo)return _a;Xo=1;function t(e){return{name:"LDIF",cont...
  function W_ (line 4) | function W_(){if(Zo)return da;Zo=1;function t(e){const n=/([A-Za-z_][A-Z...
  function K_ (line 4) | function K_(){if(Jo)return ua;Jo=1;const t=c=>({IMPORTANT:{scope:"meta",...
  function $_ (line 4) | function $_(){if(jo)return pa;jo=1;function t(e){const n="[a-zA-Z_\\-+\\...
  function Q_ (line 4) | function Q_(){if(es)return ma;es=1;function t(e){const n={className:"var...
  function X_ (line 4) | function X_(){if(ts)return Ea;ts=1;const t=["as","in","of","if","for","w...
  function Z_ (line 4) | function Z_(){if(ns)return ga;ns=1;function t(e){const n=e.regex,a=/([-a...
  function J_ (line 4) | function J_(){if(as)return Sa;as=1;function t(e){const a={className:"str...
  function j_ (line 4) | function j_(){if(rs)return Ta;rs=1;function t(e){const n="\\[=*\\[",a="\...
  function ed (line 4) | function ed(){if(is)return ba;is=1;function t(e){const n={className:"var...
  function td (line 4) | function td(){if(os)return Ra;os=1;const t=["AASTriangle","AbelianGroup"...
  function nd (line 4) | function nd(){if(ss)return fa;ss=1;function t(e){const n="('|\\.')+",a={...
  function ad (line 4) | function ad(){if(ls)return Ca;ls=1;function t(e){return{name:"Maxima",ke...
  function rd (line 4) | function rd(){if(cs)return Na;cs=1;function t(e){return{name:"MEL",keywo...
  function id (line 4) | function id(){if(_s)return Oa;_s=1;function t(e){const n={keyword:"modul...
  function od (line 4) | function od(){if(ds)return Ia;ds=1;function t(e){return{name:"MIPS Assem...
  function sd (line 4) | function sd(){if(us)return Aa;us=1;function t(e){return{name:"Mizar",key...
  function ld (line 4) | function ld(){if(ps)return va;ps=1;function t(e){const n=e.regex,a=["abs...
  function cd (line 4) | function cd(){if(ms)return ya;ms=1;function t(e){return{name:"Mojoliciou...
  function _d (line 4) | function _d(){if(Es)return ha;Es=1;function t(e){const n={className:"num...
  function dd (line 4) | function dd(){if(gs)return Da;gs=1;function t(e){const n={keyword:"if th...
  function ud (line 4) | function ud(){if(Ss)return Ma;Ss=1;function t(e){return{name:"N1QL",case...
  function pd (line 4) | function pd(){if(Ts)return La;Ts=1;function t(e){const n={match:[/^\s*(?...
  function md (line 4) | function md(){if(bs)return xa;bs=1;function t(e){const n=e.regex,a={clas...
  function Ed (line 4) | function Ed(){if(Rs)return Pa;Rs=1;function t(e){return{name:"Nim",keywo...
  function gd (line 4) | function gd(){if(fs)return wa;fs=1;function t(e){const n=e.regex,a={keyw...
  function Sd (line 4) | function Sd(){if(Cs)return ka;Cs=1;function t(e){return{name:"Node REPL"...
  function Td (line 4) | function Td(){if(Ns)return Ua;Ns=1;function t(e){const n=e.regex,a=["ADM...
  function bd (line 4) | function bd(){if(Os)return Fa;Os=1;function t(e){const n={className:"bui...
  function Rd (line 4) | function Rd(){if(Is)return Ba;Is=1;function t(e){return{name:"OCaml",ali...
  function fd (line 4) | function fd(){if(As)return Ga;As=1;function t(e){const n={className:"key...
  function Cd (line 4) | function Cd(){if(vs)return Ya;vs=1;function t(e){const n={$pattern:/\.?\...
  function Nd (line 4) | function Nd(){if(ys)return qa;ys=1;function t(e){const n=e.COMMENT(/\{/,...
  function Od (line 4) | function Od(){if(hs)return Ha;hs=1;function t(e){const n={className:"var...
  function Id (line 4) | function Id(){if(Ds)return Va;Ds=1;function t(e){const n=e.COMMENT("--",...
  function Ad (line 4) | function Ad(){if(Ms)return za;Ms=1;function t(e){const n=e.regex,a=/(?![...
  function vd (line 5) | function vd(){if(Ls)return Wa;Ls=1;function t(e){return{name:"PHP templa...
  function yd (line 5) | function yd(){if(xs)return Ka;xs=1;function t(e){return{name:"Plain text...
  function hd (line 5) | function hd(){if(Ps)return $a;Ps=1;function t(e){const n={keyword:"actor...
  function Dd (line 5) | function Dd(){if(ws)return Qa;ws=1;function t(e){const n=["string","char...
  function Md (line 5) | function Md(){if(ks)return Xa;ks=1;function t(e){const n=e.regex,a=["dis...
  function Ld (line 5) | function Ld(){if(Us)return Za;Us=1;function t(e){return{name:"Python pro...
  function xd (line 5) | function xd(){if(Fs)return Ja;Fs=1;function t(e){const n={begin:/[a-z][A...
  function Pd (line 5) | function Pd(){if(Bs)return ja;Bs=1;function t(e){const n="[ \\t\\f]*",a=...
  function wd (line 5) | function wd(){if(Gs)return er;Gs=1;function t(e){const n=["package","imp...
  function kd (line 5) | function kd(){if(Ys)return tr;Ys=1;function t(e){const n={keyword:"and c...
  function Ud (line 5) | function Ud(){if(qs)return nr;qs=1;function t(e){const n={className:"str...
  function Fd (line 5) | function Fd(){if(Hs)return ar;Hs=1;function t(e){const n=e.regex,a=new R...
  function Bd (line 5) | function Bd(){if(Vs)return rr;Vs=1;function t(e){return{aliases:["pycon"...
  function Gd (line 5) | function Gd(){if(zs)return ir;zs=1;function t(e){return{name:"Q",aliases...
  function Yd (line 5) | function Yd(){if(Ws)return or;Ws=1;function t(e){const n=e.regex,a={keyw...
  function qd (line 5) | function qd(){if(Ks)return sr;Ks=1;function t(e){const n=e.regex,a=/(?:(...
  function Hd (line 5) | function Hd(){if($s)return lr;$s=1;function t(e){return{name:"ReasonML",...
  function Vd (line 5) | function Vd(){if(Qs)return cr;Qs=1;function t(e){return{name:"RenderMan ...
  function zd (line 5) | function zd(){if(Xs)return _r;Xs=1;function t(e){const n="[a-zA-Z-_][^\\...
  function Wd (line 5) | function Wd(){if(Zs)return dr;Zs=1;function t(e){const n="foreach do whi...
  function Kd (line 5) | function Kd(){if(Js)return ur;Js=1;function t(e){const n=["abs","acos","...
  function $d (line 5) | function $d(){if(js)return pr;js=1;function t(e){return{name:"Oracle Rul...
  function Qd (line 5) | function Qd(){if(el)return mr;el=1;function t(e){const n=e.regex,a=/(r#)...
  function Xd (line 5) | function Xd(){if(tl)return Er;tl=1;function t(e){const n=e.regex,a=["do"...
  function Zd (line 5) | function Zd(){if(nl)return gr;nl=1;function t(e){const n=e.regex,a={clas...
  function Jd (line 5) | function Jd(){if(al)return Sr;al=1;function t(e){const n="[^\\(\\)\\[\\]...
  function jd (line 5) | function jd(){if(rl)return Tr;rl=1;function t(e){const n=[e.C_NUMBER_MOD...
  function eu (line 5) | function eu(){if(il)return br;il=1;const t=l=>({IMPORTANT:{scope:"meta",...
  function tu (line 5) | function tu(){if(ol)return Rr;ol=1;function t(e){return{name:"Shell Sess...
  function nu (line 5) | function nu(){if(sl)return fr;sl=1;function t(e){const n=["add","and","c...
  function au (line 6) | function au(){if(ll)return Cr;ll=1;function t(e){const n="[a-z][a-zA-Z0-...
  function ru (line 6) | function ru(){if(cl)return Nr;cl=1;function t(e){return{name:"SML (Stand...
  function iu (line 6) | function iu(){if(_l)return Or;_l=1;function t(e){const n={className:"var...
  function ou (line 6) | function ou(){if(dl)return Ir;dl=1;function t(e){const n=e.regex,a=e.COM...
  function su (line 6) | function su(){if(ul)return Ar;ul=1;function t(e){const n=e.regex,a=["fun...
  function lu (line 6) | function lu(){if(pl)return vr;pl=1;function t(e){return{name:"Stata",ali...
  function cu (line 8) | function cu(){if(ml)return yr;ml=1;function t(e){return{name:"STEP Part ...
  function _u (line 8) | function _u(){if(El)return hr;El=1;const t=l=>({IMPORTANT:{scope:"meta",...
  function du (line 8) | function du(){if(gl)return Dr;gl=1;function t(e){return{name:"SubUnit",c...
  function uu (line 10) | function uu(){if(Sl)return Mr;Sl=1;function t(I){return I?typeof I=="str...
  function pu (line 10) | function pu(){if(Tl)return Lr;Tl=1;function t(e){return{name:"Tagger Scr...
  function mu (line 10) | function mu(){if(bl)return xr;bl=1;function t(e){const n="true false yes...
  function Eu (line 10) | function Eu(){if(Rl)return Pr;Rl=1;function t(e){return{name:"Test Anyth...
  function gu (line 10) | function gu(){if(fl)return wr;fl=1;function t(e){const n=e.regex,a=/[a-z...
  function Su (line 10) | function Su(){if(Cl)return kr;Cl=1;function t(e){const n=["bool","byte",...
  function Tu (line 10) | function Tu(){if(Nl)return Ur;Nl=1;function t(e){const n={className:"num...
  function bu (line 10) | function bu(){if(Ol)return Fr;Ol=1;function t(e){const n=e.regex,a=["abs...
  function Ru (line 10) | function Ru(){if(Il)return Br;Il=1;const t="[A-Za-z$_][0-9A-Za-z$_]*",e=...
  function fu (line 10) | function fu(){if(Al)return Gr;Al=1;function t(e){return{name:"Vala",keyw...
  function Cu (line 10) | function Cu(){if(vl)return Yr;vl=1;function t(e){const n=e.regex,a={clas...
  function Nu (line 10) | function Nu(){if(yl)return qr;yl=1;function t(e){const n=e.regex,a=["lca...
  function Ou (line 10) | function Ou(){if(hl)return Hr;hl=1;function t(e){return{name:"VBScript i...
  function Iu (line 10) | function Iu(){if(Dl)return Vr;Dl=1;function t(e){const n=e.regex,a={$pat...
  function Au (line 10) | function Au(){if(Ml)return zr;Ml=1;function t(e){const n="\\d(_|\\d)*",a...
  function vu (line 10) | function vu(){if(Ll)return Wr;Ll=1;function t(e){return{name:"Vim Script...
  function yu (line 10) | function yu(){if(xl)return Kr;xl=1;function t(e){e.regex;const n=e.COMME...
  function hu (line 10) | function hu(){if(Pl)return $r;Pl=1;function t(e){const n=e.regex,a=/[a-z...
  function Du (line 10) | function Du(){if(wl)return Qr;wl=1;function t(e){return{name:"Intel x86 ...
  function Mu (line 10) | function Mu(){if(kl)return Xr;kl=1;function t(e){const n=["if","then","e...
  function Lu (line 10) | function Lu(){if(Ul)return Zr;Ul=1;function t(e){return{name:"XQuery",al...
  function xu (line 10) | function xu(){if(Fl)return Jr;Fl=1;function t(e){const n={className:"str...
  function Pu (line 10) | function Pu(){if(Bl)return jr;Bl=1;var t=ac();return t.registerLanguage(...
  function c (line 10) | function c(S){for(var b=S.toString(),R=S.anchorNode;R.nodeName!=="TD";)R...
  function d (line 12) | function d(S){try{var b=e.querySelectorAll("code.hljs,code.nohighlight")...
  function p (line 12) | function p(S,b){typeof S=="object"&&(S.innerHTML=E(S,b))}
  function E (line 12) | function E(S,b){var R,O,N=(R=S,{singleLine:(function(C){return!!C.single...
  function m (line 12) | function m(S){var b=S.className;if(/hljs-/.test(b)){for(var R=T(S.innerH...
  function T (line 13) | function T(S){return S.length===0?[]:S.split(l)}
  function g (line 13) | function g(S,b){return S.replace(/\{(\d+)\}/g,function(R,O){return b[O]!...
  function ku (line 13) | function ku(t){function e(a){return a.replace(/^[\s\uFEFF\xA0]+/g,"")}fu...

FILE: dist/plugin/highlight.mjs
  function nc (line 1) | function nc(t) {
  function ac (line 5) | function ac() {
  function rc (line 1065) | function rc() {
  function ic (line 1171) | function ic() {
  function oc (line 1231) | function oc() {
  function sc (line 1315) | function sc() {
  function lc (line 1455) | function lc() {
  function cc (line 1671) | function cc() {
  function _c (line 1836) | function _c() {
  function dc (line 1931) | function dc() {
  function uc (line 2049) | function uc() {
  function pc (line 2468) | function pc() {
  function mc (line 3373) | function mc() {
  function Ec (line 3465) | function Ec() {
  function gc (line 3687) | function gc() {
  function Sc (line 3933) | function Sc() {
  function Tc (line 4155) | function Tc() {
  function bc (line 4226) | function bc() {
  function Rc (line 4374) | function Rc() {
  function fc (line 4436) | function fc() {
  function Cc (line 4497) | function Cc() {
  function Nc (line 4670) | function Nc() {
  function Oc (line 5050) | function Oc() {
  function Ic (line 5279) | function Ic() {
  function Ac (line 5314) | function Ac() {
  function vc (line 5365) | function vc() {
  function yc (line 5645) | function yc() {
  function hc (line 5786) | function hc() {
  function Dc (line 5877) | function Dc() {
  function Mc (line 6004) | function Mc() {
  function Lc (line 6066) | function Lc() {
  function xc (line 6204) | function xc() {
  function Pc (line 6225) | function Pc() {
  function wc (line 6253) | function wc() {
  function kc (line 6591) | function kc() {
  function Uc (line 7032) | function Uc() {
  function Fc (line 7124) | function Fc() {
  function Bc (line 7648) | function Bc() {
  function Gc (line 7732) | function Gc() {
  function Yc (line 8018) | function Yc() {
  function qc (line 8403) | function qc() {
  function Hc (line 8453) | function Hc() {
  function Vc (line 9379) | function Vc() {
  function zc (line 9471) | function zc() {
  function Wc (line 9690) | function Wc() {
  function Kc (line 9942) | function Kc() {
  function $c (line 10184) | function $c() {
  function Qc (line 10241) | function Qc() {
  function Xc (line 10291) | function Xc() {
  function Zc (line 10364) | function Zc() {
  function Jc (line 10401) | function Jc() {
  function jc (line 10559) | function jc() {
  function e_ (line 10616) | function e_() {
  function t_ (line 10744) | function t_() {
  function n_ (line 10784) | function n_() {
  function a_ (line 10827) | function a_() {
  function r_ (line 11081) | function r_() {
  function i_ (line 11208) | function i_() {
  function o_ (line 11599) | function o_() {
  function s_ (line 11621) | function s_() {
  function l_ (line 11670) | function l_() {
  function c_ (line 11874) | function c_() {
  function __ (line 12451) | function __() {
  function d_ (line 12488) | function d_() {
  function u_ (line 12556) | function u_() {
  function p_ (line 13110) | function p_() {
  function m_ (line 13630) | function m_() {
  function E_ (line 13780) | function E_() {
  function g_ (line 13956) | function g_() {
  function S_ (line 14106) | function S_() {
  function T_ (line 14152) | function T_() {
  function b_ (line 14186) | function b_() {
  function R_ (line 17309) | function R_() {
  function f_ (line 17463) | function f_() {
  function C_ (line 17538) | function C_() {
  function N_ (line 17722) | function N_() {
  function O_ (line 17795) | function O_() {
  function I_ (line 17970) | function I_() {
  function A_ (line 18078) | function A_() {
  function v_ (line 18291) | function v_() {
  function y_ (line 18471) | function y_() {
  function h_ (line 18633) | function h_() {
  function D_ (line 18684) | function D_() {
  function M_ (line 18772) | function M_() {
  function L_ (line 18855) | function L_() {
  function x_ (line 18914) | function x_() {
  function P_ (line 19024) | function P_() {
  function w_ (line 19077) | function w_() {
  function k_ (line 19191) | function k_() {
  function U_ (line 19434) | function U_() {
  function F_ (line 20095) | function F_() {
  function B_ (line 20148) | function B_() {
  function G_ (line 20189) | function G_() {
  function Y_ (line 20546) | function Y_() {
  function q_ (line 20576) | function q_() {
  function H_ (line 20821) | function H_() {
  function V_ (line 20962) | function V_() {
  function z_ (line 21209) | function z_() {
  function W_ (line 21236) | function W_() {
  function K_ (line 21326) | function K_() {
  function $_ (line 22321) | function $_() {
  function Q_ (line 22440) | function Q_() {
  function X_ (line 22535) | function X_() {
  function Z_ (line 22885) | function Z_() {
  function J_ (line 22970) | function J_() {
  function j_ (line 23033) | function j_() {
  function ed (line 23095) | function ed() {
  function td (line 23165) | function td() {
  function nd (line 30482) | function nd() {
  function ad (line 30561) | function ad() {
  function rd (line 30615) | function rd() {
  function id (line 30645) | function id() {
  function od (line 30718) | function od() {
  function sd (line 30798) | function sd() {
  function ld (line 30811) | function ld() {
  function cd (line 31283) | function cd() {
  function _d (line 31315) | function _d() {
  function dd (line 31489) | function dd() {
  function ud (line 31623) | function ud() {
  function pd (line 31975) | function pd() {
  function md (line 32052) | function md() {
  function Ed (line 32196) | function Ed() {
  function gd (line 32377) | function gd() {
  function Sd (line 32689) | function Sd() {
  function Td (line 32718) | function Td() {
  function bd (line 33235) | function bd() {
  function Rd (line 33475) | function Rd() {
  function fd (line 33545) | function fd() {
  function Cd (line 33611) | function Cd() {
  function Nd (line 33678) | function Nd() {
  function Od (line 33729) | function Od() {
  function Id (line 33768) | function Id() {
  function Ad (line 34036) | function Ad() {
  function vd (line 34605) | function vd() {
  function yd (line 34655) | function yd() {
  function hd (line 34671) | function hd() {
  function Dd (line 34725) | function Dd() {
  function Md (line 34964) | function Md() {
  function Ld (line 35385) | function Ld() {
  function xd (line 35426) | function xd() {
  function Pd (line 35496) | function Pd() {
  function wd (line 35550) | function wd() {
  function kd (line 35624) | function kd() {
  function Ud (line 35734) | function Ud() {
  function Fd (line 35796) | function Fd() {
  function Bd (line 36198) | function Bd() {
  function Gd (line 36227) | function Gd() {
  function Yd (line 36254) | function Yd() {
  function qd (line 36399) | function qd() {
  function Hd (line 36609) | function Hd() {
  function Vd (line 36751) | function Vd() {
  function zd (line 36770) | function zd() {
  function Wd (line 36842) | function Wd() {
  function Kd (line 36985) | function Kd() {
  function $d (line 37123) | function $d() {
  function Qd (line 37156) | function Qd() {
  function Xd (line 37464) | function Xd() {
  function Zd (line 38007) | function Zd() {
  function Jd (line 38189) | function Jd() {
  function jd (line 38317) | function jd() {
  function eu (line 38379) | function eu() {
  function tu (line 39290) | function tu() {
  function nu (line 39318) | function nu() {
  function au (line 39439) | function au() {
  function ru (line 39502) | function ru() {
  function iu (line 39574) | function iu() {
  function ou (line 42182) | function ou() {
  function su (line 42800) | function su() {
  function lu (line 43291) | function lu() {
  function cu (line 43335) | function cu() {
  function _u (line 43394) | function _u() {
  function du (line 44355) | function du() {
  function uu (line 44394) | function uu() {
  function pu (line 45196) | function pu() {
  function mu (line 45242) | function mu() {
  function Eu (line 45428) | function Eu() {
  function gu (line 45471) | function gu() {
  function Su (line 45652) | function Su() {
  function Tu (line 45725) | function Tu() {
  function bu (line 45888) | function bu() {
  function Ru (line 46119) | function Ru() {
  function fu (line 46875) | function fu() {
  function Cu (line 46920) | function Cu() {
  function Nu (line 47045) | function Nu() {
  function Ou (line 47250) | function Ou() {
  function Iu (line 47269) | function Iu() {
  function Au (line 47811) | function Au() {
  function vu (line 48008) | function vu() {
  function yu (line 48083) | function yu() {
  function hu (line 48200) | function hu() {
  function Du (line 48462) | function Du() {
  function Mu (line 48553) | function Mu() {
  function Lu (line 48744) | function Lu() {
  function xu (line 49062) | function xu() {
  function Pu (line 49162) | function Pu() {
  function c (line 49172) | function c(S) {
  function d (line 49191) | function d(S) {
  function p (line 49199) | function p(S, b) {
  function E (line 49202) | function E(S, b) {
  function m (line 49232) | function m(S) {
  function T (line 49241) | function T(S) {
  function g (line 49244) | function g(S, b) {
  function ku (line 49422) | function ku(t) {

FILE: dist/plugin/markdown.d.ts
  type MarkdownSlidifyOptions (line 3) | interface MarkdownSlidifyOptions {
  type MarkdownOptions (line 9) | interface MarkdownOptions extends MarkdownConfig {
  type MarkdownPlugin (line 12) | interface MarkdownPlugin extends RevealPlugin {

FILE: dist/plugin/markdown.js
  function L (line 1) | function L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null...
  function ne (line 1) | function ne(t){E=t}
  function m (line 1) | function m(t,e=""){let n=typeof t=="string"?t:t.source,s={replace:(r,i)=...
  function z (line 2) | function z(t,e){if(e){if(T.escapeTest.test(t))return t.replace(T.escapeR...
  function be (line 2) | function be(t){try{t=encodeURI(t).replace(T.percentDecode,"%")}catch{ret...
  function me (line 2) | function me(t,e){let n=t.replace(T.findPipe,(i,l,c)=>{let a=!1,u=l;for(;...
  function M (line 2) | function M(t,e,n){let s=t.length;if(s===0)return"";let r=0;for(;r<s&&t.c...
  function ot (line 2) | function ot(t,e){if(t.indexOf(e[1])===-1)return-1;let n=0;for(let s=0;s<...
  function ct (line 2) | function ct(t,e=0){let n=e,s="";for(let r of t)if(r==="	"){let i=4-n%4;s...
  function we (line 2) | function we(t,e,n,s,r){let i=e.href,l=e.title||null,c=t[1].replace(r.oth...
  function pt (line 2) | function pt(t,e,n){let s=t.match(n.other.indentCodeCompensation);if(s===...
  method constructor (line 4) | constructor(t){this.options=t||E}
  method space (line 4) | space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)retu...
  method code (line 4) | code(t){let e=this.rules.block.code.exec(t);if(e){let n=e[0].replace(thi...
  method fences (line 5) | fences(t){let e=this.rules.block.fences.exec(t);if(e){let n=e[0],s=pt(n,...
  method heading (line 5) | heading(t){let e=this.rules.block.heading.exec(t);if(e){let n=e[2].trim(...
  method hr (line 5) | hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:M(e[0],`
  method blockquote (line 6) | blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let n=M(e[...
  method list (line 17) | list(t){let e=this.rules.block.list.exec(t);if(e){let n=e[1].trim(),s=n....
  method html (line 24) | html(t){let e=this.rules.block.html.exec(t);if(e)return{type:"html",bloc...
  method def (line 24) | def(t){let e=this.rules.block.def.exec(t);if(e){let n=e[1].toLowerCase()...
  method table (line 24) | table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.t...
  method lheading (line 25) | lheading(t){let e=this.rules.block.lheading.exec(t);if(e)return{type:"he...
  method paragraph (line 25) | paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let n=e[1].c...
  method text (line 26) | text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:...
  method escape (line 26) | escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escap...
  method tag (line 26) | tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state....
  method link (line 26) | link(t){let e=this.rules.inline.link.exec(t);if(e){let n=e[2].trim();if(...
  method reflink (line 26) | reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rul...
  method emStrong (line 26) | emStrong(t,e,n=""){let s=this.rules.inline.emStrongLDelim.exec(t);if(!(!...
  method codespan (line 26) | codespan(t){let e=this.rules.inline.code.exec(t);if(e){let n=e[2].replac...
  method br (line 26) | br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}
  method del (line 26) | del(t,e,n=""){let s=this.rules.inline.delLDelim.exec(t);if(s&&(!s[1]||!n...
  method autolink (line 26) | autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let n,s;retur...
  method url (line 26) | url(t){let e;if(e=this.rules.inline.url.exec(t)){let n,s;if(e[2]==="@")n...
  method inlineText (line 26) | inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let n=this.lexe...
  method constructor (line 26) | constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this...
  method rules (line 26) | static get rules(){return{block:Z,inline:B}}
  method lex (line 26) | static lex(e,n){return new te(n).lex(e)}
  method lexInline (line 26) | static lexInline(e,n){return new te(n).inlineTokens(e)}
  method lex (line 26) | lex(e){e=e.replace(T.carriageReturn,`
  method blockTokens (line 27) | blockTokens(e,n=[],s=!1){for(this.options.pedantic&&(e=e.replace(T.tabCh...
  method inline (line 40) | inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}
  method inlineTokens (line 40) | inlineTokens(e,n=[]){let s=e,r=null;if(this.tokens.links){let a=Object.k...
  method constructor (line 40) | constructor(t){this.options=t||E}
  method space (line 40) | space(t){return""}
  method code (line 40) | code({text:t,lang:e,escaped:n}){let s=(e||"").match(T.notSpaceStart)?.[0...
  method blockquote (line 43) | blockquote({tokens:t}){return`<blockquote>
  method html (line 45) | html({text:t}){return t}
  method def (line 45) | def(t){return""}
  method heading (line 45) | heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}<...
  method hr (line 46) | hr(t){return`<hr>
  method list (line 47) | list(t){let e=t.ordered,n=t.start,s="";for(let l=0;l<t.items.length;l++)...
  method listitem (line 49) | listitem(t){return`<li>${this.parser.parse(t.tokens)}</li>
  method checkbox (line 50) | checkbox({checked:t}){return"<input "+(t?'checked="" ':"")+'disabled="" ...
  method paragraph (line 50) | paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>
  method table (line 51) | table(t){let e="",n="";for(let r=0;r<t.header.length;r++)n+=this.tablece...
  method tablerow (line 55) | tablerow({text:t}){return`<tr>
  method tablecell (line 57) | tablecell(t){let e=this.parser.parseInline(t.tokens),n=t.header?"th":"td...
  method strong (line 58) | strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}
  method em (line 58) | em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}
  method codespan (line 58) | codespan({text:t}){return`<code>${z(t,!0)}</code>`}
  method br (line 58) | br(t){return"<br>"}
  method del (line 58) | del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}
  method link (line 58) | link({href:t,title:e,tokens:n}){let s=this.parser.parseInline(n),r=be(t)...
  method image (line 58) | image({href:t,title:e,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,...
  method text (line 58) | text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"...
  method strong (line 58) | strong({text:t}){return t}
  method em (line 58) | em({text:t}){return t}
  method codespan (line 58) | codespan({text:t}){return t}
  method del (line 58) | del({text:t}){return t}
  method html (line 58) | html({text:t}){return t}
  method text (line 58) | text({text:t}){return t}
  method link (line 58) | link({text:t}){return""+t}
  method image (line 58) | image({text:t}){return""+t}
  method br (line 58) | br(){return""}
  method checkbox (line 58) | checkbox({raw:t}){return t}
  method constructor (line 58) | constructor(e){this.options=e||E,this.options.renderer=this.options.rend...
  method parse (line 58) | static parse(e,n){return new re(n).parse(e)}
  method parseInline (line 58) | static parseInline(e,n){return new re(n).parseInline(e)}
  method parse (line 58) | parse(e){let n="";for(let s=0;s<e.length;s++){let r=e[s];if(this.options...
  method parseInline (line 58) | parseInline(e,n=this.renderer){let s="";for(let r=0;r<e.length;r++){let ...
  method constructor (line 58) | constructor(t){this.options=t||E}
  method preprocess (line 58) | preprocess(t){return t}
  method postprocess (line 58) | postprocess(t){return t}
  method processAllTokens (line 58) | processAllTokens(t){return t}
  method emStrongMask (line 58) | emStrongMask(t){return t}
  method provideLexer (line 58) | provideLexer(){return this.block?_.lex:_.lexInline}
  method provideParser (line 58) | provideParser(){return this.block?v.parse:v.parseInline}
  method constructor (line 58) | constructor(...t){this.use(...t)}
  method walkTokens (line 58) | walkTokens(t,e){let n=[];for(let s of t)switch(n=n.concat(e.call(this,s)...
  method use (line 58) | use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};...
  method setOptions (line 58) | setOptions(t){return this.defaults={...this.defaults,...t},this}
  method lexer (line 58) | lexer(t,e){return _.lex(t,e??this.defaults)}
  method parser (line 58) | parser(t,e){return v.parse(t,e??this.defaults)}
  method parseMarkdown (line 58) | parseMarkdown(t){return(e,n)=>{let s={...n},r={...this.defaults,...s},i=...
  method onError (line 58) | onError(t,e){return n=>{if(n.message+=`
  function S (line 59) | function S(t,e){return C.parse(t,e)}
  function yt (line 59) | function yt({config:t=2}={}){return{tokenizer:{inlineText(e){const n=thi...
  function n (line 61) | function n(p){let g=(p.querySelector("[data-template]")||p.querySelector...
  function s (line 63) | function s(p){const o=p.attributes,g=[];for(let d=0,R=o.length;d<R;d++){...
  function r (line 63) | function r(p){const o=t?.getConfig?.().markdown;return p=p||{},p.separat...
  function i (line 63) | function i(p,o){o=r(o);const g=p.split(new RegExp(o.notesSeparator,"mgi"...
  function l (line 63) | function l(p,o){o=r(o);const g=new RegExp(o.separator+(o.verticalSeparat...
  function c (line 63) | function c(p){return new Promise(function(o){const g=[];[].slice.call(p....
  function a (line 63) | function a(p){return new Promise(function(o,g){const d=new XMLHttpReques...
  function u (line 63) | function u(p,o,g){const d=new RegExp(g,"mg"),R=new RegExp('([^"= ]+?)="(...
  function h (line 63) | function h(p,o,g,d,R){if(o!==null&&o.childNodes!==void 0&&o.childNodes.l...
  function x (line 63) | function x(){const p=t.getRevealElement().querySelectorAll("[data-markdo...
  function f (line 63) | function f(p){return p.replace(/([&<>'"])/g,o=>vt[o])}
  method code (line 63) | code({text:b,lang:w}){let $=w||"",y="",A="";if(F.test($)){let P=$.match(...
  method marked (line 63) | get marked(){return e}
  method markdownOptions (line 63) | get markdownOptions(){return t?t.getConfig().markdown||{}:{}}

FILE: dist/plugin/markdown.mjs
  function X (line 1) | function X() {
  function pe (line 5) | function pe(t) {
  function m (line 9) | function m(t, e = "") {
  function z (line 24) | function z(t, e) {
  function ae (line 30) | function ae(t) {
  function ie (line 38) | function ie(t, e) {
  function q (line 49) | function q(t, e, n) {
  function pt (line 57) | function pt(t, e) {
  function ht (line 65) | function ht(t, e = 0) {
  function oe (line 73) | function oe(t, e, n, s, r) {
  function ut (line 79) | function ut(t, e, n) {
  method constructor (line 96) | constructor(t) {
  method space (line 99) | space(t) {
  method code (line 103) | code(t) {
  method fences (line 111) | fences(t) {
  method heading (line 118) | heading(t) {
  method hr (line 129) | hr(t) {
  method blockquote (line 134) | blockquote(t) {
  method list (line 174) | list(t) {
  method html (line 238) | html(t) {
  method def (line 242) | def(t) {
  method table (line 249) | table(t) {
  method lheading (line 261) | lheading(t) {
  method paragraph (line 265) | paragraph(t) {
  method text (line 273) | text(t) {
  method escape (line 277) | escape(t) {
  method tag (line 281) | tag(t) {
  method link (line 285) | link(t) {
  method reflink (line 309) | reflink(t, e) {
  method emStrong (line 320) | emStrong(t, e, n = "") {
  method codespan (line 345) | codespan(t) {
  method br (line 352) | br(t) {
  method del (line 356) | del(t, e, n = "") {
  method autolink (line 373) | autolink(t) {
  method url (line 380) | url(t) {
  method inlineText (line 395) | inlineText(t) {
  method constructor (line 408) | constructor(e) {
  method rules (line 413) | static get rules() {
  method lex (line 416) | static lex(e, n) {
  method lexInline (line 419) | static lexInline(e, n) {
  method lex (line 422) | lex(e) {
  method blockTokens (line 431) | blockTokens(e, n = [], s = !1) {
  method inline (line 526) | inline(e, n = []) {
  method inlineTokens (line 529) | inlineTokens(e, n = []) {
  method constructor (line 612) | constructor(t) {
  method space (line 615) | space(t) {
  method code (line 618) | code({ text: t, lang: e, escaped: n }) {
  method blockquote (line 625) | blockquote({ tokens: t }) {
  method html (line 630) | html({ text: t }) {
  method def (line 633) | def(t) {
  method heading (line 636) | heading({ tokens: t, depth: e }) {
  method hr (line 640) | hr(t) {
  method list (line 644) | list(t) {
  method listitem (line 655) | listitem(t) {
  method checkbox (line 659) | checkbox({ checked: t }) {
  method paragraph (line 662) | paragraph({ tokens: t }) {
  method table (line 666) | table(t) {
  method tablerow (line 683) | tablerow({ text: t }) {
  method tablecell (line 688) | tablecell(t) {
  method strong (line 693) | strong({ tokens: t }) {
  method em (line 696) | em({ tokens: t }) {
  method codespan (line 699) | codespan({ text: t }) {
  method br (line 702) | br(t) {
  method del (line 705) | del({ tokens: t }) {
  method link (line 708) | link({ href: t, title: e, tokens: n }) {
  method image (line 715) | image({ href: t, title: e, text: n, tokens: s }) {
  method text (line 723) | text(t) {
  method strong (line 727) | strong({ text: t }) {
  method em (line 730) | em({ text: t }) {
  method codespan (line 733) | codespan({ text: t }) {
  method del (line 736) | del({ text: t }) {
  method html (line 739) | html({ text: t }) {
  method text (line 742) | text({ text: t }) {
  method link (line 745) | link({ text: t }) {
  method image (line 748) | image({ text: t }) {
  method br (line 751) | br() {
  method checkbox (line 754) | checkbox({ raw: t }) {
  method constructor (line 761) | constructor(e) {
  method parse (line 764) | static parse(e, n) {
  method parseInline (line 767) | static parseInline(e, n) {
  method parse (line 770) | parse(e) {
  method parseInline (line 840) | parseInline(e, n = this.renderer) {
  method constructor (line 909) | constructor(t) {
  method preprocess (line 914) | preprocess(t) {
  method postprocess (line 917) | postprocess(t) {
  method processAllTokens (line 920) | processAllTokens(t) {
  method emStrongMask (line 923) | emStrongMask(t) {
  method provideLexer (line 926) | provideLexer() {
  method provideParser (line 929) | provideParser() {
  method constructor (line 943) | constructor(...t) {
  method walkTokens (line 946) | walkTokens(t, e) {
  method use (line 970) | use(...t) {
  method setOptions (line 1049) | setOptions(t) {
  method lexer (line 1052) | lexer(t, e) {
  method parser (line 1055) | parser(t, e) {
  method parseMarkdown (line 1058) | parseMarkdown(t) {
  method onError (line 1081) | onError(t, e) {
  function S (line 1093) | function S(t, e) {
  function Tt (line 1174) | function Tt({
  function n (line 1207) | function n(p) {
  function s (line 1219) | function s(p) {
  function r (line 1227) | function r(p) {
  function a (line 1231) | function a(p, o) {
  function l (line 1236) | function l(p, o) {
  function c (line 1250) | function c(p) {
  function i (line 1277) | function i(p) {
  function u (line 1290) | function u(p, o, g) {
  function h (line 1301) | function h(p, o, g, d, R) {
  function x (line 1326) | function x() {
  function f (line 1340) | function f(p) {
  method code (line 1353) | code({ text: b, lang: w }) {
  method marked (line 1370) | get marked() {
  method markdownOptions (line 1373) | get markdownOptions() {

FILE: dist/plugin/math.d.ts
  type KaTeXPlugin (line 2) | interface KaTeXPlugin extends RevealPlugin {
  type MathJax2Plugin (line 5) | interface MathJax2Plugin extends RevealPlugin {
  type MathJax3Plugin (line 8) | interface MathJax3Plugin extends RevealPlugin {
  type MathJax4Plugin (line 11) | interface MathJax4Plugin extends RevealPlugin {
  type MathPlugin (line 14) | interface MathPlugin extends MathJax2Plugin {

FILE: dist/plugin/math.js
  function e (line 1) | async function e(t){for(const a of t)await o(a)}
  function r (line 1) | function r(o,e){let t=document.querySelector("head"),a=document.createEl...
  function r (line 1) | function r(o,e){let t=document.createElement("script");t.type="text/java...
  function r (line 1) | function r(o,e){let t=document.createElement("script");t.type="text/java...

FILE: dist/plugin/math.mjs
  function e (line 20) | async function e(t) {
  function r (line 49) | function r(o, e) {
  function r (line 87) | function r(o, e) {
  function r (line 123) | function r(o, e) {

FILE: dist/plugin/notes.d.ts
  type NotesPlugin (line 2) | interface NotesPlugin extends RevealPlugin {

FILE: dist/plugin/notes.js
  function v (line 911) | function v(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null...
  function X (line 911) | function X(r){T=r}
  function d (line 911) | function d(r,t=""){let n=typeof r=="string"?r:r.source,s={replace:(e,a)=...
  function y (line 912) | function y(r,t){if(t){if(b.escapeTest.test(r))return r.replace(b.escapeR...
  function ht (line 912) | function ht(r){try{r=encodeURI(r).replace(b.percentDecode,"%")}catch{ret...
  function dt (line 912) | function dt(r,t){let n=r.replace(b.findPipe,(a,i,o)=>{let l=!1,u=i;for(;...
  function L (line 912) | function L(r,t,n){let s=r.length;if(s===0)return"";let e=0;for(;e<s&&r.c...
  function ne (line 912) | function ne(r,t){if(r.indexOf(t[1])===-1)return-1;let n=0;for(let s=0;s<...
  function re (line 912) | function re(r,t=0){let n=t,s="";for(let e of r)if(e==="	"){let a=4-n%4;s...
  function gt (line 912) | function gt(r,t,n,s,e){let a=t.href,i=t.title||null,o=r[1].replace(e.oth...
  function se (line 912) | function se(r,t,n){let s=r.match(n.other.indentCodeCompensation);if(s===...
  method constructor (line 914) | constructor(r){this.options=r||T}
  method space (line 914) | space(r){let t=this.rules.block.newline.exec(r);if(t&&t[0].length>0)retu...
  method code (line 914) | code(r){let t=this.rules.block.code.exec(r);if(t){let n=t[0].replace(thi...
  method fences (line 915) | fences(r){let t=this.rules.block.fences.exec(r);if(t){let n=t[0],s=se(n,...
  method heading (line 915) | heading(r){let t=this.rules.block.heading.exec(r);if(t){let n=t[2].trim(...
  method hr (line 915) | hr(r){let t=this.rules.block.hr.exec(r);if(t)return{type:"hr",raw:L(t[0],`
  method blockquote (line 916) | blockquote(r){let t=this.rules.block.blockquote.exec(r);if(t){let n=L(t[...
  method list (line 927) | list(r){let t=this.rules.block.list.exec(r);if(t){let n=t[1].trim(),s=n....
  method html (line 934) | html(r){let t=this.rules.block.html.exec(r);if(t)return{type:"html",bloc...
  method def (line 934) | def(r){let t=this.rules.block.def.exec(r);if(t){let n=t[1].toLowerCase()...
  method table (line 934) | table(r){let t=this.rules.block.table.exec(r);if(!t||!this.rules.other.t...
  method lheading (line 935) | lheading(r){let t=this.rules.block.lheading.exec(r);if(t)return{type:"he...
  method paragraph (line 935) | paragraph(r){let t=this.rules.block.paragraph.exec(r);if(t){let n=t[1].c...
  method text (line 936) | text(r){let t=this.rules.block.text.exec(r);if(t)return{type:"text",raw:...
  method escape (line 936) | escape(r){let t=this.rules.inline.escape.exec(r);if(t)return{type:"escap...
  method tag (line 936) | tag(r){let t=this.rules.inline.tag.exec(r);if(t)return!this.lexer.state....
  method link (line 936) | link(r){let t=this.rules.inline.link.exec(r);if(t){let n=t[2].trim();if(...
  method reflink (line 936) | reflink(r,t){let n;if((n=this.rules.inline.reflink.exec(r))||(n=this.rul...
  method emStrong (line 936) | emStrong(r,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(r);if(!(!...
  method codespan (line 936) | codespan(r){let t=this.rules.inline.code.exec(r);if(t){let n=t[2].replac...
  method br (line 936) | br(r){let t=this.rules.inline.br.exec(r);if(t)return{type:"br",raw:t[0]}}
  method del (line 936) | del(r,t,n=""){let s=this.rules.inline.delLDelim.exec(r);if(s&&(!s[1]||!n...
  method autolink (line 936) | autolink(r){let t=this.rules.inline.autolink.exec(r);if(t){let n,s;retur...
  method url (line 936) | url(r){let t;if(t=this.rules.inline.url.exec(r)){let n,s;if(t[2]==="@")n...
  method inlineText (line 936) | inlineText(r){let t=this.rules.inline.text.exec(r);if(t){let n=this.lexe...
  method constructor (line 936) | constructor(t){this.tokens=[],this.tokens.links=Object.create(null),this...
  method rules (line 936) | static get rules(){return{block:q,inline:z}}
  method lex (line 936) | static lex(t,n){return new G(n).lex(t)}
  method lexInline (line 936) | static lexInline(t,n){return new G(n).inlineTokens(t)}
  method lex (line 936) | lex(t){t=t.replace(b.carriageReturn,`
  method blockTokens (line 937) | blockTokens(t,n=[],s=!1){for(this.options.pedantic&&(t=t.replace(b.tabCh...
  method inline (line 950) | inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}
  method inlineTokens (line 950) | inlineTokens(t,n=[]){let s=t,e=null;if(this.tokens.links){let l=Object.k...
  method constructor (line 950) | constructor(r){this.options=r||T}
  method space (line 950) | space(r){return""}
  method code (line 950) | code({text:r,lang:t,escaped:n}){let s=(t||"").match(b.notSpaceStart)?.[0...
  method blockquote (line 953) | blockquote({tokens:r}){return`<blockquote>
  method html (line 955) | html({text:r}){return r}
  method def (line 955) | def(r){return""}
  method heading (line 955) | heading({tokens:r,depth:t}){return`<h${t}>${this.parser.parseInline(r)}<...
  method hr (line 956) | hr(r){return`<hr>
  method list (line 957) | list(r){let t=r.ordered,n=r.start,s="";for(let i=0;i<r.items.length;i++)...
  method listitem (line 959) | listitem(r){return`<li>${this.parser.parse(r.tokens)}</li>
  method checkbox (line 960) | checkbox({checked:r}){return"<input "+(r?'checked="" ':"")+'disabled="" ...
  method paragraph (line 960) | paragraph({tokens:r}){return`<p>${this.parser.parseInline(r)}</p>
  method table (line 961) | table(r){let t="",n="";for(let e=0;e<r.header.length;e++)n+=this.tablece...
  method tablerow (line 965) | tablerow({text:r}){return`<tr>
  method tablecell (line 967) | tablecell(r){let t=this.parser.parseInline(r.tokens),n=r.header?"th":"td...
  method strong (line 968) | strong({tokens:r}){return`<strong>${this.parser.parseInline(r)}</strong>`}
  method em (line 968) | em({tokens:r}){return`<em>${this.parser.parseInline(r)}</em>`}
  method codespan (line 968) | codespan({text:r}){return`<code>${y(r,!0)}</code>`}
  method br (line 968) | br(r){return"<br>"}
  method del (line 968) | del({tokens:r}){return`<del>${this.parser.parseInline(r)}</del>`}
  method link (line 968) | link({href:r,title:t,tokens:n}){let s=this.parser.parseInline(n),e=ht(r)...
  method image (line 968) | image({href:r,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,...
  method text (line 968) | text(r){return"tokens"in r&&r.tokens?this.parser.parseInline(r.tokens):"...
  method strong (line 968) | strong({text:r}){return r}
  method em (line 968) | em({text:r}){return r}
  method codespan (line 968) | codespan({text:r}){return r}
  method del (line 968) | del({text:r}){return r}
  method html (line 968) | html({text:r}){return r}
  method text (line 968) | text({text:r}){return r}
  method link (line 968) | link({text:r}){return""+r}
  method image (line 968) | image({text:r}){return""+r}
  method br (line 968) | br(){return""}
  method checkbox (line 968) | checkbox({raw:r}){return r}
  method constructor (line 968) | constructor(t){this.options=t||T,this.options.renderer=this.options.rend...
  method parse (line 968) | static parse(t,n){return new V(n).parse(t)}
  method parseInline (line 968) | static parseInline(t,n){return new V(n).parseInline(t)}
  method parse (line 968) | parse(t){let n="";for(let s=0;s<t.length;s++){let e=t[s];if(this.options...
  method parseInline (line 968) | parseInline(t,n=this.renderer){let s="";for(let e=0;e<t.length;e++){let ...
  method constructor (line 968) | constructor(r){this.options=r||T}
  method preprocess (line 968) | preprocess(r){return r}
  method postprocess (line 968) | postprocess(r){return r}
  method processAllTokens (line 968) | processAllTokens(r){return r}
  method emStrongMask (line 968) | emStrongMask(r){return r}
  method provideLexer (line 968) | provideLexer(){return this.block?w.lex:w.lexInline}
  method provideParser (line 968) | provideParser(){return this.block?x.parse:x.parseInline}
  method constructor (line 968) | constructor(...r){this.use(...r)}
  method walkTokens (line 968) | walkTokens(r,t){let n=[];for(let s of r)switch(n=n.concat(t.call(this,s)...
  method use (line 968) | use(...r){let t=this.defaults.extensions||{renderers:{},childTokens:{}};...
  method setOptions (line 968) | setOptions(r){return this.defaults={...this.defaults,...r},this}
  method lexer (line 968) | lexer(r,t){return w.lex(r,t??this.defaults)}
  method parser (line 968) | parser(r,t){return x.parse(r,t??this.defaults)}
  method parseMarkdown (line 968) | parseMarkdown(r){return(t,n)=>{let s={...n},e={...this.defaults,...s},a=...
  method onError (line 968) | onError(r,t){return n=>{if(n.message+=`
  function m (line 969) | function m(r,t){return A.parse(r,t)}
  function s (line 969) | function s(){if(t&&!t.closed)t.focus();else{if(t=window.open("about:blan...
  function e (line 969) | function e(h){t&&!t.closed?t.focus():(t=h,window.addEventListener("messa...
  function a (line 969) | function a(){const h=n.getConfig().url,p=typeof h=="string"?h:window.loc...
  function i (line 969) | function i(h,p,g){let f=n[h].apply(n,p);t.postMessage(JSON.stringify({na...
  function o (line 969) | function o(h){let p=n.getCurrentSlide(),g=p.querySelectorAll("aside.note...
  function l (line 970) | function l(h){try{return window.location.origin===h.source.location.orig...
  function u (line 970) | function u(h){if(l(h))try{let p=JSON.parse(h.data);p&&p.namespace==="rev...
  function c (line 970) | function c(){n.on("slidechanged",o),n.on("fragmentshown",o),n.on("fragme...

FILE: dist/plugin/notes.mjs
  function H (line 912) | function H() {
  function st (line 916) | function st(r) {
  function d (line 920) | function d(r, t = "") {
  function S (line 935) | function S(r, t) {
  function et (line 941) | function et(r) {
  function nt (line 949) | function nt(r, t) {
  function E (line 960) | function E(r, t, n) {
  function se (line 968) | function se(r, t) {
  function ie (line 976) | function ie(r, t = 0) {
  function rt (line 984) | function rt(r, t, n, s, e) {
  function ae (line 990) | function ae(r, t, n) {
  method constructor (line 1007) | constructor(r) {
  method space (line 1010) | space(r) {
  method code (line 1014) | code(r) {
  method fences (line 1022) | fences(r) {
  method heading (line 1029) | heading(r) {
  method hr (line 1040) | hr(r) {
  method blockquote (line 1045) | blockquote(r) {
  method list (line 1085) | list(r) {
  method html (line 1149) | html(r) {
  method def (line 1153) | def(r) {
  method table (line 1160) | table(r) {
  method lheading (line 1172) | lheading(r) {
  method paragraph (line 1176) | paragraph(r) {
  method text (line 1184) | text(r) {
  method escape (line 1188) | escape(r) {
  method tag (line 1192) | tag(r) {
  method link (line 1196) | link(r) {
  method reflink (line 1220) | reflink(r, t) {
  method emStrong (line 1231) | emStrong(r, t, n = "") {
  method codespan (line 1256) | codespan(r) {
  method br (line 1263) | br(r) {
  method del (line 1267) | del(r, t, n = "") {
  method autolink (line 1284) | autolink(r) {
  method url (line 1291) | url(r) {
  method inlineText (line 1306) | inlineText(r) {
  method constructor (line 1319) | constructor(t) {
  method rules (line 1324) | static get rules() {
  method lex (line 1327) | static lex(t, n) {
  method lexInline (line 1330) | static lexInline(t, n) {
  method lex (line 1333) | lex(t) {
  method blockTokens (line 1342) | blockTokens(t, n = [], s = !1) {
  method inline (line 1437) | inline(t, n = []) {
  method inlineTokens (line 1440) | inlineTokens(t, n = []) {
  method constructor (line 1523) | constructor(r) {
  method space (line 1526) | space(r) {
  method code (line 1529) | code({ text: r, lang: t, escaped: n }) {
  method blockquote (line 1536) | blockquote({ tokens: r }) {
  method html (line 1541) | html({ text: r }) {
  method def (line 1544) | def(r) {
  method heading (line 1547) | heading({ tokens: r, depth: t }) {
  method hr (line 1551) | hr(r) {
  method list (line 1555) | list(r) {
  method listitem (line 1566) | listitem(r) {
  method checkbox (line 1570) | checkbox({ checked: r }) {
  method paragraph (line 1573) | paragraph({ tokens: r }) {
  method table (line 1577) | table(r) {
  method tablerow (line 1594) | tablerow({ text: r }) {
  method tablecell (line 1599) | tablecell(r) {
  method strong (line 1604) | strong({ tokens: r }) {
  method em (line 1607) | em({ tokens: r }) {
  method codespan (line 1610) | codespan({ text: r }) {
  method br (line 1613) | br(r) {
  method del (line 1616) | del({ tokens: r }) {
  method link (line 1619) | link({ href: r, title: t, tokens: n }) {
  method image (line 1626) | image({ href: r, title: t, text: n, tokens: s }) {
  method text (line 1634) | text(r) {
  method strong (line 1638) | strong({ text: r }) {
  method em (line 1641) | em({ text: r }) {
  method codespan (line 1644) | codespan({ text: r }) {
  method del (line 1647) | del({ text: r }) {
  method html (line 1650) | html({ text: r }) {
  method text (line 1653) | text({ text: r }) {
  method link (line 1656) | link({ text: r }) {
  method image (line 1659) | image({ text: r }) {
  method br (line 1662) | br() {
  method checkbox (line 1665) | checkbox({ raw: r }) {
  method constructor (line 1672) | constructor(t) {
  method parse (line 1675) | static parse(t, n) {
  method parseInline (line 1678) | static parseInline(t, n) {
  method parse (line 1681) | parse(t) {
  method parseInline (line 1751) | parseInline(t, n = this.renderer) {
  method constructor (line 1820) | constructor(r) {
  method preprocess (line 1825) | preprocess(r) {
  method postprocess (line 1828) | postprocess(r) {
  method processAllTokens (line 1831) | processAllTokens(r) {
  method emStrongMask (line 1834) | emStrongMask(r) {
  method provideLexer (line 1837) | provideLexer() {
  method provideParser (line 1840) | provideParser() {
  method constructor (line 1854) | constructor(...r) {
  method walkTokens (line 1857) | walkTokens(r, t) {
  method use (line 1881) | use(...r) {
  method setOptions (line 1960) | setOptions(r) {
  method lexer (line 1963) | lexer(r, t) {
  method parser (line 1966) | parser(r, t) {
  method parseMarkdown (line 1969) | parseMarkdown(r) {
  method onError (line 1992) | onError(r, t) {
  function m (line 2004) | function m(r, t) {
  function s (line 2037) | function s() {
  function e (line 2048) | function e(h) {
  function a (line 2051) | function a() {
  function i (line 2062) | function i(h, p, g) {
  function o (line 2071) | function o(h) {
  function l (line 2087) | function l(h) {
  function u (line 2094) | function u(h) {
  function c (line 2102) | function c() {

FILE: dist/plugin/search.d.ts
  type SearchPlugin (line 2) | interface SearchPlugin extends RevealPlugin {

FILE: dist/plugin/search.js
  function x (line 1) | function x(){t=document.createElement("div"),t.classList.add("searchbox"...
  function E (line 2) | function E(){t||x(),t.style.display="inline",i.focus(),i.select()}
  function m (line 2) | function m(){t||x(),t.style.display="none",s&&s.remove()}
  function N (line 2) | function N(){t||x(),t.style.display!=="inline"?E():m()}
  function L (line 2) | function L(){if(v){var r=i.value;r===""?(s&&s.remove(),n=null):(s=new I(...
  function I (line 2) | function I(r,f){var M=document.getElementById(r)||document.body,S=f||"EM...

FILE: dist/plugin/search.mjs
  function g (line 3) | function g() {
  function w (line 9) | function w() {
  function v (line 12) | function v() {
  function C (line 15) | function C() {
  function k (line 18) | function k() {
  function T (line 25) | function T(r, c) {

FILE: dist/plugin/zoom.d.ts
  type ZoomPlugin (line 2) | interface ZoomPlugin extends RevealPlugin {

FILE: dist/plugin/zoom.js
  function c (line 1) | function c(e,t){var o=w();if(e.width=e.width||1,e.height=e.height||1,e.x...
  function a (line 1) | function a(){var e=.12,t=window.innerWidth*e,o=window.innerHeight*e,d=w(...
  function w (line 1) | function w(){return{x:window.scrollX!==void 0?window.scrollX:window.page...

FILE: dist/plugin/zoom.mjs
  function y (line 25) | function y(e, t) {
  function a (line 38) | function a() {
  function s (line 42) | function s() {

FILE: dist/reveal.d.ts
  type RevealApi (line 40) | interface RevealApi {
  type NavigateParams (line 781) | interface NavigateParams {
  type NavigationFunction (line 785) | type NavigationFunction = (params?: NavigateParams) => void;
  type MultiplexConfig (line 792) | interface MultiplexConfig {
  type RevealDependency (line 806) | interface RevealDependency {
  type ComputedSlideSize (line 813) | interface ComputedSlideSize {
  type RevealState (line 820) | interface RevealState {
  type SlideSyncEvent (line 848) | interface SlideSyncEvent extends Event {
  type RevealPlugin (line 858) | interface RevealPlugin {
  type RevealPluginFactory (line 864) | type RevealPluginFactory = () => RevealPlugin;

FILE: dist/reveal.js
  function O (line 8) | function O(f,S){var T=Object.assign({},j,S),J=f.map((function($){var le=...
  function C (line 8) | function C(f){var S=arguments.length>1&&arguments[1]!==void 0?arguments[...
  class Yt (line 8) | class Yt{constructor(e){Qe(this,"allowedToPlayAudio",null);this.Reveal=e...
    method constructor (line 8) | constructor(e){Qe(this,"allowedToPlayAudio",null);this.Reveal=e,this.s...
    method renderMediaPlayButton (line 8) | renderMediaPlayButton(){this.mediaPlayButton=document.createElement("b...
    method shouldPreload (line 8) | shouldPreload(e){if(this.Reveal.isScrollView())return!0;let i=this.Rev...
    method load (line 8) | load(e,i={}){const t=this.Reveal.getConfig().display;if(t.includes("!i...
    method layout (line 8) | layout(e){Array.from(e.querySelectorAll(".r-fit-text")).forEach(i=>{Xt...
    method unload (line 8) | unload(e){e.style.display="none";let i=this.Reveal.getSlideBackground(...
    method formatEmbeddedContent (line 8) | formatEmbeddedContent(){let e=(i,t,s)=>{b(this.Reveal.getSlidesElement...
    method startEmbeddedContent (line 8) | startEmbeddedContent(e){if(e){const i=this.Reveal.isSpeakerNotes();b(e...
    method ensureMobileMediaPlaying (line 8) | ensureMobileMediaPlaying(e){const i=e.target;typeof i.getVideoPlayback...
    method startEmbeddedMedia (line 8) | startEmbeddedMedia(e){let i=!!V(e.target,"html"),t=!!V(e.target,".pres...
    method playMediaElement (line 8) | playMediaElement(e){const i=e.play();i&&typeof i.catch=="function"&&i....
    method startEmbeddedIframe (line 8) | startEmbeddedIframe(e){let i=e.target;if(this.preventIframeAutoFocus(e...
    method stopEmbeddedContent (line 8) | stopEmbeddedContent(e,i={}){i=I({unloadIframes:!0},i),e&&e.parentNode&...
    method isAllowedToPlayAudio (line 8) | isAllowedToPlayAudio(){return this.allowedToPlayAudio}
    method showPlayOrUnmuteButton (line 8) | showPlayOrUnmuteButton(){const e=this.failedAudioPlaybackTargets.size,...
    method onAudioPlaybackNotAllowed (line 8) | onAudioPlaybackNotAllowed(e){this.failedAudioPlaybackTargets.add(e),th...
    method onVideoPlaybackNotAllowed (line 8) | onVideoPlaybackNotAllowed(e){this.failedVideoPlaybackTargets.add(e),th...
    method onMutedVideoPlaybackNotAllowed (line 8) | onMutedVideoPlaybackNotAllowed(e){this.failedMutedVideoPlaybackTargets...
    method resetTemporarilyMutedMedia (line 8) | resetTemporarilyMutedMedia(){new Set([...this.failedAudioPlaybackTarge...
    method clearMediaPlaybackErrors (line 8) | clearMediaPlaybackErrors(){this.resetTemporarilyMutedMedia(),this.fail...
    method preventIframeAutoFocus (line 8) | preventIframeAutoFocus(e){const i=e.target;if(i&&this.Reveal.getConfig...
    method afterSlideChanged (line 8) | afterSlideChanged(){this.clearMediaPlaybackErrors()}
  class ei (line 8) | class ei{constructor(e){this.Reveal=e}render(){this.element=document.cre...
    method constructor (line 8) | constructor(e){this.Reveal=e}
    method render (line 8) | render(){this.element=document.createElement("div"),this.element.class...
    method configure (line 8) | configure(e,i){let t="none";e.slideNumber&&!this.Reveal.isPrintView()&...
    method update (line 8) | update(){this.Reveal.getConfig().slideNumber&&this.element&&(this.elem...
    method getSlideNumber (line 8) | getSlideNumber(e=this.Reveal.getCurrentSlide()){let i=this.Reveal.getC...
    method formatNumber (line 8) | formatNumber(e,i,t,s="#"+this.Reveal.location.getHash()){return typeof...
    method destroy (line 14) | destroy(){this.element.remove()}
  class ti (line 14) | class ti{constructor(e){this.Reveal=e,this.onInput=this.onInput.bind(thi...
    method constructor (line 14) | constructor(e){this.Reveal=e,this.onInput=this.onInput.bind(this),this...
    method render (line 14) | render(){this.element=document.createElement("div"),this.element.class...
    method show (line 14) | show(){this.indicesOnShow=this.Reveal.getIndices(),this.Reveal.getReve...
    method hide (line 14) | hide(){this.isVisible()&&(this.element.remove(),this.jumpInput.value="...
    method isVisible (line 14) | isVisible(){return!!this.element.parentNode}
    method jump (line 14) | jump(){clearTimeout(this.jumpTimeout),delete this.jumpTimeout;let e=th...
    method jumpAfter (line 14) | jumpAfter(e){clearTimeout(this.jumpTimeout),this.jumpTimeout=setTimeou...
    method search (line 14) | search(e){const i=new RegExp("\\b"+e.trim()+"\\b","i"),t=this.Reveal.g...
    method cancel (line 14) | cancel(){this.Reveal.slide(this.indicesOnShow.h,this.indicesOnShow.v,t...
    method confirm (line 14) | confirm(){this.jump(),this.hide()}
    method destroy (line 14) | destroy(){this.jumpInput.removeEventListener("input",this.onInput),thi...
    method onKeyDown (line 14) | onKeyDown(e){e.keyCode===13?this.confirm():e.keyCode===27&&(this.cance...
    method onInput (line 14) | onInput(e){this.jumpAfter(200)}
    method onBlur (line 14) | onBlur(){setTimeout(()=>this.hide(),1)}
  class si (line 14) | class si{constructor(e){this.Reveal=e}render(){this.element=document.cre...
    method constructor (line 14) | constructor(e){this.Reveal=e}
    method render (line 14) | render(){this.element=document.createElement("div"),this.element.class...
    method create (line 14) | create(){this.element.innerHTML="",this.element.classList.add("no-tran...
    method createBackground (line 14) | createBackground(e,i){let t=document.createElement("div");t.className=...
    method sync (line 14) | sync(e){const i=e.slideBackgroundElement,t=e.slideBackgroundContentEle...
    method getContrastClass (line 14) | getContrastClass(e){const i=e.slideBackgroundElement;let t=e.getAttrib...
    method bubbleSlideContrastClassToElement (line 14) | bubbleSlideContrastClassToElement(e,i){["has-light-background","has-da...
    method update (line 14) | update(e=!1){let i=this.Reveal.getConfig(),t=this.Reveal.getCurrentSli...
    method updateParallax (line 14) | updateParallax(){let e=this.Reveal.getIndices();if(this.Reveal.getConf...
    method destroy (line 14) | destroy(){this.element.remove()}
  class ai (line 14) | class ai{constructor(e){this.Reveal=e}run(e,i){this.reset();let t=this.R...
    method constructor (line 14) | constructor(e){this.Reveal=e}
    method run (line 14) | run(e,i){this.reset();let t=this.Reveal.getSlides(),s=t.indexOf(i),a=t...
    method reset (line 14) | reset(){b(this.Reveal.getRevealElement(),'[data-auto-animate]:not([dat...
    method autoAnimateElements (line 14) | autoAnimateElements(e,i,t,s,a){e.dataset.autoAnimateTarget="",i.datase...
    method getAutoAnimateOptions (line 14) | getAutoAnimateOptions(e,i){let t={easing:this.Reveal.getConfig().autoA...
    method getAutoAnimatableProperties (line 14) | getAutoAnimatableProperties(e,i,t){let s=this.Reveal.getConfig(),a={st...
    method getAutoAnimatableElements (line 14) | getAutoAnimatableElements(e,i){let s=(typeof this.Reveal.getConfig().a...
    method getAutoAnimatePairs (line 14) | getAutoAnimatePairs(e,i){let t=[];const a="h1, h2, h3, h4, h5, h6, p, ...
    method getLocalBoundingBox (line 14) | getLocalBoundingBox(e){const i=this.Reveal.getScale();return{x:Math.ro...
    method findAutoAnimateMatches (line 14) | findAutoAnimateMatches(e,i,t,s,a,r){let o={},c={};[].slice.call(i.quer...
    method getUnmatchedAutoAnimateElements (line 14) | getUnmatchedAutoAnimateElements(e){return[].slice.call(e.children).red...
  class di (line 14) | class di{constructor(e){this.Reveal=e,this.active=!1,this.activatedCallb...
    method constructor (line 14) | constructor(e){this.Reveal=e,this.active=!1,this.activatedCallbacks=[]...
    method activate (line 14) | activate(){if(this.active)return;const e=this.Reveal.getState();this.a...
    method deactivate (line 14) | deactivate(){if(!this.active)return;const e=this.Reveal.getState();thi...
    method toggle (line 14) | toggle(e){typeof e=="boolean"?e?this.activate():this.deactivate():this...
    method isActive (line 14) | isActive(){return this.active}
    method createProgressBar (line 14) | createProgressBar(){this.progressBar=document.createElement("div"),thi...
    method removeProgressBar (line 14) | removeProgressBar(){this.progressBar&&(this.progressBar.remove(),this....
    method layout (line 14) | layout(){this.isActive()&&(this.syncPages(),this.syncScrollPosition())}
    method syncPages (line 14) | syncPages(){const e=this.Reveal.getConfig(),i=this.Reveal.getComputedS...
    method setTriggerRanges (line 14) | setTriggerRanges(){this.totalScrollTriggerCount=this.slideTriggers.red...
    method createFragmentTriggersForPage (line 14) | createFragmentTriggersForPage(e,i){i=i||e.slideElement;const t=this.Re...
    method createAutoAnimateTriggersForPage (line 14) | createAutoAnimateTriggersForPage(e){e.autoAnimateElements.length>0&&th...
    method createPage (line 14) | createPage(e){return e.scrollTriggers=[],e.indexh=parseInt(e.slideElem...
    method syncProgressBar (line 14) | syncProgressBar(){this.progressBarInner.querySelectorAll(".scrollbar-s...
    method syncScrollPosition (line 14) | syncScrollPosition(){const e=this.viewportElement.offsetHeight,i=e/thi...
    method setProgressBarValue (line 14) | setProgressBarValue(e){this.progressBar&&(this.progressBarPlayhead.sty...
    method showProgressBar (line 14) | showProgressBar(){this.progressBar.classList.add("visible"),clearTimeo...
    method prev (line 14) | prev(){this.viewportElement.scrollTop-=this.scrollTriggerHeight}
    method next (line 14) | next(){this.viewportElement.scrollTop+=this.scrollTriggerHeight}
    method scrollToSlide (line 14) | scrollToSlide(e){if(!this.active)this.activatedCallbacks.push(()=>this...
    method storeScrollPosition (line 14) | storeScrollPosition(){clearTimeout(this.storeScrollPositionTimeout),th...
    method restoreScrollPosition (line 14) | restoreScrollPosition(){const e=sessionStorage.getItem("reveal-scroll-...
    method activatePage (line 14) | activatePage(e){if(!e.active){e.active=!0;const{slideElement:i,backgro...
    method deactivatePage (line 14) | deactivatePage(e){e.active&&(e.active=!1,e.slideElement&&e.slideElemen...
    method activateTrigger (line 14) | activateTrigger(e){e.active||(e.active=!0,e.activate())}
    method deactivateTrigger (line 14) | deactivateTrigger(e){e.active&&(e.active=!1,e.deactivate&&e.deactivate...
    method getSlideByIndices (line 14) | getSlideByIndices(e,i){const t=this.getAllPages().find(s=>s.indexh===e...
    method getScrollTriggerBySlide (line 14) | getScrollTriggerBySlide(e){return this.slideTriggers.find(i=>i.page.sl...
    method getAllPages (line 14) | getAllPages(){return this.pages.flatMap(e=>[e,...e.autoAnimatePages||[...
    method onScroll (line 14) | onScroll(){this.syncScrollPosition(),this.storeScrollPosition()}
    method viewportElement (line 14) | get viewportElement(){return this.Reveal.getViewportElement()}
  class ci (line 14) | class ci{constructor(e){this.Reveal=e}activate(){return Wt(this,null,fun...
    method constructor (line 14) | constructor(e){this.Reveal=e}
    method activate (line 14) | activate(){return Wt(this,null,function*(){const e=this.Reveal.getConf...
    method isActive (line 14) | isActive(){return this.Reveal.getConfig().view==="print"}
  class hi (line 14) | class hi{constructor(e){this.Reveal=e}configure(e,i){e.fragments===!1?th...
    method constructor (line 14) | constructor(e){this.Reveal=e}
    method configure (line 14) | configure(e,i){e.fragments===!1?this.disable():i.fragments===!1&&this....
    method disable (line 14) | disable(){b(this.Reveal.getSlidesElement(),".fragment").forEach(e=>{e....
    method enable (line 14) | enable(){b(this.Reveal.getSlidesElement(),".fragment").forEach(e=>{e.c...
    method availableRoutes (line 14) | availableRoutes(){let e=this.Reveal.getCurrentSlide();if(e&&this.Revea...
    method sort (line 14) | sort(e,i=!1){e=Array.from(e);let t=[],s=[],a=[];e.forEach(o=>{if(o.has...
    method sortAll (line 14) | sortAll(){this.Reveal.getHorizontalSlides().forEach(e=>{let i=b(e,"sec...
    method update (line 14) | update(e,i,t=this.Reveal.getCurrentSlide()){let s={shown:[],hidden:[]}...
    method sync (line 14) | sync(e=this.Reveal.getCurrentSlide()){return this.sort(e.querySelector...
    method goto (line 14) | goto(e,i=0){let t=this.Reveal.getCurrentSlide();if(t&&this.Reveal.getC...
    method next (line 14) | next(){return this.goto(null,1)}
    method prev (line 14) | prev(){return this.goto(null,-1)}
  class ui (line 14) | class ui{constructor(e){this.Reveal=e,this.active=!1,this.onSlideClicked...
    method constructor (line 14) | constructor(e){this.Reveal=e,this.active=!1,this.onSlideClicked=this.o...
    method activate (line 14) | activate(){if(this.Reveal.getConfig().overview&&!this.Reveal.isScrollV...
    method layout (line 14) | layout(){this.Reveal.getHorizontalSlides().forEach((e,i)=>{e.setAttrib...
    method update (line 14) | update(){const e=Math.min(window.innerWidth,window.innerHeight),i=Math...
    method deactivate (line 14) | deactivate(){if(this.Reveal.getConfig().overview){this.active=!1,this....
    method toggle (line 14) | toggle(e){typeof e=="boolean"?e?this.activate():this.deactivate():this...
    method isActive (line 14) | isActive(){return this.active}
    method onSlideClicked (line 14) | onSlideClicked(e){if(this.isActive()){e.preventDefault();let i=e.targe...
  class fi (line 14) | class fi{constructor(e){this.Reveal=e,this.shortcuts={},this.bindings={}...
    method constructor (line 14) | constructor(e){this.Reveal=e,this.shortcuts={},this.bindings={},this.o...
    method configure (line 14) | configure(e,i){e.navigationMode==="linear"?(this.shortcuts["&#8594;  ,...
    method bind (line 14) | bind(){document.addEventListener("keydown",this.onDocumentKeyDown,!1)}
    method unbind (line 14) | unbind(){document.removeEventListener("keydown",this.onDocumentKeyDown...
    method addKeyBinding (line 14) | addKeyBinding(e,i){typeof e=="object"&&e.keyCode?this.bindings[e.keyCo...
    method removeKeyBinding (line 14) | removeKeyBinding(e){delete this.bindings[e]}
    method triggerKey (line 14) | triggerKey(e){this.onDocumentKeyDown({keyCode:e})}
    method registerKeyboardShortcut (line 14) | registerKeyboardShortcut(e,i){this.shortcuts[e]=i}
    method getShortcuts (line 14) | getShortcuts(){return this.shortcuts}
    method getBindings (line 14) | getBindings(){return this.bindings}
    method onDocumentKeyDown (line 14) | onDocumentKeyDown(e){let i=this.Reveal.getConfig();if(typeof i.keyboar...
  class gi (line 14) | class gi{constructor(e){Qe(this,"MAX_REPLACE_STATE_FREQUENCY",1e3);this....
    method constructor (line 14) | constructor(e){Qe(this,"MAX_REPLACE_STATE_FREQUENCY",1e3);this.Reveal=...
    method bind (line 14) | bind(){window.addEventListener("hashchange",this.onWindowHashChange,!1)}
    method unbind (line 14) | unbind(){window.removeEventListener("hashchange",this.onWindowHashChan...
    method getIndicesFromHash (line 14) | getIndicesFromHash(e=window.location.hash,i={}){let t=e.replace(/^#\/?...
    method readURL (line 14) | readURL(){const e=this.Reveal.getIndices(),i=this.getIndicesFromHash()...
    method writeURL (line 14) | writeURL(e){let i=this.Reveal.getConfig(),t=this.Reveal.getCurrentSlid...
    method replaceState (line 14) | replaceState(e){window.history.replaceState(null,null,e),this.replaceS...
    method debouncedReplaceState (line 14) | debouncedReplaceState(e){clearTimeout(this.replaceStateTimeout),Date.n...
    method getHash (line 14) | getHash(e){let i="/",t=e||this.Reveal.getCurrentSlide(),s=t?t.getAttri...
    method onWindowHashChange (line 14) | onWindowHashChange(e){this.readURL()}
  class pi (line 14) | class pi{constructor(e){this.Reveal=e,this.onNavigateLeftClicked=this.on...
    method constructor (line 14) | constructor(e){this.Reveal=e,this.onNavigateLeftClicked=this.onNavigat...
    method render (line 14) | render(){const e=this.Reveal.getConfig().rtl,i=this.Reveal.getRevealEl...
    method configure (line 17) | configure(e,i){const t=e.controls==="speaker"||e.controls==="speaker-o...
    method bind (line 17) | bind(){let e=["touchstart","click"];tt&&(e=["touchend"]),e.forEach(i=>...
    method unbind (line 17) | unbind(){["touchstart","touchend","click"].forEach(e=>{this.controlsLe...
    method update (line 17) | update(){let e=this.Reveal.availableRoutes();[...this.controlsLeft,......
    method destroy (line 17) | destroy(){this.unbind(),this.element.remove()}
    method onNavigateLeftClicked (line 17) | onNavigateLeftClicked(e){e.preventDefault(),this.Reveal.onUserInput(),...
    method onNavigateRightClicked (line 17) | onNavigateRightClicked(e){e.preventDefault(),this.Reveal.onUserInput()...
    method onNavigateUpClicked (line 17) | onNavigateUpClicked(e){e.preventDefault(),this.Reveal.onUserInput(),th...
    method onNavigateDownClicked (line 17) | onNavigateDownClicked(e){e.preventDefault(),this.Reveal.onUserInput(),...
    method onNavigatePrevClicked (line 17) | onNavigatePrevClicked(e){e.preventDefault(),this.Reveal.onUserInput(),...
    method onNavigateNextClicked (line 17) | onNavigateNextClicked(e){e.preventDefault(),this.Reveal.onUserInput(),...
    method onEnterFullscreen (line 17) | onEnterFullscreen(e){const i=this.Reveal.getConfig(),t=this.Reveal.get...
  class vi (line 17) | class vi{constructor(e){this.Reveal=e,this.onProgressClicked=this.onProg...
    method constructor (line 17) | constructor(e){this.Reveal=e,this.onProgressClicked=this.onProgressCli...
    method render (line 17) | render(){this.element=document.createElement("div"),this.element.class...
    method configure (line 17) | configure(e,i){this.element.style.display=e.progress?"block":"none"}
    method bind (line 17) | bind(){this.Reveal.getConfig().progress&&this.element&&this.element.ad...
    method unbind (line 17) | unbind(){this.Reveal.getConfig().progress&&this.element&&this.element....
    method update (line 17) | update(){if(this.Reveal.getConfig().progress&&this.bar){let e=this.Rev...
    method getMaxWidth (line 17) | getMaxWidth(){return this.Reveal.getRevealElement().offsetWidth}
    method onProgressClicked (line 17) | onProgressClicked(e){this.Reveal.onUserInput(e),e.preventDefault();let...
    method destroy (line 17) | destroy(){this.element.remove()}
  class mi (line 17) | class mi{constructor(e){this.Reveal=e,this.lastMouseWheelStep=0,this.cur...
    method constructor (line 17) | constructor(e){this.Reveal=e,this.lastMouseWheelStep=0,this.cursorHidd...
    method configure (line 17) | configure(e,i){e.mouseWheel?document.addEventListener("wheel",this.onD...
    method showCursor (line 17) | showCursor(){this.cursorHidden&&(this.cursorHidden=!1,this.Reveal.getR...
    method hideCursor (line 17) | hideCursor(){this.cursorHidden===!1&&(this.cursorHidden=!0,this.Reveal...
    method destroy (line 17) | destroy(){this.showCursor(),document.removeEventListener("wheel",this....
    method onDocumentCursorActive (line 17) | onDocumentCursorActive(e){this.showCursor(),clearTimeout(this.cursorIn...
    method onDocumentMouseScroll (line 17) | onDocumentMouseScroll(e){if(Date.now()-this.lastMouseWheelStep>1e3){th...
  class yi (line 18) | class yi{constructor(e){this.Reveal=e,this.state="idle",this.registeredP...
    method constructor (line 18) | constructor(e){this.Reveal=e,this.state="idle",this.registeredPlugins=...
    method load (line 18) | load(e,i){return this.state="loading",e.forEach(this.registerPlugin.bi...
    method initPlugins (line 18) | initPlugins(){return new Promise(e=>{let i=Object.values(this.register...
    method loadAsync (line 18) | loadAsync(){return this.state="loaded",this.asyncDependencies.length&&...
    method registerPlugin (line 18) | registerPlugin(e){arguments.length===2&&typeof arguments[0]=="string"?...
    method hasPlugin (line 18) | hasPlugin(e){return!!this.registeredPlugins[e]}
    method getPlugin (line 18) | getPlugin(e){return this.registeredPlugins[e]}
    method getRegisteredPlugins (line 18) | getRegisteredPlugins(){return this.registeredPlugins}
    method destroy (line 18) | destroy(){Object.values(this.registeredPlugins).forEach(e=>{typeof e.d...
  class bi (line 18) | class bi{constructor(e){this.Reveal=e,this.onSlidesClicked=this.onSlides...
    method constructor (line 18) | constructor(e){this.Reveal=e,this.onSlidesClicked=this.onSlidesClicked...
    method update (line 18) | update(){this.Reveal.getConfig().previewLinks?this.iframeTriggerSelect...
    method createOverlay (line 18) | createOverlay(e){this.dom=document.createElement("div"),this.dom.class...
    method previewIframe (line 18) | previewIframe(e){this.close(),this.state={previewIframe:e},this.create...
    method previewMedia (line 28) | previewMedia(e,i,t){if(i!=="image"&&i!=="video"){console.warn("Please ...
    method previewImage (line 32) | previewImage(e,i){this.previewMedia(e,"image",i)}
    method previewVideo (line 32) | previewVideo(e,i){this.previewMedia(e,"video",i)}
    method toggleHelp (line 32) | toggleHelp(e){typeof e=="boolean"?e?this.showHelp():this.close():this....
    method showHelp (line 32) | showHelp(){if(this.Reveal.getConfig().help){this.close(),this.createOv...
    method isOpen (line 39) | isOpen(){return!!this.dom}
    method close (line 39) | close(){return this.dom?(this.dom.remove(),this.dom=null,this.state={}...
    method getState (line 39) | getState(){return this.state}
    method setState (line 39) | setState(e){this.stateProps.every(i=>this.state[i]===e[i])||(e.preview...
    method onSlidesClicked (line 39) | onSlidesClicked(e){const i=e.target,t=i.closest(this.iframeTriggerSele...
    method destroy (line 39) | destroy(){this.close()}
  class wi (line 39) | class wi{constructor(e){this.Reveal=e,this.touchStartX=0,this.touchStart...
    method constructor (line 39) | constructor(e){this.Reveal=e,this.touchStartX=0,this.touchStartY=0,thi...
    method bind (line 39) | bind(){let e=this.Reveal.getRevealElement();"onpointerdown"in window?(...
    method unbind (line 39) | unbind(){let e=this.Reveal.getRevealElement();e.removeEventListener("p...
    method isSwipePrevented (line 39) | isSwipePrevented(e){if(ve(e,"video[controls], audio[controls]"))return...
    method onTouchStart (line 39) | onTouchStart(e){if(this.touchCaptured=!1,this.isSwipePrevented(e.targe...
    method onTouchMove (line 39) | onTouchMove(e){if(this.isSwipePrevented(e.target))return!0;let i=this....
    method onTouchEnd (line 39) | onTouchEnd(e){this.touchCaptured&&!this.Reveal.slideContent.isAllowedT...
    method onPointerDown (line 39) | onPointerDown(e){(e.pointerType===e.MSPOINTER_TYPE_TOUCH||e.pointerTyp...
    method onPointerMove (line 39) | onPointerMove(e){(e.pointerType===e.MSPOINTER_TYPE_TOUCH||e.pointerTyp...
    method onPointerUp (line 39) | onPointerUp(e){(e.pointerType===e.MSPOINTER_TYPE_TOUCH||e.pointerType=...
  class Ei (line 39) | class Ei{constructor(e){this.Reveal=e,this.onRevealPointerDown=this.onRe...
    method constructor (line 39) | constructor(e){this.Reveal=e,this.onRevealPointerDown=this.onRevealPoi...
    method configure (line 39) | configure(e,i){e.embedded?this.blur():(this.focus(),this.unbind())}
    method bind (line 39) | bind(){this.Reveal.getConfig().embedded&&this.Reveal.getRevealElement(...
    method unbind (line 39) | unbind(){this.Reveal.getRevealElement().removeEventListener("pointerdo...
    method focus (line 39) | focus(){this.state!==Fe&&(this.Reveal.getRevealElement().classList.add...
    method blur (line 39) | blur(){this.state!==rt&&(this.Reveal.getRevealElement().classList.remo...
    method isFocused (line 39) | isFocused(){return this.state===Fe}
    method destroy (line 39) | destroy(){this.Reveal.getRevealElement().classList.remove("focused")}
    method onRevealPointerDown (line 39) | onRevealPointerDown(e){this.focus()}
    method onDocumentPointerDown (line 39) | onDocumentPointerDown(e){let i=V(e.target,".reveal");(!i||i!==this.Rev...
  class Si (line 39) | class Si{constructor(e){this.Reveal=e}render(){this.element=document.cre...
    method constructor (line 39) | constructor(e){this.Reveal=e}
    method render (line 39) | render(){this.element=document.createElement("div"),this.element.class...
    method configure (line 39) | configure(e,i){e.showNotes&&this.element.setAttribute("data-layout",ty...
    method update (line 39) | update(){this.Reveal.getConfig().showNotes&&this.element&&this.Reveal....
    method updateVisibility (line 39) | updateVisibility(){this.Reveal.getConfig().showNotes&&this.hasNotes()&...
    method hasNotes (line 39) | hasNotes(){return this.Reveal.getSlidesElement().querySelectorAll("[da...
    method isSpeakerNotesWindow (line 39) | isSpeakerNotesWindow(){return!!window.location.search.match(/receiver/...
    method getSlideNotes (line 39) | getSlideNotes(e=this.Reveal.getCurrentSlide()){if(e.hasAttribute("data...
    method destroy (line 40) | destroy(){this.element.remove()}
  class Ai (line 40) | class Ai{constructor(e,i){this.diameter=100,this.diameter2=this.diameter...
    method constructor (line 40) | constructor(e,i){this.diameter=100,this.diameter2=this.diameter/2,this...
    method setPlaying (line 40) | setPlaying(e){const i=this.playing;this.playing=e,!i&&this.playing?thi...
    method animate (line 40) | animate(){const e=this.progress;this.progress=this.progressCheck(),e>....
    method render (line 40) | render(){let e=this.playing?this.progress:0,i=this.diameter2-this.thic...
    method on (line 40) | on(e,i){this.canvas.addEventListener(e,i,!1)}
    method off (line 40) | off(e,i){this.canvas.removeEventListener(e,i,!1)}
    method destroy (line 40) | destroy(){this.playing=!1,this.canvas.parentNode&&this.container.remov...
  function ot (line 40) | function ot(h,e){arguments.length<2&&(e=arguments[0],h=document.querySel...

FILE: dist/reveal.mjs
  function F (line 179) | function F(f, S) {
  function C (line 188) | function C(f) {
  class Ci (line 193) | class Ci {
    method constructor (line 194) | constructor(e) {
    method renderMediaPlayButton (line 198) | renderMediaPlayButton() {
    method shouldPreload (line 215) | shouldPreload(e) {
    method load (line 228) | load(e, i = {}) {
    method layout (line 277) | layout(e) {
    method unload (line 293) | unload(e) {
    method formatEmbeddedContent (line 307) | formatEmbeddedContent() {
    method startEmbeddedContent (line 322) | startEmbeddedContent(e) {
    method ensureMobileMediaPlaying (line 353) | ensureMobileMediaPlaying(e) {
    method startEmbeddedMedia (line 366) | startEmbeddedMedia(e) {
    method playMediaElement (line 377) | playMediaElement(e) {
    method startEmbeddedIframe (line 398) | startEmbeddedIframe(e) {
    method stopEmbeddedContent (line 414) | stopEmbeddedContent(e, i = {}) {
    method isAllowedToPlayAudio (line 435) | isAllowedToPlayAudio() {
    method showPlayOrUnmuteButton (line 442) | showPlayOrUnmuteButton() {
    method onAudioPlaybackNotAllowed (line 447) | onAudioPlaybackNotAllowed(e) {
    method onVideoPlaybackNotAllowed (line 450) | onVideoPlaybackNotAllowed(e) {
    method onMutedVideoPlaybackNotAllowed (line 453) | onMutedVideoPlaybackNotAllowed(e) {
    method resetTemporarilyMutedMedia (line 461) | resetTemporarilyMutedMedia() {
    method clearMediaPlaybackErrors (line 470) | clearMediaPlaybackErrors() {
    method preventIframeAutoFocus (line 478) | preventIframeAutoFocus(e) {
    method afterSlideChanged (line 488) | afterSlideChanged() {
  class Ii (line 493) | class Ii {
    method constructor (line 494) | constructor(e) {
    method render (line 497) | render() {
    method configure (line 503) | configure(e, i) {
    method update (line 510) | update() {
    method getSlideNumber (line 517) | getSlideNumber(e = this.Reveal.getCurrentSlide()) {
    method formatNumber (line 551) | formatNumber(e, i, t, s = "#" + this.Reveal.location.getHash()) {
    method destroy (line 560) | destroy() {
  class Mi (line 564) | class Mi {
    method constructor (line 565) | constructor(e) {
    method render (line 568) | render() {
    method show (line 571) | show() {
    method hide (line 574) | hide() {
    method isVisible (line 577) | isVisible() {
    method jump (line 583) | jump() {
    method jumpAfter (line 595) | jumpAfter(e) {
    method search (line 602) | search(e) {
    method cancel (line 610) | cancel() {
    method confirm (line 613) | confirm() {
    method destroy (line 616) | destroy() {
    method onKeyDown (line 619) | onKeyDown(e) {
    method onInput (line 622) | onInput(e) {
    method onBlur (line 625) | onBlur() {
  class Bi (line 665) | class Bi {
    method constructor (line 666) | constructor(e) {
    method render (line 669) | render() {
    method create (line 677) | create() {
    method createBackground (line 695) | createBackground(e, i) {
    method sync (line 707) | sync(e) {
    method getContrastClass (line 733) | getContrastClass(e) {
    method bubbleSlideContrastClassToElement (line 750) | bubbleSlideContrastClassToElement(e, i) {
    method update (line 762) | update(e = !1) {
    method updateParallax (line 799) | updateParallax() {
    method destroy (line 810) | destroy() {
  class Hi (line 815) | class Hi {
    method constructor (line 816) | constructor(e) {
    method run (line 825) | run(e, i) {
    method reset (line 858) | reset() {
    method autoAnimateElements (line 877) | autoAnimateElements(e, i, t, s, a) {
    method getAutoAnimateOptions (line 916) | getAutoAnimateOptions(e, i) {
    method getAutoAnimatableProperties (line 935) | getAutoAnimatableProperties(e, i, t) {
    method getAutoAnimatableElements (line 971) | getAutoAnimatableElements(e, i) {
    method getAutoAnimatePairs (line 984) | getAutoAnimatePairs(e, i) {
    method getLocalBoundingBox (line 1006) | getLocalBoundingBox(e) {
    method findAutoAnimateMatches (line 1026) | findAutoAnimateMatches(e, i, t, s, a, r) {
    method getUnmatchedAutoAnimateElements (line 1058) | getUnmatchedAutoAnimateElements(e) {
  class Oi (line 1066) | class Oi {
    method constructor (line 1067) | constructor(e) {
    method activate (line 1074) | activate() {
    method deactivate (line 1110) | deactivate() {
    method toggle (line 1115) | toggle(e) {
    method isActive (line 1121) | isActive() {
    method createProgressBar (line 1127) | createProgressBar() {
    method removeProgressBar (line 1139) | removeProgressBar() {
    method layout (line 1142) | layout() {
    method syncPages (line 1149) | syncPages() {
    method setTriggerRanges (line 1181) | setTriggerRanges() {
    method createFragmentTriggersForPage (line 1203) | createFragmentTriggersForPage(e, i) {
    method createAutoAnimateTriggersForPage (line 1227) | createAutoAnimateTriggersForPage(e) {
    method createPage (line 1245) | createPage(e) {
    method syncProgressBar (line 1252) | syncProgressBar() {
    method syncScrollPosition (line 1269) | syncScrollPosition() {
    method setProgressBarValue (line 1284) | setProgressBarValue(e) {
    method showProgressBar (line 1295) | showProgressBar() {
    method prev (line 1303) | prev() {
    method next (line 1309) | next() {
    method scrollToSlide (line 1317) | scrollToSlide(e) {
    method storeScrollPosition (line 1329) | storeScrollPosition() {
    method restoreScrollPosition (line 1337) | restoreScrollPosition() {
    method activatePage (line 1347) | activatePage(e) {
    method deactivatePage (line 1361) | deactivatePage(e) {
    method activateTrigger (line 1364) | activateTrigger(e) {
    method deactivateTrigger (line 1367) | deactivateTrigger(e) {
    method getSlideByIndices (line 1378) | getSlideByIndices(e, i) {
    method getScrollTriggerBySlide (line 1389) | getScrollTriggerBySlide(e) {
    method getAllPages (line 1398) | getAllPages() {
    method onScroll (line 1401) | onScroll() {
    method viewportElement (line 1404) | get viewportElement() {
  class Ui (line 1408) | class Ui {
    method constructor (line 1409) | constructor(e) {
    method activate (line 1416) | activate() {
    method isActive (line 1478) | isActive() {
  class qi (line 1482) | class qi {
    method constructor (line 1483) | constructor(e) {
    method configure (line 1489) | configure(e, i) {
    method disable (line 1496) | disable() {
    method enable (line 1505) | enable() {
    method availableRoutes (line 1516) | availableRoutes() {
    method sort (line 1546) | sort(e, i = !1) {
    method sortAll (line 1567) | sortAll() {
    method update (line 1585) | update(e, i, t = this.Reveal.getCurrentSlide()) {
    method sync (line 1636) | sync(e = this.Reveal.getCurrentSlide()) {
    method goto (line 1650) | goto(e, i = 0) {
    method next (line 1672) | next() {
    method prev (line 1681) | prev() {
  class Wi (line 1685) | class Wi {
    method constructor (line 1686) | constructor(e) {
    method activate (line 1693) | activate() {
    method layout (line 1715) | layout() {
    method update (line 1730) | update() {
    method deactivate (line 1744) | deactivate() {
    method toggle (line 1771) | toggle(e) {
    method isActive (line 1780) | isActive() {
    method onSlideClicked (line 1788) | onSlideClicked(e) {
  class ji (line 1801) | class ji {
    method constructor (line 1802) | constructor(e) {
    method configure (line 1808) | configure(e, i) {
    method bind (line 1814) | bind() {
    method unbind (line 1820) | unbind() {
    method addKeyBinding (line 1827) | addKeyBinding(e, i) {
    method removeKeyBinding (line 1841) | removeKeyBinding(e) {
    method triggerKey (line 1849) | triggerKey(e) {
    method registerKeyboardShortcut (line 1858) | registerKeyboardShortcut(e, i) {
    method getShortcuts (line 1861) | getShortcuts() {
    method getBindings (line 1864) | getBindings() {
    method onDocumentKeyDown (line 1872) | onDocumentKeyDown(e) {
  class Ki (line 1904) | class Ki {
    method constructor (line 1905) | constructor(e) {
    method bind (line 1911) | bind() {
    method unbind (line 1914) | unbind() {
    method getIndicesFromHash (line 1925) | getIndicesFromHash(e = window.location.hash, i = {}) {
    method readURL (line 1947) | readURL() {
    method writeURL (line 1958) | writeURL(e) {
    method replaceState (line 1967) | replaceState(e) {
    method debouncedReplaceState (line 1970) | debouncedReplaceState(e) {
    method getHash (line 1978) | getHash(e) {
    method onWindowHashChange (line 1995) | onWindowHashChange(e) {
  class _i (line 1999) | class _i {
    method constructor (line 2000) | constructor(e) {
    method render (line 2003) | render() {
    method configure (line 2013) | configure(e, i) {
    method bind (line 2017) | bind() {
    method unbind (line 2023) | unbind() {
    method update (line 2031) | update() {
    method destroy (line 2072) | destroy() {
    method onNavigateLeftClicked (line 2078) | onNavigateLeftClicked(e) {
    method onNavigateRightClicked (line 2081) | onNavigateRightClicked(e) {
    method onNavigateUpClicked (line 2084) | onNavigateUpClicked(e) {
    method onNavigateDownClicked (line 2087) | onNavigateDownClicked(e) {
    method onNavigatePrevClicked (line 2090) | onNavigatePrevClicked(e) {
    method onNavigateNextClicked (line 2093) | onNavigateNextClicked(e) {
    method onEnterFullscreen (line 2096) | onEnterFullscreen(e) {
  class $i (line 2101) | class $i {
    method constructor (line 2102) | constructor(e) {
    method render (line 2105) | render() {
    method configure (line 2111) | configure(e, i) {
    method bind (line 2114) | bind() {
    method unbind (line 2117) | unbind() {
    method update (line 2123) | update() {
    method getMaxWidth (line 2129) | getMaxWidth() {
    method onProgressClicked (line 2140) | onProgressClicked(e) {
    method destroy (line 2147) | destroy() {
  class Xi (line 2151) | class Xi {
    method constructor (line 2152) | constructor(e) {
    method configure (line 2158) | configure(e, i) {
    method showCursor (line 2165) | showCursor() {
    method hideCursor (line 2172) | hideCursor() {
    method destroy (line 2175) | destroy() {
    method onDocumentCursorActive (line 2184) | onDocumentCursorActive(e) {
    method onDocumentMouseScroll (line 2193) | onDocumentMouseScroll(e) {
  class Yi (line 2212) | class Yi {
    method constructor (line 2213) | constructor(e) {
    method load (line 2229) | load(e, i) {
    method initPlugins (line 2250) | initPlugins() {
    method loadAsync (line 2273) | loadAsync() {
    method registerPlugin (line 2285) | registerPlugin(e) {
    method hasPlugin (line 2295) | hasPlugin(e) {
    method getPlugin (line 2304) | getPlugin(e) {
    method getRegisteredPlugins (line 2307) | getRegisteredPlugins() {
    method destroy (line 2310) | destroy() {
  class Gi (line 2316) | class Gi {
    method constructor (line 2317) | constructor(e) {
    method update (line 2320) | update() {
    method createOverlay (line 2325) | createOverlay(e) {
    method previewIframe (line 2333) | previewIframe(e) {
    method previewMedia (line 2360) | previewMedia(e, i, t) {
    method previewImage (line 2395) | previewImage(e, i) {
    method previewVideo (line 2398) | previewVideo(e, i) {
    method toggleHelp (line 2408) | toggleHelp(e) {
    method showHelp (line 2414) | showHelp() {
    method isOpen (line 2435) | isOpen() {
    method close (line 2441) | close() {
    method getState (line 2444) | getState() {
    method setState (line 2447) | setState(e) {
    method onSlidesClicked (line 2450) | onSlidesClicked(e) {
    method destroy (line 2472) | destroy() {
  class Ji (line 2477) | class Ji {
    method constructor (line 2478) | constructor(e) {
    method bind (line 2484) | bind() {
    method unbind (line 2491) | unbind() {
    method isSwipePrevented (line 2499) | isSwipePrevented(e) {
    method onTouchStart (line 2513) | onTouchStart(e) {
    method onTouchMove (line 2522) | onTouchMove(e) {
    method onTouchEnd (line 2541) | onTouchEnd(e) {
    method onPointerDown (line 2549) | onPointerDown(e) {
    method onPointerMove (line 2557) | onPointerMove(e) {
    method onPointerUp (line 2565) | onPointerUp(e) {
  class Qi (line 2570) | class Qi {
    method constructor (line 2571) | constructor(e) {
    method configure (line 2577) | configure(e, i) {
    method bind (line 2580) | bind() {
    method unbind (line 2583) | unbind() {
    method focus (line 2586) | focus() {
    method blur (line 2589) | blur() {
    method isFocused (line 2592) | isFocused() {
    method destroy (line 2595) | destroy() {
    method onRevealPointerDown (line 2598) | onRevealPointerDown(e) {
    method onDocumentPointerDown (line 2601) | onDocumentPointerDown(e) {
  class Zi (line 2606) | class Zi {
    method constructor (line 2607) | constructor(e) {
    method render (line 2610) | render() {
    method configure (line 2616) | configure(e, i) {
    method update (line 2625) | update() {
    method updateVisibility (line 2634) | updateVisibility() {
    method hasNotes (line 2641) | hasNotes() {
    method isSpeakerNotesWindow (line 2650) | isSpeakerNotesWindow() {
    method getSlideNotes (line 2662) | getSlideNotes(e = this.Reveal.getCurrentSlide()) {
    method destroy (line 2669) | destroy() {
  class es (line 2673) | class es {
    method constructor (line 2681) | constructor(e, i) {
    method setPlaying (line 2684) | setPlaying(e) {
    method animate (line 2688) | animate() {
    method render (line 2695) | render() {
    method on (line 2701) | on(e, i) {
    method off (line 2704) | off(e, i) {
    method destroy (line 2707) | destroy() {
  function Ut (line 2802) | function Ut(c, e) {

FILE: dist/utils/util.d.ts
  type DeserializedValue (line 17) | type DeserializedValue = string | number | boolean | null;

FILE: js/components/playback.js
  class Playback (line 5) | class Playback {
    method constructor (line 14) | constructor( container, progressCheck ) {
    method setPlaying (line 47) | setPlaying( value ) {
    method animate (line 63) | animate() {
    method render (line 86) | render() {
    method on (line 147) | on( type, listener ) {
    method off (line 151) | off( type, listener ) {
    method destroy (line 155) | destroy() {

FILE: js/config.ts
  type TransitionStyle (line 6) | type TransitionStyle = 'none' | 'fade' | 'slide' | 'convex' | 'concave' ...
  type TransitionSpeed (line 13) | type TransitionSpeed = 'default' | 'fast' | 'slow';
  type FragmentAnimation (line 20) | type FragmentAnimation =
  type KatexConfig (line 45) | interface KatexConfig {
  type Mathjax2Config (line 58) | interface Mathjax2Config {
  type Mathjax3Config (line 73) | interface Mathjax3Config {
  type Mathjax4Config (line 85) | interface Mathjax4Config {
  type HighlightConfig (line 115) | interface HighlightConfig {
  type MarkdownConfig (line 127) | interface MarkdownConfig {
  type RevealConfig (line 158) | interface RevealConfig {

FILE: js/controllers/autoanimate.js
  class AutoAnimate (line 10) | class AutoAnimate {
    method constructor (line 12) | constructor( Reveal ) {
    method run (line 24) | run( fromSlide, toSlide ) {
    method reset (line 128) | reset() {
    method autoAnimateElements (line 160) | autoAnimateElements( from, to, elementOptions, animationOptions, id ) {
    method getAutoAnimateOptions (line 292) | getAutoAnimateOptions( element, inheritedOptions ) {
    method getAutoAnimatableProperties (line 333) | getAutoAnimatableProperties( direction, element, elementOptions ) {
    method getAutoAnimatableElements (line 418) | getAutoAnimatableElements( fromSlide, toSlide ) {
    method getAutoAnimatePairs (line 442) | getAutoAnimatePairs( fromSlide, toSlide ) {
    method getLocalBoundingBox (line 516) | getLocalBoundingBox( element ) {
    method findAutoAnimateMatches (line 540) | findAutoAnimateMatches( pairs, fromScope, toScope, selector, serialize...
    method getUnmatchedAutoAnimateElements (line 603) | getUnmatchedAutoAnimateElements( rootElement ) {

FILE: js/controllers/backgrounds.js
  class Backgrounds (line 7) | class Backgrounds {
    method constructor (line 9) | constructor( Reveal ) {
    method render (line 15) | render() {
    method create (line 28) | create() {
    method createBackground (line 84) | createBackground( slide, container ) {
    method sync (line 113) | sync( slide ) {
    method getContrastClass (line 209) | getContrastClass( slide ) {
    method bubbleSlideContrastClassToElement (line 249) | bubbleSlideContrastClassToElement( slide, target ) {
    method update (line 269) | update( includeAll = false ) {
    method updateParallax (line 410) | updateParallax() {
    method destroy (line 464) | destroy() {

FILE: js/controllers/controls.js
  class Controls (line 17) | class Controls {
    method constructor (line 19) | constructor( Reveal ) {
    method render (line 33) | render() {
    method configure (line 67) | configure( config, oldConfig ) {
    method bind (line 81) | bind() {
    method unbind (line 106) | unbind() {
    method update (line 123) | update() {
    method destroy (line 207) | destroy() {
    method onNavigateLeftClicked (line 217) | onNavigateLeftClicked( event ) {
    method onNavigateRightClicked (line 231) | onNavigateRightClicked( event ) {
    method onNavigateUpClicked (line 245) | onNavigateUpClicked( event ) {
    method onNavigateDownClicked (line 254) | onNavigateDownClicked( event ) {
    method onNavigatePrevClicked (line 263) | onNavigatePrevClicked( event ) {
    method onNavigateNextClicked (line 272) | onNavigateNextClicked( event ) {
    method onEnterFullscreen (line 281) | onEnterFullscreen( event ) {

FILE: js/controllers/focus.js
  constant STATE_FOCUS (line 10) | const STATE_FOCUS = 'focus';
  constant STATE_BLUR (line 11) | const STATE_BLUR = 'blur';
  class Focus (line 13) | class Focus {
    method constructor (line 15) | constructor( Reveal ) {
    method configure (line 27) | configure( config, oldConfig ) {
    method bind (line 39) | bind() {
    method unbind (line 47) | unbind() {
    method focus (line 54) | focus() {
    method blur (line 65) | blur() {
    method isFocused (line 76) | isFocused() {
    method destroy (line 82) | destroy() {
    method onRevealPointerDown (line 88) | onRevealPointerDown( event ) {
    method onDocumentPointerDown (line 94) | onDocumentPointerDown( event ) {

FILE: js/controllers/fragments.js
  class Fragments (line 8) | class Fragments {
    method constructor (line 10) | constructor( Reveal ) {
    method configure (line 19) | configure( config, oldConfig ) {
    method disable (line 34) | disable() {
    method enable (line 47) | enable() {
    method availableRoutes (line 62) | availableRoutes() {
    method sort (line 99) | sort( fragments, grouped = false ) {
    method sortAll (line 150) | sortAll() {
    method update (line 177) | update( index, fragments, slide = this.Reveal.getCurrentSlide() ) {
    method sync (line 292) | sync( slide = this.Reveal.getCurrentSlide() ) {
    method goto (line 309) | goto( index, offset = 0 ) {
    method next (line 357) | next() {
    method prev (line 369) | prev() {

FILE: js/controllers/jumptoslide.js
  class JumpToSlide (line 10) | class JumpToSlide {
    method constructor (line 12) | constructor( Reveal ) {
    method render (line 22) | render() {
    method show (line 39) | show() {
    method hide (line 48) | hide() {
    method isVisible (line 60) | isVisible() {
    method jump (line 69) | jump() {
    method jumpAfter (line 116) | jumpAfter( delay ) {
    method search (line 127) | search( query ) {
    method cancel (line 148) | cancel() {
    method confirm (line 155) | confirm() {
    method destroy (line 162) | destroy() {
    method onKeyDown (line 172) | onKeyDown( event ) {
    method onInput (line 185) | onInput( event ) {
    method onBlur (line 191) | onBlur() {

FILE: js/controllers/keyboard.js
  class Keyboard (line 6) | class Keyboard {
    method constructor (line 8) | constructor( Reveal ) {
    method configure (line 26) | configure( config, oldConfig ) {
    method bind (line 53) | bind() {
    method unbind (line 62) | unbind() {
    method addKeyBinding (line 72) | addKeyBinding( binding, callback ) {
    method removeKeyBinding (line 94) | removeKeyBinding( keyCode ) {
    method triggerKey (line 105) | triggerKey( keyCode ) {
    method registerKeyboardShortcut (line 117) | registerKeyboardShortcut( key, value ) {
    method getShortcuts (line 123) | getShortcuts() {
    method getBindings (line 129) | getBindings() {
    method onDocumentKeyDown (line 140) | onDocumentKeyDown( event ) {

FILE: js/controllers/location.js
  class Location (line 4) | class Location {
    method constructor (line 10) | constructor( Reveal ) {
    method bind (line 23) | bind() {
    method unbind (line 29) | unbind() {
    method getIndicesFromHash (line 43) | getIndicesFromHash( hash=window.location.hash, options={} ) {
    method readURL (line 104) | readURL() {
    method writeURL (line 129) | writeURL( delay ) {
    method replaceState (line 176) | replaceState( url ) {
    method debouncedReplaceState (line 183) | debouncedReplaceState( url ) {
    method getHash (line 201) | getHash( slide ) {
    method onWindowHashChange (line 243) | onWindowHashChange( event ) {

FILE: js/controllers/notes.js
  class Notes (line 4) | class Notes {
    method constructor (line 6) | constructor( Reveal ) {
    method render (line 12) | render() {
    method configure (line 25) | configure( config, oldConfig ) {
    method update (line 39) | update() {
    method updateVisibility (line 57) | updateVisibility() {
    method hasNotes (line 76) | hasNotes() {
    method isSpeakerNotesWindow (line 88) | isSpeakerNotesWindow() {
    method getSlideNotes (line 103) | getSlideNotes( slide = this.Reveal.getCurrentSlide() ) {
    method destroy (line 120) | destroy() {

FILE: js/controllers/overlay.js
  class Overlay (line 5) | class Overlay {
    method constructor (line 7) | constructor( Reveal ) {
    method update (line 21) | update() {
    method createOverlay (line 45) | createOverlay( className ) {
    method previewIframe (line 64) | previewIframe( url ) {
    method previewMedia (line 111) | previewMedia( url, mediaType, fitMode ) {
    method previewImage (line 199) | previewImage( url, fitMode ) {
    method previewVideo (line 205) | previewVideo( url, fitMode ) {
    method toggleHelp (line 218) | toggleHelp( override ) {
    method showHelp (line 236) | showHelp() {
    method isOpen (line 283) | isOpen() {
    method close (line 292) | close() {
    method getState (line 309) | getState() {
    method setState (line 315) | setState( state ) {
    method onSlidesClicked (line 338) | onSlidesClicked( event ) {
    method destroy (line 385) | destroy() {

FILE: js/controllers/overview.js
  class Overview (line 8) | class Overview {
    method constructor (line 10) | constructor( Reveal ) {
    method activate (line 24) | activate() {
    method layout (line 85) | layout() {
    method update (line 119) | update() {
    method deactivate (line 139) | deactivate() {
    method toggle (line 200) | toggle( override ) {
    method isActive (line 217) | isActive() {
    method onSlideClicked (line 228) | onSlideClicked( event ) {

FILE: js/controllers/plugins.js
  class Plugins (line 6) | class Plugins {
    method constructor (line 8) | constructor( reveal ) {
    method load (line 35) | load( plugins, dependencies ) {
    method initPlugins (line 96) | initPlugins() {
    method loadAsync (line 157) | loadAsync() {
    method registerPlugin (line 178) | registerPlugin( plugin ) {
    method hasPlugin (line 216) | hasPlugin( id ) {
    method getPlugin (line 228) | getPlugin( id ) {
    method getRegisteredPlugins (line 234) | getRegisteredPlugins() {
    method destroy (line 240) | destroy() {

FILE: js/controllers/pointer.js
  class Pointer (line 4) | class Pointer {
    method constructor (line 6) | constructor( Reveal ) {
    method configure (line 27) | configure( config, oldConfig ) {
    method showCursor (line 54) | showCursor() {
    method hideCursor (line 67) | hideCursor() {
    method destroy (line 76) | destroy() {
    method onDocumentCursorActive (line 92) | onDocumentCursorActive( event ) {
    method onDocumentMouseScroll (line 108) | onDocumentMouseScroll( event ) {

FILE: js/controllers/printview.js
  class PrintView (line 7) | class PrintView {
    method constructor (line 9) | constructor( Reveal ) {
    method activate (line 19) | async activate() {
    method isActive (line 233) | isActive() {

FILE: js/controllers/progress.js
  class Progress (line 4) | class Progress {
    method constructor (line 6) | constructor( Reveal ) {
    method render (line 14) | render() {
    method configure (line 28) | configure( config, oldConfig ) {
    method bind (line 34) | bind() {
    method unbind (line 42) | unbind() {
    method update (line 53) | update() {
    method getMaxWidth (line 71) | getMaxWidth() {
    method onProgressClicked (line 85) | onProgressClicked( event ) {
    method destroy (line 104) | destroy() {

FILE: js/controllers/scrollview.js
  constant HIDE_SCROLLBAR_TIMEOUT (line 4) | const HIDE_SCROLLBAR_TIMEOUT = 500;
  constant MAX_PROGRESS_SPACING (line 5) | const MAX_PROGRESS_SPACING = 4;
  constant MIN_PROGRESS_SEGMENT_HEIGHT (line 6) | const MIN_PROGRESS_SEGMENT_HEIGHT = 6;
  constant MIN_PLAYHEAD_HEIGHT (line 7) | const MIN_PLAYHEAD_HEIGHT = 8;
  class ScrollView (line 13) | class ScrollView {
    method constructor (line 15) | constructor( Reveal ) {
    method activate (line 30) | activate() {
    method deactivate (line 163) | deactivate() {
    method toggle (line 184) | toggle( override ) {
    method isActive (line 198) | isActive() {
    method createProgressBar (line 207) | createProgressBar() {
    method removeProgressBar (line 258) | removeProgressBar() {
    method layout (line 267) | layout() {
    method syncPages (line 280) | syncPages() {
    method setTriggerRanges (line 423) | setTriggerRanges() {
    method createFragmentTriggersForPage (line 463) | createFragmentTriggersForPage( page, slideElement ) {
    method createAutoAnimateTriggersForPage (line 505) | createAutoAnimateTriggersForPage( page ) {
    method createPage (line 537) | createPage( page ) {
    method syncProgressBar (line 551) | syncProgressBar() {
    method syncScrollPosition (line 613) | syncScrollPosition() {
    method setProgressBarValue (line 675) | setProgressBarValue( progress ) {
    method showProgressBar (line 701) | showProgressBar() {
    method prev (line 722) | prev() {
    method next (line 731) | next() {
    method scrollToSlide (line 742) | scrollToSlide( slideElement ) {
    method storeScrollPosition (line 764) | storeScrollPosition() {
    method restoreScrollPosition (line 780) | restoreScrollPosition() {
    method activatePage (line 797) | activatePage( page ) {
    method deactivatePage (line 834) | deactivatePage( page ) {
    method activateTrigger (line 846) | activateTrigger( trigger ) {
    method deactivateTrigger (line 855) | deactivateTrigger( trigger ) {
    method getSlideByIndices (line 875) | getSlideByIndices( h, v ) {
    method getScrollTriggerBySlide (line 892) | getScrollTriggerBySlide( slide ) {
    method getAllPages (line 904) | getAllPages() {
    method onScroll (line 910) | onScroll() {
    method viewportElement (line 917) | get viewportElement() {

FILE: js/controllers/slidecontent.js
  class SlideContent (line 10) | class SlideContent {
    method constructor (line 14) | constructor( Reveal ) {
    method renderMediaPlayButton (line 31) | renderMediaPlayButton() {
    method shouldPreload (line 59) | shouldPreload( element ) {
    method load (line 84) | load( slide, options = {} ) {
    method layout (line 238) | layout( scopeElement ) {
    method unload (line 260) | unload( slide ) {
    method formatEmbeddedContent (line 293) | formatEmbeddedContent() {
    method startEmbeddedContent (line 320) | startEmbeddedContent( element ) {
    method ensureMobileMediaPlaying (line 416) | ensureMobileMediaPlaying( event ) {
    method startEmbeddedMedia (line 445) | startEmbeddedMedia( event ) {
    method playMediaElement (line 469) | playMediaElement( mediaElement ) {
    method startEmbeddedIframe (line 517) | startEmbeddedIframe( event ) {
    method stopEmbeddedContent (line 564) | stopEmbeddedContent( element, options = {} ) {
    method isAllowedToPlayAudio (line 623) | isAllowedToPlayAudio() {
    method showPlayOrUnmuteButton (line 633) | showPlayOrUnmuteButton() {
    method onAudioPlaybackNotAllowed (line 657) | onAudioPlaybackNotAllowed( target ) {
    method onVideoPlaybackNotAllowed (line 664) | onVideoPlaybackNotAllowed( target ) {
    method onMutedVideoPlaybackNotAllowed (line 671) | onMutedVideoPlaybackNotAllowed( target ) {
    method resetTemporarilyMutedMedia (line 683) | resetTemporarilyMutedMedia() {
    method clearMediaPlaybackErrors (line 700) | clearMediaPlaybackErrors() {
    method preventIframeAutoFocus (line 716) | preventIframeAutoFocus( event ) {
    method afterSlideChanged (line 740) | afterSlideChanged() {

FILE: js/controllers/slidenumber.js
  class SlideNumber (line 11) | class SlideNumber {
    method constructor (line 13) | constructor( Reveal ) {
    method render (line 19) | render() {
    method configure (line 30) | configure( config, oldConfig ) {
    method update (line 49) | update() {
    method getSlideNumber (line 62) | getSlideNumber( slide = this.Reveal.getCurrentSlide() ) {
    method formatNumber (line 116) | formatNumber( a, delimiter, b, url = '#' + this.Reveal.location.getHas...
    method destroy (line 133) | destroy() {

FILE: js/controllers/touch.js
  constant SWIPE_THRESHOLD (line 4) | const SWIPE_THRESHOLD = 40;
  class Touch (line 10) | class Touch {
    method constructor (line 12) | constructor( Reveal ) {
    method bind (line 34) | bind() {
    method unbind (line 62) | unbind() {
    method isSwipePrevented (line 84) | isSwipePrevented( target ) {
    method onTouchStart (line 104) | onTouchStart( event ) {
    method onTouchMove (line 121) | onTouchMove( event ) {
    method onTouchEnd (line 217) | onTouchEnd( event ) {
    method onPointerDown (line 236) | onPointerDown( event ) {
    method onPointerMove (line 250) | onPointerMove( event ) {
    method onPointerUp (line 264) | onPointerUp( event ) {

FILE: js/index.ts
  type RevealApiFunction (line 36) | type RevealApiFunction = (deck: RevealApi) => any;

FILE: js/reveal.d.ts
  type RevealApi (line 52) | interface RevealApi {
  type NavigateParams (line 793) | interface NavigateParams {
  type NavigationFunction (line 797) | type NavigationFunction = (params?: NavigateParams) => void;
  type MultiplexConfig (line 804) | interface MultiplexConfig {
  type RevealDependency (line 818) | interface RevealDependency {
  type ComputedSlideSize (line 825) | interface ComputedSlideSize {
  type RevealState (line 832) | interface RevealState {
  type SlideSyncEvent (line 860) | interface SlideSyncEvent extends Event {
  type RevealPlugin (line 870) | interface RevealPlugin {
  type RevealPluginFactory (line 876) | type RevealPluginFactory = () => RevealPlugin;

FILE: js/reveal.js
  function initialize (line 130) | function initialize( initOptions ) {
  function setViewport (line 174) | function setViewport() {
  function start (line 194) | function start() {
  function activateInitialView (line 255) | function activateInitialView() {
  function removeHiddenSlides (line 297) | function removeHiddenSlides() {
  function setupDOM (line 323) | function setupDOM() {
  function createStatusElement (line 357) | function createStatusElement() {
  function announceStatus (line 379) | function announceStatus( value ) {
  function getStatusText (line 390) | function getStatusText( node ) {
  function ensurePunctuation (line 438) | function ensurePunctuation( text ) {
  function setupScrollPrevention (line 459) | function setupScrollPrevention() {
  function setupFullscreen (line 476) | function setupFullscreen() {
  function setupPostMessage (line 493) | function setupPostMessage() {
  function configure (line 507) | function configure( options ) {
  function addEventListeners (line 588) | function addEventListeners() {
  function removeEventListeners (line 614) | function removeEventListeners() {
  function destroy (line 637) | function destroy() {
  function on (line 703) | function on( type, listener, useCapture ) {
  function off (line 712) | function off( type, listener, useCapture ) {
  function transformSlides (line 725) | function transformSlides( transforms ) {
  function dispatchEvent (line 745) | function dispatchEvent({ target=dom.wrapper, type, data, bubbles=true }) {
  function dispatchSlideChanged (line 767) | function dispatchSlideChanged( origin ) {
  function dispatchPostMessage (line 785) | function dispatchPostMessage( type, data ) {
  function layout (line 805) | function layout() {
  function layoutSlideContents (line 927) | function layoutSlideContents( width, height ) {
  function checkResponsiveScrollView (line 958) | function checkResponsiveScrollView() {
  function getComputedSlideSize (line 996) | function getComputedSlideSize( presentationWidth, presentationHeight ) {
  function setPreviousVerticalIndex (line 1042) | function setPreviousVerticalIndex( stack, v ) {
  function getPreviousVerticalIndex (line 1057) | function getPreviousVerticalIndex( stack ) {
  function isVerticalSlide (line 1078) | function isVerticalSlide( slide = currentSlide ) {
  function isVerticalStack (line 1091) | function isVerticalStack( slide = currentSlide ) {
  function isLastVerticalSlide (line 1101) | function isLastVerticalSlide() {
  function isFirstSlide (line 1118) | function isFirstSlide() {
  function isLastSlide (line 1130) | function isLastSlide() {
  function pause (line 1150) | function pause() {
  function resume (line 1168) | function resume() {
  function togglePause (line 1184) | function togglePause( override ) {
  function isPaused (line 1200) | function isPaused() {
  function toggleJumpToSlide (line 1209) | function toggleJumpToSlide( override ) {
  function toggleAutoSlide (line 1227) | function toggleAutoSlide( override ) {
  function isAutoSliding (line 1244) | function isAutoSliding() {
  function slide (line 1261) | function slide( h, v, f, origin ) {
  function shouldAutoAnimateBetween (line 1467) | function shouldAutoAnimateBetween( fromSlide, toSlide, indexhBefore, ind...
  function setCurrentScrollPage (line 1483) | function setCurrentScrollPage( slideElement, h, v ) {
  function sync (line 1528) | function sync() {
  function syncSlide (line 1599) | function syncSlide( slide = currentSlide ) {
  function resetVerticalSlides (line 1622) | function resetVerticalSlides() {
  function shuffle (line 1644) | function shuffle( slides = getHorizontalSlides() ) {
  function updateSlides (line 1679) | function updateSlides( selector, index ) {
  function showFragmentsIn (line 1800) | function showFragmentsIn( container ) {
  function hideFragmentsIn (line 1812) | function hideFragmentsIn( container ) {
  function updateSlidesVisibility (line 1824) | function updateSlidesVisibility() {
  function availableRoutes (line 1920) | function availableRoutes({ includeFragments = false } = {}) {
  function getSlidePastCount (line 1981) | function getSlidePastCount( slide = currentSlide ) {
  function getProgress (line 2031) | function getProgress() {
  function getIndices (line 2070) | function getIndices( slide ) {
  function getSlides (line 2127) | function getSlides() {
  function getHorizontalSlides (line 2138) | function getHorizontalSlides() {
  function getVerticalSlides (line 2147) | function getVerticalSlides() {
  function getVerticalStacks (line 2156) | function getVerticalStacks() {
  function hasHorizontalSlides (line 2165) | function hasHorizontalSlides() {
  function hasVerticalSlides (line 2173) | function hasVerticalSlides() {
  function getSlidesAttributes (line 2183) | function getSlidesAttributes() {
  function getTotalSlides (line 2203) | function getTotalSlides() {
  function getSlide (line 2214) | function getSlide( x, y ) {
  function getSlideBackground (line 2238) | function getSlideBackground( x, y ) {
  function getState (line 2256) | function getState() {
  function setState (line 2277) | function setState( state ) {
  function cueAutoSlide (line 2301) | function cueAutoSlide() {
  function cancelAutoSlide (line 2376) | function cancelAutoSlide() {
  function pauseAutoSlide (line 2383) | function pauseAutoSlide() {
  function resumeAutoSlide (line 2397) | function resumeAutoSlide() {
  function navigateLeft (line 2407) | function navigateLeft({skipFragments=false}={}) {
  function navigateRight (line 2427) | function navigateRight({skipFragments=false}={}) {
  function navigateUp (line 2447) | function navigateUp({skipFragments=false}={}) {
  function navigateDown (line 2459) | function navigateDown({skipFragments=false}={}) {
  function navigatePrev (line 2479) | function navigatePrev({skipFragments=false}={}) {
  function navigateNext (line 2521) | function navigateNext({skipFragments=false}={}) {
  function onUserInput (line 2565) | function onUserInput( event ) {
  function onPostMessage (line 2576) | function onPostMessage( event ) {
  function onTransitionEnd (line 2610) | function onTransitionEnd( event ) {
  function onSlidesClicked (line 2628) | function onSlidesClicked( event ) {
  function onWindowResize (line 2654) | function onWindowResize( event ) {
  function onPageVisibilityChange (line 2664) | function onPageVisibilityChange( event ) {
  function onFullscreenChange (line 2683) | function onFullscreenChange( event ) {
  function onAutoSlidePlayerClick (line 2703) | function onAutoSlidePlayerClick( event ) {

FILE: js/utils/constants.ts
  constant SLIDES_SELECTOR (line 1) | const SLIDES_SELECTOR = '.slides section';
  constant HORIZONTAL_SLIDES_SELECTOR (line 2) | const HORIZONTAL_SLIDES_SELECTOR = '.slides>section';
  constant VERTICAL_SLIDES_SELECTOR (line 3) | const VERTICAL_SLIDES_SELECTOR = '.slides>section.present>section';
  constant HORIZONTAL_BACKGROUNDS_SELECTOR (line 4) | const HORIZONTAL_BACKGROUNDS_SELECTOR = '.backgrounds>.slide-background';
  constant POST_MESSAGE_METHOD_BLACKLIST (line 7) | const POST_MESSAGE_METHOD_BLACKLIST =
  constant FRAGMENT_STYLE_REGEX (line 11) | const FRAGMENT_STYLE_REGEX =
  constant SLIDE_NUMBER_FORMAT_HORIZONTAL_DOT_VERTICAL (line 15) | const SLIDE_NUMBER_FORMAT_HORIZONTAL_DOT_VERTICAL = 'h.v';
  constant SLIDE_NUMBER_FORMAT_HORIZONTAL_SLASH_VERTICAL (line 16) | const SLIDE_NUMBER_FORMAT_HORIZONTAL_SLASH_VERTICAL = 'h/v';
  constant SLIDE_NUMBER_FORMAT_CURRENT (line 17) | const SLIDE_NUMBER_FORMAT_CURRENT = 'c';
  constant SLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL (line 18) | const SLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL = 'c/t';

FILE: js/utils/util.ts
  type DeserializedValue (line 34) | type DeserializedValue = string | number | boolean | null;

FILE: plugin/highlight/index.ts
  type HighlightLine (line 7) | interface HighlightLine {
  type HighlightLineNumbersOptions (line 12) | interface HighlightLineNumbersOptions {
  type HighlightJsApi (line 17) | interface HighlightJsApi extends HLJSApi {
  type HighlightScrollState (line 23) | interface HighlightScrollState {
  type HighlightLineBounds (line 28) | interface HighlightLineBounds {
  type HighlightLineStep (line 33) | type HighlightLineStep = HighlightLine[];
  type HighlightPlugin (line 35) | interface HighlightPlugin extends RevealPlugin {

FILE: plugin/highlight/plugin.js
  function u (line 4) | function u(e){for(var n=e.toString(),t=e.anchorNode;"TD"!==t.nodeName;)t...
  function n (line 4) | function n(e){try{var n=o.querySelectorAll("code.hljs,code.nohighlight")...
  function d (line 4) | function d(e,n){if("object"==typeof e)e.innerHTML=f(e,n)}
  function f (line 4) | function f(e,n){var t,r,o=(t=e,{singleLine:function(e){return!!e.singleL...
  function v (line 4) | function v(e){var n=e.className;if(/hljs-/.test(n)){for(var t=g(e.innerH...
  function g (line 4) | function g(e){return 0===e.length?[]:e.split(a)}
  function p (line 4) | function p(e,t){return e.replace(/\{(\d+)\}/g,function(e,n){return void ...
  function betterTrim (line 394) | function betterTrim(snippetEl) {

FILE: plugin/markdown/index.ts
  type MarkdownSlidifyOptions (line 7) | interface MarkdownSlidifyOptions {
  type MarkdownOptions (line 14) | interface MarkdownOptions extends MarkdownConfig {
  type MarkdownPlugin (line 18) | interface MarkdownPlugin extends RevealPlugin {

FILE: plugin/markdown/plugin.js
  constant DEFAULT_SLIDE_SEPARATOR (line 10) | const DEFAULT_SLIDE_SEPARATOR = '\r?\n---\r?\n',
  constant DEFAULT_VERTICAL_SEPARATOR (line 10) | const DEFAULT_SLIDE_SEPARATOR = '\r?\n---\r?\n',
  constant DEFAULT_NOTES_SEPARATOR (line 10) | const DEFAULT_SLIDE_SEPARATOR = '\r?\n---\r?\n',
  constant DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR (line 10) | const DEFAULT_SLIDE_SEPARATOR = '\r?\n---\r?\n',
  constant DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR (line 10) | const DEFAULT_SLIDE_SEPARATOR = '\r?\n---\r?\n',
  constant SCRIPT_END_PLACEHOLDER (line 16) | const SCRIPT_END_PLACEHOLDER = '__SCRIPT_END__';
  constant CODE_LINE_NUMBER_REGEX (line 20) | const CODE_LINE_NUMBER_REGEX = /\[\s*((\d*):)?\s*([\s\d,|-]*)\]/;
  constant HTML_ESCAPE_MAP (line 22) | const HTML_ESCAPE_MAP = {
  function getMarkdownFromSlide (line 40) | function getMarkdownFromSlide( section ) {
  function getForwardedAttributes (line 71) | function getForwardedAttributes( section ) {
  function getSlidifyOptions (line 99) | function getSlidifyOptions( options ) {
  function createMarkdownSlide (line 115) | function createMarkdownSlide( content, options ) {
  function slidify (line 137) | function slidify( markdown, options ) {
  function processSlides (line 210) | function processSlides( scope ) {
  function loadExternalMarkdown (line 263) | function loadExternalMarkdown( section ) {
  function addAttributeInElement (line 316) | function addAttributeInElement( node, elementTarget, separator ) {
  function addAttributes (line 344) | function addAttributes( section, element, previousElement, separatorElem...
  function convertSlides (line 388) | function convertSlides() {
  function escapeForHTML (line 419) | function escapeForHTML( input ) {
  method code (line 439) | code( { text, lang } ) {
  method marked (line 481) | get marked() { return markedInstance; }
  method markdownOptions (line 482) | get markdownOptions() { return deck ? deck.getConfig().markdown || {} : ...

FILE: plugin/math/index.ts
  type KaTeXPlugin (line 6) | interface KaTeXPlugin extends RevealPlugin {
  type MathJax2Plugin (line 10) | interface MathJax2Plugin extends RevealPlugin {
  type MathJax3Plugin (line 14) | interface MathJax3Plugin extends RevealPlugin {
  type MathJax4Plugin (line 18) | interface MathJax4Plugin extends RevealPlugin {
  type MathPlugin (line 22) | interface MathPlugin extends MathJax2Plugin {

FILE: plugin/math/katex.js
  function loadScripts (line 44) | async function loadScripts(urls) {

FILE: plugin/math/mathjax2.js
  function loadScript (line 21) | function loadScript( url, callback ) {

FILE: plugin/math/mathjax3.js
  function loadScript (line 30) | function loadScript( url, callback ) {

FILE: plugin/math/mathjax4.js
  function loadScript (line 31) | function loadScript( url, callback ) {

FILE: plugin/notes/index.ts
  type NotesPlugin (line 6) | interface NotesPlugin extends RevealPlugin {

FILE: plugin/notes/plugin.js
  function openSpeakerWindow (line 25) | function openSpeakerWindow() {
  function reconnectSpeakerWindow (line 49) | function reconnectSpeakerWindow( reconnectWindow ) {
  function connect (line 68) | function connect() {
  function callRevealApi (line 93) | function callRevealApi( methodName, methodArguments, callId ) {
  function post (line 108) | function post( event ) {
  function isSameOriginEvent (line 166) | function isSameOriginEvent( event ) {
  function onPostMessage (line 177) | function onPostMessage( event ) {
  function onConnected (line 202) | function onConnected() {

FILE: plugin/search/index.ts
  type SearchPlugin (line 6) | interface SearchPlugin extends RevealPlugin {

FILE: plugin/search/plugin.js
  function render (line 22) | function render() {
  function openSearch (line 69) | function openSearch() {
  function closeSearch (line 77) | function closeSearch() {
  function toggleSearch (line 84) | function toggleSearch() {
  function doSearch (line 95) | function doSearch() {
  function Hilitor (line 127) | function Hilitor(id, tag) {

FILE: plugin/vite-plugin-dts.ts
  function createPluginDts (line 4) | function createPluginDts(pluginName: string) {

FILE: plugin/zoom/index.ts
  type ZoomPlugin (line 6) | interface ZoomPlugin extends RevealPlugin {

FILE: plugin/zoom/plugin.js
  function magnify (line 90) | function magnify( rect, scale ) {
  function pan (line 153) | function pan() {
  function getScrollOffset (line 178) | function getScrollOffset() {

FILE: react/demo/src/demo-app.tsx
  function NavigationControls (line 23) | function NavigationControls() {
  function Columns (line 38) | function Columns({ children }: { children: React.ReactNode }) {
  function SlideSyncPlayground (line 50) | function SlideSyncPlayground() {
  function Demo (line 89) | function Demo() {

FILE: react/src/components/code.tsx
  type HighlightPlugin (line 5) | type HighlightPlugin = {
  function normalizeCode (line 9) | function normalizeCode(code: string) {
  function cleanupGeneratedFragments (line 27) | function cleanupGeneratedFragments(block: HTMLElement) {
  function Code (line 45) | function Code({

FILE: react/src/components/deck.test.tsx
  function Inspector (line 467) | function Inspector() {
  function Inspector (line 488) | function Inspector() {

FILE: react/src/components/deck.tsx
  constant DEFAULT_PLUGINS (line 7) | const DEFAULT_PLUGINS: NonNullable<DeckProps['plugins']> = [];
  type DeckEventHandler (line 8) | type DeckEventHandler = NonNullable<DeckProps['onSync']>;
  type SlideStructureNode (line 9) | type SlideStructureNode = number | [number, SlideStructureNode[]];
  type CurrentRef (line 10) | type CurrentRef<T> = { current: T };
  function hasShallowConfigChanges (line 14) | function hasShallowConfigChanges(prev: DeckProps['config'], next: DeckPr...
  function setRef (line 33) | function setRef<T>(ref: Ref<T | null> | undefined, value: T | null) {
  function isSectionElement (line 42) | function isSectionElement(element: Element): element is HTMLElement {
  function getSectionStructure (line 46) | function getSectionStructure(
  function getSlidesStructureSignature (line 65) | function getSlidesStructureSignature(
  function Deck (line 74) | function Deck({

FILE: react/src/components/fragment.tsx
  type FragmentChildProps (line 11) | type FragmentChildProps = {
  function mergeClassNames (line 17) | function mergeClassNames(...classNames: Array<string | undefined>) {
  function mergeStyles (line 21) | function mergeStyles(
  function Fragment (line 34) | function Fragment({

FILE: react/src/components/markdown.tsx
  type MarkdownLeafSectionProps (line 27) | type MarkdownLeafSectionProps = {
  type HighlightPlugin (line 34) | type HighlightPlugin = {
  function MarkdownLeafSection (line 38) | function MarkdownLeafSection({
  function Markdown (line 80) | function Markdown({

FILE: react/src/components/slide.tsx
  function Slide (line 11) | function Slide({

FILE: react/src/components/stack.tsx
  function Stack (line 3) | function Stack({ className, style, children }: StackProps) {

FILE: react/src/index.ts
  function useReveal (line 22) | function useReveal() {

FILE: react/src/types.ts
  type DeckConfig (line 13) | type DeckConfig = RevealConfig;
  type DeckPlugin (line 14) | type DeckPlugin = RevealPlugin | RevealPluginFactory;
  type RevealEventHandler (line 15) | type RevealEventHandler = Parameters<RevealApi['on']>[1];
  type DeckProps (line 17) | type DeckProps = {
  type SlideDataAttributeValue (line 38) | type SlideDataAttributeValue = string | number | boolean | undefined;
  type SlideDataAttributes (line 40) | type SlideDataAttributes = {
  type SlideBackgroundProps (line 44) | type SlideBackgroundProps = {
  type SlideVisibility (line 60) | type SlideVisibility = 'hidden' | 'uncounted';
  type SlideAutoAnimateProps (line 62) | type SlideAutoAnimateProps = {
  type SlideRevealProps (line 73) | type SlideRevealProps = {
  type SlideProps (line 82) | type SlideProps = React.HTMLAttributes<HTMLElement> &
  type MarkdownOptions (line 90) | type MarkdownOptions = Omit<
  type MarkdownProps (line 97) | type MarkdownProps = Omit<SlideProps, 'children'> & {
  type StackProps (line 110) | type StackProps = {
  type FragmentBaseProps (line 116) | type FragmentBaseProps = {
  type FragmentElementProps (line 123) | type FragmentElementProps = FragmentBaseProps & {
  type FragmentAsChildProps (line 129) | type FragmentAsChildProps = FragmentBaseProps & {
  type FragmentProps (line 135) | type FragmentProps = FragmentElementProps | FragmentAsChildProps;
  type CodeProps (line 137) | type CodeProps = Omit<React.HTMLAttributes<HTMLPreElement>, 'children'> & {

FILE: react/src/utils/markdown.ts
  constant DEFAULT_SLIDE_SEPARATOR (line 6) | const DEFAULT_SLIDE_SEPARATOR = '\r?\n---\r?\n';
  constant DEFAULT_VERTICAL_SEPARATOR (line 7) | const DEFAULT_VERTICAL_SEPARATOR = null;
  constant DEFAULT_NOTES_SEPARATOR (line 8) | const DEFAULT_NOTES_SEPARATOR = '^\\s*notes?:';
  constant DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR (line 9) | const DEFAULT_ELEMENT_ATTRIBUTES_SEPARATOR = '\\.element\\s*?(.+?)$';
  constant DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR (line 10) | const DEFAULT_SLIDE_ATTRIBUTES_SEPARATOR = '\\.slide:\\s*?(\\S.+?)$';
  constant CODE_LINE_NUMBER_REGEX (line 12) | const CODE_LINE_NUMBER_REGEX = /\[\s*((\d*):)?\s*([\s\d,|-]*)\]/;
  constant HTML_ESCAPE_MAP (line 14) | const HTML_ESCAPE_MAP: Record<string, string> = {
  type MarkdownLeaf (line 22) | type MarkdownLeaf = {
  type MarkdownRenderNode (line 27) | type MarkdownRenderNode =
  function normalizeMarkdownSource (line 39) | function normalizeMarkdownSource(markdown: string) {
  function escapeForHTML (line 58) | function escapeForHTML(input: string) {
  function createMarkedInstance (line 62) | function createMarkedInstance(options: MarkdownOptions = {}) {
  function ensureParsedMarkdown (line 110) | function ensureParsedMarkdown(result: string | Promise<string>) {
  function createSlideHtml (line 118) | function createSlideHtml(markdown: string, markedInstance: Marked, notes...
  function buildMarkdownNodes (line 133) | function buildMarkdownNodes(
  function addAttributeInElement (line 200) | function addAttributeInElement(node: ChildNode, elementTarget: Element |...
  function addAttributes (line 230) | function addAttributes(
  function hashString (line 292) | function hashString(input: string) {
  function serializeSignatureValue (line 302) | function serializeSignatureValue(value: unknown): unknown {
  function getSectionPropsSignature (line 326) | function getSectionPropsSignature(attributes: HTMLAttributes<HTMLElement...
  function getErrorMessage (line 335) | function getErrorMessage(error: unknown) {

FILE: react/src/utils/slide-attributes.ts
  constant EMPTY_DATA_ATTRIBUTES_SIGNATURE (line 9) | const EMPTY_DATA_ATTRIBUTES_SIGNATURE = '[]';
  type SlideShorthandProps (line 11) | type SlideShorthandProps = SlideBackgroundProps & SlideAutoAnimateProps ...
  type SlideElementProps (line 13) | type SlideElementProps = Omit<SlideProps, 'children' | keyof SlideShorth...
  constant SLIDE_DATA_ATTRIBUTES (line 15) | const SLIDE_DATA_ATTRIBUTES: Record<keyof SlideShorthandProps, `data-${s...
  function getDataAttributesSignature (line 45) | function getDataAttributesSignature(attributes: SlideElementProps) {
  function getSlideAttributes (line 53) | function getSlideAttributes(

FILE: scripts/banner.js
  constant LICENSE_BANNER (line 1) | const LICENSE_BANNER = `/*!

FILE: scripts/zip.js
  function switchToStaticScripts (line 6) | function switchToStaticScripts(htmlContent) {
  function switchToStaticStyles (line 74) | function switchToStaticStyles(htmlContent) {
  function main (line 90) | async function main() {

FILE: test/types/plugin-imports.ts
  type RevealModule (line 16) | type RevealModule = typeof Reveal;
Condensed preview — 216 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,730K chars).
[
  {
    "path": ".codespellrc",
    "chars": 331,
    "preview": "[codespell]\n# Ref: https://github.com/codespell-project/codespell#using-a-config-file\nskip = .git*,node_modules,package-"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 1057,
    "preview": "## Contributing\nPlease keep the [issue tracker](https://github.com/hakimel/reveal.js/issues) limited to **bug reports**."
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 18,
    "preview": "github: [hakimel]\n"
  },
  {
    "path": ".github/workflows/spellcheck.yml",
    "chars": 495,
    "preview": "# Codespell configuration is within .codespellrc\n---\nname: Spellcheck\n\non:\n  push:\n    branches: [master]\n  pull_request"
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 502,
    "preview": "name: Tests\n\non:\n  - push\n\npermissions:\n  contents: read\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n     "
  },
  {
    "path": ".gitignore",
    "chars": 163,
    "preview": ".idea/\n*.iml\n*.iws\n*.eml\nout/\n.DS_Store\n.svn\nlog/*.log\ntmp/**\nnode_modules/\n.sass-cache\npresentation\npresentation.zip\ndi"
  },
  {
    "path": ".prettierignore",
    "chars": 82,
    "preview": "js/**/*.js\nplugin/**/*.js\n**/*.md\ntest/**/*.html\nexamples/**/*.md\ndist/**/*\n*.html"
  },
  {
    "path": ".prettierrc",
    "chars": 131,
    "preview": "{\n\t\"useTabs\": true,\n\t\"tabWidth\": 2,\n\t\"trailingComma\": \"es5\",\n\t\"printWidth\": 100,\n\t\"singleQuote\": true,\n\t\"bracketSameLine"
  },
  {
    "path": "LICENSE",
    "chars": 1108,
    "preview": "Copyright (C) 2011-2026 Hakim El Hattab, http://hakim.se, and reveal.js contributors\n\nPermission is hereby granted, free"
  },
  {
    "path": "README.md",
    "chars": 1772,
    "preview": "<p align=\"center\">\n  <a href=\"https://revealjs.com\">\n  <img src=\"https://hakim-static.s3.amazonaws.com/reveal-js/logo/v1"
  },
  {
    "path": "css/layout.scss",
    "chars": 1484,
    "preview": "/**\n * Layout helpers.\n */\n\n// Stretch an element vertically based on available space\n.reveal .stretch,\n.reveal .r-stret"
  },
  {
    "path": "css/print/paper.scss",
    "chars": 3088,
    "preview": "@media print {\n\thtml:not(.print-pdf) {\n\t\toverflow: visible;\n\t\twidth: auto;\n\t\theight: auto;\n\n\t\tbody {\n\t\t\tmargin: 0;\n\t\t\tpa"
  },
  {
    "path": "css/print/pdf.scss",
    "chars": 2925,
    "preview": "/**\n * This stylesheet is used to print reveal.js\n * presentations to PDF.\n *\n * https://revealjs.com/pdf-export/\n */\n\nh"
  },
  {
    "path": "css/reset.css",
    "chars": 866,
    "preview": "/* http://meyerweb.com/eric/tools/css/reset/\n   v4.0 | 20180602\n   License: none (public domain)\n*/\n\n/* prettier-ignore "
  },
  {
    "path": "css/reveal.scss",
    "chars": 54850,
    "preview": "/**\n * reveal.js\n * http://revealjs.com\n * MIT licensed\n *\n * Copyright (C) Hakim El Hattab, https://hakim.se\n */\n\n@use "
  },
  {
    "path": "css/theme/README.md",
    "chars": 1313,
    "preview": "## Dependencies\n\nThemes are written using Sass to keep things modular and reduce the need for repeated selectors across "
  },
  {
    "path": "css/theme/beige.scss",
    "chars": 1593,
    "preview": "/**\n * Beige theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n\n// Load utils\n@use"
  },
  {
    "path": "css/theme/black-contrast.scss",
    "chars": 1260,
    "preview": "/**\n * Black compact & high contrast reveal.js theme, with headers not in capitals.\n *\n * By Peter Kehl. Based on black."
  },
  {
    "path": "css/theme/black.scss",
    "chars": 1077,
    "preview": "/**\n * Black theme for reveal.js. This is the opposite of the 'white' theme.\n *\n * By Hakim El Hattab, http://hakim.se\n "
  },
  {
    "path": "css/theme/blood.scss",
    "chars": 1774,
    "preview": "/**\n * Blood theme for reveal.js\n * Author: Walther http://github.com/Walther\n *\n * Designed to be used with highlight.j"
  },
  {
    "path": "css/theme/dracula.scss",
    "chars": 2008,
    "preview": "/**\n * Dracula Dark theme for reveal.js.\n * Based on https://draculatheme.com\n */\n\n// Load utils\n@use 'sass:color';\n@use"
  },
  {
    "path": "css/theme/fonts/league-gothic/LICENSE",
    "chars": 92,
    "preview": "SIL Open Font License (OFL)\nhttp://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=OFL\n"
  },
  {
    "path": "css/theme/fonts/league-gothic/league-gothic.css",
    "chars": 152,
    "preview": "@font-face {\n    font-family: 'League Gothic';\n    src: url('./league-gothic.woff') format('woff');\n\n    font-weight: no"
  },
  {
    "path": "css/theme/fonts/source-sans-pro/LICENSE",
    "chars": 4484,
    "preview": "SIL Open Font License\n\nCopyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name "
  },
  {
    "path": "css/theme/fonts/source-sans-pro/source-sans-pro.css",
    "chars": 656,
    "preview": "@font-face {\n    font-family: 'Source Sans Pro';\n    src: url('./source-sans-pro-regular.woff') format('woff');\n    font"
  },
  {
    "path": "css/theme/league.scss",
    "chars": 1094,
    "preview": "/**\n * League theme for reveal.js.\n *\n * This was the default theme pre-3.0.0.\n *\n * Copyright (C) 2011-2012 Hakim El Ha"
  },
  {
    "path": "css/theme/moon.scss",
    "chars": 1163,
    "preview": "/**\n * Solarized Dark theme for reveal.js.\n * Author: Achim Staebler\n */\n\n// Load utils\n@use 'sass:color';\n@use 'templat"
  },
  {
    "path": "css/theme/night.scss",
    "chars": 1021,
    "preview": "/**\n * Black theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n\n// Load utils\n@use"
  },
  {
    "path": "css/theme/serif.scss",
    "chars": 1152,
    "preview": "/**\n * A simple theme for reveal.js presentations, similar\n * to the default theme. The accent color is brown.\n *\n * Thi"
  },
  {
    "path": "css/theme/simple.scss",
    "chars": 1350,
    "preview": "/**\n * A simple theme for reveal.js presentations, similar\n * to the default theme. The accent color is darkblue.\n *\n * "
  },
  {
    "path": "css/theme/sky.scss",
    "chars": 1162,
    "preview": "/**\n * Sky theme for reveal.js.\n *\n * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se\n */\n\n// Load utils\n@use '"
  },
  {
    "path": "css/theme/solarized.scss",
    "chars": 1206,
    "preview": "/**\n * Solarized Light theme for reveal.js.\n * Author: Achim Staebler\n */\n\n// Load utils\n@use 'sass:color';\n@use 'templa"
  },
  {
    "path": "css/theme/template/mixins.scss",
    "chars": 275,
    "preview": "@mixin light-bg-text-color($color) {\n\tsection.has-light-background {\n\t\t&,\n\t\th1,\n\t\th2,\n\t\th3,\n\t\th4,\n\t\th5,\n\t\th6 {\n\t\t\tcolor:"
  },
  {
    "path": "css/theme/template/settings.scss",
    "chars": 2940,
    "preview": "// Base settings for all themes that can optionally be\n// overridden by the super-theme\n\n@use 'sass:color';\n@use 'sass:m"
  },
  {
    "path": "css/theme/template/theme.scss",
    "chars": 5800,
    "preview": "// Base theme template for reveal.js\n\n/*********************************************\n * GLOBAL STYLES\n *****************"
  },
  {
    "path": "css/theme/white-contrast.scss",
    "chars": 1306,
    "preview": "/**\n * White compact & high contrast reveal.js theme, with headers not in capitals.\n *\n * By Peter Kehl. Based on white."
  },
  {
    "path": "css/theme/white.scss",
    "chars": 1116,
    "preview": "/**\n * White theme for reveal.js. This is the opposite of the 'black' theme.\n *\n * By Hakim El Hattab, http://hakim.se\n "
  },
  {
    "path": "demo.html",
    "chars": 22243,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js – The HTML Presentation Framewor"
  },
  {
    "path": "dist/config.d.ts",
    "chars": 21676,
    "preview": "/**\n * Slide transition styles.\n *\n * @see {@link https://revealjs.com/transitions/}\n */\ntype TransitionStyle = 'none' |"
  },
  {
    "path": "dist/plugin/highlight/monokai.css",
    "chars": 940,
    "preview": "/*\nMonokai style - ported by Luigi Maselli - http://grigio.org\n*/\n\n.hljs {\n  display: block;\n  overflow-x: auto;\n  paddi"
  },
  {
    "path": "dist/plugin/highlight/zenburn.css",
    "chars": 946,
    "preview": "/*\n\nZenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru>\nbased on dark.css by Ivan Sagalaev\n\n*/\n\n.hl"
  },
  {
    "path": "dist/plugin/highlight.d.ts",
    "chars": 1584,
    "preview": "import { HLJSApi } from 'highlight.js';\nimport { RevealPlugin } from 'reveal.js';\nexport interface HighlightLine {\n    s"
  },
  {
    "path": "dist/plugin/highlight.js",
    "chars": 948548,
    "preview": "(function(ze,ke){typeof exports==\"object\"&&typeof module<\"u\"?module.exports=ke():typeof define==\"function\"&&define.amd?d"
  },
  {
    "path": "dist/plugin/highlight.mjs",
    "chars": 1427088,
    "preview": "function nc(t) {\n  return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, \"default\") ? t.default : t;\n}\nvar"
  },
  {
    "path": "dist/plugin/markdown.d.ts",
    "chars": 742,
    "preview": "import { MarkdownConfig, RevealPlugin } from 'reveal.js';\nimport { Marked } from 'marked';\nexport interface MarkdownSlid"
  },
  {
    "path": "dist/plugin/markdown.js",
    "chars": 49687,
    "preview": "(function(L,E){typeof exports==\"object\"&&typeof module<\"u\"?module.exports=E():typeof define==\"function\"&&define.amd?defi"
  },
  {
    "path": "dist/plugin/markdown.mjs",
    "chars": 64302,
    "preview": "function X() {\n  return { async: !1, breaks: !1, extensions: null, gfm: !0, hooks: null, pedantic: !1, renderer: null, s"
  },
  {
    "path": "dist/plugin/math.d.ts",
    "chars": 590,
    "preview": "import { RevealPlugin } from 'reveal.js';\nexport interface KaTeXPlugin extends RevealPlugin {\n    id: 'katex';\n}\nexport "
  },
  {
    "path": "dist/plugin/math.js",
    "chars": 4063,
    "preview": "(function(d,p){typeof exports==\"object\"&&typeof module<\"u\"?module.exports=p():typeof define==\"function\"&&define.amd?defi"
  },
  {
    "path": "dist/plugin/math.mjs",
    "chars": 5289,
    "preview": "const M = () => {\n  let a, s = {\n    version: \"latest\",\n    delimiters: [\n      { left: \"$$\", right: \"$$\", display: !0 }"
  },
  {
    "path": "dist/plugin/notes.d.ts",
    "chars": 193,
    "preview": "import { RevealPlugin } from 'reveal.js';\nexport interface NotesPlugin extends RevealPlugin {\n    id: 'notes';\n    open("
  },
  {
    "path": "dist/plugin/notes.js",
    "chars": 67952,
    "preview": "(function($,v){typeof exports==\"object\"&&typeof module<\"u\"?module.exports=v():typeof define==\"function\"&&define.amd?defi"
  },
  {
    "path": "dist/plugin/notes.mjs",
    "chars": 80308,
    "preview": "const bt = `<!--\n\tNOTE: You need to build the notes plugin after making changes to this file.\n-->\n<html lang=\"en\">\n\t<hea"
  },
  {
    "path": "dist/plugin/search.d.ts",
    "chars": 237,
    "preview": "import { RevealPlugin } from 'reveal.js';\nexport interface SearchPlugin extends RevealPlugin {\n    id: 'search';\n    ope"
  },
  {
    "path": "dist/plugin/search.js",
    "chars": 2867,
    "preview": "(function(p,y){typeof exports==\"object\"&&typeof module<\"u\"?module.exports=y():typeof define==\"function\"&&define.amd?defi"
  },
  {
    "path": "dist/plugin/search.mjs",
    "chars": 3512,
    "preview": "const D = () => {\n  let f, t, l, n, a, y, s;\n  function g() {\n    t = document.createElement(\"div\"), t.classList.add(\"se"
  },
  {
    "path": "dist/plugin/zoom.d.ts",
    "chars": 170,
    "preview": "import { RevealPlugin } from 'reveal.js';\nexport interface ZoomPlugin extends RevealPlugin {\n    id: 'zoom';\n}\ndeclare c"
  },
  {
    "path": "dist/plugin/zoom.js",
    "chars": 2894,
    "preview": "(function(f,m){typeof exports==\"object\"&&typeof module<\"u\"?module.exports=m():typeof define==\"function\"&&define.amd?defi"
  },
  {
    "path": "dist/plugin/zoom.mjs",
    "chars": 4047,
    "preview": "const c = {\n  id: \"zoom\",\n  init: function(n) {\n    n.getRevealElement().addEventListener(\"mousedown\", function(o) {\n   "
  },
  {
    "path": "dist/reset.css",
    "chars": 594,
    "preview": "html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,"
  },
  {
    "path": "dist/reveal.css",
    "chars": 54468,
    "preview": ".reveal .stretch,.reveal .r-stretch{max-width:none;max-height:none}.reveal pre.stretch code,.reveal pre.r-stretch code{h"
  },
  {
    "path": "dist/reveal.d.ts",
    "chars": 21430,
    "preview": "import { RevealConfig, TransitionStyle, TransitionSpeed, FragmentAnimation, KatexConfig, Mathjax2Config, Mathjax3Config,"
  },
  {
    "path": "dist/reveal.js",
    "chars": 117188,
    "preview": "/*!\n * reveal.js\n * https://revealjs.com\n * MIT licensed\n *\n * Copyright (C) 2011-2026 Hakim El Hattab, https://hakim.se"
  },
  {
    "path": "dist/reveal.mjs",
    "chars": 166634,
    "preview": "var pi = Object.defineProperty, vi = Object.defineProperties;\nvar mi = Object.getOwnPropertyDescriptors;\nvar xt = Object"
  },
  {
    "path": "dist/theme/beige.css",
    "chars": 46611,
    "preview": "@import\"https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic\";@font-face{font-family:League Gothic;s"
  },
  {
    "path": "dist/theme/black-contrast.css",
    "chars": 575419,
    "preview": "@font-face{font-family:Source Sans Pro;src:url(data:font/woff;base64,d09GRgABAAAAAb6UABQAAAAEZQgAAQAAAAAAAAAAAAAAAAAAAAA"
  },
  {
    "path": "dist/theme/black.css",
    "chars": 575422,
    "preview": "@font-face{font-family:Source Sans Pro;src:url(data:font/woff;base64,d09GRgABAAAAAb6UABQAAAAEZQgAAQAAAAAAAAAAAAAAAAAAAAA"
  },
  {
    "path": "dist/theme/blood.css",
    "chars": 5803,
    "preview": "@import\"https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic\";:root{--r-background: #2b2b2b;--r-ba"
  },
  {
    "path": "dist/theme/dracula.css",
    "chars": 5709,
    "preview": ":root{--r-background: #2b2b2b;--r-background-color: #191919;--r-main-font: -apple-system, BlinkMacSystemFont, avenir nex"
  },
  {
    "path": "dist/theme/league.css",
    "chars": 46597,
    "preview": "@import\"https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic\";@font-face{font-family:League Gothic;s"
  },
  {
    "path": "dist/theme/moon.css",
    "chars": 46308,
    "preview": "@import\"https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic\";@font-face{font-family:League Gothic;s"
  },
  {
    "path": "dist/theme/night.css",
    "chars": 5231,
    "preview": "@import\"https://fonts.googleapis.com/css?family=Montserrat:700\";@import\"https://fonts.googleapis.com/css?family=Open+San"
  },
  {
    "path": "dist/theme/serif.css",
    "chars": 5171,
    "preview": ":root{--r-background: #2b2b2b;--r-background-color: #f0f1eb;--r-main-font: \"Palatino Linotype\", \"Book Antiqua\", Palatino"
  },
  {
    "path": "dist/theme/simple.css",
    "chars": 5176,
    "preview": "@import\"https://fonts.googleapis.com/css?family=News+Cycle:400,700\";@import\"https://fonts.googleapis.com/css?family=Lato"
  },
  {
    "path": "dist/theme/sky.css",
    "chars": 5296,
    "preview": "@import\"https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic\";@import\"https://fonts.googleapis."
  },
  {
    "path": "dist/theme/solarized.css",
    "chars": 46297,
    "preview": "@import\"https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic\";@font-face{font-family:League Gothic;s"
  },
  {
    "path": "dist/theme/white-contrast.css",
    "chars": 575373,
    "preview": "@font-face{font-family:Source Sans Pro;src:url(data:font/woff;base64,d09GRgABAAAAAb6UABQAAAAEZQgAAQAAAAAAAAAAAAAAAAAAAAA"
  },
  {
    "path": "dist/theme/white.css",
    "chars": 575369,
    "preview": "@font-face{font-family:Source Sans Pro;src:url(data:font/woff;base64,d09GRgABAAAAAb6UABQAAAAEZQgAAQAAAAAAAAAAAAAAAAAAAAA"
  },
  {
    "path": "dist/utils/color.d.ts",
    "chars": 836,
    "preview": "/**\n * Converts various color input formats to an {r:0,g:0,b:0} object.\n *\n * @param {string} color The string represent"
  },
  {
    "path": "dist/utils/constants.d.ts",
    "chars": 686,
    "preview": "export declare const SLIDES_SELECTOR = \".slides section\";\nexport declare const HORIZONTAL_SLIDES_SELECTOR = \".slides>sec"
  },
  {
    "path": "dist/utils/device.d.ts",
    "chars": 121,
    "preview": "export declare const isMobile: boolean;\nexport declare const isChrome: boolean;\nexport declare const isAndroid: boolean;"
  },
  {
    "path": "dist/utils/loader.d.ts",
    "chars": 311,
    "preview": "/**\n * Loads a JavaScript file from the given URL and executes it.\n *\n * @param {string} url Address of the .js file to "
  },
  {
    "path": "dist/utils/util.d.ts",
    "chars": 3673,
    "preview": "/**\n * Extend object a with the properties of object b.\n * If there's a conflict, object b takes precedence.\n *\n * @para"
  },
  {
    "path": "examples/500-slides.html",
    "chars": 18425,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - 500 slides</title>\n\n\t\t<meta\n\t\t"
  },
  {
    "path": "examples/assets/beeping.txt",
    "chars": 92,
    "preview": "Source: https://freesound.org/people/fennelliott/sounds/379419/\nLicense: CC0 (public domain)"
  },
  {
    "path": "examples/auto-animate.html",
    "chars": 10664,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - Auto Animate</title>\n\n\t\t<meta\n"
  },
  {
    "path": "examples/backgrounds.html",
    "chars": 3995,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - Slide Backgrounds</title>\n\n\t\t<"
  },
  {
    "path": "examples/barebones.html",
    "chars": 685,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>reveal.js - Barebones</title>\n\t\t<link rel=\""
  },
  {
    "path": "examples/layout-helpers.html",
    "chars": 5166,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - Layout Helpers</title>\n\n\t\t<met"
  },
  {
    "path": "examples/lightbox.html",
    "chars": 4400,
    "preview": "<!doctype html>\n<html lang=\"en\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Ligthbox</title>\n\n\t\t<link rel=\""
  },
  {
    "path": "examples/markdown.html",
    "chars": 4159,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - Markdown Example</title>\n\n\t\t<l"
  },
  {
    "path": "examples/markdown.md",
    "chars": 398,
    "preview": "# Markdown Demo\n\n\n## External 1.1\n\nContent 1.1\n\nNote: This will only appear in the speaker notes window.\n\n\n## External 1"
  },
  {
    "path": "examples/math.html",
    "chars": 6851,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - Math Plugin</title>\n\n\t\t<meta\n\t"
  },
  {
    "path": "examples/media.html",
    "chars": 1824,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - Video, Audio and Iframes</titl"
  },
  {
    "path": "examples/multiple-presentations.html",
    "chars": 2615,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - Multiple Presentations</title>"
  },
  {
    "path": "examples/scroll.html",
    "chars": 4942,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - Scroll View</title>\n\n\t\t<meta\n\t"
  },
  {
    "path": "examples/transitions.html",
    "chars": 1932,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\n\t\t<title>reveal.js - Slide Transitions</title>\n\n\t\t<"
  },
  {
    "path": "index.html",
    "chars": 1163,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<meta\n\t\t\tname=\"viewport\"\n\t\t\tcontent=\"width=device-"
  },
  {
    "path": "js/components/playback.js",
    "chars": 3935,
    "preview": "/**\n * UI component that lets the use control auto-slide\n * playback via play/pause.\n */\nexport default class Playback {"
  },
  {
    "path": "js/config.ts",
    "chars": 21801,
    "preview": "/**\n * Slide transition styles.\n *\n * @see {@link https://revealjs.com/transitions/}\n */\ntype TransitionStyle = 'none' |"
  },
  {
    "path": "js/controllers/autoanimate.js",
    "chars": 20324,
    "preview": "import { queryAll, extend, createStyleSheet, matches, closest } from '../utils/util'\n\n// Counter used to generate unique"
  },
  {
    "path": "js/controllers/backgrounds.js",
    "chars": 15287,
    "preview": "import { queryAll } from '../utils/util'\nimport { colorToRgb, colorBrightness } from '../utils/color'\n\n/**\n * Creates an"
  },
  {
    "path": "js/controllers/controls.js",
    "chars": 10348,
    "preview": "import { queryAll, enterFullscreen } from '../utils/util'\nimport { isAndroid } from '../utils/device'\n\n/**\n * Manages ou"
  },
  {
    "path": "js/controllers/focus.js",
    "chars": 1960,
    "preview": "import { closest } from '../utils/util'\n\n/**\n * Manages focus when a presentation is embedded. This\n * helps us only cap"
  },
  {
    "path": "js/controllers/fragments.js",
    "chars": 9308,
    "preview": "import { extend, queryAll } from '../utils/util'\n\n/**\n * Handles sorting and navigation of slide fragments.\n * Fragments"
  },
  {
    "path": "js/controllers/jumptoslide.js",
    "chars": 4130,
    "preview": "import {\n\tSLIDE_NUMBER_FORMAT_CURRENT,\n\tSLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL\n} from \"../utils/constants\";\n\n/**\n * Mak"
  },
  {
    "path": "js/controllers/keyboard.js",
    "chars": 10854,
    "preview": "import { enterFullscreen } from '../utils/util'\n\n/**\n * Handles all reveal.js keyboard interactions.\n */\nexport default "
  },
  {
    "path": "js/controllers/location.js",
    "chars": 6395,
    "preview": "/**\n * Reads and writes the URL based on reveal.js' current state.\n */\nexport default class Location {\n\n\t// The minimum "
  },
  {
    "path": "js/controllers/notes.js",
    "chars": 2848,
    "preview": "/**\n * Handles the showing of speaker notes\n */\nexport default class Notes {\n\n\tconstructor( Reveal ) {\n\n\t\tthis.Reveal = "
  },
  {
    "path": "js/controllers/overlay.js",
    "chars": 10354,
    "preview": "/**\n * Handles the display of reveal.js' overlay elements used\n * to preview iframes, images & videos.\n */\nexport defaul"
  },
  {
    "path": "js/controllers/overview.js",
    "chars": 6530,
    "preview": "import { SLIDES_SELECTOR } from '../utils/constants'\nimport { extend, queryAll, transformElement } from '../utils/util'\n"
  },
  {
    "path": "js/controllers/plugins.js",
    "chars": 5444,
    "preview": "import { loadScript } from '../utils/loader'\n\n/**\n * Manages loading and registering of reveal.js plugins.\n */\nexport de"
  },
  {
    "path": "js/controllers/pointer.js",
    "chars": 2843,
    "preview": "/**\n * Handles hiding of the pointer/cursor when inactive.\n */\nexport default class Pointer {\n\n\tconstructor( Reveal ) {\n"
  },
  {
    "path": "js/controllers/printview.js",
    "chars": 7717,
    "preview": "import { SLIDES_SELECTOR } from '../utils/constants'\nimport { queryAll, createStyleSheet } from '../utils/util'\n\n/**\n * "
  },
  {
    "path": "js/controllers/progress.js",
    "chars": 2170,
    "preview": "/**\n * Creates a visual progress bar for the presentation.\n */\nexport default class Progress {\n\n\tconstructor( Reveal ) {"
  },
  {
    "path": "js/controllers/scrollview.js",
    "chars": 26886,
    "preview": "import { HORIZONTAL_SLIDES_SELECTOR, HORIZONTAL_BACKGROUNDS_SELECTOR } from '../utils/constants'\nimport { queryAll } fro"
  },
  {
    "path": "js/controllers/slidecontent.js",
    "chars": 21202,
    "preview": "import { extend, queryAll, closest, getMimeTypeFromFile, encodeRFC3986URI } from '../utils/util'\nimport { isMobile } fro"
  },
  {
    "path": "js/controllers/slidenumber.js",
    "chars": 3712,
    "preview": "import {\n\tSLIDE_NUMBER_FORMAT_CURRENT,\n\tSLIDE_NUMBER_FORMAT_CURRENT_SLASH_TOTAL,\n\tSLIDE_NUMBER_FORMAT_HORIZONTAL_DOT_VER"
  },
  {
    "path": "js/controllers/touch.js",
    "chars": 7257,
    "preview": "import { isAndroid } from '../utils/device'\nimport { matches } from '../utils/util'\n\nconst SWIPE_THRESHOLD = 40;\n\n/**\n *"
  },
  {
    "path": "js/index.ts",
    "chars": 2003,
    "preview": "/// <reference path=\"./reveal.d.ts\" />\n\nimport { RevealConfig } from './config.ts';\nimport type { RevealApi } from './re"
  },
  {
    "path": "js/reveal.d.ts",
    "chars": 21447,
    "preview": "import type {\n\tRevealConfig,\n\tTransitionStyle,\n\tTransitionSpeed,\n\tFragmentAnimation,\n\tKatexConfig,\n\tMathjax2Config,\n\tMat"
  },
  {
    "path": "js/reveal.js",
    "chars": 79697,
    "preview": "import SlideContent from './controllers/slidecontent'\nimport SlideNumber from './controllers/slidenumber'\nimport JumpToS"
  },
  {
    "path": "js/utils/color.ts",
    "chars": 1793,
    "preview": "/**\n * Converts various color input formats to an {r:0,g:0,b:0} object.\n *\n * @param {string} color The string represent"
  },
  {
    "path": "js/utils/constants.ts",
    "chars": 936,
    "preview": "export const SLIDES_SELECTOR = '.slides section';\nexport const HORIZONTAL_SLIDES_SELECTOR = '.slides>section';\nexport co"
  },
  {
    "path": "js/utils/device.ts",
    "chars": 295,
    "preview": "const UA = navigator.userAgent;\n\nexport const isMobile =\n\t/(iphone|ipod|ipad|android)/gi.test(UA) ||\n\t(navigator.platfor"
  },
  {
    "path": "js/utils/loader.ts",
    "chars": 1055,
    "preview": "/**\n * Loads a JavaScript file from the given URL and executes it.\n *\n * @param {string} url Address of the .js file to "
  },
  {
    "path": "js/utils/util.ts",
    "chars": 7503,
    "preview": "/**\n * Extend object a with the properties of object b.\n * If there's a conflict, object b takes precedence.\n *\n * @para"
  },
  {
    "path": "package.json",
    "chars": 3600,
    "preview": "{\n\t\"name\": \"reveal.js\",\n\t\"version\": \"6.0.0\",\n\t\"description\": \"The HTML Presentation Framework\",\n\t\"homepage\": \"https://re"
  },
  {
    "path": "plugin/highlight/index.ts",
    "chars": 1698,
    "preview": "import type { HLJSApi } from 'highlight.js';\nimport type { RevealPlugin } from 'reveal.js';\n\n// @ts-expect-error The run"
  },
  {
    "path": "plugin/highlight/plugin.js",
    "chars": 16339,
    "preview": "import hljs from 'highlight.js';\n\n/* highlightjs-line-numbers.js 2.8.0 | (C) 2018 Yauheni Pakala | MIT License | github."
  },
  {
    "path": "plugin/highlight/vite.config.ts",
    "chars": 652,
    "preview": "import { resolve } from 'path';\nimport { defineConfig } from 'vite'\nimport { appendExtension } from '../../vite.config.t"
  },
  {
    "path": "plugin/markdown/index.ts",
    "chars": 877,
    "preview": "import type { MarkdownConfig, RevealPlugin } from 'reveal.js';\nimport type { Marked } from 'marked';\n\n// @ts-expect-erro"
  },
  {
    "path": "plugin/markdown/plugin.js",
    "chars": 14991,
    "preview": "/*!\n * The reveal.js markdown plugin. Handles parsing of\n * markdown inside of presentations as well as loading\n * of ex"
  },
  {
    "path": "plugin/markdown/vite.config.ts",
    "chars": 653,
    "preview": "import { resolve } from 'path';\nimport { defineConfig } from 'vite';\nimport { appendExtension } from '../../vite.config."
  },
  {
    "path": "plugin/math/index.ts",
    "chars": 723,
    "preview": "import type { RevealPlugin } from 'reveal.js';\n\n// @ts-expect-error The runtime implementation remains in JS during the "
  },
  {
    "path": "plugin/math/katex.js",
    "chars": 2582,
    "preview": "/**\n * A plugin which enables rendering of math equations inside\n * of reveal.js slides. Essentially a thin wrapper for "
  },
  {
    "path": "plugin/math/mathjax2.js",
    "chars": 2102,
    "preview": "/**\n * A plugin which enables rendering of math equations inside\n * of reveal.js slides. Essentially a thin wrapper for "
  },
  {
    "path": "plugin/math/mathjax3.js",
    "chars": 2220,
    "preview": "/**\n * A plugin which enables rendering of math equations inside\n * of reveal.js slides. Essentially a thin wrapper for "
  },
  {
    "path": "plugin/math/mathjax4.js",
    "chars": 2527,
    "preview": "/**\n * A plugin which enables rendering of math equations inside\n * of reveal.js slides. Essentially a thin wrapper for "
  },
  {
    "path": "plugin/math/plugin.js",
    "chars": 392,
    "preview": "import {KaTeX} from \"./katex\";\nimport {MathJax2} from \"./mathjax2\";\nimport {MathJax3} from \"./mathjax3\";\nimport {MathJax"
  },
  {
    "path": "plugin/math/vite.config.ts",
    "chars": 641,
    "preview": "import { resolve } from 'path';\nimport { defineConfig } from 'vite';\nimport { appendExtension } from '../../vite.config."
  },
  {
    "path": "plugin/notes/index.ts",
    "chars": 342,
    "preview": "import type { RevealPlugin } from 'reveal.js';\n\n// @ts-expect-error The runtime implementation remains in JS during the "
  },
  {
    "path": "plugin/notes/plugin.js",
    "chars": 7082,
    "preview": "import speakerViewHTML from './speaker-view.html?raw'\n\nimport { marked } from 'marked';\n\n/**\n * Handles opening of and s"
  },
  {
    "path": "plugin/notes/speaker-view.html",
    "chars": 24233,
    "preview": "<!--\n\tNOTE: You need to build the notes plugin after making changes to this file.\n-->\n<html lang=\"en\">\n\t<head>\n\t\t<meta c"
  },
  {
    "path": "plugin/notes/vite.config.ts",
    "chars": 640,
    "preview": "import { resolve } from 'path';\nimport { defineConfig } from 'vite'\nimport { appendExtension } from '../../vite.config.t"
  },
  {
    "path": "plugin/search/index.ts",
    "chars": 382,
    "preview": "import type { RevealPlugin } from 'reveal.js';\n\n// @ts-expect-error The runtime implementation remains in JS during the "
  },
  {
    "path": "plugin/search/plugin.js",
    "chars": 6485,
    "preview": "/*!\n * Handles finding a text string anywhere in the slides and showing the next occurrence to the user\n * by navigatati"
  },
  {
    "path": "plugin/search/vite.config.ts",
    "chars": 643,
    "preview": "import { resolve } from 'path';\nimport { defineConfig } from 'vite'\nimport { appendExtension } from '../../vite.config.t"
  },
  {
    "path": "plugin/vite-plugin-dts.ts",
    "chars": 601,
    "preview": "import { resolve } from 'node:path';\nimport dts from 'vite-plugin-dts';\n\nexport function createPluginDts(pluginName: str"
  },
  {
    "path": "plugin/zoom/index.ts",
    "chars": 320,
    "preview": "import type { RevealPlugin } from 'reveal.js';\n\n// @ts-expect-error The runtime implementation remains in JS during the "
  },
  {
    "path": "plugin/zoom/plugin.js",
    "chars": 6779,
    "preview": "/*!\n * reveal.js Zoom plugin\n */\nconst Plugin = {\n\n\tid: 'zoom',\n\n\tinit: function( reveal ) {\n\n\t\treveal.getRevealElement("
  },
  {
    "path": "plugin/zoom/vite.config.ts",
    "chars": 637,
    "preview": "import { resolve } from 'path';\nimport { defineConfig } from 'vite'\nimport { appendExtension } from '../../vite.config.t"
  },
  {
    "path": "public/plugin/highlight/monokai.css",
    "chars": 940,
    "preview": "/*\nMonokai style - ported by Luigi Maselli - http://grigio.org\n*/\n\n.hljs {\n  display: block;\n  overflow-x: auto;\n  paddi"
  },
  {
    "path": "public/plugin/highlight/zenburn.css",
    "chars": 946,
    "preview": "/*\n\nZenburn style from voldmar.ru (c) Vladimir Epifanov <voldmar@voldmar.ru>\nbased on dark.css by Ivan Sagalaev\n\n*/\n\n.hl"
  },
  {
    "path": "react/AGENTS.md",
    "chars": 4014,
    "preview": "# React Wrapper Notes\n\nThis directory contains the `@revealjs/react` wrapper. Keep the guidance here high level and upda"
  },
  {
    "path": "react/README.md",
    "chars": 7171,
    "preview": "<p align=\"center\">\n  <a href=\"https://revealjs.com\">\n    <img src=\"https://hakim-static.s3.amazonaws.com/reveal-js/logo/"
  },
  {
    "path": "react/demo/index.html",
    "chars": 317,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, init"
  },
  {
    "path": "react/demo/package.json",
    "chars": 271,
    "preview": "{\n\t\"private\": true,\n\t\"name\": \"revealjs-react-demo\",\n\t\"scripts\": {\n\t\t\"dev\": \"vite\",\n\t\t\"build\": \"vite build\"\n\t},\n\t\"depende"
  },
  {
    "path": "react/demo/public/markdown.md",
    "chars": 61,
    "preview": "## External Markdown Slide 1\n@@@\n## External Markdown Slide 2"
  },
  {
    "path": "react/demo/src/demo-app.tsx",
    "chars": 6678,
    "preview": "import { Children, useEffect, useState } from 'react';\nimport type { SlideSyncEvent } from 'reveal.js';\nimport { Deck, S"
  },
  {
    "path": "react/demo/src/main.tsx",
    "chars": 211,
    "preview": "import { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Demo from './demo-app';\n\ncreat"
  },
  {
    "path": "react/demo/tsconfig.json",
    "chars": 295,
    "preview": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"ES2020\",\n\t\t\"module\": \"ESNext\",\n\t\t\"moduleResolution\": \"bundler\",\n\t\t\"jsx\": \"react-jsx"
  },
  {
    "path": "react/demo/vite.config.ts",
    "chars": 260,
    "preview": "import { resolve } from 'path';\nimport { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\n\nexport d"
  },
  {
    "path": "react/package.json",
    "chars": 1257,
    "preview": "{\n\t\"name\": \"@revealjs/react\",\n\t\"version\": \"0.2.0\",\n\t\"description\": \"React wrapper for reveal.js\",\n\t\"license\": \"MIT\",\n\t\"h"
  },
  {
    "path": "react/src/__tests__/setup.ts",
    "chars": 43,
    "preview": "import '@testing-library/jest-dom/vitest';\n"
  },
  {
    "path": "react/src/components/code.test.tsx",
    "chars": 4578,
    "preview": "import { render } from '@testing-library/react';\nimport { describe, it, expect, vi } from 'vitest';\nimport { Code } from"
  },
  {
    "path": "react/src/components/code.tsx",
    "chars": 4236,
    "preview": "import { useContext, useLayoutEffect, useMemo, useRef } from 'react';\nimport { RevealContext } from '../reveal-context';"
  },
  {
    "path": "react/src/components/deck.test.tsx",
    "chars": 10847,
    "preview": "import { render, act, cleanup } from '@testing-library/react';\nimport { StrictMode } from 'react';\nimport { describe, it"
  },
  {
    "path": "react/src/components/deck.tsx",
    "chars": 7909,
    "preview": "import { useEffect, useLayoutEffect, useRef, useState, type Ref, type RefObject } from 'react';\nimport Reveal from 'reve"
  },
  {
    "path": "react/src/components/fragment.test.tsx",
    "chars": 3829,
    "preview": "import { render } from '@testing-library/react';\nimport { describe, it, expect } from 'vitest';\nimport { Fragment } from"
  },
  {
    "path": "react/src/components/fragment.tsx",
    "chars": 1668,
    "preview": "import {\n\tChildren,\n\tFragment as ReactFragment,\n\tcloneElement,\n\tisValidElement,\n\ttype CSSProperties,\n\ttype ReactElement,"
  },
  {
    "path": "react/src/components/markdown.test.tsx",
    "chars": 6521,
    "preview": "import { render, screen } from '@testing-library/react';\nimport { afterEach, describe, expect, it, vi } from 'vitest';\ni"
  },
  {
    "path": "react/src/components/markdown.tsx",
    "chars": 6445,
    "preview": "import {\n\tuseContext,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n\ttype HTMLAttributes,\n} from 'react';\nimport typ"
  },
  {
    "path": "react/src/components/slide.test.tsx",
    "chars": 8766,
    "preview": "import { render } from '@testing-library/react';\nimport { describe, it, expect, vi } from 'vitest';\nimport { Slide } fro"
  },
  {
    "path": "react/src/components/slide.tsx",
    "chars": 2694,
    "preview": "import { useContext, useLayoutEffect, useRef } from 'react';\nimport type { RevealApi } from 'reveal.js';\nimport { Reveal"
  },
  {
    "path": "react/src/components/stack.test.tsx",
    "chars": 1298,
    "preview": "import { render } from '@testing-library/react';\nimport { describe, it, expect } from 'vitest';\nimport { Stack } from '."
  },
  {
    "path": "react/src/components/stack.tsx",
    "chars": 204,
    "preview": "import type { StackProps } from '../types';\n\nexport function Stack({ className, style, children }: StackProps) {\n\treturn"
  },
  {
    "path": "react/src/index.ts",
    "chars": 610,
    "preview": "import { useContext } from 'react';\nimport { RevealContext } from './reveal-context';\n\nexport { Deck } from './component"
  },
  {
    "path": "react/src/reveal-context.ts",
    "chars": 152,
    "preview": "import { createContext } from 'react';\nimport type { RevealApi } from 'reveal.js';\n\nexport const RevealContext = createC"
  },
  {
    "path": "react/src/types.ts",
    "chars": 3808,
    "preview": "import type { CSSProperties, ReactNode, ElementType, Ref, ReactElement } from 'react';\nimport type {\n\tFragmentAnimation,"
  },
  {
    "path": "react/src/utils/markdown.ts",
    "chars": 9872,
    "preview": "import type { HTMLAttributes } from 'react';\nimport { Marked } from 'marked';\nimport { markedSmartypants } from 'marked-"
  },
  {
    "path": "react/src/utils/slide-attributes.ts",
    "chars": 2743,
    "preview": "import type {\n\tSlideAutoAnimateProps,\n\tSlideBackgroundProps,\n\tSlideDataAttributeValue,\n\tSlideProps,\n\tSlideRevealProps,\n}"
  },
  {
    "path": "react/tsconfig.json",
    "chars": 368,
    "preview": "{\n\t\"compilerOptions\": {\n\t\t\"target\": \"ES2020\",\n\t\t\"module\": \"ESNext\",\n\t\t\"moduleResolution\": \"bundler\",\n\t\t\"jsx\": \"react-jsx"
  },
  {
    "path": "react/vite.config.ts",
    "chars": 747,
    "preview": "import { resolve } from 'path';\nimport { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\nimport dt"
  },
  {
    "path": "react/vitest.config.ts",
    "chars": 360,
    "preview": "import { resolve } from 'path';\nimport { defineConfig } from 'vitest/config';\nimport react from '@vitejs/plugin-react';\n"
  },
  {
    "path": "scripts/add-banner.js",
    "chars": 700,
    "preview": "import { readFile, writeFile } from 'fs/promises';\nimport { dirname, resolve } from 'path';\nimport { fileURLToPath } fro"
  },
  {
    "path": "scripts/banner.js",
    "chars": 158,
    "preview": "export const LICENSE_BANNER = `/*!\n * reveal.js\n * https://revealjs.com\n * MIT licensed\n *\n * Copyright (C) 2011-2026 Ha"
  },
  {
    "path": "scripts/build-es5.js",
    "chars": 1598,
    "preview": "import { readFile, writeFile } from 'fs/promises';\nimport { dirname, resolve } from 'path';\nimport { fileURLToPath } fro"
  },
  {
    "path": "scripts/test.js",
    "chars": 2647,
    "preview": "import { fileURLToPath } from 'url';\nimport { dirname, resolve } from 'path';\nimport { glob } from 'glob';\nimport { runQ"
  },
  {
    "path": "scripts/zip.js",
    "chars": 4837,
    "preview": "import fs from 'node:fs';\nimport path from 'node:path';\nimport JSZip from 'jszip';\nimport { globSync } from 'glob';\n\nfun"
  },
  {
    "path": "test/assets/external-script-a.js",
    "chars": 37,
    "preview": "window.externalScriptSequence += 'A';"
  },
  {
    "path": "test/assets/external-script-b.js",
    "chars": 37,
    "preview": "window.externalScriptSequence += 'B';"
  },
  {
    "path": "test/assets/external-script-c.js",
    "chars": 37,
    "preview": "window.externalScriptSequence += 'C';"
  },
  {
    "path": "test/assets/external-script-d.js",
    "chars": 37,
    "preview": "window.externalScriptSequence += 'D';"
  },
  {
    "path": "test/simple.md",
    "chars": 63,
    "preview": "## Slide 1.1\n\n```js\nvar a = 1;\n```\n\n\n## Slide 1.2\n\n\n\n## Slide 2"
  },
  {
    "path": "test/test-auto-animate.html",
    "chars": 4118,
    "preview": "<!doctype html>\n<html lang=\"en\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Test Auto-Animate</title>\n\t</he"
  },
  {
    "path": "test/test-dependencies-async.html",
    "chars": 1881,
    "preview": "<!doctype html>\n<html lang=\"en\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Test Async Dependencies</title>"
  },
  {
    "path": "test/test-dependencies.html",
    "chars": 1079,
    "preview": "<!doctype html>\n<html lang=\"en\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Test Dependencies</title>\n\t</he"
  },
  {
    "path": "test/test-destroy.html",
    "chars": 2002,
    "preview": "<!doctype html>\n<html lang=\"en\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Test Dependencies</title>\n\t</he"
  },
  {
    "path": "test/test-grid-navigation.html",
    "chars": 1788,
    "preview": "<!doctype html>\n<html lang=\"en\">\n\n\t<head>\n\t\t<meta charset=\"utf-8\">\n\n\t\t<title>reveal.js - Test Grid</title>\n\t</head>\n\n\t<b"
  }
]

// ... and 16 more files (download for full content)

About this extraction

This page contains the full source code of the hakimel/reveal.js GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 216 files (6.1 MB), approximately 1.6M tokens, and a symbol index with 1939 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!