Skip to content

Commit 2c14744

Browse files
TMHSDigitalclaude
andcommitted
feat(showcase): add quad-drone (vehicles)
This is the first piece in the vehicles category: a game-ready camera quadcopter on an X frame. A two-tone body shell (light canopy, dark belly) is lofted from superellipse sections. It has a parting-line groove along both flanks, two transverse panel lines, nose and flank grilles, and a nose visor with two stereo lenses. A battery pack with grip ribs, red release latches, a power button and four charge lights sits in the crown behind a GPS puck. Four folding arms each hinge on a vertical pin through a clevis (a block and two lugs) and a tongue, with a knurled red lock ring. Each arm ends in a clamp cuff with screws, a navigation light (red fore, green aft) and a mount plate. The brushless motors have slotted bells, anodised bands and screws. The two-blade 0.33 m props are lofted from cambered airfoils, twisted to a 115 mm pitch, swept back and handed to their spin, with colour-coded spinners. Rubber-footed skids stand on four raked struts. A three-axis gimbal (yaw, roll, pitch) hangs on a damper stack and carries a camera with a ribbed lens barrel and glass. Two antennas point down from the belly. Eight materials: shell, carbon, gunmetal, glass, light, rubber, graphite, anodised. 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): - 41048 tris (band 40000-42000); LOD1 0.5000, LOD2 0.2200 - 8 materials: shell 1720, carbon 2304, gunmetal 6472, glass 524, light 760, rubber 1296, graphite 8464, anodised 2184 faces - UVs in 0..1, overlap 0; AABB 0.6924 x 0.5693 x 0.2433 m, zmin 0 - collider 499 tris (ceiling 540); bake FINISHED; glTF 3128864 B - hygiene all 0, including coplanar cross-shell pairs. The first run measured 1552: identical repeated screws, charge lights, lenses and damper balls sharing caps and side facets, the two clevis lugs' chamfered corners, and a cuff cap in the plane of a band. Repeats are now turned a fraction of a facet apart and staggered 0.15-0.2 mm, and the lower lug is set back 1.2 mm. - feet: 4, each zmin 0 - motor layout: angles 45/135/225/315 (error 0), radii and diagonals 0.52000 m equal, axes vertical, hubs level and on axis, centroid 0 - prop clearance: discs 0.16558 m, neighbour gaps 0.03653 m (band 0.028-0.050), 2 blades per prop, all seated in their hubs - stance: 3.46 kg, mass centre 0.1146 m inside the feet's sole footprint (floor 0.090); wheelbase 0.52000; shell 0.2546 x 0.1360 m - 1 connected component (171 shells) - two default runs print identical measurements (and identical glTF size) Falsifiers (flag -> measured -> exit): - --skip-decimate -> LOD1 ratio 1.0000 -> 9 - --stray-vert -> loose_v 1 -> 15 - --lift-z -> zmin 0.05000 -> 16 - --float-foot -> one foot zmin 0.00300, others 0 -> 16 - --unlock-arm -> worst gap 1.491 deg off 90, centroid 1.69 mm -> 17 - --long-blades -> disc 0.1795 m, gaps 0.0226 m -> 18 - --narrow-skids -> margin 0.0776 m -> 19 - --drop-lens -> 2 components -> 20 The envelope was unchanged under every falsifier (identical AABB), and every one keeps 41048 tris. --unlock-arm leaves the prop gaps in band (0.0317/0.0412). Two first drafts hit the wrong budget and were fixed in the model, not the bands. Narrowing the skids to +-0.044 m ran the front struts through the gimbal's roll arm, so it exited 15 on 69 coplanar pairs; it now stops at +-0.075 m. --float-foot also collapsed the footprint to a triangle (margin 0.0039), so the stance now reads each foot's sole, whether or not it is grounded. Render: render_hero.py wrote the hero and preview. Framing fill x 0.806, y 0.717, margins 0.078-0.167. Asset-quality floors pass (edge90 0.054); a violation is remapped to exit 21. Asset sheet (docs/gallery/asset-sheets/quad-drone.webp): it is not the least-designed object in the lineup. It reads at once as a camera drone, and beside the reference survey drone it carries more modelled structure: a three-axis gimbal, hinged arms with lock rings, slotted motors, twisted props, skids. The hydrant is the plainer model. Weak point: the wide X frame makes the drone small in its tile, so the screws, slots and grilles are below panel resolution. Contact sheet: luma 0.229 against calibration 0.237-0.243 (slightly dark); stage 0.262 against 0.192-0.252 (slightly bright: the elevated view shows more floor, and the wall seam is kept above the far prop tips); wedge warmth -0.072 against -0.144/+0.092/+0.105 (cool, the pool is a band across the top of the frame); saturation 0.199 against 0.153-0.237. Thumbnail legibility is good. 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 (95 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 4175bcf commit 2c14744

54 files changed

Lines changed: 6702 additions & 93 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
@@ -177,6 +177,7 @@
177177
"showcase/book-trolley",
178178
"showcase/basketball-hoop",
179179
"showcase/pine-tree",
180-
"showcase/desk-lamp"
180+
"showcase/desk-lamp",
181+
"showcase/quad-drone"
181182
]
182183
}

‎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, 39 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
25+
showcase/<name>/ - Budget-conformance props, 40 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>39 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>40 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 39 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 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.
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>39 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>40 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>
@@ -148,6 +148,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
148148
<a href="showcase/basketball-hoop/"><img src="showcase/basketball-hoop/preview.webp" width="24%" alt="Basketball hoop: an outdoor in-ground goal with a padded steel gooseneck pole, a framed backboard with a red shooter's square, an orange rim and a white corded net, on a dark studio floor" /></a>
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>
151+
<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>
151152
</p>
152153

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

225226
[`desk-lamp`](showcase/desk-lamp/) — the first `household` piece: procedural balanced-arm desk lamp (stepped cast base, two parallelogram arm sections pinned through knuckle bosses, three tension springs hung on cross bars, domed shade with reflector and lamp, draped flex and plugged cable), whose every joint pin coaxial through the eyes it joins, every spring end seated on its bar, and mass centre over the base footprint are recomputed from the mesh, through the same pipeline. Falsifiers `--offset-pin` exits 17, `--unhook-spring` 18, `--hollow-base` 19, `--unscrew-bulb` 20.
226227

228+
[`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.
229+
227230
</details>
228231

229232
## Examples

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ Not committed; target list for the next content version. (v0.3.0 shipped the smo
159159
- **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
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
162-
- **Vehicles:** traffic cone and barrier set, quad drone, hover bike, sci-fi cargo loader; alternates sci-fi supply crate
162+
- **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
163163
- `persistent` app-handler witness — handlers registered without `@bpy.app.handlers.persistent` are dropped by `wm.read_homefile`/file load while persistent ones survive; assert the registered-handler set before and after a reload (silent loss AI code hits)
164164
- Link vs append witness — `bpy.data.libraries.load(link=True)` yields a linked, non-editable datablock (`library` set, `is_editable` False) while append yields a local copy; write a temp .blend with `bpy.data.libraries.write`, then assert both paths
165165
- Orphan purge witness — `bpy.data.orphans_purge(do_recursive=...)` removes exactly the zero-user datablocks computed independently beforehand, and `bpy.data.batch_remove` removes a given set in one call (counts closed-form)

‎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 39 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 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>
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 39 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 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>
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 39 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 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>
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 39 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 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>
37373737
</main>
37383738
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
37393739
<button class="lightbox-close" type="button" autofocus>Close</button>
54.5 KB
Loading
25.6 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 39 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 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>
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 39 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 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>
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)