const { useState, useEffect, useRef, useCallback } = React;

const LOGO_URI = "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAQABgADASIAAhEBAxEB/8QAHQABAAEFAQEBAAAAAAAAAAAAAAYBAwQFBwIICf/EAGkQAAICAQMCAgQEDQ0JDAgEBwABAgMEBRESBiEHExQiMWEjQVF1CBUyN1VxlJWztLXT1BYzQlRWZXKRk5ax0dIXJCVGUmR2gZImNDU2Q0RFU2Z0obInYmODhaLBwxiChMVzo6SlwsTw/8QAGwEBAAIDAQEAAAAAAAAAAAAAAAMFAgQGAQf/xAA5EQEAAgECAgUKBgMAAgMBAAAAAQIDBBEFEhMhMVFxFBUiMkFSgaGx0QYjM2GRwULh8BYkNFNy8f/aAAwDAQACEQMRAD8A+MgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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pxW/ihd+CmdFlb7zm3Rba6kxmv8AIt/ByJ47DpeC22w28f6hRcUrvljwbHSp76xgr/Oqv/PE4ydd0az/AA3p/wD3un/zxORGtxud7U+P9Njhddq2+AACjWodwrnx8NPD9fvPlflLLOHnabZcfDfw++Zsr8p5ZZcJnbUx4S0eIxvglZjZ3Mqp48dN1PUcy+2rF07GjkWumlWTkpXVVJRjKUVvvbFvdrsn9o1SsMnIny6E60W//RFP5RwzotXmtjxWtXtiFJp8MXy1rPY176v6Q/buufemr9JH6sOkv27rn3rq/STlwOc866r3vlC783afudQ/Vf0l+3db+9VX6Sev1YdI/t7XfvTV+knLQPOuq975QebtP3OoPq/pL4s3W/vVV+khdX9I/Hna596av0k5eB511XvfKDzdp+50/wDVd0j+3tcf/wAJq/SSsOr+kd1yztcS92k1fpJy8Dzrqve+UPfN2n7m76/1bF17rvqDXcGF0MXUdTycuiN0UrFCy2U4qSTaUtmt9m1v8bNIAVzdAABuemOpNS6euk8F1ui62qeVROLUcqFcuXk2Si1PypPblBSSk4xb7wi49Gp1nRdZtyMjQIZdOPDhKeNlOMraOSW65L6uCm+Ks2ju9uUYuST5AZ+g6vn6HqcNS02yqvJhCytOyiFseNkJVzThNOL3jKS7r49/abmj1t9LfeOye2GrqdLTUV2ntdU5jma7StSxdZwHnYUVVOrb0vE5bvHbaSlFt7yqbaSfdxbUJb7xlZfVnvOrx6muasXpPU57Jgtity2jrWOq9HwdZ0fMtxNL8zqW3JptWRG6S86uMbVZBV+yV05TrfJ95eVsvXk/M5adac0+xXP0jpTWcOd2rUZmJqsLvOeVhev6fF7KVNqm9q5breN0U33nzjY2pKk13DptPPijr9sLXSa3aOTJPxQ3ofpX6cuWpanO3G0WizhZZXsrMixJPyat01y2acptOME02nKUIT6DlZUbFXXVTVjYtFaqx8emLVdEF34x37vu29225NuUm5SlIw7sl2RqrjCujHor8qiipbV0wT34xT7+1t7ttybcm5SlKRadhYaHSV01d+209stLWam2e20erDJ8wycCi7OyVj40VKbi23KajCEYreUpSfaEIxTlKUvVjFbsw9NxcrUs2OHiQUrGpTblJQhXGK3nOcn6sIRinKUperGK3ZGu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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/2Q==";

// ─── EMAIL CONFIGURATION ─────────────────────────────────────────────────────
// All emails sent via Node.js backend (server.js) using Zoho SMTP
// Backend endpoint: /api/send-email
// Admin configures SMTP credentials in Admin → Email Settings
// ─────────────────────────────────────────────────────────────────────────────
const EMAIL_CFG = {
  adminEmail:   "contact@aifnext.com",
  adminName:    "AIF NEXT Platform",
  backendUrl:   "/api/send-email",   // relative — works on same server
};

// ── Load saved config ─────────────────────────────────────────────────────────
(function loadSavedEmailCfg() {
  try {
    const s = localStorage.getItem("aif_smtp");
    if (s) window._smtpConfig = JSON.parse(s);
  } catch(e) {}
})();

// ── Core send via backend ─────────────────────────────────────────────────────
async function backendSend({ to, toName="", from, fromName, replyTo, subject, html }) {
  const cfg = window._smtpConfig || {};
  try {
    const res = await fetch(EMAIL_CFG.backendUrl, {
      method:  "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        // SMTP credentials from admin settings
        smtp: {
          host:     cfg.zohoHost     || "smtp.zoho.in",
          port:     Number(cfg.zohoPort) || 587,
          user:     cfg.zohoUser     || "",
          pass:     cfg.zohoPw       || "",
          fromEmail: cfg.zohoFrom    || EMAIL_CFG.adminEmail,
          fromName:  cfg.zohoFromName|| EMAIL_CFG.adminName,
        },
        // Email content
        to, toName,
        from:    from  || cfg.zohoFrom    || EMAIL_CFG.adminEmail,
        fromName:fromName || cfg.zohoFromName || EMAIL_CFG.adminName,
        replyTo: replyTo || "",
        subject, html,
      }),
    });
    if (!res.ok) {
      const err = await res.json().catch(() => ({}));
      return { ok: false, error: err?.error || `HTTP ${res.status}` };
    }
    return { ok: true };
  } catch(err) {
    console.error("Email send failed:", err.message);
    return { ok: false, error: err.message };
  }
}

// ── Token store (in-memory, 30 min expiry) ────────────────────────────────────
const _resetTokens = {};

function generateResetToken(email, type) {
  const token = btoa(email + "|" + type + "|" + Date.now() + "|" + Math.random()).replace(/[^a-zA-Z0-9]/g,"").slice(0,32);
  _resetTokens[token] = { email, type, expires: Date.now() + 30 * 60 * 1000 };
  return token;
}

function validateResetToken(token) {
  const data = _resetTokens[token];
  if (!data) return null;
  if (Date.now() > data.expires) { delete _resetTokens[token]; return null; }
  return data;
}

function consumeResetToken(token) {
  const data = validateResetToken(token);
  if (data) delete _resetTokens[token];
  return data;
}

function buildResetUrl(token, type) {
  const base = window.location.href.split("?")[0].split("#")[0];
  return `${base}?reset=${token}&type=${type}`;
}

// ── Need Assistance — To: admin, From: contact@, Reply-To: user ───────────────
async function sendEmail({ toEmail, subject, message, sentAt = "", replyTo = "", fromName = "", fundCategory = "", sebiNo = "" }) {
  const cfg = window._smtpConfig || {};
  const adminEmail = cfg.adminEmail || EMAIL_CFG.adminEmail;
  const sent = sentAt || new Date().toLocaleString("en-IN");
  return backendSend({
    to:       adminEmail,
    from:     cfg.zohoFrom    || EMAIL_CFG.adminEmail,
    fromName: cfg.zohoFromName|| EMAIL_CFG.adminName,
    replyTo:  replyTo || toEmail,
    subject:  `[AIF NEXT Query] ${subject}`,
    html: `
      <div style="font-family:Arial,sans-serif;background:#f4f7fb;padding:20px;">
        <div style="max-width:600px;margin:0 auto;background:#fff;border-radius:10px;overflow:hidden;">
          <div style="background:#071A3E;padding:24px 28px;">
            <h1 style="color:#fff;margin:0;font-size:20px;font-weight:800;">AIF NEXT</h1>
            <p style="color:rgba(255,255,255,0.5);margin:4px 0 0;font-size:11px;letter-spacing:1px;">SEBI COMPLIANCE MANAGEMENT PLATFORM</p>
          </div>
          <div style="padding:28px;">
            <h2 style="color:#071A3E;font-size:16px;margin:0 0 16px;">💬 New Assistance Query</h2>
            <div style="background:#f0f5fb;border-radius:8px;padding:14px;margin:0 0 20px;border:1px solid #BDCFEE;">
              <p style="margin:0 0 4px;font-size:13px;color:#6B7A9F;">From</p>
              <p style="margin:0;font-size:14px;font-weight:700;color:#071A3E;">${fromName} &lt;${replyTo||toEmail}&gt;</p>
              <p style="margin:4px 0 0;font-size:12px;color:#6B7A9F;">${fundCategory} · SEBI: ${sebiNo}</p>
            </div>
            <p style="color:#333;font-size:14px;line-height:1.8;white-space:pre-wrap;margin:0 0 20px;">${message.replace(/</g,"&lt;").replace(/>/g,"&gt;")}</p>
            <div style="background:#E8F0FC;border-radius:8px;padding:12px 16px;">
              <p style="margin:0;font-size:13px;color:#1249AA;">💡 Hit Reply to respond directly to <strong>${replyTo||toEmail}</strong></p>
            </div>
            <hr style="border:none;border-top:1px solid #e8f0fc;margin:20px 0;">
            <p style="color:#999;font-size:11px;margin:0;">Sent on ${sent} · AIF NEXT Compliance Platform</p>
          </div>
        </div>
      </div>`,
  });
}

// ── Login password reset — To: user, From: contact@ ──────────────────────────
async function sendLoginResetEmail({ toEmail, userName }) {
  const token = generateResetToken(toEmail, "login");
  const link  = buildResetUrl(token, "login");
  const cfg   = window._smtpConfig || {};
  const result = await backendSend({
    to:       toEmail,
    toName:   userName || toEmail,
    from:     cfg.zohoFrom    || EMAIL_CFG.adminEmail,
    fromName: cfg.zohoFromName|| EMAIL_CFG.adminName,
    subject:  "Reset Your AIF NEXT Login Password",
    html: `
      <div style="font-family:Arial,sans-serif;background:#f4f7fb;padding:20px;">
        <div style="max-width:600px;margin:0 auto;background:#fff;border-radius:10px;overflow:hidden;">
          <div style="background:#071A3E;padding:24px 28px;">
            <h1 style="color:#fff;margin:0;font-size:20px;font-weight:800;">AIF NEXT</h1>
            <p style="color:rgba(255,255,255,0.5);margin:4px 0 0;font-size:11px;letter-spacing:1px;">SEBI COMPLIANCE MANAGEMENT PLATFORM</p>
          </div>
          <div style="padding:28px;">
            <h2 style="color:#071A3E;font-size:18px;margin:0 0 8px;">🔑 Login Password Reset</h2>
            <p style="color:#6B7A9F;font-size:13px;margin:0 0 20px;">Requested for: <strong style="color:#071A3E;">${toEmail}</strong></p>
            <p style="color:#333;font-size:14px;line-height:1.7;margin:0 0 28px;">Dear <strong>${userName||toEmail}</strong>,<br><br>
              Click the button below to reset your <strong>login password</strong>. This link is valid for <strong>30 minutes</strong>.</p>
            <div style="text-align:center;margin:32px 0;">
              <a href="${link}" style="background:#1249AA;color:#fff;padding:14px 40px;border-radius:8px;text-decoration:none;font-weight:700;font-size:15px;display:inline-block;">
                Reset Login Password →
              </a>
            </div>
            <p style="color:#999;font-size:12px;margin:0 0 16px;">If the button doesn't work, copy this link:<br>
              <a href="${link}" style="color:#1249AA;word-break:break-all;">${link}</a></p>
            <hr style="border:none;border-top:1px solid #e8f0fc;margin:24px 0;">
            <p style="color:#999;font-size:12px;margin:0;">If you did not request this, please ignore this email.<br>
              Sent on ${new Date().toLocaleString("en-IN")} · AIF NEXT Compliance Platform</p>
          </div>
        </div>
      </div>`,
  });
  return { ...result, token };
}

// ── Vault password reset — To: user, From: contact@ ──────────────────────────
async function sendVaultResetEmail({ toEmail, userName }) {
  const token = generateResetToken(toEmail, "vault");
  const link  = buildResetUrl(token, "vault");
  const cfg   = window._smtpConfig || {};
  const result = await backendSend({
    to:       toEmail,
    toName:   userName || toEmail,
    from:     cfg.zohoFrom    || EMAIL_CFG.adminEmail,
    fromName: cfg.zohoFromName|| EMAIL_CFG.adminName,
    subject:  "Reset Your AIF NEXT Vault Password",
    html: `
      <div style="font-family:Arial,sans-serif;background:#f4f7fb;padding:20px;">
        <div style="max-width:600px;margin:0 auto;background:#fff;border-radius:10px;overflow:hidden;">
          <div style="background:#071A3E;padding:24px 28px;">
            <h1 style="color:#fff;margin:0;font-size:20px;font-weight:800;">AIF NEXT</h1>
            <p style="color:rgba(255,255,255,0.5);margin:4px 0 0;font-size:11px;letter-spacing:1px;">SEBI COMPLIANCE MANAGEMENT PLATFORM</p>
          </div>
          <div style="padding:28px;">
            <h2 style="color:#071A3E;font-size:18px;margin:0 0 8px;">🔐 Vault Password Reset</h2>
            <p style="color:#6B7A9F;font-size:13px;margin:0 0 20px;">Requested for: <strong style="color:#071A3E;">${toEmail}</strong></p>
            <p style="color:#333;font-size:14px;line-height:1.7;margin:0 0 28px;">Dear <strong>${userName||toEmail}</strong>,<br><br>
              Click the button below to reset your <strong>vault password</strong>. This link is valid for <strong>30 minutes</strong>.</p>
            <div style="text-align:center;margin:32px 0;">
              <a href="${link}" style="background:#0D2760;color:#fff;padding:14px 40px;border-radius:8px;text-decoration:none;font-weight:700;font-size:15px;display:inline-block;">
                Reset Vault Password →
              </a>
            </div>
            <p style="color:#999;font-size:12px;margin:0 0 16px;">If the button doesn't work, copy this link:<br>
              <a href="${link}" style="color:#1249AA;word-break:break-all;">${link}</a></p>
            <hr style="border:none;border-top:1px solid #e8f0fc;margin:24px 0;">
            <p style="color:#999;font-size:12px;margin:0;">If you did not request this, please ignore this email.<br>
              Sent on ${new Date().toLocaleString("en-IN")} · AIF NEXT Compliance Platform</p>
          </div>
        </div>
      </div>`,
  });
  return { ...result, token };
}

// ── Broadcast — To: admin, lists all recipients in body ───────────────────────
async function sendBroadcastEmail({ recipients, subject, message, sentAt = "" }) {
  const list = (Array.isArray(recipients) ? recipients : [recipients]).join("\n• ");
  return sendEmail({
    toEmail:  (window._smtpConfig||{}).adminEmail || EMAIL_CFG.adminEmail,
    subject:  `[BROADCAST to ${Array.isArray(recipients)?recipients.length:1} users] ${subject}`,
    message:  `Recipients:\n• ${list}\n\n---\n\n${message}`,
    sentAt,
  });
}

// ─── COLOR SYSTEM (Deep Blue Premium — AIF NEXT brand) ──────────────────────
const C = {
  navy:      "#071A3E",
  navyMid:   "#0D2760",
  blue:      "#1249AA",
  blueLight: "#1E6FE8",
  bluePale:  "#E8F0FC",
  blueBorder:"#BDCFEE",
  steel:     "#3A6BAF",
  white:     "#FFFFFF",
  surface:   "#F0F5FB",
  text:      "#0D1E40",
  muted:     "#4D6B9A",
  red:       "#B02020", redBg: "#FEF0EF",
  amber:     "#B07000", amberBg:"#FFF8E6",
  green:     "#167040", greenBg:"#E8F5EE",
};

const categoryLabel = (n) => ["","Category I","Category II","Category III"][n];
const categoryDesc  = (n) => ["","Venture Capital / Angel Funds","Private Equity / Debt Funds","Hedge Funds"][n];

const mockCompliance = [
  {id:1,category:[1,2,3],dueDate:"2026-04-10",explanation:"Submit quarterly portfolio disclosure to SEBI SI Portal. Include all investments made during Q4 FY2025-26.",link:"https://www.sebi.gov.in/circulars/2024/jan/01.html",status:"overdue"},
  {id:2,category:[1],dueDate:"2026-04-18",explanation:"File annual report for Category I AIF detailing scheme-wise fund performance and investor details.",link:"https://www.sebi.gov.in/circulars/2024/feb/02.html",status:"due-soon"},
  {id:3,category:[2,3],dueDate:"2026-04-25",explanation:"Submit valuation report certified by SEBI registered valuers for all portfolio companies.",link:"https://www.sebi.gov.in/circulars/2024/mar/03.html",status:"due-soon"},
  {id:4,category:[1,2,3],dueDate:"2026-05-15",explanation:"Update KYC details of all investors on CERSAI portal. Verify PAN and Aadhaar linkage.",link:"https://www.sebi.gov.in/circulars/2024/apr/04.html",status:"upcoming"},
  {id:5,category:[3],dueDate:"2026-05-20",explanation:"File enhanced risk management disclosure for Category III AIFs under SEBI Circular No. SEBI/HO/AFD/2024.",link:"https://www.sebi.gov.in/circulars/2024/apr/05.html",status:"upcoming"},
  {id:6,category:[1,2],dueDate:"2026-06-01",explanation:"Report on social and environmental impact metrics for Category I and II funds per ESG framework.",link:"https://www.sebi.gov.in/circulars/2024/may/06.html",status:"upcoming"},
  {id:7,category:[1,2,3],dueDate:"2026-06-30",explanation:"Annual SEBI registration renewal. Submit Form A with audited accounts and compliance certificate.",link:"https://www.sebi.gov.in/circulars/2024/jun/07.html",status:"upcoming"},
  {id:8,category:[2],dueDate:"2026-07-10",explanation:"File FIRMS portal report for all foreign investment received in Q1 FY2026-27.",link:"https://www.sebi.gov.in/circulars/2024/jun/08.html",status:"upcoming"},
  {id:9,category:[1,2,3],dueDate:"2026-07-31",explanation:"Submit GST returns for fund management services for Q1. Verify GSTIN status on GSTN portal.",link:"https://www.sebi.gov.in/circulars/2024/jul/09.html",status:"upcoming"},
  {id:10,category:[3],dueDate:"2026-08-15",explanation:"Stress test report submission for Category III hedge fund positions per RBI macro-prudential norms.",link:"https://www.sebi.gov.in/circulars/2024/aug/10.html",status:"upcoming"},
  {id:11,category:[1],dueDate:"2026-09-01",explanation:"File angel fund scheme-wise returns with SEBI for all investments above ₹25 lakhs.",link:"https://www.sebi.gov.in/circulars/2024/sep/11.html",status:"upcoming"},
];

const vaultPortals = [
  {id:1,name:"SEBI SI Portal",url:"https://siportal.sebi.gov.in",body:"SEBI",purpose:"Compliance filings & registration"},
  {id:2,name:"GST Portal",url:"https://www.gst.gov.in",body:"GSTN / MoF",purpose:"GST returns & payments"},
  {id:3,name:"FIRMS Portal (RBI)",url:"https://firms.rbi.org.in",body:"Reserve Bank of India",purpose:"Foreign investment reporting"},
  {id:4,name:"FIV Portal",url:"https://fiv.gov.in",body:"As applicable",purpose:"Financial information verification"},
  {id:5,name:"Income Tax e-Filing",url:"https://www.incometax.gov.in",body:"Income Tax Dept.",purpose:"ITR filing & TDS compliance"},
  {id:6,name:"NSDL Issuer Portal (Primary)",url:"https://issuerportal.nsdl.com",body:"NSDL",purpose:"Demat & ISIN management"},
  {id:7,name:"NSDL Issuer Portal (Secondary)",url:"https://www2.nsdl.co.in",body:"NSDL",purpose:"Secondary portal access"},
];

const mockUsers = [
  {id:1,name:"Pinnacle Ventures AIF",email:"compliance@pinnaclevc.in",category:1,sebi:"IN/AIF1/20-21/0742",phone:"9876543210",active:true},
  {id:2,name:"BluRidge PE Fund II",email:"fund@bluridge.in",category:2,sebi:"IN/AIF2/21-22/0391",phone:"9988776655",active:true},
  {id:3,name:"Apex Quant Strategies",email:"admin@apexquant.in",category:3,sebi:"IN/AIF3/22-23/0128",phone:"9123456789",active:false},
];

// ─── SHARED UI ────────────────────────────────────────────────────────────────
function StatusBadge({status}){
  const cfg={overdue:{bg:C.redBg,color:C.red,label:"Overdue",border:"#f0b0b0"},"due-soon":{bg:C.amberBg,color:C.amber,label:"Due Soon",border:"#e8c87a"},upcoming:{bg:C.bluePale,color:C.blue,label:"Upcoming",border:C.blueBorder},done:{bg:C.greenBg,color:C.green,label:"Completed",border:"#9fd4be"}};
  const c=cfg[status]||cfg.upcoming;
  return <span style={{background:c.bg,color:c.color,fontSize:10,fontWeight:800,padding:"3px 9px",borderRadius:20,letterSpacing:0.5,whiteSpace:"nowrap",border:`1px solid ${c.border}`,textTransform:"uppercase"}}>{c.label}</span>;
}

function Btn({children,onClick,variant="primary",size="md",style:ex={}}){
  const v={primary:{background:C.blue,color:"#fff",border:"none",boxShadow:`0 2px 8px rgba(18,73,170,0.3)`},outline:{background:"transparent",color:C.blue,border:`1.5px solid ${C.blueBorder}`},danger:{background:C.red,color:"#fff",border:"none"},ghost:{background:"transparent",color:C.muted,border:"none"}};
  const s={sm:{padding:"6px 13px",fontSize:12},md:{padding:"9px 18px",fontSize:14},lg:{padding:"11px 24px",fontSize:15}};
  return <button onClick={onClick} style={{...v[variant],...s[size],borderRadius:7,fontWeight:600,cursor:"pointer",display:"inline-flex",alignItems:"center",gap:6,letterSpacing:0.1,...ex}}>{children}</button>;
}

function Input({label,type="text",value,onChange,placeholder,required}){
  return(
    <div style={{marginBottom:14}}>
      {label&&<label style={{display:"block",fontSize:12,fontWeight:700,color:C.navy,marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>{label}{required&&<span style={{color:C.red}}> *</span>}</label>}
      <input type={type} value={value} onChange={e=>onChange(e.target.value)} placeholder={placeholder} style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,outline:"none",boxSizing:"border-box",background:"#FAFCFF",transition:"border 0.15s"}}
        onFocus={e=>e.target.style.borderColor=C.blue}
        onBlur={e=>e.target.style.borderColor=C.blueBorder}/>
    </div>
  );
}

function Modal({title,onClose,children}){
  return(
    <div style={{position:"fixed",inset:0,background:"rgba(7,26,62,0.55)",zIndex:1000,display:"flex",alignItems:"center",justifyContent:"center",padding:20,backdropFilter:"blur(2px)"}}>
      <div style={{background:"#fff",borderRadius:12,width:"100%",maxWidth:520,padding:28,boxShadow:"0 24px 60px rgba(7,26,62,0.22)"}}>
        <div style={{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:20,paddingBottom:14,borderBottom:`1px solid ${C.blueBorder}`}}>
          <h3 style={{margin:0,fontSize:16,color:C.navy,fontWeight:800,letterSpacing:-0.2}}>{title}</h3>
          <button onClick={onClose} style={{background:"none",border:"none",fontSize:20,cursor:"pointer",color:C.muted,lineHeight:1,padding:"0 2px"}}>×</button>
        </div>
        {children}
      </div>
    </div>
  );
}

function Card({children,style={},onClick}){
  return(
    <div onClick={onClick} style={{background:"#fff",borderRadius:10,border:`1px solid ${C.blueBorder}`,padding:20,cursor:onClick?"pointer":"default",boxShadow:"0 1px 4px rgba(7,26,62,0.05)",...style}}>
      {children}
    </div>
  );
}

function PageHeader({title,subtitle,action}){
  return(
    <div style={{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:24,paddingBottom:16,borderBottom:`1px solid ${C.blueBorder}`}}>
      <div>
        <h1 style={{fontSize:21,fontWeight:800,color:C.navy,margin:0,letterSpacing:-0.4}}>{title}</h1>
        {subtitle&&<p style={{fontSize:13,color:C.muted,margin:"4px 0 0",letterSpacing:0.1}}>{subtitle}</p>}
      </div>
      {action}
    </div>
  );
}

// ─── LOGO SVG (faithful recreation of the AIF NEXT brand mark) ───────────────
function LogoMark({size=36}){
  const h=size;
  const w=Math.round(size*2.9);
  const scale=size/50;
  return(
    <svg width={w} height={h} viewBox="0 0 145 50" xmlns="http://www.w3.org/2000/svg" style={{display:"block"}}>
      <defs>
        <linearGradient id="barGrad1" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stopColor="#1E6FE8"/><stop offset="100%" stopColor="#0D2760"/></linearGradient>
        <linearGradient id="barGrad2" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stopColor="#2E8BE8"/><stop offset="100%" stopColor="#1249AA"/></linearGradient>
        <linearGradient id="barGrad3" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stopColor="#5AABFF"/><stop offset="100%" stopColor="#1E6FE8"/></linearGradient>
        <linearGradient id="shieldGrad" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stopColor="#071A3E"/><stop offset="100%" stopColor="#0D2760"/></linearGradient>
      </defs>
      {/* Shield background */}
      <path d="M4 6 L4 34 Q4 44 25 48 Q46 44 46 34 L46 6 L4 6Z" fill="url(#shieldGrad)"/>
      <path d="M4 6 L4 34 Q4 44 25 48 Q46 44 46 34 L46 6 L4 6Z" fill="none" stroke="rgba(30,111,232,0.4)" strokeWidth="1"/>
      {/* Rising bars inside shield */}
      <rect x="10" y="30" width="5" height="12" rx="1" fill="url(#barGrad1)" opacity="0.9"/>
      <rect x="18" y="22" width="5" height="20" rx="1" fill="url(#barGrad2)"/>
      <rect x="26" y="14" width="5" height="28" rx="1" fill="url(#barGrad3)"/>
      <rect x="34" y="18" width="5" height="24" rx="1" fill="url(#barGrad2)" opacity="0.75"/>
      {/* Trend line */}
      <polyline points="12.5,28 20.5,20 28.5,12 36.5,16" stroke="#5AABFF" strokeWidth="1.5" fill="none" strokeLinecap="round" strokeLinejoin="round" opacity="0.8"/>
      <circle cx="12.5" cy="28" r="1.5" fill="#5AABFF" opacity="0.9"/>
      <circle cx="28.5" cy="12" r="2" fill="#fff" opacity="0.9"/>
      <circle cx="36.5" cy="16" r="1.5" fill="#5AABFF" opacity="0.7"/>
      {/* AIF NEXT text */}
      <text x="52" y="21" fontFamily="'Segoe UI',Helvetica,sans-serif" fontWeight="800" fontSize="15" fill="#071A3E" letterSpacing="1.2" dominantBaseline="middle">AIF</text>
      <text x="52" y="38" fontFamily="'Segoe UI',Helvetica,sans-serif" fontWeight="700" fontSize="12" fill="#1249AA" letterSpacing="2.5" dominantBaseline="middle">NEXT</text>
      {/* Accent underline */}
      <line x1="52" y1="44" x2="105" y2="44" stroke="#1E6FE8" strokeWidth="1.5" strokeLinecap="round" opacity="0.4"/>
    </svg>
  );
}

// ─── NAV ITEM ─────────────────────────────────────────────────────────────────
function NavItem({icon,label,active,onClick,badge}){
  return(
    <button onClick={onClick} style={{display:"flex",alignItems:"center",gap:10,padding:"8px 14px",borderRadius:6,width:"100%",border:"none",cursor:"pointer",background:active?"rgba(255,255,255,0.13)":"transparent",color:active?"#fff":"rgba(255,255,255,0.58)",fontSize:13,fontWeight:active?600:400,transition:"all 0.15s",textAlign:"left",borderLeft:active?"3px solid rgba(255,255,255,0.9)":"3px solid transparent",letterSpacing:0.1}}>
      <span style={{fontSize:14,width:18,textAlign:"center",flexShrink:0,opacity:active?1:0.8}}>{icon}</span>
      <span style={{flex:1}}>{label}</span>
      {badge&&<span style={{background:"#B02020",color:"#fff",fontSize:10,fontWeight:700,padding:"1px 6px",borderRadius:10,minWidth:18,textAlign:"center"}}>{badge}</span>}
    </button>
  );
}

// ─── LOGIN ────────────────────────────────────────────────────────────────────
function LoginPage({onLogin,onGoRegister}){
  const [email,setEmail]=useState("");
  const [pw,setPw]=useState("");
  const [err,setErr]=useState("");
  const [showPw,setShowPw]=useState(false);
  const [screen,setScreen]=useState("login"); // "login" | "forgot" | "forgot_link" | "forgot_newpw"
  const [forgotEmail,setForgotEmail]=useState("");
  const [forgotEmailErr,setForgotEmailErr]=useState("");
  const [newPw,setNewPw]=useState("");
  const [newPwConfirm,setNewPwConfirm]=useState("");
  const [newPwShow,setNewPwShow]=useState(false);
  const [newPwConfirmShow,setNewPwConfirmShow]=useState(false);
  const [newPwErr,setNewPwErr]=useState("");
  const [newPwSuccess,setNewPwSuccess]=useState(false);

  const DEMO_EMAILS=["admin@aifnext.com","compliance@pinnaclevc.in","fund@bluridge.in"];

  const handle=()=>{
    if(email==="admin@aifnext.com"&&pw==="Admin@123") return onLogin({role:"admin",name:"Platform Admin",email,id:0,phone:"9999999999"});
    if(email==="compliance@pinnaclevc.in"&&pw==="User@1234") return onLogin({role:"user",id:1,name:"Pinnacle Ventures AIF",email,category:1,sebi:"IN/AIF1/20-21/0742",phone:"9876543210"});
    if(email==="fund@bluridge.in"&&pw==="User@1234") return onLogin({role:"user",id:2,name:"BluRidge PE Fund II",email,category:2,sebi:"IN/AIF2/21-22/0391",phone:"9988776655"});
    setErr("Invalid email or password. Please try again.");
  };

  const handleForgotStart=()=>{
    if(!forgotEmail.trim()||!forgotEmail.includes("@")){setForgotEmailErr("Please enter a valid email address.");return;}
    if(!DEMO_EMAILS.includes(forgotEmail.trim())){setForgotEmailErr("No account found with this email address.");return;}
    setForgotEmailErr("");
    setScreen("forgot_link");
  };

  const getMaskedEmail=email=>{
    const map={
      "admin@aifnext.com":"adm***@aifnext.com",
      "compliance@pinnaclevc.in":"comp***@pinnaclevc.in",
      "fund@bluridge.in":"fun***@bluridge.in",
    };
    return map[email]||"***@***.com";
  };

  const inputStyle={width:"100%",padding:"10px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,boxSizing:"border-box",background:"#FAFCFF"};

  // Forgot password — new password form
  if(screen==="forgot_newpw") return(
    <div style={{minHeight:"100vh",background:`linear-gradient(145deg,${C.navy} 0%,#0A1F50 40%,${C.navyMid} 70%,#0E3280 100%)`,display:"flex",alignItems:"center",justifyContent:"center",padding:20}}>
      <div style={{width:"100%",maxWidth:420}}>
        <div style={{textAlign:"center",marginBottom:28}}>
          <div style={{display:"inline-block",background:"#fff",borderRadius:14,padding:"12px 22px",marginBottom:12,boxShadow:"0 4px 16px rgba(7,26,62,0.18)",border:"1.5px solid #E8F0FC"}}><LogoMark size={72}/></div>
        </div>
        <div style={{background:"#fff",borderRadius:16,padding:32,boxShadow:"0 24px 64px rgba(0,0,0,0.28)"}}>
          {newPwSuccess?(
            <div style={{textAlign:"center"}}>
              <div style={{fontSize:40,marginBottom:12}}>✅</div>
              <h3 style={{fontSize:18,fontWeight:800,color:C.navy,marginBottom:8}}>Password Reset!</h3>
              <p style={{fontSize:13,color:C.muted,marginBottom:20}}>Your password has been updated successfully. Please sign in with your new password.</p>
              <Btn onClick={()=>{setScreen("login");setForgotEmail("");setNewPw("");setNewPwConfirm("");setNewPwSuccess(false);}} size="lg" style={{width:"100%",justifyContent:"center"}}>Back to Sign In</Btn>
            </div>
          ):(
            <>
              <div style={{background:C.greenBg,border:`1px solid ${C.green}33`,borderRadius:8,padding:"10px 14px",marginBottom:18,fontSize:13,color:C.green,fontWeight:700}}>✓ Identity verified — set your new password.</div>
              <div style={{marginBottom:14}}>
                <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>New Password</label>
                <div style={{display:"flex",gap:6}}>
                  <input type={newPwShow?"text":"password"} value={newPw} onChange={e=>setNewPw(e.target.value)} placeholder="Min 8 characters" style={{...inputStyle,flex:1}}/>
                  <button onClick={()=>setNewPwShow(v=>!v)} style={{padding:"10px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:14,color:C.muted}}>{newPwShow?"🙈":"👁"}</button>
                </div>
              </div>
              <div style={{marginBottom:14}}>
                <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>Confirm Password</label>
                <div style={{display:"flex",gap:6}}>
                  <input type={newPwConfirmShow?"text":"password"} value={newPwConfirm} onChange={e=>setNewPwConfirm(e.target.value)} placeholder="Re-enter password" style={{...inputStyle,flex:1}}/>
                  <button onClick={()=>setNewPwConfirmShow(v=>!v)} style={{padding:"10px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:14,color:C.muted}}>{newPwConfirmShow?"🙈":"👁"}</button>
                </div>
              </div>
              {newPwErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,fontWeight:600,border:`1px solid ${C.red}22`}}>{newPwErr}</div>}
              <Btn onClick={()=>{
                if(newPw.length<8){setNewPwErr("Password must be at least 8 characters.");return;}
                if(newPw!==newPwConfirm){setNewPwErr("Passwords do not match.");return;}
                setNewPwErr("");setNewPwSuccess(true);
              }} size="lg" style={{width:"100%",justifyContent:"center"}}>Set New Password</Btn>
            </>
          )}
        </div>
      </div>
    </div>
  );

  // Forgot password — email link step
  if(screen==="forgot_link") return(
    <div style={{minHeight:"100vh",background:`linear-gradient(145deg,${C.navy} 0%,#0A1F50 40%,${C.navyMid} 70%,#0E3280 100%)`,display:"flex",alignItems:"center",justifyContent:"center",padding:20}}>
      <div style={{width:"100%",maxWidth:420}}>
        <div style={{textAlign:"center",marginBottom:28}}>
          <div style={{display:"inline-block",background:"#fff",borderRadius:14,padding:"12px 22px",marginBottom:12,boxShadow:"0 4px 16px rgba(7,26,62,0.18)",border:"1.5px solid #E8F0FC"}}><LogoMark size={72}/></div>
        </div>
        <div style={{background:"#fff",borderRadius:16,padding:32,boxShadow:"0 24px 64px rgba(0,0,0,0.28)"}}>
          <h2 style={{fontSize:18,fontWeight:800,color:C.navy,marginBottom:4,marginTop:0}}>Reset Password</h2>
          <p style={{fontSize:13,color:C.muted,marginBottom:20,marginTop:0}}>A reset link will be sent to the email registered with <strong style={{color:C.navy}}>{forgotEmail}</strong></p>
          <EmailLinkFlow
            title="Reset Account Password"
            emailDisplay={getMaskedEmail(forgotEmail)}
            realEmail={forgotEmail}
            type="login"
            onVerified={()=>setScreen("forgot_newpw")}
            onCancel={()=>{setScreen("login");setForgotEmail("");}}
          />
        </div>
      </div>
    </div>
  );

  // Forgot password — email entry
  if(screen==="forgot") return(
    <div style={{minHeight:"100vh",background:`linear-gradient(145deg,${C.navy} 0%,#0A1F50 40%,${C.navyMid} 70%,#0E3280 100%)`,display:"flex",alignItems:"center",justifyContent:"center",padding:20}}>
      <div style={{width:"100%",maxWidth:420}}>
        <div style={{textAlign:"center",marginBottom:28}}>
          <div style={{display:"inline-block",background:"#fff",borderRadius:14,padding:"12px 22px",marginBottom:12,boxShadow:"0 4px 16px rgba(7,26,62,0.18)",border:"1.5px solid #E8F0FC"}}><LogoMark size={72}/></div>
          <p style={{color:"rgba(255,255,255,0.4)",fontSize:13,margin:0}}>SEBI Compliance Management Platform</p>
        </div>
        <div style={{background:"#fff",borderRadius:16,padding:32,boxShadow:"0 24px 64px rgba(0,0,0,0.28)"}}>
          <h2 style={{fontSize:20,fontWeight:800,color:C.navy,marginBottom:4,marginTop:0}}>Forgot Password</h2>
          <p style={{fontSize:13,color:C.muted,marginBottom:24,marginTop:0}}>Enter your registered email address. We'll send a reset link to that email.</p>
          <div style={{marginBottom:14}}>
            <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>Registered Email</label>
            <input type="email" value={forgotEmail} onChange={e=>setForgotEmail(e.target.value)} placeholder="you@fund.in"
              style={inputStyle}
              onKeyDown={e=>e.key==="Enter"&&handleForgotStart()}/>
          </div>
          {forgotEmailErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,fontWeight:600,border:`1px solid ${C.red}22`}}>{forgotEmailErr}</div>}
          <Btn onClick={handleForgotStart} size="lg" style={{width:"100%",justifyContent:"center",marginBottom:14}}>Send Reset Link →</Btn>
          <button onClick={()=>{setScreen("login");setForgotEmail("");setForgotEmailErr("");}}
            style={{width:"100%",background:"none",border:"none",cursor:"pointer",color:C.blue,fontSize:13,fontWeight:600,textAlign:"center",padding:4}}>
            ← Back to Sign In
          </button>
        </div>
      </div>
    </div>
  );

  // Main login screen
  return(
    <div style={{minHeight:"100vh",background:`linear-gradient(145deg,${C.navy} 0%,#0A1F50 40%,${C.navyMid} 70%,#0E3280 100%)`,display:"flex",alignItems:"center",justifyContent:"center",padding:20}}>
      <div style={{width:"100%",maxWidth:420}}>
        <div style={{textAlign:"center",marginBottom:28}}>
          <div style={{display:"inline-block",background:"#fff",borderRadius:14,padding:"12px 22px",marginBottom:12,boxShadow:"0 4px 16px rgba(7,26,62,0.18)",border:"1.5px solid #E8F0FC"}}>
            <LogoMark size={72}/>
          </div>
          <p style={{color:"rgba(255,255,255,0.4)",fontSize:13,margin:0,letterSpacing:0.3}}>SEBI Compliance Management Platform</p>
        </div>
        <div style={{background:"#fff",borderRadius:16,padding:32,boxShadow:"0 24px 64px rgba(0,0,0,0.28)"}}>
          <h2 style={{fontSize:20,fontWeight:800,color:C.navy,marginBottom:4,marginTop:0,letterSpacing:-0.3}}>Welcome back</h2>
          <p style={{fontSize:13,color:C.muted,marginBottom:24,marginTop:0}}>Sign in to your compliance dashboard</p>
          <div style={{marginBottom:14}}>
            <label style={{display:"block",fontSize:12,fontWeight:700,color:C.navy,marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Email Address <span style={{color:C.red}}>*</span></label>
            <input type="email" value={email} onChange={e=>setEmail(e.target.value)} placeholder="you@fund.in" style={inputStyle}
              onKeyDown={e=>e.key==="Enter"&&handle()}/>
          </div>
          <div style={{marginBottom:8}}>
            <label style={{display:"block",fontSize:12,fontWeight:700,color:C.navy,marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Password <span style={{color:C.red}}>*</span></label>
            <div style={{display:"flex",gap:6}}>
              <input type={showPw?"text":"password"} value={pw} onChange={e=>setPw(e.target.value)} placeholder="••••••••" style={{...inputStyle,flex:1}}
                onKeyDown={e=>e.key==="Enter"&&handle()}/>
              <button onClick={()=>setShowPw(v=>!v)} style={{padding:"10px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:14,color:C.muted}}>{showPw?"🙈":"👁"}</button>
            </div>
          </div>
          {/* Forgot Password link */}
          <div style={{textAlign:"right",marginBottom:16}}>
            <button onClick={()=>setScreen("forgot")} style={{background:"none",border:"none",cursor:"pointer",color:C.blue,fontSize:12,fontWeight:600,padding:0}}>Forgot password?</button>
          </div>
          {err&&<div style={{background:C.redBg,color:C.red,padding:"10px 14px",borderRadius:8,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`}}>{err}</div>}
          <Btn onClick={handle} style={{width:"100%",justifyContent:"center",marginBottom:16}} size="lg">Sign In →</Btn>
        </div>
        <p style={{textAlign:"center",color:"rgba(255,255,255,0.35)",fontSize:13,marginTop:14}}>
          New AIF?{" "}
          <button onClick={onGoRegister} style={{background:"none",border:"none",color:"rgba(255,255,255,0.75)",fontWeight:600,cursor:"pointer",fontSize:13,textDecoration:"underline"}}>Register your fund</button>
        </p>
      </div>
    </div>
  );
}

// ─── REGISTER ─────────────────────────────────────────────────────────────────
function RegisterPage({onBack}){
  const [form,setForm]=useState({category:"",name:"",email:"",pw:"",hint:"",phone:"",sebi:""});
  const [done,setDone]=useState(false);
  const set=k=>v=>setForm(f=>({...f,[k]:v}));
  const strength=p=>{let s=0;if(p.length>=8)s++;if(/[A-Z]/.test(p))s++;if(/[0-9]/.test(p))s++;if(/[^A-Za-z0-9]/.test(p))s++;return s;};
  const str=strength(form.pw);
  const strColors=["",C.red,"#D4820A","#D4820A",C.green];
  const strLabels=["","Weak","Fair","Good","Strong"];
  if(done) return(
    <div style={{minHeight:"100vh",background:`linear-gradient(145deg,${C.navy} 0%,#0A1F50 40%,${C.navyMid} 70%,#0E3280 100%)`,display:"flex",alignItems:"center",justifyContent:"center"}}>
      <div style={{background:"#fff",borderRadius:16,padding:40,maxWidth:400,textAlign:"center",margin:20,boxShadow:"0 24px 64px rgba(0,0,0,0.28)"}}>
        <div style={{width:60,height:60,borderRadius:"50%",background:C.greenBg,border:`2px solid ${C.green}`,display:"flex",alignItems:"center",justifyContent:"center",fontSize:26,margin:"0 auto 16px",color:C.green,fontWeight:700}}>✓</div>
        <h2 style={{color:C.navy,margin:"0 0 8px",fontWeight:800,letterSpacing:-0.3}}>Registration Successful</h2>
        <p style={{color:C.muted,fontSize:14,lineHeight:1.6}}>Your AIF account has been created. A welcome email has been sent to <strong style={{color:C.navy}}>{form.email}</strong>.</p>
        <Btn onClick={onBack} style={{marginTop:20,width:"100%",justifyContent:"center"}} size="lg">Back to Login</Btn>
      </div>
    </div>
  );
  return(
    <div style={{minHeight:"100vh",background:`linear-gradient(145deg,${C.navy} 0%,#0A1F50 40%,${C.navyMid} 70%,#0E3280 100%)`,display:"flex",alignItems:"center",justifyContent:"center",padding:20}}>
      <div style={{width:"100%",maxWidth:480}}>
        <div style={{textAlign:"center",marginBottom:20}}>
          <div style={{display:"inline-block",background:"#fff",borderRadius:12,padding:"10px 20px",marginBottom:10,boxShadow:"0 4px 16px rgba(7,26,62,0.18)",border:"1.5px solid #E8F0FC"}}>
            <LogoMark size={60}/>
          </div>
          <p style={{color:"rgba(255,255,255,0.4)",fontSize:13,margin:0,letterSpacing:0.3}}>Register your Alternative Investment Fund</p>
        </div>
        <div style={{background:"#fff",borderRadius:16,padding:28,boxShadow:"0 24px 64px rgba(0,0,0,0.28)"}}>
          <h2 style={{fontSize:18,fontWeight:800,color:C.navy,margin:"0 0 4px",letterSpacing:-0.3}}>Create Account</h2>
          <p style={{fontSize:13,color:C.muted,marginBottom:20,marginTop:0}}>Complete all fields to register your AIF</p>
          <div style={{marginBottom:14}}>
            <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>AIF Category <span style={{color:C.red}}>*</span></label>
            <select value={form.category} onChange={e=>set("category")(e.target.value)} style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:form.category?C.text:"#9aaccf",background:"#FAFCFF"}}>
              <option value="">Select your AIF category</option>
              <option value="1">Category I — Venture Capital / Angel / SME Funds</option>
              <option value="2">Category II — Private Equity / Debt Funds</option>
              <option value="3">Category III — Hedge Funds / Complex Strategies</option>
            </select>
          </div>
          <Input label="Name of AIF" value={form.name} onChange={set("name")} placeholder="Full legal name as per SEBI registration" required/>
          <Input label="Email Address" type="email" value={form.email} onChange={set("email")} placeholder="Primary email — used as login ID" required/>
          <Input label="Password" type="password" value={form.pw} onChange={set("pw")} placeholder="Min 8 chars, uppercase, digit, special char" required/>
          {form.pw&&(
            <div style={{marginBottom:14,marginTop:-6}}>
              <div style={{display:"flex",gap:3,marginBottom:5}}>
                {[1,2,3,4].map(i=><div key={i} style={{flex:1,height:3,borderRadius:3,background:i<=str?strColors[str]:C.blueBorder,transition:"background 0.2s"}}/>)}
              </div>
              <span style={{fontSize:11,color:strColors[str],fontWeight:700,letterSpacing:0.3,textTransform:"uppercase"}}>{strLabels[str]} password</span>
            </div>
          )}
          <Input label="Password Hint (optional)" value={form.hint} onChange={set("hint")} placeholder="A private hint to help you remember"/>
          <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12}}>
            <Input label="Phone Number" type="tel" value={form.phone} onChange={set("phone")} placeholder="10-digit mobile" required/>
            <Input label="SEBI Reg. Number" value={form.sebi} onChange={set("sebi")} placeholder="IN/AIF1/21-22/0742" required/>
          </div>
          <Btn onClick={()=>setDone(true)} style={{width:"100%",justifyContent:"center",marginTop:8}} size="lg">Create Account →</Btn>
        </div>
        <p style={{textAlign:"center",color:"rgba(255,255,255,0.35)",fontSize:13,marginTop:14}}>
          Already registered?{" "}
          <button onClick={onBack} style={{background:"none",border:"none",color:"rgba(255,255,255,0.75)",fontWeight:600,cursor:"pointer",fontSize:13,textDecoration:"underline"}}>Sign in</button>
        </p>
      </div>
    </div>
  );
}

// ─── LAYOUT ───────────────────────────────────────────────────────────────────
function Layout({user,view,setView,onLogout,children}){
  const overdue=mockCompliance.filter(c=>c.status==="overdue"&&(!user.category||c.category.includes(user.category))).length;
  const adminNav=[
    {icon:"⊞",label:"Dashboard",key:"dashboard"},
    {icon:"📅",label:"Compliance Calendar",key:"calendar"},
    {icon:"📋",label:"SEBI Circulars",key:"circulars"},
    {icon:"👥",label:"Manage Users",key:"users"},
    {icon:"📣",label:"Broadcast Notification",key:"broadcast"},
    {icon:"✉️",label:"Contact Email",key:"contactemail"},
    {icon:"🔑",label:"Account Settings",key:"changepassword"},
    {icon:"⚙️",label:"SMTP Settings",key:"smtp"},
  ];
  const userNav=[
    {icon:"⊞",label:"Dashboard",key:"dashboard"},
    {icon:"📅",label:"Compliance Calendar",key:"calendar"},
    {icon:"📋",label:"SEBI Circulars",key:"circulars"},
    {icon:"🔐",label:"Password Vault",key:"vault"},
    {icon:"✏️",label:"My Compliance",key:"custom"},
    {icon:"🔔",label:"Notifications",key:"notifications"},
    {icon:"💬",label:"Need Assistance",key:"assistance"},
    {icon:"⚙️",label:"Account Settings",key:"usersettings"},
  ];
  const nav=user.role==="admin"?adminNav:userNav;
  return(
    <div style={{display:"flex",minHeight:"100vh",fontFamily:"'Segoe UI',system-ui,sans-serif"}}>
      <div style={{width:228,background:`linear-gradient(200deg,${C.navy} 0%,${C.navyMid} 60%,#0A2050 100%)`,display:"flex",flexDirection:"column",flexShrink:0,position:"sticky",top:0,height:"100vh",boxShadow:"4px 0 24px rgba(7,26,62,0.25)"}}>
        <div style={{padding:"20px 16px 16px",borderBottom:"1px solid rgba(255,255,255,0.06)"}}>
          <div style={{background:"#fff",borderRadius:9,padding:"8px 14px",display:"flex",alignItems:"center",justifyContent:"center",boxShadow:"0 2px 8px rgba(7,26,62,0.15)"}}>
            <LogoMark size={48}/>
          </div>
        </div>
        <div style={{padding:"12px 10px 8px",borderBottom:"1px solid rgba(255,255,255,0.05)",marginBottom:10}}>
          <div style={{padding:"10px 12px",background:"rgba(255,255,255,0.06)",borderRadius:8,borderLeft:"3px solid rgba(30,111,232,0.5)"}}>
            <div style={{fontSize:12,fontWeight:700,color:"#fff",marginBottom:2,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}>{user.name}</div>
            {user.category&&<div style={{fontSize:11,color:"rgba(255,255,255,0.45)"}}>{categoryLabel(user.category)}</div>}
            <div style={{fontSize:10,color:"rgba(255,255,255,0.28)",marginTop:2}}>{user.role==="admin"?"Platform Administrator":user.sebi}</div>
          </div>
        </div>
        <nav style={{flex:1,padding:"0 8px",overflowY:"auto"}}>
          {nav.map(item=><NavItem key={item.key} icon={item.icon} label={item.label} active={view===item.key} onClick={()=>setView(item.key)} badge={item.badge}/>)}
        </nav>
        <div style={{padding:"10px 8px",borderTop:"1px solid rgba(255,255,255,0.06)"}}>
          <NavItem icon="→" label="Sign Out" onClick={onLogout}/>
        </div>
      </div>
      <div style={{flex:1,background:C.surface,overflow:"auto",display:"flex",flexDirection:"column"}}>
        <div style={{flex:1}}>{children}</div>
        <div style={{padding:"12px 28px",borderTop:`1px solid ${C.blueBorder}`,display:"flex",justifyContent:"space-between",alignItems:"center",background:"#fff"}}>
          <span style={{fontSize:11,color:C.muted,letterSpacing:0.2}}>© 2026 AIF NEXT Compliance Platform</span>
          <span style={{fontSize:11,color:C.muted,letterSpacing:0.2}}>SEBI Registered · AES-256 Encrypted · v2.4.1</span>
        </div>
      </div>
    </div>
  );
}

// ─── DASHBOARD ────────────────────────────────────────────────────────────────
function Dashboard({user,setView,setCalendarFilter}){
  const items=mockCompliance.filter(c=>!user.category||c.category.includes(user.category));
  const overdue=items.filter(c=>c.status==="overdue").length;
  const dueSoon=items.filter(c=>c.status==="due-soon").length;
  const upcoming=items.filter(c=>c.status==="upcoming").length;

  const quickActions=[
    {icon:"🔐",title:"Password Vault",desc:"Access your regulatory portal credentials",key:"vault"},
    {icon:"✏️",title:"My Compliance",desc:"Track internal compliance obligations",key:"custom"},
    {icon:"💬",title:"Get Assistance",desc:"Send a query to your compliance advisor",key:"assistance"},
    {icon:"🔔",title:"Manage Emails",desc:"Update notification email addresses",key:"notifications"},
  ];

  return(
    <div style={{padding:28}}>
      <PageHeader
        title={`Welcome, ${user.name.split(" ")[0]}`}
        subtitle={user.role==="admin"?"Platform overview":`${categoryLabel(user.category)} — ${categoryDesc(user.category)}`}
      />
      {user.role!=="admin"&&(
        <div style={{background:`linear-gradient(110deg,${C.navy} 0%,${C.navyMid} 60%,${C.blue} 100%)`,borderRadius:12,padding:"18px 24px",marginBottom:22,display:"flex",justifyContent:"space-between",alignItems:"center",boxShadow:`0 4px 20px rgba(7,26,62,0.18)`}}>
          <div>
            <div style={{color:"rgba(255,255,255,0.45)",fontSize:11,marginBottom:3,letterSpacing:0.5,textTransform:"uppercase",fontWeight:600}}>SEBI Registration</div>
            <div style={{color:"#fff",fontSize:16,fontWeight:700,letterSpacing:0.2}}>{user.sebi}</div>
          </div>
          <div style={{textAlign:"right"}}>
            <div style={{color:"rgba(255,255,255,0.45)",fontSize:11,marginBottom:3,letterSpacing:0.5,textTransform:"uppercase",fontWeight:600}}>Fund Category</div>
            <div style={{color:"#fff",fontSize:16,fontWeight:700}}>{categoryLabel(user.category)}</div>
          </div>
        </div>
      )}
      <div style={{display:"grid",gridTemplateColumns:"repeat(3,1fr)",gap:14,marginBottom:22}}>
        {[
          {label:"Overdue",value:overdue,color:C.red,bg:"#fff",key:"overdue"},
          {label:"Due This Week",value:dueSoon,color:C.amber,bg:"#fff",key:"due-soon"},
          {label:"Upcoming",value:upcoming,color:C.blue,bg:"#fff",key:"upcoming"},
        ].map(s=>(
          <div key={s.label} onClick={()=>{setCalendarFilter(s.key);setView("calendar");}} style={{background:s.bg,borderRadius:10,padding:"16px 20px",border:`1px solid ${C.blueBorder}`,cursor:"pointer",transition:"all 0.15s",boxShadow:"0 1px 4px rgba(7,26,62,0.05)",borderLeft:`4px solid ${s.color}`}}
            onMouseEnter={e=>{e.currentTarget.style.boxShadow=`0 4px 16px rgba(7,26,62,0.1)`;e.currentTarget.style.transform="translateY(-1px)";}}
            onMouseLeave={e=>{e.currentTarget.style.boxShadow="0 1px 4px rgba(7,26,62,0.05)";e.currentTarget.style.transform="translateY(0)";}}>
            <div style={{fontSize:11,color:C.muted,fontWeight:700,marginBottom:6,letterSpacing:0.4,textTransform:"uppercase"}}>{s.label}</div>
            <div style={{fontSize:32,fontWeight:800,color:s.color,lineHeight:1,letterSpacing:-1}}>{s.value}</div>
            <div style={{fontSize:11,color:C.muted,marginTop:5}}>compliance items</div>
          </div>
        ))}
      </div>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:16}}>
        <Card style={{cursor:"default"}}>
          <div style={{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:14,borderBottom:`1px solid ${C.blueBorder}`,paddingBottom:10}}>
            <h3 style={{fontSize:11,fontWeight:700,color:C.muted,margin:0,letterSpacing:0.5,textTransform:"uppercase"}}>Upcoming Deadlines</h3>
            <button onClick={()=>setView("calendar")} style={{fontSize:11,color:C.blueLight,fontWeight:700,background:"none",border:"none",cursor:"pointer",letterSpacing:0.2}}>View All →</button>
          </div>
          {items.filter(c=>c.status!=="done").slice(0,5).map(item=>(
            <div key={item.id} onClick={()=>setView("calendar")} style={{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"10px 8px",borderBottom:`1px solid ${C.surface}`,cursor:"pointer",borderRadius:7,transition:"background 0.12s",margin:"0 -8px"}}
              onMouseEnter={e=>e.currentTarget.style.background=C.bluePale}
              onMouseLeave={e=>e.currentTarget.style.background="transparent"}>
              <div style={{flex:1,marginRight:12}}>
                <div style={{fontSize:13,color:C.text,fontWeight:500,marginBottom:2,lineHeight:1.4}}>{item.explanation.slice(0,52)}…</div>
                <div style={{fontSize:11,color:C.muted,letterSpacing:0.2}}>{new Date(item.dueDate).toLocaleDateString("en-IN",{day:"numeric",month:"short",year:"numeric"})}</div>
              </div>
              <StatusBadge status={item.status}/>
            </div>
          ))}
        </Card>
        {user.role==="admin"?(
          <Card>
            <h3 style={{fontSize:11,fontWeight:700,color:C.muted,margin:"0 0 14px",borderBottom:`1px solid ${C.blueBorder}`,paddingBottom:10,letterSpacing:0.5,textTransform:"uppercase"}}>Registered Funds</h3>
            {mockUsers.map(u=>(
              <div key={u.id} style={{display:"flex",alignItems:"center",gap:12,padding:"10px 0",borderBottom:`1px solid ${C.surface}`}}>
                <div style={{width:34,height:34,borderRadius:8,background:C.bluePale,display:"flex",alignItems:"center",justifyContent:"center",color:C.blue,fontSize:12,fontWeight:700,border:`1px solid ${C.blueBorder}`,flexShrink:0}}>{u.name.slice(0,2)}</div>
                <div style={{flex:1,minWidth:0}}>
                  <div style={{fontSize:13,fontWeight:600,color:C.text,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}>{u.name}</div>
                  <div style={{fontSize:11,color:C.muted}}>{categoryLabel(u.category)} · {u.sebi}</div>
                </div>
                <span style={{fontSize:11,fontWeight:700,padding:"2px 8px",borderRadius:20,background:u.active?C.greenBg:"#F0F0F5",color:u.active?C.green:C.muted,flexShrink:0}}>{u.active?"Active":"Inactive"}</span>
              </div>
            ))}
          </Card>
        ):(
          <Card>
            <h3 style={{fontSize:13,fontWeight:700,color:C.navy,margin:"0 0 14px",borderBottom:`1px solid ${C.blueBorder}`,paddingBottom:10,letterSpacing:0.2,textTransform:"uppercase"}}>Quick Actions</h3>
            {quickActions.map(a=>(
              <div key={a.key} onClick={()=>setView(a.key)} style={{display:"flex",alignItems:"center",gap:14,padding:"11px 10px",borderRadius:8,cursor:"pointer",transition:"all 0.15s",marginBottom:2,border:"1px solid transparent"}}
                onMouseEnter={e=>{e.currentTarget.style.background=C.bluePale;e.currentTarget.style.borderColor=C.blueBorder;}}
                onMouseLeave={e=>{e.currentTarget.style.background="transparent";e.currentTarget.style.borderColor="transparent";}}>
                <span style={{fontSize:18,width:34,height:34,background:C.surface,borderRadius:8,display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0,border:`1px solid ${C.blueBorder}`}}>{a.icon}</span>
                <div>
                  <div style={{fontSize:13,fontWeight:700,color:C.navy}}>{a.title}</div>
                  <div style={{fontSize:12,color:C.muted}}>{a.desc}</div>
                </div>
                <span style={{marginLeft:"auto",color:C.steel,fontSize:14,fontWeight:600}}>›</span>
              </div>
            ))}
          </Card>
        )}
      </div>
    </div>
  );
}

// ─── COMPLIANCE CALENDAR ──────────────────────────────────────────────────────
function ComplianceCalendar({user,isCirculars,initialFilter="all",doneSet={},setDoneSet,remarkMap={},setRemarkMap}){
  const [page,setPage]=useState(0);
  const [filter,setFilter]=useState(initialFilter);
  // doneSet and remarkMap come from App-level props — persist across navigation and re-login
  const _setDone=setDoneSet||(()=>{});
  const _setRemark=setRemarkMap||(()=>{});
  const [showAdd,setShowAdd]=useState(false);
  const [newItem,setNewItem]=useState({dueDate:"",explanation:"",link:"",category:[1,2,3]});
  const PER=10;
  let items=mockCompliance.filter(c=>!user.category||c.category.includes(user.category));
  if(filter!=="all") items=items.filter(c=>(doneSet[c.id]?"done":c.status)===filter);
  const total=items.length;
  const paged=items.slice(page*PER,page*PER+PER);
  const pages=Math.ceil(total/PER);
  return(
    <div style={{padding:28}}>
      <PageHeader title={isCirculars?"SEBI Circulars & Regulations":"Compliance Calendar"}
        subtitle={isCirculars?`${total} regulatory circulars applicable to your fund`:`${total} items${user.category?` for ${categoryLabel(user.category)}`:" across all categories"}`}
        action={user.role==="admin"&&<Btn onClick={()=>setShowAdd(true)} size="sm">+ Add Item</Btn>}
      />
      <div style={{display:"flex",gap:6,marginBottom:20,flexWrap:"wrap",alignItems:"center"}}>
        <span style={{fontSize:11,color:C.muted,fontWeight:700,letterSpacing:0.4,textTransform:"uppercase",marginRight:4}}>Filter:</span>
        {[
          {key:"all",label:"All"},
          {key:"overdue",label:"Overdue",color:C.red},
          {key:"due-soon",label:"Due Soon",color:C.amber},
          {key:"upcoming",label:"Upcoming",color:C.blue},
          {key:"done",label:"Completed",color:C.green},
        ].map(f=>(
          <button key={f.key} onClick={()=>{setFilter(f.key);setPage(0);}} style={{padding:"5px 14px",borderRadius:20,border:`1.5px solid ${filter===f.key?(f.color||C.blue):C.blueBorder}`,background:filter===f.key?(f.color||C.blue):"#fff",color:filter===f.key?"#fff":C.muted,fontSize:11,fontWeight:filter===f.key?700:500,cursor:"pointer",letterSpacing:0.3,transition:"all 0.15s"}}>
            {f.label}
          </button>
        ))}
      </div>
      <Card style={{padding:0,overflow:"hidden"}}>
        <div style={{overflowX:"auto"}}>
          <table style={{width:"100%",borderCollapse:"collapse"}}>
            <thead>
              <tr style={{background:C.surface}}>
                {["Due Date","Compliance Requirement","Reference",user.category?"Remark":"Categories","Status","Action"].map(h=>(
                  <th key={h} style={{padding:"10px 14px",textAlign:"left",fontSize:10,fontWeight:800,color:C.muted,letterSpacing:0.6,borderBottom:`1px solid ${C.blueBorder}`,whiteSpace:"nowrap"}}>{h.toUpperCase()}</th>
                ))}
              </tr>
            </thead>
            <tbody>
              {paged.length===0&&(
                <tr>
                  <td colSpan={6} style={{padding:"36px 14px",textAlign:"center",color:C.muted,fontSize:14}}>
                    <div style={{fontSize:28,marginBottom:8}}>📋</div>
                    No compliance items match this filter.
                  </td>
                </tr>
              )}
              {paged.map((item,idx)=>{
                const done=!!doneSet[item.id];
                return(
                  <tr key={item.id} style={{background:idx%2===0?"#fff":"#FAFCFF",opacity:done?0.55:1,transition:"background 0.1s"}}
                    onMouseEnter={e=>e.currentTarget.style.background=C.bluePale}
                    onMouseLeave={e=>e.currentTarget.style.background=idx%2===0?"#fff":"#FAFCFF"}>
                    <td style={{padding:"12px 14px",fontSize:12,fontWeight:800,color:C.navy,whiteSpace:"nowrap",borderBottom:`1px solid ${C.surface}`}}>{new Date(item.dueDate).toLocaleDateString("en-IN",{day:"numeric",month:"short",year:"numeric"})}</td>
                    <td style={{padding:"12px 14px",fontSize:13,color:C.text,maxWidth:280,borderBottom:`1px solid ${C.surface}`,lineHeight:1.4}}><span style={{textDecoration:done?"line-through":"none"}}>{item.explanation}</span></td>
                    <td style={{padding:"12px 14px",borderBottom:`1px solid ${C.surface}`}}><a href={item.link} target="_blank" rel="noreferrer" style={{fontSize:11,color:C.blueLight,textDecoration:"none",fontWeight:700,letterSpacing:0.2}}>View ↗</a></td>
                    <td style={{padding:"12px 14px",fontSize:12,borderBottom:`1px solid ${C.surface}`}}>
                      {user.category?(
                        <input placeholder="Add remark…" value={remarkMap[item.id]||""} onChange={e=>_setRemark(m=>({...m,[item.id]:e.target.value}))} style={{border:`1px solid ${C.blueBorder}`,borderRadius:6,padding:"5px 8px",fontSize:12,width:140,color:C.text,background:"#FAFCFF"}}/>
                      ):(
                        item.category.map(c=><span key={c} style={{marginRight:4,background:C.bluePale,color:C.blue,fontSize:10,padding:"2px 7px",borderRadius:10,fontWeight:700,letterSpacing:0.2,display:"inline-block",marginBottom:2}}>Cat {c}</span>)
                      )}
                    </td>
                    <td style={{padding:"12px 14px",borderBottom:`1px solid ${C.surface}`}}><StatusBadge status={done?"done":item.status}/></td>
                    <td style={{padding:"12px 14px",borderBottom:`1px solid ${C.surface}`}}>
                      {!done
                        ?<button onClick={()=>_setDone(s=>({...s,[item.id]:true}))} style={{padding:"4px 11px",borderRadius:6,border:`1.5px solid ${C.green}`,background:"#fff",color:C.green,fontSize:11,fontWeight:700,cursor:"pointer",letterSpacing:0.2}}>Mark Done</button>
                        :<span style={{fontSize:11,color:C.green,fontWeight:800,letterSpacing:0.2}}>✓ Done</span>
                      }
                    </td>
                  </tr>
                );
              })}
            </tbody>
          </table>
        </div>
        {pages>1&&(
          <div style={{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"12px 16px",borderTop:`1px solid ${C.blueBorder}`}}>
            <span style={{fontSize:12,color:C.muted}}>Showing {page*PER+1}–{Math.min((page+1)*PER,total)} of {total}</span>
            <div style={{display:"flex",gap:6}}>
              <Btn variant="outline" size="sm" onClick={()=>setPage(p=>Math.max(0,p-1))} style={{opacity:page===0?0.4:1}}>← Prev</Btn>
              <Btn variant="outline" size="sm" onClick={()=>setPage(p=>Math.min(pages-1,p+1))} style={{opacity:page>=pages-1?0.4:1}}>Next →</Btn>
            </div>
          </div>
        )}
      </Card>
      {showAdd&&user.role==="admin"&&(
        <Modal title="Add New Compliance Item" onClose={()=>setShowAdd(false)}>
          <div style={{marginBottom:14}}>
            <label style={{fontSize:12,fontWeight:800,color:C.navy,display:"block",marginBottom:8,letterSpacing:0.3,textTransform:"uppercase"}}>Applicable Categories <span style={{color:C.red}}>*</span></label>
            <div style={{display:"flex",gap:12}}>
              {[1,2,3].map(c=>(
                <label key={c} style={{display:"flex",alignItems:"center",gap:6,fontSize:13,cursor:"pointer",padding:"7px 12px",borderRadius:7,border:`1.5px solid ${newItem.category.includes(c)?C.blue:C.blueBorder}`,background:newItem.category.includes(c)?C.bluePale:"#fff",color:newItem.category.includes(c)?C.navy:C.muted,fontWeight:newItem.category.includes(c)?600:400,flex:1,justifyContent:"center"}}>
                  <input type="checkbox" checked={newItem.category.includes(c)} onChange={e=>setNewItem(n=>({...n,category:e.target.checked?[...n.category,c]:n.category.filter(x=>x!==c)}))} style={{display:"none"}}/>
                  Cat {c}
                </label>
              ))}
            </div>
          </div>
          <Input label="Due Date" type="date" value={newItem.dueDate} onChange={v=>setNewItem(n=>({...n,dueDate:v}))} required/>
          <div style={{marginBottom:14}}>
            <label style={{fontSize:12,fontWeight:800,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Compliance Explanation <span style={{color:C.red}}>*</span></label>
            <textarea value={newItem.explanation} onChange={e=>setNewItem(n=>({...n,explanation:e.target.value}))} rows={3} placeholder="Plain-language explanation of the obligation…" style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,resize:"vertical",boxSizing:"border-box",background:"#FAFCFF"}}/>
          </div>
          <Input label="Circular Reference Link" value={newItem.link} onChange={v=>setNewItem(n=>({...n,link:v}))} placeholder="https://www.sebi.gov.in/circulars/…"/>
          <div style={{display:"flex",gap:10,justifyContent:"flex-end",marginTop:16}}>
            <Btn variant="outline" onClick={()=>setShowAdd(false)}>Cancel</Btn>
            <Btn onClick={()=>setShowAdd(false)}>Save Item</Btn>
          </div>
        </Modal>
      )}
    </div>
  );
}

// ─── OTP FLOW (reusable) ──────────────────────────────────────────────────────
// Simulates OTP send/verify. In production this would call a real backend.
// ─── EMAIL LINK FLOW (reusable) ───────────────────────────────────────────────
// Simulates sending a password-reset link to the registered email.
// In production this would call a real backend to send an email with a secure token.
function EmailLinkFlow({title,emailDisplay,realEmail,userName="",type="login",onVerified,onCancel}){
  const [sent,setSent]=useState(false);
  const [sending,setSending]=useState(false);
  const [sendErr,setSendErr]=useState("");
  const [resendTimer,setResendTimer]=useState(0);

  const sendLink=async()=>{
    setSending(true);setSendErr("");
    const fn = type==="vault" ? sendVaultResetEmail : sendLoginResetEmail;
    const {ok,error:emailErr}=await fn({ toEmail: realEmail||emailDisplay, userName });
    setSending(false);
    if(!ok){setSendErr("Could not send email. ("+emailErr+")");return;}
    setSent(true);
    setResendTimer(60);
    const t=setInterval(()=>setResendTimer(v=>{if(v<=1){clearInterval(t);return 0;}return v-1;}),1000);
  };

  if(!sent) return(
    <div>
      <div style={{background:C.bluePale,border:`1px solid ${C.blueBorder}`,borderRadius:8,padding:"14px 16px",marginBottom:20,fontSize:13,color:C.navy,lineHeight:1.7}}>
        <strong>{title}</strong><br/>
        <span style={{fontSize:12,color:C.muted}}>A password reset link will be sent to your registered email address.</span>
      </div>
      <div style={{background:C.surface,borderRadius:8,padding:"11px 14px",marginBottom:20,display:"flex",alignItems:"center",gap:10,border:`1px solid ${C.blueBorder}`}}>
        <span style={{fontSize:18}}>📧</span>
        <div>
          <div style={{fontSize:11,color:C.muted,fontWeight:700,letterSpacing:0.4,textTransform:"uppercase",marginBottom:2}}>Reset link will be sent to</div>
          <div style={{fontSize:13,fontWeight:700,color:C.navy}}>{emailDisplay}</div>
        </div>
      </div>
      {sendErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{sendErr}</div>}
      <div style={{display:"flex",gap:10}}>
        <Btn variant="outline" onClick={onCancel} style={{opacity:sending?0.5:1}}>Cancel</Btn>
        <Btn onClick={sendLink} style={{flex:1,justifyContent:"center",opacity:sending?0.7:1}}>
          {sending?"Sending…":"Send Reset Link →"}
        </Btn>
      </div>
    </div>
  );

  return(
    <div>
      <div style={{background:C.greenBg,border:`1px solid ${C.green}33`,borderRadius:8,padding:"14px 16px",marginBottom:18,fontSize:13,color:C.green}}>
        <strong>✓ Reset link sent!</strong><br/>
        A reset link has been sent to <strong>{emailDisplay}</strong>. Check your inbox and click the link to reset your {type==="vault"?"vault password":"password"}.
      </div>
      <div style={{background:C.bluePale,border:`1px solid ${C.blueBorder}`,borderRadius:8,padding:"11px 14px",marginBottom:18,fontSize:12,color:C.navy,lineHeight:1.7}}>
        📬 <strong>Check your email inbox</strong> — the link is valid for <strong>30 minutes</strong>.<br/>
        <span style={{color:C.muted}}>Can't find it? Check your spam folder or resend below.</span>
      </div>
      <div style={{display:"flex",justifyContent:"space-between",alignItems:"center"}}>
        <button onClick={onCancel} style={{background:"none",border:"none",cursor:"pointer",color:C.muted,fontSize:12,padding:0}}>← Cancel</button>
        {resendTimer>0
          ?<span style={{fontSize:12,color:C.muted}}>Resend in {resendTimer}s</span>
          :<button onClick={sendLink} style={{background:"none",border:"none",cursor:"pointer",color:C.blue,fontSize:12,fontWeight:600,padding:0}}>Resend link</button>
        }
      </div>
    </div>
  );
}

// ─── PASSWORD VAULT ───────────────────────────────────────────────────────────
function Vault({initialVaultPin="",onVaultPinChange,vaultUnlocked,setVaultUnlocked,userEmail=""}){
  // ── Vault PIN gate ──
  const [vaultPin,setVaultPin]=useState(initialVaultPin); // saved PIN (empty = not set yet)
  const setAndPersistPin=pin=>{setVaultPin(pin);if(onVaultPinChange)onVaultPinChange(pin);};
  const [pinInput,setPinInput]=useState("");
  const [pinError,setPinError]=useState("");
  // vaultUnlocked and setVaultUnlocked come from App-level props — persists across navigation

  // Setup flow: "enter" | "forgot" | "newpin"
  const [vaultFlow,setVaultFlow]=useState("enter");
  const [setupError,setSetupError]=useState("");

  // After unlocking
  const [creds,setCreds]=useState({});
  const [visible,setVisible]=useState({});
  const [authModal,setAuthModal]=useState(null);
  const [authPw,setAuthPw]=useState("");
  const [copied,setCopied]=useState(null);
  const [customPortals,setCustomPortals]=useState([]);
  const [regOverrides,setRegOverrides]=useState({});

  const [showAddPortal,setShowAddPortal]=useState(false);
  const [newPortal,setNewPortal]=useState({name:"",url:"",user:"",pw:""});
  const [newPortalPwVisible,setNewPortalPwVisible]=useState(false);
  const [addFormErr,setAddFormErr]=useState("");
  const [editPortal,setEditPortal]=useState(null);
  const [editForm,setEditForm]=useState({name:"",url:"",user:"",pw:""});
  const [editPwVisible,setEditPwVisible]=useState(false);
  const [editFormErr,setEditFormErr]=useState("");
  const [deleteConfirm,setDeleteConfirm]=useState(null);

  const handleCopy=id=>{setCopied(id);setTimeout(()=>setCopied(null),2000);};
  const resolvePortal=p=>({...p,name:regOverrides[p.id]?.name??p.name,url:regOverrides[p.id]?.url??p.url});
  const resetAddForm=()=>{setNewPortal({name:"",url:"",user:"",pw:""});setNewPortalPwVisible(false);setAddFormErr("");};
  const handleAddPortal=()=>{
    if(!newPortal.name.trim()){setAddFormErr("Portal name is required.");return;}
    if(!newPortal.url.trim()){setAddFormErr("Portal link is required.");return;}
    const id="custom_"+Date.now();
    setCustomPortals(p=>[...p,{id,name:newPortal.name.trim(),url:newPortal.url.trim(),body:"Custom",purpose:"User-added portal",custom:true}]);
    setCreds(c=>({...c,[id]:{user:newPortal.user,pw:newPortal.pw}}));
    resetAddForm();setShowAddPortal(false);
  };
  const openEdit=p=>{
    const resolved=p.custom?p:resolvePortal(p);
    setEditPortal(p);
    setEditForm({name:resolved.name,url:resolved.url,user:creds[p.id]?.user||"",pw:creds[p.id]?.pw||""});
    setEditPwVisible(false);setEditFormErr("");
  };
  const handleSaveEdit=()=>{
    if(!editForm.name.trim()){setEditFormErr("Portal name is required.");return;}
    if(!editForm.url.trim()){setEditFormErr("Portal link is required.");return;}
    if(editPortal.custom){
      setCustomPortals(p=>p.map(x=>x.id===editPortal.id?{...x,name:editForm.name.trim(),url:editForm.url.trim()}:x));
      setCreds(c=>({...c,[editPortal.id]:{user:editForm.user,pw:editForm.pw}}));
    } else {
      setRegOverrides(o=>({...o,[editPortal.id]:{name:editForm.name.trim(),url:editForm.url.trim()}}));
      setCreds(c=>({...c,[editPortal.id]:{user:editForm.user,pw:editForm.pw}}));
    }
    setEditPortal(null);
  };
  const handleDeletePortal=id=>{
    setCustomPortals(p=>p.filter(x=>x.id!==id));
    setCreds(c=>{const n={...c};delete n[id];return n;});
    setVisible(v=>{const n={...v};delete n[id];return n;});
    setDeleteConfirm(null);
  };

  // ── PIN Gate UI ──
  if(!vaultUnlocked){
    // SETUP FLOW — no PIN set yet (single step, no confirm)
    if(!vaultPin){
      return(
        <div style={{padding:28}}>
          <PageHeader title="Password Vault" subtitle="Secure portal credential manager"/>
          <div style={{maxWidth:400,margin:"0 auto",marginTop:24}}>
            <Card>
              <div style={{textAlign:"center",marginBottom:22}}>
                <div style={{fontSize:40,marginBottom:10}}>🔐</div>
                <h3 style={{margin:0,fontSize:16,fontWeight:800,color:C.navy}}>Set Up Vault Password</h3>
                <p style={{fontSize:13,color:C.muted,margin:"8px 0 0",lineHeight:1.6}}>Create a password to protect your Password Vault. This is separate from your login password and can only be changed via a reset link sent to your registered email.</p>
              </div>
              <div style={{marginBottom:14}}>
                <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>Create Vault Password</label>
                <input type="password" value={pinInput} onChange={e=>setPinInput(e.target.value)} placeholder="Minimum 4 characters" maxLength={20} autoFocus
                  style={{width:"100%",padding:"10px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF",boxSizing:"border-box"}}
                  onKeyDown={e=>e.key==="Enter"&&pinInput.length>=4&&(setAndPersistPin(pinInput),setVaultUnlocked(true),setPinInput(""))}/>
              </div>
              {setupError&&<div style={{background:C.redBg,color:C.red,padding:"8px 12px",borderRadius:6,fontSize:12,marginBottom:12,fontWeight:600}}>{setupError}</div>}
              <Btn onClick={()=>{
                if(pinInput.length<4){setSetupError("Password must be at least 4 characters.");return;}
                setAndPersistPin(pinInput);setVaultUnlocked(true);setPinInput("");setSetupError("");
              }} size="lg" style={{width:"100%",justifyContent:"center"}}>Activate Vault →</Btn>
            </Card>
          </div>
        </div>
      );
    }

    // ENTER PASSWORD FLOW
    return(
      <div style={{padding:28}}>
        <PageHeader title="Password Vault" subtitle="Secure portal credential manager"/>
        <div style={{maxWidth:400,margin:"0 auto",marginTop:24}}>
          <Card>
            <div style={{textAlign:"center",marginBottom:22}}>
              <div style={{fontSize:40,marginBottom:10}}>🔒</div>
              <h3 style={{margin:0,fontSize:16,fontWeight:800,color:C.navy}}>Vault Locked</h3>
              <p style={{fontSize:13,color:C.muted,margin:"8px 0 0"}}>Enter your vault password to access your stored credentials.</p>
            </div>
            {vaultFlow==="forgot"?(
              <EmailLinkFlow
                title="Reset Vault Password"
                emailDisplay={userEmail?userEmail.replace(/(.{3}).+(@.+)/,"$1***$2"):"comp***@pinnaclevc.in"}
                realEmail={userEmail}
                type="vault"
                onVerified={()=>{
                  setAndPersistPin("");setVaultFlow("newpin");setPinInput("");setPinError("");
                }}
                onCancel={()=>{setVaultFlow("enter");setPinInput("");setPinError("");}}
              />
            ):vaultFlow==="newpin"?(
              <>
                <div style={{background:C.greenBg,border:`1px solid ${C.green}33`,borderRadius:8,padding:"10px 14px",marginBottom:16,fontSize:13,color:C.green,fontWeight:700}}>✓ Link verified! Set your new vault password.</div>
                <div style={{marginBottom:14}}>
                  <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>New Vault Password</label>
                  <input type="password" value={pinInput} onChange={e=>setPinInput(e.target.value)} placeholder="Minimum 4 characters" autoFocus
                    style={{width:"100%",padding:"10px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF",boxSizing:"border-box"}}/>
                </div>
                {pinError&&<div style={{background:C.redBg,color:C.red,padding:"8px 12px",borderRadius:6,fontSize:12,marginBottom:12,fontWeight:600}}>{pinError}</div>}
                <div style={{display:"flex",gap:10}}>
                  <Btn variant="outline" onClick={()=>{setVaultFlow("enter");setPinInput("");}}>Cancel</Btn>
                  <Btn onClick={()=>{
                    if(pinInput.length<4){setPinError("Password must be at least 4 characters.");return;}
                    setAndPersistPin(pinInput);setVaultUnlocked(true);setVaultFlow("enter");setPinInput("");setPinError("");
                  }} style={{flex:1,justifyContent:"center"}}>Set New Password</Btn>
                </div>
              </>
            ):(
              <>
                <div style={{marginBottom:14}}>
                  <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>Vault Password</label>
                  <input type="password" value={pinInput} onChange={e=>setPinInput(e.target.value)} placeholder="Enter your vault password" autoFocus
                    style={{width:"100%",padding:"10px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF",boxSizing:"border-box"}}
                    onKeyDown={e=>e.key==="Enter"&&(pinInput===vaultPin?(setVaultUnlocked(true),setPinInput("")):setPinError("Incorrect password. Please try again."))}/>
                </div>
                {pinError&&<div style={{background:C.redBg,color:C.red,padding:"8px 12px",borderRadius:6,fontSize:12,marginBottom:12,fontWeight:600}}>{pinError}</div>}
                <Btn onClick={()=>{
                  if(pinInput===vaultPin){setVaultUnlocked(true);setPinInput("");setPinError("");}
                  else setPinError("Incorrect password. Please try again.");
                }} size="lg" style={{width:"100%",justifyContent:"center"}}>Unlock Vault</Btn>
                <button onClick={()=>{setVaultFlow("forgot");setPinInput("");setPinError("");}}
                  style={{width:"100%",marginTop:12,background:"none",border:"none",cursor:"pointer",color:C.blue,fontSize:12,fontWeight:600,textAlign:"center",padding:4}}>
                  Forgot vault password? Reset via email link
                </button>
              </>
            )}
          </Card>
        </div>
      </div>
    );
  }

  // ─── VAULT CONTENT (unlocked) ─────────────────────────────────────────────
  const allPortals=[...vaultPortals,...customPortals];

  const PortalCard=({p})=>{
    const rp=p.custom?p:resolvePortal(p);
    const isEdited=!p.custom&&!!regOverrides[p.id];
    return(
      <Card style={{padding:16,position:"relative"}}>
        <div style={{display:"flex",alignItems:"flex-start",justifyContent:"space-between",marginBottom:12}}>
          <div style={{flex:1,minWidth:0}}>
            <div style={{display:"flex",alignItems:"center",gap:7,marginBottom:2}}>
              <h3 style={{margin:0,fontSize:13,fontWeight:700,color:C.navy,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}>{rp.name}</h3>
              {p.custom&&<span style={{fontSize:9,fontWeight:800,background:C.bluePale,color:C.blue,padding:"2px 7px",borderRadius:10,letterSpacing:0.4,flexShrink:0,textTransform:"uppercase"}}>Custom</span>}
              {isEdited&&<span style={{fontSize:9,fontWeight:800,background:"#FFF8E6",color:C.amber,padding:"2px 7px",borderRadius:10,letterSpacing:0.4,flexShrink:0,textTransform:"uppercase",border:`1px solid ${C.amber}33`}}>Edited</span>}
            </div>
            <div style={{fontSize:11,color:C.muted}}>{p.body} · {p.purpose}</div>
          </div>
          <div style={{display:"flex",alignItems:"center",gap:5,flexShrink:0,marginLeft:8}}>
            <a href={rp.url.startsWith("http")?rp.url:"https://"+rp.url} target="_blank" rel="noreferrer"
              style={{fontSize:11,color:C.blueLight,fontWeight:700,textDecoration:"none",padding:"3px 9px",border:`1px solid ${C.blueBorder}`,borderRadius:5}}>Open ↗</a>
            <button onClick={()=>openEdit(p)} title="Edit portal"
              style={{padding:"3px 9px",borderRadius:5,border:`1px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:11,color:C.blue,fontWeight:700,letterSpacing:0.2}}>Edit</button>
            {p.custom&&(
              <button onClick={()=>setDeleteConfirm(p.id)} title="Remove portal"
                style={{padding:"3px 7px",borderRadius:5,border:`1px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:13,color:C.muted,lineHeight:1}}>×</button>
            )}
          </div>
        </div>
        <input placeholder="Username / ID" value={creds[p.id]?.user||""}
          onChange={e=>setCreds(c=>({...c,[p.id]:{...c[p.id],user:e.target.value}}))}
          style={{width:"100%",padding:"7px 10px",borderRadius:7,border:`1px solid ${C.blueBorder}`,fontSize:13,color:C.text,marginBottom:7,boxSizing:"border-box",background:"#FAFCFF"}}/>
        <div style={{display:"flex",gap:6}}>
          <input type={visible[p.id]?"text":"password"} placeholder="Password" value={creds[p.id]?.pw||""}
            onChange={e=>setCreds(c=>({...c,[p.id]:{...c[p.id],pw:e.target.value}}))}
            style={{flex:1,padding:"7px 10px",borderRadius:7,border:`1px solid ${C.blueBorder}`,fontSize:13,color:C.text,background:"#FAFCFF"}}/>
          <button onClick={()=>visible[p.id]?setVisible(v=>({...v,[p.id]:false})):setAuthModal(p.id)}
            style={{padding:"7px 10px",borderRadius:7,border:`1px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:12,color:C.muted}}
            title={visible[p.id]?"Hide password":"Show password"}>{visible[p.id]?"🙈":"👁"}</button>
          <button onClick={()=>handleCopy(p.id)}
            style={{padding:"7px 12px",borderRadius:7,border:`1px solid ${C.blueBorder}`,background:copied===p.id?C.greenBg:"#fff",cursor:"pointer",fontSize:12,color:copied===p.id?C.green:C.muted,fontWeight:700,minWidth:52}}>
            {copied===p.id?"✓ OK":"Copy"}</button>
        </div>
      </Card>
    );
  };

  // Shared password field used in both add & edit modals
  const PwField=({value,onChange,visible:show,onToggle,placeholder="Enter portal password"})=>(
    <div style={{marginBottom:18}}>
      <label style={{fontSize:12,fontWeight:800,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Password</label>
      <div style={{display:"flex",gap:6}}>
        <input type={show?"text":"password"} value={value} onChange={e=>onChange(e.target.value)} placeholder={placeholder}
          style={{flex:1,padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF"}}/>
        <button onClick={onToggle}
          style={{padding:"9px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:14,color:C.muted}}>
          {show?"🙈":"👁"}</button>
      </div>
    </div>
  );

  return(
    <div style={{padding:28}}>
      <PageHeader
        title="Password Vault"
        subtitle="Securely store and access your portal credentials. All passwords encrypted with AES-256."
        action={<div style={{display:"flex",gap:8}}><Btn variant="outline" onClick={()=>{setVaultUnlocked(false);setPinInput("");setVaultFlow("enter");}} size="sm">🔒 Lock</Btn><Btn onClick={()=>{resetAddForm();setShowAddPortal(true);}} size="sm">+ Add Portal</Btn></div>}
      />

      {/* Security banner */}
      <div style={{background:`linear-gradient(110deg,${C.navy} 0%,${C.navyMid} 100%)`,borderRadius:10,padding:"14px 20px",marginBottom:20,display:"flex",alignItems:"center",gap:14,boxShadow:`0 4px 20px rgba(7,26,62,0.18)`}}>
        <span style={{fontSize:22,flexShrink:0}}>🔐</span>
        <div style={{flex:1}}>
          <div style={{color:"#fff",fontSize:13,fontWeight:700,marginBottom:1}}>AES-256 Encrypted Vault</div>
          <div style={{color:"rgba(255,255,255,0.45)",fontSize:12}}>Credentials are stored locally in your session only. Never transmitted in plaintext. Re-authentication required to reveal passwords.</div>
        </div>
        <div style={{color:"rgba(255,255,255,0.35)",fontSize:12,textAlign:"right",flexShrink:0}}>
          <div style={{fontWeight:700,color:"rgba(255,255,255,0.7)",fontSize:20,lineHeight:1}}>{allPortals.length}</div>
          <div>portals saved</div>
        </div>
      </div>

      {/* Regulatory Portals */}
      <div style={{fontSize:11,fontWeight:800,color:C.muted,letterSpacing:0.6,textTransform:"uppercase",marginBottom:12}}>Regulatory Portals</div>
      <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:14,marginBottom:customPortals.length>0?24:16}}>
        {vaultPortals.map(p=><PortalCard key={p.id} p={p}/>)}
      </div>

      {/* Custom Portals */}
      {customPortals.length>0&&(<>
        <div style={{fontSize:11,fontWeight:800,color:C.muted,letterSpacing:0.6,textTransform:"uppercase",marginBottom:12}}>My Custom Portals</div>
        <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:14}}>
          {customPortals.map(p=><PortalCard key={p.id} p={p}/>)}
        </div>
      </>)}

      {/* ── Add Portal Modal ── */}
      {showAddPortal&&(
        <Modal title="Add Custom Portal" onClose={()=>{setShowAddPortal(false);resetAddForm();}}>
          <p style={{fontSize:13,color:C.muted,margin:"0 0 18px",lineHeight:1.6}}>Save credentials for any portal or website. All entries are stored securely in your vault.</p>
          {addFormErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{addFormErr}</div>}
          <Input label="Portal Name" value={newPortal.name} onChange={v=>setNewPortal(p=>({...p,name:v}))} placeholder="e.g. MCA21, NSE Listing, CERSAI" required/>
          <Input label="Portal Link" value={newPortal.url} onChange={v=>setNewPortal(p=>({...p,url:v}))} placeholder="https://www.example.gov.in" required/>
          <Input label="Username / ID" value={newPortal.user} onChange={v=>setNewPortal(p=>({...p,user:v}))} placeholder="Login username or user ID"/>
          <PwField value={newPortal.pw} onChange={v=>setNewPortal(p=>({...p,pw:v}))} visible={newPortalPwVisible} onToggle={()=>setNewPortalPwVisible(v=>!v)}/>
          <div style={{display:"flex",gap:10,justifyContent:"flex-end"}}>
            <Btn variant="outline" onClick={()=>{setShowAddPortal(false);resetAddForm();}}>Cancel</Btn>
            <Btn onClick={handleAddPortal}>Save to Vault</Btn>
          </div>
        </Modal>
      )}

      {/* ── Edit Portal Modal ── */}
      {editPortal&&(
        <Modal title={`Edit — ${(editPortal.custom?editPortal:resolvePortal(editPortal)).name}`} onClose={()=>setEditPortal(null)}>
          {!editPortal.custom&&(
            <div style={{background:C.bluePale,border:`1px solid ${C.blueBorder}`,borderRadius:8,padding:"10px 14px",marginBottom:16,fontSize:12,color:C.navy,lineHeight:1.6}}>
              <strong>Regulatory portal:</strong> You can update the display name and link for this session. Use "Reset to default" to restore the original values.
            </div>
          )}
          {editFormErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{editFormErr}</div>}
          <Input label="Portal Name" value={editForm.name} onChange={v=>setEditForm(f=>({...f,name:v}))} placeholder="Portal name" required/>
          <Input label="Portal Link" value={editForm.url} onChange={v=>setEditForm(f=>({...f,url:v}))} placeholder="https://www.example.gov.in" required/>
          <Input label="Username / ID" value={editForm.user} onChange={v=>setEditForm(f=>({...f,user:v}))} placeholder="Login username or user ID"/>
          <PwField value={editForm.pw} onChange={v=>setEditForm(f=>({...f,pw:v}))} visible={editPwVisible} onToggle={()=>setEditPwVisible(v=>!v)} placeholder="Leave blank to keep current password"/>
          <div style={{display:"flex",justifyContent:"space-between",alignItems:"center",marginTop:4}}>
            {!editPortal.custom&&regOverrides[editPortal.id]?(
              <button onClick={()=>{setRegOverrides(o=>{const n={...o};delete n[editPortal.id];return n;});setEditPortal(null);}}
                style={{fontSize:12,color:C.muted,background:"none",border:"none",cursor:"pointer",textDecoration:"underline",padding:0}}>
                Reset to default
              </button>
            ):<span/>}
            <div style={{display:"flex",gap:10}}>
              <Btn variant="outline" onClick={()=>setEditPortal(null)}>Cancel</Btn>
              <Btn onClick={handleSaveEdit}>Save Changes</Btn>
            </div>
          </div>
        </Modal>
      )}

      {/* ── Delete Confirm Modal ── */}
      {deleteConfirm&&(
        <Modal title="Remove Portal" onClose={()=>setDeleteConfirm(null)}>
          <p style={{fontSize:14,color:C.muted,marginBottom:20,lineHeight:1.6}}>Are you sure you want to remove <strong style={{color:C.navy}}>{customPortals.find(p=>p.id===deleteConfirm)?.name}</strong> from your vault? This cannot be undone.</p>
          <div style={{display:"flex",gap:10,justifyContent:"flex-end"}}>
            <Btn variant="outline" onClick={()=>setDeleteConfirm(null)}>Keep It</Btn>
            <Btn variant="danger" onClick={()=>handleDeletePortal(deleteConfirm)}>Yes, Remove</Btn>
          </div>
        </Modal>
      )}

      {/* ── Auth / Reveal Modal ── */}
      {authModal&&(
        <Modal title="Verify Identity" onClose={()=>{setAuthModal(null);setAuthPw("");}}>
          <p style={{fontSize:14,color:C.muted,marginBottom:16,lineHeight:1.6}}>Re-enter your AIF NEXT password to reveal this credential.</p>
          <Input type="password" label="AIF NEXT Password" value={authPw} onChange={setAuthPw} placeholder="Enter your platform password"/>
          <div style={{display:"flex",gap:10,justifyContent:"flex-end"}}>
            <Btn variant="outline" onClick={()=>{setAuthModal(null);setAuthPw("");}}>Cancel</Btn>
            <Btn onClick={()=>{if(authPw==="User@1234"||authPw==="Admin@123"){setVisible(v=>({...v,[authModal]:true}));setAuthModal(null);setAuthPw("");}}}>Verify & Show</Btn>
          </div>
        </Modal>
      )}
    </div>
  );
}

// ─── MY COMPLIANCE ────────────────────────────────────────────────────────────
function CustomCompliance({items,setItems}){
  const [showAdd,setShowAdd]=useState(false);
  const [form,setForm]=useState({dueDate:"",explanation:"",link:""});
  const set=k=>v=>setForm(f=>({...f,[k]:v}));
  return(
    <div style={{padding:28}}>
      <PageHeader title="My Compliance Items" subtitle="Private obligations visible only to you" action={<Btn onClick={()=>setShowAdd(true)} size="sm">+ Add Item</Btn>}/>
      <Card style={{padding:0,overflow:"hidden"}}>
        <table style={{width:"100%",borderCollapse:"collapse"}}>
          <thead>
            <tr style={{background:C.surface}}>
              {["DUE DATE","DESCRIPTION","REFERENCE","STATUS","ACTION"].map(h=><th key={h} style={{padding:"11px 14px",textAlign:"left",fontSize:11,fontWeight:700,color:C.muted,letterSpacing:0.5,borderBottom:`1px solid ${C.blueBorder}`}}>{h}</th>)}
            </tr>
          </thead>
          <tbody>
            {items.length===0&&(
              <tr><td colSpan={5} style={{padding:"36px 14px",textAlign:"center",color:C.muted,fontSize:14}}>
                <div style={{fontSize:28,marginBottom:8}}>✏️</div>
                No custom compliance items yet. Add your first one above.
              </td></tr>
            )}
            {items.map((item,idx)=>(
              <tr key={item.id} style={{background:idx%2===0?"#fff":"#FAFCFF",transition:"background 0.1s"}}
                onMouseEnter={e=>e.currentTarget.style.background=C.bluePale}
                onMouseLeave={e=>e.currentTarget.style.background=idx%2===0?"#fff":"#FAFCFF"}>
                <td style={{padding:"12px 14px",fontSize:12,fontWeight:800,color:C.navy,borderBottom:`1px solid ${C.surface}`,whiteSpace:"nowrap"}}>{new Date(item.dueDate).toLocaleDateString("en-IN",{day:"numeric",month:"short",year:"numeric"})}</td>
                <td style={{padding:"12px 14px",fontSize:13,color:C.text,maxWidth:280,borderBottom:`1px solid ${C.surface}`,lineHeight:1.4}}>{item.explanation}</td>
                <td style={{padding:"12px 14px",borderBottom:`1px solid ${C.surface}`}}>{item.link?<a href={item.link} style={{fontSize:11,color:C.blueLight,fontWeight:700}}>View ↗</a>:<span style={{fontSize:12,color:C.muted}}>—</span>}</td>
                <td style={{padding:"12px 14px",borderBottom:`1px solid ${C.surface}`}}><StatusBadge status={item.done?"done":item.status}/></td>
                <td style={{padding:"12px 14px",borderBottom:`1px solid ${C.surface}`}}>
                  <div style={{display:"flex",gap:6}}>
                    {!item.done&&<button onClick={()=>setItems(a=>a.map(x=>x.id===item.id?{...x,done:true}:x))} style={{padding:"4px 10px",borderRadius:6,border:`1.5px solid ${C.green}`,background:"#fff",color:C.green,fontSize:11,fontWeight:700,cursor:"pointer",letterSpacing:0.2}}>Done</button>}
                    <button onClick={()=>setItems(a=>a.filter(x=>x.id!==item.id))} style={{padding:"4px 10px",borderRadius:6,border:`1.5px solid ${C.blueBorder}`,background:"#fff",color:C.muted,fontSize:11,fontWeight:700,cursor:"pointer"}}>Remove</button>
                  </div>
                </td>
              </tr>
            ))}
          </tbody>
        </table>
      </Card>
      {showAdd&&<Modal title="Add My Compliance Item" onClose={()=>setShowAdd(false)}>
        <Input label="Due Date" type="date" value={form.dueDate} onChange={set("dueDate")} required/>
        <div style={{marginBottom:14}}>
          <label style={{fontSize:12,fontWeight:800,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Description <span style={{color:C.red}}>*</span></label>
          <textarea value={form.explanation} onChange={e=>set("explanation")(e.target.value)} rows={3} placeholder="Describe the compliance obligation…" style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,resize:"vertical",boxSizing:"border-box",background:"#FAFCFF"}}/>
        </div>
        <Input label="Reference Link (optional)" value={form.link} onChange={set("link")} placeholder="Any supporting URL"/>
        <div style={{display:"flex",gap:10,justifyContent:"flex-end",marginTop:16}}>
          <Btn variant="outline" onClick={()=>setShowAdd(false)}>Cancel</Btn>
          <Btn onClick={()=>{setItems(a=>[...a,{id:Date.now(),...form,status:"upcoming",done:false}]);setShowAdd(false);setForm({dueDate:"",explanation:"",link:""});}}>Save Item</Btn>
        </div>
      </Modal>}
    </div>
  );
}

// ─── ASSISTANCE ───────────────────────────────────────────────────────────────
function Assistance({user,adminEmail}){
  const [form,setForm]=useState({subject:"",message:"",files:[]});
  const [sent,setSent]=useState(false);
  const [sending,setSending]=useState(false);
  const [sendErr,setSendErr]=useState("");
  const set=k=>v=>setForm(f=>({...f,[k]:v}));

  const handleFileChange=e=>{
    const picked=Array.from(e.target.files||[]);
    setForm(f=>({...f,files:[...f.files,...picked].slice(0,5)}));
  };
  const removeFile=i=>setForm(f=>({...f,files:f.files.filter((_,idx)=>idx!==i)}));

  const handleSubmit=async()=>{
    if(!form.subject.trim()||!form.message.trim()){setSendErr("Please fill in both subject and message.");return;}
    setSending(true);setSendErr("");
    const {ok,error:emailErr}=await sendEmail({
      toEmail:      adminEmail||BREVO.adminEmail,
      subject:      form.subject.trim(),
      message:      form.message.trim() + (form.files.length>0 ? `\n\nAttachments mentioned: ${form.files.map(f=>f.name).join(", ")}` : ""),
      replyTo:      user.email,
      fromName:     user.name||user.email,
      fundCategory: categoryLabel(user.category),
      sebiNo:       user.sebi||"—",
    });
    setSending(false);
    if(!ok){setSendErr("Could not send query. ("+emailErr+")");return;}
    setSent(true);
  };

  if(sent) return(
    <div style={{padding:28}}>
      <div style={{maxWidth:480,margin:"60px auto",textAlign:"center"}}>
        <div style={{width:60,height:60,borderRadius:"50%",background:C.greenBg,border:`2px solid ${C.green}`,display:"flex",alignItems:"center",justifyContent:"center",fontSize:22,margin:"0 auto 16px",color:C.green,fontWeight:700}}>✓</div>
        <h2 style={{color:C.navy,fontWeight:800,letterSpacing:-0.3}}>Query Submitted</h2>
        <p style={{color:C.muted,fontSize:14,lineHeight:1.6}}>
          Your query has been sent to the compliance team at <strong style={{color:C.navy}}>{adminEmail||"admin@aifnext.com"}</strong>. We'll respond within 24 hours.
        </p>
        <Btn onClick={()=>{setSent(false);setForm({subject:"",message:"",files:[]});}} style={{marginTop:16}}>Submit Another</Btn>
      </div>
    </div>
  );
  return(
    <div style={{padding:28}}>
      <PageHeader title="Need Assistance?" subtitle="Send your compliance query to the platform advisor"/>
      <div style={{maxWidth:580}}>
        <Card>
          <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:12,marginBottom:18,background:C.surface,borderRadius:8,padding:"12px 14px",border:`1px solid ${C.blueBorder}`}}>
            {[["Fund Name",user.name],["Category",categoryLabel(user.category)],["Email",user.email],["SEBI No.",user.sebi]].map(([k,v])=>(
              <div key={k}>
                <div style={{fontSize:10,color:C.muted,fontWeight:700,letterSpacing:0.4,textTransform:"uppercase",marginBottom:2}}>{k}</div>
                <div style={{fontSize:13,color:C.navy,fontWeight:600}}>{v||"—"}</div>
              </div>
            ))}
          </div>
          {adminEmail&&(
            <div style={{background:C.bluePale,border:`1px solid ${C.blueBorder}`,borderRadius:8,padding:"9px 14px",marginBottom:16,fontSize:12,color:C.navy,display:"flex",alignItems:"center",gap:8}}>
              <span>✉️</span>
              <span>Your query will be sent to: <strong>{adminEmail}</strong></span>
            </div>
          )}
          <Input label="Subject" value={form.subject} onChange={set("subject")} placeholder="Brief description of your query" required/>
          <div style={{marginBottom:14}}>
            <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Message <span style={{color:C.red}}>*</span></label>
            <textarea value={form.message} onChange={e=>set("message")(e.target.value)} rows={5} placeholder="Describe your query in detail…" style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,resize:"vertical",boxSizing:"border-box",background:"#FAFCFF"}}/>
          </div>

          {/* Attachment section with real file picker */}
          <div style={{marginBottom:18}}>
            <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:8,letterSpacing:0.3,textTransform:"uppercase"}}>Attachments <span style={{fontSize:11,color:C.muted,fontWeight:400,textTransform:"none"}}>— optional, up to 5 files</span></label>
            {form.files.length>0&&(
              <div style={{marginBottom:10,display:"flex",flexDirection:"column",gap:6}}>
                {form.files.map((f,i)=>(
                  <div key={i} style={{display:"flex",alignItems:"center",gap:10,padding:"7px 12px",background:C.surface,borderRadius:7,border:`1px solid ${C.blueBorder}`}}>
                    <span style={{fontSize:16}}>📄</span>
                    <span style={{flex:1,fontSize:13,color:C.text,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}}>{f.name}</span>
                    <span style={{fontSize:11,color:C.muted,flexShrink:0}}>{(f.size/1024).toFixed(0)} KB</span>
                    <button onClick={()=>removeFile(i)} style={{background:"none",border:"none",color:C.red,cursor:"pointer",fontSize:16,lineHeight:1,flexShrink:0}}>×</button>
                  </div>
                ))}
              </div>
            )}
            {form.files.length<5&&(
              <label style={{display:"inline-flex",alignItems:"center",gap:8,padding:"9px 18px",borderRadius:7,border:`1.5px dashed ${C.blueBorder}`,background:"#FAFCFF",cursor:"pointer",fontSize:13,color:C.blue,fontWeight:600,transition:"all 0.15s",width:"100%",justifyContent:"center",boxSizing:"border-box"}}
                onMouseEnter={e=>{e.currentTarget.style.background=C.bluePale;e.currentTarget.style.borderColor=C.blue;}}
                onMouseLeave={e=>{e.currentTarget.style.background="#FAFCFF";e.currentTarget.style.borderColor=C.blueBorder;}}>
                <span style={{fontSize:18}}>📎</span>
                Click to attach files — documents, PDFs, images
                <input type="file" multiple accept=".pdf,.doc,.docx,.xls,.xlsx,.png,.jpg,.jpeg,.txt,.csv" onChange={handleFileChange} style={{display:"none"}}/>
              </label>
            )}
          </div>

          {sendErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{sendErr}</div>}
          <Btn onClick={handleSubmit} size="lg" style={{width:"100%",justifyContent:"center",marginTop:4,opacity:sending?0.7:1}}>
            {sending?"Sending…":"Submit Query →"}
          </Btn>
        </Card>
      </div>
    </div>
  );
}

// ─── NOTIFICATIONS ────────────────────────────────────────────────────────────
function Notifications({broadcasts=[],userRole,onDelete}){
  const [emails,setEmails]=useState(["compliance@pinnaclevc.in","cfo@pinnaclevc.in"]);
  const [newEmail,setNewEmail]=useState("");
  return(
    <div style={{padding:28}}>
      <PageHeader title="Notifications" subtitle="Manage your email alerts and view messages from the platform admin"/>
      <div style={{maxWidth:600}}>
        {/* Admin broadcasts */}
        {broadcasts.length>0&&(
          <div style={{marginBottom:24}}>
            <div style={{fontSize:11,fontWeight:800,color:C.muted,letterSpacing:0.6,textTransform:"uppercase",marginBottom:12}}>Messages from Admin</div>
            <div style={{display:"flex",flexDirection:"column",gap:10}}>
              {broadcasts.map((b,i)=>(
                <div key={i} style={{background:"#fff",border:`1px solid ${C.blueBorder}`,borderRadius:10,padding:"14px 18px",borderLeft:`4px solid ${C.blue}`}}>
                  <div style={{display:"flex",justifyContent:"space-between",alignItems:"flex-start",marginBottom:6}}>
                    <div style={{fontSize:13,fontWeight:700,color:C.navy}}>{b.subject}</div>
                    <div style={{display:"flex",alignItems:"center",gap:10,flexShrink:0,marginLeft:12}}>
                      <div style={{fontSize:11,color:C.muted}}>{b.sentAt}</div>
                      {userRole==="admin"&&onDelete&&(
                        <button onClick={()=>onDelete(i)} title="Delete notification"
                          style={{background:"none",border:`1px solid ${C.red}33`,borderRadius:5,color:C.red,cursor:"pointer",fontSize:11,fontWeight:700,padding:"2px 8px",lineHeight:1.5}}>Delete</button>
                      )}
                    </div>
                  </div>
                  <div style={{fontSize:13,color:C.text,lineHeight:1.6}}>{b.message}</div>
                </div>
              ))}
            </div>
          </div>
        )}
        {broadcasts.length===0&&(
          <div style={{background:"#fff",border:`1px dashed ${C.blueBorder}`,borderRadius:10,padding:"20px 18px",marginBottom:24,textAlign:"center",color:C.muted,fontSize:13}}>
            <div style={{fontSize:24,marginBottom:8}}>🔔</div>
            No messages from the admin yet.
          </div>
        )}

        {/* Email management */}
        <div style={{fontSize:11,fontWeight:800,color:C.muted,letterSpacing:0.6,textTransform:"uppercase",marginBottom:12}}>Notification Emails</div>
        <Card>
          <p style={{fontSize:13,color:C.muted,margin:"0 0 16px",lineHeight:1.6}}>All listed addresses receive weekly (30-day) and daily (7-day) reminders. Up to 5 additional emails allowed.</p>
          {emails.map((e,i)=>(
            <div key={e} style={{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"11px 14px",border:`1px solid ${C.blueBorder}`,borderRadius:8,marginBottom:7,background:i===0?C.surface:"#fff",borderLeft:i===0?`3px solid ${C.blue}`:"1px solid "+C.blueBorder}}>
              <div style={{display:"flex",alignItems:"center",gap:10}}>
                <span style={{fontSize:16}}>✉️</span>
                <span style={{fontSize:14,color:C.text,fontWeight:i===0?700:400}}>{e}</span>
                {i===0&&<span style={{fontSize:10,background:C.blue,color:"#fff",padding:"2px 8px",borderRadius:10,fontWeight:700,letterSpacing:0.3}}>PRIMARY</span>}
              </div>
              {i!==0&&<button onClick={()=>setEmails(a=>a.filter(x=>x!==e))} style={{background:"none",border:"none",color:C.red,cursor:"pointer",fontSize:18,lineHeight:1,padding:"0 4px"}}>×</button>}
            </div>
          ))}
          {emails.length<6&&(
            <div style={{display:"flex",gap:10,marginTop:14}}>
              <input value={newEmail} onChange={e=>setNewEmail(e.target.value)} placeholder="Add email address…" style={{flex:1,padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF"}}
                onKeyDown={e=>e.key==="Enter"&&newEmail&&!emails.includes(newEmail)&&(setEmails(a=>[...a,newEmail]),setNewEmail(""))}/>
              <Btn onClick={()=>{if(newEmail&&!emails.includes(newEmail)){setEmails(a=>[...a,newEmail]);setNewEmail("");}}}>Add</Btn>
            </div>
          )}
          <div style={{marginTop:18,padding:14,background:C.bluePale,borderRadius:8,fontSize:13,color:C.navy,border:`1px solid ${C.blueBorder}`}}>
            <strong>Reminder schedule:</strong> Items due in &gt;7 days → weekly email Monday. Items due ≤7 days → daily morning email. Once marked Done, reminders stop immediately.
          </div>
        </Card>
      </div>
    </div>
  );
}

// ─── ADMIN EMAIL SETTINGS ─────────────────────────────────────────────────────
// Saves Zoho SMTP config to localStorage "aif_smtp"
// Backend server.js reads these and sends via nodemailer
function SmtpSettings(){
  const defaultConfig={
    zohoHost:     "smtp.zoho.in",
    zohoPort:     "587",
    zohoUser:     "",
    zohoPw:       "",
    zohoFrom:     "contact@aifnext.com",
    zohoFromName: "AIF NEXT Platform",
    adminEmail:   "contact@aifnext.com",
  };
  const load=()=>{try{const s=localStorage.getItem("aif_smtp");return s?{...defaultConfig,...JSON.parse(s)}:defaultConfig;}catch{return defaultConfig;}};
  const [form,setForm]=useState(load);
  const [saved,setSaved]=useState(false);
  const [testing,setTesting]=useState(false);
  const [testResult,setTestResult]=useState(null);
  const set=k=>v=>setForm(f=>({...f,[k]:v}));

  const handleSave=()=>{
    try{localStorage.setItem("aif_smtp",JSON.stringify(form));}catch(e){}
    window._smtpConfig=form;
    setSaved(true);
    setTimeout(()=>setSaved(false),3000);
  };

  const handleTest=async()=>{
    setTesting(true);setTestResult(null);
    window._smtpConfig=form;
    const {ok,error}=await sendEmail({
      toEmail: form.adminEmail||EMAIL_CFG.adminEmail,
      subject: "AIF NEXT — Test Email",
      message: "This is a test email from AIF NEXT Compliance Platform.\n\nIf you received this, your Zoho SMTP configuration is working correctly.",
    });
    setTesting(false);
    setTestResult(ok?"✓ Test email sent successfully! Check your inbox.":"✗ Failed: "+(error||"Unknown error"));
  };

  return(
    <div style={{padding:28}}>
      <PageHeader title="Email Settings" subtitle="Configure Zoho SMTP for password resets, notifications and assistance queries"/>
      <div style={{maxWidth:540}}>
        <Card style={{marginBottom:18}}>
          <div style={{fontSize:13,fontWeight:700,color:C.navy,marginBottom:14,textTransform:"uppercase",letterSpacing:0.4}}>🔷 Zoho SMTP Configuration</div>
          <div style={{display:"grid",gridTemplateColumns:"2fr 1fr",gap:14}}>
            <Input label="SMTP Host" value={form.zohoHost} onChange={set("zohoHost")} placeholder="smtp.zoho.in"/>
            <Input label="Port" value={form.zohoPort} onChange={set("zohoPort")} placeholder="587"/>
          </div>
          <Input label="Zoho Email (Login / Username)" value={form.zohoUser} onChange={set("zohoUser")} placeholder="contact@aifnext.com"/>
          <Input label="App Password" type="password" value={form.zohoPw} onChange={set("zohoPw")} placeholder="Your Zoho app-specific password"/>
          <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:14}}>
            <Input label="From Email" value={form.zohoFrom} onChange={set("zohoFrom")} placeholder="contact@aifnext.com"/>
            <Input label="From Name" value={form.zohoFromName} onChange={set("zohoFromName")} placeholder="AIF NEXT Platform"/>
          </div>
          <Input label="Admin Email (receives Need Assistance queries)" value={form.adminEmail} onChange={set("adminEmail")} placeholder="contact@aifnext.com"/>
          <div style={{background:C.bluePale,borderRadius:8,padding:"10px 14px",fontSize:12,color:C.blue,border:`1px solid ${C.blueBorder}`,marginTop:4,lineHeight:1.6}}>
            💡 To get your Zoho App Password: <strong>Zoho Mail → Settings → Security → App Passwords → Generate New</strong>
          </div>
        </Card>

        {testResult&&(
          <div style={{background:testResult.startsWith("✓")?C.greenBg:C.redBg,
            color:testResult.startsWith("✓")?C.green:C.red,
            padding:"10px 14px",borderRadius:8,fontSize:13,marginBottom:14,
            border:`1px solid ${testResult.startsWith("✓")?C.green:C.red}33`,fontWeight:600}}>
            {testResult}
          </div>
        )}
        {saved&&(
          <div style={{background:C.greenBg,color:C.green,padding:"10px 14px",borderRadius:8,fontSize:13,marginBottom:14,fontWeight:700,border:`1px solid ${C.green}33`,display:"flex",alignItems:"center",gap:8}}>
            ✓ Settings saved successfully!
          </div>
        )}
        <div style={{display:"flex",gap:10}}>
          <Btn variant="outline" onClick={handleTest} style={{opacity:testing?0.6:1}}>
            {testing?"Sending…":"Send Test Email"}
          </Btn>
          <Btn onClick={handleSave}>Save Settings</Btn>
        </div>
      </div>
    </div>
  );
}

// ─── ADMIN CHANGE PASSWORD ────────────────────────────────────────────────────
// ─── ADMIN CHANGE PASSWORD & EMAIL ───────────────────────────────────────────
function AdminChangePassword({adminLoginEmail,onEmailChange}){
  const [tab,setTab]=useState("password"); // "password" | "email"

  // Password tab state
  const [form,setForm]=useState({current:"",newPw:"",confirm:""});
  const [showCurrent,setShowCurrent]=useState(false);
  const [showNew,setShowNew]=useState(false);
  const [showConfirm,setShowConfirm]=useState(false);
  const [pwErr,setPwErr]=useState("");
  const [pwSuccess,setPwSuccess]=useState(false);

  // Email tab state
  const [emailDraft,setEmailDraft]=useState(adminLoginEmail);
  const [emailErr,setEmailErr]=useState("");
  const [emailSuccess,setEmailSuccess]=useState(false);

  const strength=p=>{let s=0;if(p.length>=8)s++;if(/[A-Z]/.test(p))s++;if(/[0-9]/.test(p))s++;if(/[^A-Za-z0-9]/.test(p))s++;return s;};
  const str=strength(form.newPw);
  const strColors=["",C.red,"#D4820A","#D4820A",C.green];
  const strLabels=["","Weak","Fair","Good","Strong"];

  const handleSavePw=()=>{
    if(!form.current){setPwErr("Please enter your current password.");return;}
    if(form.current!=="Admin@123"){setPwErr("Current password is incorrect.");return;}
    if(form.newPw.length<8){setPwErr("New password must be at least 8 characters.");return;}
    if(form.newPw!==form.confirm){setPwErr("New passwords do not match.");return;}
    setPwErr("");setPwSuccess(true);
    setForm({current:"",newPw:"",confirm:""});
    setTimeout(()=>setPwSuccess(false),4000);
  };

  const handleSaveEmail=()=>{
    if(!emailDraft.trim()||!emailDraft.includes("@")){setEmailErr("Please enter a valid email address.");return;}
    onEmailChange(emailDraft.trim());
    setEmailErr("");setEmailSuccess(true);
    setTimeout(()=>setEmailSuccess(false),4000);
  };

  const PwRow=({label,value,onChange,show,onToggle,placeholder})=>(
    <div style={{marginBottom:14}}>
      <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>{label}</label>
      <div style={{display:"flex",gap:6}}>
        <input type={show?"text":"password"} value={value} onChange={e=>onChange(e.target.value)} placeholder={placeholder}
          style={{flex:1,padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF"}}/>
        <button onClick={onToggle} style={{padding:"9px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:14,color:C.muted}}>
          {show?"🙈":"👁"}
        </button>
      </div>
    </div>
  );

  return(
    <div style={{padding:28}}>
      <PageHeader title="Account Settings" subtitle="Update your admin login credentials — visible only to you"/>
      <div style={{maxWidth:480}}>
        {/* Tab switcher */}
        <div style={{display:"flex",gap:0,marginBottom:20,border:`1px solid ${C.blueBorder}`,borderRadius:9,overflow:"hidden",background:"#fff"}}>
          {[{key:"password",label:"🔑 Change Password"},{key:"email",label:"✉️ Change Email"}].map(t=>(
            <button key={t.key} onClick={()=>setTab(t.key)}
              style={{flex:1,padding:"11px 16px",fontSize:13,fontWeight:tab===t.key?700:500,border:"none",cursor:"pointer",background:tab===t.key?C.navy:"#fff",color:tab===t.key?"#fff":C.muted,transition:"all 0.15s",letterSpacing:0.1}}>
              {t.label}
            </button>
          ))}
        </div>

        {/* Password tab */}
        {tab==="password"&&(
          <Card>
            <div style={{background:C.bluePale,border:`1px solid ${C.blueBorder}`,borderRadius:8,padding:"10px 14px",marginBottom:18,fontSize:12,color:C.navy,lineHeight:1.6}}>
              🔒 Password changes take effect immediately on your next login.
            </div>
            {pwErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{pwErr}</div>}
            {pwSuccess&&<div style={{background:C.greenBg,color:C.green,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.green}22`,fontWeight:700}}>✓ Password changed successfully!</div>}
            <PwRow label="Current Password" value={form.current} onChange={v=>setForm(f=>({...f,current:v}))} show={showCurrent} onToggle={()=>setShowCurrent(v=>!v)} placeholder="Enter your current password"/>
            <PwRow label="New Password" value={form.newPw} onChange={v=>setForm(f=>({...f,newPw:v}))} show={showNew} onToggle={()=>setShowNew(v=>!v)} placeholder="Min 8 chars, uppercase, number, symbol"/>
            {form.newPw&&(
              <div style={{marginBottom:14,marginTop:-6}}>
                <div style={{display:"flex",gap:3,marginBottom:5}}>
                  {[1,2,3,4].map(i=><div key={i} style={{flex:1,height:3,borderRadius:3,background:i<=str?strColors[str]:C.blueBorder,transition:"background 0.2s"}}/>)}
                </div>
                <span style={{fontSize:11,color:strColors[str],fontWeight:700,letterSpacing:0.3,textTransform:"uppercase"}}>{strLabels[str]} password</span>
              </div>
            )}
            <PwRow label="Confirm New Password" value={form.confirm} onChange={v=>setForm(f=>({...f,confirm:v}))} show={showConfirm} onToggle={()=>setShowConfirm(v=>!v)} placeholder="Re-enter your new password"/>
            <Btn onClick={handleSavePw} size="lg" style={{width:"100%",justifyContent:"center",marginTop:8}}>Update Password</Btn>
          </Card>
        )}

        {/* Email tab */}
        {tab==="email"&&(
          <Card>
            <div style={{background:C.bluePale,border:`1px solid ${C.blueBorder}`,borderRadius:8,padding:"10px 14px",marginBottom:18,fontSize:12,color:C.navy,lineHeight:1.6}}>
              ✉️ This is the email used to log in to your admin account.
            </div>
            <div style={{marginBottom:14}}>
              <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Current Admin Email</label>
              <div style={{padding:"9px 14px",background:C.surface,borderRadius:7,border:`1px solid ${C.blueBorder}`,fontSize:14,color:C.navy,fontWeight:600}}>{adminLoginEmail}</div>
            </div>
            <div style={{marginBottom:16}}>
              <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>New Admin Email</label>
              <input value={emailDraft} onChange={e=>setEmailDraft(e.target.value)} placeholder="Enter new admin email"
                style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF",boxSizing:"border-box"}}/>
            </div>
            {emailErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{emailErr}</div>}
            {emailSuccess&&<div style={{background:C.greenBg,color:C.green,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.green}22`,fontWeight:700}}>✓ Admin email updated to <strong>{adminLoginEmail}</strong>!</div>}
            <Btn onClick={handleSaveEmail} size="lg" style={{width:"100%",justifyContent:"center",marginTop:8}}>Update Email</Btn>
          </Card>
        )}
      </div>
    </div>
  );
}

// ─── ADMIN CONTACT EMAIL ──────────────────────────────────────────────────────
function AdminContactEmail({adminEmail,onEmailChange}){
  const [draft,setDraft]=useState(adminEmail);
  const [saved,setSaved]=useState(false);
  const [err,setErr]=useState("");

  const handleSave=()=>{
    if(!draft.trim()||!draft.includes("@")){setErr("Please enter a valid email address.");return;}
    onEmailChange(draft.trim());
    setSaved(true);
    setErr("");
    setTimeout(()=>setSaved(false),3000);
  };

  return(
    <div style={{padding:28}}>
      <PageHeader title="Contact Email" subtitle="Set the email address where users' assistance queries are delivered"/>
      <div style={{maxWidth:520}}>
        <Card>
          <div style={{background:C.bluePale,border:`1px solid ${C.blueBorder}`,borderRadius:8,padding:"12px 14px",marginBottom:18,fontSize:13,color:C.navy,lineHeight:1.6}}>
            <strong>How this works:</strong> When a user submits a query via "Need Assistance", the message is delivered to this email address. Users are also shown this address so they know who they're contacting.
          </div>
          <div style={{marginBottom:8}}>
            <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Current Contact Email</label>
            <div style={{padding:"9px 14px",background:C.surface,borderRadius:7,border:`1px solid ${C.blueBorder}`,fontSize:14,color:C.navy,fontWeight:600}}>{adminEmail}</div>
          </div>
          <div style={{marginBottom:16,marginTop:16}}>
            <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Update Contact Email</label>
            <input value={draft} onChange={e=>setDraft(e.target.value)} placeholder="e.g. compliance@yourfirm.in"
              style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF",boxSizing:"border-box"}}/>
          </div>
          {err&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{err}</div>}
          {saved&&<div style={{background:C.greenBg,color:C.green,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.green}22`,fontWeight:700}}>✓ Contact email updated to <strong>{adminEmail}</strong>!</div>}
          <Btn onClick={handleSave}>Save Email</Btn>
        </Card>
      </div>
    </div>
  );
}

// ─── ADMIN BROADCAST NOTIFICATION ────────────────────────────────────────────
function BroadcastNotification({broadcasts=[],onSend,onDelete}){
  const allRegisteredEmails=[
    ...mockUsers.flatMap(u=>[u.email]),
    "cfo@pinnaclevc.in",
    "cfo@bluridge.in",
  ];
  const [subject,setSubject]=useState("");
  const [message,setMessage]=useState("");
  const [selectedEmails,setSelectedEmails]=useState(allRegisteredEmails);
  const [sent,setSent]=useState(false);
  const [err,setErr]=useState("");

  const toggleEmail=e=>{
    setSelectedEmails(a=>a.includes(e)?a.filter(x=>x!==e):[...a,e]);
  };

  const handleSend=async()=>{
    if(!subject.trim()){setErr("Subject is required.");return;}
    if(!message.trim()){setErr("Message is required.");return;}
    if(selectedEmails.length===0){setErr("Please select at least one recipient.");return;}
    setErr("");
    const now=new Date();
    const sentAt=now.toLocaleDateString("en-IN",{day:"numeric",month:"short",year:"numeric"})+" · "+now.toLocaleTimeString("en-IN",{hour:"2-digit",minute:"2-digit"});
    const {ok,error:emailErr}=await sendBroadcastEmail({
      recipients:selectedEmails,
      subject:subject.trim(),
      message:message.trim(),
      sentAt,
    });
    if(!ok){setErr("Could not send broadcast. ("+emailErr+")");return;}
    onSend({subject:subject.trim(),message:message.trim(),recipients:selectedEmails,sentAt});
    setSent(true);
  };

  if(sent) return(
    <div style={{padding:28}}>
      <div style={{maxWidth:480,margin:"40px auto",textAlign:"center"}}>
        <div style={{width:60,height:60,borderRadius:"50%",background:C.greenBg,border:`2px solid ${C.green}`,display:"flex",alignItems:"center",justifyContent:"center",fontSize:22,margin:"0 auto 16px",color:C.green,fontWeight:700}}>✓</div>
        <h2 style={{color:C.navy,fontWeight:800,letterSpacing:-0.3}}>Notification Sent</h2>
        <p style={{color:C.muted,fontSize:14,lineHeight:1.6}}>
          Your broadcast was sent to <strong style={{color:C.navy}}>{selectedEmails.length} email address{selectedEmails.length!==1?"es":""}</strong>.
        </p>
        <Btn onClick={()=>{setSent(false);setSubject("");setMessage("");setSelectedEmails(allRegisteredEmails);}} style={{marginTop:16}}>Send Another</Btn>
      </div>
      {broadcasts.length>0&&<SentBroadcastsList broadcasts={broadcasts} onDelete={onDelete}/>}
    </div>
  );

  return(
    <div style={{padding:28}}>
      <PageHeader title="Broadcast Notification" subtitle="Send a message to all registered user email addresses"/>
      <div style={{maxWidth:640}}>
        <div style={{display:"grid",gridTemplateColumns:"1fr 1.4fr",gap:16,marginBottom:24}}>
          {/* Recipients panel */}
          <Card>
            <h3 style={{fontSize:11,fontWeight:800,color:C.muted,margin:"0 0 14px",letterSpacing:0.5,textTransform:"uppercase",borderBottom:`1px solid ${C.blueBorder}`,paddingBottom:10}}>
              Recipients ({selectedEmails.length}/{allRegisteredEmails.length})
            </h3>
            <div style={{display:"flex",gap:8,marginBottom:12}}>
              <button onClick={()=>setSelectedEmails([...allRegisteredEmails])} style={{fontSize:11,fontWeight:700,color:C.blue,background:"none",border:`1px solid ${C.blueBorder}`,borderRadius:6,padding:"4px 10px",cursor:"pointer"}}>Select All</button>
              <button onClick={()=>setSelectedEmails([])} style={{fontSize:11,fontWeight:700,color:C.muted,background:"none",border:`1px solid ${C.blueBorder}`,borderRadius:6,padding:"4px 10px",cursor:"pointer"}}>Clear</button>
            </div>
            <div style={{display:"flex",flexDirection:"column",gap:6}}>
              {allRegisteredEmails.map(e=>(
                <label key={e} style={{display:"flex",alignItems:"center",gap:9,padding:"8px 10px",borderRadius:7,border:`1px solid ${selectedEmails.includes(e)?C.blue:C.blueBorder}`,background:selectedEmails.includes(e)?C.bluePale:"#fff",cursor:"pointer",transition:"all 0.12s"}}>
                  <input type="checkbox" checked={selectedEmails.includes(e)} onChange={()=>toggleEmail(e)} style={{accentColor:C.blue,width:14,height:14,flexShrink:0}}/>
                  <span style={{fontSize:12,color:C.text,wordBreak:"break-all"}}>{e}</span>
                </label>
              ))}
            </div>
          </Card>

          {/* Compose panel */}
          <Card>
            <h3 style={{fontSize:11,fontWeight:800,color:C.muted,margin:"0 0 14px",letterSpacing:0.5,textTransform:"uppercase",borderBottom:`1px solid ${C.blueBorder}`,paddingBottom:10}}>Compose</h3>
            <Input label="Subject" value={subject} onChange={setSubject} placeholder="e.g. Important compliance deadline reminder" required/>
            <div style={{marginBottom:14}}>
              <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>Message <span style={{color:C.red}}>*</span></label>
              <textarea value={message} onChange={e=>setMessage(e.target.value)} rows={7} placeholder="Write your notification message here…" style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,resize:"vertical",boxSizing:"border-box",background:"#FAFCFF"}}/>
            </div>
            {err&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{err}</div>}
            <div style={{background:C.surface,borderRadius:7,padding:"10px 13px",marginBottom:14,fontSize:12,color:C.muted}}>
              Will be sent to: <strong style={{color:C.navy}}>{selectedEmails.length} recipient{selectedEmails.length!==1?"s":""}</strong>
            </div>
            <Btn onClick={handleSend} size="lg" style={{width:"100%",justifyContent:"center"}}>📣 Send Broadcast</Btn>
          </Card>
        </div>
        {/* Previously sent notifications */}
        {broadcasts.length>0&&<SentBroadcastsList broadcasts={broadcasts} onDelete={onDelete}/>}
      </div>
    </div>
  );
}

function SentBroadcastsList({broadcasts,onDelete}){
  const [deleteConfirm,setDeleteConfirm]=useState(null);
  return(
    <div>
      <div style={{fontSize:11,fontWeight:800,color:C.muted,letterSpacing:0.6,textTransform:"uppercase",marginBottom:12}}>
        Sent Notifications ({broadcasts.length})
        <span style={{fontSize:10,fontWeight:500,textTransform:"none",letterSpacing:0,color:C.muted,marginLeft:8}}>— visible to users until deleted</span>
      </div>
      <div style={{display:"flex",flexDirection:"column",gap:10}}>
        {broadcasts.map(b=>(
          <div key={b.id} style={{background:"#fff",border:`1px solid ${C.blueBorder}`,borderRadius:10,padding:"14px 18px",borderLeft:`4px solid ${C.blue}`}}>
            <div style={{display:"flex",justifyContent:"space-between",alignItems:"flex-start",gap:12}}>
              <div style={{flex:1}}>
                <div style={{display:"flex",alignItems:"center",gap:8,marginBottom:4}}>
                  <span style={{fontSize:13,fontWeight:700,color:C.navy}}>{b.subject}</span>
                  <span style={{fontSize:10,background:C.bluePale,color:C.blue,padding:"2px 8px",borderRadius:10,fontWeight:700,letterSpacing:0.3,flexShrink:0}}>{b.recipients?.length||0} recipients</span>
                </div>
                <div style={{fontSize:13,color:C.text,lineHeight:1.6,marginBottom:4}}>{b.message}</div>
                <div style={{fontSize:11,color:C.muted}}>{b.sentAt}</div>
              </div>
              <button onClick={()=>setDeleteConfirm(b.id)}
                style={{padding:"5px 11px",borderRadius:6,border:`1px solid ${C.red}33`,background:C.redBg,color:C.red,fontSize:11,fontWeight:700,cursor:"pointer",flexShrink:0,whiteSpace:"nowrap"}}>
                Delete
              </button>
            </div>
          </div>
        ))}
      </div>
      {deleteConfirm&&(
        <Modal title="Delete Notification" onClose={()=>setDeleteConfirm(null)}>
          <div style={{background:C.redBg,border:`1px solid ${C.red}33`,borderRadius:8,padding:"12px 14px",marginBottom:18,fontSize:13,color:C.text}}>
            This will permanently remove this notification. Users will no longer see it. This cannot be undone.
          </div>
          <div style={{display:"flex",gap:10,justifyContent:"flex-end"}}>
            <Btn variant="outline" onClick={()=>setDeleteConfirm(null)}>Cancel</Btn>
            <Btn variant="danger" onClick={()=>{onDelete(deleteConfirm);setDeleteConfirm(null);}}>Delete Notification</Btn>
          </div>
        </Modal>
      )}
    </div>
  );
}

// ─── SEBI CIRCULARS ───────────────────────────────────────────────────────────
const mockCirculars=[
  {id:1,link:"https://www.sebi.gov.in/legal/circulars/jan-2025/guidelines-for-aif-valuation-2025_90123.html",analysis:"SEBI mandates independent valuation of unlisted securities for all AIF categories. Valuers must be registered with IBBI. Effective from 1 April 2025.",category:"Valuation",date:"15 Jan 2025"},
  {id:2,link:"https://www.sebi.gov.in/legal/circulars/mar-2025/esg-reporting-framework-aif_90234.html",analysis:"Category I and II AIFs must disclose ESG metrics in annual reports including carbon footprint, board diversity, and governance scores. Template provided in Annexure A.",category:"ESG",date:"3 Mar 2025"},
  {id:3,link:"https://www.sebi.gov.in/legal/circulars/apr-2025/aif-leverage-limits_90345.html",analysis:"Category III AIFs face revised leverage limits: 2x NAV for long-only strategies and 1x for derivative-heavy strategies. Quarterly reporting of leverage positions is mandatory.",category:"Risk Management",date:"10 Apr 2025"},
  {id:4,link:"https://www.sebi.gov.in/legal/circulars/may-2025/kyc-norms-aif-investors_90456.html",analysis:"Enhanced KYC norms for investors in AIFs. Re-KYC mandatory for investors not verified in last 2 years. CERSAI linkage required for all entities.",category:"KYC / AML",date:"22 May 2025"},
  {id:5,link:"https://www.sebi.gov.in/legal/circulars/jun-2025/aif-disclosure-ppn_90567.html",analysis:"Private Placement Notice (PPN) must include detailed risk factors, exit mechanism, and illustrative returns. Format standardized across all fund categories.",category:"Disclosure",date:"5 Jun 2025"},
];

function SEBICirculars({user}){
  const isAdmin=user.role==="admin";
  const [circulars,setCirculars]=useState(mockCirculars);
  const [showAdd,setShowAdd]=useState(false);
  const [editCircular,setEditCircular]=useState(null);
  const [deleteConfirm,setDeleteConfirm]=useState(null);
  const [form,setForm]=useState({link:"",analysis:"",category:"",date:""});
  const set=k=>v=>setForm(f=>({...f,[k]:v}));

  const openAdd=()=>{setForm({link:"",analysis:"",category:"",date:""});setShowAdd(true);};
  const openEdit=c=>{setEditCircular(c);setForm({link:c.link,analysis:c.analysis,category:c.category,date:c.date});};
  const handleSave=()=>{
    if(editCircular){
      setCirculars(a=>a.map(x=>x.id===editCircular.id?{...x,...form}:x));
      setEditCircular(null);
    } else {
      setCirculars(a=>[...a,{id:Date.now(),...form}]);
      setShowAdd(false);
    }
    setForm({link:"",analysis:"",category:"",date:""});
  };

  const categoryColors={"Valuation":"#6B4FBB","ESG":"#167040","Risk Management":"#B02020","KYC / AML":"#B07000","Disclosure":"#1249AA"};

  return(
    <div style={{padding:28}}>
      <PageHeader
        title="SEBI Circulars & Regulations"
        subtitle={`${circulars.length} regulatory circulars — latest SEBI guidance for Alternative Investment Funds`}
        action={isAdmin&&<Btn onClick={openAdd} size="sm">+ Add Circular</Btn>}
      />
      <div style={{display:"flex",flexDirection:"column",gap:14}}>
        {circulars.map((c,idx)=>(
          <Card key={c.id} style={{padding:0,overflow:"hidden"}}>
            <div style={{display:"flex",alignItems:"stretch"}}>
              {/* Left accent bar */}
              <div style={{width:4,background:categoryColors[c.category]||C.blue,flexShrink:0}}/>
              <div style={{flex:1,padding:"16px 20px"}}>
                <div style={{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:12,marginBottom:10}}>
                  <div style={{flex:1,minWidth:0}}>
                    <div style={{display:"flex",alignItems:"center",gap:8,marginBottom:6,flexWrap:"wrap"}}>
                      <span style={{fontSize:10,fontWeight:800,padding:"3px 10px",borderRadius:20,background:(categoryColors[c.category]||C.blue)+"18",color:categoryColors[c.category]||C.blue,border:`1px solid ${(categoryColors[c.category]||C.blue)}33`,letterSpacing:0.4,textTransform:"uppercase",whiteSpace:"nowrap"}}>{c.category}</span>
                      <span style={{fontSize:11,color:C.muted,fontWeight:500}}>{c.date}</span>
                    </div>
                    {/* Link */}
                    <div style={{marginBottom:8}}>
                      <span style={{fontSize:10,fontWeight:700,color:C.muted,letterSpacing:0.4,textTransform:"uppercase",display:"block",marginBottom:3}}>Circular Link</span>
                      <a href={c.link} target="_blank" rel="noreferrer" style={{fontSize:12,color:C.blueLight,fontWeight:600,textDecoration:"none",wordBreak:"break-all",display:"inline-flex",alignItems:"center",gap:4}}>
                        {c.link.length>72?c.link.slice(0,72)+"…":c.link} <span style={{fontSize:10}}>↗</span>
                      </a>
                    </div>
                    {/* Analysis */}
                    <div>
                      <span style={{fontSize:10,fontWeight:700,color:C.muted,letterSpacing:0.4,textTransform:"uppercase",display:"block",marginBottom:3}}>Analysis</span>
                      <p style={{margin:0,fontSize:13,color:C.text,lineHeight:1.7}}>{c.analysis}</p>
                    </div>
                  </div>
                  {isAdmin&&(
                    <div style={{display:"flex",gap:6,flexShrink:0}}>
                      <button onClick={()=>openEdit(c)} style={{padding:"4px 10px",borderRadius:6,border:`1px solid ${C.blueBorder}`,background:"#fff",color:C.blue,fontSize:11,fontWeight:700,cursor:"pointer"}}>✏️ Edit</button>
                      <button onClick={()=>setDeleteConfirm(c)} style={{padding:"4px 10px",borderRadius:6,border:`1px solid ${C.red}22`,background:C.redBg,color:C.red,fontSize:11,fontWeight:700,cursor:"pointer"}}>Delete</button>
                    </div>
                  )}
                </div>
              </div>
            </div>
          </Card>
        ))}
        {circulars.length===0&&(
          <Card>
            <div style={{textAlign:"center",padding:"36px 14px",color:C.muted}}>
              <div style={{fontSize:32,marginBottom:8}}>📋</div>
              <div style={{fontSize:14}}>No circulars added yet. {isAdmin?"Click '+ Add Circular' to get started.":""}</div>
            </div>
          </Card>
        )}
      </div>

      {/* Add / Edit Modal */}
      {(showAdd||editCircular)&&(
        <Modal title={editCircular?"Edit Circular":"Add SEBI Circular"} onClose={()=>{setShowAdd(false);setEditCircular(null);}}>
          <div style={{marginBottom:12}}>
            <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>Circular Link <span style={{color:C.red}}>*</span></label>
            <input value={form.link} onChange={e=>set("link")(e.target.value)} placeholder="https://www.sebi.gov.in/legal/circulars/…"
              style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:13,color:C.text,background:"#FAFCFF",boxSizing:"border-box"}}/>
          </div>
          <div style={{marginBottom:12}}>
            <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>Category <span style={{color:C.red}}>*</span></label>
            <input value={form.category} onChange={e=>set("category")(e.target.value)} placeholder="e.g. Valuation, ESG, Risk Management, KYC / AML, Disclosure"
              style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:13,color:C.text,background:"#FAFCFF",boxSizing:"border-box"}}/>
          </div>
          <div style={{marginBottom:12}}>
            <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>Date</label>
            <input value={form.date} onChange={e=>set("date")(e.target.value)} placeholder="e.g. 15 Jan 2025"
              style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:13,color:C.text,background:"#FAFCFF",boxSizing:"border-box"}}/>
          </div>
          <div style={{marginBottom:18}}>
            <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.4,textTransform:"uppercase"}}>Analysis / Summary <span style={{color:C.red}}>*</span></label>
            <textarea value={form.analysis} onChange={e=>set("analysis")(e.target.value)} rows={4}
              placeholder="Plain-language analysis of what this circular requires…"
              style={{width:"100%",padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:13,color:C.text,resize:"vertical",boxSizing:"border-box",background:"#FAFCFF"}}/>
          </div>
          <div style={{display:"flex",gap:10,justifyContent:"flex-end"}}>
            <Btn variant="outline" onClick={()=>{setShowAdd(false);setEditCircular(null);}}>Cancel</Btn>
            <Btn onClick={handleSave}>{editCircular?"Save Changes":"Add Circular"}</Btn>
          </div>
        </Modal>
      )}

      {/* Delete Confirm */}
      {deleteConfirm&&(
        <Modal title="Delete Circular" onClose={()=>setDeleteConfirm(null)}>
          <div style={{background:C.redBg,border:`1px solid ${C.red}33`,borderRadius:8,padding:"12px 14px",marginBottom:18,fontSize:13,color:C.text}}>
            Are you sure you want to delete the <strong>{deleteConfirm.category}</strong> circular? This cannot be undone.
          </div>
          <div style={{display:"flex",gap:10,justifyContent:"flex-end"}}>
            <Btn variant="outline" onClick={()=>setDeleteConfirm(null)}>Cancel</Btn>
            <Btn variant="danger" onClick={()=>{setCirculars(a=>a.filter(x=>x.id!==deleteConfirm.id));setDeleteConfirm(null);}}>Delete</Btn>
          </div>
        </Modal>
      )}
    </div>
  );
}

// ─── MANAGE USERS ─────────────────────────────────────────────────────────────
function ManageUsers({users,setUsers}){
  const [deleteConfirm,setDeleteConfirm]=useState(null);
  const [editUser,setEditUser]=useState(null);
  const [editForm,setEditForm]=useState({});
  const [showPw,setShowPw]=useState(false);
  const [showVaultPw,setShowVaultPw]=useState(false);
  const [editSuccess,setEditSuccess]=useState(false);

  const openEdit=u=>{
    setEditUser(u);
    setEditForm({name:u.name,email:u.email,phone:u.phone,sebi:u.sebi,category:u.category,password:u.password||"User@1234",vaultPin:u.vaultPin||""});
    setShowPw(false);setShowVaultPw(false);setEditSuccess(false);
  };

  const handleSaveEdit=()=>{
    setUsers(a=>a.map(x=>x.id===editUser.id?{...x,...editForm}:x));
    setEditSuccess(true);
    setTimeout(()=>{setEditUser(null);setEditSuccess(false);},1200);
  };

  const handleDelete=id=>{
    setUsers(a=>a.filter(x=>x.id!==id));
    setDeleteConfirm(null);
  };

  const FieldRow=({label,value,onChange,type="text",placeholder=""})=>(
    <div style={{marginBottom:12}}>
      <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:4,letterSpacing:0.4,textTransform:"uppercase"}}>{label}</label>
      <input type={type} value={value} onChange={e=>onChange(e.target.value)} placeholder={placeholder}
        style={{width:"100%",padding:"8px 11px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:13,color:C.text,background:"#FAFCFF",boxSizing:"border-box"}}/>
    </div>
  );

  return(
    <div style={{padding:28}}>
      <PageHeader title="Manage Users" subtitle={`${users.length} registered Alternative Investment Fund${users.length!==1?"s":""}`}/>
      <Card style={{padding:0,overflow:"hidden"}}>
        <table style={{width:"100%",borderCollapse:"collapse"}}>
          <thead>
            <tr style={{background:C.surface}}>
              {["FUND NAME","SEBI REG. NO.","CATEGORY","EMAIL","PHONE","STATUS","ACTIONS"].map(h=><th key={h} style={{padding:"10px 14px",textAlign:"left",fontSize:10,fontWeight:800,color:C.muted,borderBottom:`1px solid ${C.blueBorder}`,whiteSpace:"nowrap",letterSpacing:0.6}}>{h}</th>)}
            </tr>
          </thead>
          <tbody>
            {users.length===0&&(
              <tr><td colSpan={7} style={{padding:"36px 14px",textAlign:"center",color:C.muted,fontSize:14}}>
                <div style={{fontSize:28,marginBottom:8}}>👥</div>No registered funds yet.
              </td></tr>
            )}
            {users.map((u,idx)=>(
              <tr key={u.id} style={{background:idx%2===0?"#fff":"#FAFCFF",transition:"background 0.1s"}}
                onMouseEnter={e=>e.currentTarget.style.background=C.bluePale}
                onMouseLeave={e=>e.currentTarget.style.background=idx%2===0?"#fff":"#FAFCFF"}>
                <td style={{padding:"12px 14px",fontSize:13,fontWeight:700,color:C.navy,borderBottom:`1px solid ${C.surface}`}}>{u.name}</td>
                <td style={{padding:"12px 14px",fontSize:11,fontFamily:"monospace",color:C.muted,borderBottom:`1px solid ${C.surface}`,letterSpacing:0.3}}>{u.sebi}</td>
                <td style={{padding:"12px 14px",borderBottom:`1px solid ${C.surface}`}}><span style={{fontSize:10,background:C.bluePale,color:C.blue,padding:"3px 9px",borderRadius:8,fontWeight:800,letterSpacing:0.3}}>{categoryLabel(u.category)}</span></td>
                <td style={{padding:"12px 14px",fontSize:12,color:C.text,borderBottom:`1px solid ${C.surface}`}}>{u.email}</td>
                <td style={{padding:"12px 14px",fontSize:12,color:C.text,borderBottom:`1px solid ${C.surface}`}}>{u.phone}</td>
                <td style={{padding:"12px 14px",borderBottom:`1px solid ${C.surface}`}}>
                  <span style={{fontSize:10,fontWeight:800,padding:"3px 9px",borderRadius:20,background:u.active?C.greenBg:"#F0F0F5",color:u.active?C.green:C.muted,letterSpacing:0.4,textTransform:"uppercase"}}>{u.active?"Active":"Inactive"}</span>
                </td>
                <td style={{padding:"12px 14px",borderBottom:`1px solid ${C.surface}`}}>
                  <div style={{display:"flex",gap:6,flexWrap:"wrap"}}>
                    <button onClick={()=>openEdit(u)} style={{padding:"4px 11px",borderRadius:6,border:`1.5px solid ${C.blueBorder}`,background:"#fff",color:C.blue,fontSize:11,fontWeight:700,cursor:"pointer",letterSpacing:0.2,whiteSpace:"nowrap"}}>✏️ Edit</button>
                    <button onClick={()=>setUsers(a=>a.map(x=>x.id===u.id?{...x,active:!x.active}:x))} style={{padding:"4px 11px",borderRadius:6,border:`1.5px solid ${u.active?C.blueBorder:C.green}`,background:"#fff",color:u.active?C.muted:C.green,fontSize:11,fontWeight:700,cursor:"pointer",letterSpacing:0.2,whiteSpace:"nowrap"}}>
                      {u.active?"Deactivate":"Activate"}
                    </button>
                    <button onClick={()=>setDeleteConfirm(u)} style={{padding:"4px 11px",borderRadius:6,border:`1.5px solid ${C.red}22`,background:C.redBg,color:C.red,fontSize:11,fontWeight:700,cursor:"pointer",letterSpacing:0.2,whiteSpace:"nowrap"}}>Delete</button>
                  </div>
                </td>
              </tr>
            ))}
          </tbody>
        </table>
      </Card>

      {/* Edit User Modal */}
      {editUser&&(
        <Modal title={`Edit — ${editUser.name}`} onClose={()=>setEditUser(null)}>
          {editSuccess&&<div style={{background:C.greenBg,color:C.green,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,fontWeight:700,border:`1px solid ${C.green}22`}}>✓ Changes saved successfully!</div>}
          <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0 14px"}}>
            <FieldRow label="Fund Name" value={editForm.name} onChange={v=>setEditForm(f=>({...f,name:v}))}/>
            <FieldRow label="SEBI Reg. No." value={editForm.sebi} onChange={v=>setEditForm(f=>({...f,sebi:v}))}/>
            <FieldRow label="Email" value={editForm.email} onChange={v=>setEditForm(f=>({...f,email:v}))} type="email"/>
            <FieldRow label="Phone" value={editForm.phone} onChange={v=>setEditForm(f=>({...f,phone:v}))} type="tel"/>
          </div>
          <div style={{marginBottom:12}}>
            <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:4,letterSpacing:0.4,textTransform:"uppercase"}}>Category</label>
            <select value={editForm.category} onChange={e=>setEditForm(f=>({...f,category:parseInt(e.target.value)}))}
              style={{width:"100%",padding:"8px 11px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:13,color:C.text,background:"#FAFCFF"}}>
              <option value={1}>Category I</option>
              <option value={2}>Category II</option>
              <option value={3}>Category III</option>
            </select>
          </div>
          {/* Login Password */}
          <div style={{marginBottom:12}}>
            <label style={{fontSize:11,fontWeight:700,color:C.muted,display:"block",marginBottom:4,letterSpacing:0.4,textTransform:"uppercase"}}>Login Password</label>
            <div style={{display:"flex",gap:6}}>
              <input type={showPw?"text":"password"} value={editForm.password} onChange={e=>setEditForm(f=>({...f,password:e.target.value}))}
                style={{flex:1,padding:"8px 11px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:13,color:C.text,background:"#FAFCFF"}}/>
              <button onClick={()=>setShowPw(v=>!v)} style={{padding:"8px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:13,color:C.muted}}>{showPw?"🙈":"👁"}</button>
            </div>
          </div>
          {/* Vault Access PIN */}
          <div style={{marginBottom:16,background:C.bluePale,padding:"12px 14px",borderRadius:8,border:`1px solid ${C.blueBorder}`}}>
            <label style={{fontSize:11,fontWeight:700,color:C.navy,display:"block",marginBottom:6,letterSpacing:0.4,textTransform:"uppercase"}}>🔐 Vault Access PIN (if set)</label>
            <div style={{display:"flex",gap:6}}>
              <input type={showVaultPw?"text":"password"} value={editForm.vaultPin} onChange={e=>setEditForm(f=>({...f,vaultPin:e.target.value}))} placeholder="User's vault unlock password"
                style={{flex:1,padding:"8px 11px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:13,color:C.text,background:"#fff"}}/>
              <button onClick={()=>setShowVaultPw(v=>!v)} style={{padding:"8px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:13,color:C.muted}}>{showVaultPw?"🙈":"👁"}</button>
            </div>
            <div style={{fontSize:11,color:C.muted,marginTop:6}}>Vault PIN is set by the user. You can view or reset it here.</div>
          </div>
          <div style={{display:"flex",gap:10,justifyContent:"flex-end"}}>
            <Btn variant="outline" onClick={()=>setEditUser(null)}>Cancel</Btn>
            <Btn onClick={handleSaveEdit}>Save Changes</Btn>
          </div>
        </Modal>
      )}

      {/* Delete Confirm Modal */}
      {deleteConfirm&&(
        <Modal title="Delete Account" onClose={()=>setDeleteConfirm(null)}>
          <div style={{background:C.redBg,border:`1px solid ${C.red}33`,borderRadius:8,padding:"12px 14px",marginBottom:18}}>
            <div style={{fontSize:13,fontWeight:700,color:C.red,marginBottom:4}}>⚠️ This action cannot be undone</div>
            <div style={{fontSize:13,color:C.text,lineHeight:1.6}}>You are about to permanently delete the account for <strong>{deleteConfirm.name}</strong>.</div>
          </div>
          <div style={{background:C.surface,borderRadius:8,padding:"10px 14px",marginBottom:18,fontSize:12,color:C.muted}}>
            <div><strong style={{color:C.navy}}>SEBI Reg:</strong> {deleteConfirm.sebi}</div>
            <div><strong style={{color:C.navy}}>Email:</strong> {deleteConfirm.email}</div>
            <div><strong style={{color:C.navy}}>Category:</strong> {categoryLabel(deleteConfirm.category)}</div>
          </div>
          <div style={{display:"flex",gap:10,justifyContent:"flex-end"}}>
            <Btn variant="outline" onClick={()=>setDeleteConfirm(null)}>Cancel</Btn>
            <Btn variant="danger" onClick={()=>handleDelete(deleteConfirm.id)}>Yes, Delete Account</Btn>
          </div>
        </Modal>
      )}
    </div>
  );
}

// ─── USER SETTINGS ───────────────────────────────────────────────────────────
function UserSettings({user,onUpdate}){
  const [tab,setTab]=useState("profile"); // "profile" | "password" | "vault"

  // Profile tab
  const [profileForm,setProfileForm]=useState({
    name:user.name||"",
    email:user.email||"",
    phone:user.phone||"",
    sebi:user.sebi||"",
  });
  const [profileErr,setProfileErr]=useState("");
  const [profileSuccess,setProfileSuccess]=useState(false);

  // Password tab — OTP verified
  const [pwOtpVerified,setPwOtpVerified]=useState(false);
  const [pwForm,setPwForm]=useState({newPw:"",confirm:""});
  const [showNew,setShowNew]=useState(false);
  const [showConfirm,setShowConfirm]=useState(false);
  const [pwErr,setPwErr]=useState("");
  const [pwSuccess,setPwSuccess]=useState(false);

  // Vault password tab — OTP verified
  const [vaultOtpVerified,setVaultOtpVerified]=useState(false);
  const [vaultPwForm,setVaultPwForm]=useState({newPw:"",show:false});
  const [vaultPwErr,setVaultPwErr]=useState("");
  const [vaultPwSuccess,setVaultPwSuccess]=useState(false);
  const hasVaultPin=!!(user.vaultPin);

  const strength=p=>{let s=0;if(p.length>=8)s++;if(/[A-Z]/.test(p))s++;if(/[0-9]/.test(p))s++;if(/[^A-Za-z0-9]/.test(p))s++;return s;};
  const str=strength(pwForm.newPw);
  const strColors=["",C.red,"#D4820A","#D4820A",C.green];
  const strLabels=["","Weak","Fair","Good","Strong"];

  const handleSaveProfile=()=>{
    if(!profileForm.name.trim()){setProfileErr("Fund name is required.");return;}
    if(!profileForm.email.trim()||!profileForm.email.includes("@")){setProfileErr("Valid email is required.");return;}
    if(!profileForm.phone.trim()){setProfileErr("Phone number is required.");return;}
    setProfileErr("");
    onUpdate({...user,...profileForm});
    setProfileSuccess(true);
    setTimeout(()=>setProfileSuccess(false),3000);
  };

  const handleSavePw=()=>{
    if(pwForm.newPw.length<8){setPwErr("New password must be at least 8 characters.");return;}
    if(pwForm.newPw!==pwForm.confirm){setPwErr("Passwords do not match.");return;}
    setPwErr("");
    onUpdate({...user,password:pwForm.newPw});
    setPwSuccess(true);
    setPwOtpVerified(false);
    setPwForm({newPw:"",confirm:""});
    setTimeout(()=>setPwSuccess(false),3000);
  };

  const handleSaveVaultPw=()=>{
    if(vaultPwForm.newPw.length<4){setVaultPwErr("Vault password must be at least 4 characters.");return;}
    setVaultPwErr("");
    onUpdate({...user,vaultPin:vaultPwForm.newPw});
    setVaultPwSuccess(true);
    setVaultOtpVerified(false);
    setVaultPwForm({newPw:"",show:false});
    setTimeout(()=>setVaultPwSuccess(false),3000);
  };

  const PwField=({label,value,onChange,show,onToggle,placeholder})=>(
    <div style={{marginBottom:14}}>
      <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>{label}</label>
      <div style={{display:"flex",gap:6}}>
        <input type={show?"text":"password"} value={value} onChange={e=>onChange(e.target.value)} placeholder={placeholder}
          style={{flex:1,padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF"}}/>
        <button onClick={onToggle} style={{padding:"9px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:14,color:C.muted}}>{show?"🙈":"👁"}</button>
      </div>
    </div>
  );

  return(
    <div style={{padding:28}}>
      <PageHeader title="Account Settings" subtitle="Manage your profile, contact details and security"/>
      <div style={{maxWidth:520}}>
        {/* Tab switcher */}
        <div style={{display:"flex",gap:0,marginBottom:22,border:`1px solid ${C.blueBorder}`,borderRadius:9,overflow:"hidden",background:"#fff"}}>
          {[{key:"profile",label:"👤 Profile"},{key:"password",label:"🔑 Login Password"},{key:"vault",label:"🔐 Vault Password"}].map(t=>(
            <button key={t.key} onClick={()=>setTab(t.key)}
              style={{flex:1,padding:"11px 10px",fontSize:12,fontWeight:tab===t.key?700:500,border:"none",cursor:"pointer",background:tab===t.key?C.navy:"#fff",color:tab===t.key?"#fff":C.muted,transition:"all 0.15s",letterSpacing:0.1}}>
              {t.label}
            </button>
          ))}
        </div>

        {/* Profile Tab */}
        {tab==="profile"&&(
          <Card>
            {/* Read-only info banner */}
            <div style={{background:C.surface,borderRadius:8,padding:"10px 14px",marginBottom:18,display:"flex",gap:14,alignItems:"center",border:`1px solid ${C.blueBorder}`}}>
              <div style={{width:40,height:40,borderRadius:10,background:C.bluePale,border:`1px solid ${C.blueBorder}`,display:"flex",alignItems:"center",justifyContent:"center",fontSize:16,fontWeight:800,color:C.blue,flexShrink:0}}>{user.name?.slice(0,2).toUpperCase()}</div>
              <div>
                <div style={{fontSize:13,fontWeight:700,color:C.navy}}>{user.name}</div>
                <div style={{fontSize:11,color:C.muted}}>{categoryLabel(user.category)} · SEBI: {user.sebi}</div>
              </div>
            </div>

            {/* Category locked notice */}
            <div style={{background:"#FFF8E6",border:`1px solid ${C.amber}33`,borderRadius:7,padding:"8px 13px",marginBottom:16,fontSize:12,color:C.text,display:"flex",alignItems:"center",gap:8}}>
              <span>🔒</span>
              <span><strong>AIF Category ({categoryLabel(user.category)})</strong> and <strong>SEBI Reg. No.</strong> are locked and cannot be changed after registration.</span>
            </div>

            {profileErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{profileErr}</div>}
            {profileSuccess&&<div style={{background:C.greenBg,color:C.green,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.green}22`,fontWeight:700}}>✓ Profile updated successfully!</div>}

            <Input label="Fund / Entity Name" value={profileForm.name} onChange={v=>setProfileForm(f=>({...f,name:v}))} placeholder="Your registered fund name" required/>
            <Input label="Email Address" type="email" value={profileForm.email} onChange={v=>setProfileForm(f=>({...f,email:v}))} placeholder="your@email.com" required/>
            <Input label="Phone Number" value={profileForm.phone} onChange={v=>setProfileForm(f=>({...f,phone:v}))} placeholder="10-digit mobile number" required/>

            {/* Read-only fields */}
            <div style={{display:"grid",gridTemplateColumns:"1fr 1fr",gap:14,marginBottom:14}}>
              <div>
                <label style={{fontSize:12,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>AIF Category</label>
                <div style={{padding:"9px 12px",background:C.surface,borderRadius:7,border:`1px solid ${C.blueBorder}`,fontSize:14,color:C.muted,fontWeight:600}}>{categoryLabel(user.category)}</div>
              </div>
              <div>
                <label style={{fontSize:12,fontWeight:700,color:C.muted,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>SEBI Reg. No.</label>
                <div style={{padding:"9px 12px",background:C.surface,borderRadius:7,border:`1px solid ${C.blueBorder}`,fontSize:13,color:C.muted,fontFamily:"monospace",letterSpacing:0.5}}>{user.sebi}</div>
              </div>
            </div>

            <Btn onClick={handleSaveProfile} size="lg" style={{width:"100%",justifyContent:"center"}}>Save Profile</Btn>
          </Card>
        )}

        {/* Password Tab */}
        {tab==="password"&&(
          <Card>
            {pwSuccess&&<div style={{background:C.greenBg,color:C.green,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.green}22`,fontWeight:700}}>✓ Password changed successfully!</div>}
            {!pwOtpVerified?(
              <>
                <div style={{background:C.bluePale,border:`1px solid ${C.blueBorder}`,borderRadius:8,padding:"12px 14px",marginBottom:18,fontSize:13,color:C.navy,lineHeight:1.7}}>
                  🔒 <strong>Email verification required.</strong><br/>
                  <span style={{fontSize:12,color:C.muted}}>To change your password, we'll send a reset link to your registered email address.</span>
                </div>
                <EmailLinkFlow
                  title="Verify to Change Password"
                  emailDisplay={user.email?user.email.replace(/(.{3}).+(@.+)/,"$1***$2"):"comp***@fund.in"}
                  realEmail={user.email||""}
                  userName={user.name||""}
                  type="login"
                  onVerified={()=>setPwOtpVerified(true)}
                  onCancel={()=>setTab("profile")}
                />
              </>
            ):(
              <>
                <div style={{background:C.greenBg,border:`1px solid ${C.green}33`,borderRadius:8,padding:"10px 14px",marginBottom:18,fontSize:13,color:C.green,fontWeight:700}}>✓ Link verified — set your new password below.</div>
                {pwErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{pwErr}</div>}
                <PwField label="New Password" value={pwForm.newPw} onChange={v=>setPwForm(f=>({...f,newPw:v}))} show={showNew} onToggle={()=>setShowNew(v=>!v)} placeholder="Min 8 chars, uppercase, number, symbol"/>
                {pwForm.newPw&&(
                  <div style={{marginBottom:14,marginTop:-6}}>
                    <div style={{display:"flex",gap:3,marginBottom:5}}>
                      {[1,2,3,4].map(i=><div key={i} style={{flex:1,height:3,borderRadius:3,background:i<=str?strColors[str]:C.blueBorder,transition:"background 0.2s"}}/>)}
                    </div>
                    <span style={{fontSize:11,color:strColors[str],fontWeight:700,letterSpacing:0.3,textTransform:"uppercase"}}>{strLabels[str]} password</span>
                  </div>
                )}
                <PwField label="Confirm New Password" value={pwForm.confirm} onChange={v=>setPwForm(f=>({...f,confirm:v}))} show={showConfirm} onToggle={()=>setShowConfirm(v=>!v)} placeholder="Re-enter your new password"/>
                <Btn onClick={handleSavePw} size="lg" style={{width:"100%",justifyContent:"center",marginTop:8}}>Update Password</Btn>
              </>
            )}
          </Card>
        )}
        {/* Vault Password Tab */}
        {tab==="vault"&&(
          <Card>
            {vaultPwSuccess&&<div style={{background:C.greenBg,color:C.green,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.green}22`,fontWeight:700}}>✓ Vault password updated successfully!</div>}

            {/* Status banner */}
            <div style={{background:hasVaultPin?C.bluePale:C.surface,border:`1px solid ${C.blueBorder}`,borderRadius:8,padding:"12px 14px",marginBottom:18,display:"flex",alignItems:"center",gap:12}}>
              <span style={{fontSize:22}}>{hasVaultPin?"🔐":"🔓"}</span>
              <div>
                <div style={{fontSize:13,fontWeight:700,color:C.navy,marginBottom:2}}>{hasVaultPin?"Vault Password is Set":"No Vault Password Set"}</div>
                <div style={{fontSize:12,color:C.muted}}>{hasVaultPin?"Your vault is protected. Use a reset link to change your vault password.":"You haven't set up a vault password yet. Visit the Password Vault to create one."}</div>
              </div>
            </div>

            {!hasVaultPin?(
              <div style={{textAlign:"center",padding:"12px 0 8px"}}>
                <Btn onClick={()=>{}} variant="outline" style={{opacity:0.5,cursor:"not-allowed"}}>No vault password to change</Btn>
                <p style={{fontSize:12,color:C.muted,marginTop:10}}>First set up your vault password by visiting the <strong>Password Vault</strong> tab.</p>
              </div>
            ):!vaultOtpVerified?(
              <>
                <div style={{background:"#FFF8E6",border:`1px solid ${C.amber}33`,borderRadius:8,padding:"12px 14px",marginBottom:18,fontSize:13,color:C.navy,lineHeight:1.7}}>
                  🔐 <strong>Email verification required.</strong><br/>
                  <span style={{fontSize:12,color:C.muted}}>Changing your vault password requires a reset link sent to your registered email address.</span>
                </div>
                <EmailLinkFlow
                  title="Change Vault Password"
                  emailDisplay={user.email?user.email.replace(/(.{3}).+(@.+)/,"$1***$2"):"comp***@fund.in"}
                  realEmail={user.email||""}
                  userName={user.name||""}
                  type="vault"
                  onVerified={()=>setVaultOtpVerified(true)}
                  onCancel={()=>setTab("profile")}
                />
              </>
            ):(
              <>
                <div style={{background:C.greenBg,border:`1px solid ${C.green}33`,borderRadius:8,padding:"10px 14px",marginBottom:18,fontSize:13,color:C.green,fontWeight:700}}>✓ Link verified — set your new vault password below.</div>
                {vaultPwErr&&<div style={{background:C.redBg,color:C.red,padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:`1px solid ${C.red}22`,fontWeight:600}}>{vaultPwErr}</div>}
                <div style={{marginBottom:18}}>
                  <label style={{fontSize:12,fontWeight:700,color:C.navy,display:"block",marginBottom:5,letterSpacing:0.3,textTransform:"uppercase"}}>New Vault Password</label>
                  <div style={{display:"flex",gap:6}}>
                    <input type={vaultPwForm.show?"text":"password"} value={vaultPwForm.newPw} onChange={e=>setVaultPwForm(f=>({...f,newPw:e.target.value}))} placeholder="Minimum 4 characters"
                      style={{flex:1,padding:"9px 12px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,fontSize:14,color:C.text,background:"#FAFCFF"}}/>
                    <button onClick={()=>setVaultPwForm(f=>({...f,show:!f.show}))} style={{padding:"9px 13px",borderRadius:7,border:`1.5px solid ${C.blueBorder}`,background:"#fff",cursor:"pointer",fontSize:14,color:C.muted}}>{vaultPwForm.show?"🙈":"👁"}</button>
                  </div>
                  <div style={{fontSize:11,color:C.muted,marginTop:5}}>This is separate from your login password. You'll use it every time you open the Password Vault.</div>
                </div>
                <Btn onClick={handleSaveVaultPw} size="lg" style={{width:"100%",justifyContent:"center"}}>Update Vault Password</Btn>
              </>
            )}
          </Card>
        )}
      </div>
    </div>
  );
}
// ─── RESET FROM LINK PAGE ─────────────────────────────────────────────────────
// Shown when user clicks the reset link from their email
function ResetFromLinkPage({email,type,token,users,onComplete}){
  const [newPw,setNewPw]=useState("");
  const [confirm,setConfirm]=useState("");
  const [showNew,setShowNew]=useState(false);
  const [showConfirm,setShowConfirm]=useState(false);
  const [err,setErr]=useState("");
  const [done,setDone]=useState(false);

  const strColors=["","#B02020","#B07000","#1670A0","#167040"];
  const strLabels=["","Weak","Fair","Good","Strong"];
  const str=!newPw?0:newPw.length<6?1:newPw.length<8?2:/[A-Z]/.test(newPw)&&/[0-9]/.test(newPw)&&/[^A-Za-z0-9]/.test(newPw)?4:/[A-Z]/.test(newPw)&&/[0-9]/.test(newPw)?3:2;

  const handleSave=()=>{
    if(!newPw||newPw.length<8){setErr("Password must be at least 8 characters.");return;}
    if(!/[A-Z]/.test(newPw)){setErr("Include at least one uppercase letter.");return;}
    if(!/[0-9]/.test(newPw)){setErr("Include at least one number.");return;}
    if(newPw!==confirm){setErr("Passwords do not match.");return;}
    // Consume the token
    const data=consumeResetToken(token);
    if(!data){setErr("This reset link has expired. Please request a new one.");return;}
    // Update user record
    const updated=users.map(u=>{
      if(u.email!==email) return u;
      if(type==="vault") return {...u,vaultPin:newPw};
      return {...u,password:newPw};
    });
    onComplete(updated);
    setDone(true);
  };

  return(
    <div style={{minHeight:"100vh",background:`linear-gradient(145deg,#071A3E 0%,#0A1F50 40%,#0D2760 70%,#0E3280 100%)`,display:"flex",alignItems:"center",justifyContent:"center",padding:20}}>
      <div style={{width:"100%",maxWidth:420}}>
        <div style={{textAlign:"center",marginBottom:24}}>
          <div style={{display:"inline-block",background:"#fff",borderRadius:14,padding:"12px 22px",boxShadow:"0 4px 16px rgba(7,26,62,0.18)",border:"1.5px solid #E8F0FC"}}><LogoMark size={72}/></div>
        </div>
        <div style={{background:"#fff",borderRadius:16,padding:32,boxShadow:"0 24px 64px rgba(0,0,0,0.28)"}}>
          {done?(
            <div style={{textAlign:"center"}}>
              <div style={{width:56,height:56,borderRadius:"50%",background:"#E8F6EE",border:"2px solid #167040",display:"flex",alignItems:"center",justifyContent:"center",fontSize:24,margin:"0 auto 16px"}}>✓</div>
              <h2 style={{color:"#071A3E",fontWeight:800,margin:"0 0 8px"}}>Password Updated!</h2>
              <p style={{color:"#6B7A9F",fontSize:14,margin:"0 0 24px"}}>Your {type==="vault"?"vault password":"login password"} has been changed successfully.</p>
              <Btn size="lg" style={{width:"100%",justifyContent:"center"}} onClick={()=>{try{window.history.replaceState({},"",window.location.pathname);}catch(e){}window.location.reload();}}>
                Go to Login →
              </Btn>
            </div>
          ):(
            <>
              <h2 style={{fontSize:18,fontWeight:800,color:"#071A3E",marginTop:0,marginBottom:4}}>
                Set New {type==="vault"?"Vault Password":"Password"}
              </h2>
              <p style={{fontSize:13,color:"#6B7A9F",marginBottom:20,marginTop:0}}>
                For account: <strong style={{color:"#071A3E"}}>{email}</strong>
              </p>
              {err&&<div style={{background:"#FEF0F0",color:"#B02020",padding:"9px 13px",borderRadius:7,fontSize:13,marginBottom:14,border:"1px solid #B0202022",fontWeight:600}}>{err}</div>}
              <PwField label={type==="vault"?"New Vault Password":"New Password"} value={newPw} onChange={setNewPw} show={showNew} onToggle={()=>setShowNew(v=>!v)} placeholder="Min 8 chars, uppercase, number"/>
              {newPw&&(
                <div style={{marginBottom:14,marginTop:-6}}>
                  <div style={{display:"flex",gap:3,marginBottom:5}}>
                    {[1,2,3,4].map(i=><div key={i} style={{flex:1,height:3,borderRadius:3,background:i<=str?strColors[str]:"#BDCFEE",transition:"background 0.2s"}}/>)}
                  </div>
                  <span style={{fontSize:11,color:strColors[str],fontWeight:700,letterSpacing:0.3,textTransform:"uppercase"}}>{strLabels[str]} password</span>
                </div>
              )}
              <PwField label="Confirm Password" value={confirm} onChange={setConfirm} show={showConfirm} onToggle={()=>setShowConfirm(v=>!v)} placeholder="Re-enter password"/>
              <Btn onClick={handleSave} size="lg" style={{width:"100%",justifyContent:"center",marginTop:8}}>
                Set New {type==="vault"?"Vault Password":"Password"} →
              </Btn>
            </>
          )}
        </div>
      </div>
    </div>
  );
}

function App(){
  // ── Detect reset token in URL on load ────────────────────────────────────────
  const [resetToken]=useState(()=>{
    try{const p=new URLSearchParams(window.location.search);return p.get("reset")||null;}catch{return null;}
  });
  const [resetType]=useState(()=>{
    try{const p=new URLSearchParams(window.location.search);return p.get("type")||"login";}catch{return "login";}
  });
  // If valid token, start on reset screen instead of login
  const [screen,setScreen]=useState(()=>{
    if(!resetToken) return "login";
    const data=validateResetToken(resetToken);
    return data ? "reset_from_link" : "login";
  });
  const [resetTokenData]=useState(()=>{
    if(!resetToken) return null;
    return validateResetToken(resetToken);
  });

  const [view,setView]=useState("dashboard");
  const [calendarFilter,setCalendarFilter]=useState("all");
  const [vaultUnlocked,setVaultUnlocked]=useState(false);

  // ── Helper: create a persisted state backed by localStorage ──────────────────
  const usePersisted=(key,init)=>{
    const [val,setRaw]=useState(()=>{try{const s=localStorage.getItem(key);return s!==null?JSON.parse(s):init;}catch{return init;}});
    const set=v=>{const next=typeof v==="function"?v(val):v;setRaw(next);try{localStorage.setItem(key,JSON.stringify(next));}catch{}};
    return [val,set];
  };

  // ── Persisted state ───────────────────────────────────────────────────────────
  // Logged-in user object (null = logged out)
  const [user,setUserRaw]=usePersisted("aif_user",null);
  const setUser=v=>{const next=typeof v==="function"?v(user):v;setUserRaw(next);};

  // Admin settings
  const [adminEmail,setAdminEmail]=usePersisted("aif_adminEmail","admin@aifnext.com");
  const [adminLoginEmail,setAdminLoginEmail]=usePersisted("aif_adminLoginEmail","admin@aifnext.com");

  // All registered users (profiles + passwords + vault pins)
  const [users,setUsers]=usePersisted("aif_users",mockUsers.map(u=>({...u,password:"User@1234",vaultPin:""})));

  // Broadcasts — survive re-login, only removed when admin deletes
  const [broadcasts,setBroadcasts]=usePersisted("aif_broadcasts",[]);

  // Per-user compliance done status (keyed by email)
  const [allDoneSets,setAllDoneSets]=usePersisted("aif_donesets",{});

  // Per-user custom compliance items (keyed by email)
  const defaultCustomItems=[
    {id:101,dueDate:"2026-04-20",explanation:"Board meeting minutes to be filed with SEBI-approved CA",link:"",status:"due-soon",done:false},
    {id:102,dueDate:"2026-05-10",explanation:"LP update call and quarterly investor communication",link:"",status:"upcoming",done:false},
  ];
  const [allCustomItems,setAllCustomItems]=usePersisted("aif_customitems",{});

  // Per-user SEBI circulars (admin edits)
  const [circularsData,setCircularsData]=usePersisted("aif_circulars",null);
  // ─────────────────────────────────────────────────────────────────────────────

  // Derived per-user state
  const userDoneSet      = user ? allDoneSets[user.email]   || {} : {};
  const setUserDoneSet   = ds  => setAllDoneSets(a=>({...a,[user.email]:ds}));
  const userCustomItems  = user ? (allCustomItems[user.email]??defaultCustomItems) : defaultCustomItems;
  const setUserCustomItems = items => setAllCustomItems(a=>({...a,[user.email]:items}));

  const handleLogin=u=>{
    // Always load the latest version of this user from persisted users array
    const found=users.find(x=>x.email===u.email)||u;
    setUser(found);setView("dashboard");setScreen("app");
    setVaultUnlocked(false);
  };
  const handleLogout=()=>{setUser(null);setScreen("login");setVaultUnlocked(false);};

  // When any user/admin updates their own profile or password, sync both user session and users array
  const handleUserUpdate=updated=>{
    setUser(updated);
    setUsers(a=>a.map(x=>x.id===updated.id?updated:x));
  };

  // When admin updates a user from ManageUsers, also update logged-in session if it's the same person
  const handleUsersChange=updated=>{
    setUsers(updated);
    if(user){
      const refreshed=updated.find(x=>x.email===user.email);
      if(refreshed) setUser(refreshed);
    }
  };

  const handleDeleteBroadcast=id=>{
    setBroadcasts(a=>a.filter(b=>b.id!==id));
  };

  const goToCalendar=()=>{setCalendarFilter("all");setView("calendar");};

  // Restore screen from persisted user on mount
  useState(()=>{if(user)setScreen("app");});

  if(screen==="register") return <RegisterPage onBack={()=>setScreen("login")}/>;

  // ── Handle reset link from email ─────────────────────────────────────────────
  if(screen==="reset_from_link"&&resetTokenData){
    return <ResetFromLinkPage
      email={resetTokenData.email}
      type={resetTokenData.type}
      token={resetToken}
      users={users}
      onComplete={(updatedUsers)=>{
        setUsers(updatedUsers);
        // Clear URL params and go to login
        try{window.history.replaceState({},"",window.location.pathname);}catch(e){}
        setScreen("login");
      }}
    />;
  }

  if(screen==="login"||!user) return <LoginPage onLogin={handleLogin} onGoRegister={()=>setScreen("register")}/>;
  const renderView=()=>{
    if(view==="dashboard") return <Dashboard user={user} setView={setView} setCalendarFilter={setCalendarFilter}/>;
    if(view==="calendar") return <ComplianceCalendar user={user} initialFilter={calendarFilter} doneSet={userDoneSet} setDoneSet={setUserDoneSet}/>;
    if(view==="circulars") return <SEBICirculars user={user}/>;
    if(view==="vault") return <Vault
      initialVaultPin={user.vaultPin||""}
      onVaultPinChange={pin=>handleUserUpdate({...user,vaultPin:pin})}
      vaultUnlocked={vaultUnlocked}
      setVaultUnlocked={setVaultUnlocked}
      userEmail={user.email||""}
    />;
    if(view==="custom") return <CustomCompliance items={userCustomItems} setItems={setUserCustomItems}/>;
    if(view==="assistance") return <Assistance user={user} adminEmail={adminEmail}/>;
    if(view==="notifications") return <Notifications broadcasts={broadcasts} userRole={user?.role} onDelete={handleDeleteBroadcast}/>;
    if(view==="smtp") return <SmtpSettings/>;
    if(view==="users") return <ManageUsers users={users} setUsers={handleUsersChange}/>;
    if(view==="changepassword") return <AdminChangePassword adminLoginEmail={adminLoginEmail} onEmailChange={setAdminLoginEmail}/>;
    if(view==="contactemail") return <AdminContactEmail adminEmail={adminEmail} onEmailChange={setAdminEmail}/>;
    if(view==="broadcast") return <BroadcastNotification broadcasts={broadcasts} onSend={msg=>setBroadcasts(a=>[{...msg,id:Date.now()},...a])} onDelete={handleDeleteBroadcast}/>;
    if(view==="usersettings") return <UserSettings user={user} onUpdate={handleUserUpdate}/>;
    return <Dashboard user={user} setView={setView} setCalendarFilter={setCalendarFilter}/>;
  };
  return <Layout user={user} view={view} setView={setView} onLogout={handleLogout}>{renderView()}</Layout>;
}
