pkg_themer changelog

Notable releases and milestones for Cassiopeia Themer (pkg_themer).

VersionSummary
3.2.10 Menu polish — new fieldset under Layout absorbing a cluster of stock-Cassiopeia menu rough edges that kept needing hand-rolled user.css. Three settings: Parent-item indicator (default triangle / Bootstrap Icons chevron / caret / none), Keep parent items inline (stops the indicator wrapping onto a second row when the menu label is long), and a Submenu background & text colour pair (level-2 items currently inherit Cassiopeia's hardcoded white / dark text which clashes with coloured or gradient surfaces). Selectors use the proven [class] attribute-boost pattern so they win cascade ties against template.min.css without !important. The Layout preview gets a small parent / submenu mock that repaints live as you change any of the four fields. Chevron / caret variants depend on the Bootstrap Icons Front-end asset toggle being on.
3.2.9 Fixes silent drop of article_rhythm on save. The Identity form had a working live preview and the compiler emitted the right CSS for compact / default / relaxed reading rhythm, but the model's typography save whitelist only included body_font and headings_font — so picking a non-default rhythm appeared to take effect on the form but never persisted across saves. Whitelist extended; full audit of the other four model save methods (Brand, Layout, Marketing, Surfaces) confirms no further drops.
3.2.8 Accordion style picker on the Surfaces fieldset, with three options. Default is Bootstrap's stock separated-button look. Continuous stack strips per-button border / box-shadow / radius so adjacent buttons share their edge with the item border doing all the visual work — the layout most modern design systems prefer. Cards spaces each item out with its own rounded border. The existing accordion active-state tint toggle still composes on top of any layout choice. Selectors use the proven [class] attribute-boost pattern so the rules win cascade ties against Cassiopeia's own accordion CSS without needing !important. Side fix: card_hover and accordion_tint_active were absent from the Surfaces save whitelist and have been silently dropped on every save since the 3.2.1 dev cycle — both are now persisted correctly along with the new accordion_style.
3.2.6 The Surfaces → live preview now shows three new component mock-ups so the new component-variable mappings introduced in 3.2.5 are visible without having to save and inspect the front-end: an Accordion stack (three items, body and borders driven by Body bg / Body text / Border), a Pagination row (active page in primary, idle uses Body bg + Border), and a Dropdown / list-group panel (idle / hover / active rows showing how Body bg, Secondary bg and Primary roles map to --dropdown-link-*-bg). Each mock updates live as you change the source surface or brand colour fields.
3.2.5 Bootstrap components now follow your surface palette. Bootstrap 5.3 components each have their own variable namespace (--accordion-bg, --card-bg, --modal-bg, --dropdown-bg, --pagination-active-bg, --list-group-bg, --form-control-bg and friends) that doesn't inherit from the global surface tokens — so accordions, cards, modals, dropdowns, pagination, list groups, form controls, nav tabs / pills, offcanvas drawers, toasts, popovers and breadcrumbs all silently fell back to Bootstrap's cool-grey defaults regardless of the configured Themer surfaces. The compiler now emits a derived component-variable mapping block at the bottom of the :root output, with each component pointing at the appropriate surface via var() indirection. Setting Body background, Body text, Border, Light surface or a brand colour automatically propagates to every related component. Both Cassiopeia (unprefixed) and Bootstrap-stock (--bs-*) naming conventions are emitted. No admin UI changes — mappings only fire when the source surface is configured, so unset fields keep Bootstrap's defaults exactly as before.
3.2.4 Bootstrap utilities that compose colours via opacity now follow your theme. Cassiopeia rebuilds Bootstrap with the --bs- prefix stripped, so utilities like .bg-body-tertiary resolve via rgba(var(--tertiary-bg-rgb), opacity) — an unprefixed name. The generator emitted only the hex form (--tertiary-bg), so the matching --tertiary-bg-rgb stayed at Cassiopeia's template default and the user's setting never reached the page. Every brand, surface and semantic colour is now emitted in both Cassiopeia (--tertiary-bg, --tertiary-bg-rgb) and Bootstrap-stock (--bs-tertiary-bg, --bs-tertiary-bg-rgb) naming conventions, with the comma-separated RGB triplet companion alongside each hex value. Affects .bg-body-secondary, .bg-body-tertiary, .text-bg-* opacity variants, .border-*-subtle, button focus rings and any custom CSS following the same rgba(var(--name-rgb), …) pattern. Previously-affected utilities now follow the configured palette without hand-rolled user.css overrides.
3.2.2 Joomla 6 Pre-Update Check no longer flags plg_system_themer as a Potentially Dangerous Plugin. The plugin now declares its own compatibility-only update manifest so the check can verify J5 / J6 compatibility — pkg_themer itself remains the canonical update path, so customers always update via the package.
3.2.1

Four new theming controls absorbing common custom-CSS overrides. Source for these came from auditing real production stylesheets — every Cassiopeia-using brand was hand-rolling the same patterns.

  • Bootstrap utility classes follow your brand palette. The semantic colour pickers under Brand already drove .btn-primary, .btn-warning etc. and the corresponding .alert-* variants. Now they also generate .text-*, .bg-* and .border-* utility classes for the same six roles (primary, secondary, success, info, warning, danger). Button hover state gets a darker variant automatically via color-mix() — previously hover used the same colour as base, which was visually flat.
  • Card hover effect (Surfaces → Card hover effect). Dropdown of none / lift / glow / scale. Targets cards with .shadow-sm or .shadow. Default none, so existing sites are unchanged unless you opt in.
  • Accordion active-state tint (Surfaces → Tint accordion active state). Yes/no toggle. When on, an open accordion item's header takes the Light surface colour with the Heading colour as foreground — matching Bootstrap's idiomatic tinted-background pattern.
  • Article reading rhythm (Identity → Article reading rhythm). Three presets — default / compact / relaxed. Adjusts heading top margins and body line-height inside Joomla content article bodies (.com-content-article__body) only.

The Surfaces preview pane gains live mock-ups for the new card-hover and accordion-tint controls so you can compare options without saving.

3.1.7

Production release consolidating issues found in testing. Versions 3.1.1 through 3.1.6 iterated through the changes below before this consolidated release shipped.

Subscription validation traffic reduced. The validation cache was repeatedly invalidating on every admin page render due to a signature mismatch with the validation API. Now caches successfully for 24 hours per the underlying TTL, so an active admin generates ~1 validation call per day rather than per page.

Dashboard tile install fix. The dashboard tile registration in the postflight script tried to insert a #__modules_menu mapping using a pattern Joomla's database driver doesn't accept (object literal passed where a reference is required). The error was silently swallowed, so the tile installed but its menu mapping was missing. Fixed by assigning the row to a variable first.

3.1.0 All five extensions updated to 3.1 — coordinated production release.
2.1

Prism.js syntax highlighting. New toggle in Layout → Front-end assets that loads Prism.js from jsDelivr to highlight <pre><code class="language-X"> blocks in your articles. Eight bundled themes (default light, dark, okaidia, tomorrow night, twilight, coy, funky, solarized light). The language autoloader is included, so any supported language is fetched on demand without the publisher having to pre-load individual modules.

UI text pass. Tier comparison labels now make clear we integrate with third-party services rather than provide them (Google Analytics integration, Google AdSense integration, Ahrefs Web Analytics integration, Amazon affiliate link rewriting). Setup checklist rewritten in plain language — "user.css writable" becomes "Theme stylesheet writable", and the consent-banner status messages drop the v2 / default-denied jargon. Outbound links added next to "Bootstrap" / "Bootstrap Icons" in the Front-end assets card and to the WCAG section on Brand. The Site header card gains side-by-side mini illustrations of the default stacked layout vs the inline navbar so the choice is visible without saving.

Custom CSS card moved to its own full-width row below the Layout columns, with the label stacked above the textarea so the editor uses the entire page width.

Live preview reflects the Inline navbar toggle. The faux header in Layout's right-hand preview now defaults to stacked (brand on top, links below) and flips to inline (brand left, links pushed right) the moment the toggle is switched, matching the static mini illustrations in the Site header card.

Visible SVG-upload setup notice at the top of the Identity → Favicon card — Joomla blocks .svg uploads by default and the Media Manager allow-list step is easy to miss when it's hidden in a field tooltip. Spelled out as an inline yellow notice with the three Global Configuration → Media fields to update.

Front-end assets card reworked: the Bootstrap / Bootstrap Icons explainer + link sits directly above the Bootstrap Icons toggle, and a matching Prism.js explainer + link sits above the Prism toggle, so each asset has its context where it's relevant rather than buried in the fieldset description.

Trademark attribution paragraph at the bottom of the Dashboard, covering Joomla!®, Google products, Apple, OSI, and a catch-all clause for anything else.

2.0

Major release. Significant restructure of the admin and a polished front-end layout layer.

Brand view split into three. Brand was overcrowded, so it’s now Brand (colour pairs, semantic alerts, WCAG contrast checker, Material / palette import), Surfaces (page surfaces, background image, header / footer gradients), and Identity (typography and favicon). Each page has its own focused live preview.

Inline navbar layout — new toggle in Layout → Site header that lays out logo, optional search and menu side-by-side in one horizontal band, with menu items left-aligned next to the logo. Long menus wrap whole items onto new rows. Optional sticky header (with backdrop blur) and a choice of toggler icon (hamburger or ellipsis). On mobile the menu collapses to a full-width drop-down panel anchored under the header, picking up the same gradient.

Header / footer gradients with eight bundled presets, an explicit Header / Footer / Both target picker, and a built-in “Best Practice” recipe (Primary → Dark surface, diagonal top-left to bottom-right for headers; Dark surface → Primary, top to bottom for footers).

Smarter favicon. One SVG covers every modern browser. The 180×180 PNG iOS uses for “Add to Home Screen” is rendered automatically from your SVG when Imagick is available, on a theme-coloured canvas with proportional padding so the logo doesn’t bleed to the edges. The legacy ICO fallback is dropped — Joomla’s stock /favicon.ico already covers URL-bar / bookmark scrapers.

Tier matrix rebalance. The trial tier now ships a complete “make my site look good” toolkit: backgrounds, gradients, banners (unlimited), all the visual editors. Standard adds Material / palette import, Ahrefs Web Analytics on its own gate, preset export, and a higher saved-palettes limit — a meaningful step up rather than “trial plus a few cosmetic tweaks”. Premium covers commercial monetisation (GA4, AdSense, Amazon affiliates, Consent Mode v2). Enterprise adds per-Cassiopeia-style theming and white-label.

Front-end assets moved. The Bootstrap Icons toggle is now under Layout → Front-end assets rather than Marketing — it’s a presentation choice, not a tracking one. Marketing now reads as a focused tracking / monetisation / consent panel.

Self-healing upgrades. The postflight regenerates user.css on every install/upgrade and clears the subscription / tier caches, so newly-shipped feature flags take effect immediately without anyone having to remember to re-save.

Subscription panel fix. The Options → Subscription tab now correctly displays the subscriber name and expiry date for paid keys (the cache writer was missing those fields).

before_footer banner placement fix. Banners assigned to the “before footer” position are now injected before the opening <footer> tag rather than after the closing one, so they actually appear above the footer as the position name implies.

1.8 Activity tables and dashboard polish — admin list filtering, KPI refresh, contextual usage meters following the rest of the Multizone catalogue. Sample banner seeding is idempotent and trial-enabled with a default of two slots.
1.7 Custom CSS escape hatch on the Layout page for one-off tweaks Themer doesn’t expose as a setting. Full Material 3 colour mapping on the palette importer (26 fields across brand / surfaces / semantic groups; on-text fields for accessibility). Marketing-form fields no longer drop out of the saved settings on second save. Security audit pass and a regex-corruption fix for the shared admin dashboard tile that affected several extensions in the suite.
1.1.2 Robust dashboard panel rebuild — on install, the “Multizone Extensions” mod_custom is regenerated from observed tile data attributes, repairing any orphan markup left over from earlier regex-corruption bugs across the suite.
1.1.1 Cassiopeia Themer added to the shared “Multizone Extensions” tile on the admin Home Dashboard, alongside the other Multizone packages.
1.1.0 Three new front-end injection options on the Marketing tab. Ahrefs Web Analytics — cookieless, GDPR-friendly site analytics, single data-key field, no Consent Mode integration needed (same tier gate as GA4 in this release; later split onto its own gate in 1.10). Bootstrap Icons toggle — pulls the official CDN bundle so any <i class="bi bi-X"> in your content renders (Cassiopeia ships icomoon and Font Awesome but not Bootstrap Icons). Favicon set on Brand — SVG primary (modern browsers), Apple touch icon 180×180 (iOS home screen), ICO fallback (legacy), and a theme-colour for mobile browser chrome and PWA splash. The system plugin emits the four head tags ahead of Cassiopeia’s default favicon link so yours wins.
1.0.0 Initial release. Visual control panel for Joomla’s Cassiopeia front-end template, generating media/templates/site/cassiopeia/css/user.css from admin-edited theme settings: brand palette, surfaces and semantic colours, typography, page background image, layout (container width, spacing, radius, shadow, link decoration). Site-wide advertising banners with image and composed (gradient + headline + sub-head + CTA + optional inline image) modes, three positions (header, below-header, before-footer), and nine bundled placeholder PNGs seeded as sample banners on first install. Marketing-script integration: GA4, AdSense, Amazon affiliate-link rewriting (per marketplace, ca/com.au/co.uk/etc.), Google Consent Mode v2 default-denied, and Google’s free Consent Management Platform. Setup checklists on the Marketing tab for Google CMP and Amazon Associates with server-side validation, deep-links to AdSense Privacy & messaging and Amazon Associates Central, and an end-to-end live test that fetches the front page server-side and confirms the CMP loader and Consent Mode default reach visitors. Subscription tiers and licensing via pkg_subsmgr; trial keys auto-provisioned on first install. Lock-and-modify pattern on stored marketing IDs prevents accidental overwrite. Idempotent postflight preserves user-edited theme and banner data across uninstall/reinstall and recovers existing themes from user.css when no database row is present.

Licences, trademarks, source code licences and attributions

928uk® is a trademark of Multizone Limited, registered in the UK. Multizone and this site is not affiliated with or endorsed by The Joomla! Project™. Any products and services provided through this site are not supported or warrantied by The Joomla! Project or Open Source Matters, Inc. Use of the Joomla!® name, symbol, logo and related trademarks is permitted under a limited licence granted by Open Source Matters, Inc. AdMob™, AdSense™, AdWords™, Android™, Chrome OS™, Chromebook™, Chrome™, DART™, Flutter™, Firebase™, Firestore™, Fuchsia™, Gmail™, Google Maps™, Google Pixel™, Google Play™, Pixelbook Go™, and Pixel™ and other trademarks listed at the Google Brand Resource center are trademarks of Google LLC and this site is not endorsed by or affiliated with Google in any way. Apple and the Apple logo are trademarks of Apple Inc., registered in the U.S. and other countries. App Store is a service mark of Apple Inc. The OSI logo trademark is the trademark of Open Source Initiative. Any other product or company names may be trademarks™ or registered® trademarks of their respective holders. Use of these trademarks in articles here does not apply affiliation or endorsement by any of them.

Where the source code is published here on multizone.co.uk or on our GitHub by Angus Fox, Multizone Limited it is licenced according to the open source practice for the project concerned.

BSD 3-Clause "New" or "Revised" Licence
Original source code for mobile apps are licenced using the same licence as the one used by "The Flutter Authors". This Licence, the BSD 3-Clause "New" or "Revised" Licence (bsd-3-clause) is a permissive licence with a clause that prohibits others from using the name of the project or its contributors to promote derived products without written consent.
GNU General Public Licence v3.0 or later
Original source code for Joomla! published here on multizone.co.uk by Angus Fox, Multizone Limited is licenced using the GNU General Public Licence. This Licence, the GNU General Public Licence Version 3 or later (gpl-3.0+) is the most widely used free software licence and has a strong copyleft requirement. When distributing derived works, the source code of the work must be made available under the same licence.

Please respect the licences and dont use the name of this site or our company to promote derived products without written consent. I mean, why would you? You're not us!

Amazon Associate
As an Amazon Associate we earn from qualifying purchases.
Logo
Our Logo Image is by Freepik. We chose it because its an M and also the letter A twice - and that represents us.
Graphics
Our images representing user experience and interface design are from Freepik here and here and here and here and here.