// Botanical illustrations — herbarium-style line art. // All use currentColor stroke, no fills (or minimal sepia fills). // Drawn at varied viewBoxes to suit each composition. // A trailing seaweed / algae frond — multiple slim leaves on a vertical stem const BotanicalAlgae = ({ size = 100 }) => ( {/* main stem */} {/* fronds left + right alternating */} {[20, 40, 60, 80, 100, 120, 140, 160, 180, 200].map((y, i) => { const left = i % 2 === 0; const dx = left ? -1 : 1; const tipX = 50 + dx * (24 + Math.sin(i) * 5); const tipY = y - 10 - i; const ctrl1X = 50 + dx * 8; const ctrl1Y = y - 4; return ( {/* tiny veins */} {[0.3, 0.55, 0.8].map((t, j) => { const mx = 50 + (tipX - 50) * t; const my = y + (tipY - y) * t; const vx = mx + dx * 3; const vy = my - 2; return ; })} ); })} ); // Herbarium leaf branch — simple olive/laurel style const BotanicalBranch = ({ size = 200 }) => ( {/* stem */} {/* leaves alternating */} {[ { x: 50, y: 76, a: -25, len: 20 }, { x: 75, y: 70, a: 30, len: 22 }, { x: 110, y: 64, a: -22, len: 26 }, { x: 140, y: 56, a: 28, len: 26 }, { x: 175, y: 48, a: -20, len: 28 }, { x: 210, y: 42, a: 26, len: 26 }, { x: 245, y: 35, a: -18, len: 24 }, ].map((l, i) => { const rad = (l.a * Math.PI) / 180; const tx = l.x + Math.cos(rad) * l.len; const ty = l.y + Math.sin(rad) * l.len; const w = 6; const px = -Math.sin(rad) * w; const py = Math.cos(rad) * w; // ellipse-ish leaf const cx = (l.x + tx) / 2; const cy = (l.y + ty) / 2; return ( ); })} {/* seed/berry at end */} ); // Simple fish silhouette — herbarium aquatic style const BotanicalFish = ({ size = 200 }) => ( {/* body */} {/* tail */} {/* head separator */} {/* eye */} {/* gill */} {/* top fin */} {/* bottom fin */} {/* scales suggested with subtle curves */} {[80, 95, 110, 125, 140, 155, 170].map((x) => ( ))} {/* label hint */} SP. MARINUS FIG. 04 ); // Seed pod / capsule const BotanicalSeed = ({ size = 80 }) => ( {/* stem */} {/* pod */} {/* center seam */} {/* seeds inside */} {[60, 76, 92, 108].map((y) => ( ))} {/* tiny sepals at top */} ); // Coral fan — multi-pronged const BotanicalCoral = ({ size = 140 }) => ( {/* base */} {/* main branches */} {[ { ang: -90, len: 60 }, { ang: -110, len: 50 }, { ang: -70, len: 50 }, { ang: -130, len: 38 }, { ang: -50, len: 38 }, { ang: -150, len: 28 }, { ang: -30, len: 28 }, ].map((b, i) => { const rad = (b.ang * Math.PI) / 180; const x = 70 + Math.cos(rad) * b.len; const y = 105 + Math.sin(rad) * b.len; // sub-prongs return ( {[0.5, 0.75].map((t, j) => { const mx = 70 + (x - 70) * t; const my = 105 + (y - 105) * t; const sx = mx + Math.cos(rad + 0.6) * 8; const sy = my + Math.sin(rad + 0.6) * 8; const sx2 = mx + Math.cos(rad - 0.6) * 8; const sy2 = my + Math.sin(rad - 0.6) * 8; return ( ); })} ); })} ); // Topographic curves — for backgrounds / texture const BotanicalTopo = ({ size = 200 }) => ( {[0, 8, 18, 30, 44, 60, 78].map((off) => ( ))} ); // Botanical decorative divider — small leaf with parentheses const BotanicalDivider = ({ size = 60 }) => ( ); Object.assign(window, { BotanicalAlgae, BotanicalBranch, BotanicalFish, BotanicalSeed, BotanicalCoral, BotanicalTopo, BotanicalDivider, });