[object Object]

← back to Neon Baguette Battle

Polish: distinct per-stat select bars + stronger fighter/floor separation

beedee1792263ec3bf4b036ddbabb899715cd90b · 2026-08-31 14:23:04 -0700 · Steve Abrams

- Select stat bars: color-coded SPD=cyan / PWR=pink / DEF=gold, taller, with 5-segment notches so each fighter's profile reads at a glance (fixes 'bars too uniform')
- Fighter/floor: two-layer ground shadow (wide soft halo + tight dark core) + cooler/darker cobblestones so warm-toned fighters (Petit Eclair/Le Costaud) stop blending into the street

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

Files touched

Diff

commit beedee1792263ec3bf4b036ddbabb899715cd90b
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Mon Aug 31 14:23:04 2026 -0700

    Polish: distinct per-stat select bars + stronger fighter/floor separation
    
    - Select stat bars: color-coded SPD=cyan / PWR=pink / DEF=gold, taller, with 5-segment notches so each fighter's profile reads at a glance (fixes 'bars too uniform')
    - Fighter/floor: two-layer ground shadow (wide soft halo + tight dark core) + cooler/darker cobblestones so warm-toned fighters (Petit Eclair/Le Costaud) stop blending into the street
    
    Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---
 index.html | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/index.html b/index.html
index 27815ee..c7b1a52 100644
--- a/index.html
+++ b/index.html
@@ -81,8 +81,13 @@
   .card .stat{ display:flex; align-items:center; gap:6px; font-size:11px; color:#c3bdb0; margin:3px 4px; letter-spacing:.06em; }
   .card .stat:first-of-type{ margin-top:7px; padding-top:7px; border-top:1px solid rgba(255,255,255,.09); }
   .card .stat b{ width:30px; display:inline-block; }
-  .card .bar{ flex:1; height:6px; background:rgba(255,255,255,.12); border-radius:3px; overflow:hidden; }
-  .card .bar i{ display:block; height:100%; background:linear-gradient(90deg,#c9a961,#ff3d9a); }
+  .card .bar{ position:relative; flex:1; height:7px; background:rgba(255,255,255,.10); border-radius:3px; overflow:hidden; }
+  .card .bar i{ display:block; height:100%; }
+  .card .bar.spd i{ background:linear-gradient(90deg,#17a2bd,#22e0ff); }
+  .card .bar.pwr i{ background:linear-gradient(90deg,#c02d78,#ff3d9a); }
+  .card .bar.def i{ background:linear-gradient(90deg,#9a7d3a,#e7c987); }
+  .card .bar::after{ content:''; position:absolute; inset:0; pointer-events:none;
+                     background:repeating-linear-gradient(90deg, transparent 0 19.4%, rgba(0,0,0,.5) 19.4% 20%); }
   .card.p1cursor{ border:3px solid #ff6b6b; box-shadow:0 0 18px rgba(255,61,90,.6); transform:scale(1.05); }
   .card.p2cursor{ border:3px solid #6bb8ff; box-shadow:0 0 18px rgba(34,120,255,.6); transform:scale(1.05); }
   .card.p1cursor.p2cursor{ border-color:#c9a961; box-shadow:0 0 20px rgba(201,169,97,.65); }
@@ -578,11 +583,11 @@
       g.save();
       g.translate(this.x, this.y);
 
-      // shadow
+      // ground shadow — wide soft halo + tight dark core, so warm fighters separate from the cobbles
       g.save();
-      g.scale(1, .35);
-      g.beginPath(); g.arc(0, 6/.35, this.w*0.5+11, 0, Math.PI*2);
-      g.fillStyle = 'rgba(0,0,0,.5)'; g.fill();
+      g.scale(1, .32);
+      g.beginPath(); g.arc(0, 6/.32, this.w*0.5+13, 0, Math.PI*2); g.fillStyle='rgba(0,0,0,.32)'; g.fill();
+      g.beginPath(); g.arc(0, 6/.32, this.w*0.42,    0, Math.PI*2); g.fillStyle='rgba(0,0,0,.6)';  g.fill();
       g.restore();
 
       g.scale(f, 1);   // face direction
@@ -1021,7 +1026,7 @@
       for (let x=-sw; x<W+sw; x+=sw){
         const cx=x+off;
         const h=(Math.sin(cx*0.21 + j*1.7)*0.5+0.5);            // stable per-stone shade
-        const r=Math.round(40+h*20), gg=Math.round(30+h*14), bl=Math.round(50+h*22);
+        const r=Math.round(30+h*14), gg=Math.round(26+h*12), bl=Math.round(46+h*20);  // cooler + darker so warm fighters pop
         roundRectPath(g, cx+2, y0+pad, sw-4, sh, rr);
         g.fillStyle='rgb('+r+','+gg+','+bl+')'; g.fill();
         g.lineWidth=1.4; g.strokeStyle='rgba(255,61,154,'+(0.05+t0*0.13).toFixed(3)+')'; g.stroke();  // neon rim
@@ -1164,7 +1169,7 @@
       const nm = document.createElement('div'); nm.className = 'cname'; nm.textContent = c.name; card.appendChild(nm);
       [['SPD',c.spd],['PWR',c.pow],['DEF',c.def]].forEach(([lbl,v]) => {
         const s = document.createElement('div'); s.className = 'stat';
-        s.innerHTML = '<b>'+lbl+'</b><span class="bar"><i style="width:'+(v/5*100)+'%"></i></span>';
+        s.innerHTML = '<b>'+lbl+'</b><span class="bar '+lbl.toLowerCase()+'"><i style="width:'+(v/5*100)+'%"></i></span>';
         card.appendChild(s);
       });
       const r1 = document.createElement('div'); r1.className='rdy r1'; r1.textContent='P1'; r1.style.display='none'; card.appendChild(r1);

← 2398d24 Fix select-card layout: scope global canvas rule to #game so  ·  back to Neon Baguette Battle  ·  Add mobile touch controls (drive Player 1) 6e85f4c →