/* Lumino Doodles — hand-drawn whiteboard icon collection.
   Every doodle is a JSX function returning inline SVG paths.
   - viewBox: 0 0 64 64
   - stroke: currentColor, rough-ish geometry with deliberate wobble
   - organized by category: school, shapes, nature, weather, objects, tech, food,
     sports, transport, symbols, emoji, arrows, frames, charts, abstract
*/

(function() {
  // Helper — generate a slightly wobbly line / curve primitive
  // All doodles are designed to look like dry-erase marker lines.

  const D = {}; // name -> ({size, stroke}) => JSX

  // ---------- SCHOOL ----------
  D["pencil"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 52 L40 22 L46 28 L16 58 Z" />
      <path d="M40 22 L46 16 Q50 12 52 18 L48 22" />
      <path d="M10 52 L16 58 L10 60 Z" fill="currentColor" />
      <path d="M36 26 L42 32" />
    </g>
  );
  D["book"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 14 Q22 10 32 14 Q42 10 54 14 L54 50 Q42 46 32 50 Q22 46 10 50 Z" />
      <path d="M32 14 L32 50" />
      <path d="M14 22 Q22 20 28 22 M14 30 Q22 28 28 30 M36 22 Q44 20 50 22 M36 30 Q44 28 50 30" />
    </g>
  );
  D["notebook"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <rect x="14" y="10" width="36" height="46" rx="2" />
      <path d="M20 10 L20 56 M20 20 L46 20 M20 30 L46 30 M20 40 L46 40 M20 48 L40 48" />
    </g>
  );
  D["backpack"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M16 22 Q16 14 24 14 Q32 10 40 14 Q48 14 48 22 L48 54 Q48 58 44 58 L20 58 Q16 58 16 54 Z" />
      <path d="M24 14 Q24 8 32 8 Q40 8 40 14" />
      <rect x="22" y="30" width="20" height="14" rx="2" />
      <path d="M26 38 L38 38" />
    </g>
  );
  D["apple"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 18 Q18 18 16 34 Q16 52 32 54 Q48 52 48 34 Q46 18 32 18 Q30 22 32 18" />
      <path d="M32 18 Q30 12 34 8" />
      <path d="M36 12 Q42 10 42 14 Q40 16 36 16" fill="currentColor" opacity=".5" />
    </g>
  );
  D["ruler"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <rect x="8" y="26" width="48" height="12" rx="1" transform="rotate(-15 32 32)" />
      <path d="M16 28 L18 32 M22 26 L26 32 M28 24 L30 28 M34 22 L38 28 M40 20 L42 24 M46 18 L50 24" transform="rotate(-15 32 32)" />
    </g>
  );
  D["graduation-cap"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M4 26 L32 16 L60 26 L32 36 Z" />
      <path d="M16 30 L16 44 Q16 50 32 50 Q48 50 48 44 L48 30" />
      <path d="M56 28 L56 42 M56 42 Q54 46 56 48 Q58 46 56 42" />
    </g>
  );
  D["globe"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="30" r="20" />
      <ellipse cx="32" cy="30" rx="8" ry="20" />
      <path d="M12 30 L52 30 M32 50 L32 58 M22 58 L42 58" />
    </g>
  );
  D["lightbulb"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M20 28 Q20 14 32 14 Q44 14 44 28 Q44 36 38 40 L38 46 L26 46 L26 40 Q20 36 20 28 Z" />
      <path d="M26 50 L38 50 M28 54 L36 54" />
      <path d="M32 22 L32 34 M28 26 L36 30" opacity=".5" />
      <path d="M8 16 L12 18 M56 16 L52 18 M32 4 L32 8" />
    </g>
  );
  D["rocket"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 6 Q42 16 42 32 L42 46 L22 46 L22 32 Q22 16 32 6 Z" />
      <circle cx="32" cy="24" r="4" />
      <path d="M22 38 L14 44 L22 46 M42 38 L50 44 L42 46" />
      <path d="M28 50 L28 56 M32 50 L32 58 M36 50 L36 56" />
    </g>
  );
  D["trophy"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M18 10 L46 10 L46 24 Q46 36 32 38 Q18 36 18 24 Z" />
      <path d="M18 14 L10 14 L10 20 Q10 26 18 28 M46 14 L54 14 L54 20 Q54 26 46 28" />
      <path d="M28 40 L36 40 L38 50 L26 50 Z" />
      <path d="M22 54 L42 54" />
    </g>
  );
  D["medal"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M20 6 L24 26 M44 6 L40 26" />
      <circle cx="32" cy="38" r="16" />
      <path d="M32 30 L34 36 L40 36 L35 40 L37 46 L32 42 L27 46 L29 40 L24 36 L30 36 Z" fill="currentColor" opacity=".4" />
    </g>
  );

  // ---------- NATURE ----------
  D["sun"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="12" />
      <path d="M32 4 L32 12 M32 52 L32 60 M4 32 L12 32 M52 32 L60 32 M12 12 L18 18 M46 46 L52 52 M12 52 L18 46 M46 18 L52 12" />
    </g>
  );
  D["moon"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M46 38 Q30 44 22 32 Q18 22 26 12 Q12 16 10 32 Q12 52 32 54 Q48 52 46 38 Z" />
      <circle cx="40" cy="20" r="1.5" fill="currentColor" />
      <circle cx="52" cy="14" r="1" fill="currentColor" />
      <circle cx="48" cy="28" r="1" fill="currentColor" />
    </g>
  );
  D["star"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 6 L38 24 L58 26 L42 38 L48 56 L32 46 L16 56 L22 38 L6 26 L26 24 Z" />
    </g>
  );
  D["cloud"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M16 40 Q8 40 8 32 Q8 22 18 22 Q22 14 32 14 Q44 14 46 26 Q56 26 56 36 Q56 44 46 44 L18 44 Q14 44 16 40 Z" />
    </g>
  );
  D["rain-cloud"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M16 30 Q8 30 8 22 Q8 14 18 14 Q22 8 30 8 Q40 8 42 18 Q50 18 50 26 Q50 32 42 32 L18 32 Q14 32 16 30 Z" />
      <path d="M18 38 L16 46 M26 38 L24 48 M34 38 L32 50 M42 38 L40 46" />
    </g>
  );
  D["snowflake"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 4 L32 60 M4 32 L60 32 M10 10 L54 54 M10 54 L54 10" />
      <path d="M28 8 L32 12 L36 8 M28 56 L32 52 L36 56 M8 28 L12 32 L8 36 M56 28 L52 32 L56 36" />
    </g>
  );
  D["leaf"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M12 52 Q10 22 40 10 Q54 14 54 28 Q50 48 20 52 Q14 54 12 52 Z" />
      <path d="M12 52 Q28 38 46 18 M22 46 L28 38 M30 44 L34 34 M38 40 L42 30" />
    </g>
  );
  D["tree"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 8 L20 22 L26 22 L14 38 L22 38 L10 54 L54 54 L42 38 L50 38 L38 22 L44 22 Z" />
      <path d="M32 54 L32 60 M28 60 L36 60" />
    </g>
  );
  D["flower"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="22" r="5" />
      <path d="M32 17 Q26 8 32 4 Q38 8 32 17 M37 22 Q46 16 50 22 Q46 28 37 22 M32 27 Q38 36 32 40 Q26 36 32 27 M27 22 Q18 16 14 22 Q18 28 27 22" />
      <path d="M32 40 Q30 50 34 60 M26 54 Q22 48 20 52 M38 54 Q42 48 44 52" />
    </g>
  );
  D["mountain"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M4 52 L20 24 L30 36 L42 18 L60 52 Z" />
      <path d="M17 30 L22 30 L20 24 L17 30 M38 24 L44 24 L42 18 L38 24" />
    </g>
  );
  D["fire"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 8 Q22 20 24 30 Q18 28 16 38 Q14 52 32 58 Q50 52 48 38 Q46 28 40 30 Q42 20 32 8 Z" />
      <path d="M32 28 Q28 36 30 42 Q32 48 36 42 Q38 36 32 28 Z" />
    </g>
  );
  D["wave"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M4 28 Q12 20 20 28 Q28 36 36 28 Q44 20 52 28 Q58 32 60 30" />
      <path d="M4 40 Q12 32 20 40 Q28 48 36 40 Q44 32 52 40 Q58 44 60 42" />
    </g>
  );

  // ---------- SHAPES ----------
  D["circle"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 8 Q52 10 54 30 Q52 54 32 56 Q10 54 10 32 Q12 10 32 8 Z" />
    </g>
  );
  D["square"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 12 L52 10 L54 54 L12 52 Z" />
    </g>
  );
  D["triangle"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 8 L56 54 L8 52 Z" />
    </g>
  );
  D["diamond"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 6 L56 32 L32 58 L8 32 Z" />
    </g>
  );
  D["heart"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 54 Q12 40 10 24 Q10 12 22 12 Q30 12 32 22 Q34 12 42 12 Q54 12 54 24 Q52 40 32 54 Z" />
    </g>
  );
  D["hexagon"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M16 16 L48 14 L56 32 L48 52 L16 50 L8 32 Z" />
    </g>
  );
  D["pentagon"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 6 L56 24 L46 54 L18 54 L8 24 Z" />
    </g>
  );
  D["cloud-shape"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M12 40 Q4 38 6 28 Q8 20 18 22 Q20 12 32 12 Q44 12 46 22 Q58 22 58 32 Q58 42 48 42 L16 42 Q10 42 12 40" />
    </g>
  );
  D["burst"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 6 L36 18 L48 12 L44 24 L58 28 L46 34 L52 46 L40 42 L34 56 L28 42 L16 48 L20 36 L6 32 L18 26 L12 14 L24 20 Z" />
    </g>
  );
  D["speech-bubble"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 14 Q10 8 16 8 L48 8 Q54 8 54 14 L54 36 Q54 42 48 42 L22 42 L12 54 L16 42 Q10 42 10 36 Z" />
    </g>
  );
  D["thought-bubble"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M16 14 Q8 16 10 24 Q4 28 10 34 Q8 42 18 42 Q22 48 30 44 Q36 48 42 44 Q50 46 52 38 Q58 34 54 28 Q58 20 50 18 Q46 10 38 14 Q32 8 24 14 Q20 10 16 14 Z" />
      <circle cx="18" cy="52" r="2.5" />
      <circle cx="12" cy="58" r="1.5" />
    </g>
  );

  // ---------- TECH ----------
  D["computer"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <rect x="6" y="10" width="52" height="34" rx="2" />
      <path d="M10 14 L54 14 L54 40 L10 40 Z" />
      <path d="M24 44 L22 52 L42 52 L40 44" />
      <path d="M16 56 L48 56" />
    </g>
  );
  D["phone"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <rect x="18" y="4" width="28" height="56" rx="4" />
      <path d="M28 10 L36 10" />
      <circle cx="32" cy="54" r="2" />
      <path d="M22 14 L42 14 L42 48 L22 48 Z" />
    </g>
  );
  D["gear"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="8" />
      <path d="M32 6 L32 14 M32 50 L32 58 M6 32 L14 32 M50 32 L58 32 M13 13 L19 19 M45 45 L51 51 M13 51 L19 45 M45 19 L51 13" />
    </g>
  );
  D["wifi"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M6 22 Q32 -4 58 22 M14 32 Q32 14 50 32 M22 42 Q32 32 42 42" />
      <circle cx="32" cy="52" r="2.5" fill="currentColor" />
    </g>
  );
  D["battery"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <rect x="6" y="22" width="48" height="20" rx="3" />
      <path d="M56 28 L56 36" />
      <path d="M12 26 L20 26 L20 38 L12 38 Z M24 26 L32 26 L32 38 L24 38 Z" fill="currentColor" opacity=".3" />
    </g>
  );
  D["robot"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <rect x="14" y="20" width="36" height="28" rx="4" />
      <circle cx="24" cy="32" r="3" />
      <circle cx="40" cy="32" r="3" />
      <path d="M26 40 Q32 44 38 40" />
      <path d="M32 20 L32 12 M28 10 L36 10 M10 34 L14 34 M50 34 L54 34" />
      <path d="M20 48 L20 56 M44 48 L44 56" />
    </g>
  );
  D["camera"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M6 18 L20 18 L24 12 L40 12 L44 18 L58 18 Q58 50 32 50 Q6 50 6 18 Z" />
      <circle cx="32" cy="32" r="10" />
      <circle cx="50" cy="24" r="1.5" fill="currentColor" />
    </g>
  );
  D["headphones"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 38 Q10 10 32 10 Q54 10 54 38" />
      <path d="M8 38 L16 38 L16 54 L8 54 Z M48 38 L56 38 L56 54 L48 54 Z" />
    </g>
  );
  D["mouse"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M18 12 Q14 12 14 18 L14 48 Q14 56 24 56 L40 56 Q50 56 50 48 L50 18 Q50 12 46 12 Z" />
      <path d="M32 12 L32 28 M32 20 L14 20" />
    </g>
  );
  D["code"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M22 16 L8 32 L22 48 M42 16 L56 32 L42 48 M38 12 L26 52" />
    </g>
  );

  // ---------- OBJECTS ----------
  D["key"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="18" cy="32" r="10" />
      <path d="M28 32 L58 32 L58 40 M50 32 L50 40 M42 32 L42 38" />
    </g>
  );
  D["lock"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <rect x="12" y="28" width="40" height="28" rx="3" />
      <path d="M20 28 L20 20 Q20 8 32 8 Q44 8 44 20 L44 28" />
      <circle cx="32" cy="40" r="3" />
      <path d="M32 43 L32 50" />
    </g>
  );
  D["gift"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <rect x="8" y="24" width="48" height="10" />
      <rect x="12" y="34" width="40" height="22" />
      <path d="M32 24 L32 56" />
      <path d="M32 24 Q20 12 14 20 Q16 24 32 24 Q44 12 50 20 Q48 24 32 24" />
    </g>
  );
  D["balloon"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 8 Q48 10 48 26 Q48 38 32 42 Q16 38 16 26 Q16 10 32 8 Z" />
      <path d="M30 42 L34 42 L32 46 Z" />
      <path d="M32 46 Q28 52 32 56 Q36 58 32 60" />
    </g>
  );
  D["clock"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="34" r="22" />
      <path d="M32 22 L32 34 L42 38" />
      <path d="M32 12 L32 8 M28 8 L36 8 M24 6 L20 4 M40 6 L44 4" />
    </g>
  );
  D["watering-can"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M14 30 L14 50 Q14 56 20 56 L40 56 Q46 56 46 50 L46 30 Z" />
      <path d="M46 34 L58 24 M58 24 L56 22 M58 24 L60 22" />
      <path d="M14 30 Q14 22 22 22 L38 22 Q46 22 46 30" />
      <path d="M20 30 L40 30" />
    </g>
  );
  D["umbrella"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M6 30 Q8 10 32 10 Q56 10 58 30 Q48 26 44 30 Q40 26 32 30 Q24 26 20 30 Q16 26 6 30 Z" />
      <path d="M32 30 L32 52 Q32 58 38 58" />
    </g>
  );
  D["rocket-ship"] = D["rocket"];

  // ---------- FOOD ----------
  D["cake"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 34 L54 34 L54 54 L10 54 Z" />
      <path d="M10 34 L54 34 Q54 28 48 28 L16 28 Q10 28 10 34" />
      <path d="M16 28 L16 18 M16 14 L16 10 M32 28 L32 18 M32 14 L32 10 M48 28 L48 18 M48 14 L48 10" />
      <path d="M10 42 Q16 46 22 42 Q28 38 34 42 Q40 46 46 42 Q52 38 54 42" />
    </g>
  );
  D["coffee"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M12 22 L48 22 L46 52 Q46 56 42 56 L18 56 Q14 56 14 52 Z" />
      <path d="M48 26 Q58 26 58 36 Q58 44 48 44" />
      <path d="M22 10 Q20 16 22 18 M32 6 Q30 14 32 16 M42 10 Q40 16 42 18" />
    </g>
  );
  D["pizza"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 16 L56 16 L32 56 Z" />
      <circle cx="22" cy="26" r="2" fill="currentColor" />
      <circle cx="38" cy="26" r="2" fill="currentColor" />
      <circle cx="30" cy="38" r="2" fill="currentColor" />
      <path d="M12 20 L52 20" />
    </g>
  );
  D["ice-cream"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M16 24 Q16 8 32 8 Q48 8 48 24 Q48 28 44 30 Q40 28 40 32 Q36 30 32 34 Q28 30 24 32 Q24 28 20 30 Q16 28 16 24 Z" />
      <path d="M18 32 L32 58 L46 32" />
    </g>
  );
  D["donut"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="22" />
      <circle cx="32" cy="32" r="7" />
      <path d="M18 20 Q20 24 18 26 M26 16 Q28 20 26 22 M40 16 Q42 20 40 22 M48 20 Q50 24 48 26 M48 40 Q50 44 48 46 M40 46 Q42 50 40 52 M26 46 Q28 50 26 52" />
    </g>
  );

  // ---------- SPORT / ACTIVITY ----------
  D["ball"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="22" />
      <path d="M18 20 Q32 24 46 20 M18 44 Q32 40 46 44 M24 14 Q32 28 24 50 M40 14 Q32 28 40 50" />
    </g>
  );
  D["paint-brush"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M40 8 L56 24 L46 34 Q44 38 40 34 L30 24 Q30 20 32 18 Z" />
      <path d="M30 24 Q18 36 10 44 Q6 48 10 52 Q14 56 18 52 Q30 44 40 34" />
    </g>
  );
  D["palette"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 8 Q54 8 56 28 Q56 40 46 40 Q38 40 38 46 Q38 54 30 54 Q8 54 6 32 Q8 8 32 8 Z" />
      <circle cx="20" cy="22" r="2.5" fill="currentColor" />
      <circle cx="30" cy="16" r="2.5" fill="currentColor" />
      <circle cx="42" cy="20" r="2.5" fill="currentColor" />
      <circle cx="46" cy="32" r="2.5" fill="currentColor" />
    </g>
  );
  D["music"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M24 10 L24 42 M24 10 L56 6 L56 38" />
      <ellipse cx="18" cy="44" rx="7" ry="5" />
      <ellipse cx="50" cy="40" rx="7" ry="5" />
    </g>
  );
  D["guitar"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M28 32 Q14 34 14 48 Q14 58 26 58 Q40 58 40 46 Q40 38 32 36" />
      <circle cx="26" cy="48" r="5" />
      <path d="M32 36 L50 18 L48 10 L56 10 L56 18 L54 20 L38 38" />
    </g>
  );
  D["kite"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 6 L52 26 L32 38 L12 26 Z" />
      <path d="M32 6 L32 38 M12 26 L52 26" />
      <path d="M32 38 Q28 46 34 50 Q30 54 36 58" />
      <path d="M32 44 L28 44 M34 50 L38 50 M34 56 L30 56" />
    </g>
  );

  // ---------- TRANSPORT ----------
  D["car"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M6 40 L8 28 Q10 22 18 22 L46 22 Q52 22 56 28 L58 40 L58 48 L6 48 Z" />
      <circle cx="18" cy="48" r="5" />
      <circle cx="46" cy="48" r="5" />
      <path d="M14 32 L50 32" />
    </g>
  );
  D["bike"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="14" cy="44" r="10" />
      <circle cx="50" cy="44" r="10" />
      <path d="M14 44 L28 24 L42 44 M28 24 L40 24 M32 24 L40 10 L46 10" />
    </g>
  );
  D["boat"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 42 L56 42 L50 52 L14 52 Z" />
      <path d="M32 42 L32 12 L48 32 L32 32" />
      <path d="M4 56 Q12 52 20 56 Q28 52 36 56 Q44 52 52 56 Q58 54 60 56" />
    </g>
  );
  D["airplane"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 36 L24 32 L30 18 L34 18 L32 34 L54 30 L58 34 L30 44 L28 58 L24 58 L22 44 L8 42 Z" />
    </g>
  );

  // ---------- PEOPLE / EMOJI ----------
  D["smile"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="24" />
      <circle cx="24" cy="26" r="2" fill="currentColor" />
      <circle cx="40" cy="26" r="2" fill="currentColor" />
      <path d="M22 38 Q32 46 42 38" />
    </g>
  );
  D["wink"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="24" />
      <circle cx="24" cy="26" r="2" fill="currentColor" />
      <path d="M36 26 L44 26" />
      <path d="M22 38 Q32 46 42 38" />
    </g>
  );
  D["surprised"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="24" />
      <circle cx="24" cy="26" r="2" fill="currentColor" />
      <circle cx="40" cy="26" r="2" fill="currentColor" />
      <circle cx="32" cy="42" r="4" />
    </g>
  );
  D["sad"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="24" />
      <circle cx="24" cy="26" r="2" fill="currentColor" />
      <circle cx="40" cy="26" r="2" fill="currentColor" />
      <path d="M22 44 Q32 36 42 44" />
    </g>
  );
  D["cool"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="24" />
      <rect x="16" y="22" width="12" height="8" rx="2" />
      <rect x="36" y="22" width="12" height="8" rx="2" />
      <path d="M28 26 L36 26" />
      <path d="M22 40 Q32 46 42 40" />
    </g>
  );
  D["person"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="16" r="8" />
      <path d="M14 58 Q14 32 32 32 Q50 32 50 58" />
    </g>
  );
  D["hand"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M22 36 L22 14 Q22 8 26 8 Q30 8 30 14 L30 28" />
      <path d="M30 28 L30 10 Q30 4 34 4 Q38 4 38 10 L38 30" />
      <path d="M38 30 L38 12 Q38 6 42 6 Q46 6 46 12 L46 32" />
      <path d="M46 32 L46 18 Q46 14 50 14 Q54 14 54 18 L54 42 Q54 58 38 58 Q24 58 22 46 L16 38 Q12 32 18 30 Q22 30 22 36" />
    </g>
  );
  D["peace"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="24" />
      <path d="M32 8 L32 56 M32 32 L14 46 M32 32 L50 46" />
    </g>
  );

  // ---------- ARROWS / MARKS ----------
  D["arrow-right"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M6 32 L54 32 M40 18 L56 32 L40 46" />
    </g>
  );
  D["arrow-left"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 32 L58 32 M24 18 L8 32 L24 46" />
    </g>
  );
  D["arrow-up"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 10 L32 58 M18 24 L32 8 L46 24" />
    </g>
  );
  D["arrow-down"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 6 L32 54 M18 40 L32 56 L46 40" />
    </g>
  );
  D["arrow-curve"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 52 Q8 14 44 14 M34 4 L48 14 L34 22" />
    </g>
  );
  D["arrow-scribble"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M6 44 Q16 20 24 40 Q32 18 40 36 Q46 24 54 32 M44 24 L56 32 L48 42" />
    </g>
  );
  D["check"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 34 L22 50 L56 12" />
    </g>
  );
  D["cross"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 10 L54 54 M54 10 L10 54" />
    </g>
  );
  D["exclamation"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 8 L32 40" />
      <circle cx="32" cy="52" r="2.5" fill="currentColor" />
    </g>
  );
  D["question"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M18 22 Q18 8 32 8 Q46 8 46 22 Q46 30 36 34 Q32 36 32 42" />
      <circle cx="32" cy="54" r="2.5" fill="currentColor" />
    </g>
  );
  D["plus"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 8 L32 56 M8 32 L56 32" />
    </g>
  );
  D["underline-squiggle"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M6 32 Q12 24 18 32 Q24 40 30 32 Q36 24 42 32 Q48 40 54 32 Q58 28 60 32" />
    </g>
  );
  D["star-sparkle"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 8 L36 26 L54 30 L36 34 L32 56 L28 34 L10 30 L28 26 Z" />
      <path d="M50 12 L52 18 L58 20 L52 22 L50 28 L48 22 L42 20 L48 18 Z" />
    </g>
  );
  D["lightning"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M34 6 L14 36 L30 36 L26 58 L50 26 L34 26 Z" />
    </g>
  );
  D["hash"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M22 6 L16 58 M46 6 L40 58 M8 22 L56 18 M6 44 L54 40" />
    </g>
  );
  D["at"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="8" />
      <path d="M40 32 L40 38 Q40 44 46 44 Q54 44 54 32 Q54 12 32 12 Q10 12 10 32 Q10 52 32 52 L42 52" />
    </g>
  );

  // ---------- FRAMES / CONTAINERS ----------
  D["frame-cloud"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 20 Q6 16 10 12 Q14 8 20 10 Q24 4 32 6 Q40 4 46 10 Q54 8 58 16 Q62 24 56 28 Q62 34 56 40 Q58 48 50 50 Q46 56 38 54 Q32 60 26 54 Q18 58 14 50 Q6 48 8 40 Q4 34 8 28 Q4 24 10 20 Z" />
    </g>
  );
  D["frame-starburst"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 2 L36 10 L44 6 L44 14 L54 14 L50 22 L58 26 L50 30 L54 38 L44 38 L44 46 L36 42 L32 50 L28 42 L20 46 L20 38 L10 38 L14 30 L6 26 L14 22 L10 14 L20 14 L20 6 L28 10 Z" />
    </g>
  );
  D["frame-banner"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 20 L16 14 L56 14 L48 20 L56 26 L16 26 Z" />
      <path d="M16 26 L16 42 L24 36 L32 42 L32 26" />
    </g>
  );
  D["frame-scroll"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 18 Q8 10 14 10 Q20 10 20 18 L20 48 Q20 56 14 56 Q8 56 8 48 M20 10 L50 10 Q56 10 56 18 L56 48 Q56 56 50 56 L14 56 M50 10 Q44 10 44 18 L44 28 L20 28" />
    </g>
  );
  D["frame-ribbon"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 24 L20 18 L44 18 L56 24 L44 30 L20 30 Z" />
      <path d="M14 30 L6 44 L18 42 L22 52 L28 30 M50 30 L58 44 L46 42 L42 52 L36 30" />
    </g>
  );

  // ---------- CHARTS / DATA ----------
  D["chart-bar"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 56 L56 56 M8 56 L8 10" />
      <rect x="14" y="36" width="8" height="20" />
      <rect x="28" y="22" width="8" height="34" />
      <rect x="42" y="30" width="8" height="26" />
    </g>
  );
  D["chart-line"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M8 56 L56 56 M8 56 L8 10" />
      <path d="M12 46 L22 32 L32 38 L42 20 L54 14" />
      <circle cx="22" cy="32" r="2" fill="currentColor" />
      <circle cx="32" cy="38" r="2" fill="currentColor" />
      <circle cx="42" cy="20" r="2" fill="currentColor" />
    </g>
  );
  D["chart-pie"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="22" />
      <path d="M32 32 L32 10 M32 32 L52 24" />
    </g>
  );
  D["target"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="22" />
      <circle cx="32" cy="32" r="14" />
      <circle cx="32" cy="32" r="6" />
      <circle cx="32" cy="32" r="2" fill="currentColor" />
    </g>
  );
  D["flag"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M12 6 L12 58" />
      <path d="M12 10 Q24 4 36 10 Q48 16 56 10 L56 28 Q48 34 36 28 Q24 22 12 28 Z" />
    </g>
  );

  // ---------- ABSTRACT / DECO ----------
  D["squiggle"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M6 32 Q14 16 22 32 Q30 48 38 32 Q46 16 54 32 Q58 40 60 36" />
    </g>
  );
  D["zigzag"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M4 40 L14 20 L24 40 L34 20 L44 40 L54 20 L60 30" />
    </g>
  );
  D["spiral"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M32 32 Q28 28 32 24 Q40 24 40 32 Q40 44 28 44 Q16 44 16 30 Q16 12 34 12 Q54 12 54 32 Q54 54 32 54" />
    </g>
  );
  D["dots-three"] = ({stroke}) => (
    <g fill="currentColor">
      <circle cx="12" cy="32" r="4" />
      <circle cx="32" cy="32" r="4" />
      <circle cx="52" cy="32" r="4" />
    </g>
  );
  D["crosshatch"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M10 14 L54 28 M10 24 L54 38 M10 34 L54 48 M10 44 L54 58" />
    </g>
  );
  D["rays"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <circle cx="32" cy="32" r="6" />
      <path d="M32 10 L32 18 M32 46 L32 54 M10 32 L18 32 M46 32 L54 32 M16 16 L22 22 M42 42 L48 48 M16 48 L22 42 M42 22 L48 16" />
    </g>
  );
  D["ribbon-wave"] = ({stroke}) => (
    <g fill="none" stroke="currentColor" strokeWidth={stroke} strokeLinecap="round" strokeLinejoin="round">
      <path d="M4 24 Q18 12 32 24 Q46 36 60 24" />
      <path d="M4 40 Q18 28 32 40 Q46 52 60 40" />
    </g>
  );

  // ---- Publish ----
  window.DOODLES = D;
  window.DOODLE_NAMES = Object.keys(D);

  // Category map for filtering in UI
  window.DOODLE_CATEGORIES = {
    "School":     ["pencil","book","notebook","backpack","apple","ruler","graduation-cap","globe","lightbulb","rocket","trophy","medal"],
    "Nature":     ["sun","moon","star","cloud","rain-cloud","snowflake","leaf","tree","flower","mountain","fire","wave"],
    "Shapes":     ["circle","square","triangle","diamond","heart","hexagon","pentagon","cloud-shape","burst","speech-bubble","thought-bubble"],
    "Tech":       ["computer","phone","gear","wifi","battery","robot","camera","headphones","mouse","code"],
    "Objects":    ["key","lock","gift","balloon","clock","watering-can","umbrella"],
    "Food":       ["cake","coffee","pizza","ice-cream","donut"],
    "Activity":   ["ball","paint-brush","palette","music","guitar","kite"],
    "Transport":  ["car","bike","boat","airplane"],
    "People":     ["smile","wink","surprised","sad","cool","person","hand","peace"],
    "Marks":      ["arrow-right","arrow-left","arrow-up","arrow-down","arrow-curve","arrow-scribble","check","cross","exclamation","question","plus","underline-squiggle","star-sparkle","lightning","hash","at"],
    "Frames":     ["frame-cloud","frame-starburst","frame-banner","frame-scroll","frame-ribbon"],
    "Data":       ["chart-bar","chart-line","chart-pie","target","flag"],
    "Abstract":   ["squiggle","zigzag","spiral","dots-three","crosshatch","rays","ribbon-wave"],
  };

  // <Doodle> component — wraps the raw path set with wobble + stroke options
  window.Doodle = function Doodle({ name, size = 48, width, height, stroke = 2.2, wobble = 0, style, className }) {
    const fn = D[name];
    if (!fn) return null;
    const w = width ?? size;
    const h = height ?? size;
    // Deterministic seed per name so wobble is stable for snapshots
    const seed = [...name].reduce((a,c)=>((a<<5)-a+c.charCodeAt(0))|0, 0);
    const rot = wobble ? ((Math.sin(seed) * 2) * wobble) : 0;
    const sx = wobble ? (1 + Math.cos(seed*2) * 0.01 * wobble) : 1;
    const sy = wobble ? (1 + Math.sin(seed*3) * 0.01 * wobble) : 1;
    return (
      <svg
        width={w} height={h} viewBox="0 0 64 64" preserveAspectRatio="none"
        style={{ transform: `rotate(${rot}deg) scale(${sx}, ${sy})`, overflow: "visible", ...style }}
        className={className}
      >
        {fn({ stroke })}
      </svg>
    );
  };
})();
