// Shared layout: theme system, nav, footer, cursor, tweaks defaults const { useState: useStateS, useEffect: useEffectS, useRef: useRefS } = React; const FONT_PRESETS = { bricolage: { display: "'Bricolage Grotesque', sans-serif", serif: "'Fraunces', serif", body: "'Inter', sans-serif" }, spaceGrotesk: { display: "'Space Grotesk', sans-serif", serif: "'Fraunces', serif", body: "'Inter', sans-serif" }, interTight: { display: "'Inter Tight', sans-serif", serif: "'Fraunces', serif", body: "'Inter', sans-serif" }, }; const SHARED_DEFAULTS = { orange: "#EA6A1F", darkMode: true, fontPreset: "bricolage", density: "regular", }; function adjustHex(hex, amount) { const m = hex.replace('#', ''); const num = parseInt(m, 16); let r = Math.max(0, Math.min(255, (num >> 16) + amount)); let g = Math.max(0, Math.min(255, ((num >> 8) & 0xff) + amount)); let b = Math.max(0, Math.min(255, (num & 0xff) + amount)); return '#' + ((r << 16) | (g << 8) | b).toString(16).padStart(6, '0'); } function useTheme(t) { const orange = t.orange; const orangeBright = adjustHex(orange, 20); const fonts = FONT_PRESETS[t.fontPreset] || FONT_PRESETS.bricolage; const dark = t.darkMode; const c = dark ? { bg: '#0A0908', bgAlt: '#13110F', fg: '#F5F2EC', muted: '#9A958A', line: '#26211C', glassBg: 'rgba(255,255,255,0.03)', } : { bg: '#FAF8F3', bgAlt: '#F1ECE0', fg: '#171411', muted: '#6E6859', line: '#DDD5C4', glassBg: 'rgba(255,255,255,0.6)', }; const glow = `${orange}33`; const dens = t.density === 'compact' ? 0.75 : t.density === 'comfy' ? 1.2 : 1; return { orange, orangeBright, fonts, dark, c, glow, dens, pad: (px) => Math.round(px * dens) }; } function ThemeStyles({ theme }) { const { c, orange, orangeBright, fonts, glow } = theme; const css = ` .vc-root { background: ${c.bg}; color: ${c.fg}; font-family: ${fonts.body}; min-height: 100%; transition: background .4s, color .4s; } .vc-display { font-family: ${fonts.display}; letter-spacing: -0.03em; font-weight: 700; } .vc-serif { font-family: ${fonts.serif}; } .vc-mono { font-family: 'JetBrains Mono', ui-monospace, monospace; } .vc-eyebrow { font-size: 11px; letter-spacing: 0.28em; text-transform: uppercase; font-weight: 600; } .vc-eyebrow-line { display: inline-flex; align-items: center; gap: 14px; } .vc-eyebrow-line::before { content: ''; width: 32px; height: 1px; background: ${orange}; } .vc-btn-p { background: ${orange}; color: #fff; padding: 16px 32px; font-weight: 600; font-size: 13px; letter-spacing: 0.08em; text-transform: uppercase; border: none; cursor: none; transition: all .25s; display: inline-flex; align-items: center; gap: 12px; border-radius: 999px; font-family: ${fonts.body}; } .vc-btn-p:hover { background: ${orangeBright}; box-shadow: 0 12px 32px ${glow}; transform: translateY(-2px); } .vc-btn-g { background: ${c.glassBg}; color: ${c.fg}; padding: 16px 32px; font-weight: 600; font-size: 13px; letter-spacing: 0.08em; text-transform: uppercase; border: 1px solid ${c.line}; cursor: none; transition: all .25s; display: inline-flex; align-items: center; gap: 12px; border-radius: 999px; backdrop-filter: blur(12px); font-family: ${fonts.body}; } .vc-btn-g:hover { border-color: ${orange}; color: ${orange}; } .vc-nav-link { position: relative; transition: color .2s ease; } .vc-nav-link::after { content: ''; position: absolute; left: 0; right: 0; bottom: -6px; height: 1px; background: ${orange}; transform: scaleX(0); transform-origin: center; transition: transform .25s ease; } .vc-nav-link:hover { color: ${orange} !important; } .vc-nav-link:hover::after { transform: scaleX(1); } .vc-nav-link.is-active::after { transform: scaleX(1); } .vc-footer-link { cursor: pointer !important; transition: color .2s ease, text-decoration-color .2s ease, transform .2s ease; text-decoration: underline; text-decoration-color: transparent; text-underline-offset: 5px; } .vc-footer-link:hover { color: ${orange} !important; text-decoration-color: ${orange}; transform: translateX(3px); } .vc-contact-link { cursor: pointer !important; transition: color .2s ease, text-decoration-color .2s ease; text-decoration: underline; text-decoration-color: transparent; text-underline-offset: 5px; } .vc-contact-link:hover { color: ${orange} !important; text-decoration-color: ${orange}; } /* RESPONSIVE — Tablet (≤1024px) */ @media (max-width: 1024px) { .vc-root section { padding-left: 32px !important; padding-right: 32px !important; } .vc-root h1, .vc-root h2 { font-size: clamp(40px, 8vw, 96px) !important; line-height: 0.95 !important; } .vc-root h3 { font-size: clamp(28px, 5vw, 56px) !important; } .vc-root [style*="grid-template-columns: 1fr 1fr"], .vc-root [style*="grid-template-columns: repeat(2"] { grid-template-columns: 1fr !important; } .vc-root [style*="grid-template-columns: repeat(3"] { grid-template-columns: repeat(2, 1fr) !important; } .vc-root [style*="grid-template-columns: repeat(4"] { grid-template-columns: repeat(2, 1fr) !important; } .vc-root [style*="grid-template-columns: 2fr 1fr 1fr 1fr"] { grid-template-columns: 1fr 1fr !important; } .vc-root [style*="grid-template-columns: 1fr 480px"], .vc-root [style*="grid-template-columns: 440px 1fr"], .vc-root [style*="grid-template-columns: 1.1fr 1fr"] { grid-template-columns: 1fr !important; gap: 32px !important; } .vc-root [style*="grid-template-columns: 120px 200px 1fr"] { grid-template-columns: 80px 1fr !important; gap: 16px !important; } .vc-root [style*="grid-template-columns: 180px 1fr 2fr"] { grid-template-columns: 120px 1fr !important; gap: 16px !important; } .vc-root header { padding: 0 16px !important; } .vc-root header > div { padding: 10px 16px !important; gap: 12px !important; } .vc-root nav { display: none !important; } .vc-root .vc-glass[style*="padding: 48"], .vc-root .vc-glass[style*="padding: 56"] { padding: 32px !important; } .vc-cursor { display: none !important; } a, button, body { cursor: auto !important; } .vc-mobile-toggle { display: inline-flex !important; align-items: center; justify-content: center; } .vc-hide-mobile { display: none !important; } } /* RESPONSIVE — Mobile (≤640px) */ @media (max-width: 640px) { .vc-root section { padding-left: 20px !important; padding-right: 20px !important; padding-top: 64px !important; padding-bottom: 64px !important; } .vc-root h1 { font-size: clamp(48px, 14vw, 80px) !important; } .vc-root h2 { font-size: clamp(36px, 9vw, 56px) !important; } .vc-root h3 { font-size: clamp(24px, 6vw, 36px) !important; } .vc-root [style*="grid-template-columns: repeat(3"], .vc-root [style*="grid-template-columns: repeat(4"], .vc-root [style*="grid-template-columns: 2fr 1fr 1fr 1fr"], .vc-root [style*="grid-template-columns: 1fr 1fr"] { grid-template-columns: 1fr !important; } .vc-root [style*="grid-template-columns: 120px 200px 1fr"], .vc-root [style*="grid-template-columns: 180px 1fr 2fr"] { grid-template-columns: 1fr !important; gap: 8px !important; } .vc-root header > div { padding: 8px 12px !important; } .vc-root header [style*="font-size: 22px"] { font-size: 16px !important; } .vc-root .vc-glass { padding: 20px !important; border-radius: 16px !important; } .vc-root .vc-btn-p, .vc-root .vc-btn-g { padding: 12px 20px !important; font-size: 11px !important; } .vc-root [style*="display: flex"][style*="gap: 16"] { flex-wrap: wrap; } .vc-root footer { padding: 32px 20px !important; } .vc-root footer [style*="grid-template-columns: 2fr 1fr 1fr 1fr"] { grid-template-columns: 1fr 1fr !important; gap: 24px !important; } .vc-root footer [style*="justify-content: space-between"] { flex-direction: column; gap: 8px; align-items: flex-start; } } .vc-glass { background: ${c.glassBg}; border: 1px solid ${c.line}; backdrop-filter: blur(20px); border-radius: 24px; transition: all .35s; } .vc-card-hover:hover { border-color: ${orange}; transform: translateY(-4px); box-shadow: 0 20px 40px ${glow}; } .vc-fade { opacity: 0; transform: translateY(28px); transition: opacity .9s ease, transform .9s ease; } .vc-fade.in { opacity: 1; transform: translateY(0); } a, button { cursor: none; } body { cursor: none; } .vc-cursor { position: fixed; top:0; left:0; width: 24px; height: 24px; border: 1px solid ${orange}; border-radius: 50%; pointer-events: none; z-index: 9999; mix-blend-mode: difference; transition: width .2s, height .2s; } .vc-cursor::after { content:''; position:absolute; inset: 9px; background: ${orange}; border-radius: 50%; } `; return ; } function Cursor() { const ref = useRefS(null); useEffectS(() => { const el = ref.current; if (!el) return; const move = (e) => { el.style.transform = `translate(${e.clientX - 12}px, ${e.clientY - 12}px)`; }; window.addEventListener('mousemove', move); return () => window.removeEventListener('mousemove', move); }, []); return
; } function ScrollReveal() { useEffectS(() => { const obs = new IntersectionObserver((entries) => { entries.forEach((e) => { if (e.isIntersecting) e.target.classList.add('in'); }); }, { threshold: 0.12 }); document.querySelectorAll('.vc-fade').forEach((el) => obs.observe(el)); return () => obs.disconnect(); }, []); return null; } function NavBar({ active, theme, dark, setDark }) { const { c, orange, fonts, glow } = theme; const [open, setOpen] = useStateS(false); const links = [ { l: 'Home', href: '/' }, { l: 'PS3', href: 'PS3.html' }, { l: 'HOGC DNA', href: 'HOGC DNA.html' }, { l: 'United', href: 'United.html' }, { l: 'YMC-D', href: 'YMC-D.html' }, { l: 'Founder', href: 'Founder.html' }, ]; return ({subtitle}
} {meta && (