// Design tokens for Inova — editorial beauty tech // Paper-white neutral + single warm rose-copper accent. const T = { // surfaces paper: 'oklch(0.985 0.004 80)', // near-white with warm tint paperAlt: 'oklch(0.965 0.006 80)', // cards paperDeep: 'oklch(0.94 0.008 75)', // elevated, input bg ink: 'oklch(0.18 0.01 70)', // primary text inkSoft: 'oklch(0.42 0.01 70)', // secondary inkMute: 'oklch(0.62 0.008 70)', // tertiary/hint hairline: 'oklch(0.88 0.005 75)', // dividers hairlineStrong: 'oklch(0.78 0.006 75)', // accent (warm rose-copper, shared chroma/lightness) accent: 'oklch(0.62 0.14 30)', accentDeep: 'oklch(0.52 0.14 30)', accentSoft: 'oklch(0.94 0.04 30)', accentInk: 'oklch(0.32 0.1 30)', // semantic (muted — no jarring greens/reds) ok: 'oklch(0.58 0.12 155)', okSoft: 'oklch(0.94 0.04 155)', warn: 'oklch(0.7 0.14 85)', warnSoft: 'oklch(0.95 0.05 85)', danger: 'oklch(0.55 0.16 25)', dangerSoft: 'oklch(0.94 0.04 25)', // type serif: '"Instrument Serif", "Cormorant Garamond", Georgia, serif', sans: '"Inter", -apple-system, BlinkMacSystemFont, system-ui, sans-serif', mono: '"JetBrains Mono", "SF Mono", ui-monospace, monospace', // radii r1: '10px', r2: '16px', r3: '22px', r4: '28px', }; window.T = T; // Utility: muted striped placeholder (for product imagery) function PlaceholderTile({ label, w = '100%', h = 72, style = {}, tone = 'warm' }) { const stripes = tone === 'warm' ? 'repeating-linear-gradient(135deg, oklch(0.92 0.02 30) 0 6px, oklch(0.94 0.015 30) 6px 12px)' : 'repeating-linear-gradient(135deg, oklch(0.92 0.005 75) 0 6px, oklch(0.94 0.005 75) 6px 12px)'; return (
{label && ( {label} )}
); } // Small line icon system (stroke-based, 20px default) function Icon({ name, size = 20, color = 'currentColor', strokeWidth = 1.5, style = {} }) { const props = { width: size, height: size, viewBox: '0 0 24 24', fill: 'none', stroke: color, strokeWidth, strokeLinecap: 'round', strokeLinejoin: 'round', style, }; const paths = { plus: <>, search: <>, scan: <>, check: <>, close: <>, chevronR: <>, chevronL: <>, chevronD: <>, arrowR: <>, arrowUpR: <>, edit: <>, trash: <>, clock: <>, bag: <>, user: <>, pin: <>, phone: <>, send: <>, wa: <>, doc: <>, filter: <>, sparkle: <>, trending: <>, bolt: <>, home: <>, list: <>, plusCircle: <>, minus: <>, star: <>, info: <>, barcode: <>, camera: <>, book: <>, }; return {paths[name] || null}; } window.PlaceholderTile = PlaceholderTile; window.Icon = Icon;