Skip to content

Commit 52c15f4

Browse files
TMHSDigitalclaude
andcommitted
feat(showcase): add soccer-goal (sports)
The second piece in the sports category: a freestanding 5 x 2 m youth (7-a-side) goal on a turf patch. Posts and crossbar are one white-painted aluminium extrusion: an oval 100 x 120 mm section with a net channel down its back, mitred at the top corners with a weld bead round each mitre. A cast bracket behind each mitre carries the socket for a sloped rear support. Cast foot connectors (plate, collar with clamp bolt, bar socket) sit under the posts, and cast three-socket hubs close the rear corners of a dark steel ground frame. Four galvanised U-staples and four spikes pin the frame. The net is a woven 120 mm diamond mesh in three panels, its two strand families passing over and under at every knot. The back panel sags as a catenary both ways, and the side panels belly and droop. A red head rope round every panel edge runs through 53 nylon clips (a saddle plus a standing loop). The turf patch has a rolled edge, soil walls, mown bands and a painted goal line as wide as the posts are deep. Ten materials: paint, cord, rope, steel, cast aluminium, nylon, galvanised, turf, line paint, soil. Blender: E:\Blender-Developer-Tools\.scratch\5.2\blender-5.2.1-windows-x64\blender.exe reports "Blender 5.2.1 LTS". 4.5 LTS and 5.1 are left to CI (not run locally). Recomputed budgets (5.2.1): - 34804 tris (band 34000-35600); LOD1 0.5000, LOD2 0.2200 - 10 materials: paint 2514, cord 9028, rope 160, steel 340, cast 1464, nylon 3604, galv 1000, turf 196, line paint 16, soil 102 faces - UVs in 0..1, overlap 0; AABB 6.2200 x 2.6400 x 2.1527 m, zmin 0 - collider 168 tris (ceiling 190); bake FINISHED; glTF 2525996 B - hygiene all 0, including coplanar cross-shell pairs. The first runs measured 205, then 782: the support's end cap first lay in the plane of its rope's end cap (F is the rope corner moved square off the rope), then, moved 5 mm, in the plane of the bracket socket's start cap. The tube now starts 9 mm up its axis. The two bracket bolts were also sharing a cap plane and are now staggered 1.5 mm in depth. - ground bars: 3, each bedded 0.0025 m into the turf (band 0.0015-0.0040) - supports: both ends >= 0.040 m inside a cast socket (0.065 bracket, 0.080 hub) - clips: 53 loops and 53 saddles, rope axis offset 0.000 m (ceiling 0.0012) - mouth: 5.00019 x 2.00010 m (+-0.003), posts plumb 0.000 deg, level 0 - back-panel sag 0.14752 m below its chord (band 0.110-0.180) - two default runs print identical measurements Falsifiers (flag -> measured -> exit): - --skip-decimate -> LOD1 ratio 1.0000 -> 9 - --stray-vert -> loose_v 1 -> 15 - --lift-z -> zmin 0.05000 -> 16 - --float-bar -> back bar bed -0.0055 m (sides 0.0025) -> 16 - --short-support -> left support insertion 0.000 m at its hub -> 17 - --unclip-net -> crossbar rope 0.0200 m off its loops -> 18 - --wide-mouth -> clear width 5.03019 m -> 19 - --taut-net -> sag 0.00772 m -> 20 The envelope was unchanged under every falsifier (the turf sets X and Y, the crossbar's beads the top). Every other budget stayed green in each run. Tris stay at 34804 except under --wide-mouth (34816, one more strand). Render: render_hero.py wrote the hero and preview. Framing fill x 0.816, y 0.822, margins 0.072-0.113. Asset-quality floors pass (edge90 0.358); a violation is remapped to exit 21. Asset sheet (docs/gallery/asset-sheets/soccer-goal.webp): the goal is not the least-designed object in the lineup. It reads at once as a goal: the woven net, the red head rope, sloped supports, turf and goal line. The hydrant is the plainer model. Weak point: a 6.2 m object is small in its tile, so the cast connectors, clips and staples can't be seen at panel size. Contact sheet: luma 0.270 against calibration 0.237-0.243. That is slightly bright: the white frame and net carry it, and the raised view shows a lot of floor. Stage 0.229 against 0.192-0.252 (in band). Wedge warmth +0.130 against -0.144/+0.105/+0.092 (warm pool on the floor and wall). Saturation 0.275 against 0.153-0.237 (the turf green). Thumbnail legibility is good. The first draft measured luma 0.349 and stage 0.296; it was relit by lowering the key, fill and rim and moving the wedge down the wall. Also updated: README, CLAUDE.md and ROADMAP counts and entries, the asset_sheet.py SELECT row, catalog.json, plugin.json and the regenerated gallery. build_gallery, check_site_links (96 pages, 0 failures), check_falsifier_targets, check_exit_code_readme, check_engine_id and check_gallery_images all pass. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent 0af9783 commit 52c15f4

55 files changed

Lines changed: 6196 additions & 90 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.cursor-plugin/plugin.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@
178178
"showcase/basketball-hoop",
179179
"showcase/pine-tree",
180180
"showcase/desk-lamp",
181-
"showcase/quad-drone"
181+
"showcase/quad-drone",
182+
"showcase/soccer-goal"
182183
]
183184
}

‎CLAUDE.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ rules/<rule-name>.mdc - Anti-pattern rules, 9 total
2222
templates/<template-name>/ - Starter projects, 3 total
2323
snippets/<snippet-name>.py - Standalone code patterns, 27 total
2424
examples/<name>/ - Runnable smoke-gated examples, 60 total (+ gallery.json)
25-
showcase/<name>/ - Budget-conformance props, 40 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
25+
showcase/<name>/ - Budget-conformance props, 41 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
2626
scripts/build_gallery.py - Regenerates docs/gallery/ from examples/gallery.json + showcase/gallery.json
2727
scripts/site/ - Vendored landing-page build (Jinja2); tokens.css is the shared palette
2828
tests/check_site_links.py - Internal link/anchor/alt gate over the built site (docs/)

‎README.md‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
</p>
1919

2020
<p align="center">
21-
<strong>16 skills</strong> &nbsp;&bull;&nbsp; <strong>9 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>27 snippets</strong> &nbsp;&bull;&nbsp; <strong>60 examples</strong> &nbsp;&bull;&nbsp; <strong>40 showcase pieces</strong>
21+
<strong>16 skills</strong> &nbsp;&bull;&nbsp; <strong>9 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>27 snippets</strong> &nbsp;&bull;&nbsp; <strong>60 examples</strong> &nbsp;&bull;&nbsp; <strong>41 showcase pieces</strong>
2222
</p>
2323

2424
<p align="center">
@@ -37,7 +37,7 @@
3737

3838
## Overview
3939

40-
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 60 examples, and 40 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
40+
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 60 examples, and 41 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
4141

4242
The content is consumed by AI coding agents reading these files directly from a checkout — **there is no MCP server in this repository, and none is required**. Cursor applies `rules/*.mdc` automatically wherever their scope globs match and takes skills by name in chat; Claude Code reads `skills/` and `rules/` from the project workspace, or from this repo kept as a referenced checkout. Any agent that can read files in a workspace can use it the same way. There is no build step for the content — edit the Markdown and Python files directly.
4343

@@ -106,7 +106,7 @@ per-script exit-code model, are in
106106
Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](showcase/README.md).
107107

108108
<details>
109-
<summary><strong>40 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>41 showcase pieces</strong> — click to expand the preview grid</summary>
110110

111111
<p align="center">
112112
<a href="showcase/shipping-crate/"><img src="showcase/shipping-crate/preview.webp" width="24%" alt="Shipping crate: a wooden slat crate stencilled PORT ROYAL and NO 17, with iron corner brackets and an end handle, on a dark studio floor, warm wedge on the back wall" /></a>
@@ -149,6 +149,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
149149
<a href="showcase/pine-tree/"><img src="showcase/pine-tree/preview.webp" width="24%" alt="Pine tree: a 7 m Scots pine with a red-barked trunk on a flared, rooted base and ten tiers of drooping branches carrying spiky needled shoots, on a dark studio floor" /></a>
150150
<a href="showcase/desk-lamp/"><img src="showcase/desk-lamp/preview.webp" width="24%" alt="Desk lamp: a red balanced-arm lamp with a stepped base, parallel-rod arms, chrome springs and knurled knobs, and a domed shade glowing around its bulb, on a dark studio floor" /></a>
151151
<a href="showcase/quad-drone/"><img src="showcase/quad-drone/preview.webp" width="24%" alt="Quad drone: a white-and-graphite camera quadcopter on four carbon arms with red lock rings, twin-blade props, rubber-footed skids and a three-axis gimbal camera, on a dark studio floor" /></a>
152+
<a href="showcase/soccer-goal/"><img src="showcase/soccer-goal/preview.webp" width="24%" alt="Soccer goal: a white 5 by 2 m youth goal with sloped rear supports and a sagging diamond-mesh net edged in red rope, on a turf patch with a painted goal line, on a dark studio floor" /></a>
152153
</p>
153154

154155
[`shipping-crate`](showcase/shipping-crate/) — procedural crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets. Falsifier `--skip-decimate` exits 9.
@@ -227,6 +228,8 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
227228

228229
[`quad-drone`](showcase/quad-drone/) — the first `vehicles` piece: procedural camera quadcopter (two-tone moulded shell with panel lines, grilles, visor and battery pack, four folding arms hinged on pinned clevises, slotted brushless motors carrying twisted, swept two-blade props, rubber-footed skids, a three-axis gimbal camera), whose motor axes on an exact X, the gap between neighbouring prop discs, every foot on the ground and the mass centre over the landing footprint are recomputed from the mesh, through the same pipeline. Falsifiers `--float-foot` exits 16, `--unlock-arm` 17, `--long-blades` 18, `--narrow-skids` 19, `--drop-lens` 20.
229230

231+
[`soccer-goal`](showcase/soccer-goal/) — the second `sports` piece: procedural freestanding 5 × 2 m youth soccer goal (posts and crossbar in one oval aluminium extrusion with a net channel, mitred and welded at the corners, cast corner brackets, foot connectors and rear hubs, sloped supports and a steel ground frame pinned by staples and spikes, a sagging diamond-mesh net with a red head rope through 53 nylon clips, a turf patch with a painted goal line), whose ground bars bedded in the turf, supports seated in their sockets, head rope threaded through every clip, clear mouth size with plumb posts, and catenary sag of the back panel are recomputed from the mesh, through the same pipeline. Falsifiers `--float-bar` exits 16, `--short-support` 17, `--unclip-net` 18, `--wide-mouth` 19, `--taut-net` 20.
232+
230233
</details>
231234

232235
## Examples

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
156156
- Rowboat with oars in oarlocks as a game-prop showcase piece — oar shafts passing through the oarlock horns with clearance inside a band, hull resting on its keel line on a flat deck/floor
157157
- Weathervane as a game-prop showcase piece — arrow and cardinal arms on a spindle: the arrow's pivot bore coaxial with the spindle and the arrow statically balanced (centroid on the pivot axis within a band)
158158
- Showcase pieces above this line are category `village`. Candidates for the other categories (`showcase/README.md` § Categories):
159-
- **Sports:** ~~basketball hoop (pole, backboard, rim, hung net)~~ **SHIPPED** as `showcase/basketball-hoop/` — gooseneck pole on a bolted anchor plate, braced framed board with painted square, regulation rim, twelve-loop net hung on the rim hooks; `--drop-net` exits 18 on the loops threaded through the hooks while the envelope holds, `--tilt-rim` 19 on rim height/size/level, `--skip-decimate` 9 on the LOD1 ratio band; soccer goal (tube frame, netting), tennis net on posts, weight rack with plates and dumbbells; alternates bowling pins and ball, skateboard
159+
- **Sports:** ~~basketball hoop (pole, backboard, rim, hung net)~~ **SHIPPED** as `showcase/basketball-hoop/` — gooseneck pole on a bolted anchor plate, braced framed board with painted square, regulation rim, twelve-loop net hung on the rim hooks; `--drop-net` exits 18 on the loops threaded through the hooks while the envelope holds, `--tilt-rim` 19 on rim height/size/level, `--skip-decimate` 9 on the LOD1 ratio band; ~~soccer goal (tube frame, netting)~~ **SHIPPED** as `showcase/soccer-goal/` — 5 × 2 m youth goal, oval extrusion mitred and welded at the corners, cast brackets, foot connectors and hubs, sloped supports and a staked steel ground frame, sagging diamond-mesh net on a red head rope through 53 clips, turf patch with a goal line; `--float-bar` exits 16 on every ground bar bedded in the turf, `--short-support` 17 on the supports seated in their sockets, `--unclip-net` 18 on the head rope through every clip, `--wide-mouth` 19 on the clear mouth size, `--taut-net` 20 on the back panel's sag, while the envelope holds; tennis net on posts, weight rack with plates and dumbbells; alternates bowling pins and ball, skateboard
160160
- **Nature:** ~~pine tree (trunk, tiered branch whorls)~~ **SHIPPED** as `showcase/pine-tree/` — buttressed trunk with surface roots, ten seeded whorls of limbs seated in the bark, faceted needled shoots, dead stubs and cones; `--float-branches` exits 17 on the branch seat, `--lean-crown` 19 on trunk plumb, `--bunch-whorls` 20 on whorl spacing, while the envelope holds; boulder cluster, fallen log with fungus, tree stump with mushrooms; alternates flowering shrub, cattail reeds
161161
- **Household:** ~~articulated desk lamp~~ **SHIPPED** as `showcase/desk-lamp/` — stepped cast base, parallelogram arm sections pinned through knuckle bosses, three springs hung on cross bars, domed shade with reflector, lamp, flex and plugged cable; `--offset-pin` exits 17 on the pins coaxial with their eyes, `--unhook-spring` 18 on the spring ends seated on their bars, `--hollow-base` 19 on the mass centre over the base footprint, while the envelope holds; office chair (five-star base, casters), kitchen stool, mini fridge; alternates floor fan, laundry basket
162162
- **Vehicles:** ~~quad drone~~ **SHIPPED** as `showcase/quad-drone/` — two-tone moulded shell with battery, GPS, grilles and visor, four folding arms hinged on pinned clevises, slotted motors with twisted two-blade props, rubber-footed skids, three-axis gimbal camera; `--float-foot` exits 16 on every foot grounded, `--unlock-arm` 17 on the motor axes on an exact X, `--long-blades` 18 on the prop-disc clearance, `--narrow-skids` 19 on the mass centre inside the landing footprint, `--drop-lens` 20 on one connected assembly, while the envelope holds; traffic cone and barrier set, hover bike, sci-fi cargo loader; alternates sci-fi supply crate

‎docs/gallery/anvil/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ <h1>anvil</h1>
358358
<p>A procedural blacksmith anvil on a timber stump through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
359359
</header>
360360
<main id="main">
361-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 40 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
361+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 41 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
362362
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A forged-steel anvil with a hammer-polished face and a flared, squared waist on a hooped timber stump, a cross-peen hammer on the floor and forge light on its flank.">
363363
<img src="../assets/anvil-hero.webp" alt="A forged-steel anvil with a hammer-polished face and a flared, squared waist on a hooped timber stump, a cross-peen hammer on the floor and forge light on its flank." width="1280" height="720" fetchpriority="high" />
364364
</button>
@@ -3716,7 +3716,7 @@ <h3><a href="../wooden-barrel/">wooden-barrel</a></h3>
37163716
</article>
37173717
</div>
37183718
</section>
3719-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 40 showcase pieces</span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
3719+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../wheelbarrow/" aria-label="Previous showcase piece: wheelbarrow"><span aria-hidden="true">&larr;</span> wheelbarrow</a><span class="pager-pos hud">14 of 41 showcase pieces</span><a rel="next" href="../water-trough/" aria-label="Next showcase piece: water-trough">water-trough <span aria-hidden="true">&rarr;</span></a></nav>
37203720
</main>
37213721
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
37223722
<button class="lightbox-close" type="button" autofocus>Close</button>

‎docs/gallery/apothecary-shelf/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ <h1>apothecary-shelf</h1>
358358
<p>A procedural apothecary shelf — housed shelves, gallery rails, a drawer bank and an arched crest, stocked with fifteen lathed bottles, flasks and glazed jars, each corked or lidded and labelled — carried through UVs, bake, LOD, convex collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
359359
</header>
360360
<main id="main">
361-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 40 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
361+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 41 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
362362
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A stained wooden shelf with an arched crest, gallery rails and three brass-knobbed drawers, stocked with labelled glass bottles and flasks and cream and blue glazed jars.">
363363
<img src="../assets/apothecary-shelf-hero.webp" alt="A stained wooden shelf with an arched crest, gallery rails and three brass-knobbed drawers, stocked with labelled glass bottles and flasks and cream and blue glazed jars." width="1280" height="720" fetchpriority="high" />
364364
</button>
@@ -3733,7 +3733,7 @@ <h3><a href="../wooden-barrel/">wooden-barrel</a></h3>
37333733
</article>
37343734
</div>
37353735
</section>
3736-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 40 showcase pieces</span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
3736+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../brazier/" aria-label="Previous showcase piece: brazier"><span aria-hidden="true">&larr;</span> brazier</a><span class="pager-pos hud">32 of 41 showcase pieces</span><a rel="next" href="../wooden-yoke/" aria-label="Next showcase piece: wooden-yoke">wooden-yoke <span aria-hidden="true">&rarr;</span></a></nav>
37373737
</main>
37383738
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
37393739
<button class="lightbox-close" type="button" autofocus>Close</button>
64.2 KB
Loading
73.1 KB
Loading

‎docs/gallery/basketball-hoop/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ <h1>basketball-hoop</h1>
358358
<p>A procedural in-ground basketball goal — one-sweep gooseneck pole, braced framed backboard, regulation rim on a bolted flange and a twelve-loop tapered net hung on the rim hooks — through UVs, bake, LOD, convex collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
359359
</header>
360360
<main id="main">
361-
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../book-trolley/" aria-label="Previous showcase piece: book-trolley"><span aria-hidden="true">&larr;</span> book-trolley</a><span class="pager-pos hud">37 of 40 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../pine-tree/" aria-label="Next showcase piece: pine-tree">pine-tree <span aria-hidden="true">&rarr;</span></a></nav>
361+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../book-trolley/" aria-label="Previous showcase piece: book-trolley"><span aria-hidden="true">&larr;</span> book-trolley</a><span class="pager-pos hud">37 of 41 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../pine-tree/" aria-label="Next showcase piece: pine-tree">pine-tree <span aria-hidden="true">&rarr;</span></a></nav>
362362
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: An outdoor basketball goal: padded steel gooseneck pole on a bolted plate, braced framed backboard with a red shooter&#x27;s square, an orange rim and a white corded net.">
363363
<img src="../assets/basketball-hoop-hero.webp" alt="An outdoor basketball goal: padded steel gooseneck pole on a bolted plate, braced framed backboard with a red shooter&#x27;s square, an orange rim and a white corded net." width="1280" height="720" fetchpriority="high" />
364364
</button>
@@ -3403,7 +3403,7 @@ <h3><a href="../wooden-barrel/">wooden-barrel</a></h3>
34033403
</article>
34043404
</div>
34053405
</section>
3406-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../book-trolley/" aria-label="Previous showcase piece: book-trolley"><span aria-hidden="true">&larr;</span> book-trolley</a><span class="pager-pos hud">37 of 40 showcase pieces</span><a rel="next" href="../pine-tree/" aria-label="Next showcase piece: pine-tree">pine-tree <span aria-hidden="true">&rarr;</span></a></nav>
3406+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../book-trolley/" aria-label="Previous showcase piece: book-trolley"><span aria-hidden="true">&larr;</span> book-trolley</a><span class="pager-pos hud">37 of 41 showcase pieces</span><a rel="next" href="../pine-tree/" aria-label="Next showcase piece: pine-tree">pine-tree <span aria-hidden="true">&rarr;</span></a></nav>
34073407
</main>
34083408
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
34093409
<button class="lightbox-close" type="button" autofocus>Close</button>

0 commit comments

Comments
 (0)