    :root {
      /* ===== 设计系统 v1.0 ===== */

      /* -- 品牌色(暖橙) -- */
      --c-brand: #ea6d2e;           /* 主品牌橙: 按钮/标题/强调 */
      --c-brand-dark: #d45f1f;      /* 深橙: 悬停/按下 */
      --c-brand-light: #fef3e8;     /* 浅橙底: 标签背景/卡片底 */
      --c-brand-bg: #fff7ed;        /* 最浅橙: 大面积背景 */

      /* -- 数据色 -- */
      --c-data: #ea6d2e;            /* 数据橙: 业绩/收入数字 */
      --c-data-light: #fff7ed;      /* 数据橙底 */
      --c-flow: #1a8a3f;            /* 数据绿: 流量/耗卡数字 */
      --c-flow-light: #e8f5e9;      /* 数据绿底 */
      --c-target: #1a8a3f;          /* 达标绿 */

      /* -- 语义色 -- */
      --c-success: #1a8a3f;         /* 成功 */
      --c-success-light: #e8f5e9;
      --c-danger: #dc2626;          /* 危险/负向 */
      --c-danger-light: #fee2e2;
      --c-warning: #d97706;         /* 警告/注意 */
      --c-warning-light: #fef3c7;
      --c-info: #2563d9;            /* 信息/链接 */
      --c-info-light: #dbeafe;

      /* -- 灰阶(6级) -- */
      --c-ink: #1a1a1a;             /* 最深: 标题数字 */
      --c-text: #333;               /* 主文本 */
      --c-text-2: #666;             /* 次要文本 */
      --c-text-3: #999;             /* 辅助文本 */
      --c-text-4: #ccc;             /* 占位/禁用 */
      --c-border: #eee;             /* 分割线/边框 */
      --c-fill: #f5f5f5;            /* 浅填充 */
      --c-bg: #f7f8fa;              /* 页面背景 */
      --c-card: #fff;               /* 卡片白底 */

      /* -- 字号(10~24px) -- */
      --fs-2xs: 10px;
      --fs-xs: 11px;
      --fs-sm: 12px;
      --fs-base: 13px;             /* 默认正文字号 */
      --fs-md: 14px;
      --fs-lg: 15px;
      --fs-xl: 16px;
      --fs-2xl: 18px;
      --fs-3xl: 20px;
      --fs-4xl: 24px;

      /* -- 圆角 -- */
      --r-xs: 4px;                 /* 小标签 */
      --r-sm: 6px;                 /* 输入框/小按钮 */
      --r-md: 8px;                 /* 按钮/小卡片 */
      --r-lg: 10px;                /* 卡片(默认) */
      --r-xl: 12px;                /* 大卡片 */
      --r-2xl: 16px;               /* 特殊容器 */
      --r-full: 9999px;            /* 胶囊/圆形 */

      /* -- 间距(4的倍数+14) -- */
      --sp-1: 4px;
      --sp-2: 8px;
      --sp-3: 12px;
      --sp-4: 14px;
      --sp-5: 16px;
      --sp-6: 20px;
      --sp-8: 24px;

      /* -- 阴影 -- */
      --shadow-card: 0 1px 3px rgba(0,0,0,0.05);   /* 卡片 */
      --shadow-pop: 0 2px 12px rgba(0,0,0,0.1);    /* 弹出/悬浮 */

      /* -- 布局 -- */
      --tab-h: 56px;               /* 底部Tab高度 */
      --header-h: 48px;            /* 顶部Header高度 */
      --safe-bottom: env(safe-area-inset-bottom, 0px);

      /* ===== 向后兼容(旧变量→新系统映射) ===== */
      --primary: var(--c-brand);
      --primary-dark: var(--c-brand-dark);
      --primary-light: var(--c-brand-light);
      --g1: var(--c-text); --g2: var(--c-text-2); --g3: var(--c-text-3); --g4: var(--c-text-4); --g5: var(--c-border);
      --bg: var(--c-bg);
      --radius: var(--r-lg);
    }
    * { margin: 0; padding: 0; box-sizing: border-box; }

    /* ===== 按钮组件 v1.0 ===== */
    .btn { display: inline-flex; align-items: center; justify-content: center; border: none; cursor: pointer; font-family: inherit; -webkit-appearance: none; transition: opacity .15s, background .15s; }
    .btn:active { opacity: .82; }
    .btn:disabled { opacity: .5; cursor: not-allowed; }

    /* 变体 */
    .btn-primary { background: var(--c-brand); color: #fff; font-weight: 500; }
    .btn-primary:active { background: var(--c-brand-dark); }
    .btn-outline { background: var(--c-card); color: var(--c-brand); border: 1px solid var(--c-brand); font-weight: 600; }
    .btn-ghost { background: none; color: var(--c-text-2); border: none; }
    .btn-danger { background: var(--c-danger); color: #fff; }
    .btn-danger-outline { background: var(--c-card); color: var(--c-danger); border: 1px solid var(--c-border); font-weight: 600; }
    .btn-success { background: var(--c-success); color: #fff; }
    .btn-neutral { background: var(--c-fill); color: var(--c-text-3); border: none; }

    /* 尺寸 */
    .btn-sm { height: 28px; padding: 0 10px; font-size: var(--fs-sm); border-radius: var(--r-sm); }
    .btn-md { height: 40px; padding: 0 16px; font-size: var(--fs-md); border-radius: var(--r-md); }
    .btn-lg { height: 46px; padding: 0 20px; font-size: var(--fs-lg); border-radius: var(--r-lg); font-weight: 500; }

    /* 宽度 */
    .btn-block { width: 100%; }


    /* ===== 门店排名卡片子元素 v1.0 ===== */
    .card-store { padding: 0; }
    .store-card { margin-bottom: var(--sp-2); overflow: hidden; }
    .store-head { display: flex; justify-content: space-between; align-items: center; padding: 6px 12px; cursor: pointer; }
    .store-head-left { display: flex; align-items: center; gap: var(--sp-2); min-width: 0; flex: 1; }
    .store-rank { width: 22px; height: 22px; border-radius: var(--r-full); display: flex; align-items: center; justify-content: center; font-size: var(--fs-xs); font-weight: 700; flex-shrink: 0; }
    .store-rank.top { background: var(--c-brand); color: #fff; }
    .store-rank.rest { background: var(--c-fill); color: var(--c-text-3); }
    .store-name { font-size: var(--fs-base); font-weight: 600; color: var(--c-text); }
    .store-sub { font-size: var(--fs-xs); color: var(--c-text-3); margin-top: 2px; }
    .store-head-right { display: flex; align-items: center; gap: var(--sp-2); flex-shrink: 0; }
    .store-value { font-size: var(--fs-xl); font-weight: 700; }
    .store-progress-wrap { padding: 0 12px 6px; }
    .store-expand { border-top: 1px solid var(--c-border); padding: var(--sp-2) 12px; }
    .store-arrow { width: 14px; height: 14px; fill: var(--c-text-3); transition: transform .2s; flex-shrink: 0; }

    /* ===== 卡片组件 v1.0 ===== */
    .card { background: var(--c-card); border: 1px solid var(--c-border); border-radius: var(--r-xl); padding: var(--sp-5); margin-bottom: var(--sp-3); }
    .card-tight { padding: var(--sp-3); margin-bottom: var(--sp-2); }
    .card-flat { border: none; border-radius: var(--r-lg); }
    .card-shadow { border: none; box-shadow: var(--shadow-card); }
    .card-body { padding: var(--sp-3) var(--sp-4); }
    .card-row { display: flex; align-items: center; padding: var(--sp-4) var(--sp-5); border-bottom: 1px solid var(--c-border); }
    .card-row:last-child { border-bottom: none; }


    /* ===== Tab切换 v1.0 ===== */
    .tabs { display: flex; gap: 0; margin-bottom: var(--sp-4); background: var(--c-card); border-radius: var(--r-md); border: 1px solid var(--c-border); overflow: hidden; }
    .tabs .tab-item { flex: 1; height: 36px; border: none; background: none; font-size: var(--fs-base); color: var(--c-text-3); cursor: pointer; -webkit-appearance: none; transition: all .15s; }
    .tabs .tab-item.active { background: var(--c-brand); color: #fff; }
    .tabs-bottom { display: flex; justify-content: space-around; align-items: center; height: var(--tab-h); background: var(--c-card); border-top: 1px solid var(--c-border); flex-shrink: 0; }
    .tabs-bottom .tab-item { display: flex; flex-direction: column; align-items: center; font-size: var(--fs-2xs); color: var(--c-text-3); cursor: pointer; background: none; border: none; min-width: 56px; height: 100%; justify-content: center; }
    .tabs-bottom .tab-item.active { color: var(--c-brand-dark); }

    /* ===== 列表项 v1.0 ===== */
    .list-row { display: flex; align-items: center; padding: var(--sp-4) var(--sp-5); border-bottom: 1px solid var(--c-border); }
    .list-row:last-child { border-bottom: none; }
    .list-row:active { background: var(--c-bg); }
    .list-row .lr-title { flex: 1; min-width: 0; font-size: var(--fs-md); color: var(--c-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .list-row .lr-sub { font-size: var(--fs-sm); color: var(--c-text-3); margin-top: 2px; }
    .list-row .lr-value { font-size: var(--fs-md); font-weight: 600; color: var(--c-ink); flex-shrink: 0; }
    .list-row .lr-arrow { color: var(--c-text-4); font-size: var(--fs-2xl); flex-shrink: 0; margin-left: var(--sp-1); }

    /* ===== 数据网格 v1.0 ===== */
    .data-grid { display: grid; gap: var(--sp-2); margin-bottom: var(--sp-4); }
    .data-grid-2 { grid-template-columns: 1fr 1fr; }
    .data-grid-3 { grid-template-columns: 1fr 1fr 1fr; }
    .data-grid-4 { grid-template-columns: repeat(4, 1fr); }
    .data-stat { text-align: center; padding: var(--sp-3) var(--sp-2); }
    .data-stat .ds-value { font-size: var(--fs-4xl); font-weight: 800; color: var(--c-ink); }
    .data-stat .ds-value.brand { color: var(--c-brand); }
    .data-stat .ds-value.data { color: var(--c-data); }
    .data-stat .ds-value.flow { color: var(--c-flow); }
    .data-stat .ds-value.success { color: var(--c-target); }
    .data-stat .ds-value.danger { color: var(--c-danger); }
    .data-stat .ds-value.warning { color: var(--c-warning); }
    .data-stat .ds-value.info { color: var(--c-info); }
    .data-stat .ds-label { font-size: var(--fs-2xs); color: var(--c-text-3); margin-top: 1px; }

    /* ===== 表格 v1.0 ===== */
    .data-table { width: 100%; border-collapse: collapse; font-size: var(--fs-base); }
    .data-table th { font-size: var(--fs-sm); font-weight: 600; color: var(--c-text-3); text-align: center; padding: var(--sp-2) var(--sp-1); border-bottom: 1px solid var(--c-border); }
    .data-table td { padding: var(--sp-2) var(--sp-1); border-bottom: 1px solid var(--c-border); text-align: center; color: var(--c-text); }
    .data-table tr:last-child td { border-bottom: none; }

    /* ===== 输入框 v1.0 ===== */
    .input { width: 100%; height: 40px; border: 1px solid var(--c-border); border-radius: var(--r-md); padding: 0 var(--sp-3); font-size: var(--fs-md); color: var(--c-text); background: var(--c-card); outline: none; -webkit-appearance: none; box-sizing: border-box; }
    .input:focus { border-color: var(--c-brand); background: var(--c-card); }
    .input-lg { height: 46px; font-size: var(--fs-lg); }
    .input-sm { height: 34px; font-size: var(--fs-base); }
    .input::placeholder { color: var(--c-text-4); }
    textarea.input { height: auto; padding: var(--sp-2) var(--sp-3); resize: vertical; }

    /* ===== 弹窗 v1.0 ===== */
    .overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,.45); z-index: 1000; display: flex; align-items: center; justify-content: center; }
    .overlay-bottom { align-items: flex-end; }
    .sheet { background: var(--c-card); border-radius: var(--r-2xl) var(--r-2xl) 0 0; width: 100%; max-width: 750px; max-height: 85vh; overflow-y: auto; padding: var(--sp-6) var(--sp-5); padding-bottom: calc(var(--sp-6) + var(--safe-bottom)); }
    .dialog { background: var(--c-card); border-radius: var(--r-xl); width: 100%; max-width: 320px; overflow: hidden; }
    .dialog .dlg-title { font-size: var(--fs-xl); font-weight: 600; text-align: center; padding: var(--sp-6) var(--sp-5) var(--sp-2); }
    .dialog .dlg-content { font-size: var(--fs-md); color: var(--c-text-2); text-align: center; padding: var(--sp-2) var(--sp-5) var(--sp-5); }
    .dialog .dlg-actions { display: flex; border-top: 1px solid var(--c-border); }

    /* ===== 进度条 v1.0 ===== */
    .progress { width: 100%; height: 6px; background: var(--c-fill); border-radius: var(--r-full); overflow: hidden; }
    .progress-fill { height: 100%; border-radius: var(--r-full); transition: width .6s ease; }
    .progress-fill.brand { background: var(--c-brand); }
    .progress-fill.data { background: var(--c-data); }
    .progress-fill.flow { background: var(--c-flow); }
    .progress-fill.target { background: var(--c-target); }
    .progress-fill.danger { background: var(--c-danger); }
    .progress-thin { height: 3px; }
    .progress-thick { height: 8px; }

    /* ===== 图表容器 v1.0 ===== */
    .chart-box { width: 100%; background: var(--c-card); border-radius: var(--r-xl); border: 1px solid var(--c-border); padding: var(--sp-5); margin-bottom: var(--sp-3); }
    .chart-box canvas { width: 100%; display: block; }

    /* ===== 加载/空状态 v1.0 ===== */
    .state-empty { text-align: center; padding: 60px var(--sp-6); color: var(--c-text-3); }
    .state-empty .se-icon { width: 48px; height: 48px; margin: 0 auto var(--sp-2); }
    .state-empty .se-icon svg { width: 48px; height: 48px; stroke: var(--c-text-4); fill: none; stroke-width: 1.2; }
    .state-empty .se-text { font-size: var(--fs-md); }
    .state-loading { text-align: center; padding: 60px var(--sp-5); }
    .state-loading .sl-text { color: var(--c-text-3); font-size: var(--fs-base); margin-top: var(--sp-1); }

    /* ===== 头部/抬头组件 v1.0 ===== */
    /* 导航栏 */
    .nav-bar { flex-shrink: 0; background: var(--c-card); border-bottom: 1px solid var(--c-border); display: flex; align-items: center; padding: 0 var(--sp-3); position: relative; }
    .nav-bar-lg { height: var(--header-h); }
    .nav-bar-md { height: 46px; }
    .nav-bar .nav-back { background: none; border: none; cursor: pointer; padding: var(--sp-1); display: flex; align-items: center; }
    .nav-bar .nav-back svg { width: 22px; height: 22px; stroke: var(--c-text-2); fill: none; stroke-width: 2; }
    .nav-bar .nav-title { flex: 1; text-align: center; font-size: var(--fs-xl); font-weight: 600; color: var(--c-text); }
    .nav-bar .nav-placeholder { width: 34px; flex-shrink: 0; }

    /* 区域标题 */
    .section-title { font-size: var(--fs-xl); font-weight: 600; color: var(--c-text); margin-bottom: var(--sp-5); }
    .section-sub { font-size: var(--fs-md); font-weight: 600; color: var(--c-text); margin-bottom: var(--sp-2); }
    .section-label { font-size: var(--fs-base); font-weight: 600; color: var(--c-text-3); margin-bottom: var(--sp-3); }

    /* 页面大标题 */
    .page-title { font-size: var(--fs-2xl); font-weight: 600; color: var(--c-ink); margin-bottom: var(--sp-4); }

    /* 数据抬头（橙色渐变） */
    .hero-banner { background: linear-gradient(135deg, var(--c-brand-dark), var(--c-data)); border-radius: 0; padding: var(--sp-6); color: #fff; }
    .hero-banner .hero-title { font-size: var(--fs-xl); font-weight: 600; color: #fff; }
    .hero-banner .hero-sub { font-size: var(--fs-sm); color: rgba(255,255,255,.8); margin-top: var(--sp-1); }

    /* ===== 标签组件 v1.0 ===== */
    .tag { display: inline-flex; align-items: center; gap: 2px; flex-shrink: 0; white-space: nowrap; }
    .tag-xs { padding: 1px 6px; border-radius: var(--r-xs); font-size: var(--fs-2xs); font-weight: 600; }
    .tag-sm { padding: 2px 8px; border-radius: var(--r-xs); font-size: var(--fs-xs); font-weight: 500; }
    .tag-md { padding: 2px 6px; border-radius: var(--r-xs); font-size: var(--fs-sm); }

    /* 变体 - 浅底深字 */
    .tag-brand { background: var(--c-brand-light); color: var(--c-brand-dark); }
    .tag-data { background: var(--c-data-light); color: var(--c-data); }
    .tag-flow { background: var(--c-flow-light); color: var(--c-flow); }
    .tag-success { background: var(--c-success-light); color: var(--c-success); }
    .tag-danger { background: var(--c-danger-light); color: var(--c-danger); }
    .tag-warning { background: var(--c-warning-light); color: #d97706; }
    .tag-info { background: var(--c-info-light); color: var(--c-info); }
    .tag-neutral { background: var(--c-fill); color: var(--c-text-3); }

    /* 变体 - 实底白字 */
    .tag-solid-brand { background: var(--c-brand); color: #fff; }
    .tag-solid-success { background: var(--c-success); color: #fff; }
    .tag-solid-danger { background: var(--c-danger); color: #fff; }
    .tag-solid-warning { background: var(--c-warning); color: #fff; }
    .tag-solid-info { background: var(--c-info); color: #fff; }
    html, body { height: 100%; height: 100dvh; overflow: hidden; overscroll-behavior: none; -webkit-overflow-scrolling: auto; }
    body { background: var(--bg); font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', sans-serif; color: var(--c-text); position: fixed; top: 0; left: 0; right: 0; bottom: 0; }
    /* 加载遮罩：在Vue挂载前保护页面，避免代码闪现 */
    #app-loading { position: fixed; inset: 0; z-index: 99999; background: #f7f8fa; display: flex; flex-direction: column; align-items: center; justify-content: center; transition: opacity .3s; }
    #app-loading.hide { opacity: 0; pointer-events: none; }
    #app-loading .loader { width: 36px; height: 36px; border: 3px solid #e5e7eb; border-top-color: #ea6d2e; border-radius: 50%; animation: spin .8s linear infinite; margin-bottom: 16px; }
    @keyframes spin { to { transform: rotate(360deg); } }
    #app-loading .loader-text { font-size: 14px; color: #9ca3af; letter-spacing: 1px; }
    /* v-cloak：Vue未挂载时隐藏模板，防止原始标签闪现 */
    [v-cloak] { display: none !important; }

    /* === 登录页 === */
    .login-page { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px 24px; background: var(--c-card); position: relative; }
    .icp-footer { position: absolute; bottom: 16px; left: 0; right: 0; text-align: center; font-size: 12px; color: var(--c-text-3); }
    .icp-footer a { color: var(--c-text-3); text-decoration: none; }
    .icp-footer a:hover { color: var(--c-text-2); text-decoration: underline; }
    .login-logo { width: 72px; height: 72px; display: flex; align-items: center; justify-content: center; margin-bottom: 16px; }
    .login-logo img { width: 72px; height: 72px; border-radius: 16px; object-fit: cover; }
    .login-title { font-size: var(--fs-3xl); font-weight: 600; color: var(--c-ink); margin-bottom: var(--sp-1); }
    .login-subtitle { font-size: var(--fs-base); color: var(--c-text-3); margin-bottom: var(--sp-8); }
    .login-form { width: 100%; max-width: 380px; }
    .form-group { margin-bottom: 14px; }
    .form-group label { display: block; font-size: 13px; color: var(--c-text-2); margin-bottom: 6px; }
    .form-group input { width: 100%; height: 46px; border: 1px solid var(--c-border); border-radius: var(--r-lg); padding: 0 var(--sp-4); font-size: var(--fs-lg); background: var(--c-bg); outline: none; -webkit-appearance: none; }
    .form-group input:focus { border-color: var(--c-brand); background: var(--c-card); }
    .login-btn { width: 100%; height: 46px; border: none; border-radius: var(--r-lg); background: var(--c-brand); color: #fff; font-size: var(--fs-lg); font-weight: 500; cursor: pointer; margin-top: var(--sp-6); -webkit-appearance: none; transition: opacity .15s; }
    .login-btn:active { opacity: .82; }
    .login-btn:disabled { opacity: .5; cursor: not-allowed; }
    /* 企微一键登录按钮：企业微信绿 */
    .login-btn.wecom-btn { background: #07c160; margin-top: var(--sp-3); }
    .error-msg { color: #ee0a24; font-size: 13px; margin-top: 8px; text-align: center; }
    .quick-login { margin-top: 24px; padding-top: 16px; border-top: 1px solid var(--c-border); }
    .quick-login .ql-title { font-size: var(--fs-sm); color: var(--c-text-3); text-align: center; margin-bottom: var(--sp-2); }
    .quick-login .ql-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
    .quick-login .ql-btn { height: 34px; border: 1px solid var(--c-border); border-radius: var(--r-sm); background: var(--c-card); font-size: var(--fs-sm); color: var(--c-text-2); cursor: pointer; -webkit-appearance: none; transition: background .15s; }
    .quick-login .ql-btn:active { background: var(--c-bg); }

    /* === 工作台框架 === */
    .workspace-page { position: fixed; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; background: var(--bg); z-index: 1; overscroll-behavior: none; }
    .top-bar { flex-shrink: 0; height: var(--header-h); background: var(--c-card); border-bottom: 1px solid var(--c-border); display: flex; align-items: center; justify-content: center; padding: 0 var(--sp-3); position: relative; }
    .top-bar .top-title { font-size: var(--fs-xl); font-weight: 600; color: var(--c-text); }
    .main-content { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 16px; }
    .bottom-bar { flex-shrink: 0; height: calc(var(--tab-h) + var(--safe-bottom)); background: var(--c-card); border-top: 1px solid var(--c-border); display: flex; justify-content: space-around; align-items: center; padding-bottom: var(--safe-bottom); }
    .bottom-bar .tab { display: flex; flex-direction: column; align-items: center; justify-content: center; font-size: var(--fs-2xs); color: var(--c-text-3); cursor: pointer; background: none; border: none; min-width: 56px; height: 100%; }
    .bottom-bar .tab.active { color: var(--c-brand-dark); }
    .bottom-bar .tab .t-icon { width: 26px; height: 26px; margin-bottom: 2px; }
    .bottom-bar .tab .t-icon svg { width: 26px; height: 26px; fill: none; stroke-width: 1.8; stroke: currentColor; }
    .bottom-bar .tab.tab-dianqing { color: var(--c-danger); }
    .bottom-bar .tab.tab-dianqing.active { color: var(--c-danger); }
    .bottom-bar .tab.tab-dianqing .t-icon svg { fill: var(--c-danger); stroke: none; }

    /* === 内容区组件 === */
    .section-title { font-size: var(--fs-xl); font-weight: 600; color: var(--c-text); margin-bottom: var(--sp-5); }
    /* 网格卡片容器 */
    .grid-cards { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px; margin-bottom: 16px; }
    /* 应用卡片 */
    .grid-card { background: var(--c-card); border-radius: var(--r-2xl); border: 1px solid var(--c-border); padding: var(--sp-5) var(--sp-1) var(--sp-3); cursor: pointer; display: flex; flex-direction: column; align-items: center; text-align: center; transition: border-color .15s, background .15s; }
    .grid-card:active { border-color: var(--c-brand); background: var(--c-brand-light); }
    .grid-card .gc-icon { width: 52px; height: 52px; border-radius: var(--r-xl); display: flex; align-items: center; justify-content: center; margin-bottom: var(--sp-2); }
    .grid-card .gc-icon svg { width: 32px; height: 32px; fill: none; stroke-width: 1.5; }
    .grid-card .gc-title { font-size: var(--fs-lg); font-weight: 600; color: var(--c-text); line-height: 1.25; margin-bottom: 2px; }
    .grid-card .gc-desc { font-size: var(--fs-sm); color: var(--c-text-3); line-height: 1.35; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
    /* 兼容旧 entry-card（其他地方可能还用） */
    .entry-card { background: var(--c-card); border-radius: var(--r-lg); border: 1px solid var(--c-border); padding: var(--sp-6) var(--sp-5); cursor: pointer; margin-bottom: var(--sp-4); display: flex; align-items: center; gap: var(--sp-5); }
    .entry-card:active { border-color: var(--c-brand); background: var(--c-brand-light); }
    .entry-card .ec-icon { width: 52px; height: 52px; flex-shrink: 0; border-radius: var(--r-lg); background: var(--c-brand-light); display: flex; align-items: center; justify-content: center; }
    .entry-card .ec-icon svg { width: 30px; height: 30px; stroke: var(--c-brand-dark); fill: none; stroke-width: 1.5; }
    .entry-card .ec-icon.pkl-icon svg { width: 30px; height: 30px; }
    .entry-card .ec-text { flex: 1; min-width: 0; }
    .entry-card .ec-title { font-size: var(--fs-xl); font-weight: 600; color: var(--c-text); margin-bottom: 3px; }
    .entry-card .ec-desc { font-size: var(--fs-sm); color: var(--c-text-3); }
    .entry-card .ec-arrow { color: var(--c-text-4); font-size: var(--fs-2xl); flex-shrink: 0; }
    .empty-state { text-align: center; padding: 60px var(--sp-6); color: var(--c-text-3); }
    .empty-state .e-icon { width: 48px; height: 48px; margin: 0 auto var(--sp-2); }
    .empty-state .e-icon svg { width: 48px; height: 48px; stroke: var(--c-text-4); fill: none; stroke-width: 1.2; }
    .empty-state .e-text { font-size: var(--fs-md); }

    /* "我的"页面 */
    .profile-banner { background: var(--c-card); border-radius: var(--r-lg); border: 1px solid var(--c-border); padding: var(--sp-6) var(--sp-5); margin-bottom: var(--sp-4); display: flex; align-items: center; gap: var(--sp-4); }
    .profile-banner .pb-avatar { width: 48px; height: 48px; border-radius: var(--r-full); background: var(--c-brand-light); display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
    .profile-banner .pb-avatar svg { width: 24px; height: 24px; stroke: var(--c-brand-dark); fill: none; stroke-width: 1.5; }
    .profile-banner .pb-info { flex: 1; min-width: 0; }
    .profile-banner .pb-name { font-size: 17px; font-weight: 600; color: var(--c-text); }
    .profile-banner .pb-meta { font-size: 13px; color: var(--c-text-3); margin-top: 2px; }
    .profile-banner .pb-meta span { margin-right: 8px; }
    .me-card { background: var(--c-card); border-radius: var(--r-lg); border: 1px solid var(--c-border); overflow: hidden; margin-bottom: var(--sp-3); }
    .me-card .me-item { display: flex; align-items: center; padding: var(--sp-4) var(--sp-5); border-bottom: 1px solid var(--c-border); cursor: pointer; }
    .me-card .me-item:last-child { border-bottom: none; }
    .me-card .me-item:active { background: var(--c-bg); }
    .me-card .me-item .mi-icon { width: 22px; height: 22px; margin-right: var(--sp-3); flex-shrink: 0; }
    .me-card .me-item .mi-icon svg { width: 22px; height: 22px; stroke: var(--c-text-2); fill: none; stroke-width: 1.5; }
    .me-card .me-item .mi-label { font-size: var(--fs-lg); color: var(--c-text); flex: 1; }
    .me-card .me-item .mi-arrow { color: var(--c-text-4); font-size: var(--fs-xl); }
    .me-card .me-item.logout { justify-content: center; }
    .me-card .me-item.logout .mi-label { color: var(--c-danger); text-align: center; flex: none; }

    /* === 新客上报页面 === */
    .sub-page { display: flex; flex-direction: column; height: 100vh; height: 100dvh; background: var(--bg); max-width: 100vw; overflow: hidden; position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 100; overscroll-behavior: none; }
    .sub-header { flex-shrink: 0; background: var(--c-card); border-bottom: 1px solid var(--c-border); display: flex; align-items: center; padding: 0 var(--sp-3); height: 46px; }
    .back-btn { background: none; border: none; cursor: pointer; padding: var(--sp-1); display: flex; align-items: center; }
    .back-btn svg { width: 22px; height: 22px; stroke: var(--c-text-2); fill: none; stroke-width: 2; }
    .sub-header .sub-title { flex: 1; text-align: center; font-size: var(--fs-xl); font-weight: 600; color: var(--c-text); }
    .sub-header .sub-placeholder { width: 34px; flex-shrink: 0; }
    .sub-body { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 16px; padding-bottom: 20px; }

    /* 表单卡片 */
    .form-card { background: var(--c-card); border-radius: var(--r-lg); border: 1px solid var(--c-border); padding: var(--sp-5); margin-bottom: var(--sp-3); }
    .form-card .fc-title { font-size: var(--fs-base); font-weight: 600; color: var(--c-text-3); margin-bottom: var(--sp-3); }
    .form-row { display: flex; align-items: center; margin-bottom: 10px; gap: 8px; max-width: 100%; }
    .form-row:last-child { margin-bottom: 0; }
    .form-row label { font-size: var(--fs-base); color: var(--c-text-2); flex-shrink: 0; width: 70px; }
    .form-row input, .form-row select {
      flex: 1; min-width: 0; height: 34px; border: 1px solid var(--c-border); border-radius: 8px; padding: 0 10px; font-size: 13px; background: var(--bg); outline: none; max-width: 100%;
    }
    .form-row input:focus, .form-row select:focus { border-color: var(--c-brand); background: var(--c-card); }

    /* 顾客行卡片 */
    .customer-card { background: var(--c-card); border-radius: var(--r-lg); border: 1px solid var(--c-border); margin-bottom: var(--sp-3); overflow: hidden; width: 100%; box-sizing: border-box; }
    .customer-card .cc-header { display: flex; align-items: center; justify-content: space-between; padding: var(--sp-2) var(--sp-3); border-bottom: 1px solid var(--c-border); }
    .customer-card .cc-header .cc-num { font-size: var(--fs-md); font-weight: 600; color: var(--c-text); }
    .customer-card .cc-header .cc-del { background: none; border: none; font-size: 13px; color: #ee0a24; cursor: pointer; padding: 2px 6px; }
    .customer-card .cc-body { padding: 10px 12px; overflow: hidden; }
    .customer-card .cc-body .form-row { margin-bottom: 8px; gap: 6px; }
    .customer-card .cc-body .form-row:last-child { margin-bottom: 0; }
    .customer-card .cc-body input, .customer-card .cc-body select, .customer-card .cc-body textarea { max-width: 100%; box-sizing: border-box; min-width: 0; }
    .cc-body .dual-col { display: flex; gap: 6px; min-width: 0; overflow: hidden; }
    .cc-body .dual-col > .form-row { flex: 1; min-width: 0; overflow: hidden; }
    .cc-body .dual-col > .form-row input, .cc-body .dual-col > .form-row select { width: 100%; min-width: 0; }

    /* 成交展开区 */
    .deal-section { background: var(--c-brand-light); border-radius: var(--r-md); padding: var(--sp-2) var(--sp-3); margin-top: var(--sp-2); }
    .deal-section .form-row label { color: var(--c-brand-dark); }

    /* 按钮 */
    .btn-add { width: 100%; height: 44px; border: 1px dashed var(--c-text-4); border-radius: var(--r-lg); background: var(--c-card); font-size: var(--fs-md); color: var(--c-text-3); cursor: pointer; margin-bottom: var(--sp-5); -webkit-appearance: none; transition: background .15s; }
    .btn-add:active { background: var(--c-bg); }
    .btn-submit { width: 100%; height: 46px; border: none; border-radius: var(--r-lg); background: var(--c-brand); color: #fff; font-size: var(--fs-lg); font-weight: 500; cursor: pointer; -webkit-appearance: none; transition: opacity .15s; }
    .btn-submit:active { opacity: .82; }
    .btn-submit:disabled { opacity: .5; cursor: not-allowed; }

    /* 已提交记录 */
    .record-card { background: var(--c-card); border-radius: var(--r-lg); border: 1px solid var(--c-border); margin-bottom: var(--sp-3); overflow: hidden; }
    .record-card .rc-header { display: flex; align-items: center; justify-content: space-between; padding: var(--sp-3) var(--sp-5); border-bottom: 1px solid var(--c-border); }
    .record-card .rc-header .rc-name { font-size: var(--fs-md); font-weight: 500; color: var(--c-text); }
    .record-card .rc-header .rc-channel { font-size: var(--fs-sm); color: var(--c-brand-dark); background: var(--c-brand-light); padding: 1px 6px; border-radius: var(--r-xs); }
    .record-card .rc-body { padding: 10px 16px; font-size: 13px; color: var(--c-text-2); line-height: 1.8; }
    .record-card .rc-footer { display: flex; justify-content: flex-end; padding: 8px 16px; border-top: 1px solid var(--c-border); }
    .record-card .rc-footer .rc-edit { background: none; border: 1px solid var(--c-border); border-radius: 6px; font-size: 12px; color: var(--c-text-2); cursor: pointer; padding: 4px 12px; }

    /* 确认弹窗 */
    .modal-mask { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,.6); z-index: 1000; display: flex; align-items: center; justify-content: center; }
    .modal-box { background: var(--c-card); border-radius: var(--r-2xl); width: 300px; overflow: hidden; box-shadow: var(--shadow-pop); }
    .modal-box .mb-title { font-size: var(--fs-xl); font-weight: 600; text-align: center; padding: var(--sp-6) var(--sp-5) var(--sp-2); }
    .modal-box .mb-content { font-size: var(--fs-md); color: var(--c-text-2); text-align: center; padding: var(--sp-2) var(--sp-5) var(--sp-5); }
    .modal-box .mb-actions { display: flex; border-top: 1px solid var(--c-border); }
    .modal-box .mb-actions button { flex: 1; height: 44px; border: none; background: none; font-size: var(--fs-lg); cursor: pointer; }
    .modal-box .mb-actions button:first-child { color: var(--c-text-3); border-right: 1px solid var(--c-border); }
    .modal-box .mb-actions button:last-child { color: var(--c-brand-dark); font-weight: 500; }

    /* Toast */
    .toast { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background: rgba(0,0,0,.72); color: #fff; padding: 10px 24px; border-radius: 8px; font-size: 14px; z-index: 9999; }

    /* === 待办任务 === */
    .todo-section { margin-bottom: 20px; }
    .todo-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }
    .todo-header .th-left { display: flex; align-items: center; gap: 8px; }
    .todo-header .th-title { font-size: var(--fs-xl); font-weight: 600; color: var(--c-text); }
    .todo-header .th-badge { background: #ee0a24; color: #fff; font-size: 11px; font-weight: 600; padding: 1px 7px; border-radius: 10px; min-width: 18px; text-align: center; }
    .todo-header .th-filter { font-size: 12px; color: var(--c-brand-dark); cursor: pointer; background: none; border: none; }
    .todo-card { background: var(--c-card); border-radius: var(--radius); border: 1px solid var(--c-border); overflow: hidden; }
    .todo-row { padding: 12px 16px; border-bottom: 1px solid var(--c-border); }
    .todo-row:last-child { border-bottom: none; }
    .todo-row.completed-row { opacity: .55; }
    .todo-row .tr-main { display: flex; align-items: center; gap: 10px; }
    .todo-row .tr-title { font-size: var(--fs-md); font-weight: 500; color: var(--c-text); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .todo-row .tr-type { font-size: var(--fs-xs); color: var(--c-brand-dark); background: var(--c-brand-light); padding: 2px 8px; border-radius: var(--r-xs); flex-shrink: 0; }
    .todo-row .tr-btn { background: var(--c-brand); color: #fff; border: none; border-radius: var(--r-sm); font-size: var(--fs-sm); padding: 4px 12px; cursor: pointer; flex-shrink: 0; -webkit-appearance: none; transition: opacity .15s; }
    .todo-row .tr-btn:active { opacity: .82; }
    .todo-row .tr-btn.done { background: var(--c-fill); color: var(--c-text-3); cursor: default; }
    .todo-row .tr-sub { display: flex; align-items: center; gap: 6px; margin-top: 4px; font-size: 12px; color: var(--c-text-3); }
    .todo-row .tr-due { font-size: 12px; color: var(--c-text-3); }
    .todo-row .tr-due.urgent { color: #ee0a24; font-weight: 500; }
    .todo-row .tr-detail { margin-top: 6px; font-size: 12px; color: var(--c-text-3); line-height: 1.6; }
    .todo-row .tr-follow { margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--c-border); }
    .todo-tabs { display: flex; gap: 0; margin-bottom: var(--sp-4); background: var(--c-card); border-radius: var(--r-md); border: 1px solid var(--c-border); overflow: hidden; }
    .todo-tabs .tt-btn { flex: 1; height: 36px; border: none; background: none; font-size: var(--fs-base); color: var(--c-text-3); cursor: pointer; -webkit-appearance: none; }
    .todo-tabs .tt-btn.active { background: var(--c-brand); color: #fff; }
    /* 优先级徽章 */
    .priority-badge { display:inline-block; font-size:10px; font-weight:600; padding:1px 6px; border-radius:10px; line-height:16px; flex-shrink:0; }
    .priority-badge.p-low { background:#f4f4f5; color:#909399; }
    .priority-badge.p-medium { background:#ecf5ff; color:#409eff; }
    .priority-badge.p-high { background:#fdf6ec; color:#e6a23c; }
    .priority-badge.p-urgent { background:#fef0f0; color:#f56c6c; }
    /* 来源标识 */
    .source-tag { display:inline-flex; align-items:center; gap:2px; font-size:var(--fs-2xs); color:var(--c-text-3); background:var(--c-fill); padding:1px 6px; border-radius:var(--r-xs); flex-shrink:0; }
    /* 逾期标记 */
    .overdue-tag { font-size:var(--fs-xs); color:var(--c-danger); font-weight:500; background:var(--c-danger-light); padding:1px 6px; border-radius:var(--r-xs); flex-shrink:0; }
    /* 创建待办弹窗 */
    .todo-create-overlay { position:fixed; top:0; left:0; right:0; bottom:0; background:rgba(0,0,0,.45); z-index:1000; display:flex; align-items:flex-end; justify-content:center; }
    .todo-create-form { background:var(--c-card); border-radius:16px 16px 0 0; width:100%; max-width:750px; max-height:85vh; overflow-y:auto; padding:20px; box-sizing:border-box; }
    .todo-create-form .tcf-title { font-size:var(--fs-xl); font-weight:600; color:var(--c-text); margin-bottom:var(--sp-5); display:flex; justify-content:space-between; align-items:center; }
    .todo-create-form .tcf-field { margin-bottom:14px; }
    .todo-create-form .tcf-field label { display:block; font-size:13px; color:var(--c-text-2); margin-bottom:4px; }
    .todo-create-form .tcf-field input,
    .todo-create-form .tcf-field textarea,
    .todo-create-form .tcf-field select { width:100%; height:40px; border:1px solid var(--c-border); border-radius:var(--r-md); padding:0 var(--sp-3); font-size:var(--fs-md); color:var(--c-text); background:var(--c-card); box-sizing:border-box; }
    .todo-create-form .tcf-field textarea { height:72px; padding:10px 12px; resize:vertical; }
    .todo-create-form .tcf-actions { display:flex; gap:10px; margin-top:18px; }
    .todo-create-form .tcf-actions button { flex:1; height:44px; border:none; border-radius:var(--r-md); font-size:var(--fs-lg); cursor:pointer; -webkit-appearance:none; }
    .todo-create-form .tcf-actions .tcf-cancel { background:var(--c-fill); color:var(--c-text-3); }
    .todo-create-form .tcf-actions .tcf-submit { background:var(--c-brand); color:#fff; font-weight:500; }
    /* 三步跟进表单 */
    .followup-step { margin-bottom:14px; }
    .followup-step .fs-label { font-size:13px; font-weight:600; color:var(--c-text); margin-bottom:8px; display:flex; align-items:center; gap:6px; }
    .followup-step .fs-label .fs-num { width:20px; height:20px; border-radius:50%; background:var(--c-brand); color:#fff; font-size:11px; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; }
    .followup-step .fs-label.done .fs-num { background:#1a8a3f; }
    .followup-step .fs-body { padding-left:26px; }
    .followup-step .fs-options { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:8px; }
    .followup-step .fs-opt { height:34px; padding:0 14px; border:1px solid var(--c-border); border-radius:8px; font-size:13px; color:var(--c-text-2); background:var(--c-card); cursor:pointer; display:inline-flex; align-items:center; }
    .followup-step .fs-opt.active { border-color:var(--c-brand); background:var(--c-brand-light); color:var(--c-brand-dark); }
    .followup-step .fs-input { width:100%; height:38px; border:1px solid var(--c-border); border-radius:var(--r-md); padding:0 var(--sp-3); font-size:var(--fs-base); color:var(--c-text); margin-bottom:6px; }
    .followup-step .fs-textarea { width:100%; height:60px; border:1px solid var(--c-border); border-radius:var(--r-md); padding:8px 12px; font-size:var(--fs-base); color:var(--c-text); resize:vertical; margin-bottom:6px; }
    .followup-step .fs-save { height:38px; padding:0 20px; background:var(--c-brand); color:#fff; border:none; border-radius:8px; font-size:13px; cursor:pointer; }
    .followup-step .fs-save:disabled { opacity:.5; }
    /* 跟进结果展示 */
    .fu-result { display:flex; gap:6px; flex-wrap:wrap; font-size:12px; color:var(--c-text-3); margin-bottom:6px; }
    .fu-result .fu-tag { background:var(--c-brand-light); color:var(--c-brand-dark); padding:2px 8px; border-radius:var(--r-xs); }
    .fu-result .fu-tag.green { background:#f0f9eb; color:#67c23a; }
    .fu-result .fu-tag.red { background:#fef0f0; color:#f56c6c; }
    @keyframes bounce { 0%,80%,100% { transform: translateY(0); } 40% { transform: translateY(-6px); } }
    .md-body { white-space:normal; word-break:break-word; }
    .md-body p { margin:0 0 8px; }
    .md-body p:last-child { margin-bottom:0; }
    .md-body strong { font-weight:600; }
    .md-body em { font-style:italic; }
    .md-body ul,.md-body ol { margin:4px 0 8px; padding-left:20px; }
    .md-body li { margin:2px 0; }
    .md-body h3 { font-size:15px; font-weight:600; margin:10px 0 4px; }
    .md-body h4 { font-size:14px; font-weight:600; margin:8px 0 4px; }
    .md-body code { background:var(--c-border); padding:1px 4px; border-radius:3px; font-size:13px; font-family:monospace; }
    .md-body pre { background:var(--c-border); padding:8px 10px; border-radius:8px; overflow-x:auto; margin:6px 0; font-size:13px; }
    .md-body pre code { background:none; padding:0; }
    .md-body blockquote { border-left:3px solid var(--c-brand); margin:6px 0; padding:4px 10px; color:var(--c-text-3); }
    .md-body hr { border:none; border-top:1px solid var(--c-border); margin:8px 0; }
    .md-body table { border-collapse:collapse; margin:6px 0; font-size:13px; }
    .md-body th,.md-body td { border:1px solid var(--c-border); padding:4px 8px; }
    .md-body th { background:var(--c-border); font-weight:600; }
    @keyframes spin { to { transform: rotate(360deg); } }
    @keyframes pulse { 0%,100% { transform: scale(1); opacity:1; } 50% { transform: scale(1.15); opacity:0.85; } }
    .thinking-dot { display:inline-block; width:10px; height:10px; border-radius:50%; background:var(--c-brand); animation: thinkBounce 1.2s ease-in-out infinite; }
    @keyframes thinkBounce { 0%,80%,100% { transform:translateY(0); opacity:0.4; } 40% { transform:translateY(-12px); opacity:1; } }
    .rec-btn { transition: background-color .3s ease, border-radius .3s ease, width .3s ease; }
    @keyframes expandBtn { from { width:80px; border-radius:50%; opacity:.6; height:80px; } to { width:auto; border-radius:26px; opacity:1; height:52px; } }

    /* 店庆Tab样式 */
    .dq-wrap { max-width:750px; margin:0 auto; }
    .dq-period-bar { display:flex; margin-bottom:8px; margin-left:50%; border-radius:6px; overflow:hidden; border:1px solid var(--c-border); }
    .dq-period-btn { flex:1; padding:3px 0; border:none; border-radius:0; font-size:12px; background:var(--c-card); color:var(--c-text-3); cursor:pointer; border-right:1px solid var(--c-border); }
    .dq-period-btn:last-child { border-right:none; }
    .dq-period-btn.active { background:#dc2626; color:#fff; }
    .dq-period-inner { display:flex; gap:2px; margin-left:auto; border-radius:4px; overflow:hidden; }
    .dq-pi-btn { padding:2px 8px; border:none; border-radius:0; font-size:11px; background:rgba(255,255,255,.2); color:rgba(255,255,255,.8); cursor:pointer; }
    .dq-pi-btn.active { background:rgba(255,255,255,.9); color:#dc2626; font-weight:700; }
    .dq-total-card { background:linear-gradient(135deg,#7f1d1d,#dc2626,#d97706,#dc2626,#7f1d1d); background-size:300% 300%; animation: dqShimmer 6s ease infinite; border-radius:14px; padding:16px; margin-bottom:14px; color:#fff; box-shadow:0 4px 20px rgba(220,38,38,.3); }
    @keyframes dqShimmer { 0%,100%{background-position:0% 50%} 50%{background-position:100% 50%} }
    .dq-total-card .dq-title { font-size:var(--fs-xl); font-weight:700; margin-bottom:var(--sp-3); display:flex; align-items:center; }
    .dq-total-card .dq-nums { display:grid; grid-template-columns:1fr 1fr 1fr 1fr; gap:8px; margin-bottom:12px; }
    .dq-total-card .dq-num-item { text-align:center; }
    .dq-total-card .dq-num-val { font-size:20px; font-weight:800; }
    .dq-total-card .dq-num-label { font-size:10px; opacity:.7; margin-top:2px; }
    .dq-bar-wrap { height:8px; background:rgba(255,255,255,.25); border-radius:4px; overflow:hidden; margin-bottom:6px; }
    .dq-bar-fill { height:100%; border-radius:4px; background:var(--c-card); transition:width .6s ease; }
    .dq-bar-info { display:flex; justify-content:space-between; font-size:11px; color:#fff; font-weight:700; }
    .dq-section-title { font-size:var(--fs-md); font-weight:600; margin:var(--sp-4) 0 var(--sp-2); display:flex; align-items:center; gap:6px; }
    .dq-pk-card { background:var(--c-card); border-radius:12px; padding:14px; margin-bottom:8px; border:1px solid var(--c-border); }
    .dq-pk-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; }
    .dq-pk-header .dq-side { font-size:14px; font-weight:700; display:flex; flex-direction:column; align-items:center; gap:2px; }
    .dq-pk-header .dq-side .dq-val { font-size:18px; font-weight:800; color:#dc2626; }
    .dq-pk-header .dq-side .dq-label { font-size:11px; color:var(--c-text-3); }
    .dq-pk-header .dq-side.win .dq-val { color:var(--green); }
    .dq-pk-vs { font-size:13px; font-weight:800; color:#dc2626; background:#fef2f2; padding:4px 12px; border-radius:12px; }
    .dq-pk-bar-area { margin-top:8px; }
    .dq-pk-bar-row { display:flex; align-items:center; gap:8px; margin-bottom:4px; }
    .dq-pk-bar-name { font-size:12px; width:50px; flex-shrink:0; text-align:right; color:var(--c-text-2); }
    .dq-pk-bar-wrap { flex:1; height:8px; background:var(--c-border); border-radius:4px; overflow:hidden; }
    .dq-pk-bar-fill { height:100%; border-radius:4px; transition:width .6s ease; }
    .dq-pk-bar-fill.red { background:linear-gradient(90deg,#dc2626,#f87171); }
    .dq-pk-bar-fill.green { background:linear-gradient(90deg,var(--c-success),#4ade80); }
    .dq-pk-bar-pct { font-size:12px; font-weight:600; width:45px; flex-shrink:0; color:var(--c-text-2); }
    .dq-gap { text-align:center; font-size:12px; margin-top:4px; color:var(--c-text-3); }
    .dq-gap b { color:#dc2626; }
    .dq-gap.win b { color:var(--c-success); }
    .dq-rank-item { background:var(--c-card); border-radius:10px; padding:10px 14px; margin-bottom:6px; border:1px solid var(--c-border); display:flex; align-items:center; gap:10px; }
    .dq-rank-num { width:24px; height:24px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:11px; font-weight:700; background:var(--c-border); color:var(--c-text-3); flex-shrink:0; }
    .dq-rank-num.t1 { background:#dc2626; color:#fff; }
    .dq-rank-num.t2 { background:#d97706; color:#fff; }
    .dq-rank-num.t3 { background:#c4956a; color:#fff; }
    .dq-rank-info { flex:1; min-width:0; }
    .dq-rank-name { font-size:13px; font-weight:600; }
    .dq-rank-detail { font-size:11px; color:var(--c-text-3); margin-top:2px; }
    .dq-rank-right { text-align:right; flex-shrink:0; }
    .dq-rank-pct { font-size:16px; font-weight:800; color:#dc2626; }
    .dq-rank-target { font-size:10px; color:var(--c-text-3); }
    .submit-expand { animation: expandBtn .3s ease-out forwards; }
    @keyframes panoSpin{to{transform:rotate(360deg)}}
    @keyframes slideUp { from { transform: translateY(100%); } to { transform: translateY(0); } }

    /* === 知识库文章排版 === */
    .kb-article-content h1, .kb-article-content h2, .kb-article-content h3 { margin: 20px 0 10px; font-weight: 700; line-height: 1.4; }
    .kb-article-content h1 { font-size: 18px; }
    .kb-article-content h2 { font-size: 17px; }
    .kb-article-content h3 { font-size: 16px; }
    .kb-article-content p { margin: 12px 0; }
    .kb-article-content img { max-width: 100%; border-radius: 10px; margin: 10px 0; }
    .kb-article-content blockquote { border-left: 3px solid var(--c-border); padding: 8px 14px; margin: 12px 0; color: var(--c-text-3); background: #fafafa; border-radius: 0 8px 8px 0; }
    .kb-article-content ul, .kb-article-content ol { padding-left: 22px; margin: 12px 0; }
    .kb-article-content li { margin: 6px 0; }
    .kb-article-content table { width: 100%; border-collapse: collapse; margin: 12px 0; font-size: 14px; }
    .kb-article-content th, .kb-article-content td { border: 1px solid var(--c-border); padding: 8px 10px; text-align: left; }
    .kb-article-content th { background: #f9f9f9; font-weight: 600; }

/* 预约网格 */
.appt-grid-row{display:flex;align-items:stretch}
.appt-time-cell{width:42px;min-width:42px;flex-shrink:0;font-size:9px;color:#999;text-align:right;padding-right:4px;padding-top:3px;height:24px;box-sizing:border-box}
.appt-slot-cell{flex:1;min-width:0;height:24px;box-sizing:border-box;border-left:1.5px solid #d0d0d0}
.appt-grid-row[data-hour="1"] .appt-time-cell{box-shadow:inset 0 -1px 0 #e0e0e0}
.appt-grid-row[data-hour="0"] .appt-time-cell{box-shadow:inset 0 -1px 0 #f5f5f5}
.appt-grid-row[data-hour="1"] .appt-slot-cell{box-shadow:inset 0 -1px 0 #e0e0e0}
.appt-grid-row[data-hour="0"] .appt-slot-cell{box-shadow:inset 0 -1px 0 #f5f5f5}
.appt-bg-new{background:#FFF3E0;color:#E65100;border-left:3px solid #FF9800}
.appt-bg-member{background:#E8F5E9;color:#1B5E20;border-left:3px solid #4CAF50}

    /* 忘记密码（2026-08-16） */
    .forgot-link { text-align: center; margin-top: var(--sp-4); font-size: var(--fs-sm); color: var(--c-brand-dark); cursor: pointer; }
    .forgot-link:active { opacity: .7; }
    .modal-box.forgot-box { width: 340px; }
    .modal-box .forgot-tip { line-height: 1.7; }
    .modal-box .forgot-body { padding: var(--sp-3) var(--sp-5) var(--sp-5); }
    .modal-box .forgot-msg { font-size: var(--fs-sm); text-align: center; padding: var(--sp-2) 0; color: #e5484d; }
    .modal-box .forgot-msg.ok { color: #2da44e; }
    .modal-box .forgot-submit { margin-top: var(--sp-2); font-size: var(--fs-md); }
