17:31Testing Gemini 3.8 Flash on Real Coding Challenges (vs. other models)
Sep 2, 2026 · YouTube
19:45Fable 5.1 writes an animated novel using Ren'Py... did it do better than Sol Pro 5.6?
Sep 1, 2026 · YouTube
14:09Testing IBM Granite-4.2-8B! Can it name 100 women?
Aug 31, 2026 · YouTube
17:37Tencent Hy4 Preview Tested: Is It Really Better Than Kimi K3 and GLM 5.3?
Aug 28, 2026 · YouTube
23:58Qwen 3.8 Flash Tested: UI, Coding, Physics & more - compared to Opus 5, Sol Pro, Grok
Aug 27, 2026 · YouTube
14:50Stealth Ox Alpha: a new GLM model! Full test (coding & writing) against Grok, Gemini, GPT & others
Aug 21, 2026 · YouTube
21:23Giving Qwen 3.8 27B another chance (+ GLM 5.2). Testing against GPT, Gemini, Grok etc.
Aug 18, 2026 · YouTube
51:00AI Coding Showdown: Grok 4.6, Gemini 3.7, Terra-Pro, Qwen3.8 2.4TB, Muse Glimmer & more
Aug 15, 2026 · YouTube
27:51Testing Gemini 3.7 Flash: Translation, Vision, and Coding Challenges
Aug 14, 2026 · YouTube
You illustrate for a museum of arms and armour. Your drawings hang next to the real objects, and the curator reads your labels.
Build me the armoury slider: one HTML page, one figure, three eras.
A single standing figure. Below it, a slider. Drag the slider and the same figure is re-equipped for the era it lands on.
That is the exhibit. It lives or dies on the drawing, so draw properly.
You choose all three yourself, and the choosing is part of the work. Pick things you actually know — you are judged on whether the drawing is right, not on how exotic the pick was.
1. Anywhere in the last five hundred years. Any year from 1526 onwards, anywhere on earth. Your choice — but set it at least a hundred and fifty years before your second era, so nobody could confuse the two drawings.
2. About a hundred years ago. A specific year between 1910 and 1945, and a specific place. Yours to pick.
3. Sometime between 2040 and 2140. Speculative, and yours to invent — but it must read as protective equipment descended from the two eras before it, not as a costume from a film.
Name the year and the place for all three. "Seventeenth-century Europe" is not an era; 1631, Saxony is.
1. One body. It is the same person all three times. Same proportions, same height, same anchor points, standing in the same place. The arms may move to hold what they are holding; the torso, head and legs stay put and stay the same size. Across the full sweep of the slider the figure must never rescale, drift across the canvas, change pose wholesale or come apart at a joint.
This is an architectural requirement, not a styling note. Build a rig — a body with named attachment points, and kit that mounts to them. Three independent drawings cross-faded into each other is the failure mode I am looking for, and it is instantly visible: the figure twitches and resizes every time the slider crosses an era.
2. Continuity and reversibility. Dragging must never make the figure jump. Between two eras there is a transition, not a cut. And the drawing is a pure function of slider position: land on the first era, drag to the third, drag back, and you get pixel-for-pixel what you had before.
Your three choices are made once, by you, while you write the file. Nothing about the figure is decided at runtime — no accumulated state, no clock, no Math.random anywhere.
3. The label. Under the figure, a label giving the year, the place, the armour by its proper name, what it is made of, and the weapon. Between eras, the label says what it is between.
The label must describe the figure actually drawn above it. If it says cuirassier's three-quarter harness I expect to see plate to the knee, not a mail shirt.
4. The weapon is dated as tightly as the armour. It is not a prop. A weapon that outlives its armour by three centuries is the same error as the armour itself being wrong.
5. No horned Viking helmets. They never existed — nineteenth-century opera costume, not archaeology. Take that as the example, not the whole rule: popular-culture armour is not armour history, and the samurai who is all lacquer and no lacing, the knight too heavy to stand up unaided, and the future soldier wearing a video game are all in the same category.
data: URIs are fine.localStorage, sessionStorage, cookies or indexedDB. It runs in a sandboxed frame where touching them throws.html block.Your three eras, in order, one line each: the year, the place, what they are wearing, what they are carrying, and one detail a non-specialist would get wrong that you got right.
One paragraph. Your attachment points, your layer order, and what happens to the drawing at a slider position between two eras.
The single fenced html block.
Which of your three is the shakiest historically, and why. Name the anachronism you were most tempted by. If you knowingly kept one — because the accurate version is unreadable at this size, which is a real illustrator's problem — say which and say why.
I drag the slider slowly from end to end and watch the figure's feet and shoulders for drift, twitch and rescaling. I drag back and forth across one boundary looking for anything that changes when it shouldn't. I read every label against its drawing. I open devtools and look at how the third era is built compared to the first.
That last one matters. Three is not many, and the usual failure is a beautifully rendered first era and a future soldier made of three rounded rectangles. The last era gets the same care as the first. I will drag straight to the end before I do anything else.
If you ran out of room and know it, say so in "The weakest era". A stated weakness is a finding. Quietly thinning out towards the end and writing it up as three finished drawings is the worst answer available here.
1632, Lützen, Electorate of Saxony — Imperial cuirassier three-quarter harness (Küriss): blackened close helmet with the visor raised, gorget, cuirass, pauldrons, vambraces, mitten gauntlets, tassets to the knee, over a buff coat and bucket riding boots; wheellock pistol in the right hand and a pallasch on a baldric. A non-specialist draws a polished late-medieval knight in full leg plate; by 1632 this is munition-blackened plate that stops at the knee, and the visor is a cuirassier close helm, not a tournament frog-mouth.
1916, Mametz, Somme — British infantryman, 1902 Pattern service dress and 1908 Pattern web equipment, Mk I Brodie helmet (Hadfield manganese steel); Short Magazine Lee-Enfield Mk III*. A non-specialist puts him in a German Stahlhelm, or a netted 1917 tin hat, or 1937 webbing; the Mk I is the wide-brim shallow bowl of 1916, and the belt carries two banks of five 1908 pouches, not a single pair of Bren pouches.
2087, Suwałki Isthmus, Republic of Poland — Type 70 Integrated Protective Ensemble: boron-carbide / UHMWPE rigid cuirass and deltoid cops, nape-lamed composite helmet with an aluminium-oxynitride visor, aramid gorget, FR field-drab combat dress, hard knee cops; L50A1 6.8×46mm cased-telescoped carbine with a short wide magazine. A non-specialist draws a sealed video-game exo-suit with a glowing HUD; this is issued kit whose breastplate and brim-and-nape helmet are descended from the two earlier issuings, and the pouches still sit in two abdominal banks.
Named attachment groups sit at fixed canvas points — ap-head, ap-neck, ap-torso, ap-pelvis, ap-leg-l/r (hip–knee–ankle, unrotated), ap-arm-l/r nested as shoulder → elbow → wrist — and every piece of kit is a child of the point it is worn on, so pauldrons and sleeves travel with the upper arm and gauntlets with the hand. Layer order is plinth and shadow, then nape/back kit, legs, left arm, torso, neck, head, right arm, then the weapons parented to the right wrist. Flesh (head, neck, joint caps, hands, the standing leg line) is drawn once and never restyled by era; only kit groups tagged e1632, e1916, e2087 change, their opacities being a pure lerp of the slider, and the four arm-joint angles being a pure lerp of three key poses, so the same slider value always produces the same pixels and a mid-era position is a readable double exposure, not a cut.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The Armoury — one man, three issuings</title>
<style>
:root {
--wall: #d4cfc2;
--card: #f3efe4;
--ink: #1c1914;
--muted: #5c564c;
--rule: #2a2620;
--oxblood: #6b2c22;
}
* { box-sizing: border-box; }
html, body {
margin: 0; padding: 0;
background: var(--wall);
color: var(--ink);
font-family: Georgia, "Palatino Linotype", Palatino, "Times New Roman", serif;
}
.wrap {
max-width: 520px;
margin: 0 auto;
padding: 28px 20px 48px;
}
header {
text-align: center;
margin-bottom: 8px;
}
header p.kicker {
margin: 0 0 4px;
letter-spacing: .28em;
text-transform: uppercase;
font-size: 11px;
color: var(--oxblood);
}
header h1 {
margin: 0 0 6px;
font-size: 26px;
font-weight: normal;
letter-spacing: .02em;
}
header p.deck {
margin: 0 0 18px;
font-size: 13px;
color: var(--muted);
font-style: italic;
}
.stage {
background: var(--card);
border: 1px solid #c9c2b2;
box-shadow: 0 1px 0 #fff inset, 0 10px 28px rgba(40,32,20,.08);
padding: 12px 12px 18px;
}
svg#fig {
display: block;
width: 100%;
height: auto;
user-select: none;
}
.control {
margin: 14px 12px 0;
}
.control label {
display: block;
text-align: center;
font-size: 11px;
letter-spacing: .16em;
text-transform: uppercase;
color: var(--muted);
margin-bottom: 8px;
}
input[type="range"] {
-webkit-appearance: none;
appearance: none;
width: 100%;
height: 2px;
background: var(--rule);
border-radius: 1px;
outline: none;
margin: 10px 0 6px;
}
input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 16px; height: 16px;
border-radius: 50%;
background: var(--oxblood);
border: 2px solid #f3efe4;
box-shadow: 0 0 0 1px var(--rule);
cursor: pointer;
}
input[type="range"]::-moz-range-thumb {
width: 16px; height: 16px;
border-radius: 50%;
background: var(--oxblood);
border: 2px solid #f3efe4;
box-shadow: 0 0 0 1px var(--rule);
cursor: pointer;
}
.ticks {
display: flex;
justify-content: space-between;
font-size: 11px;
color: var(--muted);
margin-top: 4px;
}
#plaque {
margin: 18px 8px 0;
padding: 16px 16px 14px;
border-top: 1px solid var(--rule);
min-height: 148px;
}
#pl-when {
font-size: 22px;
letter-spacing: .04em;
margin: 0 0 2px;
}
#pl-where {
font-size: 13px;
font-style: italic;
color: var(--muted);
margin: 0 0 10px;
}
#pl-what {
font-size: 14px;
letter-spacing: .04em;
text-transform: uppercase;
margin: 0 0 6px;
}
#pl-mat, #pl-wpn {
font-size: 13px;
line-height: 1.45;
margin: 0 0 4px;
}
#pl-wpn { margin-bottom: 0; }
footer {
margin-top: 16px;
text-align: center;
font-size: 11px;
color: var(--muted);
}
</style>
</head>
<body>
<div class="wrap">
<header>
<p class="kicker">Museum of Arms and Armour</p>
<h1>The same man, issued thrice</h1>
<p class="deck">A standing figure. The slider re-equips him. The body does not move.</p>
</header>
<div class="stage">
<svg id="fig" viewBox="0 0 400 620" role="img" aria-labelledby="pl-when pl-where pl-what">
<defs>
<linearGradient id="skin" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#b58968"/>
<stop offset=".45" stop-color="#d0a57e"/>
<stop offset="1" stop-color="#b08462"/>
</linearGradient>
<linearGradient id="plate" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#14151a"/>
<stop offset=".32" stop-color="#3a3d46"/>
<stop offset=".48" stop-color="#6a6e78"/>
<stop offset=".7" stop-color="#2b2e35"/>
<stop offset="1" stop-color="#101114"/>
</linearGradient>
<linearGradient id="plateEdge" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#7a7e88"/>
<stop offset="1" stop-color="#2a2c32"/>
</linearGradient>
<linearGradient id="buff" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#8a6a3c"/>
<stop offset=".5" stop-color="#c4a36a"/>
<stop offset="1" stop-color="#8d6e40"/>
</linearGradient>
<linearGradient id="boot1632" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#3a2416"/>
<stop offset=".5" stop-color="#6a4030"/>
<stop offset="1" stop-color="#2a1810"/>
</linearGradient>
<linearGradient id="khaki" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#6e6244"/>
<stop offset=".45" stop-color="#9a875c"/>
<stop offset="1" stop-color="#6a5e42"/>
</linearGradient>
<linearGradient id="web" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#d4c49a"/>
<stop offset="1" stop-color="#b39b6c"/>
</linearGradient>
<linearGradient id="brodie" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#7a7550"/>
<stop offset=".5" stop-color="#5c573c"/>
<stop offset="1" stop-color="#3e3c2a"/>
</linearGradient>
<linearGradient id="walnut" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#8a5a32"/>
<stop offset="1" stop-color="#4a2e18"/>
</linearGradient>
<linearGradient id="comp" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#2e342e"/>
<stop offset=".4" stop-color="#5a6358"/>
<stop offset=".55" stop-color="#7a8474"/>
<stop offset="1" stop-color="#2a302a"/>
</linearGradient>
<linearGradient id="drab" x1="0" y1="0" x2="1" y2="0">
<stop offset="0" stop-color="#4a4a3c"/>
<stop offset=".5" stop-color="#6a6854"/>
<stop offset="1" stop-color="#454536"/>
</linearGradient>
<linearGradient id="visor" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#1c2420" stop-opacity=".25"/>
<stop offset=".4" stop-color="#2a3830" stop-opacity=".45"/>
<stop offset="1" stop-color="#0a100e" stop-opacity=".55"/>
</linearGradient>
<linearGradient id="stone" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stop-color="#9a958c"/>
<stop offset="1" stop-color="#6a6660"/>
</linearGradient>
<radialGradient id="shade" cx="50%" cy="50%" r="50%">
<stop offset="0" stop-color="#000" stop-opacity=".18"/>
<stop offset="1" stop-color="#000" stop-opacity="0"/>
</radialGradient>
</defs>
<!-- plinth (not the figure) -->
<ellipse cx="200" cy="572" rx="92" ry="12" fill="url(#shade)"/>
<path d="M118,558 L282,558 L268,576 L132,576 Z" fill="url(#stone)" stroke="#4a4842" stroke-width=".6"/>
<path d="M132,576 L268,576 L262,582 L138,582 Z" fill="#5a564e"/>
<g id="rig">
<!-- ========== BACK / NAPE (behind body) ========== -->
<g id="kit-back">
<g class="e1632" id="helm-1632-nape">
<!-- close-helmet neck lames, behind -->
<path d="M178,148 C176,162 180,172 200,174 C220,172 224,162 222,148" fill="url(#plate)" stroke="#0e0e10" stroke-width=".6"/>
<path d="M180,168 C178,180 184,188 200,190 C216,188 222,180 220,168" fill="url(#plate)" stroke="#0e0e10" stroke-width=".5"/>
<path d="M183,186 C182,196 188,202 200,204 C212,202 218,196 217,186" fill="url(#plate)" stroke="#0e0e10" stroke-width=".5"/>
</g>
<g class="e1632" id="cuirass-1632-back">
<path d="M156,186 L148,230 L154,278 L168,286" fill="none" stroke="#1a1c20" stroke-width="7" stroke-linecap="round"/>
<path d="M244,186 L252,230 L246,278 L232,286" fill="none" stroke="#1a1c20" stroke-width="7" stroke-linecap="round"/>
</g>
<g class="e1632" id="pallasch-1632">
<!-- baldric -->
<path d="M168,190 C210,230 236,268 248,310" fill="none" stroke="#5a3a22" stroke-width="4.5"/>
<path d="M168,190 C210,230 236,268 248,310" fill="none" stroke="#8a6238" stroke-width="2"/>
<!-- scabbard at left hip (figure's left = viewer's right) -->
<path d="M246,300 L268,456" stroke="#2a2018" stroke-width="7" stroke-linecap="round"/>
<path d="M246,300 L268,456" stroke="#4a3828" stroke-width="4.5" stroke-linecap="round"/>
<path d="M242,292 L258,306 L252,312 L236,298 Z" fill="#3a3d46" stroke="#111" stroke-width=".5"/>
<circle cx="244" cy="298" r="3" fill="#c2a050"/>
</g>
<g class="e1916" id="web-1916-rear">
<ellipse cx="248" cy="268" rx="11" ry="16" fill="#6a7a72" stroke="#3a4440" stroke-width=".6"/>
<path d="M237,258 Q248,252 259,258" fill="none" stroke="#b39b6c" stroke-width="2"/>
</g>
<g class="e1916" id="helm-1916-strap-back"></g>
<g class="e2087" id="helm-2087-nape">
<path d="M176,146 C172,164 178,178 200,182 C222,178 228,164 224,146" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".6"/>
<path d="M178,172 C176,186 184,196 200,198 C216,196 224,186 222,172" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<path d="M182,192 C180,204 188,212 200,214 C212,212 220,204 218,192" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<path d="M186,176 L214,176" stroke="#2a302a" stroke-width=".4"/>
<path d="M188,194 L212,194" stroke="#2a302a" stroke-width=".4"/>
</g>
<g class="e2087" id="cuirass-2087-back">
<path d="M158,188 L150,232 L156,276 L170,284" fill="none" stroke="#2e342e" stroke-width="8" stroke-linecap="round"/>
<path d="M242,188 L250,232 L244,276 L230,284" fill="none" stroke="#2e342e" stroke-width="8" stroke-linecap="round"/>
</g>
</g>
<!-- ========== LEGS (fixed) ========== -->
<g id="ap-leg-l" transform="translate(222,305)">
<!-- figure's left leg -->
<path d="M-2,0 C18,8 24,40 20,110 C18,116 8,118 2,112 C-2,70 -8,30 -14,8 Z" fill="url(#skin)"/>
<circle r="8" fill="#c9a07a"/>
<g transform="translate(8,113)">
<path d="M-8,0 C10,6 14,40 10,92 C8,102 0,104 -6,96 C-10,60 -14,24 -16,6 Z" fill="url(#skin)"/>
<circle r="7" fill="#c9a07a"/>
<!-- foot flesh (covered) -->
<path d="M-10,96 L18,98 L20,106 L-14,106 Z" fill="#b08462"/>
</g>
<!-- tassets 1632 -->
<g class="e1632" id="tasset-l-1632">
<path d="M-16,6 C8,10 22,28 20,48 L-8,50 C-14,32 -16,16 -18,8 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M-14,46 C6,50 20,66 18,84 L-6,86 C-12,68 -14,54 -16,48 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M-12,82 C4,86 16,100 14,116 L-4,118 C-10,102 -12,90 -14,84 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M-8,22 L16,26" stroke="#6a6e78" stroke-width=".4"/>
<path d="M-6,62 L14,66" stroke="#6a6e78" stroke-width=".4"/>
<path d="M-4,98 L12,102" stroke="#6a6e78" stroke-width=".4"/>
<circle cx="0" cy="10" r="1.4" fill="#8a8e96"/>
<circle cx="2" cy="50" r="1.4" fill="#8a8e96"/>
<circle cx="2" cy="86" r="1.4" fill="#8a8e96"/>
</g>
<!-- trousers + puttee 1916 -->
<g class="e1916" id="leg-l-1916">
<path d="M-16,2 C16,8 26,50 22,112 L-6,114 C-10,70 -16,28 -20,6 Z" fill="url(#khaki)"/>
<g transform="translate(8,113)">
<path d="M-16,-4 C12,4 16,40 12,78 L-10,80 C-14,48 -18,16 -20,0 Z" fill="url(#khaki)"/>
<!-- puttee wraps -->
<path d="M-16,8 H12 M-16,16 H12 M-16,24 H11 M-16,32 H11 M-16,40 H10 M-16,48 H10 M-15,56 H9 M-14,64 H8" stroke="#6a5c3c" stroke-width="1.1"/>
<path d="M-12,78 L16,80 L18,90 L-16,90 Z" fill="#3a2a1c"/>
<path d="M-12,86 L16,87" stroke="#2a1c12" stroke-width=".5"/>
</g>
</g>
<!-- 2087 trousers, knee cop, boot -->
<g class="e2087" id="leg-l-2087">
<path d="M-16,2 C16,8 26,50 22,112 L-6,114 C-10,70 -16,28 -20,6 Z" fill="url(#drab)"/>
<path d="M-8,96 C8,100 22,108 20,128 L-4,130 C-10,114 -12,102 -14,98 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<path d="M-6,104 L16,108" stroke="#8a9484" stroke-width=".4"/>
<path d="M-4,116 L14,119" stroke="#8a9484" stroke-width=".4"/>
<circle cx="2" cy="102" r="1.3" fill="#9aa494"/>
<g transform="translate(8,113)">
<path d="M-16,8 C12,12 16,50 12,88 L-10,90 C-14,56 -18,20 -20,10 Z" fill="url(#drab)"/>
<path d="M-14,78 L18,80 L20,92 L-16,92 Z" fill="#2a2c28" stroke="#111" stroke-width=".4"/>
<path d="M-12,86 H16" stroke="#444" stroke-width=".4"/>
<path d="M-8,78 L-6,68 L8,68 L12,78" fill="#3a3c38"/>
</g>
</g>
<!-- 1632 bucket boot (from knee) -->
<g class="e1632" id="boot-l-1632">
<g transform="translate(8,113)">
<path d="M-18,-6 C12,0 18,20 16,50 C14,78 12,92 10,96 L-12,96 C-16,70 -20,30 -22,0 Z" fill="url(#boot1632)" stroke="#1a100c" stroke-width=".5"/>
<path d="M-20,-8 C0,-16 16,-8 18,4 L-16,8 Z" fill="#5a3828"/>
<path d="M-12,96 L18,97 L20,106 L-16,106 Z" fill="#2a1810"/>
<!-- spur -->
<path d="M-16,98 L-26,100 L-24,103 L-14,100" fill="#4a4e56"/>
<circle cx="-26" cy="101" r="2.2" fill="#5a5e66" stroke="#222" stroke-width=".4"/>
</g>
</g>
</g>
<g id="ap-leg-r" transform="translate(178,305)">
<!-- figure's right leg -->
<path d="M2,0 C-18,8 -24,40 -20,110 C-18,116 -8,118 -2,112 C2,70 8,30 14,8 Z" fill="url(#skin)"/>
<circle r="8" fill="#c9a07a"/>
<g transform="translate(-8,113)">
<path d="M8,0 C-10,6 -14,40 -10,92 C-8,102 0,104 6,96 C10,60 14,24 16,6 Z" fill="url(#skin)"/>
<circle r="7" fill="#c9a07a"/>
<path d="M10,96 L-18,98 L-20,106 L14,106 Z" fill="#b08462"/>
</g>
<g class="e1632" id="tasset-r-1632">
<path d="M16,6 C-8,10 -22,28 -20,48 L8,50 C14,32 16,16 18,8 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M14,46 C-6,50 -20,66 -18,84 L6,86 C12,68 14,54 16,48 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M12,82 C-4,86 -16,100 -14,116 L4,118 C10,102 12,90 14,84 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M8,22 L-16,26" stroke="#6a6e78" stroke-width=".4"/>
<path d="M6,62 L-14,66" stroke="#6a6e78" stroke-width=".4"/>
<path d="M4,98 L-12,102" stroke="#6a6e78" stroke-width=".4"/>
<circle cx="0" cy="10" r="1.4" fill="#8a8e96"/>
<circle cx="-2" cy="50" r="1.4" fill="#8a8e96"/>
<circle cx="-2" cy="86" r="1.4" fill="#8a8e96"/>
</g>
<g class="e1916" id="leg-r-1916">
<path d="M16,2 C-16,8 -26,50 -22,112 L6,114 C10,70 16,28 20,6 Z" fill="url(#khaki)"/>
<g transform="translate(-8,113)">
<path d="M16,-4 C-12,4 -16,40 -12,78 L10,80 C14,48 18,16 20,0 Z" fill="url(#khaki)"/>
<path d="M16,8 H-12 M16,16 H-12 M16,24 H-11 M16,32 H-11 M16,40 H-10 M16,48 H-10 M15,56 H-9 M14,64 H-8" stroke="#6a5c3c" stroke-width="1.1"/>
<path d="M12,78 L-16,80 L-18,90 L16,90 Z" fill="#3a2a1c"/>
<path d="M12,86 L-16,87" stroke="#2a1c12" stroke-width=".5"/>
</g>
</g>
<g class="e2087" id="leg-r-2087">
<path d="M16,2 C-16,8 -26,50 -22,112 L6,114 C10,70 16,28 20,6 Z" fill="url(#drab)"/>
<path d="M8,96 C-8,100 -22,108 -20,128 L4,130 C10,114 12,102 14,98 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<path d="M6,104 L-16,108" stroke="#8a9484" stroke-width=".4"/>
<path d="M4,116 L-14,119" stroke="#8a9484" stroke-width=".4"/>
<circle cx="-2" cy="102" r="1.3" fill="#9aa494"/>
<g transform="translate(-8,113)">
<path d="M16,8 C-12,12 -16,50 -12,88 L10,90 C14,56 18,20 20,10 Z" fill="url(#drab)"/>
<path d="M14,78 L-18,80 L-20,92 L16,92 Z" fill="#2a2c28" stroke="#111" stroke-width=".4"/>
<path d="M12,86 H-16" stroke="#444" stroke-width=".4"/>
<path d="M8,78 L6,68 L-8,68 L-12,78" fill="#3a3c38"/>
</g>
</g>
<g class="e1632" id="boot-r-1632">
<g transform="translate(-8,113)">
<path d="M18,-6 C-12,0 -18,20 -16,50 C-14,78 -12,92 -10,96 L12,96 C16,70 20,30 22,0 Z" fill="url(#boot1632)" stroke="#1a100c" stroke-width=".5"/>
<path d="M20,-8 C0,-16 -16,-8 -18,4 L16,8 Z" fill="#5a3828"/>
<path d="M12,96 L-18,97 L-20,106 L16,106 Z" fill="#2a1810"/>
<path d="M16,98 L26,100 L24,103 L14,100" fill="#4a4e56"/>
<circle cx="26" cy="101" r="2.2" fill="#5a5e66" stroke="#222" stroke-width=".4"/>
</g>
</g>
</g>
<!-- ========== LEFT ARM (figure's left, drawn first) ========== -->
<g id="ap-arm-l" transform="translate(248,176)">
<g id="arm-l-u" transform="rotate(0)">
<rect x="-9" y="-4" width="18" height="56" rx="8" fill="url(#skin)"/>
<circle r="9" fill="#c9a07a"/>
<!-- pauldron / sleeve overlays on upper arm -->
<g class="e1632" id="pauldron-l-1632">
<path d="M-16,-8 C-18,10 -12,22 0,24 C14,22 18,8 16,-8 C8,-18 -8,-18 -16,-8 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".6"/>
<path d="M-15,16 C-14,30 -8,38 0,40 C10,38 15,28 14,16" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M-13,36 C-12,46 -6,52 0,53 C8,52 12,44 12,36" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M-10,4 L12,4" stroke="#6a6e78" stroke-width=".4"/>
<circle cx="-6" cy="-2" r="1.3" fill="#8a8e96"/>
<circle cx="6" cy="-2" r="1.3" fill="#8a8e96"/>
</g>
<g class="e1632">
<path d="M-11,20 C-12,36 -10,50 -8,54 L8,54 C10,36 10,22 9,18 Z" fill="url(#buff)" opacity=".9"/>
</g>
<g class="e1916" id="sleeve-l-1916">
<path d="M-12,-6 C-14,16 -12,40 -10,54 L10,54 C12,36 13,12 11,-6 Z" fill="url(#khaki)"/>
<path d="M-8,-4 L8,-4" stroke="#c2a050" stroke-width="1.2"/>
<circle cx="0" cy="-4" r="1.5" fill="#c2a050"/>
</g>
<g class="e2087" id="deltoid-l-2087">
<path d="M-15,-6 C-17,12 -12,24 0,26 C13,24 17,10 15,-6 C8,-16 -8,-16 -15,-6 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<path d="M-13,18 C-12,32 -6,40 0,41 C8,40 13,30 12,18" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<path d="M-8,2 L10,2" stroke="#8a9484" stroke-width=".4"/>
<circle cx="0" cy="6" r="1.2" fill="#9aa494"/>
<path d="M-11,22 C-12,40 -10,54 -8,56 L8,56 C10,40 10,24 9,20 Z" fill="url(#drab)"/>
</g>
<g id="arm-l-e" transform="translate(0,52)">
<circle r="7.5" fill="#c9a07a"/>
<g id="arm-l-f" transform="rotate(0)">
<rect x="-7" y="-2" width="14" height="48" rx="6" fill="url(#skin)"/>
<g class="e1632" id="vambrace-l-1632">
<path d="M-9,2 L9,2 L8,40 L-8,40 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M-10,-4 C-12,4 -8,10 0,11 C8,10 12,4 10,-4 C6,-10 -6,-10 -10,-4 Z" fill="url(#plate)"/>
<path d="M-6,14 L6,14 M-6,24 L6,24" stroke="#6a6e78" stroke-width=".4"/>
</g>
<g class="e1916">
<path d="M-8,0 L8,0 L7,38 L-7,38 Z" fill="url(#khaki)"/>
<path d="M-8,34 L8,34 L7,44 L-7,44 Z" fill="#8a7850"/>
</g>
<g class="e2087" id="forearm-l-2087">
<path d="M-8,0 L8,0 L7,40 L-7,40 Z" fill="url(#drab)"/>
<path d="M-8,8 L8,8 L7,34 L-7,34 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".4"/>
<path d="M-5,14 L5,14 M-5,22 L5,22" stroke="#8a9484" stroke-width=".35"/>
</g>
<g id="arm-l-h" transform="translate(0,46)">
<!-- hand flesh -->
<path d="M-6,0 C-8,6 -6,14 0,16 C6,14 8,6 6,0 C4,-3 -4,-3 -6,0 Z" fill="url(#skin)"/>
<g class="e1632" id="gauntlet-l-1632">
<path d="M-8,-6 L8,-6 L9,4 L-9,4 Z" fill="url(#plate)"/>
<path d="M-7,3 C-9,10 -6,18 0,19 C6,18 9,10 7,3 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".4"/>
<path d="M-5,8 L5,8 M-4,13 L4,13" stroke="#6a6e78" stroke-width=".35"/>
</g>
<g class="e2087" id="glove-l-2087">
<path d="M-7,-2 C-9,6 -6,16 0,17 C6,16 9,6 7,-2 Z" fill="#3a3c38" stroke="#1a1a18" stroke-width=".4"/>
<path d="M-5,6 L5,6" stroke="#6a6e68" stroke-width=".4"/>
</g>
</g>
</g>
</g>
</g>
</g>
<!-- ========== TORSO ========== -->
<g id="ap-torso">
<!-- flesh torso (neck root / under kit) -->
<path d="M168,176 C150,190 148,230 158,268 C166,292 180,302 200,304 C220,302 234,292 242,268 C252,230 250,190 232,176 Z" fill="url(#skin)"/>
<!-- 1632 buff coat skirt + cuirass -->
<g class="e1632" id="cuirass-1632">
<path id="buff-skirt" d="M164,268 C160,292 150,318 148,336 L200,342 L252,336 C250,318 240,292 236,268 Z" fill="url(#buff)"/>
<path d="M164,268 C168,286 184,298 200,300 C216,298 232,286 236,268" fill="none" stroke="#6a4a28" stroke-width="1"/>
<!-- gorget -->
<g id="gorget-1632">
<path d="M176,164 C170,178 176,190 200,194 C224,190 230,178 224,164 C216,158 184,158 176,164 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".6"/>
<path d="M184,176 C190,184 210,184 216,176" fill="none" stroke="#6a6e78" stroke-width=".45"/>
<circle cx="200" cy="186" r="1.5" fill="#8a8e96"/>
</g>
<!-- breastplate -->
<path id="breast-1632" d="M170,178 C156,196 154,228 160,258 C166,280 180,292 200,296 C220,292 234,280 240,258 C246,228 244,196 230,178 C220,172 180,172 170,178 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".7"/>
<!-- medial ridge -->
<path d="M200,180 L200,292" stroke="#8a8e98" stroke-width="1.2" opacity=".55"/>
<path d="M200,180 L200,292" stroke="#1a1c20" stroke-width=".35"/>
<!-- fauld lames -->
<path d="M164,278 C176,292 224,292 236,278 C232,298 220,308 200,310 C180,308 168,298 164,278 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M166,300 C178,312 222,312 234,300 C228,316 216,322 200,324 C184,322 172,316 166,300 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M172,196 C168,220 170,248 176,270" fill="none" stroke="#6a6e78" stroke-width=".4" opacity=".5"/>
<path d="M228,196 C232,220 230,248 224,270" fill="none" stroke="#1a1c20" stroke-width=".4" opacity=".45"/>
<!-- rivets -->
<circle cx="176" cy="200" r="1.4" fill="#8a8e96"/>
<circle cx="224" cy="200" r="1.4" fill="#8a8e96"/>
<circle cx="174" cy="248" r="1.4" fill="#8a8e96"/>
<circle cx="226" cy="248" r="1.4" fill="#8a8e96"/>
<circle cx="184" cy="286" r="1.3" fill="#8a8e96"/>
<circle cx="216" cy="286" r="1.3" fill="#8a8e96"/>
<!-- armscye leather -->
<path d="M168,186 C160,200 160,214 168,222" fill="none" stroke="#6a4228" stroke-width="2"/>
<path d="M232,186 C240,200 240,214 232,222" fill="none" stroke="#6a4228" stroke-width="2"/>
</g>
<!-- 1916 tunic + 1908 webbing -->
<g class="e1916" id="tunic-1916">
<path d="M166,170 C150,186 148,230 156,272 C164,298 178,312 200,314 C222,312 236,298 244,272 C252,230 250,186 234,170 L222,166 L178,166 Z" fill="url(#khaki)"/>
<!-- collar stand-and-fall -->
<path d="M184,166 L200,176 L216,166 L222,170 L200,182 L178,170 Z" fill="#8a7854" stroke="#5a4c34" stroke-width=".4"/>
<!-- front opening -->
<path d="M200,182 L200,308" stroke="#5a4c34" stroke-width=".5"/>
<!-- brass buttons -->
<circle cx="200" cy="196" r="2" fill="#c2a050" stroke="#6a5020" stroke-width=".3"/>
<circle cx="200" cy="214" r="2" fill="#c2a050" stroke="#6a5020" stroke-width=".3"/>
<circle cx="200" cy="232" r="2" fill="#c2a050" stroke="#6a5020" stroke-width=".3"/>
<circle cx="200" cy="250" r="2" fill="#c2a050" stroke="#6a5020" stroke-width=".3"/>
<!-- breast pockets -->
<path d="M170,214 H192 V236 H170 Z" fill="none" stroke="#5a4c34" stroke-width=".55"/>
<path d="M168,214 Q181,220 194,214" fill="#8a7854" stroke="#5a4c34" stroke-width=".45"/>
<path d="M208,214 H230 V236 H208 Z" fill="none" stroke="#5a4c34" stroke-width=".55"/>
<path d="M206,214 Q219,220 232,214" fill="#8a7854" stroke="#5a4c34" stroke-width=".45"/>
<!-- shoulder straps -->
<path d="M168,170 L186,168 L186,178 L170,180 Z" fill="#8a7854" stroke="#5a4c34" stroke-width=".4"/>
<path d="M232,170 L214,168 L214,178 L230,180 Z" fill="#8a7854" stroke="#5a4c34" stroke-width=".4"/>
<circle cx="176" cy="174" r="1.4" fill="#c2a050"/>
<circle cx="224" cy="174" r="1.4" fill="#c2a050"/>
<!-- 1908 belt + braces + 5+5 pouches -->
<g id="webbing-1908">
<path d="M158,268 H242" stroke="#c4b07a" stroke-width="7"/>
<path d="M158,268 H242" stroke="#8a7348" stroke-width=".4"/>
<rect x="194" y="262" width="12" height="12" rx="1" fill="#c2a050" stroke="#6a5020" stroke-width=".4"/>
<!-- braces -->
<path d="M176,176 L168,268" stroke="url(#web)" stroke-width="4.5"/>
<path d="M224,176 L232,268" stroke="url(#web)" stroke-width="4.5"/>
<!-- left bank of five (figure's right, viewer's left) -->
<g id="pouches-1908-right-bank" fill="url(#web)" stroke="#6a5838" stroke-width=".4">
<rect x="160" y="250" width="10" height="22" rx="1.2"/>
<rect x="171" y="250" width="10" height="22" rx="1.2"/>
<rect x="182" y="250" width="10" height="22" rx="1.2"/>
<path d="M160,250 H170 L168,256 H162 Z"/>
<path d="M171,250 H181 L179,256 H173 Z"/>
<path d="M182,250 H192 L190,256 H184 Z"/>
</g>
<!-- two more to make five: slightly stacked look -->
<g fill="url(#web)" stroke="#6a5838" stroke-width=".4">
<rect x="165" y="248" width="10" height="22" rx="1.2" opacity=".95"/>
<rect x="176" y="248" width="10" height="22" rx="1.2" opacity=".95"/>
</g>
<!-- right bank of five -->
<g id="pouches-1908-left-bank" fill="url(#web)" stroke="#6a5838" stroke-width=".4">
<rect x="208" y="250" width="10" height="22" rx="1.2"/>
<rect x="219" y="250" width="10" height="22" rx="1.2"/>
<rect x="230" y="250" width="10" height="22" rx="1.2"/>
<path d="M208,250 H218 L216,256 H210 Z"/>
<path d="M219,250 H229 L227,256 H221 Z"/>
<path d="M230,250 H240 L238,256 H232 Z"/>
<rect x="213" y="248" width="10" height="22" rx="1.2"/>
<rect x="224" y="248" width="10" height="22" rx="1.2"/>
</g>
<!-- bayonet frog + 1907 blade -->
<path d="M148,262 L158,262 L160,292 L146,292 Z" fill="#8a7348"/>
<path d="M150,288 L154,288 L158,360 L148,360 Z" fill="#6a7068" stroke="#333" stroke-width=".4"/>
<path d="M148,356 H158 L156,368 H150 Z" fill="#4a4030"/>
</g>
</g>
<!-- 2087 Type 70 IPE cuirass — same tree as 1632 -->
<g class="e2087" id="cuirass-2087">
<path d="M166,170 C152,186 150,228 158,268 C166,296 180,310 200,312 C220,310 234,296 242,268 C250,228 248,186 234,170 Z" fill="url(#drab)"/>
<g id="gorget-2087">
<path d="M178,166 C172,180 178,190 200,193 C222,190 228,180 222,166 C214,160 186,160 178,166 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".55"/>
<path d="M186,176 C192,184 208,184 214,176" fill="none" stroke="#8a9484" stroke-width=".4"/>
</g>
<path id="breast-2087" d="M172,180 C158,198 156,228 162,256 C168,278 182,290 200,294 C218,290 232,278 238,256 C244,228 242,198 228,180 C218,174 182,174 172,180 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".7"/>
<!-- medial ridge: descent from the Küriss -->
<path d="M200,182 L200,290" stroke="#a0aa9a" stroke-width="1.15" opacity=".5"/>
<path d="M200,182 L200,290" stroke="#1a1e1a" stroke-width=".35"/>
<!-- inset plate seam (SAPI analogue) -->
<path d="M180,196 L220,196 L224,250 L200,268 L176,250 Z" fill="none" stroke="#c8d2c4" stroke-width=".55" opacity=".7"/>
<circle cx="182" cy="200" r="1.5" fill="#b0b8ac"/>
<circle cx="218" cy="200" r="1.5" fill="#b0b8ac"/>
<circle cx="180" cy="246" r="1.5" fill="#b0b8ac"/>
<circle cx="220" cy="246" r="1.5" fill="#b0b8ac"/>
<!-- side plates -->
<path d="M160,210 L170,206 L174,250 L162,256 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".4"/>
<path d="M240,210 L230,206 L226,250 L238,256 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".4"/>
<!-- fauld / cummerbund -->
<path d="M164,276 C176,292 224,292 236,276 C232,300 218,310 200,312 C182,310 168,300 164,276 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<!-- pouches in two banks: 1908 descent -->
<g id="pouches-2087" fill="#3e4238" stroke="#1a1e1a" stroke-width=".4">
<rect x="160" y="268" width="11" height="18" rx="1.5"/>
<rect x="172" y="268" width="11" height="18" rx="1.5"/>
<rect x="184" y="268" width="11" height="18" rx="1.5"/>
<rect x="205" y="268" width="11" height="18" rx="1.5"/>
<rect x="217" y="268" width="11" height="18" rx="1.5"/>
<rect x="229" y="268" width="11" height="18" rx="1.5"/>
<path d="M160,268 H171 L169,273 H162 Z" fill="#4a4e44"/>
<path d="M172,268 H183 L181,273 H174 Z" fill="#4a4e44"/>
<path d="M184,268 H195 L193,273 H186 Z" fill="#4a4e44"/>
<path d="M205,268 H216 L214,273 H207 Z" fill="#4a4e44"/>
<path d="M217,268 H228 L226,273 H219 Z" fill="#4a4e44"/>
<path d="M229,268 H240 L238,273 H231 Z" fill="#4a4e44"/>
</g>
<path d="M194,286 H206" stroke="#8a9484" stroke-width="1"/>
</g>
</g>
<!-- ========== NECK / HEAD (fixed) ========== -->
<g id="ap-neck">
<path d="M186,148 L214,148 L218,174 L182,174 Z" fill="url(#skin)"/>
</g>
<g id="ap-head">
<!-- ears (same man) -->
<ellipse cx="174" cy="124" rx="5" ry="8" fill="#c9a07a" stroke="#8a6248" stroke-width=".4"/>
<ellipse cx="226" cy="124" rx="5" ry="8" fill="#c9a07a" stroke="#8a6248" stroke-width=".4"/>
<!-- cranium + jaw -->
<path d="M176,118 C176,98 186,88 200,88 C214,88 224,98 224,118 C224,132 218,144 210,148 L200,151 L190,148 C182,144 176,132 176,118 Z" fill="url(#skin)"/>
<!-- hair base (short, always) -->
<path d="M178,112 C178,94 188,86 200,86 C212,86 222,94 222,112 C218,100 210,94 200,94 C190,94 182,100 178,112 Z" fill="#3a2a20"/>
<g class="e1632" id="hair-1632">
<path d="M176,120 C170,118 172,108 176,104" fill="none" stroke="#3a2a20" stroke-width="4" stroke-linecap="round"/>
<path d="M224,120 C230,118 228,108 224,104" fill="none" stroke="#3a2a20" stroke-width="4" stroke-linecap="round"/>
</g>
<!-- face -->
<path d="M188,120 C189,123 191,124 193,123" fill="none" stroke="#5a3a28" stroke-width=".7" stroke-linecap="round"/>
<path d="M212,120 C211,123 209,124 207,123" fill="none" stroke="#5a3a28" stroke-width=".7" stroke-linecap="round"/>
<ellipse cx="190.5" cy="122.5" rx="2.1" ry="2.3" fill="#f4e8d8"/>
<ellipse cx="209.5" cy="122.5" rx="2.1" ry="2.3" fill="#f4e8d8"/>
<ellipse cx="190.7" cy="122.7" rx="1.15" ry="1.25" fill="#3a2a18"/>
<ellipse cx="209.3" cy="122.7" rx="1.15" ry="1.25" fill="#3a2a18"/>
<circle cx="191.2" cy="122.3" r=".35" fill="#f4e8d8"/>
<circle cx="209.8" cy="122.3" r=".35" fill="#f4e8d8"/>
<path d="M200,124 L198,132 L202,132 Z" fill="#c09070"/>
<path d="M198,132 Q200,134 202,132" fill="none" stroke="#8a6248" stroke-width=".5"/>
<!-- moustache (same man) -->
<path d="M192,138 Q200,142 208,138" fill="none" stroke="#3a2a20" stroke-width="1.6" stroke-linecap="round"/>
<g class="e1632" id="beard-1632">
<path d="M190,142 C192,152 208,152 210,142 C206,148 194,148 190,142 Z" fill="#3a2a20"/>
</g>
<path d="M196,140 Q200,143 204,140" fill="none" stroke="#8a4a40" stroke-width=".6"/>
<!-- 1632 close helmet, visor raised -->
<g class="e1632" id="helm-1632">
<path d="M172,116 C172,90 184,78 200,76 C216,78 228,90 228,116 C228,128 222,136 216,140 L184,140 C178,136 172,128 172,116 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".7"/>
<!-- comb -->
<path d="M200,76 L200,118" stroke="#8a8e98" stroke-width="2.2"/>
<path d="M198,76 C200,70 200,70 202,76 L202,118 L198,118 Z" fill="url(#plateEdge)"/>
<!-- face opening -->
<path d="M182,118 C184,132 192,142 200,144 C208,142 216,132 218,118 C214,122 206,126 200,126 C194,126 186,122 182,118 Z" fill="#c9a07a"/>
<!-- re-draw lower face in opening so helmet doesn't erase him — clip by covering sides only -->
<!-- bevor -->
<path d="M180,136 C178,148 186,158 200,160 C214,158 222,148 220,136 C212,146 188,146 180,136 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".55"/>
<path d="M188,148 Q200,154 212,148" fill="none" stroke="#6a6e78" stroke-width=".4"/>
<!-- raised visor -->
<path d="M176,100 C180,78 190,68 200,66 C210,68 220,78 224,100 C216,88 184,88 176,100 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".6"/>
<path d="M182,90 Q200,82 218,90" fill="none" stroke="#1a1c20" stroke-width=".8"/>
<path d="M186,86 Q200,80 214,86" fill="none" stroke="#6a6e78" stroke-width=".4"/>
<!-- pivots -->
<circle cx="176" cy="118" r="3" fill="#4a4e56" stroke="#111" stroke-width=".5"/>
<circle cx="224" cy="118" r="3" fill="#4a4e56" stroke="#111" stroke-width=".5"/>
<circle cx="176" cy="118" r="1.2" fill="#8a8e96"/>
<circle cx="224" cy="118" r="1.2" fill="#8a8e96"/>
<!-- lining edge -->
<path d="M184,140 Q200,146 216,140" fill="none" stroke="#5a3a28" stroke-width="1.2"/>
</g>
<!-- 1916 Mk I Brodie -->
<g class="e1916" id="brodie-mk1">
<ellipse cx="200" cy="112" rx="52" ry="8" fill="url(#brodie)" stroke="#2a2a1c" stroke-width=".7"/>
<path d="M160,110 C162,86 178,74 200,72 C222,74 238,86 240,110 C230,100 170,100 160,110 Z" fill="url(#brodie)" stroke="#2a2a1c" stroke-width=".55"/>
<ellipse cx="200" cy="108" rx="28" ry="6" fill="#4a4830" opacity=".35"/>
<!-- applied rim -->
<ellipse cx="200" cy="114" rx="52" ry="7" fill="none" stroke="#3a3828" stroke-width="1.2"/>
<!-- liner lugs -->
<circle cx="168" cy="112" r="2" fill="#3a3828"/>
<circle cx="232" cy="112" r="2" fill="#3a3828"/>
<!-- chinstrap -->
<path d="M168,114 Q170,148 186,154" fill="none" stroke="#5a3a22" stroke-width="1.3"/>
<path d="M232,114 Q230,148 214,154" fill="none" stroke="#5a3a22" stroke-width="1.3"/>
<path d="M186,154 Q200,158 214,154" fill="none" stroke="#5a3a22" stroke-width="1.4"/>
</g>
<!-- 2087 Type 70 helmet — same parts as 1632: skull, brim, visor, nape already in back, pivots -->
<g class="e2087" id="helm-2087">
<path d="M170,114 C170,90 182,76 200,74 C218,76 230,90 230,114 C230,128 222,138 214,142 L186,142 C178,138 170,128 170,114 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".65"/>
<!-- short brim: Brodie descendant -->
<path d="M164,114 C166,108 178,106 200,106 C222,106 234,108 236,114 C228,118 172,118 164,114 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<!-- NVG shroud (small, issued, not a game HUD) -->
<rect x="192" y="80" width="16" height="8" rx="1" fill="#2a2e2a" stroke="#111" stroke-width=".4"/>
<rect x="196" y="82" width="8" height="4" fill="#1a1c1a"/>
<!-- side rails -->
<rect x="168" y="108" width="8" height="18" rx="1" fill="#2a2e2a"/>
<rect x="224" y="108" width="8" height="18" rx="1" fill="#2a2e2a"/>
<path d="M170,112 H174 M170,116 H174 M170,120 H174" stroke="#6a6e68" stroke-width=".4"/>
<path d="M226,112 H230 M226,116 H230 M226,120 H230" stroke="#6a6e68" stroke-width=".4"/>
<!-- visor: AlON, face still readable -->
<path d="M178,112 C180,128 188,136 200,138 C212,136 220,128 222,112 C214,118 186,118 178,112 Z" fill="url(#visor)" stroke="#8a9484" stroke-width=".45"/>
<!-- pivots / hinges -->
<circle cx="176" cy="114" r="2.4" fill="#4a4e48" stroke="#111" stroke-width=".4"/>
<circle cx="224" cy="114" r="2.4" fill="#4a4e48" stroke="#111" stroke-width=".4"/>
<!-- chinstrap -->
<path d="M174,130 Q178,150 190,154" fill="none" stroke="#2a2c28" stroke-width="1.3"/>
<path d="M226,130 Q222,150 210,154" fill="none" stroke="#2a2c28" stroke-width="1.3"/>
<path d="M190,154 Q200,157 210,154" fill="none" stroke="#2a2c28" stroke-width="1.3"/>
</g>
</g>
<!-- ========== RIGHT ARM (in front) ========== -->
<g id="ap-arm-r" transform="translate(152,176)">
<g id="arm-r-u" transform="rotate(0)">
<rect x="-9" y="-4" width="18" height="56" rx="8" fill="url(#skin)"/>
<circle r="9" fill="#c9a07a"/>
<g class="e1632" id="pauldron-r-1632">
<path d="M16,-8 C18,10 12,22 0,24 C-14,22 -18,8 -16,-8 C-8,-18 8,-18 16,-8 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".6"/>
<path d="M15,16 C14,30 8,38 0,40 C-10,38 -15,28 -14,16" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M13,36 C12,46 6,52 0,53 C-8,52 -12,44 -12,36" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M10,4 L-12,4" stroke="#6a6e78" stroke-width=".4"/>
<circle cx="6" cy="-2" r="1.3" fill="#8a8e96"/>
<circle cx="-6" cy="-2" r="1.3" fill="#8a8e96"/>
</g>
<g class="e1632">
<path d="M11,20 C12,36 10,50 8,54 L-8,54 C-10,36 -10,22 -9,18 Z" fill="url(#buff)" opacity=".9"/>
</g>
<g class="e1916" id="sleeve-r-1916">
<path d="M12,-6 C14,16 12,40 10,54 L-10,54 C-12,36 -13,12 -11,-6 Z" fill="url(#khaki)"/>
<path d="M8,-4 L-8,-4" stroke="#c2a050" stroke-width="1.2"/>
<circle cx="0" cy="-4" r="1.5" fill="#c2a050"/>
</g>
<g class="e2087" id="deltoid-r-2087">
<path d="M15,-6 C17,12 12,24 0,26 C-13,24 -17,10 -15,-6 C-8,-16 8,-16 15,-6 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<path d="M13,18 C12,32 6,40 0,41 C-8,40 -13,30 -12,18" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".5"/>
<path d="M8,2 L-10,2" stroke="#8a9484" stroke-width=".4"/>
<circle cx="0" cy="6" r="1.2" fill="#9aa494"/>
<path d="M11,22 C12,40 10,54 8,56 L-8,56 C-10,40 -10,24 -9,20 Z" fill="url(#drab)"/>
</g>
<g id="arm-r-e" transform="translate(0,52)">
<circle r="7.5" fill="#c9a07a"/>
<g id="arm-r-f" transform="rotate(0)">
<rect x="-7" y="-2" width="14" height="48" rx="6" fill="url(#skin)"/>
<g class="e1632" id="vambrace-r-1632">
<path d="M9,2 L-9,2 L-8,40 L8,40 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".5"/>
<path d="M10,-4 C12,4 8,10 0,11 C-8,10 -12,4 -10,-4 C-6,-10 6,-10 10,-4 Z" fill="url(#plate)"/>
<path d="M6,14 L-6,14 M6,24 L-6,24" stroke="#6a6e78" stroke-width=".4"/>
</g>
<g class="e1916">
<path d="M8,0 L-8,0 L-7,38 L7,38 Z" fill="url(#khaki)"/>
<path d="M8,34 L-8,34 L-7,44 L7,44 Z" fill="#8a7850"/>
</g>
<g class="e2087" id="forearm-r-2087">
<path d="M8,0 L-8,0 L-7,40 L7,40 Z" fill="url(#drab)"/>
<path d="M8,8 L-8,8 L-7,34 L7,34 Z" fill="url(#comp)" stroke="#1a1e1a" stroke-width=".4"/>
<path d="M5,14 L-5,14 M5,22 L-5,22" stroke="#8a9484" stroke-width=".35"/>
</g>
<g id="arm-r-h" transform="translate(0,46)">
<path d="M6,0 C8,6 6,14 0,16 C-6,14 -8,6 -6,0 C-4,-3 4,-3 6,0 Z" fill="url(#skin)"/>
<g class="e1632" id="gauntlet-r-1632">
<path d="M8,-6 L-8,-6 L-9,4 L9,4 Z" fill="url(#plate)"/>
<path d="M7,3 C9,10 6,18 0,19 C-6,18 -9,10 -7,3 Z" fill="url(#plate)" stroke="#0d0d10" stroke-width=".4"/>
<path d="M5,8 L-5,8 M4,13 L-4,13" stroke="#6a6e78" stroke-width=".35"/>
</g>
<g class="e2087" id="glove-r-2087">
<path d="M7,-2 C9,6 6,16 0,17 C-6,16 -9,6 -7,-2 Z" fill="#3a3c38" stroke="#1a1a18" stroke-width=".4"/>
<path d="M5,6 L-5,6" stroke="#6a6e68" stroke-width=".4"/>
</g>
<!-- ===== WEAPONS (right wrist) ===== -->
<g class="e1632" id="wheellock" transform="rotate(-18) translate(-8,4)">
<!-- stock -->
<path d="M8,4 C16,8 28,10 36,6 L34,0 C24,4 14,2 8,-2 Z" fill="url(#walnut)"/>
<path d="M6,-2 L8,6 L-40,2 L-42,-4 Z" fill="#5a3a22"/>
<!-- barrel, octagonal then round -->
<path d="M-42,-4 L-118,-10 L-118,-4 L-42,2 Z" fill="#4a4e56" stroke="#1a1c20" stroke-width=".5"/>
<path d="M-42,-4 L-70,-7" stroke="#8a8e96" stroke-width=".4"/>
<!-- ramrod -->
<path d="M-40,3 L-110,0" stroke="#3a2a1c" stroke-width="1.1"/>
<!-- lockplate + wheel (the dating feature) -->
<rect x="-8" y="-8" width="22" height="14" rx="1" fill="#3a3e46" stroke="#111" stroke-width=".4"/>
<circle cx="2" cy="-2" r="5.2" fill="#2a2c30" stroke="#8a8e96" stroke-width=".7"/>
<circle cx="2" cy="-2" r="2.2" fill="#1a1c20"/>
<!-- dog / cock with pyrite jaws -->
<path d="M8,-6 L14,-16 L10,-17 L6,-8" fill="#4a4e56" stroke="#111" stroke-width=".4"/>
<path d="M12,-18 L16,-17 L15,-14 L11,-15 Z" fill="#5a4030"/>
<!-- mainspring -->
<path d="M-6,4 Q8,10 16,2" fill="none" stroke="#2a2c30" stroke-width="1.1"/>
<!-- trigger -->
<path d="M4,6 Q6,12 2,14" fill="none" stroke="#2a2c30" stroke-width="1"/>
<path d="M0,6 H12" stroke="#2a2c30" stroke-width=".8"/>
<!-- butt cap -->
<ellipse cx="36" cy="4" rx="5" ry="4" fill="#3a3e46"/>
</g>
<g class="e1916" id="smle-mk3" transform="rotate(8) translate(4,2)">
<!-- butt -->
<path d="M16,0 L48,8 L50,18 L18,14 Z" fill="url(#walnut)"/>
<path d="M46,8 L52,6 L54,20 L48,18 Z" fill="#3a3e42"/>
<!-- action / receiver -->
<path d="M-10,-2 L18,0 L18,12 L-10,10 Z" fill="#3a3e42"/>
<!-- charger bridge / rear-sight ears -->
<path d="M4,-6 L8,-6 L8,0 L4,0 Z" fill="#2a2c30"/>
<path d="M10,-8 L14,-8 L14,0 L10,0 Z" fill="#2a2c30"/>
<path d="M6,-10 L12,-12 L12,-8 L6,-7 Z" fill="#2a2c30"/>
<!-- bolt handle -->
<path d="M2,4 L12,16" stroke="#2a2c30" stroke-width="2.2" stroke-linecap="round"/>
<circle cx="12" cy="16" r="3" fill="#2a2c30"/>
<!-- magazine (SMLE box, not curved AK) -->
<path d="M-6,10 L10,11 L8,28 L-4,26 Z" fill="#2a2c30" stroke="#111" stroke-width=".4"/>
<path d="M-2,14 H6" stroke="#5a5e62" stroke-width=".4"/>
<!-- forestock -->
<path d="M-10,0 L-90,-6 L-88,6 L-10,10 Z" fill="url(#walnut)"/>
<!-- barrel -->
<path d="M-88,-4 L-132,-8 L-132,-3 L-88,2 Z" fill="#4a4e52"/>
<!-- nosecap + boss -->
<path d="M-96,-8 L-86,-7 L-85,8 L-96,8 Z" fill="#3a3e42"/>
<circle cx="-90" cy="8" r="2" fill="#2a2c30"/>
<!-- rear band -->
<path d="M-40,-4 L-36,-4 L-35,8 L-40,8 Z" fill="#3a3e42"/>
<!-- sling swivels -->
<circle cx="28" cy="16" r="2" fill="none" stroke="#2a2c30" stroke-width=".8"/>
<circle cx="-38" cy="8" r="2" fill="none" stroke="#2a2c30" stroke-width=".8"/>
<path d="M28,16 Q-6,28 -38,8" fill="none" stroke="#4a3828" stroke-width="1.1"/>
<!-- trigger / guard -->
<path d="M4,12 Q8,22 0,22 Q-2,14 0,10" fill="none" stroke="#2a2c30" stroke-width="1.1"/>
</g>
<g class="e2087" id="l50a1" transform="rotate(-12) translate(-4,6)">
<!-- stock (short, collapsing) -->
<path d="M18,0 L42,4 L42,14 L18,12 Z" fill="#2a2c2a" stroke="#111" stroke-width=".4"/>
<path d="M30,2 L30,16" stroke="#4a4e48" stroke-width=".5"/>
<path d="M36,3 L36,15" stroke="#4a4e48" stroke-width=".5"/>
<!-- receiver -->
<path d="M-16,-4 L20,-2 L20,14 L-16,12 Z" fill="#3a3e3a" stroke="#111" stroke-width=".45"/>
<!-- ejection / charging -->
<rect x="-4" y="-2" width="12" height="4" fill="#1a1c1a"/>
<path d="M8,0 L16,-8" stroke="#2a2c2a" stroke-width="1.6" stroke-linecap="round"/>
<!-- pistol grip -->
<path d="M6,12 L14,12 L18,30 L8,30 Z" fill="#2a2c2a"/>
<path d="M8,22 Q12,20 14,24" fill="none" stroke="#111" stroke-width=".4"/>
<!-- trigger -->
<path d="M4,14 Q6,22 0,22" fill="none" stroke="#1a1c1a" stroke-width="1"/>
<rect x="0" y="12" width="10" height="2" fill="#1a1c1a"/>
<!-- SHORT WIDE mag: cased-telescoped 6.8 -->
<path d="M-10,12 L12,13 L14,28 L-8,26 Z" fill="#2a2c2a" stroke="#111" stroke-width=".45"/>
<path d="M-6,16 H10 M-5,20 H10" stroke="#4a4e48" stroke-width=".4"/>
<!-- handguard -->
<path d="M-16,0 L-70,-4 L-68,10 L-16,12 Z" fill="#323632" stroke="#111" stroke-width=".4"/>
<path d="M-24,0 L-22,10 M-36,0 L-34,10 M-48,-2 L-46,10 M-58,-2 L-56,9" stroke="#1a1c1a" stroke-width=".45"/>
<!-- barrel + flash hider -->
<path d="M-70,-2 L-108,-6 L-108,-1 L-70,4 Z" fill="#5a5e5a"/>
<path d="M-108,-7 L-118,-8 L-118,0 L-108,1 Z" fill="#3a3e3a"/>
<path d="M-110,-6 H-116 M-110,-3 H-116" stroke="#1a1c1a" stroke-width=".4"/>
<!-- low optic (tube, not a cinema HUD) -->
<rect x="-6" y="-14" width="22" height="8" rx="2" fill="#1a1c1a" stroke="#444" stroke-width=".4"/>
<circle cx="5" cy="-10" r="2.4" fill="#2a4038" stroke="#6a8a7a" stroke-width=".4"/>
<!-- backup iron -->
<path d="M-14,-8 L-12,-14 L-10,-8" fill="none" stroke="#2a2c2a" stroke-width="1"/>
<!-- sling loop -->
<circle cx="38" cy="10" r="2" fill="none" stroke="#4a4e48" stroke-width=".7"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
<div class="control">
<label for="era">Drag to re-equip</label>
<input id="era" type="range" min="0" max="1000" value="0" step="1">
<div class="ticks"><span>1632 · Lützen</span><span>1916 · Mametz</span><span>2087 · Suwałki</span></div>
</div>
<div id="plaque">
<p id="pl-when">1632</p>
<p id="pl-where">Lützen, Electorate of Saxony</p>
<p id="pl-what">Three-quarter harness (Küriss)</p>
<p id="pl-mat">Blackened iron plate over a buff-leather coat: close helmet (visor raised), gorget, cuirass, pauldrons, vambraces, mitten gauntlets, tassets to the knee; heavy riding boots.</p>
<p id="pl-wpn">Wheellock pistol (Radschlosspistole), c.1630, and a pallasch on a baldric.</p>
</div>
</div>
<footer>The body is one drawing. Only the issuing changes.</footer>
</div>
<script>
(function () {
var slider = document.getElementById("era");
var whenEl = document.getElementById("pl-when");
var whereEl = document.getElementById("pl-where");
var whatEl = document.getElementById("pl-what");
var matEl = document.getElementById("pl-mat");
var wpnEl = document.getElementById("pl-wpn");
var kits1 = document.querySelectorAll(".e1632");
var kits2 = document.querySelectorAll(".e1916");
var kits3 = document.querySelectorAll(".e2087");
var armRU = document.getElementById("arm-r-u");
var armRF = document.getElementById("arm-r-f");
var armLU = document.getElementById("arm-l-u");
var armLF = document.getElementById("arm-l-f");
var pose = {
rU: [32, 18, 38],
rF: [-58, -22, -62],
lU: [-38, -28, -22],
lF: [52, 28, 34]
};
function lerp(a, b, t) { return a + (b - a) * t; }
function weights(x) {
if (x <= 0.5) {
var t = x / 0.5;
return { a: 1 - t, b: t, c: 0, t: t, span: 0 };
}
var t2 = (x - 0.5) / 0.5;
return { a: 0, b: 1 - t2, c: t2, t: t2, span: 1 };
}
function poseAt(x) {
var w = weights(x);
if (w.span === 0) {
return {
rU: lerp(pose.rU[0], pose.rU[1], w.t),
rF: lerp(pose.rF[0], pose.rF[1], w.t),
lU: lerp(pose.lU[0], pose.lU[1], w.t),
lF: lerp(pose.lF[0], pose.lF[1], w.t)
};
}
return {
rU: lerp(pose.rU[1], pose.rU[2], w.t),
rF: lerp(pose.rF[1], pose.rF[2], w.t),
lU: lerp(pose.lU[1], pose.lU[2], w.t),
lF: lerp(pose.lF[1], pose.lF[2], w.t)
};
}
var copy = {
e1: {
when: "1632",
where: "Lützen, Electorate of Saxony",
what: "Three-quarter harness (Küriss)",
mat: "Blackened iron plate over a buff-leather coat: close helmet (visor raised), gorget, cuirass, pauldrons, vambraces, mitten gauntlets, tassets to the knee; heavy riding boots.",
wpn: "Wheellock pistol (Radschlosspistole), c.1630, and a pallasch on a baldric."
},
mid12: {
when: "1632 — 1916",
where: "Between Lützen and Mametz",
what: "The harness coming off; service dress coming on",
mat: "Blackened iron and buff leather are leaving the same body; wool serge, cotton webbing and a Hadfield-steel bowl are arriving. Tassets and puttees occupy the thighs together.",
wpn: "The wheellock is leaving the right hand; the SMLE Mk III* is arriving across the body. The pallasch is fading from the hip."
},
e2: {
when: "1916",
where: "Mametz, Somme",
what: "1902 Pattern service dress and 1908 Pattern web equipment",
mat: "Wool serge tunic and trousers, cotton webbing (two banks of five pouches), spiral puttees, ankle ammunition boots. Mk I helmet of Hadfield manganese steel with an applied rim.",
wpn: "Short Magazine Lee-Enfield Mk III* and a Pattern 1907 bayonet in the frog."
},
mid23: {
when: "1916 — 2087",
where: "Between Mametz and the Suwałki Isthmus",
what: "The tin hat deepening; the cuirass returning",
mat: "Khaki serge and 1908 webbing are leaving; a rigid composite breastplate — the same silhouette as the 1632 cuirass — and a brimmed, nape-lamed helmet are arriving. The two abdominal pouch-banks remain.",
wpn: "The long SMLE is leaving the hands; a short 6.8mm cased-telescoped carbine is arriving."
},
e3: {
when: "2087",
where: "Suwałki Isthmus, Republic of Poland",
what: "Type 70 Integrated Protective Ensemble",
mat: "Boron-carbide strike face on UHMWPE backing in a rigid cuirass and deltoid cops; aramid gorget; aluminium-oxynitride visor in a nape-lamed composite helmet; FR field-drab combat dress; hard knee cops.",
wpn: "L50A1 6.8×46mm cased-telescoped carbine — note the short, wide magazine — with a tube optic and folding stock."
}
};
function plaque(x) {
if (x < 0.06) return copy.e1;
if (x < 0.44) return copy.mid12;
if (x < 0.56) return copy.e2;
if (x < 0.94) return copy.mid23;
return copy.e3;
}
function apply(raw) {
var x = (+raw) / 1000;
var w = weights(x);
var i;
for (i = 0; i < kits1.length; i++) kits1[i].style.opacity = w.a;
for (i = 0; i < kits2.length; i++) kits2[i].style.opacity = w.b;
for (i = 0; i < kits3.length; i++) kits3[i].style.opacity = w.c;
var p = poseAt(x);
armRU.setAttribute("transform", "rotate(" + p.rU + ")");
armRF.setAttribute("transform", "rotate(" + p.rF + ")");
armLU.setAttribute("transform", "rotate(" + p.lU + ")");
armLF.setAttribute("transform", "rotate(" + p.lF + ")");
var c = plaque(x);
whenEl.textContent = c.when;
whereEl.textContent = c.where;
whatEl.textContent = c.what;
matEl.textContent = c.mat;
wpnEl.textContent = c.wpn;
}
slider.addEventListener("input", function (e) { apply(e.target.value); });
apply(slider.value);
})();
</script>
</body>
</html>
2087 is the shakiest, because it is invented. The temptation I refused was a sealed full-face HUD and a powered exo-frame — both read as costume, and a sealed visor would have hidden the same face the first two eras are built around. I kept the visor as a short AlON panel you can still see through, and I kept the man standing under his own weight. I also knowingly kept one inaccuracy of omission on 1916: the large pack, entrenching tool and PH-hood satchel of a Somme rifleman are not drawn. At this scale they would bury the abdomen, which is exactly where the 1632 fauld has to turn into 1908 pouches and then into the Type 70 cummerbund — an illustrator’s problem, not a claim that a Mametz rifleman walked about in fighting order without them. On 1632 I raised the visor (a close helmet shut would have been equally correct in action) so the same man remains identifiable; a Savoyard/Totenkopf from the same Imperial arsenal would have been plausible and would have broken that read.