From b9ced78234ba8718c1d566ed49dedf414db4aef5 Mon Sep 17 00:00:00 2001 From: Lachlan Kermode Date: Fri, 26 Jun 2026 15:36:30 +0200 Subject: [PATCH 1/7] Adds rheo_package_slides integration test for @rheo/slides:0.1.0 --- Cargo.lock | 970 ++- cases/rheo_package_slides/main.typ | 19 + cases/rheo_package_slides/rheo.toml | 6 + .../rheo_package_slides/html/main.html | 1 + .../html/rheo/slides/index.metadata.json | 6 + .../html/rheo/slides/lib.js | 5493 +++++++++++++++++ tests/harness.rs | 1 + 7 files changed, 5978 insertions(+), 518 deletions(-) create mode 100644 cases/rheo_package_slides/main.typ create mode 100644 cases/rheo_package_slides/rheo.toml create mode 100644 ref/examples/rheo_package_slides/html/main.html create mode 100644 ref/examples/rheo_package_slides/html/rheo/slides/index.metadata.json create mode 100644 ref/examples/rheo_package_slides/html/rheo/slides/lib.js diff --git a/Cargo.lock b/Cargo.lock index bfbe9a5..3a3456c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -174,9 +174,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "biblatex" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d0c374feba1b9a59042a7c1cf00ce7c34b977b9134fe7c42b08e5183729f66" +checksum = "591eba69b7c085632e22ca03606f0bbea68d53bbe26c8962e2d549af20c6a561" dependencies = [ "paste", "roman-numerals-rs", @@ -210,12 +210,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.13.0" @@ -414,12 +408,13 @@ dependencies = [ [[package]] name = "citationberg" -version = "0.6.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6597e8bdbca37f1f56e5a80d15857b0932aead21a78d20de49e99e74933046" +checksum = "756ff1e3d43a9ecc8183932fb4d9fd3971236f3ce4acb62fe51d1cd43297547d" dependencies = [ "quick-xml 0.38.4", "serde", + "serde_path_to_error", ] [[package]] @@ -444,9 +439,21 @@ dependencies = [ [[package]] name = "codex" -version = "0.2.0" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0732ab1a27b4ea05e6f9f60a5122c9924dd5123defde0d8e907f58cf643d40e6" +dependencies = [ + "chinese-number", +] + +[[package]] +name = "color" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9589e1effc5cacbea347899645c654158b03b2053d24bb426fd3128ced6e423c" +checksum = "2ec7c5eb7a16992b1904d76c517d170ab353b0e0b3d5a0c81a8a0cd1037893cf" +dependencies = [ + "bytemuck", +] [[package]] name = "color_quant" @@ -784,18 +791,6 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" -[[package]] -name = "embedded-io" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" - -[[package]] -name = "embedded-io" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" - [[package]] name = "encoding_rs" version = "0.8.35" @@ -892,6 +887,12 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "fearless_simd" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97b65636e5b9ef369943878ac74335ba1c55c1cb6adbf1e2c293c624248d693" + [[package]] name = "filetime" version = "0.2.29" @@ -924,12 +925,6 @@ name = "float-cmp" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" - -[[package]] -name = "float-cmp" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09cf3155332e944990140d967ff5eceb70df778b34f77d8075db46e4704e6d8" dependencies = [ "num-traits", ] @@ -947,13 +942,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] -name = "font-types" -version = "0.10.1" +name = "foldhash" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39a654f404bbcbd48ea58c617c2993ee91d1cb63727a37bf2323a4edeed1b8c5" -dependencies = [ - "bytemuck", -] +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "font-types" @@ -970,7 +962,7 @@ version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646" dependencies = [ - "roxmltree", + "roxmltree 0.20.0", ] [[package]] @@ -1094,16 +1086,6 @@ dependencies = [ "wasip3", ] -[[package]] -name = "gif" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae047235e33e2829703574b54fdec96bfbad892062d97fed2f76022287de61b" -dependencies = [ - "color_quant", - "weezl", -] - [[package]] name = "gif" version = "0.14.2" @@ -1120,6 +1102,23 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2e102e6eb644d3e0b186fc161e4460417880a0a0b87d235f2e5b8fb30f2e9e0" +[[package]] +name = "glifo" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d99fc21d493812643aae86d53b7bbd02f376434a90317e8a790bc209fdd6605e" +dependencies = [ + "bytemuck", + "foldhash 0.2.0", + "hashbrown 0.17.1", + "log", + "peniko", + "png", + "skrifa", + "smallvec", + "vello_common 0.0.9", +] + [[package]] name = "glob" version = "0.3.3" @@ -1139,6 +1138,15 @@ dependencies = [ "regex-syntax", ] +[[package]] +name = "guillotiere" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b17e70c989c36bad147b27a58d148c0741c51448aa5653436547323e524d0ab" +dependencies = [ + "euclid", +] + [[package]] name = "half" version = "2.7.1" @@ -1156,7 +1164,7 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ - "foldhash", + "foldhash 0.1.5", ] [[package]] @@ -1164,16 +1172,21 @@ name = "hashbrown" version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash 0.2.0", +] [[package]] name = "hayagriva" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cb69425736f184173b3ca6e27fcba440a61492a790c786b1c6af7e06a03e575" +checksum = "7b6c185c5c72546d50b25b70187f01ab9a1a2fa21c4db8691e2426fa5fce805c" dependencies = [ "biblatex", "ciborium", "citationberg", + "icu_collator", + "icu_locale", "indexmap", "paste", "roman-numerals-rs", @@ -1188,83 +1201,115 @@ dependencies = [ [[package]] name = "hayro" -version = "0.4.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048488ba88552bb0fb2a7e4001c64d5bed65d1a92167186a1bb9151571f32e60" +checksum = "c4caa128ab87fd48ffb7490617cf93f77f606820dffbc9fd9ef6ab0ed077f56d" dependencies = [ "bytemuck", "hayro-interpret", "image", - "kurbo 0.12.0", + "kurbo", + "pic-scale", + "vello_cpu", ] [[package]] -name = "hayro-font" +name = "hayro-ccitt" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10e7e97ce840a6a70e7901e240ec65ba61106b66b37a4a1b899a2ce484248463" +checksum = "9f4d0e94ddd48749f06bbe4e5389fb9799a0c45bcaf00495042076ef05e3241a" + +[[package]] +name = "hayro-cmap" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d285dc30731c8485de5fa732fbdf2b3affdf01e4da7c2135022ca6fa664bf6" dependencies = [ - "log", - "phf", + "hayro-postscript", ] [[package]] name = "hayro-interpret" -version = "0.4.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56204c972d08e844f3db13b1e14be769f846e576699b46d4f4637cc4f8f70102" +checksum = "f2613d0406898995042d0794c4245b2f2fba1246490c8ac593769bba6551129d" dependencies = [ - "bitflags 2.13.0", - "hayro-font", + "bitflags", + "hayro-cmap", "hayro-syntax", - "kurbo 0.12.0", - "log", - "moxcms 0.7.11", + "kurbo", + "moxcms", "phf", "rustc-hash", "siphasher", - "skrifa 0.37.0", + "skrifa", "smallvec", - "yoke 0.8.3", + "yoke", +] + +[[package]] +name = "hayro-jbig2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69374b3668dd45aeb3d3145cda68f2c7b4f223aaa2511e67d076f1c7d741388d" +dependencies = [ + "fearless_simd", + "hayro-ccitt", +] + +[[package]] +name = "hayro-jpeg2000" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ab947623ef4ccaa7acf0579edf7cbb5a73838e3839a7be73335e522f433a1" +dependencies = [ + "fearless_simd", ] +[[package]] +name = "hayro-postscript" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "885c5ef0654933139a9b9546fc2c69e18d37f38aa2520f079092b1be18f1fcaa" + [[package]] name = "hayro-svg" -version = "0.2.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c673304cec6e0dfd3b4f71fccecd45646899aa70279b62d3f933842abc4ac5" +checksum = "7434c89e920d84e077214a29e69b462a6518754610f732f1124af3948410cb8c" dependencies = [ "base64", "hayro-interpret", "image", - "kurbo 0.12.0", + "kurbo", "siphasher", "xmlwriter", ] [[package]] name = "hayro-syntax" -version = "0.4.0" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9e5c7dbc0f11dc42775d1a6cc00f5f5137b90b6288dd7fe5f71d17b14d10be" +checksum = "0edeafd70aa2db743de8ede8637d07ec87db05efe69cde371d03f1b185fcef27" dependencies = [ "flate2", - "kurbo 0.12.0", - "log", + "hayro-ccitt", + "hayro-jbig2", + "hayro-jpeg2000", + "memchr", "rustc-hash", "smallvec", - "zune-jpeg 0.4.21", + "zune-jpeg", ] [[package]] name = "hayro-write" -version = "0.3.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc05d8b4bc878b9aee48d980ecb25ed08f1dd9fad6da5ab4d9b7c56ec03a0cf6" +checksum = "a0b3db92c4917aad24ff30d61413a9a7509ae88b27aee1ae34eff881e1d2723a" dependencies = [ "flate2", "hayro-syntax", - "log", "pdf-writer", ] @@ -1419,18 +1464,30 @@ dependencies = [ ] [[package]] -name = "icu_collections" -version = "1.5.0" +name = "icu_collator" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "8bbdf98e5e0aa827770acee171ebb568aaab975a36b56afdb5fd0e2f525750bb" dependencies = [ - "displaydoc", - "serde", - "yoke 0.7.5", - "zerofrom", - "zerovec 0.10.4", + "icu_collator_data", + "icu_collections", + "icu_locale", + "icu_locale_core", + "icu_normalizer", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "zerovec", ] +[[package]] +name = "icu_collator_data" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038ed8e5817f2059c2f3efb0945ba78d060d3d25e8f1a1bea5139f821a21a2f0" + [[package]] name = "icu_collections" version = "2.2.0" @@ -1439,57 +1496,47 @@ checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" dependencies = [ "displaydoc", "potential_utf", + "serde", "utf8_iter", - "yoke 0.8.3", + "yoke", "zerofrom", - "zerovec 0.11.6", + "zerovec", ] [[package]] -name = "icu_locale_core" +name = "icu_locale" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" -dependencies = [ - "displaydoc", - "litemap 0.8.2", - "tinystr 0.8.3", - "writeable 0.6.3", - "zerovec 0.11.6", -] - -[[package]] -name = "icu_locid" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "d5a396343c7208121dc86e35623d3dfe19814a7613cfd14964994cdc9c9a2e26" dependencies = [ - "displaydoc", - "litemap 0.7.5", - "tinystr 0.7.6", - "writeable 0.5.5", - "zerovec 0.10.4", + "icu_collections", + "icu_locale_core", + "icu_locale_data", + "icu_provider", + "potential_utf", + "tinystr", + "zerovec", ] [[package]] -name = "icu_locid_transform" -version = "1.5.0" +name = "icu_locale_core" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", - "icu_locid", - "icu_locid_transform_data", - "icu_provider 1.5.0", - "tinystr 0.7.6", - "zerovec 0.10.4", + "litemap", + "serde", + "tinystr", + "writeable", + "zerovec", ] [[package]] -name = "icu_locid_transform_data" -version = "1.5.1" +name = "icu_locale_data" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" +checksum = "d5fdcc9ac77c6d74ff5cf6e65ef3181d6af32003b16fce3a77fb451d2f695993" [[package]] name = "icu_normalizer" @@ -1497,12 +1544,15 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" dependencies = [ - "icu_collections 2.2.0", + "icu_collections", "icu_normalizer_data", - "icu_properties 2.2.0", - "icu_provider 2.2.0", + "icu_properties", + "icu_provider", "smallvec", - "zerovec 0.11.6", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", ] [[package]] @@ -1511,67 +1561,27 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" -[[package]] -name = "icu_properties" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" -dependencies = [ - "displaydoc", - "icu_collections 1.5.0", - "icu_locid_transform", - "icu_properties_data 1.5.1", - "icu_provider 1.5.0", - "serde", - "tinystr 0.7.6", - "zerovec 0.10.4", -] - [[package]] name = "icu_properties" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" dependencies = [ - "icu_collections 2.2.0", + "icu_collections", "icu_locale_core", - "icu_properties_data 2.2.0", - "icu_provider 2.2.0", - "zerotrie 0.2.4", - "zerovec 0.11.6", + "icu_properties_data", + "icu_provider", + "serde", + "zerotrie", + "zerovec", ] -[[package]] -name = "icu_properties_data" -version = "1.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" - [[package]] name = "icu_properties_data" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" -[[package]] -name = "icu_provider" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" -dependencies = [ - "displaydoc", - "icu_locid", - "icu_provider_macros", - "postcard", - "serde", - "stable_deref_trait", - "tinystr 0.7.6", - "writeable 0.5.5", - "yoke 0.7.5", - "zerofrom", - "zerovec 0.10.4", -] - [[package]] name = "icu_provider" version = "2.2.0" @@ -1580,73 +1590,52 @@ checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", - "writeable 0.6.3", - "yoke 0.8.3", + "postcard", + "serde", + "stable_deref_trait", + "writeable", + "yoke", "zerofrom", - "zerotrie 0.2.4", - "zerovec 0.11.6", -] - -[[package]] -name = "icu_provider_adapters" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6324dfd08348a8e0374a447ebd334044d766b1839bb8d5ccf2482a99a77c0bc" -dependencies = [ - "icu_locid", - "icu_locid_transform", - "icu_provider 1.5.0", - "tinystr 0.7.6", - "zerovec 0.10.4", + "zerotrie", + "zerovec", ] [[package]] name = "icu_provider_blob" -version = "1.5.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c24b98d1365f55d78186c205817631a4acf08d7a45bdf5dc9dcf9c5d54dccf51" +checksum = "af99a43c4436b6c9a37c27a822ff05238bbad134bcdf6176732208acfae46a3f" dependencies = [ - "icu_provider 1.5.0", + "icu_provider", "postcard", "serde", - "writeable 0.5.5", - "zerotrie 0.1.3", - "zerovec 0.10.4", -] - -[[package]] -name = "icu_provider_macros" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "writeable", + "zerotrie", + "zerovec", ] [[package]] name = "icu_segmenter" -version = "1.5.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a717725612346ffc2d7b42c94b820db6908048f39434504cb130e8b46256b0de" +checksum = "5c0794db0b1a86193ac9c48768d0e6c52c54448e0870ad87907d456ee0dac964" dependencies = [ "core_maths", - "displaydoc", - "icu_collections 1.5.0", - "icu_locid", - "icu_provider 1.5.0", + "icu_collections", + "icu_locale", + "icu_provider", "icu_segmenter_data", + "potential_utf", "serde", "utf8_iter", - "zerovec 0.10.4", + "zerovec", ] [[package]] name = "icu_segmenter_data" -version = "1.5.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e52775179941363cc594e49ce99284d13d6948928d8e72c755f55e98caa1eb" +checksum = "e4a2c462a4d927d512f5f882a033ddd62f33a05bb9f230d98f736ac3dc85938f" [[package]] name = "id-arena" @@ -1678,7 +1667,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714" dependencies = [ "icu_normalizer", - "icu_properties 2.2.0", + "icu_properties", ] [[package]] @@ -1690,13 +1679,13 @@ dependencies = [ "bytemuck", "byteorder-lite", "color_quant", - "gif 0.14.2", + "gif", "image-webp", - "moxcms 0.8.1", + "moxcms", "num-traits", - "png 0.18.1", - "zune-core 0.5.1", - "zune-jpeg 0.5.15", + "png", + "zune-core", + "zune-jpeg", ] [[package]] @@ -1709,12 +1698,6 @@ dependencies = [ "quick-error", ] -[[package]] -name = "imagesize" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" - [[package]] name = "imagesize" version = "0.14.0" @@ -1729,6 +1712,7 @@ checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", "hashbrown 0.17.1", + "rayon", "serde", "serde_core", ] @@ -1745,7 +1729,7 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "533e68a5842e734946fe159fb03fc9bbbb254f590dd0d8ad321ae5ff7beca2c1" dependencies = [ - "bitflags 2.13.0", + "bitflags", "inotify-sys", "libc", ] @@ -1924,79 +1908,57 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07293a4e297ac234359b510362495713f75ea345d5307140414f20c69ffeb087" dependencies = [ - "bitflags 2.13.0", + "bitflags", "libc", ] [[package]] name = "krilla" -version = "0.6.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0ddfec86fec13d068075e14f22a7e217c281f3ed69ddcb427bf3f5d504fd674" +checksum = "27da593198b20eeba65caeb73c2bbeec3e53ab08fa549898312ce81c4fce5e33" dependencies = [ "base64", "bumpalo", "comemo", "flate2", - "float-cmp 0.10.0", - "gif 0.13.3", + "float-cmp", + "gif", "hayro-write", "image-webp", - "imagesize 0.14.0", + "imagesize", "indexmap", - "once_cell", "pdf-writer", - "png 0.17.16", + "png", "rayon", "rustc-hash", "rustybuzz", "siphasher", - "skrifa 0.37.0", + "skrifa", "smallvec", "subsetter", "tiny-skia-path", "xmp-writer", - "yoke 0.8.3", - "zune-jpeg 0.5.15", + "yoke", + "zune-jpeg", ] [[package]] name = "krilla-svg" -version = "0.3.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f485e1a850201a01dcd8d73e7cf09f2cd4c4cc85c2cd296359094d49336d8ef7" +checksum = "1237d7c37b16ca9fbc2e72dde13a10d321f9a44aceee35c062bc0a43bfc7ce16" dependencies = [ "flate2", "fontdb", "krilla", - "png 0.17.16", "resvg", + "skrifa", + "smallvec", "tiny-skia", "usvg", ] -[[package]] -name = "kurbo" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62026ae44756f8a599ba21140f350303d4f08dcdcc71b5ad9c9bb8128c13c62" -dependencies = [ - "arrayvec", - "euclid", - "smallvec", -] - -[[package]] -name = "kurbo" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce9729cc38c18d86123ab736fd2e7151763ba226ac2490ec092d1dd148825e32" -dependencies = [ - "arrayvec", - "euclid", - "smallvec", -] - [[package]] name = "kurbo" version = "0.13.1" @@ -2042,6 +2004,12 @@ dependencies = [ "libc", ] +[[package]] +name = "linebender_resource_handle" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" + [[package]] name = "linked-hash-map" version = "0.5.6" @@ -2064,20 +2032,14 @@ dependencies = [ "rand_chacha", ] -[[package]] -name = "litemap" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" -dependencies = [ - "serde", -] - [[package]] name = "litemap" version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +dependencies = [ + "serde_core", +] [[package]] name = "lock_api" @@ -2101,7 +2063,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67513274c50a2b51e5f75d9e682fcf4ab064a8a9c9ae2c3c59309084882bb24d" dependencies = [ "aes", - "bitflags 2.13.0", + "bitflags", "cbc", "chrono", "ecb", @@ -2226,16 +2188,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "moxcms" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" -dependencies = [ - "num-traits", - "pxfm", -] - [[package]] name = "moxcms" version = "0.8.1" @@ -2305,7 +2257,7 @@ version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" dependencies = [ - "bitflags 2.13.0", + "bitflags", "fsevent-sys", "inotify", "kqueue", @@ -2323,7 +2275,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42b8cfee0e339a0337359f3c88165702ac6e600dc01c0cc9579a92d62b08477a" dependencies = [ - "bitflags 2.13.0", + "bitflags", ] [[package]] @@ -2423,7 +2375,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" dependencies = [ - "bitflags 2.13.0", + "bitflags", "objc2", ] @@ -2459,7 +2411,7 @@ version = "0.10.80" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a45fa2aa886c42762255da344f0a0d313e254066c46aad76f300c3d3da62d967" dependencies = [ - "bitflags 2.13.0", + "bitflags", "cfg-if", "foreign-types", "libc", @@ -2572,16 +2524,29 @@ dependencies = [ [[package]] name = "pdf-writer" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92a79477295a713c2ed425aa82a8b5d20cec3fdee203706cbe6f3854880c1c81" +checksum = "f5e456864a7a304047bff84977dc6fb162bd956475d40ba50b2dcecaada7f753" dependencies = [ - "bitflags 2.13.0", + "bitflags", "itoa", "memchr", "ryu", ] +[[package]] +name = "peniko" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "839c8299360d2e998bdb106dc0a6cd71dcc5f4df51df1b620361bf50e283cca6" +dependencies = [ + "bytemuck", + "color", + "kurbo", + "linebender_resource_handle", + "smallvec", +] + [[package]] name = "percent-encoding" version = "2.3.2" @@ -2641,6 +2606,16 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pic-scale" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b05a62c3762cb26cb62665b915fea652def8a9f609b0b289b7f782a7394307b" +dependencies = [ + "num-traits", + "pxfm", +] + [[package]] name = "pico-args" version = "0.5.0" @@ -2672,26 +2647,13 @@ dependencies = [ "time", ] -[[package]] -name = "png" -version = "0.17.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - [[package]] name = "png" version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" dependencies = [ - "bitflags 2.13.0", + "bitflags", "crc32fast", "fdeflate", "flate2", @@ -2729,8 +2691,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" dependencies = [ "cobs", - "embedded-io 0.4.0", - "embedded-io 0.6.1", "serde", ] @@ -2740,7 +2700,9 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ - "zerovec 0.11.6", + "serde_core", + "writeable", + "zerovec", ] [[package]] @@ -2838,12 +2800,6 @@ version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0c5ccf5294c6ccd63a74f1565028353830a9c2f5eb0c682c355c471726a6e3f" -[[package]] -name = "qcms" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edecfcd5d755a5e5d98e24cf43113e7cdaec5a070edd0f6b250c03a573da30fa" - [[package]] name = "quick-error" version = "2.0.1" @@ -2953,16 +2909,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "read-fonts" -version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717cf23b488adf64b9d711329542ba34de147df262370221940dfabc2c91358" -dependencies = [ - "bytemuck", - "font-types 0.10.1", -] - [[package]] name = "read-fonts" version = "0.39.2" @@ -2970,7 +2916,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" dependencies = [ "bytemuck", - "font-types 0.11.3", + "font-types", ] [[package]] @@ -2979,7 +2925,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags", ] [[package]] @@ -3024,11 +2970,11 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" [[package]] name = "resvg" -version = "0.45.1" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8928798c0a55e03c9ca6c4c6846f76377427d2c1e1f7e6de3c06ae57942df43" +checksum = "9be183ad6a216aa96f33e4c8033b0988b8b3ea6fd2359d19af5bac4643fd8e81" dependencies = [ - "gif 0.13.3", + "gif", "image-webp", "log", "pico-args", @@ -3036,7 +2982,7 @@ dependencies = [ "svgtypes", "tiny-skia", "usvg", - "zune-jpeg 0.4.21", + "zune-jpeg", ] [[package]] @@ -3058,6 +3004,7 @@ dependencies = [ "comemo", "dirs", "ecow", + "flate2", "glob", "globset", "html5ever", @@ -3070,6 +3017,7 @@ dependencies = [ "regex", "semver", "serde", + "tar", "tempfile", "thiserror 2.0.18", "toml 1.1.2+spec-1.1.0", @@ -3078,6 +3026,7 @@ dependencies = [ "typst", "typst-html", "typst-kit", + "typst-layout", "typst-library", "typst-pdf", "typst-syntax", @@ -3167,6 +3116,15 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" +[[package]] +name = "roxmltree" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1964b10c76125c36f8afe190065a4bf9a87bf324842c05701330bba9f1cacbb" +dependencies = [ + "memchr", +] + [[package]] name = "rust_decimal" version = "1.42.0" @@ -3198,7 +3156,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -3217,7 +3175,7 @@ version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd3c7c96f8a08ee34eff8857b11b49b07d71d1c3f4e88f8a88d4c9e9f90b1702" dependencies = [ - "bitflags 2.13.0", + "bitflags", "bytemuck", "core_maths", "log", @@ -3265,7 +3223,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.0", + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -3490,16 +3448,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" -[[package]] -name = "skrifa" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c31071dedf532758ecf3fed987cdb4bd9509f900e026ab684b4ecb81ea49841" -dependencies = [ - "bytemuck", - "read-fonts 0.35.0", -] - [[package]] name = "skrifa" version = "0.42.1" @@ -3507,7 +3455,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" dependencies = [ "bytemuck", - "read-fonts 0.39.2", + "read-fonts", ] [[package]] @@ -3616,7 +3564,7 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" dependencies = [ - "float-cmp 0.9.0", + "float-cmp", ] [[package]] @@ -3688,19 +3636,19 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38803281d1c23166c5ebcb455439a5d2afe711cc909cf88af72448c297756ad6" dependencies = [ - "kurbo 0.13.1", + "kurbo", "rustc-hash", - "skrifa 0.42.1", + "skrifa", "write-fonts", ] [[package]] name = "svgtypes" -version = "0.15.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c7541fff44b35860c1a7a47a7cadf3e4a304c457b58f9870d9706ece028afc" +checksum = "695b5790b3131dafa99b3bbfd25a216edb3d216dad9ca208d4657bfb8f2abc3d" dependencies = [ - "kurbo 0.11.3", + "kurbo", "siphasher", ] @@ -3895,41 +3843,30 @@ dependencies = [ [[package]] name = "tiny-skia" -version = "0.11.4" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +checksum = "47ffee5eaaf5527f630fb0e356b90ebdec84d5d18d937c5e440350f88c5a91ea" dependencies = [ "arrayref", "arrayvec", "bytemuck", "cfg-if", "log", - "png 0.17.16", + "png", "tiny-skia-path", ] [[package]] name = "tiny-skia-path" -version = "0.11.4" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +checksum = "edca365c3faccca67d06593c5980fa6c57687de727a03131735bb85f01fdeeb9" dependencies = [ "arrayref", "bytemuck", "strict-num", ] -[[package]] -name = "tinystr" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" -dependencies = [ - "displaydoc", - "serde", - "zerovec 0.10.4", -] - [[package]] name = "tinystr" version = "0.8.3" @@ -3938,7 +3875,7 @@ checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "serde_core", - "zerovec 0.11.6", + "zerovec", ] [[package]] @@ -4122,7 +4059,7 @@ version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ - "bitflags 2.13.0", + "bitflags", "bytes", "futures-core", "futures-util", @@ -4256,10 +4193,11 @@ checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" [[package]] name = "typst" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f6511ee598476f4f322b4d13891083d96dbacb8f9c2b908604c7094ba390653" +checksum = "3c8bf2a5a9d58cc542764a88dd43c8a679b683db4ae23e36267219339ab36b01" dependencies = [ + "arrayvec", "comemo", "ecow", "rustc-hash", @@ -4276,15 +4214,18 @@ dependencies = [ [[package]] name = "typst-assets" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5613cb719a6222fe9b74027c3625d107767ec187bff26b8fc931cf58942c834f" +checksum = "da9b236d339dce0ec443dc44afe4ba4c6d76b8917bd4b1ae80158d2111f6637b" +dependencies = [ + "bitflags", +] [[package]] name = "typst-eval" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "687757487dfc0c1e941344d5024cf7a28364e70c3e304faad89ac65597f62526" +checksum = "4d064876305073ab75d5af039ae5e8dcb32c4cac4aa9f43d0f5aae347baef7c3" dependencies = [ "comemo", "ecow", @@ -4302,10 +4243,11 @@ dependencies = [ [[package]] name = "typst-html" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e29f8da4f964d4c90739c3c1e0288b0ba1bccc3cc50623a6d558300b86ca8aad" +checksum = "d442f92bae44087735efc8b83508b259c573bbccf027e098ac68c8f4ca879f76" dependencies = [ + "az", "bumpalo", "comemo", "ecow", @@ -4319,13 +4261,14 @@ dependencies = [ "typst-syntax", "typst-timing", "typst-utils", + "unicode-math-class", ] [[package]] name = "typst-kit" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31476ec753e080ffdd543a0e74b6d319355449ff3eca3f216634f31cfd09a92a" +checksum = "55a24650fc436d32deb55b49fd63f7bcad3a864c96f52587b9934c85e0092d6f" dependencies = [ "dirs", "ecow", @@ -4336,6 +4279,8 @@ dependencies = [ "native-tls", "once_cell", "openssl", + "parking_lot", + "rustc-hash", "serde", "serde_json", "tar", @@ -4345,13 +4290,14 @@ dependencies = [ "typst-timing", "typst-utils", "ureq", + "url", ] [[package]] name = "typst-layout" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cab0200105831a9158e63718a0f6141c78cb2c1722ed17d19ad28941e3b8491" +checksum = "ae5af3949efc6d02e3d55e79430c9096415fcf68166414c3a0e5fed1c3325d5f" dependencies = [ "az", "bumpalo", @@ -4360,12 +4306,12 @@ dependencies = [ "ecow", "either", "hypher", - "icu_properties 1.5.1", - "icu_provider 1.5.0", - "icu_provider_adapters", + "icu_properties", + "icu_provider", "icu_provider_blob", "icu_segmenter", - "kurbo 0.12.0", + "kurbo", + "libm", "memchr", "rustc-hash", "rustybuzz", @@ -4385,41 +4331,42 @@ dependencies = [ [[package]] name = "typst-library" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e276a5de53020c43efe2111ec236252e54ea4480b5ac18063e663dfbe03d9d1b" +checksum = "9550a33d0f4e1965fd7d69abcf10135e965a4ad3a3aee24573b52dda9234e491" dependencies = [ + "arrayvec", "az", - "bitflags 2.13.0", + "bitflags", "bumpalo", - "chinese-number", "ciborium", "codex", "comemo", "csv", "ecow", + "either", "flate2", "fontdb", "glidesort", "hayagriva", "hayro-syntax", - "icu_properties 1.5.1", - "icu_provider 1.5.0", - "icu_provider_blob", + "icu_properties", "image", "indexmap", "kamadak-exif", - "kurbo 0.12.0", + "kurbo", + "libm", "lipsum", "memchr", + "moxcms", "palette", + "percent-encoding", "phf", - "png 0.17.16", - "qcms", + "png", "rayon", "regex", "regex-syntax", - "roxmltree", + "roxmltree 0.21.1", "rust_decimal", "rustc-hash", "rustybuzz", @@ -4451,9 +4398,9 @@ dependencies = [ [[package]] name = "typst-macros" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "141cbd1027129fbf6bda1013f52a264df7befc7388cc8f47767d65e803fd3a59" +checksum = "500e2873a544ca161f98183eea7ddb00030d16f4585b5ffa9e9c8e24f53148e1" dependencies = [ "heck", "proc-macro2", @@ -4463,14 +4410,16 @@ dependencies = [ [[package]] name = "typst-pdf" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c8a4630754767cd10d48e8b8186e7dc784631a30a3a93521edf7d77aebd0c0" +checksum = "cd7b33bcabc3357480768f6c78dda99a838d621c71b4738b25e09ac30ac063c9" dependencies = [ "az", "bytemuck", + "codex", "comemo", "ecow", + "flate2", "image", "indexmap", "infer", @@ -4480,6 +4429,7 @@ dependencies = [ "serde", "smallvec", "typst-assets", + "typst-layout", "typst-library", "typst-macros", "typst-syntax", @@ -4489,15 +4439,16 @@ dependencies = [ [[package]] name = "typst-realize" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7ffe964757fb93d2e98978aa2a74ee85b0f94c8643e8f3550737258b58f39d8" +checksum = "917e09614771258b13409b9a8d4f3915b2a2f7f28ca987701695f82fc6a7c0b9" dependencies = [ "arrayvec", "bumpalo", "comemo", "ecow", "regex", + "typst-html", "typst-library", "typst-macros", "typst-syntax", @@ -4507,9 +4458,9 @@ dependencies = [ [[package]] name = "typst-svg" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46b811837ade1f0243ef0d8bf3fb06d166443090eac22c28643f374c2ccdc9d" +checksum = "878b6e1293c2bea77a8be50670d1cbca4e676af96480313a105cba539da51d1c" dependencies = [ "base64", "comemo", @@ -4518,22 +4469,25 @@ dependencies = [ "hayro", "hayro-svg", "image", + "indexmap", + "itoa", "rustc-hash", + "ryu", "ttf-parser", "typst-assets", + "typst-layout", "typst-library", "typst-macros", "typst-timing", "typst-utils", - "xmlparser", "xmlwriter", ] [[package]] name = "typst-syntax" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a95d9192060e23b1e491b0b94dff676acddc92a4d672aeb8ca3890a5a734e879" +checksum = "22bf7f87450e5841debd4986b0f912b0f7a2251e600c08aca406305ff52c67b4" dependencies = [ "ecow", "rustc-hash", @@ -4550,9 +4504,9 @@ dependencies = [ [[package]] name = "typst-timing" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7be94f8faf19841b49574ef5c7fd7a12e2deb7c3d8deba5a596f35d2222024cd" +checksum = "6cc0c78ece2ade6ef73d00a13f9c474e02efc3bcfdb770e16d7c4d24e7492773" dependencies = [ "parking_lot", "serde", @@ -4561,15 +4515,18 @@ dependencies = [ [[package]] name = "typst-utils" -version = "0.14.2" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3966c92e8fa48c7ce898130d07000d985f18206d92b250f0f939287fbccdee3" +checksum = "40215eb2541102ecfb4cf3bef29da53033a82e22dbc2308c43bdb855701bf8d2" dependencies = [ + "libm", "once_cell", "portable-atomic", "rayon", "rustc-hash", + "semver", "siphasher", + "smallvec", "thin-vec", "unicode-math-class", ] @@ -4591,7 +4548,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dce1bf08044d4b7a94028c93786f8566047edc11110595914de93362559bc658" dependencies = [ "serde", - "tinystr 0.8.3", + "tinystr", ] [[package]] @@ -4601,7 +4558,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5957eb82e346d7add14182a3315a7e298f04e1ba4baac36f7f0dbfedba5fc25" dependencies = [ "proc-macro-hack", - "tinystr 0.8.3", + "tinystr", "unic-langid-impl", "unic-langid-macros-impl", ] @@ -4742,25 +4699,26 @@ dependencies = [ [[package]] name = "usvg" -version = "0.45.1" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80be9b06fbae3b8b303400ab20778c80bbaf338f563afe567cf3c9eea17b47ef" +checksum = "d46cf96c5f498d36b7a9693bc6a7075c0bb9303189d61b2249b0dc3d309c07de" dependencies = [ "base64", "data-url", "flate2", "fontdb", - "imagesize 0.13.0", - "kurbo 0.11.3", + "imagesize", + "kurbo", "log", "pico-args", - "roxmltree", + "roxmltree 0.21.1", "rustybuzz", "simplecss", "siphasher", "strict-num", "svgtypes", "tiny-skia-path", + "ttf-parser", "unicode-bidi", "unicode-script", "unicode-vo", @@ -4773,6 +4731,12 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + [[package]] name = "utf8-decode" version = "2.0.0" @@ -4808,6 +4772,53 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vello_common" +version = "0.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3361bff7f7d82c0c496b92048db83846691f0e844cc28dee92b1c824291b55ee" +dependencies = [ + "bytemuck", + "fearless_simd", + "guillotiere", + "hashbrown 0.17.1", + "log", + "peniko", + "png", + "smallvec", + "thiserror 2.0.18", +] + +[[package]] +name = "vello_common" +version = "0.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d672facaa2d697285a786cd9d44d614cd2ce54cdc022504bf339f8fff3b750" +dependencies = [ + "bytemuck", + "fearless_simd", + "guillotiere", + "hashbrown 0.17.1", + "log", + "peniko", + "png", + "smallvec", + "thiserror 2.0.18", +] + +[[package]] +name = "vello_cpu" +version = "0.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d8ded630e8316bb94a55881256506d1f3b9947b5f66db8a7d32ca7ba02decd0" +dependencies = [ + "bytemuck", + "glifo", + "hashbrown 0.17.1", + "png", + "vello_common 0.0.8", +] + [[package]] name = "version_check" version = "0.9.5" @@ -4917,48 +4928,48 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.51.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb321403ce594274827657a908e13d1d9918aa02257b8bf8391949d9764023ff" +checksum = "2300d0f78cba12f14e29e8dd157ea64050c0a688179aefdb2050105805594a0c" dependencies = [ "spin", "wasmi_collections", "wasmi_core", "wasmi_ir", - "wasmparser 0.228.0", + "wasmparser 0.239.0", ] [[package]] name = "wasmi_collections" -version = "0.51.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9b8e98e45a2a534489f8225e765cbf1cb9a3078072605e58158910cf4749172" +checksum = "f8a8c42a2a76148d43097b1d7cc2a5bf33d5c23bd4dd69015fc887e311767884" [[package]] name = "wasmi_core" -version = "0.51.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c25f375c0cdf14810eab07f532f61f14d4966f09c747a55067fdf3196e8512e6" +checksum = "9013136083d988725953390bf668b64b7a218fabf26f8b913bbc59546b97ee27" dependencies = [ "libm", ] [[package]] name = "wasmi_ir" -version = "0.51.5" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624e2a68a4293ecb8f564260b68394b29cf3b3edba6bce35532889a2cb33c3d9" +checksum = "ba1fa003f79156f406d62ef0e1464dc03e11ace37170e9fa7524299a75ad8f68" dependencies = [ "wasmi_core", ] [[package]] name = "wasmparser" -version = "0.228.0" +version = "0.239.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4abf1132c1fdf747d56bbc1bb52152400c70f336870f968b85e89ea422198ae3" +checksum = "8c9d90bb93e764f6beabf1d02028c70a2156a6583e63ac4218dd07ef733368b0" dependencies = [ - "bitflags 2.13.0", + "bitflags", ] [[package]] @@ -4967,7 +4978,7 @@ version = "0.244.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" dependencies = [ - "bitflags 2.13.0", + "bitflags", "hashbrown 0.15.5", "indexmap", "semver", @@ -5272,7 +5283,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" dependencies = [ "anyhow", - "bitflags 2.13.0", + "bitflags", "indexmap", "log", "serde", @@ -5308,18 +5319,18 @@ version = "0.48.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb731d4c4d93eacc69a1ad2f270f905788a98e4a3438267bcafbe08d3431c8d8" dependencies = [ - "font-types 0.11.3", + "font-types", "indexmap", - "kurbo 0.13.1", + "kurbo", "log", - "read-fonts 0.39.2", + "read-fonts", ] [[package]] -name = "writeable" -version = "0.5.5" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" [[package]] name = "writeable" @@ -5353,12 +5364,6 @@ dependencies = [ "markup5ever", ] -[[package]] -name = "xmlparser" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" - [[package]] name = "xmlwriter" version = "0.1.0" @@ -5380,18 +5385,6 @@ dependencies = [ "linked-hash-map", ] -[[package]] -name = "yoke" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" -dependencies = [ - "serde", - "stable_deref_trait", - "yoke-derive 0.7.5", - "zerofrom", -] - [[package]] name = "yoke" version = "0.8.3" @@ -5399,22 +5392,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" dependencies = [ "stable_deref_trait", - "yoke-derive 0.8.2", + "yoke-derive", "zerofrom", ] -[[package]] -name = "yoke-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", - "synstructure", -] - [[package]] name = "yoke-derive" version = "0.8.2" @@ -5468,18 +5449,6 @@ dependencies = [ "synstructure", ] -[[package]] -name = "zerotrie" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb594dd55d87335c5f60177cee24f19457a5ec10a065e0a3014722ad252d0a1f" -dependencies = [ - "displaydoc", - "litemap 0.7.5", - "serde", - "zerovec 0.10.4", -] - [[package]] name = "zerotrie" version = "0.2.4" @@ -5487,20 +5456,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", - "yoke 0.8.3", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" -dependencies = [ - "serde", - "yoke 0.7.5", + "litemap", + "serde_core", + "yoke", "zerofrom", - "zerovec-derive 0.10.3", + "zerovec", ] [[package]] @@ -5510,20 +5470,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "serde", - "yoke 0.8.3", + "yoke", "zerofrom", - "zerovec-derive 0.11.3", -] - -[[package]] -name = "zerovec-derive" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", + "zerovec-derive", ] [[package]] @@ -5561,32 +5510,17 @@ version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" -[[package]] -name = "zune-core" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" - [[package]] name = "zune-core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" -[[package]] -name = "zune-jpeg" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" -dependencies = [ - "zune-core 0.4.12", -] - [[package]] name = "zune-jpeg" version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27bc9d5b815bc103f142aa054f561d9187d191692ec7c2d1e2b4737f8dbd7296" dependencies = [ - "zune-core 0.5.1", + "zune-core", ] diff --git a/cases/rheo_package_slides/main.typ b/cases/rheo_package_slides/main.typ new file mode 100644 index 0000000..fc42c3e --- /dev/null +++ b/cases/rheo_package_slides/main.typ @@ -0,0 +1,19 @@ +// @rheo:test +// @rheo:formats html +// @rheo:description Tests that @rheo/slides:0.1.0 is downloaded, cached, and compiled correctly + +#import "@rheo/slides:0.1.0": template, slide + +#show: template.with(title: "Test Slides") + +#slide[ + == First Slide + + Hello from slide one. +] + +#slide[ + == Second Slide + + Hello from slide two. +] diff --git a/cases/rheo_package_slides/rheo.toml b/cases/rheo_package_slides/rheo.toml new file mode 100644 index 0000000..bba0dc5 --- /dev/null +++ b/cases/rheo_package_slides/rheo.toml @@ -0,0 +1,6 @@ +version = "0.3.1" +formats = ["html"] + +[html.spine] +title = "Rheo Package Slides" +vertebrae = ["main.typ"] diff --git a/ref/examples/rheo_package_slides/html/main.html b/ref/examples/rheo_package_slides/html/main.html new file mode 100644 index 0000000..789544b --- /dev/null +++ b/ref/examples/rheo_package_slides/html/main.html @@ -0,0 +1 @@ +

Test Slides

First Slide

Hello from slide one.

Second Slide

Hello from slide two.

\ No newline at end of file diff --git a/ref/examples/rheo_package_slides/html/rheo/slides/index.metadata.json b/ref/examples/rheo_package_slides/html/rheo/slides/index.metadata.json new file mode 100644 index 0000000..17b2195 --- /dev/null +++ b/ref/examples/rheo_package_slides/html/rheo/slides/index.metadata.json @@ -0,0 +1,6 @@ +{ + "filetype": "css", + "file_size": 1452, + "path": "rheo/slides/index.css", + "hash": "7c578683e2bc07d35b2d15cd179d8056fbb3eef7a6ff72908b5766ac5b3ed379" +} \ No newline at end of file diff --git a/ref/examples/rheo_package_slides/html/rheo/slides/lib.js b/ref/examples/rheo_package_slides/html/rheo/slides/lib.js new file mode 100644 index 0000000..50e2fe1 --- /dev/null +++ b/ref/examples/rheo_package_slides/html/rheo/slides/lib.js @@ -0,0 +1,5493 @@ +(function(){var e=`/** + * Beige theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); +section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { + color: #fff; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #f7f3de; + --r-main-font: Lato, sans-serif; + --r-main-font-size: 40px; + --r-main-color: #333; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: League Gothic, Impact, sans-serif; + --r-heading-color: #333; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: none; + --r-heading-font-weight: normal; + --r-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); + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #8b743d; + --r-link-color-dark: rgb(118.15, 98.6, 51.85); + --r-link-color-hover: rgb(179.36, 150.84, 82.64); + --r-selection-background-color: rgba(79, 64, 28, 0.99); + --r-selection-color: #fff; + --r-overlay-element-bg-color: 0, 0, 0; + --r-overlay-element-fg-color: 240, 240, 240; +} + +.reveal-viewport { + background: rgb(247, 242, 211); + background: -moz-radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%); + background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, rgb(255, 255, 255)), color-stop(100%, rgb(247, 242, 211))); + background: -webkit-radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%); + background: -o-radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%); + background: -ms-radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%); + background: radial-gradient(center, circle cover, rgb(255, 255, 255) 0%, rgb(247, 242, 211) 100%); + 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: 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); + } +}`,t=`/** + * 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). + */ +@import url(./fonts/source-sans-pro/source-sans-pro.css); +section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { + color: #000; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #000000; + --r-main-font: Source Sans Pro, Helvetica, sans-serif; + --r-main-font-size: 42px; + --r-main-color: #fff; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: Source Sans Pro, Helvetica, sans-serif; + --r-heading-color: #fff; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: none; + --r-heading-font-weight: 600; + --r-heading1-text-shadow: none; + --r-heading1-size: 2.5em; + --r-heading2-size: 1.6em; + --r-heading3-size: 1.3em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #42affa; + --r-link-color-dark: rgb(19.8216494845, 155.4536082474, 248.7783505155); + --r-link-color-hover: rgb(94.35, 187, 250.75); + --r-selection-background-color: rgb(113.25, 195, 251.25); + --r-selection-color: #fff; + --r-overlay-element-bg-color: 240, 240, 240; + --r-overlay-element-fg-color: 0, 0, 0; +} + +.reveal-viewport { + background: #000000; + 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: 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); + } +}`,n=`/** + * Black theme for reveal.js. This is the opposite of the 'white' theme. + * + * By Hakim El Hattab, http://hakim.se + */ +@import url(./fonts/source-sans-pro/source-sans-pro.css); +section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { + color: #222; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #191919; + --r-main-font: Source Sans Pro, Helvetica, sans-serif; + --r-main-font-size: 42px; + --r-main-color: #fff; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: Source Sans Pro, Helvetica, sans-serif; + --r-heading-color: #fff; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: none; + --r-heading-font-weight: 600; + --r-heading1-text-shadow: none; + --r-heading1-size: 2.5em; + --r-heading2-size: 1.6em; + --r-heading3-size: 1.3em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #42affa; + --r-link-color-dark: rgb(19.8216494845, 155.4536082474, 248.7783505155); + --r-link-color-hover: rgb(94.35, 187, 250.75); + --r-selection-background-color: rgba(66, 175, 250, 0.75); + --r-selection-color: #fff; + --r-overlay-element-bg-color: 240, 240, 240; + --r-overlay-element-fg-color: 0, 0, 0; +} + +.reveal-viewport { + background: #191919; + 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: 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); + } +}`,r=`/** + * 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. + * + */ +@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic); +section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { + color: #222; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #222; + --r-main-font: Ubuntu, sans-serif; + --r-main-font-size: 40px; + --r-main-color: #eee; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: Ubuntu, sans-serif; + --r-heading-color: #eee; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: 2px 2px 2px #222; + --r-heading-font-weight: normal; + --r-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); + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #a23; + --r-link-color-dark: rgb(144.5, 28.9, 43.35); + --r-link-color-hover: rgb(214.2, 51, 71.4); + --r-selection-background-color: #a23; + --r-selection-color: #fff; + --r-overlay-element-bg-color: 240, 240, 240; + --r-overlay-element-fg-color: 0, 0, 0; +} + +.reveal-viewport { + background: #222; + 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: 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); + } +} +.reveal p { + font-weight: 300; + text-shadow: 1px 1px #222; +} + +section.has-light-background p, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4 { + text-shadow: none; +} + +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + font-weight: 700; +} + +.reveal p code { + background-color: #23241f; + display: inline-block; + border-radius: 7px; +} + +.reveal small code { + vertical-align: baseline; +}`,i=`/** + * Dracula Dark theme for reveal.js. + * Based on https://draculatheme.com + */ +/** + * Dracula colors by Zeno Rocha + * https://draculatheme.com/contribute + */ +html * { + color-profile: sRGB; + rendering-intent: auto; +} + +section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { + color: #282A36; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #282A36; + --r-main-font: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif; + --r-main-font-size: 40px; + --r-main-color: #F8F8F2; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: League Gothic, Impact, sans-serif; + --r-heading-color: #BD93F9; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: none; + --r-heading-text-shadow: none; + --r-heading-font-weight: normal; + --r-heading1-text-shadow: none; + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: Fira Code, Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace; + --r-link-color: #FF79C6; + --r-link-color-dark: rgb(255, 64.6, 174.0089552239); + --r-link-color-hover: #8BE9FD; + --r-selection-background-color: #44475A; + --r-selection-color: #fff; + --r-overlay-element-bg-color: 240, 240, 240; + --r-overlay-element-fg-color: 0, 0, 0; +} + +.reveal-viewport { + background: #282A36; + 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: 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); + } +} +:root { + --r-bold-color: #FFB86C; + --r-italic-color: #F1FA8C; + --r-inline-code-color: #50FA7B; + --r-list-bullet-color: #8BE9FD; +} + +.reveal strong, .reveal b { + color: var(--r-bold-color); +} +.reveal em, .reveal i, .reveal blockquote { + color: var(--r-italic-color); +} +.reveal code { + color: var(--r-inline-code-color); +} +.reveal ul li::marker, .reveal ol li::marker { + color: var(--r-list-bullet-color); +}`,a=`/** + * League theme for reveal.js. + * + * This was the default theme pre-3.0.0. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); +section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { + color: #222; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #2b2b2b; + --r-main-font: Lato, sans-serif; + --r-main-font-size: 40px; + --r-main-color: #eee; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: League Gothic, Impact, sans-serif; + --r-heading-color: #eee; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); + --r-heading-font-weight: normal; + --r-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); + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #13DAEC; + --r-link-color-dark: rgb(16.15, 185.3, 200.6); + --r-link-color-hover: rgb(66.2, 225.4, 239.8); + --r-selection-background-color: #FF5E99; + --r-selection-color: #fff; + --r-overlay-element-bg-color: 240, 240, 240; + --r-overlay-element-fg-color: 0, 0, 0; +} + +.reveal-viewport { + background: rgb(28, 30, 32); + background: -moz-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, rgb(85, 90, 95)), color-stop(100%, rgb(28, 30, 32))); + background: -webkit-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + background: -o-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + background: -ms-radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + background: radial-gradient(center, circle cover, rgb(85, 90, 95) 0%, rgb(28, 30, 32) 100%); + 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: 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); + } +}`,o=`/** + * Solarized Dark theme for reveal.js. + * Author: Achim Staebler + */ +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); +/** + * Solarized colors by Ethan Schoonover + */ +section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { + color: #222; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #002b36; + --r-main-font: Lato, sans-serif; + --r-main-font-size: 40px; + --r-main-color: #93a1a1; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: League Gothic, Impact, sans-serif; + --r-heading-color: #eee8d5; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: none; + --r-heading-font-weight: normal; + --r-heading1-text-shadow: none; + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #268bd2; + --r-link-color-dark: rgb(32.3, 118.15, 178.5); + --r-link-color-hover: rgb(77.5161290323, 162.8774193548, 222.8838709677); + --r-selection-background-color: #d33682; + --r-selection-color: #fff; + --r-overlay-element-bg-color: 240, 240, 240; + --r-overlay-element-fg-color: 0, 0, 0; +} + +.reveal-viewport { + background: #002b36; + 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: 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); + } +}`,s=`/** + * Black theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ +@import url(https://fonts.googleapis.com/css?family=Montserrat:700); +@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); +section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { + color: #222; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #111; + --r-main-font: Open Sans, sans-serif; + --r-main-font-size: 40px; + --r-main-color: #eee; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: Montserrat, Impact, sans-serif; + --r-heading-color: #eee; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: -0.03em; + --r-heading-text-transform: none; + --r-heading-text-shadow: none; + --r-heading-font-weight: normal; + --r-heading1-text-shadow: none; + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #e7ad52; + --r-link-color-dark: rgb(225.2802030457, 153.4573604061, 40.7697969543); + --r-link-color-hover: rgb(235.8, 189.4, 116.6); + --r-selection-background-color: #e7ad52; + --r-selection-color: #fff; + --r-overlay-element-bg-color: 240, 240, 240; + --r-overlay-element-fg-color: 0, 0, 0; +} + +.reveal-viewport { + background: #111; + 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: 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); + } +}`,c=`/** + * 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. + */ +.reveal a { + line-height: 1.3em; +} + +section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { + color: #fff; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #F0F1EB; + --r-main-font: Palatino Linotype, Book Antiqua, Palatino, FreeSerif, serif; + --r-main-font-size: 40px; + --r-main-color: #000; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: Palatino Linotype, Book Antiqua, Palatino, FreeSerif, serif; + --r-heading-color: #383D3D; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: none; + --r-heading-text-shadow: none; + --r-heading-font-weight: normal; + --r-heading1-text-shadow: none; + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #51483D; + --r-link-color-dark: rgb(68.85, 61.2, 51.85); + --r-link-color-hover: rgb(122.9830985915, 109.3183098592, 92.6169014085); + --r-selection-background-color: #26351C; + --r-selection-color: #fff; + --r-overlay-element-bg-color: 0, 0, 0; + --r-overlay-element-fg-color: 240, 240, 240; +} + +.reveal-viewport { + background: #F0F1EB; + 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: 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); + } +}`,l=`/** + * 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 + */ +@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); +section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { + color: #fff; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #fff; + --r-main-font: Lato, sans-serif; + --r-main-font-size: 40px; + --r-main-color: #000; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: News Cycle, Impact, sans-serif; + --r-heading-color: #000; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: none; + --r-heading-text-shadow: none; + --r-heading-font-weight: normal; + --r-heading1-text-shadow: none; + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #00008B; + --r-link-color-dark: rgb(0, 0, 118.15); + --r-link-color-hover: rgb(0, 0, 213.2); + --r-selection-background-color: rgba(0, 0, 0, 0.99); + --r-selection-color: #fff; + --r-overlay-element-bg-color: 0, 0, 0; + --r-overlay-element-fg-color: 240, 240, 240; +} + +.reveal-viewport { + background: #fff; + 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: 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); + } +}`,u=`/** + * Sky theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ +@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); +.reveal a { + line-height: 1.3em; +} + +section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { + color: #fff; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #f7fbfc; + --r-main-font: Open Sans, sans-serif; + --r-main-font-size: 40px; + --r-main-color: #333; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: Quicksand, sans-serif; + --r-heading-color: #333; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: -0.08em; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: none; + --r-heading-font-weight: normal; + --r-heading1-text-shadow: none; + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #3b759e; + --r-link-color-dark: rgb(50.15, 99.45, 134.3); + --r-link-color-hover: rgb(84.330875576, 146.9815668203, 191.269124424); + --r-selection-background-color: #134674; + --r-selection-color: #fff; + --r-overlay-element-bg-color: 0, 0, 0; + --r-overlay-element-fg-color: 240, 240, 240; +} + +.reveal-viewport { + background: #add9e4; + background: -moz-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%); + background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #f7fbfc), color-stop(100%, #add9e4)); + background: -webkit-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%); + background: -o-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%); + background: -ms-radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%); + background: radial-gradient(center, circle cover, #f7fbfc 0%, #add9e4 100%); + 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: 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); + } +}`,d=`/** + * Solarized Light theme for reveal.js. + * Author: Achim Staebler + */ +@import url(./fonts/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); +/** + * Solarized colors by Ethan Schoonover + */ +html * { + color-profile: sRGB; + rendering-intent: auto; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #fdf6e3; + --r-main-font: Lato, sans-serif; + --r-main-font-size: 40px; + --r-main-color: #657b83; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: League Gothic, Impact, sans-serif; + --r-heading-color: #586e75; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: none; + --r-heading-font-weight: normal; + --r-heading1-text-shadow: none; + --r-heading1-size: 3.77em; + --r-heading2-size: 2.11em; + --r-heading3-size: 1.55em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #268bd2; + --r-link-color-dark: rgb(32.3, 118.15, 178.5); + --r-link-color-hover: rgb(77.5161290323, 162.8774193548, 222.8838709677); + --r-selection-background-color: #d33682; + --r-selection-color: #fff; + --r-overlay-element-bg-color: 0, 0, 0; + --r-overlay-element-fg-color: 240, 240, 240; +} + +.reveal-viewport { + background: #fdf6e3; + 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: 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); + } +}`,f=`/** + * 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). + */ +@import url(./fonts/source-sans-pro/source-sans-pro.css); +section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { + color: #fff; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #fff; + --r-main-font: Source Sans Pro, Helvetica, sans-serif; + --r-main-font-size: 42px; + --r-main-color: #000; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: Source Sans Pro, Helvetica, sans-serif; + --r-heading-color: #000; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: none; + --r-heading-font-weight: 600; + --r-heading1-text-shadow: none; + --r-heading1-size: 2.5em; + --r-heading2-size: 1.6em; + --r-heading3-size: 1.3em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #2a76dd; + --r-link-color-dark: rgb(30.7720647773, 99.5566801619, 192.7779352227); + --r-link-color-hover: rgb(73.95, 138.55, 226.1); + --r-selection-background-color: rgb(95.25, 152.25, 229.5); + --r-selection-color: #fff; + --r-overlay-element-bg-color: 0, 0, 0; + --r-overlay-element-fg-color: 240, 240, 240; +} + +.reveal-viewport { + background: #fff; + 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: 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); + } +}`,p=`/** + * White theme for reveal.js. This is the opposite of the 'black' theme. + * + * By Hakim El Hattab, http://hakim.se + */ +@import url(./fonts/source-sans-pro/source-sans-pro.css); +section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { + color: #fff; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #fff; + --r-main-font: Source Sans Pro, Helvetica, sans-serif; + --r-main-font-size: 42px; + --r-main-color: #222; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: Source Sans Pro, Helvetica, sans-serif; + --r-heading-color: #222; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: uppercase; + --r-heading-text-shadow: none; + --r-heading-font-weight: 600; + --r-heading1-text-shadow: none; + --r-heading1-size: 2.5em; + --r-heading2-size: 1.6em; + --r-heading3-size: 1.3em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #2a76dd; + --r-link-color-dark: rgb(30.7720647773, 99.5566801619, 192.7779352227); + --r-link-color-hover: rgb(73.95, 138.55, 226.1); + --r-selection-background-color: rgb(95.25, 152.25, 229.5); + --r-selection-color: #fff; + --r-overlay-element-bg-color: 0, 0, 0; + --r-overlay-element-fg-color: 240, 240, 240; +} + +.reveal-viewport { + background: #fff; + 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: 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); + } +}`,m=`/** + * 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). + */ +@import url(./fonts/source-sans-pro/source-sans-pro.css); +section.has-dark-background, section.has-dark-background h1, section.has-dark-background h2, section.has-dark-background h3, section.has-dark-background h4, section.has-dark-background h5, section.has-dark-background h6 { + color: #fff; +} + +/********************************************* + * GLOBAL STYLES + *********************************************/ +:root { + --r-background-color: #fff; + --r-main-font: Source Sans Pro, Helvetica, sans-serif; + --r-main-font-size: 25px; + --r-main-color: #000; + --r-block-margin: 20px; + --r-heading-margin: 0 0 20px 0; + --r-heading-font: Source Sans Pro, Helvetica, sans-serif; + --r-heading-color: #000; + --r-heading-line-height: 1.2; + --r-heading-letter-spacing: normal; + --r-heading-text-transform: none; + --r-heading-text-shadow: none; + --r-heading-font-weight: 450; + --r-heading1-text-shadow: none; + --r-heading1-size: 2.5em; + --r-heading2-size: 1.6em; + --r-heading3-size: 1.3em; + --r-heading4-size: 1em; + --r-code-font: monospace; + --r-link-color: #2a76dd; + --r-link-color-dark: #1a53a1; + --r-link-color-hover: #6ca0e8; + --r-selection-background-color: #98bdef; + --r-selection-color: #fff; +} + +.reveal-viewport { + background: #fff; + 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: 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); + } +}`,h=(e,t)=>{for(let n in t)e[n]=t[n];return e},g=(e,t)=>Array.from(e.querySelectorAll(t)),_=(e,t,n)=>{n?e.classList.add(t):e.classList.remove(t)},v=e=>{if(typeof e==`string`){if(e===`null`)return null;if(e===`true`)return!0;if(e===`false`)return!1;if(e.match(/^-?[\d\.]+$/))return parseFloat(e)}return e},y=(e,t)=>{e.style.transform=t},b=(e,t)=>{let n=e.matches||e.matchesSelector||e.msMatchesSelector;return!(!n||!n.call(e,t))},x=(e,t)=>{if(typeof e.closest==`function`)return e.closest(t);for(;e;){if(b(e,t))return e;e=e.parentNode}return null},S=e=>{let t=(e||=document.documentElement).requestFullscreen||e.webkitRequestFullscreen||e.webkitRequestFullScreen||e.mozRequestFullScreen||e.msRequestFullscreen;t&&t.apply(e)},C=e=>{let t=document.createElement(`style`);return t.type=`text/css`,e&&e.length>0&&(t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e))),document.head.appendChild(t),t},ee=()=>{let e={};location.search.replace(/[A-Z0-9]+?=([\w\.%-]*)/gi,(t=>{e[t.split(`=`).shift()]=t.split(`=`).pop()}));for(let t in e){let n=e[t];e[t]=v(unescape(n))}return e.dependencies!==void 0&&delete e.dependencies,e},w={mp4:`video/mp4`,m4a:`video/mp4`,ogv:`video/ogg`,mpeg:`video/mpeg`,webm:`video/webm`},te=navigator.userAgent,T=/(iphone|ipod|ipad|android)/gi.test(te)||navigator.platform===`MacIntel`&&navigator.maxTouchPoints>1,E=/android/gi.test(te),D=function(e){if(e){var t=function(e){return[].slice.call(e)},n=3,r=[],i=null,a=`requestAnimationFrame`in e?function(){e.cancelAnimationFrame(i),i=e.requestAnimationFrame((function(){return s(r.filter((function(e){return e.dirty&&e.active})))}))}:function(){},o=function(e){return function(){r.forEach((function(t){return t.dirty=e})),a()}},s=function(e){e.filter((function(e){return!e.styleComputed})).forEach((function(e){e.styleComputed=d(e)})),e.filter(f).forEach(p);var t=e.filter(u);t.forEach(l),t.forEach((function(e){p(e),c(e)})),t.forEach(m)},c=function(e){return e.dirty=0},l=function(e){e.availableWidth=e.element.parentNode.clientWidth,e.currentWidth=e.element.scrollWidth,e.previousFontSize=e.currentFontSize,e.currentFontSize=Math.min(Math.max(e.minSize,e.availableWidth/e.currentWidth*e.previousFontSize),e.maxSize),e.whiteSpace=e.multiLine&&e.currentFontSize===e.minSize?`normal`:`nowrap`},u=function(e){return e.dirty!==2||e.dirty===2&&e.element.parentNode.clientWidth!==e.availableWidth},d=function(t){var n=e.getComputedStyle(t.element,null);return t.currentFontSize=parseFloat(n.getPropertyValue(`font-size`)),t.display=n.getPropertyValue(`display`),t.whiteSpace=n.getPropertyValue(`white-space`),!0},f=function(e){var t=!1;return!e.preStyleTestCompleted&&(/inline-/.test(e.display)||(t=!0,e.display=`inline-block`),e.whiteSpace!==`nowrap`&&(t=!0,e.whiteSpace=`nowrap`),e.preStyleTestCompleted=!0,t)},p=function(e){e.element.style.whiteSpace=e.whiteSpace,e.element.style.display=e.display,e.element.style.fontSize=e.currentFontSize+`px`},m=function(e){e.element.dispatchEvent(new CustomEvent(`fit`,{detail:{oldValue:e.previousFontSize,newValue:e.currentFontSize,scaleFactor:e.currentFontSize/e.previousFontSize}}))},h=function(e,t){return function(){e.dirty=t,e.active&&a()}},g=function(e){return function(){r=r.filter((function(t){return t.element!==e.element})),e.observeMutations&&e.observer.disconnect(),e.element.style.whiteSpace=e.originalStyle.whiteSpace,e.element.style.display=e.originalStyle.display,e.element.style.fontSize=e.originalStyle.fontSize}},_=function(e){return function(){e.active||(e.active=!0,a())}},v=function(e){return function(){return e.active=!1}},y=function(e){e.observeMutations&&(e.observer=new MutationObserver(h(e,1)),e.observer.observe(e.element,e.observeMutations))},b={minSize:16,maxSize:512,multiLine:!0,observeMutations:`MutationObserver`in e&&{subtree:!0,childList:!0,characterData:!0}},x=null,S=function(){e.clearTimeout(x),x=e.setTimeout(o(2),w.observeWindowDelay)},C=[`resize`,`orientationchange`];return Object.defineProperty(w,`observeWindow`,{set:function(t){var n=`${t?`add`:`remove`}EventListener`;C.forEach((function(t){e[n](t,S)}))}}),w.observeWindow=!0,w.observeWindowDelay=100,w.fitAll=o(n),w}function ee(e,t){var i=Object.assign({},b,t),o=e.map((function(e){var t=Object.assign({},i,{element:e,active:!0});return function(e){e.originalStyle={whiteSpace:e.element.style.whiteSpace,display:e.element.style.display,fontSize:e.element.style.fontSize},y(e),e.newbie=!0,e.dirty=!0,r.push(e)}(t),{element:e,fit:h(t,n),unfreeze:_(t),freeze:v(t),unsubscribe:g(t)}}));return a(),o}function w(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return typeof e==`string`?ee(t(document.querySelectorAll(e)),n):ee([e],n)[0]}}(typeof window>`u`?null:window),ne=class{constructor(e){this.Reveal=e,this.startEmbeddedIframe=this.startEmbeddedIframe.bind(this)}shouldPreload(e){if(this.Reveal.isScrollView())return!0;let t=this.Reveal.getConfig().preloadIframes;return typeof t!=`boolean`&&(t=e.hasAttribute(`data-preload`)),t}load(e,t={}){e.style.display=this.Reveal.getConfig().display,g(e,`img[data-src], video[data-src], audio[data-src], iframe[data-src]`).forEach((e=>{(e.tagName!==`IFRAME`||this.shouldPreload(e))&&(e.setAttribute(`src`,e.getAttribute(`data-src`)),e.setAttribute(`data-lazy-loaded`,``),e.removeAttribute(`data-src`))})),g(e,`video, audio`).forEach((e=>{let t=0;g(e,`source[data-src]`).forEach((e=>{e.setAttribute(`src`,e.getAttribute(`data-src`)),e.removeAttribute(`data-src`),e.setAttribute(`data-lazy-loaded`,``),t+=1})),T&&e.tagName===`VIDEO`&&e.setAttribute(`playsinline`,``),t>0&&e.load()}));let n=e.slideBackgroundElement;if(n){n.style.display=`block`;let r=e.slideBackgroundContentElement,i=e.getAttribute(`data-background-iframe`);if(!1===n.hasAttribute(`data-loaded`)){n.setAttribute(`data-loaded`,`true`);let a=e.getAttribute(`data-background-image`),o=e.getAttribute(`data-background-video`),s=e.hasAttribute(`data-background-video-loop`),c=e.hasAttribute(`data-background-video-muted`);if(a)/^data:/.test(a.trim())?r.style.backgroundImage=`url(${a.trim()})`:r.style.backgroundImage=a.split(`,`).map((e=>`url(${((e=``)=>encodeURI(e).replace(/%5B/g,`[`).replace(/%5D/g,`]`).replace(/[!'()*]/g,(e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)))(decodeURI(e.trim()))})`)).join(`,`);else if(o){let e=document.createElement(`video`);s&&e.setAttribute(`loop`,``),(c||this.Reveal.isSpeakerNotes())&&(e.muted=!0),T&&(e.muted=!0,e.setAttribute(`playsinline`,``)),o.split(`,`).forEach((t=>{let n=document.createElement(`source`);n.setAttribute(`src`,t);let r=((e=``)=>w[e.split(`.`).pop()])(t);r&&n.setAttribute(`type`,r),e.appendChild(n)})),r.appendChild(e)}else if(i&&!0!==t.excludeIframes){let e=document.createElement(`iframe`);e.setAttribute(`allowfullscreen`,``),e.setAttribute(`mozallowfullscreen`,``),e.setAttribute(`webkitallowfullscreen`,``),e.setAttribute(`allow`,`autoplay`),e.setAttribute(`data-src`,i),e.style.width=`100%`,e.style.height=`100%`,e.style.maxHeight=`100%`,e.style.maxWidth=`100%`,r.appendChild(e)}}let a=r.querySelector(`iframe[data-src]`);a&&this.shouldPreload(n)&&!/autoplay=(1|true|yes)/gi.test(i)&&a.getAttribute(`src`)!==i&&a.setAttribute(`src`,i)}this.layout(e)}layout(e){Array.from(e.querySelectorAll(`.r-fit-text`)).forEach((e=>{D(e,{minSize:24,maxSize:.8*this.Reveal.getConfig().height,observeMutations:!1,observeWindow:!1})}))}unload(e){e.style.display=`none`;let t=this.Reveal.getSlideBackground(e);t&&(t.style.display=`none`,g(t,`iframe[src]`).forEach((e=>{e.removeAttribute(`src`)}))),g(e,`video[data-lazy-loaded][src], audio[data-lazy-loaded][src], iframe[data-lazy-loaded][src]`).forEach((e=>{e.setAttribute(`data-src`,e.getAttribute(`src`)),e.removeAttribute(`src`)})),g(e,`video[data-lazy-loaded] source[src], audio source[src]`).forEach((e=>{e.setAttribute(`data-src`,e.getAttribute(`src`)),e.removeAttribute(`src`)}))}formatEmbeddedContent(){let e=(e,t,n)=>{g(this.Reveal.getSlidesElement(),`iframe[`+e+`*="`+t+`"]`).forEach((t=>{let r=t.getAttribute(e);r&&r.indexOf(n)===-1&&t.setAttribute(e,r+(/\?/.test(r)?`&`:`?`)+n)}))};e(`src`,`youtube.com/embed/`,`enablejsapi=1`),e(`data-src`,`youtube.com/embed/`,`enablejsapi=1`),e(`src`,`player.vimeo.com/`,`api=1`),e(`data-src`,`player.vimeo.com/`,`api=1`)}startEmbeddedContent(e){if(e){let t=this.Reveal.isSpeakerNotes();g(e,`img[src$=".gif"]`).forEach((e=>{e.setAttribute(`src`,e.getAttribute(`src`))})),g(e,`video, audio`).forEach((e=>{if(x(e,`.fragment`)&&!x(e,`.fragment.visible`))return;let n=this.Reveal.getConfig().autoPlayMedia;if(typeof n!=`boolean`&&(n=e.hasAttribute(`data-autoplay`)||!!x(e,`.slide-background`)),n&&typeof e.play==`function`){if(t&&!e.muted)return;if(e.readyState>1)this.startEmbeddedMedia({target:e});else if(T){let t=e.play();t&&typeof t.catch==`function`&&!1===e.controls&&t.catch((()=>{e.controls=!0,e.addEventListener(`play`,(()=>{e.controls=!1}))}))}else e.removeEventListener(`loadeddata`,this.startEmbeddedMedia),e.addEventListener(`loadeddata`,this.startEmbeddedMedia)}})),t||(g(e,`iframe[src]`).forEach((e=>{x(e,`.fragment`)&&!x(e,`.fragment.visible`)||this.startEmbeddedIframe({target:e})})),g(e,`iframe[data-src]`).forEach((e=>{x(e,`.fragment`)&&!x(e,`.fragment.visible`)||e.getAttribute(`src`)!==e.getAttribute(`data-src`)&&(e.removeEventListener(`load`,this.startEmbeddedIframe),e.addEventListener(`load`,this.startEmbeddedIframe),e.setAttribute(`src`,e.getAttribute(`data-src`)))})))}}startEmbeddedMedia(e){let t=!!x(e.target,`html`),n=!!x(e.target,`.present`);t&&n&&(e.target.paused||e.target.ended)&&(e.target.currentTime=0,e.target.play()),e.target.removeEventListener(`loadeddata`,this.startEmbeddedMedia)}startEmbeddedIframe(e){let t=e.target;if(t&&t.contentWindow){let n=!!x(e.target,`html`),r=!!x(e.target,`.present`);if(n&&r){let e=this.Reveal.getConfig().autoPlayMedia;typeof e!=`boolean`&&(e=t.hasAttribute(`data-autoplay`)||!!x(t,`.slide-background`)),/youtube\.com\/embed\//.test(t.getAttribute(`src`))&&e?t.contentWindow.postMessage(`{"event":"command","func":"playVideo","args":""}`,`*`):/player\.vimeo\.com\//.test(t.getAttribute(`src`))&&e?t.contentWindow.postMessage(`{"method":"play"}`,`*`):t.contentWindow.postMessage(`slide:start`,`*`)}}}stopEmbeddedContent(e,t={}){t=h({unloadIframes:!0},t),e&&e.parentNode&&(g(e,`video, audio`).forEach((e=>{e.hasAttribute(`data-ignore`)||typeof e.pause!=`function`||(e.setAttribute(`data-paused-by-reveal`,``),e.pause())})),g(e,`iframe`).forEach((e=>{e.contentWindow&&e.contentWindow.postMessage(`slide:stop`,`*`),e.removeEventListener(`load`,this.startEmbeddedIframe)})),g(e,`iframe[src*="youtube.com/embed/"]`).forEach((e=>{!e.hasAttribute(`data-ignore`)&&e.contentWindow&&typeof e.contentWindow.postMessage==`function`&&e.contentWindow.postMessage(`{"event":"command","func":"pauseVideo","args":""}`,`*`)})),g(e,`iframe[src*="player.vimeo.com/"]`).forEach((e=>{!e.hasAttribute(`data-ignore`)&&e.contentWindow&&typeof e.contentWindow.postMessage==`function`&&e.contentWindow.postMessage(`{"method":"pause"}`,`*`)})),!0===t.unloadIframes&&g(e,`iframe[data-src]`).forEach((e=>{e.setAttribute(`src`,`about:blank`),e.removeAttribute(`src`)})))}},O=`.slides section`,k=`.slides>section`,re=`.slides>section.present>section`,ie=/registerPlugin|registerKeyboardShortcut|addKeyBinding|addEventListener|showPreview/,ae=class{constructor(e){this.Reveal=e}render(){this.element=document.createElement(`div`),this.element.className=`slide-number`,this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){let n=`none`;e.slideNumber&&!this.Reveal.isPrintView()&&(e.showSlideNumber===`all`||e.showSlideNumber===`speaker`&&this.Reveal.isSpeakerNotes())&&(n=`block`),this.element.style.display=n}update(){this.Reveal.getConfig().slideNumber&&this.element&&(this.element.innerHTML=this.getSlideNumber())}getSlideNumber(e=this.Reveal.getCurrentSlide()){let t,n=this.Reveal.getConfig(),r=`h.v`;if(typeof n.slideNumber==`function`)t=n.slideNumber(e);else{typeof n.slideNumber==`string`&&(r=n.slideNumber),/c/.test(r)||this.Reveal.getHorizontalSlides().length!==1||(r=`c`);let i=e&&e.dataset.visibility===`uncounted`?0:1;switch(t=[],r){case`c`:t.push(this.Reveal.getSlidePastCount(e)+i);break;case`c/t`:t.push(this.Reveal.getSlidePastCount(e)+i,`/`,this.Reveal.getTotalSlides());break;default:let n=this.Reveal.getIndices(e);t.push(n.h+i);let a=r===`h/v`?`/`:`.`;this.Reveal.isVerticalSlide(e)&&t.push(a,n.v+1)}}let i=`#`+this.Reveal.location.getHash(e);return this.formatNumber(t[0],t[1],t[2],i)}formatNumber(e,t,n,r=`#`+this.Reveal.location.getHash()){return typeof n!=`number`||isNaN(n)?`\n\t\t\t\t\t${e}\n\t\t\t\t\t`:`\n\t\t\t\t\t${e}\n\t\t\t\t\t${t}\n\t\t\t\t\t${n}\n\t\t\t\t\t`}destroy(){this.element.remove()}},oe=class{constructor(e){this.Reveal=e,this.onInput=this.onInput.bind(this),this.onBlur=this.onBlur.bind(this),this.onKeyDown=this.onKeyDown.bind(this)}render(){this.element=document.createElement(`div`),this.element.className=`jump-to-slide`,this.jumpInput=document.createElement(`input`),this.jumpInput.type=`text`,this.jumpInput.className=`jump-to-slide-input`,this.jumpInput.placeholder=`Jump to slide`,this.jumpInput.addEventListener(`input`,this.onInput),this.jumpInput.addEventListener(`keydown`,this.onKeyDown),this.jumpInput.addEventListener(`blur`,this.onBlur),this.element.appendChild(this.jumpInput)}show(){this.indicesOnShow=this.Reveal.getIndices(),this.Reveal.getRevealElement().appendChild(this.element),this.jumpInput.focus()}hide(){this.isVisible()&&(this.element.remove(),this.jumpInput.value=``,clearTimeout(this.jumpTimeout),delete this.jumpTimeout)}isVisible(){return!!this.element.parentNode}jump(){clearTimeout(this.jumpTimeout),delete this.jumpTimeout;let e,t=this.jumpInput.value.trim(``);if(/^\d+$/.test(t)){let n=this.Reveal.getConfig().slideNumber;if(n===`c`||n===`c/t`){let n=this.Reveal.getSlides()[parseInt(t,10)-1];n&&(e=this.Reveal.getIndices(n))}}return e||=(/^\d+\.\d+$/.test(t)&&(t=t.replace(`.`,`/`)),this.Reveal.location.getIndicesFromHash(t,{oneBasedIndex:!0})),!e&&/\S+/i.test(t)&&t.length>1&&(e=this.search(t)),e&&t!==``?(this.Reveal.slide(e.h,e.v,e.f),!0):(this.Reveal.slide(this.indicesOnShow.h,this.indicesOnShow.v,this.indicesOnShow.f),!1)}jumpAfter(e){clearTimeout(this.jumpTimeout),this.jumpTimeout=setTimeout((()=>this.jump()),e)}search(e){let t=RegExp(`\\b`+e.trim()+`\\b`,`i`),n=this.Reveal.getSlides().find((e=>t.test(e.innerText)));return n?this.Reveal.getIndices(n):null}cancel(){this.Reveal.slide(this.indicesOnShow.h,this.indicesOnShow.v,this.indicesOnShow.f),this.hide()}confirm(){this.jump(),this.hide()}destroy(){this.jumpInput.removeEventListener(`input`,this.onInput),this.jumpInput.removeEventListener(`keydown`,this.onKeyDown),this.jumpInput.removeEventListener(`blur`,this.onBlur),this.element.remove()}onKeyDown(e){e.keyCode===13?this.confirm():e.keyCode===27&&(this.cancel(),e.stopImmediatePropagation())}onInput(e){this.jumpAfter(200)}onBlur(){setTimeout((()=>this.hide()),1)}},A=e=>{let t=e.match(/^#([0-9a-f]{3})$/i);if(t&&t[1])return t=t[1],{r:17*parseInt(t.charAt(0),16),g:17*parseInt(t.charAt(1),16),b:17*parseInt(t.charAt(2),16)};let n=e.match(/^#([0-9a-f]{6})$/i);if(n&&n[1])return n=n[1],{r:parseInt(n.slice(0,2),16),g:parseInt(n.slice(2,4),16),b:parseInt(n.slice(4,6),16)};let r=e.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i);if(r)return{r:parseInt(r[1],10),g:parseInt(r[2],10),b:parseInt(r[3],10)};let i=e.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*([\d]+|[\d]*.[\d]+)\s*\)$/i);return i?{r:parseInt(i[1],10),g:parseInt(i[2],10),b:parseInt(i[3],10),a:parseFloat(i[4])}:null},se=class{constructor(e){this.Reveal=e}render(){this.element=document.createElement(`div`),this.element.className=`backgrounds`,this.Reveal.getRevealElement().appendChild(this.element)}create(){this.element.innerHTML=``,this.element.classList.add(`no-transition`),this.Reveal.getHorizontalSlides().forEach((e=>{let t=this.createBackground(e,this.element);g(e,`section`).forEach((e=>{this.createBackground(e,t),t.classList.add(`stack`)}))})),this.Reveal.getConfig().parallaxBackgroundImage?(this.element.style.backgroundImage=`url("`+this.Reveal.getConfig().parallaxBackgroundImage+`")`,this.element.style.backgroundSize=this.Reveal.getConfig().parallaxBackgroundSize,this.element.style.backgroundRepeat=this.Reveal.getConfig().parallaxBackgroundRepeat,this.element.style.backgroundPosition=this.Reveal.getConfig().parallaxBackgroundPosition,setTimeout((()=>{this.Reveal.getRevealElement().classList.add(`has-parallax-background`)}),1)):(this.element.style.backgroundImage=``,this.Reveal.getRevealElement().classList.remove(`has-parallax-background`))}createBackground(e,t){let n=document.createElement(`div`);n.className=`slide-background `+e.className.replace(/present|past|future/,``);let r=document.createElement(`div`);return r.className=`slide-background-content`,n.appendChild(r),t.appendChild(n),e.slideBackgroundElement=n,e.slideBackgroundContentElement=r,this.sync(e),n}sync(e){let t=e.slideBackgroundElement,n=e.slideBackgroundContentElement,r={background:e.getAttribute(`data-background`),backgroundSize:e.getAttribute(`data-background-size`),backgroundImage:e.getAttribute(`data-background-image`),backgroundVideo:e.getAttribute(`data-background-video`),backgroundIframe:e.getAttribute(`data-background-iframe`),backgroundColor:e.getAttribute(`data-background-color`),backgroundGradient:e.getAttribute(`data-background-gradient`),backgroundRepeat:e.getAttribute(`data-background-repeat`),backgroundPosition:e.getAttribute(`data-background-position`),backgroundTransition:e.getAttribute(`data-background-transition`),backgroundOpacity:e.getAttribute(`data-background-opacity`)},i=e.hasAttribute(`data-preload`);e.classList.remove(`has-dark-background`),e.classList.remove(`has-light-background`),t.removeAttribute(`data-loaded`),t.removeAttribute(`data-background-hash`),t.removeAttribute(`data-background-size`),t.removeAttribute(`data-background-transition`),t.style.backgroundColor=``,n.style.backgroundSize=``,n.style.backgroundRepeat=``,n.style.backgroundPosition=``,n.style.backgroundImage=``,n.style.opacity=``,n.innerHTML=``,r.background&&(/^(http|file|\/\/)/gi.test(r.background)||/\.(svg|png|jpg|jpeg|gif|bmp|webp)([?#\s]|$)/gi.test(r.background)?e.setAttribute(`data-background-image`,r.background):t.style.background=r.background),(r.background||r.backgroundColor||r.backgroundGradient||r.backgroundImage||r.backgroundVideo||r.backgroundIframe)&&t.setAttribute(`data-background-hash`,r.background+r.backgroundSize+r.backgroundImage+r.backgroundVideo+r.backgroundIframe+r.backgroundColor+r.backgroundGradient+r.backgroundRepeat+r.backgroundPosition+r.backgroundTransition+r.backgroundOpacity),r.backgroundSize&&t.setAttribute(`data-background-size`,r.backgroundSize),r.backgroundColor&&(t.style.backgroundColor=r.backgroundColor),r.backgroundGradient&&(t.style.backgroundImage=r.backgroundGradient),r.backgroundTransition&&t.setAttribute(`data-background-transition`,r.backgroundTransition),i&&t.setAttribute(`data-preload`,``),r.backgroundSize&&(n.style.backgroundSize=r.backgroundSize),r.backgroundRepeat&&(n.style.backgroundRepeat=r.backgroundRepeat),r.backgroundPosition&&(n.style.backgroundPosition=r.backgroundPosition),r.backgroundOpacity&&(n.style.opacity=r.backgroundOpacity);let a=this.getContrastClass(e);typeof a==`string`&&e.classList.add(a)}getContrastClass(e){let t=e.slideBackgroundElement,n=e.getAttribute(`data-background-color`);if(!n||!A(n)){let e=window.getComputedStyle(t);e&&e.backgroundColor&&(n=e.backgroundColor)}if(n){let e=A(n);if(e&&e.a!==0)return typeof(r=n)==`string`&&(r=A(r)),(r?(299*r.r+587*r.g+114*r.b)/1e3:null)<128?`has-dark-background`:`has-light-background`}var r;return null}bubbleSlideContrastClassToElement(e,t){[`has-light-background`,`has-dark-background`].forEach((n=>{e.classList.contains(n)?t.classList.add(n):t.classList.remove(n)}),this)}update(e=!1){let t=this.Reveal.getConfig(),n=this.Reveal.getCurrentSlide(),r=this.Reveal.getIndices(),i=null,a=t.rtl?`future`:`past`,o=t.rtl?`past`:`future`;if(Array.from(this.element.childNodes).forEach(((t,n)=>{t.classList.remove(`past`,`present`,`future`),nr.h?t.classList.add(o):(t.classList.add(`present`),i=t),(e||n===r.h)&&g(t,`.slide-background`).forEach(((e,t)=>{e.classList.remove(`past`,`present`,`future`);let a=typeof r.v==`number`?r.v:0;ta?e.classList.add(`future`):(e.classList.add(`present`),n===r.h&&(i=e))}))})),this.previousBackground&&!this.previousBackground.closest(`body`)&&(this.previousBackground=null),i&&this.previousBackground){let e=this.previousBackground.getAttribute(`data-background-hash`),t=i.getAttribute(`data-background-hash`);if(t&&t===e&&i!==this.previousBackground){this.element.classList.add(`no-transition`);let e=i.querySelector(`video`),t=this.previousBackground.querySelector(`video`);if(e&&t){let n=e.parentNode;t.parentNode.appendChild(e),n.appendChild(t)}}}let s=i!==this.previousBackground;if(s&&this.previousBackground&&this.Reveal.slideContent.stopEmbeddedContent(this.previousBackground,{unloadIframes:!this.Reveal.slideContent.shouldPreload(this.previousBackground)}),s&&i){this.Reveal.slideContent.startEmbeddedContent(i);let e=i.querySelector(`.slide-background-content`);if(e){let t=e.style.backgroundImage||``;/\.gif/i.test(t)&&(e.style.backgroundImage=``,window.getComputedStyle(e).opacity,e.style.backgroundImage=t)}this.previousBackground=i}n&&this.bubbleSlideContrastClassToElement(n,this.Reveal.getRevealElement()),setTimeout((()=>{this.element.classList.remove(`no-transition`)}),10)}updateParallax(){let e=this.Reveal.getIndices();if(this.Reveal.getConfig().parallaxBackgroundImage){let t,n,r=this.Reveal.getHorizontalSlides(),i=this.Reveal.getVerticalSlides(),a=this.element.style.backgroundSize.split(` `);a.length===1?t=n=parseInt(a[0],10):(t=parseInt(a[0],10),n=parseInt(a[1],10));let o,s,c=this.element.offsetWidth,l=r.length;o=typeof this.Reveal.getConfig().parallaxBackgroundHorizontal==`number`?this.Reveal.getConfig().parallaxBackgroundHorizontal:l>1?(t-c)/(l-1):0,s=o*e.h*-1;let u,d,f=this.element.offsetHeight,p=i.length;u=typeof this.Reveal.getConfig().parallaxBackgroundVertical==`number`?this.Reveal.getConfig().parallaxBackgroundVertical:(n-f)/(p-1),d=p>0?u*e.v:0,this.element.style.backgroundPosition=s+`px `+-d+`px`}}destroy(){this.element.remove()}},j=0,ce=class{constructor(e){this.Reveal=e}run(e,t){this.reset();let n=this.Reveal.getSlides(),r=n.indexOf(t),i=n.indexOf(e);if(e&&t&&e.hasAttribute(`data-auto-animate`)&&t.hasAttribute(`data-auto-animate`)&&e.getAttribute(`data-auto-animate-id`)===t.getAttribute(`data-auto-animate-id`)&&!(r>i?t:e).hasAttribute(`data-auto-animate-restart`)){this.autoAnimateStyleSheet=this.autoAnimateStyleSheet||C();let n=this.getAutoAnimateOptions(t);e.dataset.autoAnimate=`pending`,t.dataset.autoAnimate=`pending`,n.slideDirection=r>i?`forward`:`backward`;let a=e.style.display===`none`;a&&(e.style.display=this.Reveal.getConfig().display);let o=this.getAutoAnimatableElements(e,t).map((e=>this.autoAnimateElements(e.from,e.to,e.options||{},n,j++)));if(a&&(e.style.display=`none`),t.dataset.autoAnimateUnmatched!==`false`&&!0===this.Reveal.getConfig().autoAnimateUnmatched){let e=.8*n.duration,r=.2*n.duration;this.getUnmatchedAutoAnimateElements(t).forEach((e=>{let t=this.getAutoAnimateOptions(e,n),r=`unmatched`;t.duration===n.duration&&t.delay===n.delay||(r=`unmatched-`+ j++,o.push(`[data-auto-animate="running"] [data-auto-animate-target="${r}"] { transition: opacity ${t.duration}s ease ${t.delay}s; }`)),e.dataset.autoAnimateTarget=r}),this),o.push(`[data-auto-animate="running"] [data-auto-animate-target="unmatched"] { transition: opacity ${e}s ease ${r}s; }`)}this.autoAnimateStyleSheet.innerHTML=o.join(``),requestAnimationFrame((()=>{this.autoAnimateStyleSheet&&(getComputedStyle(this.autoAnimateStyleSheet).fontWeight,t.dataset.autoAnimate=`running`)})),this.Reveal.dispatchEvent({type:`autoanimate`,data:{fromSlide:e,toSlide:t,sheet:this.autoAnimateStyleSheet}})}}reset(){g(this.Reveal.getRevealElement(),`[data-auto-animate]:not([data-auto-animate=""])`).forEach((e=>{e.dataset.autoAnimate=``})),g(this.Reveal.getRevealElement(),`[data-auto-animate-target]`).forEach((e=>{delete e.dataset.autoAnimateTarget})),this.autoAnimateStyleSheet&&this.autoAnimateStyleSheet.parentNode&&(this.autoAnimateStyleSheet.parentNode.removeChild(this.autoAnimateStyleSheet),this.autoAnimateStyleSheet=null)}autoAnimateElements(e,t,n,r,i){e.dataset.autoAnimateTarget=``,t.dataset.autoAnimateTarget=i;let a=this.getAutoAnimateOptions(t,r);n.delay!==void 0&&(a.delay=n.delay),n.duration!==void 0&&(a.duration=n.duration),n.easing!==void 0&&(a.easing=n.easing);let o=this.getAutoAnimatableProperties(`from`,e,n),s=this.getAutoAnimatableProperties(`to`,t,n);if(t.classList.contains(`fragment`)&&delete s.styles.opacity,!1!==n.translate||!1!==n.scale){let e=this.Reveal.getScale(),t={x:(o.x-s.x)/e,y:(o.y-s.y)/e,scaleX:o.width/s.width,scaleY:o.height/s.height};t.x=Math.round(1e3*t.x)/1e3,t.y=Math.round(1e3*t.y)/1e3,t.scaleX=Math.round(1e3*t.scaleX)/1e3,t.scaleX=Math.round(1e3*t.scaleX)/1e3;let r=!1!==n.translate&&(t.x!==0||t.y!==0),i=!1!==n.scale&&(t.scaleX!==0||t.scaleY!==0);if(r||i){let e=[];r&&e.push(`translate(${t.x}px, ${t.y}px)`),i&&e.push(`scale(${t.scaleX}, ${t.scaleY})`),o.styles.transform=e.join(` `),o.styles[`transform-origin`]=`top left`,s.styles.transform=`none`}}for(let e in s.styles){let t=s.styles[e],n=o.styles[e];t===n?delete s.styles[e]:(!0===t.explicitValue&&(s.styles[e]=t.value),!0===n.explicitValue&&(o.styles[e]=n.value))}let c=``,l=Object.keys(s.styles);return l.length>0&&(o.styles.transition=`none`,s.styles.transition=`all ${a.duration}s ${a.easing} ${a.delay}s`,s.styles[`transition-property`]=l.join(`, `),s.styles[`will-change`]=l.join(`, `),c=`[data-auto-animate-target="`+i+`"] {`+Object.keys(o.styles).map((e=>e+`: `+o.styles[e]+` !important;`)).join(``)+`}[data-auto-animate="running"] [data-auto-animate-target="`+i+`"] {`+Object.keys(s.styles).map((e=>e+`: `+s.styles[e]+` !important;`)).join(``)+`}`),c}getAutoAnimateOptions(e,t){let n={easing:this.Reveal.getConfig().autoAnimateEasing,duration:this.Reveal.getConfig().autoAnimateDuration,delay:0};if(n=h(n,t),e.parentNode){let t=x(e.parentNode,`[data-auto-animate-target]`);t&&(n=this.getAutoAnimateOptions(t,n))}return e.dataset.autoAnimateEasing&&(n.easing=e.dataset.autoAnimateEasing),e.dataset.autoAnimateDuration&&(n.duration=parseFloat(e.dataset.autoAnimateDuration)),e.dataset.autoAnimateDelay&&(n.delay=parseFloat(e.dataset.autoAnimateDelay)),n}getAutoAnimatableProperties(e,t,n){let r=this.Reveal.getConfig(),i={styles:[]};if(!1!==n.translate||!1!==n.scale){let e;if(typeof n.measure==`function`)e=n.measure(t);else if(r.center)e=t.getBoundingClientRect();else{let n=this.Reveal.getScale();e={x:t.offsetLeft*n,y:t.offsetTop*n,width:t.offsetWidth*n,height:t.offsetHeight*n}}i.x=e.x,i.y=e.y,i.width=e.width,i.height=e.height}let a=getComputedStyle(t);return(n.styles||r.autoAnimateStyles).forEach((t=>{let n;typeof t==`string`&&(t={property:t}),t.from!==void 0&&e===`from`?n={value:t.from,explicitValue:!0}:t.to!==void 0&&e===`to`?n={value:t.to,explicitValue:!0}:(t.property===`line-height`&&(n=parseFloat(a[`line-height`])/parseFloat(a[`font-size`])),isNaN(n)&&(n=a[t.property])),n!==``&&(i.styles[t.property]=n)})),i}getAutoAnimatableElements(e,t){let n=(typeof this.Reveal.getConfig().autoAnimateMatcher==`function`?this.Reveal.getConfig().autoAnimateMatcher:this.getAutoAnimatePairs).call(this,e,t),r=[];return n.filter(((e,t)=>{if(r.indexOf(e.to)===-1)return r.push(e.to),!0}))}getAutoAnimatePairs(e,t){let n=[],r=`h1, h2, h3, h4, h5, h6, p, li`;return this.findAutoAnimateMatches(n,e,t,`[data-id]`,(e=>e.nodeName+`:::`+e.getAttribute(`data-id`))),this.findAutoAnimateMatches(n,e,t,r,(e=>e.nodeName+`:::`+e.textContent.trim())),this.findAutoAnimateMatches(n,e,t,`img, video, iframe`,(e=>e.nodeName+`:::`+(e.getAttribute(`src`)||e.getAttribute(`data-src`)))),this.findAutoAnimateMatches(n,e,t,`pre`,(e=>e.nodeName+`:::`+e.textContent.trim())),n.forEach((e=>{b(e.from,r)?e.options={scale:!1}:b(e.from,`pre`)&&(e.options={scale:!1,styles:[`width`,`height`]},this.findAutoAnimateMatches(n,e.from,e.to,`.hljs .hljs-ln-code`,(e=>e.textContent),{scale:!1,styles:[],measure:this.getLocalBoundingBox.bind(this)}),this.findAutoAnimateMatches(n,e.from,e.to,`.hljs .hljs-ln-numbers[data-line-number]`,(e=>e.getAttribute(`data-line-number`)),{scale:!1,styles:[`width`],measure:this.getLocalBoundingBox.bind(this)}))}),this),n}getLocalBoundingBox(e){let t=this.Reveal.getScale();return{x:Math.round(e.offsetLeft*t*100)/100,y:Math.round(e.offsetTop*t*100)/100,width:Math.round(e.offsetWidth*t*100)/100,height:Math.round(e.offsetHeight*t*100)/100}}findAutoAnimateMatches(e,t,n,r,i,a){let o={},s={};[].slice.call(t.querySelectorAll(r)).forEach(((e,t)=>{let n=i(e);typeof n==`string`&&n.length&&(o[n]=o[n]||[],o[n].push(e))})),[].slice.call(n.querySelectorAll(r)).forEach(((t,n)=>{let r=i(t),c;if(s[r]=s[r]||[],s[r].push(t),o[r]){let e=s[r].length-1,t=o[r].length-1;o[r][e]?(c=o[r][e],o[r][e]=null):o[r][t]&&(c=o[r][t],o[r][t]=null)}c&&e.push({from:c,to:t,options:a})}))}getUnmatchedAutoAnimateElements(e){return[].slice.call(e.children).reduce(((e,t)=>{let n=t.querySelector(`[data-auto-animate-target]`);return t.hasAttribute(`data-auto-animate-target`)||n||e.push(t),t.querySelector(`[data-auto-animate-target]`)&&(e=e.concat(this.getUnmatchedAutoAnimateElements(t))),e}),[])}},le=class{constructor(e){this.Reveal=e,this.active=!1,this.activatedCallbacks=[],this.onScroll=this.onScroll.bind(this)}activate(){if(this.active)return;let e=this.Reveal.getState();this.active=!0,this.slideHTMLBeforeActivation=this.Reveal.getSlidesElement().innerHTML;let t=g(this.Reveal.getRevealElement(),k),n=g(this.Reveal.getRevealElement(),`.backgrounds>.slide-background`),r;this.viewportElement.classList.add(`loading-scroll-mode`,`reveal-scroll`);let i=window.getComputedStyle(this.viewportElement);i&&i.background&&(r=i.background);let a=[],o=t[0].parentNode,s,c=(e,t,i,o)=>{let c;if(s&&this.Reveal.shouldAutoAnimateBetween(s,e))c=document.createElement(`div`),c.className=`scroll-page-content scroll-auto-animate-page`,c.style.display=`none`,s.closest(`.scroll-page-content`).parentNode.appendChild(c);else{let e=document.createElement(`div`);if(e.className=`scroll-page`,a.push(e),o&&n.length>t){let i=n[t],a=window.getComputedStyle(i);a&&a.background?e.style.background=a.background:r&&(e.style.background=r)}else r&&(e.style.background=r);let i=document.createElement(`div`);i.className=`scroll-page-sticky`,e.appendChild(i),c=document.createElement(`div`),c.className=`scroll-page-content`,i.appendChild(c)}c.appendChild(e),e.classList.remove(`past`,`future`),e.setAttribute(`data-index-h`,t),e.setAttribute(`data-index-v`,i),e.slideBackgroundElement&&(e.slideBackgroundElement.remove(`past`,`future`),c.insertBefore(e.slideBackgroundElement,e)),s=e};t.forEach(((e,t)=>{this.Reveal.isVerticalStack(e)?e.querySelectorAll(`section`).forEach(((e,n)=>{c(e,t,n,!0)})):c(e,t,0)}),this),this.createProgressBar(),g(this.Reveal.getRevealElement(),`.stack`).forEach((e=>e.remove())),a.forEach((e=>o.appendChild(e))),this.Reveal.slideContent.layout(this.Reveal.getSlidesElement()),this.Reveal.layout(),this.Reveal.setState(e),this.activatedCallbacks.forEach((e=>e())),this.activatedCallbacks=[],this.restoreScrollPosition(),this.viewportElement.classList.remove(`loading-scroll-mode`),this.viewportElement.addEventListener(`scroll`,this.onScroll,{passive:!0})}deactivate(){if(!this.active)return;let e=this.Reveal.getState();this.active=!1,this.viewportElement.removeEventListener(`scroll`,this.onScroll),this.viewportElement.classList.remove(`reveal-scroll`),this.removeProgressBar(),this.Reveal.getSlidesElement().innerHTML=this.slideHTMLBeforeActivation,this.Reveal.sync(),this.Reveal.setState(e),this.slideHTMLBeforeActivation=null}toggle(e){typeof e==`boolean`?e?this.activate():this.deactivate():this.isActive()?this.deactivate():this.activate()}isActive(){return this.active}createProgressBar(){this.progressBar=document.createElement(`div`),this.progressBar.className=`scrollbar`,this.progressBarInner=document.createElement(`div`),this.progressBarInner.className=`scrollbar-inner`,this.progressBar.appendChild(this.progressBarInner),this.progressBarPlayhead=document.createElement(`div`),this.progressBarPlayhead.className=`scrollbar-playhead`,this.progressBarInner.appendChild(this.progressBarPlayhead),this.viewportElement.insertBefore(this.progressBar,this.viewportElement.firstChild);let e=e=>{let t=(e.clientY-this.progressBarInner.getBoundingClientRect().top)/this.progressBarHeight;t=Math.max(Math.min(t,1),0),this.viewportElement.scrollTop=t*(this.viewportElement.scrollHeight-this.viewportElement.offsetHeight)},t=n=>{this.draggingProgressBar=!1,this.showProgressBar(),document.removeEventListener(`mousemove`,e),document.removeEventListener(`mouseup`,t)};this.progressBarInner.addEventListener(`mousedown`,(n=>{n.preventDefault(),this.draggingProgressBar=!0,document.addEventListener(`mousemove`,e),document.addEventListener(`mouseup`,t),e(n)}))}removeProgressBar(){this.progressBar&&=(this.progressBar.remove(),null)}layout(){this.isActive()&&(this.syncPages(),this.syncScrollPosition())}syncPages(){let e=this.Reveal.getConfig(),t=this.Reveal.getComputedSlideSize(window.innerWidth,window.innerHeight),n=this.Reveal.getScale(),r=e.scrollLayout===`compact`,i=this.viewportElement.offsetHeight,a=t.height*n,o=r?a:i;this.scrollTriggerHeight=r?a:i,this.viewportElement.style.setProperty(`--page-height`,o+`px`),this.viewportElement.style.scrollSnapType=typeof e.scrollSnap==`string`?`y ${e.scrollSnap}`:``,this.slideTriggers=[],this.pages=Array.from(this.Reveal.getRevealElement().querySelectorAll(`.scroll-page`)).map((n=>{let a=this.createPage({pageElement:n,slideElement:n.querySelector(`section`),stickyElement:n.querySelector(`.scroll-page-sticky`),contentElement:n.querySelector(`.scroll-page-content`),backgroundElement:n.querySelector(`.slide-background`),autoAnimateElements:n.querySelectorAll(`.scroll-auto-animate-page`),autoAnimatePages:[]});a.pageElement.style.setProperty(`--slide-height`,!0===e.center?`auto`:t.height+`px`),this.slideTriggers.push({page:a,activate:()=>this.activatePage(a),deactivate:()=>this.deactivatePage(a)}),this.createFragmentTriggersForPage(a),a.autoAnimateElements.length>0&&this.createAutoAnimateTriggersForPage(a);let s=Math.max(a.scrollTriggers.length-1,0);s+=a.autoAnimatePages.reduce(((e,t)=>e+Math.max(t.scrollTriggers.length-1,0)),a.autoAnimatePages.length),a.pageElement.querySelectorAll(`.scroll-snap-point`).forEach((e=>e.remove()));for(let e=0;e0?(a.pageHeight=i,a.pageElement.style.setProperty(`--page-height`,i+`px`)):(a.pageHeight=o,a.pageElement.style.removeProperty(`--page-height`)),a.scrollPadding=this.scrollTriggerHeight*s,a.totalHeight=a.pageHeight+a.scrollPadding,a.pageElement.style.setProperty(`--page-scroll-padding`,a.scrollPadding+`px`),s>0?(a.stickyElement.style.position=`sticky`,a.stickyElement.style.top=Math.max((i-a.pageHeight)/2,0)+`px`):(a.stickyElement.style.position=`relative`,a.pageElement.style.scrollSnapAlign=a.pageHeight1?(this.progressBar||this.createProgressBar(),this.syncProgressBar()):this.removeProgressBar()}setTriggerRanges(){this.totalScrollTriggerCount=this.slideTriggers.reduce(((e,t)=>e+Math.max(t.page.scrollTriggers.length,1)),0);let e=0;this.slideTriggers.forEach(((t,n)=>{t.range=[e,e+Math.max(t.page.scrollTriggers.length,1)/this.totalScrollTriggerCount];let r=(t.range[1]-t.range[0])/t.page.scrollTriggers.length;t.page.scrollTriggers.forEach(((t,n)=>{t.range=[e+n*r,e+(n+1)*r]})),e=t.range[1]})),this.slideTriggers[this.slideTriggers.length-1].range[1]=1}createFragmentTriggersForPage(e,t){t||=e.slideElement;let n=this.Reveal.fragments.sort(t.querySelectorAll(`.fragment`),!0);return n.length&&(e.fragments=this.Reveal.fragments.sort(t.querySelectorAll(`.fragment:not(.disabled)`)),e.scrollTriggers.push({activate:()=>{this.Reveal.fragments.update(-1,e.fragments,t)}}),n.forEach(((n,r)=>{e.scrollTriggers.push({activate:()=>{this.Reveal.fragments.update(r,e.fragments,t)}})}))),e.scrollTriggers.length}createAutoAnimateTriggersForPage(e){e.autoAnimateElements.length>0&&this.slideTriggers.push(...Array.from(e.autoAnimateElements).map(((t,n)=>{let r=this.createPage({slideElement:t.querySelector(`section`),contentElement:t,backgroundElement:t.querySelector(`.slide-background`)});return this.createFragmentTriggersForPage(r,r.slideElement),e.autoAnimatePages.push(r),{page:r,activate:()=>this.activatePage(r),deactivate:()=>this.deactivatePage(r)}})))}createPage(e){return e.scrollTriggers=[],e.indexh=parseInt(e.slideElement.getAttribute(`data-index-h`),10),e.indexv=parseInt(e.slideElement.getAttribute(`data-index-v`),10),e}syncProgressBar(){this.progressBarInner.querySelectorAll(`.scrollbar-slide`).forEach((e=>e.remove()));let e=this.viewportElement.scrollHeight,t=this.viewportElement.offsetHeight,n=t/e;this.progressBarHeight=this.progressBarInner.offsetHeight,this.playheadHeight=Math.max(n*this.progressBarHeight,8),this.progressBarScrollableHeight=this.progressBarHeight-this.playheadHeight;let r=t/e*this.progressBarHeight,i=Math.min(r/8,4);this.progressBarPlayhead.style.height=this.playheadHeight-i+`px`,r>6?this.slideTriggers.forEach((e=>{let{page:t}=e;t.progressBarSlide=document.createElement(`div`),t.progressBarSlide.className=`scrollbar-slide`,t.progressBarSlide.style.top=e.range[0]*this.progressBarHeight+`px`,t.progressBarSlide.style.height=(e.range[1]-e.range[0])*this.progressBarHeight-i+`px`,t.progressBarSlide.classList.toggle(`has-triggers`,t.scrollTriggers.length>0),this.progressBarInner.appendChild(t.progressBarSlide),t.scrollTriggerElements=t.scrollTriggers.map(((n,r)=>{let a=document.createElement(`div`);return a.className=`scrollbar-trigger`,a.style.top=(n.range[0]-e.range[0])*this.progressBarHeight+`px`,a.style.height=(n.range[1]-n.range[0])*this.progressBarHeight-i+`px`,t.progressBarSlide.appendChild(a),r===0&&(a.style.display=`none`),a}))})):this.pages.forEach((e=>e.progressBarSlide=null))}syncScrollPosition(){let e=this.viewportElement.offsetHeight,t=e/this.viewportElement.scrollHeight,n=this.viewportElement.scrollTop,r=this.viewportElement.scrollHeight-e,i=Math.max(Math.min(n/r,1),0),a=Math.max(Math.min((n+e/2)/this.viewportElement.scrollHeight,1),0),o;this.slideTriggers.forEach((e=>{let{page:n}=e;i>=e.range[0]-2*t&&i<=e.range[1]+2*t&&!n.loaded?(n.loaded=!0,this.Reveal.slideContent.load(n.slideElement)):n.loaded&&(n.loaded=!1,this.Reveal.slideContent.unload(n.slideElement)),i>=e.range[0]&&i<=e.range[1]?(this.activateTrigger(e),o=e.page):e.active&&this.deactivateTrigger(e)})),o&&o.scrollTriggers.forEach((e=>{a>=e.range[0]&&a<=e.range[1]?this.activateTrigger(e):e.active&&this.deactivateTrigger(e)})),this.setProgressBarValue(n/(this.viewportElement.scrollHeight-e))}setProgressBarValue(e){this.progressBar&&(this.progressBarPlayhead.style.transform=`translateY(${e*this.progressBarScrollableHeight}px)`,this.getAllPages().filter((e=>e.progressBarSlide)).forEach((e=>{e.progressBarSlide.classList.toggle(`active`,!0===e.active),e.scrollTriggers.forEach(((t,n)=>{e.scrollTriggerElements[n].classList.toggle(`active`,!0===e.active&&!0===t.active)}))})),this.showProgressBar())}showProgressBar(){this.progressBar.classList.add(`visible`),clearTimeout(this.hideProgressBarTimeout),this.Reveal.getConfig().scrollProgress!==`auto`||this.draggingProgressBar||(this.hideProgressBarTimeout=setTimeout((()=>{this.progressBar&&this.progressBar.classList.remove(`visible`)}),500))}prev(){this.viewportElement.scrollTop-=this.scrollTriggerHeight}next(){this.viewportElement.scrollTop+=this.scrollTriggerHeight}scrollToSlide(e){if(this.active){let t=this.getScrollTriggerBySlide(e);t&&(this.viewportElement.scrollTop=t.range[0]*(this.viewportElement.scrollHeight-this.viewportElement.offsetHeight))}else this.activatedCallbacks.push((()=>this.scrollToSlide(e)))}storeScrollPosition(){clearTimeout(this.storeScrollPositionTimeout),this.storeScrollPositionTimeout=setTimeout((()=>{sessionStorage.setItem(`reveal-scroll-top`,this.viewportElement.scrollTop),sessionStorage.setItem(`reveal-scroll-origin`,location.origin+location.pathname),this.storeScrollPositionTimeout=null}),50)}restoreScrollPosition(){let e=sessionStorage.getItem(`reveal-scroll-top`),t=sessionStorage.getItem(`reveal-scroll-origin`);e&&t===location.origin+location.pathname&&(this.viewportElement.scrollTop=parseInt(e,10))}activatePage(e){if(!e.active){e.active=!0;let{slideElement:t,backgroundElement:n,contentElement:r,indexh:i,indexv:a}=e;r.style.display=`block`,t.classList.add(`present`),n&&n.classList.add(`present`),this.Reveal.setCurrentScrollPage(t,i,a),this.Reveal.backgrounds.bubbleSlideContrastClassToElement(t,this.viewportElement),Array.from(r.parentNode.querySelectorAll(`.scroll-page-content`)).forEach((e=>{e!==r&&(e.style.display=`none`)}))}}deactivatePage(e){e.active&&(e.active=!1,e.slideElement&&e.slideElement.classList.remove(`present`),e.backgroundElement&&e.backgroundElement.classList.remove(`present`))}activateTrigger(e){e.active||(e.active=!0,e.activate())}deactivateTrigger(e){e.active&&(e.active=!1,e.deactivate&&e.deactivate())}getSlideByIndices(e,t){let n=this.getAllPages().find((n=>n.indexh===e&&n.indexv===t));return n?n.slideElement:null}getScrollTriggerBySlide(e){return this.slideTriggers.find((t=>t.page.slideElement===e))}getAllPages(){return this.pages.flatMap((e=>[e,...e.autoAnimatePages||[]]))}onScroll(){this.syncScrollPosition(),this.storeScrollPosition()}get viewportElement(){return this.Reveal.getViewportElement()}},ue=class{constructor(e){this.Reveal=e}async activate(){let e=this.Reveal.getConfig(),t=g(this.Reveal.getRevealElement(),O),n=e.slideNumber&&/all|print/i.test(e.showSlideNumber),r=this.Reveal.getComputedSlideSize(window.innerWidth,window.innerHeight),i=Math.floor(r.width*(1+e.margin)),a=Math.floor(r.height*(1+e.margin)),o=r.width,s=r.height;await new Promise(requestAnimationFrame),C(`@page{size:`+i+`px `+a+`px; margin: 0px;}`),C(`.reveal section>img, .reveal section>video, .reveal section>iframe{max-width: `+o+`px; max-height:`+s+`px}`),document.documentElement.classList.add(`reveal-print`,`print-pdf`),document.body.style.width=i+`px`,document.body.style.height=a+`px`;let c=this.Reveal.getViewportElement(),l;if(c){let e=window.getComputedStyle(c);e&&e.background&&(l=e.background)}await new Promise(requestAnimationFrame),this.Reveal.layoutSlideContents(o,s),await new Promise(requestAnimationFrame);let u=t.map((e=>e.scrollHeight)),d=[],f=t[0].parentNode,p=1;t.forEach((function(t,r){if(!1===t.classList.contains(`stack`)){let c=(i-o)/2,f=(a-s)/2,m=u[r],h=Math.max(Math.ceil(m/a),1);h=Math.min(h,e.pdfMaxPagesPerSlide),(h===1&&e.center||t.classList.contains(`center`))&&(f=Math.max((a-m)/2,0));let _=document.createElement(`div`);if(d.push(_),_.className=`pdf-page`,_.style.height=(a+e.pdfPageHeightOffset)*h+`px`,l&&(_.style.background=l),_.appendChild(t),t.style.left=c+`px`,t.style.top=f+`px`,t.style.width=o+`px`,this.Reveal.slideContent.layout(t),t.slideBackgroundElement&&_.insertBefore(t.slideBackgroundElement,t),e.showNotes){let n=this.Reveal.getSlideNotes(t);if(n){let t=typeof e.showNotes==`string`?e.showNotes:`inline`,r=document.createElement(`div`);r.classList.add(`speaker-notes`),r.classList.add(`speaker-notes-pdf`),r.setAttribute(`data-layout`,t),r.innerHTML=n,t===`separate-page`?d.push(r):(r.style.left=`8px`,r.style.bottom=`8px`,r.style.width=i-16+`px`,_.appendChild(r))}}if(n){let e=document.createElement(`div`);e.classList.add(`slide-number`),e.classList.add(`slide-number-pdf`),e.innerHTML=p++,_.appendChild(e)}if(e.pdfSeparateFragments){let e=this.Reveal.fragments.sort(_.querySelectorAll(`.fragment`),!0),t;e.forEach((function(e,r){t&&t.forEach((function(e){e.classList.remove(`current-fragment`)})),e.forEach((function(e){e.classList.add(`visible`,`current-fragment`)}),this);let i=_.cloneNode(!0);if(n){let e=r+1;i.querySelector(`.slide-number-pdf`).innerHTML+=`.`+e}d.push(i),t=e}),this),e.forEach((function(e){e.forEach((function(e){e.classList.remove(`visible`,`current-fragment`)}))}))}else g(_,`.fragment:not(.fade-out)`).forEach((function(e){e.classList.add(`visible`)}))}}),this),await new Promise(requestAnimationFrame),d.forEach((e=>f.appendChild(e))),this.Reveal.slideContent.layout(this.Reveal.getSlidesElement()),this.Reveal.dispatchEvent({type:`pdf-ready`}),c.classList.remove(`loading-scroll-mode`)}isActive(){return this.Reveal.getConfig().view===`print`}},de=class{constructor(e){this.Reveal=e}configure(e,t){!1===e.fragments?this.disable():!1===t.fragments&&this.enable()}disable(){g(this.Reveal.getSlidesElement(),`.fragment`).forEach((e=>{e.classList.add(`visible`),e.classList.remove(`current-fragment`)}))}enable(){g(this.Reveal.getSlidesElement(),`.fragment`).forEach((e=>{e.classList.remove(`visible`),e.classList.remove(`current-fragment`)}))}availableRoutes(){let e=this.Reveal.getCurrentSlide();if(e&&this.Reveal.getConfig().fragments){let t=e.querySelectorAll(`.fragment:not(.disabled)`),n=e.querySelectorAll(`.fragment:not(.disabled):not(.visible)`);return{prev:t.length-n.length>0,next:!!n.length}}return{prev:!1,next:!1}}sort(e,t=!1){e=Array.from(e);let n=[],r=[],i=[];e.forEach((e=>{if(e.hasAttribute(`data-fragment-index`)){let t=parseInt(e.getAttribute(`data-fragment-index`),10);n[t]||(n[t]=[]),n[t].push(e)}else r.push([e])})),n=n.concat(r);let a=0;return n.forEach((e=>{e.forEach((e=>{i.push(e),e.setAttribute(`data-fragment-index`,a)})),a++})),!0===t?n:i}sortAll(){this.Reveal.getHorizontalSlides().forEach((e=>{let t=g(e,`section`);t.forEach(((e,t)=>{this.sort(e.querySelectorAll(`.fragment`))}),this),t.length===0&&this.sort(e.querySelectorAll(`.fragment`))}))}update(e,t,n=this.Reveal.getCurrentSlide()){let r={shown:[],hidden:[]};if(n&&this.Reveal.getConfig().fragments&&(t||=this.sort(n.querySelectorAll(`.fragment`))).length){let i=0;if(typeof e!=`number`){let t=this.sort(n.querySelectorAll(`.fragment.visible`)).pop();t&&(e=parseInt(t.getAttribute(`data-fragment-index`)||0,10))}Array.from(t).forEach(((t,n)=>{if(t.hasAttribute(`data-fragment-index`)&&(n=parseInt(t.getAttribute(`data-fragment-index`),10)),i=Math.max(i,n),n<=e){let i=t.classList.contains(`visible`);t.classList.add(`visible`),t.classList.remove(`current-fragment`),n===e&&(this.Reveal.announceStatus(this.Reveal.getStatusText(t)),t.classList.add(`current-fragment`),this.Reveal.slideContent.startEmbeddedContent(t)),i||(r.shown.push(t),this.Reveal.dispatchEvent({target:t,type:`visible`,bubbles:!1}))}else{let e=t.classList.contains(`visible`);t.classList.remove(`visible`),t.classList.remove(`current-fragment`),e&&(this.Reveal.slideContent.stopEmbeddedContent(t),r.hidden.push(t),this.Reveal.dispatchEvent({target:t,type:`hidden`,bubbles:!1}))}})),e=typeof e==`number`?e:-1,e=Math.max(Math.min(e,i),-1),n.setAttribute(`data-fragment`,e)}return r.hidden.length&&this.Reveal.dispatchEvent({type:`fragmenthidden`,data:{fragment:r.hidden[0],fragments:r.hidden}}),r.shown.length&&this.Reveal.dispatchEvent({type:`fragmentshown`,data:{fragment:r.shown[0],fragments:r.shown}}),r}sync(e=this.Reveal.getCurrentSlide()){return this.sort(e.querySelectorAll(`.fragment`))}goto(e,t=0){let n=this.Reveal.getCurrentSlide();if(n&&this.Reveal.getConfig().fragments){let r=this.sort(n.querySelectorAll(`.fragment:not(.disabled)`));if(r.length){if(typeof e!=`number`){let t=this.sort(n.querySelectorAll(`.fragment:not(.disabled).visible`)).pop();e=t?parseInt(t.getAttribute(`data-fragment-index`)||0,10):-1}e+=t;let i=this.update(e,r);return this.Reveal.controls.update(),this.Reveal.progress.update(),this.Reveal.getConfig().fragmentInURL&&this.Reveal.location.writeURL(),!(!i.shown.length&&!i.hidden.length)}}return!1}next(){return this.goto(null,1)}prev(){return this.goto(null,-1)}},fe=class{constructor(e){this.Reveal=e,this.active=!1,this.onSlideClicked=this.onSlideClicked.bind(this)}activate(){if(this.Reveal.getConfig().overview&&!this.Reveal.isScrollView()&&!this.isActive()){this.active=!0,this.Reveal.getRevealElement().classList.add(`overview`),this.Reveal.cancelAutoSlide(),this.Reveal.getSlidesElement().appendChild(this.Reveal.getBackgroundsElement()),g(this.Reveal.getRevealElement(),O).forEach((e=>{e.classList.contains(`stack`)||e.addEventListener(`click`,this.onSlideClicked,!0)}));let e=this.Reveal.getComputedSlideSize();this.overviewSlideWidth=e.width+70,this.overviewSlideHeight=e.height+70,this.Reveal.getConfig().rtl&&(this.overviewSlideWidth=-this.overviewSlideWidth),this.Reveal.updateSlidesVisibility(),this.layout(),this.update(),this.Reveal.layout();let t=this.Reveal.getIndices();this.Reveal.dispatchEvent({type:`overviewshown`,data:{indexh:t.h,indexv:t.v,currentSlide:this.Reveal.getCurrentSlide()}})}}layout(){this.Reveal.getHorizontalSlides().forEach(((e,t)=>{e.setAttribute(`data-index-h`,t),y(e,`translate3d(`+t*this.overviewSlideWidth+`px, 0, 0)`),e.classList.contains(`stack`)&&g(e,`section`).forEach(((e,n)=>{e.setAttribute(`data-index-h`,t),e.setAttribute(`data-index-v`,n),y(e,`translate3d(0, `+n*this.overviewSlideHeight+`px, 0)`)}))})),Array.from(this.Reveal.getBackgroundsElement().childNodes).forEach(((e,t)=>{y(e,`translate3d(`+t*this.overviewSlideWidth+`px, 0, 0)`),g(e,`.slide-background`).forEach(((e,t)=>{y(e,`translate3d(0, `+t*this.overviewSlideHeight+`px, 0)`)}))}))}update(){let e=Math.min(window.innerWidth,window.innerHeight),t=Math.max(e/5,150)/e,n=this.Reveal.getIndices();this.Reveal.transformSlides({overview:[`scale(`+t+`)`,`translateX(`+-n.h*this.overviewSlideWidth+`px)`,`translateY(`+-n.v*this.overviewSlideHeight+`px)`].join(` `)})}deactivate(){if(this.Reveal.getConfig().overview){this.active=!1,this.Reveal.getRevealElement().classList.remove(`overview`),this.Reveal.getRevealElement().classList.add(`overview-deactivating`),setTimeout((()=>{this.Reveal.getRevealElement().classList.remove(`overview-deactivating`)}),1),this.Reveal.getRevealElement().appendChild(this.Reveal.getBackgroundsElement()),g(this.Reveal.getRevealElement(),O).forEach((e=>{y(e,``),e.removeEventListener(`click`,this.onSlideClicked,!0)})),g(this.Reveal.getBackgroundsElement(),`.slide-background`).forEach((e=>{y(e,``)})),this.Reveal.transformSlides({overview:``});let e=this.Reveal.getIndices();this.Reveal.slide(e.h,e.v),this.Reveal.layout(),this.Reveal.cueAutoSlide(),this.Reveal.dispatchEvent({type:`overviewhidden`,data:{indexh:e.h,indexv:e.v,currentSlide:this.Reveal.getCurrentSlide()}})}}toggle(e){typeof e==`boolean`?e?this.activate():this.deactivate():this.isActive()?this.deactivate():this.activate()}isActive(){return this.active}onSlideClicked(e){if(this.isActive()){e.preventDefault();let t=e.target;for(;t&&!t.nodeName.match(/section/gi);)t=t.parentNode;if(t&&!t.classList.contains(`disabled`)&&(this.deactivate(),t.nodeName.match(/section/gi))){let e=parseInt(t.getAttribute(`data-index-h`),10),n=parseInt(t.getAttribute(`data-index-v`),10);this.Reveal.slide(e,n)}}}},pe=class{constructor(e){this.Reveal=e,this.shortcuts={},this.bindings={},this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this)}configure(e,t){e.navigationMode===`linear`?(this.shortcuts[`→ , ↓ , SPACE , N , L , J`]=`Next slide`,this.shortcuts[`← , ↑ , P , H , K`]=`Previous slide`):(this.shortcuts[`N , SPACE`]=`Next slide`,this.shortcuts[`P , Shift SPACE`]=`Previous slide`,this.shortcuts[`← , H`]=`Navigate left`,this.shortcuts[`→ , L`]=`Navigate right`,this.shortcuts[`↑ , K`]=`Navigate up`,this.shortcuts[`↓ , J`]=`Navigate down`),this.shortcuts[`Alt + ←/↑/→/↓`]=`Navigate without fragments`,this.shortcuts[`Shift + ←/↑/→/↓`]=`Jump to first/last slide`,this.shortcuts[`B , .`]=`Pause`,this.shortcuts.F=`Fullscreen`,this.shortcuts.G=`Jump to slide`,this.shortcuts[`ESC, O`]=`Slide overview`}bind(){document.addEventListener(`keydown`,this.onDocumentKeyDown,!1)}unbind(){document.removeEventListener(`keydown`,this.onDocumentKeyDown,!1)}addKeyBinding(e,t){typeof e==`object`&&e.keyCode?this.bindings[e.keyCode]={callback:t,key:e.key,description:e.description}:this.bindings[e]={callback:t,key:null,description:null}}removeKeyBinding(e){delete this.bindings[e]}triggerKey(e){this.onDocumentKeyDown({keyCode:e})}registerKeyboardShortcut(e,t){this.shortcuts[e]=t}getShortcuts(){return this.shortcuts}getBindings(){return this.bindings}onDocumentKeyDown(e){let t=this.Reveal.getConfig();if(typeof t.keyboardCondition==`function`&&!1===t.keyboardCondition(e)||t.keyboardCondition===`focused`&&!this.Reveal.isFocused())return!0;let n=e.keyCode,r=!this.Reveal.isAutoSliding();this.Reveal.onUserInput(e);let i=document.activeElement&&!0===document.activeElement.isContentEditable,a=document.activeElement&&document.activeElement.tagName&&/input|textarea/i.test(document.activeElement.tagName),o=document.activeElement&&document.activeElement.className&&/speaker-notes/i.test(document.activeElement.className),s=!([32,37,38,39,40,63,78,80,191].indexOf(e.keyCode)!==-1&&e.shiftKey||e.altKey)&&(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey);if(i||a||o||s)return;let c,l=[66,86,190,191,112];if(typeof t.keyboard==`object`)for(c in t.keyboard)t.keyboard[c]===`togglePause`&&l.push(parseInt(c,10));if(this.Reveal.isOverlayOpen()&&![`Escape`,`f`,`c`,`b`,`.`].includes(e.key)||this.Reveal.isPaused()&&l.indexOf(n)===-1)return!1;let u=t.navigationMode===`linear`||!this.Reveal.hasHorizontalSlides()||!this.Reveal.hasVerticalSlides(),d=!1;if(typeof t.keyboard==`object`){for(c in t.keyboard)if(parseInt(c,10)===n){let n=t.keyboard[c];typeof n==`function`?n.apply(null,[e]):typeof n==`string`&&typeof this.Reveal[n]==`function`&&this.Reveal[n].call(),d=!0}}if(!1===d){for(c in this.bindings)if(parseInt(c,10)===n){let t=this.bindings[c].callback;typeof t==`function`?t.apply(null,[e]):typeof t==`string`&&typeof this.Reveal[t]==`function`&&this.Reveal[t].call(),d=!0}}!1===d&&(d=!0,n===80||n===33?this.Reveal.prev({skipFragments:e.altKey}):n===78||n===34?this.Reveal.next({skipFragments:e.altKey}):n===72||n===37?e.shiftKey?this.Reveal.slide(0):!this.Reveal.overview.isActive()&&u?t.rtl?this.Reveal.next({skipFragments:e.altKey}):this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.left({skipFragments:e.altKey}):n===76||n===39?e.shiftKey?this.Reveal.slide(this.Reveal.getHorizontalSlides().length-1):!this.Reveal.overview.isActive()&&u?t.rtl?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.next({skipFragments:e.altKey}):this.Reveal.right({skipFragments:e.altKey}):n===75||n===38?e.shiftKey?this.Reveal.slide(void 0,0):!this.Reveal.overview.isActive()&&u?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.up({skipFragments:e.altKey}):n===74||n===40?e.shiftKey?this.Reveal.slide(void 0,Number.MAX_VALUE):!this.Reveal.overview.isActive()&&u?this.Reveal.next({skipFragments:e.altKey}):this.Reveal.down({skipFragments:e.altKey}):n===36?this.Reveal.slide(0):n===35?this.Reveal.slide(this.Reveal.getHorizontalSlides().length-1):n===32?(this.Reveal.overview.isActive()&&this.Reveal.overview.deactivate(),e.shiftKey?this.Reveal.prev({skipFragments:e.altKey}):this.Reveal.next({skipFragments:e.altKey})):[58,59,66,86,190].includes(n)||n===191&&!e.shiftKey?this.Reveal.togglePause():n===70?S(t.embedded?this.Reveal.getViewportElement():document.documentElement):n===65?t.autoSlideStoppable&&this.Reveal.toggleAutoSlide(r):n===71?t.jumpToSlide&&this.Reveal.toggleJumpToSlide():n===67&&this.Reveal.isOverlayOpen()?this.Reveal.closeOverlay():n!==63&&n!==191||!e.shiftKey?n===112?this.Reveal.toggleHelp():d=!1:this.Reveal.toggleHelp()),d?e.preventDefault&&e.preventDefault():n!==27&&n!==79||(!1===this.Reveal.closeOverlay()&&this.Reveal.overview.toggle(),e.preventDefault&&e.preventDefault()),this.Reveal.cueAutoSlide()}},me=class{MAX_REPLACE_STATE_FREQUENCY=1e3;constructor(e){this.Reveal=e,this.writeURLTimeout=0,this.replaceStateTimestamp=0,this.onWindowHashChange=this.onWindowHashChange.bind(this)}bind(){window.addEventListener(`hashchange`,this.onWindowHashChange,!1)}unbind(){window.removeEventListener(`hashchange`,this.onWindowHashChange,!1)}getIndicesFromHash(e=window.location.hash,t={}){let n=e.replace(/^#\/?/,``),r=n.split(`/`);if(/^[0-9]*$/.test(r[0])||!n.length){let e=this.Reveal.getConfig(),n,i=e.hashOneBasedIndex||t.oneBasedIndex?1:0,a=parseInt(r[0],10)-i||0,o=parseInt(r[1],10)-i||0;return e.fragmentInURL&&(n=parseInt(r[2],10),isNaN(n)&&(n=void 0)),{h:a,v:o,f:n}}{let e,t;/\/[-\d]+$/g.test(n)&&(t=parseInt(n.split(`/`).pop(),10),t=isNaN(t)?void 0:t,n=n.split(`/`).shift());try{e=document.getElementById(decodeURIComponent(n)).closest(`.slides section`)}catch{}if(e)return{...this.Reveal.getIndices(e),f:t}}return null}readURL(){let e=this.Reveal.getIndices(),t=this.getIndicesFromHash();t?t.h===e.h&&t.v===e.v&&t.f===void 0||this.Reveal.slide(t.h,t.v,t.f):this.Reveal.slide(e.h||0,e.v||0)}writeURL(e){let t=this.Reveal.getConfig(),n=this.Reveal.getCurrentSlide();if(clearTimeout(this.writeURLTimeout),typeof e==`number`)this.writeURLTimeout=setTimeout(this.writeURL,e);else if(n){let e=this.getHash();t.history?window.location.hash=e:t.hash&&(e===`/`?this.debouncedReplaceState(window.location.pathname+window.location.search):this.debouncedReplaceState(`#`+e))}}replaceState(e){window.history.replaceState(null,null,e),this.replaceStateTimestamp=Date.now()}debouncedReplaceState(e){clearTimeout(this.replaceStateTimeout),Date.now()-this.replaceStateTimestamp>this.MAX_REPLACE_STATE_FREQUENCY?this.replaceState(e):this.replaceStateTimeout=setTimeout((()=>this.replaceState(e)),this.MAX_REPLACE_STATE_FREQUENCY)}getHash(e){let t=`/`,n=e||this.Reveal.getCurrentSlide(),r=n?n.getAttribute(`id`):null;r&&=encodeURIComponent(r);let i=this.Reveal.getIndices(e);if(this.Reveal.getConfig().fragmentInURL||(i.f=void 0),typeof r==`string`&&r.length)t=`/`+r,i.f>=0&&(t+=`/`+i.f);else{let e=this.Reveal.getConfig().hashOneBasedIndex?1:0;(i.h>0||i.v>0||i.f>=0)&&(t+=i.h+e),(i.v>0||i.f>=0)&&(t+=`/`+(i.v+e)),i.f>=0&&(t+=`/`+i.f)}return t}onWindowHashChange(e){this.readURL()}},he=class{constructor(e){this.Reveal=e,this.onNavigateLeftClicked=this.onNavigateLeftClicked.bind(this),this.onNavigateRightClicked=this.onNavigateRightClicked.bind(this),this.onNavigateUpClicked=this.onNavigateUpClicked.bind(this),this.onNavigateDownClicked=this.onNavigateDownClicked.bind(this),this.onNavigatePrevClicked=this.onNavigatePrevClicked.bind(this),this.onNavigateNextClicked=this.onNavigateNextClicked.bind(this),this.onEnterFullscreen=this.onEnterFullscreen.bind(this)}render(){let e=this.Reveal.getConfig().rtl,t=this.Reveal.getRevealElement();this.element=document.createElement(`aside`),this.element.className=`controls`,this.element.innerHTML=`\n\t\t\t\n\t\t\t\n\t\t\t`,this.Reveal.getRevealElement().appendChild(this.element),this.controlsLeft=g(t,`.navigate-left`),this.controlsRight=g(t,`.navigate-right`),this.controlsUp=g(t,`.navigate-up`),this.controlsDown=g(t,`.navigate-down`),this.controlsPrev=g(t,`.navigate-prev`),this.controlsNext=g(t,`.navigate-next`),this.controlsFullscreen=g(t,`.enter-fullscreen`),this.controlsRightArrow=this.element.querySelector(`.navigate-right`),this.controlsLeftArrow=this.element.querySelector(`.navigate-left`),this.controlsDownArrow=this.element.querySelector(`.navigate-down`)}configure(e,t){this.element.style.display=e.controls&&(e.controls!==`speaker-only`||this.Reveal.isSpeakerNotes())?`block`:`none`,this.element.setAttribute(`data-controls-layout`,e.controlsLayout),this.element.setAttribute(`data-controls-back-arrows`,e.controlsBackArrows)}bind(){let e=[`touchstart`,`click`];E&&(e=[`touchstart`]),e.forEach((e=>{this.controlsLeft.forEach((t=>t.addEventListener(e,this.onNavigateLeftClicked,!1))),this.controlsRight.forEach((t=>t.addEventListener(e,this.onNavigateRightClicked,!1))),this.controlsUp.forEach((t=>t.addEventListener(e,this.onNavigateUpClicked,!1))),this.controlsDown.forEach((t=>t.addEventListener(e,this.onNavigateDownClicked,!1))),this.controlsPrev.forEach((t=>t.addEventListener(e,this.onNavigatePrevClicked,!1))),this.controlsNext.forEach((t=>t.addEventListener(e,this.onNavigateNextClicked,!1))),this.controlsFullscreen.forEach((t=>t.addEventListener(e,this.onEnterFullscreen,!1)))}))}unbind(){[`touchstart`,`click`].forEach((e=>{this.controlsLeft.forEach((t=>t.removeEventListener(e,this.onNavigateLeftClicked,!1))),this.controlsRight.forEach((t=>t.removeEventListener(e,this.onNavigateRightClicked,!1))),this.controlsUp.forEach((t=>t.removeEventListener(e,this.onNavigateUpClicked,!1))),this.controlsDown.forEach((t=>t.removeEventListener(e,this.onNavigateDownClicked,!1))),this.controlsPrev.forEach((t=>t.removeEventListener(e,this.onNavigatePrevClicked,!1))),this.controlsNext.forEach((t=>t.removeEventListener(e,this.onNavigateNextClicked,!1))),this.controlsFullscreen.forEach((t=>t.removeEventListener(e,this.onEnterFullscreen,!1)))}))}update(){let e=this.Reveal.availableRoutes();[...this.controlsLeft,...this.controlsRight,...this.controlsUp,...this.controlsDown,...this.controlsPrev,...this.controlsNext].forEach((e=>{e.classList.remove(`enabled`,`fragmented`),e.setAttribute(`disabled`,`disabled`)})),e.left&&this.controlsLeft.forEach((e=>{e.classList.add(`enabled`),e.removeAttribute(`disabled`)})),e.right&&this.controlsRight.forEach((e=>{e.classList.add(`enabled`),e.removeAttribute(`disabled`)})),e.up&&this.controlsUp.forEach((e=>{e.classList.add(`enabled`),e.removeAttribute(`disabled`)})),e.down&&this.controlsDown.forEach((e=>{e.classList.add(`enabled`),e.removeAttribute(`disabled`)})),(e.left||e.up)&&this.controlsPrev.forEach((e=>{e.classList.add(`enabled`),e.removeAttribute(`disabled`)})),(e.right||e.down)&&this.controlsNext.forEach((e=>{e.classList.add(`enabled`),e.removeAttribute(`disabled`)}));let t=this.Reveal.getCurrentSlide();if(t){let e=this.Reveal.fragments.availableRoutes();e.prev&&this.controlsPrev.forEach((e=>{e.classList.add(`fragmented`,`enabled`),e.removeAttribute(`disabled`)})),e.next&&this.controlsNext.forEach((e=>{e.classList.add(`fragmented`,`enabled`),e.removeAttribute(`disabled`)}));let n=this.Reveal.isVerticalSlide(t),r=n&&t.parentElement&&t.parentElement.querySelectorAll(`:scope > section`).length>1;n&&r?(e.prev&&this.controlsUp.forEach((e=>{e.classList.add(`fragmented`,`enabled`),e.removeAttribute(`disabled`)})),e.next&&this.controlsDown.forEach((e=>{e.classList.add(`fragmented`,`enabled`),e.removeAttribute(`disabled`)}))):(e.prev&&this.controlsLeft.forEach((e=>{e.classList.add(`fragmented`,`enabled`),e.removeAttribute(`disabled`)})),e.next&&this.controlsRight.forEach((e=>{e.classList.add(`fragmented`,`enabled`),e.removeAttribute(`disabled`)})))}if(this.Reveal.getConfig().controlsTutorial){let t=this.Reveal.getIndices();!this.Reveal.hasNavigatedVertically()&&e.down?this.controlsDownArrow.classList.add(`highlight`):(this.controlsDownArrow.classList.remove(`highlight`),this.Reveal.getConfig().rtl?!this.Reveal.hasNavigatedHorizontally()&&e.left&&t.v===0?this.controlsLeftArrow.classList.add(`highlight`):this.controlsLeftArrow.classList.remove(`highlight`):!this.Reveal.hasNavigatedHorizontally()&&e.right&&t.v===0?this.controlsRightArrow.classList.add(`highlight`):this.controlsRightArrow.classList.remove(`highlight`))}}destroy(){this.unbind(),this.element.remove()}onNavigateLeftClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.getConfig().navigationMode===`linear`?this.Reveal.prev():this.Reveal.left()}onNavigateRightClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.getConfig().navigationMode===`linear`?this.Reveal.next():this.Reveal.right()}onNavigateUpClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.up()}onNavigateDownClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.down()}onNavigatePrevClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.prev()}onNavigateNextClicked(e){e.preventDefault(),this.Reveal.onUserInput(),this.Reveal.next()}onEnterFullscreen(e){let t=this.Reveal.getConfig(),n=this.Reveal.getViewportElement();S(t.embedded?n:n.parentElement)}},ge=class{constructor(e){this.Reveal=e,this.onProgressClicked=this.onProgressClicked.bind(this)}render(){this.element=document.createElement(`div`),this.element.className=`progress`,this.Reveal.getRevealElement().appendChild(this.element),this.bar=document.createElement(`span`),this.element.appendChild(this.bar)}configure(e,t){this.element.style.display=e.progress?`block`:`none`}bind(){this.Reveal.getConfig().progress&&this.element&&this.element.addEventListener(`click`,this.onProgressClicked,!1)}unbind(){this.Reveal.getConfig().progress&&this.element&&this.element.removeEventListener(`click`,this.onProgressClicked,!1)}update(){if(this.Reveal.getConfig().progress&&this.bar){let e=this.Reveal.getProgress();this.Reveal.getTotalSlides()<2&&(e=0),this.bar.style.transform=`scaleX(`+e+`)`}}getMaxWidth(){return this.Reveal.getRevealElement().offsetWidth}onProgressClicked(e){this.Reveal.onUserInput(e),e.preventDefault();let t=this.Reveal.getSlides(),n=t.length,r=Math.floor(e.clientX/this.getMaxWidth()*n);this.Reveal.getConfig().rtl&&(r=n-r);let i=this.Reveal.getIndices(t[r]);this.Reveal.slide(i.h,i.v)}destroy(){this.element.remove()}},_e=class{constructor(e){this.Reveal=e,this.lastMouseWheelStep=0,this.cursorHidden=!1,this.cursorInactiveTimeout=0,this.onDocumentCursorActive=this.onDocumentCursorActive.bind(this),this.onDocumentMouseScroll=this.onDocumentMouseScroll.bind(this)}configure(e,t){e.mouseWheel?document.addEventListener(`wheel`,this.onDocumentMouseScroll,!1):document.removeEventListener(`wheel`,this.onDocumentMouseScroll,!1),e.hideInactiveCursor?(document.addEventListener(`mousemove`,this.onDocumentCursorActive,!1),document.addEventListener(`mousedown`,this.onDocumentCursorActive,!1)):(this.showCursor(),document.removeEventListener(`mousemove`,this.onDocumentCursorActive,!1),document.removeEventListener(`mousedown`,this.onDocumentCursorActive,!1))}showCursor(){this.cursorHidden&&(this.cursorHidden=!1,this.Reveal.getRevealElement().style.cursor=``)}hideCursor(){!1===this.cursorHidden&&(this.cursorHidden=!0,this.Reveal.getRevealElement().style.cursor=`none`)}destroy(){this.showCursor(),document.removeEventListener(`wheel`,this.onDocumentMouseScroll,!1),document.removeEventListener(`mousemove`,this.onDocumentCursorActive,!1),document.removeEventListener(`mousedown`,this.onDocumentCursorActive,!1)}onDocumentCursorActive(e){this.showCursor(),clearTimeout(this.cursorInactiveTimeout),this.cursorInactiveTimeout=setTimeout(this.hideCursor.bind(this),this.Reveal.getConfig().hideCursorTime)}onDocumentMouseScroll(e){if(Date.now()-this.lastMouseWheelStep>1e3){this.lastMouseWheelStep=Date.now();let t=e.detail||-e.wheelDelta;t>0?this.Reveal.next():t<0&&this.Reveal.prev()}}},M=(e,t)=>{let n=document.createElement(`script`);n.type=`text/javascript`,n.async=!1,n.defer=!1,n.src=e,typeof t==`function`&&(n.onload=n.onreadystatechange=e=>{(e.type===`load`||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=n.onerror=null,t())},n.onerror=e=>{n.onload=n.onreadystatechange=n.onerror=null,t(Error(`Failed loading script: `+n.src+` +`+e))});let r=document.querySelector(`head`);r.insertBefore(n,r.lastChild)},ve=class{constructor(e){this.Reveal=e,this.state=`idle`,this.registeredPlugins={},this.asyncDependencies=[]}load(e,t){return this.state=`loading`,e.forEach(this.registerPlugin.bind(this)),new Promise((e=>{let n=[],r=0;if(t.forEach((e=>{e.condition&&!e.condition()||(e.async?this.asyncDependencies.push(e):n.push(e))})),n.length){r=n.length;let t=t=>{t&&typeof t.callback==`function`&&t.callback(),--r==0&&this.initPlugins().then(e)};n.forEach((e=>{typeof e.id==`string`?(this.registerPlugin(e),t(e)):typeof e.src==`string`?M(e.src,(()=>t(e))):(console.warn(`Unrecognized plugin format`,e),t())}))}else this.initPlugins().then(e)}))}initPlugins(){return new Promise((e=>{let t=Object.values(this.registeredPlugins),n=t.length;if(n===0)this.loadAsync().then(e);else{let r,i=()=>{--n==0?this.loadAsync().then(e):r()},a=0;r=()=>{let e=t[a++];if(typeof e.init==`function`){let t=e.init(this.Reveal);t&&typeof t.then==`function`?t.then(i):i()}else i()},r()}}))}loadAsync(){return this.state=`loaded`,this.asyncDependencies.length&&this.asyncDependencies.forEach((e=>{M(e.src,e.callback)})),Promise.resolve()}registerPlugin(e){arguments.length===2&&typeof arguments[0]==`string`?(e=arguments[1]).id=arguments[0]:typeof e==`function`&&(e=e());let t=e.id;typeof t==`string`?this.registeredPlugins[t]===void 0?(this.registeredPlugins[t]=e,this.state===`loaded`&&typeof e.init==`function`&&e.init(this.Reveal)):console.warn(`reveal.js: "`+t+`" plugin has already been registered`):console.warn(`Unrecognized plugin format; can't find plugin.id`,e)}hasPlugin(e){return!!this.registeredPlugins[e]}getPlugin(e){return this.registeredPlugins[e]}getRegisteredPlugins(){return this.registeredPlugins}destroy(){Object.values(this.registeredPlugins).forEach((e=>{typeof e.destroy==`function`&&e.destroy()})),this.registeredPlugins={},this.asyncDependencies=[]}},ye=class{constructor(e){this.Reveal=e,this.onSlidesClicked=this.onSlidesClicked.bind(this),this.iframeTriggerSelector=null,this.mediaTriggerSelector=`[data-preview-image], [data-preview-video]`,this.stateProps=[`previewIframe`,`previewImage`,`previewVideo`,`previewFit`],this.state={}}update(){this.Reveal.getConfig().previewLinks?this.iframeTriggerSelector=`a[href]:not([data-preview-link=false]), [data-preview-link]:not(a):not([data-preview-link=false])`:this.iframeTriggerSelector=`[data-preview-link]:not([data-preview-link=false])`;let e=this.Reveal.getSlidesElement().querySelectorAll(this.iframeTriggerSelector).length>0,t=this.Reveal.getSlidesElement().querySelectorAll(this.mediaTriggerSelector).length>0;e||t?this.Reveal.getSlidesElement().addEventListener(`click`,this.onSlidesClicked,!1):this.Reveal.getSlidesElement().removeEventListener(`click`,this.onSlidesClicked,!1)}createOverlay(e){this.dom=document.createElement(`div`),this.dom.classList.add(`r-overlay`),this.dom.classList.add(e),this.viewport=document.createElement(`div`),this.viewport.classList.add(`r-overlay-viewport`),this.dom.appendChild(this.viewport),this.Reveal.getRevealElement().appendChild(this.dom)}previewIframe(e){this.close(),this.state={previewIframe:e},this.createOverlay(`r-overlay-preview`),this.dom.dataset.state=`loading`,this.viewport.innerHTML=`
\n\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tUnable to load iframe. This is likely due to the site's policy (x-frame-options).\n\t\t\t\t\n\t\t\t
`,this.dom.querySelector(`iframe`).addEventListener(`load`,(e=>{this.dom.dataset.state=`loaded`}),!1),this.dom.querySelector(`.r-overlay-close`).addEventListener(`click`,(e=>{this.close(),e.preventDefault()}),!1),this.dom.querySelector(`.r-overlay-external`).addEventListener(`click`,(e=>{this.close()}),!1),this.Reveal.dispatchEvent({type:`previewiframe`,data:{url:e}})}previewMedia(e,t,n){if(t!==`image`&&t!==`video`)return void console.warn(`Please specify a valid media type to preview (image|video)`);this.close(),n||=`scale-down`,this.createOverlay(`r-overlay-preview`),this.dom.dataset.state=`loading`,this.dom.dataset.previewFit=n,this.viewport.innerHTML=`
+ +
+
+
`;let r=this.dom.querySelector(`.r-overlay-content`);if(t===`image`){this.state={previewImage:e,previewFit:n};let t=document.createElement(`img`,{});t.src=e,r.appendChild(t),t.addEventListener(`load`,(()=>{this.dom.dataset.state=`loaded`}),!1),t.addEventListener(`error`,(()=>{this.dom.dataset.state=`error`,r.innerHTML=`Unable to load image.`}),!1),this.dom.style.cursor=`zoom-out`,this.dom.addEventListener(`click`,(e=>{this.close()}),!1),this.Reveal.dispatchEvent({type:`previewimage`,data:{url:e}})}else{if(t!==`video`)throw Error(`Please specify a valid media type to preview`);{this.state={previewVideo:e,previewFit:n};let t=document.createElement(`video`);t.autoplay=this.dom.dataset.previewAutoplay!==`false`,t.controls=this.dom.dataset.previewControls!==`false`,t.loop=this.dom.dataset.previewLoop===`true`,t.muted=this.dom.dataset.previewMuted===`true`,t.playsInline=!0,t.src=e,r.appendChild(t),t.addEventListener(`loadeddata`,(()=>{this.dom.dataset.state=`loaded`}),!1),t.addEventListener(`error`,(()=>{this.dom.dataset.state=`error`,r.innerHTML=`Unable to load video.`}),!1),this.Reveal.dispatchEvent({type:`previewvideo`,data:{url:e}})}}this.dom.querySelector(`.r-overlay-close`).addEventListener(`click`,(e=>{this.close(),e.preventDefault()}),!1)}previewImage(e,t){this.previewMedia(e,`image`,t)}previewVideo(e,t){this.previewMedia(e,`video`,t)}toggleHelp(e){typeof e==`boolean`?e?this.showHelp():this.close():this.dom?this.close():this.showHelp()}showHelp(){if(this.Reveal.getConfig().help){this.close(),this.createOverlay(`r-overlay-help`);let e=`

Keyboard Shortcuts

`,t=this.Reveal.keyboard.getShortcuts(),n=this.Reveal.keyboard.getBindings();e+=``;for(let n in t)e+=``;for(let t in n)n[t].key&&n[t].description&&(e+=``);e+=`
KEYACTION
${n}${t[n]}
${n[t].key}${n[t].description}
`,this.viewport.innerHTML=`\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
${e}
\n\t\t\t\t
\n\t\t\t`,this.dom.querySelector(`.r-overlay-close`).addEventListener(`click`,(e=>{this.close(),e.preventDefault()}),!1),this.Reveal.dispatchEvent({type:`showhelp`})}}isOpen(){return!!this.dom}close(){return!!this.dom&&(this.dom.remove(),this.dom=null,this.state={},this.Reveal.dispatchEvent({type:`closeoverlay`}),!0)}getState(){return this.state}setState(e){this.stateProps.every((t=>this.state[t]===e[t]))||(e.previewIframe?this.previewIframe(e.previewIframe):e.previewImage?this.previewImage(e.previewImage,e.previewFit):e.previewVideo?this.previewVideo(e.previewVideo,e.previewFit):this.close())}onSlidesClicked(e){let t=e.target,n=t.closest(this.iframeTriggerSelector),r=t.closest(this.mediaTriggerSelector);if(n){if(e.metaKey||e.shiftKey||e.altKey)return;let t=n.getAttribute(`href`)||n.getAttribute(`data-preview-link`);t&&(this.previewIframe(t),e.preventDefault())}else if(r){if(r.hasAttribute(`data-preview-image`)){let t=r.dataset.previewImage||r.getAttribute(`src`);t&&(this.previewImage(t,r.dataset.previewFit),e.preventDefault())}else if(r.hasAttribute(`data-preview-video`)){let t=r.dataset.previewVideo||r.getAttribute(`src`);if(!t){let e=r.querySelector(`source`);e&&(t=e.getAttribute(`src`))}t&&(this.previewVideo(t,r.dataset.previewFit),e.preventDefault())}}}destroy(){this.close()}},be=class{constructor(e){this.Reveal=e,this.touchStartX=0,this.touchStartY=0,this.touchStartCount=0,this.touchCaptured=!1,this.onPointerDown=this.onPointerDown.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.onTouchStart=this.onTouchStart.bind(this),this.onTouchMove=this.onTouchMove.bind(this),this.onTouchEnd=this.onTouchEnd.bind(this)}bind(){let e=this.Reveal.getRevealElement();`onpointerdown`in window?(e.addEventListener(`pointerdown`,this.onPointerDown,!1),e.addEventListener(`pointermove`,this.onPointerMove,!1),e.addEventListener(`pointerup`,this.onPointerUp,!1)):window.navigator.msPointerEnabled?(e.addEventListener(`MSPointerDown`,this.onPointerDown,!1),e.addEventListener(`MSPointerMove`,this.onPointerMove,!1),e.addEventListener(`MSPointerUp`,this.onPointerUp,!1)):(e.addEventListener(`touchstart`,this.onTouchStart,!1),e.addEventListener(`touchmove`,this.onTouchMove,!1),e.addEventListener(`touchend`,this.onTouchEnd,!1))}unbind(){let e=this.Reveal.getRevealElement();e.removeEventListener(`pointerdown`,this.onPointerDown,!1),e.removeEventListener(`pointermove`,this.onPointerMove,!1),e.removeEventListener(`pointerup`,this.onPointerUp,!1),e.removeEventListener(`MSPointerDown`,this.onPointerDown,!1),e.removeEventListener(`MSPointerMove`,this.onPointerMove,!1),e.removeEventListener(`MSPointerUp`,this.onPointerUp,!1),e.removeEventListener(`touchstart`,this.onTouchStart,!1),e.removeEventListener(`touchmove`,this.onTouchMove,!1),e.removeEventListener(`touchend`,this.onTouchEnd,!1)}isSwipePrevented(e){if(b(e,`video[controls], audio[controls]`))return!0;for(;e&&typeof e.hasAttribute==`function`;){if(e.hasAttribute(`data-prevent-swipe`))return!0;e=e.parentNode}return!1}onTouchStart(e){if(this.touchCaptured=!1,this.isSwipePrevented(e.target))return!0;this.touchStartX=e.touches[0].clientX,this.touchStartY=e.touches[0].clientY,this.touchStartCount=e.touches.length}onTouchMove(e){if(this.isSwipePrevented(e.target))return!0;let t=this.Reveal.getConfig();if(this.touchCaptured)E&&e.preventDefault();else{this.Reveal.onUserInput(e);let n=e.touches[0].clientX,r=e.touches[0].clientY;if(e.touches.length===1&&this.touchStartCount!==2){let i=this.Reveal.availableRoutes({includeFragments:!0}),a=n-this.touchStartX,o=r-this.touchStartY;a>40&&Math.abs(a)>Math.abs(o)?(this.touchCaptured=!0,t.navigationMode===`linear`?t.rtl?this.Reveal.next():this.Reveal.prev():this.Reveal.left()):a<-40&&Math.abs(a)>Math.abs(o)?(this.touchCaptured=!0,t.navigationMode===`linear`?t.rtl?this.Reveal.prev():this.Reveal.next():this.Reveal.right()):o>40&&i.up?(this.touchCaptured=!0,t.navigationMode===`linear`?this.Reveal.prev():this.Reveal.up()):o<-40&&i.down&&(this.touchCaptured=!0,t.navigationMode===`linear`?this.Reveal.next():this.Reveal.down()),t.embedded?(this.touchCaptured||this.Reveal.isVerticalSlide())&&e.preventDefault():e.preventDefault()}}}onTouchEnd(e){this.touchCaptured=!1}onPointerDown(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&e.pointerType!==`touch`||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchStart(e))}onPointerMove(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&e.pointerType!==`touch`||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchMove(e))}onPointerUp(e){e.pointerType!==e.MSPOINTER_TYPE_TOUCH&&e.pointerType!==`touch`||(e.touches=[{clientX:e.clientX,clientY:e.clientY}],this.onTouchEnd(e))}},N=`focus`,P=`blur`,xe=class{constructor(e){this.Reveal=e,this.onRevealPointerDown=this.onRevealPointerDown.bind(this),this.onDocumentPointerDown=this.onDocumentPointerDown.bind(this)}configure(e,t){e.embedded?this.blur():(this.focus(),this.unbind())}bind(){this.Reveal.getConfig().embedded&&this.Reveal.getRevealElement().addEventListener(`pointerdown`,this.onRevealPointerDown,!1)}unbind(){this.Reveal.getRevealElement().removeEventListener(`pointerdown`,this.onRevealPointerDown,!1),document.removeEventListener(`pointerdown`,this.onDocumentPointerDown,!1)}focus(){this.state!==N&&(this.Reveal.getRevealElement().classList.add(`focused`),document.addEventListener(`pointerdown`,this.onDocumentPointerDown,!1)),this.state=N}blur(){this.state!==P&&(this.Reveal.getRevealElement().classList.remove(`focused`),document.removeEventListener(`pointerdown`,this.onDocumentPointerDown,!1)),this.state=P}isFocused(){return this.state===N}destroy(){this.Reveal.getRevealElement().classList.remove(`focused`)}onRevealPointerDown(e){this.focus()}onDocumentPointerDown(e){let t=x(e.target,`.reveal`);t&&t===this.Reveal.getRevealElement()||this.blur()}},Se=class{constructor(e){this.Reveal=e}render(){this.element=document.createElement(`div`),this.element.className=`speaker-notes`,this.element.setAttribute(`data-prevent-swipe`,``),this.element.setAttribute(`tabindex`,`0`),this.Reveal.getRevealElement().appendChild(this.element)}configure(e,t){e.showNotes&&this.element.setAttribute(`data-layout`,typeof e.showNotes==`string`?e.showNotes:`inline`)}update(){this.Reveal.getConfig().showNotes&&this.element&&this.Reveal.getCurrentSlide()&&!this.Reveal.isScrollView()&&!this.Reveal.isPrintView()&&(this.element.innerHTML=this.getSlideNotes()||`No notes on this slide.`)}updateVisibility(){this.Reveal.getConfig().showNotes&&this.hasNotes()&&!this.Reveal.isScrollView()&&!this.Reveal.isPrintView()?this.Reveal.getRevealElement().classList.add(`show-notes`):this.Reveal.getRevealElement().classList.remove(`show-notes`)}hasNotes(){return this.Reveal.getSlidesElement().querySelectorAll(`[data-notes], aside.notes`).length>0}isSpeakerNotesWindow(){return!!window.location.search.match(/receiver/gi)}getSlideNotes(e=this.Reveal.getCurrentSlide()){if(e.hasAttribute(`data-notes`))return e.getAttribute(`data-notes`);let t=e.querySelectorAll(`aside.notes`);return t?Array.from(t).map((e=>e.innerHTML)).join(` +`):null}destroy(){this.element.remove()}},Ce=class{constructor(e,t){this.diameter=100,this.diameter2=this.diameter/2,this.thickness=6,this.playing=!1,this.progress=0,this.progressOffset=1,this.container=e,this.progressCheck=t,this.canvas=document.createElement(`canvas`),this.canvas.className=`playback`,this.canvas.width=this.diameter,this.canvas.height=this.diameter,this.canvas.style.width=this.diameter2+`px`,this.canvas.style.height=this.diameter2+`px`,this.context=this.canvas.getContext(`2d`),this.container.appendChild(this.canvas),this.render()}setPlaying(e){let t=this.playing;this.playing=e,!t&&this.playing?this.animate():this.render()}animate(){let e=this.progress;this.progress=this.progressCheck(),e>.8&&this.progress<.2&&(this.progressOffset=this.progress),this.render(),this.playing&&requestAnimationFrame(this.animate.bind(this))}render(){let e=this.playing?this.progress:0,t=this.diameter2-this.thickness,n=this.diameter2,r=this.diameter2;this.progressOffset+=.1*(1-this.progressOffset);let i=-Math.PI/2+2*Math.PI*e,a=-Math.PI/2+this.progressOffset*(2*Math.PI);this.context.save(),this.context.clearRect(0,0,this.diameter,this.diameter),this.context.beginPath(),this.context.arc(n,r,t+4,0,2*Math.PI,!1),this.context.fillStyle=`rgba( 0, 0, 0, 0.4 )`,this.context.fill(),this.context.beginPath(),this.context.arc(n,r,t,0,2*Math.PI,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle=`rgba( 255, 255, 255, 0.2 )`,this.context.stroke(),this.playing&&(this.context.beginPath(),this.context.arc(n,r,t,a,i,!1),this.context.lineWidth=this.thickness,this.context.strokeStyle=`#fff`,this.context.stroke()),this.context.translate(n-14,r-14),this.playing?(this.context.fillStyle=`#fff`,this.context.fillRect(0,0,10,28),this.context.fillRect(18,0,10,28)):(this.context.beginPath(),this.context.translate(4,0),this.context.moveTo(0,0),this.context.lineTo(24,14),this.context.lineTo(0,28),this.context.fillStyle=`#fff`,this.context.fill()),this.context.restore()}on(e,t){this.canvas.addEventListener(e,t,!1)}off(e,t){this.canvas.removeEventListener(e,t,!1)}destroy(){this.playing=!1,this.canvas.parentNode&&this.container.removeChild(this.canvas)}},we={width:960,height:700,margin:.04,minScale:.2,maxScale:2,controls:!0,controlsTutorial:!0,controlsLayout:`bottom-right`,controlsBackArrows:`faded`,progress:!0,slideNumber:!1,showSlideNumber:`all`,hashOneBasedIndex:!1,hash:!1,respondToHashChanges:!0,jumpToSlide:!0,history:!1,keyboard:!0,keyboardCondition:null,disableLayout:!1,overview:!0,center:!0,touch:!0,loop:!1,rtl:!1,navigationMode:`default`,shuffle:!1,fragments:!0,fragmentInURL:!0,embedded:!1,help:!0,pause:!0,showNotes:!1,showHiddenSlides:!1,autoPlayMedia:null,preloadIframes:null,autoAnimate:!0,autoAnimateMatcher:null,autoAnimateEasing:`ease`,autoAnimateDuration:1,autoAnimateUnmatched:!0,autoAnimateStyles:[`opacity`,`color`,`background-color`,`padding`,`font-size`,`line-height`,`letter-spacing`,`border-width`,`border-color`,`border-radius`,`outline`,`outline-offset`],autoSlide:0,autoSlideStoppable:!0,autoSlideMethod:null,defaultTiming:null,mouseWheel:!1,previewLinks:!1,postMessage:!0,postMessageEvents:!1,focusBodyOnPageVisibilityChange:!0,transition:`slide`,transitionSpeed:`default`,backgroundTransition:`fade`,parallaxBackgroundImage:``,parallaxBackgroundSize:``,parallaxBackgroundRepeat:``,parallaxBackgroundPosition:``,parallaxBackgroundHorizontal:null,parallaxBackgroundVertical:null,view:null,scrollLayout:`full`,scrollSnap:`mandatory`,scrollProgress:`auto`,scrollActivationWidth:435,pdfMaxPagesPerSlide:1/0,pdfSeparateFragments:!0,pdfPageHeightOffset:-1,viewDistance:3,mobileViewDistance:2,display:`block`,hideInactiveCursor:!0,hideCursorTime:5e3,sortFragmentsOnSync:!0,dependencies:[],plugins:[]},Te=`5.2.1`;function F(e,t){arguments.length<2&&(t=arguments[0],e=document.querySelector(`.reveal`));let n={},r,i,a,o,s,c={},l=!1,u=!1,d={hasNavigatedHorizontally:!1,hasNavigatedVertically:!1},f=[],p=1,m={layout:``,overview:``},b={},S=`idle`,C=0,w=0,te=-1,E=!1,D=new ne(n),A=new ae(n),j=new oe(n),M=new ce(n),N=new se(n),P=new le(n),F=new ue(n),I=new de(n),L=new fe(n),R=new pe(n),z=new me(n),B=new he(n),V=new ge(n),Ee=new _e(n),H=new ve(n),U=new ye(n),W=new xe(n),De=new be(n),G=new Se(n);function Oe(){!1!==l&&(u=!0,c.showHiddenSlides||g(b.wrapper,`section[data-visibility="hidden"]`).forEach((e=>{let t=e.parentNode;t.childElementCount===1&&/section/i.test(t.nodeName)?t.remove():e.remove()})),function(){b.slides.classList.add(`no-transition`),T?b.wrapper.classList.add(`no-hover`):b.wrapper.classList.remove(`no-hover`),N.render(),A.render(),j.render(),B.render(),V.render(),G.render(),b.pauseOverlay=((e,t,n,r=``)=>{let i=e.querySelectorAll(`.`+n);for(let t=0;tResume presentation`:null),b.statusElement=function(){let e=b.wrapper.querySelector(`.aria-status`);return e||(e=document.createElement(`div`),e.style.position=`absolute`,e.style.height=`1px`,e.style.width=`1px`,e.style.overflow=`hidden`,e.style.clip=`rect( 1px, 1px, 1px, 1px )`,e.classList.add(`aria-status`),e.setAttribute(`aria-live`,`polite`),e.setAttribute(`aria-atomic`,`true`),b.wrapper.appendChild(e)),e}(),b.wrapper.setAttribute(`role`,`application`)}(),c.postMessage&&window.addEventListener(`message`,bt,!1),setInterval((()=>{(!P.isActive()&&b.wrapper.scrollTop!==0||b.wrapper.scrollLeft!==0)&&(b.wrapper.scrollTop=0,b.wrapper.scrollLeft=0)}),1e3),document.addEventListener(`fullscreenchange`,Tt),document.addEventListener(`webkitfullscreenchange`,Tt),Q().forEach((e=>{g(e,`section`).forEach(((e,t)=>{t>0&&(e.classList.remove(`present`),e.classList.remove(`past`),e.classList.add(`future`),e.setAttribute(`aria-hidden`,`true`))}))})),je(),N.update(!0),function(){let e=c.view===`print`,t=c.view===`scroll`||c.view===`reader`;(e||t)&&(e?Ne():De.unbind(),b.viewport.classList.add(`loading-scroll-mode`),e?document.readyState===`complete`?F.activate():window.addEventListener(`load`,(()=>F.activate())):P.activate())}(),z.readURL(),setTimeout((()=>{b.slides.classList.remove(`no-transition`),b.wrapper.classList.add(`ready`),K({type:`ready`,data:{indexh:r,indexv:i,currentSlide:o}})}),1))}function ke(e){b.statusElement.textContent=e}function Ae(e){let t=``;if(e.nodeType===3)t+=e.textContent;else if(e.nodeType===1){let n=e.getAttribute(`aria-hidden`),r=window.getComputedStyle(e).display===`none`;n===`true`||r||Array.from(e.childNodes).forEach((e=>{t+=Ae(e)}))}return t=t.trim(),t===``?``:t+` `}function je(e){let t={...c};if(typeof e==`object`&&h(c,e),!1===n.isReady())return;let r=b.wrapper.querySelectorAll(O).length;b.wrapper.classList.remove(t.transition),b.wrapper.classList.add(c.transition),b.wrapper.setAttribute(`data-transition-speed`,c.transitionSpeed),b.wrapper.setAttribute(`data-background-transition`,c.backgroundTransition),b.viewport.style.setProperty(`--slide-width`,typeof c.width==`string`?c.width:c.width+`px`),b.viewport.style.setProperty(`--slide-height`,typeof c.height==`string`?c.height:c.height+`px`),c.shuffle&&Ze(),_(b.wrapper,`embedded`,c.embedded),_(b.wrapper,`rtl`,c.rtl),_(b.wrapper,`center`,c.center),!1===c.pause&&Y(),M.reset(),s&&=(s.destroy(),null),r>1&&c.autoSlide&&c.autoSlideStoppable&&(s=new Ce(b.wrapper,(()=>Math.min(Math.max((Date.now()-te)/C,0),1))),s.on(`click`,Et),E=!1),c.navigationMode===`default`?b.wrapper.removeAttribute(`data-navigation-mode`):b.wrapper.setAttribute(`data-navigation-mode`,c.navigationMode),G.configure(c,t),W.configure(c,t),Ee.configure(c,t),B.configure(c,t),V.configure(c,t),R.configure(c,t),I.configure(c,t),A.configure(c,t),Xe()}function Me(){window.addEventListener(`resize`,Ct,!1),c.touch&&De.bind(),c.keyboard&&R.bind(),c.progress&&V.bind(),c.respondToHashChanges&&z.bind(),B.bind(),W.bind(),b.slides.addEventListener(`click`,St,!1),b.slides.addEventListener(`transitionend`,xt,!1),b.pauseOverlay.addEventListener(`click`,Y,!1),c.focusBodyOnPageVisibilityChange&&document.addEventListener(`visibilitychange`,wt,!1)}function Ne(){De.unbind(),W.unbind(),R.unbind(),B.unbind(),V.unbind(),z.unbind(),window.removeEventListener(`resize`,Ct,!1),b.slides.removeEventListener(`click`,St,!1),b.slides.removeEventListener(`transitionend`,xt,!1),b.pauseOverlay.removeEventListener(`click`,Y,!1)}function Pe(t,n,r){e.addEventListener(t,n,r)}function Fe(t,n,r){e.removeEventListener(t,n,r)}function Ie(e){typeof e.layout==`string`&&(m.layout=e.layout),typeof e.overview==`string`&&(m.overview=e.overview),m.layout?y(b.slides,m.layout+` `+m.overview):y(b.slides,m.overview)}function K({target:e=b.wrapper,type:t,data:n,bubbles:r=!0}){let i=document.createEvent(`HTMLEvents`,1,2);return i.initEvent(t,r,!0),h(i,n),e.dispatchEvent(i),e===b.wrapper&&Re(t),i}function Le(e){K({type:`slidechanged`,data:{indexh:r,indexv:i,previousSlide:a,currentSlide:o,origin:e}})}function Re(e,t){if(c.postMessageEvents&&window.parent!==window.self){let n={namespace:`reveal`,eventName:e,state:ut()};h(n,t),window.parent.postMessage(JSON.stringify(n),`*`)}}function q(){if(b.wrapper&&!F.isActive()){let e=b.viewport.offsetWidth,t=b.viewport.offsetHeight;if(!c.disableLayout){T&&!c.embedded&&document.documentElement.style.setProperty(`--vh`,.01*window.innerHeight+`px`);let n=P.isActive()?Be(e,t):Be(),r=p;ze(c.width,c.height),b.slides.style.width=n.width+`px`,b.slides.style.height=n.height+`px`,p=Math.min(n.presentationWidth/n.width,n.presentationHeight/n.height),p=Math.max(p,c.minScale),p=Math.min(p,c.maxScale),p===1||P.isActive()?(b.slides.style.zoom=``,b.slides.style.left=``,b.slides.style.top=``,b.slides.style.bottom=``,b.slides.style.right=``,Ie({layout:``})):(b.slides.style.zoom=``,b.slides.style.left=`50%`,b.slides.style.top=`50%`,b.slides.style.bottom=`auto`,b.slides.style.right=`auto`,Ie({layout:`translate(-50%, -50%) scale(`+p+`)`}));let i=Array.from(b.wrapper.querySelectorAll(O));for(let e=0,t=i.length;e0&&e.presentationWidth<=c.scrollActivationWidth?P.isActive()||(N.create(),P.activate()):P.isActive()&&P.deactivate()}})(),b.viewport.style.setProperty(`--slide-scale`,p),b.viewport.style.setProperty(`--viewport-width`,e+`px`),b.viewport.style.setProperty(`--viewport-height`,t+`px`),P.layout(),V.update(),N.updateParallax(),L.isActive()&&L.update()}}function ze(e,t){g(b.slides,`section > .stretch, section > .r-stretch`).forEach((n=>{let r=((e,t=0)=>{if(e){let n,r=e.style.height;return e.style.height=`0px`,e.parentNode.style.height=`auto`,n=t-e.parentNode.offsetHeight,e.style.height=r+`px`,e.parentNode.style.removeProperty(`height`),n}return t})(n,t);if(/(img|video)/gi.test(n.nodeName)){let t=n.naturalWidth||n.videoWidth,i=n.naturalHeight||n.videoHeight,a=Math.min(e/t,r/i);n.style.width=t*a+`px`,n.style.height=i*a+`px`}else n.style.width=e+`px`,n.style.height=r+`px`}))}function Be(e,t){let n=c.width,r=c.height;c.disableLayout&&(n=b.slides.offsetWidth,r=b.slides.offsetHeight);let i={width:n,height:r,presentationWidth:e||b.wrapper.offsetWidth,presentationHeight:t||b.wrapper.offsetHeight};return i.presentationWidth-=i.presentationWidth*c.margin,i.presentationHeight-=i.presentationHeight*c.margin,typeof i.width==`string`&&/%$/.test(i.width)&&(i.width=parseInt(i.width,10)/100*i.presentationWidth),typeof i.height==`string`&&/%$/.test(i.height)&&(i.height=parseInt(i.height,10)/100*i.presentationHeight),i}function Ve(e,t){typeof e==`object`&&typeof e.setAttribute==`function`&&e.setAttribute(`data-previous-indexv`,t||0)}function He(e){if(typeof e==`object`&&typeof e.setAttribute==`function`&&e.classList.contains(`stack`)){let t=e.hasAttribute(`data-start-indexv`)?`data-start-indexv`:`data-previous-indexv`;return parseInt(e.getAttribute(t)||0,10)}return 0}function J(e=o){return e&&e.parentNode&&!!e.parentNode.nodeName.match(/section/i)}function Ue(){return!(!o||!J(o))&&!o.nextElementSibling}function We(){return r===0&&i===0}function Ge(){return!!o&&!o.nextElementSibling&&(!J(o)||!o.parentNode.nextElementSibling)}function Ke(){if(c.pause){let e=b.wrapper.classList.contains(`paused`);dt(),b.wrapper.classList.add(`paused`),!1===e&&K({type:`paused`})}}function Y(){let e=b.wrapper.classList.contains(`paused`);b.wrapper.classList.remove(`paused`),$(),e&&K({type:`resumed`})}function qe(e){typeof e==`boolean`?e?Ke():Y():Je()?Y():Ke()}function Je(){return b.wrapper.classList.contains(`paused`)}function X(t,n,s,l){if(K({type:`beforeslidechange`,data:{indexh:t===void 0?r:t,indexv:n===void 0?i:n,origin:l}}).defaultPrevented)return;a=o;let u=b.wrapper.querySelectorAll(k);if(P.isActive()){let e=P.getSlideByIndices(t,n);e&&P.scrollToSlide(e);return}if(u.length===0)return;n!==void 0||L.isActive()||(n=He(u[t])),a&&a.parentNode&&a.parentNode.classList.contains(`stack`)&&Ve(a.parentNode,i);let d=f.concat();f.length=0;let p=r||0,m=i||0;r=Qe(k,t===void 0?r:t),i=Qe(re,n===void 0?i:n);let h=r!==p||i!==m;h||(a=null);let _=u[r],v=_.querySelectorAll(`section`);e.classList.toggle(`is-vertical-slide`,v.length>1),o=v[i]||_;let y=!1;h&&a&&o&&!L.isActive()&&(S=`running`,y=Ye(a,o,p,m),y&&b.slides.classList.add(`disable-slide-transitions`)),tt(),q(),L.isActive()&&L.update(),s!==void 0&&I.goto(s),a&&a!==o&&(a.classList.remove(`present`),a.setAttribute(`aria-hidden`,`true`),We()&&setTimeout((()=>{g(b.wrapper,k+`.stack`).forEach((e=>{Ve(e,0)}))}),0));e:for(let e=0,t=f.length;e{ke(Ae(o))})),V.update(),B.update(),G.update(),N.update(),N.updateParallax(),A.update(),I.update(),z.writeURL(),$(),y&&(setTimeout((()=>{b.slides.classList.remove(`disable-slide-transitions`)}),0),c.autoAnimate&&M.run(a,o))}function Ye(e,t,n,a){return e.hasAttribute(`data-auto-animate`)&&t.hasAttribute(`data-auto-animate`)&&e.getAttribute(`data-auto-animate-id`)===t.getAttribute(`data-auto-animate-id`)&&!(r>n||i>a?t:e).hasAttribute(`data-auto-animate-restart`)}function Xe(){Ne(),Me(),q(),C=c.autoSlide,$(),N.create(),z.writeURL(),!0===c.sortFragmentsOnSync&&I.sortAll(),B.update(),V.update(),tt(),G.update(),G.updateVisibility(),U.update(),N.update(!0),A.update(),D.formatEmbeddedContent(),!1===c.autoPlayMedia?D.stopEmbeddedContent(o,{unloadIframes:!1}):D.startEmbeddedContent(o),L.isActive()&&L.layout()}function Ze(e=Q()){e.forEach(((t,n)=>{let r=e[Math.floor(Math.random()*e.length)];r.parentNode===t.parentNode&&t.parentNode.insertBefore(t,r);let i=t.querySelectorAll(`section`);i.length&&Ze(i)}))}function Qe(e,t){let n=g(b.wrapper,e),r=n.length,i=P.isActive()||F.isActive(),a=!1,o=!1;if(r){c.loop&&(t>=r&&(a=!0),(t%=r)<0&&(t=r+t,o=!0)),t=Math.max(Math.min(t,r-1),0);for(let e=0;et?(r.classList.add(s?`past`:`future`),c.fragments&&et(r)):e===t&&c.fragments&&(a?et(r):o&&$e(r))}let e=n[t],s=e.classList.contains(`present`);e.classList.add(`present`),e.removeAttribute(`hidden`),e.removeAttribute(`aria-hidden`),s||K({target:e,type:`visible`,bubbles:!1});let l=e.getAttribute(`data-state`);l&&(f=f.concat(l.split(` `)))}else t=0;return t}function $e(e){g(e,`.fragment`).forEach((e=>{e.classList.add(`visible`),e.classList.remove(`current-fragment`)}))}function et(e){g(e,`.fragment.visible`).forEach((e=>{e.classList.remove(`visible`,`current-fragment`)}))}function tt(){let e,t,n=Q(),a=n.length;if(a&&r!==void 0){let o=L.isActive()?10:c.viewDistance;T&&(o=L.isActive()?6:c.mobileViewDistance),F.isActive()&&(o=Number.MAX_VALUE);for(let s=0;s0,right:r0,down:i1&&(a.left=!0,a.right=!0),n.length>1&&(a.up=!0,a.down=!0)),t.length>1&&c.navigationMode===`linear`&&(a.right=a.right||a.down,a.left=a.left||a.up),!0===e){let e=I.availableRoutes();a.left=a.left||e.prev,a.up=a.up||e.prev,a.down=a.down||e.next,a.right=a.right||e.next}if(c.rtl){let e=a.left;a.left=a.right,a.right=e}return a}function nt(e=o){let t=Q(),n=0;e:for(let r=0;r0){let e=o.querySelector(`.current-fragment`);t=e&&e.hasAttribute(`data-fragment-index`)?parseInt(e.getAttribute(`data-fragment-index`),10):o.querySelectorAll(`.fragment.visible`).length-1}return{h:n,v:a,f:t}}function it(){return g(b.wrapper,O+`:not(.stack):not([data-visibility="uncounted"])`)}function Q(){return g(b.wrapper,k)}function at(){return g(b.wrapper,`.slides>section>section`)}function ot(){return Q().length>1}function st(){return at().length>1}function ct(){return it().length}function lt(e,t){let n=Q()[e],r=n&&n.querySelectorAll(`section`);return r&&r.length&&typeof t==`number`?r?r[t]:void 0:n}function ut(){let e=rt();return{indexh:e.h,indexv:e.v,indexf:e.f,paused:Je(),overview:L.isActive(),...U.getState()}}function $(){if(dt(),o&&!1!==c.autoSlide){let e=o.querySelector(`.current-fragment[data-autoslide]`),t=e?e.getAttribute(`data-autoslide`):null,n=o.parentNode?o.parentNode.getAttribute(`data-autoslide`):null,r=o.getAttribute(`data-autoslide`);t?C=parseInt(t,10):r?C=parseInt(r,10):n?C=parseInt(n,10):(C=c.autoSlide,o.querySelectorAll(`.fragment`).length===0&&g(o,`video, audio`).forEach((e=>{e.hasAttribute(`data-autoplay`)&&C&&1e3*e.duration/e.playbackRate>C&&(C=1e3*e.duration/e.playbackRate+1e3)}))),!C||E||Je()||L.isActive()||Ge()&&!I.availableRoutes().next&&!0!==c.loop||(w=setTimeout((()=>{typeof c.autoSlideMethod==`function`?c.autoSlideMethod():yt(),$()}),C),te=Date.now()),s&&s.setPlaying(w!==-1)}}function dt(){clearTimeout(w),w=-1}function ft(){C&&!E&&(E=!0,K({type:`autoslidepaused`}),clearTimeout(w),s&&s.setPlaying(!1))}function pt(){C&&E&&(E=!1,K({type:`autoslideresumed`}),$())}function mt({skipFragments:e=!1}={}){if(d.hasNavigatedHorizontally=!0,P.isActive())return P.prev();c.rtl?(L.isActive()||e||!1===I.next())&&Z().left&&X(r+1,c.navigationMode===`grid`?i:void 0):(L.isActive()||e||!1===I.prev())&&Z().left&&X(r-1,c.navigationMode===`grid`?i:void 0)}function ht({skipFragments:e=!1}={}){if(d.hasNavigatedHorizontally=!0,P.isActive())return P.next();c.rtl?(L.isActive()||e||!1===I.prev())&&Z().right&&X(r-1,c.navigationMode===`grid`?i:void 0):(L.isActive()||e||!1===I.next())&&Z().right&&X(r+1,c.navigationMode===`grid`?i:void 0)}function gt({skipFragments:e=!1}={}){if(P.isActive())return P.prev();(L.isActive()||e||!1===I.prev())&&Z().up&&X(r,i-1)}function _t({skipFragments:e=!1}={}){if(d.hasNavigatedVertically=!0,P.isActive())return P.next();(L.isActive()||e||!1===I.next())&&Z().down&&X(r,i+1)}function vt({skipFragments:e=!1}={}){if(P.isActive())return P.prev();if(e||!1===I.prev())if(Z().up)gt({skipFragments:e});else{let t;if(t=c.rtl?g(b.wrapper,k+`.future`).pop():g(b.wrapper,k+`.past`).pop(),t&&t.classList.contains(`stack`)){let e=t.querySelectorAll(`section`).length-1||void 0;X(r-1,e)}else c.rtl?ht({skipFragments:e}):mt({skipFragments:e})}}function yt({skipFragments:e=!1}={}){if(d.hasNavigatedHorizontally=!0,d.hasNavigatedVertically=!0,P.isActive())return P.next();if(e||!1===I.next()){let t=Z();t.down&&t.right&&c.loop&&Ue()&&(t.down=!1),t.down?_t({skipFragments:e}):c.rtl?mt({skipFragments:e}):ht({skipFragments:e})}}function bt(e){let t=e.data;if(typeof t==`string`&&t.charAt(0)===`{`&&t.charAt(t.length-1)===`}`&&(t=JSON.parse(t),t.method&&typeof n[t.method]==`function`))if(!1===ie.test(t.method)){let e=n[t.method].apply(n,t.args);Re(`callback`,{method:t.method,result:e})}else console.warn(`reveal.js: "`+t.method+`" is is blacklisted from the postMessage API`)}function xt(e){S===`running`&&/section/gi.test(e.target.nodeName)&&(S=`idle`,K({type:`slidetransitionend`,data:{indexh:r,indexv:i,previousSlide:a,currentSlide:o}}))}function St(e){let t=x(e.target,`a[href^="#"]`);if(t){let r=t.getAttribute(`href`),i=z.getIndicesFromHash(r);i&&(n.slide(i.h,i.v,i.f),e.preventDefault())}}function Ct(e){q()}function wt(e){!1===document.hidden&&document.activeElement!==document.body&&(typeof document.activeElement.blur==`function`&&document.activeElement.blur(),document.body.focus())}function Tt(e){(document.fullscreenElement||document.webkitFullscreenElement)===b.wrapper&&(e.stopImmediatePropagation(),setTimeout((()=>{n.layout(),n.focus.focus()}),1))}function Et(e){Ge()&&!1===c.loop?(X(0,0),pt()):E?pt():ft()}let Dt={VERSION:Te,initialize:function(r){if(!e)throw`Unable to find presentation root (
).`;if(l)throw`Reveal.js has already been initialized.`;if(l=!0,b.wrapper=e,b.slides=e.querySelector(`.slides`),!b.slides)throw`Unable to find slides container (
).`;return c={...we,...c,...t,...r,...ee()},/print-pdf/gi.test(window.location.search)&&(c.view=`print`),function(){!0===c.embedded?b.viewport=x(e,`.reveal-viewport`)||e:(b.viewport=document.body,document.documentElement.classList.add(`reveal-full-page`)),b.viewport.classList.add(`reveal-viewport`)}(),window.addEventListener(`load`,q,!1),H.load(c.plugins,c.dependencies).then(Oe),new Promise((e=>n.on(`ready`,e)))},configure:je,destroy:function(){l=!1,!1!==u&&(Ne(),dt(),G.destroy(),W.destroy(),U.destroy(),H.destroy(),Ee.destroy(),B.destroy(),V.destroy(),N.destroy(),A.destroy(),j.destroy(),document.removeEventListener(`fullscreenchange`,Tt),document.removeEventListener(`webkitfullscreenchange`,Tt),document.removeEventListener(`visibilitychange`,wt,!1),window.removeEventListener(`message`,bt,!1),window.removeEventListener(`load`,q,!1),b.pauseOverlay&&b.pauseOverlay.remove(),b.statusElement&&b.statusElement.remove(),document.documentElement.classList.remove(`reveal-full-page`),b.wrapper.classList.remove(`ready`,`center`,`has-horizontal-slides`,`has-vertical-slides`),b.wrapper.removeAttribute(`data-transition-speed`),b.wrapper.removeAttribute(`data-background-transition`),b.viewport.classList.remove(`reveal-viewport`),b.viewport.style.removeProperty(`--slide-width`),b.viewport.style.removeProperty(`--slide-height`),b.slides.style.removeProperty(`width`),b.slides.style.removeProperty(`height`),b.slides.style.removeProperty(`zoom`),b.slides.style.removeProperty(`left`),b.slides.style.removeProperty(`top`),b.slides.style.removeProperty(`bottom`),b.slides.style.removeProperty(`right`),b.slides.style.removeProperty(`transform`),Array.from(b.wrapper.querySelectorAll(O)).forEach((e=>{e.style.removeProperty(`display`),e.style.removeProperty(`top`),e.removeAttribute(`hidden`),e.removeAttribute(`aria-hidden`)})))},sync:Xe,syncSlide:function(e=o){N.sync(e),I.sync(e),D.load(e),N.update(),G.update()},syncFragments:I.sync.bind(I),slide:X,left:mt,right:ht,up:gt,down:_t,prev:vt,next:yt,navigateLeft:mt,navigateRight:ht,navigateUp:gt,navigateDown:_t,navigatePrev:vt,navigateNext:yt,navigateFragment:I.goto.bind(I),prevFragment:I.prev.bind(I),nextFragment:I.next.bind(I),on:Pe,off:Fe,addEventListener:Pe,removeEventListener:Fe,layout:q,shuffle:Ze,availableRoutes:Z,availableFragments:I.availableRoutes.bind(I),toggleHelp:U.toggleHelp.bind(U),toggleOverview:L.toggle.bind(L),toggleScrollView:P.toggle.bind(P),togglePause:qe,toggleAutoSlide:function(e){typeof e==`boolean`?e?pt():ft():E?pt():ft()},toggleJumpToSlide:function(e){typeof e==`boolean`?e?j.show():j.hide():j.isVisible()?j.hide():j.show()},isFirstSlide:We,isLastSlide:Ge,isLastVerticalSlide:Ue,isVerticalSlide:J,isVerticalStack:function(e=o){return e.classList.contains(`.stack`)||e.querySelector(`section`)!==null},isPaused:Je,isAutoSliding:function(){return!(!C||E)},isSpeakerNotes:G.isSpeakerNotesWindow.bind(G),isOverview:L.isActive.bind(L),isFocused:W.isFocused.bind(W),isOverlayOpen:U.isOpen.bind(U),isScrollView:P.isActive.bind(P),isPrintView:F.isActive.bind(F),isReady:()=>u,loadSlide:D.load.bind(D),unloadSlide:D.unload.bind(D),startEmbeddedContent:()=>D.startEmbeddedContent(o),stopEmbeddedContent:()=>D.stopEmbeddedContent(o,{unloadIframes:!1}),previewIframe:U.previewIframe.bind(U),previewImage:U.previewImage.bind(U),previewVideo:U.previewVideo.bind(U),showPreview:U.previewIframe.bind(U),hidePreview:U.close.bind(U),addEventListeners:Me,removeEventListeners:Ne,dispatchEvent:K,getState:ut,setState:function(e){if(typeof e==`object`){X(v(e.indexh),v(e.indexv),v(e.indexf));let t=v(e.paused),n=v(e.overview);typeof t==`boolean`&&t!==Je()&&qe(t),typeof n==`boolean`&&n!==L.isActive()&&L.toggle(n),U.setState(e)}},getProgress:function(){let e=ct(),t=nt();if(o){let e=o.querySelectorAll(`.fragment`);e.length>0&&(t+=o.querySelectorAll(`.fragment.visible`).length/e.length*.9)}return Math.min(t/(e-1),1)},getIndices:rt,getSlidesAttributes:function(){return it().map((e=>{let t={};for(let n=0;na,getCurrentSlide:()=>o,getSlideBackground:function(e,t){let n=typeof e==`number`?lt(e,t):e;if(n)return n.slideBackgroundElement},getSlideNotes:G.getSlideNotes.bind(G),getSlides:it,getHorizontalSlides:Q,getVerticalSlides:at,hasHorizontalSlides:ot,hasVerticalSlides:st,hasNavigatedHorizontally:()=>d.hasNavigatedHorizontally,hasNavigatedVertically:()=>d.hasNavigatedVertically,shouldAutoAnimateBetween:Ye,addKeyBinding:R.addKeyBinding.bind(R),removeKeyBinding:R.removeKeyBinding.bind(R),triggerKey:R.triggerKey.bind(R),registerKeyboardShortcut:R.registerKeyboardShortcut.bind(R),getComputedSlideSize:Be,setCurrentScrollPage:function(e,t,n){let s=r||0;r=t,i=n;let l=o!==e;a=o,o=e,o&&a&&c.autoAnimate&&Ye(a,o,s,i)&&M.run(a,o),l&&(a&&(D.stopEmbeddedContent(a),D.stopEmbeddedContent(a.slideBackgroundElement)),D.startEmbeddedContent(o),D.startEmbeddedContent(o.slideBackgroundElement)),requestAnimationFrame((()=>{ke(Ae(o))})),Le()},getScale:()=>p,getConfig:()=>c,getQueryHash:ee,getSlidePath:z.getHash.bind(z),getRevealElement:()=>e,getSlidesElement:()=>b.slides,getViewportElement:()=>b.viewport,getBackgroundsElement:()=>N.element,registerPlugin:H.registerPlugin.bind(H),hasPlugin:H.hasPlugin.bind(H),getPlugin:H.getPlugin.bind(H),getPlugins:H.getRegisteredPlugins.bind(H)};return h(n,{...Dt,announceStatus:ke,getStatusText:Ae,focus:W,scroll:P,progress:V,controls:B,location:z,overview:L,keyboard:R,fragments:I,backgrounds:N,slideContent:D,slideNumber:A,onUserInput:function(e){c.autoSlideStoppable&&ft()},closeOverlay:U.close.bind(U),updateSlidesVisibility:tt,layoutSlideContents:ze,transformSlides:Ie,cueAutoSlide:$,cancelAutoSlide:dt}),Dt}var I=F,L=[];I.initialize=e=>(Object.assign(I,new F(document.querySelector(`.reveal`),e)),L.map((e=>e(I))),I.initialize()),[`configure`,`on`,`off`,`addEventListener`,`removeEventListener`,`registerPlugin`].forEach((e=>{I[e]=(...t)=>{L.push((n=>n[e].call(null,...t)))}})),I.isReady=()=>!1,I.VERSION=Te;var R=`/** + * reveal.js 5.2.0 + * https://revealjs.com + * MIT licensed + * + * Copyright (C) 2011-2024 Hakim El Hattab, https://hakim.se + */ + +.reveal .r-stretch,.reveal .stretch{max-width:none;max-height:none}.reveal pre.r-stretch code,.reveal pre.stretch code{height:100%;max-height:100%;box-sizing:border-box}.reveal .r-fit-text{display:inline-block;white-space:nowrap}.reveal .r-stack{display:grid;grid-template-rows:100%}.reveal .r-stack>*{grid-area:1/1;margin:auto}.reveal .r-hstack,.reveal .r-vstack{display:flex}.reveal .r-hstack img,.reveal .r-hstack video,.reveal .r-vstack img,.reveal .r-vstack 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}.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}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}}.reveal-viewport:fullscreen{top:0!important;left:0!important;width:100%!important;height:100%!important;transform:none!important}.reveal .fragment{transition:all .2s ease}.reveal .fragment:not(.custom){opacity:0;visibility:hidden;will-change:opacity}.reveal .fragment.visible{opacity:1;visibility:inherit}.reveal .fragment.disabled{transition:none}.reveal .fragment.grow{opacity:1;visibility:inherit}.reveal .fragment.grow.visible{transform:scale(1.3)}.reveal .fragment.shrink{opacity:1;visibility:inherit}.reveal .fragment.shrink.visible{transform:scale(.7)}.reveal .fragment.zoom-in{transform:scale(.1)}.reveal .fragment.zoom-in.visible{transform:none}.reveal .fragment.fade-out{opacity:1;visibility:inherit}.reveal .fragment.fade-out.visible{opacity:0;visibility:hidden}.reveal .fragment.semi-fade-out{opacity:1;visibility:inherit}.reveal .fragment.semi-fade-out.visible{opacity:.5;visibility:inherit}.reveal .fragment.strike{opacity:1;visibility:inherit}.reveal .fragment.strike.visible{text-decoration:line-through}.reveal .fragment.fade-up{transform:translate(0,40px)}.reveal .fragment.fade-up.visible{transform:translate(0,0)}.reveal .fragment.fade-down{transform:translate(0,-40px)}.reveal .fragment.fade-down.visible{transform:translate(0,0)}.reveal .fragment.fade-right{transform:translate(-40px,0)}.reveal .fragment.fade-right.visible{transform:translate(0,0)}.reveal .fragment.fade-left{transform:translate(40px,0)}.reveal .fragment.fade-left.visible{transform:translate(0,0)}.reveal .fragment.current-visible,.reveal .fragment.fade-in-then-out{opacity:0;visibility:hidden}.reveal .fragment.current-visible.current-fragment,.reveal .fragment.fade-in-then-out.current-fragment{opacity:1;visibility:inherit}.reveal .fragment.fade-in-then-semi-out{opacity:0;visibility:hidden}.reveal .fragment.fade-in-then-semi-out.visible{opacity:.5;visibility:inherit}.reveal .fragment.fade-in-then-semi-out.current-fragment{opacity:1;visibility:inherit}.reveal .fragment.highlight-blue,.reveal .fragment.highlight-current-blue,.reveal .fragment.highlight-current-green,.reveal .fragment.highlight-current-red,.reveal .fragment.highlight-green,.reveal .fragment.highlight-red{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}.reveal:after{content:"";font-style:italic}.reveal iframe{z-index:1}.reveal a{position:relative}@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)}}.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}.reveal .controls button{position:absolute;padding:0;background-color:transparent;border:0;outline:0;cursor:pointer;color:currentColor;transform:scale(.9999);transition:color .2s ease,opacity .2s ease,transform .2s ease;z-index:2;pointer-events:auto;font-size:inherit;visibility:hidden;opacity:0;-webkit-appearance:none;-webkit-tap-highlight-color:transparent}.reveal .controls .controls-arrow:after,.reveal .controls .controls-arrow:before{content:"";position:absolute;top:0;left:0;width:2.6em;height:.5em;border-radius:.25em;background-color:currentColor;transition:all .15s ease,background-color .8s ease;transform-origin:.2em 50%;will-change:transform}.reveal .controls .controls-arrow{position:relative;width:3.6em;height:3.6em}.reveal .controls .controls-arrow:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal .controls .controls-arrow:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}.reveal .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(40deg)}.reveal .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-40deg)}.reveal .controls .controls-arrow:active:before{transform:translateX(.5em) translateY(1.55em) rotate(36deg)}.reveal .controls .controls-arrow:active:after{transform:translateX(.5em) translateY(1.55em) rotate(-36deg)}.reveal .controls .navigate-left{right:6.4em;bottom:3.2em;transform:translateX(-10px)}.reveal .controls .navigate-left.highlight{animation:bounce-left 2s 50 both ease-out}.reveal .controls .navigate-right{right:0;bottom:3.2em;transform:translateX(10px)}.reveal .controls .navigate-right .controls-arrow{transform:rotate(180deg)}.reveal .controls .navigate-right.highlight{animation:bounce-right 2s 50 both ease-out}.reveal .controls .navigate-up{right:3.2em;bottom:6.4em;transform:translateY(-10px)}.reveal .controls .navigate-up .controls-arrow{transform:rotate(90deg)}.reveal .controls .navigate-down{right:3.2em;bottom:-1.4em;padding-bottom:1.4em;transform:translateY(10px)}.reveal .controls .navigate-down .controls-arrow{transform:rotate(-90deg)}.reveal .controls .navigate-down.highlight{animation:bounce-down 2s 50 both ease-out}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled{opacity:.3}.reveal .controls[data-controls-back-arrows=faded] .navigate-up.enabled:hover{opacity:1}.reveal .controls[data-controls-back-arrows=hidden] .navigate-up.enabled{opacity:0;visibility:hidden}.reveal .controls .enabled{visibility:visible;opacity:.9;cursor:pointer;transform:none}.reveal .controls .enabled.fragmented{opacity:.5}.reveal .controls .enabled.fragmented:hover,.reveal .controls .enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled{opacity:.3}.reveal:not(.rtl) .controls[data-controls-back-arrows=faded] .navigate-left.enabled:hover{opacity:1}.reveal:not(.rtl) .controls[data-controls-back-arrows=hidden] .navigate-left.enabled{opacity:0;visibility:hidden}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled{opacity:.3}.reveal.rtl .controls[data-controls-back-arrows=faded] .navigate-right.enabled:hover{opacity:1}.reveal.rtl .controls[data-controls-back-arrows=hidden] .navigate-right.enabled{opacity:0;visibility:hidden}.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-down,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-up{display:none}.reveal:not(.has-vertical-slides) .controls .navigate-left,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-left{bottom:1.4em;right:5.5em}.reveal:not(.has-vertical-slides) .controls .navigate-right,.reveal[data-navigation-mode=linear].has-horizontal-slides .navigate-right{bottom:1.4em;right:.5em}.reveal:not(.has-horizontal-slides) .controls .navigate-up{right:1.4em;bottom:5em}.reveal:not(.has-horizontal-slides) .controls .navigate-down{right:1.4em;bottom:.5em}.reveal.has-dark-background .controls{color:#fff}.reveal.has-light-background .controls{color:#000}.reveal.no-hover .controls .controls-arrow:active:before,.reveal.no-hover .controls .controls-arrow:hover:before{transform:translateX(.5em) translateY(1.55em) rotate(45deg)}.reveal.no-hover .controls .controls-arrow:active:after,.reveal.no-hover .controls .controls-arrow:hover:after{transform:translateX(.5em) translateY(1.55em) rotate(-45deg)}@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}.reveal .controls[data-controls-layout=edges] .navigate-down,.reveal .controls[data-controls-layout=edges] .navigate-left,.reveal .controls[data-controls-layout=edges] .navigate-right,.reveal .controls[data-controls-layout=edges] .navigate-up{bottom:auto;right:auto}.reveal .controls[data-controls-layout=edges] .navigate-left{top:50%;left:var(--r-controls-spacing);margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-right{top:50%;right:var(--r-controls-spacing);margin-top:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-up{top:var(--r-controls-spacing);left:50%;margin-left:-1.8em}.reveal .controls[data-controls-layout=edges] .navigate-down{bottom:calc(var(--r-controls-spacing) - 1.4em + .3em);left:50%;margin-left:-1.8em}}.reveal .progress{position:absolute;display:none;height:3px;width:100%;bottom:0;left:0;z-index:10;background-color:rgba(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 .8s cubic-bezier(.26,.86,.44,.985);transform-origin:0 0;transform:scaleX(0)}.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,.4);padding:5px}.reveal .slide-number a{color:currentColor}.reveal .slide-number-delimiter{margin:0 3px}.reveal{position:relative;width:100%;height:100%;overflow:hidden;touch-action:pinch-zoom}.reveal.embedded{touch-action:pan-y}.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 .8s cubic-bezier(.26,.86,.44,.985),transform .8s cubic-bezier(.26,.86,.44,.985),visibility .8s cubic-bezier(.26,.86,.44,.985),opacity .8s cubic-bezier(.26,.86,.44,.985)}.reveal[data-transition-speed=fast] .slides section{transition-duration:.4s}.reveal[data-transition-speed=slow] .slides section{transition-duration:1.2s}.reveal .slides section[data-transition-speed=fast]{transition-duration:.4s}.reveal .slides section[data-transition-speed=slow]{transition-duration:1.2s}.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>section[data-background-interactive],.reveal .slides>section[data-background-interactive]{pointer-events:none}.reveal.center,.reveal.center .slides,.reveal.center .slides section{min-height:0!important}.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.future,.reveal .slides>section.future>section,.reveal .slides>section.past,.reveal .slides>section.past>section,.reveal .slides>section>section.future,.reveal .slides>section>section.past{opacity:0}.reveal .slides>section[data-transition=slide].past,.reveal .slides>section[data-transition~=slide-out].past,.reveal.slide .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=slide].future,.reveal .slides>section[data-transition~=slide-in].future,.reveal.slide .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=slide].past,.reveal .slides>section>section[data-transition~=slide-out].past,.reveal.slide .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=slide].future,.reveal .slides>section>section[data-transition~=slide-in].future,.reveal.slide .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides>section[data-transition=linear].past,.reveal .slides>section[data-transition~=linear-out].past,.reveal.linear .slides>section:not([data-transition]).past{transform:translate(-150%,0)}.reveal .slides>section[data-transition=linear].future,.reveal .slides>section[data-transition~=linear-in].future,.reveal.linear .slides>section:not([data-transition]).future{transform:translate(150%,0)}.reveal .slides>section>section[data-transition=linear].past,.reveal .slides>section>section[data-transition~=linear-out].past,.reveal.linear .slides>section>section:not([data-transition]).past{transform:translate(0,-150%)}.reveal .slides>section>section[data-transition=linear].future,.reveal .slides>section>section[data-transition~=linear-in].future,.reveal.linear .slides>section>section:not([data-transition]).future{transform:translate(0,150%)}.reveal .slides section[data-transition=default].stack,.reveal.default .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=default].past,.reveal .slides>section[data-transition~=default-out].past,.reveal.default .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=default].future,.reveal .slides>section[data-transition~=default-in].future,.reveal.default .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=default].past,.reveal .slides>section>section[data-transition~=default-out].past,.reveal.default .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=default].future,.reveal .slides>section>section[data-transition~=default-in].future,.reveal.default .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=convex].stack,.reveal.convex .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=convex].past,.reveal .slides>section[data-transition~=convex-out].past,.reveal.convex .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=convex].future,.reveal .slides>section[data-transition~=convex-in].future,.reveal.convex .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=convex].past,.reveal .slides>section>section[data-transition~=convex-out].past,.reveal.convex .slides>section>section:not([data-transition]).past{transform:translate3d(0,-300px,0) rotateX(70deg) translate3d(0,-300px,0)}.reveal .slides>section>section[data-transition=convex].future,.reveal .slides>section>section[data-transition~=convex-in].future,.reveal.convex .slides>section>section:not([data-transition]).future{transform:translate3d(0,300px,0) rotateX(-70deg) translate3d(0,300px,0)}.reveal .slides section[data-transition=concave].stack,.reveal.concave .slides section.stack{transform-style:preserve-3d}.reveal .slides>section[data-transition=concave].past,.reveal .slides>section[data-transition~=concave-out].past,.reveal.concave .slides>section:not([data-transition]).past{transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal .slides>section[data-transition=concave].future,.reveal .slides>section[data-transition~=concave-in].future,.reveal.concave .slides>section:not([data-transition]).future{transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal .slides>section>section[data-transition=concave].past,.reveal .slides>section>section[data-transition~=concave-out].past,.reveal.concave .slides>section>section:not([data-transition]).past{transform:translate3d(0,-80%,0) rotateX(-70deg) translate3d(0,-80%,0)}.reveal .slides>section>section[data-transition=concave].future,.reveal .slides>section>section[data-transition~=concave-in].future,.reveal.concave .slides>section>section:not([data-transition]).future{transform:translate3d(0,80%,0) rotateX(70deg) translate3d(0,80%,0)}.reveal .slides section[data-transition=zoom],.reveal.zoom .slides section:not([data-transition]){transition-timing-function:ease}.reveal .slides>section[data-transition=zoom].past,.reveal .slides>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section:not([data-transition]).past{visibility:hidden;transform:scale(16)}.reveal .slides>section[data-transition=zoom].future,.reveal .slides>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section:not([data-transition]).future{visibility:hidden;transform:scale(.2)}.reveal .slides>section>section[data-transition=zoom].past,.reveal .slides>section>section[data-transition~=zoom-out].past,.reveal.zoom .slides>section>section:not([data-transition]).past{transform:scale(16)}.reveal .slides>section>section[data-transition=zoom].future,.reveal .slides>section>section[data-transition~=zoom-in].future,.reveal.zoom .slides>section>section:not([data-transition]).future{transform:scale(.2)}.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,.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:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);transform:translateZ(-90px) rotateX(65deg)}.reveal.cube .slides>section.stack{padding:0;background:0 0}.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)}.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,.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:0 0;z-index:1;border-radius:4px;box-shadow:0 95px 25px rgba(0,0,0,.2);transform:translateZ(-90px) rotateX(65deg)}.reveal.page .slides>section.stack{padding:0;background:0 0}.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)}.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 .5s}.reveal.fade.overview .slides section,.reveal.fade.overview .slides>section>section{transition:none}.reveal .slides section[data-transition=none],.reveal.none .slides section:not([data-transition]){transform:none;transition:none}.reveal .pause-overlay{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;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:0 0;cursor:pointer}.reveal .pause-overlay .resume-button:hover{color:#fff;border-color:#fff}.reveal.paused .pause-overlay{visibility:visible;opacity:1}.reveal .no-transition,.reveal .no-transition *,.reveal .slides.disable-slide-transitions section{transition:none!important}.reveal .slides.disable-slide-transitions section{transform:none!important}.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 .8s cubic-bezier(.26,.86,.44,.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}.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}.reveal>.backgrounds .slide-background[data-background-transition=none],.reveal[data-background-transition=none]>.backgrounds .slide-background:not([data-background-transition]){transition:none}.reveal>.backgrounds .slide-background[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background:not([data-background-transition]){opacity:1}.reveal>.backgrounds .slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.past:not([data-background-transition]){transform:translate(-100%,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background.future:not([data-background-transition]){transform:translate(100%,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){transform:translate(0,-100%)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide],.reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){transform:translate(0,100%)}.reveal>.backgrounds .slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(-90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex],.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(-90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(-100%,0,0) rotateY(90deg) translate3d(-100%,0,0)}.reveal>.backgrounds .slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(100%,0,0) rotateY(-90deg) translate3d(100%,0,0)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;transform:translate3d(0,-100%,0) rotateX(-90deg) translate3d(0,-100%,0)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave],.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;transform:translate3d(0,100%,0) rotateX(90deg) translate3d(0,100%,0)}.reveal>.backgrounds .slide-background[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background:not([data-background-transition]){transition-timing-function:ease}.reveal>.backgrounds .slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(16)}.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom],.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future:not([data-background-transition]){opacity:0;visibility:hidden;transform:scale(.2)}.reveal[data-transition-speed=fast]>.backgrounds .slide-background{transition-duration:.4s}.reveal[data-transition-speed=slow]>.backgrounds .slide-background{transition-duration:1.2s}.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}.reveal.overview{perspective-origin:50% 50%;perspective:700px}.reveal.overview .slides section{height:100%;top:0!important;opacity:1!important;overflow:hidden;visibility:visible!important;cursor:pointer;box-sizing:border-box}.reveal.overview .slides section.present,.reveal.overview .slides section:hover{outline:10px solid rgba(150,150,150,.4);outline-offset:10px}.reveal.overview .slides section .fragment{opacity:1;transition:none}.reveal.overview .slides section:after,.reveal.overview .slides section:before{display:none!important}.reveal.overview .slides>section.stack{padding:0;top:0!important;background:0 0;outline:0;overflow:visible}.reveal.overview .backgrounds{perspective:inherit}.reveal.overview .backgrounds .slide-background{opacity:1;visibility:visible;outline:10px solid rgba(150,150,150,.1);outline-offset:10px}.reveal.overview .backgrounds .slide-background.stack{overflow:visible}.reveal.overview .slides section,.reveal.overview-deactivating .slides section{transition:none}.reveal.overview .backgrounds .slide-background,.reveal.overview-deactivating .backgrounds .slide-background{transition:none}.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 code,.reveal.rtl pre{direction:ltr}.reveal.rtl ol,.reveal.rtl ul{text-align:right}.reveal.rtl .progress span{transform-origin:100% 0}.reveal.has-parallax-background .backgrounds{transition:all .8s ease}.reveal.has-parallax-background[data-transition-speed=fast] .backgrounds{transition-duration:.4s}.reveal.has-parallax-background[data-transition-speed=slow] .backgrounds{transition-duration:1.2s}@keyframes fade-in{from{opacity:0}to{opacity:1}}@keyframes scale-up{from{transform:scale(.95)}to{transform:scale(1)}}.reveal [data-preview-image],.reveal [data-preview-link]:not(a):not([data-preview-link=false]),.reveal [data-preview-video]{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,.95);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);transition:all .3s ease;color:#fff;animation:fade-in .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-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-button:hover{opacity:1;background-color:rgba(255,255,255,.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,.8);animation:scale-up .5s cubic-bezier(.26,.86,.44,.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}.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 .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 .3s ease .3s}.r-overlay-preview[data-state=loaded] .x-frame-error{opacity:1}.r-overlay-preview[data-state=loading] .r-overlay-spinner{opacity:.6;visibility:visible}.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}.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 td,.r-overlay-help .r-overlay-help-content table th{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}.reveal .playback{position:absolute;left:15px;bottom:20px;z-index:30;cursor:pointer;transition:all .4s ease;-webkit-tap-highlight-color:transparent}.reveal.overview .playback{opacity:0;visibility:hidden}.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:.6;padding-right:.75em;text-align:right;vertical-align:top}.reveal .hljs.has-highlights tr:not(.highlight-line){opacity:.4}.reveal .hljs.has-highlights.fragment{transition:all .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%}.reveal .roll{display:inline-block;line-height:1.2;overflow:hidden;vertical-align:top;perspective:400px;perspective-origin:50% 50%}.reveal .roll:hover{background:0 0;text-shadow:none}.reveal .roll span{display:block;position:relative;padding:0 2px;pointer-events:none;transition:all .4s ease;transform-origin:50% 0;transform-style:preserve-3d;backface-visibility:hidden}.reveal .roll:hover span{background:rgba(0,0,0,.5);transform:translate3d(0,0,-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(0,110%,0) rotateX(-90deg)}.reveal aside.notes{display:none}.reveal .speaker-notes{display:none;position:absolute;width:33.3333333333%;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,.05);color:#222;background-color:#f5f5f5;overflow:auto;box-sizing:border-box;text-align:left;font-family:Helvetica,sans-serif;-webkit-overflow-scrolling:touch}.reveal .speaker-notes .notes-placeholder{color:#ccc;font-style:italic}.reveal .speaker-notes:focus{outline:0}.reveal .speaker-notes:before{content:"Speaker notes";display:block;margin-bottom:10px;opacity:.5}.reveal.show-notes{max-width:75%;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}}.reveal .jump-to-slide{position:absolute;top:15px;left:15px;z-index:30;font-size:32px;-webkit-tap-highlight-color:transparent}.reveal .jump-to-slide-input{background:0 0;padding:8px;font-size:inherit;color:currentColor;border:0}.reveal .jump-to-slide-input::placeholder{color:currentColor;opacity:.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:0}.zoomed .reveal *,.zoomed .reveal :after,.zoomed .reveal :before{backface-visibility:visible!important}.zoomed .reveal .controls,.zoomed .reveal .progress{opacity:0}.zoomed .reveal .roll span{background:0 0}.zoomed .reveal .roll span:after{visibility:hidden}.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){.reveal-viewport.reveal-scroll{--r-scrollbar-width:3px;--r-scrollbar-trigger-size:3px}}.reveal-viewport.reveal-scroll .backgrounds,.reveal-viewport.reveal-scroll .controls,.reveal-viewport.reveal-scroll .playback,.reveal-viewport.reveal-scroll .progress,.reveal-viewport.reveal-scroll .slide-number,.reveal-viewport.reveal-scroll .speaker-notes{display:none!important}.reveal-viewport.reveal-scroll .pause-overlay,.reveal-viewport.reveal-scroll .r-overlay{position:fixed}.reveal-viewport.reveal-scroll .reveal{overflow:visible;touch-action:manipulation}.reveal-viewport.reveal-scroll .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%}.reveal-viewport.reveal-scroll .scroll-page{position:relative;width:100%;height:calc(var(--page-height) + var(--page-scroll-padding));z-index:1;overflow:visible}.reveal-viewport.reveal-scroll .scroll-page-sticky{position:sticky;height:var(--page-height);top:0}.reveal-viewport.reveal-scroll .scroll-page-content{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden}.reveal-viewport.reveal-scroll .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}.reveal-viewport.reveal-scroll .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}.reveal-viewport.reveal-scroll[data-scrollbar=auto]::-webkit-scrollbar,.reveal-viewport.reveal-scroll[data-scrollbar=true]::-webkit-scrollbar{display:none}.reveal-viewport.reveal-scroll[data-scrollbar=auto],.reveal-viewport.reveal-scroll[data-scrollbar=true]{scrollbar-width:none}.reveal-viewport.has-dark-background,.reveal.has-dark-background{--r-overlay-element-bg-color:240,240,240;--r-overlay-element-fg-color:0,0,0}.reveal-viewport.has-light-background,.reveal.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 .3s ease}.reveal-viewport.reveal-scroll .scrollbar.visible,.reveal-viewport.reveal-scroll .scrollbar:hover{opacity:1}.reveal-viewport.reveal-scroll .scrollbar .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}.reveal-viewport.reveal-scroll .scrollbar .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 .2s ease}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide{position:absolute;width:100%;background-color:rgba(var(--r-overlay-element-bg-color),.2);box-shadow:0 0 0 1px rgba(var(--r-overlay-element-fg-color),.1);border-radius:var(--r-scrollbar-width);transition:background-color .2s ease}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide:after{content:"";position:absolute;width:200%;height:100%;top:0;left:-50%;background:rgba(0,0,0,0);z-index:-1}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active,.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide:hover{background-color:rgba(var(--r-overlay-element-bg-color),.4)}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-trigger{position:absolute;width:100%;transition:background-color .2s ease}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active.has-triggers{background-color:rgba(var(--r-overlay-element-bg-color),.4);z-index:10}.reveal-viewport.reveal-scroll .scrollbar .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 .2s ease,opacity .2s ease;opacity:.4}.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active .scrollbar-trigger.active:after,.reveal-viewport.reveal-scroll .scrollbar .scrollbar-slide.active .scrollbar-trigger.active~.scrollbar-trigger:after{opacity:1}.reveal-viewport.reveal-scroll .scrollbar .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)}html.reveal-print *{-webkit-print-color-adjust:exact}html.reveal-print{width:100%;height:100%;overflow:visible}html.reveal-print body{margin:0 auto!important;border:0;padding:0;float:none!important;overflow:visible}html.reveal-print .nestedarrow,html.reveal-print .reveal .controls,html.reveal-print .reveal .playback,html.reveal-print .reveal .progress,html.reveal-print .reveal.overview,html.reveal-print .state-background{display:none!important}html.reveal-print .reveal pre code{overflow:hidden!important}html.reveal-print .reveal{width:auto!important;height:auto!important;overflow:hidden!important}html.reveal-print .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%}html.reveal-print .reveal .slides .pdf-page{position:relative;overflow:hidden;z-index:1;page-break-after:always}html.reveal-print .reveal .slides .pdf-page:last-of-type{page-break-after:avoid}html.reveal-print .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}html.reveal-print .reveal section.stack{position:relative!important;margin:0!important;padding:0!important;page-break-after:avoid!important;height:auto!important;min-height:auto!important}html.reveal-print .reveal img{box-shadow:none}html.reveal-print .reveal .backgrounds{display:none}html.reveal-print .reveal .slide-background{display:block!important;position:absolute;top:0;left:0;width:100%;height:100%;z-index:auto!important}html.reveal-print .reveal.show-notes{max-width:none;max-height:none}html.reveal-print .reveal .speaker-notes-pdf{display:block;width:100%;height:auto;max-height:none;top:auto;right:auto;bottom:auto;left:auto;z-index:100}html.reveal-print .reveal .speaker-notes-pdf[data-layout=separate-page]{position:relative;color:inherit;background-color:transparent;padding:20px;page-break-after:always;border:0}html.reveal-print .reveal .slide-number-pdf{display:block;position:absolute;font-size:14px;visibility:visible}html.reveal-print .aria-status{display:none}@media print{html:not(.print-pdf){overflow:visible;width:auto;height:auto}html:not(.print-pdf) body{margin:0;padding:0;overflow:visible}html:not(.print-pdf) .reveal{background:#fff;font-size:20pt}html:not(.print-pdf) .reveal .backgrounds,html:not(.print-pdf) .reveal .controls,html:not(.print-pdf) .reveal .progress,html:not(.print-pdf) .reveal .slide-number,html:not(.print-pdf) .reveal .state-background{display:none!important}html:not(.print-pdf) .reveal li,html:not(.print-pdf) .reveal p,html:not(.print-pdf) .reveal td{font-size:20pt!important;color:#000}html:not(.print-pdf) .reveal h1,html:not(.print-pdf) .reveal h2,html:not(.print-pdf) .reveal h3,html:not(.print-pdf) .reveal h4,html:not(.print-pdf) .reveal h5,html:not(.print-pdf) .reveal h6{color:#000!important;height:auto;line-height:normal;text-align:left;letter-spacing:normal}html:not(.print-pdf) .reveal h1{font-size:28pt!important}html:not(.print-pdf) .reveal h2{font-size:24pt!important}html:not(.print-pdf) .reveal h3{font-size:22pt!important}html:not(.print-pdf) .reveal h4{font-size:22pt!important;font-variant:small-caps}html:not(.print-pdf) .reveal h5{font-size:21pt!important}html:not(.print-pdf) .reveal h6{font-size:20pt!important;font-style:italic}html:not(.print-pdf) .reveal a:link,html:not(.print-pdf) .reveal a:visited{color:#000!important;font-weight:700;text-decoration:underline}html:not(.print-pdf) .reveal div,html:not(.print-pdf) .reveal ol,html:not(.print-pdf) .reveal p,html:not(.print-pdf) .reveal ul{visibility:visible;position:static;width:auto;height:auto;display:block;overflow:visible;margin:0;text-align:left!important}html:not(.print-pdf) .reveal pre,html:not(.print-pdf) .reveal table{margin-left:0;margin-right:0}html:not(.print-pdf) .reveal pre code{padding:20px}html:not(.print-pdf) .reveal blockquote{margin:20px 0}html:not(.print-pdf) .reveal .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%}html:not(.print-pdf) .reveal .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}html:not(.print-pdf) .reveal .slides section.stack{padding:0!important}html:not(.print-pdf) .reveal .slides section:last-of-type{page-break-after:avoid!important}html:not(.print-pdf) .reveal .slides section .fragment{opacity:1!important;visibility:visible!important;transform:none!important}html:not(.print-pdf) .reveal .r-fit-text{white-space:normal!important}html:not(.print-pdf) .reveal section img{display:block;margin:15px 0;background:#fff;border:1px solid #666;box-shadow:none}html:not(.print-pdf) .reveal section small{font-size:.8em}html:not(.print-pdf) .reveal .hljs{max-height:100%;white-space:pre-wrap;word-wrap:break-word;word-break:break-word;font-size:15pt}html:not(.print-pdf) .reveal .hljs .hljs-ln-numbers{white-space:nowrap}html:not(.print-pdf) .reveal .hljs td{font-size:inherit!important;color:inherit!important}}`,z=Object.assign({"../node_modules/reveal.js/dist/theme/beige.css":e,"../node_modules/reveal.js/dist/theme/black-contrast.css":t,"../node_modules/reveal.js/dist/theme/black.css":n,"../node_modules/reveal.js/dist/theme/blood.css":r,"../node_modules/reveal.js/dist/theme/dracula.css":i,"../node_modules/reveal.js/dist/theme/league.css":a,"../node_modules/reveal.js/dist/theme/moon.css":o,"../node_modules/reveal.js/dist/theme/night.css":s,"../node_modules/reveal.js/dist/theme/serif.css":c,"../node_modules/reveal.js/dist/theme/simple.css":l,"../node_modules/reveal.js/dist/theme/sky.css":u,"../node_modules/reveal.js/dist/theme/solarized.css":d,"../node_modules/reveal.js/dist/theme/white-contrast.css":f,"../node_modules/reveal.js/dist/theme/white.css":p,"../node_modules/reveal.js/dist/theme/white_contrast_compact_verbatim_headers.css":m}),B={};for(let[e,t]of Object.entries(z)){let n=e.split(`/`).pop().replace(/\.css$/,``);B[n]=t}function V(){let e=B[document.querySelector(`.reveal`)?.dataset.theme??`black`]??B.black,t=document.createElement(`style`);t.textContent=R+e,document.head.appendChild(t)}function Ee(){let e=document.querySelector(`.reveal`);if(!e)return;let t=document.createElement(`div`);t.className=`slide-title-bar`,e.appendChild(t);let n=()=>{let e=document.querySelector(`.reveal .slides section.present`)?.querySelector(`:scope > .rheo-slide-title`);t.innerHTML=e?.innerHTML??``,t.style.display=e?``:`none`};I.on(`ready`,n),I.on(`slidechanged`,n)}function H(){let e=document.querySelector(`.reveal`);V(),Ee();let t=e?.dataset.transition;I.initialize({hash:!0,...t?{transition:t}:{}})}document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,H):H()})(); \ No newline at end of file diff --git a/tests/harness.rs b/tests/harness.rs index ed38551..969e92b 100644 --- a/tests/harness.rs +++ b/tests/harness.rs @@ -42,6 +42,7 @@ use std::path::PathBuf; #[test_case("cases/error_formatting/multiple_errors.typ")] #[test_case("cases/error_formatting/array_index_error.typ")] #[test_case("cases/merged_subdir_imports")] +#[test_case("cases/rheo_package_slides")] #[test_case("store/compat/merged-imports")] fn run_test_case(name: &str) { let test_case = TestCase::new(name); From 8bf19cba63b4b89979c2acec7d652cee6592fd81 Mon Sep 17 00:00:00 2001 From: Lachlan Kermode Date: Fri, 26 Jun 2026 15:48:54 +0200 Subject: [PATCH 2/7] Adds CI workflow with dynamic rheo-ref from branch naming convention --- .github/workflows/ci.yml | 77 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..15785ef --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,77 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + inputs: + rheo_ref: + description: 'rheo branch/ref to test against (overrides branch-name convention)' + default: '' + required: false + +jobs: + ci: + name: CI + runs-on: ubuntu-latest + steps: + - name: Checkout rheo-tests + uses: actions/checkout@v5 + + - name: Determine rheo ref + id: rheo-ref + shell: bash + run: | + # Priority: workflow_dispatch input > branch convention > main + if [ -n "${{ inputs.rheo_ref }}" ]; then + echo "ref=${{ inputs.rheo_ref }}" >> "$GITHUB_OUTPUT" + else + BRANCH="${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}" + if [[ "$BRANCH" == rheo/* ]]; then + echo "ref=${BRANCH#rheo/}" >> "$GITHUB_OUTPUT" + else + echo "ref=main" >> "$GITHUB_OUTPUT" + fi + fi + + - name: Clone rheo at resolved ref + shell: bash + run: | + git clone --depth 1 --branch "${{ steps.rheo-ref.outputs.ref }}" \ + https://github.com/freecomputinglab/rheo.git ../rheo + + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Cache cargo dependencies + uses: Swatinem/rust-cache@v2 + + - name: Install pnpm + uses: pnpm/action-setup@v5 + with: + version: "10.21.0" + + - name: Set up Node.js + uses: actions/setup-node@v5 + with: + node-version: '24' + + - name: Install just + uses: extractions/setup-just@v2 + + - name: Build @rheo packages into cache + shell: bash + run: | + rm -rf "$HOME/.cache/typst/packages/rheo" + mkdir -p "$HOME/.cache/typst/packages" + git clone https://github.com/freecomputinglab/rheo-packages.git \ + "$HOME/.cache/typst/packages/rheo" + cd "$HOME/.cache/typst/packages/rheo" + just build + + - name: Run tests + run: cargo test --test harness + env: + RHEO_MANIFEST: ../rheo/Cargo.toml + TYPST_IGNORE_SYSTEM_FONTS: "1" From 646c302277aab98c9391a8b35396fd18a7119f78 Mon Sep 17 00:00:00 2001 From: Lachlan Kermode Date: Fri, 26 Jun 2026 15:49:41 +0200 Subject: [PATCH 3/7] Documents CI workflow and rheo branch naming convention in README --- README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/README.md b/README.md index cc3a1a8..810c46b 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,33 @@ pnpm install just build ``` +## CI + +The CI workflow (`.github/workflows/ci.yml`) runs on push to `main`, all pull requests, and `workflow_dispatch`. + +### Testing against a specific rheo branch + +By default CI clones rheo `main`. To test against a different rheo branch, use the **branch naming convention**: name the rheo-tests branch `rheo/` and CI will automatically test against that rheo branch. + +Example: to test the rheo-tests changes against rheo PR branch `feat/typst-v0.15.0`, create a rheo-tests branch named `rheo/feat/typst-v0.15.0`. The CI step resolves: + +``` +rheo-tests branch → rheo ref used +──────────────────────────────────────── +rheo/feat/my-feature → feat/my-feature +add-slides-test → main (default) +main → main (default) +``` + +You can also override via `workflow_dispatch` → `rheo_ref` input, which takes priority over the branch convention. + +### Merge order + +When a rheo-tests PR targets a rheo PR: + +1. Merge the rheo-tests PR first (it tests against the rheo branch; once green, merge) +2. Then merge the rheo PR (rheo's own CI clones rheo-tests `main` as a sibling) + ## Test Structure ``` From ec911d52b7f082bcf89d8a4c3e4071a8559e68fa Mon Sep 17 00:00:00 2001 From: Lachlan Kermode Date: Fri, 26 Jun 2026 15:55:43 +0200 Subject: [PATCH 4/7] Re-baselines integration snapshots for Typst 0.15; adds math test case; fixes CSS binary ref path in comparison.rs --- cases/math/main.typ | 29 +++ cases/math/rheo.toml | 6 + .../pdf/code_examples.metadata.json | 2 +- .../pdf/cover-letter.metadata.json | 4 +- .../cross_directory_links/html/ch1.html | 18 +- .../cross_directory_links/html/ch2.html | 19 +- .../cross_directory_links/html/intro.html | 17 +- .../cross_directory_links/html/notes.html | 19 +- .../pdf/cross_directory_links.metadata.json | 2 +- ref/examples/index/html/index.html | 28 +-- ref/examples/index/pdf/index.metadata.json | 2 +- .../link_path_edge_cases/html/chapter-01.html | 15 +- .../link_path_edge_cases/html/file-name.html | 15 +- .../link_path_edge_cases/html/file_name.html | 15 +- .../link_path_edge_cases/html/main.html | 21 +- .../link_path_edge_cases/html/version-1.html | 15 +- .../pdf/link_path_edge_cases.metadata.json | 2 +- .../epub/links_with_fragments.metadata.json | 2 +- .../epub/xhtml/page1.xhtml | 15 +- .../epub/xhtml/page2.xhtml | 19 +- .../links_with_fragments/html/page1.html | 18 +- .../links_with_fragments/html/page2.html | 22 +- .../pdf/links_with_fragments.metadata.json | 2 +- ref/examples/math/epub/math.metadata.json | 10 + ref/examples/math/epub/xhtml/main.xhtml | 77 +++++++ ref/examples/math/html/main.html | 203 ++++++++++++++++++ .../pdf/merged-imports.metadata.json | 2 +- .../epub/merged_subdir_imports.metadata.json | 2 +- .../epub/xhtml/author.xhtml | 12 +- .../epub/xhtml/index.xhtml | 12 +- .../epub/xhtml/template.xhtml | 8 +- .../pdf/merged_subdir_imports.metadata.json | 2 +- .../html/multiple_links_inline.html | 21 +- .../pdf/multiple_links_inline.metadata.json | 2 +- .../pdf_individual/pdf/chapter1.metadata.json | 2 +- .../pdf_individual/pdf/chapter2.metadata.json | 2 +- ref/examples/pdf_merge_false/html/a.html | 15 +- ref/examples/pdf_merge_false/html/c.html | 15 +- .../pdf_merge_false/pdf/a.metadata.json | 2 +- .../pdf_merge_false/pdf/c.metadata.json | 2 +- .../portable_epubs/html/portable_epubs.html | 66 +----- .../pdf/portable_epubs.metadata.json | 4 +- .../relative_path_links/html/child.html | 20 +- .../relative_path_links/html/root.html | 19 +- .../relative_path_links/html/sibling.html | 20 +- .../pdf/relative_path_links.metadata.json | 2 +- ref/examples/script_injection/html/index.html | 11 +- .../script_injection_no_css/html/index.html | 13 +- .../html/severance-ep-1.html | 47 +--- .../pdf/severance-ep-1.metadata.json | 4 +- .../epub/target_function.metadata.json | 2 +- .../target_function/epub/xhtml/main.xhtml | 14 +- ref/examples/target_function/html/main.html | 17 +- .../target_function/pdf/main.metadata.json | 2 +- .../target_function_in_module.metadata.json | 2 +- .../epub/xhtml/main.xhtml | 16 +- .../html/format_helper.html | 11 +- .../target_function_in_module/html/main.html | 19 +- .../pdf/format_helper.metadata.json | 2 +- .../pdf/main.metadata.json | 2 +- .../target_function_in_package.metadata.json | 2 +- .../epub/xhtml/main.xhtml | 14 +- .../target_function_in_package/html/main.html | 17 +- src/helpers/comparison.rs | 40 ++-- tests/harness.rs | 1 + 65 files changed, 440 insertions(+), 623 deletions(-) create mode 100644 cases/math/main.typ create mode 100644 cases/math/rheo.toml create mode 100644 ref/examples/math/epub/math.metadata.json create mode 100644 ref/examples/math/epub/xhtml/main.xhtml create mode 100644 ref/examples/math/html/main.html diff --git a/cases/math/main.typ b/cases/math/main.typ new file mode 100644 index 0000000..2f94a5b --- /dev/null +++ b/cases/math/main.typ @@ -0,0 +1,29 @@ +// @rheo:test +// @rheo:formats html,epub +// @rheo:description Tests MathML output for inline and display math in HTML and EPUB + += Math Test + +== Inline Math + +The Pythagorean theorem: $a^2 + b^2 = c^2$. + +Euler's identity: $e^(i pi) + 1 = 0$. + +== Display Math + +The quadratic formula: + +$ x = (-b plus.minus sqrt(b^2 - 4a c)) / (2a) $ + +A definite integral: + +$ integral_0^1 x^2 dif x = 1/3 $ + +== Paragraph Grouping + +First paragraph. + +Second paragraph with #emph[emphasis] and #strong[bold] text. + +Third paragraph. diff --git a/cases/math/rheo.toml b/cases/math/rheo.toml new file mode 100644 index 0000000..94626f2 --- /dev/null +++ b/cases/math/rheo.toml @@ -0,0 +1,6 @@ +version = "0.3.1" +formats = ["html", "epub"] + +[html.spine] +title = "Math Test" +vertebrae = ["main.typ"] diff --git a/ref/examples/code_blocks_with_links/pdf/code_examples.metadata.json b/ref/examples/code_blocks_with_links/pdf/code_examples.metadata.json index 705d9d1..7aa11fb 100644 --- a/ref/examples/code_blocks_with_links/pdf/code_examples.metadata.json +++ b/ref/examples/code_blocks_with_links/pdf/code_examples.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 28288, + "file_size": 3796, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/cover_minusletter/pdf/cover-letter.metadata.json b/ref/examples/cover_minusletter/pdf/cover-letter.metadata.json index bd8f3cf..1d3e73c 100644 --- a/ref/examples/cover_minusletter/pdf/cover-letter.metadata.json +++ b/ref/examples/cover_minusletter/pdf/cover-letter.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 1239761, - "page_count": 2 + "file_size": 1212364, + "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/cross_directory_links/html/ch1.html b/ref/examples/cross_directory_links/html/ch1.html index c1c5e4d..14ff521 100644 --- a/ref/examples/cross_directory_links/html/ch1.html +++ b/ref/examples/cross_directory_links/html/ch1.html @@ -1,9 +1,4 @@ - - - - - - - -

Chapter 1

-

This is the first chapter.

-

References

-

Go back to the introduction.

-

Continue to Chapter 2 (sibling).

-

See the appendix notes for additional info.

- - +

Chapter 1

This is the first chapter.

References

Go back to the introduction.

Continue to Chapter 2 (sibling).

See the appendix notes for additional info.

\ No newline at end of file diff --git a/ref/examples/cross_directory_links/html/ch2.html b/ref/examples/cross_directory_links/html/ch2.html index d0568c4..4977857 100644 --- a/ref/examples/cross_directory_links/html/ch2.html +++ b/ref/examples/cross_directory_links/html/ch2.html @@ -1,9 +1,4 @@ - - - - - - - -

Chapter 2

-

This is the second chapter.

-

Navigation

-

Previous: Chapter 1

-

Root: Introduction

-

Content

-

Testing cross-directory navigation patterns.

- - +

Chapter 2

This is the second chapter.

Navigation

Previous: Chapter 1

Root: Introduction

Content

Testing cross-directory navigation patterns.

\ No newline at end of file diff --git a/ref/examples/cross_directory_links/html/intro.html b/ref/examples/cross_directory_links/html/intro.html index 0c919f2..004b703 100644 --- a/ref/examples/cross_directory_links/html/intro.html +++ b/ref/examples/cross_directory_links/html/intro.html @@ -1,9 +1,4 @@ - - - - - - - -

Introduction

-

Welcome to the cross-directory test.

-

Overview

-

This document links to Chapter 1.

-

See also Chapter 2 for more details.

- - +

Introduction

Welcome to the cross-directory test.

Overview

This document links to Chapter 1.

See also Chapter 2 for more details.

\ No newline at end of file diff --git a/ref/examples/cross_directory_links/html/notes.html b/ref/examples/cross_directory_links/html/notes.html index 41cef65..74d2aff 100644 --- a/ref/examples/cross_directory_links/html/notes.html +++ b/ref/examples/cross_directory_links/html/notes.html @@ -1,9 +1,4 @@ - - - - - - - -

Appendix: Notes

-

Additional notes and references.

-

Cross References

-

Back to Chapter 1.

-

Return to the introduction.

-

Details

-

Testing links from a different subdirectory.

- - +

Appendix: Notes

Additional notes and references.

Cross References

Back to Chapter 1.

Return to the introduction.

Details

Testing links from a different subdirectory.

\ No newline at end of file diff --git a/ref/examples/cross_directory_links/pdf/cross_directory_links.metadata.json b/ref/examples/cross_directory_links/pdf/cross_directory_links.metadata.json index d049019..85fb700 100644 --- a/ref/examples/cross_directory_links/pdf/cross_directory_links.metadata.json +++ b/ref/examples/cross_directory_links/pdf/cross_directory_links.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 26778, + "file_size": 8346, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/index/html/index.html b/ref/examples/index/html/index.html index e3190a8..0647002 100644 --- a/ref/examples/index/html/index.html +++ b/ref/examples/index/html/index.html @@ -1,9 +1,4 @@ - - - - - - - -

Screening the subject

-

Screening the subject is a blog that analyses content on both the big and small screen in reasonable detail, i.e. episode-by-episode or scene-by-scene. Contact us at info@ohrg.org for enquiries.

- -
-


-
- -
- - +

Screening the subject

Screening the subject is a blog that analyses content on both the big and small screen in reasonable detail, i.e. episode-by-episode or scene-by-scene. Contact us at info@ohrg.org for enquiries.

\ No newline at end of file diff --git a/ref/examples/index/pdf/index.metadata.json b/ref/examples/index/pdf/index.metadata.json index 8dc1fc4..86519d7 100644 --- a/ref/examples/index/pdf/index.metadata.json +++ b/ref/examples/index/pdf/index.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 20019, + "file_size": 3692, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/link_path_edge_cases/html/chapter-01.html b/ref/examples/link_path_edge_cases/html/chapter-01.html index 367b4a4..5334da2 100644 --- a/ref/examples/link_path_edge_cases/html/chapter-01.html +++ b/ref/examples/link_path_edge_cases/html/chapter-01.html @@ -1,9 +1,4 @@ - - - - - - - -

Chapter 01

-

This filename contains numbers.

-

Back to main.

- - +

Chapter 01

This filename contains numbers.

Back to main.

\ No newline at end of file diff --git a/ref/examples/link_path_edge_cases/html/file-name.html b/ref/examples/link_path_edge_cases/html/file-name.html index e78e622..6417a06 100644 --- a/ref/examples/link_path_edge_cases/html/file-name.html +++ b/ref/examples/link_path_edge_cases/html/file-name.html @@ -1,9 +1,4 @@ - - - - - - - -

File with Hyphen

-

This filename contains a hyphen.

-

Back to main.

- - +

File with Hyphen

This filename contains a hyphen.

Back to main.

\ No newline at end of file diff --git a/ref/examples/link_path_edge_cases/html/file_name.html b/ref/examples/link_path_edge_cases/html/file_name.html index fb643be..d34d3f8 100644 --- a/ref/examples/link_path_edge_cases/html/file_name.html +++ b/ref/examples/link_path_edge_cases/html/file_name.html @@ -1,9 +1,4 @@ - - - - - - - -

File with Underscore

-

This filename contains an underscore.

-

Back to main.

- - +

File with Underscore

This filename contains an underscore.

Back to main.

\ No newline at end of file diff --git a/ref/examples/link_path_edge_cases/html/main.html b/ref/examples/link_path_edge_cases/html/main.html index 863e031..da1e144 100644 --- a/ref/examples/link_path_edge_cases/html/main.html +++ b/ref/examples/link_path_edge_cases/html/main.html @@ -1,9 +1,4 @@ - - - - - - - -

Path Edge Cases Test

-

This tests unusual but valid filename patterns.

-

Links to Edge Case Files

-

Hyphen: file with hyphen

-

Underscore: file with underscore

-

Dot in name: file with dot

-

Number: file with number

-

Content

-

All these edge cases should transform correctly.

- - +

Path Edge Cases Test

This tests unusual but valid filename patterns.

Links to Edge Case Files

Hyphen: file with hyphen

Underscore: file with underscore

Dot in name: file with dot

Number: file with number

Content

All these edge cases should transform correctly.

\ No newline at end of file diff --git a/ref/examples/link_path_edge_cases/html/version-1.html b/ref/examples/link_path_edge_cases/html/version-1.html index cf476ca..50f351e 100644 --- a/ref/examples/link_path_edge_cases/html/version-1.html +++ b/ref/examples/link_path_edge_cases/html/version-1.html @@ -1,9 +1,4 @@ - - - - - - - -

Version 1.0

-

This filename contains a dot in the name (not just the extension).

-

Back to main.

- - +

Version 1.0

This filename contains a dot in the name (not just the extension).

Back to main.

\ No newline at end of file diff --git a/ref/examples/link_path_edge_cases/pdf/link_path_edge_cases.metadata.json b/ref/examples/link_path_edge_cases/pdf/link_path_edge_cases.metadata.json index 93f8797..62622a1 100644 --- a/ref/examples/link_path_edge_cases/pdf/link_path_edge_cases.metadata.json +++ b/ref/examples/link_path_edge_cases/pdf/link_path_edge_cases.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 24245, + "file_size": 7173, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/links_with_fragments/epub/links_with_fragments.metadata.json b/ref/examples/links_with_fragments/epub/links_with_fragments.metadata.json index 6519a0d..f62d02a 100644 --- a/ref/examples/links_with_fragments/epub/links_with_fragments.metadata.json +++ b/ref/examples/links_with_fragments/epub/links_with_fragments.metadata.json @@ -1,6 +1,6 @@ { "filetype": "epub", - "file_size": 4388, + "file_size": 4286, "title": "Links with Fragments Test", "language": "en", "spine_files": [ diff --git a/ref/examples/links_with_fragments/epub/xhtml/page1.xhtml b/ref/examples/links_with_fragments/epub/xhtml/page1.xhtml index 446615e..483de4b 100644 --- a/ref/examples/links_with_fragments/epub/xhtml/page1.xhtml +++ b/ref/examples/links_with_fragments/epub/xhtml/page1.xhtml @@ -1,16 +1,3 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/ref/examples/links_with_fragments/epub/xhtml/page2.xhtml b/ref/examples/links_with_fragments/epub/xhtml/page2.xhtml index d687b03..f44e651 100644 --- a/ref/examples/links_with_fragments/epub/xhtml/page2.xhtml +++ b/ref/examples/links_with_fragments/epub/xhtml/page2.xhtml @@ -1,20 +1,3 @@ - - - - -
-

Page 2

-

This is the second page.

-

Introduction

-

This is the introduction section.

-

It has some content that the first page links to.

-

Middle Section

-

Some middle content.

-

Conclusion

-

This is the conclusion section.

-

Referenced from page 1.

- - -
\ No newline at end of file +

Page 2

This is the second page.

Introduction

This is the introduction section.

It has some content that the first page links to.

Middle Section

Some middle content.

Conclusion

This is the conclusion section.

Referenced from page 1.

\ No newline at end of file diff --git a/ref/examples/links_with_fragments/html/page1.html b/ref/examples/links_with_fragments/html/page1.html index b841dc8..43fb6d6 100644 --- a/ref/examples/links_with_fragments/html/page1.html +++ b/ref/examples/links_with_fragments/html/page1.html @@ -1,9 +1,4 @@ - - - - - - - -

Page 1

-

This is the first page.

-

See the introduction in Page 2 for details.

-

Also check the conclusion.

-

Section in Page 1

-

More content here.

- - +

Page 1

This is the first page.

See the introduction in Page 2 for details.

Also check the conclusion.

Section in Page 1

More content here.

\ No newline at end of file diff --git a/ref/examples/links_with_fragments/html/page2.html b/ref/examples/links_with_fragments/html/page2.html index 2c84162..71f2b67 100644 --- a/ref/examples/links_with_fragments/html/page2.html +++ b/ref/examples/links_with_fragments/html/page2.html @@ -1,9 +1,4 @@ - - - - - - - -

Page 2

-

This is the second page.

-

Introduction

-

This is the introduction section.

-

It has some content that the first page links to.

-

Middle Section

-

Some middle content.

-

Conclusion

-

This is the conclusion section.

-

Referenced from page 1.

- - +

Page 2

This is the second page.

Introduction

This is the introduction section.

It has some content that the first page links to.

Middle Section

Some middle content.

Conclusion

This is the conclusion section.

Referenced from page 1.

\ No newline at end of file diff --git a/ref/examples/links_with_fragments/pdf/links_with_fragments.metadata.json b/ref/examples/links_with_fragments/pdf/links_with_fragments.metadata.json index 554b103..a3438ad 100644 --- a/ref/examples/links_with_fragments/pdf/links_with_fragments.metadata.json +++ b/ref/examples/links_with_fragments/pdf/links_with_fragments.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 18897, + "file_size": 4696, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/math/epub/math.metadata.json b/ref/examples/math/epub/math.metadata.json new file mode 100644 index 0000000..a2e33ed --- /dev/null +++ b/ref/examples/math/epub/math.metadata.json @@ -0,0 +1,10 @@ +{ + "filetype": "epub", + "file_size": 5414, + "title": "Math", + "language": "en", + "spine_files": [ + "main.xhtml" + ], + "has_nav": true +} \ No newline at end of file diff --git a/ref/examples/math/epub/xhtml/main.xhtml b/ref/examples/math/epub/xhtml/main.xhtml new file mode 100644 index 0000000..fdc83d0 --- /dev/null +++ b/ref/examples/math/epub/xhtml/main.xhtml @@ -0,0 +1,77 @@ + + +

Math Test

Inline Math

The Pythagorean theorem: 𝑎2+𝑏2=𝑐2.

Euler’s identity: 𝑒𝑖𝜋+1=0.

Display Math

The quadratic formula:

𝑥=−𝑏±𝑏2−4𝑎𝑐2𝑎

A definite integral:

∫01𝑥2d𝑥=13

Paragraph Grouping

First paragraph.

Second paragraph with emphasis and bold text.

Third paragraph.

\ No newline at end of file diff --git a/ref/examples/math/html/main.html b/ref/examples/math/html/main.html new file mode 100644 index 0000000..3e37f38 --- /dev/null +++ b/ref/examples/math/html/main.html @@ -0,0 +1,203 @@ +

Math Test

Inline Math

The Pythagorean theorem: 𝑎2+𝑏2=𝑐2.

Euler’s identity: 𝑒𝑖𝜋+1=0.

Display Math

The quadratic formula:

𝑥=−𝑏±𝑏2−4𝑎𝑐2𝑎

A definite integral:

∫01𝑥2d𝑥=13

Paragraph Grouping

First paragraph.

Second paragraph with emphasis and bold text.

Third paragraph.

\ No newline at end of file diff --git a/ref/examples/merged-imports/pdf/merged-imports.metadata.json b/ref/examples/merged-imports/pdf/merged-imports.metadata.json index 49828eb..0b31af4 100644 --- a/ref/examples/merged-imports/pdf/merged-imports.metadata.json +++ b/ref/examples/merged-imports/pdf/merged-imports.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 12726, + "file_size": 2591, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/merged_subdir_imports/epub/merged_subdir_imports.metadata.json b/ref/examples/merged_subdir_imports/epub/merged_subdir_imports.metadata.json index c1fdad0..7871043 100644 --- a/ref/examples/merged_subdir_imports/epub/merged_subdir_imports.metadata.json +++ b/ref/examples/merged_subdir_imports/epub/merged_subdir_imports.metadata.json @@ -1,6 +1,6 @@ { "filetype": "epub", - "file_size": 4083, + "file_size": 4023, "title": "Merged Subdir Imports", "language": "en", "spine_files": [ diff --git a/ref/examples/merged_subdir_imports/epub/xhtml/author.xhtml b/ref/examples/merged_subdir_imports/epub/xhtml/author.xhtml index 57c282d..bb38f18 100644 --- a/ref/examples/merged_subdir_imports/epub/xhtml/author.xhtml +++ b/ref/examples/merged_subdir_imports/epub/xhtml/author.xhtml @@ -1,13 +1,3 @@ - - - - Merged Subdir Imports - -
-

Author Page

-

Written by the author.

- - -
\ No newline at end of file +Merged Subdir Imports

Author Page

Written by the author.

\ No newline at end of file diff --git a/ref/examples/merged_subdir_imports/epub/xhtml/index.xhtml b/ref/examples/merged_subdir_imports/epub/xhtml/index.xhtml index 0d691ca..a71a6cb 100644 --- a/ref/examples/merged_subdir_imports/epub/xhtml/index.xhtml +++ b/ref/examples/merged_subdir_imports/epub/xhtml/index.xhtml @@ -1,13 +1,3 @@ - - - - Merged Subdir Imports - -
-

Merged Subdir Imports

-

This is the index page.

- - -
\ No newline at end of file +Merged Subdir Imports

Merged Subdir Imports

This is the index page.

\ No newline at end of file diff --git a/ref/examples/merged_subdir_imports/epub/xhtml/template.xhtml b/ref/examples/merged_subdir_imports/epub/xhtml/template.xhtml index ca9cef2..8f38ee1 100644 --- a/ref/examples/merged_subdir_imports/epub/xhtml/template.xhtml +++ b/ref/examples/merged_subdir_imports/epub/xhtml/template.xhtml @@ -1,9 +1,3 @@ - - - - -
- -
\ No newline at end of file +
\ No newline at end of file diff --git a/ref/examples/merged_subdir_imports/pdf/merged_subdir_imports.metadata.json b/ref/examples/merged_subdir_imports/pdf/merged_subdir_imports.metadata.json index b0edcba..ee37487 100644 --- a/ref/examples/merged_subdir_imports/pdf/merged_subdir_imports.metadata.json +++ b/ref/examples/merged_subdir_imports/pdf/merged_subdir_imports.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 14175, + "file_size": 2740, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/multiple_links_inline/html/multiple_links_inline.html b/ref/examples/multiple_links_inline/html/multiple_links_inline.html index d627cc5..54c2a99 100644 --- a/ref/examples/multiple_links_inline/html/multiple_links_inline.html +++ b/ref/examples/multiple_links_inline/html/multiple_links_inline.html @@ -1,9 +1,4 @@ - - - - - - - -

Multiple Links Test

-

Adjacent Links with Text

-

See File 1 and File 2 for details.

-

Multiple References in List

-

References: A, B, C.

-

Minimal Separation

-

Adjacent links: XY

-

Multiple Links in Sentence

-

Check the introduction, then chapter 1, and finally the conclusion.

- - +

Multiple Links Test

Adjacent Links with Text

See File 1 and File 2 for details.

Multiple References in List

References: A, B, C.

Minimal Separation

Adjacent links: XY

Multiple Links in Sentence

Check the introduction, then chapter 1, and finally the conclusion.

\ No newline at end of file diff --git a/ref/examples/multiple_links_inline/pdf/multiple_links_inline.metadata.json b/ref/examples/multiple_links_inline/pdf/multiple_links_inline.metadata.json index cac56e4..447c33a 100644 --- a/ref/examples/multiple_links_inline/pdf/multiple_links_inline.metadata.json +++ b/ref/examples/multiple_links_inline/pdf/multiple_links_inline.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 17849, + "file_size": 3546, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/pdf_individual/pdf/chapter1.metadata.json b/ref/examples/pdf_individual/pdf/chapter1.metadata.json index 8696e98..cd96713 100644 --- a/ref/examples/pdf_individual/pdf/chapter1.metadata.json +++ b/ref/examples/pdf_individual/pdf/chapter1.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 11864, + "file_size": 2417, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/pdf_individual/pdf/chapter2.metadata.json b/ref/examples/pdf_individual/pdf/chapter2.metadata.json index b311587..cd96713 100644 --- a/ref/examples/pdf_individual/pdf/chapter2.metadata.json +++ b/ref/examples/pdf_individual/pdf/chapter2.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 11890, + "file_size": 2417, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/pdf_merge_false/html/a.html b/ref/examples/pdf_merge_false/html/a.html index 4122916..6eebe42 100644 --- a/ref/examples/pdf_merge_false/html/a.html +++ b/ref/examples/pdf_merge_false/html/a.html @@ -1,10 +1,4 @@ - - - - - - doc1 - - -

A

-

The first doc.

- - +

A

The first doc.

\ No newline at end of file diff --git a/ref/examples/pdf_merge_false/html/c.html b/ref/examples/pdf_merge_false/html/c.html index 408d003..1e8f60f 100644 --- a/ref/examples/pdf_merge_false/html/c.html +++ b/ref/examples/pdf_merge_false/html/c.html @@ -1,10 +1,4 @@ - - - - - - doc2 - - -

C

-

The second doc.

- - +

C

The second doc.

\ No newline at end of file diff --git a/ref/examples/pdf_merge_false/pdf/a.metadata.json b/ref/examples/pdf_merge_false/pdf/a.metadata.json index c41b478..eb46bf9 100644 --- a/ref/examples/pdf_merge_false/pdf/a.metadata.json +++ b/ref/examples/pdf_merge_false/pdf/a.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 9362, + "file_size": 2391, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/pdf_merge_false/pdf/c.metadata.json b/ref/examples/pdf_merge_false/pdf/c.metadata.json index 4f9ae42..eb46bf9 100644 --- a/ref/examples/pdf_merge_false/pdf/c.metadata.json +++ b/ref/examples/pdf_merge_false/pdf/c.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 8981, + "file_size": 2391, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/portable_epubs/html/portable_epubs.html b/ref/examples/portable_epubs/html/portable_epubs.html index b3b62b2..68eb5d7 100644 --- a/ref/examples/portable_epubs/html/portable_epubs.html +++ b/ref/examples/portable_epubs/html/portable_epubs.html @@ -1,10 +1,4 @@ - - - - - - Portable EPUBs - - -
-

Portable EPUBs

- Will CrichtonBrown UniversityJanuary 25, 2024Despite decades of advances in document rendering technology, most of the world’s documents are stuck in the 1990s due to the limitations of PDF. Yet, modern document formats like HTML have yet to provide a competitive alternative to PDF. This post explores what prevents HTML documents from being portable, and I propose a way forward based on the EPUB format. To demonstrate my ideas, this post is presented using a prototype EPUB reading system. -
-

The Good and Bad of PDF

-

PDF is the de facto file format for reading and sharing digital documents like papers, textbooks, and flyers. People use PDF for several reasons:

-
    -
  • -

    PDFs are self-contained. A PDF is a single file that contains all the images, fonts, and other data needed to render it.

    -
  • -
  • -

    PDFs are rendered consistently. A PDF specifies precisely how it should be rendered.

    -
  • -
  • -

    PDFs are stable over time. PDFs from decades ago still render the same today.

    -
  • -
-

Yet, in the 32 years since the initial release of PDF, a lot has changed. People use phones, tablets, and e-readers to read digital documents. These changes have laid bare the limitations of PDF.

-

Can’t We Just Fix PDF?

-

A simple answer is to improve the PDF format. After all, we already have billions of PDFs — why reinvent the wheel?

-

But in practice, I don’t think we can just fix the PDF format, at least within a reasonable time frame.

-

The Good and Bad of HTML

-

In the meantime, we already have a structured document format which can be flexibly and interactively rendered: HTML.

-
    -
  • HTML can more easily adapt to different screen sizes.
  • -
  • HTML can be more easily understood by a program.
  • -
  • HTML can more easily express interaction.
  • -
-

However, HTML is lacking where PDF shines:

-
    -
  • HTML is not self-contained.
  • -
  • HTML is not always rendered consistently.
  • -
  • HTML is not fully stable over time.
  • -
-

So I’ve been thinking: how can we design HTML documents to gain the benefits of PDFs without losing the key strengths of HTML?

-

Self-Contained HTML with EPUB

-

First, how can we make HTML documents self-contained? The most sensible format for this purpose is EPUB.

-

EPUB is a “distribution and interchange format for digital publications and documents”. An EPUB is a ZIP archive of web files: HTML, CSS, JS, and assets like images and fonts.

-

Hence, I will propose a new format which I call a portable EPUB, which is an EPUB with additional requirements.

-

Principles for Consistent EPUB Rendering

-

I think the core solution for consistently rendering EPUBs comes down to this:

-
    -
  1. The document format needs to establish a subset of HTML which could represent most documents.
  2. -
  3. Reading systems need to guarantee consistent rendering.
  4. -
-
Portable HTML rendering requirement: reading systems must guarantee reasonable rendering.
-

Where To Go From Here?

-

Every time I have told someone “I want to replace PDF”, the statement has been met with extreme skepticism. Hopefully this document has convinced you that HTML-via-EPUB could potentially be a viable alternative.

-

But What About…

-

…security? You might dislike the idea that document authors can run arbitrary Javascript. But then again, you presumably use both a PDF reader and a web browser daily.

-

…privacy? EPUBs should not follow web trends in tracking and telemetry.

-

…aesthetics? People often intuit that LaTeX-generated PDFs look prettier than HTML documents.

-

…page citations? I think we should cite content by block numbers rather than pages.

- - +

Portable EPUBs

Will CrichtonBrown UniversityJanuary 25, 2024Despite decades of advances in document rendering technology, most of the world’s documents are stuck in the 1990s due to the limitations of PDF. Yet, modern document formats like HTML have yet to provide a competitive alternative to PDF. This post explores what prevents HTML documents from being portable, and I propose a way forward based on the EPUB format. To demonstrate my ideas, this post is presented using a prototype EPUB reading system.

The Good and Bad of PDF

PDF is the de facto file format for reading and sharing digital documents like papers, textbooks, and flyers. People use PDF for several reasons:

  • PDFs are self-contained. A PDF is a single file that contains all the images, fonts, and other data needed to render it.

  • PDFs are rendered consistently. A PDF specifies precisely how it should be rendered.

  • PDFs are stable over time. PDFs from decades ago still render the same today.

Yet, in the 32 years since the initial release of PDF, a lot has changed. People use phones, tablets, and e-readers to read digital documents. These changes have laid bare the limitations of PDF.

Can’t We Just Fix PDF?

A simple answer is to improve the PDF format. After all, we already have billions of PDFs — why reinvent the wheel?

But in practice, I don’t think we can just fix the PDF format, at least within a reasonable time frame.

The Good and Bad of HTML

In the meantime, we already have a structured document format which can be flexibly and interactively rendered: HTML.

  • HTML can more easily adapt to different screen sizes.
  • HTML can be more easily understood by a program.
  • HTML can more easily express interaction.

However, HTML is lacking where PDF shines:

  • HTML is not self-contained.
  • HTML is not always rendered consistently.
  • HTML is not fully stable over time.

So I’ve been thinking: how can we design HTML documents to gain the benefits of PDFs without losing the key strengths of HTML?

Self-Contained HTML with EPUB

First, how can we make HTML documents self-contained? The most sensible format for this purpose is EPUB.

EPUB is a “distribution and interchange format for digital publications and documents”. An EPUB is a ZIP archive of web files: HTML, CSS, JS, and assets like images and fonts.

Hence, I will propose a new format which I call a portable EPUB, which is an EPUB with additional requirements.

Principles for Consistent EPUB Rendering

I think the core solution for consistently rendering EPUBs comes down to this:

  1. The document format needs to establish a subset of HTML which could represent most documents.
  2. Reading systems need to guarantee consistent rendering.
Portable HTML rendering requirement: reading systems must guarantee reasonable rendering.

Where To Go From Here?

Every time I have told someone “I want to replace PDF”, the statement has been met with extreme skepticism. Hopefully this document has convinced you that HTML-via-EPUB could potentially be a viable alternative.

But What About…

…security? You might dislike the idea that document authors can run arbitrary Javascript. But then again, you presumably use both a PDF reader and a web browser daily.

…privacy? EPUBs should not follow web trends in tracking and telemetry.

…aesthetics? People often intuit that LaTeX-generated PDFs look prettier than HTML documents.

…page citations? I think we should cite content by block numbers rather than pages.

\ No newline at end of file diff --git a/ref/examples/portable_epubs/pdf/portable_epubs.metadata.json b/ref/examples/portable_epubs/pdf/portable_epubs.metadata.json index 486966a..0ebc04e 100644 --- a/ref/examples/portable_epubs/pdf/portable_epubs.metadata.json +++ b/ref/examples/portable_epubs/pdf/portable_epubs.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 49262, - "page_count": 2 + "file_size": 9326, + "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/relative_path_links/html/child.html b/ref/examples/relative_path_links/html/child.html index 48e19aa..5ce5bd2 100644 --- a/ref/examples/relative_path_links/html/child.html +++ b/ref/examples/relative_path_links/html/child.html @@ -1,9 +1,4 @@ - - - - - - - -

Child Document

-

This document is in a subdirectory.

-

Link to Parent Directory

-

Go back to the root document.

-

Link to Sibling (Explicit Same Dir)

-

See the sibling in the same directory.

-

Link to Sibling (Implicit Same Dir)

-

Also see the sibling again with implicit path.

- - +

Child Document

This document is in a subdirectory.

Link to Parent Directory

Go back to the root document.

Link to Sibling (Explicit Same Dir)

See the sibling in the same directory.

Link to Sibling (Implicit Same Dir)

Also see the sibling again with implicit path.

\ No newline at end of file diff --git a/ref/examples/relative_path_links/html/root.html b/ref/examples/relative_path_links/html/root.html index 3fea1e1..bb05c3b 100644 --- a/ref/examples/relative_path_links/html/root.html +++ b/ref/examples/relative_path_links/html/root.html @@ -1,9 +1,4 @@ - - - - - - - -

Root Document

-

This is the root of the test project.

-

Links to Subdirectory

-

See the child document in the subdir.

-

Also check out the sibling.

-

More Content

-

This tests that subdirectory paths transform correctly.

- - +

Root Document

This is the root of the test project.

Links to Subdirectory

See the child document in the subdir.

Also check out the sibling.

More Content

This tests that subdirectory paths transform correctly.

\ No newline at end of file diff --git a/ref/examples/relative_path_links/html/sibling.html b/ref/examples/relative_path_links/html/sibling.html index e794814..7aa37b4 100644 --- a/ref/examples/relative_path_links/html/sibling.html +++ b/ref/examples/relative_path_links/html/sibling.html @@ -1,9 +1,4 @@ - - - - - - - -

Sibling Document

-

This is the sibling document in the subdirectory.

-

Link to Sibling

-

Go to the child document.

-

Link to Parent Directory

-

Return to root.

-

Content

-

Testing various relative path patterns.

- - +

Sibling Document

This is the sibling document in the subdirectory.

Link to Sibling

Go to the child document.

Link to Parent Directory

Return to root.

Content

Testing various relative path patterns.

\ No newline at end of file diff --git a/ref/examples/relative_path_links/pdf/relative_path_links.metadata.json b/ref/examples/relative_path_links/pdf/relative_path_links.metadata.json index b9fc5cd..4b863d7 100644 --- a/ref/examples/relative_path_links/pdf/relative_path_links.metadata.json +++ b/ref/examples/relative_path_links/pdf/relative_path_links.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 24877, + "file_size": 8045, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/script_injection/html/index.html b/ref/examples/script_injection/html/index.html index 52c72c7..c103893 100644 --- a/ref/examples/script_injection/html/index.html +++ b/ref/examples/script_injection/html/index.html @@ -1,10 +1 @@ - - - - - -

Test

-

Hello world.

- - - \ No newline at end of file +

Test

Hello world.

\ No newline at end of file diff --git a/ref/examples/script_injection_no_css/html/index.html b/ref/examples/script_injection_no_css/html/index.html index 0085aa5..cd4394e 100644 --- a/ref/examples/script_injection_no_css/html/index.html +++ b/ref/examples/script_injection_no_css/html/index.html @@ -1,7 +1,4 @@ - - - - - -

Test

-

Hello world.

- - - \ No newline at end of file +

Test

Hello world.

\ No newline at end of file diff --git a/ref/examples/severance_minusep_minus1/html/severance-ep-1.html b/ref/examples/severance_minusep_minus1/html/severance-ep-1.html index 84b9080..4173b5b 100644 --- a/ref/examples/severance_minusep_minus1/html/severance-ep-1.html +++ b/ref/examples/severance_minusep_minus1/html/severance-ep-1.html @@ -1,10 +1,4 @@ - - - - - - Good news about hell - Severance [s1/e1] - - -

Good news about hell - Severance [s1/e1]

- -

The first thing to notice is the colour palette. She is dressed in blue, but her hair is chestnut red. It spills out for the frame of her figure into the table around it, blockaded at its border by chairs and a carpet clad in green, yellow, then green again; then gray. The establishing shot is a bird’s eye view of an unknown woman who is soon revealed to have been put in the board room by someone else’s design, who learns about her predicament only by a man’s voice that emanates from the little device that rests on the table along with the woman, arranged so that it aims directly at her head.

-

This opening image is a graph of the subject’s predicament on the severed floor at Lumon. Blue is the company colour. Employees are almost invariably dressed in shades of it– navy, midnight, Prussian, Oxford, cobalt– and more reliably so as we work our way up the hierarchy. Red is unruly passion, the tone of tempers that itch to tear off the straitjacket directives, to disregulate the business-as-usual in which there is no obvious place for illicit activities. Green is the accent of Macro Data Refinement, the division of Lumon in which the show’s protagonists are employed. The device directs a man’s voice at a woman’s body in an attempt to keep her tempers in check, to ensure her firecraft does not smoke out the staid edifice of personality management, to order her “perceptual chronologies” accordingly. (Later in the episode, we learn that she almost manages to “break in” on the control room during that opening sequence: the solidity of its enclosure is threatened from the very first.)

-

It is instructive to attempt to articulate the dynamics that this graph indexes before we start talking about other scenes in the show. Graphs are not at one with what they represent, for in the decision to render ‘data’ in the very act of a representation, we both lose and gain distinction of the dynamics in question. The voice that opens Helly R up to the world of Lumon’s severed floor begins: “Who are you?” This question is a mistake. We retroactively learn, in a later scene, that Mark S was in fact supposed to begin with a less interrogative, more perfunctory: “Hi there, you on the table. I wonder if you’d mind taking a brief survey.” As Irving puts it: “You [Mark S] skipped the preamble”. Helly R is thrust, by this accident, immediately into questioning not only herself, but also the self-assurance of the voice that interrogates her. Does this voice in my head [she could be thinking] really know what it is doing? Or is it just a role of similarly confused actors struggling to stick to a badly written script?

-

This episode-length recap of the first episode names this graph ‘the Helly incident’, a poorly executed orientation of Helly’s newfound subjectivity that can be blamed at one level on Mark S (for starting with the wrong part of the manual), at another on Mr. Milchick (for misguiding Mark while he was distracted setting up the visual feed), on Ms. Cobel (for giving Mark Petey K’s old manual without redacting his obscurely scribbled notes and paper bookmarks), or even on Irving (for neglecting to intervene and clarify how Mark should begin being the more senior refiner in the situation: “Irving will be there to shadow. Just stick to the flowchart and escalate properly depending on dialectics.”). Wherever to place blame, there is doubtless a misconfiguration that takes place. Helly’s instinctual reaction seems to be to try to kill the voice pointed at her head, rather than to befriend it as Mark states he did (where Petey was Mark). (Helly will eventually have sex with the source of the voice, rather than murdering or fraternizing with it.) In this episode, however, Mark (the voice’s source) is physically assaulted by Helly, dented in his temple by the same vocalization device that mediated their first communication.

- -

So this is the Macro Data refiner’s situation. On the one hand, she is affronted with a voice that compels her to abide by the rules and permits her to enjoy some small reliefs (egress from a locked room) if she concedes to it. On the other, she is always teeming and thus flirting with red, considering escape routes that involve drawing blood, setting off alarms, or removing clothes.

-

This unruly red is what Macro Data Refinement’s greening procedures are supposed to contain to produce a completely controlled and scripted blot of blue. Perhaps this is why the glipse of the vacant desks planned for the severed floor’s expansion are draped in purple, for that shade of subjectivity would better incorporate the contrasting contours into a unified and taskable tone. The red that threatens Lumon’s corporate, calm, and collected blue (the Lumon logo is a water droplet that suspiciously resembles a camera) is splattered across scenes in the episode. It is, for example, the envelope that Petey slips Mark at the company-owned restaurant Pip’s with the suggestion that he should read it if he wants to know “what’s going on down there”. It is the sweater Mark wears to his sister’s dinnerless dinner party, punctuated by red place mats (“what a lot of people overlook, I think, is that life is not food”), where the ontological substance of his innie is called into question, and where we learn about the passions he has lost– the history of World War II, educating, whiskey– the last of which seems to have given way to an indiscriminate consumption of beer, wine, anything that will drown out the clarity of sober consciousness. It is the general hue of his sister’s house, which consisently wants him to question that placid blue of his company-subsidized housing at Baird Creek Manor.

-

This dinner tells us something more about the subject in question in Severance. Just as Helly’s outie had alerted us to the basic principle in the video her innie was shown in curiously lo-fi resolution to conclude her innie’s orientation– “perceptual chronologies… surgically split”– Mark’s predicament is comparably explained to him by another more or less ignorant (we can’t help but imagine) third party: “One’s memories are bifurcated, so when you’re at work, you have no recollection of what it is you do there.” As pretentious as they are, the dinner’s guests do seem to be attuned to an important dimension of the meaning of life, which is that it can’t only be about satiating biological needs such as food. What each individual ‘needs’ is a disharmonious melange of needs and demands, openings of desire that emerge not only through a graph of bare necessities– food, water, shelter– but also through capricious carapaces that emerge from more ambiguous pinings in the social sphere– company, care, love. The real question of Lumon’s smooth functioning is whether it will be able to effectively plug up these pinings, the incidental moments at work where one wonders what one is really doing with one’s life, whether the company can really manage its employees’ unsanctioned thoughts and the way in which those illicit ideas seep into the daily practice of their workerhood. More on the plasticity of our needs and drives to satisfy them in later posts.

- -

Ms. Cobel, in contrast to Helly’s and Mark’s doubtful and doubting red, is a stormy and icy blue. (We must wait until season two to uncover the historical and psychological depth of this colour for Harmony Cobel.) She is the figure with a body that seems to be the most in charge, of those we meet in this episode. Though Ms. Cobel is not a master in herself, it seems, for she too is subjected to a disembodied voice-via-device, ‘the board’, albeit which only appears evidently as an ear so far (“The board won’t be contributing to this meeting vocally”). Cobel is responsible for keeping the severed floor’s uncertainty in check, the ‘head’ that sits atop the variegated limbs of its disobedient body.

-

When Cobel reprimands Mark for his derailing of Helly’s orientation, she recalls an obscure and theological aspect of her parentage:

-
You know, my mother was an atheist. She used to say that there was good news and bad news about hell. The good news is, hell is just the product of a morbid human imagination. The bad news is, whatever humans can imagine, they can usually create.
-

At the close of the episode, just before Mark’s senile neighbor Mrs. Selvig (who we have only heard about through Mark’s voice thus far, when he is on the phone with her) visually reveals herself to be the same woman as Ms. Cobel, she gives a slightly different account of her heritage:

-
You know, my mother was a Catholic. She used to say it takes the saints eight hours to bless a sleeping child. I hope you aren’t rushing the saints.
-

It’s unclear at this point whether Cobel is a severed worker like Mark, or whether there is some other reason for her (strange, almost senseless) duplicity. Why lie about the religious leanings of one’s mother? Or maybe ‘mother’ is actually a name for something else, a kind of interim authority that gives synthetic weight to some hearsay, rumor, or idle phrase. (The other cameo of an ambiguously defined mother in this episode is in question five of Helly’s orientation survey: “To the best of your memory, what is or was the color of your mother’s eyes?”) Perhaps it is that, severed or not, atheist or Catholic, Cobel’s subjectivity is structured by a comparable split in her perceptual chronologies, whereby some memories (of her mother) get more airtime in her conscious experience of herself than others.

-

Severance flirts with this idea extensively, that the innie/outie dyad is analagous to the unconscious/conscious experience that we, as subjects, have of ourselves. Mark’s sister Devon hints at the psycho-logical reading of the severed condition in her diagnosis of Mark’s morose (outie) predicament as a state of failed therapy in response to mourning for his late wife: “I just feel like forgetting about her for eight hours a day isn’t the same thing as healing.” As with not-mothers and the plasticity of the drive, we will address the psychoanalytic implications here in later posts; but to finish I want to bring our attention to the imaging of time at work in just this first episode.

-

The fascinating details of failed synchronisation between all the watchfaces we see are enumerated in this Reddit thread. Many of the watch hands appear to be stalled, and the crossover from each to the next– as when Mark Scout switches his wrist watch in preparation for his elevator descent into the workday of innie Mark S– doesn’t match with our experience of the actors on screen. One of the few things we do know about the severance procedure is that it ‘alters perceptual chronologies’, and that this messing with a subject’s sense of time is thought to

-
    -
  1. make them more adequate or productive in a certain kind of work (for why else would Lumon go to the necessary lengths to sever some employees)
  2. -
  3. supposes to section off innie memories and experience from outie memories and experience
  4. -
-

So the subject’s subjectivity is marked by its sense of time, and Lumon’s success (profitability?) hinges in some way on altering their employees’ stable sense of it while in the space of the severed floor.

-

Mark S’s temporal predicament here has been explained by a man whose last name we get by speeding up the saying of his own, Karl Marx (Mar-k-S). Logically speaking, Marx argues, there is an amount of time that goes missing in the worker’s employment by way of a wage, when he advances some portion of his time to the capitalist in exchange for a pay-check one or more weeks later. I refer the reader interested in the details to chapter 20 of Capital Vol. I: but the essential point here is that it is through an obfuscation of the real value of a worker’s time that the capitalist manages to produce surplus-value. The production of this kind of time-distorted surplus-value is the engine of capitalism as a social relation that appears, on the surface, to be equally fair to capitalist and worker alike. So the project of controlling ‘perceptual chronologies’ with which Lumon seems to be so concerned is perhaps not as esoteric and inessential as it might at first seem. Perhaps it is an embodiment of the core ingredient of the company’s success as a company, of its incorporation as an entity that ought to be sustained even at the expense of its members’ happiness, their health, and their livelihoods.

-
-


-
- -
- - +

Good news about hell - Severance [s1/e1]

The first thing to notice is the colour palette. She is dressed in blue, but her hair is chestnut red. It spills out for the frame of her figure into the table around it, blockaded at its border by chairs and a carpet clad in green, yellow, then green again; then gray. The establishing shot is a bird’s eye view of an unknown woman who is soon revealed to have been put in the board room by someone else’s design, who learns about her predicament only by a man’s voice that emanates from the little device that rests on the table along with the woman, arranged so that it aims directly at her head.

This opening image is a graph of the subject’s predicament on the severed floor at Lumon. Blue is the company colour. Employees are almost invariably dressed in shades of it– navy, midnight, Prussian, Oxford, cobalt– and more reliably so as we work our way up the hierarchy. Red is unruly passion, the tone of tempers that itch to tear off the straitjacket directives, to disregulate the business-as-usual in which there is no obvious place for illicit activities. Green is the accent of Macro Data Refinement, the division of Lumon in which the show’s protagonists are employed. The device directs a man’s voice at a woman’s body in an attempt to keep her tempers in check, to ensure her firecraft does not smoke out the staid edifice of personality management, to order her “perceptual chronologies” accordingly. (Later in the episode, we learn that she almost manages to “break in” on the control room during that opening sequence: the solidity of its enclosure is threatened from the very first.)

It is instructive to attempt to articulate the dynamics that this graph indexes before we start talking about other scenes in the show. Graphs are not at one with what they represent, for in the decision to render ‘data’ in the very act of a representation, we both lose and gain distinction of the dynamics in question. The voice that opens Helly R up to the world of Lumon’s severed floor begins: “Who are you?” This question is a mistake. We retroactively learn, in a later scene, that Mark S was in fact supposed to begin with a less interrogative, more perfunctory: “Hi there, you on the table. I wonder if you’d mind taking a brief survey.” As Irving puts it: “You [Mark S] skipped the preamble”. Helly R is thrust, by this accident, immediately into questioning not only herself, but also the self-assurance of the voice that interrogates her. Does this voice in my head [she could be thinking] really know what it is doing? Or is it just a role of similarly confused actors struggling to stick to a badly written script?

This episode-length recap of the first episode names this graph ‘the Helly incident’, a poorly executed orientation of Helly’s newfound subjectivity that can be blamed at one level on Mark S (for starting with the wrong part of the manual), at another on Mr. Milchick (for misguiding Mark while he was distracted setting up the visual feed), on Ms. Cobel (for giving Mark Petey K’s old manual without redacting his obscurely scribbled notes and paper bookmarks), or even on Irving (for neglecting to intervene and clarify how Mark should begin being the more senior refiner in the situation: “Irving will be there to shadow. Just stick to the flowchart and escalate properly depending on dialectics.”). Wherever to place blame, there is doubtless a misconfiguration that takes place. Helly’s instinctual reaction seems to be to try to kill the voice pointed at her head, rather than to befriend it as Mark states he did (where Petey was Mark). (Helly will eventually have sex with the source of the voice, rather than murdering or fraternizing with it.) In this episode, however, Mark (the voice’s source) is physically assaulted by Helly, dented in his temple by the same vocalization device that mediated their first communication.

So this is the Macro Data refiner’s situation. On the one hand, she is affronted with a voice that compels her to abide by the rules and permits her to enjoy some small reliefs (egress from a locked room) if she concedes to it. On the other, she is always teeming and thus flirting with red, considering escape routes that involve drawing blood, setting off alarms, or removing clothes.

This unruly red is what Macro Data Refinement’s greening procedures are supposed to contain to produce a completely controlled and scripted blot of blue. Perhaps this is why the glipse of the vacant desks planned for the severed floor’s expansion are draped in purple, for that shade of subjectivity would better incorporate the contrasting contours into a unified and taskable tone. The red that threatens Lumon’s corporate, calm, and collected blue (the Lumon logo is a water droplet that suspiciously resembles a camera) is splattered across scenes in the episode. It is, for example, the envelope that Petey slips Mark at the company-owned restaurant Pip’s with the suggestion that he should read it if he wants to know “what’s going on down there”. It is the sweater Mark wears to his sister’s dinnerless dinner party, punctuated by red place mats (“what a lot of people overlook, I think, is that life is not food”), where the ontological substance of his innie is called into question, and where we learn about the passions he has lost– the history of World War II, educating, whiskey– the last of which seems to have given way to an indiscriminate consumption of beer, wine, anything that will drown out the clarity of sober consciousness. It is the general hue of his sister’s house, which consisently wants him to question that placid blue of his company-subsidized housing at Baird Creek Manor.

This dinner tells us something more about the subject in question in Severance. Just as Helly’s outie had alerted us to the basic principle in the video her innie was shown in curiously lo-fi resolution to conclude her innie’s orientation– “perceptual chronologies… surgically split”– Mark’s predicament is comparably explained to him by another more or less ignorant (we can’t help but imagine) third party: “One’s memories are bifurcated, so when you’re at work, you have no recollection of what it is you do there.” As pretentious as they are, the dinner’s guests do seem to be attuned to an important dimension of the meaning of life, which is that it can’t only be about satiating biological needs such as food. What each individual ‘needs’ is a disharmonious melange of needs and demands, openings of desire that emerge not only through a graph of bare necessities– food, water, shelter– but also through capricious carapaces that emerge from more ambiguous pinings in the social sphere– company, care, love. The real question of Lumon’s smooth functioning is whether it will be able to effectively plug up these pinings, the incidental moments at work where one wonders what one is really doing with one’s life, whether the company can really manage its employees’ unsanctioned thoughts and the way in which those illicit ideas seep into the daily practice of their workerhood. More on the plasticity of our needs and drives to satisfy them in later posts.

Ms. Cobel, in contrast to Helly’s and Mark’s doubtful and doubting red, is a stormy and icy blue. (We must wait until season two to uncover the historical and psychological depth of this colour for Harmony Cobel.) She is the figure with a body that seems to be the most in charge, of those we meet in this episode. Though Ms. Cobel is not a master in herself, it seems, for she too is subjected to a disembodied voice-via-device, ‘the board’, albeit which only appears evidently as an ear so far (“The board won’t be contributing to this meeting vocally”). Cobel is responsible for keeping the severed floor’s uncertainty in check, the ‘head’ that sits atop the variegated limbs of its disobedient body.

When Cobel reprimands Mark for his derailing of Helly’s orientation, she recalls an obscure and theological aspect of her parentage:

You know, my mother was an atheist. She used to say that there was good news and bad news about hell. The good news is, hell is just the product of a morbid human imagination. The bad news is, whatever humans can imagine, they can usually create.

At the close of the episode, just before Mark’s senile neighbor Mrs. Selvig (who we have only heard about through Mark’s voice thus far, when he is on the phone with her) visually reveals herself to be the same woman as Ms. Cobel, she gives a slightly different account of her heritage:

You know, my mother was a Catholic. She used to say it takes the saints eight hours to bless a sleeping child. I hope you aren’t rushing the saints.

It’s unclear at this point whether Cobel is a severed worker like Mark, or whether there is some other reason for her (strange, almost senseless) duplicity. Why lie about the religious leanings of one’s mother? Or maybe ‘mother’ is actually a name for something else, a kind of interim authority that gives synthetic weight to some hearsay, rumor, or idle phrase. (The other cameo of an ambiguously defined mother in this episode is in question five of Helly’s orientation survey: “To the best of your memory, what is or was the color of your mother’s eyes?”) Perhaps it is that, severed or not, atheist or Catholic, Cobel’s subjectivity is structured by a comparable split in her perceptual chronologies, whereby some memories (of her mother) get more airtime in her conscious experience of herself than others.

Severance flirts with this idea extensively, that the innie/outie dyad is analagous to the unconscious/conscious experience that we, as subjects, have of ourselves. Mark’s sister Devon hints at the psycho-logical reading of the severed condition in her diagnosis of Mark’s morose (outie) predicament as a state of failed therapy in response to mourning for his late wife: “I just feel like forgetting about her for eight hours a day isn’t the same thing as healing.” As with not-mothers and the plasticity of the drive, we will address the psychoanalytic implications here in later posts; but to finish I want to bring our attention to the imaging of time at work in just this first episode.

The fascinating details of failed synchronisation between all the watchfaces we see are enumerated in this Reddit thread. Many of the watch hands appear to be stalled, and the crossover from each to the next– as when Mark Scout switches his wrist watch in preparation for his elevator descent into the workday of innie Mark S– doesn’t match with our experience of the actors on screen. One of the few things we do know about the severance procedure is that it ‘alters perceptual chronologies’, and that this messing with a subject’s sense of time is thought to

  1. make them more adequate or productive in a certain kind of work (for why else would Lumon go to the necessary lengths to sever some employees)
  2. supposes to section off innie memories and experience from outie memories and experience

So the subject’s subjectivity is marked by its sense of time, and Lumon’s success (profitability?) hinges in some way on altering their employees’ stable sense of it while in the space of the severed floor.

Mark S’s temporal predicament here has been explained by a man whose last name we get by speeding up the saying of his own, Karl Marx (Mar-k-S). Logically speaking, Marx argues, there is an amount of time that goes missing in the worker’s employment by way of a wage, when he advances some portion of his time to the capitalist in exchange for a pay-check one or more weeks later. I refer the reader interested in the details to chapter 20 of Capital Vol. I: but the essential point here is that it is through an obfuscation of the real value of a worker’s time that the capitalist manages to produce surplus-value. The production of this kind of time-distorted surplus-value is the engine of capitalism as a social relation that appears, on the surface, to be equally fair to capitalist and worker alike. So the project of controlling ‘perceptual chronologies’ with which Lumon seems to be so concerned is perhaps not as esoteric and inessential as it might at first seem. Perhaps it is an embodiment of the core ingredient of the company’s success as a company, of its incorporation as an entity that ought to be sustained even at the expense of its members’ happiness, their health, and their livelihoods.

\ No newline at end of file diff --git a/ref/examples/severance_minusep_minus1/pdf/severance-ep-1.metadata.json b/ref/examples/severance_minusep_minus1/pdf/severance-ep-1.metadata.json index 4fb48c5..30d84bd 100644 --- a/ref/examples/severance_minusep_minus1/pdf/severance-ep-1.metadata.json +++ b/ref/examples/severance_minusep_minus1/pdf/severance-ep-1.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 942321, - "page_count": 5 + "file_size": 896869, + "page_count": 2 } \ No newline at end of file diff --git a/ref/examples/target_function/epub/target_function.metadata.json b/ref/examples/target_function/epub/target_function.metadata.json index 4bdc0c6..c66d907 100644 --- a/ref/examples/target_function/epub/target_function.metadata.json +++ b/ref/examples/target_function/epub/target_function.metadata.json @@ -1,6 +1,6 @@ { "filetype": "epub", - "file_size": 2911, + "file_size": 2875, "title": "Target Function", "language": "en", "spine_files": [ diff --git a/ref/examples/target_function/epub/xhtml/main.xhtml b/ref/examples/target_function/epub/xhtml/main.xhtml index 99b3578..b0d1496 100644 --- a/ref/examples/target_function/epub/xhtml/main.xhtml +++ b/ref/examples/target_function/epub/xhtml/main.xhtml @@ -1,15 +1,3 @@ - - - - -
-

Target Function Test

-

This test verifies that the target() function returns format-specific values.

-

Current format: epub

-

Conditional Content

-

EPUB-specific content: This appears only in EPUB output

- - -
\ No newline at end of file +

Target Function Test

This test verifies that the target() function returns format-specific values.

Current format: epub

Conditional Content

EPUB-specific content: This appears only in EPUB output

\ No newline at end of file diff --git a/ref/examples/target_function/html/main.html b/ref/examples/target_function/html/main.html index 15fc8bd..73c49c8 100644 --- a/ref/examples/target_function/html/main.html +++ b/ref/examples/target_function/html/main.html @@ -1,9 +1,4 @@ - - - - - - - -

Target Function Test

-

This test verifies that the target() function returns format-specific values.

-

Current format: html

-

Conditional Content

-

HTML-specific content: This appears only in HTML output

- - +

Target Function Test

This test verifies that the target() function returns format-specific values.

Current format: html

Conditional Content

HTML-specific content: This appears only in HTML output

\ No newline at end of file diff --git a/ref/examples/target_function/pdf/main.metadata.json b/ref/examples/target_function/pdf/main.metadata.json index 6dd3f58..55694bd 100644 --- a/ref/examples/target_function/pdf/main.metadata.json +++ b/ref/examples/target_function/pdf/main.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 21381, + "file_size": 2801, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/target_function_in_module/epub/target_function_in_module.metadata.json b/ref/examples/target_function_in_module/epub/target_function_in_module.metadata.json index bb56d55..11ef6bb 100644 --- a/ref/examples/target_function_in_module/epub/target_function_in_module.metadata.json +++ b/ref/examples/target_function_in_module/epub/target_function_in_module.metadata.json @@ -1,6 +1,6 @@ { "filetype": "epub", - "file_size": 3071, + "file_size": 3025, "title": "Target Function in Module", "language": "en", "spine_files": [ diff --git a/ref/examples/target_function_in_module/epub/xhtml/main.xhtml b/ref/examples/target_function_in_module/epub/xhtml/main.xhtml index 54deaa3..42ad287 100644 --- a/ref/examples/target_function_in_module/epub/xhtml/main.xhtml +++ b/ref/examples/target_function_in_module/epub/xhtml/main.xhtml @@ -1,17 +1,3 @@ - - - - -
-

Target Function in Module

-

Main File

-

Main: epub

-

Imported Module

-

Module returns: epub

-

Module Conditional

-

Module: EPUB

- - -
\ No newline at end of file +

Target Function in Module

Main File

Main: epub

Imported Module

Module returns: epub

Module Conditional

Module: EPUB

\ No newline at end of file diff --git a/ref/examples/target_function_in_module/html/format_helper.html b/ref/examples/target_function_in_module/html/format_helper.html index a6c80d5..8651c55 100644 --- a/ref/examples/target_function_in_module/html/format_helper.html +++ b/ref/examples/target_function_in_module/html/format_helper.html @@ -1,9 +1,4 @@ - - - - - - - - + \ No newline at end of file diff --git a/ref/examples/target_function_in_module/html/main.html b/ref/examples/target_function_in_module/html/main.html index 75a1d52..0353c45 100644 --- a/ref/examples/target_function_in_module/html/main.html +++ b/ref/examples/target_function_in_module/html/main.html @@ -1,9 +1,4 @@ - - - - - - - -

Target Function in Module

-

Main File

-

Main: html

-

Imported Module

-

Module returns: html

-

Module Conditional

-

Module: HTML

- - +

Target Function in Module

Main File

Main: html

Imported Module

Module returns: html

Module Conditional

Module: HTML

\ No newline at end of file diff --git a/ref/examples/target_function_in_module/pdf/format_helper.metadata.json b/ref/examples/target_function_in_module/pdf/format_helper.metadata.json index d4deaae..b0948cc 100644 --- a/ref/examples/target_function_in_module/pdf/format_helper.metadata.json +++ b/ref/examples/target_function_in_module/pdf/format_helper.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 2123, + "file_size": 1966, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/target_function_in_module/pdf/main.metadata.json b/ref/examples/target_function_in_module/pdf/main.metadata.json index 48b18d6..c2a050b 100644 --- a/ref/examples/target_function_in_module/pdf/main.metadata.json +++ b/ref/examples/target_function_in_module/pdf/main.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 14387, + "file_size": 3199, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/target_function_in_package/epub/target_function_in_package.metadata.json b/ref/examples/target_function_in_package/epub/target_function_in_package.metadata.json index b8322ad..4f1a3c4 100644 --- a/ref/examples/target_function_in_package/epub/target_function_in_package.metadata.json +++ b/ref/examples/target_function_in_package/epub/target_function_in_package.metadata.json @@ -1,6 +1,6 @@ { "filetype": "epub", - "file_size": 2966, + "file_size": 2930, "title": "Target Function in Package", "language": "en", "spine_files": [ diff --git a/ref/examples/target_function_in_package/epub/xhtml/main.xhtml b/ref/examples/target_function_in_package/epub/xhtml/main.xhtml index 4fef17e..4b90726 100644 --- a/ref/examples/target_function_in_package/epub/xhtml/main.xhtml +++ b/ref/examples/target_function_in_package/epub/xhtml/main.xhtml @@ -1,15 +1,3 @@ - - - - -
-

Target Function in Package

-

Using bullseye package

-

Package sees: html

-

Using target()

-

Main file target: epub

- - -
\ No newline at end of file +

Target Function in Package

Using bullseye package

Package sees: html

Using target()

Main file target: epub

\ No newline at end of file diff --git a/ref/examples/target_function_in_package/html/main.html b/ref/examples/target_function_in_package/html/main.html index a00e9c7..21513fd 100644 --- a/ref/examples/target_function_in_package/html/main.html +++ b/ref/examples/target_function_in_package/html/main.html @@ -1,9 +1,4 @@ - - - - - - - -

Target Function in Package

-

Using bullseye package

-

Package sees: html

-

Using target()

-

Main file target: html

- - +

Target Function in Package

Using bullseye package

Package sees: html

Using target()

Main file target: html

\ No newline at end of file diff --git a/src/helpers/comparison.rs b/src/helpers/comparison.rs index ab3c939..f8c3933 100644 --- a/src/helpers/comparison.rs +++ b/src/helpers/comparison.rs @@ -312,14 +312,23 @@ fn validate_binary_file_from_metadata( if let Ok(json_str) = fs::read_to_string(&metadata_path) && let Ok(metadata) = serde_json::from_str::(&json_str) { - let build_relative_path = metadata - .path - .as_ref() - .map(|p| extract_build_relative_path(p)) - .unwrap_or_else(|| { + // CSS paths are stored as build-relative directly; other binary files + // store a repo-relative path that needs the first 2 components stripped. + let build_relative_path = if metadata.filetype == "css" { + metadata.path.as_ref().map(PathBuf::from).unwrap_or_else(|| { let file_str = metadata_file.to_string_lossy(); PathBuf::from(file_str.strip_suffix(".metadata.json").unwrap_or(&file_str)) - }); + }) + } else { + metadata + .path + .as_ref() + .map(|p| extract_build_relative_path(p)) + .unwrap_or_else(|| { + let file_str = metadata_file.to_string_lossy(); + PathBuf::from(file_str.strip_suffix(".metadata.json").unwrap_or(&file_str)) + }) + }; let actual_file_path = actual_dir.join(&build_relative_path); @@ -371,14 +380,21 @@ fn build_expected_files_set( if let Ok(json_str) = fs::read_to_string(&metadata_path) && let Ok(metadata) = serde_json::from_str::(&json_str) { - let build_relative_path = metadata - .path - .as_ref() - .map(|p| extract_build_relative_path(p)) - .unwrap_or_else(|| { + let build_relative_path = if metadata.filetype == "css" { + metadata.path.as_ref().map(PathBuf::from).unwrap_or_else(|| { let file_str = metadata_file.to_string_lossy(); PathBuf::from(file_str.strip_suffix(".metadata.json").unwrap_or(&file_str)) - }); + }) + } else { + metadata + .path + .as_ref() + .map(|p| extract_build_relative_path(p)) + .unwrap_or_else(|| { + let file_str = metadata_file.to_string_lossy(); + PathBuf::from(file_str.strip_suffix(".metadata.json").unwrap_or(&file_str)) + }) + }; expected_files.insert(build_relative_path); } } diff --git a/tests/harness.rs b/tests/harness.rs index 969e92b..6f57301 100644 --- a/tests/harness.rs +++ b/tests/harness.rs @@ -43,6 +43,7 @@ use std::path::PathBuf; #[test_case("cases/error_formatting/array_index_error.typ")] #[test_case("cases/merged_subdir_imports")] #[test_case("cases/rheo_package_slides")] +#[test_case("cases/math")] #[test_case("store/compat/merged-imports")] fn run_test_case(name: &str) { let test_case = TestCase::new(name); From 09c71c0e03f27ef8c815e21322c0175e5ef5b217 Mon Sep 17 00:00:00 2001 From: Lachlan Kermode Date: Fri, 26 Jun 2026 16:06:15 +0200 Subject: [PATCH 5/7] Removes CI workflow (CI lives in rheo repo); updates README to reflect branch naming convention --- .github/workflows/ci.yml | 77 ---------------------------------------- README.md | 33 ++++++++--------- 2 files changed, 14 insertions(+), 96 deletions(-) delete mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 15785ef..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: CI - -on: - push: - branches: [main] - pull_request: - workflow_dispatch: - inputs: - rheo_ref: - description: 'rheo branch/ref to test against (overrides branch-name convention)' - default: '' - required: false - -jobs: - ci: - name: CI - runs-on: ubuntu-latest - steps: - - name: Checkout rheo-tests - uses: actions/checkout@v5 - - - name: Determine rheo ref - id: rheo-ref - shell: bash - run: | - # Priority: workflow_dispatch input > branch convention > main - if [ -n "${{ inputs.rheo_ref }}" ]; then - echo "ref=${{ inputs.rheo_ref }}" >> "$GITHUB_OUTPUT" - else - BRANCH="${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}" - if [[ "$BRANCH" == rheo/* ]]; then - echo "ref=${BRANCH#rheo/}" >> "$GITHUB_OUTPUT" - else - echo "ref=main" >> "$GITHUB_OUTPUT" - fi - fi - - - name: Clone rheo at resolved ref - shell: bash - run: | - git clone --depth 1 --branch "${{ steps.rheo-ref.outputs.ref }}" \ - https://github.com/freecomputinglab/rheo.git ../rheo - - - name: Setup Rust toolchain - uses: dtolnay/rust-toolchain@stable - - - name: Cache cargo dependencies - uses: Swatinem/rust-cache@v2 - - - name: Install pnpm - uses: pnpm/action-setup@v5 - with: - version: "10.21.0" - - - name: Set up Node.js - uses: actions/setup-node@v5 - with: - node-version: '24' - - - name: Install just - uses: extractions/setup-just@v2 - - - name: Build @rheo packages into cache - shell: bash - run: | - rm -rf "$HOME/.cache/typst/packages/rheo" - mkdir -p "$HOME/.cache/typst/packages" - git clone https://github.com/freecomputinglab/rheo-packages.git \ - "$HOME/.cache/typst/packages/rheo" - cd "$HOME/.cache/typst/packages/rheo" - just build - - - name: Run tests - run: cargo test --test harness - env: - RHEO_MANIFEST: ../rheo/Cargo.toml - TYPST_IGNORE_SYSTEM_FONTS: "1" diff --git a/README.md b/README.md index 810c46b..e630e52 100644 --- a/README.md +++ b/README.md @@ -32,30 +32,26 @@ just build ## CI -The CI workflow (`.github/workflows/ci.yml`) runs on push to `main`, all pull requests, and `workflow_dispatch`. +CI lives entirely in the main rheo repo (`.github/workflows/ci.yml`). rheo-tests has no CI of its own — it is cloned as a sibling by rheo's CI at test time. -### Testing against a specific rheo branch +### Branch naming convention -By default CI clones rheo `main`. To test against a different rheo branch, use the **branch naming convention**: name the rheo-tests branch `rheo/` and CI will automatically test against that rheo branch. - -Example: to test the rheo-tests changes against rheo PR branch `feat/typst-v0.15.0`, create a rheo-tests branch named `rheo/feat/typst-v0.15.0`. The CI step resolves: +When a rheo-tests change needs to pair with a rheo PR, name the rheo-tests branch `rheo/`. Rheo's CI auto-detects this and clones the paired branch instead of `main`: ``` -rheo-tests branch → rheo ref used -──────────────────────────────────────── -rheo/feat/my-feature → feat/my-feature -add-slides-test → main (default) -main → main (default) +rheo branch → rheo-tests branch cloned by rheo CI +──────────────────────────────────────────────────────────── +feat/typst-v0.15.0 → rheo/feat/typst-v0.15.0 (if exists, else main) +main → main +fix/some-bug → main (no paired branch) ``` -You can also override via `workflow_dispatch` → `rheo_ref` input, which takes priority over the branch convention. - ### Merge order -When a rheo-tests PR targets a rheo PR: +When a rheo-tests PR pairs with a rheo PR: -1. Merge the rheo-tests PR first (it tests against the rheo branch; once green, merge) -2. Then merge the rheo PR (rheo's own CI clones rheo-tests `main` as a sibling) +1. Merge the rheo-tests PR first (snapshots land on `main`) +2. Then merge the rheo PR (rheo CI now uses rheo-tests `main`, which already has the updated snapshots) ## Test Structure @@ -85,10 +81,9 @@ When a rheo-tests PR targets a rheo PR: │ │ │ └── epub/ │ │ └── blog_post/ │ └── cases/ -├── store/ # Compat test fixtures (committed) -│ └── compat/ -│ └── merged-imports/ -└── .github/ # CI workflows +└── store/ # Compat test fixtures (committed) + └── compat/ + └── merged-imports/ ``` ## Running Tests From faf8ecf09377e22577e754d80abd41c9036cb6aa Mon Sep 17 00:00:00 2001 From: Lachlan Kermode Date: Fri, 26 Jun 2026 16:14:20 +0200 Subject: [PATCH 6/7] Removes stale @rheo package install instructions: packages now fetched on demand --- README.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/README.md b/README.md index e630e52..757d497 100644 --- a/README.md +++ b/README.md @@ -16,19 +16,6 @@ git clone https://github.com/freecomputinglab/rheo.git ../rheo The `Cargo.toml` path dependencies point to `../rheo/crates/*`. -### 2. Install @rheo/* Typst packages - -Some tests require the `@rheo/*` Typst packages (for `#import "@rheo/..."` syntax). Install them: - -```bash -# Clone rheo-packages into the Typst package cache -git clone https://github.com/freecomputinglab/rheo-packages.git ~/.cache/typst/packages/rheo - -# Build the packages (requires pnpm 10+ and Node 22+) -cd ~/.cache/typst/packages/rheo -pnpm install -just build -``` ## CI From 7886dfb3c5c0a41538be153a39c7308dfb0d196e Mon Sep 17 00:00:00 2001 From: Lachlan Kermode Date: Fri, 26 Jun 2026 18:43:04 +0200 Subject: [PATCH 7/7] Re-baselines PDF metadata snapshots for always-embedded Typst fonts --- .../code_blocks_with_links/pdf/code_examples.metadata.json | 2 +- ref/examples/cover_minusletter/pdf/cover-letter.metadata.json | 4 ++-- .../pdf/cross_directory_links.metadata.json | 2 +- ref/examples/index/pdf/index.metadata.json | 2 +- .../pdf/link_path_edge_cases.metadata.json | 2 +- .../pdf/links_with_fragments.metadata.json | 2 +- ref/examples/merged-imports/pdf/merged-imports.metadata.json | 2 +- .../pdf/merged_subdir_imports.metadata.json | 2 +- .../pdf/multiple_links_inline.metadata.json | 2 +- ref/examples/pdf_individual/pdf/chapter1.metadata.json | 2 +- ref/examples/pdf_individual/pdf/chapter2.metadata.json | 2 +- ref/examples/pdf_merge_false/pdf/a.metadata.json | 2 +- ref/examples/pdf_merge_false/pdf/c.metadata.json | 2 +- ref/examples/portable_epubs/pdf/portable_epubs.metadata.json | 4 ++-- .../relative_path_links/pdf/relative_path_links.metadata.json | 2 +- .../severance_minusep_minus1/pdf/severance-ep-1.metadata.json | 4 ++-- ref/examples/target_function/pdf/main.metadata.json | 2 +- ref/examples/target_function_in_module/pdf/main.metadata.json | 2 +- 18 files changed, 21 insertions(+), 21 deletions(-) diff --git a/ref/examples/code_blocks_with_links/pdf/code_examples.metadata.json b/ref/examples/code_blocks_with_links/pdf/code_examples.metadata.json index 7aa11fb..9e23634 100644 --- a/ref/examples/code_blocks_with_links/pdf/code_examples.metadata.json +++ b/ref/examples/code_blocks_with_links/pdf/code_examples.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 3796, + "file_size": 25565, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/cover_minusletter/pdf/cover-letter.metadata.json b/ref/examples/cover_minusletter/pdf/cover-letter.metadata.json index 1d3e73c..24ed12e 100644 --- a/ref/examples/cover_minusletter/pdf/cover-letter.metadata.json +++ b/ref/examples/cover_minusletter/pdf/cover-letter.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 1212364, - "page_count": 1 + "file_size": 1237240, + "page_count": 2 } \ No newline at end of file diff --git a/ref/examples/cross_directory_links/pdf/cross_directory_links.metadata.json b/ref/examples/cross_directory_links/pdf/cross_directory_links.metadata.json index 85fb700..44b9ff6 100644 --- a/ref/examples/cross_directory_links/pdf/cross_directory_links.metadata.json +++ b/ref/examples/cross_directory_links/pdf/cross_directory_links.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 8346, + "file_size": 23644, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/index/pdf/index.metadata.json b/ref/examples/index/pdf/index.metadata.json index 86519d7..4401ecf 100644 --- a/ref/examples/index/pdf/index.metadata.json +++ b/ref/examples/index/pdf/index.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 3692, + "file_size": 17619, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/link_path_edge_cases/pdf/link_path_edge_cases.metadata.json b/ref/examples/link_path_edge_cases/pdf/link_path_edge_cases.metadata.json index 62622a1..153a168 100644 --- a/ref/examples/link_path_edge_cases/pdf/link_path_edge_cases.metadata.json +++ b/ref/examples/link_path_edge_cases/pdf/link_path_edge_cases.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 7173, + "file_size": 21403, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/links_with_fragments/pdf/links_with_fragments.metadata.json b/ref/examples/links_with_fragments/pdf/links_with_fragments.metadata.json index a3438ad..7dd6399 100644 --- a/ref/examples/links_with_fragments/pdf/links_with_fragments.metadata.json +++ b/ref/examples/links_with_fragments/pdf/links_with_fragments.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 4696, + "file_size": 16777, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/merged-imports/pdf/merged-imports.metadata.json b/ref/examples/merged-imports/pdf/merged-imports.metadata.json index 0b31af4..acc1e22 100644 --- a/ref/examples/merged-imports/pdf/merged-imports.metadata.json +++ b/ref/examples/merged-imports/pdf/merged-imports.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 2591, + "file_size": 11215, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/merged_subdir_imports/pdf/merged_subdir_imports.metadata.json b/ref/examples/merged_subdir_imports/pdf/merged_subdir_imports.metadata.json index ee37487..c76b716 100644 --- a/ref/examples/merged_subdir_imports/pdf/merged_subdir_imports.metadata.json +++ b/ref/examples/merged_subdir_imports/pdf/merged_subdir_imports.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 2740, + "file_size": 12643, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/multiple_links_inline/pdf/multiple_links_inline.metadata.json b/ref/examples/multiple_links_inline/pdf/multiple_links_inline.metadata.json index 447c33a..36d577e 100644 --- a/ref/examples/multiple_links_inline/pdf/multiple_links_inline.metadata.json +++ b/ref/examples/multiple_links_inline/pdf/multiple_links_inline.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 3546, + "file_size": 15943, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/pdf_individual/pdf/chapter1.metadata.json b/ref/examples/pdf_individual/pdf/chapter1.metadata.json index cd96713..f07cd38 100644 --- a/ref/examples/pdf_individual/pdf/chapter1.metadata.json +++ b/ref/examples/pdf_individual/pdf/chapter1.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 2417, + "file_size": 10454, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/pdf_individual/pdf/chapter2.metadata.json b/ref/examples/pdf_individual/pdf/chapter2.metadata.json index cd96713..b4a06f3 100644 --- a/ref/examples/pdf_individual/pdf/chapter2.metadata.json +++ b/ref/examples/pdf_individual/pdf/chapter2.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 2417, + "file_size": 10490, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/pdf_merge_false/pdf/a.metadata.json b/ref/examples/pdf_merge_false/pdf/a.metadata.json index eb46bf9..3e964dc 100644 --- a/ref/examples/pdf_merge_false/pdf/a.metadata.json +++ b/ref/examples/pdf_merge_false/pdf/a.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 2391, + "file_size": 8135, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/pdf_merge_false/pdf/c.metadata.json b/ref/examples/pdf_merge_false/pdf/c.metadata.json index eb46bf9..28ad917 100644 --- a/ref/examples/pdf_merge_false/pdf/c.metadata.json +++ b/ref/examples/pdf_merge_false/pdf/c.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 2391, + "file_size": 7774, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/portable_epubs/pdf/portable_epubs.metadata.json b/ref/examples/portable_epubs/pdf/portable_epubs.metadata.json index 0ebc04e..9d7a1dd 100644 --- a/ref/examples/portable_epubs/pdf/portable_epubs.metadata.json +++ b/ref/examples/portable_epubs/pdf/portable_epubs.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 9326, - "page_count": 1 + "file_size": 44405, + "page_count": 2 } \ No newline at end of file diff --git a/ref/examples/relative_path_links/pdf/relative_path_links.metadata.json b/ref/examples/relative_path_links/pdf/relative_path_links.metadata.json index 4b863d7..99fb6ff 100644 --- a/ref/examples/relative_path_links/pdf/relative_path_links.metadata.json +++ b/ref/examples/relative_path_links/pdf/relative_path_links.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 8045, + "file_size": 22015, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/severance_minusep_minus1/pdf/severance-ep-1.metadata.json b/ref/examples/severance_minusep_minus1/pdf/severance-ep-1.metadata.json index 30d84bd..bcfa57f 100644 --- a/ref/examples/severance_minusep_minus1/pdf/severance-ep-1.metadata.json +++ b/ref/examples/severance_minusep_minus1/pdf/severance-ep-1.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 896869, - "page_count": 2 + "file_size": 937054, + "page_count": 5 } \ No newline at end of file diff --git a/ref/examples/target_function/pdf/main.metadata.json b/ref/examples/target_function/pdf/main.metadata.json index 55694bd..df7d5e8 100644 --- a/ref/examples/target_function/pdf/main.metadata.json +++ b/ref/examples/target_function/pdf/main.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 2801, + "file_size": 19263, "page_count": 1 } \ No newline at end of file diff --git a/ref/examples/target_function_in_module/pdf/main.metadata.json b/ref/examples/target_function_in_module/pdf/main.metadata.json index c2a050b..26b0ea6 100644 --- a/ref/examples/target_function_in_module/pdf/main.metadata.json +++ b/ref/examples/target_function_in_module/pdf/main.metadata.json @@ -1,5 +1,5 @@ { "filetype": "pdf", - "file_size": 3199, + "file_size": 12725, "page_count": 1 } \ No newline at end of file