/* ZY console — 1688 店铺运营 COO · 8 卡日报（1688-store-ops-coo-ui-contract.md）。
   9-board read-harvest：sycm 浏览器快照(卡1-3, 11:30 采) + AOP 实时(卡4-7) + Hermes 建议(卡8)。
   4 店 + 1 汇总位切换；本线目前【无可逆受控写面】（智能投放/订购制无离散写口）——
   卡片本身纯只读+Hermes advisory；§5 的 3 个业务动作只展示为 UI-only 审批卡 stub
   （写面默认关闭，绝不自动执行），走共享 KitControlledAction 而不是自建第 4 套写壳。 */
const DSSTORE1688 = window.ZYDesignSystem_d746df;

// finance_source_status 4 态（本域自己的枚举映射，不与其他域共享颜色表 —— KitEnumBadge 约定）。
const FIN_STATUS_MAP = {
  ok: { label: "数据健康", tone: "good" },
  ok_refund_unavailable: { label: "退款未知·其余正常", tone: "warn" },
  degraded_unreadable: { label: "应收/到账不全", tone: "warn" },
  fetch_error: { label: "抓取失败", tone: "danger" },
  blocked_missing_credentials: { label: "未授权", tone: "danger" },
};

// settle_basis 徽标（1688 目前只出现 order_status_escrow_proxy 一种；预留 shopify 对照，避免误判为银行实到）。
const SETTLE_BASIS_MAP = {
  order_status_escrow_proxy: { label: "推导 · 担保释放", tone: "warn" },
  shopify_payments_payouts: { label: "银行实到", tone: "good" },
};

// 卡1-3 sycm 抓取失败徽标（诚实空态，绝不渲染 0）。
function fetchOk(row) { return row && !row.fetch_error; }

function Store1688Card({ title, icon, time, write, clean, footnote, attn, wide, id, children }) {
  const { Icon } = DSSTORE1688;
  return (
    <div className={"ttcard" + (wide ? " spgrid__wide" : "")} id={id}>
      <div className="ttcard__h">
        <span className="ttcard__ic"><Icon name={icon} size={16} /></span>
        <span className="ttcard__title">{title}</span>
        <span className="spcorner">
          {write
            ? <span className="spchip spchip--write"><Icon name="PenLine" size={11} />含自动写</span>
            : <span className="spchip spchip--nowrite"><Icon name="Eye" size={11} />只读</span>}
          {clean
            ? <span className="spchip spchip--clean"><Icon name="ShieldCheck" size={11} />脱敏✓</span>
            : <span className="spchip spchip--dirty"><Icon name="ShieldAlert" size={11} />脱敏异常</span>}
          <span className="ttcard__time"><Icon name="Clock" size={11} />{time}</span>
        </span>
      </div>
      <div className="ttcard__body">{children}</div>
      {footnote && <div className="spfoot"><Icon name="Info" size={12} />{footnote}</div>}
    </div>
  );
}

function KitStore1688({ onAct }) {
  const { Card, Pill, Icon, EmptyBox } = DSSTORE1688;
  const K = window.KIT;
  const S = window.KitStrip;
  const EnumBadge = window.KitEnumBadge;
  const fmtMoney = window.fmtMoney;

  const stores = K.store1688Stores || [];
  const SWITCH = [...stores.map(s => ({ k: s.store_id, label: s.display_name })), { k: "all", label: "4店汇总" }];
  const [sel, setSel] = React.useState("all");
  const isAll = sel === "all";
  const curStore = stores.find(s => s.store_id === sel);

  if (!K.store1688Finance || !K.store1688Overview) {
    return (
      <div className="view viewfade">
        <S icon="Store" title="1688 · 店铺运营 COO" mode="只读监督 · 8 卡"
          judge="1688 店铺运营 8 卡读模型尚未接入" src="1688 店铺运营日报（只读，8 卡）" tone="neutral" toneLabel="待接入" />
        <EmptyBox title="1688 店铺运营 · 未接入真实只读数据" reason="该 COO 尚未连接真实读模型；按系统规则，缺源时显示空状态，不使用演示数据补位。" />
      </div>
    );
  }

  // 卡 4 store_finance：单店直查一行；汇总位用契约定义好的 4 店合计行（唯一有求和定义的卡）。
  const finRows = K.store1688Finance;
  const finRow = isAll ? K.store1688FinanceTotal : finRows.find(r => r.store_id === sel);

  // 卡 1 store_overview
  const ovRows = K.store1688Overview;
  const ovRow = isAll ? null : ovRows.find(r => r.store_id === sel);

  // 卡 2 link_efficiency（全量分页样例；汇总位仍展示全部行，不做跨店均值）
  const linkEff = K.store1688LinkEfficiency || { rows: [] };
  const linkRows = isAll ? linkEff.rows : linkEff.rows.filter(r => r.store_id === sel);

  // 卡 3 customer_distribution
  const custRows = K.store1688CustomerDistribution || [];
  const custRow = isAll ? null : custRows.find(r => r.store_id === sel);

  // 卡 5 product_monitor
  const pm = K.store1688ProductMonitor || { by_store: [] };
  const pmStores = isAll ? pm.by_store : pm.by_store.filter(s => s.store_id === sel);
  const pmPendingTotal = pm.by_store.reduce((s, r) => s + (r.pending_decision_count || 0), 0);

  // 卡 6 platform_activity
  const pa = K.store1688PlatformActivity || { by_store: [] };
  const paStores = isAll ? pa.by_store : pa.by_store.filter(s => s.store_id === sel);
  const paAllActivities = pa.by_store.flatMap(s => (s.activities || []).map(a => ({ ...a, store_name: s.display_name })));
  const paNearDeadline = paAllActivities.filter(a => a.near_deadline).length;

  // 卡 7 read_capability（4 段，全局，不按店拆分——本身就是"读方法能力"总览，不随店切换变化）
  const rc = K.store1688ReadCapability;

  // 卡 8 hermes_digest
  const hd = K.store1688HermesDigest;
  const hdP1 = (hd.alerts || []).filter(a => a.severity === "P1").length;

  const rollup = K.store1688RollupCounts || {};

  // ATTENTION 聚合条：卡1-3(sycm 异常) + 卡4(应收null) + 卡5(待决策) + 卡6(临近截止) + 卡7(写门待批) + 卡8(P1告警)
  const scrollTo = (cid) => {
    const el = document.getElementById(cid);
    const host = document.querySelector(".scroll");
    if (el && host) host.scrollTop = Math.max(0, host.scrollTop + (el.getBoundingClientRect().top - host.getBoundingClientRect().top) - 16);
    if (el) { el.classList.add("ttcard--flash"); setTimeout(() => el.classList.remove("ttcard--flash"), 1200); }
  };
  const caps = [];
  if (ovRows.some(r => !fetchOk(r) || (r.conversion_rate != null && r.revenue != null && r.conversion_rate < 3))) {
    caps.push({ id: "s1688-overview", area: "本店诊断", key: "营收/转化跌破阈值或抓取失败", red: ovRows.some(r => !fetchOk(r)) });
  }
  if ((linkEff.attention_count || 0) > 0) caps.push({ id: "s1688-link", area: "链接效率", key: "0 转化高展现单品", red: false });
  if (custRows.some(r => r.attention === "repeat_rate_anomaly" || r.fetch_error)) caps.push({ id: "s1688-customer", area: "客户分布", key: "回头率异常", red: custRows.some(r => r.fetch_error) });
  if (finRows.some(r => r.receivable == null || r.finance_source_status !== "ok")) caps.push({ id: "s1688-finance", area: "店铺财务", key: "应收=null", red: true });
  if (pmPendingTotal > 0) caps.push({ id: "s1688-product", area: "商品监控", key: "有待决策项", red: false });
  if (paNearDeadline > 0) caps.push({ id: "s1688-activity", area: "平台活动", key: "临近截止", red: false });
  if (rc && rc.write_gate_status.write_method_count > 0 && !rc.write_gate_status.explicit_boss_approval_recorded) caps.push({ id: "s1688-readcap", area: "读能力/写门", key: "写门请求待批", red: false });
  if (hdP1 > 0) caps.push({ id: "s1688-hermes", area: "大脑建议", key: "有 P1 告警", red: true });

  const T = "2026-06-29 11:30";

  return (
    <div className="view viewfade">
      <S icon="Store" title="1688 · 店铺运营 COO" mode="只读监督 · 8 卡（9-board 读采集）"
        judge="sycm 浏览器快照 + AOP 实时只读聚合 · 无可逆受控写面（智能投放/订购制无离散写口）· 4 店 + 汇总切换 · 每卡自带 as_of 新鲜度戳"
        src="1688 店铺运营日报（只读，8 卡）" tone="good" toneLabel="只读已接入" />

      <Card>
        <div className="sechead">
          <div className="sechead__l">
            <span className="sechead__ic"><Icon name="Store" size={15} /></span>
            <div>
              <div className="sechead__t">店铺切换</div>
              <div className="sechead__s">卡4(店铺财务)在汇总位有契约定义的 4 店合计；卡1-3(sycm)汇总位只给逐店明细，不臆造跨店均值</div>
            </div>
          </div>
        </div>
        <div className="fchips">
          {SWITCH.map(s => <button key={s.k} className={"fchip" + (sel === s.k ? " is-on" : "")} onClick={() => setSel(s.k)}>{s.label}</button>)}
        </div>
      </Card>

      <Card>
        <div className="sechead">
          <div className="sechead__l">
            <span className="sechead__ic"><Icon name="Megaphone" size={15} /></span>
            <div>
              <div className="sechead__t">现在该看什么 · ATTENTION</div>
              <div className="sechead__s">红=数据健康/抓取失败/P1告警 · 琥珀=待决策/待批/临近截止 · 点胶囊跳到对应卡</div>
            </div>
          </div>
        </div>
        {caps.length > 0 ? (
          <div className="ttatt">
            {caps.map((c, i) => (
              <button key={c.id + i} className={"ttcap ttcap--" + (c.red ? "red" : "amber")} onClick={() => scrollTo(c.id)}>
                <span className="ttcap__dot" />
                <span className="ttcap__area">{c.area}</span>
                <span className="ttcap__k">{c.key}</span>
              </button>
            ))}
          </div>
        ) : (
          <div className="spcalm"><Icon name="CircleCheck" size={16} />全部正常 · <b>0 项</b>需要你现在处理。</div>
        )}
      </Card>

      <div className="spgrid">
        {/* 卡 1 store_overview */}
        <Store1688Card id="s1688-overview" title="店铺总览 · 本店诊断" icon="Gauge" time={T} write={false} clean
          footnote="sycm business_overview_snapshot · 每日 11:30 采 · 抓取失败=「抓取失败」，绝不显示 0">
          {isAll ? (
            <div className="dtscroll"><div className="dt" style={{ minWidth: 560 }}>
              <div className="dt__head" style={{ gridTemplateColumns: "1.2fr 1fr 1fr 1fr 1.4fr" }}>
                <span>门店</span><span>营收</span><span>访客</span><span>转化率</span><span>诊断 / 排名</span>
              </div>
              {ovRows.map(r => (
                <div className="dt__row" style={{ gridTemplateColumns: "1.2fr 1fr 1fr 1fr 1.4fr" }} key={r.store_id}>
                  <span className="dt__name"><b>{r.display_name}</b></span>
                  <span className="num">{fetchOk(r) ? fmtMoney(r.revenue, "CNY") : "—"}</span>
                  <span className="num">{fetchOk(r) ? (r.visitors ?? "—") : "—"}</span>
                  <span className="num">{fetchOk(r) ? (r.conversion_rate != null ? r.conversion_rate + "%" : "—") : "—"}</span>
                  <span className="dt__sub2">{fetchOk(r) ? (r.peer_diagnosis || "—") + (r.rank_30d ? " · " + r.rank_30d : "") : <span className="ttnull">抓取失败</span>}</span>
                </div>
              ))}
            </div></div>
          ) : (
            <div className="ttcgrid">
              <div className="ttc"><span className="ttc__v num">{fetchOk(ovRow) ? fmtMoney(ovRow.revenue, "CNY") : <span className="ttnull">抓取失败</span>}</span><span className="ttc__l">营收</span></div>
              <div className="ttc"><span className="ttc__v num">{fetchOk(ovRow) ? (ovRow.visitors ?? "—") : <span className="ttnull">—</span>}</span><span className="ttc__l">访客</span></div>
              <div className="ttc"><span className="ttc__v num">{fetchOk(ovRow) ? (ovRow.views ?? "—") : <span className="ttnull">—</span>}</span><span className="ttc__l">浏览量</span></div>
              <div className={"ttc" + (fetchOk(ovRow) && ovRow.conversion_rate < 3 ? " ttc--amber" : "")}>
                <span className="ttc__v num">{fetchOk(ovRow) ? (ovRow.conversion_rate != null ? ovRow.conversion_rate + "%" : "—") : <span className="ttnull">—</span>}</span>
                <span className="ttc__l">转化率</span>
              </div>
              <div className="ttc" style={{ gridColumn: "span 2" }}>
                <span className="ttc__v" style={{ fontSize: 13 }}>{fetchOk(ovRow) ? (ovRow.peer_diagnosis || "—") : <span className="ttnull">抓取失败</span>}</span>
                <span className="ttc__l">同行诊断 · 近 30 天{ovRow && ovRow.rank_30d ? "：" + ovRow.rank_30d : ""}</span>
              </div>
            </div>
          )}
        </Store1688Card>

        {/* 卡 2 link_efficiency */}
        <Store1688Card id="s1688-link" title="链接效率 · 逐商品" icon="Link2" time={T} write={false} clean
          footnote={"sycm link_efficiency_snapshot · 全量翻页第 " + (linkEff.page || 1) + " 页（共 " + (linkEff.total_count ?? "—") + " 条）· 0 转化高展现单品进 attention"}>
          <div className="dtscroll"><div className="dt" style={{ minWidth: 560 }}>
            <div className="dt__head" style={{ gridTemplateColumns: "0.9fr 1.6fr 0.9fr 0.9fr 0.9fr 1fr" }}>
              <span>门店</span><span>商品(链接)</span><span>展现</span><span>访客</span><span>转化率</span><span>支付</span>
            </div>
            {linkRows.map((r, i) => (
              <div className={"dt__row" + (r.attention === "zero_conversion_high_impression" ? " is-bad" : "")} style={{ gridTemplateColumns: "0.9fr 1.6fr 0.9fr 0.9fr 0.9fr 1fr" }} key={i}>
                <span className="dt__item">{(stores.find(s => s.store_id === r.store_id) || {}).display_name || r.store_id}</span>
                <span className="dt__name"><b>{r.sku_name}</b>{r.attention === "zero_conversion_high_impression" && <span className="dt__sub" style={{ color: "var(--negative)" }}>0 转化高展现</span>}</span>
                <span className="num">{r.views}</span>
                <span className="num">{r.visitors}</span>
                <span className="num">{r.conversion_rate}%</span>
                <span className="num">{fmtMoney(r.pay_amount, "CNY")}</span>
              </div>
            ))}
            {linkRows.length === 0 && <div className="emptyrow"><Icon name="Link2" size={14} />该店本页暂无数据</div>}
          </div></div>
        </Store1688Card>

        {/* 卡 3 customer_distribution — 聚合零 PII，绝不加客户列表/姓名/手机号 */}
        <Store1688Card id="s1688-customer" title="客户分布 · 聚合零 PII" icon="Users" time={T} write={false} clean
          footnote="sycm customer_overview_snapshot · 全部为聚合计数/比率，无客户列表、无姓名/手机号、无逐客钻取">
          {isAll ? (
            <div className="dtscroll"><div className="dt" style={{ minWidth: 560 }}>
              <div className="dt__head" style={{ gridTemplateColumns: "1fr 1fr 1fr 1fr 1fr" }}>
                <span>门店</span><span>回头率</span><span>新买家</span><span>询盘</span><span>复购</span>
              </div>
              {custRows.map(r => (
                <div className={"dt__row" + (r.attention === "repeat_rate_anomaly" ? " is-bad" : "")} style={{ gridTemplateColumns: "1fr 1fr 1fr 1fr 1fr" }} key={r.store_id}>
                  <span className="dt__name"><b>{r.display_name}</b></span>
                  <span className="num">{r.fetch_error ? <span className="ttnull">抓取失败</span> : r.repeat_purchase_rate + "%"}</span>
                  <span className="num">{r.fetch_error ? "—" : r.new_buyer_count}</span>
                  <span className="num">{r.fetch_error ? "—" : r.inquiry_count}</span>
                  <span className="num">{r.fetch_error ? "—" : r.repeat_buyer_count}</span>
                </div>
              ))}
            </div></div>
          ) : (
            <div className="ttcgrid">
              <div className={"ttc" + (custRow && custRow.attention === "repeat_rate_anomaly" ? " ttc--amber" : "")}>
                <span className="ttc__v num">{custRow && !custRow.fetch_error ? custRow.repeat_purchase_rate + "%" : <span className="ttnull">抓取失败</span>}</span><span className="ttc__l">回头率</span>
              </div>
              <div className="ttc"><span className="ttc__v num">{custRow && !custRow.fetch_error ? custRow.visitor_count : <span className="ttnull">—</span>}</span><span className="ttc__l">浏览</span></div>
              <div className="ttc"><span className="ttc__v num">{custRow && !custRow.fetch_error ? custRow.interaction_count : <span className="ttnull">—</span>}</span><span className="ttc__l">互动</span></div>
              <div className="ttc"><span className="ttc__v num">{custRow && !custRow.fetch_error ? custRow.new_buyer_count : <span className="ttnull">—</span>}</span><span className="ttc__l">新买家</span></div>
              <div className="ttc"><span className="ttc__v num">{custRow && !custRow.fetch_error ? custRow.inquiry_count : <span className="ttnull">—</span>}</span><span className="ttc__l">询盘</span></div>
              <div className="ttc"><span className="ttc__v num">{custRow && !custRow.fetch_error ? custRow.repeat_buyer_count : <span className="ttnull">—</span>}</span><span className="ttc__l">复购</span></div>
            </div>
          )}
        </Store1688Card>

        {/* 卡 4 store_finance — platform_store_finance.v1，只读镜像；对账以财务 COO 为准 */}
        <Store1688Card id="s1688-finance" title="店铺财务 · 应收/到账/待收" icon="Wallet" time={finRow ? finRow.as_of : T} write={false} clean
          footnote="只读镜像 · 对账以财务 COO 为准，本卡不做对账/利润判断 · 非 ok 状态的字段渲染「–」，绝不显示 0">
          {finRow ? (
            <div className="spsplit">
              <div className="ttbadges">
                <span className="ttbadge" style={{ fontSize: 13 }}>应收<b className="num" style={{ fontSize: 15 }}>{fmtMoney(finRow.receivable, finRow.currency)}</b></span>
                <EnumBadge value={finRow.finance_source_status} map={FIN_STATUS_MAP} />
              </div>
              <div className="ttbadges">
                <span className="ttbadge">到账<b className="num">{fmtMoney(finRow.settled, finRow.currency)}</b>
                  {finRow.settle_basis && <span className="finbasis finbasis--amber"><EnumBadge value={finRow.settle_basis} map={SETTLE_BASIS_MAP} /></span>}
                </span>
                <span className="ttbadge">待收<b className="num">{fmtMoney(finRow.pending_settlement, finRow.currency)}</b></span>
                <span className="ttbadge">退款<b className="num">{fmtMoney(finRow.refund, finRow.currency)}</b></span>
                <span className="ttbadge">订单数<b className="num">{finRow.order_count ?? "—"}</b></span>
              </div>
              {isAll && finRow.order_count_note && <div className="spfoot" style={{ marginTop: 0, paddingTop: 0, borderTop: "none" }}><Icon name="Info" size={12} />{finRow.order_count_note}</div>}
              <div className="dt__sub2">口径 {finRow.period} MTD · 截至 {finRow.as_of} · 数据源 {finRow.source_channel}</div>
            </div>
          ) : <div className="ttnull">—</div>}
        </Store1688Card>

        {/* 卡 5 product_monitor */}
        <Store1688Card id="s1688-product" title="商品监控 · 在售/变更/待审" icon="PackageSearch" time={T} write={false} clean
          footnote="open1688_aop 商品列表监控 · 有待决策项时进 attention">
          <div className="spsplit">
            <div className="ttbadges">
              <span className="ttbadge--stat ttbadge">在售<b className="num">{pmStores.reduce((s, r) => s + r.on_sale_count, 0)}</b></span>
              <span className="ttbadge">变更<b className="num">{pmStores.reduce((s, r) => s + r.changed_count, 0)}</b></span>
              <span className={"ttbadge" + (pmPendingTotal > 0 ? " ttbadge--amber" : "")}>{isAll ? "4店共" : "待决策"}<b className="num">{isAll ? rollup.product_monitor_pending_decisions : pmStores.reduce((s, r) => s + r.pending_decision_count, 0)}</b>{isAll ? "项待决策" : ""}</span>
            </div>
            {pmStores.flatMap(s => (s.items || []).map((it, i) => (
              <div className="ttbadge" key={s.store_id + i} style={{ display: "flex", justifyContent: "space-between", width: "100%" }}>
                <span>{isAll ? s.display_name + " · " : ""}{it.sku_name} · {it.change}</span>
                {it.pending_decision && <Pill tone="warn" soft>待决策</Pill>}
              </div>
            ))).length > 0 ? null : <div className="spcalm"><Icon name="CircleCheck" size={16} />当前无待决策商品变更。</div>}
            {pmStores.flatMap(s => (s.items || []).map(it => ({ ...it, storeName: s.display_name }))).map((it, i) => (
              <div className="whalert" key={i} style={{ padding: "8px 12px" }}>
                <span className="whalert__sev whalert__sev--warn">!</span>
                <div className="whalert__b"><div className="whalert__t">{isAll ? it.storeName + " · " : ""}{it.sku_name}<Pill tone="warn" soft>{it.change}</Pill></div></div>
              </div>
            ))}
          </div>
        </Store1688Card>

        {/* 卡 6 platform_activity */}
        <Store1688Card id="s1688-activity" title="平台活动 · 可报名 / 截止提醒" icon="CalendarClock" time={T} write={false} clean
          footnote="platform_activity_snapshot + enrollment_advisory · 临近截止进 attention · 报名走§5受控写审批卡（本卡不放执行按钮）">
          <div className="spsplit">
            {(isAll ? paAllActivities : (paStores[0] ? paStores[0].activities : [])).length > 0 ? (
              (isAll ? paAllActivities : (paStores[0] ? paStores[0].activities : [])).map((a, i) => (
                <div className="whalert" key={i} style={{ padding: "9px 12px", alignItems: "flex-start" }}>
                  <span className={"whalert__sev whalert__sev--" + (a.near_deadline ? "warn" : "neutral")}>{a.near_deadline ? "!" : "·"}</span>
                  <div className="whalert__b">
                    <div className="whalert__t">{isAll && a.store_name ? a.store_name + " · " : ""}{a.name}{a.near_deadline && <Pill tone="warn" soft>临近截止</Pill>}</div>
                    <div className="dt__sub2">窗口 {a.window} · 截止 {a.deadline}</div>
                    <div className="pqhint" style={{ marginTop: 4 }}><Icon name="Sparkles" size={11} />{a.advisory}</div>
                  </div>
                </div>
              ))
            ) : <div className="spcalm"><Icon name="CircleCheck" size={16} />当前无可报名活动。</div>}
          </div>
        </Store1688Card>

        {/* 卡 7 read_capability — 4 段 cockpit packet，全局不随门店切换（能力总览） */}
        <Store1688Card id="s1688-readcap" title="读能力 · 写门状态" icon="ShieldCheck" time={T} write={false} clean
          footnote="daily_readonly_cockpit_packet · 全部写门标志本卡内均渲染 False · 写门请求待批进 attention">
          <div className="spsplit">
            <div className="ttbadges">
              <span className="ttbadges__cap">店铺健康段</span>
              <span className="ttbadge">已确认<b className="num">{rc.store_health.confirmed_read_method_count}</b></span>
              <span className="ttbadge">排期中<b className="num">{rc.store_health.scheduled_read_method_count}</b></span>
              <span className="ttbadge">待精调<b className="num">{rc.store_health.param_refinement_required_method_count}</b></span>
            </div>
            <div className="ttbadges">
              <span className="ttbadges__cap">商品快照段</span>
              <span className="ttbadge">已确认<b className="num">{rc.product_snapshot.confirmed_read_method_count}</b></span>
              <span className="ttbadge">排期中<b className="num">{rc.product_snapshot.scheduled_read_method_count}</b></span>
              <span className="ttbadge">待精调<b className="num">{rc.product_snapshot.param_refinement_required_method_count}</b></span>
            </div>
            <div className="ttbadges">
              <span className="ttbadges__cap">读能力总计</span>
              <span className="ttbadge">已确认<b className="num">{rc.read_capability.confirmed_read_method_count}</b></span>
              <span className="ttbadge">排期中<b className="num">{rc.read_capability.scheduled_read_method_count}</b></span>
              <span className="ttbadge">待精调<b className="num">{rc.read_capability.param_refinement_required_method_count}</b></span>
            </div>
            <div className="ttflags">
              <span className="ttflag">写方法数 <b className="num">{rc.write_gate_status.write_method_count}</b></span>
              <span className={"ttflag" + (rc.write_gate_status.decision_status === "待批" ? " ttflag--amber" : "")}>决策状态 {rc.write_gate_status.decision_status}</span>
              <span className={"ttflag" + (!rc.write_gate_status.explicit_boss_approval_recorded ? " ttflag--red" : "")}><Icon name="Ban" size={12} />老板显式审批 {rc.write_gate_status.explicit_boss_approval_recorded ? "已记录" : "未记录"}</span>
              <span className={"ttflag" + (!rc.write_gate_status.live_write_probe_allowed_by_this_packet ? " ttflag--red" : "")}><Icon name="Ban" size={12} />本包允许真实写探测 {rc.write_gate_status.live_write_probe_allowed_by_this_packet ? "是" : "否"}</span>
            </div>
          </div>
        </Store1688Card>

        {/* 卡 8 hermes_digest — 「大脑建议」，纯 advisory */}
        <Store1688Card id="s1688-hermes" title="大脑建议 · Hermes" icon="Sparkles" time={T} write={false} clean wide
          footnote="经营变化 / 告警 / 趋势三件套 · 建议性，只影响明日推送；反馈走 Hermes 反馈 CLI/UI，本卡不放执行按钮">
          <div className="pqhead" style={{ padding: 0, border: "none" }}>
            <Icon name="Sparkles" size={16} />
            <span className="pqhead__t">{hd.headline}</span>
          </div>
          <div className="ttbadges">
            <span className={"ttbadge" + (hdP1 > 0 ? " ttbadge--amber" : "")}>P1 告警<b className="num">{hdP1}</b></span>
            <span className="ttbadge">经营变化<b className="num">{(hd.changes || []).length}</b></span>
            <span className="ttbadge">趋势<b className="num">{(hd.trends || []).length}</b></span>
            <span className="ttbadge">已抑制<b className="num">{hd.suppressed_count ?? 0}</b></span>
          </div>
          {(hd.alerts || []).length > 0 && (
            <div className="spneed">
              {hd.alerts.map((a, i) => (
                <div key={i} className="spneed__i"><Icon name="OctagonAlert" size={14} />{a.severity} · {(stores.find(s => s.store_id === a.store_id) || {}).display_name || a.store_id} · {a.text}</div>
              ))}
            </div>
          )}
          {(hd.changes || []).length > 0 && (
            <div style={{ display: "flex", flexDirection: "column", gap: 6 }}>
              {hd.changes.map((c, i) => (
                <div key={i} className="dt__sub2"><Icon name="ArrowRight" size={11} style={{ marginRight: 4 }} />{(stores.find(s => s.store_id === c.store_id) || {}).display_name || c.store_id} · {c.text}</div>
              ))}
            </div>
          )}
        </Store1688Card>
      </div>

      {/* §5 受控写 3 动作 — UI-only 审批卡 stub；写面默认关闭，绝不自动执行；点开走共享 KitControlledAction。
          此线目前无可逆受控写面（智能投放/订购制无离散写口）——按钮仅打开审批卡的预检/门控展示，
          点击「确认执行」在真实后端仍会被 write_surface_closed_by_default 挡下，这里不假装能立即生效。 */}
      <Card>
        <div className="sechead">
          <div className="sechead__l">
            <span className="sechead__ic"><Icon name="ClipboardList" size={15} /></span>
            <div>
              <div className="sechead__t">受控写 · 待拍板动作（审批卡 stub）</div>
              <div className="sechead__s">§6 3 个业务动作：报名平台活动 / 建店铺营销·优惠券 / 报名分销 · UI 先行，写面默认关闭，live 实跑等新版祝余中台</div>
            </div>
          </div>
        </div>
        <div style={{ display: "flex", flexDirection: "column", gap: 10 }}>
          {(K.store1688ControlledActions || []).map(ca => (
            <div className="whalert" key={ca.card_id} style={{ alignItems: "flex-start" }}>
              <span className="whalert__sev whalert__sev--neutral"><Icon name="Lock" size={12} /></span>
              <div className="whalert__b">
                <div className="whalert__t">{ca.requested_action}<Pill tone="neutral" soft>写面默认关闭</Pill></div>
                <div className="dt__sub2">{ca.decision_question}</div>
              </div>
              <div className="whalert__act">
                <button className="btn btn--ghost btn--sm" onClick={() => onAct && onAct({
                  title: ca.requested_action,
                  subject: ca.decision_question,
                  phrase: "确认提交",
                  submitLabel: "提交审批（不会立即执行）",
                  danger: false,
                  source: "1688 店铺运营 COO · 受控写 stub",
                  preview: [
                    { k: "业务影响", v: ca.business_impact },
                    { k: "风险级别", v: ca.risk_level },
                    { k: "风险摘要", v: ca.risk_summary },
                    { k: "回滚计划", v: ca.rollback_plan },
                    { k: "回滚责任人", v: ca.rollback_owner },
                  ],
                  wont: ["不自动执行", "不绕过老板写入口令", "不改变 write_surface_closed_by_default"],
                  forbidden: ca.guardrails || [],
                  rollbackNote: ca.rollback_plan,
                })}>查看审批卡</button>
              </div>
            </div>
          ))}
        </div>
        <div className="spfoot"><Icon name="Info" size={12} />智能投放/订购制产品目前无离散可逆写面；本卡为审批流程 UI 占位，非真实业务写入口。</div>
      </Card>
    </div>
  );
}

Object.assign(window, { KitStore1688 });
