Rack: brush panel opening runs nearly the full width between the ears
Lint / Python (flake8) (push) Successful in 58s
Lint / JS (eslint) (push) Successful in 7s
Lint / Notify on failure (push) Skipped
Lint / Deploy (push) Skipped
Security / Python Security (bandit) (push) Successful in 1m6s
Test / Python Tests (pytest) (push) Successful in 1m7s
Lint / JS (eslint) (pull_request) Successful in 9s
Lint / Python (flake8) (pull_request) Successful in 1m51s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / Python Security (bandit) (pull_request) Successful in 1m45s
Test / Python Tests (pytest) (pull_request) Successful in 1m1s
Lint / Python (flake8) (push) Successful in 58s
Lint / JS (eslint) (push) Successful in 7s
Lint / Notify on failure (push) Skipped
Lint / Deploy (push) Skipped
Security / Python Security (bandit) (push) Successful in 1m6s
Test / Python Tests (pytest) (push) Successful in 1m7s
Lint / JS (eslint) (pull_request) Successful in 9s
Lint / Python (flake8) (pull_request) Successful in 1m51s
Lint / Notify on failure (pull_request) Skipped
Lint / Deploy (pull_request) Skipped
Security / Python Security (bandit) (pull_request) Successful in 1m45s
Test / Python Tests (pytest) (pull_request) Successful in 1m1s
As in Ubiquiti's product image and the rack photo. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+10
-9
@@ -123,9 +123,10 @@ const RACK_FRONTS = {
|
||||
// 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) => {
|
||||
// The opening runs almost the full width between the ear plates, as in Ubiquiti's image
|
||||
const strands = (y0, y1, seed) => Array.from({ length: 172 }, (_, i) => {
|
||||
const n = (i * 7919 + seed * 104729) % 97;
|
||||
return `<rect x="${94 + i * 5.7 + (n % 5) * 0.4}" y="${y0 + (n % 4)}" width="${1.4 + (n % 3) * 0.5}"
|
||||
return `<rect x="${60 + i * 5.7 + (n % 5) * 0.4}" y="${y0 + (n % 4)}" width="${1.4 + (n % 3) * 0.5}"
|
||||
height="${y1 - y0 - (n % 4)}" class="ub-strand" style="opacity:${0.18 + (n % 5) * 0.05}"/>`;
|
||||
}).join('');
|
||||
const slot = x => `<rect class="ua-ear-slot" x="${x - 7}" y="22" width="14" height="10" rx="5"/>
|
||||
@@ -146,14 +147,14 @@ const RACK_FRONTS = {
|
||||
<rect class="ua-ear-seam" x="31" y="1" width="1.5" height="103"/>
|
||||
<rect class="ua-ear-seam" x="1067.5" y="1" width="1.5" height="103"/>
|
||||
${slot(16)}${slot(1084)}
|
||||
<rect class="ub-frame" x="80" y="20" width="940" height="66" rx="7"/>
|
||||
<rect class="ub-frame-shadow" x="84" y="24" width="932" height="7" rx="3"/>
|
||||
<rect class="ub-frame-bevel" x="84" y="77" width="932" height="5" rx="2.5"/>
|
||||
<rect class="ub-opening" x="92" y="30" width="916" height="47" rx="2"/>
|
||||
<rect x="92" y="30" width="916" height="23.5" fill="url(#ub-row-top)"/>
|
||||
<rect x="92" y="53.5" width="916" height="23.5" fill="url(#ub-row-bottom)"/>
|
||||
<rect class="ub-frame" x="44" y="20" width="1012" height="66" rx="7"/>
|
||||
<rect class="ub-frame-shadow" x="48" y="24" width="1004" height="7" rx="3"/>
|
||||
<rect class="ub-frame-bevel" x="48" y="77" width="1004" height="5" rx="2.5"/>
|
||||
<rect class="ub-opening" x="56" y="30" width="988" height="47" rx="2"/>
|
||||
<rect x="56" y="30" width="988" height="23.5" fill="url(#ub-row-top)"/>
|
||||
<rect x="56" y="53.5" width="988" height="23.5" fill="url(#ub-row-bottom)"/>
|
||||
${strands(31, 53, 1)}${strands(54, 76, 2)}
|
||||
<rect class="ub-seam" x="92" y="53" width="916" height="1"/>`;
|
||||
<rect class="ub-seam" x="56" y="53" width="988" height="1"/>`;
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user