  /* ============================================================
     老板参谋团 · 移动端样式（视觉优化版）
     ------------------------------------------------------------
     设计语言：三块用「语义色 + 左侧 5px 色条」区分，一眼可分
       ① 驾驶舱   深色 + 青绿弧光  → 数据中心 · 科技感
       ② 军师结论 米金底 + 金色条  → 权威判断 · 价值感
       ③ 参谋团   青绿底 + 青绿条  → 专业团队 · 可靠感

     硬约束（施工包 §6，不得放宽）
       正文 ≥18px ｜ 结论/风险 ≥20px 加粗 ｜ 主标题 ≥24px
       行高 ≥1.65 ｜ 正文对比度 ≥7:1(AAA) ｜ 关键动作 ≥56px
       主组件 ≥60×60 ｜ 热区间距 ≥16px ｜ 颜色不作唯一信息手段
       尺寸一律用 rem（N-2）—— 关怀模式放大字号时布局不塌
     ============================================================ */

  *{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;}

  body.style-big{font-size:18px;}
body.style-tech{background:#0d1117;color:#e6edf3;}
:root{
    --ink:#14130f;      /* 正文     16.6:1 on #eeece7 */
    --ink-2:#4a4840;    /* 次要正文  7.8:1 on #eeece7 */
    --ink-3:#5f5d57;
    --bg:#eeece7;
    --line:#d9d5cc;
    --line-2:#e6e2d9;
    /* 阴影：多层叠加才有质感，单层阴影看起来是平的 */
    --sh-1:0 1px 2px rgba(28,25,20,.05),0 2px 6px rgba(28,25,20,.05);
    --sh-2:0 2px 4px rgba(28,25,20,.05),0 8px 20px rgba(28,25,20,.07);
    --sh-3:0 4px 10px rgba(28,25,20,.07),0 16px 36px rgba(28,25,20,.11);
    --r-1:12px; --r-2:16px; --r-3:20px;
    --gold:#C8901B; --gold-d:#8A5A00; --gold-bg:#FCF7EA; --gold-bg2:#F8F1DE; --gold-line:#E7D6A8;
    --grn:#0b5a46; --grn-2:#1d9e75; --grn-3:#5DCAA5;
    --grn-bg:#F1F7F4; --grn-line:#C6E2D6;
  }

  html{font-size:18px;}
  body{
    font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
    background:var(--bg);color:var(--ink);
    max-width:520px;margin:0 auto;
    padding-bottom:calc(150px + env(safe-area-inset-bottom));
    min-height:100vh;line-height:1.65;
    -webkit-font-smoothing:antialiased;
  }

  /* ---------- 顶栏（≥56px） ---------- */
  .top{
    /* ⛔ justify-content 必须是 flex-start 不能留 space-between：
       手机三行布局里第1行右端靠 .st 的 margin-left:auto 钉（见下），
       space-between 会抢走自由空间、让 auto 边距失效（A/B 刀②咬不动）。
       桌面单行的「品牌左、状态+按钮右」由 ≥1024 块里 .brand{flex:1 1 auto} 撑开实现。 */
    display:flex;align-items:center;justify-content:flex-start;
    /* 手机三行顶栏（老板口径，一个都不藏）：
       第1行 [logo 品牌名]……[● 状态文字]（.st 是 .top 直接子元素，margin-left:auto 钉右端）
       第2行 副标题（在 .brand 内天然上下堆叠，左对齐）
       第3行 [Aa 标准][🏢 行业][⚙ 设置]（.topright flex-basis:100% 强制整行换行、左对齐）
       桌面 ≥1024 有还原覆盖（见桌面块），维持单行观感一个字不改。 */
    flex-wrap:wrap;row-gap:4px;
    padding:calc(9px + env(safe-area-inset-top)) 16px 9px;
    background:var(--bg);position:sticky;top:0;z-index:30;min-height:56px;
  }
  /* flex:0 1 auto —— 手机上品牌**不**吃掉第1行剩余空间（剩余空间归 .st 的
     margin-left:auto，把状态钉到右端）；桌面块里再改回 1 1 auto 撑开。 */
  .brand{display:flex;align-items:center;gap:11px;flex:0 1 auto;min-width:0;}
  .logo{
    width:2.2rem;height:2.2rem;border-radius:.62rem;flex-shrink:0;
    background:linear-gradient(145deg,#0b5c47,#1d9e75);
    display:flex;align-items:center;justify-content:center;
    font-size:1.05rem;font-weight:800;color:#fff;
    box-shadow:0 3px 9px rgba(15,110,86,.32),inset 0 1px 0 rgba(255,255,255,.28);
  }
  /* white-space:nowrap —— 品牌名就 5 个字，必须整行显示；CJK 逐字可断行，不加这条被挤时会一字一行竖排
     （390–430 真机竖排事故的治本条）。 */
  .title{font-size:1.35rem;font-weight:800;letter-spacing:.12em;line-height:1.2;color:var(--ink);white-space:nowrap;}
  /* 保险丝放基础规则（不进任何媒体查询）：任何宽度都可能被极长动态副标题挤，
     品牌名宁可截成省略号也绝不竖排、绝不顶出屏幕。 */
  .brand > div{min-width:0;}
  .title{text-overflow:ellipsis;overflow:hidden;}
  .subtitle{font-size:.72rem;font-weight:700;color:var(--ink-2);margin-top:2px;letter-spacing:.02em;}
  /* margin-left:auto —— .st 是 .top 直接子元素，手机第1行里吃掉剩余空间把自己钉到右端；
     桌面块里归零（那边靠 .brand 撑开把状态+按钮整体推到右侧）。 */
  .st{display:flex;align-items:center;gap:6px;font-size:.76rem;font-weight:800;color:var(--ink-2);flex-shrink:0;margin-left:auto;}
  .dot{width:9px;height:9px;border-radius:50%;background:#c9c5bc;flex-shrink:0;
       box-shadow:0 0 0 3px rgba(201,197,188,.25);}
  .dot.on{background:#639922;box-shadow:0 0 0 3px rgba(99,153,34,.22);}
  .dot.off{background:#E24B4A;box-shadow:0 0 0 3px rgba(226,75,74,.22);}

  /* ============================================================
     ① 全局驾驶舱 —— 深色 + 青绿弧光（数据中心 · 科技感）
     ============================================================ */
  .dash{
    margin:0 16px 20px;border-radius:var(--r-3);padding:18px 18px 16px;
    background:linear-gradient(158deg,#16293d 0%,#0b1622 100%);
    position:relative;overflow:hidden;
    border:1px solid rgba(93,202,165,.16);
    box-shadow:0 6px 18px rgba(11,22,34,.30),0 20px 48px rgba(11,22,34,.22),
               inset 0 1px 0 rgba(255,255,255,.08);
  }
  .dash::before{
    content:"";position:absolute;inset:0;opacity:.55;pointer-events:none;
    background-image:linear-gradient(rgba(93,202,165,.055) 1px,transparent 1px),
                     linear-gradient(90deg,rgba(93,202,165,.055) 1px,transparent 1px);
    background-size:26px 26px;
  }
  .halo{position:absolute;border-radius:50%;pointer-events:none;filter:blur(30px);}
  .halo.a{width:160px;height:160px;top:-62px;right:-34px;background:rgba(93,202,165,.17);}
  .halo.b{width:120px;height:120px;bottom:-50px;left:-26px;background:rgba(133,183,235,.11);}

  .dashhead{display:flex;align-items:baseline;justify-content:space-between;
            position:relative;z-index:2;margin-bottom:8px;}
  .dashtitle{font-size:.8rem;font-weight:800;color:#a8cec4;letter-spacing:.12em;}
  .dashmeta{font-size:.74rem;font-weight:700;color:#a8cec4;letter-spacing:.04em;}

  .gaugewrap{display:flex;align-items:center;gap:16px;position:relative;z-index:2;}
  .gauge{position:relative;flex-shrink:0;width:7.2rem;height:5.9rem;}
  .gauge svg{position:absolute;left:0;top:0;width:100%;height:auto;display:block;}
  .gauge .g-grade{
    position:absolute;left:0;right:0;top:60%;transform:translateY(-50%);
    text-align:center;font-size:1.6rem;font-weight:800;line-height:1;
    color:#a8f0d6;text-shadow:0 0 18px rgba(93,202,165,.55);pointer-events:none;
  }
  .gauge .g-unit{
    position:absolute;left:0;right:0;top:100%;transform:translateY(-50%);
    text-align:center;font-size:.72rem;font-weight:800;letter-spacing:.12em;
    color:#a8cec4;pointer-events:none;
  }

  .ginfo{flex:1;min-width:0;}
  .g-name{font-size:1.05rem;font-weight:800;color:#eaf6f2;line-height:1.35;}
  .g-desc{font-size:1rem;font-weight:600;color:#9fc4ba;margin-top:7px;line-height:1.7;}
  .gtags{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:10px;}
  .g-tag{display:inline-block;font-size:.78rem;font-weight:800;border-radius:.45rem;
         padding:.26rem .55rem;letter-spacing:.02em;}
  .g-dom{display:inline-block;font-size:.78rem;font-weight:800;border-radius:.45rem;
         padding:.26rem .55rem;letter-spacing:.02em;color:#9fd8c6;
         background:rgba(93,202,165,.14);border:1px solid rgba(93,202,165,.3);}
  .g-tag.bad{background:rgba(239,159,39,.18);color:#F5B95A;border:1px solid rgba(239,159,39,.3);}
  .g-tag.good{background:rgba(93,202,165,.18);color:#7FE0C0;border:1px solid rgba(93,202,165,.3);}

  .detailbtn{
    display:block;width:100%;margin-top:14px;padding:13px;
    background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.13);
    border-radius:var(--r-1);color:#a8d8cb;font-size:1rem;font-weight:800;
    font-family:inherit;cursor:pointer;position:relative;z-index:2;min-height:56px;
    letter-spacing:.02em;
  }
  .detailbtn.open{background:rgba(93,202,165,.13);color:#a8f0d6;border-color:rgba(93,202,165,.34);}

  .exportbtn{
    display:block;width:100%;margin-top:10px;padding:13px;
    background:rgba(93,202,165,.10);border:1.5px solid rgba(93,202,165,.42);
    border-radius:var(--r-1);color:#a8f0d6;font-size:1rem;font-weight:800;
    font-family:inherit;cursor:pointer;position:relative;z-index:2;min-height:56px;
    letter-spacing:.02em;
  }
  .exportbtn:active{background:rgba(93,202,165,.20);}

  .gdetail{display:none;margin-top:14px;position:relative;z-index:2;}
  .gdetail.show{display:block;}
  .gd-item{display:flex;align-items:center;gap:10px;padding:9px 0;
           border-bottom:1px solid rgba(255,255,255,.07);}
  .gd-item:last-child{border-bottom:0;}
  .gd-n{flex:1;font-size:1rem;font-weight:700;color:#cfe3dd;min-width:0;}
  .gd-b{font-size:.78rem;font-weight:800;color:#8fb8ad;background:rgba(255,255,255,.07);
        border-radius:.35rem;padding:.12rem .38rem;flex-shrink:0;}
  .gd-track{width:60px;height:6px;border-radius:3px;background:rgba(255,255,255,.12);overflow:hidden;flex-shrink:0;}
  .gd-fill{height:100%;border-radius:3px;background:var(--grn-3);}
  .gd-fill.warn{background:#EF9F27;} .gd-fill.bad{background:#E24B4A;}
  .gd-fn{font-size:.95rem;line-height:1.7;color:#8fb8ad;margin-top:12px;
         border-top:1px solid rgba(255,255,255,.09);padding-top:11px;}
  .gd-cold{color:#F5B95A;font-weight:700;}

  /* ============================================================
     ② 军师结论 —— 米金底 + 金色左条（权威判断 · 价值感）
     ============================================================ */
  .concl{
    margin:0 16px 20px;background:linear-gradient(168deg,var(--gold-bg) 0%,var(--gold-bg2) 100%);
    border:1.5px solid var(--gold-line);border-radius:var(--r-3);
    padding:18px 18px 18px 22px;position:relative;overflow:hidden;
    box-shadow:var(--sh-2);
  }
  .concl::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;
    background:linear-gradient(180deg,#C8901B,#E3B44A);}
  .sec-label{display:flex;align-items:center;justify-content:space-between;margin-bottom:11px;gap:10px;}
  .sec-name{display:flex;align-items:center;font-size:.8rem;font-weight:800;
            color:var(--gold-d);letter-spacing:.12em;}
  .concl .sec-name::before{
    content:"军";display:flex;align-items:center;justify-content:center;flex-shrink:0;
    width:1.7rem;height:1.7rem;border-radius:.45rem;margin-right:.55rem;
    background:linear-gradient(145deg,#C8901B,#E3B44A);color:#fff;
    font-size:.95rem;font-weight:800;letter-spacing:0;
    box-shadow:0 2px 7px rgba(176,122,14,.36),inset 0 1px 0 rgba(255,255,255,.3);
  }
  .sec-time{font-size:.74rem;font-weight:700;color:#5F4B1C;flex-shrink:0;}
  .concl .sec-name{color:#6B4F00;}
  .vtext{font-size:1.11rem;line-height:1.7;font-weight:800;color:var(--ink);letter-spacing:.01em;}
  .vtext b{font-weight:800;color:#6B4F00;}
  .vtext .ph{color:var(--ink-2);font-weight:600;}
  .chips{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px;}
  .chip{font-size:1.11rem;font-weight:800;border-radius:.6rem;padding:.42rem .9rem;
        background:#fff;color:#6B4F00;border:1.5px solid var(--gold-line);
        min-height:3.34rem;display:inline-flex;align-items:center;justify-content:center;}
  .risk{
    margin-top:14px;padding:13px 14px;border-radius:var(--r-1);
    background:#FCEBEB;border:1.5px solid #EFC9C9;
    font-size:1.11rem;line-height:1.7;font-weight:800;color:#791F1F;
  }
  .risk b{font-weight:800;}

  /* ============================================================
     ③ 参谋团 —— 青绿底 + 青绿左条（专业团队 · 可靠感）
     纵向全宽折叠卡：整卡可点，不再横滑小卡（解决断行 + 第4位被滑走）
     ============================================================ */
  .troop{
    margin:0 16px 20px;background:var(--grn-bg);
    border:1.5px solid var(--grn-line);border-radius:var(--r-3);
    padding:18px 0 18px;position:relative;overflow:hidden;
    box-shadow:var(--sh-2);
  }
  .troop::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;
    background:linear-gradient(180deg,#0f6e56,#5DCAA5);}
  .troop .sec-label{padding:0 18px;margin-bottom:14px;}
  .troop .sec-name{color:var(--grn);}
  .troop .sec-name::before{
    content:"参";display:flex;align-items:center;justify-content:center;flex-shrink:0;
    width:1.7rem;height:1.7rem;border-radius:.45rem;margin-right:.55rem;
    background:linear-gradient(145deg,#0f6e56,#1d9e75);color:#fff;
    font-size:.95rem;font-weight:800;letter-spacing:0;
    box-shadow:0 2px 7px rgba(15,110,86,.34),inset 0 1px 0 rgba(255,255,255,.28);
  }
  .troop .sec-meta{font-size:.74rem;font-weight:800;color:var(--ink-2);}

  #groups{padding:0 18px;}

  .grp-hd{
    display:flex;align-items:center;gap:.55rem;
    padding:0 2px .75rem;font-size:.9rem;font-weight:800;
    color:var(--ink-2);letter-spacing:.14em;
  }
  .grp-hd::before{content:"";width:.5rem;height:.5rem;border-radius:50%;flex-shrink:0;
                  background:var(--grn);box-shadow:0 0 0 3px rgba(15,110,86,.14);}
  .grp-hd.g1::before{background:#0f6e56;box-shadow:0 0 0 3px rgba(15,110,86,.14);}
  .grp-hd.g2::before{background:#185FA5;box-shadow:0 0 0 3px rgba(24,95,165,.14);}
  .grp-hd.g3::before{background:#854F0B;box-shadow:0 0 0 3px rgba(133,79,11,.14);}
  .grp-hd.g4::before{background:#993556;box-shadow:0 0 0 3px rgba(153,53,86,.14);}
  .grp-hd:not(:first-child){margin-top:1.7rem;}
  .grp-hd::after{content:"";flex:1;height:1px;background:var(--grn-line);}

  .alist{display:flex;flex-direction:column;gap:16px;}

  .acard{
    display:flex;align-items:center;gap:15px;width:100%;
    background:#fff;border:1.5px solid var(--line);border-radius:var(--r-2);
    padding:20px 18px;min-height:7.6rem;cursor:pointer;text-align:left;
    font-family:inherit;box-shadow:var(--sh-1);
    transition:box-shadow .18s ease,border-color .18s ease,transform .12s ease;
  }
  .acard:active{transform:scale(.985);}
  .acard.on{border-color:var(--grn);border-width:2.5px;
            box-shadow:0 4px 16px rgba(15,110,86,.18);}
  .av{
    width:3.9rem;height:3.9rem;border-radius:50%;flex-shrink:0;
    display:flex;align-items:center;justify-content:center;
    font-size:1.25rem;font-weight:800;color:#fff;
    background:linear-gradient(145deg,#0f6e56,#1d9e75);
    box-shadow:0 3px 10px rgba(15,110,86,.26),inset 0 1px 0 rgba(255,255,255,.24);
  }
  .acard.g2 .av,.arole.g2 .arole-i{background:linear-gradient(145deg,#185FA5,#378ADD);}
  .acard.g3 .av,.arole.g3 .arole-i{background:linear-gradient(145deg,#854F0B,#BA7517);}
  .acard.g4 .av,.arole.g4 .arole-i{background:linear-gradient(145deg,#993556,#D4537E);}
  .acard.weak .av,.arole.weak .arole-i{background:linear-gradient(145deg,#5f5d57,#8b8880);}
  .amain{flex:1;min-width:0;}
  .aname{font-size:1.15rem;font-weight:800;color:var(--ink);line-height:1.35;letter-spacing:.01em;}
  .adesc{font-size:1rem;font-weight:500;color:var(--ink-2);line-height:1.65;margin-top:5px;}
  .achev{flex-shrink:0;font-size:1.3rem;font-weight:800;color:#6f6c65;line-height:1;
         transition:transform .18s ease,color .18s ease;}
  .acard.on .achev{color:var(--grn);transform:rotate(90deg);}
  /* 弱行业化：用【文字标签】表达，不靠透明度/颜色（颜色不作唯一手段）
     标签内联在参谋名之后，不再单独占一列 —— 单独占列会挤压正文导致断行 */
  .atag{
    display:inline-block;vertical-align:middle;margin-left:8px;
    font-size:.78rem;font-weight:800;color:#4a4840;
    background:#F0EFEB;border:1px solid #d6d2ca;border-radius:.4rem;
    padding:.2rem .45rem;letter-spacing:.02em;line-height:1.4;white-space:nowrap;
  }

  /* 展开后的参谋面板（紧跟被点的那张卡） */
  .apanel{
    background:#fff;border:1.5px solid var(--grn-line);
    border-radius:var(--r-2);padding:16px 18px;box-shadow:var(--sh-1);
  }
  .ap-row{font-size:.8rem;font-weight:800;color:var(--grn);
          letter-spacing:.1em;margin-bottom:9px;}
  .ap-row+.ap-row{margin-top:16px;}
  .ap-copy{font-size:1rem;line-height:1.7;color:var(--ink);font-weight:500;}
  .ap-copy b{font-weight:800;color:var(--grn);}
  .ap-metrics{display:flex;flex-direction:column;gap:9px;}
  .ap-m{display:flex;align-items:flex-start;gap:11px;background:#F7FAF8;
        border:1px solid var(--grn-line);border-radius:var(--r-1);padding:11px 13px;}
  .ap-bar{width:4px;align-self:stretch;border-radius:2px;background:var(--grn-2);
          min-height:34px;flex-shrink:0;}
  .ap-mn{font-size:1rem;font-weight:800;color:var(--ink);line-height:1.4;}
  .ap-mw{font-size:.95rem;font-weight:600;color:var(--ink-2);margin-top:4px;line-height:1.6;}
  .ap-terms{display:flex;flex-wrap:wrap;gap:8px;}
  .ap-t{font-size:.95rem;font-weight:600;color:var(--ink);background:#fff;
        border:1px solid var(--line);border-radius:.55rem;padding:.42rem .6rem;}
  .ap-t i{font-style:normal;color:var(--ink-3);margin:0 4px;}
  .ap-t b{font-weight:800;color:var(--grn);}
  .ap-say{background:#F7FAF8;border:1.5px dashed var(--grn-line);border-radius:var(--r-1);
          padding:13px 14px;font-size:1rem;line-height:1.7;color:var(--ink);font-weight:600;}
  .ap-say b{font-weight:800;color:var(--grn);}

  /* ============================================================
     常驻输入框（底部固定）
     ============================================================ */
  .composer{
    position:fixed;left:50%;transform:translateX(-50%);
    bottom:calc(70px + env(safe-area-inset-bottom));
    width:100%;max-width:520px;padding:10px 16px;
    background:linear-gradient(180deg,rgba(238,236,231,0) 0%,var(--bg) 38%);
    z-index:28;
  }
  .cbox{
    display:flex;align-items:center;gap:10px;background:#fff;
    border:1.5px solid var(--line);border-radius:var(--r-2);padding:9px 11px 9px 15px;
    box-shadow:var(--sh-2);
  }
  .cbox input{
    flex:1;border:0;outline:0;font-family:inherit;font-size:1rem;
    font-weight:500;color:var(--ink);background:transparent;min-width:0;padding:8px 0;
  }
  .cbox input::placeholder{color:#54524b;}
  .cbox.rec{background:#e6f4ec;border-color:#1d9e75;}
  .cbox.rec input{color:#0f6e56;font-weight:600;}
  .cbox.rec input::placeholder{color:#0f6e56;}
  .send{
    width:3.12rem;height:3.12rem;border-radius:.72rem;border:0;flex-shrink:0;
    background:linear-gradient(145deg,#0f6e56,#1d9e75);color:#fff;
    font-size:1.15rem;font-weight:800;cursor:pointer;font-family:inherit;
    box-shadow:0 3px 10px rgba(15,110,86,.28),inset 0 1px 0 rgba(255,255,255,.22);
  }
  .send:disabled{background:#c9c5bc;box-shadow:none;cursor:not-allowed;}
  .plus{
    width:3.12rem;height:3.12rem;border-radius:.72rem;flex-shrink:0;
    border:1.5px solid var(--grn);background:#fff;color:var(--grn);
    font-size:1.5rem;font-weight:700;line-height:1;cursor:pointer;
    font-family:inherit;display:flex;align-items:center;justify-content:center;
  }

  /* ---------- 发图 / 发视频 ---------- */
  .attach{
    background:#fff;border:1.5px solid var(--line);border-radius:var(--r-2);
    padding:13px 15px;margin-bottom:9px;box-shadow:var(--sh-3);
  }
  .attach-h{font-size:1rem;font-weight:800;color:var(--ink);line-height:1.65;}
  .attach-h b{color:var(--grn);}
  .thumbs{display:flex;gap:10px;overflow-x:auto;padding:10px 0 3px;}
  .thumb{
    position:relative;flex-shrink:0;width:4.1rem;height:4.1rem;border-radius:.65rem;
    overflow:hidden;border:1.5px solid var(--line);background:#F4F2ED;
  }
  .thumb img{width:100%;height:100%;object-fit:cover;display:block;}
  .thumb .mv{width:100%;height:100%;display:flex;align-items:center;justify-content:center;
             flex-direction:column;gap:2px;background:#F4F2ED;}
  .thumb .mv s{text-decoration:none;font-size:1.7rem;line-height:1;color:var(--grn);font-weight:800;}
  .thumb .mv u{text-decoration:none;font-size:.8rem;color:var(--ink-2);font-weight:800;letter-spacing:.04em;}
  .thumb .del{
    position:absolute;top:-.5rem;right:-.5rem;width:2.44rem;height:2.44rem;border-radius:50%;
    border:2px solid #fff;background:var(--ink);color:#fff;
    font-size:1.1rem;font-weight:800;line-height:1;cursor:pointer;
    font-family:inherit;display:flex;align-items:center;justify-content:center;
    box-shadow:0 2px 7px rgba(0,0,0,.32);
  }
  /* 视频成本告知：数字打头 + 金额加粗，不靠颜色也能看懂 */
  .vnote{margin-top:11px;padding:14px 15px;border-radius:var(--r-1);
         background:#FAEEDA;border:1.5px solid #E9C46A;}
  .vnote-t{font-size:1rem;font-weight:800;color:#6B3F08;line-height:1.65;}
  .vnote-t em{font-style:normal;font-size:1.35rem;font-weight:800;color:#8a4b00;}
  .vnote-d{font-size:1rem;font-weight:700;color:#6B3F08;line-height:1.7;margin-top:6px;}
  .vnote-b{display:flex;gap:11px;margin-top:13px;}
  .vnote-b button{flex:1;min-height:56px;border-radius:var(--r-1);border:1.5px solid var(--grn);
                  font-family:inherit;font-size:1rem;font-weight:800;cursor:pointer;}
  .vnote-no{background:#fff;color:var(--grn);}
  .vnote-yes{background:linear-gradient(145deg,#0f6e56,#1d9e75);color:#fff;border-color:var(--grn) !important;}

  /* ============================================================
     底部 4 tab（图标 ≥24px，文字 ≥14px，高 ≥56px）
     ============================================================ */
  .tabs{
    position:fixed;left:50%;transform:translateX(-50%);bottom:0;
    width:100%;max-width:520px;display:flex;background:#fff;
    border-top:1.5px solid var(--line);z-index:29;
    box-shadow:0 -2px 14px rgba(28,25,20,.06);
    padding-bottom:env(safe-area-inset-bottom);
  }
  .tab{
    flex:1;position:relative;border:0;background:transparent;font-family:inherit;cursor:pointer;
    padding:11px 4px 9px;display:flex;flex-direction:column;align-items:center;gap:4px;
    font-size:.8rem;font-weight:800;color:var(--ink-2);min-height:56px;
  }
  .tab i{font-style:normal;font-size:1.35rem;line-height:1;font-weight:400;}
  .tab.on{color:var(--grn);}
  .tab .bdg{
    position:absolute;top:.3rem;left:50%;margin-left:.55rem;
    background:#E24B4A;color:#fff;font-size:.66rem;font-weight:800;
    border-radius:.55rem;padding:.06rem .32rem;min-width:1rem;text-align:center;line-height:1.5;
  }

  /* ---------- 空态 ---------- */
  .empty{margin:0 16px 20px;background:#fff;border:1.5px dashed var(--line);
         border-radius:var(--r-3);padding:24px 20px;text-align:center;}
  .empty-t{font-size:1.11rem;font-weight:800;color:var(--ink);line-height:1.6;}
  .empty-d{font-size:1rem;font-weight:500;color:var(--ink-2);margin-top:9px;line-height:1.7;}
  .empty-btn{display:block;width:100%;margin-top:16px;padding:16px;
    background:linear-gradient(145deg,#0f6e56,#1d9e75);color:#fff;border:0;border-radius:var(--r-1);
    font-family:inherit;font-size:1rem;font-weight:800;cursor:pointer;min-height:56px;
    box-shadow:0 4px 14px rgba(15,110,86,.26);}

  /* ---------- toast ---------- */
  #toast{
    position:fixed;left:50%;transform:translateX(-50%) translateY(14px);
    bottom:calc(158px + env(safe-area-inset-bottom));
    background:rgba(20,19,15,.95);color:#fff;font-size:.92rem;font-weight:700;
    padding:13px 19px;border-radius:var(--r-1);max-width:86%;text-align:center;
    opacity:0;pointer-events:none;transition:all .25s ease;z-index:60;line-height:1.6;
    box-shadow:0 8px 24px rgba(0,0,0,.28);
  }
  #toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

  /* ---------- 导出弹层（M2-10：图要能导出成文件，且不出链接） ---------- */
  .exmask{position:fixed;inset:0;background:rgba(20,19,15,.55);z-index:70;
          opacity:0;pointer-events:none;transition:opacity .22s ease;}
  .exmask.show{opacity:1;pointer-events:auto;}
  .exsheet{
    position:fixed;left:0;right:0;bottom:0;z-index:71;max-width:520px;margin:0 auto;
    background:var(--bg);border-radius:20px 20px 0 0;
    padding:20px 16px calc(20px + env(safe-area-inset-bottom));
    transform:translateY(102%);transition:transform .26s ease;
    box-shadow:0 -8px 30px rgba(28,25,20,.24);
    max-height:calc(100vh - 16px);max-height:calc(100dvh - 16px);
    overflow-y:auto;-webkit-overflow-scrolling:touch;
  }
  .exsheet.show{transform:translateY(0);}
  .ex-t{font-size:1.18rem;font-weight:800;color:var(--ink);}
  .ex-head{display:flex;align-items:center;justify-content:space-between;gap:12px;}
  .ex-x{
    width:56px;height:56px;flex-shrink:0;border:0;border-radius:var(--r-1);
    background:transparent;color:var(--ink-2);font-family:inherit;
    font-size:1.3rem;font-weight:800;line-height:1;cursor:pointer;
  }
  .ex-x:active{background:var(--line-2);}
  .ex-d{font-size:1rem;font-weight:600;color:var(--ink-2);line-height:1.7;margin-top:8px;}
  .ex-note{
    margin-top:14px;padding:12px 14px;border-radius:var(--r-1);
    background:#FAEEDA;border:1.5px solid #E9C46A;
    font-size:1rem;font-weight:700;color:#6B3F08;line-height:1.7;
  }
  .ex-btns{margin-top:16px;display:flex;flex-direction:column;gap:12px;}
  .ex-b{
    display:block;width:100%;min-height:60px;padding:13px 16px;text-align:left;
    background:#fff;border:1.5px solid var(--grn-line);border-radius:var(--r-1);
    font-family:inherit;cursor:pointer;
  }
  .ex-b b{display:block;font-size:1.05rem;font-weight:800;color:var(--grn);}
  .ex-b span{display:block;font-size:1rem;font-weight:600;color:var(--ink-2);margin-top:4px;line-height:1.6;}
  .ex-b:active{background:var(--grn-bg);}
  .ex-cancel{
    display:block;width:100%;min-height:56px;margin-top:12px;padding:13px;
    background:transparent;border:1.5px solid var(--line);border-radius:var(--r-1);
    color:var(--ink-2);font-family:inherit;font-size:1rem;font-weight:800;cursor:pointer;
  }

  .banknote{margin:0 16px 20px;padding:13px 15px;border-radius:var(--r-1);
    background:#FAEEDA;border:1.5px solid #E9C46A;
    font-size:1rem;font-weight:700;color:#6B3F08;line-height:1.7;}
  .banknote b{font-weight:800;}
  .hide{display:none !important;}

  /* ============================================================
     以下为「历史 / 交付 / 我的」三个 tab 的面板
     尺寸一律 rem（基准 18px）—— 关怀模式放大字号时布局不塌
     ============================================================ */
  .panel{display:none;}
  .panel.show{display:block;}

  .phead{margin:4px 16px 14px;}
  .ptitle{font-size:1.35rem;font-weight:800;color:var(--ink);line-height:1.3;letter-spacing:.01em;}
  .psub{font-size:1rem;font-weight:500;color:var(--ink-2);line-height:1.7;margin-top:6px;}

  .pnote{margin:0 16px 16px;padding:13px 15px;border-radius:var(--r-1);
    background:#FAEEDA;border:1.5px solid #E9C46A;
    font-size:1rem;font-weight:700;color:#6B3F08;line-height:1.7;}
  .pnote b{font-weight:800;color:#4E2E06;}

  .pcard{margin:0 16px 16px;background:#fff;border:1.5px solid var(--line);
         border-radius:var(--r-2);padding:16px;box-shadow:var(--sh-1);}
  .plabel{font-size:1rem;font-weight:800;color:var(--ink);line-height:1.6;margin-bottom:11px;}

  .btnrow{display:flex;flex-wrap:wrap;gap:11px;}
  .btnrow .abtn{flex:1 1 46%;}
  .abtn{
    border:1.5px solid var(--line);background:#fff;color:var(--ink);
    font-family:inherit;font-size:1rem;font-weight:800;
    border-radius:var(--r-1);padding:15px 13px;cursor:pointer;line-height:1.5;
    min-height:56px;display:flex;align-items:center;justify-content:center;gap:8px;text-align:center;
    box-shadow:var(--sh-1);
  }
  .abtn:active{transform:scale(.985);}
  .abtn.ghost{background:#F8F7F4;}
  .abtn.primary{background:linear-gradient(145deg,#0f6e56,#1d9e75);color:#fff;border-color:var(--grn);
                box-shadow:0 4px 14px rgba(15,110,86,.24);}
  .abtn.danger{color:#A32C2C;border-color:#EBB9B9;background:#FDF4F4;}

  /* ---------- 历史 tab：拍板记录 ---------- */
  .hrec{
    margin:0 16px 16px;background:#fff;border:1.5px solid var(--line);
    border-radius:var(--r-2);position:relative;overflow:hidden;box-shadow:var(--sh-1);
  }
  .hrec::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;
    background:linear-gradient(180deg,#0f6e56,#5DCAA5);}
  .hhead{display:flex;align-items:flex-start;gap:11px;
         padding:16px 16px 15px 20px;cursor:pointer;min-height:56px;}
  .hmeta{flex:1;min-width:0;}
  .hline1{display:flex;flex-wrap:wrap;align-items:center;gap:9px;margin-bottom:9px;}
  .hdate{font-size:1rem;font-weight:800;color:var(--ink-2);}
  .hwho{font-size:.95rem;font-weight:800;color:var(--grn);background:var(--grn-bg);
        border:1px solid var(--grn-line);border-radius:.5rem;padding:.14rem .5rem;}
  .hask{font-size:1.11rem;font-weight:800;color:var(--ink);line-height:1.6;}
  .hconcl{font-size:1.11rem;font-weight:800;color:#7A4E00;line-height:1.65;margin-top:8px;}
  .hstate{font-size:.95rem;font-weight:800;border-radius:.5rem;padding:.26rem .55rem;flex-shrink:0;
          border:1px solid transparent;}
  .hstate.st-adopted{background:#E9F5EE;color:#1E6B49;border-color:#bfe0cd;}
  .hstate.st-watch{background:#FAEEDA;color:#6B3F08;border-color:#f0dcb8;}
  .hstate.st-undone,.hstate.st-void{background:#F0EFEB;color:#4A4843;border-color:#d6d2ca;}
  .hchev{font-size:1.3rem;font-weight:800;color:#6f6c65;flex-shrink:0;line-height:1.6;
         transition:transform .18s ease,color .18s ease;}
  .hrec.open .hchev{color:var(--grn);transform:rotate(90deg);}
  .hbody{display:none;padding:15px 16px 17px 20px;border-top:1px solid var(--line-2);}
  .hrec.open .hbody{display:block;}
  .hrow{margin-bottom:15px;}
  .hrow:last-child{margin-bottom:0;}
  .hrow-t{font-size:.95rem;font-weight:800;color:var(--grn);letter-spacing:.1em;margin-bottom:7px;line-height:1.6;}
  .hrow-c{font-size:1rem;font-weight:500;color:var(--ink);line-height:1.75;}
  .hrow-c b{font-weight:800;color:var(--grn);}
  .hrow-c .hli{display:block;padding-left:1.1rem;text-indent:-1.1rem;margin-bottom:6px;}
  .hrow-c .hli:last-child{margin-bottom:0;}
  .hrisk{background:#FCEBEB;border:1.5px solid #EFC9C9;border-radius:var(--r-1);
         padding:13px 14px;font-size:1.11rem;font-weight:800;color:#791F1F;line-height:1.7;}
  .hrisk b{font-weight:800;}
  .hafter{background:#F4F2ED;border:1px solid var(--line-2);border-radius:var(--r-1);
          padding:13px 14px;font-size:1rem;font-weight:500;color:var(--ink);line-height:1.75;}
  .hafter b{font-weight:800;color:var(--gold-d);}
  .pempty{margin:0 16px 16px;background:#fff;border:1.5px dashed var(--line);
          border-radius:var(--r-2);padding:22px 18px;}
  .pempty-t{font-size:1.11rem;font-weight:800;color:var(--ink);line-height:1.6;}
  .pempty-d{font-size:1rem;font-weight:500;color:var(--ink-2);line-height:1.7;margin-top:9px;}

  /* ---------- 交付 tab：文件库（⛔ 绝不出现链接 / 路径 / 扫码入口） ---------- */
  .fcard{
    margin:0 16px 16px;background:#fff;border:1.5px solid var(--line);
    border-radius:var(--r-2);padding:16px 16px 16px 20px;position:relative;overflow:hidden;
    box-shadow:var(--sh-1);
  }
  .fcard::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;
    background:linear-gradient(180deg,#185FA5,#378ADD);}
  .fname{font-size:1.15rem;font-weight:800;color:var(--ink);line-height:1.55;}
  .fbdg{display:inline-block;font-size:.78rem;font-weight:800;border-radius:.45rem;
        padding:.2rem .5rem;border:1px solid transparent;margin-right:7px;vertical-align:middle;}
  .fbdg.doc{background:#EEF3FB;color:#1B4E86;border-color:#cfe0f2;}
  .fbdg.xls{background:#EAF6EE;color:#1E6B49;border-color:#bfe0cd;}
  .fbdg.ppt{background:#FDF0E8;color:#8E4E1B;border-color:#f0d3bd;}
  .fbdg.pdf{background:#FCEDED;color:#8E2A2A;border-color:#f0cfcf;}
  .fbdg.img{background:#F3EEFB;color:#5A3A8C;border-color:#ded0f2;}
  .fbdg.vid{background:#EEF6F9;color:#1F5F73;border-color:#c9e2ea;}
  .fmeta{font-size:1rem;font-weight:500;color:var(--ink-2);line-height:1.7;margin-top:10px;}
  .fmeta b{font-weight:800;color:var(--ink);}
  .fwho{font-size:.92rem;font-weight:800;color:var(--grn);background:var(--grn-bg);
        border:1px solid var(--grn-line);border-radius:.5rem;padding:.28rem .62rem;
        display:inline-block;margin-top:10px;}
  .facts{margin-top:14px;}
  .facts .abtn{flex:1 1 44%;font-size:1rem;}
  .fgone{font-size:1rem;font-weight:800;color:var(--ink-2);line-height:1.7;}

  /* 主题筛选行（≥60px 高，可横滑） */
  .fthemes{display:none;gap:10px;overflow-x:auto;padding:0 16px 15px;}
  .fthm{
    flex:0 0 auto;min-height:60px;padding:0 20px;display:flex;align-items:center;
    border:1.5px solid var(--line);background:#fff;border-radius:999px;
    color:var(--ink-2);font-family:inherit;font-size:1rem;font-weight:800;cursor:pointer;
  }
  .fthm.on{background:var(--grn-bg);border-color:var(--grn-line);color:var(--grn);}
  .fbdg.sample{background:#F1EFEA;color:var(--ink-2);border-color:var(--line);}
  .fbdg.sheet{background:#EAF6EE;color:#1E6B49;border-color:#bfe0cd;}
  .fbdg.deck{background:#FDF0E8;color:#8E4E1B;border-color:#f0d3bd;}
  .fbottom{margin:0 16px 16px;}
  .fbottom .abtn{width:100%;}

  /* ---------- M4 经营看板：五组指标卡 + 保本线与目标值对照 ---------- */
  .bnote{margin:0 0 14px;padding:13px 14px;border-radius:var(--r-1);
         background:#F4F2ED;border:1.5px solid var(--line-2);
         font-size:1rem;font-weight:600;color:var(--ink);line-height:1.7;}
  .bnote b{font-weight:800;color:#4E2E06;}
  .bgrid{display:flex;flex-direction:column;gap:12px;}
  .bcard{border:1.5px solid var(--line);border-radius:var(--r-1);background:#F8F7F4;
         padding:14px 14px 14px 20px;position:relative;overflow:hidden;}
  .bcard::before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;
                 background:linear-gradient(180deg,#0f6e56,#5DCAA5);}
  .bcard.nodata::before{background:linear-gradient(180deg,#8b8880,#c9c5bc);}
  .bcard-n{font-size:1.05rem;font-weight:800;color:var(--ink);line-height:1.65;}
  .bcard-v{font-size:1.9rem;font-weight:800;color:#0b5a46;line-height:1.3;margin-top:3px;}
  .bcard-v u{text-decoration:none;font-size:1.05rem;font-weight:800;color:var(--ink-2);margin-left:6px;}
  .bcard-nod{font-size:1.45rem;font-weight:800;color:#5f5d57;line-height:1.5;margin-top:3px;}
  .bcard-d{font-size:1rem;font-weight:500;color:var(--ink-2);line-height:1.7;margin-top:5px;}
  .bcard-asof{display:inline-block;margin-top:11px;font-size:1rem;font-weight:800;
              color:var(--ink-2);background:#EFEDE8;border:1px solid var(--line);
              border-radius:.5rem;padding:.22rem .6rem;}
  .bl-legend{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:5px;}
  .blg{display:inline-flex;align-items:center;gap:8px;font-size:1rem;font-weight:700;
       color:var(--ink-2);line-height:1.65;}
  .blg i{font-style:normal;flex-shrink:0;display:block;}
  .blg .sw-bar{width:1.7rem;height:.9rem;border-radius:.2rem;background:#1d9e75;}
  .blg .sw-base{width:3px;height:1.2rem;background:#7A4E00;}
  .blg .sw-goal{width:3px;height:1.2rem;
                background:repeating-linear-gradient(180deg,#4a4840 0 4px,transparent 4px 8px);}
  .brow{padding:15px 0 17px;border-bottom:1px solid var(--line-2);}
  .brow-h{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap;}
  .brow-n{font-size:1.05rem;font-weight:800;color:var(--ink);line-height:1.65;}
  .brow-v{font-size:1.05rem;font-weight:800;color:#0b5a46;line-height:1.65;}
  .btrack{position:relative;height:1.8rem;margin:14px 0 13px;border-radius:.35rem;
          background:#EFEDE8;border:1px solid var(--line);}
  .bfill{position:absolute;left:0;top:0;bottom:0;border-radius:.3rem;}
  .bfill.ok{background:#1d9e75;}
  .bfill.warn{background:#C8901B;}
  .bfill.bad{background:#A32C2C;}
  .btick{position:absolute;top:-5px;bottom:-5px;width:3px;margin-left:-1.5px;}
  .btick.base{background:#7A4E00;}
  .btick.goal{background:repeating-linear-gradient(180deg,#4a4840 0 4px,transparent 4px 8px);}
  .brow-s{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:3px;}
  .bst{display:inline-flex;align-items:center;gap:7px;font-size:1rem;font-weight:800;
       border-radius:.5rem;padding:.28rem .62rem;border:1.5px solid transparent;
       line-height:1.65;flex-shrink:0;}
  .bst.ok{background:#E4F2EA;color:#0F4E36;border-color:#bfe0cd;}
  .bst.warn{background:#FAEEDA;color:#6B3F08;border-color:#f0dcb8;}
  .bst.bad{background:#FCEBEB;color:#791F1F;border-color:#EFC9C9;}
  .brow-w{font-size:1rem;font-weight:600;color:var(--ink);line-height:1.7;flex:1;min-width:8rem;}

  /* ---------- 我的 tab ---------- */
  .mcur{font-size:1.15rem;font-weight:800;color:var(--grn);background:var(--grn-bg);
        border:1.5px solid var(--grn-line);border-radius:var(--r-1);padding:13px 14px;
        line-height:1.6;margin-bottom:12px;}
  .mcur i{font-style:normal;display:block;font-size:.95rem;font-weight:800;
          color:var(--ink-2);margin-bottom:4px;letter-spacing:.08em;}
  .mindu{display:flex;flex-direction:column;gap:11px;}
  .mindu button{
    border:1.5px solid var(--line);background:#F8F7F4;color:var(--ink);font-family:inherit;
    font-size:1.05rem;font-weight:800;border-radius:var(--r-1);padding:16px 15px;
    min-height:56px;text-align:left;cursor:pointer;line-height:1.6;
  }
  .mindu button .mi2{display:block;font-size:.95rem;font-weight:600;color:var(--ink-2);
                     margin-top:5px;line-height:1.65;}
  .mindu button.cur{border-color:var(--grn);border-width:2.5px;background:var(--grn-bg);}
  .mindu button.cur .mi2{color:var(--grn);font-weight:700;}
  .mnote{margin-top:13px;padding:13px 14px;border-radius:var(--r-1);
         background:#FAEEDA;border:1.5px solid #E9C46A;
         font-size:1rem;font-weight:700;color:#6B3F08;line-height:1.7;}
  .mnote b{font-weight:800;color:#4E2E06;}

  /* 关怀模式开关 */
  .srow{display:flex;align-items:center;gap:14px;min-height:56px;}
  .srow-txt{flex:1;min-width:0;}
  .srow-t{font-size:1.11rem;font-weight:800;color:var(--ink);line-height:1.55;}
  .srow-d{font-size:1rem;font-weight:500;color:var(--ink-2);line-height:1.7;margin-top:5px;}
  .srow-s{margin-top:10px;}
  .sw{flex-shrink:0;width:3.6rem;height:2.15rem;border-radius:1.1rem;border:2px solid #b8b4ab;
      background:#e8e5e0;position:relative;cursor:pointer;padding:0;font-family:inherit;
      transition:background .18s ease,border-color .18s ease;}
  .sw::after{content:"";position:absolute;top:.09rem;left:.09rem;width:1.55rem;height:1.55rem;
             border-radius:50%;background:#fff;border:1px solid #b8b4ab;
             transition:left .16s ease;box-shadow:0 1px 3px rgba(0,0,0,.18);}
  .sw[aria-checked="true"]{background:var(--grn);border-color:var(--grn);}
  .sw[aria-checked="true"]::after{left:1.62rem;border-color:var(--grn);}
  .swstate{font-size:.95rem;font-weight:800;border-radius:.5rem;padding:.24rem .55rem;flex-shrink:0;
           background:#F0EFEB;color:#4A4843;border:1px solid #d6d2ca;}
  .swstate.on{background:#E9F5EE;color:#1E6B49;border-color:#bfe0cd;}

  .kv{display:flex;align-items:flex-start;gap:12px;padding:11px 0;border-bottom:1px solid var(--line-2);}
  .kv:last-of-type{border-bottom:0;}
  .kv-k{font-size:1rem;font-weight:700;color:var(--ink-2);flex:0 0 6.4rem;line-height:1.7;}
  .kv-v{font-size:1.05rem;font-weight:800;color:var(--ink);line-height:1.7;flex:1;min-width:0;}
  .kv-v .ok{color:#1E6B49;font-weight:800;}
  .kv-v .warn{color:#6B3F08;font-weight:800;}

  .arole{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--line-2);}
  .arole:last-child{border-bottom:0;}
  .arole-i{flex-shrink:0;width:2.4rem;height:2.4rem;border-radius:50%;
           display:flex;align-items:center;justify-content:center;
           font-size:.95rem;font-weight:800;color:#fff;
           background:linear-gradient(145deg,#0f6e56,#1d9e75);
           box-shadow:0 2px 8px rgba(15,110,86,.24);}
  .arole-n{font-size:1.11rem;font-weight:800;color:var(--ink);line-height:1.55;}
  .arole-d{font-size:1rem;font-weight:500;color:var(--ink-2);line-height:1.7;margin-top:4px;}
  .arole-w{font-size:1rem;font-weight:600;color:var(--ink);line-height:1.7;margin-top:7px;
           background:#F7FAF8;border:1px solid var(--grn-line);border-radius:var(--r-1);padding:11px 12px;}
  .arole-w i{font-style:normal;font-weight:800;color:var(--grn);display:block;
             font-size:.85rem;letter-spacing:.08em;margin-bottom:4px;}

  /* ============================================================
     关怀模式：整体放大排版（不以年龄命名）
     ============================================================ */
  html.comfort{font-size:21px;}
  html.comfort body{line-height:1.75;}
  html.comfort .cbox input{font-size:1.05rem;}
  html.comfort .cbox{min-height:56px;}
  html.comfort .attach-h{font-size:1rem;}
  html.comfort .vnote-t{font-size:1.05rem;}
  html.comfort .vnote-d{font-size:.95rem;}
  html.comfort .acard{min-height:8rem;}

  /* ============================================================
     首次运行引导：填接口与密钥（P0）
     ------------------------------------------------------------
     产品里的参谋出厂是"空"的，没有地址和密钥就开不了口。
     第一次打开时整屏引导一次，填完当场测通，再放行进主界面。
     全程不问技术问题：选一下、贴一下、点一下。
     ⛔ 这里不放任何可点的链接、二维码；地址只出现在输入框里。
     ============================================================ */
  .su{position:fixed;inset:0;z-index:90;background:var(--bg);
      overflow-y:auto;-webkit-overflow-scrolling:touch;display:none;}
  .su.show{display:block;}
  .su-in{max-width:520px;margin:0 auto;
         padding:calc(20px + env(safe-area-inset-top)) 16px
                 calc(28px + env(safe-area-inset-bottom));}
  .su-brand{display:flex;align-items:flex-start;gap:11px;margin-bottom:16px;}
  .su-h{font-size:1.5rem;font-weight:800;color:var(--ink);line-height:1.35;}
  .su-sh{font-size:1rem;font-weight:500;color:var(--ink-2);line-height:1.7;margin-top:7px;}
  .su-step{display:inline-block;font-size:.9rem;font-weight:800;letter-spacing:.06em;
           color:#0F4E36;background:#E4F2EA;border:1.5px solid #bfe0cd;
           border-radius:.5rem;padding:.24rem .6rem;}
  .su-card{margin-top:15px;background:#fff;border:1.5px solid var(--line);
           border-radius:var(--r-2);padding:16px;box-shadow:var(--sh-1);}
  .su-label{font-size:1.11rem;font-weight:800;color:var(--ink);line-height:1.6;margin-top:9px;}
  .su-help{font-size:1rem;font-weight:500;color:var(--ink-2);line-height:1.7;margin-top:7px;}
  .su-picks{display:flex;flex-direction:column;gap:12px;margin-top:14px;}
  .su-pick{display:flex;align-items:center;gap:12px;width:100%;min-height:60px;
    padding:13px 15px;text-align:left;font-family:inherit;cursor:pointer;
    background:#F8F7F4;border:1.5px solid var(--line);border-radius:var(--r-1);color:var(--ink);}
  .su-pick.on{border-color:var(--grn);border-width:2.5px;background:var(--grn-bg);}
  .su-pick-n{flex:1;min-width:0;font-size:1.05rem;font-weight:800;line-height:1.5;}
  .su-pick-d{display:block;font-size:.95rem;font-weight:600;color:var(--ink-2);
             line-height:1.65;margin-top:5px;}
  .su-pick-m{flex-shrink:0;font-size:1rem;font-weight:800;color:var(--ink-2);}
  .su-pick.on .su-pick-m{color:var(--grn);}
  .su-f{margin-top:16px;}
  .su-fl{display:block;font-size:1.05rem;font-weight:800;color:var(--ink);line-height:1.6;}
  .su-fh{font-size:.95rem;font-weight:600;color:var(--ink-2);line-height:1.65;margin-top:5px;}
  .su-inp{display:block;width:100%;min-height:60px;margin-top:9px;
    padding:14px 15px;font-family:inherit;font-size:1.05rem;font-weight:600;
    color:var(--ink);background:#fff;border:2px solid var(--line);
    border-radius:var(--r-1);line-height:1.55;}
  /* 占位提示也要过 AAA：原来那支灰只有 5.24:1 */
  .su-inp::placeholder{color:#54524b;font-weight:500;}
  .su-inp:focus{border-color:var(--grn);outline:none;}
  .su-btn{display:block;width:100%;min-height:60px;margin-top:16px;padding:16px;
    background:linear-gradient(145deg,#0f6e56,#1d9e75);color:#fff;border:0;
    border-radius:var(--r-1);font-family:inherit;font-size:1.11rem;font-weight:800;
    cursor:pointer;line-height:1.5;box-shadow:0 4px 14px rgba(15,110,86,.26);}
  .su-btn:active{transform:scale(.985);}
  .su-btn.ghost{background:#fff;color:var(--ink);border:1.5px solid var(--line);
                box-shadow:var(--sh-1);font-size:1.05rem;}
  .su-btn[disabled]{opacity:.55;cursor:default;}
  .su-res{display:flex;gap:12px;align-items:flex-start;margin-top:16px;padding:14px 15px;
    border-radius:var(--r-1);border:1.5px solid #d6d2ca;background:#F0EFEB;
    font-size:1rem;font-weight:600;color:var(--ink);line-height:1.7;}
  .su-res-i{flex-shrink:0;width:1.9rem;height:1.9rem;border-radius:50%;
    display:flex;align-items:center;justify-content:center;
    font-size:1.05rem;font-weight:800;color:#fff;background:#6f6c65;}
  .su-res-t{display:block;font-size:1.05rem;font-weight:800;margin-bottom:4px;}
  .su-res.ok{background:#E9F5EE;border-color:#bfe0cd;}
  .su-res.ok .su-res-i{background:#0F4E36;}
  .su-res.ok .su-res-t{color:#0F4E36;}
  .su-res.bad{background:#FCEBEB;border-color:#EFC9C9;}
  .su-res.bad .su-res-i{background:#8C2626;}
  .su-res.bad .su-res-t{color:#791F1F;}
  .su-res.warn{background:#FAEEDA;border-color:#E9C46A;}
  .su-res.warn .su-res-i{background:#8A5A00;}
  .su-res.warn .su-res-t{color:#6B3F08;}
  .su-skip{display:block;width:100%;min-height:56px;margin-top:14px;padding:13px;
    background:transparent;border:1.5px solid var(--line);border-radius:var(--r-1);
    color:var(--ink-2);font-family:inherit;font-size:1rem;font-weight:800;cursor:pointer;}
  .su-note{margin-top:15px;padding:13px 15px;border-radius:var(--r-1);
    background:#FAEEDA;border:1.5px solid #E9C46A;
    font-size:1rem;font-weight:700;color:#6B3F08;line-height:1.7;}
  .su-note b{font-weight:800;color:#4E2E06;}

  /* ============================================================
     手机访问（P0-3 / A）
     ------------------------------------------------------------
     老板原话是「用户在手机上怎么查看」。答案就是这一块：
     一个开关 + 一个二维码 + 一串口令。手机不用装任何东西。
     ⚠ 这里的二维码是"本机服务入口"，不是交付物。
       交付物不许出链接/二维码（见 交付物形态-硬约束.md §1），两码事。
     ============================================================ */
  .mob-qr{display:flex;flex-direction:column;align-items:center;gap:11px;margin:2px 0 15px;}
  .mob-qrbox{background:#fff;padding:11px;border-radius:var(--r-2);
    border:2px solid var(--grn-line);box-shadow:var(--sh-2);}
  .mob-qrbox img{display:block;width:13rem;height:13rem;image-rendering:pixelated;}
  .mob-scanhint{font-size:1.05rem;font-weight:800;color:var(--grn);
    text-align:center;line-height:1.65;}

  .valbig{font-size:1.08rem;font-weight:800;color:var(--ink);word-break:break-all;
    background:#F8F7F4;border:1.5px solid var(--line);border-radius:var(--r-1);
    padding:13px 14px;line-height:1.62;}
  .valpw{font-family:ui-monospace,SFMono-Regular,Consolas,"Courier New",monospace;
    font-size:1.28rem;font-weight:800;letter-spacing:.16em;color:#0F4E36;
    background:#E9F5EE;border:1.5px solid #bfe0cd;border-radius:var(--r-1);
    padding:14px;text-align:center;word-break:break-all;line-height:1.6;}

  .steps{list-style:none;margin:12px 0 0;padding:0;}
  .steps li{position:relative;padding-left:2.65rem;margin-bottom:13px;
    font-size:1rem;font-weight:600;color:var(--ink);line-height:1.7;}
  .steps li:last-child{margin-bottom:0;}
  .steps li>b{font-weight:800;}
  .steps li::before{content:attr(data-n);position:absolute;left:0;top:.06rem;
    width:1.85rem;height:1.85rem;border-radius:50%;background:var(--grn);color:#fff;
    display:flex;align-items:center;justify-content:center;
    font-size:.9rem;font-weight:800;}

  /* ============================================================
     消息通道（P0-3 / B、C）：企业微信 / 个人微信
     ============================================================ */
  .fld{margin-bottom:13px;}
  .fld label{display:block;font-size:1rem;font-weight:800;color:var(--ink);
    margin-bottom:7px;line-height:1.6;}
  .fld input{width:100%;box-sizing:border-box;font-family:inherit;font-size:1.05rem;
    font-weight:600;color:var(--ink);background:#fff;border:1.5px solid var(--line);
    border-radius:var(--r-1);padding:14px;min-height:56px;line-height:1.5;}
  .fld input:focus{outline:none;border-color:var(--grn);
    box-shadow:0 0 0 3px rgba(29,158,117,.16);}
  .fld .fd{font-size:.95rem;font-weight:600;color:var(--ink-2);line-height:1.7;margin-top:6px;}

  .subblk{border-top:1px solid var(--line-2);padding-top:16px;margin-top:16px;}
  .subblk.first{border-top:0;padding-top:0;margin-top:0;}
  .subh{display:flex;align-items:center;gap:10px;}
  .subh .si{width:2.2rem;height:2.2rem;border-radius:.62rem;flex-shrink:0;
    display:flex;align-items:center;justify-content:center;font-size:1rem;
    color:#fff;background:linear-gradient(145deg,#0f6e56,#1d9e75);}
  .subh .sn{font-size:1.11rem;font-weight:800;color:var(--ink);line-height:1.5;}
  .subh .sst{font-size:.95rem;font-weight:800;border-radius:.5rem;padding:.22rem .55rem;
    background:#F0EFEB;color:#4A4843;border:1px solid #d6d2ca;flex-shrink:0;margin-left:auto;}
  .subh .sst.on{background:#E9F5EE;color:#1E6B49;border-color:#bfe0cd;}
  .subh .sst.warn{background:#FAEEDA;color:#6B3F08;border-color:#E9C46A;}

  /* 「等您点头的人」：门口那几位 */
  .prrow{padding:12px 0;border-bottom:1px solid var(--line-2);}
  .prrow:last-child{border-bottom:0;}
  .prwho{font-size:1.11rem;font-weight:800;color:var(--ink);line-height:1.6;}
  .prmeta{font-size:1rem;font-weight:700;color:var(--ink-2);line-height:1.6;margin-top:2px;}
  .prbtns{display:flex;gap:16px;margin-top:10px;}
  .prbtns .abtn{flex:1 1 0;}
  .prsec{font-size:1rem;font-weight:800;color:var(--ink-2);line-height:1.7;margin-top:18px;
    padding-top:14px;border-top:1px solid var(--line-2);}
  .prquiet{font-size:1rem;font-weight:600;color:var(--ink-2);line-height:1.7;padding:8px 0 2px;}

  .risknote{background:#FDF4F4;border:1.5px solid #EBB9B9;border-radius:var(--r-1);
    padding:13px 14px;font-size:1rem;font-weight:600;color:#791F1F;line-height:1.72;}
  .risknote b{font-weight:800;}
  .risknote ul{margin:9px 0 0;padding-left:1.25rem;}
  .risknote li{margin-bottom:5px;}

  .qrmini{display:block;box-sizing:content-box;width:11rem;height:11rem;
    margin:15px auto 0;image-rendering:pixelated;background:#fff;padding:9px;
    border-radius:var(--r-2);border:2px solid var(--grn-line);}
  .qrstate{text-align:center;font-size:1.05rem;font-weight:800;color:var(--ink);
    line-height:1.7;margin-top:12px;}
  .qrstate .s-ok{color:#1E6B49;}
  .qrstate .s-warn{color:#6B3F08;}

  /* 从首页点「设置」跳过来时，闪一下告诉老板看哪儿 */
  .flashcard{animation:flashcard 1.8s ease;}
  @keyframes flashcard{
    0%{box-shadow:0 0 0 0 rgba(29,158,117,.6);}
    35%{box-shadow:0 0 0 7px rgba(29,158,117,.26);}
    100%{box-shadow:var(--sh-1);}
  }
  @media (prefers-reduced-motion:reduce){ .flashcard{animation:none;} }

  /* 按钮组 = 手机顶栏第3行：flex-basis:100% 强制整行换行、左对齐（老板口径：
     按钮保留文字，不降级成纯图标）。桌面 ≥1024 块里还原成 flex:0 0 auto 回到单行右侧。 */
  .topright{display:flex;align-items:center;justify-content:flex-start;gap:10px;flex:1 1 100%;}
  .setbtn{flex-shrink:0;display:flex;align-items:center;gap:5px;
    border:1.5px solid var(--line);background:#fff;color:var(--ink);
    font-family:inherit;font-size:.85rem;font-weight:800;border-radius:.7rem;
    padding:.42rem .62rem;min-height:2.4rem;cursor:pointer;box-shadow:var(--sh-1);}
  .setbtn:active{transform:scale(.97);}
  .setbtn .sb-i{font-size:1.05rem;line-height:1;font-weight:400;}
  /* 极窄保险丝（原三条原样保留）。⛔ 断点从 379 压到 339：三行布局在 360+
     天然放得下（老板口径：360/390/430 一个都不藏），379 会误伤 360/375 主流窄机；
     只兜 320 级真正的极窄老机。关怀模式/大字被基础规则里的 ellipsis 保险丝兜住。 */
  @media (max-width:339px){
    .subtitle{display:none;}
    .setbtn .sb-t{display:none;}
    .topright{gap:7px;}
  }

  /* ======== 4.0 升级：档次感 ======== */
  .brand, .aname, .vx b, .grp-hd, .dashtitle, .sec-name{
    font-family:"Songti SC","STSong","Source Han Serif SC","Noto Serif SC",serif !important;
  }
  /* 军师结论区放大，够老板一行行读 */
  #verdict .vx{font-size:1.28rem;line-height:1.95;letter-spacing:.01em;}
  #verdict .vx > b{font-size:1.42rem;line-height:1.65;display:block;margin-bottom:6px;}
  /* 参谋卡上档次：微渐变 + 大圆角 */
  .acard{border-radius:18px;background:linear-gradient(180deg,#ffffff,#fbfaf6);
         border:1px solid var(--line);box-shadow:var(--sh-2);}
  .acard .aname{font-family:"Songti SC","STSong","Noto Serif SC",serif;letter-spacing:.02em;}
  /* 麦克风 */
  .micbtn{width:50px;height:50px;border:0;background:#e8f3ee;color:var(--grn);
          font-size:1.4rem;cursor:pointer;border-radius:50%;display:flex;align-items:center;
          justify-content:center;flex-shrink:0;box-shadow:var(--sh-1);transition:transform .12s;}
  .micbtn:active{transform:scale(.94);}
  .micbtn.rec{color:#e23b3b;background:#fdecec;animation:micpulse 1s infinite;}
  @keyframes micpulse{0%,100%{box-shadow:0 0 0 0 rgba(226,59,59,.35);}50%{box-shadow:0 0 0 8px rgba(226,59,59,0);}}
  /* 国产模型横排 */
  .modelbar{display:flex;gap:7px;overflow-x:auto;padding:11px 16px;scrollbar-width:none;}
  .modelbar::-webkit-scrollbar{display:none;}
  .modelchip{flex-shrink:0;font-size:.74rem;font-weight:700;padding:5px 11px;border-radius:999px;
             background:#fff;border:1px solid var(--line);color:var(--ink-2);white-space:nowrap;}
  .modelchip.mm{border-color:var(--gold-line);color:var(--gold-d);background:var(--gold-bg);}
  .modelbar-lbl{flex-shrink:0;align-self:center;font-size:.72rem;color:var(--ink-3);font-weight:700;margin-right:2px;}
  /* 文档缩略图 */
  .docthumb{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;
            justify-content:center;gap:3px;background:#f4efe2;color:#8a6d1f;font-size:.66rem;
            padding:5px;text-align:center;box-sizing:border-box;font-weight:700;line-height:1.3;}

  /* ======== 4.1 科技感 / 耐看：克制的质感提升 ======== */
  body{
    background:radial-gradient(1200px 600px at 50% -10%, #f3f1eb 0%, #eeece7 55%, #e9e6de 100%);
  }
  /* 输入框：更大圆角 + 立体阴影 */
  .cbox{
    border-radius:26px; box-shadow:0 6px 20px rgba(28,25,20,.10),0 1px 3px rgba(28,25,20,.06);
    border:1px solid #e2ded4;
  }
  /* 结论区卡片：顶部一条细金线，提升档次 */
  .concl{ position:relative; overflow:hidden; }
  .concl::before{
    content:''; position:absolute; top:0; left:0; right:0; height:3px;
    background:linear-gradient(90deg,var(--gold),transparent 70%);
  }
  /* 参谋卡：左侧细色条 + 更柔的过渡 */
  .acard{ position:relative; overflow:hidden; }
  .acard::before{
    content:''; position:absolute; left:0; top:0; bottom:0; width:4px;
    background:linear-gradient(180deg,var(--grn-2),var(--grn)); opacity:.85;
  }
  .acard.g2::before{ background:linear-gradient(180deg,#378ADD,#185FA5); }
  .acard.g3::before{ background:linear-gradient(180deg,#BA7517,#854F0B); }
  .acard.g4::before{ background:linear-gradient(180deg,#D4537E,#993556); }
  /* 驾驶舱：玻璃感 */
  .dash{ box-shadow:var(--sh-3); border:1px solid rgba(255,255,255,.08); }
  /* 发送键：渐变高光 */
  .send{ background:linear-gradient(145deg,#1d9e75,#0b5a46)!important; box-shadow:0 4px 12px rgba(15,110,86,.3); }
  /* tab 选中：微动 */
  .tab.on{ color:var(--grn); }

/* ============================================================
   D-4 手动上报面板
   ------------------------------------------------------------
   硬约束照旧：正文 ≥18px、热区 ≥44px、尺寸用 rem、颜色不作唯一信息手段。
   ⛔ 方向提示（越高越好／越低越好）必须显示 —— 六项里有两项是"越低越好"
      （客户集中度、关键人依赖度），不写清楚老板会填反，然后拿到一个错的等级。
   ============================================================ */
.rep-card{border-left:5px solid var(--grn-2);}
.rep-row{padding:14px 0;border-top:1px solid var(--line-2);}
.rep-row:first-of-type{border-top:none;}
.rep-h{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;}
.rep-h b{font-size:1.05rem;}
.rep-dir{font-size:.82rem;font-weight:700;color:var(--grn);background:var(--grn-bg);
  border:1px solid var(--grn-line);border-radius:999px;padding:2px 10px;}
.rep-hint{font-size:.88rem;color:var(--ink-2);line-height:1.65;margin:5px 0 9px;}
.rep-in{display:flex;align-items:center;gap:8px;}
.rep-v{flex:1;min-height:46px;font-size:1.05rem;padding:10px 12px;
  border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);}
.rep-v:focus{outline:3px solid var(--grn-2);outline-offset:1px;}
.rep-u{font-size:.9rem;color:var(--ink-2);min-width:3rem;}
.rep-conf{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:10px;}
.rep-c{display:inline-flex;align-items:center;gap:6px;min-height:44px;
  font-size:.95rem;cursor:pointer;}
.rep-c input{width:22px;height:22px;}
.rep-ch{font-size:.82rem;color:var(--ink-3);}
.rep-note{font-size:.88rem;line-height:1.7;color:var(--ink-2);background:#F4F2ED;
  border:1px solid var(--line-2);border-radius:10px;padding:10px 12px;margin:10px 0;}
.rep-err{font-size:.95rem;line-height:1.7;color:#7a1a1a;background:#FDF0F0;
  border:1px solid #E8C4C4;border-radius:10px;padding:11px 13px;margin-top:12px;}

/* ---------- 看板数字（五组指标卡 / 保本线对照）----------
   D-5 补的：之前老板**没有任何地方**能填看板数据，图永远出不来。
   全部用 rem + 最小 44px 触控高度（手机上也点得着）。 */
.rep-sec{margin-top:16px;padding-top:14px;border-top:1px dashed var(--line-2);}
.rep-sec-t{display:flex;align-items:center;gap:10px;flex-wrap:wrap;}
.rep-toggle{min-height:44px;padding:8px 14px;font-size:.95rem;font-weight:700;
  color:var(--grn);background:var(--grn-bg);border:1px solid var(--grn-2);
  border-radius:10px;cursor:pointer;font-family:inherit;}
.rep-sec-h{font-size:.84rem;color:var(--ink-3);}
.rep-bnote{font-size:.86rem;line-height:1.7;color:var(--ink-2);margin:9px 0 7px;}
.rep-bgrid{margin-bottom:6px;}
.rep-brow{display:flex;align-items:center;gap:8px;margin-bottom:8px;}
.rep-bin{min-height:46px;font-size:1rem;padding:10px 12px;box-sizing:border-box;
  border:1px solid var(--line-2);border-radius:10px;background:#fff;font-family:inherit;
  color:var(--ink);min-width:0;}
.rep-bin:focus{outline:3px solid var(--grn-2);outline-offset:1px;}
.rep-bn{flex:2 1 8rem;}
.rep-brow .rep-bin:not(.rep-bn){flex:1 1 5rem;}
.rep-bu{flex:0 1 4.5rem !important;color:var(--ink-2);}
.rep-shead{display:flex;gap:8px;font-size:.82rem;color:var(--ink-3);margin:10px 0 4px;}
.rep-shead span{flex:1 1 0;min-width:0;}
.rep-shead span:first-child{flex:1.4 1 0;}
.rep-shead span:last-child{flex:0 0 2.2rem;}
.rep-srow{display:flex;align-items:center;gap:8px;margin-bottom:8px;}
.rep-srow .rep-sin{flex:1 1 0;min-width:0;min-height:46px;font-size:1rem;padding:10px 10px;
  box-sizing:border-box;border:1px solid var(--line-2);border-radius:10px;background:#fff;
  font-family:inherit;color:var(--ink);}
.rep-srow .rep-sn{flex:1.4 1 0;}
.rep-srow .rep-sin:focus{outline:3px solid var(--grn-2);outline-offset:1px;}
.rep-sdel{flex:0 0 2.2rem;min-height:46px;font-size:1.1rem;line-height:1;
  color:#8a2b2b;background:#FDF0F0;border:1px solid #E8C4C4;border-radius:10px;
  cursor:pointer;font-family:inherit;}
@media (max-width:520px){
  .rep-shead{display:none;}
  .rep-srow{flex-wrap:wrap;}
  .rep-srow .rep-sin{flex:1 1 44%;}
  .rep-srow .rep-sn{flex:1 1 100%;}
}
/* ---------- F-1 多参谋会诊 ----------
   军师汇总置顶、参谋发言折叠在下面；全部 rem + 最小 44px 触控高度。 */
.cspk{border:1px solid var(--line-2);border-radius:12px;margin-bottom:8px;overflow:hidden;}
.cspk.open{border-color:var(--grn-2);background:var(--grn-bg);}
.cspk-h{width:100%;min-height:46px;display:flex;align-items:center;gap:10px;
  padding:11px 13px;background:#fff;border:0;cursor:pointer;font-family:inherit;
  font-size:.98rem;text-align:left;color:var(--ink);}
.cspk-h:hover{background:#F7F6F2;}
.cspk-n{font-weight:700;}
.cspk-t{flex:1;font-size:.82rem;color:var(--ink-3);}
.cspk-c{font-size:.82rem;color:var(--grn);}
.cspk-b{padding:0 13px 13px;font-size:.95rem;line-height:1.75;color:var(--ink-2);
  white-space:pre-wrap;}
.csum-adv{font-size:1.02rem;font-weight:600;line-height:1.7;color:var(--ink);
  background:var(--grn-bg);border:1px solid var(--grn-2);border-radius:12px;padding:12px 14px;}
.csum-sec{margin-top:12px;font-size:.95rem;line-height:1.7;}
.csum-t{font-size:.85rem;font-weight:700;color:var(--ink-3);margin-bottom:4px;}
.csum-sec ul{margin:0;padding-left:1.2rem;}
.csum-dis{border-left:4px solid #E8B84B;padding-left:10px;}
.csum-raw{white-space:pre-wrap;font-size:.95rem;line-height:1.75;color:var(--ink-2);
  background:#F4F2ED;border-radius:10px;padding:11px 13px;margin-top:8px;}

/* ---------- F-2 派参谋提示（只提示，不自动跑） ---------- */
.dhint{margin-top:10px;padding:11px 13px;border:1px solid var(--grn-2);border-radius:12px;
  background:var(--grn-bg);font-size:.95rem;line-height:1.7;color:var(--ink-2);}
.dhint .bdg{display:inline-block;margin-right:8px;padding:2px 8px;border-radius:8px;
  background:#fff;border:1px solid var(--grn-2);font-size:.82rem;color:var(--grn);font-weight:700;}

/* ---------- F-3 模型路由：回答下面那一行「本次用了哪个模型」 ---------- */
.routeline{margin-top:12px;padding-top:9px;border-top:1px dashed var(--line, #E4E0D8);
  font-size:.9rem;color:var(--ink-3);line-height:1.7;}
.routeline .rl-t{font-weight:600;}
.routeline .rl-b{margin-left:8px;border:none;background:none;color:var(--grn, #1E6B49);
  font-size:.88rem;cursor:pointer;padding:0 2px;text-decoration:underline;}
.routeline .rl-w{margin-top:6px;padding:8px 11px;border-radius:10px;background:#F4F2ED;
  color:var(--ink-2);font-size:.88rem;}

/* ---------- F-4 联网调研面板与来源站点 ---------- */
.rp{margin:8px 0 0;padding:12px 14px;border:1px solid var(--line,#E4E0D8);border-radius:14px;
  background:#FBFAF7;font-size:.95rem;}
.rp-t{font-weight:800;color:var(--ink);margin-bottom:6px;}
.rp-r{font-size:.88rem;line-height:1.7;color:var(--ink-3);margin-bottom:9px;}
.rp input{width:100%;box-sizing:border-box;margin:6px 0 8px;padding:9px 11px;
  border:1px solid var(--line,#E4E0D8);border-radius:10px;font-size:.95rem;background:#fff;}
.rp-sep{margin:12px 0 4px;font-size:.88rem;color:var(--ink-3);}
.rp .abtn{margin-top:2px;}
.rp-out{margin-top:11px;padding-top:9px;border-top:1px dashed var(--line,#E4E0D8);}
.rp-ok{color:#1E6B49;font-weight:600;}
.rp-bad{color:#8a2b2b;font-weight:600;}
.rp-small{margin-top:5px;font-size:.85rem;color:var(--ink-3);line-height:1.6;}
.rp-body{margin-top:8px;max-height:180px;overflow:auto;white-space:pre-wrap;
  background:#F4F2ED;border-radius:10px;padding:10px 12px;font-size:.9rem;line-height:1.7;
  color:var(--ink-2);}
.srcline{margin-top:12px;padding-top:9px;border-top:1px dashed var(--line,#E4E0D8);
  font-size:.9rem;color:var(--ink-2);line-height:1.7;}
.srcline .src-t{font-weight:700;color:var(--ink-3);font-size:.85rem;margin-bottom:4px;}
.srcline .src-i{word-break:break-all;}
.srcline a{color:var(--grn,#1E6B49);}
.srcline .src-n{margin-top:5px;font-size:.85rem;color:var(--ink-3);}
.srcline .src-w{margin-top:7px;padding:8px 10px;border-radius:10px;background:#FBF3E2;
  color:#6B3F08;font-size:.88rem;}

/* ---------- 知识库（老板上传的资料）：清单 + 回答里的"参照了哪一份" ----------
   ⛔ 回答下面那行复用 .srcline 的观感（同样的"依据"性质），但用 .kbline 单独一个类：
      两处的语义不同（一个是网上来源、一个是他自己上传的资料），将来要改样式不会互相牵连。 */
.kbline{margin-top:12px;padding-top:9px;border-top:1px dashed var(--line,#E4E0D8);
  font-size:.9rem;color:var(--ink-2);line-height:1.7;}
.kbline .src-t{font-weight:700;color:var(--ink-3);font-size:.85rem;margin-bottom:4px;}
.kbline .src-i{word-break:break-all;}
.kb-i{background:#fff;border:1.5px solid var(--line,#E4E0D8);border-radius:12px;
  padding:10px 12px;margin-top:8px;}
.kb-i .kb-n{font-weight:700;font-size:.98rem;word-break:break-all;}
.kb-i .kb-m{margin-top:4px;font-size:.85rem;color:var(--ink-3);}
.kb-i .kb-del{font-size:.88rem;}

/* ---------- F-7 视频档位与报价 ---------- */
.vprofile{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap;}
.vprofile .vpb{flex:1;min-width:110px;border:1.5px solid var(--line,#E4E0D8);background:#fff;
  border-radius:10px;padding:8px 10px;font-family:inherit;font-size:.92rem;cursor:pointer;
  color:var(--ink,#2b2a26);text-align:left;line-height:1.4;}
.vprofile .vpb s{display:block;text-decoration:none;font-size:.8rem;color:var(--ink-3,#6b6963);
  margin-top:2px;}
.vprofile .vpb.on{border-color:var(--grn,#1E6B49);background:#EAF5F0;font-weight:700;}
.vnote-b2{font-size:.82rem;color:var(--ink-3,#6b6963);}

/* ---------- G-4 数据同步卡片 ---------- */
#syncCard .kv-v{font-size:.98rem;}
#syncCard code{background:#F4F2ED;padding:1px 5px;border-radius:6px;font-size:.9rem;}
#syncDisclose{background:#FBF3E2;border-radius:10px;padding:9px 11px;color:#6B3F08;}

/* ============================================================
   G-6 管理台 + 桌面响应式
   ------------------------------------------------------------
   【口径】桌面不是"把手机界面拉宽"，而是另一套排版：
     左侧竖排导航 + 内容区限宽 + 卡片两列。
   ⛔ 但不能因此放宽无障碍底线：
     · 关怀模式（html.comfort）的字号放大仍然生效（下面不改 font-size，只改排布）；
     · 触控目标仍 ≥44px（tabs 与按钮的尺寸不动）；
     · 对比度不变（沿用原有颜色变量）。
   ============================================================ */
.cs-head{padding:12px 14px;margin-bottom:10px;background:#fff;border:1.5px solid var(--line);
  border-radius:var(--r-2);font-size:1rem;font-weight:600;color:var(--ink);}
.cs-small{font-weight:500;color:var(--ink-3);font-size:.9rem;}
.cs-grid{display:grid;grid-template-columns:1fr;gap:10px;}
.cs-card{background:#fff;border:1.5px solid var(--line);border-radius:var(--r-2);
  padding:12px 14px;box-shadow:var(--sh-1);}
.cs-t{font-weight:800;color:var(--ink);line-height:1.6;margin-bottom:5px;}
.cs-h{font-size:.98rem;color:var(--ink-2);line-height:1.7;}
.cs-hint{margin-top:6px;font-size:.9rem;color:#6B3F08;background:#FBF3E2;border-radius:9px;
  padding:7px 10px;line-height:1.6;}
.cs-bdg{display:inline-block;padding:1px 8px;border-radius:8px;font-size:.82rem;font-weight:700;
  vertical-align:middle;}
.cs-bdg.cs-ok{background:#EAF5F0;color:#1E6B49;border:1px solid #BFE0D2;}
.cs-bdg.cs-warn{background:#FBF3E2;color:#6B3F08;border:1px solid #EBD9AE;}
.cs-bdg.cs-off{background:#F4F2ED;color:#54524b;border:1px solid #E4E0D8;}
.cs-bdg.cs-unk{background:#F7E9E7;color:#8a2b2b;border:1px solid #E3CCC9;}

/* ---------- 桌面（≥1024px）：左侧竖排导航 + 宽内容 + 两列卡片 ---------- */
@media (min-width:1024px){
  /* ⛔ 必须把基础规则里的 `body{max-width:520px}` 一起解掉。
     只加 padding-left:220px 的话，body 还是 520px 宽（手机列），
     内容区只剩 520-220=300px —— 看着"侧栏搬到左边了"，
     实际上内容比手机还窄（实测 1280 屏下量到 300px）。
     这类"改了一半"的样式问题只有真浏览器量宽度才看得出来。 */
  body{max-width:none;padding-left:220px;}
  /* 顶部品牌栏（真实类名是 .top）收进内容区，不再横贯全宽。
     注意：.hdr / .wrap 这两个类名在页面里**根本不存在**（历史遗留），写它们是空转。 */
  .top{max-width:1080px;margin:0 auto;}
  /* 桌面还原手机三行顶栏 → 维持原单行观感：[品牌+副标题] …… [● 状态][按钮们]。
     ⛔ .st 已挪出 .topright、成了 .top 直接子元素——原来 st 是 topright 第一个孩子、
        靠 topright 的 gap:10px 与按钮隔开，这里用 margin-right:10px 把这 10px 补回来；
     ⛔ .topright 必须显式收回 flex:0 0 auto：基础规则是 flex:1 1 100%（手机第3行），
        不覆盖的话桌面按钮组会整行掉到第二行；
     ⛔ .brand 改回 flex:1 1 auto 撑开，把状态+按钮推到右端（顶替原 space-between 的活）。 */
  .brand{flex:1 1 auto;}
  .st{margin-left:0;margin-right:10px;}
  .topright{flex:0 0 auto;}
  /* 底部标签变左侧竖排导航。
     ⛔ 必须显式写 transform:none —— 基础规则里是 `left:50%;transform:translateX(-50%)`
        （手机底部居中的横排条）。只改 left 不改 transform，侧栏会被**左移半个宽度**、
        一半跑到屏幕外（实测：x=-110）。这种"改了却没生效/反而错位"的毛病，
        在真浏览器里一眼就看出来，光读 CSS 很容易漏。 */
  .tabs{position:fixed;left:0;top:0;bottom:auto;width:220px;height:100%;
    transform:none;max-width:none;
    display:flex;flex-direction:column;align-items:stretch;justify-content:flex-start;
    gap:6px;padding:18px 12px;border-top:0;border-right:1.5px solid var(--line);
    background:#fff;z-index:30;box-shadow:none;}
  .tab{justify-content:flex-start;text-align:left;min-height:48px;border-radius:12px;
    padding:0 14px;font-size:1.02rem;}
  .tab.on{background:var(--grn-bg,#EAF5F0);}
  /* 内容区限宽居中，长行不再一路拉到屏幕最右边 */
  .wrap,.panel{max-width:1080px;margin-left:auto;margin-right:auto;}
  .panel{padding:0 18px 120px;}
  /* 常驻输入框跟着内容区走（不再横贯全屏）。
     ⛔ 不能只写 left:calc(50% + 110px) + 保留 transform:translateX(-50%)：
     微宽屏（1024）下框宽 860 会往右溢出 28px、顶出横向滚动条。
     用 left/right + 左右 margin:auto 把自己居中在内容区，同时 width:auto。 */
  .composer{left:220px;right:0;width:auto;transform:none;
    margin-left:auto;margin-right:auto;max-width:860px;
    bottom:calc(14px + env(safe-area-inset-bottom));}
  /* 看板与管理台在宽屏下两列 */
  .cs-grid{grid-template-columns:1fr 1fr;}
  .dash-grid,.board-grid{grid-template-columns:1fr 1fr;}

  /* ---- P1 侧栏：把"竖排了但每项仍撑满整屏"的病根拔掉 ----
     ⛔ 必须显式改 flex 和 flex-direction，光靠上面那条 .tab 覆盖不够：
        基础规则是 `.tab{flex:1;flex-direction:column;align-items:center}`（手机底部横排——
        5 个 tab 平分**屏宽**、图标在上文字在下）。侧栏把 .tabs 改成列向后，
        flex:1 就从"平分屏宽"变成"平分**屏高**"：1080 高的屏每个 tab 约 200px，
        于是出现大片空隙，选中态 .tab.on 的背景也跟着变成一整块巨大色板。
        flex:0 0 auto 让每项按内容取高（配合已有 min-height:48px 仍 ≥44px 触控线），
        flex-direction:row 让图标回到文字左边，高亮块自然缩成一条正常尺寸的选中项。 */
  .tab{flex:0 0 auto;flex-direction:row;gap:12px;}
  /* 图标从手机的 1.35rem 收到 1.15rem：横排后图标与文字同一行，
     1.35rem 会把 48px 的行高顶得视觉拥挤，1.15rem 与 1.02rem 文字才配平。 */
  .tab i{font-size:1.15rem;}

  /* ---- P2 模型条：桌面永不横向裁切 ----
     基础规则是 `overflow-x:auto` + `scrollbar-width:none` + ::-webkit-scrollbar{display:none}
     ——手机上靠手指滑动看后面的 chip，看不到滚动条无所谓。
     ⛔ 桌面把滚动条藏了又只能滑，等于最后一个 chip 被右缘**静默切掉**（实测 1280 下），
        老板根本不知道右边还有内容。宽屏一行本来放得下，直接允许换行 + 取消溢出裁剪。
        （.modelchip 的 flex-shrink:0 / white-space:nowrap 不用动：wrap 之后它们整颗换行，不会被压扁。） */
  .modelbar{flex-wrap:wrap;overflow:visible;}

  /* ---- P3 「我的」页两列 ----
     #meBox 里是 JS 填的 ~23 张 .pcard 兄弟节点，单列排下来要滚十几屏。
     用 CSS 多列（column-count）而不是 grid：卡片高低不一，多列会自动填平两栏，
     且不必给 JS 加任何分组/配对逻辑。
     ⛔ break-inside:avoid 必须写——否则一张卡会被从中间劈开、上半截在左栏下半截在右栏。
     列内的卡不再需要基础的左右 16px margin（.panel 已有 18px padding，再留 16 就白窄一截），
     只留 18px 下间距对齐 column-gap。 */
  #meBox{column-count:2;column-gap:18px;}
  #meBox .pcard{break-inside:avoid;margin:0 0 18px;}

  /* ---- P4 稀疏页收口 ----
     「交付」「历史」两页只有寥寥几张 .pcard，跟着 .panel 拉到 1080（1440 下 1240）
     就是一条超宽扁卡，行长过百字、桌面显得空旷。限到 880px 把行长收回来。
     ⛔ 必须连 margin-left/right:auto 一起写：只写 max-width 的话卡片贴左，
        右边空出一条 ~160px 的白带，比不限宽还难看（顺带把基础的左右 16px margin
        让位给 auto——反正 880px 生效时容器一定比它宽得多，那 16px 已经不解决问题了）。 */
  #panel-deliver .pcard,#panel-history .pcard{max-width:880px;margin-left:auto;margin-right:auto;}
}
/* 更宽（≥1440px）：卡片三列，内容再放宽一点 */
@media (min-width:1440px){
  .wrap,.panel{max-width:1240px;}
  .cs-grid{grid-template-columns:1fr 1fr 1fr;}
}
.cs-note{margin-top:8px;font-size:.9rem;color:var(--ink-3);background:#F4F2ED;border-radius:9px;
  padding:7px 10px;line-height:1.6;}
