From bd62187061c0683b765076b862b416821f12c270 Mon Sep 17 00:00:00 2001
From: iarwain <iarwain@orx-project.org>
Date: Sat, 24 Aug 2024 16:40:36 -0400
Subject: [PATCH] - Updated CHANGELOG, AUTHORS and READMEs

---
 AUTHORS                       |   42 +-
 CHANGELOG                     |   59 +-
 README.html                   |   56 +-
 README.md                     |   56 +-
 code/demo/iOS/ReadMe-iOS.html | 1393 +++++++++++++++++++--------------
 code/demo/iOS/ReadMe-iOS.md   |    2 +-
 6 files changed, 944 insertions(+), 664 deletions(-)

diff --git a/AUTHORS b/AUTHORS
index 87f846d52..d85b49122 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -9,19 +9,15 @@ Orx authors:
   Tools:
     Romain Killian
 
-  Premake/IDE project files (CodeLite, Visual Studio, XCode, Android, Premake) and external dependencies:
-    Lydesik
-    Romain Killian
-
-  Windows, MacOS X & Linux versions:
+  Init extensions:
     Romain Killian
+    Hezekiah 'hcarty' Carty
 
-  iOS (iPhone/iPod Touch/iPad) version:
+  Windows, MacOS X, Linux & iOS:
     Romain Killian
 
-  Android versions:
+  Android:
     Philippe 'Lydesik' Simons
-    Gilles 'faistoiplaisir' Zucchini
     Kristoffer 'Znakeye'
 
   Launcher, demos and tutorials:
@@ -34,38 +30,20 @@ Orx authors:
     Wayne Johnson
     Romain Killian
 
-  Community tutorials:
-    Acksys
-    Enobayram
-    Grey
-    Iarwain
-    Katarak
-    Lydesik
-    Sausage
-    TDomhan
-
-  OpenAL sound recording:
-    TDomhan
-
-  Compressed texture support:
-    Lydesik
-    TDomhan
-
   Many error and warning messages:
-    M1SF17
+    'M1SF17'
 
-  Logo, tutorial graphics and music:
+  Logo, tutorial graphics and musics:
     Matthieu 'Pixoshiru' Gallais
 
   Demo graphics:
-    Ebe
     Matthieu 'Pixoshiru' Gallais
     Treb
 
   Default font (dina):
     Jørgen 'Jibs' Ibsen
 
-  Additional contributors:
+  Community tutorials & additional contributors:
     4babce
     Andrew 'danvd'
     Cai 'laschweinski' Huaxu
@@ -74,14 +52,20 @@ Orx authors:
     Enis 'enobayram' Bayramoğlu
     Eric Poulsen
     Fritz 'acksys' Mahnke
+    Gilles 'faistoiplaisir' Zucchini
     Grey
     Hezekiah 'hcarty' Carty
+    Iarwain
     Jonas Ohrn
+    Katarak
     Kevin Watters
     Konrad 'Graag' Klimaszewski
     Kristoffer 'Znakeye'
     OneArb
     Orson Bushnell
+    Philippe 'Lydesik' Simons
     Ray Yee
+    Sausage
     Sergei Gnezdov
+    TDomhan
     Wayne 'Sausage' Johnson
diff --git a/CHANGELOG b/CHANGELOG
index 69c288872..ae95171e2 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,59 @@
 Orx - Portable Game Engine
 ==========================
 
+orx 1.15
+-----
+
+* IMPORTANT: Added support for internal memory-based resources, including: orxResource_SetMemoryResource(), hotreload support, WEBP-encoded orx:font:default & orx:texture:logo textures
+* IMPORTANT: Added Trigger module to enable per-object hierarchical/cascaded event handling in config, using commands (new ScrollObject's input system relies on Triggers), added internal triggers to handle object's creation, deletion and physics collisions
+* IMPORTANT: Added support for headless mode, using embedded plugins + __orxHEADLESS__ define
+* IMPORTANT: Added support for manual parents for Animation & Frame sections
+* IMPORTANT: Using a single float value as an object/camera/spawner Position will only set its Z component, e.g. Position = -1 <=> Position = (0, 0, -1)
+* IMPORTANT: FX module overhaul, including: Bezier curves support, web easing curves (30) and user-defined float/vector FXs
+* IMPORTANT: Added orxObject_FindChild()/orxObject_FindOwnedChild (and commands) to find objects inside a hierarchy based on their name/index
+* IMPORTANT: Languages can now be added on-the-fly to the Locale module, Locale.LanguageList has been replaced by Local.Language to define the default language
+* IMPORTANT: Invalid animation sets will not stop execution anymore, using an unknown current/target anim name will be ignored (useful for recursive calls on hierarchies with diverging animation sets)
+* IMPORTANT: Init-ed projects can now be re-init-ed to add/remove/update extensions
+* IMPORTANT: Added tailored ExtensionTemplate.ini to init-ed projects, describing all config properties used by enabled extensions
+* IMPORTANT: An optional wrap around and FX can now be applied to shader time parameters
+* IMPORTANT: Bundle & Scroll extensions are now enabled by default for newly created projects using init
+* IMPORTANT: Literal positions & pivot overrides will now work properly, no matter the IgnoreFromParent settings
+* IMPORTANT: Min deployment OS version for MacOS is now 10.10
+* IMPORTANT: Removed redundant orxClock_GetNext()
+* IMPORTANT: default debug64 configurations has been replaced by debuguniv64 on MacOS
+* IMPORTANT: Added typo detector for config values, using the Damerau-Levenshtein edit distance calculation algorithm (can be disabled)
+* IMPORTANT: Added support for white, pink & brownian noises and sine, square, triangle & sawtooth (A-440 Hz) audio wave streams
+* IMPORTANT: @ is now supported as the self-section identifier for config lazy commands
+* IMPORTANT: Added orxInput_PushSet()/_PopSet() (+ associated commands) to handle input sets in a similar fashion to config sections
+* IMPORTANT: The [Color] section can now be extended/overridden in the main config file
+* New Mod init extension (based on ibxm) has replaced the former pocketmod-based one: FastTracker 2 .XM & Scream Tracker 3 .S3M formats are now supported
+* Added SNDH init extension (based on AtariAudio) to play Atari ST sound files
+* Added Cheat code (pass phrases/input sequences) init extension
+* Added Inspector init extension (to inspect objects & associated config at runtime)
+* Added support for new mouse cursors (hresize -> resize_ew, vresize -> resize_ns, resize_nesw, resize_nwse, resize_all & not_allowed)
+* Improved clock's internal sleep accuracy to prevent oversleeping and micro-stuttering
+* FPS counter isn't rendered on debug viewports anymore
+* Objects with bodies can now age (but collisions won't be resolved during aging)
+* Color literals can now be used in numeric random expressions, with or without steps
+* Color literals are now supported through exposed config API and can be used for all available color spaces
+* Added orxREMAP(), orxVector_Remap() & orxVector_Mod() (+ associated commands/aliases)
+* Fixed auto-resize behavior of multiple viewports linked to the same texture
+* Improved orxFontGen's log output
+* Muted many unessential warning messages that spam logs in some valid use cases
+* Added Input.Load, Input.Save and Input.ClearSet commands (+ orxInput_ClearSet()), orx:input:console & orx:input:profiler as internal input sets
+* Added orxConfig_GetDefaultParent() & commands Config.SetDefaultParent/Config.GetDefaultParent
+* Added Clock.Pause & Clock.IsPaused commands
+* Added Object.(Add|Remove)BodyPart & Object.SetBody commands
+* Physics simulation will now be ignored for objects linked to a paused clock
+* Objects linked to a paused clock will not be updated
+* Commands *ToSPherical & *ToCartesian now use degrees instead of radians
+* Command.Evaluate can now take an optional GUID parameter
+* Added orxObject_SetFXTime[Recursive]()/_GetFXTime() (+ associated commands)
+* Added orxObject_ResetActiveTime[Recursive]() & command Object.ResetActiveTime
+* Updated to latest Scroll (headers-only, OnFX* methods, ScrollObject::Find[Owned]Child/Get[Owned]Child, ScrollObject inputs & triggers support, etc.)
+
+
+
 orx 1.14
 -----
 * IMPORTANT: Android build system has been revamped & simplified and supports automatic downloading/updating of dependencies
@@ -21,7 +74,7 @@ orx 1.14
 * IMPORTANT: F5 is now the default key to pause/unpause the embedded profiler & F8 the default key to show/hide the profiler's history
 * IMPORTANT: Added support for FrameIndex for animations made with the multiple files mode
 * IMPORTANT: ScrollObject::SetAnim() now defaults to a recursive behavior
-* IMPORATNT: orxString_NPrint() now takes the size of the buffer including the terminating null character (no need for size + 1 as parameter any longer)
+* IMPORTANT: orxString_NPrint() now takes the size of the buffer including the terminating null character (no need for size + 1 as parameter any longer)
 * IMPORTANT: Removed orxString_Print(), orxString_NPrint() should be used instead
 * IMPORTANT: Returning an empty value for OnPrepare & OnDelete commands is now treated as "false" (ie. abort)
 * IMPORTANT: Added System config values (Bits, Build, Endianness, Platform & Processor) + System command for queries
@@ -305,7 +358,7 @@ orx 1.9
 * IMPORTANT: Added partial frame transmission support to orxFrame (+ config property IgnoreFromParent)
 * IMPORTANT: Added support for lazy command evaluation as config values (ex: MyValue = % MyModule.MyCommand 18)
 * IMPORTANT: Multiple commands can now be processed at once if separated by ',' (Works with commands from timelines as well as those from console or any call to orxCommand_Evaluate())
-* IMPORTATN: Added orxText_SetSize() that can constrain a text horizontally and vertically
+* IMPORTANT: Added orxText_SetSize() that can constrain a text horizontally and vertically
 * IMPORTANT: Added orxSound_GetCursor() & orxSound_SetCursor()
 * IMPORTANT: Graphic's texture and sound stream/sample now support locale marker ($) for localization
 
@@ -520,7 +573,7 @@ orx 1.5rc0
 * IMPORTANT: Added concept of group to objects, cameras and rendering + added orxObject_GetNext() for group browsing
 * IMPORTANT: Added MRT (Multiple Render Targets) support on computers + Android/OpenGL ES 3.0
 * IMPORTANT: Textures are not Y-reverted at runtime anymore: no need to manually Y-revert compressed textures and shader UV coordinates
-* IMPORTNAT: Added String ID support (using hash as key/comparison value + central content storage)
+* IMPORTANT: Added String ID support (using hash as key/comparison value + central content storage)
 * IMPORTANT: No more screen-as-texture support, render-to-texture should be used at all time
 * IMPORTANT: Viewports are now rendered in their order of creation (was previously reverse order)
 * IMPORTANT: Added memory tracking, including resource-related dependencies: sound, textures, physics (displayed in the profiler screen)
diff --git a/README.html b/README.html
index 8b8673e72..799bc5cf2 100644
--- a/README.html
+++ b/README.html
@@ -1224,7 +1224,7 @@
 <a href="https://app.travis-ci.com/github/orx/orx" rel="nofollow"><img src="https://camo.githubusercontent.com/678fb862d3316ef8c43583d84ecbcb40a5c9d79d7d32582ab5e71e772e35926f/68747470733a2f2f6170692e7472617669732d63692e636f6d2f6f72782f6f72782e7376673f6272616e63683d6d6173746572" alt="Travis build" data-canonical-src="https://api.travis-ci.com/orx/orx.svg?branch=master" style="max-width: 100%;"></a>
 <a href="https://ci.appveyor.com/project/iarwain/orx" rel="nofollow"><img src="https://camo.githubusercontent.com/9ac969738d6e3cfb392d8a5ee34275d4cd2be3c28fac65e8a75f06cabc6819be/68747470733a2f2f63692e6170707665796f722e636f6d2f6170692f70726f6a656374732f7374617475732f616c776d34696c377831773667316f343f7376673d74727565" alt="Build status" data-canonical-src="https://ci.appveyor.com/api/projects/status/alwm4il7x1w6g1o4?svg=true" style="max-width: 100%;"></a>
 <a href="https://github.com/orx/orx"><img src="https://camo.githubusercontent.com/fb4b42341e7706cd1904907581463981eb14fdeffc7842ee7aa402b2db05363b/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7265706f2d73697a652f6f72782f6f72782e737667" alt="Git Repo Size" data-canonical-src="https://img.shields.io/github/repo-size/orx/orx.svg" style="max-width: 100%;"></a></p>
-<div class="markdown-heading"><h1 class="heading-element">Orx - Portable Game Engine (Version 1.14)</h1><a id="user-content-orx---portable-game-engine-version-114" class="anchor" aria-label="Permalink: Orx - Portable Game Engine (Version 1.14)" href="#orx---portable-game-engine-version-114"><span aria-hidden="true" class="octicon octicon-link"></span></a></div>
+<div class="markdown-heading"><h1 class="heading-element">Orx - Portable Game Engine (Version 1.15)</h1><a id="user-content-orx---portable-game-engine-version-115" class="anchor" aria-label="Permalink: Orx - Portable Game Engine (Version 1.15)" href="#orx---portable-game-engine-version-115"><span aria-hidden="true" class="octicon octicon-link"></span></a></div>
 <p>Email iarwain [at] orx-project.org to contact the author; or, better,
 check <a href="https://orx-project.org" rel="nofollow">orx's homepage</a> for the most up-to-date contact information.
 You can also come <a href="https://orx-project.org/discord" rel="nofollow">chat with us</a>
@@ -1234,7 +1234,7 @@
 <div class="markdown-heading"><h2 class="heading-element">Summary</h2><a id="user-content-summary" class="anchor" aria-label="Permalink: Summary" href="#summary"><span aria-hidden="true" class="octicon octicon-link"></span></a></div>
 <p><a href="https://orx-project.org" rel="nofollow">Orx</a> is a 2D-oriented, data-driven, portable game engine focused primarily on ease of use and powerful features.
 See below for a list of supported platforms.</p>
-<p>This is a release candidate for orx v1.14. If you find any bugs,
+<p>This is a release candidate for orx v1.15. If you find any bugs,
 please report them on the <a href="https://forum.orx-project.org" rel="nofollow">forum</a>, in the "Bug report - Feature request" board,
 or via orx's <a href="https://github.com/orx/orx/issues">issue page/tracker</a>.</p>
 <p>Some notable features of the engine are:</p>
@@ -1326,57 +1326,57 @@
 Here is a list with a small description for each package.</p>
 <ul>
 <li>
-<code>orx-doc-1.14.zip</code>                  : orx's API doxygen documentation</li>
+<code>orx-doc-1.15.zip</code>                  : orx's API doxygen documentation</li>
 <li>
-<code>orx-src-1.14.zip</code>                  : orx's source code, ready for compile after running the setup script</li>
+<code>orx-src-1.15.zip</code>                  : orx's source code, ready for compile after running the setup script</li>
 <li>
-<code>orx-dev-linux32-1.14.tar.bz2</code>      : dynamic embedded binaries for Linux (x86), release/profile/debug + tools.</li>
+<code>orx-dev-linux32-1.15.tar.bz2</code>      : dynamic embedded binaries for Linux (x86), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-linux64-1.14.tar.bz2</code>      : dynamic embedded binaries for Linux (x86-64), release/profile/debug + tools.</li>
+<code>orx-dev-linux64-1.15.tar.bz2</code>      : dynamic embedded binaries for Linux (x86-64), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-mac-1.14.zip</code>              : dynamic embedded binaries for MacOS X (x86/x86-64), release/profile/debug + tools.</li>
+<code>orx-dev-mac-1.15.zip</code>              : dynamic embedded binaries for MacOS X (x86/x86-64), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-mingw-32-1.14.zip</code>         : dynamic embedded binaries for Windows (mingw/x86), release/profile/debug + tools.</li>
+<code>orx-dev-mingw-32-1.15.zip</code>         : dynamic embedded binaries for Windows (mingw/x86), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-mingw-64-1.14.zip</code>         : dynamic embedded binaries for Windows (mingw/x86-64), release/profile/debug + tools.</li>
+<code>orx-dev-mingw-64-1.15.zip</code>         : dynamic embedded binaries for Windows (mingw/x86-64), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-vs2017-32-1.14.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2017, x86), release/profile/debug + tools.</li>
+<code>orx-dev-vs2017-32-1.15.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2017, x86), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-vs2017-64-1.14.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2017, x86-64), release/profile/debug + tools.</li>
+<code>orx-dev-vs2017-64-1.15.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2017, x86-64), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-vs2019-32-1.14.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2019, x86), release/profile/debug + tools.</li>
+<code>orx-dev-vs2019-32-1.15.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2019, x86), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-vs2019-64-1.14.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2019, x86-64), release/profile/debug + tools.</li>
+<code>orx-dev-vs2019-64-1.15.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2019, x86-64), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-vs2022-32-1.14.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2022, x86), release/profile/debug + tools.</li>
+<code>orx-dev-vs2022-32-1.15.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2022, x86), release/profile/debug + tools.</li>
 <li>
-<code>orx-dev-vs2022-64-1.14.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2022, x86-64), release/profile/debug + tools.</li>
+<code>orx-dev-vs2022-64-1.15.zip</code>        : dynamic embedded binaries for Windows (Visual Studio 2022, x86-64), release/profile/debug + tools.</li>
 <li>
-<code>orx-full-ios-1.14.zip</code>             : static embedded binaries for iOS, release/profile/debug, simulator/device + doc + source + XCode project file.</li>
+<code>orx-full-ios-1.15.zip</code>             : static embedded binaries for iOS, release/profile/debug, simulator/device + doc + source + XCode project file.</li>
 <li>
-<code>orx-dev-android-1.14.zip</code>          : static embedded binaries for Android, release/profile/debug (device).</li>
+<code>orx-dev-android-1.15.zip</code>          : static embedded binaries for Android, release/profile/debug (device).</li>
 <li>
-<code>orx-tutorial-linux32-1.14.tar.bz2</code> : tutorials for Linux (x86)</li>
+<code>orx-tutorial-linux32-1.15.tar.bz2</code> : tutorials for Linux (x86)</li>
 <li>
-<code>orx-tutorial-linux64-1.14.tar.bz2</code> : tutorials for Linux (x86-64)</li>
+<code>orx-tutorial-linux64-1.15.tar.bz2</code> : tutorials for Linux (x86-64)</li>
 <li>
-<code>orx-tutorial-mac-1.14.zip</code>         : tutorials for MacOS X (x86/x86-64)</li>
+<code>orx-tutorial-mac-1.15.zip</code>         : tutorials for MacOS X (x86/x86-64)</li>
 <li>
-<code>orx-tutorial-mingw-32-1.14.zip</code>    : tutorials for Windows (mingw/x86)</li>
+<code>orx-tutorial-mingw-32-1.15.zip</code>    : tutorials for Windows (mingw/x86)</li>
 <li>
-<code>orx-tutorial-mingw-64-1.14.zip</code>    : tutorials for Windows (mingw/x86-64)</li>
+<code>orx-tutorial-mingw-64-1.15.zip</code>    : tutorials for Windows (mingw/x86-64)</li>
 <li>
-<code>orx-tutorial-vs2017-32-1.14.zip</code>   : tutorials for Windows (Visual Studio 2017, x86)</li>
+<code>orx-tutorial-vs2017-32-1.15.zip</code>   : tutorials for Windows (Visual Studio 2017, x86)</li>
 <li>
-<code>orx-tutorial-vs2017-64-1.14.zip</code>   : tutorials for Windows (Visual Studio 2017, x86-64)</li>
+<code>orx-tutorial-vs2017-64-1.15.zip</code>   : tutorials for Windows (Visual Studio 2017, x86-64)</li>
 <li>
-<code>orx-tutorial-vs2019-32-1.14.zip</code>   : tutorials for Windows (Visual Studio 2019, x86)</li>
+<code>orx-tutorial-vs2019-32-1.15.zip</code>   : tutorials for Windows (Visual Studio 2019, x86)</li>
 <li>
-<code>orx-tutorial-vs2019-64-1.14.zip</code>   : tutorials for Windows (Visual Studio 2019, x86-64)</li>
+<code>orx-tutorial-vs2019-64-1.15.zip</code>   : tutorials for Windows (Visual Studio 2019, x86-64)</li>
 <li>
-<code>orx-tutorial-vs2022-32-1.14.zip</code>   : tutorials for Windows (Visual Studio 2022, x86)</li>
+<code>orx-tutorial-vs2022-32-1.15.zip</code>   : tutorials for Windows (Visual Studio 2022, x86)</li>
 <li>
-<code>orx-tutorial-vs2022-64-1.14.zip</code>   : tutorials for Windows (Visual Studio 2022, x86-64)</li>
+<code>orx-tutorial-vs2022-64-1.15.zip</code>   : tutorials for Windows (Visual Studio 2022, x86-64)</li>
 </ul>
 <p>All the <code>*-dev-*</code> packages above include:</p>
 <ul>
diff --git a/README.md b/README.md
index f9a573700..b477a37a4 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
 [![Build status](https://ci.appveyor.com/api/projects/status/alwm4il7x1w6g1o4?svg=true)](https://ci.appveyor.com/project/iarwain/orx)
 [![Git Repo Size](https://img.shields.io/github/repo-size/orx/orx.svg)](https://github.com/orx/orx)
 
-Orx - Portable Game Engine (Version 1.14)
+Orx - Portable Game Engine (Version 1.15)
 ========================================
 
 
@@ -22,7 +22,7 @@ Summary
 [Orx](https://orx-project.org) is a 2D-oriented, data-driven, portable game engine focused primarily on ease of use and powerful features.
 See below for a list of supported platforms.
 
-This is a release candidate for orx v1.14. If you find any bugs,
+This is a release candidate for orx v1.15. If you find any bugs,
 please report them on the [forum](https://forum.orx-project.org), in the "Bug report - Feature request" board,
 or via orx's [issue page/tracker](https://github.com/orx/orx/issues).
 
@@ -127,32 +127,32 @@ Packages
 You can download all the packages from [SourceForge](https://sf.net/projects/orx) or [GitHub](https://github.com/orx/orx/releases).
 Here is a list with a small description for each package.
 
-- `orx-doc-1.14.zip`                  : orx's API doxygen documentation
-- `orx-src-1.14.zip`                  : orx's source code, ready for compile after running the setup script
-- `orx-dev-linux32-1.14.tar.bz2`      : dynamic embedded binaries for Linux (x86), release/profile/debug + tools.
-- `orx-dev-linux64-1.14.tar.bz2`      : dynamic embedded binaries for Linux (x86-64), release/profile/debug + tools.
-- `orx-dev-mac-1.14.zip`              : dynamic embedded binaries for MacOS X (x86/x86-64), release/profile/debug + tools.
-- `orx-dev-mingw-32-1.14.zip`         : dynamic embedded binaries for Windows (mingw/x86), release/profile/debug + tools.
-- `orx-dev-mingw-64-1.14.zip`         : dynamic embedded binaries for Windows (mingw/x86-64), release/profile/debug + tools.
-- `orx-dev-vs2017-32-1.14.zip`        : dynamic embedded binaries for Windows (Visual Studio 2017, x86), release/profile/debug + tools.
-- `orx-dev-vs2017-64-1.14.zip`        : dynamic embedded binaries for Windows (Visual Studio 2017, x86-64), release/profile/debug + tools.
-- `orx-dev-vs2019-32-1.14.zip`        : dynamic embedded binaries for Windows (Visual Studio 2019, x86), release/profile/debug + tools.
-- `orx-dev-vs2019-64-1.14.zip`        : dynamic embedded binaries for Windows (Visual Studio 2019, x86-64), release/profile/debug + tools.
-- `orx-dev-vs2022-32-1.14.zip`        : dynamic embedded binaries for Windows (Visual Studio 2022, x86), release/profile/debug + tools.
-- `orx-dev-vs2022-64-1.14.zip`        : dynamic embedded binaries for Windows (Visual Studio 2022, x86-64), release/profile/debug + tools.
-- `orx-full-ios-1.14.zip`             : static embedded binaries for iOS, release/profile/debug, simulator/device + doc + source + XCode project file.
-- `orx-dev-android-1.14.zip`          : static embedded binaries for Android, release/profile/debug (device).
-- `orx-tutorial-linux32-1.14.tar.bz2` : tutorials for Linux (x86)
-- `orx-tutorial-linux64-1.14.tar.bz2` : tutorials for Linux (x86-64)
-- `orx-tutorial-mac-1.14.zip`         : tutorials for MacOS X (x86/x86-64)
-- `orx-tutorial-mingw-32-1.14.zip`    : tutorials for Windows (mingw/x86)
-- `orx-tutorial-mingw-64-1.14.zip`    : tutorials for Windows (mingw/x86-64)
-- `orx-tutorial-vs2017-32-1.14.zip`   : tutorials for Windows (Visual Studio 2017, x86)
-- `orx-tutorial-vs2017-64-1.14.zip`   : tutorials for Windows (Visual Studio 2017, x86-64)
-- `orx-tutorial-vs2019-32-1.14.zip`   : tutorials for Windows (Visual Studio 2019, x86)
-- `orx-tutorial-vs2019-64-1.14.zip`   : tutorials for Windows (Visual Studio 2019, x86-64)
-- `orx-tutorial-vs2022-32-1.14.zip`   : tutorials for Windows (Visual Studio 2022, x86)
-- `orx-tutorial-vs2022-64-1.14.zip`   : tutorials for Windows (Visual Studio 2022, x86-64)
+- `orx-doc-1.15.zip`                  : orx's API doxygen documentation
+- `orx-src-1.15.zip`                  : orx's source code, ready for compile after running the setup script
+- `orx-dev-linux32-1.15.tar.bz2`      : dynamic embedded binaries for Linux (x86), release/profile/debug + tools.
+- `orx-dev-linux64-1.15.tar.bz2`      : dynamic embedded binaries for Linux (x86-64), release/profile/debug + tools.
+- `orx-dev-mac-1.15.zip`              : dynamic embedded binaries for MacOS X (x86/x86-64), release/profile/debug + tools.
+- `orx-dev-mingw-32-1.15.zip`         : dynamic embedded binaries for Windows (mingw/x86), release/profile/debug + tools.
+- `orx-dev-mingw-64-1.15.zip`         : dynamic embedded binaries for Windows (mingw/x86-64), release/profile/debug + tools.
+- `orx-dev-vs2017-32-1.15.zip`        : dynamic embedded binaries for Windows (Visual Studio 2017, x86), release/profile/debug + tools.
+- `orx-dev-vs2017-64-1.15.zip`        : dynamic embedded binaries for Windows (Visual Studio 2017, x86-64), release/profile/debug + tools.
+- `orx-dev-vs2019-32-1.15.zip`        : dynamic embedded binaries for Windows (Visual Studio 2019, x86), release/profile/debug + tools.
+- `orx-dev-vs2019-64-1.15.zip`        : dynamic embedded binaries for Windows (Visual Studio 2019, x86-64), release/profile/debug + tools.
+- `orx-dev-vs2022-32-1.15.zip`        : dynamic embedded binaries for Windows (Visual Studio 2022, x86), release/profile/debug + tools.
+- `orx-dev-vs2022-64-1.15.zip`        : dynamic embedded binaries for Windows (Visual Studio 2022, x86-64), release/profile/debug + tools.
+- `orx-full-ios-1.15.zip`             : static embedded binaries for iOS, release/profile/debug, simulator/device + doc + source + XCode project file.
+- `orx-dev-android-1.15.zip`          : static embedded binaries for Android, release/profile/debug (device).
+- `orx-tutorial-linux32-1.15.tar.bz2` : tutorials for Linux (x86)
+- `orx-tutorial-linux64-1.15.tar.bz2` : tutorials for Linux (x86-64)
+- `orx-tutorial-mac-1.15.zip`         : tutorials for MacOS X (x86/x86-64)
+- `orx-tutorial-mingw-32-1.15.zip`    : tutorials for Windows (mingw/x86)
+- `orx-tutorial-mingw-64-1.15.zip`    : tutorials for Windows (mingw/x86-64)
+- `orx-tutorial-vs2017-32-1.15.zip`   : tutorials for Windows (Visual Studio 2017, x86)
+- `orx-tutorial-vs2017-64-1.15.zip`   : tutorials for Windows (Visual Studio 2017, x86-64)
+- `orx-tutorial-vs2019-32-1.15.zip`   : tutorials for Windows (Visual Studio 2019, x86)
+- `orx-tutorial-vs2019-64-1.15.zip`   : tutorials for Windows (Visual Studio 2019, x86-64)
+- `orx-tutorial-vs2022-32-1.15.zip`   : tutorials for Windows (Visual Studio 2022, x86)
+- `orx-tutorial-vs2022-64-1.15.zip`   : tutorials for Windows (Visual Studio 2022, x86-64)
 
 All the `*-dev-*` packages above include:
 
diff --git a/code/demo/iOS/ReadMe-iOS.html b/code/demo/iOS/ReadMe-iOS.html
index 062a5a564..254113b1a 100644
--- a/code/demo/iOS/ReadMe-iOS.html
+++ b/code/demo/iOS/ReadMe-iOS.html
@@ -3,17 +3,125 @@
   src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff');
 }
 
+@media (prefers-color-scheme: dark) {
+  body,
+  [data-theme="dark"] {
+    /*dark*/
+    color-scheme: dark;
+    --color-prettylights-syntax-comment: #8b949e;
+    --color-prettylights-syntax-constant: #79c0ff;
+    --color-prettylights-syntax-entity: #d2a8ff;
+    --color-prettylights-syntax-storage-modifier-import: #c9d1d9;
+    --color-prettylights-syntax-entity-tag: #7ee787;
+    --color-prettylights-syntax-keyword: #ff7b72;
+    --color-prettylights-syntax-string: #a5d6ff;
+    --color-prettylights-syntax-variable: #ffa657;
+    --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
+    --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
+    --color-prettylights-syntax-invalid-illegal-bg: #8e1519;
+    --color-prettylights-syntax-carriage-return-text: #f0f6fc;
+    --color-prettylights-syntax-carriage-return-bg: #b62324;
+    --color-prettylights-syntax-string-regexp: #7ee787;
+    --color-prettylights-syntax-markup-list: #f2cc60;
+    --color-prettylights-syntax-markup-heading: #1f6feb;
+    --color-prettylights-syntax-markup-italic: #c9d1d9;
+    --color-prettylights-syntax-markup-bold: #c9d1d9;
+    --color-prettylights-syntax-markup-deleted-text: #ffdcd7;
+    --color-prettylights-syntax-markup-deleted-bg: #67060c;
+    --color-prettylights-syntax-markup-inserted-text: #aff5b4;
+    --color-prettylights-syntax-markup-inserted-bg: #033a16;
+    --color-prettylights-syntax-markup-changed-text: #ffdfb6;
+    --color-prettylights-syntax-markup-changed-bg: #5a1e02;
+    --color-prettylights-syntax-markup-ignored-text: #c9d1d9;
+    --color-prettylights-syntax-markup-ignored-bg: #1158c7;
+    --color-prettylights-syntax-meta-diff-range: #d2a8ff;
+    --color-prettylights-syntax-brackethighlighter-angle: #8b949e;
+    --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58;
+    --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
+    --color-fg-default: #e6edf3;
+    --color-fg-muted: #848d97;
+    --color-fg-subtle: #6e7681;
+    --color-canvas-default: #0d1117;
+    --color-canvas-subtle: #161b22;
+    --color-border-default: #30363d;
+    --color-border-muted: #21262d;
+    --color-neutral-muted: rgba(110,118,129,0.4);
+    --color-accent-fg: #2f81f7;
+    --color-accent-emphasis: #1f6feb;
+    --color-success-fg: #3fb950;
+    --color-success-emphasis: #238636;
+    --color-attention-fg: #d29922;
+    --color-attention-emphasis: #9e6a03;
+    --color-attention-subtle: rgba(187,128,9,0.15);
+    --color-danger-fg: #f85149;
+    --color-danger-emphasis: #da3633;
+    --color-done-fg: #a371f7;
+    --color-done-emphasis: #8957e5;
+  }
+}
+
+@media (prefers-color-scheme: light) {
+  body,
+  [data-theme="light"] {
+    /*light*/
+    color-scheme: light;
+    --color-prettylights-syntax-comment: #57606a;
+    --color-prettylights-syntax-constant: #0550ae;
+    --color-prettylights-syntax-entity: #6639ba;
+    --color-prettylights-syntax-storage-modifier-import: #24292f;
+    --color-prettylights-syntax-entity-tag: #116329;
+    --color-prettylights-syntax-keyword: #cf222e;
+    --color-prettylights-syntax-string: #0a3069;
+    --color-prettylights-syntax-variable: #953800;
+    --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
+    --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
+    --color-prettylights-syntax-invalid-illegal-bg: #82071e;
+    --color-prettylights-syntax-carriage-return-text: #f6f8fa;
+    --color-prettylights-syntax-carriage-return-bg: #cf222e;
+    --color-prettylights-syntax-string-regexp: #116329;
+    --color-prettylights-syntax-markup-list: #3b2300;
+    --color-prettylights-syntax-markup-heading: #0550ae;
+    --color-prettylights-syntax-markup-italic: #24292f;
+    --color-prettylights-syntax-markup-bold: #24292f;
+    --color-prettylights-syntax-markup-deleted-text: #82071e;
+    --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
+    --color-prettylights-syntax-markup-inserted-text: #116329;
+    --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
+    --color-prettylights-syntax-markup-changed-text: #953800;
+    --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
+    --color-prettylights-syntax-markup-ignored-text: #eaeef2;
+    --color-prettylights-syntax-markup-ignored-bg: #0550ae;
+    --color-prettylights-syntax-meta-diff-range: #8250df;
+    --color-prettylights-syntax-brackethighlighter-angle: #57606a;
+    --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f;
+    --color-prettylights-syntax-constant-other-reference-link: #0a3069;
+    --color-fg-default: #1F2328;
+    --color-fg-muted: #656d76;
+    --color-fg-subtle: #6e7781;
+    --color-canvas-default: #ffffff;
+    --color-canvas-subtle: #f6f8fa;
+    --color-border-default: #d0d7de;
+    --color-border-muted: hsla(210,18%,87%,1);
+    --color-neutral-muted: rgba(175,184,193,0.2);
+    --color-accent-fg: #0969da;
+    --color-accent-emphasis: #0969da;
+    --color-success-fg: #1a7f37;
+    --color-success-emphasis: #1f883d;
+    --color-attention-fg: #9a6700;
+    --color-attention-emphasis: #9a6700;
+    --color-attention-subtle: #fff8c5;
+    --color-danger-fg: #d1242f;
+    --color-danger-emphasis: #cf222e;
+    --color-done-fg: #8250df;
+    --color-done-emphasis: #8250df;
+  }
+}
+
 body {
     width: 980px;
     margin-right: auto;
     margin-left: auto;
-    color:#333;
-    background:#fff;
-}
-
-body .markdown-body {
-    padding: 45px;
-    word-wrap: break-word;
+    background-color: var(--color-canvas-default);
 }
 
 .markdown-body .octicon-link:before {
@@ -31,285 +139,209 @@
   vertical-align: middle;
 }
 
-.markdown-body .anchor {
-  float: left;
-  line-height: 1;
-  margin-left: -20px;
-  padding-right: 4px;
-}
-
-.markdown-body .anchor:focus {
-  outline: none;
-}
-
-.markdown-body h1 .octicon-link,
-.markdown-body h2 .octicon-link,
-.markdown-body h3 .octicon-link,
-.markdown-body h4 .octicon-link,
-.markdown-body h5 .octicon-link,
-.markdown-body h6 .octicon-link {
-  color: #1b1f23;
-  vertical-align: middle;
-  visibility: hidden;
-}
-
-.markdown-body h1:hover .anchor,
-.markdown-body h2:hover .anchor,
-.markdown-body h3:hover .anchor,
-.markdown-body h4:hover .anchor,
-.markdown-body h5:hover .anchor,
-.markdown-body h6:hover .anchor {
-  text-decoration: none;
-}
-
-.markdown-body h1:hover .anchor .octicon-link,
-.markdown-body h2:hover .anchor .octicon-link,
-.markdown-body h3:hover .anchor .octicon-link,
-.markdown-body h4:hover .anchor .octicon-link,
-.markdown-body h5:hover .anchor .octicon-link,
-.markdown-body h6:hover .anchor .octicon-link {
-  visibility: visible;
-}
-
 .markdown-body {
   -ms-text-size-adjust: 100%;
   -webkit-text-size-adjust: 100%;
-  color: #24292e;
-  line-height: 1.5;
-  font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;
+  margin: 0;
+  color: var(--color-fg-default);
+  background-color: var(--color-canvas-default);
+  font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";
   font-size: 16px;
   line-height: 1.5;
   word-wrap: break-word;
 }
 
-.markdown-body .pl-c {
-  color: #6a737d;
-}
-
-.markdown-body .pl-c1,
-.markdown-body .pl-s .pl-v {
-  color: #005cc5;
-}
-
-.markdown-body .pl-e,
-.markdown-body .pl-en {
-  color: #6f42c1;
-}
-
-.markdown-body .pl-s .pl-s1,
-.markdown-body .pl-smi {
-  color: #24292e;
-}
-
-.markdown-body .pl-ent {
-  color: #22863a;
-}
-
-.markdown-body .pl-k {
-  color: #d73a49;
-}
-
-.markdown-body .pl-pds,
-.markdown-body .pl-s,
-.markdown-body .pl-s .pl-pse .pl-s1,
-.markdown-body .pl-sr,
-.markdown-body .pl-sr .pl-cce,
-.markdown-body .pl-sr .pl-sra,
-.markdown-body .pl-sr .pl-sre {
-  color: #032f62;
-}
-
-.markdown-body .pl-smw,
-.markdown-body .pl-v {
-  color: #e36209;
-}
-
-.markdown-body .pl-bu {
-  color: #b31d28;
+.markdown-body .octicon {
+  display: inline-block;
+  fill: currentColor;
+  vertical-align: text-bottom;
+}
+
+.markdown-body h1:hover .anchor .octicon-link:before,
+.markdown-body h2:hover .anchor .octicon-link:before,
+.markdown-body h3:hover .anchor .octicon-link:before,
+.markdown-body h4:hover .anchor .octicon-link:before,
+.markdown-body h5:hover .anchor .octicon-link:before,
+.markdown-body h6:hover .anchor .octicon-link:before {
+  width: 16px;
+  height: 16px;
+  content: ' ';
+  display: inline-block;
+  background-color: currentColor;
+  -webkit-mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>");
+  mask-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>");
 }
 
-.markdown-body .pl-ii {
-  background-color: #b31d28;
-  color: #fafbfc;
+.markdown-body details,
+.markdown-body figcaption,
+.markdown-body figure {
+  display: block;
 }
 
-.markdown-body .pl-c2 {
-  background-color: #d73a49;
-  color: #fafbfc;
+.markdown-body summary {
+  display: list-item;
 }
 
-.markdown-body .pl-c2:before {
-  content: "^M";
+.markdown-body [hidden] {
+  display: none !important;
 }
 
-.markdown-body .pl-sr .pl-cce {
-  color: #22863a;
-  font-weight: 700;
+.markdown-body a {
+  background-color: transparent;
+  color: var(--color-accent-fg);
+  text-decoration: none;
 }
 
-.markdown-body .pl-ml {
-  color: #735c0f;
+.markdown-body abbr[title] {
+  border-bottom: none;
+  -webkit-text-decoration: underline dotted;
+  text-decoration: underline dotted;
 }
 
-.markdown-body .pl-mh,
-.markdown-body .pl-mh .pl-en,
-.markdown-body .pl-ms {
-  color: #005cc5;
-  font-weight: 700;
+.markdown-body b,
+.markdown-body strong {
+  font-weight: var(--base-text-weight-semibold, 600);
 }
 
-.markdown-body .pl-mi {
-  color: #24292e;
+.markdown-body dfn {
   font-style: italic;
 }
 
-.markdown-body .pl-mb {
-  color: #24292e;
-  font-weight: 700;
-}
-
-.markdown-body .pl-md {
-  background-color: #ffeef0;
-  color: #b31d28;
-}
-
-.markdown-body .pl-mi1 {
-  background-color: #f0fff4;
-  color: #22863a;
-}
-
-.markdown-body .pl-mc {
-  background-color: #ffebda;
-  color: #e36209;
-}
-
-.markdown-body .pl-mi2 {
-  background-color: #005cc5;
-  color: #f6f8fa;
-}
-
-.markdown-body .pl-mdr {
-  color: #6f42c1;
-  font-weight: 700;
-}
-
-.markdown-body .pl-ba {
-  color: #586069;
-}
-
-.markdown-body .pl-sg {
-  color: #959da5;
-}
-
-.markdown-body .pl-corl {
-  color: #032f62;
-  text-decoration: underline;
-}
-
-.markdown-body details {
-  display: block;
+.markdown-body h1 {
+  margin: .67em 0;
+  font-weight: var(--base-text-weight-semibold, 600);
+  padding-bottom: .3em;
+  font-size: 2em;
+  border-bottom: 1px solid var(--color-border-muted);
 }
 
-.markdown-body summary {
-  display: list-item;
+.markdown-body mark {
+  background-color: var(--color-attention-subtle);
+  color: var(--color-fg-default);
 }
 
-.markdown-body a {
-  background-color: transparent;
+.markdown-body small {
+  font-size: 90%;
 }
 
-.markdown-body a:active,
-.markdown-body a:hover {
-  outline-width: 0;
+.markdown-body sub,
+.markdown-body sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
 }
 
-.markdown-body strong {
-  font-weight: inherit;
-  font-weight: bolder;
+.markdown-body sub {
+  bottom: -0.25em;
 }
 
-.markdown-body h1 {
-  font-size: 2em;
-  margin: .67em 0;
+.markdown-body sup {
+  top: -0.5em;
 }
 
 .markdown-body img {
   border-style: none;
+  max-width: 100%;
+  box-sizing: content-box;
+  background-color: var(--color-canvas-default);
 }
 
 .markdown-body code,
 .markdown-body kbd,
-.markdown-body pre {
-  font-family: monospace,monospace;
+.markdown-body pre,
+.markdown-body samp {
+  font-family: monospace;
   font-size: 1em;
 }
 
+.markdown-body figure {
+  margin: 1em 40px;
+}
+
 .markdown-body hr {
   box-sizing: content-box;
-  height: 0;
-  overflow: visible;
+  overflow: hidden;
+  background: transparent;
+  border-bottom: 1px solid var(--color-border-muted);
+  height: .25em;
+  padding: 0;
+  margin: 24px 0;
+  background-color: var(--color-border-default);
+  border: 0;
 }
 
 .markdown-body input {
   font: inherit;
   margin: 0;
+  overflow: visible;
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
 }
 
-.markdown-body input {
-  overflow: visible;
+.markdown-body [type=button],
+.markdown-body [type=reset],
+.markdown-body [type=submit] {
+  -webkit-appearance: button;
+  appearance: button;
 }
 
-.markdown-body [type=checkbox] {
+.markdown-body [type=checkbox],
+.markdown-body [type=radio] {
   box-sizing: border-box;
   padding: 0;
 }
 
-.markdown-body * {
-  box-sizing: border-box;
+.markdown-body [type=number]::-webkit-inner-spin-button,
+.markdown-body [type=number]::-webkit-outer-spin-button {
+  height: auto;
 }
 
-.markdown-body input {
-  font-family: inherit;
-  font-size: inherit;
-  line-height: inherit;
+.markdown-body [type=search]::-webkit-search-cancel-button,
+.markdown-body [type=search]::-webkit-search-decoration {
+  -webkit-appearance: none;
+  appearance: none;
 }
 
-.markdown-body a {
-  color: #0366d6;
-  text-decoration: none;
+.markdown-body ::-webkit-input-placeholder {
+  color: inherit;
+  opacity: .54;
 }
 
-.markdown-body a:hover {
-  text-decoration: underline;
+.markdown-body ::-webkit-file-upload-button {
+  -webkit-appearance: button;
+  appearance: button;
+  font: inherit;
 }
 
-.markdown-body strong {
-  font-weight: 600;
+.markdown-body a:hover {
+  text-decoration: underline;
 }
 
-.markdown-body hr {
-  background: transparent;
-  border: 0;
-  border-bottom: 1px solid #dfe2e5;
-  height: 0;
-  margin: 15px 0;
-  overflow: hidden;
+.markdown-body ::placeholder {
+  color: var(--color-fg-subtle);
+  opacity: 1;
 }
 
-.markdown-body hr:before {
-  content: "";
+.markdown-body hr::before {
   display: table;
+  content: "";
 }
 
-.markdown-body hr:after {
+.markdown-body hr::after {
+  display: table;
   clear: both;
   content: "";
-  display: table;
 }
 
 .markdown-body table {
-  border-collapse: collapse;
   border-spacing: 0;
+  border-collapse: collapse;
+  display: block;
+  width: max-content;
+  max-width: 100%;
+  overflow: auto;
 }
 
 .markdown-body td,
@@ -321,69 +353,115 @@
   cursor: pointer;
 }
 
+.markdown-body details:not([open])>*:not(summary) {
+  display: none !important;
+}
+
+.markdown-body a:focus,
+.markdown-body [role=button]:focus,
+.markdown-body input[type=radio]:focus,
+.markdown-body input[type=checkbox]:focus {
+  outline: 2px solid var(--color-accent-fg);
+  outline-offset: -2px;
+  box-shadow: none;
+}
+
+.markdown-body a:focus:not(:focus-visible),
+.markdown-body [role=button]:focus:not(:focus-visible),
+.markdown-body input[type=radio]:focus:not(:focus-visible),
+.markdown-body input[type=checkbox]:focus:not(:focus-visible) {
+  outline: solid 1px transparent;
+}
+
+.markdown-body a:focus-visible,
+.markdown-body [role=button]:focus-visible,
+.markdown-body input[type=radio]:focus-visible,
+.markdown-body input[type=checkbox]:focus-visible {
+  outline: 2px solid var(--color-accent-fg);
+  outline-offset: -2px;
+  box-shadow: none;
+}
+
+.markdown-body a:not([class]):focus,
+.markdown-body a:not([class]):focus-visible,
+.markdown-body input[type=radio]:focus,
+.markdown-body input[type=radio]:focus-visible,
+.markdown-body input[type=checkbox]:focus,
+.markdown-body input[type=checkbox]:focus-visible {
+  outline-offset: 0;
+}
+
+.markdown-body kbd {
+  display: inline-block;
+  padding: 3px 5px;
+  font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
+  line-height: 10px;
+  color: var(--color-fg-default);
+  vertical-align: middle;
+  background-color: var(--color-canvas-subtle);
+  border: solid 1px var(--color-neutral-muted);
+  border-bottom-color: var(--color-neutral-muted);
+  border-radius: 6px;
+  box-shadow: inset 0 -1px 0 var(--color-neutral-muted);
+}
+
 .markdown-body h1,
 .markdown-body h2,
 .markdown-body h3,
 .markdown-body h4,
 .markdown-body h5,
 .markdown-body h6 {
-  margin-bottom: 0;
-  margin-top: 0;
-}
-
-.markdown-body h1 {
-  font-size: 32px;
-}
-
-.markdown-body h1,
-.markdown-body h2 {
-  font-weight: 600;
+  margin-top: 24px;
+  margin-bottom: 16px;
+  font-weight: var(--base-text-weight-semibold, 600);
+  line-height: 1.25;
 }
 
 .markdown-body h2 {
-  font-size: 24px;
+  font-weight: var(--base-text-weight-semibold, 600);
+  padding-bottom: .3em;
+  font-size: 1.5em;
+  border-bottom: 1px solid var(--color-border-muted);
 }
 
 .markdown-body h3 {
-  font-size: 20px;
-}
-
-.markdown-body h3,
-.markdown-body h4 {
-  font-weight: 600;
+  font-weight: var(--base-text-weight-semibold, 600);
+  font-size: 1.25em;
 }
 
 .markdown-body h4 {
-  font-size: 16px;
+  font-weight: var(--base-text-weight-semibold, 600);
+  font-size: 1em;
 }
 
 .markdown-body h5 {
-  font-size: 14px;
-}
-
-.markdown-body h5,
-.markdown-body h6 {
-  font-weight: 600;
+  font-weight: var(--base-text-weight-semibold, 600);
+  font-size: .875em;
 }
 
 .markdown-body h6 {
-  font-size: 12px;
+  font-weight: var(--base-text-weight-semibold, 600);
+  font-size: .85em;
+  color: var(--color-fg-muted);
 }
 
 .markdown-body p {
-  margin-bottom: 10px;
   margin-top: 0;
+  margin-bottom: 10px;
 }
 
 .markdown-body blockquote {
   margin: 0;
+  padding: 0 1em;
+  color: var(--color-fg-muted);
+  border-left: .25em solid var(--color-border-default);
 }
 
-.markdown-body ol,
-.markdown-body ul {
-  margin-bottom: 0;
+.markdown-body ul,
+.markdown-body ol {
   margin-top: 0;
-  padding-left: 0;
+  margin-bottom: 0;
+  padding-left: 2em;
 }
 
 .markdown-body ol ol,
@@ -391,10 +469,10 @@
   list-style-type: lower-roman;
 }
 
-.markdown-body ol ol ol,
-.markdown-body ol ul ol,
+.markdown-body ul ul ol,
 .markdown-body ul ol ol,
-.markdown-body ul ul ol {
+.markdown-body ol ul ol,
+.markdown-body ol ol ol {
   list-style-type: lower-alpha;
 }
 
@@ -402,331 +480,393 @@
   margin-left: 0;
 }
 
+.markdown-body tt,
 .markdown-body code,
-.markdown-body pre {
-  font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
+.markdown-body samp {
+  font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
   font-size: 12px;
 }
 
 .markdown-body pre {
-  margin-bottom: 0;
   margin-top: 0;
+  margin-bottom: 0;
+  font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace;
+  font-size: 12px;
+  word-wrap: normal;
+}
+
+.markdown-body .octicon {
+  display: inline-block;
+  overflow: visible !important;
+  vertical-align: text-bottom;
+  fill: currentColor;
 }
 
-.markdown-body input::-webkit-inner-spin-button,
-.markdown-body input::-webkit-outer-spin-button {
+.markdown-body input::-webkit-outer-spin-button,
+.markdown-body input::-webkit-inner-spin-button {
+  margin: 0;
   -webkit-appearance: none;
   appearance: none;
-  margin: 0;
 }
 
-.markdown-body .border {
-  border: 1px solid #e1e4e8!important;
+.markdown-body .mr-2 {
+  margin-right: var(--base-size-8, 8px) !important;
 }
 
-.markdown-body .border-0 {
-  border: 0!important;
+.markdown-body::before {
+  display: table;
+  content: "";
 }
 
-.markdown-body .border-bottom {
-  border-bottom: 1px solid #e1e4e8!important;
+.markdown-body::after {
+  display: table;
+  clear: both;
+  content: "";
 }
 
-.markdown-body .rounded-1 {
-  border-radius: 3px!important;
+.markdown-body>*:first-child {
+  margin-top: 0 !important;
 }
 
-.markdown-body .bg-white {
-  background-color: #fff!important;
+.markdown-body>*:last-child {
+  margin-bottom: 0 !important;
 }
 
-.markdown-body .bg-gray-light {
-  background-color: #fafbfc!important;
+.markdown-body a:not([href]) {
+  color: inherit;
+  text-decoration: none;
 }
 
-.markdown-body .text-gray-light {
-  color: #6a737d!important;
+.markdown-body .absent {
+  color: var(--color-danger-fg);
 }
 
-.markdown-body .mb-0 {
-  margin-bottom: 0!important;
+.markdown-body .anchor {
+  float: left;
+  padding-right: 4px;
+  margin-left: -20px;
+  line-height: 1;
 }
 
-.markdown-body .my-2 {
-  margin-bottom: 8px!important;
-  margin-top: 8px!important;
+.markdown-body .anchor:focus {
+  outline: none;
 }
 
-.markdown-body .pl-0 {
-  padding-left: 0!important;
+.markdown-body p,
+.markdown-body blockquote,
+.markdown-body ul,
+.markdown-body ol,
+.markdown-body dl,
+.markdown-body table,
+.markdown-body pre,
+.markdown-body details {
+  margin-top: 0;
+  margin-bottom: 16px;
 }
 
-.markdown-body .py-0 {
-  padding-bottom: 0!important;
-  padding-top: 0!important;
+.markdown-body blockquote>:first-child {
+  margin-top: 0;
 }
 
-.markdown-body .pl-1 {
-  padding-left: 4px!important;
+.markdown-body blockquote>:last-child {
+  margin-bottom: 0;
 }
 
-.markdown-body .pl-2 {
-  padding-left: 8px!important;
+.markdown-body h1 .octicon-link,
+.markdown-body h2 .octicon-link,
+.markdown-body h3 .octicon-link,
+.markdown-body h4 .octicon-link,
+.markdown-body h5 .octicon-link,
+.markdown-body h6 .octicon-link {
+  color: var(--color-fg-default);
+  vertical-align: middle;
+  visibility: hidden;
 }
 
-.markdown-body .py-2 {
-  padding-bottom: 8px!important;
-  padding-top: 8px!important;
+.markdown-body h1:hover .anchor,
+.markdown-body h2:hover .anchor,
+.markdown-body h3:hover .anchor,
+.markdown-body h4:hover .anchor,
+.markdown-body h5:hover .anchor,
+.markdown-body h6:hover .anchor {
+  text-decoration: none;
 }
 
-.markdown-body .pl-3,
-.markdown-body .px-3 {
-  padding-left: 16px!important;
+.markdown-body h1:hover .anchor .octicon-link,
+.markdown-body h2:hover .anchor .octicon-link,
+.markdown-body h3:hover .anchor .octicon-link,
+.markdown-body h4:hover .anchor .octicon-link,
+.markdown-body h5:hover .anchor .octicon-link,
+.markdown-body h6:hover .anchor .octicon-link {
+  visibility: visible;
 }
 
-.markdown-body .px-3 {
-  padding-right: 16px!important;
+.markdown-body h1 tt,
+.markdown-body h1 code,
+.markdown-body h2 tt,
+.markdown-body h2 code,
+.markdown-body h3 tt,
+.markdown-body h3 code,
+.markdown-body h4 tt,
+.markdown-body h4 code,
+.markdown-body h5 tt,
+.markdown-body h5 code,
+.markdown-body h6 tt,
+.markdown-body h6 code {
+  padding: 0 .2em;
+  font-size: inherit;
 }
 
-.markdown-body .pl-4 {
-  padding-left: 24px!important;
+.markdown-body summary h1,
+.markdown-body summary h2,
+.markdown-body summary h3,
+.markdown-body summary h4,
+.markdown-body summary h5,
+.markdown-body summary h6 {
+  display: inline-block;
 }
 
-.markdown-body .pl-5 {
-  padding-left: 32px!important;
+.markdown-body summary h1 .anchor,
+.markdown-body summary h2 .anchor,
+.markdown-body summary h3 .anchor,
+.markdown-body summary h4 .anchor,
+.markdown-body summary h5 .anchor,
+.markdown-body summary h6 .anchor {
+  margin-left: -40px;
 }
 
-.markdown-body .pl-6 {
-  padding-left: 40px!important;
+.markdown-body summary h1,
+.markdown-body summary h2 {
+  padding-bottom: 0;
+  border-bottom: 0;
 }
 
-.markdown-body .f6 {
-  font-size: 12px!important;
+.markdown-body ul.no-list,
+.markdown-body ol.no-list {
+  padding: 0;
+  list-style-type: none;
 }
 
-.markdown-body .lh-condensed {
-  line-height: 1.25!important;
+.markdown-body ol[type="a s"] {
+  list-style-type: lower-alpha;
 }
 
-.markdown-body .text-bold {
-  font-weight: 600!important;
+.markdown-body ol[type="A s"] {
+  list-style-type: upper-alpha;
 }
 
-.markdown-body:before {
-  content: "";
-  display: table;
+.markdown-body ol[type="i s"] {
+  list-style-type: lower-roman;
 }
 
-.markdown-body:after {
-  clear: both;
-  content: "";
-  display: table;
+.markdown-body ol[type="I s"] {
+  list-style-type: upper-roman;
 }
 
-.markdown-body>:first-child {
-  margin-top: 0!important;
+.markdown-body ol[type="1"] {
+  list-style-type: decimal;
 }
 
-.markdown-body>:last-child {
-  margin-bottom: 0!important;
+.markdown-body div>ol:not([type]) {
+  list-style-type: decimal;
 }
 
-.markdown-body a:not([href]) {
-  color: inherit;
-  text-decoration: none;
+.markdown-body ul ul,
+.markdown-body ul ol,
+.markdown-body ol ol,
+.markdown-body ol ul {
+  margin-top: 0;
+  margin-bottom: 0;
 }
 
-.markdown-body blockquote,
-.markdown-body dl,
-.markdown-body ol,
-.markdown-body p,
-.markdown-body pre,
-.markdown-body table,
-.markdown-body ul {
-  margin-bottom: 16px;
-  margin-top: 0;
+.markdown-body li>p {
+  margin-top: 16px;
 }
 
-.markdown-body hr {
-  background-color: #e1e4e8;
-  border: 0;
-  height: .25em;
-  margin: 24px 0;
-  padding: 0;
+.markdown-body li+li {
+  margin-top: .25em;
 }
 
-.markdown-body blockquote {
-  border-left: .25em solid #dfe2e5;
-  color: #6a737d;
-  padding: 0 1em;
+.markdown-body dl {
+  padding: 0;
 }
 
-.markdown-body blockquote>:first-child {
-  margin-top: 0;
+.markdown-body dl dt {
+  padding: 0;
+  margin-top: 16px;
+  font-size: 1em;
+  font-style: italic;
+  font-weight: var(--base-text-weight-semibold, 600);
 }
 
-.markdown-body blockquote>:last-child {
-  margin-bottom: 0;
+.markdown-body dl dd {
+  padding: 0 16px;
+  margin-bottom: 16px;
 }
 
-.markdown-body kbd {
-  background-color: #fafbfc;
-  border: 1px solid #c6cbd1;
-  border-bottom-color: #959da5;
-  border-radius: 3px;
-  box-shadow: inset 0 -1px 0 #959da5;
-  color: #444d56;
-  display: inline-block;
-  font-size: 11px;
-  line-height: 10px;
-  padding: 3px 5px;
-  vertical-align: middle;
+.markdown-body table th {
+  font-weight: var(--base-text-weight-semibold, 600);
 }
 
-.markdown-body h1,
-.markdown-body h2,
-.markdown-body h3,
-.markdown-body h4,
-.markdown-body h5,
-.markdown-body h6 {
-  font-weight: 600;
-  line-height: 1.25;
-  margin-bottom: 16px;
-  margin-top: 24px;
+.markdown-body table th,
+.markdown-body table td {
+  padding: 6px 13px;
+  border: 1px solid var(--color-border-default);
 }
 
-.markdown-body h1 {
-  font-size: 2em;
+.markdown-body table td>:last-child {
+  margin-bottom: 0;
 }
 
-.markdown-body h1,
-.markdown-body h2 {
-  border-bottom: 1px solid #eaecef;
-  padding-bottom: .3em;
+.markdown-body table tr {
+  background-color: var(--color-canvas-default);
+  border-top: 1px solid var(--color-border-muted);
 }
 
-.markdown-body h2 {
-  font-size: 1.5em;
+.markdown-body table tr:nth-child(2n) {
+  background-color: var(--color-canvas-subtle);
 }
 
-.markdown-body h3 {
-  font-size: 1.25em;
+.markdown-body table img {
+  background-color: transparent;
 }
 
-.markdown-body h4 {
-  font-size: 1em;
+.markdown-body img[align=right] {
+  padding-left: 20px;
 }
 
-.markdown-body h5 {
-  font-size: .875em;
+.markdown-body img[align=left] {
+  padding-right: 20px;
 }
 
-.markdown-body h6 {
-  color: #6a737d;
-  font-size: .85em;
+.markdown-body .emoji {
+  max-width: none;
+  vertical-align: text-top;
+  background-color: transparent;
 }
 
-.markdown-body ol,
-.markdown-body ul {
-  padding-left: 2em;
+.markdown-body span.frame {
+  display: block;
+  overflow: hidden;
 }
 
-.markdown-body ol ol,
-.markdown-body ol ul,
-.markdown-body ul ol,
-.markdown-body ul ul {
-  margin-bottom: 0;
-  margin-top: 0;
+.markdown-body span.frame>span {
+  display: block;
+  float: left;
+  width: auto;
+  padding: 7px;
+  margin: 13px 0 0;
+  overflow: hidden;
+  border: 1px solid var(--color-border-default);
 }
 
-.markdown-body li {
-  word-wrap: break-all;
+.markdown-body span.frame span img {
+  display: block;
+  float: left;
 }
 
-.markdown-body li>p {
-  margin-top: 16px;
+.markdown-body span.frame span span {
+  display: block;
+  padding: 5px 0 0;
+  clear: both;
+  color: var(--color-fg-default);
 }
 
-.markdown-body li+li {
-  margin-top: .25em;
+.markdown-body span.align-center {
+  display: block;
+  overflow: hidden;
+  clear: both;
 }
 
-.markdown-body dl {
-  padding: 0;
+.markdown-body span.align-center>span {
+  display: block;
+  margin: 13px auto 0;
+  overflow: hidden;
+  text-align: center;
 }
 
-.markdown-body dl dt {
-  font-size: 1em;
-  font-style: italic;
-  font-weight: 600;
-  margin-top: 16px;
-  padding: 0;
+.markdown-body span.align-center span img {
+  margin: 0 auto;
+  text-align: center;
 }
 
-.markdown-body dl dd {
-  margin-bottom: 16px;
-  padding: 0 16px;
+.markdown-body span.align-right {
+  display: block;
+  overflow: hidden;
+  clear: both;
 }
 
-.markdown-body table {
+.markdown-body span.align-right>span {
   display: block;
-  overflow: auto;
-  width: 100%;
+  margin: 13px 0 0;
+  overflow: hidden;
+  text-align: right;
 }
 
-.markdown-body table th {
-  font-weight: 600;
+.markdown-body span.align-right span img {
+  margin: 0;
+  text-align: right;
 }
 
-.markdown-body table td,
-.markdown-body table th {
-  border: 1px solid #dfe2e5;
-  padding: 6px 13px;
+.markdown-body span.float-left {
+  display: block;
+  float: left;
+  margin-right: 13px;
+  overflow: hidden;
 }
 
-.markdown-body table tr {
-  background-color: #fff;
-  border-top: 1px solid #c6cbd1;
+.markdown-body span.float-left span {
+  margin: 13px 0 0;
 }
 
-.markdown-body table tr:nth-child(2n) {
-  background-color: #f6f8fa;
+.markdown-body span.float-right {
+  display: block;
+  float: right;
+  margin-left: 13px;
+  overflow: hidden;
 }
 
-.markdown-body img {
-  background-color: #fff;
-  box-sizing: content-box;
-  max-width: 100%;
+.markdown-body span.float-right>span {
+  display: block;
+  margin: 13px auto 0;
+  overflow: hidden;
+  text-align: right;
 }
 
-.markdown-body img[align=right] {
-  padding-left: 20px;
+.markdown-body code,
+.markdown-body tt {
+  padding: .2em .4em;
+  margin: 0;
+  font-size: 85%;
+  white-space: break-spaces;
+  background-color: var(--color-neutral-muted);
+  border-radius: 6px;
 }
 
-.markdown-body img[align=left] {
-  padding-right: 20px;
+.markdown-body code br,
+.markdown-body tt br {
+  display: none;
+}
+
+.markdown-body del code {
+  text-decoration: inherit;
 }
 
-.markdown-body code {
-  background-color: rgba(27,31,35,.05);
-  border-radius: 3px;
+.markdown-body samp {
   font-size: 85%;
-  margin: 0;
-  padding: .2em .4em;
 }
 
-.markdown-body pre {
-  word-wrap: normal;
+.markdown-body pre code {
+  font-size: 100%;
 }
 
 .markdown-body pre>code {
-  background: transparent;
-  border: 0;
-  font-size: 100%;
-  margin: 0;
   padding: 0;
-  white-space: pre;
+  margin: 0;
   word-break: normal;
+  white-space: pre;
+  background: transparent;
+  border: 0;
 }
 
 .markdown-body .highlight {
@@ -740,244 +880,347 @@
 
 .markdown-body .highlight pre,
 .markdown-body pre {
-  background-color: #f6f8fa;
-  border-radius: 3px;
+  padding: 16px;
+  overflow: auto;
   font-size: 85%;
   line-height: 1.45;
-  overflow: auto;
-  padding: 16px;
+  color: var(--color-fg-default);
+  background-color: var(--color-canvas-subtle);
+  border-radius: 6px;
 }
 
-.markdown-body pre code {
-  background-color: transparent;
-  border: 0;
+.markdown-body pre code,
+.markdown-body pre tt {
   display: inline;
-  line-height: inherit;
-  margin: 0;
   max-width: auto;
-  overflow: visible;
   padding: 0;
+  margin: 0;
+  overflow: visible;
+  line-height: inherit;
   word-wrap: normal;
+  background-color: transparent;
+  border: 0;
 }
 
-.markdown-body .commit-tease-sha {
-  color: #444d56;
-  display: inline-block;
-  font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
-  font-size: 90%;
+.markdown-body .csv-data td,
+.markdown-body .csv-data th {
+  padding: 5px;
+  overflow: hidden;
+  font-size: 12px;
+  line-height: 1;
+  text-align: left;
+  white-space: nowrap;
 }
 
-.markdown-body .blob-wrapper {
-  border-bottom-left-radius: 3px;
-  border-bottom-right-radius: 3px;
-  overflow-x: auto;
-  overflow-y: hidden;
+.markdown-body .csv-data .blob-num {
+  padding: 10px 8px 9px;
+  text-align: right;
+  background: var(--color-canvas-default);
+  border: 0;
 }
 
-.markdown-body .blob-wrapper-embedded {
-  max-height: 240px;
-  overflow-y: auto;
+.markdown-body .csv-data tr {
+  border-top: 0;
 }
 
-.markdown-body .blob-num {
-  -moz-user-select: none;
-  -ms-user-select: none;
-  -webkit-user-select: none;
-  color: rgba(27,31,35,.3);
-  cursor: pointer;
-  font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
+.markdown-body .csv-data th {
+  font-weight: var(--base-text-weight-semibold, 600);
+  background: var(--color-canvas-subtle);
+  border-top: 0;
+}
+
+.markdown-body [data-footnote-ref]::before {
+  content: "[";
+}
+
+.markdown-body [data-footnote-ref]::after {
+  content: "]";
+}
+
+.markdown-body .footnotes {
   font-size: 12px;
-  line-height: 20px;
-  min-width: 50px;
-  padding-left: 10px;
-  padding-right: 10px;
-  text-align: right;
-  user-select: none;
-  vertical-align: top;
-  white-space: nowrap;
-  width: 1%;
+  color: var(--color-fg-muted);
+  border-top: 1px solid var(--color-border-default);
 }
 
-.markdown-body .blob-num:hover {
-  color: rgba(27,31,35,.6);
+.markdown-body .footnotes ol {
+  padding-left: 16px;
 }
 
-.markdown-body .blob-num:before {
-  content: attr(data-line-number);
+.markdown-body .footnotes ol ul {
+  display: inline-block;
+  padding-left: 16px;
+  margin-top: 16px;
 }
 
-.markdown-body .blob-code {
-  line-height: 20px;
-  padding-left: 10px;
-  padding-right: 10px;
+.markdown-body .footnotes li {
   position: relative;
-  vertical-align: top;
 }
 
-.markdown-body .blob-code-inner {
-  color: #24292e;
-  font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
-  font-size: 12px;
-  overflow: visible;
-  white-space: pre;
-  word-wrap: normal;
+.markdown-body .footnotes li:target::before {
+  position: absolute;
+  top: -8px;
+  right: -8px;
+  bottom: -8px;
+  left: -24px;
+  pointer-events: none;
+  content: "";
+  border: 2px solid var(--color-accent-emphasis);
+  border-radius: 6px;
 }
 
-.markdown-body .pl-token.active,
-.markdown-body .pl-token:hover {
-  background: #ffea7f;
-  cursor: pointer;
+.markdown-body .footnotes li:target {
+  color: var(--color-fg-default);
 }
 
-.markdown-body kbd {
-  background-color: #fafbfc;
-  border: 1px solid #d1d5da;
-  border-bottom-color: #c6cbd1;
-  border-radius: 3px;
-  box-shadow: inset 0 -1px 0 #c6cbd1;
-  color: #444d56;
-  display: inline-block;
-  font: 11px SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
-  line-height: 10px;
-  padding: 3px 5px;
-  vertical-align: middle;
+.markdown-body .footnotes .data-footnote-backref g-emoji {
+  font-family: monospace;
 }
 
-.markdown-body :checked+.radio-label {
-  border-color: #0366d6;
-  position: relative;
-  z-index: 1;
+.markdown-body .pl-c {
+  color: var(--color-prettylights-syntax-comment);
+}
+
+.markdown-body .pl-c1,
+.markdown-body .pl-s .pl-v {
+  color: var(--color-prettylights-syntax-constant);
+}
+
+.markdown-body .pl-e,
+.markdown-body .pl-en {
+  color: var(--color-prettylights-syntax-entity);
+}
+
+.markdown-body .pl-smi,
+.markdown-body .pl-s .pl-s1 {
+  color: var(--color-prettylights-syntax-storage-modifier-import);
+}
+
+.markdown-body .pl-ent {
+  color: var(--color-prettylights-syntax-entity-tag);
+}
+
+.markdown-body .pl-k {
+  color: var(--color-prettylights-syntax-keyword);
+}
+
+.markdown-body .pl-s,
+.markdown-body .pl-pds,
+.markdown-body .pl-s .pl-pse .pl-s1,
+.markdown-body .pl-sr,
+.markdown-body .pl-sr .pl-cce,
+.markdown-body .pl-sr .pl-sre,
+.markdown-body .pl-sr .pl-sra {
+  color: var(--color-prettylights-syntax-string);
+}
+
+.markdown-body .pl-v,
+.markdown-body .pl-smw {
+  color: var(--color-prettylights-syntax-variable);
+}
+
+.markdown-body .pl-bu {
+  color: var(--color-prettylights-syntax-brackethighlighter-unmatched);
+}
+
+.markdown-body .pl-ii {
+  color: var(--color-prettylights-syntax-invalid-illegal-text);
+  background-color: var(--color-prettylights-syntax-invalid-illegal-bg);
+}
+
+.markdown-body .pl-c2 {
+  color: var(--color-prettylights-syntax-carriage-return-text);
+  background-color: var(--color-prettylights-syntax-carriage-return-bg);
+}
+
+.markdown-body .pl-sr .pl-cce {
+  font-weight: bold;
+  color: var(--color-prettylights-syntax-string-regexp);
+}
+
+.markdown-body .pl-ml {
+  color: var(--color-prettylights-syntax-markup-list);
 }
 
-.markdown-body .tab-size[data-tab-size="1"] {
-  -moz-tab-size: 1;
-  tab-size: 1;
+.markdown-body .pl-mh,
+.markdown-body .pl-mh .pl-en,
+.markdown-body .pl-ms {
+  font-weight: bold;
+  color: var(--color-prettylights-syntax-markup-heading);
 }
 
-.markdown-body .tab-size[data-tab-size="2"] {
-  -moz-tab-size: 2;
-  tab-size: 2;
+.markdown-body .pl-mi {
+  font-style: italic;
+  color: var(--color-prettylights-syntax-markup-italic);
 }
 
-.markdown-body .tab-size[data-tab-size="3"] {
-  -moz-tab-size: 3;
-  tab-size: 3;
+.markdown-body .pl-mb {
+  font-weight: bold;
+  color: var(--color-prettylights-syntax-markup-bold);
 }
 
-.markdown-body .tab-size[data-tab-size="4"] {
-  -moz-tab-size: 4;
-  tab-size: 4;
+.markdown-body .pl-md {
+  color: var(--color-prettylights-syntax-markup-deleted-text);
+  background-color: var(--color-prettylights-syntax-markup-deleted-bg);
 }
 
-.markdown-body .tab-size[data-tab-size="5"] {
-  -moz-tab-size: 5;
-  tab-size: 5;
+.markdown-body .pl-mi1 {
+  color: var(--color-prettylights-syntax-markup-inserted-text);
+  background-color: var(--color-prettylights-syntax-markup-inserted-bg);
+}
+
+.markdown-body .pl-mc {
+  color: var(--color-prettylights-syntax-markup-changed-text);
+  background-color: var(--color-prettylights-syntax-markup-changed-bg);
 }
 
-.markdown-body .tab-size[data-tab-size="6"] {
-  -moz-tab-size: 6;
-  tab-size: 6;
+.markdown-body .pl-mi2 {
+  color: var(--color-prettylights-syntax-markup-ignored-text);
+  background-color: var(--color-prettylights-syntax-markup-ignored-bg);
 }
 
-.markdown-body .tab-size[data-tab-size="7"] {
-  -moz-tab-size: 7;
-  tab-size: 7;
+.markdown-body .pl-mdr {
+  font-weight: bold;
+  color: var(--color-prettylights-syntax-meta-diff-range);
 }
 
-.markdown-body .tab-size[data-tab-size="8"] {
-  -moz-tab-size: 8;
-  tab-size: 8;
+.markdown-body .pl-ba {
+  color: var(--color-prettylights-syntax-brackethighlighter-angle);
 }
 
-.markdown-body .tab-size[data-tab-size="9"] {
-  -moz-tab-size: 9;
-  tab-size: 9;
+.markdown-body .pl-sg {
+  color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);
 }
 
-.markdown-body .tab-size[data-tab-size="10"] {
-  -moz-tab-size: 10;
-  tab-size: 10;
+.markdown-body .pl-corl {
+  text-decoration: underline;
+  color: var(--color-prettylights-syntax-constant-other-reference-link);
 }
 
-.markdown-body .tab-size[data-tab-size="11"] {
-  -moz-tab-size: 11;
-  tab-size: 11;
+.markdown-body g-emoji {
+  display: inline-block;
+  min-width: 1ch;
+  font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
+  font-size: 1em;
+  font-style: normal !important;
+  font-weight: var(--base-text-weight-normal, 400);
+  line-height: 1;
+  vertical-align: -0.075em;
 }
 
-.markdown-body .tab-size[data-tab-size="12"] {
-  -moz-tab-size: 12;
-  tab-size: 12;
+.markdown-body g-emoji img {
+  width: 1em;
+  height: 1em;
 }
 
 .markdown-body .task-list-item {
   list-style-type: none;
 }
 
+.markdown-body .task-list-item label {
+  font-weight: var(--base-text-weight-normal, 400);
+}
+
+.markdown-body .task-list-item.enabled label {
+  cursor: pointer;
+}
+
 .markdown-body .task-list-item+.task-list-item {
-  margin-top: 3px;
+  margin-top: 4px;
 }
 
-.markdown-body .task-list-item input {
-  margin: 0 .2em .25em -1.6em;
+.markdown-body .task-list-item .handle {
+  display: none;
+}
+
+.markdown-body .task-list-item-checkbox {
+  margin: 0 .2em .25em -1.4em;
   vertical-align: middle;
 }
 
-.markdown-body hr {
-  border-bottom-color: #eee;
+.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox {
+  margin: 0 -1.6em .25em .2em;
+}
+
+.markdown-body .contains-task-list {
+  position: relative;
+}
+
+.markdown-body .contains-task-list:hover .task-list-item-convert-container,
+.markdown-body .contains-task-list:focus-within .task-list-item-convert-container {
+  display: block;
+  width: auto;
+  height: 24px;
+  overflow: visible;
+  clip: auto;
 }
 
-.markdown-body .pl-0 {
-  padding-left: 0!important;
+.markdown-body ::-webkit-calendar-picker-indicator {
+  filter: invert(50%);
 }
 
-.markdown-body .pl-1 {
-  padding-left: 4px!important;
+.markdown-body .markdown-alert {
+  padding: var(--base-size-8, 8px) var(--base-size-16, 16px);
+  margin-bottom: 16px;
+  color: inherit;
+  border-left: .25em solid var(--color-border-default);
 }
 
-.markdown-body .pl-2 {
-  padding-left: 8px!important;
+.markdown-body .markdown-alert>:first-child {
+  margin-top: 0;
+}
+
+.markdown-body .markdown-alert>:last-child {
+  margin-bottom: 0;
+}
+
+.markdown-body .markdown-alert .markdown-alert-title {
+  display: flex;
+  font-weight: var(--base-text-weight-medium, 500);
+  align-items: center;
+  line-height: 1;
 }
 
-.markdown-body .pl-3 {
-  padding-left: 16px!important;
+.markdown-body .markdown-alert.markdown-alert-note {
+  border-left-color: var(--color-accent-emphasis);
 }
 
-.markdown-body .pl-4 {
-  padding-left: 24px!important;
+.markdown-body .markdown-alert.markdown-alert-note .markdown-alert-title {
+  color: var(--color-accent-fg);
 }
 
-.markdown-body .pl-5 {
-  padding-left: 32px!important;
+.markdown-body .markdown-alert.markdown-alert-important {
+  border-left-color: var(--color-done-emphasis);
 }
 
-.markdown-body .pl-6 {
-  padding-left: 40px!important;
+.markdown-body .markdown-alert.markdown-alert-important .markdown-alert-title {
+  color: var(--color-done-fg);
 }
 
-.markdown-body .pl-7 {
-  padding-left: 48px!important;
+.markdown-body .markdown-alert.markdown-alert-warning {
+  border-left-color: var(--color-attention-emphasis);
 }
 
-.markdown-body .pl-8 {
-  padding-left: 64px!important;
+.markdown-body .markdown-alert.markdown-alert-warning .markdown-alert-title {
+  color: var(--color-attention-fg);
 }
 
-.markdown-body .pl-9 {
-  padding-left: 80px!important;
+.markdown-body .markdown-alert.markdown-alert-tip {
+  border-left-color: var(--color-success-emphasis);
 }
 
-.markdown-body .pl-10 {
-  padding-left: 96px!important;
+.markdown-body .markdown-alert.markdown-alert-tip .markdown-alert-title {
+  color: var(--color-success-fg);
 }
 
-.markdown-body .pl-11 {
-  padding-left: 112px!important;
+.markdown-body .markdown-alert.markdown-alert-caution {
+  border-left-color: var(--color-danger-emphasis);
 }
 
-.markdown-body .pl-12 {
-  padding-left: 128px!important;
+.markdown-body .markdown-alert.markdown-alert-caution .markdown-alert-title {
+  color: var(--color-danger-fg);
 }
-</style><title>ReadMe-iOS</title></head><body><article class="markdown-body"><h1><a id="user-content-orx---portable-game-engine--version-ios-114" class="anchor" aria-hidden="true" href="#orx---portable-game-engine--version-ios-114"><span aria-hidden="true" class="octicon octicon-link"></span></a>Orx - Portable Game Engine  (Version iOS 1.14)</h1>
+</style><title>ReadMe-iOS</title></head><body><article class="markdown-body"><div class="markdown-heading"><h1 class="heading-element">Orx - Portable Game Engine  (Version iOS 1.15)</h1><a id="user-content-orx---portable-game-engine--version-ios-115" class="anchor" aria-label="Permalink: Orx - Portable Game Engine  (Version iOS 1.15)" href="#orx---portable-game-engine--version-ios-115"><span aria-hidden="true" class="octicon octicon-link"></span></a></div>
 <p>Email iarwain [at] orx-project -dot- org to contact the author; or better, check
 <a href="https://orx-project.org" rel="nofollow">orx's homepage</a> for the most up-to-date contact information.
 You can also come <a href="https://orx-project.org/discord" rel="nofollow">chat with us</a>
@@ -985,7 +1228,7 @@
 <p>This engine is licensed under the zlib license, see the <code>LICENSE</code> file for details.</p>
 <p><a href="https://orx-project.org" rel="nofollow">Orx</a> is a 2D-oriented, data-driven and portable game engine focused primarily on ease of use.</p>
 <p>Please read the <code>README.md</code> file for general info about orx.</p>
-<h2><a id="user-content-intro" class="anchor" aria-hidden="true" href="#intro"><span aria-hidden="true" class="octicon octicon-link"></span></a>Intro</h2>
+<div class="markdown-heading"><h2 class="heading-element">Intro</h2><a id="user-content-intro" class="anchor" aria-label="Permalink: Intro" href="#intro"><span aria-hidden="true" class="octicon octicon-link"></span></a></div>
 <p>This release contains the full source code of orx as well as an iOS-oriented demo featuring:</p>
 <ul>
 <li>accelerometer</li>
@@ -997,7 +1240,7 @@ <h2><a id="user-content-intro" class="anchor" aria-hidden="true" href="#intro"><
 <li>visual FXs</li>
 </ul>
 <p>For more generic examples on how to use orx, please get the tutorial package and/or have a look at <a href="https://orx-project.org/wiki" rel="nofollow">the wiki</a>.</p>
-<h2><a id="user-content-files" class="anchor" aria-hidden="true" href="#files"><span aria-hidden="true" class="octicon octicon-link"></span></a>Files</h2>
+<div class="markdown-heading"><h2 class="heading-element">Files</h2><a id="user-content-files" class="anchor" aria-label="Permalink: Files" href="#files"><span aria-hidden="true" class="octicon octicon-link"></span></a></div>
 <pre><code>/dev-ios
   /build/ios/xcode                  - XCode project file for both orx and the iOS demo
   /demo                             - Source, config and data files for the iOS demo
@@ -1016,7 +1259,7 @@ <h2><a id="user-content-files" class="anchor" aria-hidden="true" href="#files"><
 
 /extern                             - External dependencies needed when building its plugins
 </code></pre>
-<h2><a id="user-content-howto" class="anchor" aria-hidden="true" href="#howto"><span aria-hidden="true" class="octicon octicon-link"></span></a>HowTo</h2>
+<div class="markdown-heading"><h2 class="heading-element">HowTo</h2><a id="user-content-howto" class="anchor" aria-label="Permalink: HowTo" href="#howto"><span aria-hidden="true" class="octicon octicon-link"></span></a></div>
 <p>If you're not familiar with orx you can start by opening the XCode project in <code>/dev-ios/build/ios/xcode</code>.<br>
 This project contains both orx library and a small iOS-oriented demo.</p>
 <p>The demo uses iOS's accelerometer (using orx's joystick module) and iOS's touch system (using orx's mouse module).</p>
@@ -1027,7 +1270,7 @@ <h2><a id="user-content-howto" class="anchor" aria-hidden="true" href="#howto"><
 <p>When starting your own new project, you can either modify the demo project file (that also compiles orx) or use
 the precompiled libraries found in <code>liborx-fat-sdk9.2.zip</code> along with the include files found in <code>/dev-ios/include</code>.</p>
 <p>The precompiled libraries contain both device &amp; simulator code for more convenience.</p>
-<h2><a id="user-content-comments" class="anchor" aria-hidden="true" href="#comments"><span aria-hidden="true" class="octicon octicon-link"></span></a>Comments</h2>
+<div class="markdown-heading"><h2 class="heading-element">Comments</h2><a id="user-content-comments" class="anchor" aria-label="Permalink: Comments" href="#comments"><span aria-hidden="true" class="octicon octicon-link"></span></a></div>
 <p>If you have any questions, comments, ideas or reviews, feel free to either
 post them on <a href="https://forum.orx-project.org" rel="nofollow">orx's forum</a>,
 come <a href="https://orx-project.org/discord" rel="nofollow">chat with us</a>
diff --git a/code/demo/iOS/ReadMe-iOS.md b/code/demo/iOS/ReadMe-iOS.md
index b474f2a62..dcde15512 100644
--- a/code/demo/iOS/ReadMe-iOS.md
+++ b/code/demo/iOS/ReadMe-iOS.md
@@ -1,4 +1,4 @@
-Orx - Portable Game Engine  (Version iOS 1.14)
+Orx - Portable Game Engine  (Version iOS 1.15)
 ================================================
 
 Email iarwain [at] orx-project -dot- org to contact the author; or better, check