/* global React, Icon, StatusPill, Avatar, fmtAED */ const { useState } = React; /* ============================================================ DOCUMENTS LIST + BUILDER + PUBLIC VIEWER ============================================================ */ function Documents({ goto }) { const [filter, setFilter] = useState('all'); let docs = window.DOCUMENTS; if (filter !== 'all') docs = docs.filter(d => d.type === filter); return (
Sales

Documents

Proposals, pitch decks, recap decks
{['all','proposal','pitch','recap'].map(f => ( ))}
{docs.map(d => (
goto('document-builder', d.id)}>
{d.title.split('·')[1] || d.title}
{d.type}
{d.title}
{d.contact} · {d.slides} slides
))}
); } function DocumentBuilder({ docId, goto }) { const doc = window.DOCUMENTS.find(d => d.id === docId) || window.DOCUMENTS[0]; const [theme, setTheme] = useState(doc.theme); const [activeSlide, setActiveSlide] = useState(0); const [viewer, setViewer] = useState(false); const slides = [ { kind: 'cover', title: doc.title, sub: 'Linea Group · Q2 2026' }, { kind: 'agenda', items: ['Where you are now', 'What we see', 'How we fix it', 'Investment + timeline', 'Next step'] }, { kind: 'problem', headline: 'Your funnel leaks at 3 critical points.', body: 'Cold acquisition is fine. Conversion below 1.4%. Email follow-up at 0.' }, { kind: 'kpi', headline: 'What we delivered for clients like you.' }, { kind: 'pricing', headline: 'Investment.' }, { kind: 'cta', headline: 'Ready to start?' }, ]; const current = slides[activeSlide]; if (viewer) { return setViewer(false)} />; } const isDark = theme === 'linea-dark'; return (
{/* Slide thumbnails */}
Slides · {slides.length}
{slides.map((s, i) => (
setActiveSlide(i)} style={{ padding: 6, marginBottom: 6, cursor: 'pointer', border: '1px solid', borderColor: i === activeSlide ? 'var(--accent)' : 'var(--divider)', background: i === activeSlide ? 'var(--raised)' : 'transparent', display: 'flex', gap: 6, alignItems: 'center', }}>
{i+1}
{s.headline || s.title || s.kind}
))}
{/* Canvas */}
Slide {activeSlide + 1} / {slides.length}
{/* Properties + theme picker */}
Theme
{[ { id: 'linea-dark', label: 'Linea Dark', bg: '#0a0a0a', text: '#f5f5f5' }, { id: 'linea-light', label: 'Linea Light', bg: '#f4f4f4', text: '#0e0e0e' }, ].map(t => (
setTheme(t.id)} style={{ padding: 10, border: '1px solid', borderColor: theme === t.id ? 'var(--accent)' : 'var(--divider)', cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 10, background: theme === t.id ? 'var(--raised)' : 'transparent', }}>
{t.label}
))}
+ Client-Brand theme
Slide · {current.kind}
Type
Headline
{current.body && (
Body