/* ============ Tokens (Ant Design Pro) ============ */
:root {
  --primary: #1677ff;
  --primary-hover: #4096ff;
  --primary-active: #0958d9;
  --primary-bg: #e6f4ff;
  --primary-bg-hover: #bae0ff;
  --success: #52c41a;
  --success-bg: #f6ffed;
  --warning: #faad14;
  --warning-bg: #fffbe6;
  --error: #ff4d4f;
  --error-bg: #fff2f0;
  --purple: #722ed1;
  --cyan: #13c2c2;
  --magenta: #eb2f96;
  --orange: #fa8c16;

  --text-1: rgba(0,0,0,0.88);
  --text-2: rgba(0,0,0,0.65);
  --text-3: rgba(0,0,0,0.45);
  --text-4: rgba(0,0,0,0.25);
  --border: #f0f0f0;
  --border-2: #d9d9d9;
  --bg-layout: #f5f7fa;
  --bg-card: #ffffff;
  --bg-hover: #f5f5f5;

  --sidebar-w: 224px;
  --sidebar-w-collapsed: 56px;
  --header-h: 56px;
  --tabs-h: 38px;

  --radius: 8px;
  --radius-sm: 6px;
  --shadow-1: 0 1px 2px 0 rgba(0,0,0,0.03), 0 1px 6px -1px rgba(0,0,0,0.02);
  --shadow-2: 0 6px 16px 0 rgba(0,0,0,0.08), 0 3px 6px -4px rgba(0,0,0,0.12);
}

* { box-sizing: border-box; }
html, body { margin:0; padding:0; height:100%; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; font-size:14px; color: var(--text-1); background: var(--bg-layout); }
a { color: var(--primary); text-decoration: none; }
button { font-family: inherit; cursor: pointer; }

/* ============ Layout ============ */
.app-layout { display:flex; height:100vh; overflow:hidden; }

/* ============ Sidebar ============ */
.sidebar {
  width: var(--sidebar-w);
  background: #001529;
  color: rgba(255,255,255,0.85);
  display:flex; flex-direction:column;
  transition: width .2s;
  flex-shrink:0;
}
.sidebar.collapsed { width: var(--sidebar-w-collapsed); }

.logo { display:flex; align-items:center; gap:10px; padding:14px 16px; border-bottom:1px solid rgba(255,255,255,0.06); }
.logo-icon { width:32px; height:32px; border-radius:8px; background:linear-gradient(135deg, #1677ff 0%, #722ed1 100%); display:flex; align-items:center; justify-content:center; color:#fff; font-size:15px; }
.logo-text { line-height:1.2; overflow:hidden; }
.logo-title { font-weight:600; color:#fff; font-size:15px; white-space:nowrap; }
.logo-sub { font-size:11px; color: rgba(255,255,255,0.45); white-space:nowrap; }
.sidebar.collapsed .logo-text { display:none; }

.sidebar-scroll { flex:1; overflow-y:auto; padding: 6px 0; }
.sidebar-scroll::-webkit-scrollbar { width:6px; }
.sidebar-scroll::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.15); border-radius:3px; }

.menu { list-style:none; margin:0; padding:0; }
.menu-group { padding: 12px 16px 6px; font-size:11px; color: rgba(255,255,255,0.4); letter-spacing:0.5px; }
.sidebar.collapsed .menu-group { display:none; }
.menu-item { display:flex; align-items:center; gap:10px; padding:9px 16px; cursor:pointer; color: rgba(255,255,255,0.7); font-size:13px; position:relative; }
.menu-item i:first-child { width:16px; text-align:center; font-size:14px; }
.menu-item:hover { background: rgba(255,255,255,0.06); color:#fff; }
.menu-item.active { background: var(--primary); color:#fff; }
.menu-item .arrow { margin-left:auto; font-size:11px; transition: transform .2s; }
.menu-item.open .arrow { transform: rotate(180deg); }
.sidebar.collapsed .menu-item span,
.sidebar.collapsed .menu-item .arrow { display:none; }

.submenu { list-style:none; margin:0; padding:0; background: rgba(0,0,0,0.2); max-height:0; overflow:hidden; transition: max-height .2s; }
.submenu.open { max-height:500px; }
.submenu li { padding: 8px 16px 8px 42px; cursor:pointer; color: rgba(255,255,255,0.65); font-size:13px; }
.submenu li:hover { background: rgba(255,255,255,0.06); color:#fff; }
.submenu li.active { color:#fff; background: rgba(22,119,255,0.2); border-right:3px solid var(--primary); }
.sidebar.collapsed .submenu { display:none; }

.sidebar-foot { padding:8px; border-top:1px solid rgba(255,255,255,0.06); }
.collapse-btn { width:100%; background:transparent; border:0; color:rgba(255,255,255,0.65); padding:8px; border-radius:4px; }
.collapse-btn:hover { background:rgba(255,255,255,0.08); color:#fff; }

/* ============ Header ============ */
.main { flex:1; display:flex; flex-direction:column; overflow:hidden; min-width:0; }
.header { height:var(--header-h); background:#fff; display:flex; align-items:center; justify-content:space-between; padding:0 20px; border-bottom:1px solid var(--border); flex-shrink:0; }
.header-left { display:flex; align-items:center; gap:14px; }
.breadcrumb { font-size:13px; color: var(--text-3); display:flex; align-items:center; gap:6px; }
.breadcrumb .cur { color: var(--text-1); font-weight:500; }
.breadcrumb i { font-size:10px; }

.header-right { display:flex; align-items:center; gap:6px; }
.project-switch { display:flex; align-items:center; gap:6px; background:#f5f5f5; padding:5px 10px; border-radius:6px; color: var(--text-2); margin-right:6px; }
.project-switch i { color: var(--primary); }
.project-switch select { border:0; background:transparent; font-size:13px; color: var(--text-1); outline:none; cursor:pointer; max-width:200px; }

.icon-btn { width:34px; height:34px; border:0; background:transparent; border-radius:6px; color: var(--text-2); position:relative; display:inline-flex; align-items:center; justify-content:center; font-size:15px; }
.icon-btn:hover { background: var(--bg-hover); color: var(--text-1); }
.icon-btn .dot { position:absolute; top:4px; right:4px; min-width:16px; height:16px; padding:0 4px; background:var(--error); color:#fff; border-radius:8px; font-size:10px; display:flex; align-items:center; justify-content:center; font-weight:500; }

.user-info { display:flex; align-items:center; gap:8px; padding:4px 8px 4px 4px; border-radius:6px; cursor:pointer; }
.user-info:hover { background: var(--bg-hover); }
.avatar { width:28px; height:28px; border-radius:50%; background: linear-gradient(135deg, #1677ff, #722ed1); color:#fff; display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:600; }
.user-name { font-size:13px; color: var(--text-1); }
.user-role { font-size:11px; color: var(--text-3); margin-left:4px; }

/* ============ Tabs ============ */
.page-tabs { height: var(--tabs-h); background:#fff; display:flex; align-items:end; padding: 0 20px; border-bottom:1px solid var(--border); overflow-x:auto; gap:2px; flex-shrink:0; }
.page-tabs::-webkit-scrollbar { height:4px; }
.tab { display:inline-flex; align-items:center; gap:6px; padding: 6px 12px; border:1px solid var(--border); border-bottom:0; border-radius: 6px 6px 0 0; background:#fafafa; font-size:12px; color: var(--text-2); cursor:pointer; white-space:nowrap; position:relative; top:1px; }
.tab.active { background:#fff; color: var(--primary); border-color: var(--border); }
.tab i.fa-house-chimney { font-size:11px; }
.tab .close { width:14px; height:14px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; font-size:9px; color: var(--text-3); margin-left:4px; }
.tab .close:hover { background:#f0f0f0; color: var(--text-1); }

/* ============ Content ============ */
.content { flex:1; overflow-y:auto; padding: 16px 20px; }
.content::-webkit-scrollbar { width:8px; }
.content::-webkit-scrollbar-thumb { background: #d9d9d9; border-radius:4px; }

/* ============ Card ============ */
.card { background:#fff; border-radius: var(--radius); padding:16px; box-shadow: var(--shadow-1); }
.card.no-pad { padding:0; }
.card-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
.card-title { font-size:15px; font-weight:600; color: var(--text-1); display:flex; align-items:center; gap:8px; }
.card-title .badge-soft { font-size:11px; color: var(--primary); background: var(--primary-bg); padding: 1px 6px; border-radius:4px; font-weight:400; }
.card-extra { font-size:13px; color: var(--text-3); display:flex; align-items:center; gap:12px; }
.card-extra a { color: var(--text-2); }
.card-extra a:hover { color: var(--primary); }

/* Grid */
.grid { display:grid; gap:16px; }
.g-5 { grid-template-columns: repeat(5, 1fr); display:grid; gap:16px; }
.g-4 { grid-template-columns: repeat(4, 1fr); display:grid; gap:16px; }
.g-3 { grid-template-columns: repeat(3, 1fr); display:grid; gap:16px; }
.g-2 { grid-template-columns: repeat(2, 1fr); display:grid; gap:16px; }
.g-3-1 { grid-template-columns: 2fr 1fr; }
.g-1-2 { grid-template-columns: 1fr 2fr; }
.gap-12 { gap:12px; }

@media (max-width: 1200px) {
  .g-4 { grid-template-columns: repeat(2, 1fr); }
  .g-3 { grid-template-columns: repeat(2, 1fr); }
  .g-3-1, .g-1-2 { grid-template-columns: 1fr; }
}

/* ============ Workbench: Welcome ============ */
.welcome {
  background: linear-gradient(135deg, #1677ff 0%, #722ed1 60%, #eb2f96 120%);
  border-radius: var(--radius);
  padding: 20px 24px;
  color:#fff;
  position:relative;
  overflow:hidden;
  margin-bottom:16px;
}
.welcome::after { content:''; position:absolute; right:-40px; bottom:-40px; width:240px; height:240px; border-radius:50%; background:rgba(255,255,255,0.08); }
.welcome::before { content:''; position:absolute; right:80px; top:-50px; width:160px; height:160px; border-radius:50%; background:rgba(255,255,255,0.06); }
.welcome-row { display:flex; align-items:center; gap:16px; position:relative; z-index:1; }
.welcome-avatar { width:56px; height:56px; border-radius:50%; background:rgba(255,255,255,0.2); display:flex; align-items:center; justify-content:center; font-size:22px; font-weight:600; backdrop-filter:blur(10px); }
.welcome-title { font-size:18px; font-weight:600; margin-bottom:4px; }
.welcome-sub { font-size:13px; color: rgba(255,255,255,0.85); }
.welcome-tags { margin-top:6px; display:flex; gap:8px; flex-wrap:wrap; }
.welcome-tag { font-size:11px; padding:2px 8px; background:rgba(255,255,255,0.18); border-radius: 10px; color:#fff; backdrop-filter:blur(10px); }
.welcome-meta { margin-left:auto; text-align:right; position:relative; z-index:1; }
.welcome-meta-row { font-size:12px; color: rgba(255,255,255,0.75); margin-bottom:3px; }
.welcome-meta-row strong { color:#fff; font-weight:600; font-size:14px; }

/* ============ Stat Cards ============ */
.stat-card { background:#fff; border-radius: var(--radius); padding:16px; position:relative; overflow:hidden; }
.stat-label { font-size:13px; color: var(--text-3); display:flex; align-items:center; gap:4px; }
.stat-label i { font-size:11px; color: var(--text-4); }
.stat-value { font-size:26px; font-weight:600; color: var(--text-1); margin: 6px 0 8px; line-height:1.2; }
.stat-value .unit { font-size:13px; color: var(--text-3); font-weight:400; margin-left:4px; }
.stat-foot { font-size:12px; color: var(--text-3); display:flex; justify-content:space-between; align-items:center; padding-top:8px; border-top:1px solid var(--border); }
.stat-foot .delta { color: var(--success); font-weight:500; }
.stat-foot .delta.down { color: var(--error); }
.stat-foot .delta i { margin-right:2px; }
.stat-icon { position:absolute; right:14px; top:14px; width:36px; height:36px; border-radius:8px; display:flex; align-items:center; justify-content:center; font-size:15px; }

/* ============ Buttons ============ */
.btn { display:inline-flex; align-items:center; gap:6px; padding:5px 14px; border-radius:6px; border:1px solid var(--border-2); background:#fff; color: var(--text-1); font-size:13px; transition: all .2s; }
.btn:hover { color: var(--primary); border-color: var(--primary); }
.btn.primary { background: var(--primary); color:#fff; border-color: var(--primary); }
.btn.primary:hover { background: var(--primary-hover); color:#fff; border-color: var(--primary-hover); }
.btn.dashed { border-style: dashed; }
.btn.text { border-color: transparent; }
.btn.danger { color: var(--error); border-color: var(--error); }
.btn.sm { padding: 3px 10px; font-size:12px; }
.btn.lg { padding: 7px 18px; font-size:14px; }
.btn-mini { padding: 2px 10px; font-size:12px; border-radius:4px; border:1px solid var(--border-2); background:#fff; color: var(--text-2); white-space:nowrap; }
.btn-mini.primary { background: var(--primary); color:#fff; border-color: var(--primary); }

/* ============ Tags ============ */
.tag { display:inline-block; padding:1px 8px; font-size:11px; border-radius:4px; line-height:18px; }
.tag.blue { background: var(--primary-bg); color: var(--primary); }
.tag.green { background: var(--success-bg); color: var(--success); }
.tag.orange { background: var(--warning-bg); color: var(--warning); }
.tag.red { background: var(--error-bg); color: var(--error); }
.tag.purple { background: #f9f0ff; color: var(--purple); }
.tag.cyan { background: #e6fffb; color: var(--cyan); }
.tag.gray { background: #fafafa; color: var(--text-2); }
.tag.magenta { background: #fff0f6; color: var(--magenta); }

/* ============ Quick Actions ============ */
.quick-grid { display:grid; grid-template-columns: repeat(8, 1fr); gap:10px; }
.quick-item { display:flex; flex-direction:column; align-items:center; gap:8px; padding: 14px 8px; border-radius:8px; cursor:pointer; transition: all .2s; }
.quick-item:hover { background: var(--bg-hover); transform: translateY(-2px); }
.quick-icon { width:40px; height:40px; border-radius:10px; display:flex; align-items:center; justify-content:center; color:#fff; font-size:16px; }
.quick-label { font-size:12px; color: var(--text-1); }

/* ============ Todo List ============ */
.todo-tabs { display:flex; gap:14px; margin-bottom:10px; border-bottom:1px solid var(--border); }
.todo-tab { font-size:13px; padding:6px 0; color: var(--text-2); cursor:pointer; position:relative; }
.todo-tab.active { color: var(--primary); }
.todo-tab.active::after { content:''; position:absolute; bottom:-1px; left:0; right:0; height:2px; background: var(--primary); }
.todo-tab .badge-num { font-size:11px; background: var(--error); color:#fff; padding:0 5px; border-radius:8px; margin-left:4px; }

.todo-item { display:flex; align-items:center; gap:10px; padding: 10px 0; border-bottom:1px dashed var(--border); }
.todo-item:last-child { border:0; }
.todo-icon { width:32px; height:32px; border-radius:6px; display:flex; align-items:center; justify-content:center; font-size:14px; }
.todo-body { flex:1; min-width:0; }
.todo-title { font-size:13px; color: var(--text-1); margin-bottom:2px; }
.todo-meta { font-size:11px; color: var(--text-3); }

/* ============ Activity Feed ============ */
.feed-item { display:flex; gap:12px; padding: 10px 0; }
.feed-time { width:50px; font-size:11px; color: var(--text-3); padding-top:2px; }
.feed-dot { width:8px; height:8px; border-radius:50%; background: var(--primary); margin-top:6px; flex-shrink:0; position:relative; }
.feed-dot::after { content:''; position:absolute; top:14px; left:3px; width:2px; height:30px; background: var(--border); }
.feed-item:last-child .feed-dot::after { display:none; }
.feed-content { flex:1; font-size:13px; color: var(--text-2); }
.feed-content strong { color: var(--text-1); }

/* ============ Tables ============ */
.tbl-toolbar { display:flex; justify-content:space-between; align-items:center; margin-bottom:14px; gap:10px; flex-wrap:wrap; }
.search-box { display:flex; align-items:center; gap:6px; padding: 5px 10px; background:#fff; border:1px solid var(--border-2); border-radius:6px; min-width:240px; }
.search-box input { border:0; outline:none; flex:1; font-size:13px; background:transparent; }
.search-box i { color: var(--text-3); }

.tbl { width:100%; border-collapse:collapse; background:#fff; }
.tbl thead { background: #fafafa; }
.tbl th { text-align:left; padding: 11px 14px; font-size:12px; color: var(--text-2); font-weight:500; border-bottom:1px solid var(--border); white-space:nowrap; }
.tbl td { padding: 13px 14px; font-size:13px; color: var(--text-1); border-bottom:1px solid var(--border); }
.tbl tbody tr:hover { background: #fafafa; }
.tbl .actions { display:flex; gap:10px; }
.tbl .actions a { color: var(--primary); font-size:13px; }
.tbl .actions a.danger { color: var(--error); }

.member-cell { display:flex; align-items:center; gap:10px; }
.m-avatar { width:32px; height:32px; border-radius:50%; background:linear-gradient(135deg, #1677ff, #722ed1); color:#fff; display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:600; flex-shrink:0; }
.m-name { font-size:13px; color: var(--text-1); }
.m-meta { font-size:11px; color: var(--text-3); }

.pagination { display:flex; justify-content:flex-end; align-items:center; gap:6px; padding:14px; }
.pagination .pg-info { color: var(--text-3); margin-right:auto; font-size:13px; }
.pg-btn { width:30px; height:30px; border-radius:6px; border:1px solid var(--border-2); background:#fff; color: var(--text-2); display:inline-flex; align-items:center; justify-content:center; font-size:12px; cursor:pointer; }
.pg-btn:hover { color: var(--primary); border-color: var(--primary); }
.pg-btn.active { background: var(--primary); color:#fff; border-color: var(--primary); }

/* ============ Filter pills ============ */
.filter-row { display:flex; gap:14px; align-items:center; flex-wrap:wrap; margin-bottom:14px; padding: 14px; background:#fff; border-radius: var(--radius); }
.filter-row .label { font-size:13px; color: var(--text-2); margin-right:4px; }
.pill { padding: 4px 12px; border-radius:14px; font-size:12px; background:#fafafa; color: var(--text-2); cursor:pointer; border:1px solid transparent; }
.pill.active { background: var(--primary-bg); color: var(--primary); border-color: var(--primary); }
.pill:hover { color: var(--primary); }

.input, .select, textarea.input {
  padding: 5px 10px; border:1px solid var(--border-2); border-radius:6px; font-size:13px; outline:none; background:#fff; min-width:120px; font-family:inherit;
}
.input:focus, .select:focus { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-bg); }

/* ============ Member 360 ============ */
.profile-head { background:#fff; padding:20px; border-radius: var(--radius); display:flex; align-items:center; gap:20px; margin-bottom:16px; }
.profile-avatar { width:80px; height:80px; border-radius:50%; background:linear-gradient(135deg, #1677ff, #eb2f96); color:#fff; display:flex; align-items:center; justify-content:center; font-size:28px; font-weight:600; }
.profile-info { flex:1; }
.profile-name { font-size:20px; font-weight:600; margin-bottom:6px; }
.profile-name .tier { font-size:11px; padding:2px 8px; background: linear-gradient(90deg, #faad14, #fa8c16); color:#fff; border-radius:10px; margin-left:8px; font-weight:500; vertical-align:middle; }
.profile-meta { display:flex; gap:24px; color: var(--text-3); font-size:13px; }
.profile-meta div { display:flex; align-items:center; gap:6px; }
.profile-tags { margin-top:10px; display:flex; gap:6px; flex-wrap:wrap; }

.profile-stats { display:flex; gap:24px; padding-left:24px; border-left:1px dashed var(--border); }
.profile-stat-val { font-size:22px; font-weight:600; color: var(--text-1); }
.profile-stat-lbl { font-size:12px; color: var(--text-3); margin-top:2px; }

/* Timeline */
.timeline { padding-left:14px; }
.tl-item { padding: 10px 0 10px 22px; border-left:2px solid var(--border); position:relative; }
.tl-item::before { content:''; width:10px; height:10px; border-radius:50%; background: var(--primary); position:absolute; left:-6px; top:14px; border:2px solid #fff; box-shadow: 0 0 0 1px var(--primary); }
.tl-item.green::before { background: var(--success); box-shadow: 0 0 0 1px var(--success); }
.tl-item.orange::before { background: var(--warning); box-shadow: 0 0 0 1px var(--warning); }
.tl-item.red::before { background: var(--error); box-shadow: 0 0 0 1px var(--error); }
.tl-title { font-size:13px; color: var(--text-1); font-weight:500; }
.tl-meta { font-size:11px; color: var(--text-3); margin-top:2px; }
.tl-content { font-size:12px; color: var(--text-2); margin-top:4px; }

/* Sub-tabs */
.sub-tabs { display:flex; gap:18px; border-bottom:1px solid var(--border); margin-bottom:16px; }
.sub-tabs .t { padding: 8px 0; font-size:14px; color: var(--text-2); cursor:pointer; position:relative; }
.sub-tabs .t.active { color: var(--primary); }
.sub-tabs .t.active::after { content:''; position:absolute; bottom:-1px; left:0; right:0; height:2px; background: var(--primary); }

/* Coupons */
.coupon-card { display:flex; background:#fff; border-radius:8px; overflow:hidden; border:1px solid var(--border); position:relative; transition: all .2s; }
.coupon-card:hover { box-shadow: var(--shadow-2); border-color: var(--primary); }
.coupon-left { width:90px; background: linear-gradient(135deg, #ff4d4f, #fa541c); color:#fff; display:flex; flex-direction:column; align-items:center; justify-content:center; padding:14px; position:relative; }
.coupon-left::after { content:''; position:absolute; right:-5px; top:0; bottom:0; width:10px; background: repeating-linear-gradient(180deg, transparent 0, transparent 4px, #fff 4px, #fff 8px); }
.coupon-amount { font-size:22px; font-weight:600; }
.coupon-amount span { font-size:11px; font-weight:400; }
.coupon-cond { font-size:11px; opacity:.9; margin-top:2px; }
.coupon-right { flex:1; padding:14px 18px; }
.coupon-name { font-size:14px; font-weight:500; }
.coupon-desc { font-size:11px; color: var(--text-3); margin-top:4px; }
.coupon-tags { margin-top:6px; display:flex; gap:4px; }

/* Funnel */
.funnel-step { display:flex; align-items:center; gap:12px; padding: 10px 0; }
.funnel-bar { flex:1; height:34px; background: linear-gradient(90deg, #1677ff, #4096ff); border-radius:4px; color:#fff; display:flex; align-items:center; padding:0 14px; font-size:13px; }
.funnel-meta { width:180px; text-align:right; font-size:13px; }
.funnel-meta .num { font-weight:600; font-size:14px; }
.funnel-meta .rate { color: var(--text-3); font-size:11px; }

/* Process / Canvas */
.canvas-wrap { background:#fafafa; border-radius:8px; padding:24px; min-height:480px; position:relative; background-image: radial-gradient(#d9d9d9 1px, transparent 1px); background-size: 20px 20px; }
.node { position:absolute; background:#fff; border:2px solid var(--border-2); border-radius:8px; padding:10px 14px; min-width:160px; box-shadow: var(--shadow-1); cursor:move; font-size:13px; }
.node.start { border-color: var(--success); background: var(--success-bg); }
.node.event { border-color: var(--primary); }
.node.condition { border-color: var(--warning); background: var(--warning-bg); transform: rotate(0deg); }
.node.action { border-color: var(--purple); }
.node.delay { border-color: var(--text-3); border-style: dashed; }
.node.end { border-color: var(--error); background: var(--error-bg); }
.node-title { font-weight:500; display:flex; align-items:center; gap:6px; margin-bottom:4px; }
.node-meta { font-size:11px; color: var(--text-3); }

/* Drawer */
.drawer { display:none; position:fixed; inset:0; z-index:1000; }
.drawer.open { display:block; }
.drawer-mask { position:absolute; inset:0; background: rgba(0,0,0,0.4); animation: fadeIn .2s; }
.drawer-panel { position:absolute; right:0; top:0; bottom:0; width:420px; background:#fff; display:flex; flex-direction:column; animation: slideIn .25s; }
@keyframes fadeIn { from{opacity:0;} to{opacity:1;} }
@keyframes slideIn { from{transform: translateX(100%);} to{transform: translateX(0);} }
.drawer-head { padding:14px 18px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid var(--border); font-weight:600; }
.drawer-tabs { display:flex; gap:18px; padding: 8px 18px 0; border-bottom:1px solid var(--border); }
.dtab { font-size:13px; padding:8px 0; color: var(--text-2); cursor:pointer; }
.dtab.active { color: var(--primary); border-bottom:2px solid var(--primary); }
.drawer-body { flex:1; overflow-y:auto; padding: 8px 18px; }

.msg-item { display:flex; align-items:center; gap:10px; padding: 12px 0; border-bottom:1px solid var(--border); }
.msg-icon { width:36px; height:36px; border-radius:8px; display:flex; align-items:center; justify-content:center; color:#fff; font-size:14px; flex-shrink:0; }
.msg-icon.orange { background: var(--orange); }
.msg-icon.blue { background: var(--primary); }
.msg-icon.red { background: var(--error); }
.msg-icon.green { background: var(--success); }
.msg-icon.purple { background: var(--purple); }
.msg-body { flex:1; min-width:0; }
.msg-title { font-size:13px; color: var(--text-1); margin-bottom:2px; }
.msg-meta { font-size:11px; color: var(--text-3); }

/* Status dots */
.status-dot { display:inline-block; width:6px; height:6px; border-radius:50%; margin-right:6px; vertical-align:middle; }
.status-dot.green { background: var(--success); box-shadow: 0 0 0 2px var(--success-bg); }
.status-dot.orange { background: var(--warning); box-shadow: 0 0 0 2px var(--warning-bg); }
.status-dot.red { background: var(--error); box-shadow: 0 0 0 2px var(--error-bg); }
.status-dot.gray { background: var(--text-4); }

/* Page header */
.page-header { background:#fff; padding: 16px 20px; margin: -16px -20px 16px; border-bottom:1px solid var(--border); display:flex; justify-content:space-between; align-items:center; }
.page-title { font-size:18px; font-weight:600; margin:0; }
.page-desc { font-size:12px; color: var(--text-3); margin-top:2px; }
.page-actions { display:flex; gap:8px; }

/* Charts containers */
.chart { width:100%; height:280px; }
.chart-sm { width:100%; height:200px; }
.chart-lg { width:100%; height:360px; }

/* Progress */
.progress { height:6px; background:#f0f0f0; border-radius:4px; overflow:hidden; }
.progress .bar { height:100%; background: var(--primary); border-radius:4px; transition: width .3s; }
.progress.success .bar { background: var(--success); }
.progress.warning .bar { background: var(--warning); }

/* Member tier card */
.tier-card { padding:16px; border-radius:8px; color:#fff; position:relative; overflow:hidden; }
.tier-card.bronze { background: linear-gradient(135deg, #b87333, #8b5a2b); }
.tier-card.silver { background: linear-gradient(135deg, #8e9eab, #5a6a7a); }
.tier-card.gold { background: linear-gradient(135deg, #faad14, #d48806); }
.tier-card.platinum { background: linear-gradient(135deg, #722ed1, #531dab); }
.tier-card.diamond { background: linear-gradient(135deg, #1677ff, #0958d9); }
.tier-icon { font-size:18px; margin-bottom:6px; opacity:.9; }
.tier-name { font-size:14px; font-weight:500; }
.tier-count { font-size:22px; font-weight:600; margin-top:8px; }
.tier-pct { font-size:12px; opacity:.85; margin-top:2px; }

/* Map placeholder */
.map-box { position:relative; height:300px; background: linear-gradient(135deg, #e6f4ff 0%, #f9f0ff 100%); border-radius:8px; overflow:hidden; }
.map-pin { position:absolute; width:30px; height:30px; border-radius:50%; background: var(--primary); color:#fff; display:flex; align-items:center; justify-content:center; font-size:11px; font-weight:600; cursor:pointer; transition: all .2s; box-shadow: 0 4px 12px rgba(22,119,255,0.4); }
.map-pin:hover { transform: scale(1.2) translate(-42%, -42%); z-index:10; }
.map-pin::after { content:''; position:absolute; bottom:-4px; left:50%; transform: translateX(-50%); border:5px solid transparent; border-top-color: var(--primary); }
.map-pin.hot { background: var(--error); box-shadow: 0 4px 12px rgba(255,77,79,0.4); animation: pulse 1.5s infinite; }
.map-pin.hot::after { border-top-color: var(--error); }
@keyframes pulse { 0%{ box-shadow: 0 4px 12px rgba(255,77,79,0.4); } 50%{ box-shadow: 0 4px 24px rgba(255,77,79,0.7); } 100%{ box-shadow: 0 4px 12px rgba(255,77,79,0.4); } }

/* Loyalty ladder */
.ladder { display:flex; align-items:end; gap:8px; height:120px; padding: 14px 0; }
.lstep { flex:1; display:flex; flex-direction:column; align-items:center; justify-content:end; }
.lbar { width:100%; border-radius: 4px 4px 0 0; transition: height .3s; }
.lname { font-size:12px; color: var(--text-2); margin-top:6px; }
.lval { font-size:11px; color: var(--text-3); margin-top:2px; }

/* Mall product card */
.mall-card { background:#fff; border-radius:8px; overflow:hidden; border:1px solid var(--border); transition: all .2s; }
.mall-card:hover { box-shadow: var(--shadow-2); transform: translateY(-4px); }
.mall-img { height:160px; background: linear-gradient(135deg, #e6f4ff, #f9f0ff); display:flex; align-items:center; justify-content:center; font-size:48px; color: rgba(0,0,0,0.2); }
.mall-info { padding: 10px 12px; }
.mall-name { font-size:13px; color: var(--text-1); line-height:1.4; height:36px; overflow:hidden; }
.mall-price { display:flex; justify-content:space-between; align-items:center; margin-top:8px; }
.mall-points { color: var(--error); font-weight:600; }
.mall-points span { font-size:11px; font-weight:400; }
.mall-stock { font-size:11px; color: var(--text-3); }

/* Modal */
.modal { display:none; position:fixed; inset:0; z-index:1000; align-items:center; justify-content:center; }
.modal.open { display:flex; }
.modal-mask { position:absolute; inset:0; background: rgba(0,0,0,0.45); }
.modal-box { background:#fff; border-radius:8px; max-width:90vw; width:520px; max-height:85vh; display:flex; flex-direction:column; position:relative; z-index:1; box-shadow: var(--shadow-2); animation: zoomIn .2s; }
@keyframes zoomIn { from{ transform: scale(0.9); opacity:0; } to{ transform: scale(1); opacity:1; } }
.modal-head { padding:14px 18px; border-bottom:1px solid var(--border); font-weight:600; display:flex; justify-content:space-between; align-items:center; }
.modal-body { padding:18px; flex:1; overflow-y:auto; }
.modal-foot { padding:12px 18px; border-top:1px solid var(--border); display:flex; justify-content:flex-end; gap:8px; }

/* Form */
.form-row { margin-bottom:14px; }
.form-label { font-size:13px; color: var(--text-1); margin-bottom:6px; display:block; }
.form-label .req { color: var(--error); margin-right:2px; }
.form-row .input, .form-row .select { width:100%; }
.form-grid { display:grid; grid-template-columns: 1fr 1fr; gap:12px; }

/* Empty */
.empty { text-align:center; padding: 40px; color: var(--text-3); font-size:13px; }
.empty i { font-size:40px; color: var(--text-4); margin-bottom:12px; display:block; }

/* Steps */
.steps { display:flex; align-items:center; gap:0; margin: 12px 0 18px; }
.step { flex:1; display:flex; align-items:center; gap:8px; }
.step-num { width:24px; height:24px; border-radius:50%; background: var(--border); color: var(--text-3); font-size:12px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.step.done .step-num { background: var(--success); color:#fff; }
.step.active .step-num { background: var(--primary); color:#fff; }
.step-label { font-size:13px; color: var(--text-2); }
.step.active .step-label { color: var(--text-1); font-weight:500; }
.step-line { flex:1; height:1px; background: var(--border); }
.step.done + .step .step-line, .step.done .step-line { background: var(--success); }

/* utility */
.flex { display:flex; }
.flex-between { display:flex; justify-content:space-between; align-items:center; }
.mt-8 { margin-top:8px; } .mt-12 { margin-top:12px; } .mt-16 { margin-top:16px; }
.mb-8 { margin-bottom:8px; } .mb-12 { margin-bottom:12px; } .mb-16 { margin-bottom:16px; }
.text-c { text-align:center; }
.text-r { text-align:right; }
.gap-8 { gap:8px; }
.fz-12 { font-size:12px; } .fz-13 { font-size:13px; }
.c-3 { color: var(--text-3); } .c-2 { color: var(--text-2); }
.bold { font-weight:600; }

/* ============ Agent / Coworker Workbench ============ */
.cowork-layout { display:flex; height:calc(100vh - var(--header-h) - var(--tabs-h)); overflow:hidden; }
.cowork-main { flex:1; overflow-y:auto; padding:16px 20px; min-width:0; transition: all .3s; }
.cowork-main.full { margin-right:0; }
.cowork-main.with-copilot { margin-right:380px; }

.copilot-panel { width:380px; position:fixed; right:0; top:calc(var(--header-h) + var(--tabs-h)); bottom:0; background:#fff; border-left:1px solid var(--border); display:flex; flex-direction:column; z-index:50; transition: transform .3s, opacity .3s; }
.copilot-panel.hidden { transform:translateX(100%); opacity:0; pointer-events:none; }

.copilot-head { padding:12px 16px; border-bottom:1px solid var(--border); display:flex; align-items:center; justify-content:space-between; background:linear-gradient(135deg, #e6f4ff 0%, #f9f0ff 100%); }
.copilot-title { font-weight:600; font-size:14px; display:flex; align-items:center; gap:8px; }
.copilot-title .pulse { width:8px; height:8px; border-radius:50%; background:var(--success); animation: pulse-dot 2s infinite; }
@keyframes pulse-dot { 0%,100%{opacity:1;transform:scale(1);} 50%{opacity:.5;transform:scale(1.3);} }

.copilot-modes { display:flex; gap:2px; padding:8px 16px; border-bottom:1px solid var(--border); }
.copilot-mode { padding:5px 12px; font-size:12px; border-radius:14px; cursor:pointer; color:var(--text-2); transition:all .2s; }
.copilot-mode:hover { background:var(--bg-hover); }
.copilot-mode.active { background:var(--primary); color:#fff; }

.copilot-body { flex:1; overflow-y:auto; padding:16px; display:flex; flex-direction:column; gap:12px; }

/* AI Chat bubbles */
.ai-msg { display:flex; gap:10px; }
.ai-avatar { width:28px; height:28px; border-radius:8px; background:linear-gradient(135deg, #1677ff, #722ed1); color:#fff; display:flex; align-items:center; justify-content:center; font-size:12px; flex-shrink:0; }
.ai-bubble { background:#f5f7fa; border-radius:0 10px 10px 10px; padding:10px 14px; font-size:13px; line-height:1.6; max-width:90%; color:var(--text-1); }
.ai-bubble strong { color:var(--primary); }

.user-msg { display:flex; gap:10px; justify-content:flex-end; }
.user-bubble { background:var(--primary); color:#fff; border-radius:10px 0 10px 10px; padding:10px 14px; font-size:13px; max-width:80%; }

/* Agent plan steps */
.agent-plan { background:#fafafa; border-radius:8px; padding:12px; }
.agent-plan-title { font-size:12px; color:var(--text-3); font-weight:500; margin-bottom:8px; display:flex; align-items:center; gap:6px; }
.plan-step { display:flex; align-items:flex-start; gap:8px; padding:6px 0; font-size:13px; }
.plan-dot { width:20px; height:20px; border-radius:50%; border:2px solid var(--border-2); display:flex; align-items:center; justify-content:center; font-size:10px; flex-shrink:0; margin-top:1px; }
.plan-step.done .plan-dot { background:var(--success); border-color:var(--success); color:#fff; }
.plan-step.active .plan-dot { border-color:var(--primary); color:var(--primary); animation: pulse-dot 2s infinite; }
.plan-step.pending .plan-dot { border-color:var(--border-2); color:var(--text-4); }
.plan-step-label { flex:1; }
.plan-step-meta { font-size:11px; color:var(--text-3); margin-top:2px; }

/* Proactive suggestion cards */
.suggest-card { background:#fff; border:1px solid var(--border); border-radius:8px; padding:12px; transition:all .2s; cursor:pointer; }
.suggest-card:hover { border-color:var(--primary); box-shadow:var(--shadow-2); }
.suggest-card-head { display:flex; align-items:center; gap:8px; margin-bottom:6px; }
.suggest-icon { width:28px; height:28px; border-radius:6px; display:flex; align-items:center; justify-content:center; font-size:13px; flex-shrink:0; }
.suggest-card-title { font-size:13px; font-weight:500; flex:1; }
.suggest-card-desc { font-size:12px; color:var(--text-2); line-height:1.5; }
.suggest-card-foot { display:flex; gap:8px; margin-top:8px; justify-content:flex-end; }
.suggest-card.evidence { font-size:11px; color:var(--text-3); margin-top:6px; padding-top:6px; border-top:1px dashed var(--border); }

/* Copilot input */
.copilot-input-wrap { padding:12px 16px; border-top:1px solid var(--border); background:#fff; }
.copilot-input-row { display:flex; gap:8px; align-items:flex-end; }
.copilot-input { flex:1; border:1px solid var(--border-2); border-radius:10px; padding:10px 14px; font-size:13px; outline:none; resize:none; min-height:40px; max-height:120px; font-family:inherit; }
.copilot-input:focus { border-color:var(--primary); box-shadow:0 0 0 2px rgba(22,119,255,0.1); }
.copilot-send { width:36px; height:36px; border-radius:50%; background:var(--primary); color:#fff; border:0; display:flex; align-items:center; justify-content:center; cursor:pointer; font-size:14px; flex-shrink:0; }
.copilot-send:hover { background:var(--primary-hover); }
.copilot-hints { display:flex; gap:6px; margin-top:8px; flex-wrap:wrap; }
.copilot-hint { font-size:11px; padding:3px 10px; background:var(--bg-hover); border-radius:10px; color:var(--text-2); cursor:pointer; }
.copilot-hint:hover { color:var(--primary); background:var(--primary-bg); }

/* Toggle copilot button */
.copilot-toggle { position:fixed; right:16px; bottom:16px; width:44px; height:44px; border-radius:50%; background:linear-gradient(135deg, #1677ff, #722ed1); color:#fff; border:0; font-size:18px; cursor:pointer; box-shadow:0 4px 16px rgba(22,119,255,0.4); z-index:60; transition:all .2s; }
.copilot-toggle:hover { transform:scale(1.1); }
.copilot-toggle.active { display:none; }

/* Command bar (bottom) */
.cmd-bar { background:#fff; border-top:1px solid var(--border); padding:8px 20px; display:flex; align-items:center; gap:10px; flex-shrink:0; }
.cmd-bar-icon { color:var(--text-3); font-size:14px; }
.cmd-bar-input { flex:1; border:0; outline:none; font-size:13px; color:var(--text-1); background:transparent; }
.cmd-bar-input::placeholder { color:var(--text-4); }
.cmd-bar-kbd { font-size:11px; color:var(--text-3); background:#fafafa; border:1px solid var(--border); padding:2px 8px; border-radius:4px; }

/* Typing indicator */
.typing-indicator { display:flex; gap:4px; padding:4px 0; }
.typing-indicator span { width:6px; height:6px; border-radius:50%; background:var(--text-3); animation: typing-bounce .6s infinite; }
.typing-indicator span:nth-child(2) { animation-delay:.15s; }
.typing-indicator span:nth-child(3) { animation-delay:.3s; }
@keyframes typing-bounce { 0%,100%{transform:translateY(0);} 50%{transform:translateY(-6px);} }

/* Confidence indicator */
.confidence { display:inline-flex; align-items:center; gap:4px; font-size:11px; padding:2px 8px; border-radius:10px; }
.confidence.high { background:#f6ffed; color:var(--success); }
.confidence.low { background:#fffbe6; color:var(--warning); }
