import { useState } from "react"; const C = { navy: "#0D1B2A", navy2: "#0A1520", gold: "#B8945F", goldL: "#C9A96E", cream: "#FAF8F4", tx: "#2C3038", tm: "#6B7280", tf: "#9CA3AF", bd: "#E8E3DB", green: "#27AE60", lgreen: "#D5F5E3", red: "#A93226", lred: "#FADBD8", amber: "#B7770D", lamber: "#FDEBD0", teal: "#0E6655", lteal: "#D1F2EB", lnavy: "#D6EAF8", lgrey: "#F4F5F7", mgrey: "#CDD0D4", }; const styles = { wrap: { fontFamily: "'DM Sans', system-ui, sans-serif", background: C.cream, minHeight: "100vh", fontSize: 13 }, topbar: { background: C.navy, padding: "0 20px", display: "flex", alignItems: "center", gap: 16, height: 48, borderBottom: `2px solid ${C.gold}` }, topbrand: { color: C.gold, fontWeight: 700, fontSize: 11, letterSpacing: 4, textTransform: "uppercase" }, topsep: { color: "rgba(255,255,255,0.2)", fontSize: 16 }, topscreen: { color: "rgba(255,255,255,0.6)", fontSize: 11 }, sidebar: { width: 200, background: C.navy2, minHeight: "calc(100vh - 48px)", padding: "16px 0", flexShrink: 0 }, navitem: (active) => ({ padding: "8px 16px", cursor: "pointer", fontSize: 11, fontWeight: active ? 700 : 400, color: active ? C.gold : "rgba(255,255,255,0.5)", background: active ? "rgba(184,148,95,0.12)" : "transparent", borderLeft: active ? `3px solid ${C.gold}` : "3px solid transparent", display: "flex", alignItems: "center", gap: 8, transition: "all 0.15s" }), navcat: { padding: "16px 16px 6px", fontSize: 9, color: "rgba(255,255,255,0.25)", letterSpacing: 3, textTransform: "uppercase", fontWeight: 700 }, content: { flex: 1, padding: 24, overflow: "auto" }, card: { background: "white", borderRadius: 6, border: `1px solid ${C.bd}`, padding: 20, marginBottom: 16 }, cardTitle: { fontWeight: 700, color: C.navy, fontSize: 13, marginBottom: 4 }, cardSub: { color: C.tm, fontSize: 11, marginBottom: 16 }, label: { fontSize: 10, fontWeight: 700, color: C.tm, textTransform: "uppercase", letterSpacing: 1, marginBottom: 4, display: "block" }, input: { width: "100%", border: `1px solid ${C.bd}`, borderRadius: 4, padding: "8px 10px", fontSize: 12, color: C.tx, outline: "none", boxSizing: "border-box" }, btn: (v="primary") => ({ padding: "8px 16px", borderRadius: 4, border: "none", cursor: "pointer", fontWeight: 700, fontSize: 11, background: v==="primary" ? C.gold : v==="danger" ? C.red : v==="ghost" ? "transparent" : C.lgrey, color: v==="primary" ? "white" : v==="danger" ? "white" : v==="ghost" ? C.tm : C.navy, border: v==="ghost" ? `1px solid ${C.bd}` : "none" }), badge: (c="grey") => ({ display: "inline-block", padding: "2px 8px", borderRadius: 3, fontSize: 10, fontWeight: 700, background: c==="green" ? C.lgreen : c==="red" ? C.lred : c==="amber" ? C.lamber : c==="navy" ? C.lnavy : c==="teal" ? C.lteal : C.lgrey, color: c==="green" ? C.green : c==="red" ? C.red : c==="amber" ? C.amber : c==="navy" ? C.navy : c==="teal" ? C.teal : C.tm }), grade: (g) => ({ display: "inline-flex", alignItems: "center", justifyContent: "center", width: 28, height: 28, borderRadius: 4, fontWeight: 900, fontSize: 14, background: g==="A" ? C.lgreen : g==="B" ? C.lnavy : g==="C" ? C.lamber : g==="D" ? C.lred : C.lgrey, color: g==="A" ? C.green : g==="B" ? C.navy : g==="C" ? C.amber : g==="D" ? C.red : C.tm }), table: { width: "100%", borderCollapse: "collapse", fontSize: 11 }, th: { background: C.navy, color: C.goldL, padding: "6px 10px", textAlign: "left", fontSize: 10, fontWeight: 700, letterSpacing: 0.5 }, td: { padding: "7px 10px", borderBottom: `1px solid ${C.bd}`, verticalAlign: "top" }, row: (i) => ({ background: i%2===0 ? "white" : C.lgrey }), sla: (pct) => ({ height: 4, borderRadius: 2, background: pct > 75 ? C.red : pct > 50 ? C.amber : C.green, width: `${pct}%`, transition: "width 0.3s" }), slaTrack: { height: 4, borderRadius: 2, background: C.lgrey, width: "100%", overflow: "hidden", marginTop: 2 }, }; // ── SHARED COMPONENTS ──────────────────────────────────────────────────────── const GradeBlock = ({ block, grade, label }) => (
{grade}
{block}
{label}
); const Tag = ({ children, color }) => {children}; const Divider = () =>
; const SLABar = ({ pct, label }) => (
{label}75?C.red:pct>50?C.amber:C.green, fontWeight:700 }}>{pct}%
); // ── SCREEN 0 — BLIND SPOT PREVIEW ──────────────────────────────────────────── const Screen0 = () => (
The Unfinished

Get Your Portfolio Blind Spot Preview

Upload your CAMS CAS and we'll surface 3 key findings within 24 hours. Free. No commitment.

📎
portfolio_cas_march2026.pdf
✓ Valid PDF · 2.4 MB · Not password-protected
Click to replace
What you'll receive in 24 hours: One finding shown in full detail, two more as headlines to preview. Your overall portfolio band. A follow-up call from our lead evaluator.
No commissions. No products. Independent evaluation only.
⚠ This document is password-protected. Please upload an unencrypted version.
); // ── SCREEN 1 — CLIENT INTAKE PORTAL ───────────────────────────────────────── const Screen1 = () => { const [step, setStep] = useState(1); return (
ENGAGEMENT · TU-2026-MF-0047 · TIER 2
Comprehensive Portfolio Evaluation
Submission deadline
3 days remaining
{["Profile","Documents","Goals"].map((s,i) => (
setStep(i+1)} style={{ flex: 1, textAlign: "center", padding: "8px 4px", cursor: "pointer", borderBottom: step===i+1 ? `2px solid ${C.gold}` : "2px solid rgba(255,255,255,0.1)", color: step===i+1 ? C.gold : "rgba(255,255,255,0.4)", fontSize: 11, fontWeight: step===i+1 ? 700 : 400 }}> {i+1{s}
))}
{step===1 && (
Step 1 — Your Profile
Pre-filled from your registration. Please verify.
{[["Full Name","Priya Sharma"],["PAN Number","ABCPS1234P"],["Date of Birth","15 / 08 / 1981"],["Mobile","+91 98765 43210"],["Email","priya.sharma@email.com"],["City","Mumbai"]].map(([l,v]) => (
))}
)} {step===2 && (
Step 2 — Upload Documents
Documents required for Tier 2 — Comprehensive Evaluation
{[ { name: "CAMS CAS (Mutual Funds)", status: "validated", required: true, size: "2.4 MB" }, { name: "KFintech CAS (if applicable)", status: "not_uploaded", required: false }, { name: "Demat Statement (CDSL/NSDL)", status: "validated", required: false, size: "1.1 MB" }, { name: "Goal & Profile Questionnaire", status: "pending", required: true, note: "Complete in Step 3" }, ].map(doc => (
{doc.status==="validated"?"✅":doc.status==="pending"?"🔄":"📋"}
{doc.name} {doc.required && *}
{doc.status==="validated"?`Validated · ${doc.size}`:doc.status==="pending"?doc.note:"Not uploaded · Optional"}
{doc.status!=="pending" && }
))}
)} {step===3 && (
Step 3 — Goals & Profile
Required for Tier 2. All fields marked * are mandatory.
{[["Primary Goal *","Wealth Growth"],["Risk Tolerance *","Moderate"],["Retirement Age *","60"],["Current Age","43"],["Monthly Income Range *","₹5L – ₹10L"],["Monthly SIP Amount *","₹1,20,000"]].map(([l,v]) => (
))}
)}
); }; // ── SCREEN 2 — OPS VIEW ────────────────────────────────────────────────────── const Screen2 = () => (
{[["Total Active","14",C.navy],["Ready to Evaluate","3",C.green],["Data Incomplete","4",C.amber],["SLA Warning","2",C.red]].map(([l,v,c]) => (
{v}
{l}
))}
Active Submissions Pipeline
{["Engagement ID","Client / IFA","Tier","Status","SLA Remaining","Action"].map(h => )} {[ { id:"TU-2026-MF-0047", name:"Priya Sharma (Direct)", tier:"T2", status:"Ready to Evaluate", sla:62, slac:"green" }, { id:"TU-2026-MF-0048", name:"Arjun Capital / HDFC IFA", tier:"T3", status:"Ready to Evaluate", sla:88, slac:"red" }, { id:"TU-2026-MF-0045", name:"Mehta Family (Direct)", tier:"T3", status:"Data Incomplete", sla:0, slac:"grey" }, { id:"TU-2026-MF-0046", name:"Clarity Wealth / IFA", tier:"T1", status:"Awaiting Intake", sla:0, slac:"grey" }, { id:"TU-2026-MF-0044", name:"Sunita Rao (Direct)", tier:"T2", status:"Evaluation In Progress", sla:41, slac:"amber" }, ].map((r,i) => ( ))}
{h}
{r.id} {r.name} {r.tier} {r.status} {r.sla>0 ? <>
{r.sla}% elapsed
: Timer not started}
{r.status==="Ready to Evaluate" && } {r.status==="Data Incomplete" && } {r.status==="Awaiting Intake" && }
); // ── SCREEN 3 — EVALUATION CONSOLE ──────────────────────────────────────────── const Screen3 = () => { const [selected, setSelected] = useState("PS-07"); const factors = [ { id:"PS-01", name:"Asset Allocation", grade:"D", status:"evaluated" }, { id:"PS-02", name:"Equity-Debt-Gold", grade:"D", status:"evaluated" }, { id:"PS-03", name:"Market Cap Dist.", grade:"C", status:"evaluated" }, { id:"PS-05", name:"AMC Concentration", grade:"B", status:"evaluated" }, { id:"PS-07", name:"Single Fund Conc.", grade:"C", status:"evaluated", active:true }, { id:"CA-01", name:"Blended TER", grade:"A", status:"evaluated" }, { id:"CA-02", name:"Direct vs Regular", grade:"A", status:"evaluated" }, { id:"CA-06", name:"IDCW vs Growth", grade:"A", status:"evaluated" }, { id:"OR-01", name:"Folio Duplication", grade:"C", status:"evaluated" }, { id:"OR-03", name:"Unique Positions", grade:"C", status:"evaluated" }, { id:"GA-01", name:"Corpus Sufficiency", grade:null, status:"not_evaluated" }, { id:"IP-01", name:"Life Cover", grade:null, status:"not_evaluated" }, ]; return (
{/* Left: portfolio summary */}
Portfolio Summary
{[["Total AUM","₹89.1L"],["Schemes","21"],["Fund Houses","7"],["Direct Plans","99.9%"],["Debt %","0%"]].map(([l,v]) => (
{l}{v}
))}
Scope Coverage
10 / 55 factors
8 NE (missing docs)
{/* Centre: factor list */}
PS — Portfolio Structure
{factors.filter(f=>f.id.startsWith("PS")).map(f => (
setSelected(f.id)} style={{ display:"flex", gap:8, alignItems:"center", padding:"6px 8px", borderRadius:4, cursor:"pointer", background: selected===f.id ? C.lnavy : "transparent", marginBottom:2 }}>
{f.grade||"NE"}
{f.name}
))}
CA — Cost Architecture
{factors.filter(f=>f.id.startsWith("CA")).map(f => (
setSelected(f.id)} style={{ display:"flex", gap:8, alignItems:"center", padding:"6px 8px", borderRadius:4, cursor:"pointer", background: selected===f.id ? C.lnavy : "transparent", marginBottom:2 }}>
{f.grade}
{f.name}
))}
GA / IP — Not Evaluated
{factors.filter(f=>f.status==="not_evaluated").map(f => (
NE
{f.name}
))}
{/* Right: finding editor */}
PS-07 · Portfolio Structure
Single Fund Concentration Risk
C
Data inputs: SBI Small Cap Fund = ₹25.78L = 28.9% of total AUM. Threshold: 20%. Excess: 8.9 percentage points.
{["High","Medium","Low","Positive"].map(s => ( ))}