/* Visual mockups: NFC cards, Phones, QR codes */ const { useEffect: mUseEffect, useState: mUseState, useRef: mUseRef } = React; // ----- NFC Card ----- // material: matte | metal | glass | white | wood function NFCCard({ material = 'matte', name = 'COLLINS S. WONDER', role = 'Head of Design · ZenTag', mono = false, className = '', style = {}, sheen = true }) { const materials = { matte: { bg: 'linear-gradient(135deg, #18181c 0%, #0a0a0d 60%, #1d1d24 100%)', border: '1px solid rgba(255,255,255,0.08)', logoColor: '#fff', subColor: '#86868b', accent: 'var(--accent)', }, metal: { bg: 'linear-gradient(135deg, #d8dce4 0%, #8a8f9a 25%, #f0f1f4 50%, #6b6f78 80%, #c2c6cf 100%)', border: '1px solid rgba(255,255,255,0.4)', logoColor: '#0a0a0d', subColor: '#2d2d35', accent: '#0a0a0d', }, glass: { bg: 'linear-gradient(135deg, rgba(140,160,200,0.35) 0%, rgba(80,90,120,0.18) 50%, rgba(180,200,240,0.30) 100%)', border: '1px solid rgba(255,255,255,0.35)', logoColor: '#fff', subColor: 'rgba(255,255,255,0.7)', accent: '#fff', }, white: { bg: 'linear-gradient(160deg, #ffffff 0%, #ececef 100%)', border: '1px solid rgba(0,0,0,0.06)', logoColor: '#0a0a0d', subColor: '#5a5a62', accent: 'var(--accent)', }, wood: { bg: 'linear-gradient(135deg, #5a3a22 0%, #3a2412 40%, #6b4424 80%, #4a2e18 100%)', border: '1px solid rgba(120,80,40,0.5)', logoColor: '#e7d4b8', subColor: '#b89a72', accent: '#e7d4b8', }, }; const m = materials[material] || materials.matte; const woodGrain = material === 'wood' ? (
) : null; const metalSheen = material === 'metal' ? (
) : null; const glassHi = material === 'glass' ? (
) : null; return (
{woodGrain} {metalSheen} {glassHi} {/* Chip */}
{/* NFC wave */}
{/* Brand mark */}
ZENTAG · NFC
{name}
{role}
{/* mini logo */}
{/* Subtle radial */}
); } // ----- Phone Frame ----- function PhoneFrame({ children, className = '', style = {}, brand = 'iphone' }) { return (
{/* Dynamic island */}
{children}
); } // ----- Profile screen inside phone ----- function ProfileScreen({ compact = false }) { return (
{/* Status bar */}
9:41 5G
{/* Cover gradient */}
{/* Avatar */}
CW
{/* Content */}
Collins S. Wonder
Head of Design · ZenTag
Pokuase, Accra
{/* Quick actions */}
{['Save', 'Call', 'Email'].map((l, i) => (
{l}
))}
{/* Social grid */}
{SocialList.slice(0,5).map(({ name, Comp }) => (
))}
{/* Featured links */} {!compact && (
collinswonder.design
Portfolio · 12 projects
Book a 30-min call
Next slot · Today 4:30 PM
)}
{/* Bottom indicator */}
); } // ----- QR Code (procedural-looking) ----- function QRCode({ size = 180, accentDots = true, brand = true }) { // Pseudo-stable random pattern based on coord parity const cells = 21; const pattern = mUseRef(null); if (!pattern.current) { const seed = (x, y) => ((x * 374761393 + y * 668265263) >>> 0) % 1000; const m = []; for (let y = 0; y < cells; y++) { const row = []; for (let x = 0; x < cells; x++) { row.push(seed(x, y) > 540 ? 1 : 0); } m.push(row); } pattern.current = m; } const m = pattern.current; const cs = size / cells; // Reserve corners for finder patterns const isFinder = (x, y) => ( (x < 7 && y < 7) || (x >= cells - 7 && y < 7) || (x < 7 && y >= cells - 7) ); // Reserve center for logo const isCenter = (x, y) => Math.abs(x - cells/2) < 3 && Math.abs(y - cells/2) < 3; return (
{/* cells */} {m.map((row, y) => row.map((v, x) => { if (!v || isFinder(x,y) || isCenter(x,y)) return null; const r = cs * 0.42; return ; }))} {/* finder patterns */} {[[0,0],[cells-7,0],[0,cells-7]].map(([fx,fy], i) => ( ))} {/* center logo */} {brand && (
)}
); } Object.assign(window, { NFCCard, PhoneFrame, ProfileScreen, QRCode });