← back to Corkwallcovering
feat(fleet): theme1/theme2 query-param-gated toggle on catalog page
e01dabf80d64f6e87c5cbfe725624f83054f131a · 2026-05-29 13:20:41 -0700 · SteveStudio2
Default: theme1, toggle hidden. Opt-in via ?theme=2 or localStorage
('wallco-page-theme' key shared across the fleet). Same gate pattern
as dw-domain-fleet productPage.
Files touched
Diff
commit e01dabf80d64f6e87c5cbfe725624f83054f131a
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Fri May 29 13:20:41 2026 -0700
feat(fleet): theme1/theme2 query-param-gated toggle on catalog page
Default: theme1, toggle hidden. Opt-in via ?theme=2 or localStorage
('wallco-page-theme' key shared across the fleet). Same gate pattern
as dw-domain-fleet productPage.
---
public/index.html | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+)
diff --git a/public/index.html b/public/index.html
index 3d21913..1d9989e 100644
--- a/public/index.html
+++ b/public/index.html
@@ -234,6 +234,74 @@ textarea:focus-visible,
<!-- End Meta Pixel -->
</head>
<body>
+<!-- Theme toggle (theme1 / theme2) — query-param-gated preview surface
+ (Steve 2026-05-29). ?theme=2 in URL flips to theme2 and persists in
+ localStorage. Toggle UI hidden until theme2 mode active. Same key
+ ('wallco-page-theme') as wallco.ai for cross-site continuity. -->
+<script>
+(function(){
+ var qs = new URLSearchParams(location.search);
+ var fromUrl = qs.get('theme');
+ var saved = null; try { saved = localStorage.getItem('wallco-page-theme'); } catch(e){}
+ var theme = null;
+ if (fromUrl === '2' || fromUrl === 'theme2') theme = 'theme2';
+ else if (fromUrl === '1' || fromUrl === 'theme1') theme = 'theme1';
+ else if (saved === 'theme2' || saved === 'theme1') theme = saved;
+ if (theme) {
+ document.documentElement.setAttribute('data-page-theme', theme);
+ if (fromUrl) { try { localStorage.setItem('wallco-page-theme', theme); } catch(e){} }
+ }
+})();
+</script>
+<style id="page-theme-css-fleet">
+ [data-page-theme="theme2"] body{
+ background:#fff !important; color:#0a0a0a !important;
+ }
+ [data-page-theme="theme2"] h1,
+ [data-page-theme="theme2"] h2,
+ [data-page-theme="theme2"] h3{ letter-spacing:-0.01em; font-weight:500; }
+ [data-page-theme="theme2"] .card,
+ [data-page-theme="theme2"] [class*="card"]{
+ background:#fafafa !important; border:1px solid #e5e5e5 !important; box-shadow:none !important;
+ }
+ #page-theme-toggle{ display:none; }
+ [data-page-theme] #page-theme-toggle{ display:inline-flex; }
+ #page-theme-toggle{
+ position:fixed; top:96px; right:14px; z-index:90;
+ gap:0; align-items:center;
+ background:rgba(255,255,255,.92); border:1px solid #d8d2c5;
+ border-radius:999px; padding:3px; backdrop-filter:blur(6px);
+ box-shadow:0 2px 10px rgba(0,0,0,.08);
+ font:600 11px ui-sans-serif,system-ui; letter-spacing:.06em; text-transform:uppercase;
+ }
+ #page-theme-toggle button{
+ border:0; background:transparent; color:#5a5048; cursor:pointer;
+ padding:6px 14px; border-radius:999px; font:inherit; transition:all .15s;
+ }
+ #page-theme-toggle button[aria-pressed="true"]{ background:#1a1714; color:#faf7f2; }
+ #page-theme-toggle button:hover:not([aria-pressed="true"]){ color:#1a1714; }
+</style>
+<div id="page-theme-toggle" role="group" aria-label="Page theme">
+ <button type="button" data-theme="theme1" aria-pressed="false">Theme 1</button>
+ <button type="button" data-theme="theme2" aria-pressed="false">Theme 2</button>
+</div>
+<script>
+(function(){
+ var cur = document.documentElement.getAttribute('data-page-theme') || 'theme1';
+ var btns = document.querySelectorAll('#page-theme-toggle button');
+ function sync(t){ btns.forEach(function(b){ b.setAttribute('aria-pressed', b.dataset.theme === t ? 'true' : 'false'); }); }
+ sync(cur);
+ btns.forEach(function(b){
+ b.addEventListener('click', function(){
+ var t = b.dataset.theme;
+ document.documentElement.setAttribute('data-page-theme', t);
+ try { localStorage.setItem('wallco-page-theme', t); } catch(e){}
+ sync(t);
+ });
+ });
+})();
+</script>
+
<style id="ns-header-modal-styles">
.ns-header { position: sticky; top: 0; z-index: 100; display: flex; align-items: center; justify-content: space-between; padding: 18px 36px; background: rgba(10,10,10,0.92) !important; backdrop-filter: blur(8px); border-bottom: 1px solid rgba(245,241,232,0.06); }
.ns-brand { display: inline-flex; align-items: center; gap: 14px; text-decoration: none; }
← 7eba2df scrub vendor name leaks from products.json source (160 produ
·
back to Corkwallcovering
·
fix: remove public/index.html.bak-* leak and add *.bak-* to a99cbe8 →