[object Object]

← back to Wallco Ai

fix(/designs): move card-hover OUT of card-link so the Sample <a> is no longer a nested anchor (60 nested anchors per page → 0); same HTML5-parser-split bug class as button-in-anchor, surfaces when user hovers a card with overlay visible

3291dd7c71b52476e277f994098600a92f1070c8 · 2026-05-14 09:35:43 -0700 · SteveStudio2

Files touched

Diff

commit 3291dd7c71b52476e277f994098600a92f1070c8
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date:   Thu May 14 09:35:43 2026 -0700

    fix(/designs): move card-hover OUT of card-link so the Sample <a> is no longer a nested anchor (60 nested anchors per page → 0); same HTML5-parser-split bug class as button-in-anchor, surfaces when user hovers a card with overlay visible
---
 server.js | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/server.js b/server.js
index fe13b0e..4da69e6 100644
--- a/server.js
+++ b/server.js
@@ -3254,20 +3254,17 @@ app.get('/designs', (req, res) => {
       // SEPARATE grid items, producing the alternating-blank-tile bug.
       // Keep the anchor as an inner link wrapping just the visual; controls
       // (fav, NEW, meta) sit alongside as siblings of the link.
+      // card-hover is a SIBLING of card-link (not nested inside) so the inner
+      // Sample <a> doesn't trigger the same Adoption Agency split that took
+      // out the button-in-anchor pattern (2026-05-14). card-hover positions
+      // absolute over the .design-card; clicks on its own anchors navigate
+      // directly without bubbling to card-link.
       return `
     <div class="design-card${roomKey ? ' has-room' : ''}${isNew ? ' is-new' : ''}" data-design-id="${d.id}" data-dig="${digNum}">
       <button type="button" class="fav-btn" data-fav-id="${d.id}" aria-pressed="false" aria-label="Save ${d.title} to favorites" title="Favorite"><span class="fav-icon"></span></button>
       ${newBadge}
       <a href="/design/${d.id}" class="card-link" aria-label="${cardAriaLabel(d)}">
-        <div class="card-img" style="background-image:url('${d.image_url}')" role="img" aria-label="${d.title} pattern thumbnail">${roomOverlay}
-          <div class="card-hover" aria-hidden="true">
-            <span class="card-hover-dig" title="DW Original Number">${digNum}</span>
-            <div class="card-hover-actions">
-              <span class="chov-btn chov-view">View</span>
-              <a class="chov-btn chov-sample" href="/samples?design=${d.id}" onclick="event.stopPropagation()">Sample</a>
-            </div>
-          </div>
-        </div>
+        <div class="card-img" style="background-image:url('${d.image_url}')" role="img" aria-label="${d.title} pattern thumbnail">${roomOverlay}</div>
         <div class="card-meta">
           <span class="card-title">${d.title}</span>
           <span class="card-sku" title="DW catalog SKU">${sku}</span>
@@ -3278,6 +3275,13 @@ app.get('/designs', (req, res) => {
           </span>
         </div>
       </a>
+      <div class="card-hover" aria-hidden="true">
+        <span class="card-hover-dig" title="DW Original Number">${digNum}</span>
+        <div class="card-hover-actions">
+          <a class="chov-btn chov-view" href="/design/${d.id}">View</a>
+          <a class="chov-btn chov-sample" href="/samples?design=${d.id}">Sample</a>
+        </div>
+      </div>
     </div>`;
     }
     // Admin review-mode card: sliders, K/R, chips, why-chip

← 4622641 chat: surface psql stderr + redact replicate token + throw o  ·  back to Wallco Ai  ·  feat(/designs): keyboard shortcut '/' focuses search (GH/X/S 7bbdf26 →