/* icons.jsx — icon set, logo, pictogram, reveal hook. Exports to window. */ const { useEffect, useRef, useState } = React; /* Resolve an asset: use bundled blob URL (window.__resources) if present, else the real path */ function R(id, path) { return (window.__resources && window.__resources[id]) || path; } /* Brand emblem (from brand book): rounded capsule with sunrise, pine, house & hills */ function Pictogram({ size = 26, color = "#F5EFE1", sw = 1.7 }) { return ( {/* sunrise */} {/* pine, left */} {/* house with mono-pitch roof, right */} {/* hills */} ); } function Logo({ dark = false }) { return ( теплий ); } const PATHS = { arrow: , calendar: , clock: , pin: , cup: , fire: , crystal: , music: , key: , droplet: , gift: , check: , shield: , coins: , phone: , mountain: , tree: , road: , present: , route: , leaf: , plus: , close: , chevL: , chevR: , mail: , instagram: , telegram: , ruler: , bed: , sofa: , deck: , }; function Icon({ name, size = 24, className }) { return ( ); } /* IntersectionObserver reveal */ function useReveal() { useEffect(() => { const els = document.querySelectorAll(".reveal:not(.in)"); if (!("IntersectionObserver" in window)) { els.forEach(e => e.classList.add("in")); return; } const io = new IntersectionObserver((entries) => { entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add("in"); io.unobserve(e.target); } }); }, { threshold: 0.12, rootMargin: "0px 0px -8% 0px" }); els.forEach(e => io.observe(e)); return () => io.disconnect(); }); } Object.assign(window, { Pictogram, Logo, Icon, useReveal, R });