/* 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 ( I Know My Skin ); }; 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 = '' }) => (
Luftaufnahme der Zürcher Altstadt mit Limmat
{pinLabel}
{nearLabel && (
{nearLabel}
)}
); Object.assign(window, { Logo, Wordmark, Icon, Eyebrow, Button, SkinMap, ZurichMap });