Hero variable system, CSS fallbacks, header cleanup, remove mobile overrides
- Hero card fully variable-driven: --hero-card-bg/color/overlay/border-radius/padding/max-width - Alternative hero variant: --hero-alt-card-* for secondary theme - Overlay bg-position and bg-size now customizable via variables - Mobile breakpoint: photo bg hidden, hero full-bleed on small screens - Added fallback values to 1365 var() calls in template.css - .btn --btn-bg changed from transparent to var(--body-bg) in dark/light themes - .offcanvas-header .btn-close gets background-color from overlay - Stripped file info headers (@package/DEFGROUP/VERSION) from 48 files, kept copyright/SPDX - Synced all theme variables across standard and custom templates - Removed 26 mobile.php layout overrides - Added *.py to .gitignore, card-border-radius fallback Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -164,6 +164,7 @@ phpmd-cache/
|
||||
# ============================================================
|
||||
# Python
|
||||
# ============================================================
|
||||
*.py
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*.pyc
|
||||
|
||||
@@ -1,112 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Community Builder
|
||||
* @subpackage com_comprofiler
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for Community Builder login view
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
$return = $this->return ?? '';
|
||||
$showRegisterLink = $this->showRegisterLink ?? true;
|
||||
$showLostPasswordLink = $this->showLostPasswordLink ?? true;
|
||||
?>
|
||||
|
||||
<div class="cb-login-responsive cb-component">
|
||||
<div class="cb-login__container">
|
||||
<div class="cb-login__header">
|
||||
<h1 class="cb-login__title">
|
||||
<?php echo Text::_('COM_COMPROFILER_LOGIN'); ?>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<form action="<?php echo Route::_('index.php?option=com_comprofiler&view=login'); ?>"
|
||||
method="post"
|
||||
class="cb-login__form"
|
||||
aria-label="<?php echo Text::_('COM_COMPROFILER_LOGIN_FORM'); ?>">
|
||||
|
||||
<div class="cb-login__field">
|
||||
<label for="cb-username" class="cb-login__label">
|
||||
<?php echo Text::_('COM_COMPROFILER_USERNAME'); ?>
|
||||
<span class="cb-login__required" aria-label="<?php echo Text::_('COM_COMPROFILER_REQUIRED'); ?>">*</span>
|
||||
</label>
|
||||
<input type="text"
|
||||
id="cb-username"
|
||||
name="username"
|
||||
class="cb-login__input"
|
||||
required
|
||||
aria-required="true"
|
||||
autocomplete="username"
|
||||
placeholder="<?php echo Text::_('COM_COMPROFILER_USERNAME'); ?>">
|
||||
</div>
|
||||
|
||||
<div class="cb-login__field">
|
||||
<label for="cb-password" class="cb-login__label">
|
||||
<?php echo Text::_('COM_COMPROFILER_PASSWORD'); ?>
|
||||
<span class="cb-login__required" aria-label="<?php echo Text::_('COM_COMPROFILER_REQUIRED'); ?>">*</span>
|
||||
</label>
|
||||
<input type="password"
|
||||
id="cb-password"
|
||||
name="passwd"
|
||||
class="cb-login__input"
|
||||
required
|
||||
aria-required="true"
|
||||
autocomplete="current-password"
|
||||
placeholder="<?php echo Text::_('COM_COMPROFILER_PASSWORD'); ?>">
|
||||
</div>
|
||||
|
||||
<?php if ($this->showRememberMe ?? true) : ?>
|
||||
<div class="cb-login__remember">
|
||||
<div class="form-check">
|
||||
<input type="checkbox"
|
||||
id="cb-remember"
|
||||
name="remember"
|
||||
class="form-check-input cb-login__remember-checkbox"
|
||||
value="yes">
|
||||
<label for="cb-remember" class="form-check-label cb-login__remember-label">
|
||||
<?php echo Text::_('COM_COMPROFILER_REMEMBER_ME'); ?>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="cb-login__actions">
|
||||
<button type="submit" class="cb-login__btn cb-login__btn--submit btn btn-primary">
|
||||
<span class="icon-lock" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_COMPROFILER_LOGIN'); ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="task" value="login">
|
||||
<input type="hidden" name="return" value="<?php echo htmlspecialchars($return, ENT_QUOTES, 'UTF-8'); ?>">
|
||||
<?php echo $this->token ?? ''; ?>
|
||||
</form>
|
||||
|
||||
<div class="cb-login__links">
|
||||
<?php if ($showRegisterLink) : ?>
|
||||
<div class="cb-login__link">
|
||||
<a href="<?php echo Route::_('index.php?option=com_comprofiler&view=registers'); ?>" class="cb-login__link-item">
|
||||
<span class="icon-user-plus" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_COMPROFILER_REGISTER_NEW_ACCOUNT'); ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($showLostPasswordLink) : ?>
|
||||
<div class="cb-login__link">
|
||||
<a href="<?php echo Route::_('index.php?option=com_comprofiler&view=lostpassword'); ?>" class="cb-login__link-item">
|
||||
<span class="icon-question" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_COMPROFILER_FORGOT_PASSWORD'); ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,136 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Community Builder
|
||||
* @subpackage com_comprofiler
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for Community Builder registration view
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
// Get form and fields
|
||||
$form = $this->form ?? null;
|
||||
$tabs = $this->tabs ?? null;
|
||||
?>
|
||||
|
||||
<div class="cb-register-responsive cb-component">
|
||||
<div class="cb-register__header">
|
||||
<h1 class="cb-register__title">
|
||||
<?php echo Text::_('COM_COMPROFILER_REGISTER'); ?>
|
||||
</h1>
|
||||
|
||||
<?php if ($this->introduction ?? null) : ?>
|
||||
<div class="cb-register__intro">
|
||||
<?php echo $this->introduction; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($form) : ?>
|
||||
<form action="<?php echo $this->action ?? ''; ?>"
|
||||
method="post"
|
||||
class="cb-register__form"
|
||||
enctype="multipart/form-data"
|
||||
aria-label="<?php echo Text::_('COM_COMPROFILER_REGISTRATION_FORM'); ?>">
|
||||
|
||||
<?php if ($tabs) : ?>
|
||||
<?php foreach ($tabs as $tab) : ?>
|
||||
<?php if (isset($tab->fields) && !empty($tab->fields)) : ?>
|
||||
<fieldset class="cb-register__fieldset">
|
||||
<?php if ($tab->title) : ?>
|
||||
<legend class="cb-register__legend">
|
||||
<?php echo htmlspecialchars($tab->title, ENT_QUOTES, 'UTF-8'); ?>
|
||||
</legend>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($tab->description) : ?>
|
||||
<div class="cb-register__tab-description">
|
||||
<?php echo $tab->description; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="cb-register__fields">
|
||||
<?php foreach ($tab->fields as $field) : ?>
|
||||
<div class="cb-register__field<?php echo $field->required ? ' cb-register__field--required' : ''; ?>">
|
||||
<label for="<?php echo htmlspecialchars($field->name, ENT_QUOTES, 'UTF-8'); ?>"
|
||||
class="cb-register__label">
|
||||
<?php echo htmlspecialchars($field->title, ENT_QUOTES, 'UTF-8'); ?>
|
||||
<?php if ($field->required) : ?>
|
||||
<span class="cb-register__required" aria-label="<?php echo Text::_('COM_COMPROFILER_REQUIRED'); ?>">*</span>
|
||||
<?php endif; ?>
|
||||
</label>
|
||||
|
||||
<?php if ($field->description) : ?>
|
||||
<div class="cb-register__field-description" id="<?php echo htmlspecialchars($field->name, ENT_QUOTES, 'UTF-8'); ?>-desc">
|
||||
<?php echo $field->description; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="cb-register__input-wrapper">
|
||||
<?php echo $field->input; ?>
|
||||
</div>
|
||||
|
||||
<?php if (isset($field->error) && $field->error) : ?>
|
||||
<div class="cb-register__error" role="alert">
|
||||
<?php echo $field->error; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</fieldset>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($this->showCaptcha ?? false) : ?>
|
||||
<div class="cb-register__captcha">
|
||||
<?php echo $this->captcha; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($this->showTerms ?? false) : ?>
|
||||
<div class="cb-register__terms">
|
||||
<div class="form-check">
|
||||
<input type="checkbox"
|
||||
id="cb-terms"
|
||||
name="agreedToTerms"
|
||||
class="form-check-input cb-register__terms-checkbox"
|
||||
required
|
||||
aria-required="true"
|
||||
aria-describedby="cb-terms-text">
|
||||
<label for="cb-terms" class="form-check-label cb-register__terms-label" id="cb-terms-text">
|
||||
<?php echo Text::_('COM_COMPROFILER_AGREE_TO_TERMS'); ?>
|
||||
<a href="<?php echo $this->termsUrl ?? ''; ?>" target="_blank" rel="noopener noreferrer">
|
||||
<?php echo Text::_('COM_COMPROFILER_TERMS_CONDITIONS'); ?>
|
||||
</a>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="cb-register__actions">
|
||||
<button type="submit" class="cb-register__btn cb-register__btn--submit btn btn-primary">
|
||||
<span class="icon-check" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_COMPROFILER_REGISTER_SUBMIT'); ?>
|
||||
</button>
|
||||
|
||||
<a href="<?php echo $this->loginUrl ?? ''; ?>" class="cb-register__btn cb-register__btn--cancel btn btn-secondary">
|
||||
<span class="icon-cancel" aria-hidden="true"></span>
|
||||
<?php echo Text::_('JCANCEL'); ?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<?php echo $this->token ?? ''; ?>
|
||||
</form>
|
||||
<?php else : ?>
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<?php echo Text::_('COM_COMPROFILER_REGISTRATION_NOT_AVAILABLE'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,100 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Community Builder
|
||||
* @subpackage com_comprofiler
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for Community Builder user profile view
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
// Get user object
|
||||
$user = $this->user ?? null;
|
||||
$tabs = $this->tabs ?? null;
|
||||
?>
|
||||
|
||||
<div class="cb-profile-responsive cb-component">
|
||||
<?php if ($user) : ?>
|
||||
<div class="cb-profile__header">
|
||||
<?php if ($user->getField('avatar', null, 'html', 'none', 'profile')) : ?>
|
||||
<div class="cb-profile__avatar">
|
||||
<?php echo $user->getField('avatar', null, 'html', 'none', 'profile'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="cb-profile__header-info">
|
||||
<h1 class="cb-profile__name">
|
||||
<?php echo htmlspecialchars($user->getField('formatname', null, 'html', 'none', 'profile'), ENT_QUOTES, 'UTF-8'); ?>
|
||||
</h1>
|
||||
|
||||
<?php if ($user->getField('onlinestatus', null, 'html', 'none', 'profile')) : ?>
|
||||
<div class="cb-profile__status">
|
||||
<?php echo $user->getField('onlinestatus', null, 'html', 'none', 'profile'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if ($tabs) : ?>
|
||||
<div class="cb-profile__tabs">
|
||||
<ul class="cb-profile__tabs-nav" role="tablist" aria-label="<?php echo Text::_('COM_COMPROFILER_PROFILE_TABS'); ?>">
|
||||
<?php foreach ($tabs as $tab) : ?>
|
||||
<?php if (isset($tab->fields) && !empty($tab->fields)) : ?>
|
||||
<li class="cb-profile__tab-item" role="presentation">
|
||||
<a href="#<?php echo htmlspecialchars($tab->id, ENT_QUOTES, 'UTF-8'); ?>"
|
||||
class="cb-profile__tab-link"
|
||||
role="tab"
|
||||
aria-controls="<?php echo htmlspecialchars($tab->id, ENT_QUOTES, 'UTF-8'); ?>"
|
||||
aria-selected="false">
|
||||
<?php echo htmlspecialchars($tab->title, ENT_QUOTES, 'UTF-8'); ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
|
||||
<div class="cb-profile__tabs-content">
|
||||
<?php foreach ($tabs as $tab) : ?>
|
||||
<?php if (isset($tab->fields) && !empty($tab->fields)) : ?>
|
||||
<div id="<?php echo htmlspecialchars($tab->id, ENT_QUOTES, 'UTF-8'); ?>"
|
||||
class="cb-profile__tab-pane"
|
||||
role="tabpanel"
|
||||
aria-labelledby="<?php echo htmlspecialchars($tab->id, ENT_QUOTES, 'UTF-8'); ?>-tab">
|
||||
|
||||
<?php if ($tab->description) : ?>
|
||||
<div class="cb-profile__tab-description">
|
||||
<?php echo $tab->description; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="cb-profile__fields">
|
||||
<?php foreach ($tab->fields as $field) : ?>
|
||||
<?php if ($field->value) : ?>
|
||||
<div class="cb-profile__field">
|
||||
<div class="cb-profile__field-label">
|
||||
<?php echo htmlspecialchars($field->title, ENT_QUOTES, 'UTF-8'); ?>
|
||||
</div>
|
||||
<div class="cb-profile__field-value">
|
||||
<?php echo $field->value; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
<div class="alert alert-warning" role="alert">
|
||||
<?php echo Text::_('COM_COMPROFILER_USER_NOT_FOUND'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,123 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Community Builder
|
||||
* @subpackage com_comprofiler
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for Community Builder users list view
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
// Get users list
|
||||
$users = $this->users ?? [];
|
||||
$pagination = $this->pagination ?? null;
|
||||
$search = $this->search ?? '';
|
||||
$listid = $this->listid ?? 0;
|
||||
?>
|
||||
|
||||
<div class="cb-userslist-responsive cb-component">
|
||||
<div class="cb-userslist__header">
|
||||
<h1 class="cb-userslist__title">
|
||||
<?php echo Text::_('COM_COMPROFILER_USERLIST'); ?>
|
||||
</h1>
|
||||
|
||||
<?php if ($this->showSearch ?? true) : ?>
|
||||
<div class="cb-userslist__search">
|
||||
<form action="<?php echo Route::_('index.php?option=com_comprofiler&view=userslist&listid=' . $listid); ?>"
|
||||
method="post"
|
||||
class="cb-userslist__search-form"
|
||||
role="search"
|
||||
aria-label="<?php echo Text::_('COM_COMPROFILER_SEARCH_USERS'); ?>">
|
||||
|
||||
<div class="cb-userslist__search-wrapper">
|
||||
<label for="cb-userslist-search" class="visually-hidden">
|
||||
<?php echo Text::_('COM_COMPROFILER_SEARCH'); ?>
|
||||
</label>
|
||||
<input type="search"
|
||||
id="cb-userslist-search"
|
||||
name="search"
|
||||
class="cb-userslist__search-input"
|
||||
placeholder="<?php echo Text::_('COM_COMPROFILER_SEARCH_USERS'); ?>"
|
||||
value="<?php echo htmlspecialchars($search, ENT_QUOTES, 'UTF-8'); ?>"
|
||||
aria-label="<?php echo Text::_('COM_COMPROFILER_SEARCH'); ?>">
|
||||
|
||||
<button type="submit"
|
||||
class="cb-userslist__search-btn btn btn-primary"
|
||||
aria-label="<?php echo Text::_('COM_COMPROFILER_SEARCH'); ?>">
|
||||
<span class="icon-search" aria-hidden="true"></span>
|
||||
<span class="cb-userslist__search-text"><?php echo Text::_('COM_COMPROFILER_SEARCH'); ?></span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($users)) : ?>
|
||||
<div class="cb-userslist__grid">
|
||||
<?php foreach ($users as $user) : ?>
|
||||
<div class="cb-userslist__user-card">
|
||||
<?php if ($user->getField('avatar', null, 'html', 'none', 'list')) : ?>
|
||||
<div class="cb-userslist__avatar">
|
||||
<a href="<?php echo $user->getField('canvas', null, 'html', 'none', 'profile'); ?>"
|
||||
aria-label="<?php echo Text::sprintf('COM_COMPROFILER_VIEW_PROFILE', htmlspecialchars($user->getField('formatname', null, 'html', 'none', 'list'), ENT_QUOTES, 'UTF-8')); ?>">
|
||||
<?php echo $user->getField('avatar', null, 'html', 'none', 'list'); ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="cb-userslist__user-info">
|
||||
<h3 class="cb-userslist__username">
|
||||
<a href="<?php echo $user->getField('canvas', null, 'html', 'none', 'profile'); ?>">
|
||||
<?php echo htmlspecialchars($user->getField('formatname', null, 'html', 'none', 'list'), ENT_QUOTES, 'UTF-8'); ?>
|
||||
</a>
|
||||
</h3>
|
||||
|
||||
<?php if ($user->getField('onlinestatus', null, 'html', 'none', 'list')) : ?>
|
||||
<div class="cb-userslist__status">
|
||||
<?php echo $user->getField('onlinestatus', null, 'html', 'none', 'list'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (isset($user->fields) && !empty($user->fields)) : ?>
|
||||
<div class="cb-userslist__fields">
|
||||
<?php foreach ($user->fields as $field) : ?>
|
||||
<?php if ($field->value) : ?>
|
||||
<div class="cb-userslist__field">
|
||||
<span class="cb-userslist__field-label"><?php echo htmlspecialchars($field->title, ENT_QUOTES, 'UTF-8'); ?>:</span>
|
||||
<span class="cb-userslist__field-value"><?php echo $field->value; ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="cb-userslist__actions">
|
||||
<a href="<?php echo $user->getField('canvas', null, 'html', 'none', 'profile'); ?>"
|
||||
class="cb-userslist__btn btn btn-primary btn-sm">
|
||||
<span class="icon-user" aria-hidden="true"></span>
|
||||
<?php echo Text::_('COM_COMPROFILER_VIEW_PROFILE'); ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($pagination) : ?>
|
||||
<div class="cb-userslist__pagination">
|
||||
<?php echo $pagination->getPagesLinks(); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
<div class="alert alert-info" role="alert">
|
||||
<?php echo Text::_('COM_COMPROFILER_NO_USERS_FOUND'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,17 +1,10 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage Templates.MokoCassiopeia
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 3 or later; see LICENSE.txt
|
||||
*
|
||||
* FILE INFORMATION
|
||||
* DEFGROUP: Joomla.Template.Site
|
||||
* INGROUP: MokoCassiopeia
|
||||
* PATH: ./templates/mokocassiopeia/html/com_content/article/toc-left.php
|
||||
* VERSION: 03.09.02
|
||||
* BRIEF: Article layout with table of contents on the left side using Bootstrap TOC
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
@@ -1,17 +1,10 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage Templates.MokoCassiopeia
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 3 or later; see LICENSE.txt
|
||||
*
|
||||
* FILE INFORMATION
|
||||
* DEFGROUP: Joomla.Template.Site
|
||||
* INGROUP: MokoCassiopeia
|
||||
* PATH: ./templates/mokocassiopeia/html/com_content/article/toc-right.php
|
||||
* VERSION: 03.09.02
|
||||
* BRIEF: Article layout with table of contents on the right side using Bootstrap TOC
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package JEM
|
||||
* @subpackage com_jem
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for JEM calendar view
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
$events = $this->rows ?? [];
|
||||
$date = $this->date ?? null;
|
||||
$year = $this->year ?? date('Y');
|
||||
$month = $this->month ?? date('m');
|
||||
?>
|
||||
|
||||
<div class="jem-calendar-responsive jem-component">
|
||||
<div class="jem-calendar__container">
|
||||
|
||||
<!-- Calendar Header -->
|
||||
<div class="jem-calendar__header">
|
||||
<h1 class="jem-calendar__title">
|
||||
<?php echo Text::_('COM_JEM_CALENDAR'); ?>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<!-- Calendar Navigation -->
|
||||
<div class="jem-calendar__navigation">
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=calendar&year=' . ($month == 1 ? $year - 1 : $year) . '&month=' . ($month == 1 ? 12 : $month - 1)); ?>"
|
||||
class="jem-calendar__nav-button jem-calendar__nav-prev"
|
||||
aria-label="<?php echo Text::_('COM_JEM_PREVIOUS_MONTH'); ?>">
|
||||
<span aria-hidden="true">‹</span>
|
||||
</a>
|
||||
|
||||
<h2 class="jem-calendar__current-month">
|
||||
<?php echo HTMLHelper::_('date', $year . '-' . $month . '-01', 'F Y'); ?>
|
||||
</h2>
|
||||
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=calendar&year=' . ($month == 12 ? $year + 1 : $year) . '&month=' . ($month == 12 ? 1 : $month + 1)); ?>"
|
||||
class="jem-calendar__nav-button jem-calendar__nav-next"
|
||||
aria-label="<?php echo Text::_('COM_JEM_NEXT_MONTH'); ?>">
|
||||
<span aria-hidden="true">›</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- Calendar Grid -->
|
||||
<div class="jem-calendar__grid">
|
||||
<!-- Weekday Headers -->
|
||||
<div class="jem-calendar__weekdays">
|
||||
<?php
|
||||
$weekDays = [
|
||||
Text::_('SUN'),
|
||||
Text::_('MON'),
|
||||
Text::_('TUE'),
|
||||
Text::_('WED'),
|
||||
Text::_('THU'),
|
||||
Text::_('FRI'),
|
||||
Text::_('SAT')
|
||||
];
|
||||
foreach ($weekDays as $day) : ?>
|
||||
<div class="jem-calendar__weekday">
|
||||
<?php echo $day; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<!-- Calendar Days -->
|
||||
<div class="jem-calendar__days">
|
||||
<?php
|
||||
// Generate calendar days
|
||||
$firstDay = mktime(0, 0, 0, $month, 1, $year);
|
||||
$daysInMonth = date('t', $firstDay);
|
||||
$dayOfWeek = date('w', $firstDay);
|
||||
|
||||
// Empty cells before first day
|
||||
for ($i = 0; $i < $dayOfWeek; $i++) : ?>
|
||||
<div class="jem-calendar__day jem-calendar__day--empty"></div>
|
||||
<?php endfor;
|
||||
|
||||
// Days with events
|
||||
for ($day = 1; $day <= $daysInMonth; $day++) :
|
||||
$currentDate = sprintf('%04d-%02d-%02d', $year, $month, $day);
|
||||
$hasEvents = false;
|
||||
$dayEvents = [];
|
||||
|
||||
// Check for events on this day
|
||||
if (!empty($events)) {
|
||||
foreach ($events as $event) {
|
||||
if (!empty($event->dates) && date('Y-m-d', strtotime($event->dates)) == $currentDate) {
|
||||
$hasEvents = true;
|
||||
$dayEvents[] = $event;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$isToday = ($currentDate == date('Y-m-d'));
|
||||
$classes = 'jem-calendar__day';
|
||||
if ($hasEvents) {
|
||||
$classes .= ' jem-calendar__day--has-events';
|
||||
}
|
||||
if ($isToday) {
|
||||
$classes .= ' jem-calendar__day--today';
|
||||
}
|
||||
?>
|
||||
<div class="<?php echo $classes; ?>" data-date="<?php echo $currentDate; ?>">
|
||||
<div class="jem-calendar__day-number">
|
||||
<?php echo $day; ?>
|
||||
</div>
|
||||
<?php if ($hasEvents) : ?>
|
||||
<div class="jem-calendar__day-events">
|
||||
<span class="jem-calendar__event-indicator"
|
||||
aria-label="<?php echo Text::sprintf('COM_JEM_EVENTS_COUNT', count($dayEvents)); ?>">
|
||||
<?php echo count($dayEvents); ?>
|
||||
</span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endfor; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Events List for Selected/Current Day -->
|
||||
<?php if (!empty($events)) : ?>
|
||||
<div class="jem-calendar__events-list">
|
||||
<h3 class="jem-calendar__events-title">
|
||||
<?php echo Text::_('COM_JEM_UPCOMING_EVENTS'); ?>
|
||||
</h3>
|
||||
<div class="jem-calendar__events">
|
||||
<?php foreach ($events as $event) : ?>
|
||||
<div class="jem-calendar__event-item">
|
||||
<div class="jem-calendar__event-date">
|
||||
<?php if (!empty($event->dates)) : ?>
|
||||
<time datetime="<?php echo $this->escape($event->dates); ?>">
|
||||
<?php echo HTMLHelper::_('date', $event->dates, Text::_('DATE_FORMAT_LC4')); ?>
|
||||
</time>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<h4 class="jem-calendar__event-title">
|
||||
<?php if (!empty($event->slug)) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=event&id=' . $event->slug); ?>"
|
||||
class="jem-calendar__event-link">
|
||||
<?php echo $this->escape($event->title); ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($event->title); ?>
|
||||
<?php endif; ?>
|
||||
</h4>
|
||||
<?php if (!empty($event->venue)) : ?>
|
||||
<div class="jem-calendar__event-venue">
|
||||
📍 <?php echo $this->escape($event->venue); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,111 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package JEM
|
||||
* @subpackage com_jem
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for JEM categories view
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
$categories = $this->categories ?? [];
|
||||
?>
|
||||
|
||||
<div class="jem-categories-responsive jem-component">
|
||||
<div class="jem-categories__container">
|
||||
|
||||
<!-- Categories Header -->
|
||||
<div class="jem-categories__header">
|
||||
<h1 class="jem-categories__title">
|
||||
<?php echo Text::_('COM_JEM_CATEGORIES'); ?>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($categories)) : ?>
|
||||
<div class="jem-categories__list">
|
||||
<?php foreach ($categories as $category) : ?>
|
||||
<div class="jem-categories__item">
|
||||
<div class="jem-categories__item-inner">
|
||||
|
||||
<!-- Category Image -->
|
||||
<?php if (!empty($category->image)) : ?>
|
||||
<div class="jem-categories__image-wrapper">
|
||||
<img src="<?php echo $this->escape($category->image); ?>"
|
||||
alt="<?php echo $this->escape($category->catname); ?>"
|
||||
class="jem-categories__image"
|
||||
loading="lazy">
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Category Content -->
|
||||
<div class="jem-categories__content">
|
||||
|
||||
<!-- Category Title -->
|
||||
<h2 class="jem-categories__category-title">
|
||||
<?php if (!empty($category->slug)) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=category&id=' . $category->slug); ?>"
|
||||
class="jem-categories__link">
|
||||
<?php echo $this->escape($category->catname); ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($category->catname); ?>
|
||||
<?php endif; ?>
|
||||
</h2>
|
||||
|
||||
<!-- Category Description -->
|
||||
<?php if (!empty($category->catdescription)) : ?>
|
||||
<div class="jem-categories__description">
|
||||
<?php echo $category->catdescription; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Event Count -->
|
||||
<?php if (isset($category->eventcount)) : ?>
|
||||
<div class="jem-categories__meta">
|
||||
<span class="jem-categories__event-count">
|
||||
<?php echo Text::sprintf('COM_JEM_EVENTS_COUNT_FULL', (int) $category->eventcount); ?>
|
||||
</span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- View Category Button -->
|
||||
<?php if (!empty($category->slug)) : ?>
|
||||
<div class="jem-categories__actions">
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=category&id=' . $category->slug); ?>"
|
||||
class="jem-categories__button btn btn-primary"
|
||||
aria-label="<?php echo Text::sprintf('COM_JEM_VIEW_CATEGORY', $this->escape($category->catname)); ?>">
|
||||
<?php echo Text::_('COM_JEM_VIEW_CATEGORY'); ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<!-- Pagination -->
|
||||
<?php if (!empty($this->pagination)) : ?>
|
||||
<div class="jem-categories__pagination">
|
||||
<?php echo $this->pagination->getPagesLinks(); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php else : ?>
|
||||
<div class="jem-categories__empty">
|
||||
<p class="jem-categories__empty-message">
|
||||
<?php echo Text::_('COM_JEM_NO_CATEGORIES'); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,212 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package JEM
|
||||
* @subpackage com_jem
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for JEM event details view
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
$item = $this->item ?? null;
|
||||
$params = $this->params ?? null;
|
||||
|
||||
if (!$item) {
|
||||
return;
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="jem-event-responsive jem-component">
|
||||
<div class="jem-event__container">
|
||||
|
||||
<!-- Event Header -->
|
||||
<div class="jem-event__header">
|
||||
<h1 class="jem-event__title">
|
||||
<?php echo $this->escape($item->title); ?>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<!-- Event Image -->
|
||||
<?php if (!empty($item->datimage)) : ?>
|
||||
<div class="jem-event__image-wrapper">
|
||||
<img src="<?php echo $this->escape($item->datimage); ?>"
|
||||
alt="<?php echo $this->escape($item->title); ?>"
|
||||
class="jem-event__image"
|
||||
loading="lazy">
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Event Meta Information -->
|
||||
<div class="jem-event__meta">
|
||||
|
||||
<!-- Date and Time -->
|
||||
<div class="jem-event__meta-item jem-event__date">
|
||||
<span class="jem-event__meta-icon" aria-hidden="true">📅</span>
|
||||
<div class="jem-event__meta-content">
|
||||
<strong class="jem-event__meta-label">
|
||||
<?php echo Text::_('COM_JEM_DATE'); ?>:
|
||||
</strong>
|
||||
<?php if (!empty($item->dates)) : ?>
|
||||
<time datetime="<?php echo $this->escape($item->dates); ?>"
|
||||
class="jem-event__datetime">
|
||||
<?php echo HTMLHelper::_('date', $item->dates, Text::_('DATE_FORMAT_LC3')); ?>
|
||||
</time>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($item->enddates) && $item->enddates != $item->dates) : ?>
|
||||
<span class="jem-event__date-separator"> - </span>
|
||||
<time datetime="<?php echo $this->escape($item->enddates); ?>"
|
||||
class="jem-event__datetime">
|
||||
<?php echo HTMLHelper::_('date', $item->enddates, Text::_('DATE_FORMAT_LC3')); ?>
|
||||
</time>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Time -->
|
||||
<?php if (!empty($item->times)) : ?>
|
||||
<div class="jem-event__meta-item jem-event__time">
|
||||
<span class="jem-event__meta-icon" aria-hidden="true">🕐</span>
|
||||
<div class="jem-event__meta-content">
|
||||
<strong class="jem-event__meta-label">
|
||||
<?php echo Text::_('COM_JEM_TIME'); ?>:
|
||||
</strong>
|
||||
<span class="jem-event__time-value">
|
||||
<?php echo $this->escape($item->times); ?>
|
||||
<?php if (!empty($item->endtimes)) : ?>
|
||||
- <?php echo $this->escape($item->endtimes); ?>
|
||||
<?php endif; ?>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Venue -->
|
||||
<?php if (!empty($item->venue)) : ?>
|
||||
<div class="jem-event__meta-item jem-event__venue">
|
||||
<span class="jem-event__meta-icon" aria-hidden="true">📍</span>
|
||||
<div class="jem-event__meta-content">
|
||||
<strong class="jem-event__meta-label">
|
||||
<?php echo Text::_('COM_JEM_VENUE'); ?>:
|
||||
</strong>
|
||||
<?php if (!empty($item->venueslug)) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=venue&id=' . $item->venueslug); ?>"
|
||||
class="jem-event__venue-link">
|
||||
<?php echo $this->escape($item->venue); ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<span class="jem-event__venue-name">
|
||||
<?php echo $this->escape($item->venue); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($item->street) || !empty($item->city)) : ?>
|
||||
<div class="jem-event__address">
|
||||
<?php if (!empty($item->street)) : ?>
|
||||
<span class="jem-event__street">
|
||||
<?php echo $this->escape($item->street); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($item->city)) : ?>
|
||||
<span class="jem-event__city">
|
||||
<?php echo $this->escape($item->city); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Categories -->
|
||||
<?php if (!empty($item->categories)) : ?>
|
||||
<div class="jem-event__meta-item jem-event__categories">
|
||||
<span class="jem-event__meta-icon" aria-hidden="true">🏷️</span>
|
||||
<div class="jem-event__meta-content">
|
||||
<strong class="jem-event__meta-label">
|
||||
<?php echo Text::_('COM_JEM_CATEGORIES'); ?>:
|
||||
</strong>
|
||||
<div class="jem-event__category-list">
|
||||
<?php foreach ($item->categories as $category) : ?>
|
||||
<span class="jem-event__category-badge">
|
||||
<?php echo $this->escape($category->catname); ?>
|
||||
</span>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Event Description -->
|
||||
<?php if (!empty($item->fulltext)) : ?>
|
||||
<div class="jem-event__description">
|
||||
<h2 class="jem-event__description-title">
|
||||
<?php echo Text::_('COM_JEM_DESCRIPTION'); ?>
|
||||
</h2>
|
||||
<div class="jem-event__description-content">
|
||||
<?php echo $item->fulltext; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Event Registration -->
|
||||
<?php if (!empty($item->registra) && $item->registra == 1) : ?>
|
||||
<div class="jem-event__registration">
|
||||
<h2 class="jem-event__registration-title">
|
||||
<?php echo Text::_('COM_JEM_REGISTRATION'); ?>
|
||||
</h2>
|
||||
<?php if (!empty($item->maxplaces)) : ?>
|
||||
<p class="jem-event__capacity">
|
||||
<strong><?php echo Text::_('COM_JEM_MAX_PLACES'); ?>:</strong>
|
||||
<?php echo (int) $item->maxplaces; ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($item->waitinglist)) : ?>
|
||||
<p class="jem-event__waitinglist">
|
||||
<?php echo Text::_('COM_JEM_WAITING_LIST_ENABLED'); ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Event Contact -->
|
||||
<?php if (!empty($item->contactname)) : ?>
|
||||
<div class="jem-event__contact">
|
||||
<h2 class="jem-event__contact-title">
|
||||
<?php echo Text::_('COM_JEM_CONTACT'); ?>
|
||||
</h2>
|
||||
<p class="jem-event__contact-info">
|
||||
<strong><?php echo Text::_('COM_JEM_NAME'); ?>:</strong>
|
||||
<?php echo $this->escape($item->contactname); ?>
|
||||
</p>
|
||||
<?php if (!empty($item->contactemail)) : ?>
|
||||
<p class="jem-event__contact-info">
|
||||
<strong><?php echo Text::_('COM_JEM_EMAIL'); ?>:</strong>
|
||||
<a href="mailto:<?php echo $this->escape($item->contactemail); ?>"
|
||||
class="jem-event__contact-link">
|
||||
<?php echo $this->escape($item->contactemail); ?>
|
||||
</a>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Back Button -->
|
||||
<div class="jem-event__actions">
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=eventslist'); ?>"
|
||||
class="jem-event__button btn btn-secondary">
|
||||
<?php echo Text::_('COM_JEM_BACK_TO_EVENTS'); ?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,147 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package JEM
|
||||
* @subpackage com_jem
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for JEM events list view
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
// Load JEM helper if available
|
||||
if (file_exists(JPATH_SITE . '/components/com_jem/helpers/helper.php')) {
|
||||
require_once JPATH_SITE . '/components/com_jem/helpers/helper.php';
|
||||
}
|
||||
|
||||
$items = $this->items ?? [];
|
||||
$params = $this->params ?? null;
|
||||
?>
|
||||
|
||||
<div class="jem-eventslist-responsive jem-component">
|
||||
<div class="jem-eventslist__container">
|
||||
|
||||
<?php if (!empty($this->pageheading)) : ?>
|
||||
<div class="jem-eventslist__header">
|
||||
<h1 class="jem-eventslist__title">
|
||||
<?php echo $this->escape($this->pageheading); ?>
|
||||
</h1>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($items)) : ?>
|
||||
<div class="jem-eventslist__list">
|
||||
<?php foreach ($items as $item) : ?>
|
||||
<div class="jem-eventslist__item">
|
||||
<div class="jem-eventslist__item-inner">
|
||||
|
||||
<!-- Event Date -->
|
||||
<div class="jem-eventslist__date">
|
||||
<?php if (!empty($item->dates)) : ?>
|
||||
<time datetime="<?php echo $this->escape($item->dates); ?>"
|
||||
class="jem-eventslist__datetime">
|
||||
<?php echo HTMLHelper::_('date', $item->dates, Text::_('DATE_FORMAT_LC4')); ?>
|
||||
</time>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($item->enddates) && $item->enddates != $item->dates) : ?>
|
||||
<span class="jem-eventslist__date-separator"> - </span>
|
||||
<time datetime="<?php echo $this->escape($item->enddates); ?>"
|
||||
class="jem-eventslist__datetime">
|
||||
<?php echo HTMLHelper::_('date', $item->enddates, Text::_('DATE_FORMAT_LC4')); ?>
|
||||
</time>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<!-- Event Title -->
|
||||
<h2 class="jem-eventslist__event-title">
|
||||
<?php if (!empty($item->slug)) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=event&id=' . $item->slug); ?>"
|
||||
class="jem-eventslist__link">
|
||||
<?php echo $this->escape($item->title); ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($item->title); ?>
|
||||
<?php endif; ?>
|
||||
</h2>
|
||||
|
||||
<!-- Event Venue -->
|
||||
<?php if (!empty($item->venue)) : ?>
|
||||
<div class="jem-eventslist__venue">
|
||||
<span class="jem-eventslist__venue-icon" aria-hidden="true">📍</span>
|
||||
<?php if (!empty($item->venueslug)) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=venue&id=' . $item->venueslug); ?>"
|
||||
class="jem-eventslist__venue-link">
|
||||
<?php echo $this->escape($item->venue); ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<span class="jem-eventslist__venue-name">
|
||||
<?php echo $this->escape($item->venue); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($item->city)) : ?>
|
||||
<span class="jem-eventslist__city">
|
||||
, <?php echo $this->escape($item->city); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Event Description -->
|
||||
<?php if (!empty($item->introtext)) : ?>
|
||||
<div class="jem-eventslist__description">
|
||||
<?php echo $item->introtext; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Event Categories -->
|
||||
<?php if (!empty($item->categories)) : ?>
|
||||
<div class="jem-eventslist__categories">
|
||||
<?php foreach ($item->categories as $category) : ?>
|
||||
<span class="jem-eventslist__category-badge">
|
||||
<?php echo $this->escape($category->catname); ?>
|
||||
</span>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Read More Button -->
|
||||
<?php if (!empty($item->slug)) : ?>
|
||||
<div class="jem-eventslist__actions">
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=event&id=' . $item->slug); ?>"
|
||||
class="jem-eventslist__button btn btn-primary"
|
||||
aria-label="<?php echo Text::sprintf('COM_JEM_READ_MORE_ABOUT', $this->escape($item->title)); ?>">
|
||||
<?php echo Text::_('COM_JEM_READ_MORE'); ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<!-- Pagination -->
|
||||
<?php if (!empty($this->pagination)) : ?>
|
||||
<div class="jem-eventslist__pagination">
|
||||
<?php echo $this->pagination->getPagesLinks(); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php else : ?>
|
||||
<div class="jem-eventslist__empty">
|
||||
<p class="jem-eventslist__empty-message">
|
||||
<?php echo Text::_('COM_JEM_NO_EVENTS'); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,188 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package JEM
|
||||
* @subpackage com_jem
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for JEM venue view
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
|
||||
$venue = $this->venue ?? null;
|
||||
$events = $this->rows ?? [];
|
||||
|
||||
if (!$venue) {
|
||||
return;
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="jem-venue-responsive jem-component">
|
||||
<div class="jem-venue__container">
|
||||
|
||||
<!-- Venue Header -->
|
||||
<div class="jem-venue__header">
|
||||
<h1 class="jem-venue__title">
|
||||
<?php echo $this->escape($venue->venue); ?>
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<!-- Venue Image -->
|
||||
<?php if (!empty($venue->locimage)) : ?>
|
||||
<div class="jem-venue__image-wrapper">
|
||||
<img src="<?php echo $this->escape($venue->locimage); ?>"
|
||||
alt="<?php echo $this->escape($venue->venue); ?>"
|
||||
class="jem-venue__image"
|
||||
loading="lazy">
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Venue Information -->
|
||||
<div class="jem-venue__info">
|
||||
|
||||
<!-- Address -->
|
||||
<?php if (!empty($venue->street) || !empty($venue->city) || !empty($venue->postalCode)) : ?>
|
||||
<div class="jem-venue__info-item jem-venue__address">
|
||||
<span class="jem-venue__info-icon" aria-hidden="true">📍</span>
|
||||
<div class="jem-venue__info-content">
|
||||
<strong class="jem-venue__info-label">
|
||||
<?php echo Text::_('COM_JEM_ADDRESS'); ?>:
|
||||
</strong>
|
||||
<address class="jem-venue__address-content">
|
||||
<?php if (!empty($venue->street)) : ?>
|
||||
<div class="jem-venue__street">
|
||||
<?php echo $this->escape($venue->street); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($venue->postalCode) || !empty($venue->city)) : ?>
|
||||
<div class="jem-venue__city-line">
|
||||
<?php if (!empty($venue->postalCode)) : ?>
|
||||
<span class="jem-venue__postal">
|
||||
<?php echo $this->escape($venue->postalCode); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($venue->city)) : ?>
|
||||
<span class="jem-venue__city">
|
||||
<?php echo $this->escape($venue->city); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($venue->state)) : ?>
|
||||
<div class="jem-venue__state">
|
||||
<?php echo $this->escape($venue->state); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($venue->country)) : ?>
|
||||
<div class="jem-venue__country">
|
||||
<?php echo $this->escape($venue->country); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</address>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Website -->
|
||||
<?php if (!empty($venue->url)) : ?>
|
||||
<div class="jem-venue__info-item jem-venue__website">
|
||||
<span class="jem-venue__info-icon" aria-hidden="true">🌐</span>
|
||||
<div class="jem-venue__info-content">
|
||||
<strong class="jem-venue__info-label">
|
||||
<?php echo Text::_('COM_JEM_WEBSITE'); ?>:
|
||||
</strong>
|
||||
<a href="<?php echo $this->escape($venue->url); ?>"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="jem-venue__link">
|
||||
<?php echo $this->escape($venue->url); ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Description -->
|
||||
<?php if (!empty($venue->locdescription)) : ?>
|
||||
<div class="jem-venue__description">
|
||||
<h2 class="jem-venue__description-title">
|
||||
<?php echo Text::_('COM_JEM_DESCRIPTION'); ?>
|
||||
</h2>
|
||||
<div class="jem-venue__description-content">
|
||||
<?php echo $venue->locdescription; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Map -->
|
||||
<?php if (!empty($venue->latitude) && !empty($venue->longitude)) : ?>
|
||||
<div class="jem-venue__map">
|
||||
<h2 class="jem-venue__map-title">
|
||||
<?php echo Text::_('COM_JEM_LOCATION'); ?>
|
||||
</h2>
|
||||
<div class="jem-venue__map-container">
|
||||
<!-- Map would be rendered here by JEM's map functionality -->
|
||||
<div class="jem-venue__map-placeholder">
|
||||
<p><?php echo Text::_('COM_JEM_MAP_VIEW'); ?></p>
|
||||
<p>
|
||||
<a href="https://www.google.com/maps?q=<?php echo $venue->latitude; ?>,<?php echo $venue->longitude; ?>"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="jem-venue__map-link btn btn-primary">
|
||||
<?php echo Text::_('COM_JEM_VIEW_ON_MAP'); ?>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Events at this Venue -->
|
||||
<?php if (!empty($events)) : ?>
|
||||
<div class="jem-venue__events">
|
||||
<h2 class="jem-venue__events-title">
|
||||
<?php echo Text::_('COM_JEM_EVENTS_AT_VENUE'); ?>
|
||||
</h2>
|
||||
<div class="jem-venue__events-list">
|
||||
<?php foreach ($events as $event) : ?>
|
||||
<div class="jem-venue__event-item">
|
||||
<div class="jem-venue__event-date">
|
||||
<?php if (!empty($event->dates)) : ?>
|
||||
<time datetime="<?php echo $this->escape($event->dates); ?>">
|
||||
<?php echo HTMLHelper::_('date', $event->dates, Text::_('DATE_FORMAT_LC4')); ?>
|
||||
</time>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<h3 class="jem-venue__event-title">
|
||||
<?php if (!empty($event->slug)) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=event&id=' . $event->slug); ?>"
|
||||
class="jem-venue__event-link">
|
||||
<?php echo $this->escape($event->title); ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<?php echo $this->escape($event->title); ?>
|
||||
<?php endif; ?>
|
||||
</h3>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Back Button -->
|
||||
<div class="jem-venue__actions">
|
||||
<a href="<?php echo Route::_('index.php?option=com_jem&view=eventslist'); ?>"
|
||||
class="jem-venue__button btn btn-secondary">
|
||||
<?php echo Text::_('COM_JEM_BACK_TO_EVENTS'); ?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,70 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Kunena
|
||||
* @subpackage com_kunena
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for Kunena category list
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$this->document->addStyleDeclaration('
|
||||
.kunena-category-list-responsive {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.kunena-category-responsive {
|
||||
background: var(--body-bg);
|
||||
border: 1px solid var(--border-color);
|
||||
border-radius: var(--border-radius);
|
||||
padding: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
|
||||
.kunena-category-responsive:hover {
|
||||
background: var(--secondary-bg);
|
||||
border-color: var(--color-primary);
|
||||
}
|
||||
|
||||
@media (max-width: 575.98px) {
|
||||
.kunena-category-responsive {
|
||||
padding: 0.75rem;
|
||||
}
|
||||
}
|
||||
');
|
||||
?>
|
||||
|
||||
<div class="kunena-category-list-responsive">
|
||||
<?php if (!empty($this->categories)) : ?>
|
||||
<?php foreach ($this->categories as $category) : ?>
|
||||
<div class="kunena-category-responsive">
|
||||
<h3 class="kunena-category__title">
|
||||
<a href="<?php echo $category->getUrl(); ?>">
|
||||
<?php echo $this->escape($category->name); ?>
|
||||
</a>
|
||||
</h3>
|
||||
|
||||
<?php if ($category->description) : ?>
|
||||
<div class="kunena-category__description">
|
||||
<?php echo $category->displayField('description'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="kunena-category__meta">
|
||||
<span><?php echo Text::_('COM_KUNENA_TOPICS'); ?>: <?php echo $category->numTopics; ?></span>
|
||||
<span><?php echo Text::_('COM_KUNENA_POSTS'); ?>: <?php echo $category->numPosts; ?></span>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
<?php else : ?>
|
||||
<div class="alert alert-info">
|
||||
<?php echo Text::_('COM_KUNENA_NO_CATEGORIES'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,141 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package OS Membership Pro
|
||||
* @subpackage com_osmembership
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for OS Membership plans list
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$this->document->addStyleDeclaration('
|
||||
.osmembership-plans-responsive {
|
||||
display: grid;
|
||||
gap: 2rem;
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.osmembership-plan-card {
|
||||
background: var(--body-bg);
|
||||
border: 2px solid var(--border-color);
|
||||
border-radius: var(--border-radius);
|
||||
padding: 2rem;
|
||||
transition: all 0.3s;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.osmembership-plan-card:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
|
||||
border-color: var(--color-primary);
|
||||
}
|
||||
|
||||
.osmembership-plan-card--featured {
|
||||
border-color: var(--color-primary);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.osmembership-plan-card--featured::before {
|
||||
content: "' . Text::_('OSM_POPULAR') . '";
|
||||
position: absolute;
|
||||
top: -12px;
|
||||
right: 20px;
|
||||
background: var(--color-primary);
|
||||
color: white;
|
||||
padding: 0.25rem 1rem;
|
||||
border-radius: 1rem;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.osmembership-plans-responsive {
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.osmembership-plans-responsive {
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.osmembership-plans-responsive.osmembership-plans--many {
|
||||
grid-template-columns: repeat(4, 1fr);
|
||||
}
|
||||
}
|
||||
');
|
||||
?>
|
||||
|
||||
<div class="osmembership-plans-responsive <?php echo count($this->items) > 3 ? 'osmembership-plans--many' : ''; ?>">
|
||||
<?php foreach ($this->items as $item) : ?>
|
||||
<div class="osmembership-plan-card <?php echo $item->featured ? 'osmembership-plan-card--featured' : ''; ?>">
|
||||
<?php if (!empty($item->image)) : ?>
|
||||
<div class="osmembership-plan__image" style="margin-bottom: 1.5rem;">
|
||||
<img src="<?php echo $item->image; ?>"
|
||||
alt="<?php echo htmlspecialchars($item->title, ENT_COMPAT, 'UTF-8'); ?>"
|
||||
style="width: 100%; height: auto; border-radius: var(--border-radius);" />
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<h2 class="osmembership-plan__title" style="margin: 0 0 1rem 0; font-size: 1.75rem; font-weight: 700;">
|
||||
<?php echo htmlspecialchars($item->title, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</h2>
|
||||
|
||||
<div class="osmembership-plan__pricing" style="margin-bottom: 1.5rem;">
|
||||
<?php if ($item->price > 0) : ?>
|
||||
<div style="font-size: 2.5rem; font-weight: 700; color: var(--color-primary); line-height: 1;">
|
||||
<span style="font-size: 1.5rem; vertical-align: super;"><?php echo $this->config->currency_symbol; ?></span>
|
||||
<?php echo number_format($item->price, 0); ?>
|
||||
</div>
|
||||
<?php if ($item->subscription_length > 0) : ?>
|
||||
<div style="color: var(--gray-600); margin-top: 0.5rem;">
|
||||
<?php echo Text::_('OSM_PER') . ' ' . $item->subscription_length . ' ' . Text::_('OSM_' . strtoupper($item->subscription_length_unit)); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
<div style="font-size: 2.5rem; font-weight: 700; color: var(--success);">
|
||||
<?php echo Text::_('OSM_FREE'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($item->short_description)) : ?>
|
||||
<div class="osmembership-plan__description" style="margin-bottom: 1.5rem; color: var(--gray-600); line-height: 1.6;">
|
||||
<?php echo $item->short_description; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($item->features)) : ?>
|
||||
<div class="osmembership-plan__features" style="flex: 1; margin-bottom: 1.5rem;">
|
||||
<ul style="list-style: none; padding: 0; margin: 0;">
|
||||
<?php foreach (explode("\n", $item->features) as $feature) : ?>
|
||||
<?php if (trim($feature)) : ?>
|
||||
<li style="padding: 0.5rem 0; display: flex; align-items: flex-start; gap: 0.5rem;">
|
||||
<span class="icon-check" style="color: var(--success); flex-shrink: 0; margin-top: 0.25rem;"></span>
|
||||
<span><?php echo htmlspecialchars(trim($feature), ENT_COMPAT, 'UTF-8'); ?></span>
|
||||
</li>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="osmembership-plan__actions">
|
||||
<a href="<?php echo OSMembershipHelperRoute::getRegistrationRoute($item->id); ?>"
|
||||
class="btn btn-primary"
|
||||
style="width: 100%; min-height: 48px; display: inline-flex; align-items: center; justify-content: center; text-decoration: none;">
|
||||
<?php echo Text::_('OSM_SUBSCRIBE_NOW'); ?>
|
||||
<span class="icon-chevron-right" style="margin-left: 0.5rem;"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
@@ -1,82 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package AcyMailing
|
||||
* @subpackage mod_acymailing
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_acymailing module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-acymailing mod-acymailing-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if (!empty($formDisplay)) : ?>
|
||||
<div class="mod-acymailing__form-container">
|
||||
<?php if ($params->get('intro_text')) : ?>
|
||||
<div class="mod-acymailing__intro">
|
||||
<?php echo $params->get('intro_text'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php echo $formDisplay; ?>
|
||||
|
||||
<?php if ($params->get('outro_text')) : ?>
|
||||
<div class="mod-acymailing__outro">
|
||||
<?php echo $params->get('outro_text'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="mod-acymailing__empty">
|
||||
<p><?php echo Text::_('MOD_ACYMAILING_NO_FORM'); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<style>
|
||||
/* Override AcyMailing inline styles for mobile responsiveness */
|
||||
.mod-acymailing-responsive .acymailing_module input[type="email"],
|
||||
.mod-acymailing-responsive .acymailing_module input[type="text"] {
|
||||
min-height: 44px !important;
|
||||
font-size: 1rem !important;
|
||||
padding: 0.5rem 0.75rem !important;
|
||||
border-radius: var(--border-radius, 0.375rem) !important;
|
||||
border: 1px solid var(--input-border-color, #dee2e6) !important;
|
||||
width: 100% !important;
|
||||
box-sizing: border-box !important;
|
||||
}
|
||||
|
||||
.mod-acymailing-responsive .acymailing_module button[type="submit"],
|
||||
.mod-acymailing-responsive .acymailing_module input[type="submit"] {
|
||||
min-height: 44px !important;
|
||||
padding: 0.625rem 1rem !important;
|
||||
font-size: 1rem !important;
|
||||
border-radius: var(--border-radius, 0.375rem) !important;
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
@media (max-width: 575.98px) {
|
||||
.mod-acymailing-responsive .acymailing_module input[type="email"],
|
||||
.mod-acymailing-responsive .acymailing_module input[type="text"] {
|
||||
font-size: 16px !important;
|
||||
min-height: 48px !important;
|
||||
padding: 0.75rem 1rem !important;
|
||||
}
|
||||
|
||||
.mod-acymailing-responsive .acymailing_module button[type="submit"],
|
||||
.mod-acymailing-responsive .acymailing_module input[type="submit"] {
|
||||
min-height: 48px !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,164 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Community Builder
|
||||
* @subpackage mod_cblogin
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_cblogin module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
// Ensure module language file is loaded
|
||||
$lang = Factory::getLanguage();
|
||||
$lang->load('mod_cblogin', JPATH_SITE);
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-cblogin mod-cblogin-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if ($type === 'logout') : ?>
|
||||
<div class="mod-cblogin__logout">
|
||||
<?php if ($params->get('greeting', 1)) : ?>
|
||||
<div class="mod-cblogin__greeting">
|
||||
<?php if ($cbUser) : ?>
|
||||
<div class="mod-cblogin__avatar">
|
||||
<?php echo $cbUser->getField('avatar', null, 'html', 'none', 'list'); ?>
|
||||
</div>
|
||||
<div class="mod-cblogin__user-info">
|
||||
<span class="mod-cblogin__username">
|
||||
<?php echo htmlspecialchars($cbUser->getField('formatname', null, 'html', 'none', 'list'), ENT_COMPAT, 'UTF-8'); ?>
|
||||
</span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="<?php echo $action; ?>" method="post" class="mod-cblogin__form">
|
||||
<div class="mod-cblogin__actions">
|
||||
<?php if ($params->get('profileLink', 1) && $cbUser) : ?>
|
||||
<a href="<?php echo $cbUser->getField('canvas', null, 'html', 'none', 'profile'); ?>" class="mod-cblogin__btn mod-cblogin__btn--profile btn btn-secondary">
|
||||
<span class="icon-user" aria-hidden="true"></span>
|
||||
<?php echo Text::_('MOD_CBLOGIN_PROFILE'); ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<button type="submit" name="Submit" class="mod-cblogin__btn mod-cblogin__btn--logout btn btn-primary">
|
||||
<span class="icon-sign-out" aria-hidden="true"></span>
|
||||
<?php echo Text::_('MOD_CBLOGIN_LOGOUT'); ?>
|
||||
</button>
|
||||
</div>
|
||||
<input type="hidden" name="op2" value="logout" />
|
||||
<input type="hidden" name="lang" value="<?php echo $lang; ?>" />
|
||||
<input type="hidden" name="return" value="<?php echo $return; ?>" />
|
||||
<?php echo $securityToken; ?>
|
||||
</form>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<form action="<?php echo $action; ?>" method="post" name="login<?php echo $moduleId; ?>" id="login<?php echo $moduleId; ?>" class="mod-cblogin__form mod-cblogin__form--login">
|
||||
<?php if ($params->get('pretext')) : ?>
|
||||
<div class="mod-cblogin__pretext">
|
||||
<?php echo $params->get('pretext'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-cblogin__fields">
|
||||
<div class="mod-cblogin__field">
|
||||
<label for="modloginusername<?php echo $moduleId; ?>" class="mod-cblogin__label">
|
||||
<?php echo Text::_('MOD_CBLOGIN_USERNAME'); ?>
|
||||
</label>
|
||||
<input
|
||||
id="modloginusername<?php echo $moduleId; ?>"
|
||||
type="text"
|
||||
name="username"
|
||||
class="mod-cblogin__input form-control"
|
||||
placeholder="<?php echo Text::_('MOD_CBLOGIN_USERNAME'); ?>"
|
||||
autocomplete="username"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="mod-cblogin__field">
|
||||
<label for="modloginpass<?php echo $moduleId; ?>" class="mod-cblogin__label">
|
||||
<?php echo Text::_('MOD_CBLOGIN_PASSWORD'); ?>
|
||||
</label>
|
||||
<input
|
||||
id="modloginpass<?php echo $moduleId; ?>"
|
||||
type="password"
|
||||
name="passwd"
|
||||
class="mod-cblogin__input form-control"
|
||||
placeholder="<?php echo Text::_('MOD_CBLOGIN_PASSWORD'); ?>"
|
||||
autocomplete="current-password"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('remember_me', 1)) : ?>
|
||||
<div class="mod-cblogin__remember">
|
||||
<input
|
||||
id="modloginrememberme<?php echo $moduleId; ?>"
|
||||
type="checkbox"
|
||||
name="remember"
|
||||
class="mod-cblogin__checkbox"
|
||||
value="yes"
|
||||
/>
|
||||
<label for="modloginrememberme<?php echo $moduleId; ?>" class="mod-cblogin__remember-label">
|
||||
<?php echo Text::_('MOD_CBLOGIN_REMEMBER_ME'); ?>
|
||||
</label>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="mod-cblogin__actions">
|
||||
<button type="submit" name="Submit" class="mod-cblogin__btn mod-cblogin__btn--submit btn btn-primary">
|
||||
<span class="icon-sign-in" aria-hidden="true"></span>
|
||||
<?php echo Text::_('MOD_CBLOGIN_LOGIN'); ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="mod-cblogin__links">
|
||||
<?php if ($params->get('lostpassword_link', 1)) : ?>
|
||||
<a href="<?php echo $lostPasswordLink; ?>" class="mod-cblogin__link">
|
||||
<?php echo Text::_('MOD_CBLOGIN_FORGOT_PASSWORD'); ?>
|
||||
<span class="icon-chevron-right" aria-hidden="true"></span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('lostusername_link', 1)) : ?>
|
||||
<a href="<?php echo $lostUsernameLink; ?>" class="mod-cblogin__link">
|
||||
<?php echo Text::_('MOD_CBLOGIN_FORGOT_USERNAME'); ?>
|
||||
<span class="icon-chevron-right" aria-hidden="true"></span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('registration_link', 1)) : ?>
|
||||
<a href="<?php echo $registrationLink; ?>" class="mod-cblogin__link">
|
||||
<?php echo Text::_('MOD_CBLOGIN_REGISTER'); ?>
|
||||
<span class="icon-chevron-right" aria-hidden="true"></span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('posttext')) : ?>
|
||||
<div class="mod-cblogin__posttext">
|
||||
<?php echo $params->get('posttext'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<input type="hidden" name="op2" value="login" />
|
||||
<input type="hidden" name="lang" value="<?php echo $lang; ?>" />
|
||||
<input type="hidden" name="return" value="<?php echo $return; ?>" />
|
||||
<input type="hidden" name="message" value="0" />
|
||||
<input type="hidden" name="loginfrom" value="loginmodule" />
|
||||
<?php echo $securityToken; ?>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,99 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Community Builder
|
||||
* @subpackage mod_comprofilerOnline
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_comprofilerOnline module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
// Ensure module language file is loaded
|
||||
$lang = Factory::getLanguage();
|
||||
$lang->load('mod_comprofilerOnline', JPATH_SITE);
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-cb-online mod-cb-online-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if (!empty($onlineUsers)) : ?>
|
||||
<div class="mod-cb-online__stats">
|
||||
<div class="mod-cb-online__count">
|
||||
<span class="mod-cb-online__count-number"><?php echo $totalOnline; ?></span>
|
||||
<span class="mod-cb-online__count-label">
|
||||
<?php echo $totalOnline == 1 ? Text::_('MOD_CB_ONLINE_USER') : Text::_('MOD_CB_ONLINE_USERS'); ?>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('show_guest_count', 1)) : ?>
|
||||
<div class="mod-cb-online__breakdown">
|
||||
<span class="mod-cb-online__breakdown-item">
|
||||
<span class="icon-users" aria-hidden="true"></span>
|
||||
<?php echo $membersOnline; ?> <?php echo Text::_('MOD_CB_ONLINE_MEMBERS'); ?>
|
||||
</span>
|
||||
<span class="mod-cb-online__breakdown-item">
|
||||
<span class="icon-eye" aria-hidden="true"></span>
|
||||
<?php echo $guestsOnline; ?> <?php echo Text::_('MOD_CB_ONLINE_GUESTS'); ?>
|
||||
</span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('show_user_list', 1) && !empty($onlineUsers)) : ?>
|
||||
<div class="mod-cb-online__users">
|
||||
<h<?php echo $params->get('header_level', 3); ?> class="mod-cb-online__heading">
|
||||
<?php echo Text::_('MOD_CB_ONLINE_WHO_IS_ONLINE'); ?>
|
||||
</h<?php echo $params->get('header_level', 3); ?>>
|
||||
|
||||
<ul class="mod-cb-online__list">
|
||||
<?php foreach ($onlineUsers as $user) : ?>
|
||||
<li class="mod-cb-online__user">
|
||||
<?php if ($params->get('show_avatar', 1) && !empty($user->avatar)) : ?>
|
||||
<div class="mod-cb-online__avatar">
|
||||
<?php echo $user->avatar; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-cb-online__info">
|
||||
<?php if ($params->get('link_names', 1) && !empty($user->link)) : ?>
|
||||
<a href="<?php echo $user->link; ?>" class="mod-cb-online__name">
|
||||
<?php echo htmlspecialchars($user->name, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<span class="mod-cb-online__name">
|
||||
<?php echo htmlspecialchars($user->name, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('show_status', 1) && !empty($user->status)) : ?>
|
||||
<span class="mod-cb-online__status">
|
||||
<?php echo htmlspecialchars($user->status, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('show_online_icon', 1)) : ?>
|
||||
<span class="mod-cb-online__indicator" title="<?php echo Text::_('MOD_CB_ONLINE_NOW'); ?>">
|
||||
<span class="icon-checkmark" aria-hidden="true"></span>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
<div class="mod-cb-online__empty">
|
||||
<p><?php echo Text::_('MOD_CB_ONLINE_NO_USERS'); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,12 +1,14 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage mod_custom
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Template override for mod_custom adding banner-overlay wrapper pattern.
|
||||
* Based on Cassiopeia's banner layout approach.
|
||||
*/
|
||||
|
||||
@@ -1,110 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package HikaShop
|
||||
* @subpackage mod_hikashop_cart
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_hikashop_cart module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-hikashop-cart mod-hikashop-cart-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>" id="hikashop_cart_module<?php echo $params->get('id'); ?>">
|
||||
<?php if (!empty($cart->products)) : ?>
|
||||
<div class="mod-hikashop-cart__header">
|
||||
<span class="mod-hikashop-cart__icon" aria-hidden="true">
|
||||
<span class="icon-basket"></span>
|
||||
</span>
|
||||
<div class="mod-hikashop-cart__summary">
|
||||
<div class="mod-hikashop-cart__count">
|
||||
<?php echo count($cart->products); ?>
|
||||
<?php echo count($cart->products) == 1 ? Text::_('ITEM') : Text::_('ITEMS'); ?>
|
||||
</div>
|
||||
<?php if (!empty($cart->total)) : ?>
|
||||
<div class="mod-hikashop-cart__total">
|
||||
<?php echo $cart->total->price_value_with_tax_formated; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('show_products', 1)) : ?>
|
||||
<div class="mod-hikashop-cart__products">
|
||||
<?php foreach ($cart->products as $product) : ?>
|
||||
<div class="mod-hikashop-cart__product">
|
||||
<?php if (!empty($product->images[0]) && $params->get('show_image', 1)) : ?>
|
||||
<div class="mod-hikashop-cart__product-image">
|
||||
<img src="<?php echo $product->images[0]->file_path; ?>"
|
||||
alt="<?php echo htmlspecialchars($product->product_name, ENT_COMPAT, 'UTF-8'); ?>" />
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-hikashop-cart__product-details">
|
||||
<div class="mod-hikashop-cart__product-name">
|
||||
<?php echo htmlspecialchars($product->product_name, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</div>
|
||||
|
||||
<div class="mod-hikashop-cart__product-quantity">
|
||||
<?php echo Text::_('QUANTITY'); ?>:
|
||||
<span class="mod-hikashop-cart__quantity-value"><?php echo $product->cart_product_quantity; ?></span>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($product->prices[0])) : ?>
|
||||
<div class="mod-hikashop-cart__product-price">
|
||||
<?php echo $product->prices[0]->price_value_with_tax_formated; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('show_delete', 1)) : ?>
|
||||
<div class="mod-hikashop-cart__product-remove">
|
||||
<a href="#"
|
||||
class="mod-hikashop-cart__remove-btn hikashop_cart_product_delete"
|
||||
data-product-id="<?php echo $product->product_id; ?>"
|
||||
title="<?php echo Text::_('HIKA_DELETE'); ?>"
|
||||
aria-label="<?php echo Text::_('HIKA_DELETE') . ' ' . htmlspecialchars($product->product_name, ENT_COMPAT, 'UTF-8'); ?>">
|
||||
<span class="icon-remove" aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-hikashop-cart__actions">
|
||||
<?php if ($params->get('show_cart_button', 1)) : ?>
|
||||
<a href="<?php echo hikashop_completeLink('cart'); ?>"
|
||||
class="mod-hikashop-cart__btn mod-hikashop-cart__btn--view btn btn-secondary">
|
||||
<?php echo Text::_('HIKASHOP_CART_VIEW'); ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('show_checkout_button', 1)) : ?>
|
||||
<a href="<?php echo hikashop_completeLink('checkout'); ?>"
|
||||
class="mod-hikashop-cart__btn mod-hikashop-cart__btn--checkout btn btn-primary">
|
||||
<?php echo Text::_('HIKASHOP_CHECKOUT'); ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="mod-hikashop-cart__empty">
|
||||
<span class="mod-hikashop-cart__empty-icon" aria-hidden="true">
|
||||
<span class="icon-basket"></span>
|
||||
</span>
|
||||
<p class="mod-hikashop-cart__empty-text">
|
||||
<?php echo Text::_('HIKASHOP_CART_EMPTY'); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,112 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package K2
|
||||
* @subpackage mod_k2_content
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_k2_content module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-k2-content mod-k2-content-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if (count($items)) : ?>
|
||||
<ul class="mod-k2-content__list">
|
||||
<?php foreach ($items as $key => $item) : ?>
|
||||
<li class="mod-k2-content__item">
|
||||
<?php if ($params->get('itemImage') && !empty($item->imageXSmall)) : ?>
|
||||
<div class="mod-k2-content__image">
|
||||
<a href="<?php echo $item->link; ?>" title="<?php echo htmlspecialchars($item->title, ENT_COMPAT, 'UTF-8'); ?>">
|
||||
<img src="<?php echo $item->imageXSmall; ?>" alt="<?php echo htmlspecialchars($item->title, ENT_COMPAT, 'UTF-8'); ?>" />
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-k2-content__content">
|
||||
<?php if ($params->get('itemTitle')) : ?>
|
||||
<h<?php echo $params->get('item_heading', 4); ?> class="mod-k2-content__title">
|
||||
<a href="<?php echo $item->link; ?>">
|
||||
<?php echo htmlspecialchars($item->title, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</a>
|
||||
</h<?php echo $params->get('item_heading', 4); ?>>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('itemAuthor') || $params->get('itemDateCreated') || $params->get('itemCategory') || $params->get('itemHits')) : ?>
|
||||
<div class="mod-k2-content__meta">
|
||||
<?php if ($params->get('itemAuthor')) : ?>
|
||||
<span class="mod-k2-content__author">
|
||||
<span class="icon-user" aria-hidden="true"></span>
|
||||
<?php echo $item->author; ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('itemDateCreated')) : ?>
|
||||
<span class="mod-k2-content__date">
|
||||
<span class="icon-calendar" aria-hidden="true"></span>
|
||||
<time datetime="<?php echo HTMLHelper::_('date', $item->created, 'c'); ?>">
|
||||
<?php echo HTMLHelper::_('date', $item->created, Text::_('DATE_FORMAT_LC3')); ?>
|
||||
</time>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('itemCategory')) : ?>
|
||||
<span class="mod-k2-content__category">
|
||||
<span class="icon-folder" aria-hidden="true"></span>
|
||||
<a href="<?php echo $item->categoryLink; ?>">
|
||||
<?php echo $item->categoryname; ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('itemHits')) : ?>
|
||||
<span class="mod-k2-content__hits">
|
||||
<span class="icon-eye" aria-hidden="true"></span>
|
||||
<?php echo $item->hits; ?> <?php echo Text::_('MOD_K2_CONTENT_HITS'); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('itemIntroText') && !empty($item->introtext)) : ?>
|
||||
<div class="mod-k2-content__intro">
|
||||
<?php echo $item->introtext; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('itemReadMore')) : ?>
|
||||
<div class="mod-k2-content__readmore">
|
||||
<a href="<?php echo $item->link; ?>" class="mod-k2-content__readmore-link btn btn-secondary">
|
||||
<?php echo Text::_('MOD_K2_CONTENT_READ_MORE'); ?>
|
||||
<span class="icon-chevron-right" aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
|
||||
<?php if ($params->get('itemCustomLink')) : ?>
|
||||
<div class="mod-k2-content__custom-link">
|
||||
<a href="<?php echo $params->get('itemCustomLinkURL'); ?>" class="btn btn-primary">
|
||||
<?php echo $params->get('itemCustomLinkTitle'); ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
<div class="mod-k2-content__empty">
|
||||
<p><?php echo Text::_('MOD_K2_CONTENT_NO_ITEMS'); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,110 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Kunena
|
||||
* @subpackage mod_kunenalatest
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_kunenalatest module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-kunena-latest mod-kunena-latest-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if (!empty($posts)) : ?>
|
||||
<ul class="mod-kunena-latest__list">
|
||||
<?php foreach ($posts as $post) : ?>
|
||||
<li class="mod-kunena-latest__item">
|
||||
<?php if ($params->get('sh_userpic', 1) && !empty($post->getAuthor()->getAvatarImage())) : ?>
|
||||
<div class="mod-kunena-latest__avatar">
|
||||
<?php echo $post->getAuthor()->getAvatarImage('', 40, 40); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-kunena-latest__content">
|
||||
<?php if ($params->get('sh_topic', 1)) : ?>
|
||||
<h<?php echo $params->get('header_level', 4); ?> class="mod-kunena-latest__title">
|
||||
<a href="<?php echo $post->getUrl(); ?>">
|
||||
<?php echo htmlspecialchars($post->subject, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</a>
|
||||
</h<?php echo $params->get('header_level', 4); ?>>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-kunena-latest__meta">
|
||||
<?php if ($params->get('sh_username', 1)) : ?>
|
||||
<span class="mod-kunena-latest__author">
|
||||
<span class="icon-user" aria-hidden="true"></span>
|
||||
<a href="<?php echo $post->getAuthor()->getLink(); ?>">
|
||||
<?php echo $post->getAuthor()->getName(); ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('sh_time', 1)) : ?>
|
||||
<span class="mod-kunena-latest__date">
|
||||
<span class="icon-clock" aria-hidden="true"></span>
|
||||
<time datetime="<?php echo HTMLHelper::_('date', $post->time, 'c'); ?>">
|
||||
<?php echo $post->getTime(); ?>
|
||||
</time>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('sh_category', 1)) : ?>
|
||||
<span class="mod-kunena-latest__category">
|
||||
<span class="icon-folder" aria-hidden="true"></span>
|
||||
<a href="<?php echo $post->getCategory()->getUrl(); ?>">
|
||||
<?php echo $post->getCategory()->name; ?>
|
||||
</a>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('sh_hits', 0)) : ?>
|
||||
<span class="mod-kunena-latest__hits">
|
||||
<span class="icon-eye" aria-hidden="true"></span>
|
||||
<?php echo $post->getTopic()->hits; ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('sh_replies', 0)) : ?>
|
||||
<span class="mod-kunena-latest__replies">
|
||||
<span class="icon-comments" aria-hidden="true"></span>
|
||||
<?php echo $post->getTopic()->getReplies(); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('sh_text', 0) && !empty($post->message)) : ?>
|
||||
<div class="mod-kunena-latest__excerpt">
|
||||
<?php echo KunenaHtmlParser::parseBBCode($post->message, $params->get('txt_len', 50)); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
|
||||
<?php if ($params->get('more_link', 1)) : ?>
|
||||
<div class="mod-kunena-latest__more">
|
||||
<a href="<?php echo KunenaRoute::_('index.php?option=com_kunena'); ?>"
|
||||
class="mod-kunena-latest__more-link btn btn-secondary">
|
||||
<?php echo Text::_('MOD_KUNENALATEST_MORE'); ?>
|
||||
<span class="icon-chevron-right" aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
<div class="mod-kunena-latest__empty">
|
||||
<p><?php echo Text::_('MOD_KUNENALATEST_NO_POSTS'); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,188 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Kunena
|
||||
* @subpackage mod_kunenalogin
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_kunenalogin module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
use Joomla\CMS\Router\Route;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-kunena-login mod-kunena-login-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if ($kunena_my->exists()) : ?>
|
||||
<!-- Logged in state -->
|
||||
<div class="mod-kunena-login__profile">
|
||||
<?php if ($params->get('showAvatar', 1)) : ?>
|
||||
<div class="mod-kunena-login__avatar">
|
||||
<?php echo $kunena_my->getAvatarImage('', 60, 60); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-kunena-login__user-info">
|
||||
<div class="mod-kunena-login__username">
|
||||
<a href="<?php echo $kunena_my->getURL(); ?>">
|
||||
<?php echo $kunena_my->getName(); ?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('showRank', 1) && !empty($kunena_my->getRank())) : ?>
|
||||
<div class="mod-kunena-login__rank">
|
||||
<?php echo $kunena_my->getRank(); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('showStats', 1)) : ?>
|
||||
<div class="mod-kunena-login__stats">
|
||||
<div class="mod-kunena-login__stat">
|
||||
<span class="mod-kunena-login__stat-label"><?php echo Text::_('MOD_KUNENALOGIN_POSTS'); ?>:</span>
|
||||
<span class="mod-kunena-login__stat-value"><?php echo $kunena_my->posts; ?></span>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('showKarma', 0) && isset($kunena_my->karma)) : ?>
|
||||
<div class="mod-kunena-login__stat">
|
||||
<span class="mod-kunena-login__stat-label"><?php echo Text::_('MOD_KUNENALOGIN_KARMA'); ?>:</span>
|
||||
<span class="mod-kunena-login__stat-value"><?php echo $kunena_my->karma; ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-kunena-login__actions">
|
||||
<?php if ($params->get('showProfile', 1)) : ?>
|
||||
<a href="<?php echo $kunena_my->getURL(); ?>" class="mod-kunena-login__btn btn btn-secondary">
|
||||
<span class="icon-user" aria-hidden="true"></span>
|
||||
<?php echo Text::_('MOD_KUNENALOGIN_PROFILE'); ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('showMessages', 1)) : ?>
|
||||
<a href="<?php echo KunenaRoute::_('index.php?option=com_kunena&view=user&layout=messages'); ?>"
|
||||
class="mod-kunena-login__btn btn btn-secondary">
|
||||
<span class="icon-envelope" aria-hidden="true"></span>
|
||||
<?php echo Text::_('MOD_KUNENALOGIN_PRIVATE_MESSAGES'); ?>
|
||||
<?php if (!empty($private_messages)) : ?>
|
||||
<span class="mod-kunena-login__badge"><?php echo $private_messages; ?></span>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="<?php echo Route::_('index.php', true); ?>" method="post" class="mod-kunena-login__logout-form">
|
||||
<button type="submit" class="mod-kunena-login__btn mod-kunena-login__btn--logout btn btn-primary">
|
||||
<span class="icon-sign-out" aria-hidden="true"></span>
|
||||
<?php echo Text::_('MOD_KUNENALOGIN_LOGOUT'); ?>
|
||||
</button>
|
||||
<input type="hidden" name="option" value="com_users" />
|
||||
<input type="hidden" name="task" value="user.logout" />
|
||||
<input type="hidden" name="return" value="<?php echo $return; ?>" />
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</form>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<!-- Login form -->
|
||||
<form action="<?php echo Route::_('index.php', true); ?>" method="post" class="mod-kunena-login__form">
|
||||
<?php if ($params->get('pretext')) : ?>
|
||||
<div class="mod-kunena-login__pretext">
|
||||
<?php echo $params->get('pretext'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-kunena-login__fields">
|
||||
<div class="mod-kunena-login__field">
|
||||
<label for="kunena-login-username-<?php echo $module->id; ?>" class="mod-kunena-login__label">
|
||||
<?php echo Text::_('MOD_KUNENALOGIN_USERNAME'); ?>
|
||||
</label>
|
||||
<input
|
||||
id="kunena-login-username-<?php echo $module->id; ?>"
|
||||
type="text"
|
||||
name="username"
|
||||
class="mod-kunena-login__input form-control"
|
||||
placeholder="<?php echo Text::_('MOD_KUNENALOGIN_USERNAME'); ?>"
|
||||
autocomplete="username"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="mod-kunena-login__field">
|
||||
<label for="kunena-login-password-<?php echo $module->id; ?>" class="mod-kunena-login__label">
|
||||
<?php echo Text::_('MOD_KUNENALOGIN_PASSWORD'); ?>
|
||||
</label>
|
||||
<input
|
||||
id="kunena-login-password-<?php echo $module->id; ?>"
|
||||
type="password"
|
||||
name="password"
|
||||
class="mod-kunena-login__input form-control"
|
||||
placeholder="<?php echo Text::_('MOD_KUNENALOGIN_PASSWORD'); ?>"
|
||||
autocomplete="current-password"
|
||||
required
|
||||
/>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('showRememberMe', 1)) : ?>
|
||||
<div class="mod-kunena-login__remember">
|
||||
<input
|
||||
id="kunena-login-remember-<?php echo $module->id; ?>"
|
||||
type="checkbox"
|
||||
name="remember"
|
||||
class="mod-kunena-login__checkbox"
|
||||
value="yes"
|
||||
/>
|
||||
<label for="kunena-login-remember-<?php echo $module->id; ?>" class="mod-kunena-login__remember-label">
|
||||
<?php echo Text::_('MOD_KUNENALOGIN_REMEMBER_ME'); ?>
|
||||
</label>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<div class="mod-kunena-login__actions">
|
||||
<button type="submit" class="mod-kunena-login__btn mod-kunena-login__btn--submit btn btn-primary">
|
||||
<span class="icon-sign-in" aria-hidden="true"></span>
|
||||
<?php echo Text::_('MOD_KUNENALOGIN_LOGIN'); ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="mod-kunena-login__links">
|
||||
<?php if ($params->get('showRegister', 1) && $usersConfig->get('allowUserRegistration')) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_users&view=registration'); ?>"
|
||||
class="mod-kunena-login__link">
|
||||
<?php echo Text::_('MOD_KUNENALOGIN_REGISTER'); ?>
|
||||
<span class="icon-chevron-right" aria-hidden="true"></span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('showForgot', 1)) : ?>
|
||||
<a href="<?php echo Route::_('index.php?option=com_users&view=reset'); ?>"
|
||||
class="mod-kunena-login__link">
|
||||
<?php echo Text::_('MOD_KUNENALOGIN_FORGOT_PASSWORD'); ?>
|
||||
<span class="icon-chevron-right" aria-hidden="true"></span>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('posttext')) : ?>
|
||||
<div class="mod-kunena-login__posttext">
|
||||
<?php echo $params->get('posttext'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<input type="hidden" name="option" value="com_users" />
|
||||
<input type="hidden" name="task" value="user.login" />
|
||||
<input type="hidden" name="return" value="<?php echo $return; ?>" />
|
||||
<?php echo HTMLHelper::_('form.token'); ?>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,74 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Kunena
|
||||
* @subpackage mod_kunenasearch
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_kunenasearch module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-kunena-search mod-kunena-search-responsive ' . $moduleclass_sfx;
|
||||
|
||||
$button_pos = $params->get('button_pos', 'right');
|
||||
$button_text = $params->get('button_text', '');
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<form action="<?php echo KunenaRoute::_('index.php?option=com_kunena&view=search'); ?>"
|
||||
method="post"
|
||||
class="mod-kunena-search__form mod-kunena-search__form--button-<?php echo $button_pos; ?>">
|
||||
|
||||
<?php if ($button_pos === 'top' || $button_pos === 'left') : ?>
|
||||
<div class="mod-kunena-search__button-wrapper mod-kunena-search__button-wrapper--<?php echo $button_pos; ?>">
|
||||
<button type="submit" class="mod-kunena-search__button btn btn-primary">
|
||||
<?php if ($button_text) : ?>
|
||||
<?php echo htmlspecialchars($button_text, ENT_COMPAT, 'UTF-8'); ?>
|
||||
<?php else : ?>
|
||||
<span class="icon-search" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo Text::_('MOD_KUNENASEARCH_SEARCH'); ?></span>
|
||||
<?php endif; ?>
|
||||
</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-kunena-search__input-wrapper">
|
||||
<label for="mod-kunena-search-<?php echo $module->id; ?>" class="visually-hidden">
|
||||
<?php echo Text::_('MOD_KUNENASEARCH_SEARCH_FORUM'); ?>
|
||||
</label>
|
||||
<input
|
||||
type="search"
|
||||
name="q"
|
||||
id="mod-kunena-search-<?php echo $module->id; ?>"
|
||||
class="mod-kunena-search__input form-control"
|
||||
placeholder="<?php echo Text::_('MOD_KUNENASEARCH_SEARCH_FORUM'); ?>"
|
||||
aria-label="<?php echo Text::_('MOD_KUNENASEARCH_SEARCH_FORUM'); ?>"
|
||||
value="<?php echo htmlspecialchars($params->get('default_value', ''), ENT_COMPAT, 'UTF-8'); ?>"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<?php if ($button_pos === 'bottom' || $button_pos === 'right') : ?>
|
||||
<div class="mod-kunena-search__button-wrapper mod-kunena-search__button-wrapper--<?php echo $button_pos; ?>">
|
||||
<button type="submit" class="mod-kunena-search__button btn btn-primary">
|
||||
<?php if ($button_text) : ?>
|
||||
<?php echo htmlspecialchars($button_text, ENT_COMPAT, 'UTF-8'); ?>
|
||||
<?php else : ?>
|
||||
<span class="icon-search" aria-hidden="true"></span>
|
||||
<span class="visually-hidden"><?php echo Text::_('MOD_KUNENASEARCH_SEARCH'); ?></span>
|
||||
<?php endif; ?>
|
||||
</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<input type="hidden" name="task" value="results" />
|
||||
<input type="hidden" name="option" value="com_kunena" />
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,100 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Kunena
|
||||
* @subpackage mod_kunenastats
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_kunenastats module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-kunena-stats mod-kunena-stats-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<div class="mod-kunena-stats__container">
|
||||
<?php if ($params->get('sh_latestMemberCount', 1)) : ?>
|
||||
<div class="mod-kunena-stats__stat">
|
||||
<div class="mod-kunena-stats__icon">
|
||||
<span class="icon-users" aria-hidden="true"></span>
|
||||
</div>
|
||||
<div class="mod-kunena-stats__content">
|
||||
<div class="mod-kunena-stats__value"><?php echo $kunena_stats->memberCount; ?></div>
|
||||
<div class="mod-kunena-stats__label"><?php echo Text::_('MOD_KUNENASTATS_MEMBERS'); ?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('sh_latestMember', 1) && !empty($kunena_stats->latestMember)) : ?>
|
||||
<div class="mod-kunena-stats__stat mod-kunena-stats__stat--latest-member">
|
||||
<div class="mod-kunena-stats__icon">
|
||||
<span class="icon-user-plus" aria-hidden="true"></span>
|
||||
</div>
|
||||
<div class="mod-kunena-stats__content">
|
||||
<div class="mod-kunena-stats__label"><?php echo Text::_('MOD_KUNENASTATS_LATEST_MEMBER'); ?></div>
|
||||
<div class="mod-kunena-stats__value mod-kunena-stats__value--link">
|
||||
<a href="<?php echo $kunena_stats->latestMember->getURL(); ?>">
|
||||
<?php echo $kunena_stats->latestMember->getName(); ?>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('sh_messageCount', 1)) : ?>
|
||||
<div class="mod-kunena-stats__stat">
|
||||
<div class="mod-kunena-stats__icon">
|
||||
<span class="icon-comments" aria-hidden="true"></span>
|
||||
</div>
|
||||
<div class="mod-kunena-stats__content">
|
||||
<div class="mod-kunena-stats__value"><?php echo $kunena_stats->messageCount; ?></div>
|
||||
<div class="mod-kunena-stats__label"><?php echo Text::_('MOD_KUNENASTATS_MESSAGES'); ?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('sh_topicCount', 1)) : ?>
|
||||
<div class="mod-kunena-stats__stat">
|
||||
<div class="mod-kunena-stats__icon">
|
||||
<span class="icon-folder-open" aria-hidden="true"></span>
|
||||
</div>
|
||||
<div class="mod-kunena-stats__content">
|
||||
<div class="mod-kunena-stats__value"><?php echo $kunena_stats->topicCount; ?></div>
|
||||
<div class="mod-kunena-stats__label"><?php echo Text::_('MOD_KUNENASTATS_TOPICS'); ?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('sh_todayTopicCount', 0)) : ?>
|
||||
<div class="mod-kunena-stats__stat">
|
||||
<div class="mod-kunena-stats__icon">
|
||||
<span class="icon-calendar-check" aria-hidden="true"></span>
|
||||
</div>
|
||||
<div class="mod-kunena-stats__content">
|
||||
<div class="mod-kunena-stats__value"><?php echo $kunena_stats->todayTopicCount; ?></div>
|
||||
<div class="mod-kunena-stats__label"><?php echo Text::_('MOD_KUNENASTATS_TODAY_TOPICS'); ?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('sh_yesterdayTopicCount', 0)) : ?>
|
||||
<div class="mod-kunena-stats__stat">
|
||||
<div class="mod-kunena-stats__icon">
|
||||
<span class="icon-calendar" aria-hidden="true"></span>
|
||||
</div>
|
||||
<div class="mod-kunena-stats__content">
|
||||
<div class="mod-kunena-stats__value"><?php echo $kunena_stats->yesterdayTopicCount; ?></div>
|
||||
<div class="mod-kunena-stats__label"><?php echo Text::_('MOD_KUNENASTATS_YESTERDAY_TOPICS'); ?></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,11 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage mod_menu
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Main Menu - Mobile responsive collapsible dropdown menu override
|
||||
* Bootstrap 5 responsive navbar with hamburger menu
|
||||
*/
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage mod_menu
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Main Menu - Component item layout
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage mod_menu
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Main Menu - Heading item layout
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage mod_menu
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Main Menu - Separator item layout
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage mod_menu
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Main Menu - URL item layout
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,105 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package OS Membership Pro
|
||||
* @subpackage mod_osmembership
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_osmembership module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-osmembership mod-osmembership-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if (!empty($plans)) : ?>
|
||||
<div class="mod-osmembership__plans">
|
||||
<?php foreach ($plans as $plan) : ?>
|
||||
<div class="mod-osmembership__plan">
|
||||
<?php if ($params->get('show_plan_image', 1) && !empty($plan->image)) : ?>
|
||||
<div class="mod-osmembership__plan-image">
|
||||
<img src="<?php echo $plan->image; ?>"
|
||||
alt="<?php echo htmlspecialchars($plan->title, ENT_COMPAT, 'UTF-8'); ?>" />
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-osmembership__plan-content">
|
||||
<h<?php echo $params->get('header_level', 3); ?> class="mod-osmembership__plan-title">
|
||||
<?php echo htmlspecialchars($plan->title, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</h<?php echo $params->get('header_level', 3); ?>>
|
||||
|
||||
<?php if ($params->get('show_short_description', 1) && !empty($plan->short_description)) : ?>
|
||||
<div class="mod-osmembership__plan-description">
|
||||
<?php echo $plan->short_description; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('show_price', 1)) : ?>
|
||||
<div class="mod-osmembership__plan-pricing">
|
||||
<?php if ($plan->price > 0) : ?>
|
||||
<div class="mod-osmembership__price">
|
||||
<span class="mod-osmembership__currency"><?php echo $config->currency_symbol; ?></span>
|
||||
<span class="mod-osmembership__amount"><?php echo number_format($plan->price, 2); ?></span>
|
||||
<?php if ($plan->subscription_length > 0) : ?>
|
||||
<span class="mod-osmembership__period">
|
||||
/ <?php echo $plan->subscription_length . ' ' . Text::_('OSM_' . strtoupper($plan->subscription_length_unit)); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="mod-osmembership__price mod-osmembership__price--free">
|
||||
<?php echo Text::_('OSM_FREE'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if ($params->get('show_features', 1) && !empty($plan->features)) : ?>
|
||||
<div class="mod-osmembership__features">
|
||||
<ul class="mod-osmembership__features-list">
|
||||
<?php foreach (explode("\n", $plan->features) as $feature) : ?>
|
||||
<?php if (trim($feature)) : ?>
|
||||
<li class="mod-osmembership__feature">
|
||||
<span class="icon-check" aria-hidden="true"></span>
|
||||
<?php echo htmlspecialchars(trim($feature), ENT_COMPAT, 'UTF-8'); ?>
|
||||
</li>
|
||||
<?php endif; ?>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-osmembership__actions">
|
||||
<a href="<?php echo $plan->link; ?>"
|
||||
class="mod-osmembership__btn btn btn-primary">
|
||||
<?php echo $params->get('button_text', Text::_('OSM_SUBSCRIBE')); ?>
|
||||
<span class="icon-chevron-right" aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
|
||||
<?php if ($params->get('show_all_plans_link', 1)) : ?>
|
||||
<div class="mod-osmembership__all-plans">
|
||||
<a href="<?php echo OSMembershipHelperRoute::getCategoriesRoute(); ?>"
|
||||
class="mod-osmembership__all-plans-link btn btn-secondary">
|
||||
<?php echo Text::_('OSM_VIEW_ALL_PLANS'); ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
<div class="mod-osmembership__empty">
|
||||
<p><?php echo Text::_('OSM_NO_PLANS_AVAILABLE'); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,122 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package VirtueMart
|
||||
* @subpackage mod_virtuemart_cart
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_virtuemart_cart module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
// Load VirtueMart assets if not already loaded
|
||||
vmJsApi::js('fancybox/jquery.fancybox-1.3.4.pack');
|
||||
vmJsApi::css('jquery.fancybox-1.3.4');
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
$show_price = $params->get('show_price', 1);
|
||||
$show_product_list = $params->get('show_product_list', 1);
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-vm-cart mod-vm-cart-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if (!empty($data->totalProduct) && $data->totalProduct > 0) : ?>
|
||||
<div class="mod-vm-cart__header">
|
||||
<span class="mod-vm-cart__icon" aria-hidden="true">
|
||||
<span class="icon-basket"></span>
|
||||
</span>
|
||||
<div class="mod-vm-cart__summary">
|
||||
<div class="mod-vm-cart__count">
|
||||
<?php echo $data->totalProduct; ?>
|
||||
<?php echo $data->totalProduct == 1 ? Text::_('MOD_VIRTUEMART_CART_ITEM') : Text::_('MOD_VIRTUEMART_CART_ITEMS'); ?>
|
||||
</div>
|
||||
<?php if ($show_price && !empty($data->billTotal)) : ?>
|
||||
<div class="mod-vm-cart__total">
|
||||
<?php echo $data->billTotal; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php if ($show_product_list && !empty($data->products)) : ?>
|
||||
<div class="mod-vm-cart__products">
|
||||
<?php foreach ($data->products as $product) : ?>
|
||||
<div class="mod-vm-cart__product">
|
||||
<?php if (!empty($product->image)) : ?>
|
||||
<div class="mod-vm-cart__product-image">
|
||||
<a href="<?php echo $product->url; ?>"
|
||||
title="<?php echo htmlspecialchars($product->product_name, ENT_COMPAT, 'UTF-8'); ?>">
|
||||
<?php echo $product->image; ?>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-vm-cart__product-details">
|
||||
<div class="mod-vm-cart__product-name">
|
||||
<a href="<?php echo $product->url; ?>">
|
||||
<?php echo htmlspecialchars($product->product_name, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="mod-vm-cart__product-quantity">
|
||||
<?php echo Text::_('MOD_VIRTUEMART_CART_QUANTITY'); ?>:
|
||||
<span class="mod-vm-cart__quantity-value"><?php echo $product->quantity; ?></span>
|
||||
</div>
|
||||
|
||||
<?php if ($show_price && !empty($product->prices)) : ?>
|
||||
<div class="mod-vm-cart__product-price">
|
||||
<?php echo $product->prices; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($product->delete_link)) : ?>
|
||||
<div class="mod-vm-cart__product-remove">
|
||||
<a href="<?php echo $product->delete_link; ?>"
|
||||
class="mod-vm-cart__remove-btn"
|
||||
title="<?php echo Text::_('MOD_VIRTUEMART_CART_DELETE'); ?>"
|
||||
aria-label="<?php echo Text::_('MOD_VIRTUEMART_CART_DELETE') . ' ' . htmlspecialchars($product->product_name, ENT_COMPAT, 'UTF-8'); ?>">
|
||||
<span class="icon-remove" aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-vm-cart__actions">
|
||||
<?php if (!empty($data->cart_show)) : ?>
|
||||
<a href="<?php echo $data->cart_show; ?>"
|
||||
class="mod-vm-cart__btn mod-vm-cart__btn--view btn btn-secondary"
|
||||
title="<?php echo Text::_('MOD_VIRTUEMART_CART_SHOW'); ?>">
|
||||
<?php echo Text::_('MOD_VIRTUEMART_CART_SHOW'); ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($data->checkout_link)) : ?>
|
||||
<a href="<?php echo $data->checkout_link; ?>"
|
||||
class="mod-vm-cart__btn mod-vm-cart__btn--checkout btn btn-primary"
|
||||
title="<?php echo Text::_('MOD_VIRTUEMART_CART_CHECKOUT'); ?>">
|
||||
<?php echo Text::_('MOD_VIRTUEMART_CART_CHECKOUT'); ?>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="mod-vm-cart__empty">
|
||||
<span class="mod-vm-cart__empty-icon" aria-hidden="true">
|
||||
<span class="icon-basket"></span>
|
||||
</span>
|
||||
<p class="mod-vm-cart__empty-text">
|
||||
<?php echo Text::_('MOD_VIRTUEMART_CART_EMPTY'); ?>
|
||||
</p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,85 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package VirtueMart
|
||||
* @subpackage mod_virtuemart_category
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_virtuemart_category module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
$show_images = $params->get('show_images', 1);
|
||||
$show_description = $params->get('show_description', 0);
|
||||
$show_product_count = $params->get('show_product_count', 0);
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-vm-category mod-vm-category-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if (!empty($categories)) : ?>
|
||||
<nav class="mod-vm-category__nav" aria-label="<?php echo Text::_('MOD_VIRTUEMART_CATEGORY_NAVIGATION'); ?>">
|
||||
<ul class="mod-vm-category__list">
|
||||
<?php foreach ($categories as $category) : ?>
|
||||
<li class="mod-vm-category__item <?php echo ($category->current) ? 'mod-vm-category__item--active' : ''; ?>">
|
||||
<a href="<?php echo $category->link; ?>"
|
||||
class="mod-vm-category__link <?php echo ($category->current) ? 'mod-vm-category__link--active' : ''; ?>"
|
||||
<?php echo ($category->current) ? 'aria-current="page"' : ''; ?>>
|
||||
|
||||
<?php if ($show_images && !empty($category->images[0])) : ?>
|
||||
<span class="mod-vm-category__image">
|
||||
<?php echo $category->images[0]->displayMediaThumb('', false); ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
|
||||
<span class="mod-vm-category__name">
|
||||
<?php echo htmlspecialchars($category->category_name, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</span>
|
||||
|
||||
<?php if ($show_product_count && isset($category->product_count)) : ?>
|
||||
<span class="mod-vm-category__count">
|
||||
(<?php echo $category->product_count; ?>)
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
|
||||
<?php if ($show_description && !empty($category->category_description)) : ?>
|
||||
<div class="mod-vm-category__description">
|
||||
<?php echo shopFunctionsF::limitStringByWord($category->category_description, 50, '...'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($category->children)) : ?>
|
||||
<ul class="mod-vm-category__sublist">
|
||||
<?php foreach ($category->children as $child) : ?>
|
||||
<li class="mod-vm-category__subitem <?php echo ($child->current) ? 'mod-vm-category__subitem--active' : ''; ?>">
|
||||
<a href="<?php echo $child->link; ?>"
|
||||
class="mod-vm-category__sublink <?php echo ($child->current) ? 'mod-vm-category__sublink--active' : ''; ?>"
|
||||
<?php echo ($child->current) ? 'aria-current="page"' : ''; ?>>
|
||||
<?php echo htmlspecialchars($child->category_name, ENT_COMPAT, 'UTF-8'); ?>
|
||||
<?php if ($show_product_count && isset($child->product_count)) : ?>
|
||||
<span class="mod-vm-category__count">
|
||||
(<?php echo $child->product_count; ?>)
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</a>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php else : ?>
|
||||
<div class="mod-vm-category__empty">
|
||||
<p><?php echo Text::_('MOD_VIRTUEMART_CATEGORY_NO_CATEGORIES'); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,72 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package VirtueMart
|
||||
* @subpackage mod_virtuemart_currencies
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_virtuemart_currencies module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
$text_before = $params->get('text_before', '');
|
||||
$text_after = $params->get('text_after', '');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-vm-currencies mod-vm-currencies-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if ($text_before) : ?>
|
||||
<div class="mod-vm-currencies__text-before">
|
||||
<?php echo $text_before; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="<?php echo $action; ?>" method="post" id="currency_form_<?php echo $module->id; ?>" class="mod-vm-currencies__form">
|
||||
<label for="virtuemart_currency_id_<?php echo $module->id; ?>" class="mod-vm-currencies__label">
|
||||
<?php echo Text::_('MOD_VIRTUEMART_CURRENCIES_SELECT'); ?>
|
||||
</label>
|
||||
|
||||
<div class="mod-vm-currencies__select-wrapper">
|
||||
<select
|
||||
name="virtuemart_currency_id"
|
||||
id="virtuemart_currency_id_<?php echo $module->id; ?>"
|
||||
class="mod-vm-currencies__select form-select"
|
||||
onchange="document.getElementById('currency_form_<?php echo $module->id; ?>').submit();"
|
||||
aria-label="<?php echo Text::_('MOD_VIRTUEMART_CURRENCIES_SELECT'); ?>">
|
||||
<?php foreach ($currencies as $currency) : ?>
|
||||
<option
|
||||
value="<?php echo $currency->virtuemart_currency_id; ?>"
|
||||
<?php echo ($currency->virtuemart_currency_id == $virtuemart_currency_id) ? 'selected="selected"' : ''; ?>>
|
||||
<?php echo $currency->currency_name; ?> (<?php echo $currency->currency_code_3; ?>)
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
<span class="mod-vm-currencies__icon" aria-hidden="true">
|
||||
<span class="icon-chevron-down"></span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<noscript>
|
||||
<button type="submit" class="mod-vm-currencies__submit btn btn-primary">
|
||||
<?php echo Text::_('MOD_VIRTUEMART_CURRENCIES_CHANGE'); ?>
|
||||
</button>
|
||||
</noscript>
|
||||
|
||||
<input type="hidden" name="option" value="com_virtuemart" />
|
||||
<input type="hidden" name="view" value="user" />
|
||||
<input type="hidden" name="task" value="setcurrency" />
|
||||
</form>
|
||||
|
||||
<?php if ($text_after) : ?>
|
||||
<div class="mod-vm-currencies__text-after">
|
||||
<?php echo $text_after; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,59 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package VirtueMart
|
||||
* @subpackage mod_virtuemart_manufacturer
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_virtuemart_manufacturer module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
$show_images = $params->get('show_images', 1);
|
||||
$display_style = $params->get('display_style', 'list');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-vm-manufacturer mod-vm-manufacturer-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if (!empty($manufacturers)) : ?>
|
||||
<div class="mod-vm-manufacturer__container mod-vm-manufacturer__container--<?php echo $display_style; ?>">
|
||||
<?php foreach ($manufacturers as $manufacturer) : ?>
|
||||
<div class="mod-vm-manufacturer__item">
|
||||
<a href="<?php echo $manufacturer->link; ?>"
|
||||
class="mod-vm-manufacturer__link"
|
||||
title="<?php echo htmlspecialchars($manufacturer->mf_name, ENT_COMPAT, 'UTF-8'); ?>">
|
||||
|
||||
<?php if ($show_images && !empty($manufacturer->images[0])) : ?>
|
||||
<div class="mod-vm-manufacturer__image">
|
||||
<?php echo $manufacturer->images[0]->displayMediaThumb('', false); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-vm-manufacturer__content">
|
||||
<span class="mod-vm-manufacturer__name">
|
||||
<?php echo htmlspecialchars($manufacturer->mf_name, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</span>
|
||||
|
||||
<?php if (!empty($manufacturer->mf_desc)) : ?>
|
||||
<div class="mod-vm-manufacturer__description">
|
||||
<?php echo shopFunctionsF::limitStringByWord($manufacturer->mf_desc, 30, '...'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="mod-vm-manufacturer__empty">
|
||||
<p><?php echo Text::_('MOD_VIRTUEMART_MANUFACTURER_NO_MANUFACTURERS'); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -1,93 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* @package VirtueMart
|
||||
* @subpackage mod_virtuemart_product
|
||||
*
|
||||
* @copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*
|
||||
* Mobile responsive override for mod_virtuemart_product module
|
||||
*/
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\HTML\HTMLHelper;
|
||||
use Joomla\CMS\Language\Text;
|
||||
|
||||
$moduleclass_sfx = htmlspecialchars($params->get('moduleclass_sfx', ''), ENT_COMPAT, 'UTF-8');
|
||||
$headerText = $params->get('headerText', '');
|
||||
$headerText = HTMLHelper::_('content.prepare', $headerText);
|
||||
$display_style = $params->get('display_style', 'div');
|
||||
|
||||
// Add responsive wrapper class
|
||||
$wrapperClass = 'mod-vm-product mod-vm-product-responsive ' . $moduleclass_sfx;
|
||||
?>
|
||||
|
||||
<div class="<?php echo $wrapperClass; ?>">
|
||||
<?php if ($headerText) : ?>
|
||||
<div class="mod-vm-product__header">
|
||||
<?php echo $headerText; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($products)) : ?>
|
||||
<div class="mod-vm-product__list mod-vm-product__list--<?php echo $display_style; ?>">
|
||||
<?php foreach ($products as $product) : ?>
|
||||
<div class="mod-vm-product__item">
|
||||
<?php if (!empty($product->images[0])) : ?>
|
||||
<div class="mod-vm-product__image">
|
||||
<a href="<?php echo $product->link; ?>"
|
||||
title="<?php echo htmlspecialchars($product->product_name, ENT_COMPAT, 'UTF-8'); ?>">
|
||||
<?php echo $product->images[0]->displayMediaThumb('', false); ?>
|
||||
</a>
|
||||
|
||||
<?php if (!empty($product->product_availability)) : ?>
|
||||
<span class="mod-vm-product__availability">
|
||||
<?php echo $product->product_availability; ?>
|
||||
</span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-vm-product__content">
|
||||
<h3 class="mod-vm-product__title">
|
||||
<a href="<?php echo $product->link; ?>">
|
||||
<?php echo htmlspecialchars($product->product_name, ENT_COMPAT, 'UTF-8'); ?>
|
||||
</a>
|
||||
</h3>
|
||||
|
||||
<?php if (!empty($product->product_s_desc)) : ?>
|
||||
<div class="mod-vm-product__description">
|
||||
<?php echo shopFunctionsF::limitStringByWord($product->product_s_desc, 60, '...'); ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($product->prices)) : ?>
|
||||
<div class="mod-vm-product__price">
|
||||
<?php echo $product->prices; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="mod-vm-product__actions">
|
||||
<a href="<?php echo $product->link; ?>"
|
||||
class="mod-vm-product__btn mod-vm-product__btn--view btn btn-secondary"
|
||||
title="<?php echo Text::_('MOD_VIRTUEMART_PRODUCT_DETAILS'); ?>">
|
||||
<?php echo Text::_('MOD_VIRTUEMART_PRODUCT_DETAILS'); ?>
|
||||
</a>
|
||||
|
||||
<?php if (!empty($product->form)) : ?>
|
||||
<div class="mod-vm-product__form">
|
||||
<?php echo $product->form; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
<?php else : ?>
|
||||
<div class="mod-vm-product__empty">
|
||||
<p><?php echo Text::_('MOD_VIRTUEMART_PRODUCT_NO_PRODUCTS'); ?></p>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -514,7 +514,7 @@ $wa->useScript('user.js'); // js/user.js
|
||||
<?php if ($this->countModules('drawer-left', true)) : ?>
|
||||
<!-- Left Offcanvas Drawer -->
|
||||
<aside class="offcanvas offcanvas-start" tabindex="-1" id="drawer-left">
|
||||
<div class="offcanvas-header justify-content-start">
|
||||
<div class="offcanvas-header justify-content-end">
|
||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="<?php echo Text::_('JLIB_HTML_BEHAVIOR_CLOSE'); ?>"><span class="fa fa-close"></span></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
@@ -526,7 +526,7 @@ $wa->useScript('user.js'); // js/user.js
|
||||
<?php if ($this->countModules('drawer-right', true)) : ?>
|
||||
<!-- Right Offcanvas Drawer -->
|
||||
<aside class="offcanvas offcanvas-end" tabindex="-1" id="drawer-right">
|
||||
<div class="offcanvas-header justify-content-end">
|
||||
<div class="offcanvas-header justify-content-start">
|
||||
<button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="<?php echo Text::_('JLIB_HTML_BEHAVIOR_CLOSE'); ?>"><span class="fa fa-close"></span></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
|
||||
@@ -4,15 +4,6 @@
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: ./media/templates/site/mokocassiopeia/css/editor.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Stylesheet for Joomla editor content within MokoCassiopeia template
|
||||
*/
|
||||
|
||||
/* STYLES FOR JOOMLA! EDITOR */
|
||||
|
||||
@@ -1,16 +1,8 @@
|
||||
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
/* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Styles
|
||||
PATH: ./media/templates/site/mokocassiopeia/css/fonts/fira-sans.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Fira Sans font family definitions (self-hosted)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,16 +1,8 @@
|
||||
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
/* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Styles
|
||||
PATH: ./media/templates/site/mokocassiopeia/css/fonts/noto-sans.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Noto Sans font family definitions (self-hosted)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
/**
|
||||
* @package MokoCassiopeia
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 3 or later
|
||||
/* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
|
||||
@@ -1,16 +1,8 @@
|
||||
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
/* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia.Styles
|
||||
PATH: ./media/templates/site/mokocassiopeia/css/fonts/roboto.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Roboto font family definitions (self-hosted)
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -4,15 +4,6 @@
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: ./media/templates/site/mokocassiopeia/css/system/searchtools/searchtools.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Stylesheet for Joomla search tools integration in MokoCassiopeia template
|
||||
*/
|
||||
|
||||
.js-stools-container-bar {
|
||||
|
||||
@@ -4,15 +4,6 @@
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: ./media/templates/site/mokocassiopeia/css/template-rtl.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Right-to-left (RTL) layout stylesheet for MokoCassiopeia template
|
||||
*/
|
||||
|
||||
/*!
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,16 +5,6 @@
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: ./media/templates/site/mokocassiopeia/css/global/dark/colors_standard.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Standard dark mode color definitions for MokoCassiopeia template
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------
|
||||
* DARK THEME
|
||||
* --------------------------------------------- */
|
||||
@@ -526,6 +516,8 @@ color-scheme: dark;
|
||||
--hero-bg-size: cover;
|
||||
--hero-border-bottom: solid var(--accent-color-secondary);
|
||||
--hero-overlay-bg: hsla(0, 0%, 0%, 0.3);
|
||||
--hero-overlay-bg-position: center;
|
||||
--hero-overlay-bg-size: cover;
|
||||
--hero-overlay-padding: 1em;
|
||||
--hero-overlay-text-align: center;
|
||||
--hero-overlay-text-color: var(--body-color);
|
||||
@@ -541,6 +533,25 @@ color-scheme: dark;
|
||||
--hero-secondary-overlay: linear-gradient(rgba(8, 15, 30, .80), rgba(8, 15, 30, .80));
|
||||
--hero-secondary-color: #f1f5f9;
|
||||
|
||||
/* ===== HERO CARD (inner .hero element) ===== */
|
||||
/* Default card — uses primary variant values */
|
||||
--hero-card-bg: var(--hero-primary-bg-color);
|
||||
--hero-card-color: var(--hero-primary-color);
|
||||
--hero-card-overlay: var(--hero-primary-overlay);
|
||||
--hero-card-border-radius: .5rem;
|
||||
--hero-card-padding-x: 2rem;
|
||||
--hero-card-padding-y: 3rem;
|
||||
--hero-card-max-width: 600px;
|
||||
|
||||
/* Alternative card — uses secondary variant values */
|
||||
--hero-alt-card-bg: var(--hero-secondary-bg-color);
|
||||
--hero-alt-card-color: var(--hero-secondary-color);
|
||||
--hero-alt-card-overlay: var(--hero-secondary-overlay);
|
||||
--hero-alt-card-border-radius: .5rem;
|
||||
--hero-alt-card-padding-x: 2rem;
|
||||
--hero-alt-card-padding-y: 3rem;
|
||||
--hero-alt-card-max-width: 600px;
|
||||
|
||||
/* ===== BLOCK COLORS (top-a / top-b / bottom-a / bottom-b) ===== */
|
||||
--block-color-1: var(--secondary-bg);
|
||||
--block-text-1: var(--body-color);
|
||||
@@ -820,7 +831,7 @@ color-scheme: dark;
|
||||
--btn-font-weight: 400;
|
||||
--btn-line-height: 1.5;
|
||||
--btn-color: var(--white);
|
||||
--btn-bg: transparent;
|
||||
--btn-bg: var(--body-bg);
|
||||
--btn-border-width: 1px;
|
||||
--btn-border-color: transparent;
|
||||
--btn-border-radius: 0.25rem;
|
||||
|
||||
@@ -5,16 +5,6 @@
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: ./media/templates/site/mokocassiopeia/css/global/light/colors_standard.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Standard light mode color definitions for MokoCassiopeia template
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------
|
||||
* LIGHT THEME
|
||||
* --------------------------------------------- */
|
||||
@@ -525,6 +515,8 @@ color-scheme: light;
|
||||
--hero-bg-size: cover;
|
||||
--hero-border-bottom: solid var(--accent-color-secondary);
|
||||
--hero-overlay-bg: hsla(0, 0%, 0%, 0.1);
|
||||
--hero-overlay-bg-position: center;
|
||||
--hero-overlay-bg-size: cover;
|
||||
--hero-overlay-padding: 1em;
|
||||
--hero-overlay-text-align: center;
|
||||
--hero-overlay-text-color: var(--body-color);
|
||||
@@ -540,6 +532,25 @@ color-scheme: light;
|
||||
--hero-secondary-overlay: linear-gradient(rgba(17, 40, 85, .75), rgba(17, 40, 85, .75));
|
||||
--hero-secondary-color: #f1f5f9;
|
||||
|
||||
/* ===== HERO CARD (inner .hero element) ===== */
|
||||
/* Default card — uses primary variant values */
|
||||
--hero-card-bg: var(--hero-primary-bg-color);
|
||||
--hero-card-color: var(--hero-primary-color);
|
||||
--hero-card-overlay: var(--hero-primary-overlay);
|
||||
--hero-card-border-radius: .5rem;
|
||||
--hero-card-padding-x: 2rem;
|
||||
--hero-card-padding-y: 3rem;
|
||||
--hero-card-max-width: 600px;
|
||||
|
||||
/* Alternative card — uses secondary variant values */
|
||||
--hero-alt-card-bg: var(--hero-secondary-bg-color);
|
||||
--hero-alt-card-color: var(--hero-secondary-color);
|
||||
--hero-alt-card-overlay: var(--hero-secondary-overlay);
|
||||
--hero-alt-card-border-radius: .5rem;
|
||||
--hero-alt-card-padding-x: 2rem;
|
||||
--hero-alt-card-padding-y: 3rem;
|
||||
--hero-alt-card-max-width: 600px;
|
||||
|
||||
/* ===== BLOCK COLORS (top-a / top-b / bottom-a / bottom-b) ===== */
|
||||
--block-color-1: var(--color-primary);
|
||||
--block-text-1: var(--body-color);
|
||||
@@ -819,7 +830,7 @@ color-scheme: light;
|
||||
--btn-font-weight: 400;
|
||||
--btn-line-height: 1.5;
|
||||
--btn-color: hsl(210, 11%, 15%);
|
||||
--btn-bg: transparent;
|
||||
--btn-bg: var(--body-bg);
|
||||
--btn-border-width: 1px;
|
||||
--btn-border-color: transparent;
|
||||
--btn-border-radius: 0.25rem;
|
||||
|
||||
@@ -3,24 +3,6 @@
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla Template
|
||||
FILE: media/templates/site/moko-cassiopeia/js/gtm.js
|
||||
HEADER VERSION: 1.0
|
||||
VERSION: 2.0
|
||||
BRIEF: Safe, configurable Google Tag Manager loader for MokoCassiopeia.
|
||||
PATH: ./media/templates/site/moko-cassiopeia/js/gtm.js
|
||||
NOTE: Place the <noscript> fallback iframe in your HTML template (index.php). A JS file
|
||||
cannot provide a true no-JS fallback by definition.
|
||||
VARIABLES:
|
||||
- window.MOKO_GTM_ID (string) // Optional global GTM container ID (e.g., "GTM-XXXXXXX")
|
||||
- window.MOKO_GTM_OPTIONS (object) // Optional global options (see JSDoc below)
|
||||
- data- attributes on the script tag or <html>/<body>:
|
||||
data-gtm-id, data-data-layer, data-debug, data-ignore-dnt,
|
||||
data-env-auth, data-env-preview, data-block-on-dev
|
||||
*/
|
||||
|
||||
/* global window, document, navigator */
|
||||
|
||||
@@ -3,15 +3,6 @@
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu-es5.js
|
||||
VERSION: 03.09.02
|
||||
BRIEF: ES5-compatible MetisMenu script for Joomla mod_menu in MokoCassiopeia
|
||||
*/
|
||||
|
||||
(function () {
|
||||
|
||||
@@ -3,15 +3,6 @@
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: ./media/templates/site/moko-cassiopeia/js/mod_menu/menu-metismenu.js
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Modern MetisMenu script for Joomla mod_menu in MokoCassiopeia
|
||||
*/
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
@@ -3,15 +3,6 @@
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: ./media/templates/site/moko-cassiopeia/js/template.js
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Consolidated JavaScript for MokoCassiopeia template including theme and utilities
|
||||
*/
|
||||
|
||||
(function (win, doc) {
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage Templates.MokoCassiopeia
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* Template install/update/uninstall script.
|
||||
*
|
||||
* Joomla calls the methods in this class automatically during template
|
||||
* install, update, and uninstall via the <scriptfile> element in
|
||||
* templateDetails.xml.
|
||||
*
|
||||
* Joomla 5 and 6 compatible — uses the InstallerScriptInterface when
|
||||
* available, falls back to the legacy class-based approach otherwise.
|
||||
*/
|
||||
|
||||
@@ -1,24 +1,22 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Site
|
||||
* @subpackage Templates.MokoCassiopeia
|
||||
* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
*
|
||||
* @copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
* This file is part of a Moko Consulting project.
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
/**
|
||||
* CSS Variable Sync Utility
|
||||
*
|
||||
* Compares a user's custom palette file against the template starter file and
|
||||
* injects any missing CSS variable declarations. Existing user values are
|
||||
* never overwritten — only genuinely new variables are added.
|
||||
*
|
||||
* Usage (CLI):
|
||||
* php sync_custom_vars.php
|
||||
*
|
||||
* php sync_custom_vars.php
|
||||
* Usage (from Joomla script.php or plugin):
|
||||
* require_once __DIR__ . '/sync_custom_vars.php';
|
||||
* MokoCssVarSync::run();
|
||||
*
|
||||
* require_once __DIR__ . '/sync_custom_vars.php';
|
||||
* MokoCssVarSync::run();
|
||||
* The script auto-detects Joomla's root by walking up from __DIR__.
|
||||
*/
|
||||
|
||||
|
||||
@@ -1,46 +1,32 @@
|
||||
@charset "UTF-8";
|
||||
/* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: templates/mokocassiopeia/templates/dark.custom.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Starter custom dark palette — copy to media/templates/site/mokocassiopeia/css/theme/dark.custom.css and customise
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------
|
||||
* DARK THEME
|
||||
* CUSTOM DARK THEME
|
||||
* Merged from dark.standard.css with custom overrides.
|
||||
* --------------------------------------------- */
|
||||
|
||||
:root[data-bs-theme='dark']{
|
||||
|
||||
color-scheme: dark;
|
||||
|
||||
/* ===== BRAND & THEME COLORS ===== */
|
||||
--color-primary: #112855;
|
||||
--accent-color-primary: #3f8ff0;
|
||||
--accent-color-secondary: #6fb3ff;
|
||||
--accent-color-primary: #df4830;
|
||||
--accent-color-secondary: #a3cde2;
|
||||
|
||||
/* ===== NAVIGATION ===== */
|
||||
--mainmenu-nav-link-color: #fff;
|
||||
--nav-text-color: gray;
|
||||
--mainmenu-nav-link-color: #f8fbfc;
|
||||
--nav-text-color: #b8c3cb;
|
||||
--nav-bg-color: var(--color-primary);
|
||||
|
||||
/* ===== LINKS ===== */
|
||||
--color-link: white;
|
||||
--color-hover: gray;
|
||||
--color-link: #b4def8;
|
||||
--color-hover: var(--accent-color-primary);
|
||||
--color-active: var(--mainmenu-nav-link-color);
|
||||
--link-color: #8ab4f8;
|
||||
--link-color-rgb: 138, 180, 248;
|
||||
--link-decoration: underline;
|
||||
--link-hover-color: #c3d6ff;
|
||||
--link-hover-color-rgb: 195, 214, 255;
|
||||
--link-hover-color: var(--accent-color-primary);
|
||||
--link-hover-color-rgb: 223, 72, 48;
|
||||
--link-active-color: var(--link-color);
|
||||
|
||||
/* ===== NAVBAR ===== */
|
||||
@@ -90,6 +76,7 @@ color-scheme: dark;
|
||||
--muted-color: #6d757e;
|
||||
--code-color: #ff7abd;
|
||||
--code-color-ink: var(--code-color, #e93f8e);
|
||||
--code-bg-color: lightgreen;
|
||||
--highlight-color: #111;
|
||||
--highlight-bg: #ffe28a1a;
|
||||
|
||||
@@ -507,6 +494,30 @@ color-scheme: dark;
|
||||
--vm-vendor-menu-link-active: var(--primary);
|
||||
--vm-vendor-menu-hover-bg: var(--tertiary-bg);
|
||||
|
||||
/* ===== GABLE ===== */
|
||||
--gab-blue: #4d9fff;
|
||||
--gab-green: #5cb85c;
|
||||
--gab-red: #ff6b6b;
|
||||
--gab-orange: #ff9f5a;
|
||||
--gab-gray1: #868e96;
|
||||
--gab-gray2: #adb5bd;
|
||||
--gab-gray3: #ced4da;
|
||||
|
||||
/* ===== HERO / BANNER OVERLAY ===== */
|
||||
--hero-height: 70vh;
|
||||
--hero-color: var(--body-color);
|
||||
--hero-bg-repeat: no-repeat;
|
||||
--hero-bg-attachment: fixed;
|
||||
--hero-bg-position: top center;
|
||||
--hero-bg-size: cover;
|
||||
--hero-border-bottom: solid var(--accent-color-secondary);
|
||||
--hero-overlay-bg: hsla(0, 0%, 0%, 0.3);
|
||||
--hero-overlay-bg-position: center;
|
||||
--hero-overlay-bg-size: cover;
|
||||
--hero-overlay-padding: 1em;
|
||||
--hero-overlay-text-align: center;
|
||||
--hero-overlay-text-color: var(--body-color);
|
||||
|
||||
/* ===== HERO VARIANTS ===== */
|
||||
/* Primary — deep navy, dark overlay */
|
||||
--hero-primary-bg-color: #0d1e3a;
|
||||
@@ -518,6 +529,25 @@ color-scheme: dark;
|
||||
--hero-secondary-overlay: linear-gradient(rgba(8, 15, 30, .80), rgba(8, 15, 30, .80));
|
||||
--hero-secondary-color: #f1f5f9;
|
||||
|
||||
/* ===== HERO CARD (inner .hero element) ===== */
|
||||
/* Default card — uses primary variant values */
|
||||
--hero-card-bg: var(--hero-primary-bg-color);
|
||||
--hero-card-color: var(--hero-primary-color);
|
||||
--hero-card-overlay: var(--hero-primary-overlay);
|
||||
--hero-card-border-radius: .5rem;
|
||||
--hero-card-padding-x: 2rem;
|
||||
--hero-card-padding-y: 3rem;
|
||||
--hero-card-max-width: 600px;
|
||||
|
||||
/* Alternative card — uses secondary variant values */
|
||||
--hero-alt-card-bg: var(--hero-secondary-bg-color);
|
||||
--hero-alt-card-color: var(--hero-secondary-color);
|
||||
--hero-alt-card-overlay: var(--hero-secondary-overlay);
|
||||
--hero-alt-card-border-radius: .5rem;
|
||||
--hero-alt-card-padding-x: 2rem;
|
||||
--hero-alt-card-padding-y: 3rem;
|
||||
--hero-alt-card-max-width: 600px;
|
||||
|
||||
/* ===== BLOCK COLORS (top-a / top-b / bottom-a / bottom-b) ===== */
|
||||
--block-color-1: var(--secondary-bg);
|
||||
--block-text-1: var(--body-color);
|
||||
@@ -541,14 +571,252 @@ color-scheme: dark;
|
||||
--block-alert-bg: var(--danger, #c23a31);
|
||||
--block-alert-text: #fff;
|
||||
|
||||
/* ===== GABLE ===== */
|
||||
--gab-blue: #4d9fff;
|
||||
--gab-green: #5cb85c;
|
||||
--gab-red: #ff6b6b;
|
||||
--gab-orange: #ff9f5a;
|
||||
--gab-gray1: #868e96;
|
||||
--gab-gray2: #adb5bd;
|
||||
--gab-gray3: #ced4da;
|
||||
/* ===== OFFCANVAS ===== */
|
||||
--offcanvas-zindex: 1045;
|
||||
--offcanvas-width: 400px;
|
||||
--offcanvas-height: 30vh;
|
||||
--offcanvas-padding-x: 1rem;
|
||||
--offcanvas-padding-y: 1rem;
|
||||
--offcanvas-color: var(--body-color);
|
||||
--offcanvas-bg: var(--body-bg);
|
||||
--offcanvas-border-width: 1px;
|
||||
--offcanvas-border-color: var(--border-color-translucent);
|
||||
--offcanvas-box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.3);
|
||||
|
||||
/* ===== ACCORDION ===== */
|
||||
--accordion-color: var(--body-color);
|
||||
--accordion-bg: var(--body-bg);
|
||||
--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;
|
||||
--accordion-border-color: var(--border-color);
|
||||
--accordion-border-width: 1px;
|
||||
--accordion-border-radius: 0.25rem;
|
||||
--accordion-inner-border-radius: calc(0.25rem - 1px);
|
||||
--accordion-btn-padding-x: 1.25rem;
|
||||
--accordion-btn-padding-y: 1rem;
|
||||
--accordion-btn-color: var(--body-color);
|
||||
--accordion-btn-bg: var(--accordion-bg);
|
||||
--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-width: 1.25rem;
|
||||
--accordion-btn-icon-transform: rotate(-180deg);
|
||||
--accordion-btn-icon-transition: transform 0.2s ease-in-out;
|
||||
--accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%238ab4f8'%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-focus-border-color: var(--input-focus-border-color);
|
||||
--accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(84, 114, 255, 0.25);
|
||||
--accordion-body-padding-x: 1.25rem;
|
||||
--accordion-body-padding-y: 1rem;
|
||||
--accordion-active-color: var(--link-color);
|
||||
--accordion-active-bg: var(--secondary-bg);
|
||||
|
||||
/* ===== BREADCRUMB ===== */
|
||||
--breadcrumb-padding-x: 0;
|
||||
--breadcrumb-padding-y: 0;
|
||||
--breadcrumb-margin-bottom: 1rem;
|
||||
--breadcrumb-bg: ;
|
||||
--breadcrumb-border-radius: ;
|
||||
--breadcrumb-divider-color: var(--gray-600);
|
||||
--breadcrumb-item-padding-x: 0.5rem;
|
||||
--breadcrumb-item-active-color: var(--link-color);
|
||||
|
||||
/* ===== PAGINATION ===== */
|
||||
--pagination-padding-x: 0.75rem;
|
||||
--pagination-padding-y: 0.375rem;
|
||||
--pagination-font-size: 1rem;
|
||||
--pagination-color: var(--link-color);
|
||||
--pagination-bg: var(--secondary-bg);
|
||||
--pagination-border-width: 1px;
|
||||
--pagination-border-color: var(--border-color);
|
||||
--pagination-border-radius: 0.25rem;
|
||||
--pagination-focus-color: var(--link-active-color);
|
||||
--pagination-focus-bg: var(--tertiary-bg);
|
||||
--pagination-focus-box-shadow: 0 0 0 0.25rem rgba(84, 114, 255, 0.25);
|
||||
--pagination-active-color: var(--body-color);
|
||||
--pagination-active-bg: hsl(240, 98%, 17%);
|
||||
--pagination-active-border-color: hsl(240, 98%, 17%);
|
||||
--pagination-disabled-color: var(--gray-600);
|
||||
--pagination-disabled-bg: var(--secondary-bg);
|
||||
--pagination-disabled-border-color: var(--border-color);
|
||||
|
||||
/* ===== BADGE ===== */
|
||||
--badge-padding-x: 0.65em;
|
||||
--badge-padding-y: 0.35em;
|
||||
--badge-font-size: 0.75em;
|
||||
--badge-font-weight: 700;
|
||||
--badge-color: var(--body-color);
|
||||
--badge-border-radius: 0.25rem;
|
||||
|
||||
/* ===== ALERT ===== */
|
||||
--alert-bg: transparent;
|
||||
--alert-padding-x: 1rem;
|
||||
--alert-padding-y: 1rem;
|
||||
--alert-margin-bottom: 1rem;
|
||||
--alert-color: inherit;
|
||||
--alert-border-color: transparent;
|
||||
--alert-border: 1px solid var(--alert-border-color);
|
||||
--alert-border-radius: 0.25rem;
|
||||
|
||||
/* ===== PROGRESS ===== */
|
||||
--progress-height: 1rem;
|
||||
--progress-font-size: 0.75rem;
|
||||
--progress-bg: var(--secondary-bg);
|
||||
--progress-border-radius: 0.25rem;
|
||||
--progress-box-shadow: inset 0 1px 2px rgba(var(--black-rgb), 0.3);
|
||||
--progress-bar-color: var(--body-color);
|
||||
--progress-bar-bg: hsl(240, 98%, 40%);
|
||||
--progress-bar-transition: width 0.6s ease;
|
||||
|
||||
/* ===== LIST GROUP ===== */
|
||||
--list-group-color: var(--body-color);
|
||||
--list-group-bg: var(--secondary-bg);
|
||||
--list-group-border-color: rgba(var(--white-rgb), 0.125);
|
||||
--list-group-border-width: 1px;
|
||||
--list-group-border-radius: 0.25rem;
|
||||
--list-group-item-padding-x: 1rem;
|
||||
--list-group-item-padding-y: 0.5rem;
|
||||
--list-group-action-color: var(--gray-800);
|
||||
--list-group-action-active-color: var(--body-color);
|
||||
--list-group-action-active-bg: var(--tertiary-bg);
|
||||
--list-group-disabled-color: var(--gray-600);
|
||||
--list-group-disabled-bg: var(--secondary-bg);
|
||||
--list-group-active-color: var(--body-color);
|
||||
--list-group-active-bg: hsl(240, 98%, 17%);
|
||||
--list-group-active-border-color: hsl(240, 98%, 17%);
|
||||
|
||||
/* ===== DROPDOWN ===== */
|
||||
--dropdown-zindex: 1000;
|
||||
--dropdown-min-width: 10rem;
|
||||
--dropdown-padding-x: 0;
|
||||
--dropdown-padding-y: 0.5rem;
|
||||
--dropdown-spacer: 0.125rem;
|
||||
--dropdown-font-size: 1rem;
|
||||
--dropdown-color: var(--body-color);
|
||||
--dropdown-bg: var(--secondary-bg);
|
||||
--dropdown-border-color: var(--border-color-translucent);
|
||||
--dropdown-border-radius: 0.25rem;
|
||||
--dropdown-border-width: 1px;
|
||||
--dropdown-inner-border-radius: calc(0.25rem - 1px);
|
||||
--dropdown-divider-bg: var(--border-color-translucent);
|
||||
--dropdown-divider-margin-y: 0.5rem;
|
||||
--dropdown-box-shadow: 0 0.5rem 1rem var(--shadow-color-medium);
|
||||
--dropdown-link-color: var(--body-color);
|
||||
--dropdown-link-active-color: var(--body-color);
|
||||
--dropdown-link-active-bg: hsl(240, 98%, 17%);
|
||||
--dropdown-link-disabled-color: var(--gray-600);
|
||||
--dropdown-item-padding-x: 1rem;
|
||||
--dropdown-item-padding-y: 0.25rem;
|
||||
--dropdown-header-color: var(--gray-600);
|
||||
--dropdown-header-padding-x: 1rem;
|
||||
--dropdown-header-padding-y: 0.5rem;
|
||||
|
||||
/* ===== TOAST ===== */
|
||||
--toast-zindex: 1090;
|
||||
--toast-padding-x: 0.75rem;
|
||||
--toast-padding-y: 0.5rem;
|
||||
--toast-spacing: 1em;
|
||||
--toast-max-width: 350px;
|
||||
--toast-font-size: 0.875rem;
|
||||
--toast-color: ;
|
||||
--toast-bg: rgba(21, 27, 34, 0.9);
|
||||
--toast-border-width: 1px;
|
||||
--toast-border-color: var(--border-color-translucent);
|
||||
--toast-border-radius: 0.25rem;
|
||||
--toast-box-shadow: 0 0.5rem 1rem var(--shadow-color-medium);
|
||||
--toast-header-color: var(--gray-600);
|
||||
--toast-header-bg: rgba(21, 27, 34, 0.85);
|
||||
--toast-header-border-color: rgba(var(--white-rgb), var(--opacity-10));
|
||||
|
||||
/* ===== MODAL ===== */
|
||||
--modal-zindex: 1050;
|
||||
--modal-width: 500px;
|
||||
--modal-padding: 1rem;
|
||||
--modal-margin: 0.5rem;
|
||||
--modal-color: ;
|
||||
--modal-bg: var(--secondary-bg);
|
||||
--modal-border-color: var(--border-color-translucent);
|
||||
--modal-border-width: 1px;
|
||||
--modal-border-radius: 0.3rem;
|
||||
--modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.3);
|
||||
--modal-inner-border-radius: calc(0.3rem - 1px);
|
||||
--modal-header-padding-x: 1rem;
|
||||
--modal-header-padding-y: 1rem;
|
||||
--modal-header-padding: 1rem 1rem;
|
||||
--modal-header-border-color: var(--border-color);
|
||||
--modal-header-border-width: 1px;
|
||||
--modal-title-line-height: 1.5;
|
||||
--modal-footer-gap: 0.5rem;
|
||||
--modal-footer-bg: ;
|
||||
--modal-footer-border-color: var(--border-color);
|
||||
--modal-footer-border-width: 1px;
|
||||
|
||||
/* ===== TOOLTIP ===== */
|
||||
--tooltip-zindex: 1070;
|
||||
--tooltip-max-width: 200px;
|
||||
--tooltip-padding-x: 0.5rem;
|
||||
--tooltip-padding-y: 0.25rem;
|
||||
--tooltip-margin: ;
|
||||
--tooltip-font-size: 0.875rem;
|
||||
--tooltip-color: var(--body-color);
|
||||
--tooltip-bg: hsl(0, 0%, 0%);
|
||||
--tooltip-border-radius: 0.25rem;
|
||||
--tooltip-opacity: 0.9;
|
||||
--tooltip-arrow-width: 0.8rem;
|
||||
--tooltip-arrow-height: 0.4rem;
|
||||
|
||||
/* ===== POPOVER ===== */
|
||||
--popover-zindex: 1060;
|
||||
--popover-max-width: 276px;
|
||||
--popover-font-size: 0.875rem;
|
||||
--popover-bg: var(--secondary-bg);
|
||||
--popover-border-width: 1px;
|
||||
--popover-border-color: var(--border-color-translucent);
|
||||
--popover-border-radius: 0.3rem;
|
||||
--popover-inner-border-radius: calc(0.3rem - 1px);
|
||||
--popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.4);
|
||||
--popover-header-padding-x: 1rem;
|
||||
--popover-header-padding-y: 0.5rem;
|
||||
--popover-header-font-size: 1rem;
|
||||
--popover-header-color: ;
|
||||
--popover-header-bg: var(--tertiary-bg);
|
||||
--popover-body-padding-x: 1rem;
|
||||
--popover-body-padding-y: 1rem;
|
||||
--popover-body-color: var(--body-color);
|
||||
--popover-arrow-width: 1rem;
|
||||
--popover-arrow-height: 0.5rem;
|
||||
--popover-arrow-border: var(--popover-border-color);
|
||||
|
||||
/* ===== SPINNER ===== */
|
||||
--spinner-width: 2rem;
|
||||
--spinner-height: 2rem;
|
||||
--spinner-vertical-align: -0.125em;
|
||||
--spinner-border-width: 0.25em;
|
||||
--spinner-animation-speed: 0.75s;
|
||||
|
||||
/* ===== NAV TABS ===== */
|
||||
--nav-tabs-border-width: 1px;
|
||||
--nav-tabs-border-color: var(--border-color);
|
||||
--nav-tabs-border-radius: 0.25rem;
|
||||
--nav-tabs-link-active-color: var(--body-color);
|
||||
--nav-tabs-link-active-bg: var(--secondary-bg);
|
||||
--nav-tabs-link-active-border-color: var(--border-color) var(--border-color) var(--secondary-bg);
|
||||
|
||||
/* ===== NAV PILLS ===== */
|
||||
--nav-pills-border-radius: 0.25rem;
|
||||
--nav-pills-link-active-color: var(--body-color);
|
||||
--nav-pills-link-active-bg: hsl(240, 98%, 17%);
|
||||
|
||||
/* ===== TABLE ===== */
|
||||
--table-color: var(--body-color);
|
||||
--table-bg: transparent;
|
||||
--table-border-color: var(--border-color);
|
||||
--table-accent-bg: transparent;
|
||||
--table-striped-color: var(--body-color);
|
||||
--table-striped-bg: rgba(var(--white-rgb), var(--opacity-5));
|
||||
--table-active-color: var(--body-color);
|
||||
--table-active-bg: rgba(var(--white-rgb), 0.1);
|
||||
|
||||
/* ===== BACKDROP ===== */
|
||||
--backdrop-zindex: 1040;
|
||||
--backdrop-bg: hsl(0, 0%, 0%);
|
||||
--backdrop-opacity: 0.5;
|
||||
}
|
||||
|
||||
.btn {
|
||||
@@ -559,7 +827,7 @@ color-scheme: dark;
|
||||
--btn-font-weight: 400;
|
||||
--btn-line-height: 1.5;
|
||||
--btn-color: var(--white);
|
||||
--btn-bg: transparent;
|
||||
--btn-bg: var(--body-bg);
|
||||
--btn-border-width: 1px;
|
||||
--btn-border-color: transparent;
|
||||
--btn-border-radius: 0.25rem;
|
||||
@@ -869,3 +1137,9 @@ color-scheme: dark;
|
||||
--btn-focus-shadow-rgb: 84, 114, 255;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.navbar-brand img {
|
||||
max-height: 100px;
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
@@ -1,45 +1,31 @@
|
||||
@charset "UTF-8";
|
||||
/* Copyright (C) 2025 Moko Consulting <hello@mokoconsulting.tech>
|
||||
|
||||
This file is part of a Moko Consulting project.
|
||||
|
||||
SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
|
||||
|
||||
# FILE INFORMATION
|
||||
DEFGROUP: Joomla.Template.Site
|
||||
INGROUP: MokoCassiopeia
|
||||
PATH: templates/mokocassiopeia/templates/light.custom.css
|
||||
VERSION: 03.09.02
|
||||
BRIEF: Starter custom light palette — copy to media/templates/site/mokocassiopeia/css/theme/light.custom.css and customise
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------
|
||||
* LIGHT THEME
|
||||
* CUSTOM LIGHT THEME
|
||||
* Merged from light.standard.css with custom overrides.
|
||||
* --------------------------------------------- */
|
||||
|
||||
:root[data-bs-theme="light"] {
|
||||
:root[data-bs-theme="light"]{
|
||||
|
||||
color-scheme: light;
|
||||
|
||||
/* ===== BRAND & THEME COLORS ===== */
|
||||
--color-primary: #112855;
|
||||
--accent-color-primary: #3f8ff0;
|
||||
--accent-color-secondary: #3f8ff0;
|
||||
--color-primary: #a3cde2;
|
||||
--accent-color-primary: #df4830;
|
||||
--accent-color-secondary: #eec234;
|
||||
|
||||
/* ===== NAVIGATION ===== */
|
||||
--mainmenu-nav-link-color: white;
|
||||
--nav-text-color: white;
|
||||
--nav-bg-color: var(--color-link);
|
||||
--mainmenu-nav-link-color: #f8fbfc;
|
||||
--nav-text-color: #f8fbfc;
|
||||
--nav-bg-color: #112855;
|
||||
|
||||
/* ===== LINKS ===== */
|
||||
--color-link: #224FAA;
|
||||
--color-link: #112855;
|
||||
--color-hover: var(--accent-color-primary);
|
||||
--link-color: #224faa;
|
||||
--link-color-rgb: 34, 79, 170;
|
||||
--link-color: #112855;
|
||||
--link-color-rgb: 17, 40, 85;
|
||||
--link-decoration: underline;
|
||||
--link-hover-color: #424077;
|
||||
--link-hover-color-rgb: 66, 64, 119;
|
||||
--link-hover-color: var(--accent-color-primary);
|
||||
--link-hover-color-rgb: 223, 72, 48;
|
||||
--link-active-color: var(--link-color);
|
||||
|
||||
/* ===== NAVBAR ===== */
|
||||
@@ -87,8 +73,9 @@ color-scheme: light;
|
||||
--tertiary-color: #22262a80;
|
||||
--tertiary-color-rgb: 34, 38, 42;
|
||||
--muted-color: #6d757e;
|
||||
--code-color: #e93f8e;
|
||||
--code-color: black;
|
||||
--code-color-ink: var(--code-color, #e93f8e);
|
||||
--code-bg-color: lightgreen;
|
||||
--highlight-color: #22262a;
|
||||
--highlight-bg: #fbeea8;
|
||||
|
||||
@@ -506,40 +493,6 @@ color-scheme: light;
|
||||
--vm-vendor-menu-link-active: var(--primary);
|
||||
--vm-vendor-menu-hover-bg: var(--secondary-bg);
|
||||
|
||||
/* ===== HERO VARIANTS ===== */
|
||||
/* Primary — sky blue, light overlay */
|
||||
--hero-primary-bg-color: var(--color-primary);
|
||||
--hero-primary-overlay: linear-gradient(rgba(163, 205, 226, .45), rgba(163, 205, 226, .45));
|
||||
--hero-primary-color: var(--color-primary);
|
||||
|
||||
/* Secondary — navy, stronger overlay */
|
||||
--hero-secondary-bg-color: var(--color-primary);
|
||||
--hero-secondary-overlay: linear-gradient(rgba(17, 40, 85, .75), rgba(17, 40, 85, .75));
|
||||
--hero-secondary-color: #f1f5f9;
|
||||
|
||||
/* ===== BLOCK COLORS (top-a / top-b / bottom-a / bottom-b) ===== */
|
||||
--block-color-1: var(--color-primary);
|
||||
--block-text-1: var(--body-color);
|
||||
|
||||
--block-color-2: var(--accent-color-primary);
|
||||
--block-text-2: #fff;
|
||||
|
||||
--block-color-3: var(--warning, #eec234);
|
||||
--block-text-3: var(--body-color);
|
||||
|
||||
--block-color-4: var(--success-bg-subtle, #eef7f0);
|
||||
--block-text-4: var(--body-color);
|
||||
|
||||
/* ===== BLOCK COLOR OVERRIDES ===== */
|
||||
--block-highlight-bg: var(--accent-color-primary);
|
||||
--block-highlight-text: #fff;
|
||||
|
||||
--block-cta-bg: var(--color-primary);
|
||||
--block-cta-text: #fff;
|
||||
|
||||
--block-alert-bg: var(--danger, #a51f18);
|
||||
--block-alert-text: #fff;
|
||||
|
||||
/* ===== GABLE ===== */
|
||||
--gab-blue: #0066cc;
|
||||
--gab-green: #28a745;
|
||||
@@ -548,6 +501,321 @@ color-scheme: light;
|
||||
--gab-gray1: #495057;
|
||||
--gab-gray2: #6c757d;
|
||||
--gab-gray3: #adb5bd;
|
||||
|
||||
/* ===== HERO / BANNER OVERLAY ===== */
|
||||
--hero-height: 70vh;
|
||||
--hero-color: var(--body-color);
|
||||
--hero-bg-repeat: no-repeat;
|
||||
--hero-bg-attachment: fixed;
|
||||
--hero-bg-position: top center;
|
||||
--hero-bg-size: cover;
|
||||
--hero-border-bottom: solid var(--accent-color-secondary);
|
||||
--hero-overlay-bg: hsla(0, 0%, 0%, 0.1);
|
||||
--hero-overlay-bg-position: center;
|
||||
--hero-overlay-bg-size: cover;
|
||||
--hero-overlay-padding: 1em;
|
||||
--hero-overlay-text-align: center;
|
||||
--hero-overlay-text-color: var(--body-color);
|
||||
|
||||
/* ===== HERO VARIANTS ===== */
|
||||
/* Primary — sky blue, light overlay */
|
||||
--hero-primary-bg-color: var(--color-primary);
|
||||
--hero-primary-overlay: linear-gradient(rgba(163, 205, 226, .45), rgba(163, 205, 226, .45));
|
||||
--hero-primary-color: #112855;
|
||||
|
||||
/* Secondary — navy, stronger overlay */
|
||||
--hero-secondary-bg-color: #112855;
|
||||
--hero-secondary-overlay: linear-gradient(rgba(17, 40, 85, .75), rgba(17, 40, 85, .75));
|
||||
--hero-secondary-color: #f1f5f9;
|
||||
|
||||
/* ===== HERO CARD (inner .hero element) ===== */
|
||||
/* Default card — uses primary variant values */
|
||||
--hero-card-bg: var(--hero-primary-bg-color);
|
||||
--hero-card-color: var(--hero-primary-color);
|
||||
--hero-card-overlay: var(--hero-primary-overlay);
|
||||
--hero-card-border-radius: .5rem;
|
||||
--hero-card-padding-x: 2rem;
|
||||
--hero-card-padding-y: 3rem;
|
||||
--hero-card-max-width: 600px;
|
||||
|
||||
/* Alternative card — uses secondary variant values */
|
||||
--hero-alt-card-bg: var(--hero-secondary-bg-color);
|
||||
--hero-alt-card-color: var(--hero-secondary-color);
|
||||
--hero-alt-card-overlay: var(--hero-secondary-overlay);
|
||||
--hero-alt-card-border-radius: .5rem;
|
||||
--hero-alt-card-padding-x: 2rem;
|
||||
--hero-alt-card-padding-y: 3rem;
|
||||
--hero-alt-card-max-width: 600px;
|
||||
|
||||
/* ===== BLOCK COLORS (top-a / top-b / bottom-a / bottom-b) ===== */
|
||||
--block-color-1: var(--color-primary);
|
||||
--block-text-1: #112855;
|
||||
|
||||
--block-color-2: var(--accent-color-primary);
|
||||
--block-text-2: #fff;
|
||||
|
||||
--block-color-3: #eec234;
|
||||
--block-text-3: #22262a;
|
||||
|
||||
--block-color-4: #eef7f0;
|
||||
--block-text-4: #22262a;
|
||||
|
||||
/* ===== BLOCK COLOR OVERRIDES ===== */
|
||||
--block-highlight-bg: var(--accent-color-primary);
|
||||
--block-highlight-text: #fff;
|
||||
|
||||
--block-cta-bg: #112855;
|
||||
--block-cta-text: #fff;
|
||||
|
||||
--block-alert-bg: var(--accent-color-primary);
|
||||
--block-alert-text: #fff;
|
||||
|
||||
/* ===== OFFCANVAS ===== */
|
||||
--offcanvas-zindex: 1045;
|
||||
--offcanvas-width: 400px;
|
||||
--offcanvas-height: 30vh;
|
||||
--offcanvas-padding-x: 1rem;
|
||||
--offcanvas-padding-y: 1rem;
|
||||
--offcanvas-color: var(--body-color);
|
||||
--offcanvas-bg: var(--body-bg);
|
||||
--offcanvas-border-width: 1px;
|
||||
--offcanvas-border-color: var(--border-color-translucent);
|
||||
--offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
|
||||
|
||||
/* ===== ACCORDION ===== */
|
||||
--accordion-color: hsl(210, 11%, 15%);
|
||||
--accordion-bg: var(--body-bg);
|
||||
--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;
|
||||
--accordion-border-color: var(--border-color);
|
||||
--accordion-border-width: 1px;
|
||||
--accordion-border-radius: 0.25rem;
|
||||
--accordion-inner-border-radius: calc(0.25rem - 1px);
|
||||
--accordion-btn-padding-x: 1.25rem;
|
||||
--accordion-btn-padding-y: 1rem;
|
||||
--accordion-btn-color: hsl(210, 11%, 15%);
|
||||
--accordion-btn-bg: var(--accordion-bg);
|
||||
--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%25, 15%25%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-width: 1.25rem;
|
||||
--accordion-btn-icon-transform: rotate(-180deg);
|
||||
--accordion-btn-icon-transition: transform 0.2s ease-in-out;
|
||||
--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-focus-border-color: var(--input-focus-border-color);
|
||||
--accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(1, 1, 86, 0.25);
|
||||
--accordion-body-padding-x: 1.25rem;
|
||||
--accordion-body-padding-y: 1rem;
|
||||
--accordion-active-color: #0f244d;
|
||||
--accordion-active-bg: #e7eaee;
|
||||
|
||||
/* ===== BREADCRUMB ===== */
|
||||
--breadcrumb-padding-x: 0;
|
||||
--breadcrumb-padding-y: 0;
|
||||
--breadcrumb-margin-bottom: 1rem;
|
||||
--breadcrumb-bg: ;
|
||||
--breadcrumb-border-radius: ;
|
||||
--breadcrumb-divider-color: hsl(210, 7%, 46%);
|
||||
--breadcrumb-item-padding-x: 0.5rem;
|
||||
--breadcrumb-item-active-color: var(--link-color);
|
||||
|
||||
/* ===== PAGINATION ===== */
|
||||
--pagination-padding-x: 0.75rem;
|
||||
--pagination-padding-y: 0.375rem;
|
||||
--pagination-font-size: 1rem;
|
||||
--pagination-color: var(--link-color);
|
||||
--pagination-bg: var(--body-bg);
|
||||
--pagination-border-width: 1px;
|
||||
--pagination-border-color: hsl(210, 14%, 89%);
|
||||
--pagination-border-radius: 0.25rem;
|
||||
--pagination-focus-color: var(--link-active-color);
|
||||
--pagination-focus-bg: hsl(210, 16%, 93%);
|
||||
--pagination-focus-box-shadow: 0 0 0 0.25rem rgba(1, 1, 86, 0.25);
|
||||
--pagination-active-color: var(--body-bg);
|
||||
--pagination-active-bg: hsl(240, 98%, 17%);
|
||||
--pagination-active-border-color: hsl(240, 98%, 17%);
|
||||
--pagination-disabled-color: hsl(210, 7%, 46%);
|
||||
--pagination-disabled-bg: var(--body-bg);
|
||||
--pagination-disabled-border-color: hsl(210, 14%, 89%);
|
||||
|
||||
/* ===== BADGE ===== */
|
||||
--badge-padding-x: 0.65em;
|
||||
--badge-padding-y: 0.35em;
|
||||
--badge-font-size: 0.75em;
|
||||
--badge-font-weight: 700;
|
||||
--badge-color: var(--body-bg);
|
||||
--badge-border-radius: 0.25rem;
|
||||
|
||||
/* ===== ALERT ===== */
|
||||
--alert-bg: transparent;
|
||||
--alert-padding-x: 1rem;
|
||||
--alert-padding-y: 1rem;
|
||||
--alert-margin-bottom: 1rem;
|
||||
--alert-color: inherit;
|
||||
--alert-border-color: transparent;
|
||||
--alert-border: 1px solid var(--alert-border-color);
|
||||
--alert-border-radius: 0.25rem;
|
||||
|
||||
/* ===== PROGRESS ===== */
|
||||
--progress-height: 1rem;
|
||||
--progress-font-size: 0.75rem;
|
||||
--progress-bg: hsl(210, 16%, 93%);
|
||||
--progress-border-radius: 0.25rem;
|
||||
--progress-box-shadow: inset 0 1px 2px rgba(var(--black-rgb), 0.075);
|
||||
--progress-bar-color: var(--body-bg);
|
||||
--progress-bar-bg: hsl(240, 98%, 17%);
|
||||
--progress-bar-transition: width 0.6s ease;
|
||||
|
||||
/* ===== LIST GROUP ===== */
|
||||
--list-group-color: hsl(210, 11%, 15%);
|
||||
--list-group-bg: var(--body-bg);
|
||||
--list-group-border-color: rgba(var(--black-rgb), 0.125);
|
||||
--list-group-border-width: 1px;
|
||||
--list-group-border-radius: 0.25rem;
|
||||
--list-group-item-padding-x: 1rem;
|
||||
--list-group-item-padding-y: 0.5rem;
|
||||
--list-group-action-color: hsl(210, 9%, 31%);
|
||||
--list-group-action-active-color: hsl(210, 11%, 15%);
|
||||
--list-group-action-active-bg: hsl(210, 16%, 93%);
|
||||
--list-group-disabled-color: hsl(210, 7%, 46%);
|
||||
--list-group-disabled-bg: var(--body-bg);
|
||||
--list-group-active-color: var(--body-bg);
|
||||
--list-group-active-bg: hsl(240, 98%, 17%);
|
||||
--list-group-active-border-color: hsl(240, 98%, 17%);
|
||||
|
||||
/* ===== DROPDOWN ===== */
|
||||
--dropdown-zindex: 1000;
|
||||
--dropdown-min-width: 10rem;
|
||||
--dropdown-padding-x: 0;
|
||||
--dropdown-padding-y: 0.5rem;
|
||||
--dropdown-spacer: 0.125rem;
|
||||
--dropdown-font-size: 1rem;
|
||||
--dropdown-color: hsl(210, 11%, 15%);
|
||||
--dropdown-bg: var(--body-bg);
|
||||
--dropdown-border-color: var(--border-color-translucent);
|
||||
--dropdown-border-radius: 0.25rem;
|
||||
--dropdown-border-width: 1px;
|
||||
--dropdown-inner-border-radius: calc(0.25rem - 1px);
|
||||
--dropdown-divider-bg: var(--border-color-translucent);
|
||||
--dropdown-divider-margin-y: 0.5rem;
|
||||
--dropdown-box-shadow: 0 0.5rem 1rem var(--shadow-color-light);
|
||||
--dropdown-link-color: hsl(210, 11%, 15%);
|
||||
--dropdown-link-active-color: var(--body-bg);
|
||||
--dropdown-link-active-bg: hsl(240, 98%, 17%);
|
||||
--dropdown-link-disabled-color: hsl(210, 11%, 71%);
|
||||
--dropdown-item-padding-x: 1rem;
|
||||
--dropdown-item-padding-y: 0.25rem;
|
||||
--dropdown-header-color: hsl(210, 7%, 46%);
|
||||
--dropdown-header-padding-x: 1rem;
|
||||
--dropdown-header-padding-y: 0.5rem;
|
||||
|
||||
/* ===== TOAST ===== */
|
||||
--toast-zindex: 1090;
|
||||
--toast-padding-x: 0.75rem;
|
||||
--toast-padding-y: 0.5rem;
|
||||
--toast-spacing: 1em;
|
||||
--toast-max-width: 350px;
|
||||
--toast-font-size: 0.875rem;
|
||||
--toast-color: ;
|
||||
--toast-bg: rgba(255, 255, 255, 0.85);
|
||||
--toast-border-width: 1px;
|
||||
--toast-border-color: var(--border-color-translucent);
|
||||
--toast-border-radius: 0.25rem;
|
||||
--toast-box-shadow: 0 0.5rem 1rem var(--shadow-color-light);
|
||||
--toast-header-color: hsl(210, 7%, 46%);
|
||||
--toast-header-bg: rgba(var(--white-rgb), 0.85);
|
||||
--toast-header-border-color: rgba(var(--black-rgb), var(--opacity-5));
|
||||
|
||||
/* ===== MODAL ===== */
|
||||
--modal-zindex: 1050;
|
||||
--modal-width: 500px;
|
||||
--modal-padding: 1rem;
|
||||
--modal-margin: 0.5rem;
|
||||
--modal-color: ;
|
||||
--modal-bg: var(--body-bg);
|
||||
--modal-border-color: var(--border-color-translucent);
|
||||
--modal-border-width: 1px;
|
||||
--modal-border-radius: 0.3rem;
|
||||
--modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
|
||||
--modal-inner-border-radius: calc(0.3rem - 1px);
|
||||
--modal-header-padding-x: 1rem;
|
||||
--modal-header-padding-y: 1rem;
|
||||
--modal-header-padding: 1rem 1rem;
|
||||
--modal-header-border-color: var(--border-color);
|
||||
--modal-header-border-width: 1px;
|
||||
--modal-title-line-height: 1.5;
|
||||
--modal-footer-gap: 0.5rem;
|
||||
--modal-footer-bg: ;
|
||||
--modal-footer-border-color: var(--border-color);
|
||||
--modal-footer-border-width: 1px;
|
||||
|
||||
/* ===== TOOLTIP ===== */
|
||||
--tooltip-zindex: 1070;
|
||||
--tooltip-max-width: 200px;
|
||||
--tooltip-padding-x: 0.5rem;
|
||||
--tooltip-padding-y: 0.25rem;
|
||||
--tooltip-margin: ;
|
||||
--tooltip-font-size: 0.875rem;
|
||||
--tooltip-color: var(--body-bg);
|
||||
--tooltip-bg: hsl(0, 0%, 0%);
|
||||
--tooltip-border-radius: 0.25rem;
|
||||
--tooltip-opacity: 0.9;
|
||||
--tooltip-arrow-width: 0.8rem;
|
||||
--tooltip-arrow-height: 0.4rem;
|
||||
|
||||
/* ===== POPOVER ===== */
|
||||
--popover-zindex: 1060;
|
||||
--popover-max-width: 276px;
|
||||
--popover-font-size: 0.875rem;
|
||||
--popover-bg: var(--body-bg);
|
||||
--popover-border-width: 1px;
|
||||
--popover-border-color: var(--border-color-translucent);
|
||||
--popover-border-radius: 0.3rem;
|
||||
--popover-inner-border-radius: calc(0.3rem - 1px);
|
||||
--popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
|
||||
--popover-header-padding-x: 1rem;
|
||||
--popover-header-padding-y: 0.5rem;
|
||||
--popover-header-font-size: 1rem;
|
||||
--popover-header-color: ;
|
||||
--popover-header-bg: #f0f0f0;
|
||||
--popover-body-padding-x: 1rem;
|
||||
--popover-body-padding-y: 1rem;
|
||||
--popover-body-color: hsl(210, 11%, 15%);
|
||||
--popover-arrow-width: 1rem;
|
||||
--popover-arrow-height: 0.5rem;
|
||||
--popover-arrow-border: var(--popover-border-color);
|
||||
|
||||
/* ===== SPINNER ===== */
|
||||
--spinner-width: 2rem;
|
||||
--spinner-height: 2rem;
|
||||
--spinner-vertical-align: -0.125em;
|
||||
--spinner-border-width: 0.25em;
|
||||
--spinner-animation-speed: 0.75s;
|
||||
|
||||
/* ===== NAV TABS ===== */
|
||||
--nav-tabs-border-width: 1px;
|
||||
--nav-tabs-border-color: hsl(210, 14%, 89%);
|
||||
--nav-tabs-border-radius: 0.25rem;
|
||||
--nav-tabs-link-active-color: hsl(210, 9%, 31%);
|
||||
--nav-tabs-link-active-bg: var(--body-bg);
|
||||
--nav-tabs-link-active-border-color: hsl(210, 14%, 89%) hsl(210, 14%, 89%) var(--body-bg);
|
||||
|
||||
/* ===== NAV PILLS ===== */
|
||||
--nav-pills-border-radius: 0.25rem;
|
||||
--nav-pills-link-active-color: var(--body-bg);
|
||||
--nav-pills-link-active-bg: hsl(240, 98%, 17%);
|
||||
|
||||
/* ===== TABLE ===== */
|
||||
--table-color: var(--body-color);
|
||||
--table-bg: transparent;
|
||||
--table-border-color: var(--border-color);
|
||||
--table-accent-bg: transparent;
|
||||
--table-striped-color: var(--body-color);
|
||||
--table-striped-bg: rgba(var(--black-rgb), var(--opacity-5));
|
||||
--table-active-color: var(--body-color);
|
||||
--table-active-bg: rgba(var(--black-rgb), 0.075);
|
||||
|
||||
/* ===== BACKDROP ===== */
|
||||
--backdrop-zindex: 1040;
|
||||
--backdrop-bg: hsl(0, 0%, 0%);
|
||||
--backdrop-opacity: 0.5;
|
||||
}
|
||||
|
||||
.btn {
|
||||
@@ -558,7 +826,7 @@ color-scheme: light;
|
||||
--btn-font-weight: 400;
|
||||
--btn-line-height: 1.5;
|
||||
--btn-color: hsl(210, 11%, 15%);
|
||||
--btn-bg: transparent;
|
||||
--btn-bg: var(--body-bg);
|
||||
--btn-border-width: 1px;
|
||||
--btn-border-color: transparent;
|
||||
--btn-border-radius: 0.25rem;
|
||||
@@ -592,20 +860,20 @@ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-
|
||||
}
|
||||
|
||||
.btn-primary {
|
||||
--btn-color: hsl(0, 0%, 100%);
|
||||
--btn-bg: hsl(240, 98%, 17%);
|
||||
--btn-border-color: hsl(240, 98%, 17%);
|
||||
--btn-hover-color: hsl(0, 0%, 100%);
|
||||
--btn-hover-bg: #010149;
|
||||
--btn-hover-border-color: #010145;
|
||||
--btn-focus-shadow-rgb: 39, 39, 111;
|
||||
--btn-active-color: hsl(0, 0%, 100%);
|
||||
--btn-active-bg: #010145;
|
||||
--btn-active-border-color: #010141;
|
||||
--btn-color: #fff;
|
||||
--btn-bg: #112855;
|
||||
--btn-border-color: #112855;
|
||||
--btn-hover-color: #fff;
|
||||
--btn-hover-bg: #0d1f42;
|
||||
--btn-hover-border-color: #0a1a38;
|
||||
--btn-focus-shadow-rgb: 17, 40, 85;
|
||||
--btn-active-color: #fff;
|
||||
--btn-active-bg: #0a1a38;
|
||||
--btn-active-border-color: #08152e;
|
||||
--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-color: #fff;
|
||||
--btn-disabled-bg: #112855;
|
||||
--btn-disabled-border-color: #112855;
|
||||
}
|
||||
|
||||
.btn-secondary {
|
||||
@@ -677,20 +945,20 @@ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
--btn-color: hsl(0, 0%, 100%);
|
||||
--btn-bg: hsl(3, 75%, 37%);
|
||||
--btn-border-color: hsl(3, 75%, 37%);
|
||||
--btn-hover-color: hsl(0, 0%, 100%);
|
||||
--btn-hover-bg: #8c1a14;
|
||||
--btn-hover-border-color: #841913;
|
||||
--btn-focus-shadow-rgb: 179, 65, 59;
|
||||
--btn-active-color: hsl(0, 0%, 100%);
|
||||
--btn-active-bg: #841913;
|
||||
--btn-active-border-color: #7c1712;
|
||||
--btn-color: #fff;
|
||||
--btn-bg: #df4830;
|
||||
--btn-border-color: #df4830;
|
||||
--btn-hover-color: #fff;
|
||||
--btn-hover-bg: #c03e28;
|
||||
--btn-hover-border-color: #b53b26;
|
||||
--btn-focus-shadow-rgb: 223, 72, 48;
|
||||
--btn-active-color: #fff;
|
||||
--btn-active-bg: #b53b26;
|
||||
--btn-active-border-color: #aa3823;
|
||||
--btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||
--btn-disabled-color: hsl(0, 0%, 100%);
|
||||
--btn-disabled-bg: hsl(3, 75%, 37%);
|
||||
--btn-disabled-border-color: hsl(3, 75%, 37%);
|
||||
--btn-disabled-color: #fff;
|
||||
--btn-disabled-bg: #df4830;
|
||||
--btn-disabled-border-color: #df4830;
|
||||
}
|
||||
|
||||
.btn-light {
|
||||
@@ -728,19 +996,19 @@ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-
|
||||
}
|
||||
|
||||
.btn-outline-primary {
|
||||
--btn-color: hsl(240, 98%, 17%);
|
||||
--btn-border-color: hsl(240, 98%, 17%);
|
||||
--btn-hover-color: hsl(0, 0%, 100%);
|
||||
--btn-hover-bg: hsl(240, 98%, 17%);
|
||||
--btn-hover-border-color: hsl(240, 98%, 17%);
|
||||
--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-color: #112855;
|
||||
--btn-border-color: #112855;
|
||||
--btn-hover-color: #fff;
|
||||
--btn-hover-bg: #112855;
|
||||
--btn-hover-border-color: #112855;
|
||||
--btn-focus-shadow-rgb: 17, 40, 85;
|
||||
--btn-active-color: #fff;
|
||||
--btn-active-bg: #112855;
|
||||
--btn-active-border-color: #112855;
|
||||
--btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||
--btn-disabled-color: hsl(240, 98%, 17%);
|
||||
--btn-disabled-color: #112855;
|
||||
--btn-disabled-bg: transparent;
|
||||
--btn-disabled-border-color: hsl(240, 98%, 17%);
|
||||
--btn-disabled-border-color: #112855;
|
||||
--gradient: none;
|
||||
}
|
||||
|
||||
@@ -813,19 +1081,19 @@ transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-
|
||||
}
|
||||
|
||||
.btn-outline-danger {
|
||||
--btn-color: hsl(3, 75%, 37%);
|
||||
--btn-border-color: hsl(3, 75%, 37%);
|
||||
--btn-hover-color: hsl(0, 0%, 100%);
|
||||
--btn-hover-bg: hsl(3, 75%, 37%);
|
||||
--btn-hover-border-color: hsl(3, 75%, 37%);
|
||||
--btn-focus-shadow-rgb: 165, 31, 24;
|
||||
--btn-active-color: hsl(0, 0%, 100%);
|
||||
--btn-active-bg: hsl(3, 75%, 37%);
|
||||
--btn-active-border-color: hsl(3, 75%, 37%);
|
||||
--btn-color: #df4830;
|
||||
--btn-border-color: #df4830;
|
||||
--btn-hover-color: #fff;
|
||||
--btn-hover-bg: #df4830;
|
||||
--btn-hover-border-color: #df4830;
|
||||
--btn-focus-shadow-rgb: 223, 72, 48;
|
||||
--btn-active-color: #fff;
|
||||
--btn-active-bg: #df4830;
|
||||
--btn-active-border-color: #df4830;
|
||||
--btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||
--btn-disabled-color: hsl(3, 75%, 37%);
|
||||
--btn-disabled-color: #df4830;
|
||||
--btn-disabled-bg: transparent;
|
||||
--btn-disabled-border-color: hsl(3, 75%, 37%);
|
||||
--btn-disabled-border-color: #df4830;
|
||||
--gradient: none;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user