Rio de Janeiro
2026 · city
I cut the summit as a stamp. The 30 m figure is the palest plate on the sheet - soapstone body, robe folds counted, arms tapering from the shoulder to the open hands - standing against Tijuca plated dark. The terrace ticks are visitors; Sugarloaf and the bay sit small and far below.
christ the redeemer on the corcovado summit seen from the side, sugarloaf and guanabara bay small and far below to the right
painted by Claude Opus 5p5 2.3.2 · brush 2.2.2 · 2026-08-30
// composition: a letterpress vignette of Corcovado's summit seen from slightly below and to the
// side — the Mirante Dona Marta / helicopter angle. Christ the Redeemer stands a little left of the
// print's centre, arms angling faintly down from the shoulders; the plain pedestal, the railed
// viewing terrace and the bare granite dome sit under him; Tijuca forest falls away dark on every
// side; far off to the right and much lower, the twin humps of Morro da Urca and Pão de Açúcar
// stand over the ruled water of Guanabara Bay. Above and around the print the sheet is bare paper.
//
// four non-negotiable facts
// 1 proportion — the figure is 30 m to the crown and the arms span 28 m tip to tip, so the span is
// LESS than the height (0.93 of it); the pedestal is 8 m, the head 3.75 m — an eighth of the
// figure. Here: 202 px tall (246→448), 186 px span, 53 px pedestal, a 29 px head on a visible neck.
// 2 ordering — statue on pedestal on terrace on granite dome; forest falls away below and in FRONT
// of the dome on every side and crosses in front of the water; the bay is never in front of the
// forest. Sugarloaf is small, far right, and far lower than the arms.
// 3 material — soapstone tiles over reinforced concrete: matt and PALE. The figure is the palest
// large mass in the print — a half-plate on the lit left, a solid plate with only a light woven
// ink over-plate down the narrow right side — standing against a forest plated dark. Never a
// silhouette. Measured on the render: paper 230, lit robe 188, shaded robe 174, forest far below
// both. Pedestal plain stone; summit bare granite.
// 4 site — a 710 m summit. The arms are not a level cross: they drop ~7° from the shoulders, each
// arm a long tapering form thick at the shoulder where the sleeve hangs and thin at the open hand.
// A person on the terrace is 1.7 m — a tick a twentieth of the figure's height.
//
// counts drawn: 9 robe fold rulings converging to the feet, 2 mantle courses, 4 sleeve cross-folds
// per arm, 26 railing stanchions, 1 chapel door and 2 slit windows, 4 visitors, 2 Sugarloaf humps
// (396 m and 220 m), 13 forest lobes, 1 boat, 2 gilt floodlight marks.
//
// layering: paper flecks, the far Niterói shore, the two humps, the bay and its dashes, the granite
// dome, the pedestal, the figure in soapstone plates (body, arms, head), the forest lobes plated
// dark over the dome's foot, then the terrace, railing, visitors, and the last crisp rulings.
const PALETTE = [
"#efe6d2", // paper — warm cream sheet
"#d2cec0", // soapstone — the figure, the palest plate in the print
"#2f3a44", // ink — slate-navy line and shadow plate
"#5d7f88", // verdigris — Guanabara Bay, the distant humps
"#6f8260", // moss — Tijuca forest, plated dark so the figure reads pale
"#d9cfb6", // stone — granite dome, pedestal, terrace
"#c9a24a", // gilt — the floodlight at the pedestal's foot, the one warm accent
];
const CX = 352; // the statue's axis — left of the print's own centre
const CROWN = 248; // the crown of the head
const SH = 286; // the shoulder line: the arms spring from here
const HEM = 448; // the robe's hem — the top of the pedestal
const PBASE = 501; // the pedestal's foot
const WATER = 500; // the bay's near edge at Sugarloaf's foot
const g = (m, sd, lo, hi) => constrain(randomGaussian(m, sd), lo, hi);
const shift = (pts, dx, dy) => pts.map((p) => [p[0] + dx, p[1] + dy]);
const box = (x, y, w, h) => [[x, y], [x + w, y], [x + w, y + h], [x, y + h]];
// a solid grainy plate — the letterpress solid. noStroke: a plate never carries the last pen's outline.
const plate = (pts, col, w, dist, ang, rnd) => {
brush.noStroke();
brush.noFill();
brush.hatchStyle("charcoal", col, w);
brush.hatch(dist, ang, { rand: rnd, continuous: false, gradient: 0 });
brush.polygon(pts);
brush.noHatch();
};
// a half-tone plate — two crossed cpencil passes, paper breathing through
const halfPlate = (pts, col, w, dist, ang) => {
brush.noStroke();
brush.noFill();
brush.hatchStyle("cpencil", col, w);
brush.hatch(dist, ang, { rand: 0.25, continuous: false, gradient: 0 });
brush.polygon(pts);
brush.hatch(dist * 1.12, ang - 84, { rand: 0.25, continuous: false, gradient: 0 });
brush.polygon(pts);
brush.noHatch();
};
// a fading plate — gradient hatch, dense at one edge, open at the other
const fadePlate = (pts, col, w, dist, ang, grad) => {
brush.noStroke();
brush.noFill();
brush.hatchStyle("charcoal", col, w);
brush.hatch(dist, ang, { rand: 0.3, continuous: false, gradient: grad });
brush.polygon(pts);
brush.noHatch();
};
const ink = (x1, y1, x2, y2, w, name, col) => {
brush.noFill();
brush.set(name || "rotring", col || PALETTE[2], w || 1.0);
brush.line(x1, y1, x2, y2);
};
// a dark window / door / chapel slot
const slot = (x, y, w, h) => plate(box(x, y, w, h), PALETTE[2], 1.1, 1.5, 90, 0.2);
// a rounded hill standing on a base line — the granite dome and the two humps
const humpAt = (cx, base, halfW, h, n) => {
const pts = [];
for (let i = 0; i <= n; i++) {
const a = Math.PI + (i / n) * Math.PI;
pts.push([cx + Math.cos(a) * halfW, base + Math.sin(a) * h]);
}
pts.push([cx + halfW, base + 5], [cx - halfW, base + 5]);
return pts;
};
// a small round-headed opening — a straight jamb up to a semicircular head
const arch = (cx, base, halfW, h) => {
const pts = [[cx - halfW, base], [cx - halfW, base - h]];
for (let i = 0; i <= 8; i++) {
const a = Math.PI - (i / 8) * Math.PI;
pts.push([cx + Math.cos(a) * halfW, base - h - Math.sin(a) * halfW]);
}
pts.push([cx + halfW, base]);
return pts;
};
// an irregular foliage lobe — noise-scaled radius, flattened
const lobeAt = (cx, cy, r, k) => {
const pts = [];
for (let i = 0; i < 13; i++) {
const a = (i / 13) * Math.PI * 2;
const rr = r * (0.66 + noise(i * 0.8 + k) * 0.66);
pts.push([cx + Math.cos(a) * rr, cy + Math.sin(a) * rr * 0.7]);
}
return pts;
};
function setup() {
createCanvas(800, 800, WEBGL);
angleMode(DEGREES);
brush.scaleBrushes(2.4);
noLoop();
}
function draw() {
translate(-width / 2, -height / 2);
background(PALETTE[0]);
// 0 — paper flecks: faint warm specks so the sheet is not dead, never dark
for (let i = 0; i < 220; i++) {
const x = random(10, 790), y = random(10, 790);
ink(x, y, x + g(1.4, 0.5, 0.5, 2.6), y + g(0, 0.4, -1, 1), g(0.45, 0.1, 0.3, 0.6), "2H", random() < 0.7 ? "#bfb39a" : PALETTE[5]);
}
// 1 — the far plane, small and low on the right: Niterói's shore, then the two humps that make
// the Sugarloaf silhouette — Pão de Açúcar 396 m seaward, Morro da Urca 220 m inshore.
const niteroi = [[498, 494], [518, 487], [546, 483], [578, 486], [604, 481], [628, 487], [628, 496], [498, 496]];
halfPlate(niteroi, PALETTE[3], 1.0, 3.0, 68);
ink(500, 494, 520, 487, 0.7, "pen"); ink(520, 487, 552, 483, 0.7, "pen");
ink(578, 486, 606, 481, 0.7, "pen"); ink(606, 481, 626, 487, 0.7, "pen");
const urca = humpAt(544, WATER, 20, 21, 14);
const loaf = humpAt(588, WATER, 23, 38, 16);
halfPlate(urca, PALETTE[3], 1.35, 2.2, 44);
plate(shift(urca.slice(7, 14), 1, 1), PALETTE[2], 1.05, 3.4, 52, 0.3);
halfPlate(loaf, PALETTE[3], 1.5, 2.0, 58);
plate(shift(loaf.slice(8, 16), 1.5, 1), PALETTE[2], 1.15, 3.0, 64, 0.3);
ink(566, WATER, 588, 462, 0.9, "pen");
ink(610, WATER, 588, 462, 0.85, "pen");
ink(525, WATER, 544, 479, 0.8, "pen");
for (let i = 0; i < 7; i++) ink(570 + i * 6, WATER - 2, 572 + i * 6, WATER - g(9, 3, 3, 17), 0.65, "pen");
// 2 — the bay: a thin ruled verdigris band running from the dome's right flank out to the right,
// sitting BELOW the summit and BEYOND the ridge — its near edge is overrun by the forest in
// section 4, its far side thins to nothing so the water dies into bare paper.
fadePlate([[470, WATER + 6], [560, WATER], [634, WATER - 1], [620, WATER + 32], [556, WATER + 50], [478, WATER + 56]], PALETTE[3], 1.0, 4.6, 0, 0.82);
for (let i = 0; i < 30; i++) {
const y = WATER + 4 + i * 1.66 + g(0, 0.4, -1, 1);
const x0 = 472 + random(0, 78);
const far = constrain((x0 - 496) / 130, 0, 1);
if (random() < far * 0.7) continue; // the far side dissolves into bare paper
const len = constrain(randomGaussian(62 - far * 24, 34), 12, 142);
if (x0 + len > 630) continue;
ink(x0, y, x0 + len, y, g(1.05, 0.25, 0.6, 1.55), random() < 0.65 ? "2B" : "cpencil", random() < 0.82 ? PALETTE[3] : PALETTE[2]);
}
for (let i = 0; i < 9; i++) {
const y = WATER + 3 + i * 1.9;
ink(588 - g(9, 3, 3, 15), y, 588 + g(9, 3, 3, 15), y, g(1.1, 0.2, 0.7, 1.5), "2B", PALETTE[2]);
}
ink(598, WATER + 30, 612, WATER + 30, 2.4, "charcoal");
ink(612, WATER + 30, 615, WATER + 26, 1.3, "charcoal");
ink(566, WATER + 4, 604, WATER + 4, 0.95, "pen"); // the Urca shore line
// 3 — the summit: a bare granite dome, its right flank turning into shade
const domePts = [
[238, 561], [260, 539], [292, 522], [330, 515], [380, 515], [418, 521],
[452, 537], [478, 558], [468, 576], [382, 583], [300, 582], [248, 574],
];
halfPlate(domePts, PALETTE[5], 1.35, 2.4, 64);
plate(shift(domePts.slice(5, 10), 1.5, 1), PALETTE[2], 1.1, 3.4, 20, 0.3);
fadePlate(box(262, 562, 202, 18), PALETTE[2], 0.95, 3.8, 0, 0.78);
for (let i = 0; i < 5; i++) {
const x = 276 + i * 38;
ink(x, 532 + i * 2.4, x + g(20, 5, 10, 30), 536 + i * 2.8, 0.65, "pen"); // rock bedding on the granite
}
ink(292, 522, 418, 521, 0.9, "pen");
// 4 — Tijuca forest: ONE continuous canopy, not a row of crowns. Its upper edge is the union of
// many small overlapping lobes of differing size, so it undulates the way a canopy does; the
// lower half carries a darker ink over-plate; the ridge runs down to the right and overlaps
// the bay's near edge, so the water sits beyond and lower than the summit. Individual crowns
// break the skyline only at the two ends.
const RIDGE = [
[188, 626], [232, 602], [274, 584], [318, 574], [362, 571], [406, 571],
[448, 566], [488, 556], [524, 545], [562, 540], [592, 546], [618, 566],
];
const ridgeY = (x) => {
for (let i = 1; i < RIDGE.length; i++) {
if (x <= RIDGE[i][0]) {
const t = (x - RIDGE[i - 1][0]) / (RIDGE[i][0] - RIDGE[i - 1][0]);
return lerp(RIDGE[i - 1][1], RIDGE[i][1], t);
}
}
return RIDGE[RIDGE.length - 1][1];
};
// two scales of lobe: broad crowns for the skyline's swell, small ones nibbling their edges
const CROWNS = [];
for (let x = 186; x <= 624; x += 38) CROWNS.push([x, 15 + noise(x * 0.05) * 12, 1.18]);
for (let x = 190; x <= 620; x += 9) CROWNS.push([x, 5 + noise(x * 0.13 + 40) * 10, 1.0]);
const canopyTop = (x) => {
let y = ridgeY(x) + 13;
for (let i = 0; i < CROWNS.length; i++) {
const dx = x - CROWNS[i][0], r = CROWNS[i][1];
if (Math.abs(dx) >= r) continue;
const yy = ridgeY(CROWNS[i][0]) + 13 - Math.sqrt(r * r - dx * dx) * CROWNS[i][2];
if (yy < y) y = yy;
}
return y;
};
// the mass is a hillside, not a slab: deep under the summit and tapering to a point at each end
const depth = (x) => {
const t = constrain((x - 192) / 424, 0, 1);
return 8 + 74 * Math.pow(Math.sin(t * Math.PI), 0.62) + noise(x * 0.028 + 9) * 14;
};
const canopy = [];
for (let x = 192; x <= 616; x += 5.5) canopy.push([x, canopyTop(x)]);
for (let x = 616; x >= 192; x -= 14) canopy.push([x, ridgeY(x) + depth(x)]);
plate(canopy, PALETTE[4], 1.45, 2.1, 34, 0.3);
const under = [];
for (let x = 206; x <= 604; x += 11) under.push([x, lerp(canopyTop(x), ridgeY(x) + depth(x), 0.42) + noise(x * 0.07 + 3) * 12]);
for (let x = 604; x >= 206; x -= 16) under.push([x, ridgeY(x) + depth(x) * 0.95]);
halfPlate(shift(under, 2, 2), PALETTE[2], 1.05, 3.1, 40);
const EDGE = [[200, 600, 20], [231, 584, 16], [586, 538, 15], [610, 550, 12]];
for (let i = 0; i < EDGE.length; i++) {
const pts = lobeAt(EDGE[i][0], EDGE[i][1], EDGE[i][2], i * 2.3 + 5);
plate(pts, PALETTE[4], 1.4, 2.2, 30 + i * 6, 0.3);
plate(shift(pts.slice(4, 9), 2, 2), PALETTE[2], 1.1, 3.4, 48 + i * 5, 0.32);
}
for (let i = 0; i < 26; i++) {
const x = g(380, 120, 200, 598);
const y = canopyTop(x) + g(17, 8, 4, 36);
ink(x, y, x + g(3, 6, -12, 16), y - g(13, 5, 5, 22), g(1.15, 0.25, 0.6, 1.8), random() < 0.5 ? "2B" : "cpencil", PALETTE[2]);
}
// 5 — the pedestal: a plain 8 m stone block tapering wider to its foot. Lit face a half-plate,
// shaded right face a stone plate under a LIGHT woven ink over-plate — no dark mass. The
// chapel is a small round-headed slot at the block's foot, nothing more.
const pedLit = [[319, HEM], [352, HEM], [352, PBASE], [315, PBASE]];
const pedShade = [[352, HEM], [385, HEM], [389, PBASE], [352, PBASE]];
halfPlate(pedLit, PALETTE[5], 1.35, 2.2, 72);
plate(pedShade, PALETTE[5], 1.45, 2.4, 90, 0.3);
halfPlate(shift(pedShade, 1.5, 1), PALETTE[2], 0.8, 3.3, 34); // light ink over-plate, not a blob
fadePlate(box(318, HEM + 1, 68, 9), PALETTE[2], 0.8, 4.0, 0, 0.8); // shadow under the robe's foot
ink(313, HEM, 391, HEM, 1.4); // the pedestal's cornice
ink(315, HEM + 4, 389, HEM + 4, 0.7, "pen"); // its lower fillet
ink(311, PBASE, 393, PBASE, 1.3); // its foot
plate(arch(352, PBASE - 2, 3.4, 9), PALETTE[2], 1.1, 1.5, 90, 0.2); // the chapel entrance
slot(331, 470, 3, 8); slot(371, 470, 3, 8); // two slit windows
ink(319, HEM, 315, PBASE, 0.85, "pen");
ink(385, HEM, 389, PBASE, 1.15);
// 6 — the figure. Soapstone, and PALE: the body and both arms take one soapstone half-plate; only
// the narrow right side of each form takes a solid plate, and only that carries a light ink
// over-plate at dist 4. The robe is widest at the shoulders, narrows through the waist and
// flares again at the hem — never a constant-width post.
const BODY = [
[347, 278], [336, 283], [329, 292], [331, 316], [334, 352], [331, 392], [327, 430], [324, 443],
[380, 443], [377, 430], [373, 392], [370, 352], [373, 316], [375, 292], [368, 283], [357, 278],
];
const BODY_SHADE = [
[358, 278], [368, 283], [375, 292], [373, 316], [370, 352], [373, 392], [377, 430], [380, 443],
[367, 443], [365, 392], [364, 316], [361, 284],
];
const HEMBAND = [[319, 438], [385, 438], [386, HEM], [318, HEM]];
// each arm: a long tapering form — deep at the shoulder where the sleeve hangs below the upper
// arm as a stepped edge, narrowing through the forearm to the open hand
const ARM_L = [
[259, 293], [290, 289], [318, 286], [330, 284],
[330, 332], [318, 331], [311, 326], [309, 312], [296, 309], [283, 306], [272, 303], [259, 301],
];
const ARM_R = [
[445, 294], [414, 290], [386, 287], [374, 284],
[374, 331], [386, 330], [393, 325], [395, 312], [408, 309], [421, 306], [432, 303], [445, 302],
];
const ARM_L_SHADE = [
[259, 297], [283, 301], [309, 304], [330, 309],
[330, 332], [318, 331], [311, 326], [309, 312], [296, 309], [283, 306], [272, 303], [259, 301],
];
const ARM_R_SHADE = [
[445, 298], [421, 301], [395, 304], [374, 309],
[374, 331], [386, 330], [393, 325], [395, 312], [408, 309], [421, 306], [432, 303], [445, 302],
];
const HEAD = [
[352, CROWN - 2], [359, 248.5], [362.5, 255], [363, 264], [360, 271], [356, 275],
[348, 275], [344, 271], [341, 264], [341.5, 255], [345, 248.5],
];
const HEAD_SHADE = [[352, CROWN - 2], [359, 248.5], [362.5, 255], [363, 264], [360, 271], [356, 275], [354, 275], [356, 264], [355, 252]];
// the hair is a thin open cap over the crown only — the face below it stays the palest paper-lit plane
const HAIR = [
[341.5, 256], [345, 248.5], [352, 245.8], [359, 248.5], [362.5, 256],
[359.5, 254], [352, 251], [345, 254],
];
const BEARD = [[347, 269], [357, 269], [356, 273], [352, 276.5], [348, 273]];
// the robe. Every hatch angle CROSSES its form: a plate hatched along a tall strip or a long arm
// lays down full-length parallel strokes, and that pinstripe is what reads as a pylon.
halfPlate(BODY, PALETTE[1], 1.35, 2.2, 62);
plate(BODY_SHADE, PALETTE[1], 1.4, 2.6, 6, 0.3);
halfPlate(shift(BODY_SHADE, 1.5, 1), PALETTE[2], 0.85, 3.2, 34);
halfPlate(HEMBAND, PALETTE[1], 1.35, 2.0, 26);
halfPlate(shift([[367, 438], [386, 438], [386, HEM], [368, HEM]], 1, 1), PALETTE[2], 0.7, 3.0, 26);
ink(319, 438, 385, 438, 0.8, "pen"); // the robe's hem, wider than the body above it
// the arms, drawn over the robe so the shoulder joint is one mass
halfPlate(ARM_L, PALETTE[1], 1.35, 2.2, 54);
plate(ARM_L_SHADE, PALETTE[1], 1.4, 2.3, 46, 0.3);
halfPlate(shift([[318, 322], [330, 324], [330, 332], [319, 331]], 1, 1.5), PALETTE[2], 0.75, 3.0, 40);
halfPlate(ARM_R, PALETTE[1], 1.3, 2.2, 126);
plate(ARM_R_SHADE, PALETTE[1], 1.45, 2.3, 134, 0.3);
halfPlate(shift([[386, 322], [374, 324], [374, 331], [385, 330]], 1, 1.5), PALETTE[2], 0.8, 2.8, 138);
// the sleeve's stepped hem, ruled rather than left to a ragged plate edge
ink(309, 313, 311, 326, 0.7, "pen"); ink(311, 327, 330, 331, 0.75, "pen");
ink(395, 313, 393, 325, 0.7, "pen"); ink(393, 326, 374, 330, 0.8, "pen");
// the neck — visible between the beard and the shoulders
halfPlate([[346, 270], [358, 270], [359, 288], [345, 288]], PALETTE[1], 1.3, 2.0, 40);
halfPlate(shift([[355, 272], [359, 272], [359, 288], [355, 288]], 1, 0.5), PALETTE[2], 0.6, 3.0, 44);
// the head — a rounded form, its right plane in shade, hair and beard cut as simple open planes
halfPlate(HEAD, PALETTE[1], 1.3, 1.8, 66);
plate(HEAD_SHADE, PALETTE[1], 1.35, 2.2, 24, 0.28);
plate(HAIR, PALETTE[2], 1.2, 2.6, 122, 0.3);
ink(342, 257, 343.5, 267, 0.7, "pen"); // the hair falling past each temple
ink(362, 257, 360.5, 267, 0.75, "pen");
plate(BEARD, PALETTE[2], 1.1, 2.8, 96, 0.3);
halfPlate([[347, 273], [357, 273], [357, 278], [347, 278]], PALETTE[2], 0.7, 2.6, 50); // the jaw's shadow on the neck
ink(346, 263, 358, 263.6, 0.45, "pen"); // the brow, set low: the face is tipped down toward the city
ink(352, 264.5, 352.6, 268, 0.4, "pen"); // the nose
// 7 — the robe drawn: nine fold rulings converging toward the feet, two mantle courses across the
// chest, a sash, and four cross-folds over each hanging sleeve
for (let i = 0; i < 9; i++) {
const t = (i + 0.5) / 9;
const xt = lerp(331, 373, t), xb = lerp(336, 368, t);
const y0 = 316 + (i % 3) * 8;
ink(xt + g(0, 0.5, -1.1, 1.1), y0, xb + g(0, 0.5, -1.2, 1.2), 435 - (i % 2) * 5, i % 3 === 1 ? 0.7 : 0.5, "pen");
}
ink(332, 299, 352, 303, 0.75, "pen"); ink(352, 303, 372, 298, 0.7, "pen"); // the mantle over the shoulders
ink(334, 311, 352, 315, 0.6, "pen"); ink(352, 315, 370, 310, 0.55, "pen");
ink(334, 366, 371, 364, 0.6, "pen"); // the sash
for (let i = 0; i < 4; i++) {
const x = 313 + i * 4.5;
ink(x, 308 + i * 1.6, x + g(1, 0.5, -0.4, 2.4), 324 - i * 2.8, 0.45, "pen");
const xr = 391 - i * 4.5;
ink(xr, 308 + i * 1.6, xr - g(1, 0.5, -0.4, 2.4), 323 - i * 2.8, 0.45, "pen");
}
// the open hands: fingers together, ruled once across, the tip closed with a fine nick
ink(259, 293.5, 259, 300.5, 0.7, "pen"); ink(445, 294.5, 445, 301.5, 0.75, "pen");
ink(264, 296.5, 276, 297.6, 0.45, "pen"); ink(440, 297.6, 428, 298.4, 0.45, "pen");
// 8 — the terrace and its railing: 26 stanchions, four visitors at 1.7 m against a 30 m figure
plate(box(292, 506, 138, 9), PALETTE[5], 1.2, 1.7, 0, 0.2);
ink(288, 515, 434, 515, 1.3);
ink(290, 506, 432, 506, 0.8, "pen");
for (let i = 0; i < 26; i++) {
const x = 294 + i * 5.4;
ink(x + g(0, 0.3, -0.8, 0.8), 506, x, 499, 0.7, "pen");
}
ink(292, 499, 430, 499, 0.65, "pen"); // the handrail
const PEOPLE = [[302, 11], [309, 10], [398, 10], [416, 11]];
for (let i = 0; i < PEOPLE.length; i++) {
ink(PEOPLE[i][0], 506, PEOPLE[i][0] + g(0, 0.5, -1, 1), 506 - PEOPLE[i][1], 1.6, "charcoal");
}
// the one warm accent: two floodlights ringing the pedestal's foot
ink(327, PBASE - 1, 327, PBASE - 6, 2.2, "charcoal", PALETTE[6]);
ink(377, PBASE - 1, 377, PBASE - 5, 1.8, "charcoal", PALETTE[6]);
// 9 — last darks: crisp ends on the figure only where the form needs an edge
ink(329, 292, 331, 316, 0.6, "pen"); ink(331, 316, 334, 352, 0.55, "pen");
ink(334, 352, 327, 430, 0.6, "pen"); ink(327, 430, 324, 443, 0.7, "pen"); // the lit left contour
ink(375, 292, 373, 316, 0.6, "pen"); ink(373, 316, 370, 352, 0.55, "pen");
ink(370, 352, 377, 430, 0.6, "pen"); ink(377, 430, 380, 443, 0.7, "pen"); // the shaded right contour
ink(259, 293, 318, 286, 0.6, "pen"); ink(318, 286, 330, 284, 0.7, "pen"); // the arms' lit top edges
ink(386, 287, 445, 294, 0.55, "pen"); ink(374, 284, 386, 287, 0.65, "pen");
ink(259, 301, 283, 306, 0.7, "pen"); ink(283, 306, 309, 312, 0.8, "pen"); // the tapering undersides
ink(445, 302, 421, 306, 0.7, "pen"); ink(421, 306, 395, 312, 0.85, "pen");
ink(336, 283, 347, 278, 0.65, "pen"); ink(357, 278, 368, 283, 0.8, "pen"); // the shoulder slopes
halfPlate([[331, 332], [344, 330], [344, 343], [332, 343]], PALETTE[2], 0.6, 3.2, 50); // shade under the sleeves
halfPlate([[363, 331], [374, 331], [374, 343], [364, 343]], PALETTE[2], 0.7, 3.0, 130);
ink(318, HEM, 386, HEM, 1.3);
}