` element called `content` in your theme, which will contain the maximum space of the content area of your site.
+That way you can inject the HTML produced by Plone there using Plone's content section, too.
+
+Add a stanza in your {file}`rules.xml` file.
+
+```xml
+
+```
+
+
+### Minimize rules
+
+You can start with the provided {file}`rules.xml` file.
+
+You can read about how to write your rules and their syntax in the [official Diazo documentation](https://docs.diazo.org/en/latest/basic.html).
+
+You will need to write your own rules to bring the dynamic content from Plone into the theme.
+
+Sometimes you will face difficult situations where you may find it hard to put items in the same place that Plone produces in very different places.
+
+For instance, you may need to put together the main menu, the language change, and the search box.
+Sometimes it is easier to override the corresponding template in Plone, build the new HTML structure there, and replace one thing in the {file}`rules.xml` file than trying to write complex Diazo rules or writing XSLT.
+
+The size of the {file}`rules.xml` file and the number of rules it contains can negatively impact the performance of your site.
+
+
+### Disable Diazo for AJAX requests
+
+When sending an AJAX request to normal browser views in Plone, Plone prepares a response as an HTML page, then normally transforms it via the Diazo theming engine.
+In some cases this is unnecessary overhead, such as when you want to inject a small snippet of HTML only into the page.
+
+To prevent this transformation, disable AJAX requests for Diazo themes by using the `ajax_load` HTTP request parameter.
+`ajax_load` is used in Plone to indicate AJAX requests.
+When added to the query string, `ajax_load=1` disables a full page rendering, whereas `ajax_load=0` enables it.
+
+```{versionadded} plonetheme.barceloneta 3.3.0
+In Plone Classic UI's standard theme, `plonetheme.barceloneta` version 3.3.0, the `ajax_load` theme parameter to disable Diazo was added.
+If you use this theme version 3.3.0 or later, then the next steps are obsolete.
+```
+
+Manually add the HTTP request parameter and its value as follows.
+
+Add a theme parameter to your {file}`manifest.cfg` file.
+
+```cfg
+[theme:parameters]
+ajax_load = python:request.get('ajax_load')
+```
+
+Then disable Diazo for AJAX requests in your {file}`rules.xml` file.
+
+```xml
+
+```
+
+Choose any method to load this change in your theme.
+
+- Restart your instance.
+- In the {guilabel}`Theming` control panel, select another theme, then switch back to your own theme.
+- For a programmatic way, see [(Re)Introduce the ajax_load theme parameter and skip diazo theming, if set. `plone/plonetheme.barceloneta` #404](https://github.com/plone/plonetheme.barceloneta/pull/404).
+
+
+### Completely disable Diazo
+
+You can fully disable Diazo and `plone.app.theming` based themes by setting the `plone.app.theming.interfaces.IThemeSettings.enabled` registry entry to `False`.
diff --git a/docs/classic-ui/theming/from-scratch.md b/docs/classic-ui/theming/from-scratch.md
deleted file mode 100644
index 9d2110e07e..0000000000
--- a/docs/classic-ui/theming/from-scratch.md
+++ /dev/null
@@ -1,136 +0,0 @@
----
-myst:
- html_meta:
- "description": "Plone Classic UI theming from scratch"
- "property=og:description": "Plone Classic UI theming from scratch"
- "property=og:title": "Plone Classic UI theming from scratch"
- "keywords": "Plone, Classic UI, theming, scratch"
----
-
-(classic-ui-theming-from-scratch-label)=
-
-# Classic UI theming from scratch
-
-```{todo}
-This page is only an outline and needs a lot of work.
-See https://github.com/plone/documentation/issues/1286
-```
-
-Theming based on a filesystem package without any dependency.
-
-- Theming for Plone 6 Classic UI
-- Theme stored in a filesystem package
-- Built from scratch
-- No dependencies to Barceloneta
-- No Diazo needed
-
-
-## Theme package
-
-- Create a theme package as explained here.
-- Remove what you do not need
-- Overrides
-- Static files
-
-
-## Static files
-
-Register directory to keep static files
-
-File: `src/plonetheme/munich/browser/configure.zcml`
-Directory: `src/plonetheme/munich/browser/static`
-
-```xml
-
-
-```
-
-## Theme
-
-### Manifest
-
-- Manifest for your theme
-- Keep rules empty to disable Diazo
-
-```ini
-[theme]
-title = Munich Theme
-description = A modernized Plone 6 theme
-preview = preview.png
-rules =
-prefix = /++theme++plonetheme.munich
-doctype =
-```
-
-### Bundle registration
-
-```xml
-
-
-
-
- ++theme++munich/js/munich.min.js
- ++theme++munich/css/munich.min.css
- True
- False
- 2020-12-06 12:00:00
-
-
-
-```
-
-### Theme registration
-
-Register your theme via theme.xml
-
-```xml
-
-
- munich
- true
-
-```
-
-### Compile the bundle
-
-- Compile SASS to SCSS
-
-Install all requirements and dependencies from package.json:
-
-```shell
-yarn install
-```
-
-Build the actual bundle:
-
-```shell
-yarn dist
-```
-
-
-### Theming
-
-- Make use of Bootstrap [variables](https://github.com/twbs/bootstrap/blob/main/scss/_variables.scss)
-- Tweak basic settings like rounded corners, shadows, and so on.
-- Set custom fonts
-- Define your own stuff
-- Import Boostrap (as basis)
-
-
-#### Templates
-
-- Add `z3c.jbot` overrides
-- Copy templates to customize
-- Add custom views for your story
-
-
-### Available themes
-
-- [`plonetheme.tokyo`](https://github.com/collective/plonetheme.tokyo/) (mobile first, one column)
-- [`plonetheme.munich`](https://github.com/collective/plonetheme.munich/) (minimalistic)
diff --git a/docs/classic-ui/theming/index.md b/docs/classic-ui/theming/index.md
index 3048ee8465..5b05448646 100644
--- a/docs/classic-ui/theming/index.md
+++ b/docs/classic-ui/theming/index.md
@@ -9,19 +9,62 @@ myst:
(classic-ui-theming-index-label)=
-# Theming of Classic UI
+# Theming Classic UI
-```{todo}
-This page is only an outline and needs a lot of work.
-See https://github.com/plone/documentation/issues/1286
-```
+This section of the documentation describes how to theme Classic UI.
+
+
+## TTW or add-on?
+
+Small theme changes—such as the site logo and favicon and minimal CSS changes—can be made by {doc}`changing theme settings through the web (TTW)
`.
+This method is especially useful for short-lived or prototype sites.
+It allows you to make minor adjustments without needing to dive into code or production-level setups.
+TTW can be convenient for quick experiments, websites that don't require complex theming, or short-lived websites.
+
+An add-on allows you to keep your customization modular, and it provides a more structured approach to larger-scale theming.
+This method is ideal for more permanent or complex customizations since it enables easier maintenance and portability.
+
+The customized Barceloneta theme, creating a theme from scratch, and Diazo offer even more flexibility.
+
+Barceloneta theme
+: Ideal for a starting point, especially if you want to tweak it as an existing, solid theme.
+ You can customize its components and styles without starting from zero.
+
+From scratch
+: If your project requires something completely unique and none of the existing themes fit, building a theme from scratch would be the way to go.
+ This is most appropriate for highly customized websites with distinct design requirements.
+
+Diazo
+: Diazo can be used where designers create a self-contained HTML page with CSS and JavaScript without customizing templates.
+ It can be used for simple themes or for more advanced methods.
+
+ Its advantages include allowing more complex themes where content needs to remain flexible, and you want full control over the markup.
+
+ Its disadvantages include a possible negative performance impact from the rendering process, and a more complex and difficult to maintain theme.
+
+To summarize:
+
+- Use {doc}`TTW ` for minor changes or testing.
+- Use {doc}`add-ons ` for production-level theming that needs scalability, maintainability, and modularity to customize Barceloneta or to write themes from scratch.
+- Use {doc}`Diazo ` in your add-on if you need to modify the markup without touching the page templates.
+
+
+## How-to guides
```{toctree}
:maxdepth: 2
-barceloneta
+settings-ttw
+create-add-on
+color-modes
diazo
-from-scratch
-through-the-web
-color-mode
-```
\ No newline at end of file
+```
+
+## Reference
+
+```{toctree}
+:maxdepth: 2
+
+scss-structure
+css-custom-properties
+```
diff --git a/docs/classic-ui/theming/scss-structure.md b/docs/classic-ui/theming/scss-structure.md
new file mode 100644
index 0000000000..c992ef40e5
--- /dev/null
+++ b/docs/classic-ui/theming/scss-structure.md
@@ -0,0 +1,74 @@
+---
+myst:
+ html_meta:
+ "description": "SCSS structure for Classic UI themes for Plone"
+ "property=og:description": "SCSS structure for Classic UI themes for Plone"
+ "property=og:title": "SCSS structure for Classic UI themes for Plone"
+ "keywords": "Plone, Classic UI, theming, add-on"
+---
+
+(classic-ui-theming-theme-structure-label)=
+
+# Theme structure
+
+All the theming relevant files are now located inside `src/plonetheme/themebasedonbarceloneta/theme/`:
+
+```text
+./src/plonetheme/themebasedonbarceloneta/theme/
+├── barceloneta-apple-touch-icon-114x114-precomposed.png
+├── barceloneta-apple-touch-icon-144x144-precomposed.png
+├── barceloneta-apple-touch-icon-57x57-precomposed.png
+├── barceloneta-apple-touch-icon-72x72-precomposed.png
+├── barceloneta-apple-touch-icon-precomposed.png
+├── barceloneta-apple-touch-icon.png
+├── barceloneta-favicon.ico
+├── index.html
+├── manifest.cfg
+├── package.json
+├── preview.png
+├── rules.xml
+├── scss
+│ ├── _custom.scss
+│ ├── _maps.scss
+│ ├── _variables.scss
+│ └── theme.scss
+├── styles
+│ ├── theme.css
+│ └── theme.min.css
+└── tinymce-templates
+ ├── README.rst
+ ├── card-group.html
+ └── list.html
+```
+
+`index.html`
+: Basic HTML structure for the site layout.
+
+`manifest.cfg`
+: Basic theme configuration for the backend.
+
+`package.json`
+: npm package configuration which defines all requirements for theming with Barceloneta.
+
+`rules.xml`
+: Diazo rules which translate the `index.html` and fills it with content from the backend.
+
+`scss/_custom.scss`
+: Custom SCSS rules for your theme.
+
+`scss/_maps.scss`
+: Override Bootstrap mapping variables here.
+
+`scss/_variables.scss`
+: Override Bootstrap and/or Barceloneta variables here.
+
+`scss/theme.scss`
+: Base theme file which follows "Option B" of customizing Bootstrap imports to enable custom variable and map injections.
+ Note that the order of these imports is mandatory to ensure overriding the defaults.
+ See https://getbootstrap.com/docs/5.3/customize/sass/#importing.
+
+`styles/theme.css[.min]`
+: Compiled CSS styles.
+
+`tinymce-templates/*.html`
+: HTML snippets for the TinyMCE `template` plugin.
diff --git a/docs/classic-ui/theming/settings-ttw.md b/docs/classic-ui/theming/settings-ttw.md
new file mode 100644
index 0000000000..75fb6b7a27
--- /dev/null
+++ b/docs/classic-ui/theming/settings-ttw.md
@@ -0,0 +1,62 @@
+---
+myst:
+ html_meta:
+ "description": "Change Classic UI theme settings through-the-web (TTW) in Plone 6"
+ "property=og:description": "Change Classic UI theme settings through-the-web (TTW) in Plone 6"
+ "property=og:title": "Change Classic UI theme settings through-the-web (TTW) in Plone 6"
+ "keywords": "Plone 6, Classic UI, Through-the-web, TTW, theme, customization"
+---
+
+(classic-ui-through-the-web-label)=
+
+# Change theme settings TTW
+
+This chapter describes how to change Classic UI theme settings through-the-web ({term}`TTW`) in Plone 6.
+
+Small theme changes can be made via control panels.
+Other theming methods should be used for larger customizations or entire website designs.
+
+
+(classic-ui-through-the-web-control-panels-label)=
+
+## Control panels
+
+You can make the following changes through control panels.
+
+- Logo
+- Favicon
+- Custom Styles
+
+
+### Logo
+
+Navigate to {menuselection}`Admin --> Site Setup --> Site`, or visit the URL path `/@@site-controlpanel` in your web browser's address bar.
+
+Under {guilabel}`Site Logo`, you can upload a custom logo for your site.
+
+
+### Favicon
+
+Navigate to {menuselection}`Admin --> Site Setup --> Site`, or visit the URL path `/@@site-controlpanel` in your web browser's address bar.
+
+Under {guilabel}`Site Favicon`, you can upload a custom favicon for your site.
+
+When you upload a new favicon, the previous field {guilabel}`MIME type of the site favicon` will update with the favicon's correct media type.
+
+
+### Custom Styles
+
+Navigate to {menuselection}`Admin --> Site Setup --> Theming --> Advanced settings --> Custom Styles`, or visit the URL path `/@@theming-controlpanel#autotoc-item-autotoc-2` in your web browser's address bar.
+
+Enter any arbitrary styles, and save your changes.
+The changes are stored in a `BrowserView` called `custom.css`.
+It is shipped as the last resource after all other CSS files.
+It can be used to override default CSS, sometimes with the use of the CSS property `!important` or specific CSS selectors.
+
+However, you should use it only for small changes to CSS.
+For larger changes, see {doc}`create-add-on`.
+
+
+## Themes
+
+Under {menuselection}`Admin --> Site Setup --> Theming --> Themes`, you are limited to downloading and uploading themes.
diff --git a/docs/classic-ui/theming/through-the-web.md b/docs/classic-ui/theming/through-the-web.md
deleted file mode 100644
index 2a9646bd6e..0000000000
--- a/docs/classic-ui/theming/through-the-web.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-myst:
- html_meta:
- "description": "Through-the-web (TTW) theme customization in Plone 6 Classic UI"
- "property=og:description": "Through-the-web (TTW) theme customization in Plone 6 Classic UI"
- "property=og:title": "Through-the-web (TTW) theme customization in Plone 6 Classic UI"
- "keywords": "Plone 6, Classic UI, Through-the-web, TTW, theme, customization"
----
-
-(classic-ui-through-the-web-label)=
-
-# Through-the-web (TTW) theme customization
-
-```{todo}
-This page is only an outline and needs a lot of work.
-See https://github.com/plone/documentation/issues/1286
-```
-
-TTW customization is useful when you need to make small CSS changes.
-Theme changes can be made via control panels or by updating Plone 6 Classic UI's `custom.css`.
-Other theming methods should be used for larger customizations or entire website designs.
-
-
-(classic-ui-through-the-web-control-panels-label)=
-
-## Control panels
-
-You can make the following changes through control panels.
-
-* Logo
-* Favicon
-* Custom CSS in `custom.css`
-
-With `custom.css`, you can make custom styles without compilation.
-It is shipped as the last resource after all other CSS files.
-It can be used to override default CSS, sometimes with the use of the CSS property `!important` or specific CSS selectors.
-
-
-```{todo}
-Provide usage.
-Provide navigation through {menuselection}`Site Setup --> Theming` or {guilabel}`Button Name`.
-Add screenshots.
-```
-
-
-(classic-ui-through-the-web-css-variables-label)=
-
-## CSS variables
-
-Plone uses Twitter Bootstrap's CSS variables.
-They are used to tweak colors, fonts, spacing, and other CSS attributes.
-
-```{todo}
-Provide usage.
-```
-
-
-(classic-ui-through-the-web-theming-control-panel-label)=
-
-## Theming control panel
-
-The Theming control panel is limited to downloading and uploading themes.
-
-
-(classic-ui-through-the-web-templates-label)=
-
-### Templates
-
-
-(classic-ui-through-the-web-restricted-python-label)=
-
-### Restricted python
-
-
-(classic-ui-through-the-web-content-types-label)=
-
-### Content types
-
diff --git a/docs/classic-ui/tinymce-customization.md b/docs/classic-ui/tinymce-customization.md
new file mode 100644
index 0000000000..930a05f1f0
--- /dev/null
+++ b/docs/classic-ui/tinymce-customization.md
@@ -0,0 +1,243 @@
+---
+myst:
+ html_meta:
+ "description": "TinyMCE customization in Plone 6"
+ "property=og:description": "TinyMCE customization in Plone 6"
+ "property=og:title": "TinyMCE customization in Plone 6"
+ "keywords": "Plone 6, Classic UI, Bootstrap 5, TinyMCE, customization"
+---
+
+(classic-ui-tinymce-customization-label)=
+
+# TinyMCE customization
+
+This chapter is a developer reference manual for customizing {term}`TinyMCE`.
+
+
+## Customize {menuselection}`Format` menu
+
+There are several options to customize TinyMCE's {menuselection}`Format --> Formats` menu.
+
+The first two options use TinyMCE's [`formats` JSON configuration](https://www.tiny.cloud/docs/tinymce/latest/content-formatting/).
+They are less complicated to implement than the third option.
+
+
+### Add-on GenericSetup configuration file
+
+This option is best for system administrators and developers who write their own add-ons to ease reproducibility.
+
+You can add a GenericSetup configuration file to your add-on, such as {file}`profiles/default/registry/tinymce.xml`, with the JSON configuration of the custom format.
+
+```xml
+
+
+ {
+ "myformat": {
+ "block": "div",
+ "classes": "my-css-classes"
+ }
+ }
+
+
+```
+
+```{important}
+The content of the `formats` record will overwrite the value in the {guilabel}`Formats` field in the TinyMCE control panel at {menuselection}`Site Setup --> TinyMCE --> Default`.
+If you want to preserve the default content, you must copy it into your XML.
+```
+
+Next, define where to place the new format inside the {menuselection}`Format` menu's submenus.
+You can add your custom format to one of the following menu items.
+These menu items in the TinyMCE editor correspond to field items in the TinyMCE control panel at {menuselection}`Site Setup --> TinyMCE --> Default`.
+
+(tinymce-formats-styles-label)=
+
+- {guilabel}`Header styles`
+- {guilabel}`Inline styles`
+- {guilabel}`Block styles`
+- {guilabel}`Alignment styles`
+- {guilabel}`Table styles`
+
+The syntax for each element in those fields is `Title|format`.
+The following example XML snippet adds your format to the {menuselection}`Inline styles` menu.
+Unlike the previous example, the example does not remove the default values, but appends to it.
+
+```xml
+
+
+ My custom format|myformat
+
+
+```
+
+
+### Edit the `Formats` option in the TinyMCE control panel
+
+This option is good for quick edits, but is not as reproducible as the GenericSetup option.
+
+You can manually customize the `Formats` value through-the-web in the TinyMCE control panel.
+
+1. Navigate to {menuselection}`Site Setup --> TinyMCE --> Default`, or append `@@tinymce-controlpanel` to the root of your website in your browser's location bar.
+1. Scroll down to {guilabel}`Formats`, and edit the JSON configuration.
+1. Insert your custom format to one of the fields mentioned above.
+1. Click the {guilabel}`Save` button.
+
+
+### Inject formats with files named {file}`tinymce-formats.css`
+
+This option is more complex to implement than the previous options.
+However it is the only option where you can add items to the {menuselection}`Formats` submenu as siblings to the {ref}`Formats styles ` configurations.
+
+In Plone 6, TinyMCE has a special logic that automatically reads registered files named {file}`tinymce-formats.css` and adds the CSS classes defined in those files to TinyMCE's {menuselection}`Format --> Formats` menu by using the [`importcss_file_filter` option](https://www.tiny.cloud/docs/tinymce/latest/importcss/#importcss_file_filter).
+
+To add custom formats, you can provide your own files.
+
+1. Name the file {file}`tinymce-formats.css`.
+1. Register the file as a resource in your Plone site.
+1. Include the file in the TinyMCE control panel in the textarea input {guilabel}`Choose the CSS used in WYSIWYG Editor Area`.
+ 1. Navigate to {menuselection}`Site Setup --> TinyMCE --> Default`, or append `@@tinymce-controlpanel` to the root of your website in your browser's location bar.
+ 1. Scroll down to {guilabel}`Choose the CSS used in WYSIWYG Editor Area`.
+
+CSS styles defined in this file will automatically be added to the top level of TinyMCE's {menuselection}`Format --> Formats` menu.
+
+
+## Remove imported formats
+
+Similar to adding formats, you can remove formats in a couple of ways.
+
+
+### Add-on GenericSetup configuration file
+
+Alternatively, you can use GenericSetup in your add-on.
+
+```xml
+
+
+ ++theme++barceloneta/tinymce/tinymce-ui-content.css
+
+
+```
+
+
+### Configure the TinyMCE control panel
+
+Plone 6 Classic UI ships with the Barceloneta theme which includes two custom formats, `highlight-inline` and `p.highlight-paragraph`, in the TinyMCE {menuselection}`Format --> Formats` menu.
+You can remove these formats through the TinyMCE control panel.
+
+1. Navigate to {menuselection}`Site Setup --> TinyMCE --> Default`, or append `@@tinymce-controlpanel` to the root of your website in your browser's location bar.
+1. Scroll down to {guilabel}`Choose the CSS used in WYSIWYG Editor Area`.
+1. Remove the entry `++theme++barceloneta/tinymce/tinymce-formats.css`.
+1. Click the {guilabel}`Save` button.
+
+Once removed, the custom formats will no longer appear in the menu.
+
+
+## Configure `