Skip to content

Commit 35ebfdc

Browse files
TMHSDigitalclaude
andcommitted
feat(showcase): add broadleaf-oak (nature)
The eighth piece in the nature category: a mature, open-grown English oak (Quercus robur), 8.0 m tall with a domed crown 11.3 x 9.3 m, on a grassy soil disc that rises 85 mm per metre toward the back. The trunk is one lathe from a six-lobed buttress flare to a dome over a low fork at 2.3 m: seven broad flutes and twelve ridges, 0.73 m across at breast height. Its two foot rings follow the soil read back by a ray under each vertex, the lowest 45 mm under it. Six surface roots (flattened tubes) lie in the soil and dive into it. Five crooked scaffold limbs start inside the trunk and divide three more times (3, 4, 3 children): 260 tubes, each starting inside its parent, with children taking a seeded share of the parent's area and the parent narrowing past each junction by that area (da Vinci). Lengths are fitted to a squat crown ellipsoid; low branches spread, high ones climb, so the clusters build a dome rather than five radial arms. 1370 lobed oak leaves (one closed 32-triangle shell each: auricles, three rounded lobes a side, a folded blade zipped to a midrib, petiole inside its twig) sit on 255 twig and branch tips, faces turned out of the crown. Five low twigs are dead. Seven stalks carry 15 acorns (scaly cup, glossy nut seated in it); ten more lie in the grass with 34 curled fallen leaves, 20 tufts and two sticks. Bark fissures run along each tube via a Grain point attribute (the tube's tangent), with moss on the north flank of the foot. Eight materials. Budgets (measured, 5.2.1): 68350 tris (67700-69000), LOD 0.5000/0.2200, 8 materials with face floors, UVs 0..1 no overlap, AABB 11.2821x9.3063x 7.9994 (+-0.01), collider 54 (<=60), hygiene 0 incl. 0 coplanar cross-shell pairs, zmin 0; 260 branches seated, shallowest base vertex 0.0923 of the parent's radius inside it (>=0.06); 255 junctions area ratio 0.9586-0.9872 (0.90-1.05), widest child 0.6691 (<=0.80), fork 0.8939 (0.80-1.05); 25 nuts 0.0112-0.0113 m in their cups (0.006-0.020); lean 0.554 deg (<=1.0), balance 0.2969 m (<=0.45), DBH 0.7313 (0.731+-0.02); foot sealed 8/8 sectors, roots >=0.0293 m under (>=0.010); 1370 petioles 0.0025-0.0465 m inside their twigs (>=0.0015); stalk 0.0080, pedicel in stalk 0.0036, in cup 0.0134; 66 cover pieces bedded, 76 shells joined. Two default runs identical; 4.5.11 and 5.1.2 print the same measurements (export differs by 16 bytes). Heavier than pine-tree (68350 vs 45852 tris): 64% is leaves; a broadleaf crown has to show leaf faces. A 1545-leaf draft at 36 tris each measured 83k and was cut to 32-tri leaves on fewer twig stations. Fixes found on the way: the soil BVH gave zero ray normals until normal_update() (litter leaves collapsed flat, 132 zero-area faces, 306 doubles); cover scattered to the rim roll-off overhung it and settled under Z = 0; per-child k ratios let late children exhaust thin parents (taper up to 1.52), replaced by area shares with a kept tip fraction; the convex hull kept the frustum's own faces (94 tris), so the collider source is points only. --float-branches first exited 20: the taper audit projected the moved base cap onto the parent and picked the wrong junction; it now meets the child's axis line (ring 0-1 centres) with the parent's, which the falsifier leaves unchanged. --fat-twigs also bursts twigs out of their parents, so the taper (20) is checked before the seat (17). Falsifiers (flag -> measured -> exit), 5.2.1 and 4.5.11 identical; tris 68350 and envelope unchanged in all: --skip-decimate LOD1 1.0000 9 --stray-vert loose_v 1 15 --lift-z zmin 0.05000 16 --float-branches shallowest base vertex -1.8098 of radius 17 --pop-nuts nut in cup -0.0228 m 18 --lean-crown lean 3.146 deg 19 --fat-twigs junction ratio 1.9704, child 1.2044 20 --perch-trunk sealed 6/8 sectors 21 --arch-roots shallowest root station -0.0628 m 21 --orphan-clump petiole -0.0479 m 22 --drop-acorns pedicel in cup -0.0461 m 23 --float-cover 45 shells loose, tufts 0.0017-0.0034 m 24 tests/check_falsifier_targets.py --run --only broadleaf-oak passes. Blender: E:\Blender-Developer-Tools\.scratch\5.2\blender-5.2.1-windows-x64\blender.exe, reports "Blender 5.2.1 LTS"; default and every falsifier also run on .scratch\blender-4.5.11-windows-x64 ("Blender 4.5.11 LTS"); default on .scratch\blender-5.1.2-windows-x64 ("Blender 5.1.2"). Render: render_hero.py wrote hero (59958 B) and preview (53012 B); framing fill x 0.616, y 0.856, margins left 0.178 right 0.206 bottom 0.050 top 0.094; asset-quality floors pass (8 materials, edge90 0.053). Default stage, hero yaw 0, no deviation. Asset sheet (docs/gallery/asset-sheets/broadleaf-oak.webp): not the least-designed object; the hydrant is plainer. Isolated, it reads as a broad, domed broadleaf tree with a buttressed trunk and crooked limbs showing through the leaf clusters. Weak points: from the sheet's high view the crown still has gaps between limb systems, and leaves are stylised at several times real size. Contact sheet (docs/gallery/contact-sheets/broadleaf-oak-contact-sheet.webp): luma 0.2384 against 0.2369-0.2428 (in band, after relighting from 0.2496 and 0.2286); stage 0.2360 against 0.1919-0.2517 (dark, in range); wedge warmth +0.1092 (calibration -0.144..+0.105; a hair above, the warm pool on the wall and floor right); saturation 0.1710 against 0.1525-0.2367; subject fill 0.856 vertical. Thumbnail legible: a domed green tree on a thick trunk reads at a glance. Also updated: README, CLAUDE.md, AGENTS.md counts (63 -> 64), ROADMAP Nature list (broadleaf oak struck as shipped), asset_sheet.py SELECT row, catalog.json, plugin.json and the regenerated gallery. build_gallery, check_site_links (119 pages, 0 failures), check_falsifier_targets (static and --run), check_exit_code_readme, check_engine_id, check_gallery_images and check_import_export_rules pass. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent 2c3700d commit 35ebfdc

79 files changed

Lines changed: 8626 additions & 137 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
@@ -201,6 +201,7 @@
201201
"showcase/planet-rover",
202202
"showcase/traffic-cones",
203203
"showcase/mushroom-stump",
204-
"showcase/go-kart"
204+
"showcase/go-kart",
205+
"showcase/broadleaf-oak"
205206
]
206207
}

‎AGENTS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ classifies it as a `cursor-plugin`. This is content the AI loads when the user
2121
asks Blender questions or works on Blender add-ons in Cursor or Claude Code.
2222

2323
The content base is 16 skills, 9 rules, 3 templates, 27 snippets, 60
24-
examples, and 63 showcase pieces (counts are CI-enforced against README.md)
24+
examples, and 64 showcase pieces (counts are CI-enforced against README.md)
2525
and the manifest). The full inventory tables and per-item purposes live in
2626
`CLAUDE.md`. Example anatomy and authoring rules: copy `examples/bmesh-gear/`;
2727
showcase conventions: `showcase/README.md`. The render look is specified

‎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, 63 pieces, each with a gallery `category` (sibling of examples/; see showcase/README.md § Categories)
25+
showcase/<name>/ - Budget-conformance props, 64 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>63 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>64 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 63 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 64 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>63 showcase pieces</strong> — click to expand the preview grid</summary>
109+
<summary><strong>64 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>
@@ -172,6 +172,7 @@ Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](show
172172
<a href="showcase/traffic-cones/"><img src="showcase/traffic-cones/preview.webp" width="24%" alt="Traffic cones: orange cones with white reflective collars on a patch of asphalt with a worn white line, three standing in a row, three nested in a stack and one knocked over showing its open base, before a striped A-frame barricade with an amber warning lamp" /></a>
173173
<a href="showcase/mushroom-stump/"><img src="showcase/mushroom-stump/preview.webp" width="24%" alt="Mushroom stump: a sawn tree stump with ringed, cracked end grain and torn splinters on a sloping soil disc, buttress roots in the soil, moss, banded shelf fungi, honey mushroom clusters, red fly agarics, ferns and fallen leaves" /></a>
174174
<a href="showcase/go-kart/"><img src="showcase/go-kart/preview.webp" width="24%" alt="Go-kart: yellow go-kart on a patch of track asphalt before a red and white kerb: bent red tube chassis, black seat, finned engine with chain to the rear axle, slick tyres on silver rims." /></a>
175+
<a href="showcase/broadleaf-oak/"><img src="showcase/broadleaf-oak/preview.webp" width="24%" alt="Broadleaf oak: a broad oak with a short fluted trunk and crooked spreading limbs under a domed crown of lobed green leaves, on a grassy soil disc with surface roots, tufts, fallen leaves and acorns" /></a>
175176
</p>
176177

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

297298
[`go-kart`](showcase/go-kart/) — the eighth `vehicles` piece: procedural rental go-kart on a patch of kart-track asphalt against a red and white kerb (a 30 mm tube chassis whose main loop is one bar swept round every bend, cross tubes ending inside the rails with welded gussets, bearing hangers and kingpin C-brackets; spindles on kingpin bolts with 14° caster; a three-spoke wheel on a raked column in a bushing, a steering plate and two tie rods on rod-end eyes; a bolted nose, side pods on nerf bars and a curved front panel; a moulded seat on stays, a floor tray, two pedals, a strapped fuel tank with its line and a lead ballast block; a finned four-stroke clamped to the right rail with a pull-start, air-box and silencer, driving the live rear axle through a clutch, an 88-link chain solved to a whole number of pitches and a 60-tooth sprocket; bearing carriers, a brake disc and caliper; a tubular rear bumper; four loaded slicks on split rims with valve stems, the fronts narrower than the rears), whose tyres pressed into the asphalt in one plane, hubs and bearings coaxial with their axles, tie-rod eyes on their pins, tyre beads and chain seated, frame, bodywork and wheels mirrored at the stated wheelbase and tracks, caster, mass centre inside the support polygon and one connected assembly are recomputed from the mesh, through the same pipeline. `--float-tyre` exits 16 on every tyre grounded, `--cock-hub`, `--drop-bearing` and `--short-tierod` 17 on joint fit, `--sink-tyre` and `--lift-chain` 18 on the bead and chain seats, `--toe-wheel`, `--wide-track`, `--odd-frame` and `--no-caster` 19 on mirror, size and caster, `--aft-ballast` 20 on the stance, `--loose-ballast` 21 on one connected assembly, while the envelope holds.
298299

300+
[`broadleaf-oak`](showcase/broadleaf-oak/) — the eighth `nature` piece: procedural mature, open-grown English oak on a sloping grassy soil disc (a short fluted, ridged trunk flaring through six buttresses into surface roots bedded in the soil, a low fork into five crooked scaffold limbs that divide three more times into 260 tapered branches, each seated in its parent and narrowing past every junction by its child's area, a broad domed crown of 1370 lobed oak leaves in clusters on every twig tip, dead twigs, acorns with scaly cups and glossy nuts hanging on stalks and lying in the grass among curled fallen leaves, tufts and sticks), whose branch seats, da Vinci taper, nuts seated in their cups, plumb trunk and balanced crown, foot and roots sealed in the soil, leaves carried by their twigs, acorns hung on their stalks and ground cover joined to the soil are recomputed from the mesh, through the same pipeline. `--float-branches` exits 17 on every branch seated in its parent, `--pop-nuts` 18 on every nut seated in its cup, `--lean-crown` 19 on plumb and balance, `--fat-twigs` 20 on the taper and area rule, `--perch-trunk` and `--arch-roots` 21 on the trunk and roots sealed in the soil, `--orphan-clump` 22 on every leaf cluster carried by its twig, `--drop-acorns` 23 on the hanging acorns on their stalks, `--float-cover` 24 on the ground cover joined to the soil, while the envelope holds.
301+
299302
</details>
300303

301304
## Examples

‎ROADMAP.md‎

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

‎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 63 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 64 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 63 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 64 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 63 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 64 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 63 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 64 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>

‎docs/gallery/archery-target/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ <h1>archery-target</h1>
358358
<p>A procedural archery range target on a turf patch — a 1.10 m compressed-straw boss coiled from rope courses that show on its back and round its edge, bound with doubled jute twine drawn tight over the crests; an 80 cm ten-zone World Archery face in aged inks with ring lines, an X ring and a printed X, held by four target pins; a timber easel leaning it back 12° on toe skids with knee braces, a ledge with a stop lip on a bolted rail and gussets, a numbered butt board, a strap hinge pinned to a rear leg in a steel ferrule and foot, and a splay chain between eye bolts; five carbon arrows in the face with cresting, nocks and three vanes, one glancing into the straw edge, one snapped with its fletched half on the grass, and a leather quiver of arrows lying among grass tufts — 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="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 63 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
361+
<nav class="pager" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 64 showcase pieces<span class="pager-keys"> &middot; <kbd>&larr;</kbd><kbd>&rarr;</kbd></span></span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
362362
<button class="detail-hero" id="heroZoom" type="button" aria-label="View full size: A straw archery boss with a gold, red, blue, black and white face and five arrows, leaning on a timber easel numbered 12, a quiver on the grass patch below.">
363363
<img src="../assets/archery-target-hero.webp" alt="A straw archery boss with a gold, red, blue, black and white face and five arrows, leaning on a timber easel numbered 12, a quiver on the grass patch below." width="1280" height="720" fetchpriority="high" />
364364
</button>
@@ -5579,7 +5579,7 @@ <h3><a href="../wooden-barrel/">wooden-barrel</a></h3>
55795579
</article>
55805580
</div>
55815581
</section>
5582-
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 63 showcase pieces</span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
5582+
<nav class="pager pager-foot" aria-label="Showcase pieces"><a rel="prev" href="../cargo-loader/" aria-label="Previous showcase piece: cargo-loader"><span aria-hidden="true">&larr;</span> cargo-loader</a><span class="pager-pos hud">53 of 64 showcase pieces</span><a rel="next" href="../cactus-garden/" aria-label="Next showcase piece: cactus-garden">cactus-garden <span aria-hidden="true">&rarr;</span></a></nav>
55835583
</main>
55845584
<dialog class="lightbox" id="lightbox" aria-label="Full-size render">
55855585
<button class="lightbox-close" type="button" autofocus>Close</button>
68.5 KB
Loading
58.6 KB
Loading

0 commit comments

Comments
 (0)