/* Per-chapter decorative SVG ornaments.

   Each themed chapter gets a sprinkling of small, low-opacity SVG
   glyphs scattered in the margins of the chapter section. They
   live in an .ornaments layer (pointer-events: none) behind all
   photos and text, so they never compete with the actual content.

   Geometry is deliberately simple — circles, polygons, strokes —
   never illustrative.
*/

// Little helper to keep ornament positioning declarative.
// `pos` is a CSS positioning object (top/right/bottom/left + transform).
function Orn({ pos, rotate, opacity = 0.55, children, w, h, vb }) {
  const style = {
    ...pos,
    transform: rotate ? `${pos.transform || ''} rotate(${rotate}deg)`.trim() : pos.transform,
    opacity,
  };
  return (
    <svg style={style} width={w} height={h} viewBox={vb || `0 0 ${w} ${h}`}
         xmlns="http://www.w3.org/2000/svg" fill="none" aria-hidden="true">
      {children}
    </svg>
  );
}

// ═══════════════════════════════════════════════════════════════
// II · Chromakopia — green/black, stencil chevrons, masked sphere,
// vertical "ST. CHROMA" rule, stylized soldier silhouettes.
// ═══════════════════════════════════════════════════════════════
function ChromakopiaOrnaments() {
  const green = '#7be072';
  const greenDim = 'rgba(123,224,114,0.55)';
  return (
    <div className="ornaments">
      {/* vertical rule + text down the left edge */}
      <div style={{
        position: 'absolute', top: 60, left: 18, bottom: 60, width: 1,
        background: 'linear-gradient(180deg, transparent, rgba(123,224,114,0.5) 12%, rgba(123,224,114,0.5) 88%, transparent)',
      }} />
      <div style={{
        position: 'absolute', top: 220, left: 12,
        transform: 'rotate(-90deg)', transformOrigin: 'left top',
        fontFamily: 'JetBrains Mono, monospace', fontSize: 10, letterSpacing: '0.55em',
        color: greenDim, whiteSpace: 'nowrap', textTransform: 'uppercase',
      }}>ST. CHROMA — Chromakopia / 28.10.24</div>

      {/* big sphere "mask" in top right behind title */}
      <Orn pos={{ top: 28, right: 36 }} w={170} h={170} opacity={0.32}>
        <circle cx="85" cy="85" r="78" stroke={green} strokeWidth="1.2" />
        <circle cx="85" cy="85" r="58" stroke={green} strokeWidth="1" strokeDasharray="3 5" />
        <ellipse cx="62" cy="74" rx="9" ry="4" fill={green} />
        <ellipse cx="108" cy="74" rx="9" ry="4" fill={green} />
        <path d="M52 110 Q85 122 118 110" stroke={green} strokeWidth="1.4" strokeLinecap="round" />
      </Orn>

      {/* chevron stack — military stripe */}
      <Orn pos={{ top: 96, left: 48 }} w={70} h={50} opacity={0.45}>
        <path d="M5 30 L35 8 L65 30" stroke={green} strokeWidth="2" strokeLinejoin="round" />
        <path d="M5 42 L35 20 L65 42" stroke={green} strokeWidth="2" strokeLinejoin="round" />
      </Orn>

      {/* shipping container / truck silhouette bottom-left */}
      <Orn pos={{ bottom: 70, left: 60 }} w={150} h={62} opacity={0.32}>
        <rect x="2" y="14" width="110" height="36" stroke={green} strokeWidth="1.3" />
        <path d="M112 22 L138 22 L146 32 L146 50 L112 50 Z" stroke={green} strokeWidth="1.3" />
        <circle cx="32" cy="54" r="6" stroke={green} strokeWidth="1.3" />
        <circle cx="90" cy="54" r="6" stroke={green} strokeWidth="1.3" />
        <circle cx="128" cy="54" r="6" stroke={green} strokeWidth="1.3" />
        {/* container ribs */}
        <path d="M14 18 L14 50 M26 18 L26 50 M38 18 L38 50 M50 18 L50 50 M62 18 L62 50 M74 18 L74 50 M86 18 L86 50 M98 18 L98 50" stroke={green} strokeWidth="0.6" />
      </Orn>

      {/* dotted target ring right side */}
      <Orn pos={{ top: '46%', right: 40 }} w={120} h={120} opacity={0.28}>
        <circle cx="60" cy="60" r="55" stroke={green} strokeWidth="1" strokeDasharray="2 4" />
        <circle cx="60" cy="60" r="34" stroke={green} strokeWidth="1" strokeDasharray="2 4" />
        <circle cx="60" cy="60" r="2" fill={green} />
        <line x1="60" y1="2" x2="60" y2="20" stroke={green} strokeWidth="1" />
        <line x1="60" y1="100" x2="60" y2="118" stroke={green} strokeWidth="1" />
        <line x1="2" y1="60" x2="20" y2="60" stroke={green} strokeWidth="1" />
        <line x1="100" y1="60" x2="118" y2="60" stroke={green} strokeWidth="1" />
      </Orn>

      {/* asterisk stars */}
      {[
        { top: 320, left: 30, r: -10 },
        { top: 540, right: 60, r: 12 },
        { bottom: 220, left: 26, r: 0 },
      ].map((p, i) => (
        <Orn key={i} pos={p} rotate={p.r} w={28} h={28} opacity={0.55}>
          <path d="M14 2 L14 26 M3 14 L25 14 M5 5 L23 23 M5 23 L23 5" stroke={green} strokeWidth="1.4" strokeLinecap="round" />
        </Orn>
      ))}

      {/* stenciled side label bottom-right */}
      <div style={{
        position: 'absolute', bottom: 24, right: 26,
        fontFamily: 'JetBrains Mono, monospace', fontSize: 9, letterSpacing: '0.4em',
        color: greenDim, textTransform: 'uppercase',
      }}>· CH. II · MASK ON ·</div>
    </div>
  );
}

// ═══════════════════════════════════════════════════════════════
// III · London — bus, big ben, tube roundel, telephone box,
// black taxi, umbrella, sun.
// ═══════════════════════════════════════════════════════════════
function LondonOrnaments() {
  const ink = 'rgba(60,40,20,0.42)';
  const red = 'rgba(170,40,50,0.50)';
  const blue = 'rgba(40,80,140,0.50)';
  const yellow = 'rgba(200,150,70,0.65)';
  return (
    <div className="ornaments">
      {/* Sun top-right */}
      <Orn pos={{ top: 36, right: 60 }} w={100} h={100} opacity={0.7}>
        <circle cx="50" cy="50" r="22" stroke={yellow} strokeWidth="1.6" fill="rgba(220,180,90,0.18)" />
        {Array.from({ length: 12 }).map((_, i) => {
          const a = (i / 12) * Math.PI * 2;
          const x1 = 50 + Math.cos(a) * 30;
          const y1 = 50 + Math.sin(a) * 30;
          const x2 = 50 + Math.cos(a) * 42;
          const y2 = 50 + Math.sin(a) * 42;
          return <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} stroke={yellow} strokeWidth="1.6" strokeLinecap="round" />;
        })}
      </Orn>

      {/* Big Ben — left middle */}
      <Orn pos={{ top: 260, left: 24 }} rotate={-3} w={56} h={170} opacity={0.55}>
        <rect x="14" y="60" width="28" height="92" stroke={ink} strokeWidth="1.4" fill="rgba(170,140,90,0.12)" />
        <circle cx="28" cy="80" r="7" stroke={ink} strokeWidth="1.2" />
        <line x1="28" y1="80" x2="28" y2="74" stroke={ink} strokeWidth="1.2" />
        <line x1="28" y1="80" x2="32" y2="80" stroke={ink} strokeWidth="1.2" />
        {/* tower windows */}
        <rect x="20" y="98"  width="16" height="10" stroke={ink} strokeWidth="0.8" />
        <rect x="20" y="116" width="16" height="10" stroke={ink} strokeWidth="0.8" />
        <rect x="20" y="134" width="16" height="10" stroke={ink} strokeWidth="0.8" />
        {/* spire */}
        <path d="M14 60 L28 30 L42 60 Z" stroke={ink} strokeWidth="1.4" fill="rgba(170,140,90,0.12)" />
        <line x1="28" y1="30" x2="28" y2="12" stroke={ink} strokeWidth="1" />
        <circle cx="28" cy="9" r="2" fill={ink} />
      </Orn>

      {/* Double-decker bus — bottom-right */}
      <Orn pos={{ bottom: 110, right: 50 }} rotate={2} w={170} h={92} opacity={0.55}>
        <rect x="6" y="14" width="150" height="58" rx="6" stroke={red} strokeWidth="1.5" fill="rgba(170,40,50,0.16)" />
        {/* upper windows */}
        <rect x="14" y="20" width="20" height="16" stroke={red} strokeWidth="1" />
        <rect x="38" y="20" width="20" height="16" stroke={red} strokeWidth="1" />
        <rect x="62" y="20" width="20" height="16" stroke={red} strokeWidth="1" />
        <rect x="86" y="20" width="20" height="16" stroke={red} strokeWidth="1" />
        <rect x="110" y="20" width="20" height="16" stroke={red} strokeWidth="1" />
        <rect x="134" y="20" width="18" height="16" stroke={red} strokeWidth="1" />
        {/* lower deck divider */}
        <line x1="6" y1="44" x2="156" y2="44" stroke={red} strokeWidth="1" />
        {/* lower windows */}
        <rect x="14" y="48" width="24" height="18" stroke={red} strokeWidth="1" />
        <rect x="42" y="48" width="24" height="18" stroke={red} strokeWidth="1" />
        <rect x="70" y="48" width="24" height="18" stroke={red} strokeWidth="1" />
        <rect x="98" y="48" width="24" height="18" stroke={red} strokeWidth="1" />
        <rect x="126" y="48" width="22" height="18" stroke={red} strokeWidth="1" />
        {/* wheels */}
        <circle cx="32" cy="78" r="8" stroke={red} strokeWidth="1.4" fill="rgba(60,40,20,0.2)" />
        <circle cx="132" cy="78" r="8" stroke={red} strokeWidth="1.4" fill="rgba(60,40,20,0.2)" />
      </Orn>

      {/* Tube roundel — top-left under title */}
      <Orn pos={{ top: 200, left: 110 }} rotate={-6} w={80} h={80} opacity={0.6}>
        <circle cx="40" cy="40" r="30" stroke={red} strokeWidth="4" fill="none" />
        <rect x="6" y="34" width="68" height="12" fill={blue} />
        <text x="40" y="44" textAnchor="middle" fontFamily="Helvetica, sans-serif" fontWeight="700" fontSize="9" fill="white" letterSpacing="1">UNDERGROUND</text>
      </Orn>

      {/* Phone box — middle right */}
      <Orn pos={{ top: '48%', right: 26 }} rotate={3} w={56} h={130} opacity={0.55}>
        <rect x="6" y="12" width="44" height="110" stroke={red} strokeWidth="1.4" fill="rgba(170,40,50,0.16)" />
        <rect x="2" y="2" width="52" height="14" stroke={red} strokeWidth="1.4" fill="rgba(170,40,50,0.16)" />
        <text x="28" y="12" textAnchor="middle" fontFamily="Georgia, serif" fontSize="6" fill={red}>TELEPHONE</text>
        {/* window grid */}
        <line x1="6" y1="40" x2="50" y2="40" stroke={red} strokeWidth="0.8" />
        <line x1="6" y1="64" x2="50" y2="64" stroke={red} strokeWidth="0.8" />
        <line x1="28" y1="16" x2="28" y2="80" stroke={red} strokeWidth="0.8" />
        <line x1="18" y1="16" x2="18" y2="80" stroke={red} strokeWidth="0.6" />
        <line x1="38" y1="16" x2="38" y2="80" stroke={red} strokeWidth="0.6" />
        <line x1="6" y1="80" x2="50" y2="80" stroke={red} strokeWidth="1" />
      </Orn>

      {/* Umbrella bottom-left */}
      <Orn pos={{ bottom: 60, left: 100 }} rotate={-12} w={84} h={94} opacity={0.5}>
        <path d="M6 38 Q42 -4 78 38 Z" stroke={ink} strokeWidth="1.4" fill="rgba(60,40,20,0.12)" />
        <path d="M6 38 Q14 30 22 38 Q30 30 42 38 Q54 30 62 38 Q70 30 78 38" stroke={ink} strokeWidth="1" />
        <line x1="42" y1="0" x2="42" y2="76" stroke={ink} strokeWidth="1.2" />
        <path d="M42 76 Q42 88 54 88 Q60 88 60 82" stroke={ink} strokeWidth="1.2" fill="none" />
      </Orn>

      {/* Black taxi — left bottom */}
      <Orn pos={{ bottom: 220, right: 220 }} rotate={-2} w={130} h={70} opacity={0.45}>
        <path d="M6 50 L20 26 L60 22 L100 22 L116 30 L124 50 Z" stroke={ink} strokeWidth="1.4" fill="rgba(40,30,20,0.18)" />
        <rect x="26" y="28" width="28" height="14" stroke={ink} strokeWidth="0.8" />
        <rect x="60" y="28" width="32" height="14" stroke={ink} strokeWidth="0.8" />
        <line x1="6" y1="50" x2="124" y2="50" stroke={ink} strokeWidth="1" />
        <circle cx="32" cy="56" r="7" stroke={ink} strokeWidth="1.4" fill="rgba(40,30,20,0.3)" />
        <circle cx="100" cy="56" r="7" stroke={ink} strokeWidth="1.4" fill="rgba(40,30,20,0.3)" />
        {/* taxi light */}
        <rect x="46" y="14" width="20" height="6" stroke={yellow} strokeWidth="0.8" fill="rgba(220,180,90,0.4)" />
      </Orn>

      {/* Crown top center */}
      <Orn pos={{ top: 40, left: '38%' }} rotate={-4} w={70} h={50} opacity={0.55}>
        <path d="M6 36 L14 14 L22 28 L30 8 L38 28 L46 14 L54 28 L62 14 L66 36 Z"
              stroke={yellow} strokeWidth="1.4" fill="rgba(220,180,90,0.30)" strokeLinejoin="round" />
        <circle cx="14" cy="14" r="2" fill={red} />
        <circle cx="30" cy="8"  r="2" fill={red} />
        <circle cx="46" cy="14" r="2" fill={red} />
        <circle cx="62" cy="14" r="2" fill={red} />
        <rect x="6" y="36" width="60" height="6" stroke={yellow} strokeWidth="1.2" fill="rgba(220,180,90,0.45)" />
      </Orn>

      {/* Noodle bowl (master wei) — mid-left */}
      <Orn pos={{ top: '54%', left: 40 }} rotate={4} w={100} h={80} opacity={0.55}>
        <path d="M6 30 L94 30 Q86 70 50 70 Q14 70 6 30 Z" stroke={ink} strokeWidth="1.4" fill="rgba(245,222,160,0.30)" />
        <ellipse cx="50" cy="30" rx="44" ry="8" stroke={ink} strokeWidth="1.4" fill="rgba(220,170,90,0.40)" />
        {/* noodle squiggles */}
        <path d="M16 26 Q26 18 36 26 Q46 18 56 26 Q66 18 76 26 Q86 18 90 22" stroke="rgba(218,180,90,0.85)" strokeWidth="1.4" fill="none" />
        <path d="M18 30 Q28 22 38 30 Q48 22 58 30 Q68 22 78 30" stroke="rgba(218,180,90,0.85)" strokeWidth="1.4" fill="none" />
        {/* chopsticks */}
        <line x1="78" y1="6"  x2="100" y2="28" stroke="rgba(120,80,50,0.8)" strokeWidth="2" strokeLinecap="round" />
        <line x1="84" y1="2"  x2="106" y2="24" stroke="rgba(120,80,50,0.8)" strokeWidth="2" strokeLinecap="round" />
        {/* steam */}
        <path d="M40 18 Q44 10 40 2" stroke={ink} strokeWidth="0.9" fill="none" />
        <path d="M56 18 Q60 10 56 2" stroke={ink} strokeWidth="0.9" fill="none" />
      </Orn>

      {/* Duck silhouette bottom center */}
      <Orn pos={{ bottom: 90, left: '42%' }} rotate={-2} w={90} h={60} opacity={0.5}>
        <path d="M14 44 Q14 18 36 18 Q40 6 52 6 Q64 6 64 18 Q86 18 76 44 Z" stroke={ink} strokeWidth="1.4" fill="rgba(220,200,140,0.30)" strokeLinejoin="round" />
        <path d="M64 18 L78 14 L74 22 Z" fill={yellow} stroke={yellow} strokeWidth="0.8" />
        <circle cx="56" cy="14" r="1.4" fill={ink} />
        {/* water ripples */}
        <path d="M4 50 Q24 54 44 50 Q64 46 84 50" stroke={blue} strokeWidth="0.9" fill="none" />
        <path d="M10 56 Q30 60 50 56 Q70 52 88 56" stroke={blue} strokeWidth="0.9" fill="none" />
      </Orn>

      {/* Stack of books — UCL library nod, top-right under sun */}
      <Orn pos={{ top: 170, right: 30 }} rotate={3} w={80} h={70} opacity={0.55}>
        <rect x="6" y="48" width="68" height="14" stroke={ink} strokeWidth="1.3" fill="rgba(170,40,50,0.20)" />
        <rect x="10" y="34" width="62" height="14" stroke={ink} strokeWidth="1.3" fill="rgba(40,80,140,0.20)" />
        <rect x="14" y="20" width="58" height="14" stroke={ink} strokeWidth="1.3" fill="rgba(220,180,90,0.30)" />
        <line x1="10" y1="55" x2="70" y2="55" stroke={ink} strokeWidth="0.7" />
        <line x1="14" y1="41" x2="68" y2="41" stroke={ink} strokeWidth="0.7" />
        <line x1="18" y1="27" x2="68" y2="27" stroke={ink} strokeWidth="0.7" />
        {/* bookmark */}
        <rect x="48" y="14" width="6" height="22" fill={red} />
      </Orn>

      {/* Tea cup bottom-left */}
      <Orn pos={{ bottom: 200, left: 200 }} rotate={-4} w={76} h={64} opacity={0.55}>
        <path d="M6 18 L6 40 Q6 54 22 54 L48 54 Q60 54 60 40 L60 18 Z" stroke={ink} strokeWidth="1.4" fill="rgba(245,238,222,0.55)" />
        <ellipse cx="33" cy="18" rx="27" ry="5" stroke={ink} strokeWidth="1.3" fill="rgba(180,90,50,0.45)" />
        <path d="M60 26 Q74 28 74 36 Q74 46 60 48" stroke={ink} strokeWidth="1.3" fill="none" />
        <ellipse cx="33" cy="56" rx="34" ry="4" stroke={ink} strokeWidth="1.2" fill="none" />
        <path d="M22 8 Q26 2 22 -4" stroke="rgba(120,80,50,0.5)" strokeWidth="0.9" />
        <path d="M36 8 Q40 2 36 -4" stroke="rgba(120,80,50,0.5)" strokeWidth="0.9" />
      </Orn>

      {/* Raindrops scattered */}
      {[
        { top: 130, left: 220, r: -10 },
        { top: 380, left: 320, r: -8 },
        { top: 60, right: 200, r: -5 },
        { bottom: 60, right: 60, r: -12 },
        { top: 460, right: 280, r: -6 },
      ].map((p, i) => (
        <Orn key={`rd-${i}`} pos={p} rotate={p.r} w={14} h={22} opacity={0.55}>
          <path d="M7 1 Q1 12 7 20 Q13 12 7 1 Z" fill={blue} stroke={blue} strokeWidth="0.6" />
        </Orn>
      ))}

      {/* London Eye — top middle */}
      <Orn pos={{ top: 60, left: '46%' }} rotate={-4} w={140} h={150} opacity={0.45}>
        <circle cx="70" cy="70" r="60" stroke={blue} strokeWidth="1.6" fill="none" />
        <circle cx="70" cy="70" r="6" stroke={blue} strokeWidth="1.4" fill="rgba(40,80,140,0.30)" />
        {Array.from({ length: 24 }).map((_, i) => {
          const a = (i / 24) * Math.PI * 2;
          const x1 = 70 + Math.cos(a) * 8;
          const y1 = 70 + Math.sin(a) * 8;
          const x2 = 70 + Math.cos(a) * 56;
          const y2 = 70 + Math.sin(a) * 56;
          return <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} stroke={blue} strokeWidth="0.7" />;
        })}
        {Array.from({ length: 12 }).map((_, i) => {
          const a = (i / 12) * Math.PI * 2;
          const cx = 70 + Math.cos(a) * 60;
          const cy = 70 + Math.sin(a) * 60;
          return <circle key={i} cx={cx} cy={cy} r="3.5" stroke={blue} strokeWidth="1" fill="rgba(255,255,255,0.7)" />;
        })}
        {/* supports */}
        <line x1="70" y1="130" x2="42" y2="148" stroke={ink} strokeWidth="1.4" />
        <line x1="70" y1="130" x2="98" y2="148" stroke={ink} strokeWidth="1.4" />
      </Orn>

      {/* Tea cup + saucer — middle left */}
      <Orn pos={{ top: '46%', left: 28 }} rotate={-4} w={110} h={92} opacity={0.55}>
        <ellipse cx="55" cy="78" rx="48" ry="8" stroke={ink} strokeWidth="1.4" fill="rgba(245,238,224,0.65)" />
        <path d="M16 40 L18 70 Q20 78 55 78 Q90 78 92 70 L94 40 Z" stroke={ink} strokeWidth="1.4" fill="rgba(245,238,224,0.55)" />
        <ellipse cx="55" cy="40" rx="39" ry="6" stroke={red} strokeWidth="1.2" fill="rgba(170,40,50,0.18)" />
        {/* handle */}
        <path d="M94 46 Q108 50 108 60 Q108 70 94 70" stroke={ink} strokeWidth="1.4" fill="none" />
        {/* steam */}
        <path d="M40 24 Q46 16 42 6" stroke={ink} strokeWidth="0.9" fill="none" />
        <path d="M55 22 Q61 14 57 4" stroke={ink} strokeWidth="0.9" fill="none" />
        <path d="M70 24 Q76 16 72 6" stroke={ink} strokeWidth="0.9" fill="none" />
      </Orn>

      {/* Noodle bowl — Master Wei */}
      <Orn pos={{ bottom: 320, left: 28 }} rotate={4} w={120} h={86} opacity={0.55}>
        <path d="M8 36 Q60 28 112 36 L102 76 Q60 82 18 76 Z" stroke={ink} strokeWidth="1.4" fill="rgba(220,200,160,0.30)" />
        <ellipse cx="60" cy="36" rx="52" ry="7" stroke={ink} strokeWidth="1.4" fill="rgba(180,140,90,0.30)" />
        {/* noodles squiggles */}
        <path d="M22 32 Q30 24 26 16 Q22 8 32 4" stroke={yellow} strokeWidth="1.2" fill="none" />
        <path d="M40 30 Q48 22 44 14 Q40 6 50 2" stroke={yellow} strokeWidth="1.2" fill="none" />
        <path d="M62 30 Q70 22 66 14 Q62 6 72 2" stroke={yellow} strokeWidth="1.2" fill="none" />
        <path d="M82 32 Q90 24 86 16" stroke={yellow} strokeWidth="1.2" fill="none" />
        {/* chopsticks */}
        <line x1="86" y1="14" x2="124" y2="-12" stroke={ink} strokeWidth="1.4" />
        <line x1="82" y1="22" x2="124" y2="-4" stroke={ink} strokeWidth="1.4" />
      </Orn>

      {/* Pigeon silhouette */}
      <Orn pos={{ top: 420, right: 240 }} rotate={-6} w={64} h={50} opacity={0.40}>
        <path d="M6 32 Q18 22 30 28 L46 22 Q54 18 58 22 Q62 28 50 32 L46 38 Q34 44 22 40 Q10 42 6 32 Z"
              stroke={ink} strokeWidth="1.3" fill="rgba(60,40,20,0.18)" />
        <circle cx="52" cy="22" r="1.4" fill={ink} />
        <line x1="22" y1="40" x2="20" y2="48" stroke={ink} strokeWidth="1" />
        <line x1="28" y1="40" x2="28" y2="48" stroke={ink} strokeWidth="1" />
      </Orn>

      {/* Crown — small flourish */}
      <Orn pos={{ top: 170, right: 180 }} rotate={6} w={72} h={50} opacity={0.45}>
        <path d="M6 38 L6 18 L20 30 L36 8 L52 30 L66 18 L66 38 Z" stroke={yellow} strokeWidth="1.4" fill="rgba(220,180,90,0.30)" strokeLinejoin="round" />
        <line x1="6" y1="42" x2="66" y2="42" stroke={yellow} strokeWidth="1.4" />
        <circle cx="20" cy="30" r="2" fill={red} />
        <circle cx="36" cy="14" r="2" fill={red} />
        <circle cx="52" cy="30" r="2" fill={red} />
      </Orn>
    </div>
  );
}

// ═══════════════════════════════════════════════════════════════
// IV · Beach — sun, palm fronds, waves, beach umbrella, shells
// ═══════════════════════════════════════════════════════════════
function BeachOrnaments() {
  const sun = 'rgba(218,140,70,0.55)';
  const sea = 'rgba(70,120,150,0.45)';
  const palm = 'rgba(80,110,70,0.50)';
  const sand = 'rgba(150,110,70,0.45)';
  const ink = 'rgba(60,40,20,0.50)';
  return (
    <div className="ornaments">
      {/* big sun top-center-right */}
      <Orn pos={{ top: 36, right: 100 }} w={120} h={120} opacity={0.6}>
        <circle cx="60" cy="60" r="26" fill="rgba(218,140,70,0.18)" stroke={sun} strokeWidth="1.4" />
        {Array.from({ length: 14 }).map((_, i) => {
          const a = (i / 14) * Math.PI * 2;
          const x1 = 60 + Math.cos(a) * 34;
          const y1 = 60 + Math.sin(a) * 34;
          const x2 = 60 + Math.cos(a) * 52;
          const y2 = 60 + Math.sin(a) * 52;
          return <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} stroke={sun} strokeWidth="1.5" strokeLinecap="round" />;
        })}
      </Orn>

      {/* palm fronds left */}
      <Orn pos={{ top: 180, left: 18 }} rotate={-8} w={120} h={180} opacity={0.55}>
        <line x1="60" y1="180" x2="60" y2="60" stroke={palm} strokeWidth="2" />
        {[0, 1, 2, 3, 4].map((i) => (
          <g key={i}>
            <path d={`M60 ${66 + i * 10} Q ${30 - i * 4} ${60 + i * 14} ${4 - i * 2} ${72 + i * 18}`} stroke={palm} strokeWidth="1.4" fill="none" />
            <path d={`M60 ${66 + i * 10} Q ${90 + i * 4} ${60 + i * 14} ${116 + i * 2} ${72 + i * 18}`} stroke={palm} strokeWidth="1.4" fill="none" />
          </g>
        ))}
      </Orn>

      {/* beach umbrella bottom-right */}
      <Orn pos={{ bottom: 90, right: 50 }} rotate={4} w={140} h={150} opacity={0.55}>
        <path d="M10 60 Q70 -6 130 60 Z" stroke={sun} strokeWidth="1.4" fill="rgba(218,140,70,0.20)" />
        <path d="M30 60 Q70 18 110 60" stroke={sun} strokeWidth="1" fill="none" />
        <line x1="40" y1="60" x2="40" y2="0" stroke={sun} strokeWidth="0.8" opacity="0.6" />
        <line x1="100" y1="60" x2="100" y2="0" stroke={sun} strokeWidth="0.8" opacity="0.6" />
        <line x1="70" y1="0" x2="70" y2="146" stroke={sand} strokeWidth="1.6" />
      </Orn>

      {/* wave squiggles bottom */}
      <Orn pos={{ bottom: 26, left: 60, right: 60 }} w={undefined} h={36} opacity={0.55} vb="0 0 800 36">
        <path d="M0 18 Q40 4 80 18 T160 18 T240 18 T320 18 T400 18 T480 18 T560 18 T640 18 T720 18 T800 18"
              stroke={sea} strokeWidth="1.6" fill="none" />
        <path d="M0 28 Q40 14 80 28 T160 28 T240 28 T320 28 T400 28 T480 28 T560 28 T640 28 T720 28 T800 28"
              stroke={sea} strokeWidth="1.2" fill="none" opacity="0.6" />
      </Orn>

      {/* extra sun mid */}
      <Orn pos={{ top: '52%', right: 30 }} w={56} h={56} opacity={0.45}>
        <circle cx="28" cy="28" r="10" stroke={sun} strokeWidth="1.2" fill="rgba(218,140,70,0.18)" />
        {Array.from({ length: 10 }).map((_, i) => {
          const a = (i / 10) * Math.PI * 2;
          const x1 = 28 + Math.cos(a) * 14;
          const y1 = 28 + Math.sin(a) * 14;
          const x2 = 28 + Math.cos(a) * 24;
          const y2 = 28 + Math.sin(a) * 24;
          return <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} stroke={sun} strokeWidth="1" strokeLinecap="round" />;
        })}
      </Orn>

      {/* sea shell bottom left */}
      <Orn pos={{ bottom: 80, left: 80 }} rotate={-10} w={60} h={56} opacity={0.5}>
        <path d="M30 4 Q56 28 30 52 Q4 28 30 4 Z" stroke={sand} strokeWidth="1.4" fill="rgba(218,180,140,0.20)" />
        <path d="M30 4 Q30 28 30 52" stroke={sand} strokeWidth="0.8" />
        <path d="M30 4 Q14 24 18 50" stroke={sand} strokeWidth="0.8" fill="none" />
        <path d="M30 4 Q46 24 42 50" stroke={sand} strokeWidth="0.8" fill="none" />
      </Orn>

      {/* HK junk boat — red sails, mid-right */}
      <Orn pos={{ top: '40%', right: 50 }} rotate={-3} w={150} h={130} opacity={0.55}>
        {/* hull */}
        <path d="M10 100 L140 100 L130 116 L20 116 Z" stroke="rgba(80,50,30,0.7)" strokeWidth="1.4" fill="rgba(80,50,30,0.30)" />
        <line x1="10" y1="100" x2="140" y2="100" stroke="rgba(80,50,30,0.7)" strokeWidth="1" />
        {/* masts */}
        <line x1="40" y1="100" x2="40" y2="14" stroke="rgba(80,50,30,0.8)" strokeWidth="1.4" />
        <line x1="100" y1="100" x2="100" y2="6"  stroke="rgba(80,50,30,0.8)" strokeWidth="1.4" />
        {/* big sail */}
        <path d="M100 12 L140 30 L140 90 L100 90 Z" stroke="rgba(170,60,50,0.8)" strokeWidth="1.4" fill="rgba(170,60,50,0.30)" />
        <line x1="100" y1="28" x2="140" y2="40" stroke="rgba(170,60,50,0.6)" strokeWidth="0.6" />
        <line x1="100" y1="44" x2="140" y2="54" stroke="rgba(170,60,50,0.6)" strokeWidth="0.6" />
        <line x1="100" y1="60" x2="140" y2="68" stroke="rgba(170,60,50,0.6)" strokeWidth="0.6" />
        <line x1="100" y1="76" x2="140" y2="82" stroke="rgba(170,60,50,0.6)" strokeWidth="0.6" />
        {/* small sail */}
        <path d="M40 20 L74 38 L74 90 L40 90 Z" stroke="rgba(170,60,50,0.8)" strokeWidth="1.3" fill="rgba(170,60,50,0.26)" />
        <line x1="40" y1="36" x2="74" y2="48" stroke="rgba(170,60,50,0.6)" strokeWidth="0.6" />
        <line x1="40" y1="52" x2="74" y2="62" stroke="rgba(170,60,50,0.6)" strokeWidth="0.6" />
        <line x1="40" y1="68" x2="74" y2="76" stroke="rgba(170,60,50,0.6)" strokeWidth="0.6" />
      </Orn>

      {/* Guitar bottom-left */}
      <Orn pos={{ bottom: 180, left: 30 }} rotate={-18} w={70} h={170} opacity={0.55}>
        <path d="M35 130 Q4 130 4 100 Q4 70 35 70 Q66 70 66 100 Q66 130 35 130 Z" stroke={sand} strokeWidth="1.4" fill="rgba(150,100,60,0.30)" />
        <circle cx="35" cy="96" r="10" stroke={sand} strokeWidth="1.4" fill="rgba(60,40,20,0.30)" />
        <rect x="30" y="20" width="10" height="50" stroke={sand} strokeWidth="1.4" fill="rgba(150,100,60,0.40)" />
        <rect x="28" y="6" width="14" height="16" stroke={sand} strokeWidth="1.4" fill="rgba(60,40,20,0.35)" />
        {/* strings */}
        <line x1="32" y1="10" x2="32" y2="120" stroke={sand} strokeWidth="0.5" />
        <line x1="34" y1="10" x2="34" y2="120" stroke={sand} strokeWidth="0.5" />
        <line x1="36" y1="10" x2="36" y2="120" stroke={sand} strokeWidth="0.5" />
        <line x1="38" y1="10" x2="38" y2="120" stroke={sand} strokeWidth="0.5" />
        {/* frets */}
        <line x1="28" y1="32" x2="42" y2="32" stroke={sand} strokeWidth="0.6" />
        <line x1="28" y1="44" x2="42" y2="44" stroke={sand} strokeWidth="0.6" />
        <line x1="28" y1="56" x2="42" y2="56" stroke={sand} strokeWidth="0.6" />
      </Orn>

      {/* Pineapple cocktail middle */}
      <Orn pos={{ top: '52%', left: 60 }} rotate={4} w={70} h={110} opacity={0.6}>
        {/* glass */}
        <path d="M10 24 L60 24 L52 90 Q52 100 35 100 Q18 100 18 90 Z" stroke={sand} strokeWidth="1.4" fill="rgba(240,210,90,0.30)" />
        <ellipse cx="35" cy="24" rx="25" ry="4" stroke={sand} strokeWidth="1.2" fill="rgba(240,210,90,0.45)" />
        {/* pineapple wedge */}
        <path d="M55 14 L62 14 L60 24 L57 24 Z" stroke={sun} strokeWidth="1.2" fill="rgba(218,180,70,0.55)" />
        <path d="M55 14 L57 4 L60 8 L62 4 L64 14 Z" stroke={palm} strokeWidth="1.2" fill="rgba(80,120,70,0.40)" />
        {/* straw */}
        <line x1="14" y1="6" x2="28" y2="60" stroke="rgba(170,60,50,0.7)" strokeWidth="2" strokeLinecap="round" />
        {/* cherry */}
        <circle cx="42" cy="30" r="4" fill="rgba(170,60,50,0.8)" />
        <path d="M42 26 Q46 18 50 22" stroke={palm} strokeWidth="0.8" fill="none" />
      </Orn>

      {/* Neon-sign-style hand text — "HK summer" */}
      <div style={{
        position: 'absolute', top: 70, left: 30,
        fontFamily: 'Caveat, cursive', fontSize: 32,
        color: 'rgba(255,140,180,0.65)',
        textShadow: '0 0 8px rgba(255,140,180,0.45), 0 0 14px rgba(140,210,255,0.30)',
        letterSpacing: '0.03em', transform: 'rotate(-4deg)',
      }}>~ summer ~</div>

      {/* Firework burst top-right */}
      <Orn pos={{ top: 50, right: 240 }} w={80} h={80} opacity={0.7}>
        {Array.from({ length: 14 }).map((_, i) => {
          const a = (i / 14) * Math.PI * 2;
          const x2 = 40 + Math.cos(a) * 34;
          const y2 = 40 + Math.sin(a) * 34;
          const x1 = 40 + Math.cos(a) * 12;
          const y1 = 40 + Math.sin(a) * 12;
          const colors = ['rgba(255,140,180,0.8)', 'rgba(255,210,90,0.8)', 'rgba(140,210,255,0.8)', 'rgba(180,140,250,0.8)'];
          return <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} stroke={colors[i % 4]} strokeWidth="1.6" strokeLinecap="round" />;
        })}
        {Array.from({ length: 14 }).map((_, i) => {
          const a = (i / 14) * Math.PI * 2;
          const x = 40 + Math.cos(a) * 38;
          const y = 40 + Math.sin(a) * 38;
          return <circle key={`d${i}`} cx={x} cy={y} r="1.6" fill="rgba(255,210,90,0.85)" />;
        })}
      </Orn>

      {/* Disney castle silhouette small */}
      <Orn pos={{ bottom: 220, right: 280 }} rotate={-2} w={120} h={100} opacity={0.4}>
        <path d="M6 96 L6 56 L18 56 L18 38 L28 38 L28 56 L40 56 L40 24 L48 14 L56 24 L56 56 L68 56 L68 16 L76 6 L84 16 L84 56 L96 56 L96 38 L106 38 L106 56 L114 56 L114 96 Z"
              stroke={sand} strokeWidth="1.4" fill="rgba(180,160,200,0.22)" strokeLinejoin="round" />
        <path d="M44 14 L52 14 M72 6 L80 6" stroke="rgba(170,60,50,0.6)" strokeWidth="1" />
      </Orn>

      {/* mahjong-tile-style small frame */}
      <Orn pos={{ bottom: 70, left: 220 }} rotate={4} w={40} h={56} opacity={0.5}>
        <rect x="4" y="4" width="32" height="48" stroke={sand} strokeWidth="1.3" fill="rgba(245,238,222,0.55)" rx="3" />
        <circle cx="20" cy="18" r="4" stroke={palm} strokeWidth="1" fill="rgba(80,120,70,0.40)" />
        <circle cx="20" cy="32" r="4" stroke={palm} strokeWidth="1" fill="rgba(80,120,70,0.40)" />
        <circle cx="20" cy="46" r="4" stroke={palm} strokeWidth="1" fill="rgba(80,120,70,0.40)" />
      </Orn>

      {/* Disneyland castle — top left */}
      <Orn pos={{ top: 60, left: 30 }} rotate={-2} w={130} h={150} opacity={0.50}>
        <rect x="50" y="62" width="30" height="78" stroke={sea} strokeWidth="1.4" fill="rgba(70,120,150,0.16)" />
        <rect x="20" y="84" width="22" height="56" stroke={sea} strokeWidth="1.4" fill="rgba(70,120,150,0.16)" />
        <rect x="88" y="84" width="22" height="56" stroke={sea} strokeWidth="1.4" fill="rgba(70,120,150,0.16)" />
        {/* center spire */}
        <path d="M50 62 L65 30 L80 62 Z" stroke={sea} strokeWidth="1.4" fill="rgba(70,120,150,0.16)" />
        <line x1="65" y1="30" x2="65" y2="14" stroke={sea} strokeWidth="1" />
        <circle cx="65" cy="11" r="2" fill={sand} />
        {/* side spires */}
        <path d="M20 84 L31 62 L42 84 Z" stroke={sea} strokeWidth="1.2" fill="rgba(70,120,150,0.16)" />
        <path d="M88 84 L99 62 L110 84 Z" stroke={sea} strokeWidth="1.2" fill="rgba(70,120,150,0.16)" />
        <line x1="31" y1="62" x2="31" y2="50" stroke={sea} strokeWidth="0.8" />
        <line x1="99" y1="62" x2="99" y2="50" stroke={sea} strokeWidth="0.8" />
        {/* gate */}
        <path d="M58 140 L58 112 Q58 102 65 102 Q72 102 72 112 L72 140" stroke={sea} strokeWidth="1.2" fill="rgba(40,30,20,0.18)" />
        {/* windows */}
        <rect x="26" y="96" width="5" height="8" stroke={sea} strokeWidth="0.6" />
        <rect x="32" y="96" width="5" height="8" stroke={sea} strokeWidth="0.6" />
        <rect x="94" y="96" width="5" height="8" stroke={sea} strokeWidth="0.6" />
        <rect x="100" y="96" width="5" height="8" stroke={sea} strokeWidth="0.6" />
      </Orn>

      {/* Horse silhouette (races) — bottom middle */}
      <Orn pos={{ bottom: 180, left: '40%' }} rotate={-2} w={130} h={86} opacity={0.40}>
        <path d="M8 70 Q12 50 28 50 L44 50 Q48 38 60 36 Q62 24 74 22 Q80 14 90 12 Q98 8 102 14 Q104 22 96 24 L96 32 Q104 32 110 38 Q120 44 120 56 L116 60 L108 56 L108 70 L100 70 L100 60 L80 60 L74 70 L66 70 L70 60 L40 60 L36 70 Z"
              stroke={ink} strokeWidth="1.2" fill="rgba(60,40,20,0.20)" />
        {/* mane */}
        <path d="M76 22 Q78 16 74 12 M82 22 Q86 14 82 8" stroke={ink} strokeWidth="0.8" fill="none" />
        {/* tail */}
        <path d="M8 70 Q-2 78 4 90 Q12 84 16 76" stroke={ink} strokeWidth="1.2" fill="rgba(60,40,20,0.20)" />
        <circle cx="92" cy="18" r="0.9" fill={sand} />
      </Orn>

      {/* Acoustic guitar — middle right */}
      <Orn pos={{ top: '40%', right: 28 }} rotate={28} w={70} h={170} opacity={0.50}>
        <path d="M35 154 Q12 154 12 130 Q12 110 28 102 Q24 90 28 80 Q26 74 32 72 Q34 64 35 60 Q36 64 38 72 Q44 74 42 80 Q46 90 42 102 Q58 110 58 130 Q58 154 35 154 Z"
              stroke={ink} strokeWidth="1.4" fill="rgba(180,140,90,0.20)" />
        <circle cx="35" cy="124" r="9" stroke={ink} strokeWidth="1.2" fill="rgba(40,30,20,0.30)" />
        <circle cx="35" cy="124" r="5" stroke={ink} strokeWidth="0.8" fill="none" />
        {/* neck */}
        <rect x="32" y="14" width="6" height="46" stroke={ink} strokeWidth="1.2" fill="rgba(80,55,30,0.30)" />
        {/* head */}
        <rect x="30" y="2" width="10" height="14" stroke={ink} strokeWidth="1.2" fill="rgba(40,25,15,0.30)" />
        {/* frets */}
        <line x1="32" y1="22" x2="38" y2="22" stroke={ink} strokeWidth="0.6" />
        <line x1="32" y1="30" x2="38" y2="30" stroke={ink} strokeWidth="0.6" />
        <line x1="32" y1="38" x2="38" y2="38" stroke={ink} strokeWidth="0.6" />
        <line x1="32" y1="46" x2="38" y2="46" stroke={ink} strokeWidth="0.6" />
        {/* strings */}
        <line x1="34" y1="14" x2="34" y2="140" stroke={ink} strokeWidth="0.4" />
        <line x1="36" y1="14" x2="36" y2="140" stroke={ink} strokeWidth="0.4" />
        {/* bridge */}
        <rect x="28" y="138" width="14" height="3" fill={ink} opacity="0.6" />
      </Orn>

      {/* Blokus squares — bottom */}
      <Orn pos={{ bottom: 60, right: 110 }} rotate={6} w={100} h={70} opacity={0.55}>
        {/* L-piece red */}
        <rect x="2"  y="2"  width="14" height="14" fill="rgba(180,40,50,0.40)" stroke={ink} strokeWidth="0.6" />
        <rect x="2"  y="16" width="14" height="14" fill="rgba(180,40,50,0.40)" stroke={ink} strokeWidth="0.6" />
        <rect x="2"  y="30" width="14" height="14" fill="rgba(180,40,50,0.40)" stroke={ink} strokeWidth="0.6" />
        <rect x="16" y="30" width="14" height="14" fill="rgba(180,40,50,0.40)" stroke={ink} strokeWidth="0.6" />
        {/* blue 2x2 */}
        <rect x="38" y="10" width="14" height="14" fill="rgba(70,120,170,0.40)" stroke={ink} strokeWidth="0.6" />
        <rect x="52" y="10" width="14" height="14" fill="rgba(70,120,170,0.40)" stroke={ink} strokeWidth="0.6" />
        <rect x="38" y="24" width="14" height="14" fill="rgba(70,120,170,0.40)" stroke={ink} strokeWidth="0.6" />
        <rect x="52" y="24" width="14" height="14" fill="rgba(70,120,170,0.40)" stroke={ink} strokeWidth="0.6" />
        {/* yellow T */}
        <rect x="72" y="2"  width="14" height="14" fill="rgba(218,180,70,0.50)" stroke={ink} strokeWidth="0.6" />
        <rect x="86" y="2"  width="14" height="14" fill="rgba(218,180,70,0.50)" stroke={ink} strokeWidth="0.6" />
        <rect x="86" y="16" width="14" height="14" fill="rgba(218,180,70,0.50)" stroke={ink} strokeWidth="0.6" />
        <rect x="86" y="30" width="14" height="14" fill="rgba(218,180,70,0.50)" stroke={ink} strokeWidth="0.6" />
        {/* green stair */}
        <rect x="36" y="48" width="14" height="14" fill="rgba(60,140,90,0.45)" stroke={ink} strokeWidth="0.6" />
        <rect x="50" y="48" width="14" height="14" fill="rgba(60,140,90,0.45)" stroke={ink} strokeWidth="0.6" />
        <rect x="64" y="48" width="14" height="14" fill="rgba(60,140,90,0.45)" stroke={ink} strokeWidth="0.6" />
      </Orn>

      {/* Playing card */}
      <Orn pos={{ top: 230, right: 220 }} rotate={-12} w={48} h={66} opacity={0.55}>
        <rect x="2" y="2" width="44" height="62" rx="4" stroke={ink} strokeWidth="1.2" fill="rgba(255,250,240,0.90)" />
        <text x="8" y="14" fontFamily="Georgia, serif" fontSize="9" fill="rgba(180,40,50,0.85)">A</text>
        <path d="M24 22 L20 28 L24 32 L28 28 Z M24 32 L20 38 L24 42 L28 38 Z M24 28 Q22 30 24 32 Q26 30 24 28 Z"
              fill="rgba(180,40,50,0.85)" />
        <path d="M24 28 L21 32 L24 40 L27 32 Z" fill="rgba(180,40,50,0.85)" />
        <text x="40" y="58" fontFamily="Georgia, serif" fontSize="9" fill="rgba(180,40,50,0.85)" textAnchor="end">A</text>
      </Orn>

      {/* Pair of dice */}
      <Orn pos={{ top: 130, right: 220 }} rotate={8} w={70} h={48} opacity={0.50}>
        <rect x="2"  y="6"  width="30" height="30" rx="4" stroke={ink} strokeWidth="1.2" fill="rgba(255,250,240,0.85)" />
        <circle cx="17" cy="21" r="2" fill={ink} />
        <rect x="36" y="14" width="30" height="30" rx="4" stroke={ink} strokeWidth="1.2" fill="rgba(255,250,240,0.85)" />
        <circle cx="44" cy="22" r="1.6" fill={ink} />
        <circle cx="58" cy="22" r="1.6" fill={ink} />
        <circle cx="44" cy="36" r="1.6" fill={ink} />
        <circle cx="58" cy="36" r="1.6" fill={ink} />
      </Orn>
    </div>
  );
}

// ═══════════════════════════════════════════════════════════════
// VI · Music of the Spheres — planets, orbital arcs, confetti stars
// ═══════════════════════════════════════════════════════════════
function SpheresOrnaments() {
  const yellow = '#ffd86a';
  const pink   = '#ff8fb0';
  const blue   = '#8ad4ff';
  const purple = '#b08cff';
  const green  = '#9ee0a8';
  const orange = '#ffb47a';
  const orbit  = 'rgba(255, 230, 200, 0.32)';
  return (
    <div className="ornaments">
      {/* Big "sun" / yellow planet top-right */}
      <Orn pos={{ top: 28, right: 56 }} w={150} h={150} opacity={0.95}>
        <defs>
          <radialGradient id="sun-g" cx="38%" cy="36%" r="65%">
            <stop offset="0%"  stopColor="#fff3b8" />
            <stop offset="60%" stopColor={yellow} />
            <stop offset="100%" stopColor="#c98b2a" />
          </radialGradient>
        </defs>
        <circle cx="75" cy="75" r="56" fill="url(#sun-g)" />
        <circle cx="75" cy="75" r="56" stroke="rgba(255,255,255,0.25)" strokeWidth="1" />
      </Orn>

      {/* concentric orbital arcs spanning the section, center-ish */}
      <Orn pos={{ top: '40%', left: '50%', transform: 'translate(-50%,-50%)' }} w={900} h={900} opacity={0.18}>
        <circle cx="450" cy="450" r="200" stroke={orbit} strokeWidth="1" strokeDasharray="2 6" />
        <circle cx="450" cy="450" r="300" stroke={orbit} strokeWidth="1" strokeDasharray="2 6" />
        <circle cx="450" cy="450" r="380" stroke={orbit} strokeWidth="1" strokeDasharray="2 6" />
      </Orn>

      {/* pink planet left middle */}
      <Orn pos={{ top: 280, left: 36 }} w={70} h={70} opacity={0.9}>
        <defs>
          <radialGradient id="p-pink" cx="35%" cy="32%" r="68%">
            <stop offset="0%" stopColor="#ffd0e0" />
            <stop offset="100%" stopColor={pink} />
          </radialGradient>
        </defs>
        <circle cx="35" cy="35" r="28" fill="url(#p-pink)" />
      </Orn>

      {/* ringed planet (saturn-like) mid right */}
      <Orn pos={{ top: '50%', right: 80 }} rotate={-20} w={130} h={80} opacity={0.85}>
        <ellipse cx="65" cy="40" rx="60" ry="14" stroke={orange} strokeWidth="2" fill="none" />
        <defs>
          <radialGradient id="p-orange" cx="35%" cy="32%" r="68%">
            <stop offset="0%" stopColor="#ffe0c0" />
            <stop offset="100%" stopColor={orange} />
          </radialGradient>
        </defs>
        <circle cx="65" cy="40" r="22" fill="url(#p-orange)" />
        <ellipse cx="65" cy="40" rx="60" ry="14" stroke={orange} strokeWidth="2" fill="none" strokeDasharray="60 200" />
      </Orn>

      {/* small blue planet bottom-center-left */}
      <Orn pos={{ bottom: 160, left: 220 }} w={50} h={50} opacity={0.9}>
        <defs>
          <radialGradient id="p-blue" cx="35%" cy="32%" r="68%">
            <stop offset="0%" stopColor="#d4eeff" />
            <stop offset="100%" stopColor={blue} />
          </radialGradient>
        </defs>
        <circle cx="25" cy="25" r="20" fill="url(#p-blue)" />
      </Orn>

      {/* purple moon bottom-right */}
      <Orn pos={{ bottom: 100, right: 240 }} w={40} h={40} opacity={0.85}>
        <defs>
          <radialGradient id="p-purple" cx="35%" cy="32%" r="68%">
            <stop offset="0%" stopColor="#e0d0ff" />
            <stop offset="100%" stopColor={purple} />
          </radialGradient>
        </defs>
        <circle cx="20" cy="20" r="15" fill="url(#p-purple)" />
      </Orn>

      {/* tiny green planet top-left */}
      <Orn pos={{ top: 200, left: 200 }} w={32} h={32} opacity={0.85}>
        <defs>
          <radialGradient id="p-green" cx="35%" cy="32%" r="68%">
            <stop offset="0%" stopColor="#d8ffe0" />
            <stop offset="100%" stopColor={green} />
          </radialGradient>
        </defs>
        <circle cx="16" cy="16" r="13" fill="url(#p-green)" />
      </Orn>

      {/* 4-point stars sprinkled */}
      {[
        { top: 120, left: 240, s: 18, o: 0.9 },
        { top: 380, right: 260, s: 22, o: 1 },
        { bottom: 320, left: 140, s: 14, o: 0.85 },
        { bottom: 220, right: 60, s: 18, o: 0.95 },
        { top: 60, left: '40%', s: 12, o: 0.7 },
        { top: 480, left: 90, s: 12, o: 0.7 },
        { bottom: 60, left: '45%', s: 16, o: 0.85 },
      ].map((p, i) => (
        <Orn key={i} pos={p} w={p.s * 2} h={p.s * 2} opacity={p.o}>
          <path d={`M${p.s} 0 L${p.s + p.s * 0.18} ${p.s - p.s * 0.18} L${p.s * 2} ${p.s} L${p.s + p.s * 0.18} ${p.s + p.s * 0.18} L${p.s} ${p.s * 2} L${p.s - p.s * 0.18} ${p.s + p.s * 0.18} L0 ${p.s} L${p.s - p.s * 0.18} ${p.s - p.s * 0.18} Z`}
                fill="#fff8e0" />
        </Orn>
      ))}

      {/* hieroglyph-y stripe bottom */}
      <div style={{
        position: 'absolute', bottom: 18, left: '50%', transform: 'translateX(-50%)',
        fontFamily: 'JetBrains Mono, monospace', fontSize: 11, letterSpacing: '0.45em',
        color: 'rgba(255,216,106,0.55)', whiteSpace: 'nowrap',
      }}>◯ ✦ ◐ · MUSIC · OF · THE · SPHERES · ◐ ✦ ◯</div>
    </div>
  );
}

// ═══════════════════════════════════════════════════════════════
// VII · Christmas — snowflakes, holly, pine trees, baubles
// ═══════════════════════════════════════════════════════════════
function ChristmasOrnaments() {
  const red   = 'rgba(180,40,50,0.55)';
  const green = 'rgba(40,110,60,0.60)';
  const gold  = 'rgba(180,140,60,0.65)';
  return (
    <div className="ornaments">
      {/* pine tree left */}
      <Orn pos={{ top: 130, left: 28 }} rotate={-3} w={80} h={140} opacity={0.55}>
        <path d="M40 6 L60 36 L48 36 L66 64 L52 64 L74 100 L6 100 L28 64 L14 64 L32 36 L20 36 Z"
              stroke={green} strokeWidth="1.4" fill="rgba(40,110,60,0.16)" strokeLinejoin="round" />
        <rect x="32" y="100" width="16" height="14" stroke={green} strokeWidth="1.2" fill="rgba(80,60,40,0.3)" />
        <path d="M40 0 L42 12 L40 4 L38 12 Z" stroke={gold} strokeWidth="1.2" fill={gold} />
        {/* ornaments */}
        <circle cx="32" cy="58" r="3" fill={red} />
        <circle cx="48" cy="80" r="3" fill={gold} />
        <circle cx="22" cy="92" r="3" fill={red} />
        <circle cx="58" cy="92" r="3" fill={green} />
      </Orn>

      {/* second smaller tree bottom-right */}
      <Orn pos={{ bottom: 110, right: 50 }} rotate={4} w={64} h={112} opacity={0.55}>
        <path d="M32 4 L48 28 L40 28 L54 50 L42 50 L60 80 L4 80 L22 50 L10 50 L24 28 L16 28 Z"
              stroke={green} strokeWidth="1.4" fill="rgba(40,110,60,0.16)" strokeLinejoin="round" />
        <rect x="26" y="80" width="12" height="12" stroke={green} strokeWidth="1.2" fill="rgba(80,60,40,0.3)" />
        <circle cx="24" cy="46" r="2.5" fill={red} />
        <circle cx="40" cy="64" r="2.5" fill={gold} />
        <circle cx="18" cy="72" r="2.5" fill={red} />
      </Orn>

      {/* snowflakes */}
      {[
        { top: 80, right: 80, s: 28, r: 0 },
        { top: 360, left: 80, s: 22, r: 15 },
        { top: 220, right: 60, s: 18, r: -10 },
        { bottom: 200, left: 220, s: 24, r: 10 },
        { top: 540, right: 200, s: 20, r: -20 },
        { bottom: 60, right: 220, s: 16, r: 30 },
        { top: 460, left: 'calc(50% - 100px)', s: 20, r: 25 },
      ].map((p, i) => {
        const c = p.s;
        return (
          <Orn key={i} pos={p} rotate={p.r} w={c * 2} h={c * 2} opacity={0.55}>
            {Array.from({ length: 6 }).map((_, j) => {
              const a = (j / 6) * Math.PI * 2;
              const x = c + Math.cos(a) * c * 0.9;
              const y = c + Math.sin(a) * c * 0.9;
              const bx1 = c + Math.cos(a) * c * 0.55;
              const by1 = c + Math.sin(a) * c * 0.55;
              const bx2 = c + Math.cos(a + 0.35) * c * 0.4;
              const by2 = c + Math.sin(a + 0.35) * c * 0.4;
              const bx3 = c + Math.cos(a - 0.35) * c * 0.4;
              const by3 = c + Math.sin(a - 0.35) * c * 0.4;
              return (
                <g key={j} stroke={gold} strokeWidth="1.2" strokeLinecap="round">
                  <line x1={c} y1={c} x2={x} y2={y} />
                  <line x1={bx1} y1={by1} x2={bx2} y2={by2} />
                  <line x1={bx1} y1={by1} x2={bx3} y2={by3} />
                </g>
              );
            })}
            <circle cx={c} cy={c} r="1.6" fill={gold} />
          </Orn>
        );
      })}

      {/* holly cluster top-left */}
      <Orn pos={{ top: 50, left: 50 }} rotate={-12} w={90} h={70} opacity={0.65}>
        <path d="M10 36 Q24 14 44 34 Q60 14 78 34 Q66 50 50 42 Q40 56 24 46 Q12 50 10 36 Z"
              stroke={green} strokeWidth="1.3" fill="rgba(40,110,60,0.18)" strokeLinejoin="round" />
        <path d="M44 34 L44 14 M44 34 L48 14" stroke={green} strokeWidth="0.8" />
        <circle cx="44" cy="40" r="4" fill={red} />
        <circle cx="50" cy="44" r="4" fill={red} />
        <circle cx="38" cy="44" r="4" fill={red} />
      </Orn>

      {/* hanging bauble top-right */}
      <Orn pos={{ top: 16, right: 240 }} w={50} h={120} opacity={0.6}>
        <line x1="25" y1="0" x2="25" y2="60" stroke={gold} strokeWidth="1" />
        <circle cx="25" cy="78" r="18" fill="rgba(180,40,50,0.30)" stroke={red} strokeWidth="1.4" />
        <rect x="20" y="60" width="10" height="6" stroke={gold} strokeWidth="1" fill="rgba(180,140,60,0.4)" />
        <path d="M11 76 Q25 88 39 76" stroke={gold} strokeWidth="1" fill="none" />
      </Orn>

      {/* second bauble */}
      <Orn pos={{ top: 16, left: '52%' }} w={42} h={100} opacity={0.55}>
        <line x1="21" y1="0" x2="21" y2="48" stroke={gold} strokeWidth="1" />
        <circle cx="21" cy="64" r="14" fill="rgba(40,110,60,0.30)" stroke={green} strokeWidth="1.4" />
        <rect x="17" y="48" width="8" height="6" stroke={gold} strokeWidth="1" fill="rgba(180,140,60,0.4)" />
      </Orn>
    </div>
  );
}

// ═══════════════════════════════════════════════════════════════
// VIII · Tennis / cocktails / breakfast
// ═══════════════════════════════════════════════════════════════
function TennisOrnaments() {
  const ball = 'rgba(180,200,80,0.70)';
  const ballStroke = 'rgba(120,140,60,0.65)';
  const ink = 'rgba(60,40,20,0.50)';
  const coffee = 'rgba(110,70,40,0.55)';
  const cocktail = 'rgba(80,130,160,0.55)';
  const yellow = 'rgba(218,180,70,0.65)';
  return (
    <div className="ornaments">
      {/* tennis ball top-right (big) */}
      <Orn pos={{ top: 30, right: 70 }} w={92} h={92} opacity={0.85}>
        <circle cx="46" cy="46" r="38" fill="rgba(200,220,100,0.30)" stroke={ballStroke} strokeWidth="1.6" />
        <path d="M12 32 Q46 48 80 32" stroke={ballStroke} strokeWidth="1.4" fill="none" />
        <path d="M12 60 Q46 44 80 60" stroke={ballStroke} strokeWidth="1.4" fill="none" />
      </Orn>

      {/* tennis racket top-left of body */}
      <Orn pos={{ top: 200, left: 24 }} rotate={-26} w={84} h={170} opacity={0.55}>
        <ellipse cx="42" cy="50" rx="32" ry="40" stroke={ink} strokeWidth="2" fill="none" />
        {/* strings */}
        <line x1="14" y1="50" x2="70" y2="50" stroke={ink} strokeWidth="0.6" />
        <line x1="16" y1="38" x2="68" y2="38" stroke={ink} strokeWidth="0.6" />
        <line x1="16" y1="62" x2="68" y2="62" stroke={ink} strokeWidth="0.6" />
        <line x1="20" y1="26" x2="64" y2="26" stroke={ink} strokeWidth="0.6" />
        <line x1="20" y1="74" x2="64" y2="74" stroke={ink} strokeWidth="0.6" />
        <line x1="42" y1="10" x2="42" y2="90" stroke={ink} strokeWidth="0.6" />
        <line x1="30" y1="14" x2="30" y2="86" stroke={ink} strokeWidth="0.6" />
        <line x1="54" y1="14" x2="54" y2="86" stroke={ink} strokeWidth="0.6" />
        {/* handle */}
        <rect x="38" y="90" width="8" height="68" stroke={ink} strokeWidth="1.6" fill="rgba(60,40,20,0.2)" />
        {/* grip wrap */}
        {Array.from({ length: 7 }).map((_, i) => (
          <line key={i} x1="38" y1={104 + i * 7} x2="46" y2={108 + i * 7} stroke={ink} strokeWidth="0.6" />
        ))}
      </Orn>

      {/* cocktail / martini glass right middle */}
      <Orn pos={{ top: '40%', right: 36 }} rotate={4} w={92} h={130} opacity={0.6}>
        <path d="M10 14 L82 14 L46 64 Z" stroke={ink} strokeWidth="1.6" fill="rgba(80,130,160,0.20)" />
        <line x1="46" y1="64" x2="46" y2="110" stroke={ink} strokeWidth="1.6" />
        <ellipse cx="46" cy="116" rx="22" ry="4" stroke={ink} strokeWidth="1.6" fill="rgba(60,40,20,0.10)" />
        {/* olive */}
        <circle cx="56" cy="32" r="4" stroke={ink} strokeWidth="1" fill={yellow} />
        <line x1="56" y1="28" x2="76" y2="6" stroke={ink} strokeWidth="0.8" />
        {/* surface ellipse */}
        <ellipse cx="46" cy="14" rx="36" ry="4" stroke={cocktail} strokeWidth="0.8" fill="none" />
      </Orn>

      {/* coffee cup bottom-left */}
      <Orn pos={{ bottom: 90, left: 60 }} rotate={-6} w={110} h={92} opacity={0.6}>
        <path d="M10 26 L10 66 Q10 82 30 82 L66 82 Q86 82 86 66 L86 26 Z" stroke={ink} strokeWidth="1.6" fill="rgba(110,70,40,0.16)" />
        <ellipse cx="48" cy="26" rx="38" ry="8" stroke={ink} strokeWidth="1.6" fill="rgba(110,70,40,0.35)" />
        {/* handle */}
        <path d="M86 36 Q104 40 104 54 Q104 68 86 70" stroke={ink} strokeWidth="1.6" fill="none" />
        {/* steam */}
        <path d="M28 14 Q34 8 30 0" stroke={coffee} strokeWidth="1" fill="none" />
        <path d="M44 14 Q50 8 46 0" stroke={coffee} strokeWidth="1" fill="none" />
        <path d="M60 14 Q66 8 62 0" stroke={coffee} strokeWidth="1" fill="none" />
      </Orn>

      {/* pancake stack bottom-right */}
      <Orn pos={{ bottom: 110, right: 80 }} rotate={3} w={120} h={94} opacity={0.6}>
        <ellipse cx="60" cy="78" rx="52" ry="10" stroke={ink} strokeWidth="1.4" fill="rgba(190,140,80,0.30)" />
        <path d="M8 78 L8 70 Q8 60 60 60 Q112 60 112 70 L112 78" stroke={ink} strokeWidth="1.4" fill="rgba(190,140,80,0.30)" />
        <ellipse cx="60" cy="60" rx="52" ry="10" stroke={ink} strokeWidth="1.4" fill="rgba(220,170,90,0.30)" />
        <path d="M10 60 L10 52 Q10 42 60 42 Q110 42 110 52 L110 60" stroke={ink} strokeWidth="1.4" fill="rgba(220,170,90,0.30)" />
        <ellipse cx="60" cy="42" rx="50" ry="10" stroke={ink} strokeWidth="1.4" fill="rgba(240,200,110,0.35)" />
        {/* butter */}
        <rect x="48" y="32" width="22" height="10" stroke={yellow} strokeWidth="1" fill="rgba(240,210,90,0.65)" />
        {/* syrup drips */}
        <path d="M30 42 Q34 56 30 70 M88 42 Q86 56 90 68" stroke="rgba(140,80,40,0.55)" strokeWidth="1.4" fill="none" />
      </Orn>

      {/* lemon slice middle */}
      <Orn pos={{ top: '54%', left: 110 }} rotate={-8} w={70} h={70} opacity={0.6}>
        <circle cx="35" cy="35" r="30" stroke={yellow} strokeWidth="1.4" fill="rgba(240,210,90,0.30)" />
        <circle cx="35" cy="35" r="22" stroke={yellow} strokeWidth="0.8" fill="none" />
        {Array.from({ length: 8 }).map((_, i) => {
          const a = (i / 8) * Math.PI * 2;
          const x1 = 35 + Math.cos(a) * 6;
          const y1 = 35 + Math.sin(a) * 6;
          const x2 = 35 + Math.cos(a) * 22;
          const y2 = 35 + Math.sin(a) * 22;
          return <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} stroke={yellow} strokeWidth="0.8" />;
        })}
        <circle cx="35" cy="35" r="2" fill={yellow} />
      </Orn>

      {/* small extra ball */}
      <Orn pos={{ bottom: 220, left: 240 }} w={42} h={42} opacity={0.7}>
        <circle cx="21" cy="21" r="17" fill="rgba(200,220,100,0.30)" stroke={ballStroke} strokeWidth="1.2" />
        <path d="M5 14 Q21 22 37 14" stroke={ballStroke} strokeWidth="1" fill="none" />
        <path d="M5 28 Q21 20 37 28" stroke={ballStroke} strokeWidth="1" fill="none" />
      </Orn>

      {/* Tennis net — across mid section */}
      <Orn pos={{ top: '32%', left: 140, right: 160 }} w={undefined} h={64} opacity={0.30} vb="0 0 600 64">
        {/* poles */}
        <line x1="4" y1="6" x2="4" y2="62" stroke={ink} strokeWidth="2" />
        <line x1="596" y1="6" x2="596" y2="62" stroke={ink} strokeWidth="2" />
        {/* top band */}
        <line x1="4" y1="10" x2="596" y2="10" stroke={ink} strokeWidth="2.5" />
        {/* mesh — vertical */}
        {Array.from({ length: 30 }).map((_, i) => (
          <line key={`v${i}`} x1={20 + i * 19} y1="10" x2={20 + i * 19} y2="58" stroke={ink} strokeWidth="0.5" />
        ))}
        {/* mesh — horizontal */}
        {Array.from({ length: 6 }).map((_, i) => (
          <line key={`h${i}`} x1="4" y1={18 + i * 8} x2="596" y2={18 + i * 8} stroke={ink} strokeWidth="0.5" />
        ))}
        {/* base line */}
        <line x1="4" y1="62" x2="596" y2="62" stroke={ink} strokeWidth="1.2" />
      </Orn>

      {/* Fried egg — bottom-left */}
      <Orn pos={{ bottom: 60, left: 220 }} rotate={-6} w={96} h={76} opacity={0.60}>
        <path d="M48 4 Q70 0 80 14 Q94 18 92 36 Q96 50 80 58 Q86 70 64 70 Q52 78 36 70 Q18 74 12 60 Q-2 50 8 36 Q4 18 22 14 Q32 0 48 4 Z"
              stroke={ink} strokeWidth="1" fill="rgba(255,250,240,0.80)" />
        <circle cx="50" cy="38" r="13" fill="rgba(240,190,60,0.85)" stroke={yellow} strokeWidth="1" />
        <circle cx="46" cy="34" r="3.5" fill="rgba(255,235,150,0.95)" />
      </Orn>

      {/* Croissant — top middle */}
      <Orn pos={{ top: 180, left: 200 }} rotate={-12} w={100} h={62} opacity={0.55}>
        <path d="M10 50 Q4 30 18 18 Q34 4 56 8 Q78 12 88 28 Q96 44 84 54 Q82 46 76 44 Q74 50 68 50 Q66 42 60 40 Q58 48 52 48 Q50 40 44 38 Q42 46 36 46 Q34 38 28 38 Q26 46 20 48 Q14 52 10 50 Z"
              stroke="rgba(110,70,40,0.70)" strokeWidth="1.2" fill="rgba(220,170,90,0.45)" strokeLinejoin="round" />
        <path d="M22 32 Q28 26 32 32 M38 28 Q44 22 48 28 M54 26 Q60 20 64 26 M70 28 Q76 22 80 28"
              stroke="rgba(110,70,40,0.60)" strokeWidth="0.8" fill="none" />
      </Orn>

      {/* Sunglasses — top left */}
      <Orn pos={{ top: 90, left: 28 }} rotate={-4} w={120} h={50} opacity={0.55}>
        <ellipse cx="28" cy="26" rx="22" ry="16" stroke={ink} strokeWidth="1.6" fill="rgba(40,30,20,0.45)" />
        <ellipse cx="92" cy="26" rx="22" ry="16" stroke={ink} strokeWidth="1.6" fill="rgba(40,30,20,0.45)" />
        <path d="M50 20 Q60 14 70 20" stroke={ink} strokeWidth="1.6" fill="none" />
        <line x1="6" y1="18" x2="0" y2="14" stroke={ink} strokeWidth="1.4" />
        <line x1="114" y1="18" x2="120" y2="14" stroke={ink} strokeWidth="1.4" />
        {/* glare */}
        <line x1="18" y1="18" x2="26" y2="14" stroke="rgba(255,255,255,0.7)" strokeWidth="1.2" />
        <line x1="82" y1="18" x2="90" y2="14" stroke="rgba(255,255,255,0.7)" strokeWidth="1.2" />
      </Orn>

      {/* Hotel keycard — middle */}
      <Orn pos={{ top: 440, right: 220 }} rotate={14} w={110} h={74} opacity={0.55}>
        <rect x="2" y="6" width="106" height="60" rx="4" stroke={ink} strokeWidth="1.4" fill="rgba(245,238,224,0.85)" />
        <rect x="2" y="14" width="106" height="4" fill={coffee} />
        <text x="12" y="40" fontFamily="JetBrains Mono, monospace" fontSize="9" letterSpacing="2" fill={ink}>ROOM</text>
        <text x="12" y="56" fontFamily="Georgia, serif" fontSize="22" fontWeight="700" fill={coffee}>1208</text>
        {/* chip */}
        <rect x="78" y="36" width="22" height="18" stroke={yellow} strokeWidth="0.8" fill="rgba(218,180,70,0.40)" />
        <line x1="78" y1="42" x2="100" y2="42" stroke={yellow} strokeWidth="0.6" />
        <line x1="78" y1="48" x2="100" y2="48" stroke={yellow} strokeWidth="0.6" />
        <line x1="89" y1="36" x2="89" y2="54" stroke={yellow} strokeWidth="0.6" />
      </Orn>
    </div>
  );
}

// ═══════════════════════════════════════════════════════════════
// I · Sicily — Wizz plane, cypress trees, pizza slice, arancini,
// lemon, espresso, vespa, train, cable car, sun.
// ═══════════════════════════════════════════════════════════════
function SicilyOrnaments() {
  const ink = 'rgba(60,40,20,0.55)';
  const olive = 'rgba(90,110,60,0.60)';
  const lemon = 'rgba(218,180,70,0.70)';
  const tomato = 'rgba(180,60,50,0.55)';
  const wizz = 'rgba(200,80,140,0.45)';
  const sea = 'rgba(80,130,160,0.45)';
  const cream = 'rgba(245,238,224,0.85)';
  return (
    <div className="ornaments">
      {/* Sun upper right */}
      <Orn pos={{ top: 36, right: 60 }} w={104} h={104} opacity={0.55}>
        <circle cx="52" cy="52" r="22" stroke={lemon} strokeWidth="1.6" fill="rgba(218,180,70,0.18)" />
        {Array.from({ length: 12 }).map((_, i) => {
          const a = (i / 12) * Math.PI * 2;
          const x1 = 52 + Math.cos(a) * 30;
          const y1 = 52 + Math.sin(a) * 30;
          const x2 = 52 + Math.cos(a) * 44;
          const y2 = 52 + Math.sin(a) * 44;
          return <line key={i} x1={x1} y1={y1} x2={x2} y2={y2} stroke={lemon} strokeWidth="1.6" strokeLinecap="round" />;
        })}
      </Orn>

      {/* Wizz Air plane — top, descending */}
      <Orn pos={{ top: 80, left: '38%' }} rotate={-12} w={160} h={66} opacity={0.50}>
        <path d="M4 32 L106 32 Q124 24 148 18 Q156 16 156 22 Q156 28 144 32 L106 38 L60 38 L40 56 L30 56 L40 38 L16 38 Z"
              stroke={wizz} strokeWidth="1.4" fill="rgba(200,80,140,0.20)" strokeLinejoin="round" />
        {/* tail fin */}
        <path d="M16 32 L8 18 L20 18 L26 32 Z" stroke={wizz} strokeWidth="1.4" fill="rgba(200,80,140,0.25)" />
        {/* windows */}
        {Array.from({ length: 8 }).map((_, i) => (
          <circle key={i} cx={40 + i * 8} cy="33" r="1.2" fill={wizz} />
        ))}
        {/* contrail */}
        <path d="M16 38 Q-30 50 -70 50" stroke="rgba(120,90,60,0.30)" strokeWidth="1.2" strokeDasharray="4 4" fill="none" />
      </Orn>

      {/* Cypress trees — left margin column */}
      <Orn pos={{ top: 240, left: 18 }} rotate={0} w={70} h={210} opacity={0.55}>
        <ellipse cx="18" cy="80" rx="9" ry="76" stroke={olive} strokeWidth="1.4" fill="rgba(90,110,60,0.20)" />
        <line x1="18" y1="156" x2="18" y2="186" stroke={ink} strokeWidth="1.4" />
        <ellipse cx="42" cy="100" rx="11" ry="92" stroke={olive} strokeWidth="1.4" fill="rgba(90,110,60,0.20)" />
        <line x1="42" y1="192" x2="42" y2="208" stroke={ink} strokeWidth="1.4" />
        <ellipse cx="64" cy="86" rx="8" ry="70" stroke={olive} strokeWidth="1.4" fill="rgba(90,110,60,0.20)" />
        <line x1="64" y1="156" x2="64" y2="180" stroke={ink} strokeWidth="1.4" />
      </Orn>

      {/* Pizza slice — middle right */}
      <Orn pos={{ top: '44%', right: 36 }} rotate={18} w={110} h={120} opacity={0.55}>
        <path d="M10 6 L100 6 L55 110 Z" stroke="rgba(160,110,60,0.70)" strokeWidth="1.5" fill="rgba(240,200,110,0.40)" strokeLinejoin="round" />
        <path d="M10 6 L100 6 L88 30 L20 30 Z" fill="rgba(240,160,70,0.55)" stroke="none" />
        {/* pepperoni */}
        <circle cx="40" cy="42" r="6" fill={tomato} />
        <circle cx="68" cy="50" r="6" fill={tomato} />
        <circle cx="52" cy="68" r="5" fill={tomato} />
        <circle cx="40" cy="86" r="4" fill={tomato} />
        {/* basil */}
        <ellipse cx="58" cy="38" rx="3" ry="2" fill={olive} />
        <ellipse cx="74" cy="78" rx="3" ry="2" fill={olive} />
        {/* crust shading */}
        <line x1="14" y1="14" x2="96" y2="14" stroke="rgba(160,110,60,0.45)" strokeWidth="0.8" />
      </Orn>

      {/* Arancini — bottom-center-left */}
      <Orn pos={{ bottom: 100, left: 240 }} rotate={-6} w={80} h={94} opacity={0.55}>
        <path d="M40 4 L72 80 Q40 96 8 80 Z" stroke="rgba(180,120,60,0.70)" strokeWidth="1.4" fill="rgba(220,170,90,0.45)" />
        {/* breading dots */}
        {Array.from({ length: 32 }).map((_, i) => {
          const x = 12 + (i % 8) * 7 + ((Math.floor(i / 8) % 2) * 3);
          const y = 18 + Math.floor(i / 8) * 14;
          return <circle key={i} cx={x} cy={y} r="0.9" fill="rgba(120,80,40,0.7)" />;
        })}
        {/* highlight */}
        <path d="M28 16 Q24 30 30 44" stroke="rgba(255,240,200,0.55)" strokeWidth="1.2" fill="none" />
      </Orn>

      {/* Lemon with leaf — bottom-right */}
      <Orn pos={{ bottom: 110, right: 90 }} rotate={-12} w={88} h={70} opacity={0.65}>
        <ellipse cx="44" cy="42" rx="38" ry="22" stroke="rgba(180,140,50,0.85)" strokeWidth="1.4" fill={lemon} />
        {/* nipple tips */}
        <path d="M6 42 L0 42 M82 42 L88 42" stroke="rgba(180,140,50,0.85)" strokeWidth="1.2" strokeLinecap="round" />
        {/* pores */}
        {Array.from({ length: 20 }).map((_, i) => {
          const x = 12 + (i % 5) * 14;
          const y = 28 + Math.floor(i / 5) * 8;
          return <circle key={i} cx={x} cy={y} r="0.6" fill="rgba(180,140,50,0.7)" />;
        })}
        {/* leaf */}
        <path d="M60 24 Q80 8 88 18 Q72 22 60 24 Z" stroke={olive} strokeWidth="1" fill="rgba(90,110,60,0.40)" />
        <line x1="60" y1="24" x2="84" y2="14" stroke={olive} strokeWidth="0.6" />
      </Orn>

      {/* Espresso cup — left side mid */}
      <Orn pos={{ top: 540, left: 40 }} rotate={6} w={86} h={66} opacity={0.55}>
        <path d="M8 16 L8 42 Q8 56 26 56 L52 56 Q70 56 70 42 L70 16 Z" stroke={ink} strokeWidth="1.4" fill={cream} />
        <ellipse cx="39" cy="16" rx="31" ry="5" stroke={ink} strokeWidth="1.4" fill="rgba(60,30,20,0.55)" />
        <path d="M70 22 Q84 26 84 36 Q84 46 70 48" stroke={ink} strokeWidth="1.4" fill="none" />
        {/* saucer */}
        <ellipse cx="39" cy="62" rx="46" ry="5" stroke={ink} strokeWidth="1.2" fill="rgba(60,40,20,0.10)" />
        {/* steam */}
        <path d="M24 8 Q30 0 26 -8" stroke={ink} strokeWidth="0.8" fill="none" />
        <path d="M40 6 Q46 -2 42 -10" stroke={ink} strokeWidth="0.8" fill="none" />
      </Orn>

      {/* Vespa silhouette — middle */}
      <Orn pos={{ top: '34%', left: 120 }} rotate={-2} w={130} h={84} opacity={0.45}>
        <ellipse cx="34" cy="64" rx="14" ry="14" stroke={ink} strokeWidth="1.6" fill="rgba(40,30,20,0.18)" />
        <ellipse cx="98" cy="64" rx="14" ry="14" stroke={ink} strokeWidth="1.6" fill="rgba(40,30,20,0.18)" />
        {/* body */}
        <path d="M34 50 Q40 30 70 28 L100 28 Q116 28 118 44 L118 56 Q108 62 96 56 Q90 50 80 50 L60 50 Q50 56 44 56 Z"
              stroke={tomato} strokeWidth="1.4" fill="rgba(180,60,50,0.30)" strokeLinejoin="round" />
        {/* front shield */}
        <path d="M16 60 Q14 36 28 30 L36 30 L42 38" stroke={tomato} strokeWidth="1.4" fill="rgba(180,60,50,0.20)" />
        {/* handlebar */}
        <line x1="28" y1="30" x2="22" y2="18" stroke={ink} strokeWidth="1.4" />
        <line x1="18" y1="18" x2="30" y2="18" stroke={ink} strokeWidth="1.4" />
        {/* seat */}
        <path d="M62 28 Q72 22 88 24 L88 30 L62 30 Z" stroke={ink} strokeWidth="1.2" fill="rgba(40,30,20,0.50)" />
      </Orn>

      {/* Cable car — middle-right */}
      <Orn pos={{ top: 200, right: 220 }} w={150} h={120} opacity={0.50}>
        {/* support cable */}
        <line x1="0" y1="4" x2="150" y2="22" stroke={ink} strokeWidth="1" />
        {/* hanger */}
        <line x1="60" y1="14" x2="60" y2="44" stroke={ink} strokeWidth="1.4" />
        <line x1="100" y1="18" x2="100" y2="44" stroke={ink} strokeWidth="1.4" />
        {/* gondola */}
        <rect x="44" y="44" width="76" height="44" rx="3" stroke={tomato} strokeWidth="1.4" fill="rgba(180,60,50,0.20)" />
        <rect x="50" y="50" width="22" height="14" stroke={tomato} strokeWidth="0.8" fill="rgba(180,200,220,0.45)" />
        <rect x="74" y="50" width="22" height="14" stroke={tomato} strokeWidth="0.8" fill="rgba(180,200,220,0.45)" />
        <rect x="98" y="50" width="18" height="14" stroke={tomato} strokeWidth="0.8" fill="rgba(180,200,220,0.45)" />
        <line x1="44" y1="74" x2="120" y2="74" stroke={tomato} strokeWidth="0.8" />
        {/* roof handles */}
        <rect x="56" y="40" width="8" height="6" stroke={ink} strokeWidth="0.8" fill={ink} />
        <rect x="96" y="40" width="8" height="6" stroke={ink} strokeWidth="0.8" fill={ink} />
      </Orn>

      {/* Olive branch — bottom-left */}
      <Orn pos={{ bottom: 50, left: 110 }} rotate={14} w={170} h={48} opacity={0.55}>
        <path d="M4 24 Q80 18 166 24" stroke={olive} strokeWidth="1.4" fill="none" />
        {[20, 40, 60, 80, 100, 120, 140].map((x, i) => (
          <g key={i}>
            <ellipse cx={x} cy={i % 2 === 0 ? 14 : 34} rx="9" ry="3.5" fill="rgba(90,110,60,0.40)" stroke={olive} strokeWidth="0.8" transform={`rotate(${i % 2 === 0 ? -20 : 20} ${x} ${i % 2 === 0 ? 14 : 34})`} />
            <circle cx={x + 4} cy={24} r="2.2" fill={olive} />
          </g>
        ))}
      </Orn>

      {/* Small map of Sicily (rough triangle) — corner */}
      <Orn pos={{ bottom: 30, right: 36 }} rotate={-8} w={90} h={60} opacity={0.35}>
        <path d="M4 38 L24 14 L58 8 L84 22 L80 40 L60 50 L30 52 Z"
              stroke={ink} strokeWidth="1.2" fill="rgba(180,140,90,0.20)" strokeLinejoin="round" />
        <circle cx="46" cy="28" r="1.4" fill={tomato} />
        <text x="50" y="32" fontFamily="JetBrains Mono, monospace" fontSize="6" fill={ink} letterSpacing="0.6">ORTIGIA</text>
        <circle cx="68" cy="32" r="1.4" fill={tomato} />
        <text x="40" y="48" fontFamily="Georgia, serif" fontSize="5" fontStyle="italic" fill={ink}>· SICILIA ·</text>
      </Orn>
    </div>
  );
}

// ═══════════════════════════════════════════════════════════════
// V · Graduation — mortar board, diploma, columns, champagne,
// flowers, books, gold confetti.
// ═══════════════════════════════════════════════════════════════
function GraduationOrnaments() {
  const ink = 'rgba(60,40,20,0.55)';
  const gold = 'rgba(201,169,97,0.75)';
  const goldDim = 'rgba(201,169,97,0.40)';
  const navy = 'rgba(45,55,90,0.65)';
  const blush = 'rgba(232,196,184,0.65)';
  const sage = 'rgba(140,156,118,0.65)';
  return (
    <div className="ornaments">
      {/* Mortar board with tassel — top right */}
      <Orn pos={{ top: 40, right: 60 }} rotate={-6} w={130} h={120} opacity={0.65}>
        {/* head */}
        <ellipse cx="65" cy="60" rx="32" ry="16" stroke={ink} strokeWidth="1.4" fill="rgba(245,224,180,0.40)" />
        {/* cap brim */}
        <ellipse cx="65" cy="46" rx="48" ry="10" stroke={navy} strokeWidth="1.5" fill={navy} />
        {/* top board */}
        <path d="M16 42 L65 26 L114 42 L65 56 Z" stroke={ink} strokeWidth="1.5" fill="rgba(35,42,70,0.85)" strokeLinejoin="round" />
        {/* tassel button */}
        <circle cx="65" cy="34" r="3" fill={gold} stroke={ink} strokeWidth="0.8" />
        {/* tassel string */}
        <path d="M65 34 Q86 26 104 42 Q108 52 102 64" stroke={gold} strokeWidth="1.3" fill="none" />
        {/* tassel threads */}
        <line x1="102" y1="64" x2="98" y2="84" stroke={gold} strokeWidth="1" />
        <line x1="102" y1="64" x2="102" y2="86" stroke={gold} strokeWidth="1" />
        <line x1="102" y1="64" x2="106" y2="84" stroke={gold} strokeWidth="1" />
        <line x1="102" y1="64" x2="110" y2="80" stroke={gold} strokeWidth="1" />
        <line x1="102" y1="64" x2="94" y2="80" stroke={gold} strokeWidth="1" />
      </Orn>

      {/* Diploma scroll — left mid */}
      <Orn pos={{ top: 220, left: 32 }} rotate={-12} w={140} h={70} opacity={0.60}>
        <rect x="12" y="14" width="116" height="42" stroke={ink} strokeWidth="1.3" fill="rgba(250,244,228,0.92)" />
        {/* lines of text */}
        <line x1="22" y1="24" x2="118" y2="24" stroke={ink} strokeWidth="0.6" />
        <line x1="22" y1="32" x2="100" y2="32" stroke={ink} strokeWidth="0.5" />
        <line x1="22" y1="40" x2="110" y2="40" stroke={ink} strokeWidth="0.5" />
        <line x1="22" y1="48" x2="80" y2="48" stroke={ink} strokeWidth="0.5" />
        {/* curled ends */}
        <path d="M12 14 Q4 14 4 22 Q4 30 12 32 Q4 38 4 50 Q4 58 12 56" stroke={ink} strokeWidth="1.3" fill="rgba(250,244,228,0.85)" />
        <path d="M128 14 Q136 14 136 22 Q136 30 128 32 Q136 38 136 50 Q136 58 128 56" stroke={ink} strokeWidth="1.3" fill="rgba(250,244,228,0.85)" />
        {/* ribbon */}
        <rect x="60" y="6" width="14" height="60" fill="rgba(180,40,50,0.55)" stroke={ink} strokeWidth="0.6" />
        <path d="M60 66 L67 60 L74 66 L67 72 Z" fill="rgba(180,40,50,0.65)" stroke={ink} strokeWidth="0.6" />
        {/* gold seal */}
        <circle cx="100" cy="48" r="6" fill={gold} stroke={ink} strokeWidth="0.8" />
        <path d="M97 48 L100 51 L104 46" stroke="rgba(255,250,230,0.95)" strokeWidth="0.9" fill="none" />
      </Orn>

      {/* Greek column — left */}
      <Orn pos={{ top: 350, left: 28 }} rotate={0} w={62} h={200} opacity={0.45}>
        {/* base */}
        <rect x="8"  y="186" width="46" height="10" stroke={ink} strokeWidth="1" fill="rgba(245,238,224,0.75)" />
        <rect x="4"  y="180" width="54" height="8"  stroke={ink} strokeWidth="1" fill="rgba(245,238,224,0.75)" />
        {/* shaft */}
        <rect x="14" y="34"  width="34" height="148" stroke={ink} strokeWidth="1.2" fill="rgba(245,238,224,0.65)" />
        {/* flutes */}
        {[18, 24, 30, 36, 42].map((x, i) => (
          <line key={i} x1={x} y1="34" x2={x} y2="180" stroke={ink} strokeWidth="0.5" />
        ))}
        {/* capital */}
        <rect x="6"  y="22"  width="50" height="14" stroke={ink} strokeWidth="1" fill="rgba(245,238,224,0.75)" />
        {/* ionic volute curls */}
        <path d="M10 28 Q14 18 22 22 Q26 26 22 30" stroke={ink} strokeWidth="0.9" fill="none" />
        <path d="M52 28 Q48 18 40 22 Q36 26 40 30" stroke={ink} strokeWidth="0.9" fill="none" />
        {/* pediment hint */}
        <rect x="0" y="16" width="62" height="8" stroke={ink} strokeWidth="1" fill="rgba(245,238,224,0.75)" />
        <path d="M0 16 L31 4 L62 16 Z" stroke={ink} strokeWidth="1.2" fill="rgba(245,238,224,0.60)" />
      </Orn>

      {/* Champagne flutes — bottom right, clinking */}
      <Orn pos={{ bottom: 80, right: 60 }} rotate={0} w={140} h={150} opacity={0.55}>
        {/* left flute */}
        <path d="M30 6 L18 6 L24 50 Q24 64 30 66 L30 132 L20 138 L40 138 L30 132 Z"
              stroke={ink} strokeWidth="1.4" fill="rgba(245,224,160,0.30)" />
        <path d="M24 50 Q24 64 30 66" stroke={ink} strokeWidth="0.8" fill="none" />
        {/* right flute */}
        <path d="M82 6 L94 6 L88 50 Q88 64 82 66 L82 132 L72 138 L92 138 L82 132 Z"
              stroke={ink} strokeWidth="1.4" fill="rgba(245,224,160,0.30)" />
        <path d="M88 50 Q88 64 82 66" stroke={ink} strokeWidth="0.8" fill="none" />
        {/* bubbles */}
        <circle cx="24" cy="24" r="1.5" fill={gold} />
        <circle cx="20" cy="34" r="1.2" fill={gold} />
        <circle cx="22" cy="42" r="1.2" fill={gold} />
        <circle cx="88" cy="22" r="1.5" fill={gold} />
        <circle cx="86" cy="34" r="1.2" fill={gold} />
        <circle cx="90" cy="42" r="1.2" fill={gold} />
        {/* clink spark */}
        <path d="M52 16 L60 22 L52 28 L44 22 Z" fill={gold} opacity="0.8" />
        <line x1="52" y1="6" x2="52" y2="14" stroke={gold} strokeWidth="1.2" />
        <line x1="40" y1="22" x2="46" y2="22" stroke={gold} strokeWidth="1.2" />
        <line x1="58" y1="22" x2="64" y2="22" stroke={gold} strokeWidth="1.2" />
      </Orn>

      {/* Bouquet — middle right */}
      <Orn pos={{ top: 240, right: 40 }} rotate={6} w={120} h={150} opacity={0.55}>
        {/* paper wrap */}
        <path d="M50 60 L70 60 L84 140 L36 140 Z" stroke={ink} strokeWidth="1.2" fill="rgba(250,244,228,0.80)" />
        <line x1="60" y1="140" x2="60" y2="60" stroke={ink} strokeWidth="0.6" />
        <line x1="46" y1="80" x2="74" y2="80" stroke={ink} strokeWidth="0.4" />
        {/* flowers */}
        <circle cx="40" cy="36" r="14" fill={blush} stroke={ink} strokeWidth="0.8" />
        <circle cx="40" cy="36" r="6" fill="rgba(220,160,150,0.85)" />
        <circle cx="68" cy="22" r="13" fill={blush} stroke={ink} strokeWidth="0.8" />
        <circle cx="68" cy="22" r="5" fill="rgba(220,160,150,0.85)" />
        <circle cx="92" cy="38" r="12" fill={blush} stroke={ink} strokeWidth="0.8" />
        <circle cx="92" cy="38" r="5" fill="rgba(220,160,150,0.85)" />
        <circle cx="60" cy="50" r="11" fill={blush} stroke={ink} strokeWidth="0.8" />
        <circle cx="60" cy="50" r="4" fill="rgba(220,160,150,0.85)" />
        {/* leaves */}
        <ellipse cx="26" cy="56" rx="10" ry="4" fill={sage} stroke={ink} strokeWidth="0.6" transform="rotate(-20 26 56)" />
        <ellipse cx="100" cy="58" rx="10" ry="4" fill={sage} stroke={ink} strokeWidth="0.6" transform="rotate(20 100 58)" />
        {/* ribbon */}
        <path d="M40 138 Q60 134 80 138" stroke={gold} strokeWidth="2" fill="none" />
        <path d="M40 138 Q34 148 28 142 M80 138 Q86 148 92 142" stroke={gold} strokeWidth="1.4" fill="none" />
      </Orn>

      {/* Stack of books — bottom-left */}
      <Orn pos={{ bottom: 80, left: 100 }} rotate={-2} w={140} h={90} opacity={0.55}>
        <rect x="6"  y="60" width="124" height="20" stroke={ink} strokeWidth="1.3" fill="rgba(150,100,80,0.50)" />
        <rect x="10" y="80" width="116" height="3"  stroke={ink} strokeWidth="0.6" fill="rgba(245,238,224,0.7)" />
        <rect x="14" y="40" width="112" height="20" stroke={ink} strokeWidth="1.3" fill="rgba(80,110,140,0.50)" />
        <rect x="18" y="60" width="104" height="3"  stroke={ink} strokeWidth="0.6" fill="rgba(245,238,224,0.7)" />
        <rect x="22" y="20" width="100" height="20" stroke={ink} strokeWidth="1.3" fill="rgba(120,80,60,0.50)" />
        <rect x="26" y="40" width="92"  height="3"  stroke={ink} strokeWidth="0.6" fill="rgba(245,238,224,0.7)" />
        {/* gold lettering hint */}
        <line x1="36" y1="28" x2="86" y2="28" stroke={gold} strokeWidth="1" />
        <line x1="32" y1="48" x2="92" y2="48" stroke={gold} strokeWidth="1" />
        <line x1="28" y1="68" x2="98" y2="68" stroke={gold} strokeWidth="1" />
        {/* bookmark */}
        <path d="M104 20 L104 50 L100 46 L96 50 L96 20 Z" fill={blush} stroke={ink} strokeWidth="0.6" />
      </Orn>

      {/* Confetti / sparkles scattered */}
      {[
        { top: 110, left: 240, r: 12, c: gold },
        { top: 170, left: 380, r: -25, c: blush },
        { top: 330, left: 400, r: 8, c: sage },
        { top: 480, right: 200, r: 14, c: gold },
        { bottom: 280, right: 320, r: -10, c: blush },
        { bottom: 200, left: 320, r: 20, c: gold },
        { top: 60, left: 220, r: 0, c: navy },
        { bottom: 380, left: 60, r: 18, c: gold },
        { top: 380, left: 200, r: 30, c: blush },
      ].map((p, i) => (
        <Orn key={i} pos={p} rotate={p.r} w={16} h={4} opacity={0.7}>
          <rect x="0" y="0" width="16" height="4" fill={p.c} />
        </Orn>
      ))}

      {/* Stars sprinkled */}
      {[
        { top: 280, left: '40%', s: 10 },
        { bottom: 240, right: 100, s: 8 },
        { top: 420, right: 320, s: 12 },
      ].map((p, i) => (
        <Orn key={i} pos={p} w={p.s * 2} h={p.s * 2} opacity={0.6}>
          <path d={`M${p.s} 0 L${p.s + p.s * 0.22} ${p.s - p.s * 0.22} L${p.s * 2} ${p.s} L${p.s + p.s * 0.22} ${p.s + p.s * 0.22} L${p.s} ${p.s * 2} L${p.s - p.s * 0.22} ${p.s + p.s * 0.22} L0 ${p.s} L${p.s - p.s * 0.22} ${p.s - p.s * 0.22} Z`}
                fill={goldDim} />
        </Orn>
      ))}

      {/* "MMXXV" little flourish */}
      <div style={{
        position: 'absolute', bottom: 28, left: '50%', transform: 'translateX(-50%)',
        fontFamily: 'JetBrains Mono, monospace', fontSize: 10, letterSpacing: '0.45em',
        color: 'rgba(201,169,97,0.6)', whiteSpace: 'nowrap',
      }}>· MMXXV · BA · UCL ·</div>
    </div>
  );
}

// ═══════════════════════════════════════════════════════════════
// Dispatch
// ═══════════════════════════════════════════════════════════════
function ChapterOrnaments({ theme }) {
  switch (theme) {
    case 'sicily':      return <SicilyOrnaments />;
    case 'chromakopia': return <ChromakopiaOrnaments />;
    case 'london':      return <LondonOrnaments />;
    case 'beach':       return <BeachOrnaments />;
    case 'graduation':  return <GraduationOrnaments />;
    case 'spheres':     return <SpheresOrnaments />;
    case 'christmas':   return <ChristmasOrnaments />;
    case 'tennis':      return <TennisOrnaments />;
    default:            return null;
  }
}

window.ChapterOrnaments = ChapterOrnaments;
