From af140f2bc150dc78344c7bb1bcba1179095ec7ce Mon Sep 17 00:00:00 2001 From: Davide Alberani Date: Sun, 16 Dec 2018 11:04:47 +0100 Subject: [PATCH] initial version --- .gitignore | 59 + Gruntfile.js | 192 +++ LICENSE.revealjs | 19 + README.md | 25 + bower.json | 27 + css/git-crash-course.css | 15 + css/print/paper.css | 203 +++ css/print/pdf.css | 172 ++ css/reveal.css | 1387 ++++++++++++++++ css/reveal.scss | 1469 +++++++++++++++++ css/theme/README.md | 21 + css/theme/beige.css | 296 ++++ css/theme/black.css | 292 ++++ css/theme/blood.css | 315 ++++ css/theme/league.css | 298 ++++ css/theme/moon.css | 296 ++++ css/theme/night.css | 290 ++++ css/theme/serif.css | 292 ++++ css/theme/simple.css | 295 ++++ css/theme/sky.css | 299 ++++ css/theme/solarized.css | 296 ++++ css/theme/source/beige.scss | 39 + css/theme/source/black.scss | 49 + css/theme/source/blood.scss | 78 + css/theme/source/league.scss | 34 + css/theme/source/moon.scss | 57 + css/theme/source/night.scss | 34 + css/theme/source/serif.scss | 35 + css/theme/source/simple.scss | 43 + css/theme/source/sky.scss | 46 + css/theme/source/solarized.scss | 63 + css/theme/source/white.scss | 49 + css/theme/template/mixins.scss | 29 + css/theme/template/settings.scss | 43 + css/theme/template/theme.scss | 352 ++++ css/theme/white.css | 292 ++++ css/zoom.css | 33 + git-crash-course-en.md | 998 +++++++++++ images/branch-commit.odg | Bin 0 -> 10582 bytes images/branch-commit.png | Bin 0 -> 17597 bytes images/branch-conflict-solved.odg | Bin 0 -> 11134 bytes images/branch-conflict-solved.png | Bin 0 -> 26746 bytes images/branch-conflict.odg | Bin 0 -> 10776 bytes images/branch-conflict.png | Bin 0 -> 20728 bytes images/branch-create-move.odg | Bin 0 -> 10076 bytes images/branch-create-move.png | Bin 0 -> 12036 bytes images/branch-ff.odg | Bin 0 -> 10357 bytes images/branch-ff.png | Bin 0 -> 15255 bytes images/branch-prototype.odg | Bin 0 -> 10548 bytes images/cherry-pick.odg | Bin 0 -> 12941 bytes images/cherry-pick.png | Bin 0 -> 40145 bytes images/file-states.odg | Bin 0 -> 12694 bytes images/file-states.png | Bin 0 -> 38663 bytes images/range-diff.odg | Bin 0 -> 11827 bytes images/range-diff.png | Bin 0 -> 29742 bytes images/range-log.odg | Bin 0 -> 13089 bytes images/range-log.png | Bin 0 -> 117933 bytes images/rebase-interactive.odg | Bin 0 -> 15170 bytes images/rebase-interactive.png | Bin 0 -> 79302 bytes images/rebase.odg | Bin 0 -> 31661 bytes images/rebase.png | Bin 0 -> 50310 bytes images/worflow-developer-branch.odg | Bin 0 -> 126482 bytes images/worflow-developer-branch.png | Bin 0 -> 52139 bytes images/worflow-developer-clone.odg | Bin 0 -> 146195 bytes images/worflow-developer-clone.png | Bin 0 -> 62151 bytes images/worflow-developer-fork.odg | Bin 0 -> 125965 bytes images/worflow-developer-fork.png | Bin 0 -> 50252 bytes images/worflow-developer-pull-request.odg | Bin 0 -> 137128 bytes images/worflow-developer-pull-request.png | Bin 0 -> 69397 bytes images/worflow-developer-pull-upstream.odg | Bin 0 -> 145960 bytes images/worflow-developer-pull-upstream.png | Bin 0 -> 63476 bytes images/worflow-developer-push.odg | Bin 0 -> 136288 bytes images/worflow-developer-push.png | Bin 0 -> 59317 bytes .../worflow-developer-remote-add-upstream.odg | Bin 0 -> 146121 bytes .../worflow-developer-remote-add-upstream.png | Bin 0 -> 64336 bytes images/worflow-maintainer-clone.png | Bin 0 -> 36548 bytes images/worflow-maintainer-local-fix.odg | Bin 0 -> 148720 bytes images/worflow-maintainer-local-fix.png | Bin 0 -> 93538 bytes images/worflow-prototype.odg | Bin 0 -> 126699 bytes index.html | 42 + js/head.min.js | 8 + js/jquery-3.2.1.min.js | 4 + js/transition.js | 59 + js/zoom.min.js | 8 + lib/css/zenburn.css | 80 + lib/font/league-gothic/LICENSE | 2 + lib/font/league-gothic/league-gothic.css | 10 + lib/font/league-gothic/league-gothic.eot | Bin 0 -> 25696 bytes lib/font/league-gothic/league-gothic.ttf | Bin 0 -> 64256 bytes lib/font/league-gothic/league-gothic.woff | Bin 0 -> 30764 bytes lib/font/source-sans-pro/LICENSE | 45 + .../source-sans-pro-italic.eot | Bin 0 -> 75720 bytes .../source-sans-pro-italic.ttf | Bin 0 -> 238084 bytes .../source-sans-pro-italic.woff | Bin 0 -> 98556 bytes .../source-sans-pro-regular.eot | Bin 0 -> 88070 bytes .../source-sans-pro-regular.ttf | Bin 0 -> 288008 bytes .../source-sans-pro-regular.woff | Bin 0 -> 114324 bytes .../source-sans-pro-semibold.eot | Bin 0 -> 89897 bytes .../source-sans-pro-semibold.ttf | Bin 0 -> 284640 bytes .../source-sans-pro-semibold.woff | Bin 0 -> 115648 bytes .../source-sans-pro-semibolditalic.eot | Bin 0 -> 75706 bytes .../source-sans-pro-semibolditalic.ttf | Bin 0 -> 240944 bytes .../source-sans-pro-semibolditalic.woff | Bin 0 -> 98816 bytes lib/font/source-sans-pro/source-sans-pro.css | 39 + lib/js/classList.js | 2 + lib/js/head.min.js | 9 + lib/js/html5shiv.js | 7 + package.json | 44 + plugin/highlight/highlight.js | 78 + plugin/markdown/example.html | 129 ++ plugin/markdown/example.md | 31 + plugin/markdown/markdown.js | 412 +++++ plugin/markdown/marked.js | 6 + plugin/math/math.js | 67 + plugin/multiplex/client.js | 13 + plugin/multiplex/index.js | 64 + plugin/multiplex/master.js | 31 + plugin/multiplex/package.json | 19 + plugin/notes-server/client.js | 65 + plugin/notes-server/index.js | 69 + plugin/notes-server/notes.html | 585 +++++++ plugin/notes/notes.html | 746 +++++++++ plugin/notes/notes.js | 155 ++ plugin/print-pdf/print-pdf.js | 69 + plugin/search/search.js | 196 +++ plugin/zoom-js/zoom.js | 288 ++++ run.sh | 4 + 127 files changed, 12218 insertions(+) create mode 100644 .gitignore create mode 100644 Gruntfile.js create mode 100644 LICENSE.revealjs create mode 100644 README.md create mode 100644 bower.json create mode 100644 css/git-crash-course.css create mode 100644 css/print/paper.css create mode 100644 css/print/pdf.css create mode 100644 css/reveal.css create mode 100644 css/reveal.scss create mode 100644 css/theme/README.md create mode 100644 css/theme/beige.css create mode 100644 css/theme/black.css create mode 100644 css/theme/blood.css create mode 100644 css/theme/league.css create mode 100644 css/theme/moon.css create mode 100644 css/theme/night.css create mode 100644 css/theme/serif.css create mode 100644 css/theme/simple.css create mode 100644 css/theme/sky.css create mode 100644 css/theme/solarized.css create mode 100644 css/theme/source/beige.scss create mode 100644 css/theme/source/black.scss create mode 100644 css/theme/source/blood.scss create mode 100644 css/theme/source/league.scss create mode 100644 css/theme/source/moon.scss create mode 100644 css/theme/source/night.scss create mode 100644 css/theme/source/serif.scss create mode 100644 css/theme/source/simple.scss create mode 100644 css/theme/source/sky.scss create mode 100644 css/theme/source/solarized.scss create mode 100644 css/theme/source/white.scss create mode 100644 css/theme/template/mixins.scss create mode 100644 css/theme/template/settings.scss create mode 100644 css/theme/template/theme.scss create mode 100644 css/theme/white.css create mode 100644 css/zoom.css create mode 100644 git-crash-course-en.md create mode 100644 images/branch-commit.odg create mode 100644 images/branch-commit.png create mode 100644 images/branch-conflict-solved.odg create mode 100644 images/branch-conflict-solved.png create mode 100644 images/branch-conflict.odg create mode 100644 images/branch-conflict.png create mode 100644 images/branch-create-move.odg create mode 100644 images/branch-create-move.png create mode 100644 images/branch-ff.odg create mode 100644 images/branch-ff.png create mode 100644 images/branch-prototype.odg create mode 100644 images/cherry-pick.odg create mode 100644 images/cherry-pick.png create mode 100644 images/file-states.odg create mode 100644 images/file-states.png create mode 100644 images/range-diff.odg create mode 100644 images/range-diff.png create mode 100644 images/range-log.odg create mode 100644 images/range-log.png create mode 100644 images/rebase-interactive.odg create mode 100644 images/rebase-interactive.png create mode 100644 images/rebase.odg create mode 100644 images/rebase.png create mode 100644 images/worflow-developer-branch.odg create mode 100644 images/worflow-developer-branch.png create mode 100644 images/worflow-developer-clone.odg create mode 100644 images/worflow-developer-clone.png create mode 100644 images/worflow-developer-fork.odg create mode 100644 images/worflow-developer-fork.png create mode 100644 images/worflow-developer-pull-request.odg create mode 100644 images/worflow-developer-pull-request.png create mode 100644 images/worflow-developer-pull-upstream.odg create mode 100644 images/worflow-developer-pull-upstream.png create mode 100644 images/worflow-developer-push.odg create mode 100644 images/worflow-developer-push.png create mode 100644 images/worflow-developer-remote-add-upstream.odg create mode 100644 images/worflow-developer-remote-add-upstream.png create mode 100644 images/worflow-maintainer-clone.png create mode 100644 images/worflow-maintainer-local-fix.odg create mode 100644 images/worflow-maintainer-local-fix.png create mode 100644 images/worflow-prototype.odg create mode 100644 index.html create mode 100644 js/head.min.js create mode 100644 js/jquery-3.2.1.min.js create mode 100644 js/transition.js create mode 100644 js/zoom.min.js create mode 100644 lib/css/zenburn.css create mode 100644 lib/font/league-gothic/LICENSE create mode 100644 lib/font/league-gothic/league-gothic.css create mode 100755 lib/font/league-gothic/league-gothic.eot create mode 100755 lib/font/league-gothic/league-gothic.ttf create mode 100755 lib/font/league-gothic/league-gothic.woff create mode 100644 lib/font/source-sans-pro/LICENSE create mode 100755 lib/font/source-sans-pro/source-sans-pro-italic.eot create mode 100755 lib/font/source-sans-pro/source-sans-pro-italic.ttf create mode 100755 lib/font/source-sans-pro/source-sans-pro-italic.woff create mode 100755 lib/font/source-sans-pro/source-sans-pro-regular.eot create mode 100755 lib/font/source-sans-pro/source-sans-pro-regular.ttf create mode 100755 lib/font/source-sans-pro/source-sans-pro-regular.woff create mode 100755 lib/font/source-sans-pro/source-sans-pro-semibold.eot create mode 100755 lib/font/source-sans-pro/source-sans-pro-semibold.ttf create mode 100755 lib/font/source-sans-pro/source-sans-pro-semibold.woff create mode 100755 lib/font/source-sans-pro/source-sans-pro-semibolditalic.eot create mode 100755 lib/font/source-sans-pro/source-sans-pro-semibolditalic.ttf create mode 100755 lib/font/source-sans-pro/source-sans-pro-semibolditalic.woff create mode 100644 lib/font/source-sans-pro/source-sans-pro.css create mode 100644 lib/js/classList.js create mode 100644 lib/js/head.min.js create mode 100644 lib/js/html5shiv.js create mode 100644 package.json create mode 100644 plugin/highlight/highlight.js create mode 100644 plugin/markdown/example.html create mode 100644 plugin/markdown/example.md create mode 100755 plugin/markdown/markdown.js create mode 100644 plugin/markdown/marked.js create mode 100755 plugin/math/math.js create mode 100644 plugin/multiplex/client.js create mode 100644 plugin/multiplex/index.js create mode 100644 plugin/multiplex/master.js create mode 100644 plugin/multiplex/package.json create mode 100644 plugin/notes-server/client.js create mode 100644 plugin/notes-server/index.js create mode 100644 plugin/notes-server/notes.html create mode 100644 plugin/notes/notes.html create mode 100644 plugin/notes/notes.js create mode 100644 plugin/print-pdf/print-pdf.js create mode 100644 plugin/search/search.js create mode 100644 plugin/zoom-js/zoom.js create mode 100755 run.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..20382f3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,59 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov +reveal.js + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..aa04b68 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,192 @@ +/* global module:false */ +module.exports = function(grunt) { + var port = grunt.option('port') || 8000; + var root = grunt.option('root') || '.'; + + if (!Array.isArray(root)) root = [root]; + + // Project configuration + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + meta: { + banner: + '/*!\n' + + ' * reveal.js <%= pkg.version %> (<%= grunt.template.today("yyyy-mm-dd, HH:MM") %>)\n' + + ' * http://lab.hakim.se/reveal-js\n' + + ' * MIT licensed\n' + + ' *\n' + + ' * Copyright (C) 2017 Hakim El Hattab, http://hakim.se\n' + + ' */' + }, + + qunit: { + files: [ 'test/*.html' ] + }, + + uglify: { + options: { + banner: '<%= meta.banner %>\n' + }, + build: { + src: 'js/reveal.js', + dest: 'js/reveal.min.js' + } + }, + + sass: { + core: { + files: { + 'css/reveal.css': 'css/reveal.scss', + } + }, + themes: { + files: [ + { + expand: true, + cwd: 'css/theme/source', + src: ['*.sass', '*.scss'], + dest: 'css/theme', + ext: '.css' + } + ] + } + }, + + autoprefixer: { + dist: { + src: 'css/reveal.css' + } + }, + + cssmin: { + compress: { + files: { + 'css/reveal.min.css': [ 'css/reveal.css' ] + } + } + }, + + jshint: { + options: { + curly: false, + eqeqeq: true, + immed: true, + esnext: true, + latedef: true, + newcap: true, + noarg: true, + sub: true, + undef: true, + eqnull: true, + browser: true, + expr: true, + globals: { + head: false, + module: false, + console: false, + unescape: false, + define: false, + exports: false + } + }, + files: [ 'Gruntfile.js', 'js/reveal.js' ] + }, + + connect: { + server: { + options: { + port: port, + base: root, + livereload: true, + open: true + } + }, + + }, + + zip: { + 'reveal-js-presentation.zip': [ + 'index.html', + 'css/**', + 'js/**', + 'lib/**', + 'images/**', + 'plugin/**', + '**.md' + ] + }, + + watch: { + js: { + files: [ 'Gruntfile.js', 'js/reveal.js' ], + tasks: 'js' + }, + theme: { + files: [ + 'css/theme/source/*.sass', + 'css/theme/source/*.scss', + 'css/theme/template/*.sass', + 'css/theme/template/*.scss' + ], + tasks: 'css-themes' + }, + css: { + files: [ 'css/reveal.scss' ], + tasks: 'css-core' + }, + html: { + files: root.map(path => path + '/*.html') + }, + markdown: { + files: root.map(path => path + '/*.md') + }, + options: { + livereload: true + } + }, + + retire: { + js: ['js/reveal.js', 'lib/js/*.js', 'plugin/**/*.js'], + node: ['.'], + options: {} + } + + }); + + // Dependencies + grunt.loadNpmTasks( 'grunt-contrib-qunit' ); + grunt.loadNpmTasks( 'grunt-contrib-jshint' ); + grunt.loadNpmTasks( 'grunt-contrib-cssmin' ); + grunt.loadNpmTasks( 'grunt-contrib-uglify' ); + grunt.loadNpmTasks( 'grunt-contrib-watch' ); + grunt.loadNpmTasks( 'grunt-sass' ); + grunt.loadNpmTasks( 'grunt-contrib-connect' ); + grunt.loadNpmTasks( 'grunt-autoprefixer' ); + grunt.loadNpmTasks( 'grunt-zip' ); + grunt.loadNpmTasks( 'grunt-retire' ); + + // Default task + grunt.registerTask( 'default', [ 'css', 'js' ] ); + + // JS task + grunt.registerTask( 'js', [ 'jshint', 'uglify', 'qunit' ] ); + + // Theme CSS + grunt.registerTask( 'css-themes', [ 'sass:themes' ] ); + + // Core framework CSS + grunt.registerTask( 'css-core', [ 'sass:core', 'autoprefixer', 'cssmin' ] ); + + // All CSS + grunt.registerTask( 'css', [ 'sass', 'autoprefixer', 'cssmin' ] ); + + // Package presentation to archive + grunt.registerTask( 'package', [ 'default', 'zip' ] ); + + // Serve presentation locally + grunt.registerTask( 'serve', [ 'connect', 'watch' ] ); + + // Run tests + grunt.registerTask( 'test', [ 'jshint', 'qunit' ] ); + +}; diff --git a/LICENSE.revealjs b/LICENSE.revealjs new file mode 100644 index 0000000..c3e6e5f --- /dev/null +++ b/LICENSE.revealjs @@ -0,0 +1,19 @@ +Copyright (C) 2017 Hakim El Hattab, http://hakim.se, and reveal.js contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5148efd --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# git-crash-course + +Introduction to Git written for the RaspiBO makerspace. + +## Italian version + +Italian version available here: https://git.lattuga.net/alberanid/git-crash-course + +## Build & run + +To build the slides and run a web server using nodejs: + + $ ./run.sh + +## Ortherwise... + +Slides are in markdown format and can be [directly consulted](git-crash-course-en.md) + +## Licence + +Copyright 2017-2018 Davide Alberani , RaspiBO + +This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License: http://creativecommons.org/licenses/by-sa/4.0/ + +This work include the revealjs dependency, jQuery and possibly other free software; see their own licenses. diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..ff18de4 --- /dev/null +++ b/bower.json @@ -0,0 +1,27 @@ +{ + "name": "reveal.js", + "version": "3.5.0", + "main": [ + "js/reveal.js", + "css/reveal.css" + ], + "homepage": "http://lab.hakim.se/reveal-js/", + "license": "MIT", + "description": "The HTML Presentation Framework", + "authors": [ + "Hakim El Hattab " + ], + "dependencies": { + "headjs": "~1.0.3" + }, + "repository": { + "type": "git", + "url": "git://github.com/hakimel/reveal.js.git" + }, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test" + ] +} \ No newline at end of file diff --git a/css/git-crash-course.css b/css/git-crash-course.css new file mode 100644 index 0000000..36b325e --- /dev/null +++ b/css/git-crash-course.css @@ -0,0 +1,15 @@ +.slides { + margin-top: 5px !important; +} + +.two-cols ul, .two-cols h3 { + float: left; +} + +.align-left { + text-align: left; +} + +.align-left h2, h3 { + text-align: center; +} diff --git a/css/print/paper.css b/css/print/paper.css new file mode 100644 index 0000000..27d19dd --- /dev/null +++ b/css/print/paper.css @@ -0,0 +1,203 @@ +/* Default Print Stylesheet Template + by Rob Glazebrook of CSSnewbie.com + Last Updated: June 4, 2008 + + Feel free (nay, compelled) to edit, append, and + manipulate this file as you see fit. */ + + +@media print { + + /* SECTION 1: Set default width, margin, float, and + background. This prevents elements from extending + beyond the edge of the printed page, and prevents + unnecessary background images from printing */ + html { + background: #fff; + width: auto; + height: auto; + overflow: visible; + } + body { + background: #fff; + font-size: 20pt; + width: auto; + height: auto; + border: 0; + margin: 0 5%; + padding: 0; + overflow: visible; + float: none !important; + } + + /* SECTION 2: Remove any elements not needed in print. + This would include navigation, ads, sidebars, etc. */ + .nestedarrow, + .controls, + .fork-reveal, + .share-reveal, + .state-background, + .reveal .progress, + .reveal .backgrounds, + .reveal .slide-number { + display: none !important; + } + + /* SECTION 3: Set body font face, size, and color. + Consider using a serif font for readability. */ + body, p, td, li, div { + font-size: 20pt!important; + font-family: Georgia, "Times New Roman", Times, serif !important; + color: #000; + } + + /* SECTION 4: Set heading font face, sizes, and color. + Differentiate your headings from your body text. + Perhaps use a large sans-serif for distinction. */ + h1,h2,h3,h4,h5,h6 { + color: #000!important; + height: auto; + line-height: normal; + font-family: Georgia, "Times New Roman", Times, serif !important; + text-shadow: 0 0 0 #000 !important; + text-align: left; + letter-spacing: normal; + } + /* Need to reduce the size of the fonts for printing */ + h1 { font-size: 28pt !important; } + h2 { font-size: 24pt !important; } + h3 { font-size: 22pt !important; } + h4 { font-size: 22pt !important; font-variant: small-caps; } + h5 { font-size: 21pt !important; } + h6 { font-size: 20pt !important; font-style: italic; } + + /* SECTION 5: Make hyperlinks more usable. + Ensure links are underlined, and consider appending + the URL to the end of the link for usability. */ + a:link, + a:visited { + color: #000 !important; + font-weight: bold; + text-decoration: underline; + } + /* + .reveal a:link:after, + .reveal a:visited:after { + content: " (" attr(href) ") "; + color: #222 !important; + font-size: 90%; + } + */ + + + /* SECTION 6: more reveal.js specific additions by @skypanther */ + ul, ol, div, p { + visibility: visible; + position: static; + width: auto; + height: auto; + display: block; + overflow: visible; + margin: 0; + text-align: left !important; + } + .reveal pre, + .reveal table { + margin-left: 0; + margin-right: 0; + } + .reveal pre code { + padding: 20px; + border: 1px solid #ddd; + } + .reveal blockquote { + margin: 20px 0; + } + .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; + + overflow: visible !important; + display: block !important; + + text-align: left !important; + -webkit-perspective: none; + -moz-perspective: none; + -ms-perspective: none; + perspective: none; + + -webkit-perspective-origin: 50% 50%; + -moz-perspective-origin: 50% 50%; + -ms-perspective-origin: 50% 50%; + perspective-origin: 50% 50%; + } + .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; + + -webkit-transform-style: flat !important; + -moz-transform-style: flat !important; + -ms-transform-style: flat !important; + transform-style: flat !important; + + -webkit-transform: none !important; + -moz-transform: none !important; + -ms-transform: none !important; + transform: none !important; + + -webkit-transition: none !important; + -moz-transition: none !important; + -ms-transition: none !important; + transition: none !important; + } + .reveal .slides section.stack { + padding: 0 !important; + } + .reveal section:last-of-type { + page-break-after: avoid !important; + } + .reveal section .fragment { + opacity: 1 !important; + visibility: visible !important; + + -webkit-transform: none !important; + -moz-transform: none !important; + -ms-transform: none !important; + transform: none !important; + } + .reveal section img { + display: block; + margin: 15px 0px; + background: rgba(255,255,255,1); + border: 1px solid #666; + box-shadow: none; + } + + .reveal section small { + font-size: 0.8em; + } + +} diff --git a/css/print/pdf.css b/css/print/pdf.css new file mode 100644 index 0000000..20c646a --- /dev/null +++ b/css/print/pdf.css @@ -0,0 +1,172 @@ +/** + * This stylesheet is used to print reveal.js + * presentations to PDF. + * + * https://github.com/hakimel/reveal.js#pdf-export + */ + +* { + -webkit-print-color-adjust: exact; +} + +body { + margin: 0 auto !important; + border: 0; + padding: 0; + float: none !important; + overflow: visible; +} + +html { + width: 100%; + height: 100%; + overflow: visible; +} + +/* Remove any elements not needed in print. */ +.nestedarrow, +.reveal .controls, +.reveal .progress, +.reveal .playback, +.reveal.overview, +.fork-reveal, +.share-reveal, +.state-background { + display: none !important; +} + +h1, h2, h3, h4, h5, h6 { + text-shadow: 0 0 0 #000 !important; +} + +.reveal pre code { + overflow: hidden !important; + font-family: Courier, 'Courier New', monospace !important; +} + +ul, ol, div, p { + visibility: visible; + position: static; + width: auto; + height: auto; + display: block; + overflow: visible; + margin: auto; +} +.reveal { + width: auto !important; + height: auto !important; + overflow: hidden !important; +} +.reveal .slides { + position: static; + width: 100% !important; + height: auto !important; + zoom: 1 !important; + + left: auto; + top: auto; + margin: 0 !important; + padding: 0 !important; + + overflow: visible; + display: block; + + -webkit-perspective: none; + -moz-perspective: none; + -ms-perspective: none; + perspective: none; + + -webkit-perspective-origin: 50% 50%; /* there isn't a none/auto value but 50-50 is the default */ + -moz-perspective-origin: 50% 50%; + -ms-perspective-origin: 50% 50%; + perspective-origin: 50% 50%; +} + +.reveal .slides .pdf-page { + position: relative; + overflow: hidden; + z-index: 1; + + page-break-after: always; +} + +.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; + + -webkit-transform-style: flat !important; + -moz-transform-style: flat !important; + -ms-transform-style: flat !important; + transform-style: flat !important; + + -webkit-transform: none !important; + -moz-transform: none !important; + -ms-transform: none !important; + transform: none !important; +} + +.reveal section.stack { + position: relative !important; + margin: 0 !important; + padding: 0 !important; + page-break-after: avoid !important; + height: auto !important; + min-height: auto !important; +} + +.reveal img { + box-shadow: none; +} + +.reveal .roll { + overflow: visible; + line-height: 1em; +} + +/* Slide backgrounds are placed inside of their slide when exporting to PDF */ +.reveal .slide-background { + display: block !important; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: auto !important; +} + +/* Display slide speaker notes when 'showNotes' is enabled */ +.reveal .speaker-notes-pdf { + display: block; + width: 100%; + max-height: none; + top: auto; + right: auto; + bottom: auto; + left: auto; + z-index: 100; +} + +/* Layout option which makes notes appear on a separate page */ +.reveal .speaker-notes-pdf[data-layout="separate-page"] { + position: relative; + color: inherit; + background-color: transparent; + padding: 20px; + page-break-after: always; +} + +/* Display slide numbers when 'slideNumber' is enabled */ +.reveal .slide-number-pdf { + display: block; + position: absolute; + font-size: 14px; +} diff --git a/css/reveal.css b/css/reveal.css new file mode 100644 index 0000000..5f501b1 --- /dev/null +++ b/css/reveal.css @@ -0,0 +1,1387 @@ +/*! + * reveal.js + * http://lab.hakim.se/reveal-js + * MIT licensed + * + * Copyright (C) 2017 Hakim El Hattab, http://hakim.se + */ +/********************************************* + * RESET STYLES + *********************************************/ +html, body, .reveal div, .reveal span, .reveal applet, .reveal object, .reveal iframe, +.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6, .reveal p, .reveal blockquote, .reveal pre, +.reveal a, .reveal abbr, .reveal acronym, .reveal address, .reveal big, .reveal cite, .reveal code, +.reveal del, .reveal dfn, .reveal em, .reveal img, .reveal ins, .reveal kbd, .reveal q, .reveal s, .reveal samp, +.reveal small, .reveal strike, .reveal strong, .reveal sub, .reveal sup, .reveal tt, .reveal var, +.reveal b, .reveal u, .reveal center, +.reveal dl, .reveal dt, .reveal dd, .reveal ol, .reveal ul, .reveal li, +.reveal fieldset, .reveal form, .reveal label, .reveal legend, +.reveal table, .reveal caption, .reveal tbody, .reveal tfoot, .reveal thead, .reveal tr, .reveal th, .reveal td, +.reveal article, .reveal aside, .reveal canvas, .reveal details, .reveal embed, +.reveal figure, .reveal figcaption, .reveal footer, .reveal header, .reveal hgroup, +.reveal menu, .reveal nav, .reveal output, .reveal ruby, .reveal section, .reveal summary, +.reveal time, .reveal mark, .reveal audio, .reveal video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; } + +.reveal article, .reveal aside, .reveal details, .reveal figcaption, .reveal figure, +.reveal footer, .reveal header, .reveal hgroup, .reveal menu, .reveal nav, .reveal section { + display: block; } + +/********************************************* + * GLOBAL STYLES + *********************************************/ +html, +body { + width: 100%; + height: 100%; + overflow: hidden; } + +body { + position: relative; + line-height: 1; + background-color: #fff; + color: #000; } + +/********************************************* + * VIEW FRAGMENTS + *********************************************/ +.reveal .slides section .fragment { + opacity: 0; + visibility: hidden; + -webkit-transition: all .2s ease; + transition: all .2s ease; } + .reveal .slides section .fragment.visible { + opacity: 1; + visibility: inherit; } + +.reveal .slides section .fragment.grow { + opacity: 1; + visibility: inherit; } + .reveal .slides section .fragment.grow.visible { + -webkit-transform: scale(1.3); + transform: scale(1.3); } + +.reveal .slides section .fragment.shrink { + opacity: 1; + visibility: inherit; } + .reveal .slides section .fragment.shrink.visible { + -webkit-transform: scale(0.7); + transform: scale(0.7); } + +.reveal .slides section .fragment.zoom-in { + -webkit-transform: scale(0.1); + transform: scale(0.1); } + .reveal .slides section .fragment.zoom-in.visible { + -webkit-transform: none; + transform: none; } + +.reveal .slides section .fragment.fade-out { + opacity: 1; + visibility: inherit; } + .reveal .slides section .fragment.fade-out.visible { + opacity: 0; + visibility: hidden; } + +.reveal .slides section .fragment.semi-fade-out { + opacity: 1; + visibility: inherit; } + .reveal .slides section .fragment.semi-fade-out.visible { + opacity: 0.5; + visibility: inherit; } + +.reveal .slides section .fragment.strike { + opacity: 1; + visibility: inherit; } + .reveal .slides section .fragment.strike.visible { + text-decoration: line-through; } + +.reveal .slides section .fragment.fade-up { + -webkit-transform: translate(0, 20%); + transform: translate(0, 20%); } + .reveal .slides section .fragment.fade-up.visible { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); } + +.reveal .slides section .fragment.fade-down { + -webkit-transform: translate(0, -20%); + transform: translate(0, -20%); } + .reveal .slides section .fragment.fade-down.visible { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); } + +.reveal .slides section .fragment.fade-right { + -webkit-transform: translate(-20%, 0); + transform: translate(-20%, 0); } + .reveal .slides section .fragment.fade-right.visible { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); } + +.reveal .slides section .fragment.fade-left { + -webkit-transform: translate(20%, 0); + transform: translate(20%, 0); } + .reveal .slides section .fragment.fade-left.visible { + -webkit-transform: translate(0, 0); + transform: translate(0, 0); } + +.reveal .slides section .fragment.current-visible { + opacity: 0; + visibility: hidden; } + .reveal .slides section .fragment.current-visible.current-fragment { + opacity: 1; + visibility: inherit; } + +.reveal .slides section .fragment.highlight-red, +.reveal .slides section .fragment.highlight-current-red, +.reveal .slides section .fragment.highlight-green, +.reveal .slides section .fragment.highlight-current-green, +.reveal .slides section .fragment.highlight-blue, +.reveal .slides section .fragment.highlight-current-blue { + opacity: 1; + visibility: inherit; } + +.reveal .slides section .fragment.highlight-red.visible { + color: #ff2c2d; } + +.reveal .slides section .fragment.highlight-green.visible { + color: #17ff2e; } + +.reveal .slides section .fragment.highlight-blue.visible { + color: #1b91ff; } + +.reveal .slides section .fragment.highlight-current-red.current-fragment { + color: #ff2c2d; } + +.reveal .slides section .fragment.highlight-current-green.current-fragment { + color: #17ff2e; } + +.reveal .slides section .fragment.highlight-current-blue.current-fragment { + color: #1b91ff; } + +/********************************************* + * DEFAULT ELEMENT STYLES + *********************************************/ +/* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */ +.reveal:after { + content: ''; + font-style: italic; } + +.reveal iframe { + z-index: 1; } + +/** Prevents layering issues in certain browser/transition combinations */ +.reveal a { + position: relative; } + +.reveal .stretch { + max-width: none; + max-height: none; } + +.reveal pre.stretch code { + height: 100%; + max-height: 100%; + box-sizing: border-box; } + +/********************************************* + * CONTROLS + *********************************************/ +.reveal .controls { + display: none; + position: fixed; + width: 110px; + height: 110px; + z-index: 30; + right: 10px; + bottom: 10px; + -webkit-user-select: none; } + +.reveal .controls button { + padding: 0; + position: absolute; + opacity: 0.05; + width: 0; + height: 0; + background-color: transparent; + border: 12px solid transparent; + -webkit-transform: scale(0.9999); + transform: scale(0.9999); + -webkit-transition: all 0.2s ease; + transition: all 0.2s ease; + -webkit-appearance: none; + -webkit-tap-highlight-color: transparent; } + +.reveal .controls .enabled { + opacity: 0.7; + cursor: pointer; } + +.reveal .controls .enabled:active { + margin-top: 1px; } + +.reveal .controls .navigate-left { + top: 42px; + border-right-width: 22px; + border-right-color: #000; } + +.reveal .controls .navigate-left.fragmented { + opacity: 0.3; } + +.reveal .controls .navigate-right { + left: 74px; + top: 42px; + border-left-width: 22px; + border-left-color: #000; } + +.reveal .controls .navigate-right.fragmented { + opacity: 0.3; } + +.reveal .controls .navigate-up { + left: 42px; + border-bottom-width: 22px; + border-bottom-color: #000; } + +.reveal .controls .navigate-up.fragmented { + opacity: 0.3; } + +.reveal .controls .navigate-down { + left: 42px; + top: 74px; + border-top-width: 22px; + border-top-color: #000; } + +.reveal .controls .navigate-down.fragmented { + opacity: 0.3; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + position: fixed; + display: none; + height: 3px; + width: 100%; + bottom: 0; + left: 0; + z-index: 10; + background-color: rgba(0, 0, 0, 0.2); } + +.reveal .progress:after { + content: ''; + display: block; + position: absolute; + height: 20px; + width: 100%; + top: -20px; } + +.reveal .progress span { + display: block; + height: 100%; + width: 0px; + background-color: #000; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } + +/********************************************* + * SLIDE NUMBER + *********************************************/ +.reveal .slide-number { + position: fixed; + display: block; + right: 8px; + bottom: 8px; + z-index: 31; + font-family: Helvetica, sans-serif; + font-size: 12px; + line-height: 1; + color: #fff; + background-color: rgba(0, 0, 0, 0.4); + padding: 5px; } + +.reveal .slide-number-delimiter { + margin: 0 3px; } + +/********************************************* + * SLIDES + *********************************************/ +.reveal { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + -ms-touch-action: none; + 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; + -webkit-perspective: 600px; + perspective: 600px; + -webkit-perspective-origin: 50% 40%; + perspective-origin: 50% 40%; } + +.reveal .slides > section { + -ms-perspective: 600px; } + +.reveal .slides > section, +.reveal .slides > section > section { + display: none; + position: absolute; + width: 100%; + padding: 20px 0px; + pointer-events: auto; + z-index: 10; + -webkit-transform-style: flat; + transform-style: flat; + -webkit-transition: -webkit-transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), -webkit-transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: transform-origin 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), transform 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), visibility 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985), opacity 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } + +/* Global transition speed settings */ +.reveal[data-transition-speed="fast"] .slides section { + -webkit-transition-duration: 400ms; + transition-duration: 400ms; } + +.reveal[data-transition-speed="slow"] .slides section { + -webkit-transition-duration: 1200ms; + transition-duration: 1200ms; } + +/* Slide-specific transition speed overrides */ +.reveal .slides section[data-transition-speed="fast"] { + -webkit-transition-duration: 400ms; + transition-duration: 400ms; } + +.reveal .slides section[data-transition-speed="slow"] { + -webkit-transition-duration: 1200ms; + transition-duration: 1200ms; } + +.reveal .slides > section.stack { + padding-top: 0; + padding-bottom: 0; } + +.reveal .slides > section.present, +.reveal .slides > section > section.present { + display: block; + z-index: 11; + opacity: 1; } + +.reveal .slides > section:empty, +.reveal .slides > section > section:empty, +.reveal .slides > section[data-background-interactive], +.reveal .slides > section > section[data-background-interactive] { + pointer-events: none; } + +.reveal.center, +.reveal.center .slides, +.reveal.center .slides section { + min-height: 0 !important; } + +/* Don't allow interaction with invisible slides */ +.reveal .slides > section.future, +.reveal .slides > section > section.future, +.reveal .slides > section.past, +.reveal .slides > section > section.past { + pointer-events: none; } + +.reveal.overview .slides > section, +.reveal.overview .slides > section > section { + pointer-events: auto; } + +.reveal .slides > section.past, +.reveal .slides > section.future, +.reveal .slides > section > section.past, +.reveal .slides > section > section.future { + opacity: 0; } + +/********************************************* + * Mixins for readability of transitions + *********************************************/ +/********************************************* + * SLIDE TRANSITION + * Aliased 'linear' for backwards compatibility + *********************************************/ +.reveal.slide section { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.reveal .slides > section[data-transition=slide].past, +.reveal .slides > section[data-transition~=slide-out].past, +.reveal.slide .slides > section:not([data-transition]).past { + -webkit-transform: translate(-150%, 0); + 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 { + -webkit-transform: translate(150%, 0); + 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 { + -webkit-transform: translate(0, -150%); + 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 { + -webkit-transform: translate(0, 150%); + transform: translate(0, 150%); } + +.reveal.linear section { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.reveal .slides > section[data-transition=linear].past, +.reveal .slides > section[data-transition~=linear-out].past, +.reveal.linear .slides > section:not([data-transition]).past { + -webkit-transform: translate(-150%, 0); + 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 { + -webkit-transform: translate(150%, 0); + 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 { + -webkit-transform: translate(0, -150%); + 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 { + -webkit-transform: translate(0, 150%); + transform: translate(0, 150%); } + +/********************************************* + * CONVEX TRANSITION + * Aliased 'default' for backwards compatibility + *********************************************/ +.reveal .slides section[data-transition=default].stack, +.reveal.default .slides section.stack { + -webkit-transform-style: preserve-3d; + 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 { + -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); + 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 { + -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); + 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 { + -webkit-transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); + 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 { + -webkit-transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); + transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); } + +.reveal .slides section[data-transition=convex].stack, +.reveal.convex .slides section.stack { + -webkit-transform-style: preserve-3d; + 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 { + -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); + 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 { + -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); + 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 { + -webkit-transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); + 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 { + -webkit-transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); + transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); } + +/********************************************* + * CONCAVE TRANSITION + *********************************************/ +.reveal .slides section[data-transition=concave].stack, +.reveal.concave .slides section.stack { + -webkit-transform-style: preserve-3d; + 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 { + -webkit-transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); + 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 { + -webkit-transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); + 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 { + -webkit-transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0); + 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 { + -webkit-transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); + transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); } + +/********************************************* + * ZOOM TRANSITION + *********************************************/ +.reveal .slides section[data-transition=zoom], +.reveal.zoom .slides section:not([data-transition]) { + -webkit-transition-timing-function: ease; + 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; + -webkit-transform: scale(16); + 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; + -webkit-transform: scale(0.2); + transform: scale(0.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 { + -webkit-transform: translate(0, -150%); + transform: translate(0, -150%); } + +.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 { + -webkit-transform: translate(0, 150%); + transform: translate(0, 150%); } + +/********************************************* + * CUBE TRANSITION + * + * WARNING: + * this is deprecated and will be removed in a + * future version. + *********************************************/ +.reveal.cube .slides { + -webkit-perspective: 1300px; + perspective: 1300px; } + +.reveal.cube .slides section { + padding: 30px; + min-height: 700px; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + box-sizing: border-box; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; } + +.reveal.center.cube .slides section { + min-height: 0; } + +.reveal.cube .slides section:not(.stack):before { + content: ''; + position: absolute; + display: block; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0, 0, 0, 0.1); + border-radius: 4px; + -webkit-transform: translateZ(-20px); + transform: translateZ(-20px); } + +.reveal.cube .slides section:not(.stack):after { + content: ''; + position: absolute; + display: block; + width: 90%; + height: 30px; + left: 5%; + bottom: 0; + background: none; + z-index: 1; + border-radius: 4px; + box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2); + -webkit-transform: translateZ(-90px) rotateX(65deg); + transform: translateZ(-90px) rotateX(65deg); } + +.reveal.cube .slides > section.stack { + padding: 0; + background: none; } + +.reveal.cube .slides > section.past { + -webkit-transform-origin: 100% 0%; + transform-origin: 100% 0%; + -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg); + transform: translate3d(-100%, 0, 0) rotateY(-90deg); } + +.reveal.cube .slides > section.future { + -webkit-transform-origin: 0% 0%; + transform-origin: 0% 0%; + -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg); + transform: translate3d(100%, 0, 0) rotateY(90deg); } + +.reveal.cube .slides > section > section.past { + -webkit-transform-origin: 0% 100%; + transform-origin: 0% 100%; + -webkit-transform: translate3d(0, -100%, 0) rotateX(90deg); + transform: translate3d(0, -100%, 0) rotateX(90deg); } + +.reveal.cube .slides > section > section.future { + -webkit-transform-origin: 0% 0%; + transform-origin: 0% 0%; + -webkit-transform: translate3d(0, 100%, 0) rotateX(-90deg); + transform: translate3d(0, 100%, 0) rotateX(-90deg); } + +/********************************************* + * PAGE TRANSITION + * + * WARNING: + * this is deprecated and will be removed in a + * future version. + *********************************************/ +.reveal.page .slides { + -webkit-perspective-origin: 0% 50%; + perspective-origin: 0% 50%; + -webkit-perspective: 3000px; + perspective: 3000px; } + +.reveal.page .slides section { + padding: 30px; + min-height: 700px; + box-sizing: border-box; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; } + +.reveal.page .slides section.past { + z-index: 12; } + +.reveal.page .slides section:not(.stack):before { + content: ''; + position: absolute; + display: block; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0, 0, 0, 0.1); + -webkit-transform: translateZ(-20px); + transform: translateZ(-20px); } + +.reveal.page .slides section:not(.stack):after { + content: ''; + position: absolute; + display: block; + width: 90%; + height: 30px; + left: 5%; + bottom: 0; + background: none; + z-index: 1; + border-radius: 4px; + box-shadow: 0px 95px 25px rgba(0, 0, 0, 0.2); + -webkit-transform: translateZ(-90px) rotateX(65deg); } + +.reveal.page .slides > section.stack { + padding: 0; + background: none; } + +.reveal.page .slides > section.past { + -webkit-transform-origin: 0% 0%; + transform-origin: 0% 0%; + -webkit-transform: translate3d(-40%, 0, 0) rotateY(-80deg); + transform: translate3d(-40%, 0, 0) rotateY(-80deg); } + +.reveal.page .slides > section.future { + -webkit-transform-origin: 100% 0%; + transform-origin: 100% 0%; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + +.reveal.page .slides > section > section.past { + -webkit-transform-origin: 0% 0%; + transform-origin: 0% 0%; + -webkit-transform: translate3d(0, -40%, 0) rotateX(80deg); + transform: translate3d(0, -40%, 0) rotateX(80deg); } + +.reveal.page .slides > section > section.future { + -webkit-transform-origin: 0% 100%; + transform-origin: 0% 100%; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); } + +/********************************************* + * FADE TRANSITION + *********************************************/ +.reveal .slides section[data-transition=fade], +.reveal.fade .slides section:not([data-transition]), +.reveal.fade .slides > section > section:not([data-transition]) { + -webkit-transform: none; + transform: none; + -webkit-transition: opacity 0.5s; + transition: opacity 0.5s; } + +.reveal.fade.overview .slides section, +.reveal.fade.overview .slides > section > section { + -webkit-transition: none; + transition: none; } + +/********************************************* + * NO TRANSITION + *********************************************/ +.reveal .slides section[data-transition=none], +.reveal.none .slides section:not([data-transition]) { + -webkit-transform: none; + transform: none; + -webkit-transition: none; + transition: none; } + +/********************************************* + * PAUSED MODE + *********************************************/ +.reveal .pause-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: black; + visibility: hidden; + opacity: 0; + z-index: 100; + -webkit-transition: all 1s ease; + transition: all 1s ease; } + +.reveal.paused .pause-overlay { + visibility: visible; + opacity: 1; } + +/********************************************* + * FALLBACK + *********************************************/ +.no-transforms { + overflow-y: auto; } + +.no-transforms .reveal .slides { + position: relative; + width: 80%; + height: auto !important; + top: 0; + left: 50%; + margin: 0; + text-align: center; } + +.no-transforms .reveal .controls, +.no-transforms .reveal .progress { + display: none !important; } + +.no-transforms .reveal .slides section { + display: block !important; + opacity: 1 !important; + position: relative !important; + height: auto; + min-height: 0; + top: 0; + left: -50%; + margin: 70px 0; + -webkit-transform: none; + transform: none; } + +.no-transforms .reveal .slides section section { + left: 0; } + +.reveal .no-transition, +.reveal .no-transition * { + -webkit-transition: none !important; + transition: none !important; } + +/********************************************* + * PER-SLIDE BACKGROUNDS + *********************************************/ +.reveal .backgrounds { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + -webkit-perspective: 600px; + perspective: 600px; } + +.reveal .slide-background { + display: none; + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + visibility: hidden; + overflow: hidden; + background-color: transparent; + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: cover; + -webkit-transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: all 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } + +.reveal .slide-background.stack { + display: block; } + +.reveal .slide-background.present { + opacity: 1; + visibility: visible; + z-index: 2; } + +.print-pdf .reveal .slide-background { + opacity: 1 !important; + visibility: visible !important; } + +/* Video backgrounds */ +.reveal .slide-background video { + position: absolute; + width: 100%; + height: 100%; + max-width: none; + max-height: none; + top: 0; + left: 0; + -o-object-fit: cover; + object-fit: cover; } + +.reveal .slide-background[data-background-size="contain"] video { + -o-object-fit: contain; + object-fit: contain; } + +/* Immediate transition style */ +.reveal[data-background-transition=none] > .backgrounds .slide-background, +.reveal > .backgrounds .slide-background[data-background-transition=none] { + -webkit-transition: none; + transition: none; } + +/* Slide */ +.reveal[data-background-transition=slide] > .backgrounds .slide-background, +.reveal > .backgrounds .slide-background[data-background-transition=slide] { + opacity: 1; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.reveal[data-background-transition=slide] > .backgrounds .slide-background.past, +.reveal > .backgrounds .slide-background.past[data-background-transition=slide] { + -webkit-transform: translate(-100%, 0); + transform: translate(-100%, 0); } + +.reveal[data-background-transition=slide] > .backgrounds .slide-background.future, +.reveal > .backgrounds .slide-background.future[data-background-transition=slide] { + -webkit-transform: translate(100%, 0); + transform: translate(100%, 0); } + +.reveal[data-background-transition=slide] > .backgrounds .slide-background > .slide-background.past, +.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=slide] { + -webkit-transform: translate(0, -100%); + transform: translate(0, -100%); } + +.reveal[data-background-transition=slide] > .backgrounds .slide-background > .slide-background.future, +.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=slide] { + -webkit-transform: translate(0, 100%); + transform: translate(0, 100%); } + +/* Convex */ +.reveal[data-background-transition=convex] > .backgrounds .slide-background.past, +.reveal > .backgrounds .slide-background.past[data-background-transition=convex] { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); } + +.reveal[data-background-transition=convex] > .backgrounds .slide-background.future, +.reveal > .backgrounds .slide-background.future[data-background-transition=convex] { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); } + +.reveal[data-background-transition=convex] > .backgrounds .slide-background > .slide-background.past, +.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=convex] { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); } + +.reveal[data-background-transition=convex] > .backgrounds .slide-background > .slide-background.future, +.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=convex] { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); } + +/* Concave */ +.reveal[data-background-transition=concave] > .backgrounds .slide-background.past, +.reveal > .backgrounds .slide-background.past[data-background-transition=concave] { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); } + +.reveal[data-background-transition=concave] > .backgrounds .slide-background.future, +.reveal > .backgrounds .slide-background.future[data-background-transition=concave] { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); } + +.reveal[data-background-transition=concave] > .backgrounds .slide-background > .slide-background.past, +.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=concave] { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); } + +.reveal[data-background-transition=concave] > .backgrounds .slide-background > .slide-background.future, +.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=concave] { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); } + +/* Zoom */ +.reveal[data-background-transition=zoom] > .backgrounds .slide-background, +.reveal > .backgrounds .slide-background[data-background-transition=zoom] { + -webkit-transition-timing-function: ease; + transition-timing-function: ease; } + +.reveal[data-background-transition=zoom] > .backgrounds .slide-background.past, +.reveal > .backgrounds .slide-background.past[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + -webkit-transform: scale(16); + transform: scale(16); } + +.reveal[data-background-transition=zoom] > .backgrounds .slide-background.future, +.reveal > .backgrounds .slide-background.future[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + -webkit-transform: scale(0.2); + transform: scale(0.2); } + +.reveal[data-background-transition=zoom] > .backgrounds .slide-background > .slide-background.past, +.reveal > .backgrounds .slide-background > .slide-background.past[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + -webkit-transform: scale(16); + transform: scale(16); } + +.reveal[data-background-transition=zoom] > .backgrounds .slide-background > .slide-background.future, +.reveal > .backgrounds .slide-background > .slide-background.future[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + -webkit-transform: scale(0.2); + transform: scale(0.2); } + +/* Global transition speed settings */ +.reveal[data-transition-speed="fast"] > .backgrounds .slide-background { + -webkit-transition-duration: 400ms; + transition-duration: 400ms; } + +.reveal[data-transition-speed="slow"] > .backgrounds .slide-background { + -webkit-transition-duration: 1200ms; + transition-duration: 1200ms; } + +/********************************************* + * OVERVIEW + *********************************************/ +.reveal.overview { + -webkit-perspective-origin: 50% 50%; + perspective-origin: 50% 50%; + -webkit-perspective: 700px; + perspective: 700px; } + .reveal.overview .slides { + -moz-transform-style: preserve-3d; } + .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:hover, + .reveal.overview .slides section.present { + outline: 10px solid rgba(150, 150, 150, 0.4); + outline-offset: 10px; } + .reveal.overview .slides section .fragment { + opacity: 1; + -webkit-transition: none; + 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: none; + outline: none; + overflow: visible; } + .reveal.overview .backgrounds { + -webkit-perspective: inherit; + perspective: inherit; + -moz-transform-style: preserve-3d; } + .reveal.overview .backgrounds .slide-background { + opacity: 1; + visibility: visible; + outline: 10px solid rgba(150, 150, 150, 0.1); + outline-offset: 10px; } + .reveal.overview .backgrounds .slide-background.stack { + overflow: visible; } + +.reveal.overview .slides section, +.reveal.overview-deactivating .slides section { + -webkit-transition: none; + transition: none; } + +.reveal.overview .backgrounds .slide-background, +.reveal.overview-deactivating .backgrounds .slide-background { + -webkit-transition: none; + transition: none; } + +/********************************************* + * RTL SUPPORT + *********************************************/ +.reveal.rtl .slides, +.reveal.rtl .slides h1, +.reveal.rtl .slides h2, +.reveal.rtl .slides h3, +.reveal.rtl .slides h4, +.reveal.rtl .slides h5, +.reveal.rtl .slides h6 { + direction: rtl; + font-family: sans-serif; } + +.reveal.rtl pre, +.reveal.rtl code { + direction: ltr; } + +.reveal.rtl ol, +.reveal.rtl ul { + text-align: right; } + +.reveal.rtl .progress span { + float: right; } + +/********************************************* + * PARALLAX BACKGROUND + *********************************************/ +.reveal.has-parallax-background .backgrounds { + -webkit-transition: all 0.8s ease; + transition: all 0.8s ease; } + +/* Global transition speed settings */ +.reveal.has-parallax-background[data-transition-speed="fast"] .backgrounds { + -webkit-transition-duration: 400ms; + transition-duration: 400ms; } + +.reveal.has-parallax-background[data-transition-speed="slow"] .backgrounds { + -webkit-transition-duration: 1200ms; + transition-duration: 1200ms; } + +/********************************************* + * LINK PREVIEW OVERLAY + *********************************************/ +.reveal .overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; + background: rgba(0, 0, 0, 0.9); + opacity: 0; + visibility: hidden; + -webkit-transition: all 0.3s ease; + transition: all 0.3s ease; } + +.reveal .overlay.visible { + opacity: 1; + visibility: visible; } + +.reveal .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: visible; + opacity: 0.6; + -webkit-transition: all 0.3s ease; + transition: all 0.3s ease; } + +.reveal .overlay header { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 40px; + z-index: 2; + border-bottom: 1px solid #222; } + +.reveal .overlay header a { + display: inline-block; + width: 40px; + height: 40px; + line-height: 36px; + padding: 0 10px; + float: right; + opacity: 0.6; + box-sizing: border-box; } + +.reveal .overlay header a:hover { + opacity: 1; } + +.reveal .overlay header a .icon { + display: inline-block; + width: 20px; + height: 20px; + background-position: 50% 50%; + background-size: 100%; + background-repeat: no-repeat; } + +.reveal .overlay header a.close .icon { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC); } + +.reveal .overlay header a.external .icon { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==); } + +.reveal .overlay .viewport { + position: absolute; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + top: 40px; + right: 0; + bottom: 0; + left: 0; } + +.reveal .overlay.overlay-preview .viewport iframe { + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + border: 0; + opacity: 0; + visibility: hidden; + -webkit-transition: all 0.3s ease; + transition: all 0.3s ease; } + +.reveal .overlay.overlay-preview.loaded .viewport iframe { + opacity: 1; + visibility: visible; } + +.reveal .overlay.overlay-preview.loaded .viewport-inner { + position: absolute; + z-index: -1; + left: 0; + top: 45%; + width: 100%; + text-align: center; + letter-spacing: normal; } + +.reveal .overlay.overlay-preview .x-frame-error { + opacity: 0; + -webkit-transition: opacity 0.3s ease 0.3s; + transition: opacity 0.3s ease 0.3s; } + +.reveal .overlay.overlay-preview.loaded .x-frame-error { + opacity: 1; } + +.reveal .overlay.overlay-preview.loaded .spinner { + opacity: 0; + visibility: hidden; + -webkit-transform: scale(0.2); + transform: scale(0.2); } + +.reveal .overlay.overlay-help .viewport { + overflow: auto; + color: #fff; } + +.reveal .overlay.overlay-help .viewport .viewport-inner { + width: 600px; + margin: auto; + padding: 20px 20px 80px 20px; + text-align: center; + letter-spacing: normal; } + +.reveal .overlay.overlay-help .viewport .viewport-inner .title { + font-size: 20px; } + +.reveal .overlay.overlay-help .viewport .viewport-inner table { + border: 1px solid #fff; + border-collapse: collapse; + font-size: 16px; } + +.reveal .overlay.overlay-help .viewport .viewport-inner table th, +.reveal .overlay.overlay-help .viewport .viewport-inner table td { + width: 200px; + padding: 14px; + border: 1px solid #fff; + vertical-align: middle; } + +.reveal .overlay.overlay-help .viewport .viewport-inner table th { + padding-top: 20px; + padding-bottom: 20px; } + +/********************************************* + * PLAYBACK COMPONENT + *********************************************/ +.reveal .playback { + position: fixed; + left: 15px; + bottom: 20px; + z-index: 30; + cursor: pointer; + -webkit-transition: all 400ms ease; + transition: all 400ms ease; } + +.reveal.overview .playback { + opacity: 0; + visibility: hidden; } + +/********************************************* + * ROLLING LINKS + *********************************************/ +.reveal .roll { + display: inline-block; + line-height: 1.2; + overflow: hidden; + vertical-align: top; + -webkit-perspective: 400px; + perspective: 400px; + -webkit-perspective-origin: 50% 50%; + perspective-origin: 50% 50%; } + +.reveal .roll:hover { + background: none; + text-shadow: none; } + +.reveal .roll span { + display: block; + position: relative; + padding: 0 2px; + pointer-events: none; + -webkit-transition: all 400ms ease; + transition: all 400ms ease; + -webkit-transform-origin: 50% 0%; + transform-origin: 50% 0%; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; } + +.reveal .roll:hover span { + background: rgba(0, 0, 0, 0.5); + -webkit-transform: translate3d(0px, 0px, -45px) rotateX(90deg); + transform: translate3d(0px, 0px, -45px) rotateX(90deg); } + +.reveal .roll span:after { + content: attr(data-title); + display: block; + position: absolute; + left: 0; + top: 0; + padding: 0 2px; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-transform-origin: 50% 0%; + transform-origin: 50% 0%; + -webkit-transform: translate3d(0px, 110%, 0px) rotateX(-90deg); + transform: translate3d(0px, 110%, 0px) rotateX(-90deg); } + +/********************************************* + * SPEAKER NOTES + *********************************************/ +.reveal aside.notes { + display: none; } + +.reveal .speaker-notes { + display: none; + position: absolute; + width: 70%; + max-height: 15%; + left: 15%; + bottom: 26px; + padding: 10px; + z-index: 1; + font-size: 18px; + line-height: 1.4; + color: #fff; + background-color: rgba(0, 0, 0, 0.5); + overflow: auto; + box-sizing: border-box; + text-align: left; + font-family: Helvetica, sans-serif; + -webkit-overflow-scrolling: touch; } + +.reveal .speaker-notes.visible:not(:empty) { + display: block; } + +@media screen and (max-width: 1024px) { + .reveal .speaker-notes { + font-size: 14px; } } + +@media screen and (max-width: 600px) { + .reveal .speaker-notes { + width: 90%; + left: 5%; } } + +/********************************************* + * ZOOM PLUGIN + *********************************************/ +.zoomed .reveal *, +.zoomed .reveal *:before, +.zoomed .reveal *:after { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; } + +.zoomed .reveal .progress, +.zoomed .reveal .controls { + opacity: 0; } + +.zoomed .reveal .roll span { + background: none; } + +.zoomed .reveal .roll span:after { + visibility: hidden; } diff --git a/css/reveal.scss b/css/reveal.scss new file mode 100644 index 0000000..983e587 --- /dev/null +++ b/css/reveal.scss @@ -0,0 +1,1469 @@ +/*! + * reveal.js + * http://lab.hakim.se/reveal-js + * MIT licensed + * + * Copyright (C) 2017 Hakim El Hattab, http://hakim.se + */ + + +/********************************************* + * RESET STYLES + *********************************************/ + +html, body, .reveal div, .reveal span, .reveal applet, .reveal object, .reveal iframe, +.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6, .reveal p, .reveal blockquote, .reveal pre, +.reveal a, .reveal abbr, .reveal acronym, .reveal address, .reveal big, .reveal cite, .reveal code, +.reveal del, .reveal dfn, .reveal em, .reveal img, .reveal ins, .reveal kbd, .reveal q, .reveal s, .reveal samp, +.reveal small, .reveal strike, .reveal strong, .reveal sub, .reveal sup, .reveal tt, .reveal var, +.reveal b, .reveal u, .reveal center, +.reveal dl, .reveal dt, .reveal dd, .reveal ol, .reveal ul, .reveal li, +.reveal fieldset, .reveal form, .reveal label, .reveal legend, +.reveal table, .reveal caption, .reveal tbody, .reveal tfoot, .reveal thead, .reveal tr, .reveal th, .reveal td, +.reveal article, .reveal aside, .reveal canvas, .reveal details, .reveal embed, +.reveal figure, .reveal figcaption, .reveal footer, .reveal header, .reveal hgroup, +.reveal menu, .reveal nav, .reveal output, .reveal ruby, .reveal section, .reveal summary, +.reveal time, .reveal mark, .reveal audio, .reveal video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} + +.reveal article, .reveal aside, .reveal details, .reveal figcaption, .reveal figure, +.reveal footer, .reveal header, .reveal hgroup, .reveal menu, .reveal nav, .reveal section { + display: block; +} + + +/********************************************* + * GLOBAL STYLES + *********************************************/ + +html, +body { + width: 100%; + height: 100%; + overflow: hidden; +} + +body { + position: relative; + line-height: 1; + + background-color: #fff; + color: #000; +} + + +/********************************************* + * VIEW FRAGMENTS + *********************************************/ + +.reveal .slides section .fragment { + opacity: 0; + visibility: hidden; + transition: all .2s ease; + + &.visible { + opacity: 1; + visibility: inherit; + } +} + +.reveal .slides section .fragment.grow { + opacity: 1; + visibility: inherit; + + &.visible { + transform: scale( 1.3 ); + } +} + +.reveal .slides section .fragment.shrink { + opacity: 1; + visibility: inherit; + + &.visible { + transform: scale( 0.7 ); + } +} + +.reveal .slides section .fragment.zoom-in { + transform: scale( 0.1 ); + + &.visible { + transform: none; + } +} + +.reveal .slides section .fragment.fade-out { + opacity: 1; + visibility: inherit; + + &.visible { + opacity: 0; + visibility: hidden; + } +} + +.reveal .slides section .fragment.semi-fade-out { + opacity: 1; + visibility: inherit; + + &.visible { + opacity: 0.5; + visibility: inherit; + } +} + +.reveal .slides section .fragment.strike { + opacity: 1; + visibility: inherit; + + &.visible { + text-decoration: line-through; + } +} + +.reveal .slides section .fragment.fade-up { + transform: translate(0, 20%); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .slides section .fragment.fade-down { + transform: translate(0, -20%); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .slides section .fragment.fade-right { + transform: translate(-20%, 0); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .slides section .fragment.fade-left { + transform: translate(20%, 0); + + &.visible { + transform: translate(0, 0); + } +} + +.reveal .slides section .fragment.current-visible { + opacity: 0; + visibility: hidden; + + &.current-fragment { + opacity: 1; + visibility: inherit; + } +} + +.reveal .slides section .fragment.highlight-red, +.reveal .slides section .fragment.highlight-current-red, +.reveal .slides section .fragment.highlight-green, +.reveal .slides section .fragment.highlight-current-green, +.reveal .slides section .fragment.highlight-blue, +.reveal .slides section .fragment.highlight-current-blue { + opacity: 1; + visibility: inherit; +} + .reveal .slides section .fragment.highlight-red.visible { + color: #ff2c2d + } + .reveal .slides section .fragment.highlight-green.visible { + color: #17ff2e; + } + .reveal .slides section .fragment.highlight-blue.visible { + color: #1b91ff; + } + +.reveal .slides section .fragment.highlight-current-red.current-fragment { + color: #ff2c2d +} +.reveal .slides section .fragment.highlight-current-green.current-fragment { + color: #17ff2e; +} +.reveal .slides section .fragment.highlight-current-blue.current-fragment { + color: #1b91ff; +} + + +/********************************************* + * DEFAULT ELEMENT STYLES + *********************************************/ + +/* Fixes issue in Chrome where italic fonts did not appear when printing to PDF */ +.reveal:after { + content: ''; + font-style: italic; +} + +.reveal iframe { + z-index: 1; +} + +/** Prevents layering issues in certain browser/transition combinations */ +.reveal a { + position: relative; +} + +.reveal .stretch { + max-width: none; + max-height: none; +} + +.reveal pre.stretch code { + height: 100%; + max-height: 100%; + box-sizing: border-box; +} + + +/********************************************* + * CONTROLS + *********************************************/ + +.reveal .controls { + display: none; + position: fixed; + width: 110px; + height: 110px; + z-index: 30; + right: 10px; + bottom: 10px; + + -webkit-user-select: none; +} + +.reveal .controls button { + padding: 0; + position: absolute; + opacity: 0.05; + width: 0; + height: 0; + background-color: transparent; + border: 12px solid transparent; + transform: scale(.9999); + transition: all 0.2s ease; + -webkit-appearance: none; + -webkit-tap-highlight-color: rgba( 0, 0, 0, 0 ); +} + +.reveal .controls .enabled { + opacity: 0.7; + cursor: pointer; +} + +.reveal .controls .enabled:active { + margin-top: 1px; +} + + .reveal .controls .navigate-left { + top: 42px; + + border-right-width: 22px; + border-right-color: #000; + } + .reveal .controls .navigate-left.fragmented { + opacity: 0.3; + } + + .reveal .controls .navigate-right { + left: 74px; + top: 42px; + + border-left-width: 22px; + border-left-color: #000; + } + .reveal .controls .navigate-right.fragmented { + opacity: 0.3; + } + + .reveal .controls .navigate-up { + left: 42px; + + border-bottom-width: 22px; + border-bottom-color: #000; + } + .reveal .controls .navigate-up.fragmented { + opacity: 0.3; + } + + .reveal .controls .navigate-down { + left: 42px; + top: 74px; + + border-top-width: 22px; + border-top-color: #000; + } + .reveal .controls .navigate-down.fragmented { + opacity: 0.3; + } + + +/********************************************* + * PROGRESS BAR + *********************************************/ + +.reveal .progress { + position: fixed; + display: none; + height: 3px; + width: 100%; + bottom: 0; + left: 0; + z-index: 10; + + background-color: rgba( 0, 0, 0, 0.2 ); +} + .reveal .progress:after { + content: ''; + display: block; + position: absolute; + height: 20px; + width: 100%; + top: -20px; + } + .reveal .progress span { + display: block; + height: 100%; + width: 0px; + + background-color: #000; + transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); + } + +/********************************************* + * SLIDE NUMBER + *********************************************/ + +.reveal .slide-number { + position: fixed; + display: block; + right: 8px; + bottom: 8px; + z-index: 31; + font-family: Helvetica, sans-serif; + font-size: 12px; + line-height: 1; + color: #fff; + background-color: rgba( 0, 0, 0, 0.4 ); + padding: 5px; +} + +.reveal .slide-number-delimiter { + margin: 0 3px; +} + +/********************************************* + * SLIDES + *********************************************/ + +.reveal { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; + 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 { + -ms-perspective: 600px; +} + +.reveal .slides>section, +.reveal .slides>section>section { + display: none; + position: absolute; + width: 100%; + padding: 20px 0px; + pointer-events: auto; + + z-index: 10; + transform-style: flat; + transition: transform-origin 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), + transform 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), + visibility 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985), + opacity 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); +} + +/* Global transition speed settings */ +.reveal[data-transition-speed="fast"] .slides section { + transition-duration: 400ms; +} +.reveal[data-transition-speed="slow"] .slides section { + transition-duration: 1200ms; +} + +/* Slide-specific transition speed overrides */ +.reveal .slides section[data-transition-speed="fast"] { + transition-duration: 400ms; +} +.reveal .slides section[data-transition-speed="slow"] { + transition-duration: 1200ms; +} + +.reveal .slides>section.stack { + padding-top: 0; + padding-bottom: 0; +} + +.reveal .slides>section.present, +.reveal .slides>section>section.present { + display: block; + z-index: 11; + opacity: 1; +} + +.reveal .slides>section:empty, +.reveal .slides>section>section:empty, +.reveal .slides>section[data-background-interactive], +.reveal .slides>section>section[data-background-interactive] { + pointer-events: none; +} + +.reveal.center, +.reveal.center .slides, +.reveal.center .slides section { + min-height: 0 !important; +} + +/* Don't allow interaction with invisible slides */ +.reveal .slides>section.future, +.reveal .slides>section>section.future, +.reveal .slides>section.past, +.reveal .slides>section>section.past { + pointer-events: none; +} + +.reveal.overview .slides>section, +.reveal.overview .slides>section>section { + pointer-events: auto; +} + +.reveal .slides>section.past, +.reveal .slides>section.future, +.reveal .slides>section>section.past, +.reveal .slides>section>section.future { + opacity: 0; +} + + +/********************************************* + * Mixins for readability of transitions + *********************************************/ + +@mixin transition-global($style) { + .reveal .slides section[data-transition=#{$style}], + .reveal.#{$style} .slides section:not([data-transition]) { + @content; + } +} +@mixin transition-stack($style) { + .reveal .slides section[data-transition=#{$style}].stack, + .reveal.#{$style} .slides section.stack { + @content; + } +} +@mixin transition-horizontal-past($style) { + .reveal .slides>section[data-transition=#{$style}].past, + .reveal .slides>section[data-transition~=#{$style}-out].past, + .reveal.#{$style} .slides>section:not([data-transition]).past { + @content; + } +} +@mixin transition-horizontal-future($style) { + .reveal .slides>section[data-transition=#{$style}].future, + .reveal .slides>section[data-transition~=#{$style}-in].future, + .reveal.#{$style} .slides>section:not([data-transition]).future { + @content; + } +} + +@mixin transition-vertical-past($style) { + .reveal .slides>section>section[data-transition=#{$style}].past, + .reveal .slides>section>section[data-transition~=#{$style}-out].past, + .reveal.#{$style} .slides>section>section:not([data-transition]).past { + @content; + } +} +@mixin transition-vertical-future($style) { + .reveal .slides>section>section[data-transition=#{$style}].future, + .reveal .slides>section>section[data-transition~=#{$style}-in].future, + .reveal.#{$style} .slides>section>section:not([data-transition]).future { + @content; + } +} + +/********************************************* + * SLIDE TRANSITION + * Aliased 'linear' for backwards compatibility + *********************************************/ + +@each $stylename in slide, linear { + .reveal.#{$stylename} section { + backface-visibility: hidden; + } + @include transition-horizontal-past(#{$stylename}) { + transform: translate(-150%, 0); + } + @include transition-horizontal-future(#{$stylename}) { + transform: translate(150%, 0); + } + @include transition-vertical-past(#{$stylename}) { + transform: translate(0, -150%); + } + @include transition-vertical-future(#{$stylename}) { + transform: translate(0, 150%); + } +} + +/********************************************* + * CONVEX TRANSITION + * Aliased 'default' for backwards compatibility + *********************************************/ + +@each $stylename in default, convex { + @include transition-stack(#{$stylename}) { + transform-style: preserve-3d; + } + + @include transition-horizontal-past(#{$stylename}) { + transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); + } + @include transition-horizontal-future(#{$stylename}) { + transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); + } + @include transition-vertical-past(#{$stylename}) { + transform: translate3d(0, -300px, 0) rotateX(70deg) translate3d(0, -300px, 0); + } + @include transition-vertical-future(#{$stylename}) { + transform: translate3d(0, 300px, 0) rotateX(-70deg) translate3d(0, 300px, 0); + } +} + +/********************************************* + * CONCAVE TRANSITION + *********************************************/ + +@include transition-stack(concave) { + transform-style: preserve-3d; +} + +@include transition-horizontal-past(concave) { + transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); +} +@include transition-horizontal-future(concave) { + transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); +} +@include transition-vertical-past(concave) { + transform: translate3d(0, -80%, 0) rotateX(-70deg) translate3d(0, -80%, 0); +} +@include transition-vertical-future(concave) { + transform: translate3d(0, 80%, 0) rotateX(70deg) translate3d(0, 80%, 0); +} + + +/********************************************* + * ZOOM TRANSITION + *********************************************/ + +@include transition-global(zoom) { + transition-timing-function: ease; +} +@include transition-horizontal-past(zoom) { + visibility: hidden; + transform: scale(16); +} +@include transition-horizontal-future(zoom) { + visibility: hidden; + transform: scale(0.2); +} +@include transition-vertical-past(zoom) { + transform: translate(0, -150%); +} +@include transition-vertical-future(zoom) { + transform: translate(0, 150%); +} + + +/********************************************* + * CUBE TRANSITION + * + * WARNING: + * this is deprecated and will be removed in a + * future version. + *********************************************/ + +.reveal.cube .slides { + perspective: 1300px; +} + +.reveal.cube .slides section { + padding: 30px; + min-height: 700px; + backface-visibility: hidden; + box-sizing: border-box; + transform-style: preserve-3d; +} + .reveal.center.cube .slides section { + min-height: 0; + } + .reveal.cube .slides section:not(.stack):before { + content: ''; + position: absolute; + display: block; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0,0,0,0.1); + border-radius: 4px; + transform: translateZ( -20px ); + } + .reveal.cube .slides section:not(.stack):after { + content: ''; + position: absolute; + display: block; + width: 90%; + height: 30px; + left: 5%; + bottom: 0; + background: none; + z-index: 1; + + border-radius: 4px; + box-shadow: 0px 95px 25px rgba(0,0,0,0.2); + transform: translateZ(-90px) rotateX( 65deg ); + } + +.reveal.cube .slides>section.stack { + padding: 0; + background: none; +} + +.reveal.cube .slides>section.past { + transform-origin: 100% 0%; + transform: translate3d(-100%, 0, 0) rotateY(-90deg); +} + +.reveal.cube .slides>section.future { + transform-origin: 0% 0%; + transform: translate3d(100%, 0, 0) rotateY(90deg); +} + +.reveal.cube .slides>section>section.past { + transform-origin: 0% 100%; + transform: translate3d(0, -100%, 0) rotateX(90deg); +} + +.reveal.cube .slides>section>section.future { + transform-origin: 0% 0%; + transform: translate3d(0, 100%, 0) rotateX(-90deg); +} + + +/********************************************* + * PAGE TRANSITION + * + * WARNING: + * this is deprecated and will be removed in a + * future version. + *********************************************/ + +.reveal.page .slides { + perspective-origin: 0% 50%; + perspective: 3000px; +} + +.reveal.page .slides section { + padding: 30px; + min-height: 700px; + box-sizing: border-box; + transform-style: preserve-3d; +} + .reveal.page .slides section.past { + z-index: 12; + } + .reveal.page .slides section:not(.stack):before { + content: ''; + position: absolute; + display: block; + width: 100%; + height: 100%; + left: 0; + top: 0; + background: rgba(0,0,0,0.1); + transform: translateZ( -20px ); + } + .reveal.page .slides section:not(.stack):after { + content: ''; + position: absolute; + display: block; + width: 90%; + height: 30px; + left: 5%; + bottom: 0; + background: none; + z-index: 1; + + border-radius: 4px; + box-shadow: 0px 95px 25px rgba(0,0,0,0.2); + + -webkit-transform: translateZ(-90px) rotateX( 65deg ); + } + +.reveal.page .slides>section.stack { + padding: 0; + background: none; +} + +.reveal.page .slides>section.past { + transform-origin: 0% 0%; + transform: translate3d(-40%, 0, 0) rotateY(-80deg); +} + +.reveal.page .slides>section.future { + transform-origin: 100% 0%; + transform: translate3d(0, 0, 0); +} + +.reveal.page .slides>section>section.past { + transform-origin: 0% 0%; + transform: translate3d(0, -40%, 0) rotateX(80deg); +} + +.reveal.page .slides>section>section.future { + transform-origin: 0% 100%; + transform: translate3d(0, 0, 0); +} + + +/********************************************* + * FADE TRANSITION + *********************************************/ + +.reveal .slides section[data-transition=fade], +.reveal.fade .slides section:not([data-transition]), +.reveal.fade .slides>section>section:not([data-transition]) { + transform: none; + transition: opacity 0.5s; +} + + +.reveal.fade.overview .slides section, +.reveal.fade.overview .slides>section>section { + transition: none; +} + + +/********************************************* + * NO TRANSITION + *********************************************/ + +@include transition-global(none) { + transform: none; + transition: none; +} + + +/********************************************* + * PAUSED MODE + *********************************************/ + +.reveal .pause-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: black; + visibility: hidden; + opacity: 0; + z-index: 100; + transition: all 1s ease; +} +.reveal.paused .pause-overlay { + visibility: visible; + opacity: 1; +} + + +/********************************************* + * FALLBACK + *********************************************/ + +.no-transforms { + overflow-y: auto; +} + +.no-transforms .reveal .slides { + position: relative; + width: 80%; + height: auto !important; + top: 0; + left: 50%; + margin: 0; + text-align: center; +} + +.no-transforms .reveal .controls, +.no-transforms .reveal .progress { + display: none !important; +} + +.no-transforms .reveal .slides section { + display: block !important; + opacity: 1 !important; + position: relative !important; + height: auto; + min-height: 0; + top: 0; + left: -50%; + margin: 70px 0; + transform: none; +} + +.no-transforms .reveal .slides section section { + left: 0; +} + +.reveal .no-transition, +.reveal .no-transition * { + transition: none !important; +} + + +/********************************************* + * PER-SLIDE BACKGROUNDS + *********************************************/ + +.reveal .backgrounds { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + perspective: 600px; +} + .reveal .slide-background { + display: none; + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + visibility: hidden; + overflow: hidden; + + background-color: rgba( 0, 0, 0, 0 ); + background-position: 50% 50%; + background-repeat: no-repeat; + background-size: cover; + + transition: all 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); + } + + .reveal .slide-background.stack { + display: block; + } + + .reveal .slide-background.present { + opacity: 1; + visibility: visible; + z-index: 2; + } + + .print-pdf .reveal .slide-background { + opacity: 1 !important; + visibility: visible !important; + } + +/* Video backgrounds */ +.reveal .slide-background video { + position: absolute; + width: 100%; + height: 100%; + max-width: none; + max-height: none; + top: 0; + left: 0; + object-fit: cover; +} + .reveal .slide-background[data-background-size="contain"] video { + object-fit: contain; + } + +/* Immediate transition style */ +.reveal[data-background-transition=none]>.backgrounds .slide-background, +.reveal>.backgrounds .slide-background[data-background-transition=none] { + transition: none; +} + +/* Slide */ +.reveal[data-background-transition=slide]>.backgrounds .slide-background, +.reveal>.backgrounds .slide-background[data-background-transition=slide] { + opacity: 1; + backface-visibility: hidden; +} + .reveal[data-background-transition=slide]>.backgrounds .slide-background.past, + .reveal>.backgrounds .slide-background.past[data-background-transition=slide] { + transform: translate(-100%, 0); + } + .reveal[data-background-transition=slide]>.backgrounds .slide-background.future, + .reveal>.backgrounds .slide-background.future[data-background-transition=slide] { + transform: translate(100%, 0); + } + + .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.past, + .reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=slide] { + transform: translate(0, -100%); + } + .reveal[data-background-transition=slide]>.backgrounds .slide-background>.slide-background.future, + .reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=slide] { + transform: translate(0, 100%); + } + + +/* Convex */ +.reveal[data-background-transition=convex]>.backgrounds .slide-background.past, +.reveal>.backgrounds .slide-background.past[data-background-transition=convex] { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotateY(-90deg) translate3d(-100%, 0, 0); +} +.reveal[data-background-transition=convex]>.backgrounds .slide-background.future, +.reveal>.backgrounds .slide-background.future[data-background-transition=convex] { + opacity: 0; + transform: translate3d(100%, 0, 0) rotateY(90deg) translate3d(100%, 0, 0); +} + +.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.past, +.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=convex] { + opacity: 0; + transform: translate3d(0, -100%, 0) rotateX(90deg) translate3d(0, -100%, 0); +} +.reveal[data-background-transition=convex]>.backgrounds .slide-background>.slide-background.future, +.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=convex] { + opacity: 0; + transform: translate3d(0, 100%, 0) rotateX(-90deg) translate3d(0, 100%, 0); +} + + +/* Concave */ +.reveal[data-background-transition=concave]>.backgrounds .slide-background.past, +.reveal>.backgrounds .slide-background.past[data-background-transition=concave] { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotateY(90deg) translate3d(-100%, 0, 0); +} +.reveal[data-background-transition=concave]>.backgrounds .slide-background.future, +.reveal>.backgrounds .slide-background.future[data-background-transition=concave] { + opacity: 0; + transform: translate3d(100%, 0, 0) rotateY(-90deg) translate3d(100%, 0, 0); +} + +.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.past, +.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=concave] { + opacity: 0; + transform: translate3d(0, -100%, 0) rotateX(-90deg) translate3d(0, -100%, 0); +} +.reveal[data-background-transition=concave]>.backgrounds .slide-background>.slide-background.future, +.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=concave] { + opacity: 0; + transform: translate3d(0, 100%, 0) rotateX(90deg) translate3d(0, 100%, 0); +} + +/* Zoom */ +.reveal[data-background-transition=zoom]>.backgrounds .slide-background, +.reveal>.backgrounds .slide-background[data-background-transition=zoom] { + transition-timing-function: ease; +} + +.reveal[data-background-transition=zoom]>.backgrounds .slide-background.past, +.reveal>.backgrounds .slide-background.past[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(16); +} +.reveal[data-background-transition=zoom]>.backgrounds .slide-background.future, +.reveal>.backgrounds .slide-background.future[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(0.2); +} + +.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.past, +.reveal>.backgrounds .slide-background>.slide-background.past[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(16); +} +.reveal[data-background-transition=zoom]>.backgrounds .slide-background>.slide-background.future, +.reveal>.backgrounds .slide-background>.slide-background.future[data-background-transition=zoom] { + opacity: 0; + visibility: hidden; + transform: scale(0.2); +} + + +/* Global transition speed settings */ +.reveal[data-transition-speed="fast"]>.backgrounds .slide-background { + transition-duration: 400ms; +} +.reveal[data-transition-speed="slow"]>.backgrounds .slide-background { + transition-duration: 1200ms; +} + + +/********************************************* + * OVERVIEW + *********************************************/ + +.reveal.overview { + perspective-origin: 50% 50%; + perspective: 700px; + + .slides { + // Fixes overview rendering errors in FF48+, not applied to + // other browsers since it degrades performance + -moz-transform-style: preserve-3d; + } + + .slides section { + height: 100%; + top: 0 !important; + opacity: 1 !important; + overflow: hidden; + visibility: visible !important; + cursor: pointer; + box-sizing: border-box; + } + .slides section:hover, + .slides section.present { + outline: 10px solid rgba(150,150,150,0.4); + outline-offset: 10px; + } + .slides section .fragment { + opacity: 1; + transition: none; + } + .slides section:after, + .slides section:before { + display: none !important; + } + .slides>section.stack { + padding: 0; + top: 0 !important; + background: none; + outline: none; + overflow: visible; + } + + .backgrounds { + perspective: inherit; + + // Fixes overview rendering errors in FF48+, not applied to + // other browsers since it degrades performance + -moz-transform-style: preserve-3d; + } + + .backgrounds .slide-background { + opacity: 1; + visibility: visible; + + // This can't be applied to the slide itself in Safari + outline: 10px solid rgba(150,150,150,0.1); + outline-offset: 10px; + } + + .backgrounds .slide-background.stack { + overflow: visible; + } +} + +// Disable transitions transitions while we're activating +// or deactivating the overview mode. +.reveal.overview .slides section, +.reveal.overview-deactivating .slides section { + transition: none; +} + +.reveal.overview .backgrounds .slide-background, +.reveal.overview-deactivating .backgrounds .slide-background { + transition: none; +} + + +/********************************************* + * RTL SUPPORT + *********************************************/ + +.reveal.rtl .slides, +.reveal.rtl .slides h1, +.reveal.rtl .slides h2, +.reveal.rtl .slides h3, +.reveal.rtl .slides h4, +.reveal.rtl .slides h5, +.reveal.rtl .slides h6 { + direction: rtl; + font-family: sans-serif; +} + +.reveal.rtl pre, +.reveal.rtl code { + direction: ltr; +} + +.reveal.rtl ol, +.reveal.rtl ul { + text-align: right; +} + +.reveal.rtl .progress span { + float: right +} + +/********************************************* + * PARALLAX BACKGROUND + *********************************************/ + +.reveal.has-parallax-background .backgrounds { + transition: all 0.8s ease; +} + +/* Global transition speed settings */ +.reveal.has-parallax-background[data-transition-speed="fast"] .backgrounds { + transition-duration: 400ms; +} +.reveal.has-parallax-background[data-transition-speed="slow"] .backgrounds { + transition-duration: 1200ms; +} + + +/********************************************* + * LINK PREVIEW OVERLAY + *********************************************/ + +.reveal .overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; + background: rgba( 0, 0, 0, 0.9 ); + opacity: 0; + visibility: hidden; + transition: all 0.3s ease; +} + .reveal .overlay.visible { + opacity: 1; + visibility: visible; + } + + .reveal .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: visible; + opacity: 0.6; + transition: all 0.3s ease; + } + + .reveal .overlay header { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 40px; + z-index: 2; + border-bottom: 1px solid #222; + } + .reveal .overlay header a { + display: inline-block; + width: 40px; + height: 40px; + line-height: 36px; + padding: 0 10px; + float: right; + opacity: 0.6; + + box-sizing: border-box; + } + .reveal .overlay header a:hover { + opacity: 1; + } + .reveal .overlay header a .icon { + display: inline-block; + width: 20px; + height: 20px; + + background-position: 50% 50%; + background-size: 100%; + background-repeat: no-repeat; + } + .reveal .overlay header a.close .icon { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABkklEQVRYR8WX4VHDMAxG6wnoJrABZQPYBCaBTWAD2g1gE5gg6OOsXuxIlr40d81dfrSJ9V4c2VLK7spHuTJ/5wpM07QXuXc5X0opX2tEJcadjHuV80li/FgxTIEK/5QBCICBD6xEhSMGHgQPgBgLiYVAB1dpSqKDawxTohFw4JSEA3clzgIBPCURwE2JucBR7rhPJJv5OpJwDX+SfDjgx1wACQeJG1aChP9K/IMmdZ8DtESV1WyP3Bt4MwM6sj4NMxMYiqUWHQu4KYA/SYkIjOsm3BXYWMKFDwU2khjCQ4ELJUJ4SmClRArOCmSXGuKma0fYD5CbzHxFpCSGAhfAVSSUGDUk2BWZaff2g6GE15BsBQ9nwmpIGDiyHQddwNTMKkbZaf9fajXQca1EX44puJZUsnY0ObGmITE3GVLCbEhQUjGVt146j6oasWN+49Vph2w1pZ5EansNZqKBm1txbU57iRRcZ86RWMDdWtBJUHBHwoQPi1GV+JCbntmvok7iTX4/Up9mgyTc/FJYDTcndgH/AA5A/CHsyEkVAAAAAElFTkSuQmCC); + } + .reveal .overlay header a.external .icon { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAcElEQVRYR+2WSQoAIQwEzf8f7XiOMkUQxUPlGkM3hVmiQfQR9GYnH1SsAQlI4DiBqkCMoNb9y2e90IAEJPAcgdznU9+engMaeJ7Azh5Y1U67gAho4DqBqmB1buAf0MB1AlVBek83ZPkmJMGc1wAR+AAqod/B97TRpQAAAABJRU5ErkJggg==); + } + + .reveal .overlay .viewport { + position: absolute; + display: flex; + top: 40px; + right: 0; + bottom: 0; + left: 0; + } + + .reveal .overlay.overlay-preview .viewport iframe { + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + border: 0; + + opacity: 0; + visibility: hidden; + transition: all 0.3s ease; + } + + .reveal .overlay.overlay-preview.loaded .viewport iframe { + opacity: 1; + visibility: visible; + } + + .reveal .overlay.overlay-preview.loaded .viewport-inner { + position: absolute; + z-index: -1; + left: 0; + top: 45%; + width: 100%; + text-align: center; + letter-spacing: normal; + } + .reveal .overlay.overlay-preview .x-frame-error { + opacity: 0; + transition: opacity 0.3s ease 0.3s; + } + .reveal .overlay.overlay-preview.loaded .x-frame-error { + opacity: 1; + } + + .reveal .overlay.overlay-preview.loaded .spinner { + opacity: 0; + visibility: hidden; + transform: scale(0.2); + } + + .reveal .overlay.overlay-help .viewport { + overflow: auto; + color: #fff; + } + + .reveal .overlay.overlay-help .viewport .viewport-inner { + width: 600px; + margin: auto; + padding: 20px 20px 80px 20px; + text-align: center; + letter-spacing: normal; + } + + .reveal .overlay.overlay-help .viewport .viewport-inner .title { + font-size: 20px; + } + + .reveal .overlay.overlay-help .viewport .viewport-inner table { + border: 1px solid #fff; + border-collapse: collapse; + font-size: 16px; + } + + .reveal .overlay.overlay-help .viewport .viewport-inner table th, + .reveal .overlay.overlay-help .viewport .viewport-inner table td { + width: 200px; + padding: 14px; + border: 1px solid #fff; + vertical-align: middle; + } + + .reveal .overlay.overlay-help .viewport .viewport-inner table th { + padding-top: 20px; + padding-bottom: 20px; + } + + + +/********************************************* + * PLAYBACK COMPONENT + *********************************************/ + +.reveal .playback { + position: fixed; + left: 15px; + bottom: 20px; + z-index: 30; + cursor: pointer; + transition: all 400ms ease; +} + +.reveal.overview .playback { + opacity: 0; + visibility: hidden; +} + + +/********************************************* + * ROLLING LINKS + *********************************************/ + +.reveal .roll { + display: inline-block; + line-height: 1.2; + overflow: hidden; + + vertical-align: top; + perspective: 400px; + perspective-origin: 50% 50%; +} + .reveal .roll:hover { + background: none; + text-shadow: none; + } +.reveal .roll span { + display: block; + position: relative; + padding: 0 2px; + + pointer-events: none; + transition: all 400ms ease; + transform-origin: 50% 0%; + transform-style: preserve-3d; + backface-visibility: hidden; +} + .reveal .roll:hover span { + background: rgba(0,0,0,0.5); + transform: translate3d( 0px, 0px, -45px ) rotateX( 90deg ); + } +.reveal .roll span:after { + content: attr(data-title); + + display: block; + position: absolute; + left: 0; + top: 0; + padding: 0 2px; + backface-visibility: hidden; + transform-origin: 50% 0%; + transform: translate3d( 0px, 110%, 0px ) rotateX( -90deg ); +} + + +/********************************************* + * SPEAKER NOTES + *********************************************/ + +// Hide on-page notes +.reveal aside.notes { + display: none; +} + +// An interface element that can optionally be used to show the +// speaker notes to all viewers, on top of the presentation +.reveal .speaker-notes { + display: none; + position: absolute; + width: 70%; + max-height: 15%; + left: 15%; + bottom: 26px; + padding: 10px; + z-index: 1; + font-size: 18px; + line-height: 1.4; + color: #fff; + background-color: rgba(0,0,0,0.5); + overflow: auto; + box-sizing: border-box; + text-align: left; + font-family: Helvetica, sans-serif; + -webkit-overflow-scrolling: touch; +} + +.reveal .speaker-notes.visible:not(:empty) { + display: block; +} + +@media screen and (max-width: 1024px) { + .reveal .speaker-notes { + font-size: 14px; + } +} + +@media screen and (max-width: 600px) { + .reveal .speaker-notes { + width: 90%; + left: 5%; + } +} + + +/********************************************* + * ZOOM PLUGIN + *********************************************/ + +.zoomed .reveal *, +.zoomed .reveal *:before, +.zoomed .reveal *:after { + backface-visibility: visible !important; +} + +.zoomed .reveal .progress, +.zoomed .reveal .controls { + opacity: 0; +} + +.zoomed .reveal .roll span { + background: none; +} + +.zoomed .reveal .roll span:after { + visibility: hidden; +} diff --git a/css/theme/README.md b/css/theme/README.md new file mode 100644 index 0000000..1bca121 --- /dev/null +++ b/css/theme/README.md @@ -0,0 +1,21 @@ +## Dependencies + +Themes are written using Sass to keep things modular and reduce the need for repeated selectors across files. Make sure that you have the reveal.js development environment including the Grunt dependencies installed before proceeding: https://github.com/hakimel/reveal.js#full-setup + +## Creating a Theme + +To create your own theme, start by duplicating a ```.scss``` file in [/css/theme/source](https://github.com/hakimel/reveal.js/blob/master/css/theme/source). It will be automatically compiled by Grunt from Sass to CSS (see the [Gruntfile](https://github.com/hakimel/reveal.js/blob/master/Gruntfile.js)) when you run `grunt css-themes`. + +Each theme file does four things in the following order: + +1. **Include [/css/theme/template/mixins.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/mixins.scss)** +Shared utility functions. + +2. **Include [/css/theme/template/settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss)** +Declares a set of custom variables that the template file (step 4) expects. Can be overridden in step 3. + +3. **Override** +This is where you override the default theme. Either by specifying variables (see [settings.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/settings.scss) for reference) or by adding any selectors and styles you please. + +4. **Include [/css/theme/template/theme.scss](https://github.com/hakimel/reveal.js/blob/master/css/theme/template/theme.scss)** +The template theme file which will generate final CSS output based on the currently defined variables. diff --git a/css/theme/beige.css b/css/theme/beige.css new file mode 100644 index 0000000..7424a05 --- /dev/null +++ b/css/theme/beige.css @@ -0,0 +1,296 @@ +/** + * Beige theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ +@import url(../../lib/font/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); +/********************************************* + * GLOBAL STYLES + *********************************************/ +body { + background: #f7f2d3; + background: -moz-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); + background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, white), color-stop(100%, #f7f2d3)); + background: -webkit-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); + background: -o-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); + background: -ms-radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); + background: radial-gradient(center, circle cover, white 0%, #f7f2d3 100%); + background-color: #f7f3de; } + +.reveal { + font-family: "Lato", sans-serif; + font-size: 40px; + font-weight: normal; + color: #333; } + +::selection { + color: #fff; + background: rgba(79, 64, 28, 0.99); + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: rgba(79, 64, 28, 0.99); + 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: 0 0 20px 0; + color: #333; + font-family: "League Gothic", Impact, sans-serif; + font-weight: normal; + line-height: 1.2; + letter-spacing: normal; + text-transform: uppercase; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 3.77em; } + +.reveal h2 { + font-size: 2.11em; } + +.reveal h3 { + font-size: 1.55em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + 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); } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #8b743d; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #c0a86e; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #564826; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #333; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #8b743d; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #8b743d; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #8b743d; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #8b743d; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #8b743d; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #c0a86e; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #c0a86e; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #c0a86e; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #c0a86e; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #8b743d; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/theme/black.css b/css/theme/black.css new file mode 100644 index 0000000..96e4fd4 --- /dev/null +++ b/css/theme/black.css @@ -0,0 +1,292 @@ +/** + * Black theme for reveal.js. This is the opposite of the 'white' theme. + * + * By Hakim El Hattab, http://hakim.se + */ +@import url(../../lib/font/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 + *********************************************/ +body { + background: #222; + background-color: #222; } + +.reveal { + font-family: "Source Sans Pro", Helvetica, sans-serif; + font-size: 42px; + font-weight: normal; + color: #fff; } + +::selection { + color: #fff; + background: #bee4fd; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #bee4fd; + 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: 0 0 20px 0; + color: #fff; + font-family: "Source Sans Pro", Helvetica, sans-serif; + font-weight: 600; + line-height: 1.2; + letter-spacing: normal; + text-transform: uppercase; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 2.5em; } + +.reveal h2 { + font-size: 1.6em; } + +.reveal h3 { + font-size: 1.3em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + text-shadow: none; } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #42affa; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #8dcffc; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #068de9; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #fff; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #42affa; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #42affa; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #42affa; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #42affa; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #42affa; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #8dcffc; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #8dcffc; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #8dcffc; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #8dcffc; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #42affa; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/theme/blood.css b/css/theme/blood.css new file mode 100644 index 0000000..1e0fbaf --- /dev/null +++ b/css/theme/blood.css @@ -0,0 +1,315 @@ +/** + * 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); +/********************************************* + * GLOBAL STYLES + *********************************************/ +body { + background: #222; + background-color: #222; } + +.reveal { + font-family: Ubuntu, "sans-serif"; + font-size: 40px; + font-weight: normal; + color: #eee; } + +::selection { + color: #fff; + background: #a23; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #a23; + 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: 0 0 20px 0; + color: #eee; + font-family: Ubuntu, "sans-serif"; + font-weight: normal; + line-height: 1.2; + letter-spacing: normal; + text-transform: uppercase; + text-shadow: 2px 2px 2px #222; + word-wrap: break-word; } + +.reveal h1 { + font-size: 3.77em; } + +.reveal h2 { + font-size: 2.11em; } + +.reveal h3 { + font-size: 1.55em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + 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); } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #a23; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #dd5566; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #6a1520; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #eee; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #a23; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #a23; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #a23; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #a23; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #a23; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #dd5566; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #dd5566; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #dd5566; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #dd5566; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #a23; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } + +.reveal p { + font-weight: 300; + text-shadow: 1px 1px #222; } + +.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; } diff --git a/css/theme/league.css b/css/theme/league.css new file mode 100644 index 0000000..63711c3 --- /dev/null +++ b/css/theme/league.css @@ -0,0 +1,298 @@ +/** + * 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(../../lib/font/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); +/********************************************* + * GLOBAL STYLES + *********************************************/ +body { + background: #1c1e20; + background: -moz-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); + background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #555a5f), color-stop(100%, #1c1e20)); + background: -webkit-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); + background: -o-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); + background: -ms-radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); + background: radial-gradient(center, circle cover, #555a5f 0%, #1c1e20 100%); + background-color: #2b2b2b; } + +.reveal { + font-family: "Lato", sans-serif; + font-size: 40px; + font-weight: normal; + color: #eee; } + +::selection { + color: #fff; + background: #FF5E99; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #FF5E99; + 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: 0 0 20px 0; + color: #eee; + font-family: "League Gothic", Impact, sans-serif; + font-weight: normal; + line-height: 1.2; + letter-spacing: normal; + text-transform: uppercase; + text-shadow: 0px 0px 6px rgba(0, 0, 0, 0.2); + word-wrap: break-word; } + +.reveal h1 { + font-size: 3.77em; } + +.reveal h2 { + font-size: 2.11em; } + +.reveal h3 { + font-size: 1.55em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + 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); } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #13DAEC; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #71e9f4; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #0d99a5; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #eee; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #13DAEC; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #13DAEC; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #13DAEC; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #13DAEC; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #13DAEC; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #71e9f4; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #71e9f4; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #71e9f4; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #71e9f4; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #13DAEC; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/theme/moon.css b/css/theme/moon.css new file mode 100644 index 0000000..791a4a0 --- /dev/null +++ b/css/theme/moon.css @@ -0,0 +1,296 @@ +/** + * Solarized Dark theme for reveal.js. + * Author: Achim Staebler + */ +@import url(../../lib/font/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 + *********************************************/ +body { + background: #002b36; + background-color: #002b36; } + +.reveal { + font-family: "Lato", sans-serif; + font-size: 40px; + font-weight: normal; + color: #93a1a1; } + +::selection { + color: #fff; + background: #d33682; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #d33682; + 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: 0 0 20px 0; + color: #eee8d5; + font-family: "League Gothic", Impact, sans-serif; + font-weight: normal; + line-height: 1.2; + letter-spacing: normal; + text-transform: uppercase; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 3.77em; } + +.reveal h2 { + font-size: 2.11em; } + +.reveal h3 { + font-size: 1.55em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + text-shadow: none; } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #268bd2; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #78b9e6; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #1a6091; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #93a1a1; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #268bd2; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #268bd2; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #268bd2; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #268bd2; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #268bd2; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #78b9e6; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #78b9e6; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #78b9e6; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #78b9e6; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #268bd2; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/theme/night.css b/css/theme/night.css new file mode 100644 index 0000000..3db1175 --- /dev/null +++ b/css/theme/night.css @@ -0,0 +1,290 @@ +/** + * 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); +/********************************************* + * GLOBAL STYLES + *********************************************/ +body { + background: #111; + background-color: #111; } + +.reveal { + font-family: "Open Sans", sans-serif; + font-size: 40px; + font-weight: normal; + color: #eee; } + +::selection { + color: #fff; + background: #e7ad52; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #e7ad52; + 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: 0 0 20px 0; + color: #eee; + font-family: "Montserrat", Impact, sans-serif; + font-weight: normal; + line-height: 1.2; + letter-spacing: -0.03em; + text-transform: none; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 3.77em; } + +.reveal h2 { + font-size: 2.11em; } + +.reveal h3 { + font-size: 1.55em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + text-shadow: none; } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #e7ad52; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #f3d7ac; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #d08a1d; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #eee; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #e7ad52; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #e7ad52; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #e7ad52; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #e7ad52; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #e7ad52; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #f3d7ac; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #f3d7ac; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #f3d7ac; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #f3d7ac; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #e7ad52; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/theme/serif.css b/css/theme/serif.css new file mode 100644 index 0000000..e9b08c6 --- /dev/null +++ b/css/theme/serif.css @@ -0,0 +1,292 @@ +/** + * 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; } + +/********************************************* + * GLOBAL STYLES + *********************************************/ +body { + background: #F0F1EB; + background-color: #F0F1EB; } + +.reveal { + font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; + font-size: 40px; + font-weight: normal; + color: #000; } + +::selection { + color: #fff; + background: #26351C; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #26351C; + 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: 0 0 20px 0; + color: #383D3D; + font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif; + font-weight: normal; + line-height: 1.2; + letter-spacing: normal; + text-transform: none; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 3.77em; } + +.reveal h2 { + font-size: 2.11em; } + +.reveal h3 { + font-size: 1.55em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + text-shadow: none; } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #51483D; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #8b7c69; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #25211c; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #000; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #51483D; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #51483D; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #51483D; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #51483D; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #51483D; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #8b7c69; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #8b7c69; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #8b7c69; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #8b7c69; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #51483D; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/theme/simple.css b/css/theme/simple.css new file mode 100644 index 0000000..f64343e --- /dev/null +++ b/css/theme/simple.css @@ -0,0 +1,295 @@ +/** + * 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 + *********************************************/ +body { + background: #fff; + background-color: #fff; } + +.reveal { + font-family: "Lato", sans-serif; + font-size: 40px; + font-weight: normal; + color: #000; } + +::selection { + color: #fff; + background: rgba(0, 0, 0, 0.99); + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: rgba(0, 0, 0, 0.99); + 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: 0 0 20px 0; + color: #000; + font-family: "News Cycle", Impact, sans-serif; + font-weight: normal; + line-height: 1.2; + letter-spacing: normal; + text-transform: none; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 3.77em; } + +.reveal h2 { + font-size: 2.11em; } + +.reveal h3 { + font-size: 1.55em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + text-shadow: none; } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #00008B; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #0000f1; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #00003f; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #000; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #00008B; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #00008B; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #00008B; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #00008B; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #00008B; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #0000f1; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #0000f1; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #0000f1; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #0000f1; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #00008B; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/theme/sky.css b/css/theme/sky.css new file mode 100644 index 0000000..33689eb --- /dev/null +++ b/css/theme/sky.css @@ -0,0 +1,299 @@ +/** + * 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; } + +/********************************************* + * GLOBAL STYLES + *********************************************/ +body { + 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: #f7fbfc; } + +.reveal { + font-family: "Open Sans", sans-serif; + font-size: 40px; + font-weight: normal; + color: #333; } + +::selection { + color: #fff; + background: #134674; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #134674; + 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: 0 0 20px 0; + color: #333; + font-family: "Quicksand", sans-serif; + font-weight: normal; + line-height: 1.2; + letter-spacing: -0.08em; + text-transform: uppercase; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 3.77em; } + +.reveal h2 { + font-size: 2.11em; } + +.reveal h3 { + font-size: 1.55em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + text-shadow: none; } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #3b759e; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #74a7cb; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #264c66; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #333; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #3b759e; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #3b759e; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #3b759e; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #3b759e; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #3b759e; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #74a7cb; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #74a7cb; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #74a7cb; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #74a7cb; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #3b759e; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/theme/solarized.css b/css/theme/solarized.css new file mode 100644 index 0000000..9bd21aa --- /dev/null +++ b/css/theme/solarized.css @@ -0,0 +1,296 @@ +/** + * Solarized Light theme for reveal.js. + * Author: Achim Staebler + */ +@import url(../../lib/font/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 + *********************************************/ +body { + background: #fdf6e3; + background-color: #fdf6e3; } + +.reveal { + font-family: "Lato", sans-serif; + font-size: 40px; + font-weight: normal; + color: #657b83; } + +::selection { + color: #fff; + background: #d33682; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #d33682; + 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: 0 0 20px 0; + color: #586e75; + font-family: "League Gothic", Impact, sans-serif; + font-weight: normal; + line-height: 1.2; + letter-spacing: normal; + text-transform: uppercase; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 3.77em; } + +.reveal h2 { + font-size: 2.11em; } + +.reveal h3 { + font-size: 1.55em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + text-shadow: none; } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #268bd2; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #78b9e6; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #1a6091; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #657b83; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #268bd2; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #268bd2; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #268bd2; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #268bd2; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #268bd2; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #78b9e6; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #78b9e6; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #78b9e6; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #78b9e6; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #268bd2; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/theme/source/beige.scss b/css/theme/source/beige.scss new file mode 100644 index 0000000..5564f53 --- /dev/null +++ b/css/theme/source/beige.scss @@ -0,0 +1,39 @@ +/** + * Beige theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(../../lib/font/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + + +// Override theme settings (see ../template/settings.scss) +$mainColor: #333; +$headingColor: #333; +$headingTextShadow: none; +$backgroundColor: #f7f3de; +$linkColor: #8b743d; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: rgba(79, 64, 28, 0.99); +$heading1TextShadow: 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,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); + +// Background generator +@mixin bodyBackground() { + @include radial-gradient( rgba(247,242,211,1), rgba(255,255,255,1) ); +} + + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/css/theme/source/black.scss b/css/theme/source/black.scss new file mode 100644 index 0000000..84e8d9a --- /dev/null +++ b/css/theme/source/black.scss @@ -0,0 +1,49 @@ +/** + * Black theme for reveal.js. This is the opposite of the 'white' theme. + * + * By Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(../../lib/font/source-sans-pro/source-sans-pro.css); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #222; + +$mainColor: #fff; +$headingColor: #fff; + +$mainFontSize: 42px; +$mainFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingFontWeight: 600; +$linkColor: #42affa; +$linkColorHover: lighten( $linkColor, 15% ); +$selectionBackgroundColor: lighten( $linkColor, 25% ); + +$heading1Size: 2.5em; +$heading2Size: 1.6em; +$heading3Size: 1.3em; +$heading4Size: 1.0em; + +section.has-light-background { + &, h1, h2, h3, h4, h5, h6 { + color: #222; + } +} + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/css/theme/source/blood.scss b/css/theme/source/blood.scss new file mode 100644 index 0000000..4533fc0 --- /dev/null +++ b/css/theme/source/blood.scss @@ -0,0 +1,78 @@ +/** + * 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. + * + */ + + // Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + +// Include theme-specific fonts + +@import url(https://fonts.googleapis.com/css?family=Ubuntu:300,700,300italic,700italic); + +// Colors used in the theme +$blood: #a23; +$coal: #222; +$codeBackground: #23241f; + +$backgroundColor: $coal; + +// Main text +$mainFont: Ubuntu, 'sans-serif'; +$mainColor: #eee; + +// Headings +$headingFont: Ubuntu, 'sans-serif'; +$headingTextShadow: 2px 2px 2px $coal; + +// h1 shadow, borrowed humbly from +// (c) Default theme by Hakim El Hattab +$heading1TextShadow: 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,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); + +// Links +$linkColor: $blood; +$linkColorHover: lighten( $linkColor, 20% ); + +// Text selection +$selectionBackgroundColor: $blood; +$selectionColor: #fff; + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- + +// some overrides after theme template import + +.reveal p { + font-weight: 300; + text-shadow: 1px 1px $coal; +} + +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + font-weight: 700; +} + +.reveal p code { + background-color: $codeBackground; + display: inline-block; + border-radius: 7px; +} + +.reveal small code { + vertical-align: baseline; +} \ No newline at end of file diff --git a/css/theme/source/league.scss b/css/theme/source/league.scss new file mode 100644 index 0000000..46ea04a --- /dev/null +++ b/css/theme/source/league.scss @@ -0,0 +1,34 @@ +/** + * League theme for reveal.js. + * + * This was the default theme pre-3.0.0. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(../../lib/font/league-gothic/league-gothic.css); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + +// Override theme settings (see ../template/settings.scss) +$headingTextShadow: 0px 0px 6px rgba(0,0,0,0.2); +$heading1TextShadow: 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,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); + +// Background generator +@mixin bodyBackground() { + @include radial-gradient( rgba(28,30,32,1), rgba(85,90,95,1) ); +} + + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/css/theme/source/moon.scss b/css/theme/source/moon.scss new file mode 100644 index 0000000..e47e5b5 --- /dev/null +++ b/css/theme/source/moon.scss @@ -0,0 +1,57 @@ +/** + * Solarized Dark theme for reveal.js. + * Author: Achim Staebler + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(../../lib/font/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; +} + +// Solarized colors +$base03: #002b36; +$base02: #073642; +$base01: #586e75; +$base00: #657b83; +$base0: #839496; +$base1: #93a1a1; +$base2: #eee8d5; +$base3: #fdf6e3; +$yellow: #b58900; +$orange: #cb4b16; +$red: #dc322f; +$magenta: #d33682; +$violet: #6c71c4; +$blue: #268bd2; +$cyan: #2aa198; +$green: #859900; + +// Override theme settings (see ../template/settings.scss) +$mainColor: $base1; +$headingColor: $base2; +$headingTextShadow: none; +$backgroundColor: $base03; +$linkColor: $blue; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: $magenta; + + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/night.scss b/css/theme/source/night.scss new file mode 100644 index 0000000..d49a282 --- /dev/null +++ b/css/theme/source/night.scss @@ -0,0 +1,34 @@ +/** + * Black theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(https://fonts.googleapis.com/css?family=Montserrat:700); +@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic,700italic); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #111; + +$mainFont: 'Open Sans', sans-serif; +$linkColor: #e7ad52; +$linkColorHover: lighten( $linkColor, 20% ); +$headingFont: 'Montserrat', Impact, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: -0.03em; +$headingTextTransform: none; +$selectionBackgroundColor: #e7ad52; + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/css/theme/source/serif.scss b/css/theme/source/serif.scss new file mode 100644 index 0000000..ec3fcb3 --- /dev/null +++ b/css/theme/source/serif.scss @@ -0,0 +1,35 @@ +/** + * 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. + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Override theme settings (see ../template/settings.scss) +$mainFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; +$mainColor: #000; +$headingFont: 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif; +$headingColor: #383D3D; +$headingTextShadow: none; +$headingTextTransform: none; +$backgroundColor: #F0F1EB; +$linkColor: #51483D; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: #26351C; + +.reveal a { + line-height: 1.3em; +} + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/simple.scss b/css/theme/source/simple.scss new file mode 100644 index 0000000..394c9cd --- /dev/null +++ b/css/theme/source/simple.scss @@ -0,0 +1,43 @@ +/** + * 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 + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(https://fonts.googleapis.com/css?family=News+Cycle:400,700); +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); + + +// Override theme settings (see ../template/settings.scss) +$mainFont: 'Lato', sans-serif; +$mainColor: #000; +$headingFont: 'News Cycle', Impact, sans-serif; +$headingColor: #000; +$headingTextShadow: none; +$headingTextTransform: none; +$backgroundColor: #fff; +$linkColor: #00008B; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: rgba(0, 0, 0, 0.99); + +section.has-dark-background { + &, h1, h2, h3, h4, h5, h6 { + color: #fff; + } +} + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/css/theme/source/sky.scss b/css/theme/source/sky.scss new file mode 100644 index 0000000..3fee67c --- /dev/null +++ b/css/theme/source/sky.scss @@ -0,0 +1,46 @@ +/** + * Sky theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(https://fonts.googleapis.com/css?family=Quicksand:400,700,400italic,700italic); +@import url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700); + + +// Override theme settings (see ../template/settings.scss) +$mainFont: 'Open Sans', sans-serif; +$mainColor: #333; +$headingFont: 'Quicksand', sans-serif; +$headingColor: #333; +$headingLetterSpacing: -0.08em; +$headingTextShadow: none; +$backgroundColor: #f7fbfc; +$linkColor: #3b759e; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: #134674; + +// Fix links so they are not cut off +.reveal a { + line-height: 1.3em; +} + +// Background generator +@mixin bodyBackground() { + @include radial-gradient( #add9e4, #f7fbfc ); +} + + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/solarized.scss b/css/theme/source/solarized.scss new file mode 100644 index 0000000..912be56 --- /dev/null +++ b/css/theme/source/solarized.scss @@ -0,0 +1,63 @@ +/** + * Solarized Light theme for reveal.js. + * Author: Achim Staebler + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + + +// Include theme-specific fonts +@import url(../../lib/font/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; +} + +// Solarized colors +$base03: #002b36; +$base02: #073642; +$base01: #586e75; +$base00: #657b83; +$base0: #839496; +$base1: #93a1a1; +$base2: #eee8d5; +$base3: #fdf6e3; +$yellow: #b58900; +$orange: #cb4b16; +$red: #dc322f; +$magenta: #d33682; +$violet: #6c71c4; +$blue: #268bd2; +$cyan: #2aa198; +$green: #859900; + +// Override theme settings (see ../template/settings.scss) +$mainColor: $base00; +$headingColor: $base01; +$headingTextShadow: none; +$backgroundColor: $base3; +$linkColor: $blue; +$linkColorHover: lighten( $linkColor, 20% ); +$selectionBackgroundColor: $magenta; + +// Background generator +// @mixin bodyBackground() { +// @include radial-gradient( rgba($base3,1), rgba(lighten($base3, 20%),1) ); +// } + + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- diff --git a/css/theme/source/white.scss b/css/theme/source/white.scss new file mode 100644 index 0000000..7f06ffd --- /dev/null +++ b/css/theme/source/white.scss @@ -0,0 +1,49 @@ +/** + * White theme for reveal.js. This is the opposite of the 'black' theme. + * + * By Hakim El Hattab, http://hakim.se + */ + + +// Default mixins and settings ----------------- +@import "../template/mixins"; +@import "../template/settings"; +// --------------------------------------------- + + +// Include theme-specific fonts +@import url(../../lib/font/source-sans-pro/source-sans-pro.css); + + +// Override theme settings (see ../template/settings.scss) +$backgroundColor: #fff; + +$mainColor: #222; +$headingColor: #222; + +$mainFontSize: 42px; +$mainFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingFont: 'Source Sans Pro', Helvetica, sans-serif; +$headingTextShadow: none; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingFontWeight: 600; +$linkColor: #2a76dd; +$linkColorHover: lighten( $linkColor, 15% ); +$selectionBackgroundColor: lighten( $linkColor, 25% ); + +$heading1Size: 2.5em; +$heading2Size: 1.6em; +$heading3Size: 1.3em; +$heading4Size: 1.0em; + +section.has-dark-background { + &, h1, h2, h3, h4, h5, h6 { + color: #fff; + } +} + + +// Theme template ------------------------------ +@import "../template/theme"; +// --------------------------------------------- \ No newline at end of file diff --git a/css/theme/template/mixins.scss b/css/theme/template/mixins.scss new file mode 100644 index 0000000..e0c5606 --- /dev/null +++ b/css/theme/template/mixins.scss @@ -0,0 +1,29 @@ +@mixin vertical-gradient( $top, $bottom ) { + background: $top; + background: -moz-linear-gradient( top, $top 0%, $bottom 100% ); + background: -webkit-gradient( linear, left top, left bottom, color-stop(0%,$top), color-stop(100%,$bottom) ); + background: -webkit-linear-gradient( top, $top 0%, $bottom 100% ); + background: -o-linear-gradient( top, $top 0%, $bottom 100% ); + background: -ms-linear-gradient( top, $top 0%, $bottom 100% ); + background: linear-gradient( top, $top 0%, $bottom 100% ); +} + +@mixin horizontal-gradient( $top, $bottom ) { + background: $top; + background: -moz-linear-gradient( left, $top 0%, $bottom 100% ); + background: -webkit-gradient( linear, left top, right top, color-stop(0%,$top), color-stop(100%,$bottom) ); + background: -webkit-linear-gradient( left, $top 0%, $bottom 100% ); + background: -o-linear-gradient( left, $top 0%, $bottom 100% ); + background: -ms-linear-gradient( left, $top 0%, $bottom 100% ); + background: linear-gradient( left, $top 0%, $bottom 100% ); +} + +@mixin radial-gradient( $outer, $inner, $type: circle ) { + background: $outer; + background: -moz-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: -webkit-gradient( radial, center center, 0px, center center, 100%, color-stop(0%,$inner), color-stop(100%,$outer) ); + background: -webkit-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: -o-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: -ms-radial-gradient( center, $type cover, $inner 0%, $outer 100% ); + background: radial-gradient( center, $type cover, $inner 0%, $outer 100% ); +} \ No newline at end of file diff --git a/css/theme/template/settings.scss b/css/theme/template/settings.scss new file mode 100644 index 0000000..63c02cf --- /dev/null +++ b/css/theme/template/settings.scss @@ -0,0 +1,43 @@ +// Base settings for all themes that can optionally be +// overridden by the super-theme + +// Background of the presentation +$backgroundColor: #2b2b2b; + +// Primary/body text +$mainFont: 'Lato', sans-serif; +$mainFontSize: 40px; +$mainColor: #eee; + +// Vertical spacing between blocks of text +$blockMargin: 20px; + +// Headings +$headingMargin: 0 0 $blockMargin 0; +$headingFont: 'League Gothic', Impact, sans-serif; +$headingColor: #eee; +$headingLineHeight: 1.2; +$headingLetterSpacing: normal; +$headingTextTransform: uppercase; +$headingTextShadow: none; +$headingFontWeight: normal; +$heading1TextShadow: $headingTextShadow; + +$heading1Size: 3.77em; +$heading2Size: 2.11em; +$heading3Size: 1.55em; +$heading4Size: 1.00em; + +// Links and actions +$linkColor: #13DAEC; +$linkColorHover: lighten( $linkColor, 20% ); + +// Text selection +$selectionBackgroundColor: #FF5E99; +$selectionColor: #fff; + +// Generates the presentation background, can be overridden +// to return a background image or gradient +@mixin bodyBackground() { + background: $backgroundColor; +} \ No newline at end of file diff --git a/css/theme/template/theme.scss b/css/theme/template/theme.scss new file mode 100644 index 0000000..bcbaf0c --- /dev/null +++ b/css/theme/template/theme.scss @@ -0,0 +1,352 @@ +// Base theme template for reveal.js + +/********************************************* + * GLOBAL STYLES + *********************************************/ + +body { + @include bodyBackground(); + background-color: $backgroundColor; +} + +.reveal { + font-family: $mainFont; + font-size: $mainFontSize; + font-weight: normal; + color: $mainColor; +} + +::selection { + color: $selectionColor; + background: $selectionBackgroundColor; + text-shadow: none; +} + +::-moz-selection { + color: $selectionColor; + background: $selectionBackgroundColor; + 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: $headingMargin; + color: $headingColor; + + font-family: $headingFont; + font-weight: $headingFontWeight; + line-height: $headingLineHeight; + letter-spacing: $headingLetterSpacing; + + text-transform: $headingTextTransform; + text-shadow: $headingTextShadow; + + word-wrap: break-word; +} + +.reveal h1 {font-size: $heading1Size; } +.reveal h2 {font-size: $heading2Size; } +.reveal h3 {font-size: $heading3Size; } +.reveal h4 {font-size: $heading4Size; } + +.reveal h1 { + text-shadow: $heading1TextShadow; +} + + +/********************************************* + * OTHER + *********************************************/ + +.reveal p { + margin: $blockMargin 0; + line-height: 1.3; +} + +/* 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 q, +.reveal blockquote { + quotes: none; +} + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: $blockMargin 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: $blockMargin auto; + + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + + word-wrap: break-word; + + box-shadow: 0px 0px 6px rgba(0,0,0,0.3); +} +.reveal code { + font-family: monospace; +} + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; +} + +.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; +} +.reveal sub { + vertical-align: sub; +} + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; +} + +.reveal small * { + vertical-align: top; +} + + +/********************************************* + * LINKS + *********************************************/ + +.reveal a { + color: $linkColor; + text-decoration: none; + + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; +} + .reveal a:hover { + color: $linkColorHover; + + text-shadow: none; + border: none; + } + +.reveal .roll span:after { + color: #fff; + background: darken( $linkColor, 15% ); +} + + +/********************************************* + * IMAGES + *********************************************/ + +.reveal section img { + margin: 15px 0px; + background: rgba(255,255,255,0.12); + border: 4px solid $mainColor; + + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); +} + + .reveal section img.plain { + border: 0; + box-shadow: none; + } + + .reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; + } + + .reveal a:hover img { + background: rgba(255,255,255,0.2); + border-color: $linkColor; + + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); + } + + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ + +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: $linkColor; +} + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: $linkColor; +} + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: $linkColor; +} + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: $linkColor; +} + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: $linkColorHover; +} + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: $linkColorHover; +} + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: $linkColorHover; +} + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: $linkColorHover; +} + + +/********************************************* + * PROGRESS BAR + *********************************************/ + +.reveal .progress { + background: rgba(0,0,0,0.2); +} + .reveal .progress span { + background: $linkColor; + + -webkit-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); + -moz-transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); + transition: width 800ms cubic-bezier(0.260, 0.860, 0.440, 0.985); + } + + diff --git a/css/theme/white.css b/css/theme/white.css new file mode 100644 index 0000000..7adc605 --- /dev/null +++ b/css/theme/white.css @@ -0,0 +1,292 @@ +/** + * White theme for reveal.js. This is the opposite of the 'black' theme. + * + * By Hakim El Hattab, http://hakim.se + */ +@import url(../../lib/font/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 + *********************************************/ +body { + background: #fff; + background-color: #fff; } + +.reveal { + font-family: "Source Sans Pro", Helvetica, sans-serif; + font-size: 42px; + font-weight: normal; + color: #222; } + +::selection { + color: #fff; + background: #98bdef; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #98bdef; + 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: 0 0 20px 0; + color: #222; + font-family: "Source Sans Pro", Helvetica, sans-serif; + font-weight: 600; + line-height: 1.2; + letter-spacing: normal; + text-transform: uppercase; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 2.5em; } + +.reveal h2 { + font-size: 1.6em; } + +.reveal h3 { + font-size: 1.3em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + text-shadow: none; } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* 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 q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px 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: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.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; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #2a76dd; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #6ca0e8; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #1a53a1; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #222; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #2a76dd; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #2a76dd; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #2a76dd; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #2a76dd; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #2a76dd; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #6ca0e8; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #6ca0e8; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #6ca0e8; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #6ca0e8; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #2a76dd; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/css/zoom.css b/css/zoom.css new file mode 100644 index 0000000..2e9e8e9 --- /dev/null +++ b/css/zoom.css @@ -0,0 +1,33 @@ +img[data-action="zoom"] { + cursor: zoom-in; +} +.zoom-img, +.zoom-img-wrap { + position: relative; + z-index: 666; + -webkit-transition: all 300ms; + transition: all 300ms; +} +img.zoom-img { + cursor: zoom-out; +} +.zoom-overlay { + z-index: 420; + background: #fff; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + pointer-events: none; + filter: "alpha(opacity=0)"; + opacity: 0; + -webkit-transition: opacity 300ms; + transition: opacity 300ms; +} +.zoom-overlay-open .zoom-overlay { + filter: "alpha(opacity=100)"; + opacity: 1; +} + +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2Nzcy96b29tLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLGdCQUFnQjtDQUNqQjtBQUNEOztFQUVFLG1CQUFtQjtFQUNuQixhQUFhO0VBQ2IsOEJBQXNCO0VBQXRCLHNCQUFzQjtDQUN2QjtBQUNEO0VBQ0UsaUJBQWlCO0NBQ2xCO0FBQ0Q7RUFDRSxhQUFhO0VBQ2IsaUJBQWlCO0VBQ2pCLGdCQUFnQjtFQUNoQixPQUFPO0VBQ1AsUUFBUTtFQUNSLFNBQVM7RUFDVCxVQUFVO0VBQ1YscUJBQXFCO0VBQ3JCLDJCQUEyQjtFQUMzQixXQUFXO0VBQ1gsa0NBQStCO0VBQS9CLCtCQUErQjtDQUNoQztBQUNEO0VBQ0UsNkJBQTZCO0VBQzdCLFdBQVc7Q0FDWiIsImZpbGUiOiJ6b29tLmNzcyIsInNvdXJjZXNDb250ZW50IjpbImltZ1tkYXRhLWFjdGlvbj1cInpvb21cIl0ge1xuICBjdXJzb3I6IHpvb20taW47XG59XG4uem9vbS1pbWcsXG4uem9vbS1pbWctd3JhcCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogNjY2O1xuICB0cmFuc2l0aW9uOiBhbGwgMzAwbXM7XG59XG5pbWcuem9vbS1pbWcge1xuICBjdXJzb3I6IHpvb20tb3V0O1xufVxuLnpvb20tb3ZlcmxheSB7XG4gIHotaW5kZXg6IDQyMDtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBmaWx0ZXI6IFwiYWxwaGEob3BhY2l0eT0wKVwiO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2l0aW9uOiAgICAgIG9wYWNpdHkgMzAwbXM7XG59XG4uem9vbS1vdmVybGF5LW9wZW4gLnpvb20tb3ZlcmxheSB7XG4gIGZpbHRlcjogXCJhbHBoYShvcGFjaXR5PTEwMClcIjtcbiAgb3BhY2l0eTogMTtcbn1cbiJdfQ== */ \ No newline at end of file diff --git a/git-crash-course-en.md b/git-crash-course-en.md new file mode 100644 index 0000000..ed9f80c --- /dev/null +++ b/git-crash-course-en.md @@ -0,0 +1,998 @@ +# Git crash course + +## Davide Alberani 2017-2018 + +
+Crash course to not bang your head against the wall when you have to use Git. + +
+
+ +**git clone https://git.lattuga.net/alberanid/git-crash-course-en.git** + +
+
+This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License: http://creativecommons.org/licenses/by-sa/4.0/ + +--- + +## Who is this for + +For beginners who have to work in small teams + +----- + +## Course layout + +### Part 1 + +Basics to work with local and remote repositories + +### Part 2 + +A workflow for collaborative development + +### Part 3 + +Some more advanced tool + +----- + +## What we will talk about + +* basic, high-level, command line tools. Also known as **porcelain**, they are based on others, lower-level, commands (known as *plumbing*) + +* how to manage *branches* + +* basics to work with remote repositories + +* a workflow to cooperate with other developers + +----- + +## What we will NOT talk about + +* low-level (**plumbing**) commands +* *Github* web GUI (sorry, it's just an hosting service) +* GUIs +* how to admin a remote repository +* flame wars on the merits of different workflows + + +----- + +## What's Git + +A dirstributed control version tool. + +It's used to keep track of changes to code (or other textual stuff) and to ease the cooperative development. It's worth to remember that it was born to help mostly who had to coordinate other people's code. + +
+More details [on Wikipedia](https://en.wikipedia.org/wiki/Git%5F%28software%29). + +----- + +## What Git is NOT + +* it's not Subversion or CVS +* it's not a backup tool +* it's not a [deploy tool](https://grimoire.ca/git/stop-using-git-pull-to-deploy) (or maybe it is, but think carefully about it) + +----- + +## Some will say + +*Git will have no secrets for you, once you'll understand...* + +* ...its data model (objects, blobs, trees, commits, refs, tags, ...) +* ...that everything is local +* ...that commits are snapshots, and not deltas from the previous state +* ...some strange quantum theory + +
+ +### Honestly? + +That's all true, but its UI is a mess. + +--- + +## Basics: definitions + +* **Working directory**: the files and directories you're working on + +* **Staging area** (or **Index**): where we store changes that will be included into the next commit + +* **Commit**: a snapshot of all files and directories at a given moment + +* (do a) **Checkout**: update files in the working directory to a given branch/commit/... + +* **HEAD**: the point over which we'll connect the next commit (usually, the current branch) + +* **refs**: collettive name to refer to HEAD, branches, tags + +----- + +## Basics: use git config to setup the environment + + $ git config --global user.name "Davide Alberani" + $ git config --global user.email da@erlug.linux.it + $ git config --global color.ui auto + +Settings can be stored in these files (in reading order: the latter will overwrite previous settings): +* **/etc/git/config**: global options, valid for every users +* **~/.gitconfig** or **~/.config/git/config**: settings for the current user +* **.git/config** in the current repository: local settings valid only for this repository + +
+ +### Bonus track + +* Some examples of gitconfig files are [this one](https://github.com/alberanid/git-config/blob/master/gitconfig) and [this other one](https://gist.github.com/pksunkara/988716) + +----- + +### Basics: some common settings + +Aliases: + + $ git config --global alias.st status + $ git config --global alias.br branch + $ git config --global alias.co checkout + +Colors: + + $ git config --global color.branch.current "yellow bold" + $ git config --global color.branch.local "green bold" + $ git config --global color.branch.remote "cyan bold" + $ git config --global color.status.added "green bold" + +Github user: + + $ git config --global github.username [nome] + +--- + +## Part 1 + +Where we give what's needed to work locally and remotely + +--- + +## Basics: create a repository + +Initialize a repository starting from a directory (empty or not): + + $ git init + +Clone an existing remote repository: + + $ git clone https://git.lattuga.net/user/repo.git + +----- + +## create a repository: what happened? + +It created the **.git** directory (the **repository**); if we made a clone, a reference to the "*origin*" remote was added. + +
+ +### Bonus track + +* remote repositories are usually created with **--bare** (they have no working directory); nobody works directly on them: developers commit on their own clones and push the changes. + +----- + + + +## Basics: status + +To know the status of the repository, staging area and working directory (a nice [cheatsheet](https://ndpsoftware.com/git-cheatsheet.html)): + + $ git status [-s] + +### File states + +* **Untracked**: new files in the working directory, not yet added + +* **Unmodified**: files that were not modified since the previous commit + +* **Modified**: modified in the working directory, but not yet added to the staging area + +* **Staged**: added to the staging area, ready to be committed + + + +--- + +## Basics: add and commit + +Let's change a file and add it to the staging area: + + $ git add test.txt + +Lets commit it: + + $ git commit [-m "commit message"] + +Let's see what happened: + + $ git log + +----- + +## add and commit: what happened? + +We added a file to the staging area, and saved a snapshot of our work. If we are in a branch, this branch now points to the new commit (HEAD still point to the branch, so it also points to the new commit). + +
+ +### Bonus track + +* guess what **git rm** and **git mv** do +* [commit often](https://sethrobertson.github.io/GitBestPractices/) +* how to write [a nice commit message](https://chris.beams.io/posts/git-commit/)? Issue, short title, long description +* it doesn't save empty directories; if needed, add a *.gitkeep* (just a convention) +* create a *.gitignore* file to exclude some files + +----- + +## What's a commit? + +Commits are snapshots of the system at a given moment, **identified by an hash** (e.g.: *6d7696a8b894c8ef039d6fd2ecdc514a2efe16b5*). + +A commit hash is generated by: message, committer, author, dates, tree, parent hash. + +
+ +### Bonus track + +* it's possible to shorten the hashes, as long as they stay unique (e.g. *6d769*) +* for more details see [anatomy of a Git commit](https://blog.thoughtram.io/git/2014/11/18/the-anatomy-of-a-git-commit.html) and [Git Internals](https://git-scm.com/book/it/v2/Git-Internals-Git-References) + +----- + +## Basics: history + + $ git log [--stat] [--patch] [--graph] [--decorate] [--color] [-2] + +Shows the commits history from the current point (or from a given refs) down to the very first commit. + +You can limit the output to the latest N commits with ***-N*** + +
+ +### Bonus track + +* see commits that changed a given file: **git log -- file.txt** +* to see information about a single commit you can also use **git show** +* information about who edited the lines of a file: **git blame file.txt** + +----- + +## Basics: diff + +Let's change a file, without adding it to the staging area: + + $ git diff + +To see what was added to the staging area (**and reason why it's so useful**): + + $ git diff --staged + +----- + +## Basics: tag + +A tag is a pointer to a commit: + + $ git tag -a v1.0 + +
+ +### Bonus track + +* there are two types of tags: *lightweight* and *annotated*. The firsts are just pointers, the seconds are objects with an author and can be signed. + +--- + +## Damage control + +How to modify the last commit (change commit message or author, or change a file - in this case you first need to modify it in the working directory and then do *git add*): + + $ git commit --amend [--author="Name Surname "] + +A file was added by mistake to the staging area: + + $ git reset HEAD -- file + +Revert a file to the last committed (or staged) state: + + $ git checkout -- file + +### Bonus track + +* using *--amend* the commit ID will change, for this reason you can only use it on the very last commit of a branch +* **git clean -f** to remove all the untracked files + +----- + +## Damage control: harder + +I made a mess in the working directory. Let's bring everything to the last commited state: + + $ git reset --hard HEAD + +I want to create a new commit that revert the changes introduced in a given commit: + + $ git revert [-n] + +
+ +### Bonus track + +* more [informantion on reset](https://stackoverflow.com/questions/3528245/whats-the-difference-between-git-reset-mixed-soft-and-hard) +* workflow [to solve problems ](http://justinhileman.info/article/git-pretty/git-pretty.png) +* [some useful commands](http://ohshitgit.com/) to solve mistakes + +--- + +## Branches: what they are and why to use them? + +They are moving pointers, moved with each new commit. + +They are useful to separate different strands of development and to integrate contributions from others. + +----- + +## Branches: create + +Create a branch: + + $ git branch fix/bug-123 + +See all branches: + + $ git branch [-a] [-v] + +Remove a local branch: + + $ git branch -d [--force] fix/bug-123 + +----- + +## Branches: switch between branches + +Let's move to another branch: + + $ git checkout fix/bug-123 + +Create and move in a single command (only if the branch doesn't exist): + + $ git checkout -b fix/bug-123 + +
+ +### Bonus track + +* moving, Git tries to keep the changes in the working directory and staging area + +----- + +## Branches: more information + +* **master** is just a default (usually master is considered "stable") + +* give [meaningful names](http://www.guyroutledge.co.uk/blog/git-branch-naming-conventions/); use suffixes like *bugfix/*, *fix/*, *improvement/*, *feature/*, *task/*) and issue numbers + +* get used to create a new branch (that usually will start from *master*) **each time** you need to fix a bug or develop a new feature + +* may be logically divided in *feature* (o *topic*), *release*, *integration* branches and so on + +--- + +## Put the pieces back together: merge + + $ git checkout -b fix/bug-123 + $ # let's edit newfile.txt + $ git add newfile.txt + $ git commit + + + + $ git checkout master + $ git merge fix/bug-123 + + + +----- + +## Merge: what happened? + +A **fast-forward**! + +master was behind compared to fix/bug-123, and so we simply moved master's pointer. There was no need to create a new commit. + +The commit command takes the **--ff-only** and **--no-ff** options decide how to behave regarding the creation of a merge commit. + +----- + +## Conflicts resolution + + $ git branch fix/bug-123 + $ git checkout fix/bug-123 + $ # let's edit file.txt + $ git add file.txt + $ git commit + + $ git checkout master + $ # let's edit file.txt differently, on the same lines + $ git add file.txt + $ git commit + + + +### Bonus track + +* which commits are part of the fix/bug-123 and master branches? + +----- + +## Conflicts resolution + +Let's merge: + + $ git merge fix/bug-123 + $ # let's resolve the conflicts + $ git add file.txt + $ git commit + + + +### Bonus track + +* what happens to *C* commit, if we delete the fix/bug-123 branch? + +----- + +## Conflict files + +Always look for every **<<<<<<<**, **=======** and **>>>>>>>** markers + +
+ +### Bonus track + +* you can use **meld** to solve the conflicts + +--- + +## Working with remote repositories + + $ git remote add origin https://git.lattuga.net/user/repo.git + $ git remote -v + +
+ +### Bonus track + +* **origin** is just a default +* you can checkout a remote branch like **remote/branch** (e.g.: *git checkout origin/fix/bug-123*) + +----- + +## Fetch & pull + +Update the local repository with the new commits of a remote: + + $ git fetch --prune origin + +See which commits are different between local and remote: + + $ git log --left-right master...origin/master + +Update the remote changes and merge then in the current branch: + + $ git pull origin + +
+ +### Bonus track + +* **git pull** is the same as **git fetch ; git merge** + +----- + +## Local and remote branches + +* **local branch**: a branch you only have locally + +* **remote branch**: a branch on a remote repository + +* **remote tracking branch**: local copy of a remote branch; you can update it with fetch, but can't work directly on it + +* **local tracking branch**: a local branch you can work on, tracking another branch (usually a remote tracking branch) + +* local tracking of remote branches is done automatically, based on the name of the branch: if in a remote repository the branch *origin/branch-1* exists, the *git checkout branch-1* command will create a local tracking branch + +----- + +## Push + +Add a local branch to the remote repository: + + $ git push --set-upstream origin local-branch-name + +Send local changes to a remote branch: + + $ git push [--tags] [origin [master]] + +
+ +### Bonus track + +* by default, git push does not send tags, which must be pushed separately with the *--tags* argument +* how to remove a remote branch: **git push --delete origin branch-name** + +----- + +## Talking about remote history... + +A thing to **NEVER** do (unless you know exactly what you will face): change an already-pushed history. + +That's because if someone else is working on the same remote branch, the repositories will no longer be coherent. + +--- + +## Part 2 + +Where we will show a ready-to-use workflow, to work with a remote repository as a team + +--- + +## Which workflow? + +Deciding which workflow to follow, you need to answer some questions like: + +* who are the developers? Do you accept contributions only from a small group, or from anyone? +* how do you release the software? Do you have multiple versions to support? The new versions are developed starting from which branches? +* who is in charge of integration (merging)? The developers, or a specific person? + +----- + + + +## Worflows: multiple options + +The main worflows are: + +* centralized +* feature branch +* gitflow +* forking +* something kept together with rubber bands + +Some resources to decide: + +* https://www.atlassian.com/git/tutorials/comparing-workflows +* https://guides.github.com/introduction/flow/ + +--- + +## Forking workflow + +We'll see the **forking workflow**. It's not "the best" (no workflow is), but is the one you will deal with on Github, for example. Some useful definitions: + +* there is an "official" repository (that we'll call **upstream**, from the developers' point of view); only core authors can write on it +* **project maintainer** role: the person in charge of merges on the upstream repository +* **developer** role: a person who is developing a fix or new feature +* each developer will have a remote fork of the upstream repository and a local clone of this remote fork to work on + +----- + +## Forking workflow: maintainer setup + +The project maintainer created the remote upstream repository and a local clone. + + $ git clone https://git.lattuga.net/maintainer/repo.git + + + +----- + +## Forking workflow: developer setup + +The developer now will: + +* create a remote **fork** of the upstream repository + + + +### Bonus track + +* a fork is nothing more than a clone (with --mirror) of a repository + +----- + +## Forking workflow: developer setup + +The developer will now crete a local **clone** of the remote repository. It's a good idea to add an "**upstream**" remote that points to the maintainer's repository: + + $ git clone https://git.lattuga.net/developer/repo.git + $ cd repo + $ git remote add upstream https://git.lattuga.net/maintainer/repo.git + + + +----- + +## Forking workflow: let's start with the development + +The developer writes fix that will be applied to the master branch of the upstram repository. + +First of all, it's a good idea to sync the local master branch with the upstream one, to work on up-to-date code: + + $ git checkout master + $ git pull upstream master + + + +----- + +## Forking workflow: new branch + + $ git checkout -b fix/bug-123 + + + +### Bonus track + +* **NEVER** work directly on *master*: you would lose the possibility to sync again with *upstream*, in the future + +----- + +## Forking workflow: do our work + + $ # introduce the fix + $ git commit + $ git push --set-upstream origin fix/bug-123 + + + +----- + +## Forking workflow: pull request + +Now the developer goes to the web page of the fork and creates a **pull request**. + + + +### Bonus track + +* it makes sense to do a rebase on *upstream/master* of the feature branch we are working on, before the pull request is done (if you have already pushed, you need to push --force), so that your work will be as close as possible to the current state of upstream/master + +----- + +## Forking workflow: pull request + +"Pull request" is not (exactly) a concept of Git itself. It's something built upon it, to ease the collaboration between developers. + +The pull request we created above just says: "I suggest to apply the changes in the *developer:fix/bug-123* branch onto *maintainer:master*" +Now the developer, project maintainer and others can discuss the merit of the changes. + +If needed, the deleloper or others can add new commits with just a simple push. + +----- + +## Forking workflow: merging + +Once everyone is satisfied, the project maintainer will merge the code on *maintainer:master*. + +**If there are no conflicts**, the merge can be done directly from the web GUI of the upstream repository. + +If there are conflicts, the project maintainer will add a remote pointing to the repository of *developer*, fetch *developer:fix/bug-123*, merge it on master and then (after the conflicts are solved) push it on the upstream repository. + + + +----- + + + +## Forking workflow: I lied! + +Github and friend will not suggest you to add the developer's repository as a remote, but to directly pull only the topic branch. It makes sense if you receive a lot of pull requests from many developers. Otherwise, if the number of developers is low (small projects, or inside a company) it makes sense to add developers' repositories as remotes. + +To show you, Github suggests to: + +1. git checkout -b developer/bug-123 master +1. git pull https://github.com/developer/repo.git fix/bug-123 +1. git checkout master +1. git merge --no-ff developer/bug-123 +1. git push origin master + +----- + +## Forking workflow: maintainer's setup summary + +1. local clone: **git clone https://git.lattuga.net/maintainer/repo.git** + +----- + +## Forking workflow: developer's setup summary + +1. fork on the web GUI +1. local clone of the fork: **git clone https://git.lattuga.net/developer/repo.git** +1. add a remote pointing to the upstream repository: **git remote add upstream https://git.lattuga.net/maintainer/repo.git** + +----- + +## Forking workflow: developer's work summary + +1. update local master from upstream: **git checkout master ; git pull upstream master** +1. create a branch to work on: **git checkout -b fix/bug-123** +1. works a lot: **git commit** +1. optionally, do a rebase: **git rebase upstream/master** +1. sends changes to the remote repository: **git push --set-upstream origin fix/bug-123** +1. create a pull request on the web GUI +1. if needed, the developer updates the pull request with more commits and pushes of fix/bug-123 + +----- + + + +## Forking workflow: maintainer's work summary + +1. receive and evaluate a pull request +1. if it can be merged without conflicts, the merge can be done on the web GUI + +*Otherwise the maintainer will:* + +1. if not already done, add a remote for the developer's repository: **git remote add developer https://git.lattuga.net/developer/repo.git** +1. create a *local tracking branch* to work on: **git fetch developer fix/bug-123** +1. move to master: **git checkout master** +1. merge, resolving the conflicts: **git merge --no-ff fix/bug-123** +1. send the commits to the remote repository: **git push origin master** + +--- + +## Part 3 + +Where we will see some advanced tools + +--- + +## How to reference commits + +Going up of 3 livels, always following the first parent commit (in case of merge): + + $ git show -s HEAD~3 + +Going up of 1 level, following the second parent commit (in case of merge): + + $ git show -s HEAD^2 + +### Bonus track + +* **detached HEAD**: we moved (checkout) to a commit that is not the head of a branch +* these operators can be chained: HEAD~~^2 + +----- + +## How to reference commits: range + +**Double dot range**. Doing a *diff*, shows changes between "master" and "branch"; doing a *log* shows commits that can be reached by "branch" but not from "master": + + $ git diff master..branch + +
+ +**Triple dot range**. Doing a *diff*, shows changes between the forking point of "master" and "branch" and "branch" itself; doing a *log*, shows commits that are reachable from "master" or "branch" but not by both of them: + + $ git log --left-right master...branch + +----- + +## How to reference commits: range + + + + +See also [this description](https://stackoverflow.com/questions/7251477/what-are-the-differences-between-double-dot-and-triple-dot-in-git-dif) + +--- + +## Put the pieces back together: cherry-pick + + $ git checkout master + $ git cherry-pick + $ # in case of conflicts: solve them, add the fixed files and then: + $ git cherry-pick --continue + + + +----- + +## cherry-pick: what happened? + +It takes a commit (usually) from another branch and apply it in the current branch. + +New commits are created. + +
+ +### When to use it? + +For example to backport a fix on different release branches, or if you noticed that a commit was meant to be done on a different branch. + +--- + +## Put the pieces back together: rebase + +Let's recreate the same situation when we used merge (divergent branches) and then: + + $ git checkout fix/bug-123 + $ git rebase master + $ # in case of conflicts: solve them, add the fixed files and then: + $ git rebase --continue + + + +### What happened? + +We took all the commits in fix/bug-123 and we have applied them again on master (which advanced, meanwhile). +Now all the commits of fix/bug-123 have changed. If you want, it's now possible to do a fast-forward merge on master. + +----- + +## Rebase: when to use it? + +When you need to move multiple commits and/or you need to do a "clean" merge. It can be done by the developer before a pull request is opened, to ease the job of the maintainer or by the mainter just before the merge, to get a linear history. + +
+ +### When NOT to use it? + +A rebase changes the original commits: you should avoid it if the commits were already pushed and other developers are using the remote branch. + +--- + +## Modify the history: rebase interactive + +Let's create a new branch and commit 2 or 3 changes. Then: + + $ git rebase -i master + + + +----- + +### Rebase interactive: what happened? + +We joined, removed or changed the order of the commits. + +It's especially useful when we have finished the work on a branch, and we want to clear the history joining multiple commits into a single one. + +
+ +### Bonus track + +* the nuclear option: **filter-branch** to create scripts that rewrite the history + +--- + +## Partial work: commit only some lines of a file + +Let's edit a file in multiple lines, and then add it to the staging area with *--patch*: + + $ git add --patch + +
+ +### When to use it? + +For example when you don't want to include in a commit a debug line, but you still want to keep it in the working directory for future use. + +----- + +## Create and apply a patch + +It's possible to create a patch with this command: + + $ git format-patch [refs] + +and then apply it with: + + $ git apply patch-file.diff + +----- + +## Putting some work aside: stash + +Store work currently present in the working directory without committing, and show the stashed changes: + + $ git stash + $ git stash list + +Apply again the shashed changes, and remove a stash (**stash pop** will join the two commands): + + $ git stash apply stash@{0} + $ git stash drop stash@{0} + +### When to use it? + +When we want to move to another branch, but we are still not ready to commit the (conflicting) changes present in the working directory. + +----- + +## History of the changes: reflog + +The log history only shows commits included in a branch. + +To see ALL the times HEAD changed position: + + $ git reflog [@{2 weeks ago}] + +
+ +### When to use it? + +* sometimes it's useful to see how we moved between branches +* very useful to recover **broken commits** that are no longer referenced by any branch (but don't forget that they will be garbage collected, at some point) + +--- + +## Misc stuff + +* handle big files: https://git-lfs.github.com/ +* another option to handle big files: https://git-annex.branchable.com/ +* manage the /etc directory: etckeeper +* manage multiple repositories: https://source.android.com/source/using-repo +* git repository manager: https://about.gitlab.com/ +* another git repository manager: https://gogs.io/ + +----- + +## What's missing + +* [git submodule](https://git-scm.com/docs/git-submodule): manage other repositories as sub-modules +* [git subtree](https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/): insert a repository into a subdirectory +* [repo](https://source.android.com/setup/build/downloading): manage multiple Git repositories +* [git bisect](https://git-scm.com/docs/git-bisect): look for the commit that introduced a bug +* [git gui](https://git-scm.com/docs/git-gui) and [gitk](https://git-scm.com/docs/gitk): GUI to visualize commits and repositories +* [tig](https://jonas.github.io/tig/): textual interface +* [Gitgraph.js](http://gitgraphjs.com/): create graphs from commits and branches + +--- + + + +## Various resources + +* Italian translation of these slides: https://git.lattuga.net/alberanid/git-crash-course +* Pro Git: https://git-scm.com/book/en/ +* Reference: https://git-scm.com/docs +* Learn Git Branching: http://learngitbranching.js.org/ +* Git ready: http://gitready.com/ +* Git Cookbook: https://git.seveas.net/ +* tutorial di Atlassian: https://www.atlassian.com/git/tutorials +* A visual Git reference: https://marklodato.github.io/visual-git-guide/index-en.html + +### Utilities + +* bash prompt: https://github.com/magicmonty/bash-git-prompt +* Meld: http://meldmerge.org/ + +--- + +## The end + +
+ +**git clone https://git.lattuga.net/alberanid/git-crash-course-en.git** + +
+ +### Davide Alberani + +
+This work is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License: http://creativecommons.org/licenses/by-sa/4.0/ diff --git a/images/branch-commit.odg b/images/branch-commit.odg new file mode 100644 index 0000000000000000000000000000000000000000..ce540895732e15b176853c712d2972cdc539cb57 GIT binary patch literal 10582 zcmd6NbyQr*w{_zl9D+-5ch>}W2=4CCK;zoM-7N%3fZ#5{Em+V5cMIFV!P3eEr1TfUZzrT- z98XL?j^|H=s+KNx#`Z>5wjgHbKbuSr_7-7E3X&*@_=rzkP^6{AQ~&^orzW5l9_r~F zGCx8E06+nhAWvqRjU%doL%YkH-yk%7!RSbMobsQWVyu7>w z%|c%S-zhu!tGk80ax0Sa$(Q!3Q1;Dc@>k;skmHS3<&W3kOV;H~Gvms#;ma}t@m3GHRwt!;EBS6W`ECz|es7gd z8`XX%m0?e{5l^i-Z{u}eb^lC7|4R8c4Ql>5T480%p`Vn)nss98EE0-r)5}bgKWWFc zn`ic#rhl={>b59cbgiEAs9W@DT(m9yZe6+ORJ-R~f8bfW<<+?A-LUW4c;wk~tU42H zFqf&PbtgY)U3>)oj8i0=Vj-Uo-pU*Z% zU5<7`&bGbouH9a~eJ)Nz9Q)tV_t5fetwI-uASZiLq6a!zc;gBpEa=4YM|eK zsGq;TfAmx2Hl$=%ynp{bzoe$3qN266H8s5>IJZ5kc|PFNYCz*oOv`#i^HyBjR_1gc zxZ?!ebL-#tkl4PJ*}0k4xm7tincKUS_hqZFcfD+2vt(eadT6V8Y-bSc|0OJC&L2D% z6gnLlKNFoc8Jj+s^l>n&d^{<8H4wZV1l|b+??y(fM#b&LCmn@?&!WSwV?s`2!*Anb z&JvUFl9L`%lOI!4yBY=tYrCGJzrTNCVq$uF`t!tg=gdmy^!~u?&e-JY*y7&U^5N{- z!N~H_?E3N2*2&u1+WO|<&d$!-?%B@4`Tp_6;px@s>FM#=)y37#!^6YVKmYOZv8GHD z832Gjlok_Jb)Vgz^|F1fMhJKG;mXilLKXHql(_#FejXOlSe|w`Yca?bUK#?_{JiQG zP#`iZX}Gx@H!=u9QUb_<-%x*xm91~$A zr^1VhzCw)l2ux~={Esp9!ggJOa3sV+-Z!tXpmbS4ddh{`!^&jTj9<4AO%xPdx5&HM zm@@#$1ven`+BjX7z-qQ+rg&mF9UYyy*<6b)azSs%B!H^|I!=;tZ&G1IEh~Ce{Oq8P z$OHb}qi$qP5~boWc}CBC5dzpr<#=2)PKdNVpfZ9nnce)E$A*6VE_(N~H=f`iC%p|+ z8A|5*@`GkNE0TdmW{;}dzVhxtn_EG7m9~~*w{oa)sMvCsquAa9s#P@drK4!vtTKk~XCUS0^oO;*vj(sl)@cuZR7rzzwzZv5?5Z3ht`B15#uYVBZ4ujT8Q?D}xLNQ2D*?P<8dpU=|{j7arcl zyVgej7%$Te8~Y^g%838b=*{UpB=uvHE5QFC6@cP%3iP}W(0g~Ww$yCxwi2T=)m)YI z=yFQbhSgeUKk)9*53*qa{?|KacuA3XB*7YuPI}ijKsPpv?)SJ{$JGX~-1Fyaj1Ph7!XxXAGFLo0va84STvB(zLox!^uK^L*$sG2v> zZDHdk7J>Nuy%1I1PNqHI1_PVJ#sflfH9sjg-t_f&?D#iSui;`dHbTUji!tmzq}AN* zlFxm4Mg;K%M0))N!R_nouR;n6`sq`6U`?6UE8gn9a-%#AAmG!0u*-XSF!=ktbT$fv z#`gkScPgoDxp5M(d(E!I_YV=C&}f1yGZojS-!sS?*z&vYiQi3FgRaO4pgp0amVZ9Q z|9`hIC>~&S;*1)l5Gsv+j8s}&L9Fbhq5prB20T3cAJXO5Is74A%$$vw-0f_mUJuyM zv7j|y(nE7;9Fy^SqQyg=eR~~_Qvh{l{)J+dB}wW{F8Sply>c==wZzH`Hw#yD5(eUE zJIrPTlaK0@q-X&mGMf@Ld5cP5janoM(N)#!uzYd;Rd^PAgjhB)a&aa!of+W2q@j%+}<@1pk*aJ1pp*qMQf zzXzhcwQo`eE$I%{s8_Yr4hG&Y-x%@$%NWhh2y+~FYKuF$X@kEme@A{;vhzK-aE2}J zj1Z~SovDc~I+8V#a0jl?&=kQZaCB)&eP`^W4YL$m77PQWTTsw{!Ljx1_EvW9Yy$?5jr>lEu73ipnpf= z{{{(iHgb0P1^2t>fciH$BNG!dTeGJW0iBplT%4SKX!obbe8WoKkz24a3`+4KVQU8ZG0g=X1JGPOy5C{`^3lePM8eH#mx{?!&Gx+99B7tz>HHj)ToeI8%0c8? z)d}Uz^x>4^s2-S9G%T@DGa95|Zj01}wD(Za)Xr4sCM;k&-;`fvO5S!sjT?73B7lQ1 zFg5j1-gfs~_gZ-VZY4wNHO`nB`FFaU21J?K)tWOA9_Ex__k9gE14NZ7r?&}_$+FnY z;-Vn>8s~--Pg?eDY6AMQw|Z9MB;%S!Yx`f~C$5q>tLZbOs)*<#o56+jncY364-dfBqxn@>uR5}oj5qe;sW#-DHz|t42riAa>vn+9hcvpTOKwVptchNLkagS z(i(Q@s!f}V2Qf6bURbkNv}vp`qMgUgWofs?&rH|G)RT;w?j9n zyWxwUe)D#%ualgqi>IX{y11h8l5?LYWvUYT1_ok4N{SqgtP?b`_ekoXG(#!8bmGGI zToZIq3tL9jcE^*^hA+ey89kQ9Re#GxYm&nzl+G4wtu@6a?WrZ2p#{GU<(k&ou9!-Gz?)yNw7Cvm6G` z+os>!055k>;I)$vsc@Ir#UW)mIPlJmN{72M^Ey&S|5lh)>VDS!FnSHmFjj?;9(wp- z_VER+*mb_35c`%_Mq!+=<``i~aC-{*3y+W-L%QH`cSVY^R`h5Mlsq}f?chj*R}F2W zF>6Z`j)R1m=yXXee-t1F?r!fV%ukq z5JUX4iMhE~-?^oFFK;Dh6`Y+d^}H9BrTrw~HJIjyjymPLCcemVVjhPVa@3a5{v4Hx zr~a)(mQE^0T738vu0yePRJ(S(ai{Up$z)alBnEU+ct;S?CUX*27EQXLZadL_)6Crv z<=b0{zC_1Gr9}l?D`e&P@O7L#L@^_KlLq)BP_e2g#Ylup@+ie1Gelt`4U#`6q-+68 zNgytP@d#6qfO^t1UP10X*a1Yj%iw2qn)oFYln!Gs_gWu=d1WcX9bwL6SIYCagWN4$KI#m zOpF0o$urMbyjR=|8Z}8@+YK)<3f=G|4aSs^o<1=+e71qI%qDVjA2@olJfGZKqV!6a z+1M(JJ6WaN9N|!yuq7I?Qs@8)!)L%K(#{{+4^q5CxeX&>kjvyBZ zmrM4jrUXfxW_ZTY=2_s1!$Cy?ueu!TUtMqHkilqT>fb)z9{S;jfT$e36$VThP^eA#>5wV}0q0{4O^@h8S4-L~ z6liYo%F_7mZi0+M_{B?&a*PiH)nptksckZWi|HsIW{SHu_pgsUK6>2j*uoDPSY_&` zqkousn@>G5L)v)fLunnNt6{sMwBk}z39xxpTP+bFkFA`7cK*JUv@s`7W;>b_Mnw*YNNsMvPocNavq_^mc!`T#x-5bYpOip}=Ru;6%w5pYbdxY`o zdUm-5lkeX9X6`UKe#v$1CjKg7@lxaD_Ta=@a9(gKO?N^NjoqAa_q#Px7gPlOG?!JQ z5EGSaqg~6CYb)PFf&UFJ*okk-CwuWA$}X7DN{RTrQiMRIvQ<8wwT8B5#FofuugETj zOa0_H6V)?a$>)uw?@buLE6YtT2YY;53pSbF3N~xs3l_4y0z_PJq+t^n>t2xNQLIPi z2_DcM+%{Lod{98J^K_UsjHzks+IbN*kxa{DDR&XPT0Oi_G{B4abKdf581#B}y!*2lwhnB-30z=h6D z)_c|^mJB%}+8njVeD(V}t22V4m^RQGVMnGr6z$r8=fKI}z$6&zruK}UPTpo+cbfe- zG!OfTf+nVKp^v+H3>B_@EE_QT4k$SVeLITFsesF*yfbvRAMzug2}NCbPNL|Q4ZUcx z?|d|69}2pj<2(sO%+>)+S6NdK${pj%BbyL<2nqMajpX*pPIFvc(XmO+Xb5rjO2##W zMlM8eZ_ly%TvXRLFpBSk8it8;tq7TMmL`cK5uB>~eRGzL*}lieG2cQ-W zdNND_9FkJ#&W`&c1U%ZLi$1+ud&=iQudYl#-0!toTb1-o+-#S&nz+l|<`9}kbx40) zmgL!?0KZiO1>L$nSF$!iUv1$IJm0mqtFk1jaWQy@Jd2#oJ>}u(f;v#~SggnW2=_z2 zA@az5ntc*+_*{R=x8Eruq$fpW0^CojCS)bsBZt{J>uy;fKlQV zf@~MUhr|$D)FkO#a9So+5(>F%70t6PRw*lWaoRuckjZT4)wB@(=^?ag+7&kSAnfY^9zOhu^c6_bZ+da5ophr< z+SljLQHRTV>q9mS1E!Y+5|&+yu2zmzk6$fti+hi;w}Nho5!ZX~7s$#r`Dz&7*ePSP z#G@YMz1)3B9HmlSc~8}ZJOxUxEY0LRyP)tMfbW$HfTLc4kns<8OcN5vU)Ci+!|}zU zU6Lag6&qPyo++w_z%>F+01pp|{ZSM~AmoMv7~`=C&EU+#6Da~DAu0r=BiPt@u%Rz3 zcUa<(TOt*0gF*f7>>?va;sEVq{Aex#`5Q{P#K~`|K`RML@V#}S!ydpZt&;v`SL;GoOB$&{pG|F4sA80X6#kuP(Yyxhqx9}942wQ@lojW zxETvnRFtAf*lsFt7I}T!irZG!y45hpAUHPMr^E4vjMZm=zr3Nin$4>qUx&ZM5i9z9)HeJE$;j224};5OmiZ{+Q4?5X0m|S zHEJf#W>Be>Ow?`|9a9qX+K`sIGA}qZ$XpM&ZoE!Plj`V?^a>ilmlR6L@u9-%-uM8H z#=nqUHqcw7`^&77gztx!?-&wepHr;qX*po*H?>PDJ34?rLaQ_Aet_0cAKaRpHN*gl zG>|7^DdCTp$yD_qBG#qCSeY!vE7?M3jCeB)8mn^TDU59BDG=zjbwVs*w0@w(9Zz3p z7T>cNWYFBu*qB0Yv~b-IA->AiLD{8e&%q=9vI4VkA*}XEE?>Du^R9K~dt}eU9gj|P z+@@YK!>VF;+Vb9GBB$RP6H}VW5(zElw?GOM6xt~9e3)5m!6JTi!^*LS_X|0NrFF%w zPATx2_sRi+X|X9VI@?{nQO7j*O9|g(Foo*>tVcFn34U;c^$#;Wgy7LM^J81DOMx5lB=SH0noEx(70HD>`?a;ix*!VtE z8vXTVMPGkfjhh!{?`oYhL(O1GqCl=*OAW7GIwMcLQj}MyOiF)=)8c9p=JVwa=ePJk z`h-Az7#m?qOXfxDP7-Y=7fkJ_M1E}^OxD=XuJwXrk^Bvn?>x>=^#v3+jlso(1I2gW z0{lDsr?9s@CSIl6b=&!<=ol3Hqb zVc5!lJ`rL<^Um90)5K35PgOoi+*ch(tBB#Vw1t{(ln8yuEaxSD-PaFpJknD7?;5@(tGkAvhiFM^$&*4Q9h5M zshNg4VmFrY^?N_(_8=?@MMQN_WZyBYv_an&gV{hrl!F7)vN3b8}6}KHFDQ25S<@1V|s(O#ogwa?rXm&D-kODp#7u2L7(!08& zL#{Lex0A!qS1C2c3JV=>bq6bRJLP}{&ZW)K4s0=ayJD+b#X?{55Bupkd}zm=iEN_A z!pt=lOC9@scO$I&*c7)XT>i`k8(prO!x{z|WnH`KkR$lzfuHB93xx&u_uMit36I<6 zB{Cgnf%E6993;zJ+l{Po%ab0xR#T4h4XFW}f)ErcKEjpM904xL%^e_m5v(I`*ytPys0QmVNF$>p4D<#q_lebS?-Wll3%UN z9GDX(*?0`m)aF>OuQ0sxQ8;aA9^|?0Nt&84iSzaHzS{qqj-201uP1r;IxE69FOapr zW@>YY9@tXvYqiMa9XF5L=My*oRnKW(M#gyGSSfWaDQlq-t;Xwt{p--rpnKzKrG@en`QK^kFrh^Trji_$e4=)d^k%k%?Lj zT(YB~nwyKQMoJw)5A#G}uJndUqXie-i0dzxR~dZ`po=-#@rb0oe;3%8`_AzHae zx6@WUqRsdyt`)VI$sFj8ZbwyuV;+>HUc7m*b2wy)t(2TR5LxO@4zGL~cyCJo*(w&N zCvrjOTxP;(zZQ3YcWBlr?sa~{aYz&a2lG^q)_s8z%A4c3oO6?$$`w+x`>@a7yS>uu zJ%qnrDA3!ruDa$bbsDAIheX!b$(1iM$2+7yiH=f|mZD-em@J8!= zEZ^Gxir{^q=7Sl$A_ z9QX$3H2agKzwn8vt)#sPc&m*=$zdjpJ3jOwlNTQ_|U0~NH ziwbr{fFt=mJGD0~s<9e1mLj|9I2>cMKsBJNlw1)sHJ6DL!SpmL^ff=8&PI5?)%rF%bC4m(^!=+Hdb8iGR{2p z%6d_i-j7|HsiTrV$psyJj#3uWfl5dZaSmD`%TI+pLD7-)kt8<=3juD2l@${tx}4M) z^RX<6sBM|GOD!=<(;=Ld#T?1HVmG}qa#e*LSfUt%Ii`}(d4-nR#xD|8EM?3vr#@@! znPGy&$D17(eI*!KDAC7gEDBZ=;`c^&`BK44*y3sleM2>6v6wrz?FQboem12sVK!I^ zGv(ay?&^|}$bOJJ?y0On`m^|);uF)scr6Q$jzZND!rqsaEY_GkSB71mwGxvZ0ov;}yCb!kSM{TJ z`2oHo4ZA|=q8GQoWRoM9v`&?4ZwBMpu*#+q`x)l_Bi!ew9^7!=0?&5lu%+eDIW zS#oFi*f9G@WiH?Du-|ws8of+%3=SbC{^Eq_hvZWaj6-oJym?;7!Up>S{-rBva7!s) z-9&BEr5~F8s9!(FBkYeCyC_k51b7$#z~;rjRZ#4w3MwzID#|FWAi->BWN&3|2Kr-h zzcfMAzLOM9{E|1Qd-0pO8X3Qq>JGvvl#+mJtf2^t*ztbE3ra_|hVZ!qbHk0t{20p% z3yWgRE>nR|dvAp+5tVL-m%mkAcIw=JzG#wP#Y!W_=(ABy5|pd^WX79)M)#INnO7>l z<_x0Zl#gE|-e7aRdwX&S@X5BW@W8jFQYq!0XEFcQ){Y2^NQWv}?4b7qQ98be+-0#YVeEIxFEDEU z>|xuUNn6Fei^#nCD$+V1YG9E*o-1z=u4469Z7wwvd*>xOzFeMh5Y*7L$h549eGqJW zDJE=j#=ih9wvH==I3Ei1bG}6Qk=HhwNp$QdYiaRmn~{<%1SA&VpZ7vNCHI&3b7$1w zQGeg?^b?}|)cmLIPk*xf`MUnA<@JXt^FK6APnS=7vi`6(|3v+{d+UEXJvDyVVLzk% z$p!hlgYwfH`|G@aqW;dZ{u`E`X4(Iih2UxZ;qPPlX`cNv%MbhPXDI)M<*#PiKQsOC zp?*fhZ4!+%mmzf0DiR@?t}k}AL9 z`PF*+XPzJC+s_F94bT5$#r-v7zb;DsFynqk?-SWiYwpja{F&)rRpV1?e~Fo=Lifu8 z*584@7R#q!_$3^O|0*&6j{LP8{3xbBqw1;f{8Jnz literal 0 HcmV?d00001 diff --git a/images/branch-commit.png b/images/branch-commit.png new file mode 100644 index 0000000000000000000000000000000000000000..10298911832e3f97c9ba56d7ddecef13df0bd876 GIT binary patch literal 17597 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 P8Da2r^>bP0l+XkK(Fj2U literal 0 HcmV?d00001 diff --git a/images/branch-conflict-solved.odg b/images/branch-conflict-solved.odg new file mode 100644 index 0000000000000000000000000000000000000000..86f76bd660c75eaf5d0f75e79a8f95835d0eba4b GIT binary patch literal 11134 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 literal 0 HcmV?d00001 diff --git a/images/branch-conflict-solved.png b/images/branch-conflict-solved.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ff24338ee48db40f117e833da58e12ec47bbbb GIT binary patch literal 26746 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