/* 95 Forward — Initiatives (funding priorities; lean: list + detail) and the 95 Forward settings page (the editable QPI weights — the score is ours). */ const IN = window.Ds95ForwardDesignSystem_31a0c4 || {}; const fmtK = n => n >= 1000000 ? "$" + (n / 1000000).toFixed(n % 1000000 ? 1 : 0) + "M" : "$" + Math.round(n / 1000) + "K"; /* ============================ INITIATIVES LIST ============================ */ function Initiatives({ go }) { const D = window.POC_DATA; const { Icon, Eyebrow } = window.POC; const { Tag, Button, HorizonTag } = IN; const [frame, setFrame] = React.useState("all"); const rows = D.initiatives.filter(i => frame === "all" || i.frame === frame); return (
{[["all", "All", null], ["today", "Today", "var(--horizon-today)"], ["tomorrow", "Tomorrow", "var(--horizon-tomorrow)"], ["forever", "Forever", "var(--horizon-forever)"]].map(([id, l, c]) => ( setFrame(id)}>{l} ))}
{rows.map(i => { const pct = Math.round(i.raised / i.goal * 100); const col = { today: "var(--horizon-today)", tomorrow: "var(--horizon-tomorrow)", forever: "var(--horizon-forever)" }[i.frame]; return (
go("initiative", { id: i.id })} style={{ padding: 20, borderRadius: "var(--radius-lg)", background: "var(--surface-card)", border: "1px solid var(--border-hairline)", borderLeft: "3px solid " + col, cursor: "pointer", transition: "box-shadow var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out)", }} onMouseEnter={e => { e.currentTarget.style.boxShadow = "var(--shadow-md)"; e.currentTarget.style.transform = "translateY(-1px)"; }} onMouseLeave={e => { e.currentTarget.style.boxShadow = "none"; e.currentTarget.style.transform = "none"; }}>
{i.name}
{i.timeline} · {i.openAsks} open asks
{fmtK(i.raised)}
of {fmtK(i.goal)} goal
); })}
); } /* ============================ INITIATIVE DETAIL ============================ */ function InitiativeDetail({ params, go }) { const D = window.POC_DATA; const { Icon, Eyebrow } = window.POC; const { Card, HorizonTag, Button, Badge } = IN; const i = D.initiatives.find(x => x.id === (params && params.id)) || D.initiatives[0]; const col = { today: "var(--horizon-today)", tomorrow: "var(--horizon-tomorrow)", forever: "var(--horizon-forever)" }[i.frame]; const pct = Math.round(i.raised / i.goal * 100); const cPct = Math.round(i.committed / i.goal * 100); const rPct = Math.round(i.roadmap / i.goal * 100); const prospects = i.prospects.map(id => D.prospects.find(p => p.id === id)); const outcomeTone = { Commitment: "success", Roadmap: "info", Decline: "neutral" }; return (
{/* Header */}

{i.name}

{i.timeline}
{/* Progress */}
{fmtK(i.raised)} raised of {fmtK(i.goal)} goal · {pct}%
{[["Raised", fmtK(i.raised), col], ["Committed", fmtK(i.committed), col], ["In roadmap", fmtK(i.roadmap), "var(--ink-300)"]].map(([l, v, c], idx) => (
{l} {v}
))}
{/* The story */} The story

{i.story}

{/* copilot funding rationale */}
Copilot · funding rationale
{i.widget}
{/* Prospects & asks */}
Prospects & asks on this initiative
{prospects.map(p => ( go("prospect", { id: p.id })}> ))}
ProspectQPIRMAskOutcome
{p.name} = 90 ? "var(--gold-600)" : p.qpi >= 70 ? "var(--blue-600)" : "var(--sage-600)" }}>{p.qpi} {p.manager} {p.id === "p1" ? "$250K" : p.id === "p6" ? "$25K" : "—"} {p.id === "p1" ? Roadmap : In cultivation}
); } /* ============================ 95 FORWARD SETTINGS ============================ */ function F95Settings({ go }) { const D = window.POC_DATA; const { Icon, Eyebrow } = window.POC; const { Card } = IN; const [weights, setWeights] = React.useState(D.qpiWeights.map(w => w.weight)); const [toggles, setToggles] = React.useState({ research: true, autoscore: true, drafts: true }); const total = weights.reduce((a, b) => a + b, 0); const Toggle = ({ on, onClick }) => ( ); return (
QPI weights Points sum to {total * 5} / 100

Each prospect is rated 1–5 on five dimensions; the rating is multiplied by the dimension's weight. This is what makes the score ours to tune — and explainable, not a black box.

{D.qpiWeights.map((w, idx) => (
{w.label}
{w.note}
{weights[idx]}
max {weights[idx] * 5}
))}
Copilot behavior
{[["research", "Let the copilot research public sources", "990-PF filings, board rosters, press — always shown with provenance."], ["autoscore", "Propose QPI updates automatically", "New evidence proposes a score change. You always approve before it applies."], ["drafts", "Draft 24-hour follow-ups after visits", "A ready-to-edit follow-up the moment you log a debrief."]].map(([k, l, d], idx) => (
{l}
{d}
setToggles(t => ({ ...t, [k]: !t[k] }))} />
))}
The copilot only researches public sources, and every grounded fact carries a citation. Nothing is applied to a record without your approval. Discovery candidates stay off the ranked list until a human and the connector validate them.
); } window.POC = Object.assign(window.POC || {}, { Initiatives, InitiativeDetail, F95Settings });