This commit is contained in:
2026-04-02 09:57:53 +02:00
parent be3965e2b8
commit a69616e8ce
216 changed files with 1557 additions and 69 deletions

View File

@@ -11,6 +11,8 @@ RewriteRule .* - [E=Cache-Vary:cookiesplus]
RewriteEngine On RewriteEngine On
RewriteRule ^162\-materace\-75x200$ /s/100/materace\-75x200\-cm? [L,R=301]
RewriteRule ^276\-materace\-90x200\-outlet$ /s/2/materace\-outlet\-90x200\-cm? [L,R=301] RewriteRule ^276\-materace\-90x200\-outlet$ /s/2/materace\-outlet\-90x200\-cm? [L,R=301]
RewriteRule ^277\-materace\-120x200\-outlet$ /s/3/materace\-120x200\-outlet? [L,R=301] RewriteRule ^277\-materace\-120x200\-outlet$ /s/3/materace\-120x200\-outlet? [L,R=301]
@@ -197,6 +199,20 @@ RewriteRule ^189\-posciel\-200x220$ /s/91/posciel\-200x220? [L,R=301]
RewriteRule ^content/168\-dr\-materac\-tarnobrzeg$ /content/152\-dr\-materac\-tarnobrzeg? [L,R=301] RewriteRule ^content/168\-dr\-materac\-tarnobrzeg$ /content/152\-dr\-materac\-tarnobrzeg? [L,R=301]
RewriteRule ^214\-materace\-dla\-dzieci\-80x190$ /s/94/materace\-dla\-dzieci\-80x190? [L,R=301]
RewriteRule ^215\-materace\-dla\-dzieci\-90x190$ /s/95/materace\-dla\-dzieci\-90x190? [L,R=301]
RewriteRule ^209\-materace\-dla\-dzieci\-80x180$ /s/92/materace\-dla\-dzieci\-80x180? [L,R=301]
RewriteRule ^177\-koldry\-220x200$ /s/96/koldry\-220x200? [L,R=301]
RewriteRule ^322\-poduszki\-40x40\-cm$ /s/97/poduszki\-40x40\-cm? [L,R=301]
RewriteRule ^326\-poduszki\-50x60\-cm$ /s/98/poduszki\-50x60\-cm? [L,R=301]
RewriteRule ^330\-posciel\-200x220$ /s/99/posciel\-200x220? [L,R=301]
#x13webp module start #x13webp module start
#Domain: drmaterac.pl #Domain: drmaterac.pl

View File

@@ -187,7 +187,14 @@
"lmtime": 0, "lmtime": 0,
"modified": false "modified": false
}, },
"changelog": {}, "changelog": {
"2026-04-01.md": {
"type": "-",
"size": 2425,
"lmtime": 1775040474854,
"modified": false
}
},
"classes": {}, "classes": {},
"composer.lock": { "composer.lock": {
"type": "-", "type": "-",
@@ -688,6 +695,130 @@
}, },
"upgrade": {}, "upgrade": {},
"views": {} "views": {}
},
"crosssellpro": {
"crosssellpro.php": {
"type": "-",
"size": 10887,
"lmtime": 1775038406865,
"modified": false
},
"views": {
"templates": {
"hook": {
"cartCrossSell.tpl": {
"type": "-",
"size": 3580,
"lmtime": 1775041268532,
"modified": false
},
"checkoutCrossSell.tpl": {
"type": "-",
"size": 76,
"lmtime": 0,
"modified": false
}
}
}
}
},
"pm_advancedsearch4": {
"views": {
"js": {
"admin-categories-tree.js": {
"type": "-",
"size": 10508,
"lmtime": 0,
"modified": false
},
"adminCore.js": {
"type": "-",
"size": 15791,
"lmtime": 0,
"modified": false
},
"admin.js": {
"type": "-",
"size": 39544,
"lmtime": 0,
"modified": false
},
"as4_plugin-17.js": {
"type": "-",
"size": 54522,
"lmtime": 1775038425895,
"modified": false
},
"as4_plugin.js": {
"type": "-",
"size": 58714,
"lmtime": 1775038437021,
"modified": false
},
"codemirror": {},
"colorpicker": {},
"datatables": {},
"index.php": {
"type": "-",
"size": 295,
"lmtime": 0,
"modified": false
},
"jGrowl": {},
"jquery.actual.min.js": {
"type": "-",
"size": 1238,
"lmtime": 0,
"modified": false
},
"jquery.form.js": {
"type": "-",
"size": 24062,
"lmtime": 0,
"modified": false
},
"jquery.tipTip.js": {
"type": "-",
"size": 6860,
"lmtime": 0,
"modified": false
},
"jquery.ui.touch-punch.min.js": {
"type": "-",
"size": 1190,
"lmtime": 0,
"modified": false
},
"multiselect": {},
"plupload.full.min.js": {
"type": "-",
"size": 112589,
"lmtime": 0,
"modified": false
},
"pm_advancedsearch.js": {
"type": "-",
"size": 14860,
"lmtime": 0,
"modified": false
},
"pm_tinymce.inc.js": {
"type": "-",
"size": 1948,
"lmtime": 0,
"modified": false
},
"scrollToFixed": {},
"scrollTo.js": {
"type": "-",
"size": 3587,
"lmtime": 0,
"modified": false
},
"selectize": {},
"treeview": {}
}
}
} }
}, },
"nov": {}, "nov": {},

View File

@@ -0,0 +1,22 @@
<?php
/**
* Security Watcher - Cron file check
* Run via cron every 15 minutes:
* *\/15 * * * * php /path/to/prestashop/modules/securitywatcher/cron_check.php
*/
// Bootstrap PrestaShop
$dir = dirname(__FILE__);
$psRoot = realpath($dir . '/../../');
require_once $psRoot . '/config/config.inc.php';
$module = Module::getInstanceByName('securitywatcher');
if ($module && $module->active) {
$changes = $module->cronCheckFiles();
$total = count($changes['new']) + count($changes['modified']) + count($changes['deleted']);
echo date('Y-m-d H:i:s') . " - Check complete. Changes: {$total}\n";
} else {
echo "SecurityWatcher module not active.\n";
}

View File

@@ -0,0 +1 @@
{content}

View File

@@ -0,0 +1 @@
{content}

View File

@@ -0,0 +1 @@
{content}

View File

@@ -0,0 +1 @@
{content}

View File

@@ -0,0 +1 @@
2026-04-02 09:50:44 | MODULE UNINSTALLED | pagecache | Jacek Pyziak (ID: 13) | biuro@project-pro.pl | 91.189.216.43

View File

@@ -0,0 +1,298 @@
<?php
if (!defined('_PS_VERSION_')) {
exit;
}
class SecurityWatcher extends Module
{
private $alertEmail = 'biuro@project-pro.pl';
public function __construct()
{
$this->name = 'securitywatcher';
$this->tab = 'administration';
$this->version = '1.0.0';
$this->author = 'Project-Pro';
$this->need_instance = 0;
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('Security Watcher');
$this->description = $this->l('Monitors module installations and file changes, sends email alerts.');
}
public function install()
{
return parent::install()
&& $this->registerHook('actionModuleInstallAfter')
&& $this->registerHook('actionModuleUninstallAfter')
&& $this->registerHook('actionModuleInstallBefore')
&& $this->registerHook('actionObjectModuleAddAfter')
&& $this->createSnapshotTable()
&& $this->takeSnapshot();
}
public function uninstall()
{
return parent::uninstall();
}
private function createSnapshotTable()
{
$sql = 'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'securitywatcher_snapshot` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`path` VARCHAR(512) NOT NULL,
`hash` VARCHAR(64) NOT NULL,
`size` INT NOT NULL,
`mtime` INT NOT NULL,
`snapshot_date` DATETIME NOT NULL,
INDEX (`path`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
return Db::getInstance()->execute($sql);
}
public function takeSnapshot()
{
Db::getInstance()->execute('TRUNCATE TABLE `' . _DB_PREFIX_ . 'securitywatcher_snapshot`');
$dirs = [
_PS_MODULE_DIR_,
_PS_ROOT_DIR_ . '/themes/',
];
foreach ($dirs as $dir) {
$this->scanDir($dir);
}
return true;
}
private function scanDir($dir)
{
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
$batch = [];
$count = 0;
foreach ($iterator as $file) {
if ($file->isFile() && preg_match('/\.(php|js|tpl|html|css)$/i', $file->getFilename())) {
$path = str_replace(_PS_ROOT_DIR_, '', $file->getPathname());
$batch[] = '('
. "'" . pSQL($path) . "',"
. "'" . pSQL(md5_file($file->getPathname())) . "',"
. (int)$file->getSize() . ','
. (int)$file->getMTime() . ','
. "NOW()"
. ')';
$count++;
if ($count % 500 === 0) {
$this->insertBatch($batch);
$batch = [];
}
}
}
if (!empty($batch)) {
$this->insertBatch($batch);
}
}
private function insertBatch($batch)
{
$sql = 'INSERT INTO `' . _DB_PREFIX_ . 'securitywatcher_snapshot` (path, hash, size, mtime, snapshot_date) VALUES ' . implode(',', $batch);
Db::getInstance()->execute($sql);
}
public function hookActionModuleInstallBefore($params)
{
$this->sendModuleAlert('INSTALLATION ATTEMPT', $params);
}
public function hookActionModuleInstallAfter($params)
{
$this->sendModuleAlert('MODULE INSTALLED', $params);
}
public function hookActionModuleUninstallAfter($params)
{
$this->sendModuleAlert('MODULE UNINSTALLED', $params);
}
public function hookActionObjectModuleAddAfter($params)
{
if (isset($params['object'])) {
$this->sendModuleAlert('MODULE ADDED TO DB', $params);
}
}
private function sendModuleAlert($action, $params)
{
$moduleName = 'unknown';
if (isset($params['module']) && is_object($params['module'])) {
$moduleName = $params['module']->name;
} elseif (isset($params['object']) && is_object($params['object'])) {
$moduleName = $params['object']->name;
}
$employee = Context::getContext()->employee;
$employeeInfo = 'Not logged in / CLI';
$employeeEmail = 'N/A';
if ($employee && $employee->id) {
$employeeInfo = $employee->firstname . ' ' . $employee->lastname . ' (ID: ' . $employee->id . ')';
$employeeEmail = $employee->email;
}
$ip = Tools::getRemoteAddr();
$userAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'N/A';
$shopUrl = Tools::getShopDomainSsl(true);
$subject = "[SECURITY] {$action}: {$moduleName} @ " . Configuration::get('PS_SHOP_NAME');
$body = "
<html><body style='font-family: Arial, sans-serif;'>
<h2 style='color: #cc0000;'>&#9888; {$action}</h2>
<table style='border-collapse:collapse; width:100%;'>
<tr><td style='padding:8px; border:1px solid #ddd; font-weight:bold;'>Module</td><td style='padding:8px; border:1px solid #ddd;'>{$moduleName}</td></tr>
<tr><td style='padding:8px; border:1px solid #ddd; font-weight:bold;'>Action</td><td style='padding:8px; border:1px solid #ddd;'>{$action}</td></tr>
<tr><td style='padding:8px; border:1px solid #ddd; font-weight:bold;'>Employee</td><td style='padding:8px; border:1px solid #ddd;'>{$employeeInfo}</td></tr>
<tr><td style='padding:8px; border:1px solid #ddd; font-weight:bold;'>Employee Email</td><td style='padding:8px; border:1px solid #ddd;'>{$employeeEmail}</td></tr>
<tr><td style='padding:8px; border:1px solid #ddd; font-weight:bold;'>IP Address</td><td style='padding:8px; border:1px solid #ddd;'>{$ip}</td></tr>
<tr><td style='padding:8px; border:1px solid #ddd; font-weight:bold;'>User Agent</td><td style='padding:8px; border:1px solid #ddd;'>{$userAgent}</td></tr>
<tr><td style='padding:8px; border:1px solid #ddd; font-weight:bold;'>Date</td><td style='padding:8px; border:1px solid #ddd;'>" . date('Y-m-d H:i:s') . "</td></tr>
<tr><td style='padding:8px; border:1px solid #ddd; font-weight:bold;'>Shop</td><td style='padding:8px; border:1px solid #ddd;'>{$shopUrl}</td></tr>
</table>
</body></html>";
$this->sendAlert($subject, $body);
$logFile = _PS_MODULE_DIR_ . 'securitywatcher/security.log';
$logLine = date('Y-m-d H:i:s') . " | {$action} | {$moduleName} | {$employeeInfo} | {$employeeEmail} | {$ip}\n";
file_put_contents($logFile, $logLine, FILE_APPEND | LOCK_EX);
}
public function cronCheckFiles()
{
$dirs = [
_PS_MODULE_DIR_,
_PS_ROOT_DIR_ . '/themes/',
];
$changes = ['new' => [], 'modified' => [], 'deleted' => []];
foreach ($dirs as $dir) {
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS)
);
foreach ($iterator as $file) {
if ($file->isFile() && preg_match('/\.(php|js|tpl|html|css)$/i', $file->getFilename())) {
$path = str_replace(_PS_ROOT_DIR_, '', $file->getPathname());
$hash = md5_file($file->getPathname());
$existing = Db::getInstance()->getRow(
'SELECT hash FROM `' . _DB_PREFIX_ . 'securitywatcher_snapshot` WHERE path = "' . pSQL($path) . '"'
);
if (!$existing) {
$changes['new'][] = $path;
} elseif ($existing['hash'] !== $hash) {
$changes['modified'][] = $path;
}
}
}
}
$snapshotFiles = Db::getInstance()->executeS(
'SELECT path FROM `' . _DB_PREFIX_ . 'securitywatcher_snapshot`'
);
foreach ($snapshotFiles as $row) {
if (!file_exists(_PS_ROOT_DIR_ . $row['path'])) {
$changes['deleted'][] = $row['path'];
}
}
$totalChanges = count($changes['new']) + count($changes['modified']) + count($changes['deleted']);
if ($totalChanges > 0) {
$subject = "[SECURITY] {$totalChanges} file change(s) detected @ " . Configuration::get('PS_SHOP_NAME');
$body = "<html><body style='font-family: Arial, sans-serif;'>";
$body .= "<h2 style='color: #cc0000;'>&#9888; File Changes Detected</h2>";
$body .= "<p>Date: " . date('Y-m-d H:i:s') . "</p>";
if (!empty($changes['new'])) {
$body .= "<h3 style='color: #cc6600;'>New files (" . count($changes['new']) . ")</h3><ul>";
foreach (array_slice($changes['new'], 0, 50) as $f) {
$body .= "<li>" . htmlspecialchars($f) . "</li>";
}
if (count($changes['new']) > 50) {
$body .= "<li>... and " . (count($changes['new']) - 50) . " more</li>";
}
$body .= "</ul>";
}
if (!empty($changes['modified'])) {
$body .= "<h3 style='color: #cc0000;'>Modified files (" . count($changes['modified']) . ")</h3><ul>";
foreach (array_slice($changes['modified'], 0, 50) as $f) {
$body .= "<li>" . htmlspecialchars($f) . "</li>";
}
if (count($changes['modified']) > 50) {
$body .= "<li>... and " . (count($changes['modified']) - 50) . " more</li>";
}
$body .= "</ul>";
}
if (!empty($changes['deleted'])) {
$body .= "<h3 style='color: #999;'>Deleted files (" . count($changes['deleted']) . ")</h3><ul>";
foreach (array_slice($changes['deleted'], 0, 50) as $f) {
$body .= "<li>" . htmlspecialchars($f) . "</li>";
}
if (count($changes['deleted']) > 50) {
$body .= "<li>... and " . (count($changes['deleted']) - 50) . " more</li>";
}
$body .= "</ul>";
}
$body .= "</body></html>";
$this->sendAlert($subject, $body);
$logFile = _PS_MODULE_DIR_ . 'securitywatcher/security.log';
$logLine = date('Y-m-d H:i:s') . " | FILE CHANGES | new:" . count($changes['new']) . " mod:" . count($changes['modified']) . " del:" . count($changes['deleted']) . "\n";
file_put_contents($logFile, $logLine, FILE_APPEND | LOCK_EX);
}
$this->takeSnapshot();
return $changes;
}
private function sendAlert($subject, $body)
{
$emails = array_map('trim', explode(',', $this->alertEmail));
foreach ($emails as $email) {
@Mail::Send(
(int)Configuration::get('PS_LANG_DEFAULT'),
'securitywatcher',
$subject,
['{content}' => $body],
$email,
null,
Configuration::get('PS_SHOP_EMAIL'),
Configuration::get('PS_SHOP_NAME'),
null,
null,
_PS_MODULE_DIR_ . 'securitywatcher/mails/'
);
}
}
}

View File

@@ -104,3 +104,665 @@
#products #category-description.text-muted { #products #category-description.text-muted {
color: #000 !important; color: #000 !important;
} }
#cms #main .page-content .opt-lp-list {
list-style: square !important;
}
#schemafaq h3 {margin: 0 !important;}
#schemafaq p {margin:0 !important;padding:10px 0;}
#schemafaq label {margin:0 !important;}
#schemafaq {max-width: 100%;width: 100%;margin: 0 auto;clear: both;padding: 0;margin-top:40px;}
#schemafaq input {position: absolute;opacity: 0;z-index: -1}
#schemafaq .tabs {border-radius: 0px;overflow: hidden;border: 1px solid #eee}
#schemafaq .tab {width: 100%;color: white;overflow: hidden}
#schemafaq .tab-label {display: -webkit-box;display: flex;-webkit-box-pack: justify;justify-content: space-between;padding: 1em;background: #f9f9f9;font-weight: bold;cursor: pointer;color: #111;transition: all .3s;border-top: 1px solid #eee}
#schemafaq .tab:first-child .tab-label {border-top: none}
#schemafaq .tab-label:hover {background: #eee}
#schemafaq .tab-label::after {content: "\276F";width: 1em;height: 1em;text-align: center;-webkit-transition: all .3s;transition: all .3s;display: flex;justify-content: center;align-items: center;-webkit-transform: rotateZ(90deg);transform: rotateZ(90deg)}
#schemafaq .tab-content {max-height: 0;padding: 0 1em;color: #111;background: white;-webkit-transition: all .3s;transition: all .3s}
#schemafaq .tab-close {display: -webkit-box;display: flex;-webkit-box-pack: end;justify-content: flex-end;padding: 1em;font-size: 0.75em;background: #29abe2;cursor: pointer}
#schemafaq .tab-close:hover {background: #29abe2}
#schemafaq input:checked+.tab-label,#schemafaq input:checked+h3>.tab-label {background: #eee;color: #111}
#schemafaq input:checked+.tab-label::after,#schemafaq input:checked+h3>.tab-label::after {-webkit-transform: rotateZ(180deg);transform: rotateZ(180deg)}
#schemafaq input:checked~.tab-content {max-height: 100vh;padding: 1em}
.comment-box {
display: flex;
border: 1px solid #34d6ad;
border-collapse: collapse;
padding: 10px;
margin: 10px 0 20px;
}
.comment-box-text {
font-size: 13px;
line-height: 1.4;
border-left: 2px solid #333;
padding: 10px 0;
padding-left: 10px;
}
.comment-box-text p {
margin: 0 0 5px;
}
#cms.cms-id-176 #content-wrapper #page_hero {
position: relative
}
#cms.cms-id-176 #content-wrapper #page_hero .page_hero {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 580px
}
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_bg {
position: absolute;
left: 50%;
top: 0;
transform: translateX(-50%)
}
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_data {
position: relative
}
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_data h1 {
color: #fff;
text-align: center;
text-shadow: 0 4px 4px rgba(0,0,0,.25);
font-size: 60px;
font-style: normal;
font-weight: 700;
line-height: normal
}
@media(max-width: 991px) {
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_data h1 {
font-size:48px
}
}
@media(max-width: 576px) {
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_data h1 {
font-size:36px
}
}
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_info {
position: absolute;
bottom: 30px;
text-align: center
}
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_info p {
color: #fff;
text-align: center;
text-shadow: 0 4px 4px rgba(0,0,0,.25);
font-size: 28px;
font-style: normal;
font-weight: 700;
line-height: normal
}
@media(max-width: 991px) {
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_info p {
font-size:24px
}
}
@media(max-width: 576px) {
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_info p {
font-size:20px
}
}
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_info a {
position: relative;
display: inline-block;
color: #000;
font-weight: 700;
line-height: 1;
padding: 10px 50px 10px 20px;
background: #fff;
border-radius: 100px
}
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_info a::before {
content: "";
position: absolute;
right: 0;
top: 0;
bottom: 0;
width: 40px;
background: #34d6ad;
border-top-right-radius: 30px;
border-bottom-right-radius: 30px
}
#cms.cms-id-176 #content-wrapper #page_hero .page_hero .hero_info a::after {
content: "";
position: absolute;
right: 15px;
top: 10px;
bottom: 0;
background-image: url(/img/Play-solid.svg);
background-position: center;
background-size: cover;
background-repeat: no-repeat;
width: 11px;
height: 13px;
z-index: 1
}
#cms.cms-id-176 #content-wrapper .box-1 {
margin-top: 75px;
margin-bottom: 15px
}
#cms.cms-id-176 #content-wrapper .box-1 .col-left h2 {
color: #33d5ad;
font-size: 30px;
font-style: normal;
font-weight: 700;
line-height: normal
}
#cms.cms-id-176 #content-wrapper .box-1 .col-left ul {
margin-top: 30px;
margin-bottom: 30px
}
#cms.cms-id-176 #content-wrapper .box-1 .col-left ul li {
position: relative;
color: #000;
font-size: 22px;
font-style: normal;
font-weight: 400;
line-height: normal;
padding-left: 30px
}
#cms.cms-id-176 #content-wrapper .box-1 .col-left ul li::before {
content: "";
position: absolute;
left: 0;
top: 16px;
transform: translateY(-50%);
width: 20px;
height: 20px;
background: url(/img/cms/franczyza/el_check.svg) no-repeat center center;
background-size: cover
}
#cms.cms-id-176 #content-wrapper .box-1 .col-left p {
color: #000;
font-size: 26px;
font-style: normal;
font-weight: 400;
line-height: normal
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right p {
color: #000;
font-size: 21px;
font-style: normal;
font-weight: 400;
line-height: normal
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right p strong {
font-weight: 700
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form {
margin-top: 40px
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-inputs {
display: flex;
flex-direction: column;
gap: 17px;
margin-bottom: 11px
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-inputs input {
padding: 15px 18px;
border: 1px solid #bcbcbc
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-inputs input:focus {
outline: none
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form p {
color: #cd1f27;
font-family: "Poppins",sans-serif;
font-size: 12px;
font-style: normal;
font-weight: 400;
line-height: normal
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-confirmation {
display: flex;
flex-direction: row;
gap: 15px;
margin-top: 13px;
margin-bottom: 35px
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-confirmation input[type=checkbox] {
position: relative;
width: 25px;
min-width: 25px;
height: 25px;
border: 1px solid #bcbcbc;
border-radius: 0;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
outline: none;
cursor: pointer;
transition: all 250ms ease-in-out;
overflow: hidden
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-confirmation input[type=checkbox]::before {
content: "";
position: absolute;
left: 32px;
top: -14px;
width: 2px;
height: 12px;
background-color: #33d5ad;
transform: rotate(40deg);
transition: all 250ms ease-in-out
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-confirmation input[type=checkbox]::after {
content: "";
position: absolute;
left: -13px;
top: -8px;
width: 2px;
height: 6px;
background-color: #33d5ad;
transform: rotate(-40deg);
transition: all 250ms ease-in-out
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-confirmation input[type=checkbox]:checked::before {
left: 12px;
top: 6px
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-confirmation input[type=checkbox]:checked::after {
left: 7px;
top: 12px
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-confirmation label {
color: #000;
font-family: "Poppins",sans-serif;
font-size: 10px;
font-style: normal;
font-weight: 400;
line-height: normal;
cursor: pointer;
text-align: left
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-btn {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-btn button {
color: #fff;
text-align: center;
font-family: "Poppins",sans-serif;
font-size: 14px;
font-style: normal;
font-weight: 400;
line-height: normal;
background: #33d5ad;
padding: 15px 20px;
border: none;
cursor: pointer
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-btn .loader {
display: none;
width: 32px;
height: 32px;
border: 5px solid #33d5ad;
border-bottom-color: #fff;
border-radius: 50%;
box-sizing: border-box;
animation: rotation 1s linear infinite
}
@keyframes rotation {
0% {
transform: rotate(0deg)
}
100% {
transform: rotate(360deg)
}
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-info {
margin-top: -20px
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-info p {
font-size: 14px;
font-style: normal;
font-weight: 400;
line-height: normal
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-info p.ok {
color: #33d5ad
}
#cms.cms-id-176 #content-wrapper .box-1 .col-right form .form-info p.error {
color: #cd1f27
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box {
display: grid;
grid-template-columns: 255px 253px 229px 218px 194px;
grid-template-rows: 222px 258px;
gap: 4px;
grid-template-areas: "img1 img1 img2 img3 img3" "img4 img5 img6 img7 img8"
}
@media(max-width: 1199px) {
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box {
grid-template-columns:1fr 1fr 1fr 1fr;
grid-template-rows: auto;
grid-template-areas: "img1 img1 img2 img4" "img5 img6 img3 img3" ". img7 img8 ."
}
}
@media(max-width: 767px) {
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box {
grid-template-columns:1fr 1fr 1fr;
grid-template-areas: "img1 img1 img2" "img4 img3 img3" "img5 img6 img7" ". img8 ."
}
}
@media(max-width: 575px) {
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box {
grid-template-columns:1fr 1fr;
grid-template-areas: "img1 img1" "img2 img4" "img5 img6" "img3 img3" "img7 img8"
}
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box .gallery-item:nth-child(1) {
grid-area: img1
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box .gallery-item:nth-child(2) {
grid-area: img2
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box .gallery-item:nth-child(3) {
grid-area: img3
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box .gallery-item:nth-child(4) {
grid-area: img4
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box .gallery-item:nth-child(5) {
grid-area: img5
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box .gallery-item:nth-child(6) {
grid-area: img6
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box .gallery-item:nth-child(7) {
grid-area: img7
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box .gallery-item:nth-child(8) {
grid-area: img8
}
#cms.cms-id-176 #content-wrapper .box-2 .gallery-box .gallery-item img {
width: 100%;
height: 100%;
-o-object-fit: cover;
object-fit: cover
}
#cms.cms-id-176 #content-wrapper .box-4 {
margin-top: 75px;
margin-bottom: 75px
}
#cms.cms-id-176 #content-wrapper .box-4 h2 {
color: #000;
text-align: center;
font-size: 40px;
font-style: normal;
font-weight: 700;
line-height: normal
}
#cms.cms-id-176 #content-wrapper .box-4 .acc_component {
box-shadow: 0 1px 3px 0 rgba(0,0,0,.1),0 0 2px 0 rgba(0,0,0,.2)
}
#cms.cms-id-176 #content-wrapper .box-4 .acc_component>li:not(:last-child) {
border-bottom: 1px solid rgba(0,0,0,.12)
}
#cms.cms-id-176 #content-wrapper .box-4 .acc_component li.active .acc_head .arrow img {
transform: scale(-1)
}
#cms.cms-id-176 #content-wrapper .box-4 .acc_component li .acc_head {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 12px 20px;
cursor: pointer
}
#cms.cms-id-176 #content-wrapper .box-4 .acc_component li .acc_head p {
color: rgba(0,0,0,.87);
font-family: "Roboto",sans-serif;
font-size: 15px;
font-style: normal;
font-weight: 400;
line-height: normal;
margin-bottom: 0
}
#cms.cms-id-176 #content-wrapper .box-4 .acc_component li .acc_head .arrow {
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
background: #33d5ad
}
#cms.cms-id-176 #content-wrapper .box-4 .acc_component li .acc_head .arrow img {
width: 100%;
max-width: -moz-fit-content;
max-width: fit-content;
transition: all 250ms ease-in-out
}
#cms.cms-id-176 #content-wrapper .box-4 .acc_component li .acc_body {
display: none;
color: rgba(0,0,0,.54);
font-family: "Roboto",sans-serif;
font-size: 14px;
font-style: normal;
font-weight: 400;
line-height: normal;
padding: 25px 20px
}
#cms.cms-id-176 #footer .footer-top {
display: none
}
#cms.cms-id-176 #content-wrapper h2{
margin: 20px 0;
color: #000;
text-align: center;
font-size: 25px;
font-style: normal;
font-weight: 700;
line-height: normal;
}
#cms.cms-id-176 #content-wrapper p{
font-size: 14px;
}
#cms.cms-id-176 #content-wrapper .box-1, #cms.cms-id-176 #content-wrapper .box-2, #cms.cms-id-176 #content-wrapper .box-3{
text-align: center;
}
#cms.cms-id-176 .link-list__container{
list-style: none;
display: grid;
grid-template-columns: repeat(auto-fit,minmax(250px,1fr));
gap: 10px;
list-style: none;
padding: 0 !important;
margin: 20px 0 10px !important;
}
#cms.cms-id-176 .link-list__container li{
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-ms-flex-line-pack: center;
align-content: center;
height: 100%;
min-height: 50px;
text-align: center;
}
#cms.cms-id-176 .link-list__container li a {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
color: #000;
font-weight: 600;
width: 100%;
margin: 0 auto;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
padding: 13px 10px;
border-radius: 5px;
transition: 0.5s;
text-decoration: none;
}
#cms.cms-id-176 .link-list__container li a:hover {
scale: 1.05;
}
#cms.cms-id-176 .about-prons{
text-align: center;
margin: 0;
}
#cms.cms-id-176 .about-prons .about-prons-wrapper{
margin-top: 50px;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 40px;
}
#cms.cms-id-176 .about-prons .about-prons-wrapper .about-prons-item{
padding: 20px 20px 10px;
border: 1px solid #34d6ad;
display: flex;
flex-direction: column;
justify-content: center;
}
#cms.cms-id-176 .about-prons .about-prons-wrapper .about-prons-item .about-prons-item-header{
color: #34d6ad;
font-weight: 500;
font-size: 1.3em;
}
@media (max-width: 1300px) {
#cms.cms-id-176 .about-prons .about-prons-wrapper {
grid-template-columns: repeat(2, 1fr);
gap: 20px;
}
#cms.cms-id-176 .about-prons .about-prons-wrapper .about-prons-item {
padding: 20px 10px 10px;
}
}
@media (max-width: 768px) {
#cms.cms-id-176 .about-prons .about-prons-wrapper {
grid-template-columns: repeat(1, 1fr);
gap: 20px;
}
}
#category-description2 p{
color: #000000;
}
.page-cms .page-cms h2{
line-height: 1.8;
background-color: transparent;
margin-top: 0pt;
margin-bottom: 0pt;
font-size: 16pt;
font-family: Arial, sans-serif;
color: #000000;
font-weight: 400;
font-style: normal;
font-variant: normal;
text-decoration: none;
vertical-align: baseline;
white-space: pre-wrap;
text-align: center;
}
.page-cms .page-cms p{
line-height: 1.8 !important;
background-color: transparent;
margin-top: 0pt;
margin-bottom: 0pt;
text-align: left;
font-size: 12pt !important;
font-family: Arial, sans-serif;
color: #0d0d0d;
font-weight: 400;
font-style: normal;
font-variant: normal;
text-decoration: none;
vertical-align: baseline;
white-space: pre-wrap;
}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Some files were not shown because too many files have changed in this diff Show More