/* Tidewell — editorial product illustrations. Style: flat geometric, layered, deep aqua/navy palette + cream highlight, subtle texture, mono-labelled. Designed to feel like a brand system, not stock clip-art. */ const ILLUS_BG = "var(--illus-bg, #1f3a52)"; const ILLUS_WATER = "var(--illus-water, #4a8fb8)"; const ILLUS_WATER_DEEP = "var(--illus-water-deep, #2a5d7e)"; const ILLUS_CREAM = "var(--illus-cream, #f4ede0)"; const ILLUS_ACCENT = "var(--illus-accent, #d9a663)"; const ILLUS_INK = "var(--illus-ink, #0f2030)"; /* shared decorations */ const ScanLines = ({ opacity = 0.06 }) => ( ); const Caustics = ({ id = "caustics" }) => ( ); const CornerTag = ({ children }) => ( {children} ); /* ─────────── 01 Automatic Pool Cover — top-down ─────────── */ function IllusAutoCover() { return ( {/* deck pattern */} {[...Array(8)].map((_, i) => ( ))} {/* pool */} {/* cover halfway across */} {/* cover slats */} {[...Array(14)].map((_, i) => ( ))} {/* leading edge */} {/* tracks */} {/* roller housing */} {/* ripple at open end */} 01 · Auto Cover · Track-driven ); } /* ─────────── 02 Manual Pool Cover — isometric reel ─────────── */ function IllusManualCover() { return ( {/* ground */} {/* pool */} {/* reel stand */} {/* legs */} {/* reel cylinder */} {/* wound material rings */} {[...Array(20)].map((_, i) => ( ))} {/* crank */} 02 · Manual Cover · Reel-mounted ); } /* ─────────── 03 Solar Heater — collector panel ─────────── */ function IllusSolar() { return ( {/* sun */} {/* rays */} {/* roof tilted panel — isometric */} {/* tubes */} {[...Array(20)].map((_, i) => ( ))} {/* manifolds */} {/* corner accent */} {/* flow indicators */} IN ▾ ▴ OUT 03 · Solar Heater · EPDM ); } /* ─────────── 04 Saltwater Chlorinator — cell cylinder ─────────── */ function IllusSalt() { return ( {/* controller box */} {/* screen lines */} {/* buttons */} {/* pipe in */} {/* cell tube */} {/* plates inside */} {[...Array(11)].map((_, i) => ( ))} {/* bubbles */} {/* pipe out */} 04 · Salt Cell · 40 g/h ); } /* ─────────── 05 Solar Shower ─────────── */ function IllusShower() { return ( {/* sun in corner */} {/* ground line */} {/* shower base */} {/* pole */} {/* tank — long vertical solar */} {[...Array(6)].map((_, i) => ( ))} {/* shower head */} {/* water stream */} {[...Array(7)].map((_, i) => ( ))} {/* puddle */} {/* tap */} 05 · Solar Shower · 9 gal ); } /* ─────────── 06 Heat Pump — boxy unit + fan ─────────── */ function IllusHeatPump() { return ( {/* ground */} {/* concrete pad */} {/* body */} {/* top vent grille */} {[...Array(20)].map((_, i) => ( ))} {/* fan circle */} {/* fan blades */} {[0, 72, 144, 216, 288].map(a => ( ))} {/* side louvers */} {[...Array(8)].map((_, i) => ( ))} {/* badge */} TIDEWELL INVERTER 06 · Heat Pump · COP 14 ); } /* ─────────── 07 Pool Light — submerged glow ─────────── */ function IllusLight() { return ( {/* caustics */} {/* big glow */} {/* wall niche */} {/* lens segments */} {/* mounting screws */} {/* particles in water */} 07 · Pool Light · 30 W RGBW ); } /* ─────────── 08 Filter & Pump ─────────── */ function IllusFilter() { return ( {/* filter tank (right) */} {/* dome top knob */} {/* multiport */} {/* highlight stripe */} {/* pump (left) */} {/* strainer basket lid */} {/* impeller hint */} {[0, 60, 120, 180, 240, 300].map(a => ( ))} {/* motor housing right */} {[...Array(7)].map((_, i) => ( ))} {/* connecting pipe */} 08 · Filter & Pump · VS ); } /* ─────────── 09 Robotic Cleaner — top-down pool ─────────── */ function IllusCleaner() { return ( {/* pool */} {/* path traced by cleaner */} {/* debris dots */} {/* the cleaner */} {/* top window */} {/* tracks */} {/* brush */} {/* cord */} {/* ripples around it */} 09 · Robotic Cleaner · Cordless ); } /* ─────────── 10 Pool Fitting — close-up assembly ─────────── */ function IllusFitting() { return ( {/* exploded view */} {/* left pipe */} {/* gasket */} {/* center body */} {/* hex face */} {/* bolts */} {/* gasket right */} {/* right pipe */} {/* construction lines */} {/* annotations */} PIPE · 1.5″ O-RING UNION BODY O-RING 10 · Pool Fittings · Series-7 ); } /* ─────────── HERO — beach-meets-pool editorial scene ─────────── */ function IllusHero() { return ( {/* sky */} {/* sun glow */} {/* horizon mountains */} {/* deck top edge */} {/* deck planks */} {[...Array(20)].map((_, i) => ( ))} {/* pool — infinity edge */} {/* infinity-edge spillway */} {/* caustics */} {/* underwater lights — twin glow */} {/* floating leaves / particles */} {/* lounge chair silhouette */} {/* palm-tree silhouette (right) */} {/* mono caption */} N 45.4° · W 75.7° · 6:42 PM ); } window.ILLUS = { "cover-auto": IllusAutoCover, "cover-manual": IllusManualCover, "solar": IllusSolar, "salt": IllusSalt, "shower": IllusShower, "heatpump": IllusHeatPump, "light": IllusLight, "filter": IllusFilter, "cleaner": IllusCleaner, "fitting": IllusFitting, "hero": IllusHero };