hạ long · round 9 · dragon labFive dragons, real anatomy.

Every tile below is the real drawDragon from build/dragon-draw.js, running live — same pose, same instant (t = 3.7), same ground pair for all ten, so the only variable is the palette. The contrast numbers are read back out of the rendered pixels, not asserted.

The hard constraint is the second column. Hạ Long's background runs from a #0E1026 night sky to a #E5D6B8 noon bay and back down to #082226 at the seabed — a palette has to survive a near-black ground and a near-cream one. That is what forced the jade crossfade in Round 6, and it is what kills most of the obvious answers here. Every palette therefore carries a Lo value (over the dark) and a Hi value (over the pale) for its four body channels.

On "matching Studio Lucky Bamboo". SLB's real palette, from the Figma style guide, is living green #5AC669, sun gold #DFB13B (the signature accent), deep forest #3C5940, bronze #81692E, cream #FFF0D1. There is no red in it. The gold/red option below pairs sun gold with Hạ Long's own --vermilion #B5432E — a deliberate extension of the brand, not a match to it. Only rồng ngọc is a straight brand read.
On white. In Vietnam trắng — white — is the colour of mourning, the inverse of Western usage. The dragon's current body is #EEE9F6, a near-white. That is flagged again in full beside the pearl variant below; it is the single most consequential cultural note in this round.
Her form IS on the table now — that is Axis 2, below. Rounds 6–8 held every variant to the strict Lý-dynasty (1010–1225) form; Jammy's 2026-08-02 review reopened it ("these look like a slug swimming around") and his call is full anatomy on every rebuilt form. The palette rows in THIS axis still render the default form. One rule survives from the old note as an error, not a taste: claws are four-toed wherever they are drawn — matching the code, which has always drawn four — never five.

tone 0 · night sky
#0E1026 → #2A2150 · alpha 1.00 · aura ON
tone 1 · the pale bay
#E5D6B8 → #EDE7D8 · alpha 0.52 · aura gated OFF (tone < 0.92)

rồng vàng

gold + vermilion · current default ?dragon=gold-vermilion open the concept in this palette →

The auspicious pairing, and the one Jammy named first. Sun gold #DFB13B is Studio Lucky Bamboo's real signature accent; the vermilion beside it is notthere is no red in the SLB palette. This borrows Hạ Long's own --vermilion #B5432E for the crest and the belly line, so the pairing is a deliberate extension of the brand, not a match to it. Over the night sky she is the brightest thing on the page. Over the pale bay the gold has to drop most of the way to bronze or it dissolves into cream — that fall is the whole risk of this palette.

bodyLobodyHiedgeLoedgeHiarcLoarcHifinLofinHibellyLobellyHichromeLochromeHisparkLosparkHiauraInnerauraOutercrestdeep

rồng ngọc

jade + gold — the actual brand ?dragon=jade-gold open the concept in this palette →

The only palette here that is a straight read of the Studio Lucky Bamboo style guide: living green #5AC669 body, deep forest #3C5940 over the bay, sun gold #DFB13B crest and belly, cream #FFF0D1 on the fire-crest. Xanh/ngọc carries growth and new beginnings, and jade is literally what the Hạ Long dragons are said to have spat into the sea. Quietest brand-safe option; the least surprising.

bodyLobodyHiedgeLoedgeHiarcLoarcHifinLofinHibellyLobellyHichromeLochromeHisparkLosparkHiauraInnerauraOutercrestdeep

sơn mài

lacquer ground + gold leaf ?dragon=lacquer-gold open the concept in this palette →

The register the research explicitly points at: Vietnamese lacquer painting — deep grounds, gold leaf, restraint — and the furthest thing from Tết restaurant signage. The mass is dark; the drawing is gold. That inverts the usual light-body/dark-edge relationship on purpose, because it is how sơn mài actually reads. Strongest of the five over the pale bay by a wide margin. Weakest over the night sky, where a near-black body has almost nothing to push against and the gold rim is doing all the work — look hard at the left column before choosing it.

bodyLobodyHiedgeLoedgeHiarcLoarcHifinLofinHibellyLobellyHichromeLochromeHisparkLosparkHiauraInnerauraOutercrestdeep

ngọc trai · sương

pearl and mist — today's dragon, unchanged ?dragon=pearl-mist open the concept in this palette →

These are the exact values on the concept page today, kept so the refactor changes zero pixels until a palette is chosen. Elegant, and the one Jammy has already seen and liked. Flag, and it is a real one: in Vietnam trắng — white — is the colour of mourning, the inverse of Western usage, and this body is #EEE9F6, a near-white. Framed as mist or as the pearl she carries it is defensible; as the dragon's primary identity it is the one choice on this page a Vietnamese viewer might read as funereal. If it survives, it should survive named — sương, not white.

bodyLobodyHiedgeLoedgeHiarcLoarcHifinLofinHibellyLobellyHichromeLochromeHisparkLosparkHiauraInnerauraOutercrestdeep

cửu long

delta bronze — the fifth, argued ?dragon=cuu-long open the concept in this palette →

The one I am arguing for, and the argument is not chromatic. The other four are northern: sea jade, Hạ Long vermilion, imperial gold. Jammy is from Bến Tre, in the Cửu Long delta — nine dragons, for the river's nine mouths. This palette is that half of the country: Đông Sơn bronze (#81692E, which is also SLB's own bronze), brackish river green, and the pale silt-and-coconut light of the delta. Bronze as a colour only — the drum and the Lạc bird are national heritage and never become texture here. Practically it is also the safest of the five: it sits between the jade and the lacquer options in value, so it is the only palette that needs no rescue on either ground. Aesthetically it is the quietest. Choose it if you want her to be from somewhere rather than to be a colour.

bodyLobodyHiedgeLoedgeHiarcLoarcHifinLofinHibellyLobellyHichromeLochromeHisparkLosparkHiauraInnerauraOutercrestdeep

Axis 2 — form × palette · the Round-9 anatomy rebuild

Palette answers what colour is she; form answers what kind of creature is she. Jammy's Round-8 verdict on the first form axis was “a slug swimming around,” and he was right — every form shared one host-owned body tube and could only change the decoration on it. Round 9 moved the geometry into the renderer: every form marked v2 now carries its own body profile (wide skull, neck pinch, deep chest), a real head — skull mass, open jaw with teeth, an eye with a pupil, nostril, brow — scales that break the silhouette, jointed limbs with four-clawed paws, and tapered curling barbels. All tiles sit on the tone 0 · night sky, because form is a silhouette question; each row leads with a 2.6× head-detail tile. ribbon is the control and still runs the Round-8 renderer byte-for-byte (proven by verify.html).

The horn rule, as history. Rounds 6–8 carried it as a gate: the strict Lý form (1010–1225) is hornless and limbless, and stag horns or a fifth toe read as a Chinese dragon. Jammy's 2026-08-02 call supersedes the gate — full anatomy on every rebuilt form, visual impact wins — but the rule survives as a label: every card says its tradition out loud, rồng Lý keeps the hornless mào lửa head (her limbs are the later Trần/Lê evolution of the Vietnamese dragon, not a Chinese import), and claws are four-toed everywhere — a fifth toe is still an error.

Round 11 — the three Jammy is iterating on (bigger heads, more fur, more whiskers)

rồng chùa

Sino-Vietnamese temple dragon — the first reference ?form=temple-gold open the concept in this form →

⚠ Deliberate departure from the Vietnamese form. Chinese · Sino-Vietnamese temple carving.

Deliberate departure — read this before picking it. The gold temple dragon from Jammy's first reference, and it is Chinese: branched antlers with real mass, a flame mane, the deepest chest of the set, plate armour that scallops the outline, four clawed limbs (four toes, never five) and two pairs of barbels. It is built because Jammy named the reference first and the call is his; it is labelled because a Vietnamese legend rendered as a Chinese dragon should never be chosen by accident. If the goal is ornateness with the nationality kept, rồng Lý gets there.

head detail · 2.6× · gold-vermilion
rồng vàng
rồng ngọc
sơn mài
ngọc trai · sương
cửu long

múa rồng

parade dragon — the dance-troupe costume head ?form=mua-rong open the concept in this form →

Tradition: Sino-Vietnamese festival dragon dance (múa rồng) — costume craft

The gold-and-vermilion parade head from Jammy's reference: horns AND a full fur ruff AND furry brows over a bulging painted eye, a wide toothy grin, two whisker pairs — maximal, the way the costume actually is — riding a banded cloth-hoop body, which is what a dance dragon's barrel really looks like. Built for the lion-dance gait: this is the form the choreography was made for.

head detail · 2.6× · gold-vermilion
rồng vàng
rồng ngọc
sơn mài
ngọc trai · sương
cửu long

rồng Huế

Nguyễn imperial — the palace statue · current default ?form=hue-imperial open the concept in this form →

Tradition: Vietnamese · Nguyễn dynasty, Huế imperial city

The gold statue from Huế's imperial city, from Jammy's reference — a real VIETNAMESE dragon with full anatomy and no Chinese import needed: dense overlapping plate armour, swept flame-horns and a flame mane, the deeply curled Nguyễn snout, the mào lửa kept, and the thickest paws of the set. If the goal is imperial weight with the nationality intact, this is the strongest claim in the lab.

head detail · 2.6× · gold-vermilion
rồng vàng
rồng ngọc
sơn mài
ngọc trai · sương
cửu long

Archive — every earlier variation, kept viewable (pushed down on Jammy's 2026-08-03 call, never deleted)

dải lụa

the incumbent — silk ribbon ?form=ribbon open the concept in this form →

Tradition: Vietnamese · Lý dynasty

The Round-8 dragon, unchanged — the control, and the only form still on the legacy renderer. A smooth tapered ribbon with soft dorsal scutes, the mào lửa fire-crest, trailing whiskers and a silk tail flare. Jammy's Round-8 verdict on this family: “a slug swimming around.” Every v2 row below is measured against this one — if a rebuilt form does not obviously beat it, the rebuild failed.

head detail · 2.6× · gold-vermilion
rồng vàng
rồng ngọc
sơn mài
ngọc trai · sương
cửu long

rồng Lý

Lý/Trần ornate — the Vietnamese dragon, fully drawn ?form=ly-trieu open the concept in this form →

Tradition: Vietnamese · Lý/Trần → Lê lineage

The Vietnamese option, now with the anatomy it deserved: a real skull with the up-curled Lý snout, an open jaw, plate scales that break the outline, and a flame-scroll crest down every segment. Hornless, by the rule — the mào lửa fire-crest stays her defining mark. The four clawed limbs are the documented Trần/Lê-dynasty evolution of the Vietnamese dragon (four toes, never five), added per Jammy's 2026-08 full-anatomy call — said out loud here rather than smuggled in.

head detail · 2.6× · gold-vermilion
rồng vàng
rồng ngọc
sơn mài
ngọc trai · sương
cửu long

nāga

Thai/Lao temple naga — crown, hood, full-spine comb ?form=naga open the concept in this form →

Tradition: Theravada · Thai / Lao / Khmer — ornamental influence

The temple-naga reference, finally drawn like it: a tiered crown stepping back off the skull, a hood fan flaring behind the head, a red open mouth with fangs, and the tall serrated comb running the full spine. Honest label ×2: the nāga is Theravada — Thai, Lao, Khmer — not Vietnamese; and a true nāga is limbless, so the four clawed limbs here are Jammy's full-anatomy call applied over the reference, not the reference itself.

head detail · 2.6× · gold-vermilion
rồng vàng
rồng ngọc
sơn mài
ngọc trai · sương
cửu long

sơn mài

gold-leaf lacquer — flat linework, fully drawn ?form=son-mai open the concept in this form →

Tradition: Vietnamese lacquer craft · Thai gold-leaf influence

Flat gold linework on a lacquer ground — no gradients, no aura, and now a real head and limbs rendered as crisp strokes, which is exactly what the Thai lacquer panels do: fully-drawn dragons in flat gold line. Scale crescents instead of filled plates, kranok scrolls trailing the body, and the longest, curliest barbels of the set (two pairs). Still the form canvas 2D renders natively well rather than approximately.

head detail · 2.6× · gold-vermilion
rồng vàng
rồng ngọc
sơn mài
ngọc trai · sương
cửu long

múa lân

lion-dance costume — the dancing lân, serpentine ?form=lan open the concept in this form →

Tradition: Sino-Vietnamese festival lion dance (múa lân) — costume, not zoology

The lion-dance costume from Jammy's reference, worn by the serpentine body: a HUGE head (1.7×) with the bulging painted costume eye, thick furry brows, a blunt grinning muzzle with a full tooth row, a full fur ruff behind the head, and fur tufts streaming off the body instead of scales. Honest label: a real lân is a lion with a short two-dancer body — this is the lân treatment on the dragon; the true short-bodied lân dances beside her on the Hạ Long page itself (Round 10's companion). Round-motion 2026-08-06: ruffScale 1.35 added — the motion-clip frames show a denser, deeper fringe than the Round-10 default carried.

head detail · 2.6× · gold-vermilion
rồng vàng
rồng ngọc
sơn mài
ngọc trai · sương
cửu long

Anatomy probes

Measured, not asserted: each v2 profile's skull must beat its neck by ≥1.3× with the chest deeper still (the anti-slug geometry), and — normalized by the union of the two dragons' own footprints, so the number means "this fraction of her changed" — each v2 form must differ from ribbon by ≥40% and from every other v2 form by ≥20% (40, not 45: larger heads grow the union denominator and dilute the score).


the numbersBoth grounds, all five.

WCAG 2.2 §1.4.11 puts the bar for a meaningful graphical object at 3:1. green clears it, amber reads but is carried by motion, red is a ghost. The last column is each palette's worst case — the number that actually decides it, because she has to work on every band of the page, not on her best one.

Read the bay column against its ceiling, not against 3:1. Over the bay she is painted at alpha 0.52, so less than half of every pixel of her is actually her. Measured ceiling: . A bay number close to that ceiling is a good palette on a thin alpha; a bay number far below it is a bad palette. If the chosen palette still reads thin over the bay, the lever is the 0.52 alpha floor in dragonAlpha(), not the hex — and that is an approved Round-6 value, so it is flagged here rather than quietly raised.
palettenight · bodynight · crestbay · bodybay · crestworst

dấuThe display face was wrong. Here is the proof.

Iowan Old Style does not draw the Vietnamese horn. The concept led its display stack with "Iowan Old Style", on the record that it was "chosen to hold Vietnamese diacritics." It holds the tone marks fine. It does not hold the horn on ơ and ư — it stacks a floating hook above the letter instead of attaching a stroke at its shoulder, so sơn renders as sớn, Cửu Long as Cửu with the horn detached, and Âu Cơ as Âu Cở. Measured, not eyeballed: in Iowan, ơ is exactly as wide as o and 39 px taller — the signature of a stacked mark. In Palatino it is 8 px wider; in Georgia, 24 px wider. That is the difference between a horn and a hook.

This matters more this round than last, because the Round-7 copy adds sơn mài, Cửu Long, Âu Cơ and sương — four of the five new Vietnamese phrases contain a horn. Fix applied: the concept's --display stack now leads with "Palatino", then "Palatino Linotype" / "Book Antiqua", with Iowan Old Style demoted behind them and Georgia as the cross-platform floor. All three of those draw the horn correctly.

Tone marks are graded on height (they sit above or below the letter); horns are graded on width (they attach at the shoulder and extend right). Grading horns on height is what would have let the broken face through.

faceơ · the hornư · the horntone marksspecimen

and the concept's phrases, set in the corrected stack:

Hạ Long · Lạc Long Quân · Âu Cơ · Bến Tre · Cửu Long

bọc trăm trứng — con Rồng cháu Tiên · sơn mài · sương


Generated by dragon-lab/build/gen_dragon_lab.py from build/palettes.py + build/dragon-draw.js. Re-run the generator after any palette edit; the same build/_dragon-palettes.js block is what lives in ha-long/index.html.