// Mika — SVG attempt at the ink-line + watercolor + gold-rim aesthetic.
// This is a different art direction from the earlier flat-wash cats. Goals:
//   - Ink outline (wavering, hand-drawn feel via turbulence-displaced stroke)
//   - Watercolor wash underneath with soft bleeds, not flat fills
//   - Rim light: warm gold glow along the edge that faces the light source
//   - Gold dust: small particles scattered along the rim, fading outward
//   - Interaction with layout: cats reach / look / gesture, not just pose
//
// SVG honestly tops out around 60-70% of a Midjourney result for this style
// — real watercolor paintings have hundreds of micro-variations we can't
// economically fake. But we can get the FEELING right with:
//   (1) layered washes via feTurbulence + opacity
//   (2) ink lines drawn with variable-width handdrawn <path>s on top
//   (3) a gold glow filter (saturated warm + blur) masked to the light edge
//   (4) deterministic scattered gold particles with feGaussianBlur
//
// Shared palette stays in the Mika奶茶 family.

const INK = {
  paper:    '#faf7f0',
  wash:     '#f3ede1',   // lightest body wash
  midTone:  '#c8b89a',   // watercolor mid shade — saturated for visible layering
  deepTone: '#8a7a5a',   // wet-into-wet dark — deeper brown for layering
  ink:      '#4a3a28',
  gold:     '#d4a94e',
  goldHi:   '#f5d68a',
  goldDeep: '#8a6620',
  amber:    '#b88838',
  earPink:  '#c78a7a',
  nose:     '#a66e5e',
};

// Shared defs — one set per instance id.
const InkDefs = ({ id }) => (
  <defs>
    {/* Wavery ink — warps line work just enough to look hand-drawn. */}
    <filter id={`ink-${id}`} x="-5%" y="-5%" width="110%" height="110%">
      <feTurbulence type="fractalNoise" baseFrequency="0.03" numOctaves="2" seed="2" />
      <feDisplacementMap in="SourceGraphic" scale="1.2" />
    </filter>
    {/* Soft watercolor bleed. */}
    <filter id={`wc-${id}`} x="-10%" y="-10%" width="120%" height="120%">
      <feTurbulence type="fractalNoise" baseFrequency="0.025" numOctaves="2" seed="5" />
      <feDisplacementMap in="SourceGraphic" scale="3" />
    </filter>
    {/* Wet-edge halo. */}
    <filter id={`halo-${id}`} x="-20%" y="-20%" width="140%" height="140%">
      <feTurbulence type="fractalNoise" baseFrequency="0.012" numOctaves="2" seed="8" />
      <feDisplacementMap in="SourceGraphic" scale="6" />
      <feGaussianBlur stdDeviation="1.2" />
    </filter>
    {/* Gold rim glow — heavy blur + saturated gold stays just inside the
        composited result. Used as a stroke glow. */}
    <filter id={`goldGlow-${id}`} x="-30%" y="-30%" width="160%" height="160%">
      <feGaussianBlur stdDeviation="2.2" result="b1" />
      <feGaussianBlur in="SourceGraphic" stdDeviation="5" result="b2" />
      <feMerge>
        <feMergeNode in="b2" />
        <feMergeNode in="b1" />
        <feMergeNode in="SourceGraphic" />
      </feMerge>
    </filter>
    {/* Paper grain — multiplied on the wash. */}
    <filter id={`grain-${id}`} x="0%" y="0%" width="100%" height="100%">
      <feTurbulence type="fractalNoise" baseFrequency="1.2" numOctaves="2" seed="3" />
      <feColorMatrix values="0 0 0 0 0.55  0 0 0 0 0.45  0 0 0 0 0.32  0 0 0 0.08 0" />
      <feComposite in2="SourceGraphic" operator="in" />
    </filter>
    {/* Watercolor wash gradient for rim light side — warm glow building up. */}
    <radialGradient id={`sunWash-${id}`} cx="85%" cy="20%" r="90%">
      <stop offset="0%"  stopColor="#f5e6b8" stopOpacity="0.75" />
      <stop offset="40%" stopColor="#f5d68a" stopOpacity="0.35" />
      <stop offset="80%" stopColor="#f5d68a" stopOpacity="0" />
    </radialGradient>
  </defs>
);

// ─── Gold dust sprinkle — tiny blurred dots along a path region ───
// Placed deterministically by index so re-renders don't reshuffle. Each
// particle is a small circle with the gold glow filter.
const GoldDust = ({ points, id, sizeRange = [1, 3], opacityRange = [0.7, 1] }) => (
  <g filter={`url(#goldGlow-${id})`}>
    {points.map((p, i) => {
      const seed = (i * 9301 + 49297) % 233280;
      const rnd = seed / 233280;
      const r = sizeRange[0] + rnd * (sizeRange[1] - sizeRange[0]);
      const op = opacityRange[0] + ((seed >> 3) % 100) / 100 * (opacityRange[1] - opacityRange[0]);
      return <circle key={i} cx={p[0]} cy={p[1]} r={r} fill={INK.goldHi} opacity={op} />;
    })}
  </g>
);

// ══════════════════════════════════════════════════════════════
// MikaSleeping — curled, profile, rim-lit from upper-right.
// Less "interaction" here since she's asleep — the interaction is that her
// tail curls toward the text column as if she's leaning into it.
// ══════════════════════════════════════════════════════════════
window.MikaSleepingNoGold = function MikaSleeping({ size = 280, style }) {
  const id = "slp";
  return (
    <svg viewBox="0 0 380 260" width={size} height={size * 260 / 380} style={style} aria-label="白緬因貓 Mika 蜷睡">
      <InkDefs id={id} />

      {/* Ground shadow. */}
      <ellipse cx="190" cy="230" rx="150" ry="8" fill={INK.deepTone} opacity="0.25" filter={`url(#halo-${id})`} />

      {/* ── Watercolor body washes — layered light to dark ── */}
      {/* Outer bleed halo (lightest). */}
      <g filter={`url(#halo-${id})`} opacity="0.8">
        <path d="M 60 195 Q 38 140 80 110 Q 140 85 215 88 Q 300 92 330 135 Q 345 185 305 210 Q 240 225 170 222 Q 90 220 60 195 Z"
              fill={INK.wash} />
      </g>
      {/* Mid body wash. */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 70 200 Q 55 145 92 118 Q 145 95 215 96 Q 290 99 320 138 Q 330 180 295 200 Q 235 215 170 213 Q 98 212 70 200 Z"
              fill={INK.wash} />
      </g>
      {/* Wet-into-wet shadow under belly (left side, away from light). */}
      <g filter={`url(#wc-${id})`} opacity="0.85">
        <path d="M 80 200 Q 75 175 110 165 Q 180 178 250 175 Q 285 182 280 202 Q 220 215 160 213 Q 95 212 80 200 Z"
              fill={INK.midTone} />
      </g>
      {/* Deeper pooled shadow — where tail meets body, under chin. */}
      <g filter={`url(#wc-${id})`} opacity="0.6">
        <path d="M 90 195 Q 100 182 130 182 Q 155 187 155 200 Q 120 208 90 195 Z" fill={INK.deepTone} />
        <path d="M 240 175 Q 260 172 275 185 Q 265 200 240 200 Q 225 188 240 175 Z" fill={INK.deepTone} />
      </g>

      {/* Paper grain overlay on body. */}
      <g filter={`url(#grain-${id})`} opacity="0.5">
        <path d="M 70 200 Q 55 145 92 118 Q 145 95 215 96 Q 290 99 320 138 Q 330 180 295 200 Q 235 215 170 213 Q 98 212 70 200 Z"
              fill={INK.wash} />
      </g>

      {/* ── Tail — big plume curling toward text column (leftward). ── */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 295 185 Q 335 178 348 148 Q 350 115 320 110 Q 288 115 268 138 Q 252 158 255 175 Z" fill={INK.wash} />
        <path d="M 298 185 Q 330 180 340 158 Q 325 162 305 170 Q 288 180 298 185 Z" fill={INK.midTone} opacity="0.6" />
      </g>

      {/* ── Head (tucked down). ── */}
      <g filter={`url(#wc-${id})`}>
        <ellipse cx="102" cy="175" rx="42" ry="32" fill={INK.wash} />
      </g>
      {/* Cheek ruff. */}
      <g filter={`url(#halo-${id})`} opacity="0.75">
        <path d="M 58 180 Q 52 192 75 200 Q 100 210 130 205 Q 148 198 142 185 Q 125 180 100 182 Q 75 178 58 180 Z"
              fill={INK.wash} />
      </g>
      {/* Ears — relaxed. */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 78 152 Q 72 132 90 140 Q 98 152 92 162 Z" fill={INK.wash} />
        <path d="M 116 148 Q 122 130 130 144 Q 128 158 118 160 Z" fill={INK.wash} />
        <path d="M 82 150 Q 84 140 90 144 Q 90 154 86 156 Z" fill={INK.earPink} opacity="0.6" />
        <path d="M 120 148 Q 122 138 128 144 Q 126 154 122 156 Z" fill={INK.earPink} opacity="0.6" />
      </g>

      {/* ── Ink line work — the outline, drawn with wavery strokes. ── */}
      <g stroke={INK.ink} strokeWidth="1.1" fill="none" strokeLinecap="round" opacity="0.75" filter={`url(#ink-${id})`}>
        {/* Back contour. */}
        <path d="M 98 118 Q 150 98 215 98 Q 285 102 318 138" />
        {/* Tail top. */}
        <path d="M 318 138 Q 340 128 345 115 Q 345 110 340 112" />
        {/* Tail curl. */}
        <path d="M 340 112 Q 320 115 295 135 Q 275 155 268 170" />
        {/* Belly underside. */}
        <path d="M 75 198 Q 120 215 180 215 Q 250 215 295 200" />
        {/* Head silhouette. */}
        <path d="M 140 175 Q 145 145 120 135 Q 95 130 75 148 Q 62 170 65 185" />
        {/* Closed eyes — arcs. */}
        <path d="M 85 170 Q 90 174 96 170" strokeWidth="1.4" />
        <path d="M 107 168 Q 113 172 118 168" strokeWidth="1.4" />
        {/* Ear outlines. */}
        <path d="M 78 152 Q 72 132 90 140" />
        <path d="M 116 148 Q 122 130 130 144" />
      </g>

      {/* Nose + tiny mouth. */}
      <path d="M 93 178 Q 97 180 101 178 Q 99 182 97 183 Q 95 182 93 178 Z" fill={INK.nose} />
      <path d="M 97 183 Q 94 186 90 185" stroke={INK.ink} strokeWidth="0.8" fill="none" strokeLinecap="round" opacity="0.7" />

      {/* Fine fur strokes — ink hair lines along back where light hits. */}
      <g stroke={INK.ink} strokeWidth="0.4" fill="none" opacity="0.4" strokeLinecap="round">
        {Array.from({ length: 20 }).map((_, i) => {
          const x = 115 + i * 10;
          const y1 = 118 + (i % 3);
          return <path key={i} d={`M ${x} ${y1} Q ${x + 1} ${y1 + 8} ${x + 2} ${y1 + 14}`} />;
        })}
      </g>

      {/* Whiskers. */}
      <g stroke={INK.ink} strokeWidth="0.5" opacity="0.55" fill="none" strokeLinecap="round">
        <path d="M 75 180 L 48 175" />
        <path d="M 75 184 L 48 186" />
        <path d="M 75 188 L 50 195" />
      </g>

    </svg>
  );
};

// ══════════════════════════════════════════════════════════════
// MikaPointing — sitting, front paw raised pointing up-left (toward text).
// This is the "interactive" pose — she's directing your eye to the tagline.
// Used in Hero B in place of the earlier "peeking" pose.
// ══════════════════════════════════════════════════════════════
window.MikaPeekingNoGold = function MikaPointing({ size = 260, style }) {
  const id = "pnt";
  return (
    <svg viewBox="0 0 320 400" width={size} height={size * 400 / 320} style={style} aria-label="白緬因貓 Mika 抬腳指引">
      <InkDefs id={id} />

      {/* Ground shadow. */}
      <ellipse cx="170" cy="380" rx="110" ry="8" fill={INK.deepTone} opacity="0.3" filter={`url(#halo-${id})`} />

      {/* ── Watercolor body, sitting posture ── */}
      {/* Outer halo. */}
      <g filter={`url(#halo-${id})`} opacity="0.75">
        <path d="M 75 375 Q 55 260 95 200 Q 110 130 150 115 Q 195 125 210 195 Q 255 260 245 375 Z" fill={INK.wash} />
      </g>
      {/* Mid wash. */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 85 378 Q 70 265 105 205 Q 120 160 155 155 Q 195 160 210 205 Q 245 265 235 378 Q 195 388 160 388 Q 120 388 85 378 Z"
              fill={INK.wash} />
      </g>
      {/* Shadow under body — away from light (left). */}
      <g filter={`url(#wc-${id})`} opacity="0.75">
        <path d="M 88 370 Q 78 290 110 235 Q 130 250 125 350 Q 115 378 90 378 Z" fill={INK.midTone} />
      </g>
      {/* Deep shadow under ruff. */}
      <g filter={`url(#wc-${id})`} opacity="0.6">
        <path d="M 105 210 Q 140 200 195 205 Q 215 215 205 232 Q 160 240 115 232 Q 98 220 105 210 Z" fill={INK.deepTone} />
      </g>

      {/* ── Raised front paw — pointing up-left toward headline ── */}
      {/* Shoulder + upper leg shape. */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 120 235 Q 95 210 70 170 Q 55 145 68 130 Q 85 128 100 158 Q 120 195 135 225 Z" fill={INK.wash} />
      </g>
      {/* Paw itself — tip at upper left. Little pad indication. */}
      <g filter={`url(#wc-${id})`}>
        <ellipse cx="68" cy="132" rx="14" ry="10" fill={INK.wash} />
      </g>
      {/* Paw shadow (underside). */}
      <g filter={`url(#wc-${id})`} opacity="0.7">
        <path d="M 120 235 Q 105 220 85 180 Q 80 165 92 162 Q 105 190 125 228 Z" fill={INK.midTone} />
      </g>

      {/* Standing front paw (other leg, on ground). */}
      <g filter={`url(#wc-${id})`}>
        <ellipse cx="185" cy="378" rx="18" ry="11" fill={INK.wash} />
      </g>

      {/* Big plume tail curling right. */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 230 360 Q 290 360 295 315 Q 290 280 260 278 Q 235 288 226 318 Z" fill={INK.wash} />
        <path d="M 235 355 Q 280 352 290 325 Q 270 328 248 335 Q 232 348 235 355 Z" fill={INK.midTone} opacity="0.5" />
      </g>

      {/* Ruff — the mane. */}
      <g filter={`url(#halo-${id})`} opacity="0.88">
        <path d="M 88 205 Q 80 188 112 172 Q 155 165 198 172 Q 225 188 218 208 Q 175 228 152 228 Q 120 228 88 205 Z"
              fill={INK.wash} />
      </g>

      {/* Head — tilted up toward the pointing paw (she's looking where she
          points, which is what makes her "guide" the eye). */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 105 148 Q 98 98 130 82 Q 150 74 168 76 Q 190 80 205 100 Q 215 135 205 160 Q 175 178 140 174 Q 110 168 105 148 Z"
              fill={INK.wash} />
      </g>
      {/* Ears — alert, wide. */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 110 92 Q 95 48 132 70 Q 138 90 130 104 Z" fill={INK.wash} />
        <path d="M 200 100 Q 218 55 185 72 Q 178 92 185 108 Z" fill={INK.wash} />
        <path d="M 116 86 Q 116 66 130 78 Q 130 92 124 96 Z" fill={INK.earPink} opacity="0.7" />
        <path d="M 197 92 Q 201 72 188 80 Q 186 96 192 100 Z" fill={INK.earPink} opacity="0.7" />
      </g>

      {/* ── Ink line work ── */}
      <g stroke={INK.ink} strokeWidth="1.1" fill="none" strokeLinecap="round" opacity="0.75" filter={`url(#ink-${id})`}>
        {/* Back contour right side. */}
        <path d="M 208 175 Q 232 215 245 290 Q 248 360 235 380" />
        {/* Pointing arm. */}
        <path d="M 120 240 Q 92 215 72 175 Q 58 148 70 130" />
        <path d="M 55 130 Q 62 122 78 130 Q 82 138 75 142" />
        {/* Tail. */}
        <path d="M 225 320 Q 282 285 290 310 Q 288 350 245 360" />
        {/* Head silhouette right side (lit side). */}
        <path d="M 205 102 Q 215 138 205 162" />
        {/* Cheek line. */}
        <path d="M 155 165 Q 162 175 170 172" strokeWidth="0.7" opacity="0.5" />
      </g>

      {/* Eyes — amber, looking up-left toward the paw. Half-lidded. */}
      <g>
        <ellipse cx="135" cy="128" rx="11" ry="8.5" fill={INK.wash} />
        <ellipse cx="172" cy="128" rx="11" ry="8.5" fill={INK.wash} />
        {/* Iris offset up-left to indicate gaze direction. */}
        <ellipse cx="132" cy="125" rx="7.5" ry="7" fill={INK.amber} />
        <ellipse cx="169" cy="125" rx="7.5" ry="7" fill={INK.amber} />
        <ellipse cx="132" cy="128" rx="6" ry="4" fill={INK.goldDeep} opacity="0.5" />
        <ellipse cx="169" cy="128" rx="6" ry="4" fill={INK.goldDeep} opacity="0.5" />
        {/* Slit pupils, also offset. */}
        <ellipse cx="130" cy="125" rx="1.3" ry="6" fill="#1a1208" />
        <ellipse cx="167" cy="125" rx="1.3" ry="6" fill="#1a1208" />
        {/* Catchlights. */}
        <circle cx="133" cy="122" r="1.4" fill="#fff" />
        <circle cx="170" cy="122" r="1.4" fill="#fff" />
        {/* Upper lid. */}
        <path d="M 124 124 Q 135 118 146 124" stroke={INK.ink} strokeWidth="1.2" fill="none" strokeLinecap="round" />
        <path d="M 161 124 Q 172 118 183 124" stroke={INK.ink} strokeWidth="1.2" fill="none" strokeLinecap="round" />
      </g>

      {/* Nose + mouth. */}
      <path d="M 147 147 Q 154 151 161 147 Q 158 155 154 156 Q 150 155 147 147 Z" fill={INK.nose} filter={`url(#wc-${id})`} />
      <path d="M 154 156 L 154 161 M 154 161 Q 148 165 144 161 M 154 161 Q 160 165 164 161"
            stroke={INK.ink} strokeWidth="1" fill="none" strokeLinecap="round" opacity="0.7" />

      {/* Whiskers. */}
      <g stroke={INK.ink} strokeWidth="0.5" opacity="0.55" fill="none" strokeLinecap="round">
        <path d="M 140 155 L 104 150" />
        <path d="M 140 159 L 102 162" />
        <path d="M 168 155 L 205 150" />
        <path d="M 168 159 L 205 162" />
      </g>

      {/* Ruff fur strokes. */}
      <g stroke={INK.ink} strokeWidth="0.4" opacity="0.4" fill="none" strokeLinecap="round">
        {[
          'M 92 205 Q 86 220 78 240',
          'M 110 210 Q 108 230 104 255',
          'M 130 215 Q 130 238 128 265',
          'M 155 218 Q 156 242 158 270',
          'M 180 215 Q 184 238 188 260',
          'M 200 210 Q 208 230 215 250',
          'M 215 205 Q 224 220 232 240',
        ].map((d, i) => <path key={i} d={d} />)}
      </g>

    </svg>
  );
};

// ══════════════════════════════════════════════════════════════
// MikaSitting — profile portrait, looking up/out toward light. For Hero C.
// Heavy rim light on the right side where the window is. The most "reading
// with you" pose — she sits companion-style, gaze lifted.
// ══════════════════════════════════════════════════════════════
window.MikaSittingNoGold = function MikaSitting({ size = 260, style }) {
  const id = "sit";
  return (
    <svg viewBox="0 0 300 400" width={size} height={size * 400 / 300} style={style} aria-label="白緬因貓 Mika 坐姿仰望">
      <InkDefs id={id} />

      {/* Ground shadow. */}
      <ellipse cx="155" cy="382" rx="105" ry="7" fill={INK.deepTone} opacity="0.3" filter={`url(#halo-${id})`} />

      {/* Watercolor body. */}
      <g filter={`url(#halo-${id})`} opacity="0.75">
        <path d="M 62 378 Q 45 260 90 200 Q 100 128 145 115 Q 185 125 200 198 Q 245 258 235 378 Z" fill={INK.wash} />
      </g>
      <g filter={`url(#wc-${id})`}>
        <path d="M 72 380 Q 58 270 98 210 Q 112 162 148 158 Q 180 162 195 210 Q 235 270 225 380 Q 185 388 148 388 Q 112 388 72 380 Z"
              fill={INK.wash} />
      </g>
      {/* Shadow away from light. */}
      <g filter={`url(#wc-${id})`} opacity="0.75">
        <path d="M 75 370 Q 65 290 95 235 Q 118 245 115 348 Q 105 378 78 378 Z" fill={INK.midTone} />
      </g>

      {/* Tail curled in front. */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 180 360 Q 240 360 248 315 Q 243 278 212 276 Q 185 288 178 320 Z" fill={INK.wash} />
        <path d="M 185 355 Q 232 355 245 322 Q 225 325 202 335 Q 180 348 185 355 Z" fill={INK.midTone} opacity="0.5" />
      </g>

      {/* Front paws. */}
      <g filter={`url(#wc-${id})`}>
        <ellipse cx="115" cy="378" rx="18" ry="10" fill={INK.wash} />
        <ellipse cx="160" cy="378" rx="18" ry="10" fill={INK.wash} />
      </g>

      {/* Ruff. */}
      <g filter={`url(#halo-${id})`} opacity="0.88">
        <path d="M 78 210 Q 70 192 105 175 Q 150 168 192 175 Q 220 192 215 212 Q 175 232 148 232 Q 108 232 78 210 Z"
              fill={INK.wash} />
      </g>

      {/* Head — profile-ish, looking up/right toward light. */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 95 148 Q 88 92 120 78 Q 145 72 165 76 Q 195 84 205 115 Q 205 150 188 168 Q 150 178 112 170 Q 98 165 95 148 Z"
              fill={INK.wash} />
      </g>
      {/* Ears. */}
      <g filter={`url(#wc-${id})`}>
        <path d="M 100 88 Q 85 42 122 64 Q 128 84 120 100 Z" fill={INK.wash} />
        <path d="M 198 90 Q 216 44 180 65 Q 173 85 180 102 Z" fill={INK.wash} />
        <path d="M 106 82 Q 104 62 120 72 Q 120 88 114 92 Z" fill={INK.earPink} opacity="0.7" />
        <path d="M 194 84 Q 197 64 182 74 Q 180 90 187 94 Z" fill={INK.earPink} opacity="0.7" />
      </g>

      {/* Ink lines. */}
      <g stroke={INK.ink} strokeWidth="1.1" fill="none" strokeLinecap="round" opacity="0.75" filter={`url(#ink-${id})`}>
        {/* Back right side. */}
        <path d="M 198 168 Q 222 210 232 290 Q 238 360 228 380" />
        {/* Right ear outline. */}
        <path d="M 198 90 Q 216 44 180 65" />
        {/* Chin. */}
        <path d="M 130 170 Q 145 178 162 175" strokeWidth="0.7" opacity="0.5" />
        {/* Tail. */}
        <path d="M 180 325 Q 238 295 246 322 Q 240 360 192 360" />
      </g>

      {/* Eyes — lifted gaze, half-lidded, amber. */}
      <g>
        <ellipse cx="130" cy="125" rx="10" ry="8" fill={INK.wash} />
        <ellipse cx="168" cy="125" rx="10" ry="8" fill={INK.wash} />
        <ellipse cx="134" cy="121" rx="7" ry="6.5" fill={INK.amber} />
        <ellipse cx="172" cy="121" rx="7" ry="6.5" fill={INK.amber} />
        <ellipse cx="134" cy="124" rx="5" ry="3.5" fill={INK.goldDeep} opacity="0.5" />
        <ellipse cx="172" cy="124" rx="5" ry="3.5" fill={INK.goldDeep} opacity="0.5" />
        <ellipse cx="134" cy="121" rx="1.3" ry="5.5" fill="#1a1208" />
        <ellipse cx="172" cy="121" rx="1.3" ry="5.5" fill="#1a1208" />
        <circle cx="136" cy="118" r="1.4" fill="#fff" />
        <circle cx="174" cy="118" r="1.4" fill="#fff" />
        <path d="M 120 122 Q 130 116 140 122" stroke={INK.ink} strokeWidth="1.2" fill="none" strokeLinecap="round" />
        <path d="M 158 122 Q 168 116 178 122" stroke={INK.ink} strokeWidth="1.2" fill="none" strokeLinecap="round" />
      </g>

      {/* Nose + mouth. */}
      <path d="M 143 144 Q 150 148 157 144 Q 154 152 150 153 Q 146 152 143 144 Z" fill={INK.nose} filter={`url(#wc-${id})`} />
      <path d="M 150 153 L 150 158 M 150 158 Q 144 162 140 158 M 150 158 Q 156 162 160 158"
            stroke={INK.ink} strokeWidth="1" fill="none" strokeLinecap="round" opacity="0.7" />

      {/* Whiskers. */}
      <g stroke={INK.ink} strokeWidth="0.5" opacity="0.55" fill="none" strokeLinecap="round">
        <path d="M 135 152 L 98 148" />
        <path d="M 135 156 L 96 158" />
        <path d="M 165 152 L 202 148" />
        <path d="M 165 156 L 204 158" />
      </g>

      {/* Ruff fur strokes. */}
      <g stroke={INK.ink} strokeWidth="0.4" opacity="0.4" fill="none" strokeLinecap="round">
        {[
          'M 82 212 Q 76 228 68 248',
          'M 102 218 Q 100 240 96 265',
          'M 125 222 Q 125 248 122 275',
          'M 150 222 Q 152 250 155 278',
          'M 175 218 Q 180 245 186 270',
          'M 198 212 Q 208 230 218 250',
        ].map((d, i) => <path key={i} d={d} />)}
      </g>

    </svg>
  );
};
