← back to Corkwallcovering
Phase 2: mobile-ready + tap-to-reveal
0d652d4638763001e5072711ef97f189cbaa35af · 2026-05-19 11:26:16 -0700 · SteveStudio2
Files touched
Diff
commit 0d652d4638763001e5072711ef97f189cbaa35af
Author: SteveStudio2 <steve@designerwallcoverings.com>
Date: Tue May 19 11:26:16 2026 -0700
Phase 2: mobile-ready + tap-to-reveal
---
public/index.html | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/public/index.html b/public/index.html
index 55a8272..65384d0 100644
--- a/public/index.html
+++ b/public/index.html
@@ -112,7 +112,7 @@ header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:s
.card:hover { transform:scale(1.04); z-index:5 }
.card img { width:100%; height:100%; object-fit:cover; display:block; transition:transform 0.4s ease }
.card .overlay { position:absolute; left:0; right:0; bottom:0; padding:20px 16px 14px; background:linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.85) 100%); transform:translateY(48%); opacity:0.85; transition:transform 0.3s ease, opacity 0.3s ease }
-.card:hover .overlay { transform:translateY(0); opacity:1 }
+.card:hover .overlay, .card.revealed .overlay { transform:translateY(0); opacity:1 }
.card .pat { font-size:13px; font-weight:600; letter-spacing:0.02em; color:#fff; line-height:1.25; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden }
.card .ven { font-size:9px; letter-spacing:0.18em; text-transform:uppercase; color:#fff; opacity:0.7; font-weight:500; margin-top:4px }
.card .actions { margin-top:10px; display:flex; gap:6px }
@@ -120,7 +120,13 @@ header { position:fixed; top:0; left:0; right:0; display:flex; justify-content:s
.card .sample-btn:hover { background:var(--accent); color:#fff }
@media (max-width:1024px) { .grid { grid-template-columns:repeat(min(var(--cols), 4), 1fr) } }
-@media (max-width:720px) { .grid { grid-template-columns:repeat(2, 1fr) } .density { display:none } }
+@media (max-width:720px) {
+ .grid { grid-template-columns:repeat(2, 1fr) }
+ .density { flex-wrap:wrap; gap:10px }
+ .dens-only, #densitySlider, #densityLabel { display:none }
+ .density .search { flex:1 1 100%; order:5 }
+ .card .sample-btn { padding:12px 10px }
+}
.sentinel { height:1px }
.loading { text-align:center; color:var(--muted); padding:32px; font-size:10px; letter-spacing:0.32em; text-transform:uppercase; font-weight:700 }
@@ -353,7 +359,7 @@ textarea:focus-visible,
<option value="price-asc">Price ↑</option>
<option value="price-desc">Price ↓</option>
</select>
- <label style="margin-left:18px">Grid</label>
+ <label class="dens-only" style="margin-left:18px">Grid</label>
<input type="range" id="densitySlider" min="4" max="12" step="1" value="6" aria-label="Grid columns">
<span class="ct" id="densityLabel">6 cols</span>
<div class="search">
@@ -470,6 +476,7 @@ textarea:focus-visible,
<script>
const state = { q:'', facet:'all', sort: localStorage.getItem('cork_sort') || 'newest', view:'grid', page:1, pages:1, total:0, loading:false, exhausted:false };
+const TOUCH = window.matchMedia('(hover: none)').matches;
const HOSTKEY = 'cork';
// DW STANDARD: hydrate saved sort + view BEFORE the first grid load.
(function(){
@@ -633,7 +640,15 @@ async function loadGridPage() {
// Card click → full details modal. Sample CTA inside the modal still opens
// the existing Sample-request form, pre-filled. The inline .sample-btn on
// the card stays as a shortcut for power users.
- a.onclick = (e) => { e.preventDefault(); openDetails(p); };
+ a.onclick = (e) => {
+ e.preventDefault();
+ if (TOUCH && !a.classList.contains('revealed')) {
+ document.querySelectorAll('.card.revealed').forEach(c => c.classList.remove('revealed'));
+ a.classList.add('revealed');
+ return;
+ }
+ openDetails(p);
+ };
a.innerHTML = state.view === 'list' ? rowHTML(p) : cardHTML(p);
grid.appendChild(a);
}
@@ -751,9 +766,9 @@ if (sortSel) {
// Theme toggle
const tb = document.getElementById('theme-toggle');
-function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('cork_theme', t); } catch(e){} tb.textContent = t === 'dark' ? '☾' : '☀'; }
+function setTheme(t){ document.documentElement.dataset.theme = t; try { localStorage.setItem('cork_theme', t); } catch(e){} if (tb) tb.textContent = t === 'dark' ? '☾' : '☀'; }
setTheme(document.documentElement.dataset.theme || 'light');
-tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
+if (tb) tb.addEventListener('click', () => setTheme(document.documentElement.dataset.theme === 'dark' ? 'light' : 'dark'));
loadFacets();
loadGridPage();
← 9ccf56f stage2: wire microsite catalog + admin CRUD + grid/list view
·
back to Corkwallcovering
·
fix: null-guard dead #theme-toggle reference (clean console 6547b55 →