diff --git a/static/fronts.js b/static/fronts.js index 63dc928..77db066 100644 --- a/static/fronts.js +++ b/static/fronts.js @@ -120,17 +120,25 @@ const RACK_FRONTS = { 'uacc-brush-1u': { label: 'UniFi Rack Panel Brush 1U (UACC-Rack-Panel-Brush-1U)', units: 1, width: 1100, height: 105, draw() { - // Bristle tufts: thin strands of varying shade, deterministic so the drawing never flickers - const strands = (y0, y1, seed) => Array.from({ length: 300 }, (_, i) => { + // Bristles: each row is shaded root to tip (dark where it leaves the frame, lighter where the + // two rows meet), with a faint strand texture on top. Strong individual strands alias into hard + // stripes at rack size, so the texture stays low-contrast and the shading carries the look. + const strands = (y0, y1, seed) => Array.from({ length: 160 }, (_, i) => { const n = (i * 7919 + seed * 104729) % 97; - return ``; + return ``; }).join(''); const slot = x => ` `; return ` + + + + + + @@ -142,8 +150,10 @@ const RACK_FRONTS = { + + ${strands(31, 53, 1)}${strands(54, 76, 2)} - `; + `; }, }, diff --git a/static/style.css b/static/style.css index 09dcfd0..23dcd59 100644 --- a/static/style.css +++ b/static/style.css @@ -1646,4 +1646,5 @@ body.fp-marks-off .fp-svg .fp-mark { display: none; } .ub-frame-shadow { fill: #8c8e93; } .ub-frame-bevel { fill: #f1f2f3; } .ub-opening { fill: #0d0e10; } -.ub-seam { fill: #050506; } +.ub-seam { fill: #050506; opacity: .8; } +.ub-strand { fill: #000; }