diff --git a/.mokogit/workflows/issue-branch.yml b/.mokogit/workflows/issue-branch.yml index 1620720..7c89df8 100644 --- a/.mokogit/workflows/issue-branch.yml +++ b/.mokogit/workflows/issue-branch.yml @@ -5,7 +5,7 @@ # FILE INFORMATION # DEFGROUP: MokoGIT.Workflow # INGROUP: MokoCLI.Automation -# VERSION: 02.29.11 +# VERSION: 02.30.04 # BRIEF: Auto-create feature branch when an issue is opened name: "Universal: Issue Branch" diff --git a/CHANGELOG.md b/CHANGELOG.md index 520d645..3d2a440 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,23 +8,26 @@ DEFGROUP: Joomla.Template.Site INGROUP: MokoOnyx.Documentation PATH: ./CHANGELOG.md - VERSION: 02.29.11 + VERSION: 02.30.04 BRIEF: Changelog file documenting version history of MokoOnyx --> -# Changelog — MokoOnyx (VERSION: 02.29.11) +# Changelog — MokoOnyx (VERSION: 02.30.04) ## [Unreleased] ### Added - Accessible GDPR cookie-consent banner (opt-in via template settings): a `role="dialog"` banner with focus trap, Escape-to-decline, `aria-live` status, and `localStorage` persistence. Blocks Google Analytics / Tag Manager via Consent Mode (`analytics_storage` defaults to `denied` until the visitor accepts) and can be reopened from any `[data-cookie-open]` control. Optional privacy-policy link. - Tabbed user profile edit and registration screens: `com_users` fieldsets are grouped into Bootstrap tabs via the shared `layouts/mokoonyx/profile-tabset` layout (Account, Basic Settings, Passkey Login, Multi-factor Authentication, plus any plugin-contributed fieldsets such as MokoSuiteCRM / MokoSuiteCommunity) +- Header background theming controls: new `--header-background-position`, `--header-background-opacity`, and `--header-background-filter` variables let each theme place, fade, and colour-treat the header image independently. The image renders on a `.container-header::before` pseudo-element so `--header-background-opacity` fades only the artwork, not the logo or menu. ### Changed - Drawer menu links now follow the drawer's own foreground colour (`--offcanvas-color`) instead of the header navbar link colour, so they adapt to the active theme +- Header background now uses the branding `header-background.svg` in both themes (`cover`, `position: bottom`, `0.35` opacity). Dark theme inverts the monochrome artwork via `filter: invert(1)`, mirroring the light treatment. Light and dark palettes are kept in sync across their standard and custom (`source/templates/*.custom.css`) files. ### Fixed - Extensions Manager now shows the template as **"Template - MokoOnyx"** (Type - Name standard): added the `MOKOONYX` sys.ini key that Joomla's `Text::_($item->name)` actually resolves (uppercased element name). The manifest `` stays `mokoonyx` (it is the element/folder, so it must not change). - Drawer menu links were invisible (white-on-white) in the light theme; they now render correctly in both light and dark themes +- Light theme palette was missing the `--color-active` variable that the dark palette defined; added it so all four theme files (light/dark × standard/custom) declare an identical variable set ### Removed - Retired the right drawer entirely: the `drawer-right` template position, its toggle button, offcanvas markup, the `drawerRightIcon` parameter, and the associated CSS / JS / RTL rules. On update, any modules still assigned to `drawer-right` are automatically moved to the `sidebar-right` position diff --git a/SECURITY.md b/SECURITY.md index 461688b..6994402 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -10,7 +10,7 @@ INGROUP: MokoOnyx.Governance REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx FILE: SECURITY.md - VERSION: 02.29.11 + VERSION: 02.30.04 BRIEF: Security policy and vulnerability reporting process for MokoOnyx. PATH: /SECURITY.md NOTE: This policy is process oriented and does not replace secure engineering practices. diff --git a/codeception.yml b/codeception.yml deleted file mode 100644 index f1ebe4e..0000000 --- a/codeception.yml +++ /dev/null @@ -1,34 +0,0 @@ -namespace: Tests -paths: - tests: tests - output: tests/_output - data: tests/_data - support: tests/_support - envs: tests/_envs -settings: - shuffle: false - lint: true - colors: true - memory_limit: 1024M -coverage: - enabled: true - include: - - src/* - exclude: - - src/vendor/* - - src/media/* - - src/language/* -extensions: - enabled: - - Codeception\Extension\RunFailed -params: - - env -modules: - config: - Db: - dsn: 'mysql:host=localhost;dbname=joomla_test' - user: 'root' - password: '' - dump: tests/_data/dump.sql - populate: true - cleanup: true diff --git a/source/.build-trigger b/source/.build-trigger deleted file mode 100644 index 6a8610f..0000000 --- a/source/.build-trigger +++ /dev/null @@ -1 +0,0 @@ -Sat May 23 23:50:00 CDT 2026 diff --git a/source/html/layouts/joomla/module/card.php b/source/html/layouts/joomla/module/card.php index f1cbd5f..a6a4a53 100644 --- a/source/html/layouts/joomla/module/card.php +++ b/source/html/layouts/joomla/module/card.php @@ -10,7 +10,7 @@ * INGROUP: MokoOnyx * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx * PATH: /html/layouts/joomla/module/card.php - * VERSION: 02.29.11 + * VERSION: 02.30.04 * BRIEF: Custom card module chrome — renders module titles for all modules */ diff --git a/source/html/layouts/mokoonyx/article-metadata.php b/source/html/layouts/mokoonyx/article-metadata.php index f240524..40eb45b 100644 --- a/source/html/layouts/mokoonyx/article-metadata.php +++ b/source/html/layouts/mokoonyx/article-metadata.php @@ -11,7 +11,7 @@ * INGROUP: MokoOnyx.Layouts * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx * PATH: /src/html/layouts/mokoonyx/article-metadata.php - * VERSION: 02.29.11 + * VERSION: 02.30.04 * BRIEF: Article metadata footer layout -- renders jcfields grouped by field group */ diff --git a/source/media/css/a11y-high-contrast.css b/source/media/css/a11y-high-contrast.css index 6210b3b..d87f1c5 100644 --- a/source/media/css/a11y-high-contrast.css +++ b/source/media/css/a11y-high-contrast.css @@ -10,7 +10,7 @@ * INGROUP: MokoOnyx.Accessibility * REPO: https://git.mokoconsulting.tech/MokoConsulting/MokoOnyx * PATH: ./media/css/a11y-high-contrast.css - * VERSION: 02.29.11 + * VERSION: 02.30.04 * BRIEF: High-contrast stylesheet for accessibility toolbar */ diff --git a/source/media/css/template.css b/source/media/css/template.css index dfdc466..b04717d 100644 --- a/source/media/css/template.css +++ b/source/media/css/template.css @@ -14222,14 +14222,34 @@ fieldset>* { } .container-header { + position: relative; z-index: 100; background-color: var(--header-background-color, #adadad); - background-image: var(--header-background-image, url('../../../../../../media/templates/site/mokoonyx/images/bg.svg')); - background-size: var(--header-background-size, auto); - background-repeat: var(--header-background-repeat, repeat); box-shadow: 0 5px 5px hsla(0, 0%, 0%, 0.03) inset; } +/* + * Header background IMAGE lives on this pseudo-element, not on .container-header + * itself, so --header-background-opacity fades ONLY the image. Setting opacity on + * .container-header directly would also fade the logo, menu and all other content. + * Layer order: solid --header-background-color (element bg, back) < faded image + * (this pseudo, z-index -1) < header content (normal flow, front). + */ +.container-header::before { + content: ""; + position: absolute; + inset: 0; + z-index: -1; + background-image: var(--header-background-image, url('../../../../../../media/templates/site/mokoonyx/images/header-background.svg')); + background-size: var(--header-background-size, cover); + background-repeat: var(--header-background-repeat, repeat); + background-position: var(--header-background-position, center); + background-attachment: var(--header-background-attachment, fixed); + opacity: var(--header-background-opacity, 1); + filter: var(--header-background-filter, none); + pointer-events: none; +} + /* Sticky header: override z-index to stay above all content */ .container-header.sticky-top { z-index: 1020; diff --git a/source/media/css/theme/dark.standard.css b/source/media/css/theme/dark.standard.css index ef8d5d3..e310b28 100644 --- a/source/media/css/theme/dark.standard.css +++ b/source/media/css/theme/dark.standard.css @@ -211,10 +211,13 @@ color-scheme: dark; /* ===== HEADER BACKGROUND ===== */ --header-background-color: #1a1f2b; ---header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/bg.svg'); +--header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/header-background.svg'); --header-background-attachment: fixed; --header-background-repeat: repeat; ---header-background-size: auto; +--header-background-size: cover; +--header-background-position: bottom; +--header-background-opacity: 0.35; +--header-background-filter: invert(1); /* ===== CONTAINER BACKGROUNDS ===== */ diff --git a/source/media/css/theme/light.standard.css b/source/media/css/theme/light.standard.css index 56eb4ca..7d57396 100644 --- a/source/media/css/theme/light.standard.css +++ b/source/media/css/theme/light.standard.css @@ -181,6 +181,7 @@ color-scheme: light; /* ===== LINKS ===== */ --color-link: #224FAA; --color-hover: var(--accent-color-primary); +--color-active: var(--mainmenu-nav-link-color); --link-color: #224faa; --link-color-rgb: 34, 79, 170; --link-decoration: underline; @@ -209,11 +210,14 @@ color-scheme: light; /* ===== HEADER BACKGROUND ===== */ ---header-background-color: #adadad; ---header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/bg.svg'); +--header-background-color: #dfdfdf; +--header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/header-background.svg'); --header-background-attachment: fixed; --header-background-repeat: repeat; ---header-background-size: auto; +--header-background-size: cover; +--header-background-position: bottom; +--header-background-opacity: 0.35; +--header-background-filter: none; /* ===== CONTAINER BACKGROUNDS ===== */ diff --git a/source/media/images/header-background.svg b/source/media/images/header-background.svg new file mode 100644 index 0000000..ba453e0 --- /dev/null +++ b/source/media/images/header-background.svg @@ -0,0 +1,233 @@ + + + +image/svg+xml diff --git a/source/templateDetails.xml b/source/templateDetails.xml index 029c80c..af40e57 100644 --- a/source/templateDetails.xml +++ b/source/templateDetails.xml @@ -35,7 +35,7 @@ mokoonyx - 02.29.11 + 02.30.04 script.php 2026-05-16 Jonathan Miller || Moko Consulting diff --git a/source/templates/dark.custom.css b/source/templates/dark.custom.css index 74ef859..d92a369 100644 --- a/source/templates/dark.custom.css +++ b/source/templates/dark.custom.css @@ -211,10 +211,13 @@ color-scheme: dark; /* ===== HEADER BACKGROUND ===== */ --header-background-color: #1a1f2b; ---header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/bg.svg'); +--header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/header-background.svg'); --header-background-attachment: fixed; --header-background-repeat: repeat; ---header-background-size: auto; +--header-background-size: cover; +--header-background-position: bottom; +--header-background-opacity: 0.35; +--header-background-filter: invert(1); /* ===== CONTAINER BACKGROUNDS ===== */ diff --git a/source/templates/light.custom.css b/source/templates/light.custom.css index 5935ef4..9ddd07d 100644 --- a/source/templates/light.custom.css +++ b/source/templates/light.custom.css @@ -181,6 +181,7 @@ color-scheme: light; /* ===== LINKS ===== */ --color-link: #224FAA; --color-hover: var(--accent-color-primary); +--color-active: var(--mainmenu-nav-link-color); --link-color: #224faa; --link-color-rgb: 34, 79, 170; --link-decoration: underline; @@ -209,11 +210,14 @@ color-scheme: light; /* ===== HEADER BACKGROUND ===== */ ---header-background-color: #adadad; ---header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/bg.svg'); +--header-background-color: #dfdfdf; +--header-background-image: url('../../../../../../media/templates/site/mokoonyx/images/header-background.svg'); --header-background-attachment: fixed; --header-background-repeat: repeat; ---header-background-size: auto; +--header-background-size: cover; +--header-background-position: bottom; +--header-background-opacity: 0.35; +--header-background-filter: none; /* ===== CONTAINER BACKGROUNDS ===== */