Add Flex starter presentation

Generated training module for Apache Flex.
Content researched from flex.apache.org.
Requires human review before publishing.
diff --git a/content/Apache/Flex/metadata.yaml b/content/Apache/Flex/metadata.yaml
new file mode 100644
index 0000000..a0f4cb1
--- /dev/null
+++ b/content/Apache/Flex/metadata.yaml
@@ -0,0 +1,27 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+title: "Apache Flex"
+project_id: flex
+description: "Application framework for building expressive web and mobile applications"
+tags:
+  - web
+  - intro
+  - developer
+duration: "45-60 min"
+level: beginner
+language: actionscript
+slides: 24
+updated: "2026-05-24"
diff --git a/content/Apache/Flex/pom.xml b/content/Apache/Flex/pom.xml
new file mode 100644
index 0000000..dc3949a
--- /dev/null
+++ b/content/Apache/Flex/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.training</groupId>
+    <artifactId>content-parent-pom</artifactId>
+    <version>1.5.0-SNAPSHOT</version>
+    <relativePath>../../../tools/content-parent-pom/pom.xml</relativePath>
+  </parent>
+
+  <groupId>org.apache.training.content</groupId>
+  <artifactId>training-content-apache-flex</artifactId>
+  <version>1.0.0-SNAPSHOT</version>
+  <packaging>war</packaging>
+
+  <name>Training: Content: Apache: Flex</name>
+  <description>Apache Flex training module - application framework for expressive web applications</description>
+
+</project>
diff --git a/content/Apache/Flex/src/main/asciidoc/_settings.adoc b/content/Apache/Flex/src/main/asciidoc/_settings.adoc
new file mode 100644
index 0000000..9a16917
--- /dev/null
+++ b/content/Apache/Flex/src/main/asciidoc/_settings.adoc
@@ -0,0 +1,36 @@
+////
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+////
+
+:goto:
+:menu:
+:navigation:
+:status:
+:arrows:
+:revealjs_theme: black
+:revealjs_progress: true
+:revealjs_slidenumber: true
+:revealjs_center: false
+:revealjs_history: true
+:customcss: reveal.js-5.2.1/dist/theme/apache.css
+:favicon: https://apache.org/favicon.ico
+:icons: font
+:imagesdir: images
+:sourcedir: ../java
+:idprefix:
+:idseparator: -
diff --git a/content/Apache/Flex/src/main/asciidoc/images/project-logo.png b/content/Apache/Flex/src/main/asciidoc/images/project-logo.png
new file mode 100644
index 0000000..03eda0e
--- /dev/null
+++ b/content/Apache/Flex/src/main/asciidoc/images/project-logo.png
Binary files differ
diff --git a/content/Apache/Flex/src/main/asciidoc/index.adoc b/content/Apache/Flex/src/main/asciidoc/index.adoc
new file mode 100644
index 0000000..9e822c2
--- /dev/null
+++ b/content/Apache/Flex/src/main/asciidoc/index.adoc
@@ -0,0 +1,391 @@
+////
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+////
+
+include::_settings.adoc[]
+== Apache Flex
+
+image::project-logo.png[Apache Flex, 500]
+
+The open-source framework for building expressive web and mobile applications
+
+[.notes]
+--
+Apache Flex is a highly productive, open source application framework for
+building and maintaining expressive web applications that deploy consistently
+on all major browsers, desktops and devices. It entered the ASF in December
+2012, donated by Adobe.
+--
+
+== What Is Apache Flex?
+
+* Open-source application framework (Apache License 2.0)
+* Builds expressive web, desktop, and mobile applications
+* Uses MXML for layout and ActionScript 3 for logic
+* Deploys to Adobe Flash Player and Adobe AIR
+* Originally created by Macromedia, later donated by Adobe to ASF
+
+[.notes]
+--
+Flex was originally created by Macromedia in 2004, acquired by Adobe, and
+donated to the Apache Software Foundation in 2011. It became a top-level
+project in December 2012.
+--
+
+== One Codebase, Deploy Everywhere
+
+* **Browser** — via Adobe Flash Player
+* **Desktop** — via Adobe AIR (Windows, macOS, Linux)
+* **Mobile** — iOS, Android (native app stores)
+* **TV** — Smart TVs via Broadcom platform
+
+[.notes]
+--
+The key value proposition of Flex is write-once, deploy-everywhere.
+A single codebase can target browsers, desktop apps, mobile devices,
+and even smart TVs.
+--
+
+== Important Notice: Flash Player EOL
+
+* Adobe Flash Player support in browsers ended December 2020
+* All major browsers (Chrome, Firefox, Edge) removed Flash
+* For **browser** output → migrate to Apache Royale™
+* Desktop and mobile via Adobe AIR (provided by Harman) **still supported**
+
+[.notes]
+--
+This is critical context. Flash Player in the browser is dead. However,
+Flex apps that target AIR for desktop and mobile continue to work. For
+browser-targeted development, Apache Royale is the successor project.
+--
+
+== Apache Royale: The Browser Path Forward
+
+* Sister project at the ASF: https://royale.apache.org/
+* Allows continued use of ActionScript
+* Outputs native JavaScript and HTML
+* Designed for developers migrating from Flex browser apps
+
+[.notes]
+--
+Apache Royale grew out of the FlexJS project (originally part of Flex).
+It provides a migration path for developers who need browser deployment.
+--
+
+== The Flex SDK Stack
+
+* **Apache Flex SDK** — the core framework (current: 4.16.1)
+* **Apache FlexJS** — ActionScript to JavaScript compiler (beta)
+* **Apache FlexUnit** — unit testing framework
+* **BlazeDS** — Java-based remoting and messaging
+* **Squiggly** — spell checker library
+
+[.notes]
+--
+The Flex ecosystem includes several sub-projects beyond the core SDK.
+Each is available as a separate download from the Apache Flex website.
+--
+
+== Languages and Technologies
+
+* **MXML** — XML-based markup for UI layout and component declaration
+* **ActionScript 3** — ECMAScript-based language (similar to JavaScript)
+* Component-based architecture with data binding
+* Skinnable UI components with CSS-like styling
+
+[.notes]
+--
+MXML handles declarative layout while ActionScript handles logic.
+ActionScript 3 is strongly typed and class-based, making it familiar
+to Java and C# developers.
+--
+
+== Key Framework Features
+
+* Rich set of UI components (buttons, forms, data grids, lists)
+* Layout containers (HGroup, VGroup, TileGroup, BasicLayout)
+* Data binding and event-driven architecture
+* Skinning and theming with CSS
+* Accessibility support (Section 508 compliance)
+
+[.notes]
+--
+Flex's component library is one of its strongest features — a mature
+set of enterprise-grade UI widgets that took years to develop.
+--
+
+
+== Supported IDEs
+
+* **Adobe Flash Builder** (Eclipse-based)
+* **JetBrains IntelliJ IDEA**
+* **FlashDevelop** (Windows)
+* **FDT** (Eclipse-based)
+* Any text editor + command-line compiler
+
+[.notes]
+--
+While you can technically use any text editor, a dedicated IDE provides
+code completion, visual design tools, and integrated debugging.
+--
+
+== Installing the SDK
+
+1. Download the SDK Installer from https://flex.apache.org/
+2. Run the installer and choose an installation directory
+3. Accept the component licenses (Flash Player, AIR, etc.)
+4. Wait for all components to download
+5. Point your IDE to the new SDK directory
+
+[.notes]
+--
+The SDK Installer handles downloading all required dependencies
+including Flash Player, AIR SDK, and third-party libraries. This
+greatly simplifies what used to be a manual multi-step process.
+--
+
+== SDK Dependencies
+
+* Java SDK 1.7+ (for compilation)
+* Apache ANT 1.7.0+
+* Adobe AIR Integration Kit
+* Adobe Flash Player Content Debugger
+* Open Source Media Framework (OSMF)
+
+[.notes]
+--
+If you use the SDK Installer these are handled automatically. Only
+manual source builds need to worry about gathering these individually.
+--
+
+== Hello World: The Code
+
+[source,xml]
+----
+<?xml version="1.0" encoding="utf-8"?>
+<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
+               xmlns:s="library://ns.apache.org/flex/spark"
+               width="640" height="480">
+    <s:layout>
+        <s:BasicLayout />
+    </s:layout>
+    <s:Label text="Hello World!"
+             horizontalCenter="0"
+             verticalCenter="0" />
+</s:Application>
+----
+
+[.notes]
+--
+This is a minimal Flex application. The Application tag is the root,
+layout defines positioning strategy, and Label is a simple text component.
+Note the Spark namespace (library://ns.apache.org/flex/spark).
+--
+
+== Running Your Application
+
+1. Create a new Flex project in your IDE
+2. Set the SDK to Apache Flex 4.16.1
+3. Replace the generated MXML with Hello World code
+4. Click Debug/Run in the toolbar
+5. Application launches in your default browser
+
+[.notes]
+--
+The compile-debug cycle is fast. The compiler produces a SWF file that
+runs in Flash Player (browser) or can be packaged as an AIR app.
+--
+
+== Project Structure
+
+[source,text]
+----
+my-flex-app/
+├── src/
+│   └── MyApp.mxml          (main application)
+├── libs/                    (SWC libraries)
+├── bin-debug/               (debug output)
+├── bin-release/             (release output)
+└── build.xml                (ANT build, optional)
+----
+
+[.notes]
+--
+A typical Flex project is straightforward. Source goes in src/, compiled
+output in bin-debug or bin-release, and any third-party SWC libraries
+in libs/.
+--
+
+== Downloads Available
+
+* **SDK Installer** — recommended for application developers
+* **SDK Source Code** — for SDK contributors
+* **SDK Binaries** — pre-compiled (Mac, Linux, Windows)
+* **FlexUnit** — unit testing framework
+* **Tour De Flex** — component explorer and examples
+
+[.notes]
+--
+The SDK Installer at https://flex.apache.org/ is the recommended path
+for most developers. Binaries are available for those who prefer not
+to compile.
+--
+
+
+
+== Mailing Lists
+
+* **Users list** — help, discussion, how-to questions
+** Subscribe: users-subscribe@flex.apache.org
+* **Dev list** — SDK development, features, releases
+** Subscribe: dev-subscribe@flex.apache.org
+* **Commits list** — automated code change notifications
+* **Issues list** — JIRA issue notifications
+
+[.notes]
+--
+The users list is the right place for application developers. The dev
+list is for those working on the SDK itself. Archives are available on
+Markmail and lists.apache.org.
+--
+
+== Issue Tracker
+
+* JIRA: https://issues.apache.org/jira/browse/FLEX
+* Bug reports, feature requests, improvements
+* Anyone can file issues (requires ASF JIRA account)
+* Check existing issues before filing new ones
+
+[.notes]
+--
+JIRA is the official issue tracker for Apache Flex. You'll need to
+create an ASF JIRA account to file issues.
+--
+
+== Source Repositories
+
+* **flex-sdk** — core SDK framework
+* **flex-falcon** — next-generation compiler
+* **flex-blazeds** — Java remoting/messaging
+* **flex-flexunit** — unit testing
+* **flex-utilities** — SDK installer and tools
+* 16 repositories total on Apache GitBox
+
+[.notes]
+--
+All source code is available on Apache GitBox and mirrored to GitHub.
+The flex-sdk repo is the main framework codebase.
+--
+
+== Project Governance
+
+* Apache Software Foundation top-level project (since December 2012)
+* PMC with 45 members
+* Apache License, Version 2.0
+* Decisions made by consensus on dev@ mailing list
+* Meritocratic — contributions earn committer status
+
+[.notes]
+--
+Flex follows standard ASF governance. The PMC oversees releases and
+community health. New committers are nominated based on sustained
+contributions.
+--
+
+== How to Contribute
+
+* Subscribe to dev@flex.apache.org
+* Check JIRA for open issues tagged "newbie" or "easy"
+* Submit patches via GitHub pull requests
+* Improve documentation and examples
+* Help other users on the users@ mailing list
+
+[.notes]
+--
+Contributions don't have to be code. Documentation, testing, answering
+user questions, and triaging bugs are all valued contributions.
+--
+
+== Related Projects
+
+[cols="1,2"]
+|===
+| Project | Purpose
+
+| Apache Royale™
+| ActionScript to JavaScript/HTML (browser output)
+
+| BlazeDS
+| Java remoting and messaging for Flex
+
+| FlexUnit
+| Unit testing framework
+
+| Tour De Flex
+| Interactive component explorer
+|===
+
+[.notes]
+--
+Apache Royale is especially important as the migration path for
+browser-targeted Flex applications now that Flash Player is retired.
+--
+
+== Resources
+
+* Website: https://flex.apache.org/
+* Getting Started: https://flex.apache.org/doc-getstarted.html
+* API Documentation: https://flex.apache.org/asdoc/
+* Wiki: https://cwiki.apache.org/confluence/display/FLEX
+* Blog: https://blogs.apache.org/flex/
+
+[.notes]
+--
+The official website has comprehensive documentation including
+API references, video tutorials, and the FlexUnit tutorial.
+--
+
+== Summary
+
+* Apache Flex: mature, open-source application framework
+* MXML + ActionScript 3 for rich application development
+* Desktop and mobile deployment still active via Adobe AIR
+* Browser path forward: Apache Royale™
+* Active PMC with 45 members, Apache-governed
+
+[.notes]
+--
+While Flash Player in the browser has ended, Flex remains relevant for
+AIR-based desktop and mobile applications. Apache Royale provides the
+path forward for browser-targeted development.
+--
+
+== Questions?
+
+image::project-logo.png[Apache Flex, 300]
+
+* https://flex.apache.org/
+* users@flex.apache.org
+* dev@flex.apache.org
+
+[.notes]
+--
+Direct audience to the mailing lists for follow-up questions.
+The users list is appropriate for application development questions.
+--
diff --git a/content/Apache/Flex/src/main/theme/apache.css b/content/Apache/Flex/src/main/theme/apache.css
new file mode 100644
index 0000000..d8f2a14
--- /dev/null
+++ b/content/Apache/Flex/src/main/theme/apache.css
@@ -0,0 +1,457 @@
+/*
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    https://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+*/
+
+/*********************************************
+ * APACHE TRAINING DARK THEME
+ * White text on black, large fonts for
+ * conference room visibility.
+ *********************************************/
+
+/*********************************************
+ * GLOBAL STYLES
+ *********************************************/
+body {
+  background-color: #1a1a1a;
+  background-image: none;
+}
+
+.reveal-viewport {
+  background-color: #1a1a1a;
+  color: #f0f0f0;
+  background-image: none !important;
+}
+
+.reveal {
+  font-family: "Segoe UI", Helvetica, Arial, sans-serif;
+  font-size: 32px;
+  font-weight: normal;
+  color: #f0f0f0;
+}
+
+/*********************************************
+ * SLIDE OVERFLOW — allow scrolling if content
+ * exceeds slide height
+ *********************************************/
+.reveal .slides section {
+  height: auto !important;
+  overflow-y: auto !important;
+}
+
+::selection {
+  color: #fff;
+  background: #42affa;
+  text-shadow: none;
+}
+
+.reveal .slides > section, .reveal .slides > section > section {
+  line-height: 1.4;
+  font-weight: inherit;
+}
+
+/*********************************************
+ * HEADERS — smaller than default
+ *********************************************/
+.reveal h1, .reveal h2, .reveal h3, .reveal h4, .reveal h5, .reveal h6 {
+  margin: 0 0 20px 0;
+  color: #ffffff;
+  font-family: "Segoe UI", Helvetica, Arial, sans-serif;
+  font-weight: 600;
+  line-height: 1.2;
+  letter-spacing: normal;
+  text-transform: none;
+  text-shadow: none;
+  word-wrap: break-word;
+}
+
+.reveal h1 {
+  font-size: 1.4em;
+}
+
+.reveal h2 {
+  font-size: 1.0em;
+}
+
+.reveal h3 {
+  font-size: 0.9em;
+}
+
+.reveal h4 {
+  font-size: 0.8em;
+}
+
+/*********************************************
+ * BODY TEXT — large for back-of-room
+ *********************************************/
+.reveal p {
+  margin: 20px 0;
+  line-height: 1.4;
+  font-size: 1em;
+}
+
+.reveal li {
+  font-size: 0.95em;
+  margin-bottom: 0.3em;
+}
+
+/* Ensure certain elements are never larger than the slide itself */
+.reveal img, .reveal video, .reveal iframe {
+  max-width: 95%;
+  max-height: 85%;
+}
+
+.reveal strong, .reveal b {
+  font-weight: bold;
+  color: #ffffff;
+}
+
+.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: 0 0 2px rgba(255, 255, 255, 0.2);
+  color: #ccc;
+}
+
+.reveal blockquote p:first-child, .reveal blockquote p:last-child {
+  display: inline-block;
+}
+
+.reveal q {
+  font-style: italic;
+}
+
+/*********************************************
+ * CODE
+ *********************************************/
+.reveal pre {
+  display: block;
+  position: relative;
+  width: 90%;
+  margin: 20px auto;
+  text-align: left;
+  font-size: 0.55em;
+  font-family: "Fira Code", "Consolas", monospace;
+  line-height: 1.3em;
+  word-wrap: break-word;
+  box-shadow: 0 0 6px rgba(0, 0, 0, 0.3);
+}
+
+.reveal code {
+  font-family: "Fira Code", "Consolas", monospace;
+}
+
+.reveal pre code {
+  display: block;
+  padding: 10px;
+  overflow: auto;
+  max-height: 450px;
+  word-wrap: normal;
+  background: #2d2d2d;
+  color: #e0e0e0;
+  border-radius: 4px;
+}
+
+/*********************************************
+ * TABLES
+ *********************************************/
+.reveal table {
+  margin: auto;
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+.reveal table th {
+  font-weight: bold;
+  color: #ffffff;
+}
+
+.reveal table th, .reveal table td {
+  text-align: left;
+  padding: 0.3em 0.6em;
+  border-bottom: 1px solid #555;
+  color: #e0e0e0;
+}
+
+.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 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 0.15s ease;
+  -moz-transition: color 0.15s ease;
+  transition: color 0.15s ease;
+}
+
+.reveal a:hover {
+  color: #8dcffc;
+  text-shadow: none;
+  border: none;
+}
+
+.reveal .roll span:after {
+  color: #fff;
+  background: #068ee9;
+}
+
+/*********************************************
+ * IMAGES
+ *********************************************/
+.reveal section img {
+  margin: 15px 0;
+}
+
+.reveal a img {
+  -webkit-transition: all 0.15s linear;
+  -moz-transition: all 0.15s linear;
+  transition: all 0.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 div.navigate-left, .reveal .controls div.navigate-left.enabled {
+  border-right-color: #42affa;
+}
+
+.reveal .controls div.navigate-right, .reveal .controls div.navigate-right.enabled {
+  border-left-color: #42affa;
+}
+
+.reveal .controls div.navigate-up, .reveal .controls div.navigate-up.enabled {
+  border-bottom-color: #42affa;
+}
+
+.reveal .controls div.navigate-down, .reveal .controls div.navigate-down.enabled {
+  border-top-color: #42affa;
+}
+
+.reveal .controls div.navigate-left.enabled:hover {
+  border-right-color: #8dcffc;
+}
+
+.reveal .controls div.navigate-right.enabled:hover {
+  border-left-color: #8dcffc;
+}
+
+.reveal .controls div.navigate-up.enabled:hover {
+  border-bottom-color: #8dcffc;
+}
+
+.reveal .controls div.navigate-down.enabled:hover {
+  border-top-color: #8dcffc;
+}
+
+/*********************************************
+ * PROGRESS BAR
+ *********************************************/
+.reveal .progress {
+  background: rgba(255, 255, 255, 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);
+}
+
+/*********************************************
+ * SLIDE NUMBER
+ *********************************************/
+.reveal .slide-number {
+  color: #888;
+  background-color: rgba(0, 0, 0, 0);
+}
+
+/*********************************************
+ * GENERAL PURPOSE COLORS
+ *********************************************/
+.reveal .red {
+  color: #ff4444;
+}
+
+.reveal .orange {
+  color: #ffaa44;
+}
+
+.reveal .yellow {
+  color: #ffff44;
+}
+
+.reveal .green {
+  color: #44ff44;
+}
+
+/*********************************************
+ * HIDE THE PERSISTENT HEADER/FOOTER from
+ * document.html.slim template
+ *********************************************/
+.header,
+.footer {
+  display: none !important;
+}
+
+/*********************************************
+ * PROJECT LOGO — small, top left of every slide
+ * Each module should place a project-logo.png
+ * in src/main/asciidoc/images/ OR override
+ * this rule in a local customcss with the
+ * project's logo URL.
+ *********************************************/
+.reveal::before {
+  content: "";
+  position: fixed;
+  top: 16px;
+  left: 16px;
+  width: 120px;
+  height: 36px;
+  background-image: url("../../../images/project-logo.png");
+  background-size: contain;
+  background-repeat: no-repeat;
+  opacity: 0.7;
+  z-index: 100;
+  pointer-events: none;
+}
+
+/*********************************************
+ * APACHE OAK LEAF — bottom right of every slide
+ *********************************************/
+.reveal::after {
+  content: "";
+  position: fixed;
+  bottom: 16px;
+  left: 16px;
+  width: 36px;
+  height: 36px;
+  background-image: url("../../../images/logo-apache.png");
+  background-size: contain;
+  background-repeat: no-repeat;
+  opacity: 0.6;
+  z-index: 100;
+  pointer-events: none;
+}
+
+/*********************************************
+ * C3JS Charts (dark mode)
+ *********************************************/
+.c3 {
+  fill: white;
+}
+
+.c3 line, .c3 path {
+  stroke: white !important;
+}
+
+/*********************************************
+ * Column layout
+ *********************************************/
+.reveal .west {
+  position: fixed;
+  left: 5%;
+}
+
+.reveal .east {
+  position: fixed;
+  right: 5%;
+}