// ===================================================================== // HOMEPAGE LAYOUT VARIATIONS — flat / professional C1 (navy + red) // Shared nav + lower modules; each layout swaps the hero + top // arrangement. All use the same image-slot ids as home.html so one // dropped photo set fills every variation. // ===================================================================== const hv = { root: { background:'var(--bb-field)', color:'var(--bb-ink)', fontFamily:"'Inter Tight', sans-serif", width:'100%' }, // nav nav: { position:'sticky', top:0, zIndex:30, background:'var(--bb-navy)' }, navInner: { maxWidth:1200, margin:'0 auto', height:70, display:'flex', alignItems:'center', gap:24, padding:'0 40px' }, navLinks: { display:'flex', gap:22, marginLeft:'auto', marginRight:20, whiteSpace:'nowrap', flexShrink:0 }, navLink: { fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:700, fontSize:15, color:'rgba(255,255,255,0.8)', textTransform:'uppercase', letterSpacing:'0.04em', cursor:'pointer' }, navCta: { background:'var(--bb-red)', color:'#fff', border:0, height:40, padding:'0 22px', borderRadius:6, fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:900, fontSize:15, letterSpacing:'0.05em', textTransform:'uppercase', cursor:'pointer', flexShrink:0 }, // shared buttons btnRed: { background:'var(--bb-red)', color:'#fff', border:0, height:52, padding:'0 28px', borderRadius:8, fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:800, fontSize:17, letterSpacing:'0.05em', textTransform:'uppercase', cursor:'pointer' }, btnGhostLight: { background:'transparent', color:'#fff', border:'1.5px solid rgba(255,255,255,0.4)', height:52, padding:'0 28px', borderRadius:8, fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:800, fontSize:17, letterSpacing:'0.05em', textTransform:'uppercase', cursor:'pointer' }, btnNavyOutline: { background:'transparent', color:'var(--bb-navy)', border:'1.5px solid var(--bb-navy)', height:46, padding:'0 22px', borderRadius:8, fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:800, fontSize:14, letterSpacing:'0.05em', textTransform:'uppercase', cursor:'pointer', whiteSpace:'nowrap' }, eyebrow: { fontFamily:"'JetBrains Mono', monospace", fontSize:13, letterSpacing:'0.2em', textTransform:'uppercase', color:'var(--bb-red)' }, // kpi kpiBand: { maxWidth:1200, margin:'0 auto', display:'grid', gridTemplateColumns:'repeat(4,1fr)', borderTop:'3px solid var(--bb-navy)', borderBottom:'1px solid var(--border-1)' }, kpiCell: { padding:'30px 16px', textAlign:'center', borderRight:'1px solid var(--border-1)' }, kpiVal: { fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:900, fontSize:52, lineHeight:1, color:'var(--bb-navy)' }, kpiLbl: { fontFamily:"'JetBrains Mono', monospace", fontSize:12, letterSpacing:'0.14em', textTransform:'uppercase', color:'var(--fg-3)', marginTop:8 }, // section frame section: { maxWidth:1200, margin:'0 auto', padding:'80px 40px' }, sectionHd: { display:'flex', justifyContent:'space-between', alignItems:'flex-end', marginBottom:36 }, sectionTitle: { fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:900, fontSize:54, lineHeight:0.9, textTransform:'uppercase', color:'var(--bb-navy)', margin:'8px 0 0' }, // next game strip gameStrip: { display:'flex', alignItems:'center', gap:30, background:'#fff', border:'1px solid var(--border-1)', borderRadius:12, padding:'26px 32px', boxShadow:'var(--shadow-sm)' }, gameDate: { textAlign:'center', flexShrink:0, width:86, borderRight:'1px solid var(--border-1)', paddingRight:24 }, gameDay: { fontFamily:"'JetBrains Mono', monospace", fontSize:12, letterSpacing:'0.14em', color:'var(--bb-red)' }, gameDateBig: { fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:900, fontSize:60, lineHeight:0.9, color:'var(--bb-navy)' }, gameMon: { fontFamily:"'JetBrains Mono', monospace", fontSize:12, letterSpacing:'0.14em', textTransform:'uppercase', color:'var(--fg-3)' }, gameMatch: { fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:800, fontSize:32, textTransform:'uppercase', color:'var(--bb-navy)', lineHeight:1, flex:1 }, gameVs: { color:'var(--bb-red)', margin:'0 8px' }, gameField: { fontSize:14, color:'var(--fg-2)', marginTop:8, fontFamily:"'Inter Tight', sans-serif" }, // teams teamsGrid: { display:'grid', gridTemplateColumns:'repeat(4,1fr)', gap:18 }, teamCard: { background:'#fff', border:'1px solid var(--border-1)', borderRadius:10, overflow:'hidden', boxShadow:'var(--shadow-sm)' }, teamBar: { height:8 }, teamBody: { padding:'20px 22px 24px' }, teamAge: { fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:900, fontSize:48, lineHeight:0.9, color:'var(--bb-navy)' }, teamColor: { fontFamily:"'JetBrains Mono', monospace", fontSize:12, letterSpacing:'0.14em', textTransform:'uppercase', color:'var(--fg-3)', marginTop:2 }, teamCoach: { fontSize:16, fontWeight:700, color:'var(--bb-navy)', marginTop:14 }, teamRec: { fontFamily:"'JetBrains Mono', monospace", fontSize:14, color:'var(--bb-red)', marginTop:4 }, // cooperstown band coop: { background:'var(--bb-red)', color:'#fff' }, coopInner: { maxWidth:1200, margin:'0 auto', padding:'72px 40px', display:'grid', gridTemplateColumns:'1.1fr 0.9fr', gap:52, alignItems:'center' }, coopTitle: { fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:900, fontSize:64, lineHeight:0.86, textTransform:'uppercase', margin:'14px 0 18px', color:'#fff' }, coopLead: { fontSize:18, lineHeight:1.6, color:'rgba(255,255,255,0.92)', maxWidth:500, margin:'0 0 26px' }, coopBarHd: { display:'flex', justifyContent:'space-between', fontFamily:"'JetBrains Mono', monospace", fontSize:14, letterSpacing:'0.06em', marginBottom:10 }, coopBar: { height:12, borderRadius:6, background:'rgba(0,0,0,0.22)', overflow:'hidden', marginBottom:28 }, coopBarFill: { height:'100%', background:'#fff', borderRadius:6 }, coopBtn: { background:'#fff', color:'var(--bb-navy)', border:0, height:52, padding:'0 30px', borderRadius:8, fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:800, fontSize:16, letterSpacing:'0.05em', textTransform:'uppercase', cursor:'pointer' }, coopPhoto: { height:340, borderRadius:10, overflow:'hidden', border:'1px solid rgba(255,255,255,0.4)' }, // news newsGrid: { display:'grid', gridTemplateColumns:'repeat(3,1fr)', gap:22 }, newsCard: { background:'#fff', border:'1px solid var(--border-1)', borderRadius:10, overflow:'hidden', boxShadow:'var(--shadow-sm)' }, newsBody: { padding:'20px 22px 26px' }, newsMeta: { fontFamily:"'JetBrains Mono', monospace", fontSize:12, letterSpacing:'0.1em', textTransform:'uppercase', color:'var(--fg-3)', marginBottom:10 }, newsTitle: { fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:800, fontSize:26, lineHeight:0.98, textTransform:'uppercase', color:'var(--bb-navy)', margin:'0 0 10px' }, newsExcerpt: { fontSize:15, lineHeight:1.6, color:'var(--fg-2)', margin:0 }, // brand bar brandBar: { background:'#fff', borderTop:'3px solid var(--bb-navy)', borderBottom:'1px solid var(--border-1)', display:'flex', alignItems:'center', justifyContent:'center', gap:40, padding:'48px 40px', flexWrap:'wrap' }, // footer footer: { background:'var(--bb-navy)', color:'#fff' }, footTop: { maxWidth:1200, margin:'0 auto', padding:'60px 40px 44px', display:'flex', justifyContent:'space-between', gap:48, flexWrap:'wrap' }, footBlurb: { fontSize:15, lineHeight:1.7, color:'rgba(255,255,255,0.6)', marginTop:18, maxWidth:300 }, footCols: { display:'flex', gap:56 }, footColHd: { fontFamily:"'Big Shoulders Display', sans-serif", fontWeight:800, fontSize:15, letterSpacing:'0.1em', textTransform:'uppercase', color:'var(--bb-red-bright)', marginBottom:16 }, footLink: { display:'block', fontSize:15, color:'rgba(255,255,255,0.82)', marginBottom:10, cursor:'pointer' }, footBar: { borderTop:'1px solid rgba(255,255,255,0.1)', padding:'22px 40px', textAlign:'center', fontFamily:"'JetBrains Mono', monospace", fontSize:12, letterSpacing:'0.1em', color:'rgba(255,255,255,0.4)' }, }; // ---------- routing helpers (no-op outside the router in pages.html) ---------- function goTo(r) { if (typeof window !== 'undefined' && window.bbGo) window.bbGo(r); } const NAV_ITEMS = [['Teams','teams'],['Roster','roster'],['News','news'],['Cooperstown','cooperstown'],['Links','links'],['About','about']]; const FOOT_LINKS = { 'About':'about','History':'history','FAQ':'faq','Teams':'teams','Tryouts':'tryouts','Coaches':'about','Schedule':'schedule','Roster':'roster','Stats':'roster','News':'news','Shop':'shop','Sponsors':'cooperstown','Contact':'contact' }; // ---------- shared blocks ---------- function BNav() { const active = (typeof window !== 'undefined' && window.bbActive) || null; return (
goTo('home')}> Belmont Blasters Belmont
Blasters
); } function KPIStrip({ kpis }) { return (
{kpis.map((k,i)=>(
{k.value}
{k.label}
))}
); } function NextGameStrip({ next }) { return (
Next Up

Gameday

{next.day}
{next.date.split(' ')[1]}
{next.date.split(' ')[0]}
Blasters 12U vs {next.opponent}
{next.home?'Home':'Away'} · {next.time} · {next.field}
); } function TeamsBlock({ teams }) { return (
2026 Squads

Our Teams

{teams.map((tm,i)=>(
{ window.__rosterAge = tm.age; goTo('roster'); }}>
{tm.age}
{tm.color==='red'?'Red Squad':'Blue Squad'}
Coach {tm.coach}
{tm.record}
View Roster →
))}
); } function CoopBand({ coop }) { return (
★ Cooperstown 2026

Send 'Em
to the Park.

The 12U squad is headed to Cooperstown Dreams Park. Every dollar helps cover travel, lodging, and entry.

{coop.raised} of {coop.goal}{coop.days} days left
); } function NewsBlock({ news }) { return (
From the Dugout

Latest News

{news.map((n,i)=>(
{ if(n.slug){ location.href = 'article.html?slug=' + n.slug; } else { goTo('news'); } }}>
{n.cat} · {n.date}

{n.title}

{n.excerpt}

))}
); } function BrandBar() { return (
Belmont Blasters Baseball
); } function FooterBlock() { return ( ); } function Lower({ data }) { return (<>); } // ===================================================================== // LAYOUT 2 — "SPLIT": navy text panel + photo, inline stats, game strip // ===================================================================== const HomeSplit = ({ data }) => (
2026 Travel Season · 7U–12U

Built in
Belmont.

A youth travel program built on hard work, team-first baseball, and the road to Cooperstown.

g.status==='upcoming')||data.games[0]} />
); // ===================================================================== // LAYOUT 3 — "OVERLAY": full-bleed hero, overlapping quick-link cards // ===================================================================== const HomeOverlay = ({ data }) => { const next = data.games.find(g=>g.status==='upcoming')||data.games[0]; const links = [ { k:'Tryouts', t:'Register 2026', d:'8U–11U · Aug 17', tone:'red' }, { k:'Schedule', t:'Games & Results', d:'Summer season', tone:'navy' }, { k:'Shop', t:'Team Store', d:'blasters.itemorder.com', tone:'navy' }, ]; return (
2026 Travel Season · 7U–12U

Built in
Belmont.

{/* overlapping quick links */}
{links.map((l,i)=>(
{l.k}
{l.t}
{l.d}
))}
); }; // ===================================================================== // LAYOUT 4 — "BENTO": compact hero band + modular card grid // ===================================================================== const HomeBento = ({ data }) => { const next = data.games.find(g=>g.status==='upcoming')||data.games[0]; return (
2026 Travel Season · 7U–12U

Built in Belmont.

{/* bento grid */}
{/* next game (large, navy) */}
Next Up · {next.home?'Home':'Away'}
{next.day} {next.date} · {next.time}
Blasters 12U
vs {next.opponent}
{/* cooperstown (red) */}
★ Cooperstown 2026
Send 'Em to the Park.
{data.coop.raised}of {data.coop.goal}
{/* kpi mini row */}
{data.kpis.map((k,i)=>(
{k.value}
{k.label}
))}
); }; // ---------- shared page header (interior pages) ---------- function PageHead({ eyebrow, title, sub }) { return (
{eyebrow}

{title}

{sub &&

{sub}

}
); } Object.assign(window, { HomeSplit, HomeOverlay, HomeBento, PageHead, BNav, FooterBlock, BrandBar, KPIStrip, TeamsBlock, NewsBlock, CoopBand, hv: hv });