{n.title}
{n.excerpt}
// =====================================================================
// 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 (
The 12U squad is headed to Cooperstown Dreams Park. Every dollar helps cover travel, lodging, and entry. {n.excerpt}
Belmont
Blasters
Gameday
Our Teams
Send 'Em
to the Park.Latest News
{n.title}
A youth travel program built on hard work, team-first baseball, and the road to Cooperstown.
{sub}
}