/* I Know My Skin — shared primitives (root-relative paths) */
const Logo = ({ size = 40, mono = false, color = '#3D6B6C', style = {} }) => {
// New brand mark: hexagon-network "skin map" with a woman's profile.
// Shipped as pre-coloured PNG masters; pick the right one for the ground.
const R = (typeof window !== 'undefined' && window.__resources) || {};
const src = mono
? (R.logoBlush || 'assets/logo-icon-blush.png')
: (color === '#2B4A4B' ? (R.logoDeep || 'assets/logo-icon-deep.png') : (R.logoIcon || 'assets/logo-icon.png'));
const dim = typeof size === 'number' ? size + 'px' : size;
return (
);
};
const Wordmark = ({ light = false, size = 22, tagline = false, taglineText = '' }) => (
I Know My Skin
{tagline &&
{taglineText}
}
);
const Icon = ({ name, size = 22, color = 'var(--slate-teal)', stroke = 1.6 }) => {
const ref = React.useRef(null);
React.useEffect(() => {
if (ref.current && window.lucide) {
ref.current.innerHTML = '';
const el = document.createElement('i');
el.setAttribute('data-lucide', name);
ref.current.appendChild(el);
window.lucide.createIcons({ attrs: { width: size, height: size, stroke: color, 'stroke-width': stroke } });
}
}, [name, size, color, stroke]);
return ;
};
const Eyebrow = ({ children, light = false }) => (
{children}
);
const Button = ({ children, variant = 'primary', onClick, type = 'button', as = 'button', href }) => {
const [hover, setHover] = React.useState(false);
const base = { fontFamily: 'var(--font-body)', fontSize: 15, borderRadius: 999, padding: '13px 28px', border: '1.5px solid transparent', cursor: 'pointer', transition: 'all 200ms var(--ease-soft)', letterSpacing: '0.01em', display: 'inline-flex', alignItems: 'center', gap: 9, textDecoration: 'none', lineHeight: 1, whiteSpace: 'nowrap' };
const variants = {
primary: { ...base, background: hover ? 'var(--slate-teal)' : 'var(--deep-teal)', color: 'var(--off-white)' },
secondary: { ...base, background: hover ? 'var(--teal-50)' : 'transparent', color: 'var(--deep-teal)', borderColor: hover ? 'var(--slate-teal)' : 'var(--teal-300)' },
accent: { ...base, background: hover ? 'var(--rose-700)' : 'var(--dusty-rose)', color: '#fff' },
ghost: { ...base, background: hover ? 'var(--blush-50)' : 'transparent', color: 'var(--slate-teal)' },
ghostLight: { ...base, background: hover ? 'rgba(255,255,255,0.1)' : 'transparent', color: 'var(--off-white)', borderColor: 'rgba(255,255,255,0.35)' },
light: { ...base, background: hover ? '#fff' : 'var(--blush)', color: 'var(--deep-teal)' },
};
const props = { style: variants[variant], onClick, onMouseEnter: () => setHover(true), onMouseLeave: () => setHover(false) };
if (as === 'a') return {children};
return ;
};
const SkinMap = ({ size = 320, color = 'var(--slate-teal)', opacity = 0.13, style = {} }) => (
);
/* Aerial photo of central Zürich (Limmat, old town, Fraumünster) with an on-brand location chip. */
const ZurichMap = ({ pinLabel = 'Zürich', nearLabel = '' }) => (
{pinLabel}
{nearLabel && (
{nearLabel}
)}
);
Object.assign(window, { Logo, Wordmark, Icon, Eyebrow, Button, SkinMap, ZurichMap });