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; }