From b4e1705cea40922a21d09fc10f6492af75514af6 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 28 Jan 2026 03:50:36 +0000
Subject: [PATCH 1/7] Initial plan
--
2.49.1
From 6bdc19642f18727cc54544113d056cc2f2ae0771 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 28 Jan 2026 03:57:35 +0000
Subject: [PATCH 2/7] Add missing CSS variables to colors_standard.css files
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
src/media/css/colors/dark/colors_standard.css | 298 ++++++++++++++++++
.../css/colors/light/colors_standard.css | 294 +++++++++++++++++
2 files changed, 592 insertions(+)
diff --git a/src/media/css/colors/dark/colors_standard.css b/src/media/css/colors/dark/colors_standard.css
index 9876df2..1ee9146 100644
--- a/src/media/css/colors/dark/colors_standard.css
+++ b/src/media/css/colors/dark/colors_standard.css
@@ -248,6 +248,304 @@
--form-valid-border-color: #78d694;
--form-invalid-color: #ff8e86;
--form-invalid-border-color: #ff8e86;
+
+ /* Missing variables from template.css - Added for compatibility */
+ --_fa-family: var(--fa-family, var(--fa-style-family, "Font Awesome 7 Free"));
+ --accordion-active-bg: #2b323b;
+ --accordion-active-color: #c7ccff;
+ --accordion-bg: var(--body-color);
+ --accordion-body-padding-x: 1.25rem;
+ --accordion-body-padding-y: 1rem;
+ --accordion-border-color: var(--border-color);
+ --accordion-border-radius: 0.25rem;
+ --accordion-border-width: 1px;
+ --accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23c7ccff'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ --accordion-btn-bg: var(--accordion-bg);
+ --accordion-btn-color: var(--body-color);
+ --accordion-btn-focus-border-color: #5472ff;
+ --accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(84, 114, 255, 0.6);
+ --accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23e6ebf1'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ --accordion-btn-icon-transform: rotate(-180deg);
+ --accordion-btn-icon-transition: transform 0.2s ease-in-out;
+ --accordion-btn-icon-width: 1.25rem;
+ --accordion-btn-padding-x: 1.25rem;
+ --accordion-btn-padding-y: 1rem;
+ --accordion-color: var(--body-color);
+ --accordion-inner-border-radius: calc(0.25rem - 1px);
+ --accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
+ --alert-bg: #2b323b;
+ --alert-border: 1px solid var(--alert-border-color);
+ --alert-border-color: #36404a;
+ --alert-border-radius: 0.25rem;
+ --alert-color: var(--body-color);
+ --alert-margin-bottom: 1rem;
+ --alert-padding-x: 1rem;
+ --alert-padding-y: 1rem;
+ --aspect-ratio: 42.8571428571%;
+ --backdrop-bg: hsl(0, 0%, 0%);
+ --backdrop-opacity: 0.5;
+ --backdrop-zindex: 1040;
+ --badge-border-radius: 0.25rem;
+ --badge-color: var(--body-color);
+ --badge-font-size: 0.75em;
+ --badge-font-weight: 700;
+ --badge-padding-x: 0.65em;
+ --badge-padding-y: 0.35em;
+ --bg-opacity: 1;
+ --black-rgb: 0, 0, 0;
+ --body-text-align: left;
+ --border-opacity: 1;
+ --border-radius-sxl: .5rem;
+ --breadcrumb-bg: ;
+ --breadcrumb-border-radius: ;
+ --breadcrumb-divider: "/";
+ --breadcrumb-divider-color: var(--secondary);
+ --breadcrumb-font-size: 1rem;
+ --breadcrumb-item-active-color: var(--link-color);
+ --breadcrumb-item-padding-x: 0.5rem;
+ --breadcrumb-margin-bottom: 1rem;
+ --breadcrumb-padding-x: 0;
+ --breadcrumb-padding-y: 0;
+ --bs-body-bg: var(--body-bg);
+ --bs-border-radius: var(--border-radius);
+ --btn-active-shadow-rgb: 84, 114, 255;
+ --btn-disabled-bg: var(--primary);
+ --btn-focus-bg: transparent;
+ --btn-focus-border-color: transparent;
+ --btn-focus-color: var(--btn-color);
+ --card-bg: var(--body-bg);
+ --card-border-color: var(--border-color);
+ --card-border-radius: var(--border-radius);
+ --card-border-width: var(--border-width);
+ --card-cap-bg: rgba(255, 255, 255, 0.03);
+ --card-cap-color: inherit;
+ --card-cap-padding-x: 1rem;
+ --card-cap-padding-y: 0.5rem;
+ --card-color: inherit;
+ --card-group-margin: 0.75rem;
+ --card-height: auto;
+ --card-img-overlay-padding: 1rem;
+ --card-inner-border-radius: calc(var(--border-radius) - var(--border-width));
+ --card-spacer-x: 1rem;
+ --card-spacer-y: 1rem;
+ --card-title-spacer-y: 0.5rem;
+ --color-active: var(--mainmenu-nav-link-color);
+ --color-brand: var(--color-primary);
+ --container-below-topbar-background-repeat: var(--container-below-topbar-bg-repeat);
+ --container-below-topbar-bg-color: ;
+ --container-bottom-a-background-repeat: var(--container-bottom-a-bg-repeat);
+ --container-bottom-b-background-repeat: var(--container-bottom-b-bg-repeat);
+ --container-sidebar-background-repeat: var(--container-sidebar-bg-repeat);
+ --container-top-a-background-repeat: var(--container-top-a-bg-repeat);
+ --container-top-b-background-repeat: var(--container-top-b-bg-repeat);
+ --dropdown-bg: var(--dark);
+ --dropdown-border-color: var(--border-color-translucent);
+ --dropdown-border-radius: 0.25rem;
+ --dropdown-border-width: 1px;
+ --dropdown-color: var(--body-color);
+ --dropdown-divider-bg: var(--border-color-translucent);
+ --dropdown-divider-margin-y: 0.5rem;
+ --dropdown-font-size: 1rem;
+ --dropdown-header-color: var(--secondary);
+ --dropdown-header-padding-x: 1rem;
+ --dropdown-header-padding-y: 0.5rem;
+ --dropdown-item-padding-x: 1rem;
+ --dropdown-item-padding-y: 0.25rem;
+ --dropdown-link-active-bg: var(--primary);
+ --dropdown-link-active-color: var(--body-color);
+ --dropdown-link-color: var(--body-color);
+ --dropdown-link-disabled-color: var(--secondary);
+ --dropdown-min-width: 10rem;
+ --dropdown-padding-x: 0;
+ --dropdown-padding-y: 0.5rem;
+ --dropdown-spacer: 0.125rem;
+ --dropdown-zindex: 1000;
+ --fa-display: inline-block;
+ --fa-family: var(--fa-style-family, "Font Awesome 7 Free");
+ --fa-style: 900;
+ --fa-style-family: "Font Awesome 7 Free";
+ --fa-width: 1.25em;
+ --font-family-body: var(--body-font-family);
+ --font-family-headings: var(--body-font-family);
+ --font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ --font-weight-headings: 700;
+ --font-weight-normal: 400;
+ --gab-blue: #6fb7ff;
+ --gab-gray1: #222831;
+ --gab-gray2: #2b323b;
+ --gab-gray3: #36404a;
+ --gab-green: #78d694;
+ --gab-orange: #ff9c4d;
+ --gab-red: #ff7a73;
+ --gutter-x: 3rem;
+ --gutter-y: 3rem;
+ --hue: 220;
+ --list-group-action-active-bg: var(--primary-bg-subtle);
+ --list-group-action-active-color: var(--emphasis-color);
+ --list-group-action-color: var(--body-color);
+ --list-group-active-bg: var(--primary);
+ --list-group-active-border-color: var(--primary);
+ --list-group-active-color: var(--emphasis-color);
+ --list-group-bg: var(--body-bg);
+ --list-group-border-color: var(--border-color);
+ --list-group-border-radius: 0.25rem;
+ --list-group-border-width: 1px;
+ --list-group-color: var(--body-color);
+ --list-group-disabled-bg: var(--body-bg);
+ --list-group-disabled-color: var(--secondary);
+ --list-group-item-padding-x: 1rem;
+ --list-group-item-padding-y: 0.5rem;
+ --modal-bg: var(--body-bg);
+ --modal-border-color: var(--border-color-translucent);
+ --modal-border-radius: 0.3rem;
+ --modal-border-width: 1px;
+ --modal-color: ;
+ --modal-footer-bg: ;
+ --modal-footer-border-color: var(--border-color);
+ --modal-footer-border-width: 1px;
+ --modal-footer-gap: 0.5rem;
+ --modal-header-border-color: var(--border-color);
+ --modal-header-border-width: 1px;
+ --modal-header-padding: 1rem 1rem;
+ --modal-header-padding-x: 1rem;
+ --modal-header-padding-y: 1rem;
+ --modal-inner-border-radius: calc(0.3rem - 1px);
+ --modal-margin: 1.75rem;
+ --modal-padding: 1rem;
+ --modal-title-line-height: 1.5;
+ --modal-width: 1140px;
+ --modal-zindex: 1050;
+ --nav-link-active-color: var(--link-active-color);
+ --nav-link-color: var(--link-color);
+ --nav-link-disabled-color: var(--secondary);
+ --nav-link-font-size: 1rem;
+ --nav-link-font-weight: ;
+ --nav-link-padding-x: 1rem;
+ --nav-link-padding-y: 0.5rem;
+ --nav-pills-border-radius: 0.25rem;
+ --nav-pills-link-active-bg: var(--primary);
+ --nav-pills-link-active-color: var(--emphasis-color);
+ --nav-tabs-border-color: var(--border-color);
+ --nav-tabs-border-radius: 0.25rem;
+ --nav-tabs-border-width: 1px;
+ --nav-tabs-link-active-bg: var(--body-bg);
+ --nav-tabs-link-active-border-color: var(--border-color) var(--border-color) var(--body-bg);
+ --nav-tabs-link-active-color: var(--emphasis-color);
+ --navbar-active-color: var(--link-active-color);
+ --navbar-brand-active-color: var(--link-active-color);
+ --navbar-brand-color: var(--body-color);
+ --navbar-brand-font-size: 1.25rem;
+ --navbar-brand-margin-end: 1rem;
+ --navbar-brand-padding-y: 0.3125rem;
+ --navbar-color: var(--body-color);
+ --navbar-nav-link-padding-x: 0.5rem;
+ --navbar-padding-x: 1rem;
+ --navbar-padding-y: 0.5rem;
+ --navbar-toggler-font-size: 1.25rem;
+ --navbar-toggler-padding-x: 0.75rem;
+ --navbar-toggler-padding-y: 0.25rem;
+ --navbar-toggler-transition: box-shadow 0.15s ease-in-out;
+ --offcanvas-bg: var(--body-bg);
+ --offcanvas-border-color: var(--border-color-translucent);
+ --offcanvas-border-width: 0;
+ --offcanvas-color: ;
+ --offcanvas-height: auto;
+ --offcanvas-padding-x: 1rem;
+ --offcanvas-padding-y: 1rem;
+ --offcanvas-width: 400px;
+ --offcanvas-zindex: 1045;
+ --padding-x: 0.25rem;
+ --padding-y: 0.25rem;
+ --pagination-active-bg: var(--primary);
+ --pagination-active-border-color: var(--primary);
+ --pagination-active-color: var(--emphasis-color);
+ --pagination-bg: var(--body-bg);
+ --pagination-border-color: var(--border-color);
+ --pagination-border-radius: 0.2rem;
+ --pagination-border-width: 1px;
+ --pagination-color: var(--link-color);
+ --pagination-disabled-bg: var(--body-bg);
+ --pagination-disabled-border-color: var(--border-color);
+ --pagination-disabled-color: var(--secondary);
+ --pagination-focus-bg: var(--secondary-bg);
+ --pagination-focus-box-shadow: 0 0 0 0.25rem rgba(84, 114, 255, 0.6);
+ --pagination-focus-color: var(--link-active-color);
+ --pagination-font-size: 0.875rem;
+ --pagination-padding-x: 0.5rem;
+ --pagination-padding-y: 0.25rem;
+ --popover-arrow-border: var(--popover-border-color);
+ --popover-arrow-height: 0.5rem;
+ --popover-arrow-width: 1rem;
+ --popover-bg: var(--body-bg);
+ --popover-body-color: var(--body-color);
+ --popover-body-padding-x: 1rem;
+ --popover-body-padding-y: 1rem;
+ --popover-border-color: var(--border-color-translucent);
+ --popover-border-radius: 0.3rem;
+ --popover-border-width: 1px;
+ --popover-font-size: 0.875rem;
+ --popover-header-bg: var(--secondary-bg);
+ --popover-header-color: ;
+ --popover-header-font-size: 1rem;
+ --popover-header-padding-x: 1rem;
+ --popover-header-padding-y: 0.5rem;
+ --popover-inner-border-radius: calc(0.3rem - 1px);
+ --popover-max-width: 276px;
+ --popover-zindex: 1060;
+ --progress-bar-bg: var(--primary);
+ --progress-bar-color: var(--emphasis-color);
+ --progress-bar-transition: width 0.6s ease;
+ --progress-bg: var(--secondary-bg);
+ --progress-border-radius: 0.25rem;
+ --progress-font-size: 0.75rem;
+ --progress-height: 1rem;
+ --scroll-height: 75vh;
+ --spinner-animation-name: spinner-grow;
+ --spinner-animation-speed: 1.5s;
+ --spinner-border-width: 0.2em;
+ --spinner-height: 1rem;
+ --spinner-vertical-align: -0.125em;
+ --spinner-width: 1rem;
+ --subhead-btn-accent: #5472ff;
+ --table-accent-bg: var(--table-active-bg);
+ --table-active-bg: var(--secondary-bg);
+ --table-active-color: var(--emphasis-color);
+ --table-bg: var(--body-bg);
+ --table-border-color: var(--border-color);
+ --table-color: var(--body-color);
+ --table-striped-bg: var(--secondary-bg);
+ --table-striped-color: var(--body-color);
+ --template-bg-dark-80: hsl(var(--hue), 40%, 20%);
+ --template-bg-light: var(--body-bg);
+ --text-opacity: 1;
+ --toast-bg: rgba(21, 27, 34, 0.85);
+ --toast-border-color: var(--border-color-translucent);
+ --toast-border-radius: 0.25rem;
+ --toast-border-width: 1px;
+ --toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+ --toast-color: ;
+ --toast-font-size: 0.875rem;
+ --toast-header-bg: rgba(21, 27, 34, 0.85);
+ --toast-header-border-color: var(--border-color);
+ --toast-header-color: var(--secondary-text-emphasis);
+ --toast-max-width: 350px;
+ --toast-padding-x: 0.75rem;
+ --toast-padding-y: 0.5rem;
+ --toast-spacing: 1em;
+ --toast-zindex: 1090;
+ --tooltip-arrow-height: 0.4rem;
+ --tooltip-arrow-width: 0.8rem;
+ --tooltip-bg: hsl(0, 0%, 0%);
+ --tooltip-border-radius: 0.25rem;
+ --tooltip-color: var(--emphasis-color);
+ --tooltip-font-size: 0.875rem;
+ --tooltip-margin: ;
+ --tooltip-max-width: 200px;
+ --tooltip-opacity: 0.9;
+ --tooltip-padding-x: 0.5rem;
+ --tooltip-padding-y: 0.25rem;
+ --tooltip-zindex: 1070;
+ --white-rgb: 255, 255, 255;
}
.btn {
diff --git a/src/media/css/colors/light/colors_standard.css b/src/media/css/colors/light/colors_standard.css
index c9daa6c..1256ab7 100644
--- a/src/media/css/colors/light/colors_standard.css
+++ b/src/media/css/colors/light/colors_standard.css
@@ -221,6 +221,300 @@
--form-valid-border-color: #448344;
--form-invalid-color: #a51f18;
--form-invalid-border-color: #a51f18;
+
+ /* Missing variables from template.css - Added for compatibility */
+ --_fa-family: var(--fa-family, var(--fa-style-family, "Font Awesome 7 Free"));
+ --accordion-active-bg: #e7eaee;
+ --accordion-active-color: #0f244d;
+ --accordion-bg: var(--body-color);
+ --accordion-body-padding-x: 1.25rem;
+ --accordion-body-padding-y: 1rem;
+ --accordion-border-color: var(--border-color);
+ --accordion-border-radius: 0.25rem;
+ --accordion-border-width: 1px;
+ --accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230f244d'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ --accordion-btn-bg: var(--accordion-bg);
+ --accordion-btn-color: hsl(210, 11%, 15%);
+ --accordion-btn-focus-border-color: #8894aa;
+ --accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(1, 1, 86, 0.25);
+ --accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='hsl%28210, 11%, 15%%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ --accordion-btn-icon-transform: rotate(-180deg);
+ --accordion-btn-icon-transition: transform 0.2s ease-in-out;
+ --accordion-btn-icon-width: 1.25rem;
+ --accordion-btn-padding-x: 1.25rem;
+ --accordion-btn-padding-y: 1rem;
+ --accordion-color: hsl(210, 11%, 15%);
+ --accordion-inner-border-radius: calc(0.25rem - 1px);
+ --accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
+ --alert-bg: #d7d8d9;
+ --alert-border: 1px solid var(--alert-border-color);
+ --alert-border-color: #c2c4c6;
+ --alert-border-radius: 0.25rem;
+ --alert-color: #202327;
+ --alert-margin-bottom: 1rem;
+ --alert-padding-x: 1rem;
+ --alert-padding-y: 1rem;
+ --aspect-ratio: 42.8571428571%;
+ --backdrop-bg: hsl(0, 0%, 0%);
+ --backdrop-opacity: 0.5;
+ --backdrop-zindex: 1040;
+ --badge-border-radius: 0.25rem;
+ --badge-color: var(--body-color);
+ --badge-font-size: 0.75em;
+ --badge-font-weight: 700;
+ --badge-padding-x: 0.65em;
+ --badge-padding-y: 0.35em;
+ --bg-opacity: 1;
+ --body-text-align: left;
+ --border-opacity: 1;
+ --border-radius-sxl: .5rem;
+ --breadcrumb-bg: ;
+ --breadcrumb-border-radius: ;
+ --breadcrumb-divider: "/";
+ --breadcrumb-divider-color: hsl(210, 7%, 46%);
+ --breadcrumb-font-size: 1rem;
+ --breadcrumb-item-active-color: var(--link-color);
+ --breadcrumb-item-padding-x: 0.5rem;
+ --breadcrumb-margin-bottom: 1rem;
+ --breadcrumb-padding-x: 0;
+ --breadcrumb-padding-y: 0;
+ --bs-body-bg: var(--body-bg);
+ --bs-border-radius: var(--border-radius);
+ --btn-active-shadow-rgb: 1, 1, 86;
+ --btn-focus-bg: transparent;
+ --btn-focus-border-color: transparent;
+ --btn-focus-color: var(--btn-color);
+ --card-bg: var(--body-bg);
+ --card-border-color: var(--border-color);
+ --card-border-radius: var(--border-radius);
+ --card-border-width: var(--border-width);
+ --card-cap-bg: rgba(0, 0, 0, 0.03);
+ --card-cap-color: inherit;
+ --card-cap-padding-x: 1rem;
+ --card-cap-padding-y: 0.5rem;
+ --card-color: inherit;
+ --card-group-margin: 0.75rem;
+ --card-height: auto;
+ --card-img-overlay-padding: 1rem;
+ --card-inner-border-radius: calc(var(--border-radius) - var(--border-width));
+ --card-spacer-x: 1rem;
+ --card-spacer-y: 1rem;
+ --card-title-spacer-y: 0.5rem;
+ --color-active: var(--color-hover);
+ --color-brand: var(--color-primary);
+ --container-below-topbar-background-repeat: var(--container-below-topbar-bg-repeat);
+ --container-below-topbar-bg-color: ;
+ --container-bottom-a-background-repeat: var(--container-bottom-a-bg-repeat);
+ --container-bottom-b-background-repeat: var(--container-bottom-b-bg-repeat);
+ --container-sidebar-background-repeat: var(--container-sidebar-bg-repeat);
+ --container-top-a-background-repeat: var(--container-top-a-bg-repeat);
+ --container-top-b-background-repeat: var(--container-top-b-bg-repeat);
+ --dropdown-bg: hsl(210, 10%, 23%);
+ --dropdown-border-color: var(--border-color-translucent);
+ --dropdown-border-radius: 0.25rem;
+ --dropdown-border-width: 1px;
+ --dropdown-color: hsl(210, 14%, 89%);
+ --dropdown-divider-bg: var(--border-color-translucent);
+ --dropdown-divider-margin-y: 0.5rem;
+ --dropdown-font-size: 1rem;
+ --dropdown-header-color: hsl(210, 11%, 71%);
+ --dropdown-header-padding-x: 1rem;
+ --dropdown-header-padding-y: 0.5rem;
+ --dropdown-item-padding-x: 1rem;
+ --dropdown-item-padding-y: 0.25rem;
+ --dropdown-link-active-bg: hsl(240, 98%, 17%);
+ --dropdown-link-active-color: var(--body-color);
+ --dropdown-link-color: hsl(210, 14%, 89%);
+ --dropdown-link-disabled-color: hsl(210, 11%, 71%);
+ --dropdown-min-width: 10rem;
+ --dropdown-padding-x: 0;
+ --dropdown-padding-y: 0.5rem;
+ --dropdown-spacer: 0.125rem;
+ --dropdown-zindex: 1000;
+ --fa-display: inline-block;
+ --fa-family: var(--fa-style-family, "Font Awesome 7 Free");
+ --fa-style: 900;
+ --fa-style-family: "Font Awesome 7 Free";
+ --fa-width: 1.25em;
+ --font-family-body: var(--body-font-family);
+ --font-family-headings: var(--body-font-family);
+ --font-weight-headings: 700;
+ --font-weight-normal: 400;
+ --gab-blue: #0066cc;
+ --gab-gray1: #f5f5f5;
+ --gab-gray2: #e0e0e0;
+ --gab-gray3: #bdbdbd;
+ --gab-green: #4caf50;
+ --gab-orange: #ff9800;
+ --gab-red: #f44336;
+ --gutter-x: 3rem;
+ --gutter-y: 3rem;
+ --hue: 220;
+ --list-group-action-active-bg: hsl(210, 16%, 93%);
+ --list-group-action-active-color: hsl(210, 11%, 15%);
+ --list-group-action-color: hsl(210, 9%, 31%);
+ --list-group-active-bg: hsl(240, 98%, 17%);
+ --list-group-active-border-color: hsl(240, 98%, 17%);
+ --list-group-active-color: var(--body-color);
+ --list-group-bg: var(--body-color);
+ --list-group-border-color: rgba(0, 0, 0, 0.125);
+ --list-group-border-radius: 0.25rem;
+ --list-group-border-width: 1px;
+ --list-group-color: hsl(210, 11%, 15%);
+ --list-group-disabled-bg: var(--body-color);
+ --list-group-disabled-color: hsl(210, 7%, 46%);
+ --list-group-item-padding-x: 1rem;
+ --list-group-item-padding-y: 0.5rem;
+ --modal-bg: var(--body-color);
+ --modal-border-color: var(--border-color-translucent);
+ --modal-border-radius: 0.3rem;
+ --modal-border-width: 1px;
+ --modal-color: ;
+ --modal-footer-bg: ;
+ --modal-footer-border-color: var(--border-color);
+ --modal-footer-border-width: 1px;
+ --modal-footer-gap: 0.5rem;
+ --modal-header-border-color: var(--border-color);
+ --modal-header-border-width: 1px;
+ --modal-header-padding: 1rem 1rem;
+ --modal-header-padding-x: 1rem;
+ --modal-header-padding-y: 1rem;
+ --modal-inner-border-radius: calc(0.3rem - 1px);
+ --modal-margin: 1.75rem;
+ --modal-padding: 1rem;
+ --modal-title-line-height: 1.5;
+ --modal-width: 1140px;
+ --modal-zindex: 1050;
+ --nav-link-active-color: var(--link-active-color);
+ --nav-link-color: var(--link-color);
+ --nav-link-disabled-color: hsl(210, 7%, 46%);
+ --nav-link-font-size: 1rem;
+ --nav-link-font-weight: ;
+ --nav-link-padding-x: 1rem;
+ --nav-link-padding-y: 0.5rem;
+ --nav-pills-border-radius: 0.25rem;
+ --nav-pills-link-active-bg: hsl(240, 98%, 17%);
+ --nav-pills-link-active-color: var(--body-color);
+ --nav-tabs-border-color: hsl(210, 14%, 89%);
+ --nav-tabs-border-radius: 0.25rem;
+ --nav-tabs-border-width: 1px;
+ --nav-tabs-link-active-bg: var(--body-color);
+ --nav-tabs-link-active-border-color: hsl(210, 14%, 89%) hsl(210, 14%, 89%) var(--body-color);
+ --nav-tabs-link-active-color: hsl(210, 9%, 31%);
+ --navbar-active-color: var(--link-active-color);
+ --navbar-brand-active-color: var(--link-active-color);
+ --navbar-brand-color: var(--body-color);
+ --navbar-brand-font-size: 1.25rem;
+ --navbar-brand-margin-end: 1rem;
+ --navbar-brand-padding-y: 0.3125rem;
+ --navbar-color: var(--body-color);
+ --navbar-nav-link-padding-x: 0.5rem;
+ --navbar-padding-x: 1rem;
+ --navbar-padding-y: 0.5rem;
+ --navbar-toggler-font-size: 1.25rem;
+ --navbar-toggler-padding-x: 0.75rem;
+ --navbar-toggler-padding-y: 0.25rem;
+ --navbar-toggler-transition: box-shadow 0.15s ease-in-out;
+ --offcanvas-bg: var(--body-color);
+ --offcanvas-border-color: var(--border-color-translucent);
+ --offcanvas-border-width: 0;
+ --offcanvas-color: ;
+ --offcanvas-height: auto;
+ --offcanvas-padding-x: 1rem;
+ --offcanvas-padding-y: 1rem;
+ --offcanvas-width: 400px;
+ --offcanvas-zindex: 1045;
+ --padding-x: 0.25rem;
+ --padding-y: 0.25rem;
+ --pagination-active-bg: hsl(240, 98%, 17%);
+ --pagination-active-border-color: hsl(240, 98%, 17%);
+ --pagination-active-color: var(--body-color);
+ --pagination-bg: var(--body-color);
+ --pagination-border-color: hsl(210, 14%, 89%);
+ --pagination-border-radius: 0.2rem;
+ --pagination-border-width: 1px;
+ --pagination-color: var(--link-color);
+ --pagination-disabled-bg: var(--body-color);
+ --pagination-disabled-border-color: hsl(210, 14%, 89%);
+ --pagination-disabled-color: hsl(210, 7%, 46%);
+ --pagination-focus-bg: hsl(210, 16%, 93%);
+ --pagination-focus-box-shadow: 0 0 0 0.25rem rgba(1, 1, 86, 0.25);
+ --pagination-focus-color: var(--link-active-color);
+ --pagination-font-size: 0.875rem;
+ --pagination-padding-x: 0.5rem;
+ --pagination-padding-y: 0.25rem;
+ --popover-arrow-border: var(--popover-border-color);
+ --popover-arrow-height: 0.5rem;
+ --popover-arrow-width: 1rem;
+ --popover-bg: var(--body-color);
+ --popover-body-color: hsl(210, 11%, 15%);
+ --popover-body-padding-x: 1rem;
+ --popover-body-padding-y: 1rem;
+ --popover-border-color: var(--border-color-translucent);
+ --popover-border-radius: 0.3rem;
+ --popover-border-width: 1px;
+ --popover-font-size: 0.875rem;
+ --popover-header-bg: #f0f0f0;
+ --popover-header-color: ;
+ --popover-header-font-size: 1rem;
+ --popover-header-padding-x: 1rem;
+ --popover-header-padding-y: 0.5rem;
+ --popover-inner-border-radius: calc(0.3rem - 1px);
+ --popover-max-width: 276px;
+ --popover-zindex: 1060;
+ --progress-bar-bg: hsl(240, 98%, 17%);
+ --progress-bar-color: var(--body-color);
+ --progress-bar-transition: width 0.6s ease;
+ --progress-bg: hsl(210, 16%, 93%);
+ --progress-border-radius: 0.25rem;
+ --progress-font-size: 0.75rem;
+ --progress-height: 1rem;
+ --scroll-height: 75vh;
+ --spinner-animation-name: spinner-grow;
+ --spinner-animation-speed: 1.5s;
+ --spinner-border-width: 0.2em;
+ --spinner-height: 1rem;
+ --spinner-vertical-align: -0.125em;
+ --spinner-width: 1rem;
+ --subhead-btn-accent: #132f53;
+ --table-accent-bg: var(--table-active-bg);
+ --table-active-bg: #444a4f;
+ --table-active-color: var(--body-color);
+ --table-bg: hsl(210, 10%, 23%);
+ --table-border-color: #494f54;
+ --table-color: var(--body-color);
+ --table-striped-bg: #3f454b;
+ --table-striped-color: var(--body-color);
+ --template-bg-dark-80: hsl(var(--hue), 40%, 20%);
+ --template-bg-light: #f0f4fb;
+ --text-opacity: 1;
+ --toast-bg: rgba(255, 255, 255, 0.85);
+ --toast-border-color: var(--border-color-translucent);
+ --toast-border-radius: 0.25rem;
+ --toast-border-width: 1px;
+ --toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+ --toast-color: ;
+ --toast-font-size: 0.875rem;
+ --toast-header-bg: rgba(255, 255, 255, 0.85);
+ --toast-header-border-color: rgba(0, 0, 0, 0.05);
+ --toast-header-color: hsl(210, 7%, 46%);
+ --toast-max-width: 350px;
+ --toast-padding-x: 0.75rem;
+ --toast-padding-y: 0.5rem;
+ --toast-spacing: 1em;
+ --toast-zindex: 1090;
+ --tooltip-arrow-height: 0.4rem;
+ --tooltip-arrow-width: 0.8rem;
+ --tooltip-bg: hsl(0, 0%, 0%);
+ --tooltip-border-radius: 0.25rem;
+ --tooltip-color: var(--body-color);
+ --tooltip-font-size: 0.875rem;
+ --tooltip-margin: ;
+ --tooltip-max-width: 200px;
+ --tooltip-opacity: 0.9;
+ --tooltip-padding-x: 0.5rem;
+ --tooltip-padding-y: 0.25rem;
+ --tooltip-zindex: 1070;
}
.btn {
--
2.49.1
From 666e1c318f5973b15678d4eaf314e6e9a3be5f0d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 28 Jan 2026 04:00:48 +0000
Subject: [PATCH 3/7] Remove default logo path from templateDetails.xml
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
src/templates/templateDetails.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/templates/templateDetails.xml b/src/templates/templateDetails.xml
index 9aa2481..a011596 100644
--- a/src/templates/templateDetails.xml
+++ b/src/templates/templateDetails.xml
@@ -206,7 +206,7 @@
-
+
--
2.49.1
From 3d708119051d90a303b82b59cd852e3075ba61d8 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 28 Jan 2026 04:06:12 +0000
Subject: [PATCH 4/7] Optimize CSS variables: consolidate form validation and
muted colors
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
src/media/css/colors/dark/colors_standard.css | 4 ++--
src/media/css/colors/light/colors_standard.css | 10 +++++-----
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/media/css/colors/dark/colors_standard.css b/src/media/css/colors/dark/colors_standard.css
index 1ee9146..f95e635 100644
--- a/src/media/css/colors/dark/colors_standard.css
+++ b/src/media/css/colors/dark/colors_standard.css
@@ -244,8 +244,8 @@
--focus-ring-opacity: .6;
--focus-ring-color: #5472ff66;
- --form-valid-color: #78d694;
- --form-valid-border-color: #78d694;
+ --form-valid-color: var(--green);
+ --form-valid-border-color: var(--green);
--form-invalid-color: #ff8e86;
--form-invalid-border-color: #ff8e86;
diff --git a/src/media/css/colors/light/colors_standard.css b/src/media/css/colors/light/colors_standard.css
index 1256ab7..9543867 100644
--- a/src/media/css/colors/light/colors_standard.css
+++ b/src/media/css/colors/light/colors_standard.css
@@ -94,7 +94,7 @@
--nav-bg-color: var(--color-link);
--border: 5px;
- --muted-color: #6d757e;
+ --muted-color: var(--secondary);
--hr-color: var(--border-color, #dfe3e7);
--link-active-color: var(--link-color);
--code-color-ink: var(--code-color, #e93f8e);
@@ -217,10 +217,10 @@
--focus-ring-width: .25rem;
--focus-ring-opacity: .25;
--focus-ring-color: #01015640;
- --form-valid-color: #448344;
- --form-valid-border-color: #448344;
- --form-invalid-color: #a51f18;
- --form-invalid-border-color: #a51f18;
+ --form-valid-color: var(--success);
+ --form-valid-border-color: var(--success);
+ --form-invalid-color: var(--danger);
+ --form-invalid-border-color: var(--danger);
/* Missing variables from template.css - Added for compatibility */
--_fa-family: var(--fa-family, var(--fa-style-family, "Font Awesome 7 Free"));
--
2.49.1
From 651671b63aa557cf32fff96b362f81c9c072ac2d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 28 Jan 2026 04:07:50 +0000
Subject: [PATCH 5/7] Consolidate primary color and body color references in
light theme
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
.../css/colors/light/colors_standard.css | 42 +++++++++----------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/src/media/css/colors/light/colors_standard.css b/src/media/css/colors/light/colors_standard.css
index 9543867..ac6a85c 100644
--- a/src/media/css/colors/light/colors_standard.css
+++ b/src/media/css/colors/light/colors_standard.css
@@ -126,7 +126,7 @@
--gray-600: #6d757e;
--gray-700: #484f56;
--gray-800: #353b41;
- --gray-900: #22262a;
+ --gray-900: var(--body-color);
--primary: #010156;
--secondary: #6d757e;
--success: #448344;
@@ -197,7 +197,7 @@
--link-hover-color: #424077;
--link-hover-color-rgb: 66, 64, 119;
--code-color: #e93f8e;
- --highlight-color: #22262a;
+ --highlight-color: var(--body-color);
--highlight-bg: #fbeea8;
--border-width: 1px;
--border-style: solid;
@@ -322,7 +322,7 @@
--dropdown-header-padding-y: 0.5rem;
--dropdown-item-padding-x: 1rem;
--dropdown-item-padding-y: 0.25rem;
- --dropdown-link-active-bg: hsl(240, 98%, 17%);
+ --dropdown-link-active-bg: var(--primary);
--dropdown-link-active-color: var(--body-color);
--dropdown-link-color: hsl(210, 14%, 89%);
--dropdown-link-disabled-color: hsl(210, 11%, 71%);
@@ -353,8 +353,8 @@
--list-group-action-active-bg: hsl(210, 16%, 93%);
--list-group-action-active-color: hsl(210, 11%, 15%);
--list-group-action-color: hsl(210, 9%, 31%);
- --list-group-active-bg: hsl(240, 98%, 17%);
- --list-group-active-border-color: hsl(240, 98%, 17%);
+ --list-group-active-bg: var(--primary);
+ --list-group-active-border-color: var(--primary);
--list-group-active-color: var(--body-color);
--list-group-bg: var(--body-color);
--list-group-border-color: rgba(0, 0, 0, 0.125);
@@ -393,7 +393,7 @@
--nav-link-padding-x: 1rem;
--nav-link-padding-y: 0.5rem;
--nav-pills-border-radius: 0.25rem;
- --nav-pills-link-active-bg: hsl(240, 98%, 17%);
+ --nav-pills-link-active-bg: var(--primary);
--nav-pills-link-active-color: var(--body-color);
--nav-tabs-border-color: hsl(210, 14%, 89%);
--nav-tabs-border-radius: 0.25rem;
@@ -426,8 +426,8 @@
--offcanvas-zindex: 1045;
--padding-x: 0.25rem;
--padding-y: 0.25rem;
- --pagination-active-bg: hsl(240, 98%, 17%);
- --pagination-active-border-color: hsl(240, 98%, 17%);
+ --pagination-active-bg: var(--primary);
+ --pagination-active-border-color: var(--primary);
--pagination-active-color: var(--body-color);
--pagination-bg: var(--body-color);
--pagination-border-color: hsl(210, 14%, 89%);
@@ -462,7 +462,7 @@
--popover-inner-border-radius: calc(0.3rem - 1px);
--popover-max-width: 276px;
--popover-zindex: 1060;
- --progress-bar-bg: hsl(240, 98%, 17%);
+ --progress-bar-bg: var(--primary);
--progress-bar-color: var(--body-color);
--progress-bar-transition: width 0.6s ease;
--progress-bg: hsl(210, 16%, 93%);
@@ -560,8 +560,8 @@
.btn-primary {
--btn-color: hsl(0, 0%, 100%);
- --btn-bg: hsl(240, 98%, 17%);
- --btn-border-color: hsl(240, 98%, 17%);
+ --btn-bg: var(--primary);
+ --btn-border-color: var(--primary);
--btn-hover-color: hsl(0, 0%, 100%);
--btn-hover-bg: #010149;
--btn-hover-border-color: #010145;
@@ -571,8 +571,8 @@
--btn-active-border-color: #010141;
--btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
--btn-disabled-color: hsl(0, 0%, 100%);
- --btn-disabled-bg: hsl(240, 98%, 17%);
- --btn-disabled-border-color: hsl(240, 98%, 17%);
+ --btn-disabled-bg: var(--primary);
+ --btn-disabled-border-color: var(--primary);
}
.btn-secondary {
@@ -695,19 +695,19 @@
}
.btn-outline-primary {
- --btn-color: hsl(240, 98%, 17%);
- --btn-border-color: hsl(240, 98%, 17%);
+ --btn-color: var(--primary);
+ --btn-border-color: var(--primary);
--btn-hover-color: hsl(0, 0%, 100%);
- --btn-hover-bg: hsl(240, 98%, 17%);
- --btn-hover-border-color: hsl(240, 98%, 17%);
+ --btn-hover-bg: var(--primary);
+ --btn-hover-border-color: var(--primary);
--btn-focus-shadow-rgb: 1, 1, 86;
--btn-active-color: hsl(0, 0%, 100%);
- --btn-active-bg: hsl(240, 98%, 17%);
- --btn-active-border-color: hsl(240, 98%, 17%);
+ --btn-active-bg: var(--primary);
+ --btn-active-border-color: var(--primary);
--btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- --btn-disabled-color: hsl(240, 98%, 17%);
+ --btn-disabled-color: var(--primary);
--btn-disabled-bg: transparent;
- --btn-disabled-border-color: hsl(240, 98%, 17%);
+ --btn-disabled-border-color: var(--primary);
--gradient: none;
}
--
2.49.1
From f59d6112753950c755865d88319c8806edeb27da Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 28 Jan 2026 04:13:35 +0000
Subject: [PATCH 6/7] Update version to 03.07.00 and add installation cleanup
script
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
.../css/colors/dark/colors_alternative.css | 2 +-
src/media/css/colors/dark/colors_standard.css | 2 +-
.../css/colors/light/colors_alternative.css | 2 +-
.../css/colors/light/colors_standard.css | 2 +-
src/media/css/editor.css | 2 +-
.../css/system/searchtools/searchtools.css | 2 +-
src/media/css/template-rtl.css | 2 +-
src/media/css/template.css | 2 +-
src/media/js/darkmode-toggle.js | 2 +-
src/media/js/mod_menu/menu-metismenu-es5.js | 2 +-
src/media/js/mod_menu/menu-metismenu.js | 2 +-
src/media/js/template.js | 2 +-
src/media/js/theme-init.js | 2 +-
src/media/js/user.js | 2 +-
src/templates/component.php | 2 +-
src/templates/custom.php | 2 +-
src/templates/error.php | 2 +-
.../html/com_content/article/toc-left.php | 2 +-
.../html/com_content/article/toc-right.php | 2 +-
src/templates/index.php | 2 +-
src/templates/joomla.asset.json | 2 +-
src/templates/offline.php | 2 +-
src/templates/script.php | 324 ++++++++++++++++++
src/templates/templateDetails.xml | 4 +-
updates.xml | 4 +-
25 files changed, 350 insertions(+), 26 deletions(-)
create mode 100644 src/templates/script.php
diff --git a/src/media/css/colors/dark/colors_alternative.css b/src/media/css/colors/dark/colors_alternative.css
index 988b0a9..6545599 100644
--- a/src/media/css/colors/dark/colors_alternative.css
+++ b/src/media/css/colors/dark/colors_alternative.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/global/dark/colors_alternative.css
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Alternative dark mode color definitions for Moko-Cassiopeia template
*/
diff --git a/src/media/css/colors/dark/colors_standard.css b/src/media/css/colors/dark/colors_standard.css
index f95e635..0ee864c 100644
--- a/src/media/css/colors/dark/colors_standard.css
+++ b/src/media/css/colors/dark/colors_standard.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/global/dark/colors_standard.css
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Standard dark mode color definitions for Moko-Cassiopeia template
*/
diff --git a/src/media/css/colors/light/colors_alternative.css b/src/media/css/colors/light/colors_alternative.css
index 49b5675..efb3765 100644
--- a/src/media/css/colors/light/colors_alternative.css
+++ b/src/media/css/colors/light/colors_alternative.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/global/light/colors_alternative.css
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Alternative light mode color definitions for Moko-Cassiopeia template
*/
diff --git a/src/media/css/colors/light/colors_standard.css b/src/media/css/colors/light/colors_standard.css
index ac6a85c..735c2c1 100644
--- a/src/media/css/colors/light/colors_standard.css
+++ b/src/media/css/colors/light/colors_standard.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/global/light/colors_standard.css
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Standard light mode color definitions for Moko-Cassiopeia template
*/
diff --git a/src/media/css/editor.css b/src/media/css/editor.css
index 426b3a5..5ff97fc 100644
--- a/src/media/css/editor.css
+++ b/src/media/css/editor.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/editor.css
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Stylesheet for Joomla editor content within Moko-Cassiopeia template
*/
diff --git a/src/media/css/system/searchtools/searchtools.css b/src/media/css/system/searchtools/searchtools.css
index 33281d5..da3ccef 100644
--- a/src/media/css/system/searchtools/searchtools.css
+++ b/src/media/css/system/searchtools/searchtools.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/system/searchtools/searchtools.css
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Stylesheet for Joomla search tools integration in Moko-Cassiopeia template
*/
diff --git a/src/media/css/template-rtl.css b/src/media/css/template-rtl.css
index 55e8898..35d5797 100644
--- a/src/media/css/template-rtl.css
+++ b/src/media/css/template-rtl.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/template-rtl.css
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Right-to-left (RTL) layout stylesheet for Moko-Cassiopeia template
*/
diff --git a/src/media/css/template.css b/src/media/css/template.css
index e025344..c28b77d 100644
--- a/src/media/css/template.css
+++ b/src/media/css/template.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/template.css
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Main stylesheet providing layout, typography, and component styles for Moko-Cassiopeia
*/
diff --git a/src/media/js/darkmode-toggle.js b/src/media/js/darkmode-toggle.js
index 84b8281..664d66d 100644
--- a/src/media/js/darkmode-toggle.js
+++ b/src/media/js/darkmode-toggle.js
@@ -8,7 +8,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/js/darkmode-toggle.js
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: JavaScript logic for dark mode toggle functionality in Moko-Cassiopeia
*/
diff --git a/src/media/js/mod_menu/menu-metismenu-es5.js b/src/media/js/mod_menu/menu-metismenu-es5.js
index e17e87a..7b621ee 100644
--- a/src/media/js/mod_menu/menu-metismenu-es5.js
+++ b/src/media/js/mod_menu/menu-metismenu-es5.js
@@ -8,7 +8,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu-es5.js
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: ES5-compatible MetisMenu script for Joomla mod_menu in Moko-Cassiopeia
*/
diff --git a/src/media/js/mod_menu/menu-metismenu.js b/src/media/js/mod_menu/menu-metismenu.js
index 4133a5a..66f0bbf 100644
--- a/src/media/js/mod_menu/menu-metismenu.js
+++ b/src/media/js/mod_menu/menu-metismenu.js
@@ -8,7 +8,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu.js
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Modern MetisMenu script for Joomla mod_menu in Moko-Cassiopeia
*/
diff --git a/src/media/js/template.js b/src/media/js/template.js
index 0d0639f..c748445 100644
--- a/src/media/js/template.js
+++ b/src/media/js/template.js
@@ -8,7 +8,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/js/template.js
- VERSION: 03.05.00
+ VERSION: 03.07.00
BRIEF: Core JavaScript utilities and behaviors for Moko-Cassiopeia template
*/
!function(a){"use strict";window.Toc={helpers:{findOrFilter:function(e,t){var n=e.find(t);return e.filter(t).add(n).filter(":not([data-toc-skip])")},generateUniqueIdBase:function(e){return a(e).text().trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,64).replace(/^-+|-+$/gm,"").toLowerCase()||e.tagName.toLowerCase()},generateUniqueId:function(e){for(var t=this.generateUniqueIdBase(e),n=0;;n++){var r=t;if(0')},createChildNavList:function(e){var t=this.createNavList();return e.append(t),t},generateNavEl:function(e,t){var n=a('');n.attr("href","#"+e),n.text(t);var r=a("");return r.append(n),r},generateNavItem:function(e){var t=this.generateAnchor(e),n=a(e),r=n.data("toc-text")||n.text();return this.generateNavEl(t,r)},getTopLevel:function(e){for(var t=1;t<=6;t++){if(1
+ * @license GNU General Public License version 3 or later; see LICENSE.txt
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ * FILE INFORMATION
+ * DEFGROUP: Joomla.Template.Site
+ * INGROUP: Moko-Cassiopeia
+ * PATH: ./templates/moko-cassiopeia/script.php
+ * VERSION: 03.07.00
+ * BRIEF: Installation and update script for Moko-Cassiopeia template
+ */
+
+defined('_JEXEC') or die;
+
+use Joomla\CMS\Factory;
+use Joomla\CMS\Filesystem\File;
+use Joomla\CMS\Filesystem\Folder;
+use Joomla\CMS\Installer\InstallerAdapter;
+use Joomla\CMS\Installer\InstallerScriptInterface;
+use Joomla\CMS\Language\Text;
+use Joomla\CMS\Log\Log;
+
+/**
+ * Installation script for Moko-Cassiopeia template
+ *
+ * @since 03.07.00
+ */
+return new class () implements InstallerScriptInterface {
+ /**
+ * The template's minimum supported Joomla version
+ *
+ * @var string
+ * @since 03.07.00
+ */
+ private $minimumJoomla = '4.0';
+
+ /**
+ * The template's minimum supported PHP version
+ *
+ * @var string
+ * @since 03.07.00
+ */
+ private $minimumPhp = '7.4';
+
+ /**
+ * List of files to be removed during update (old/deprecated files)
+ *
+ * @var array
+ * @since 03.07.00
+ */
+ private $filesToRemove = [
+ // Add deprecated files here as needed
+ // Example: 'media/templates/site/moko-cassiopeia/js/old-script.js',
+ ];
+
+ /**
+ * List of folders to be removed during update (old/deprecated folders)
+ *
+ * @var array
+ * @since 03.07.00
+ */
+ private $foldersToRemove = [
+ // Add deprecated folders here as needed
+ // Example: 'media/templates/site/moko-cassiopeia/old-assets',
+ ];
+
+ /**
+ * Function called before extension installation/update/removal procedure commences
+ *
+ * @param string $type The type of change (install or discover_install, update, uninstall)
+ * @param InstallerAdapter $parent The class calling this method
+ *
+ * @return boolean True on success
+ *
+ * @since 03.07.00
+ */
+ public function preflight(string $type, InstallerAdapter $parent): bool
+ {
+ // Check minimum Joomla version
+ if (version_compare(JVERSION, $this->minimumJoomla, '<')) {
+ Factory::getApplication()->enqueueMessage(
+ sprintf(
+ Text::_('JLIB_INSTALLER_MINIMUM_JOOMLA'),
+ $this->minimumJoomla
+ ),
+ 'error'
+ );
+ return false;
+ }
+
+ // Check minimum PHP version
+ if (version_compare(PHP_VERSION, $this->minimumPhp, '<')) {
+ Factory::getApplication()->enqueueMessage(
+ sprintf(
+ Text::_('JLIB_INSTALLER_MINIMUM_PHP'),
+ $this->minimumPhp
+ ),
+ 'error'
+ );
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Function called after extension installation/update/removal procedure completes
+ *
+ * @param string $type The type of change (install or discover_install, update, uninstall)
+ * @param InstallerAdapter $parent The class calling this method
+ *
+ * @return boolean True on success
+ *
+ * @since 03.07.00
+ */
+ public function postflight(string $type, InstallerAdapter $parent): bool
+ {
+ // Only run cleanup on update
+ if ($type === 'update') {
+ $this->cleanupMediaFolder();
+ }
+
+ // Display success message
+ if ($type === 'install') {
+ Factory::getApplication()->enqueueMessage(
+ 'Moko-Cassiopeia template has been successfully installed!',
+ 'success'
+ );
+ } elseif ($type === 'update') {
+ Factory::getApplication()->enqueueMessage(
+ 'Moko-Cassiopeia template has been successfully updated to version 03.07.00!',
+ 'success'
+ );
+ }
+
+ return true;
+ }
+
+ /**
+ * Function called when extension is installed
+ *
+ * @param InstallerAdapter $parent The class calling this method
+ *
+ * @return boolean True on success
+ *
+ * @since 03.07.00
+ */
+ public function install(InstallerAdapter $parent): bool
+ {
+ return true;
+ }
+
+ /**
+ * Function called when extension is updated
+ *
+ * @param InstallerAdapter $parent The class calling this method
+ *
+ * @return boolean True on success
+ *
+ * @since 03.07.00
+ */
+ public function update(InstallerAdapter $parent): bool
+ {
+ return true;
+ }
+
+ /**
+ * Function called when extension is uninstalled
+ *
+ * @param InstallerAdapter $parent The class calling this method
+ *
+ * @return boolean True on success
+ *
+ * @since 03.07.00
+ */
+ public function uninstall(InstallerAdapter $parent): bool
+ {
+ return true;
+ }
+
+ /**
+ * Clean up the media folder by removing old and deprecated files
+ *
+ * @return void
+ *
+ * @since 03.07.00
+ */
+ private function cleanupMediaFolder(): void
+ {
+ $app = Factory::getApplication();
+ $mediaPath = JPATH_ROOT . '/media/templates/site/moko-cassiopeia';
+ $removedFiles = 0;
+ $removedFolders = 0;
+ $errors = [];
+
+ // Set up logging
+ Log::addLogger(
+ ['text_file' => 'moko_cassiopeia_cleanup.php'],
+ Log::ALL,
+ ['moko-cassiopeia-cleanup']
+ );
+
+ Log::add('Starting media folder cleanup', Log::INFO, 'moko-cassiopeia-cleanup');
+
+ // Remove deprecated files
+ foreach ($this->filesToRemove as $file) {
+ $filePath = JPATH_ROOT . '/' . $file;
+
+ if (File::exists($filePath)) {
+ try {
+ if (File::delete($filePath)) {
+ $removedFiles++;
+ Log::add("Removed file: {$file}", Log::INFO, 'moko-cassiopeia-cleanup');
+ } else {
+ $errors[] = "Failed to remove file: {$file}";
+ Log::add("Failed to remove file: {$file}", Log::WARNING, 'moko-cassiopeia-cleanup');
+ }
+ } catch (\Exception $e) {
+ $errors[] = "Error removing file {$file}: " . $e->getMessage();
+ Log::add("Error removing file {$file}: " . $e->getMessage(), Log::ERROR, 'moko-cassiopeia-cleanup');
+ }
+ }
+ }
+
+ // Remove deprecated folders
+ foreach ($this->foldersToRemove as $folder) {
+ $folderPath = JPATH_ROOT . '/' . $folder;
+
+ if (Folder::exists($folderPath)) {
+ try {
+ if (Folder::delete($folderPath)) {
+ $removedFolders++;
+ Log::add("Removed folder: {$folder}", Log::INFO, 'moko-cassiopeia-cleanup');
+ } else {
+ $errors[] = "Failed to remove folder: {$folder}";
+ Log::add("Failed to remove folder: {$folder}", Log::WARNING, 'moko-cassiopeia-cleanup');
+ }
+ } catch (\Exception $e) {
+ $errors[] = "Error removing folder {$folder}: " . $e->getMessage();
+ Log::add("Error removing folder {$folder}: " . $e->getMessage(), Log::ERROR, 'moko-cassiopeia-cleanup');
+ }
+ }
+ }
+
+ // Clean up empty directories in media folder
+ if (is_dir($mediaPath)) {
+ $this->removeEmptyDirectories($mediaPath);
+ }
+
+ // Display cleanup summary
+ if ($removedFiles > 0 || $removedFolders > 0) {
+ $message = sprintf(
+ 'Media folder cleanup: Removed %d file(s) and %d folder(s).',
+ $removedFiles,
+ $removedFolders
+ );
+ $app->enqueueMessage($message, 'info');
+ Log::add($message, Log::INFO, 'moko-cassiopeia-cleanup');
+ }
+
+ // Display errors if any
+ foreach ($errors as $error) {
+ $app->enqueueMessage($error, 'warning');
+ }
+
+ Log::add('Media folder cleanup completed', Log::INFO, 'moko-cassiopeia-cleanup');
+ }
+
+ /**
+ * Recursively remove empty directories
+ *
+ * @param string $path The directory path to check
+ *
+ * @return boolean True if directory was removed, false otherwise
+ *
+ * @since 03.07.00
+ */
+ private function removeEmptyDirectories(string $path): bool
+ {
+ if (!is_dir($path)) {
+ return false;
+ }
+
+ $empty = true;
+ $items = glob($path . '/{,.}*', GLOB_BRACE);
+
+ foreach ($items as $item) {
+ $basename = basename($item);
+
+ // Skip . and ..
+ if ($basename === '.' || $basename === '..') {
+ continue;
+ }
+
+ if (is_dir($item)) {
+ if (!$this->removeEmptyDirectories($item)) {
+ $empty = false;
+ }
+ } else {
+ $empty = false;
+ }
+ }
+
+ // Remove directory if it's empty
+ if ($empty && $path !== JPATH_ROOT . '/media/templates/site/moko-cassiopeia') {
+ try {
+ if (Folder::delete($path)) {
+ Log::add("Removed empty directory: {$path}", Log::INFO, 'moko-cassiopeia-cleanup');
+ return true;
+ }
+ } catch (\Exception $e) {
+ Log::add("Error removing empty directory {$path}: " . $e->getMessage(), Log::WARNING, 'moko-cassiopeia-cleanup');
+ }
+ }
+
+ return $empty;
+ }
+};
diff --git a/src/templates/templateDetails.xml b/src/templates/templateDetails.xml
index a011596..c0600eb 100644
--- a/src/templates/templateDetails.xml
+++ b/src/templates/templateDetails.xml
@@ -11,7 +11,7 @@
DEFGROUP: Joomla
INGROUP: Moko-Cassiopeia
PATH: templates/moko-cassiopeia/templateDetails.xml
- VERSION: 03.06.00
+ VERSION: 03.07.00
BRIEF: Template manifest XML file for Moko-Cassiopeia
=========================================================================
-->
@@ -22,7 +22,7 @@
moko-cassiopeia
- 03.06.00
+ 03.07.00
2025-12-23
Jonathan Miller || Moko Consulting
hello@mokoconsulting.tech
diff --git a/updates.xml b/updates.xml
index 91b0a15..5e7abe3 100644
--- a/updates.xml
+++ b/updates.xml
@@ -10,7 +10,7 @@
INGROUP: Moko-Cassiopeia
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
PATH: ./updates.xml
- VERSION: 03.06.00
+ VERSION: 03.07.00
BRIEF: Update manifest XML file for Moko-Cassiopeia
-->
@@ -22,7 +22,7 @@
template
site
- 03.06.00
+ 03.07.00
2025-12-12
Jonathan Miller || Moko Consulting
hello@mokoconsulting.tech
--
2.49.1
From 0a348a21f7d2b97056f87d2fb2996d074dd51873 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 28 Jan 2026 11:20:51 +0000
Subject: [PATCH 7/7] Bump version to 03.08.00 across all files
Co-authored-by: jmiller-moko <230051081+jmiller-moko@users.noreply.github.com>
---
.../css/colors/dark/colors_alternative.css | 2 +-
src/media/css/colors/dark/colors_standard.css | 2 +-
.../css/colors/light/colors_alternative.css | 2 +-
.../css/colors/light/colors_standard.css | 2 +-
src/media/css/editor.css | 2 +-
.../css/system/searchtools/searchtools.css | 2 +-
src/media/css/template-rtl.css | 2 +-
src/media/css/template.css | 2 +-
src/media/js/darkmode-toggle.js | 2 +-
src/media/js/mod_menu/menu-metismenu-es5.js | 2 +-
src/media/js/mod_menu/menu-metismenu.js | 2 +-
src/media/js/template.js | 2 +-
src/media/js/theme-init.js | 2 +-
src/media/js/user.js | 2 +-
src/templates/component.php | 2 +-
src/templates/custom.php | 2 +-
src/templates/error.php | 2 +-
.../html/com_content/article/toc-left.php | 2 +-
.../html/com_content/article/toc-right.php | 2 +-
src/templates/index.php | 2 +-
src/templates/joomla.asset.json | 2 +-
src/templates/offline.php | 2 +-
src/templates/script.php | 28 +++++++++----------
src/templates/templateDetails.xml | 4 +--
updates.xml | 4 +--
25 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/src/media/css/colors/dark/colors_alternative.css b/src/media/css/colors/dark/colors_alternative.css
index 6545599..652e0ec 100644
--- a/src/media/css/colors/dark/colors_alternative.css
+++ b/src/media/css/colors/dark/colors_alternative.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/global/dark/colors_alternative.css
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Alternative dark mode color definitions for Moko-Cassiopeia template
*/
diff --git a/src/media/css/colors/dark/colors_standard.css b/src/media/css/colors/dark/colors_standard.css
index 0ee864c..9b0a44b 100644
--- a/src/media/css/colors/dark/colors_standard.css
+++ b/src/media/css/colors/dark/colors_standard.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/global/dark/colors_standard.css
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Standard dark mode color definitions for Moko-Cassiopeia template
*/
diff --git a/src/media/css/colors/light/colors_alternative.css b/src/media/css/colors/light/colors_alternative.css
index efb3765..27253a4 100644
--- a/src/media/css/colors/light/colors_alternative.css
+++ b/src/media/css/colors/light/colors_alternative.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/global/light/colors_alternative.css
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Alternative light mode color definitions for Moko-Cassiopeia template
*/
diff --git a/src/media/css/colors/light/colors_standard.css b/src/media/css/colors/light/colors_standard.css
index 735c2c1..e2645b8 100644
--- a/src/media/css/colors/light/colors_standard.css
+++ b/src/media/css/colors/light/colors_standard.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/global/light/colors_standard.css
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Standard light mode color definitions for Moko-Cassiopeia template
*/
diff --git a/src/media/css/editor.css b/src/media/css/editor.css
index 5ff97fc..503b5ce 100644
--- a/src/media/css/editor.css
+++ b/src/media/css/editor.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/editor.css
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Stylesheet for Joomla editor content within Moko-Cassiopeia template
*/
diff --git a/src/media/css/system/searchtools/searchtools.css b/src/media/css/system/searchtools/searchtools.css
index da3ccef..beee4b1 100644
--- a/src/media/css/system/searchtools/searchtools.css
+++ b/src/media/css/system/searchtools/searchtools.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/system/searchtools/searchtools.css
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Stylesheet for Joomla search tools integration in Moko-Cassiopeia template
*/
diff --git a/src/media/css/template-rtl.css b/src/media/css/template-rtl.css
index 35d5797..d83191b 100644
--- a/src/media/css/template-rtl.css
+++ b/src/media/css/template-rtl.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/template-rtl.css
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Right-to-left (RTL) layout stylesheet for Moko-Cassiopeia template
*/
diff --git a/src/media/css/template.css b/src/media/css/template.css
index c28b77d..d8aa8b5 100644
--- a/src/media/css/template.css
+++ b/src/media/css/template.css
@@ -9,7 +9,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/css/template.css
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Main stylesheet providing layout, typography, and component styles for Moko-Cassiopeia
*/
diff --git a/src/media/js/darkmode-toggle.js b/src/media/js/darkmode-toggle.js
index 664d66d..56a6e85 100644
--- a/src/media/js/darkmode-toggle.js
+++ b/src/media/js/darkmode-toggle.js
@@ -8,7 +8,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/js/darkmode-toggle.js
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: JavaScript logic for dark mode toggle functionality in Moko-Cassiopeia
*/
diff --git a/src/media/js/mod_menu/menu-metismenu-es5.js b/src/media/js/mod_menu/menu-metismenu-es5.js
index 7b621ee..b483eba 100644
--- a/src/media/js/mod_menu/menu-metismenu-es5.js
+++ b/src/media/js/mod_menu/menu-metismenu-es5.js
@@ -8,7 +8,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu-es5.js
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: ES5-compatible MetisMenu script for Joomla mod_menu in Moko-Cassiopeia
*/
diff --git a/src/media/js/mod_menu/menu-metismenu.js b/src/media/js/mod_menu/menu-metismenu.js
index 66f0bbf..80a5804 100644
--- a/src/media/js/mod_menu/menu-metismenu.js
+++ b/src/media/js/mod_menu/menu-metismenu.js
@@ -8,7 +8,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu.js
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Modern MetisMenu script for Joomla mod_menu in Moko-Cassiopeia
*/
diff --git a/src/media/js/template.js b/src/media/js/template.js
index c748445..cce4c0a 100644
--- a/src/media/js/template.js
+++ b/src/media/js/template.js
@@ -8,7 +8,7 @@
DEFGROUP: Joomla.Template.Site
INGROUP: Moko-Cassiopeia
PATH: ./media/templates/site/moko-cassiopeia/js/template.js
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Core JavaScript utilities and behaviors for Moko-Cassiopeia template
*/
!function(a){"use strict";window.Toc={helpers:{findOrFilter:function(e,t){var n=e.find(t);return e.filter(t).add(n).filter(":not([data-toc-skip])")},generateUniqueIdBase:function(e){return a(e).text().trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,64).replace(/^-+|-+$/gm,"").toLowerCase()||e.tagName.toLowerCase()},generateUniqueId:function(e){for(var t=this.generateUniqueIdBase(e),n=0;;n++){var r=t;if(0')},createChildNavList:function(e){var t=this.createNavList();return e.append(t),t},generateNavEl:function(e,t){var n=a('');n.attr("href","#"+e),n.text(t);var r=a("");return r.append(n),r},generateNavItem:function(e){var t=this.generateAnchor(e),n=a(e),r=n.data("toc-text")||n.text();return this.generateNavEl(t,r)},getTopLevel:function(e){for(var t=1;t<=6;t++){if(1enqueueMessage(
- 'Moko-Cassiopeia template has been successfully updated to version 03.07.00!',
+ 'Moko-Cassiopeia template has been successfully updated to version 03.08.00!',
'success'
);
}
@@ -149,7 +149,7 @@ return new class () implements InstallerScriptInterface {
*
* @return boolean True on success
*
- * @since 03.07.00
+ * @since 03.08.00
*/
public function install(InstallerAdapter $parent): bool
{
@@ -163,7 +163,7 @@ return new class () implements InstallerScriptInterface {
*
* @return boolean True on success
*
- * @since 03.07.00
+ * @since 03.08.00
*/
public function update(InstallerAdapter $parent): bool
{
@@ -177,7 +177,7 @@ return new class () implements InstallerScriptInterface {
*
* @return boolean True on success
*
- * @since 03.07.00
+ * @since 03.08.00
*/
public function uninstall(InstallerAdapter $parent): bool
{
@@ -189,7 +189,7 @@ return new class () implements InstallerScriptInterface {
*
* @return void
*
- * @since 03.07.00
+ * @since 03.08.00
*/
private function cleanupMediaFolder(): void
{
@@ -279,7 +279,7 @@ return new class () implements InstallerScriptInterface {
*
* @return boolean True if directory was removed, false otherwise
*
- * @since 03.07.00
+ * @since 03.08.00
*/
private function removeEmptyDirectories(string $path): bool
{
diff --git a/src/templates/templateDetails.xml b/src/templates/templateDetails.xml
index c0600eb..bda2a3b 100644
--- a/src/templates/templateDetails.xml
+++ b/src/templates/templateDetails.xml
@@ -11,7 +11,7 @@
DEFGROUP: Joomla
INGROUP: Moko-Cassiopeia
PATH: templates/moko-cassiopeia/templateDetails.xml
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Template manifest XML file for Moko-Cassiopeia
=========================================================================
-->
@@ -22,7 +22,7 @@
moko-cassiopeia
- 03.07.00
+ 03.08.00
2025-12-23
Jonathan Miller || Moko Consulting
hello@mokoconsulting.tech
diff --git a/updates.xml b/updates.xml
index 5e7abe3..29a083c 100644
--- a/updates.xml
+++ b/updates.xml
@@ -10,7 +10,7 @@
INGROUP: Moko-Cassiopeia
REPO: https://github.com/mokoconsulting-tech/moko-cassiopeia
PATH: ./updates.xml
- VERSION: 03.07.00
+ VERSION: 03.08.00
BRIEF: Update manifest XML file for Moko-Cassiopeia
-->
@@ -22,7 +22,7 @@
template
site
- 03.07.00
+ 03.08.00
2025-12-12
Jonathan Miller || Moko Consulting
hello@mokoconsulting.tech
--
2.49.1