"<!DOCTYPE html>\n<html lang=\"zh\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>智投 · 智能投流平台</title>\n<style>\n:root{\n  --bg:#f5f6fa; --surface:#fff; --surface-2:#f2f3f7; --surface-3:#eceef4;\n  --stroke:#e6e8f0; --stroke-soft:#eef0f6;\n  --text:#1f2335; --muted:#6b7280; --muted-2:#9ca3af;\n  --primary:#7c3aed; --primary-2:#9b6fff; --primary-soft:#f3edff;\n  --ok:#10b981; --ok-soft:#dcfce7; --danger:#ef4444; --danger-soft:#fee2e2;\n  --warn:#f59e0b; --warn-soft:#fef3c7; --info:#3b82f6; --info-soft:#dbeafe;\n  --dark:#1a1a2e; --dark-2:#2d2d44; --dark-3:#3d3d5c;\n  --sidebar-w:208px; --topnav-h:52px; --appnav-w:56px;\n}\n*{box-sizing:border-box}\nhtml,body{margin:0;padding:0;background:var(--bg);color:var(--text);font-family:-apple-system,\"PingFang SC\",\"Microsoft YaHei\",sans-serif;font-size:13px}\na{color:inherit;text-decoration:none}\nbutton{font-family:inherit;cursor:pointer}\n::-webkit-scrollbar{width:8px;height:8px}\n::-webkit-scrollbar-track{background:transparent}\n::-webkit-scrollbar-thumb{background:#d4d7e3;border-radius:4px}\n::-webkit-scrollbar-thumb:hover{background:#b8bccd}\n\n/* ===== 模块导航条（左侧 56px，跨模块） ===== */\n.app-nav-bar{position:fixed;left:0;top:0;bottom:0;width:var(--appnav-w);background:var(--dark);z-index:99998;display:flex;flex-direction:column;align-items:center;padding:8px 0;gap:4px}\n.app-nav-bar .nav-item{display:flex;align-items:center;justify-content:center;width:48px;height:56px;color:#8a8aa0;font-size:14px;border-radius:8px;transition:all .15s;cursor:pointer;text-decoration:none;line-height:1}\n.app-nav-bar .nav-item:hover{color:#fff;background:rgba(255,255,255,.1)}\n.app-nav-bar .nav-item.active{color:#fff;background:var(--primary)}\n.app-nav-bar .nav-logo{width:36px;height:36px;border-radius:9px;background:linear-gradient(135deg,#7c3aed,#a855f7);color:#fff;display:flex;align-items:center;justify-content:center;font-size:15px;font-weight:600;margin-bottom:6px}\n\n/* ===== 顶部导航栏 ===== */\n.topnav{position:fixed;left:var(--appnav-w);top:0;right:0;height:var(--topnav-h);background:var(--dark);color:#fff;display:flex;align-items:center;padding:0 20px 0 0;z-index:200;border-bottom:1px solid rgba(255,255,255,.06)}\n.topnav .tn-brand{display:flex;align-items:center;gap:8px;padding:0 16px 0 20px;height:100%;font-size:15px;font-weight:600}\n.topnav .tn-brand .b-dot{width:24px;height:24px;border-radius:6px;background:linear-gradient(135deg,#7c3aed,#a855f7);display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px}\n.topnav .tn-menus{display:flex;height:100%;flex:1;min-width:0}\n.topnav .tn-menu{position:relative;display:flex;align-items:center;padding:0 16px;height:100%;color:#c7c9d6;font-size:13px;cursor:pointer;transition:color .15s;white-space:nowrap}\n.topnav .tn-menu:hover{color:#fff}\n.topnav .tn-menu.active{color:#fff}\n.topnav .tn-menu.active::after{content:\"\";position:absolute;left:16px;right:16px;bottom:0;height:2px;background:var(--primary);border-radius:2px}\n.topnav .tn-menu .caret{font-size:9px;margin-left:4px;opacity:.7}\n.topnav .tn-right{display:flex;align-items:center;gap:8px}\n.topnav .tn-search{display:flex;align-items:center;gap:6px;background:rgba(255,255,255,.08);border-radius:8px;padding:6px 10px;color:#c7c9d6;font-size:12px;cursor:pointer;width:180px}\n.topnav .tn-search:hover{background:rgba(255,255,255,.14)}\n.topnav .tn-search input{background:transparent;border:0;outline:0;color:#fff;font-size:12px;flex:1;font-family:inherit}\n.topnav .tn-search input::placeholder{color:#8a8aa0}\n.topnav .tn-icon{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;color:#c7c9d6;cursor:pointer;font-size:15px;position:relative}\n.topnav .tn-icon:hover{background:rgba(255,255,255,.1);color:#fff}\n.topnav .tn-icon .badge-dot{position:absolute;top:6px;right:6px;width:7px;height:7px;background:var(--danger);border-radius:50%;border:1px solid var(--dark)}\n.topnav .tn-avatar{display:flex;align-items:center;gap:6px;padding:4px 8px;border-radius:8px;cursor:pointer}\n.topnav .tn-avatar:hover{background:rgba(255,255,255,.08)}\n.topnav .tn-avatar .av{width:26px;height:26px;border-radius:50%;background:linear-gradient(135deg,#7c3aed,#a855f7);color:#fff;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600}\n.topnav .tn-avatar .nm{font-size:12px;color:#e7e8f0}\n\n/* ===== Mega Menu ===== */\n.megamenu{position:fixed;top:var(--topnav-h);left:var(--appnav-w);right:0;background:var(--surface);border-bottom:1px solid var(--stroke);box-shadow:0 12px 32px rgba(31,34,48,.18);z-index:150;display:none;padding:18px 28px}\n.megamenu.show{display:block}\n.megamenu .mm-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0;max-width:1400px;margin:0 auto}\n.megamenu .mm-col{padding:0 18px;border-right:1px solid var(--stroke-soft)}\n.megamenu .mm-col:last-child{border-right:0}\n.megamenu .mm-col-title{font-size:12px;color:var(--primary);font-weight:600;margin:0 0 8px;display:flex;align-items:center;gap:6px}\n.megamenu .mm-group{margin-bottom:14px}\n.megamenu .mm-group:last-child{margin-bottom:0}\n.megamenu .mm-group-title{font-size:11px;color:var(--muted-2);font-weight:500;margin:0 0 6px;text-transform:uppercase;letter-spacing:.5px}\n.megamenu .mm-item{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:6px;cursor:pointer;color:var(--text);font-size:13px;transition:background .12s}\n.megamenu .mm-item:hover{background:var(--surface-2)}\n.megamenu .mm-item .mm-ic{font-size:13px;width:16px;text-align:center;color:var(--muted)}\n.megamenu .mm-item .mm-tx{flex:1;min-width:0}\n.megamenu .mm-item .mm-ext{color:var(--muted-2);font-size:10px}\n.megamenu .mm-item .mm-tag{background:var(--danger);color:#fff;font-size:9px;padding:1px 5px;border-radius:8px;font-weight:600}\n\n/* ===== 主布局 ===== */\n.body-wrap{padding-left:var(--appnav-w);padding-top:var(--topnav-h);min-height:100vh}\n.layout{display:flex;min-height:calc(100vh - var(--topnav-h))}\n\n/* 侧边栏 */\n.sidebar{width:var(--sidebar-w);background:var(--surface);border-right:1px solid var(--stroke);flex-shrink:0;padding:12px 0;overflow-y:auto;position:sticky;top:var(--topnav-h);height:calc(100vh - var(--topnav-h))}\n.sidebar .sec{padding:6px 0;border-bottom:1px solid var(--stroke-soft)}\n.sidebar .sec:last-child{border-bottom:0}\n.sidebar .sec-t{padding:8px 18px 4px;font-size:10px;color:var(--muted-2);text-transform:uppercase;letter-spacing:.5px;font-weight:600}\n.sidebar .item{display:flex;align-items:center;gap:8px;padding:8px 18px;color:var(--text);font-size:13px;cursor:pointer;transition:background .12s;border-left:2px solid transparent}\n.sidebar .item:hover{background:var(--surface-2)}\n.sidebar .item.active{background:var(--primary-soft);color:var(--primary);border-left-color:var(--primary);font-weight:600}\n.sidebar .item .si-ic{font-size:14px;width:16px;text-align:center;color:var(--muted)}\n.sidebar .item.active .si-ic{color:var(--primary)}\n.sidebar .item .si-badge{margin-left:auto;background:var(--danger);color:#fff;font-size:10px;padding:0 6px;border-radius:8px;font-weight:600}\n\n/* 内容区 */\n.content{flex:1;min-width:0;padding:16px 22px}\n.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;flex-wrap:wrap;gap:10px}\n.page-head .ph-l{display:flex;flex-direction:column;gap:3px}\n.breadcrumb{font-size:11px;color:var(--muted-2);display:flex;gap:5px;align-items:center}\n.breadcrumb span{color:var(--muted)}\n.page-title{font-size:18px;font-weight:600;color:var(--text)}\n.page-desc{font-size:12px;color:var(--muted);margin-top:2px}\n.page-head .ph-r{display:flex;gap:8px;align-items:center;flex-wrap:wrap}\n\n/* 按钮 */\n.btn{background:var(--surface-2);border:1px solid var(--stroke);color:var(--text);padding:6px 14px;border-radius:7px;font-size:12px;transition:all .15s;display:inline-flex;align-items:center;gap:5px}\n.btn:hover{border-color:var(--primary);color:var(--primary)}\n.btn.primary{background:linear-gradient(135deg,var(--primary),var(--primary-2));color:#fff;border:0;font-weight:500}\n.btn.primary:hover{opacity:.92;color:#fff}\n.btn.ghost{background:transparent;border-color:transparent;color:var(--muted)}\n.btn.ghost:hover{background:var(--surface-2);color:var(--text);border-color:var(--stroke)}\n.btn.danger{background:var(--danger-soft);color:var(--danger);border-color:rgba(239,68,68,.3)}\n.btn.sm{padding:4px 10px;font-size:11px}\n.btn.lg{padding:8px 20px;font-size:13px}\n\n/* 卡片 */\n.card{background:var(--surface);border:1px solid var(--stroke);border-radius:10px;padding:14px}\n.card-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}\n.card-h h3{margin:0;font-size:13px;font-weight:600;color:var(--text)}\n.card-h .more{font-size:11px;color:var(--muted);cursor:pointer}\n.card-h .more:hover{color:var(--primary)}\n\n/* KPI 网格 */\n.kpi-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:14px}\n@media(max-width:1280px){.kpi-grid{grid-template-columns:repeat(3,1fr)}}\n@media(max-width:768px){.kpi-grid{grid-template-columns:repeat(2,1fr)}}\n.kpi{background:var(--surface);border:1px solid var(--stroke);border-radius:10px;padding:14px;position:relative;overflow:hidden}\n.kpi .k-l{display:flex;flex-direction:column;gap:4px}\n.kpi .k-ic{position:absolute;right:12px;top:12px;width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:15px;background:var(--primary-soft);color:var(--primary)}\n.kpi .k-lbl{font-size:11px;color:var(--muted)}\n.kpi .k-val{font-size:22px;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums}\n.kpi .k-sub{display:flex;align-items:center;gap:4px;font-size:11px}\n.kpi .k-sub.up{color:var(--ok)}\n.kpi .k-sub.down{color:var(--danger)}\n.kpi .k-bar{margin-top:8px;height:3px;background:var(--surface-2);border-radius:2px;overflow:hidden}\n.kpi .k-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--primary),var(--primary-2));border-radius:2px}\n\n/* 网格布局 */\n.grid-2{display:grid;grid-template-columns:1.6fr 1fr;gap:12px}\n.grid-2-even{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}\n@media(max-width:1100px){.grid-2,.grid-2-even,.grid-3{grid-template-columns:1fr}}\n\n/* 表格 */\n.tbl{width:100%;border-collapse:collapse;font-size:12px}\n.tbl th{background:var(--surface-2);color:var(--muted);font-weight:500;text-align:left;padding:9px 10px;border-bottom:1px solid var(--stroke);white-space:nowrap;font-size:11px}\n.tbl td{padding:10px;border-bottom:1px solid var(--stroke-soft);color:var(--text);vertical-align:middle}\n.tbl tr:hover td{background:var(--surface-2)}\n.tbl .num{font-variant-numeric:tabular-nums;text-align:right}\n.tbl .t-main{font-weight:500}\n.tbl .t-muted{color:var(--muted)}\n.tbl .nowrap{white-space:nowrap}\n.tbl-wrap{background:var(--surface);border:1px solid var(--stroke);border-radius:10px;overflow:hidden}\n.tbl-wrap .tbl-tools{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--stroke-soft);flex-wrap:wrap}\n.tbl-wrap .tbl-tools .tb-search{display:flex;align-items:center;gap:5px;background:var(--surface-2);border:1px solid var(--stroke);border-radius:7px;padding:5px 9px;font-size:12px}\n.tbl-wrap .tbl-tools .tb-search input{background:transparent;border:0;outline:0;font-size:12px;width:140px;font-family:inherit}\n.tbl-wrap .tbl-pager{display:flex;align-items:center;gap:6px;padding:10px 12px;border-top:1px solid var(--stroke-soft);font-size:11px;color:var(--muted);justify-content:flex-end}\n\n/* 标签/状态 */\n.tag{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:500;line-height:1.4}\n.tag.ok{background:var(--ok-soft);color:#047857}\n.tag.warn{background:var(--warn-soft);color:#92400e}\n.tag.danger{background:var(--danger-soft);color:#b91c1c}\n.tag.info{background:var(--info-soft);color:#1d4ed8}\n.tag.gray{background:var(--surface-3);color:var(--muted)}\n.tag.primary{background:var(--primary-soft);color:var(--primary)}\n.tag .dot{width:6px;height:6px;border-radius:50%;background:currentColor}\n\n/* 图表（简易SVG柱状图） */\n.chart{width:100%;height:200px;display:block}\n.chart-line{width:100%;height:220px;display:block}\n\n/* 表单 */\n.form-row{display:flex;gap:10px;margin-bottom:12px;flex-wrap:wrap}\n.form-item{display:flex;flex-direction:column;gap:4px;flex:1;min-width:160px}\n.form-item label{font-size:11px;color:var(--muted);font-weight:500}\n.form-item .ctl{background:var(--surface-2);border:1px solid var(--stroke);border-radius:7px;padding:7px 10px;font-size:12px;color:var(--text);outline:none;font-family:inherit;width:100%}\n.form-item .ctl:focus{border-color:var(--primary);background:#fff}\n.form-item textarea.ctl{min-height:60px;resize:vertical}\n.form-item .hint{font-size:10px;color:var(--muted-2)}\n.form-seg{display:flex;background:var(--surface-2);border:1px solid var(--stroke);border-radius:7px;padding:2px;gap:2px}\n.form-seg .seg{padding:5px 12px;font-size:11px;border-radius:5px;cursor:pointer;color:var(--muted)}\n.form-seg .seg.active{background:#fff;color:var(--primary);font-weight:500;box-shadow:0 1px 3px rgba(0,0,0,.06)}\n\n/* 模态 */\n.modal{position:fixed;inset:0;background:rgba(31,34,48,.45);display:none;align-items:center;justify-content:center;z-index:300}\n.modal.show{display:flex}\n.modal-card{background:var(--surface);border-radius:12px;width:min(94vw,640px);max-height:88vh;overflow:auto;box-shadow:0 16px 40px rgba(0,0,0,.18)}\n.modal-h{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--stroke)}\n.modal-h h3{margin:0;font-size:14px}\n.modal-h .close{font-size:18px;color:var(--muted);cursor:pointer;width:28px;height:28px;display:flex;align-items:center;justify-content:center;border-radius:6px}\n.modal-h .close:hover{background:var(--surface-2)}\n.modal-b{padding:16px 18px}\n.modal-f{padding:12px 18px;border-top:1px solid var(--stroke-soft);display:flex;justify-content:flex-end;gap:8px}\n\n/* Toast */\n.toast-wrap{position:fixed;top:calc(var(--topnav-h) + 12px);right:16px;z-index:400;display:flex;flex-direction:column;gap:8px}\n.toast{background:var(--surface);border:1px solid var(--stroke);border-left:3px solid var(--primary);border-radius:8px;padding:10px 14px;font-size:12px;box-shadow:0 6px 20px rgba(0,0,0,.1);min-width:220px;animation:slideIn .2s ease}\n.toast.err{border-left-color:var(--danger)}\n.toast.ok{border-left-color:var(--ok)}\n@keyframes slideIn{from{transform:translateX(20px);opacity:0}to{transform:translateX(0);opacity:1}}\n\n/* 素材卡片网格 */\n.asset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px}\n.asset-card{background:var(--surface);border:1px solid var(--stroke);border-radius:10px;overflow:hidden;cursor:pointer;transition:all .15s}\n.asset-card:hover{border-color:var(--primary);transform:translateY(-2px);box-shadow:0 8px 20px rgba(124,58,237,.12)}\n.asset-card .ac-thumb{aspect-ratio:16/9;background:var(--surface-3);position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;color:var(--muted-2);font-size:24px}\n.asset-card .ac-thumb img,.asset-card .ac-thumb video{width:100%;height:100%;object-fit:cover;display:block}\n.asset-card .ac-thumb .ac-dur{position:absolute;bottom:6px;right:6px;background:rgba(0,0,0,.7);color:#fff;font-size:10px;padding:1px 6px;border-radius:4px}\n.asset-card .ac-thumb .ac-stat{position:absolute;top:6px;left:6px}\n.asset-card .ac-body{padding:8px 10px}\n.asset-card .ac-nm{font-size:12px;font-weight:500;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.asset-card .ac-meta{display:flex;justify-content:space-between;font-size:10px;color:var(--muted);margin-top:3px}\n\n/* 加载遮罩 */\n#initLoading{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:var(--bg);z-index:9999;font-size:16px;color:var(--muted)}\n.spinner{width:24px;height:24px;border:2.5px solid var(--surface-3);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite;display:inline-block;margin-right:10px;vertical-align:middle}\n@keyframes spin{to{transform:rotate(360deg)}}\n\n/* 页面切换 */\n.page{display:none}\n.page.active{display:block}\n\n/* 空态 */\n.empty{text-align:center;padding:50px 20px;color:var(--muted)}\n.empty .em-ic{font-size:36px;color:var(--muted-2);margin-bottom:10px}\n.empty .em-tx{font-size:13px}\n\n/* 漏斗 */\n.funnel{display:flex;flex-direction:column;gap:0}\n.funnel .f-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--stroke-soft)}\n.funnel .f-row:last-child{border-bottom:0}\n.funnel .f-lbl{width:90px;font-size:12px;color:var(--muted)}\n.funnel .f-bar{flex:1;height:22px;background:var(--surface-2);border-radius:4px;overflow:hidden;position:relative}\n.funnel .f-bar i{display:block;height:100%;background:linear-gradient(90deg,var(--primary),var(--primary-2));border-radius:4px;transition:width .4s}\n.funnel .f-val{width:90px;text-align:right;font-size:12px;font-weight:500;font-variant-numeric:tabular-nums}\n.funnel .f-rate{width:50px;text-align:right;font-size:11px;color:var(--muted)}\n\n/* 进度 */\n.prog{height:5px;background:var(--surface-2);border-radius:3px;overflow:hidden;width:80px;display:inline-block;vertical-align:middle}\n.prog i{display:block;height:100%;background:var(--primary);border-radius:3px}\n</style>\n</head>\n<body>\n\n<div id=\"initLoading\"><span class=\"spinner\"></span>正在加载智投…</div>\n\n<!-- ===== 模块导航条（跨模块统一） ===== -->\n<nav class=\"app-nav-bar\" id=\"appNavBar\">\n  <div class=\"nav-logo\">投</div>\n  <a class=\"nav-item\" data-app=\"zhitu\" href=\"https://www.futuresource.vip/index.html\" title=\"智图\">智图</a>\n  <a class=\"nav-item\" data-app=\"make\" href=\"https://make.futuresource.vip/\" title=\"智造\">智造</a>\n  <a class=\"nav-item\" data-app=\"hui\" href=\"https://hui.futuresource.vip/\" title=\"智绘\">智绘</a>\n  <a class=\"nav-item\" data-app=\"yi\" href=\"https://yi.futuresource.vip/\" title=\"智益\">智益</a>\n  <a class=\"nav-item active\" data-app=\"tou\" href=\"https://tou.futuresource.vip/\" title=\"智投\">智投</a>\n</nav>\n\n<!-- ===== 顶部导航栏 ===== -->\n<div class=\"topnav\">\n  <div class=\"tn-brand\"><div class=\"b-dot\">投</div><span>智投</span><span style=\"font-size:10px;color:#8a8aa0;font-weight:400;margin-left:4px\">智能投流平台</span><span id=\"demoBadge\" style=\"display:none;font-size:9px;color:#fff;background:var(--warn);padding:1px 6px;border-radius:8px;margin-left:6px;font-weight:600\">演示</span></div>\n  <div class=\"tn-menus\" id=\"tnMenus\">\n    <div class=\"tn-menu active\" data-mod=\"home\">首页</div>\n    <div class=\"tn-menu\" data-mod=\"placement\">投放<span class=\"caret\"></span></div>\n    <div class=\"tn-menu\" data-mod=\"data\">数据<span class=\"caret\"></span></div>\n    <div class=\"tn-menu\" data-mod=\"tools\" id=\"tnTools\">工具<span class=\"caret\">▾</span></div>\n    <div class=\"tn-menu\" data-mod=\"finance\">财务<span class=\"caret\"></span></div>\n    <div class=\"tn-menu\" data-mod=\"account\">账户<span class=\"caret\"></span></div>\n    <div class=\"tn-menu\" data-mod=\"marketing\">营销</div>\n    <div class=\"tn-menu\" data-mod=\"academy\">学堂</div>\n  </div>\n  <div class=\"tn-right\">\n    <div class=\"tn-search\"><span>🔍</span><input placeholder=\"搜索计划/素材/数据…\"></div>\n    <div class=\"tn-icon\" title=\"消息\">🔔<span class=\"badge-dot\"></span></div>\n    <div class=\"tn-icon\" title=\"帮助\">❓</div>\n    <div class=\"tn-avatar\" id=\"userAvatar\">\n      <div class=\"av\" id=\"userAvatarChar\">U</div>\n      <div class=\"nm\" id=\"userName\">未登录</div>\n    </div>\n  </div>\n</div>\n\n<!-- ===== Mega Menu（工具下拉） ===== -->\n<div class=\"megamenu\" id=\"megaMenu\">\n  <div class=\"mm-grid\">\n    <div class=\"mm-col\">\n      <div class=\"mm-col-title\">🎨 创意工具</div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">素材管理</div>\n        <div class=\"mm-item\" data-go=\"assets-video\"><span class=\"mm-ic\">🎬</span><span class=\"mm-tx\">视频库</span></div>\n        <div class=\"mm-item\" data-go=\"assets-image\"><span class=\"mm-ic\">🖼</span><span class=\"mm-tx\">图片库</span></div>\n        <div class=\"mm-item\" data-go=\"assets-text\"><span class=\"mm-ic\">📝</span><span class=\"mm-tx\">图文库</span></div>\n        <div class=\"mm-item\" data-go=\"assets-lead\"><span class=\"mm-ic\">🧲</span><span class=\"mm-tx\">线索创意组件</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">素材创作</div>\n        <div class=\"mm-item\" data-go=\"create-script\"><span class=\"mm-ic\">✍</span><span class=\"mm-tx\">视频脚本生成</span></div>\n        <div class=\"mm-item\" data-go=\"create-jichuang\"><span class=\"mm-ic\">⚡</span><span class=\"mm-tx\">即创 · 智能创意生产</span><span class=\"mm-ext\">↗</span></div>\n        <div class=\"mm-item\" data-go=\"create-tuwen\"><span class=\"mm-ic\">📄</span><span class=\"mm-tx\">图文智能生成</span><span class=\"mm-tag\">新</span></div>\n      </div>\n    </div>\n    <div class=\"mm-col\">\n      <div class=\"mm-col-title\">📢 投放工具</div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">评论管理</div>\n        <div class=\"mm-item\" data-go=\"comments-list\"><span class=\"mm-ic\">💬</span><span class=\"mm-tx\">评论内容</span></div>\n        <div class=\"mm-item\" data-go=\"comments-phrases\"><span class=\"mm-ic\">📌</span><span class=\"mm-tx\">常用语</span></div>\n        <div class=\"mm-item\" data-go=\"comments-blockwords\"><span class=\"mm-ic\">🚫</span><span class=\"mm-tx\">屏蔽词</span></div>\n        <div class=\"mm-item\" data-go=\"comments-blockusers\"><span class=\"mm-ic\">👤</span><span class=\"mm-tx\">屏蔽用户</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">智能起量</div>\n        <div class=\"mm-item\" data-go=\"smart-scaling\"><span class=\"mm-ic\">🚀</span><span class=\"mm-tx\">账户优选起量</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">定向管理</div>\n        <div class=\"mm-item\" data-go=\"targeting-pack\"><span class=\"mm-ic\">🎯</span><span class=\"mm-tx\">定向包</span></div>\n        <div class=\"mm-item\" data-go=\"targeting-audience\"><span class=\"mm-ic\">👥</span><span class=\"mm-tx\">人群包</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">私信工具</div>\n        <div class=\"mm-item\" data-go=\"dm-config\"><span class=\"mm-ic\">✉</span><span class=\"mm-tx\">私信工具配置</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">账户查询</div>\n        <div class=\"mm-item\" data-go=\"account-query\"><span class=\"mm-ic\">🔍</span><span class=\"mm-tx\">账户诊断</span></div>\n        <div class=\"mm-item\" data-go=\"account-batch\"><span class=\"mm-ic\">📚</span><span class=\"mm-tx\">批量操作</span></div>\n      </div>\n    </div>\n    <div class=\"mm-col\">\n      <div class=\"mm-col-title\">📊 数据工具</div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">报表分析</div>\n        <div class=\"mm-item\" data-go=\"report-custom\"><span class=\"mm-ic\">📋</span><span class=\"mm-tx\">自定义报表</span></div>\n        <div class=\"mm-item\" data-go=\"report-funnel\"><span class=\"mm-ic\">🔻</span><span class=\"mm-tx\">漏斗分析</span></div>\n        <div class=\"mm-item\" data-go=\"report-attribution\"><span class=\"mm-ic\">🔗</span><span class=\"mm-tx\">归因分析</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">受众洞察</div>\n        <div class=\"mm-item\" data-go=\"audience-insight\"><span class=\"mm-ic\">💡</span><span class=\"mm-tx\">人群画像</span></div>\n        <div class=\"mm-item\" data-go=\"audience-portrait\"><span class=\"mm-ic\">👤</span><span class=\"mm-tx\">受众画像</span></div>\n        <div class=\"mm-item\" data-go=\"audience-trend\"><span class=\"mm-ic\">📈</span><span class=\"mm-tx\">趋势洞察</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">数据导出</div>\n        <div class=\"mm-item\" data-go=\"export-data\"><span class=\"mm-ic\">📤</span><span class=\"mm-tx\">数据导出</span></div>\n        <div class=\"mm-item\" data-go=\"export-api\"><span class=\"mm-ic\">🔌</span><span class=\"mm-tx\">API 对接</span></div>\n      </div>\n    </div>\n    <div class=\"mm-col\">\n      <div class=\"mm-col-title\">💰 财务工具</div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">资金管理</div>\n        <div class=\"mm-item\" data-go=\"finance-recharge\"><span class=\"mm-ic\">💳</span><span class=\"mm-tx\">账户充值</span></div>\n        <div class=\"mm-item\" data-go=\"finance-transfer\"><span class=\"mm-ic\">🔁</span><span class=\"mm-tx\">资金调拨</span></div>\n        <div class=\"mm-item\" data-go=\"finance-refund\"><span class=\"mm-ic\">↩</span><span class=\"mm-tx\">退款管理</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">票据管理</div>\n        <div class=\"mm-item\" data-go=\"invoice-list\"><span class=\"mm-ic\">🧾</span><span class=\"mm-tx\">发票管理</span></div>\n        <div class=\"mm-item\" data-go=\"invoice-apply\"><span class=\"mm-ic\">📨</span><span class=\"mm-tx\">开票申请</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">优惠权益</div>\n        <div class=\"mm-item\" data-go=\"coupons\"><span class=\"mm-ic\">🎟</span><span class=\"mm-tx\">优惠券</span></div>\n        <div class=\"mm-item\" data-go=\"rebate\"><span class=\"mm-ic\">💎</span><span class=\"mm-tx\">返点政策</span></div>\n      </div>\n    </div>\n    <div class=\"mm-col\">\n      <div class=\"mm-col-title\">⚙ 系统工具</div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">组织管理</div>\n        <div class=\"mm-item\" data-go=\"org-team\"><span class=\"mm-ic\">👷</span><span class=\"mm-tx\">团队管理</span></div>\n        <div class=\"mm-item\" data-go=\"org-role\"><span class=\"mm-ic\">🛡</span><span class=\"mm-tx\">角色权限</span></div>\n        <div class=\"mm-item\" data-go=\"org-member\"><span class=\"mm-ic\">👨‍💼</span><span class=\"mm-tx\">成员管理</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">自动化</div>\n        <div class=\"mm-item\" data-go=\"auto-rule\"><span class=\"mm-ic\">🤖</span><span class=\"mm-tx\">规则引擎</span></div>\n        <div class=\"mm-item\" data-go=\"auto-alert\"><span class=\"mm-ic\">🚨</span><span class=\"mm-tx\">预警策略</span></div>\n        <div class=\"mm-item\" data-go=\"auto-budget\"><span class=\"mm-ic\">💵</span><span class=\"mm-tx\">预算托管</span></div>\n      </div>\n      <div class=\"mm-group\">\n        <div class=\"mm-group-title\">开发者</div>\n        <div class=\"mm-item\" data-go=\"dev-api\"><span class=\"mm-ic\">🔌</span><span class=\"mm-tx\">开放 API</span></div>\n        <div class=\"mm-item\" data-go=\"dev-webhook\"><span class=\"mm-ic\">📡</span><span class=\"mm-tx\">Webhook</span></div>\n        <div class=\"mm-item\" data-go=\"dev-sdk\"><span class=\"mm-ic\">📦</span><span class=\"mm-tx\">SDK 下载</span></div>\n      </div>\n    </div>\n  </div>\n</div>\n\n<!-- ===== 主布局 ===== -->\n<div class=\"body-wrap\">\n<div class=\"layout\">\n  <!-- 侧边栏 -->\n  <aside class=\"sidebar\" id=\"sidebar\"></aside>\n\n  <!-- 内容区 -->\n  <main class=\"content\" id=\"content\"></main>\n</div>\n</div>\n\n<!-- 模态 -->\n<div class=\"modal\" id=\"modal\"><div class=\"modal-card\" id=\"modalCard\"></div></div>\n<!-- Toast 容器 -->\n<div class=\"toast-wrap\" id=\"toastWrap\"></div>\n\n<script>\n/* ============= 全局状态 ============= */\nvar TOKEN = localStorage.getItem('tou_token') || localStorage.getItem('yi_token') || localStorage.getItem('hui_token') || localStorage.getItem('make_token') || localStorage.getItem('zhitu_token') || '';\nvar USER = null;\nvar SIDEBAR_CFG = {\n  home:{title:'首页',items:[\n    {sec:'工作台',list:[\n      {ic:'📊',nm:'数据概览',go:'home-overview'},\n      {ic:'⚡',nm:'快速入口',go:'home-quick'},\n    ]},\n    {sec:'动态',list:[\n      {ic:'📢',nm:'平台公告',go:'home-notice'},\n      {ic:'🎓',nm:'学习中心',go:'home-learn'},\n    ]},\n  ]},\n  placement:{title:'投放',items:[\n    {sec:'投放管理',list:[\n      {ic:'📋',nm:'计划',go:'placement-campaign',badge:3},\n      {ic:'🗂',nm:'广告组',go:'placement-adgroup'},\n      {ic:'🎯',nm:'广告',go:'placement-ad'},\n      {ic:'🎬',nm:'素材',go:'placement-creative'},\n    ]},\n    {sec:'新建',list:[\n      {ic:'➕',nm:'新建计划',go:'placement-new'},\n      {ic:'📑',nm:'批量建计划',go:'placement-batch'},\n      {ic:'📋',nm:'计划模板',go:'placement-template'},\n    ]},\n    {sec:'优化',list:[\n      {ic:'🚀',nm:'一键起量',go:'placement-scaling'},\n      {ic:'🧪',nm:'A/B 实验',go:'placement-ab'},\n    ]},\n  ]},\n  data:{title:'数据',items:[\n    {sec:'数据报表',list:[\n      {ic:'📈',nm:'实时数据',go:'data-realtime'},\n      {ic:'📊',nm:'数据总览',go:'data-overview'},\n      {ic:'🎯',nm:'转化分析',go:'data-conversion'},\n      {ic:'💵',nm:'ROI 报表',go:'data-roi'},\n    ]},\n    {sec:'维度分析',list:[\n      {ic:'🕒',nm:'时段分析',go:'data-hour'},\n      {ic:'🌍',nm:'地域分析',go:'data-region'},\n      {ic:'📱',nm:'设备分析',go:'data-device'},\n      {ic:'👤',nm:'人群分析',go:'data-audience'},\n    ]},\n  ]},\n  tools:{title:'工具',items:[\n    {sec:'素材管理',list:[\n      {ic:'🎬',nm:'视频库',go:'assets-video'},\n      {ic:'🖼',nm:'图片库',go:'assets-image'},\n      {ic:'📝',nm:'图文库',go:'assets-text'},\n    ]},\n    {sec:'定向',list:[\n      {ic:'🎯',nm:'定向包',go:'targeting-pack'},\n      {ic:'👥',nm:'人群包',go:'targeting-audience'},\n    ]},\n    {sec:'评论',list:[\n      {ic:'💬',nm:'评论管理',go:'comments-list'},\n    ]},\n  ]},\n  finance:{title:'财务',items:[\n    {sec:'资金',list:[\n      {ic:'💳',nm:'账户充值',go:'finance-recharge'},\n      {ic:'📒',nm:'账户流水',go:'finance-flow'},\n      {ic:'🔁',nm:'资金调拨',go:'finance-transfer'},\n    ]},\n    {sec:'票据',list:[\n      {ic:'🧾',nm:'发票管理',go:'invoice-list'},\n    ]},\n    {sec:'权益',list:[\n      {ic:'🎟',nm:'优惠券',go:'coupons'},\n      {ic:'💎',nm:'返点政策',go:'rebate'},\n    ]},\n  ]},\n  account:{title:'账户',items:[\n    {sec:'账户信息',list:[\n      {ic:'🏠',nm:'账户概览',go:'account-info'},\n      {ic:'👤',nm:'基本信息',go:'account-profile'},\n      {ic:'🔐',nm:'安全设置',go:'account-security'},\n    ]},\n    {sec:'组织',list:[\n      {ic:'👷',nm:'团队管理',go:'org-team'},\n      {ic:'🛡',nm:'角色权限',go:'org-role'},\n      {ic:'👨‍💼',nm:'成员管理',go:'org-member'},\n    ]},\n    {sec:'子账户',list:[\n      {ic:'👥',nm:'子账户列表',go:'subaccount-list'},\n      {ic:'➕',nm:'新建子账户',go:'subaccount-new'},\n    ]},\n  ]},\n  marketing:{title:'营销',items:[\n    {sec:'活动',list:[\n      {ic:'🎉',nm:'活动管理',go:'mkt-activity'},\n      {ic:'🎁',nm:'赠品管理',go:'mkt-gift'},\n    ]},\n    {sec:'私域',list:[\n      {ic:'💬',nm:'私域引流',go:'mkt-private'},\n      {ic:'📧',nm:'触达任务',go:'mkt-reach'},\n    ]},\n  ]},\n  academy:{title:'学堂',items:[\n    {sec:'学习',list:[\n      {ic:'📚',nm:'课程中心',go:'aca-course'},\n      {ic:'📰',nm:'行业资讯',go:'aca-news'},\n      {ic:'🏆',nm:'案例库',go:'aca-case'},\n    ]},\n    {sec:'社区',list:[\n      {ic:'💬',nm:'问答社区',go:'aca-qa'},\n      {ic:'📅',nm:'直播课表',go:'aca-live'},\n    ]},\n  ]},\n};\nvar CURRENT_MOD = 'home';\nvar CURRENT_PAGE = 'home-overview';\n\n/* ============= 工具函数 ============= */\nfunction $(s,p){return (p||document).querySelector(s)}\nfunction $$(s,p){return Array.prototype.slice.call((p||document).querySelectorAll(s))}\nfunction esc(s){return (s==null?'':String(s)).replace(/[&<>\"']/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]})}\nfunction fmt(n,d){d=d==null?2:d;if(n==null||isNaN(n))return '-';if(Math.abs(n)>=1e8)return (n/1e8).toFixed(d)+'亿';if(Math.abs(n)>=1e4)return (n/1e4).toFixed(d)+'万';return Number(n).toFixed(d)}\nfunction fmtMoney(n){if(n==null)return '-';return '¥'+fmt(n,2)}\nfunction fmtPct(n,d){d=d==null?2:d;return (n==null?'-':(Number(n).toFixed(d)+'%'))}\nfunction fmtDate(t){if(!t)return '-';var d=new Date(t);return d.getFullYear()+'-'+String(d.getMonth()+1).padStart(2,'0')+'-'+String(d.getDate()).padStart(2,'0')}\nfunction fmtTime(t){if(!t)return '-';var d=new Date(t);return fmtDate(t)+' '+String(d.getHours()).padStart(2,'0')+':'+String(d.getMinutes()).padStart(2,'0')}\n\nfunction toast(msg,type){\n  var w=$('#toastWrap');\n  var t=document.createElement('div');\n  t.className='toast '+(type==='err'?'err':(type==='ok'?'ok':''));\n  t.textContent=msg;\n  w.appendChild(t);\n  setTimeout(function(){t.style.opacity='0';t.style.transform='translateX(20px)';setTimeout(function(){t.remove()},300)},2400);\n}\n\nfunction api(path,method,body){\n  return fetch(path,{method:method||'GET',headers:{'Authorization':'Bearer '+TOKEN,'Content-Type':'application/json'},body:body?JSON.stringify(body):undefined})\n    .then(function(r){if(r.status===401){location.href='//'+_portalHost()+'/portal.html?from=tou';throw new Error('未登录')}return r.json().catch(function(){return {}})})\n    .then(function(d){if(d&&d.error)throw new Error(d.error);return d});\n}\nfunction _portalHost(){return location.hostname==='tou.futuresource.vip'?'www.futuresource.vip':location.hostname.replace(/^tou\\./,'www.')}\nfunction _goPortal(){location.href='//'+_portalHost()+'/portal.html'}\n\n/* ============= 顶部导航 / Mega Menu ============= */\nfunction switchMod(mod){\n  CURRENT_MOD=mod;\n  CURRENT_PAGE=(SIDEBAR_CFG[mod]&&SIDEBAR_CFG[mod].items[0]&&SIDEBAR_CFG[mod].items[0].list[0]&&SIDEBAR_CFG[mod].items[0].list[0].go)||mod+'-overview';\n  $$('#tnMenus .tn-menu').forEach(function(m){m.classList.toggle('active',m.getAttribute('data-mod')===mod)});\n  renderSidebar();\n  renderPage();\n}\nfunction renderSidebar(){\n  var cfg=SIDEBAR_CFG[CURRENT_MOD]||{title:CURRENT_MOD,items:[]};\n  var html='';\n  cfg.items.forEach(function(sec){\n    html+='<div class=\"sec\"><div class=\"sec-t\">'+esc(sec.sec)+'</div>';\n    sec.list.forEach(function(it){\n      var active=it.go===CURRENT_PAGE?' active':'';\n      var badge=it.badge?'<span class=\"si-badge\">'+it.badge+'</span>':'';\n      html+='<div class=\"item'+active+'\" data-go=\"'+esc(it.go)+'\"><span class=\"si-ic\">'+it.ic+'</span><span>'+esc(it.nm)+'</span>'+badge+'</div>';\n    });\n    html+='</div>';\n  });\n  $('#sidebar').innerHTML=html;\n  $$('#sidebar .item').forEach(function(el){\n    el.onclick=function(){CURRENT_PAGE=el.getAttribute('data-go');renderSidebar();renderPage()};\n  });\n}\n\n/* Mega Menu 显示控制 */\n(function(){\n  var toolsMenu=$('#tnTools');\n  var mega=$('#megaMenu');\n  var hoverTimer=null;\n  function show(){clearTimeout(hoverTimer);mega.classList.add('show');toolsMenu.classList.add('active')}\n  function hide(){hoverTimer=setTimeout(function(){mega.classList.remove('show');if(CURRENT_MOD!=='tools')toolsMenu.classList.remove('active')},200)}\n  toolsMenu.addEventListener('mouseenter',show);\n  toolsMenu.addEventListener('mouseleave',hide);\n  mega.addEventListener('mouseenter',show);\n  mega.addEventListener('mouseleave',hide);\n  $$('#megaMenu .mm-item').forEach(function(el){\n    el.onclick=function(){\n      var go=el.getAttribute('data-go');\n      hide();\n      CURRENT_PAGE=go;\n      // 判断 go 属于哪个模块\n      if(go.indexOf('assets-')===0||go.indexOf('targeting-')===0||go.indexOf('comments-')===0||go.indexOf('create-')===0){CURRENT_MOD='tools'}\n      CURRENT_MOD='tools';\n      $$('#tnMenus .tn-menu').forEach(function(m){m.classList.toggle('active',m.getAttribute('data-mod')==='tools')});\n      renderSidebar();renderPage();\n    };\n  });\n})();\n\n/* 顶部菜单点击 */\n$$('#tnMenus .tn-menu').forEach(function(m){\n  if(m.id==='tnTools')return;\n  m.onclick=function(){switchMod(m.getAttribute('data-mod'))};\n});\n\n/* ============= 页面渲染 ============= */\nfunction renderPage(){\n  var c=$('#content');\n  var fn=PAGES[CURRENT_PAGE]||PAGES['_default'];\n  c.innerHTML=fn();\n  // 触发页面后处理\n  if(PAGE_AFTER[CURRENT_PAGE])PAGE_AFTER[CURRENT_PAGE](c);\n}\nvar PAGES={};\nvar PAGE_AFTER={};\n\n/* ============= 首页 ============= */\nPAGES['home-overview']=function(){\n  return ''\n  +'<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">首页 <span>›</span> 数据概览</div><div class=\"page-title\">早上好，'+esc(USER?USER.phone.substr(-4)+'号用户':'投流人')+'，今日数据已就绪</div><div class=\"page-desc\">更新于 '+fmtTime(Date.now())+' · 数据延迟约 5 分钟</div></div>'\n  +'<div class=\"ph-r\"><button class=\"btn\" onclick=\"toast(\\'已导出 CSV\\',\\'ok\\')\">📥 导出</button><button class=\"btn primary\" onclick=\"goPage(\\'placement-new\\')\">➕ 新建计划</button></div></div>'\n  // KPI\n  +'<div class=\"kpi-grid\">'\n    +kpiCard('💰 今日消耗','12580','元','up','+12.3% 较昨日',0.78,'💰')\n    +kpiCard('👁 展示','1.28','万','up','+8.6%',0.65,'👁')\n    +kpiCard('👆 点击','386','次','up','+15.2%',0.52,'👆')\n    +kpiCard('🎯 转化','52','次','up','+22.8%',0.42,'🎯')\n    +kpiCard('💵 ROI','3.85','','up','+0.32',0.85,'📈')\n  +'</div>'\n  // 图表区\n  +'<div class=\"grid-2\" style=\"margin-bottom:12px\">'\n    +'<div class=\"card\"><div class=\"card-h\"><h3>消耗趋势 · 近 7 日</h3><div class=\"more\">查看更多 ›</div></div>'+chartBar([8200,9100,7800,11200,10500,12800,12580],['8/28','8/29','8/30','8/31','9/1','9/2','9/3'],'消耗(元)')+'</div>'\n    +'<div class=\"card\"><div class=\"card-h\"><h3>转化漏斗</h3><div class=\"more\">详情 ›</div></div>'+funnelHtml()+'</div>'\n  +'</div>'\n  // 计划列表 + 快捷\n  +'<div class=\"grid-2-even\">'\n    +'<div class=\"card\"><div class=\"card-h\"><h3>投放中计划 TOP 5</h3><div class=\"more\" onclick=\"goPage(\\'placement-campaign\\')\">全部 ›</div></div>'+miniCampaignTable()+'</div>'\n    +'<div class=\"card\"><div class=\"card-h\"><h3>快捷入口</h3></div>'+quickActions()+'</div>'\n  +'</div>';\n};\nfunction kpiCard(lbl,val,unit,dir,sub,bar,ic){\n  return '<div class=\"kpi\"><div class=\"k-l\"><div class=\"k-lbl\">'+lbl+'</div><div class=\"k-val\">'+val+'<span style=\"font-size:12px;color:var(--muted);font-weight:400;margin-left:3px\">'+unit+'</span></div><div class=\"k-sub '+dir+'\">'+(dir==='up'?'↑':'↓')+' '+sub+'</div><div class=\"k-bar\"><i style=\"width:'+(bar*100)+'%\"></i></div></div><div class=\"k-ic\">'+ic+'</div></div>';\n}\nfunction chartBar(data,labels,ylbl){\n  var max=Math.max.apply(null,data);\n  var W=520,H=180,pad=28,bw=(W-pad*2)/data.length*0.6,gap=(W-pad*2)/data.length*0.4;\n  var pts=data.map(function(v,i){return [pad+i*(bw+gap)+bw/2,H-pad-(v/max)*(H-pad*2)]});\n  var bars=pts.map(function(p,i){return '<rect x=\"'+(p[0]-bw/2)+'\" y=\"'+p[1]+'\" width=\"'+bw+'\" height=\"'+(H-pad-p[1])+'\" rx=\"3\" fill=\"url(#bargrad)\"/><text x=\"'+p[0]+'\" y=\"'+(H-pad+14)+'\" text-anchor=\"middle\" font-size=\"10\" fill=\"#9ca3af\">'+labels[i]+'</text><text x=\"'+p[0]+'\" y=\"'+(p[1]-6)+'\" text-anchor=\"middle\" font-size=\"10\" fill=\"#7c3aed\" font-weight=\"600\">'+(data[i]>=10000?(data[i]/10000).toFixed(1)+'w':data[i])+'</text>'}).join('');\n  var linePath='M'+pts.map(function(p){return p[0]+','+p[1]}).join(' L');\n  return '<svg class=\"chart\" viewBox=\"0 0 '+W+' '+H+'\"><defs><linearGradient id=\"bargrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"#9b6fff\"/><stop offset=\"1\" stop-color=\"#7c3aed\" stop-opacity=\"0.7\"/></linearGradient></defs>'+bars+'<path d=\"'+linePath+'\" fill=\"none\" stroke=\"#10b981\" stroke-width=\"2\" stroke-linejoin=\"round\"/><text x=\"'+pad+'\" y=\"14\" font-size=\"10\" fill=\"#9ca3af\">'+esc(ylbl||'')+'</text><text x=\"'+(W-pad)+'\" y=\"14\" text-anchor=\"end\" font-size=\"10\" fill=\"#9ca3af\">峰值 '+fmt(max)+'</text></svg>';\n}\nfunction funnelHtml(){\n  var steps=[['曝光',12800,100],['点击',386,3.0],['访问',312,2.4],['咨询',98,0.77],['转化',52,0.41]];\n  return '<div class=\"funnel\">'+steps.map(function(s,i){\n    var w=i===0?100:(s[1]/steps[i-1][1]*100);\n    return '<div class=\"f-row\"><div class=\"f-lbl\">'+s[0]+'</div><div class=\"f-bar\"><i style=\"width:'+w+'%\"></i></div><div class=\"f-val\">'+fmt(s[1])+'</div><div class=\"f-rate\">'+s[2]+'%</div></div>';\n  }).join('')+'</div>';\n}\nfunction miniCampaignTable(){\n  return '<table class=\"tbl\"><thead><tr><th>计划名称</th><th class=\"num\">消耗</th><th class=\"num\">CTR</th><th class=\"num\">ROI</th><th>状态</th></tr></thead><tbody>'\n    +'<tr><td class=\"t-main\">末日洪水·主推</td><td class=\"num\">¥3,280</td><td class=\"num\">3.8%</td><td class=\"num\" style=\"color:var(--ok)\">4.2</td><td><span class=\"tag ok\"><span class=\"dot\"></span>投放中</span></td></tr>'\n    +'<tr><td class=\"t-main\">新品首发·测款</td><td class=\"num\">¥2,150</td><td class=\"num\">2.6%</td><td class=\"num\" style=\"color:var(--warn)\">2.1</td><td><span class=\"tag ok\"><span class=\"dot\"></span>投放中</span></td></tr>'\n    +'<tr><td class=\"t-main\">品牌词·长期</td><td class=\"num\">¥1,820</td><td class=\"num\">5.2%</td><td class=\"num\" style=\"color:var(--ok)\">5.8</td><td><span class=\"tag ok\"><span class=\"dot\"></span>投放中</span></td></tr>'\n    +'<tr><td class=\"t-main\">直播间引流·晚场</td><td class=\"num\">¥1,560</td><td class=\"num\">4.1%</td><td class=\"num\" style=\"color:var(--ok)\">3.6</td><td><span class=\"tag warn\"><span class=\"dot\"></span>暂停</span></td></tr>'\n    +'<tr><td class=\"t-main\">竞品词·截流</td><td class=\"num\">¥980</td><td class=\"num\">1.8%</td><td class=\"num\" style=\"color:var(--danger)\">1.2</td><td><span class=\"tag danger\"><span class=\"dot\"></span>超预算</span></td></tr>'\n    +'</tbody></table>';\n}\nfunction quickActions(){\n  var items=[['🎬','新建视频计划','placement-new'],['📊','查看数据报表','data-overview'],['🎯','人群定向','targeting-audience'],['💰','账户充值','finance-recharge'],['📥','导入智绘成片','assets-video'],['🚀','一键起量','placement-scaling']];\n  return '<div style=\"display:grid;grid-template-columns:1fr 1fr;gap:8px\">'+items.map(function(it){\n    return '<div class=\"mm-item\" style=\"padding:12px;border:1px solid var(--stroke);border-radius:8px\" onclick=\"goPage(\\''+it[2]+'\\')\"><span class=\"mm-ic\" style=\"font-size:18px\">'+it[0]+'</span><div><div style=\"font-size:12px;font-weight:500\">'+it[1]+'</div><div style=\"font-size:10px;color:var(--muted)\">点击进入 ›</div></div></div>';\n  }).join('')+'</div>';\n}\nfunction goPage(p){CURRENT_PAGE=p;renderSidebar();renderPage()}\n\nPAGES['home-quick']=function(){return pagePlaceholder('⚡ 快速入口','常用快速操作入口',[\n  ['🎬','新建视频计划','placement-new'],\n  ['📊','数据总览','data-overview'],\n  ['🎯','人群定向','targeting-audience'],\n  ['💰','账户充值','finance-recharge'],\n  ['📥','导入智绘成片','assets-video'],\n  ['🚀','一键起量','placement-scaling'],\n])};\n\nPAGES['home-notice']=function(){return pageList('平台公告','平台最新动态与公告',[['🔥','9月新规：短视频投放合规指引更新','2026-09-01','新规今日生效，请及时关注'],['💎','Q3返点政策出炉：连续投放享阶梯返点','2026-08-25','最高返点8%'],['🚀','新功能上线：直播间引流3.0','2026-08-20','支持智能出价']])};\nPAGES['home-learn']=function(){return pageList('学习中心','从入门到精通的投流课程',[['📚','零基础入门：30天精通投流','系列课 · 12节','免费'],['🎓','高ROI素材的5个共性','直播回放','免费'],['🏆','案例拆解：日耗万+的爆款怎么做','图文','会员专享']])};\n\nfunction pagePlaceholder(title,desc,quickItems){\n  var q='';\n  if(quickItems&&quickItems.length){\n    q='<div style=\"margin-top:20px\"><div style=\"font-size:12px;color:var(--muted);margin-bottom:10px\">建议下一步操作</div><div style=\"display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px\">'+quickItems.map(function(it){\n      return '<div class=\"mm-item\" style=\"padding:12px;border:1px solid var(--stroke);border-radius:8px\" onclick=\"goPage(\\''+it[2]+'\\')\"><span class=\"mm-ic\" style=\"font-size:18px\">'+it[0]+'</span><div><div style=\"font-size:12px;font-weight:500\">'+it[1]+'</div></div></div>';\n    }).join('')+'</div></div>';\n  }\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">'+(SIDEBAR_CFG[CURRENT_MOD]?SIDEBAR_CFG[CURRENT_MOD].title:'')+'</div><div class=\"page-title\">'+esc(title)+'</div><div class=\"page-desc\">'+esc(desc)+'</div></div></div>'\n    +'<div class=\"card\"><div class=\"empty\"><div class=\"em-ic\">🚧</div><div class=\"em-tx\">该模块正在建设中，敬请期待</div></div></div>'+q;\n}\nfunction pageList(title,desc,items){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">'+(SIDEBAR_CFG[CURRENT_MOD]?SIDEBAR_CFG[CURRENT_MOD].title:'')+'</div><div class=\"page-title\">'+esc(title)+'</div><div class=\"page-desc\">'+esc(desc)+'</div></div></div>'\n    +'<div class=\"tbl-wrap\"><table class=\"tbl\"><tbody>'+items.map(function(it){\n      return '<tr><td style=\"width:32px;font-size:18px\">'+it[0]+'</td><td><div class=\"t-main\">'+it[1]+'</div><div class=\"t-muted\">'+it[2]+'</div></td><td style=\"text-align:right\"><span class=\"tag '+(it[3]==='免费'?'ok':'primary')+'\">'+it[3]+'</span></td></tr>';\n    }).join('')+'</tbody></table></div>';\n}\n\n/* ============= 投放 ============= */\nvar CAMPAIGNS=[\n  {id:1,nm:'末日洪水·主推',mod:'短视频',status:'running',budget:5000,spend:3280,imp:41200,clk:1568,cvr:42,roi:4.2,dir:'智能推荐',goal:'转化',bid:'oCPM'},\n  {id:2,nm:'新品首发·测款',mod:'短视频',status:'running',budget:3000,spend:2150,imp:28500,clk:742,cvr:18,roi:2.1,dir:'自定义',goal:'点击',bid:'cpc'},\n  {id:3,nm:'品牌词·长期',mod:'搜索',status:'running',budget:2000,spend:1820,imp:9800,clk:512,cvr:32,roi:5.8,dir:'关键词',goal:'转化',bid:'oCPM'},\n  {id:4,nm:'直播间引流·晚场',mod:'直播间',status:'paused',budget:2500,spend:1560,imp:22100,clk:902,cvr:24,roi:3.6,dir:'智能推荐',goal:'观看',bid:'oCPM'},\n  {id:5,nm:'竞品词·截流',mod:'搜索',status:'over',budget:1000,spend:980,imp:6500,clk:118,cvr:6,roi:1.2,dir:'关键词',goal:'转化',bid:'cpc'},\n  {id:6,nm:'图文信息流·日常',mod:'信息流',status:'running',budget:2000,spend:1240,imp:18200,clk:612,cvr:28,roi:3.2,dir:'智能推荐',goal:'转化',bid:'oCPM'},\n  {id:7,nm:'开学季·大促',mod:'短视频',status:'draft',budget:8000,spend:0,imp:0,clk:0,cvr:0,roi:0,dir:'智能推荐',goal:'转化',bid:'oCPM'},\n];\nfunction statusTag(s){return s==='running'?'<span class=\"tag ok\"><span class=\"dot\"></span>投放中</span>':s==='paused'?'<span class=\"tag warn\"><span class=\"dot\"></span>暂停</span>':s==='over'?'<span class=\"tag danger\"><span class=\"dot\"></span>超预算</span>':'<span class=\"tag gray\"><span class=\"dot\"></span>草稿</span>'}\n\nPAGES['placement-campaign']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">投放 <span>›</span> 计划</div><div class=\"page-title\">投放计划</div><div class=\"page-desc\">共 '+CAMPAIGNS.length+' 条计划 · 投放中 '+CAMPAIGNS.filter(function(c){return c.status==='running'}).length+' 条</div></div>'\n    +'<div class=\"ph-r\"><button class=\"btn\">📥 批量操作</button><button class=\"btn\">📊 自定义列</button><button class=\"btn primary\" onclick=\"goPage(\\'placement-new\\')\">➕ 新建计划</button></div></div>'\n    +'<div class=\"tbl-wrap\"><div class=\"tbl-tools\"><div class=\"tb-search\">🔍<input placeholder=\"搜索计划名称\"></div><span class=\"tag primary\">全部 '+CAMPAIGNS.length+'</span><span class=\"tag gray\">投放中 '+CAMPAIGNS.filter(function(c){return c.status==='running'}).length+'</span><span class=\"tag gray\">暂停 '+CAMPAIGNS.filter(function(c){return c.status==='paused'}).length+'</span><span class=\"tag gray\">草稿 '+CAMPAIGNS.filter(function(c){return c.status==='draft'}).length+'</span><div style=\"flex:1\"></div><button class=\"btn sm\">📥 导出</button></div>'\n    +'<table class=\"tbl\"><thead><tr><th><input type=\"checkbox\"></th><th>计划名称</th><th>类型</th><th>状态</th><th>定向</th><th>目标</th><th>出价</th><th class=\"num\">预算</th><th class=\"num\">消耗</th><th class=\"num\">展示</th><th class=\"num\">点击</th><th class=\"num\">CTR</th><th class=\"num\">转化</th><th class=\"num\">ROI</th><th>操作</th></tr></thead><tbody>'\n    +CAMPAIGNS.map(function(c){\n      var ctr=c.imp?fmtPct(c.clk/c.imp*100):'-';\n      return '<tr><td><input type=\"checkbox\"></td><td class=\"t-main\">'+esc(c.nm)+'</td><td><span class=\"tag gray\">'+c.mod+'</span></td><td>'+statusTag(c.status)+'</td><td class=\"t-muted\">'+c.dir+'</td><td class=\"t-muted\">'+c.goal+'</td><td class=\"t-muted\">'+c.bid+'</td><td class=\"num\">'+fmtMoney(c.budget)+'</td><td class=\"num\">'+fmtMoney(c.spend)+'</td><td class=\"num\">'+fmt(c.imp)+'</td><td class=\"num\">'+fmt(c.clk)+'</td><td class=\"num\">'+ctr+'</td><td class=\"num\">'+c.cvr+'</td><td class=\"num\" style=\"color:'+(c.roi>=3?'var(--ok)':c.roi>=2?'var(--warn)':'var(--danger)')+'\">'+(c.roi?c.roi.toFixed(2):'-')+'</td><td class=\"nowrap\"><button class=\"btn ghost sm\" onclick=\"toast(\\'编辑计划 #'+c.id+'\\')\">编辑</button> <button class=\"btn ghost sm\" onclick=\"toast(\\'查看报表 #'+c.id+'\\')\">报表</button></td></tr>';\n    }).join('')\n    +'</tbody></table>'\n    +'<div class=\"tbl-pager\">共 '+CAMPAIGNS.length+' 条 · 每页 10 · <button class=\"btn sm\">‹</button><span style=\"margin:0 6px;color:var(--text);font-weight:500\">1</span><button class=\"btn sm\">›</button></div></div>';\n};\n\nPAGES['placement-new']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">投放 <span>›</span> 新建计划</div><div class=\"page-title\">新建投放计划</div><div class=\"page-desc\">按步骤创建一个新的投流计划</div></div>'\n    +'<div class=\"ph-r\"><button class=\"btn\" onclick=\"goPage(\\'placement-campaign\\')\">取消</button><button class=\"btn primary\" onclick=\"toast(\\'计划已创建（演示）\\',\\'ok\\');goPage(\\'placement-campaign\\')\">💾 保存并启动</button></div></div>'\n    // 步骤指示\n    +'<div class=\"card\" style=\"margin-bottom:12px\"><div style=\"display:flex;justify-content:space-between;align-items:center;font-size:12px\">'\n    +['① 计划层','② 广告组层','③ 广告层','④ 素材层'].map(function(s,i){return '<div style=\"flex:1;text-align:center;padding:8px;border-radius:6px;background:'+(i===0?'var(--primary-soft)':'transparent')+';color:'+(i===0?'var(--primary)':'var(--muted)')+';font-weight:'+(i===0?'600':'400')+'\">'+s+'</div>'}).join('<div style=\"color:var(--muted-2)\">›</div>')\n    +'</div></div>'\n    // 表单\n    +'<div class=\"card\">'\n    +'<h3 style=\"margin:0 0 14px;font-size:13px\">基础设置</h3>'\n    +'<div class=\"form-row\"><div class=\"form-item\" style=\"flex:2\"><label>计划名称 *</label><input class=\"ctl\" placeholder=\"例：新品首发·测款\"></div><div class=\"form-item\"><label>计划类型 *</label><div class=\"form-seg\"><div class=\"seg active\">短视频</div><div class=\"seg\">直播间</div><div class=\"seg\">图文</div><div class=\"seg\">搜索</div></div></div></div>'\n    +'<div class=\"form-row\"><div class=\"form-item\"><label>营销目标 *</label><select class=\"ctl\"><option>转化（推荐）</option><option>点击</option><option>展示</option><option>应用安装</option><option>直播间观看</option></select></div><div class=\"form-item\"><label>投放范围</label><div class=\"form-seg\"><div class=\"seg active\">通投</div><div class=\"seg\">PC</div><div class=\"seg\">移动</div></div></div><div class=\"form-item\"><label>投放日期 *</label><input class=\"ctl\" type=\"date\" value=\"2026-09-03\"></div></div>'\n    +'<div class=\"form-row\"><div class=\"form-item\"><label>预算类型 *</label><div class=\"form-seg\"><div class=\"seg active\">日预算</div><div class=\"seg\">总预算</div></div></div><div class=\"form-item\"><label>日预算（元）*</label><input class=\"ctl\" type=\"number\" value=\"2000\" placeholder=\"建议 1000 以上\"></div><div class=\"form-item\"><label>出价方式 *</label><select class=\"ctl\"><option>oCPM（自动出价，推荐）</option><option>cpc（手动出价）</option><option>ocpc（目标转化出价）</option></select></div><div class=\"form-item\"><label>目标转化成本（元）</label><input class=\"ctl\" type=\"number\" value=\"50\" placeholder=\"oCPM 时必填\"></div></div>'\n    +'</div>'\n    +'<div class=\"card\" style=\"margin-top:12px\"><h3 style=\"margin:0 0 14px;font-size:13px\">定向设置</h3>'\n    +'<div class=\"form-row\"><div class=\"form-item\"><label>定向方式</label><div class=\"form-seg\"><div class=\"seg active\">智能推荐</div><div class=\"seg\">自定义</div><div class=\"seg\">人群包</div></div></div><div class=\"form-item\"><label>性别</label><div class=\"form-seg\"><div class=\"seg active\">不限</div><div class=\"seg\">男</div><div class=\"seg\">女</div></div></div><div class=\"form-item\"><label>年龄</label><select class=\"ctl\"><option>不限</option><option>18-24</option><option>25-34</option><option>35-44</option><option>45+</option></select></div><div class=\"form-item\"><label>地域</label><input class=\"ctl\" placeholder=\"不限 / 北京,上海\"></div></div>'\n    +'<div class=\"form-row\"><div class=\"form-item\"><label>兴趣标签</label><input class=\"ctl\" placeholder=\"例：影视/娱乐/购物\"></div><div class=\"form-item\"><label>行为兴趣</label><input class=\"ctl\" placeholder=\"例：7天内搜索过短剧\"></div></div>'\n    +'</div>'\n    +'<div class=\"card\" style=\"margin-top:12px\"><h3 style=\"margin:0 0 14px;font-size:13px\">素材选择（从智绘/智图导入）</h3>'\n    +'<div style=\"display:flex;gap:10px;flex-wrap:wrap\">'\n    +'<div style=\"flex:1;min-width:200px;border:1px dashed var(--primary);background:var(--primary-soft);border-radius:8px;padding:18px;text-align:center;cursor:pointer;color:var(--primary)\" onclick=\"toast(\\'将跳转素材选择器\\')\">＋ 从智绘成片导入</div>'\n    +'<div style=\"flex:1;min-width:200px;border:1px dashed var(--stroke);background:var(--surface-2);border-radius:8px;padding:18px;text-align:center;cursor:pointer;color:var(--muted)\" onclick=\"toast(\\'将跳转上传\\')\">＋ 本地上传视频</div>'\n    +'</div></div>'\n    +'<div style=\"display:flex;justify-content:flex-end;gap:8px;margin-top:14px\"><button class=\"btn\" onclick=\"goPage(\\'placement-campaign\\')\">取消</button><button class=\"btn primary lg\" onclick=\"toast(\\'计划已创建并启动投放（演示）\\',\\'ok\\');goPage(\\'placement-campaign\\')\">💾 保存并启动</button></div>';\n};\n\nPAGES['placement-adgroup']=function(){return PAGES._default()};\nPAGES['placement-ad']=function(){return PAGES._default()};\nPAGES['placement-creative']=function(){return pagePlaceholder('素材管理','管理计划关联的广告素材',[['🎬','视频库','assets-video'],['🖼','图片库','assets-image']])};\nPAGES['placement-batch']=function(){return pagePlaceholder('批量建计划','通过 Excel 批量导入计划',[['📥','下载模板','placement-campaign']])};\nPAGES['placement-template']=function(){return pagePlaceholder('计划模板','保存与复用计划模板')};\nPAGES['placement-scaling']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">投放 <span>›</span> 一键起量</div><div class=\"page-title\">一键起量</div><div class=\"page-desc\">智能识别优质计划，自动放大预算获取更多曝光</div></div></div>'\n    +'<div class=\"kpi-grid\">'\n    +kpiCard('🚀 起量计划','6','个','up','今日新增 2',0.6,'🚀')\n    +kpiCard('💰 起量消耗','8,650','元','up','+45%',0.72,'💰')\n    +kpiCard('📈 起量ROI','4.2','','up','+0.8',0.84,'📈')\n    +kpiCard('🎯 起量转化','128','次','up','+35%',0.55,'🎯')\n    +'</div>'\n    +'<div class=\"card\"><div class=\"card-h\"><h3>起量候选计划</h3></div><div class=\"empty\"><div class=\"em-ic\">🤖</div><div class=\"em-tx\">系统正在分析近 3 天数据，5 分钟后给出起量建议</div></div></div>';\n};\nPAGES['placement-ab']=function(){return pagePlaceholder('A/B 实验','对比不同素材/定向/出价的效果')};\n\n/* ============= 数据 ============= */\nPAGES['data-realtime']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">数据 <span>›</span> 实时数据</div><div class=\"page-title\">实时数据</div><div class=\"page-desc\">数据延迟约 5 分钟 · 更新于 '+fmtTime(Date.now())+'</div></div>'\n    +'<div class=\"ph-r\"><div class=\"form-seg\"><div class=\"seg active\">今日</div><div class=\"seg\">昨日</div><div class=\"seg\">近7日</div><div class=\"seg\">近30日</div></div><button class=\"btn\">📥 导出</button></div></div>'\n    +'<div class=\"kpi-grid\">'\n    +kpiCard('💰 消耗','12,580','元','up','+12.3%',0.78,'💰')\n    +kpiCard('👁 展示','1.28','万','up','+8.6%',0.65,'👁')\n    +kpiCard('👆 点击','386','次','up','+15.2%',0.52,'👆')\n    +kpiCard('🎯 转化','52','次','up','+22.8%',0.42,'🎯')\n    +kpiCard('💵 CPM','98.3','元','down','-2.1%',0.55,'💵')\n    +'</div>'\n    +'<div class=\"grid-2\" style=\"margin-top:12px\">'\n    +'<div class=\"card\"><div class=\"card-h\"><h3>分时消耗</h3><div class=\"more\">详情 ›</div></div>'+chartBar([120,80,60,40,90,180,320,420,580,680,720,650,580,620,580,520,580,680,720,820,920,880,620,420],['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23'],'消耗(元)')+'</div>'\n    +'<div class=\"card\"><div class=\"card-h\"><h3>转化漏斗</h3></div>'+funnelHtml()+'</div>'\n    +'</div>'\n    +'<div class=\"card\" style=\"margin-top:12px\"><div class=\"card-h\"><h3>TOP 计划实时数据</h3></div>'+miniCampaignTable()+'</div>';\n};\nPAGES['data-overview']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">数据 <span>›</span> 数据总览</div><div class=\"page-title\">数据总览</div><div class=\"page-desc\">跨计划、跨周期综合数据</div></div><div class=\"ph-r\"><div class=\"form-seg\"><div class=\"seg\">今日</div><div class=\"seg active\">近7日</div><div class=\"seg\">近30日</div></div><button class=\"btn\">📥 导出</button></div></div>'\n    +'<div class=\"kpi-grid\">'\n    +kpiCard('💰 总消耗','78,950','元','up','+18.5%',0.8,'💰')\n    +kpiCard('👁 总展示','92.6','万','up','+22%',0.72,'👁')\n    +kpiCard('👆 总点击','2,856','次','up','+19%',0.6,'👆')\n    +kpiCard('🎯 总转化','386','次','up','+25%',0.5,'🎯')\n    +kpiCard('💵 综合ROI','3.92','','up','+0.4',0.85,'📈')\n    +'</div>'\n    +'<div class=\"card\" style=\"margin-top:12px\"><div class=\"card-h\"><h3>近 7 日趋势</h3></div>'+chartBar([8200,9100,7800,11200,10500,12800,12580],['8/28','8/29','8/30','8/31','9/1','9/2','9/3'],'消耗(元)')+'</div>';\n};\nPAGES['data-conversion']=function(){return PAGES['data-realtime']()};\nPAGES['data-roi']=function(){\n  var rows=CAMPAIGNS.filter(function(c){return c.spend>0}).map(function(c){\n    var rev=c.spend*c.roi,profit=rev-c.spend,roi=c.roi;\n    return '<tr><td class=\"t-main\">'+esc(c.nm)+'</td><td><span class=\"tag gray\">'+c.mod+'</span></td><td class=\"num\">'+fmtMoney(c.spend)+'</td><td class=\"num\">'+fmtMoney(rev)+'</td><td class=\"num\" style=\"color:'+(profit>=0?'var(--ok)':'var(--danger)')+'\">'+fmtMoney(profit)+'</td><td class=\"num\" style=\"color:'+(roi>=3?'var(--ok)':roi>=2?'var(--warn)':'var(--danger)')+';font-weight:600\">'+roi.toFixed(2)+'</td><td><div class=\"prog\"><i style=\"width:'+Math.min(100,roi*15)+'%\"></i></div></td></tr>';\n  }).join('');\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">数据 <span>›</span> ROI 报表</div><div class=\"page-title\">ROI 报表</div><div class=\"page-desc\">各计划投入产出比与盈亏分析</div></div><div class=\"ph-r\"><button class=\"btn\">📥 导出</button></div></div>'\n    +'<div class=\"tbl-wrap\"><table class=\"tbl\"><thead><tr><th>计划</th><th>类型</th><th class=\"num\">消耗</th><th class=\"num\">产出</th><th class=\"num\">利润</th><th class=\"num\">ROI</th><th>完成度</th></tr></thead><tbody>'+rows+'</tbody></table></div>';\n};\nPAGES['data-hour']=function(){return PAGES._default('data-realtime')};\nPAGES['data-region']=function(){return pagePlaceholder('地域分析','按地域维度查看数据分布')};\nPAGES['data-device']=function(){return pagePlaceholder('设备分析','按设备/系统维度查看数据')};\nPAGES['data-audience']=function(){return pagePlaceholder('人群分析','按人群画像维度分析数据')};\n\n/* ============= 工具 - 素材库 ============= */\nvar SAMPLE_VIDEOS=[\n  {nm:'末日洪水·开场',dur:'00:32',size:'1080P',status:'ok',cvr:4.2,use:'主推计划'},\n  {nm:'末日洪水·房屋升级',dur:'00:45',size:'1080P',status:'ok',cvr:3.8,use:'主推计划'},\n  {nm:'新品首发·开箱',dur:'00:28',size:'1080P',status:'ok',cvr:2.6,use:'测款计划'},\n  {nm:'新品首发·使用场景',dur:'00:38',size:'720P',status:'warn',cvr:1.8,use:'-'},\n  {nm:'品牌故事·访谈',dur:'01:12',size:'1080P',status:'ok',cvr:5.2,use:'品牌计划'},\n  {nm:'直播间·晚场预告',dur:'00:18',size:'1080P',status:'ok',cvr:3.6,use:'直播计划'},\n  {nm:'图文·开学季促销',dur:'00:22',size:'720P',status:'danger',cvr:0.8,use:'-'},\n  {nm:'用户证言·真实反馈',dur:'00:55',size:'1080P',status:'ok',cvr:4.4,use:'-'},\n];\nPAGES['assets-video']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">工具 <span>›</span> 素材管理 <span>›</span> 视频库</div><div class=\"page-title\">视频库</div><div class=\"page-desc\">共 '+SAMPLE_VIDEOS.length+' 支视频 · 已投放 '+SAMPLE_VIDEOS.filter(function(v){return v.use!=='-'}).length+' 支</div></div>'\n    +'<div class=\"ph-r\"><button class=\"btn\">📤 批量导出</button><button class=\"btn\" onclick=\"toast(\\'将跳转智绘\\')\">🎬 从智绘导入</button><button class=\"btn primary\">＋ 上传视频</button></div></div>'\n    +'<div class=\"asset-grid\">'+SAMPLE_VIDEOS.map(function(v,i){\n      var thumbColors=['#7c3aed','#3b82f6','#10b981','#f59e0b','#ef4444','#8b5cf6','#06b6d4','#ec4899'];\n      var bg=thumbColors[i%thumbColors.length];\n      var st=v.status==='ok'?'<span class=\"tag ok\">优质</span>':v.status==='warn'?'<span class=\"tag warn\">待优化</span>':'<span class=\"tag danger\">低效</span>';\n      return '<div class=\"asset-card\"><div class=\"ac-thumb\" style=\"background:linear-gradient(135deg,'+bg+','+bg+'99)\"><span style=\"color:rgba(255,255,255,.8);font-size:36px\">▶</span><span class=\"ac-dur\">'+v.dur+'</span><div class=\"ac-stat\">'+st+'</div></div><div class=\"ac-body\"><div class=\"ac-nm\">'+esc(v.nm)+'</div><div class=\"ac-meta\"><span>'+v.size+' · CVR '+v.cvr+'%</span><span>'+v.use+'</span></div></div></div>';\n    }).join('')+'</div>';\n};\nPAGES['assets-image']=function(){\n  var imgs=['角色白夜','客厅·日','客厅·夜','道具·聚宝盆','道具·纸鹤','场景·街景','场景·天台','角色林栋'];\n  var colors=['#7c3aed','#3b82f6','#10b981','#f59e0b','#ef4444','#8b5cf6','#06b6d4','#ec4899'];\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">工具 <span>›</span> 素材管理 <span>›</span> 图片库</div><div class=\"page-title\">图片库</div><div class=\"page-desc\">共 '+imgs.length+' 张图片</div></div><div class=\"ph-r\"><button class=\"btn\" onclick=\"toast(\\'将跳转智图\\')\">🖼 从智图导入</button><button class=\"btn primary\">＋ 上传图片</button></div></div>'\n    +'<div class=\"asset-grid\">'+imgs.map(function(nm,i){\n      return '<div class=\"asset-card\"><div class=\"ac-thumb\" style=\"background:linear-gradient(135deg,'+colors[i%colors.length]+','+colors[i%colors.length]+'99);color:rgba(255,255,255,.85);font-size:14px;font-weight:500\">'+esc(nm)+'</div><div class=\"ac-body\"><div class=\"ac-nm\">'+esc(nm)+'</div><div class=\"ac-meta\"><span>'+['2:1','2:1','2:1','1:1','1:1','2:1','2:1','1:1'][i]+'</span><span>未使用</span></div></div></div>';\n    }).join('')+'</div>';\n};\nPAGES['assets-text']=function(){return pagePlaceholder('图文库','图文素材管理',[['📝','新建图文','assets-text'],['📥','批量导入','assets-text']])};\nPAGES['assets-lead']=function(){return pagePlaceholder('线索创意组件','表单/弹窗等线索收集组件')};\n\nPAGES['create-script']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">工具 <span>›</span> 素材创作 <span>›</span> 视频脚本生成</div><div class=\"page-title\">视频脚本生成</div><div class=\"page-desc\">AI 智能生成投流视频脚本</div></div></div>'\n    +'<div class=\"grid-2\"><div class=\"card\"><h3 style=\"margin:0 0 12px;font-size:13px\">脚本需求</h3>'\n    +'<div class=\"form-row\"><div class=\"form-item\" style=\"flex:1\"><label>产品/品牌</label><input class=\"ctl\" placeholder=\"例：智投投流平台\"></div></div>'\n    +'<div class=\"form-row\"><div class=\"form-item\" style=\"flex:1\"><label>视频类型</label><select class=\"ctl\"><option>短剧引流</option><option>产品种草</option><option>口播讲解</option><option>开箱测评</option><option>剧情反转</option></select></div></div>'\n    +'<div class=\"form-row\"><div class=\"form-item\" style=\"flex:1\"><label>核心卖点 / 剧情大纲</label><textarea class=\"ctl\" placeholder=\"例：30秒短剧，主角白夜发现聚宝盆秘密，引出投流课程卖点\"></textarea></div></div>'\n    +'<div class=\"form-row\"><div class=\"form-item\"><label>时长</label><select class=\"ctl\"><option>15秒</option><option selected>30秒</option><option>60秒</option></select></div><div class=\"form-item\"><label>风格</label><select class=\"ctl\"><option>悬疑</option><option>搞笑</option><option>情感</option><option>热血</option></select></div></div>'\n    +'<button class=\"btn primary lg\" onclick=\"toast(\\'脚本生成中，约 30 秒\\',\\'ok\\')\">✨ 生成脚本</button>'\n    +'</div><div class=\"card\"><h3 style=\"margin:0 0 12px;font-size:13px\">生成结果</h3><div class=\"empty\"><div class=\"em-ic\">📝</div><div class=\"em-tx\">填写需求后点击「生成脚本」</div></div></div></div>';\n};\nPAGES['create-jichuang']=function(){return pagePlaceholder('即创 · 智能创意生产','AI 一键生成视频/图片/文案素材',[['🎬','生成视频','create-script'],['🖼','生成图片','assets-image']])};\nPAGES['create-tuwen']=function(){return pagePlaceholder('图文智能生成','AI 自动生成图文素材')};\n\n/* ============= 工具 - 定向 ============= */\nvar TARGETING_PACKS=[\n  {nm:'高消费人群',desc:'近30天消费>5000元',reach:'120万',used:3},\n  {nm:'短剧兴趣包',desc:'搜索/观看过短剧内容',reach:'860万',used:5},\n  {nm:'品牌受众',desc:'互动过品牌词',reach:'32万',used:2},\n  {nm:'竞品用户',desc:'搜索过竞品词',reach:'180万',used:1},\n];\nPAGES['targeting-pack']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">工具 <span>›</span> 定向管理 <span>›</span> 定向包</div><div class=\"page-title\">定向包</div><div class=\"page-desc\">共 '+TARGETING_PACKS.length+' 个定向包</div></div><div class=\"ph-r\"><button class=\"btn primary\">＋ 新建定向包</button></div></div>'\n    +'<div class=\"tbl-wrap\"><table class=\"tbl\"><thead><tr><th>名称</th><th>描述</th><th class=\"num\">覆盖人数</th><th class=\"num\">关联计划</th><th>操作</th></tr></thead><tbody>'+TARGETING_PACKS.map(function(t){\n      return '<tr><td class=\"t-main\">'+esc(t.nm)+'</td><td class=\"t-muted\">'+esc(t.desc)+'</td><td class=\"num\">'+t.reach+'</td><td class=\"num\">'+t.used+'</td><td class=\"nowrap\"><button class=\"btn ghost sm\">编辑</button> <button class=\"btn ghost sm\">应用</button></td></tr>';\n    }).join('')+'</tbody></table></div>';\n};\nvar AUDIENCES=[\n  {nm:'高价值老客',src:'上传',cnt:'12,580',fresh:'2026-09-01',status:'ok'},\n  {nm:'近30天下单用户',src:'系统',cnt:'8,920',fresh:'2026-09-02',status:'ok'},\n  {nm:'直播间高互动',src:'系统',cnt:'5,640',fresh:'2026-09-02',status:'ok'},\n  {nm:'流失预警用户',src:'上传',cnt:'2,180',fresh:'2026-08-25',status:'warn'},\n];\nPAGES['targeting-audience']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">工具 <span>›</span> 定向管理 <span>›</span> 人群包</div><div class=\"page-title\">人群包</div><div class=\"page-desc\">共 '+AUDIENCES.length+' 个人群包</div></div><div class=\"ph-r\"><button class=\"btn\">📤 上传人群</button><button class=\"btn primary\">＋ 新建人群包</button></div></div>'\n    +'<div class=\"tbl-wrap\"><table class=\"tbl\"><thead><tr><th>人群名称</th><th>来源</th><th class=\"num\">人数</th><th>更新时间</th><th>状态</th><th>操作</th></tr></thead><tbody>'+AUDIENCES.map(function(a){\n      return '<tr><td class=\"t-main\">'+esc(a.nm)+'</td><td><span class=\"tag '+(a.src==='系统'?'info':'gray')+'\">'+a.src+'</span></td><td class=\"num\">'+a.cnt+'</td><td class=\"t-muted\">'+a.fresh+'</td><td>'+(a.status==='ok'?'<span class=\"tag ok\">可用</span>':'<span class=\"tag warn\">待更新</span>')+'</td><td class=\"nowrap\"><button class=\"btn ghost sm\">编辑</button> <button class=\"btn ghost sm\">定向投放</button></td></tr>';\n    }).join('')+'</tbody></table></div>';\n};\n\n/* ============= 工具 - 评论 ============= */\nPAGES['comments-list']=function(){\n  var cmts=[['末日洪水·主推','用户A***','太精彩了，期待下一集','2026-09-03 10:32','待回'],['末日洪水·主推','用户B***','课程内容很实用','2026-09-03 09:15','已回'],['新品首发','用户C***','求链接','2026-09-03 08:48','待回'],['品牌词','用户D***','已下单，期待效果','2026-09-02 22:10','已回']];\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">工具 <span>›</span> 评论管理 <span>›</span> 评论内容</div><div class=\"page-title\">评论内容</div><div class=\"page-desc\">待回复 '+cmts.filter(function(c){return c[4]==='待回'}).length+' 条</div></div><div class=\"ph-r\"><button class=\"btn\">🚫 屏蔽词</button><button class=\"btn\">📌 常用语</button></div></div>'\n    +'<div class=\"tbl-wrap\"><table class=\"tbl\"><thead><tr><th>来源计划</th><th>用户</th><th>评论内容</th><th>时间</th><th>状态</th><th>操作</th></tr></thead><tbody>'+cmts.map(function(c){\n      return '<tr><td class=\"t-main\">'+c[0]+'</td><td>'+c[1]+'</td><td>'+esc(c[2])+'</td><td class=\"t-muted\">'+c[3]+'</td><td>'+(c[4]==='待回'?'<span class=\"tag warn\">待回</span>':'<span class=\"tag ok\">已回</span>')+'</td><td><button class=\"btn ghost sm\" onclick=\"toast(\\'打开回复框\\')\">回复</button></td></tr>';\n    }).join('')+'</tbody></table></div>';\n};\nPAGES['comments-phrases']=function(){return pagePlaceholder('常用语','预设评论回复模板')};\nPAGES['comments-blockwords']=function(){return pagePlaceholder('屏蔽词','评论屏蔽词管理')};\nPAGES['comments-blockusers']=function(){return pagePlaceholder('屏蔽用户','屏蔽用户列表')};\nPAGES['smart-scaling']=function(){return PAGES['placement-scaling']()};\nPAGES['dm-config']=function(){return pagePlaceholder('私信工具配置','自动回复与私信触达配置')};\nPAGES['account-query']=function(){return pagePlaceholder('账户诊断','账户健康度诊断与建议')};\nPAGES['account-batch']=function(){return pagePlaceholder('批量操作','多账户批量管理')};\n\n/* 数据工具/财务工具/系统工具其它入口（兜底） */\nPAGES['report-custom']=function(){return pagePlaceholder('自定义报表','按需组合维度与指标')};\nPAGES['report-funnel']=function(){return PAGES['data-conversion']()};\nPAGES['report-attribution']=function(){return pagePlaceholder('归因分析','多触点归因分析')};\nPAGES['audience-insight']=function(){return pagePlaceholder('人群画像','受众画像分析')};\nPAGES['audience-portrait']=function(){return pagePlaceholder('受众画像','受众人口属性分布')};\nPAGES['audience-trend']=function(){return pagePlaceholder('趋势洞察','受众趋势分析')};\nPAGES['export-data']=function(){return pagePlaceholder('数据导出','导出明细数据')};\nPAGES['export-api']=function(){return pagePlaceholder('API 对接','开放 API 文档与密钥')};\nPAGES['finance-transfer']=function(){return pagePlaceholder('资金调拨','多账户资金调拨')};\nPAGES['finance-refund']=function(){return pagePlaceholder('退款管理','退款申请与记录')};\nPAGES['invoice-apply']=function(){return pagePlaceholder('开票申请','申请开具发票')};\nPAGES['rebate']=function(){return pagePlaceholder('返点政策','阶梯返点政策查看')};\n\n/* ============= 财务 ============= */\nPAGES['finance-recharge']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">财务 <span>›</span> 账户充值</div><div class=\"page-title\">账户充值</div><div class=\"page-desc\">当前余额 ¥ 8,650 · 待消耗 ¥ 0</div></div></div>'\n    +'<div class=\"grid-2\"><div class=\"card\"><h3 style=\"margin:0 0 12px;font-size:13px\">选择充值金额</h3>'\n    +'<div style=\"display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:14px\">'\n    +[1000,3000,5000,10000,30000,50000].map(function(amt,i){return '<div class=\"mm-item\" style=\"padding:14px;border:1px solid '+(i===2?'var(--primary)':'var(--stroke)')+';border-radius:8px;justify-content:center;font-size:14px;font-weight:600;cursor:pointer;color:'+(i===2?'var(--primary)':'var(--text)')+'\">¥ '+fmt(amt)+'</div>'}).join('')\n    +'</div>'\n    +'<div class=\"form-row\"><div class=\"form-item\" style=\"flex:1\"><label>自定义金额（元）</label><input class=\"ctl\" type=\"number\" placeholder=\"≥ 100\"></div></div>'\n    +'<div class=\"form-row\"><div class=\"form-item\" style=\"flex:1\"><label>支付方式</label><div class=\"form-seg\"><div class=\"seg active\">支付宝</div><div class=\"seg\">微信</div><div class=\"seg\">银行转账</div></div></div></div>'\n    +'<button class=\"btn primary lg\" style=\"width:100%\" onclick=\"toast(\\'跳转支付（演示）\\',\\'ok\\')\">立即充值</button>'\n    +'</div><div class=\"card\"><h3 style=\"margin:0 0 12px;font-size:13px\">充值优惠</h3>'\n    +'<div style=\"background:var(--primary-soft);border:1px solid var(--primary);border-radius:8px;padding:12px;color:var(--primary);font-size:12px;line-height:1.7\">'\n    +'<div style=\"font-weight:600;margin-bottom:6px\">🎁 充 50000 送 5000</div>'\n    +'<div>充 10000 送 500 · 充 30000 送 2500<br>充值金额立即到账，赠送金额分 30 天返还</div>'\n    +'</div></div></div>';\n};\nPAGES['finance-flow']=function(){\n  var txns=[['2026-09-03 14:20','消耗','末日洪水·主推',-3280,'running'],['2026-09-03 10:15','消耗','新品首发·测款',-2150,'running'],['2026-09-02 18:32','充值','支付宝充值',+10000,'ok'],['2026-09-02 14:20','消耗','品牌词·长期',-1820,'running'],['2026-09-01 09:00','返点','8月返点到账',+860,'ok'],['2026-08-31 22:10','消耗','竞品词·截流',-980,'over']];\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">财务 <span>›</span> 账户流水</div><div class=\"page-title\">账户流水</div><div class=\"page-desc\">余额 ¥ 8,650 · 累计充值 ¥ 50,000 · 累计消耗 ¥ 41,350</div></div><div class=\"ph-r\"><button class=\"btn\">📥 导出</button></div></div>'\n    +'<div class=\"tbl-wrap\"><table class=\"tbl\"><thead><tr><th>时间</th><th>类型</th><th>备注</th><th class=\"num\">金额</th><th>状态</th></tr></thead><tbody>'+txns.map(function(t){\n      return '<tr><td class=\"t-muted\">'+t[0]+'</td><td><span class=\"tag '+(t[1]==='充值'?'ok':t[1]==='返点'?'primary':'info')+'\">'+t[1]+'</span></td><td class=\"t-main\">'+esc(t[2])+'</td><td class=\"num\" style=\"color:'+(t[3]>0?'var(--ok)':'var(--text)')+';font-weight:600\">'+(t[3]>0?'+':'')+fmtMoney(t[3])+'</td><td>'+(t[4]==='ok'?'<span class=\"tag ok\">成功</span>':'<span class=\"tag info\">进行中</span>')+'</td></tr>';\n    }).join('')+'</tbody></table></div>';\n};\nPAGES['invoice-list']=function(){return pagePlaceholder('发票管理','发票申请记录',[['📨','申请开票','invoice-apply']])};\nPAGES['coupons']=function(){\n  var cps=[['新人立减','满 1000 减 100','2026-09-30','未使用'],['充值返券','满 5000 返 300','2026-09-15','已使用'],['老用户回馈','满 3000 减 50','2026-09-20','未使用']];\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">财务 <span>›</span> 优惠券</div><div class=\"page-title\">优惠券</div><div class=\"page-desc\">可用 '+cps.filter(function(c){return c[3]==='未使用'}).length+' 张</div></div></div>'\n    +'<div class=\"grid-3\">'+cps.map(function(c){\n      var used=c[3]==='已使用';\n      return '<div class=\"card\" style=\"position:relative;'+(used?'opacity:.6':'')+'\"><div style=\"position:absolute;top:0;left:0;width:4px;height:100%;background:'+(used?'var(--muted-2)':'var(--primary)')+';border-radius:10px 0 0 10px\"></div><div style=\"padding-left:8px\"><div style=\"font-size:15px;font-weight:600;color:'+(used?'var(--muted)':'var(--primary)')+'\">'+c[0]+'</div><div style=\"font-size:12px;color:var(--muted);margin:4px 0 10px\">'+c[1]+'</div><div style=\"display:flex;justify-content:space-between;align-items:center\"><span style=\"font-size:11px;color:var(--muted-2)\">有效期至 '+c[2]+'</span><span class=\"tag '+(used?'gray':'primary')+'\">'+c[3]+'</span></div></div></div>';\n    }).join('')+'</div>';\n};\n\n/* ============= 账户 ============= */\nPAGES['account-info']=function(){\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">账户 <span>›</span> 账户概览</div><div class=\"page-title\">账户概览</div><div class=\"page-desc\">账户健康度与基础信息</div></div></div>'\n    +'<div class=\"kpi-grid\" style=\"grid-template-columns:repeat(4,1fr)\">'\n    +kpiCard('💰 余额','8,650','元','up','充足',0.6,'💰')\n    +kpiCard('📋 计划','7','个','up','4 投放中',0.5,'📋')\n    +kpiCard('👥 团队','3','人','up','活跃',0.4,'👥')\n    +kpiCard('⭐ 健康度','92','','up','良好',0.92,'⭐')\n    +'</div>'\n    +'<div class=\"card\" style=\"margin-top:12px\"><div class=\"card-h\"><h3>账户信息</h3></div><table class=\"tbl\"><tbody>'\n    +'<tr><td style=\"width:160px\" class=\"t-muted\">账户 ID</td><td>T-170-'+(USER?USER.uid:'000')+'</td></tr>'\n    +'<tr><td class=\"t-muted\">手机号</td><td>'+(USER?esc(USER.phone):'-')+'</td></tr>'\n    +'<tr><td class=\"t-muted\">会员等级</td><td><span class=\"tag primary\">VIP 高级会员</span></td></tr>'\n    +'<tr><td class=\"t-muted\">注册时间</td><td class=\"t-muted\">2026-08-24 10:00</td></tr>'\n    +'<tr><td class=\"t-muted\">账户类型</td><td>企业账户</td></tr>'\n    +'</tbody></table></div>';\n};\nPAGES['account-profile']=function(){return pagePlaceholder('基本信息','编辑账户基本资料')};\nPAGES['account-security']=function(){return pagePlaceholder('安全设置','密码/二次验证/登录设备')};\nPAGES['org-team']=function(){\n  var teams=[['投流小组','5 人','8 个计划','张三'],['创意小组','3 人','52 个素材','李四'],['数据分析','2 人','12 个报表','王五']];\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">账户 <span>›</span> 团队管理</div><div class=\"page-title\">团队管理</div><div class=\"page-desc\">共 '+teams.length+' 个团队</div></div><div class=\"ph-r\"><button class=\"btn primary\">＋ 新建团队</button></div></div>'\n    +'<div class=\"tbl-wrap\"><table class=\"tbl\"><thead><tr><th>团队</th><th class=\"num\">人数</th><th class=\"num\">资源</th><th>负责人</th><th>操作</th></tr></thead><tbody>'+teams.map(function(t){return '<tr><td class=\"t-main\">'+t[0]+'</td><td class=\"num\">'+t[1]+'</td><td class=\"num\">'+t[2]+'</td><td>'+t[3]+'</td><td class=\"nowrap\"><button class=\"btn ghost sm\">管理</button> <button class=\"btn ghost sm\">解散</button></td></tr>'}).join('')+'</tbody></table></div>';\n};\nPAGES['org-role']=function(){return pagePlaceholder('角色权限','角色与权限配置')};\nPAGES['org-member']=function(){return pagePlaceholder('成员管理','添加/移除成员')};\nPAGES['subaccount-list']=function(){return pagePlaceholder('子账户列表','子账户管理')};\nPAGES['subaccount-new']=function(){return pagePlaceholder('新建子账户','创建子账户并分配权限')};\n\n/* ============= 营销 ============= */\nPAGES['mkt-activity']=function(){return pagePlaceholder('活动管理','营销活动管理')};\nPAGES['mkt-gift']=function(){return pagePlaceholder('赠品管理','赠品库存与发放')};\nPAGES['mkt-private']=function(){return pagePlaceholder('私域引流','私域流量引流配置')};\nPAGES['mkt-reach']=function(){return pagePlaceholder('触达任务','用户触达任务管理')};\n\n/* ============= 学堂 ============= */\nPAGES['aca-course']=function(){return PAGES['home-learn']()};\nPAGES['aca-news']=function(){return PAGES['home-notice']()};\nPAGES['aca-case']=function(){\n  var cases=[['日耗 10w+ 短剧投流拆解','某短剧工作室','ROI 5.8'],['0 粉新号 7 天起量','某 MCN','ROI 4.2'],['直播间引流 3.0 实战','某品牌方','GMV +180%']];\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">学堂 <span>›</span> 案例库</div><div class=\"page-title\">案例库</div><div class=\"page-desc\">行业 TOP 投流案例拆解</div></div></div>'\n    +'<div class=\"grid-3\">'+cases.map(function(c){return '<div class=\"asset-card\"><div class=\"ac-thumb\" style=\"background:linear-gradient(135deg,#7c3aed,#a855f7);color:rgba(255,255,255,.85);font-size:14px;font-weight:500\">🏆 精选案例</div><div class=\"ac-body\"><div class=\"ac-nm\">'+esc(c[0])+'</div><div class=\"ac-meta\"><span>'+c[1]+'</span><span style=\"color:var(--ok)\">'+c[2]+'</span></div></div></div>'}).join('')+'</div>';\n};\nPAGES['aca-qa']=function(){return pagePlaceholder('问答社区','投流从业者问答')};\nPAGES['aca-live']=function(){return pagePlaceholder('直播课表','近期直播课程预告')};\n\n/* 默认页 */\nPAGES['_default']=function(fallback){\n  if(fallback&&PAGES[fallback])return PAGES[fallback]();\n  var pageName=SIDEBAR_CFG[CURRENT_MOD]?SIDEBAR_CFG[CURRENT_MOD].title:'';\n  return '<div class=\"page-head\"><div class=\"ph-l\"><div class=\"breadcrumb\">'+pageName+'</div><div class=\"page-title\">'+esc(CURRENT_PAGE)+'</div><div class=\"page-desc\">该页面正在建设中</div></div></div>'\n    +'<div class=\"card\"><div class=\"empty\"><div class=\"em-ic\">🚧</div><div class=\"em-tx\">模块建设中，敬请期待</div></div></div>';\n};\n\n/* ============= 初始化 ============= */\nfunction _getTokenFromUrl(){\n  var m=location.search.match(/[?&]sso=([^&]+)/);\n  if(m){try{var t=decodeURIComponent(m[1]);if(t&&t!=='null'&&t!=='undefined'){localStorage.setItem('tou_token',t);return t}}catch(e){}}\n  return '';\n}\nfunction _cleanUrl(){if(location.search.indexOf('sso=')>=0){var u=location.pathname;history.replaceState({},'',u)}}\n\nvar DEMO_MODE=false;\nfunction loadMe(){\n  // 演示模式：无后端时降级为演示用户，UI 完整可用\n  if(!TOKEN){_enterDemo();return Promise.resolve()}\n  return fetch('/me',{headers:{'Authorization':'Bearer '+TOKEN}})\n    .then(function(r){if(!r.ok)throw new Error('HTTP '+r.status);return r.json()})\n    .then(function(u){USER=u;_renderUser()})\n    .catch(function(){_enterDemo()});\n}\nfunction _renderUser(){\n  if(!USER)return;\n  var nm=USER.phone?USER.phone.substr(0,3)+'****'+USER.phone.substr(-4):'用户';\n  if(DEMO_MODE)nm='演示·'+nm;\n  $('#userName').textContent=nm;\n  $('#userAvatarChar').textContent=(USER.phone||'U').substr(-1);\n}\nfunction _enterDemo(){\n  DEMO_MODE=true;\n  USER={uid:0,phone:'15245102270',vip_level:1};\n  _renderUser();\n  var b=document.getElementById('demoBadge');if(b)b.style.display='inline-block';\n  setTimeout(function(){if(DEMO_MODE)toast('演示模式：后端未对接，数据为示例','info')},800);\n}\nfunction _showUnauth(){_enterDemo()}\n\n/* 启动 */\nfunction boot(){\n  var t=_getTokenFromUrl();\n  if(t)TOKEN=t;\n  _cleanUrl();\n  // 模块导航条 active\n  (function(){var apps={zhitu:'www.futuresource.vip',make:'make.futuresource.vip',hui:'hui.futuresource.vip',yi:'yi.futuresource.vip',tou:'tou.futuresource.vip'};var h=location.hostname;var nav=document.getElementById('appNavBar');if(!nav)return;nav.querySelectorAll('.nav-item').forEach(function(a){if(apps[a.getAttribute('data-app')]===h)a.classList.add('active');else a.classList.remove('active');});})();\n  // 跨域 token 同步\n  (function(){var nav=document.getElementById('appNavBar');if(!nav||!TOKEN)return;nav.querySelectorAll('a.nav-item[href*=\"futuresource.vip\"]').forEach(function(a){try{var url=new URL(a.href);if(url.hostname!==location.hostname){url.searchParams.set('sso',TOKEN);a.href=url.toString()}}catch(e){}});})();\n  loadMe();\n  renderSidebar();\n  renderPage();\n  // 移除加载遮罩\n  setTimeout(function(){var il=document.getElementById('initLoading');if(il){il.style.opacity='0';il.style.transition='opacity .3s';setTimeout(function(){il.remove()},300)}},200);\n}\nboot();\n// 安全网：5 秒后强制移除遮罩\nsetTimeout(function(){var il=document.getElementById('initLoading');if(il)il.remove()},5000);\n</script>\n</body>\n</html>\n"