From 6ff7e970460445b87463533620a10d5e4cc8bba5 Mon Sep 17 00:00:00 2001 From: Alexey S Date: Wed, 22 Apr 2026 01:33:41 +0300 Subject: [PATCH 1/8] Add V1/V2 design version toggle Introduces data-design-version attribute on with localStorage persistence and anti-flicker inline script. V2 overrides implement the design audit: Cormorant serif headings, #7D021D wine palette, warm #FFFDFA base, refreshed product card, mega-menu, contacts, and form success state. V1 remains untouched. Co-Authored-By: Claude Opus 4.7 --- .claude/launch.json | 5 +- src/_includes/layouts/base.njk | 12 + src/_includes/partials/header.njk | 4 + src/css/tokens.css | 20 ++ src/css/v2.css | 399 ++++++++++++++++++++++++++++++ src/js/design-switcher.js | 120 +++++++++ 6 files changed, 558 insertions(+), 2 deletions(-) create mode 100644 src/css/v2.css create mode 100644 src/js/design-switcher.js diff --git a/.claude/launch.json b/.claude/launch.json index 068cf37..30063b4 100644 --- a/.claude/launch.json +++ b/.claude/launch.json @@ -4,8 +4,9 @@ { "name": "11ty dev server (live reload)", "runtimeExecutable": "npm", - "runtimeArgs": ["run", "dev"], - "port": 8080 + "runtimeArgs": ["run", "dev", "--", "--port=8088"], + "port": 8088, + "autoPort": false }, { "name": "Python HTTP Server (_site)", diff --git a/src/_includes/layouts/base.njk b/src/_includes/layouts/base.njk index 69178c1..1242118 100644 --- a/src/_includes/layouts/base.njk +++ b/src/_includes/layouts/base.njk @@ -4,7 +4,18 @@ {{ title }} + + + diff --git a/src/_includes/partials/header.njk b/src/_includes/partials/header.njk index 129cc53..3cebf08 100644 --- a/src/_includes/partials/header.njk +++ b/src/_includes/partials/header.njk @@ -10,6 +10,10 @@
+
+ + +
+7 (495) 937-94-60 ' + + 'Каталог' + + '' + + 'Bordeaux' + + '' + + 'Chateau Laroque Grand Cru'; + main.insertBefore(nav, detail.parentElement === main ? detail : main.firstChild); + } + + function ensureSplitContactFields() { + var form = document.querySelector('.contact-form'); + if (!form || form.dataset.v2Enhanced === '1') return; + var labels = form.querySelectorAll('label'); + for (var i = 0; i < labels.length; i++) { + if (/Телефон или email/i.test(labels[i].textContent)) { + var comboLabel = labels[i]; + comboLabel.setAttribute('data-v2-hide', '1'); + + var phoneLabel = document.createElement('label'); + phoneLabel.setAttribute('data-v2-only', 'split'); + phoneLabel.innerHTML = 'Телефон'; + + var emailLabel = document.createElement('label'); + emailLabel.setAttribute('data-v2-only', 'split'); + emailLabel.innerHTML = 'Email'; + + comboLabel.parentNode.insertBefore(phoneLabel, comboLabel.nextSibling); + comboLabel.parentNode.insertBefore(emailLabel, phoneLabel.nextSibling); + break; + } + } + form.dataset.v2Enhanced = '1'; + form.addEventListener('submit', function (e) { + if (root.getAttribute('data-design-version') !== 'v2') return; + e.preventDefault(); + if (form.querySelector('.form-success')) return; + var success = document.createElement('div'); + success.className = 'form-success'; + success.setAttribute('data-v2-only', 'success'); + success.textContent = 'Заявка отправлена. Менеджер свяжется с вами в ближайшее время.'; + form.appendChild(success); + var btn = form.querySelector('button[type="submit"]'); + if (btn) { + btn.disabled = true; + btn.textContent = 'Заявка отправлена'; + } + }); + } + + function enhanceDomV2() { + ensureBreadcrumbs(); + ensureSplitContactFields(); + } + + function apply(v) { + root.setAttribute('data-design-version', v); + syncButtons(v); + if (v === 'v2') enhanceDomV2(); + } + + document.addEventListener('click', function (e) { + var btn = e.target.closest && e.target.closest('.design-toggle__btn'); + if (!btn) return; + var v = btn.dataset.version; + if (!v) return; + setVersion(v); + apply(v); + }); + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', function () { apply(getVersion()); }); + } else { + apply(getVersion()); + } +})(); From 6ca71903359bd61133a22ebcaa4c4a6ef297466d Mon Sep 17 00:00:00 2001 From: Alexey S Date: Wed, 22 Apr 2026 16:08:30 +0300 Subject: [PATCH 2/8] Move V1/V2 toggle into main nav and ui-kit sidebar Relocates the toggle out of header actions into the end of .main-nav (pushed right via margin-left:auto) and adds it to the ui-kit sidebar, which uses the base layout without the site header. Co-Authored-By: Claude Opus 4.7 --- src/_includes/partials/header.njk | 8 ++++---- src/css/v2.css | 9 +++++++++ src/ui-kit.njk | 4 ++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/_includes/partials/header.njk b/src/_includes/partials/header.njk index 3cebf08..a180b80 100644 --- a/src/_includes/partials/header.njk +++ b/src/_includes/partials/header.njk @@ -10,10 +10,6 @@
+
+ + +
diff --git a/src/css/v2.css b/src/css/v2.css index bce0d2b..8eaed34 100644 --- a/src/css/v2.css +++ b/src/css/v2.css @@ -27,6 +27,15 @@ background: var(--color-primary-wine-100); color: #fff; } +.design-toggle--nav { + margin-left: auto; + align-self: center; + flex-shrink: 0; +} +.design-toggle--uikit { + margin: 16px 24px 0; + align-self: flex-start; +} /* V2-only DOM nodes hidden under V1 */ [data-design-version="v1"] [data-v2-only] { display: none !important; } diff --git a/src/ui-kit.njk b/src/ui-kit.njk index 20e2b7e..d046e2d 100644 --- a/src/ui-kit.njk +++ b/src/ui-kit.njk @@ -4,6 +4,10 @@ layout: layouts/ui-kit permalink: /ui-kit.html ---