/* ===== 08-pipeline.css —— AI 办案流水线（源自原型 V2.10，行区间 632-746） ===== */
  /* ===== pipeline ===== */
  .pipeline{display:flex;gap:0;padding:6px 2px 16px;overflow-x:auto;}
  .stage{flex:none;width:152px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:14px;position:relative;}
  .stage + .stage{margin-left:28px;}
  .stage + .stage::before{content:"";position:absolute;left:-28px;top:28px;width:28px;height:2px;background:var(--border);}
  .stage-top{display:flex;align-items:center;gap:8px;margin-bottom:12px;}
  .stage-idx{width:26px;height:26px;border-radius:8px;background:var(--sidebar-grad);color:#F2D9A0;display:flex;align-items:center;justify-content:center;font:700 13px/1 var(--font-cn);flex:none;}
  .stage-name{font:700 13px/1.3 var(--font-cn);color:var(--text-strong);}
  .stage-steps{display:flex;flex-direction:column;gap:8px;}
  .step{display:flex;align-items:center;gap:7px;font:400 12px/1.2 var(--font-cn);color:var(--text-meta);}
  .step .dot{width:7px;height:7px;border-radius:50%;background:#CBD3DE;flex:none;}
  .step.done{color:var(--text-body);}
  .step.done .dot{background:#2E9E5B;}
  .step.active{color:var(--text-strong);font-weight:500;}
  .step.active .dot{background:var(--gold);animation:pulse 1.2s ease-in-out infinite;}
  @keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(201,162,74,.45);}50%{box-shadow:0 0 0 5px rgba(201,162,74,0);}}
  .pipeline-detail{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;}
  .pd-col{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:18px;}
  .pd-head{display:flex;align-items:center;gap:10px;font:700 15px/1.2 var(--font-cn);color:var(--text-strong);margin-bottom:12px;}
  .pd-num{width:24px;height:24px;border-radius:50%;background:#EDEFF4;color:var(--text-meta);display:flex;align-items:center;justify-content:center;font:700 13px/1 var(--font-cn);flex:none;}
  .pd-num.done{background:#E4F4EA;color:#2E9E5B;}
  .pd-num.active{background:var(--gold-tint);color:#A8821F;}
  .pd-body{font:400 13px/1.6 var(--font-cn);color:var(--text-body);}
  /* V2.26：AI 产出「数据来源」标注——标明本环节结论取自哪些模块的真实数据 */
  .pd-src{margin-top:10px;padding-top:9px;border-top:1px dashed #EDF0F5;font:400 11px/1.6 var(--font-cn);color:var(--text-meta);}
  .pd-src b{color:var(--navy-600);font-weight:600;}
  .pd-running{display:flex;align-items:center;gap:8px;font:500 13px/1.4 var(--font-cn);color:#A8821F;}
  .pd-spinner{width:14px;height:14px;border:2px solid #EAD9AE;border-top-color:var(--gold);border-radius:50%;animation:spin .8s linear infinite;flex:none;}
  @keyframes spin{to{transform:rotate(360deg);}}
  .pd-done-banner{
    display:flex;align-items:center;gap:12px;
    background:#E4F4EA;border:1px solid #CDEBD7;border-radius:12px;padding:16px 18px;
    font:500 14px/1.5 var(--font-cn);color:#256B45;
  }
  .pd-done-banner svg{width:22px;height:22px;stroke:#2E9E5B;flex:none;}

  /* evidence */
  .evidence-graph{width:100%;height:172px;display:block;}
  .timeline{display:flex;flex-direction:column;padding:4px 0;}
  .tl-item{display:flex;gap:12px;padding-bottom:18px;position:relative;}
  .tl-item:not(:last-child)::before{content:"";position:absolute;left:5px;top:14px;bottom:0;width:2px;background:var(--border);}
  .tl-dot{width:12px;height:12px;border-radius:50%;background:var(--gold);margin-top:3px;flex:none;z-index:1;}
  .tl-info{display:flex;flex-direction:column;gap:3px;}
  .tl-date{font:500 12px/1.3 var(--font-cn);color:var(--text-label);}
  .tl-text{font:500 13px/1.3 var(--font-cn);color:var(--text-body);}

  /* research */
  .search-hero{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:20px;display:flex;flex-direction:column;gap:14px;}
  .seg{display:inline-flex;background:#F1F3F8;border-radius:9px;padding:3px;gap:3px;width:fit-content;}
  .seg-btn{border:none;background:none;padding:7px 16px;border-radius:7px;cursor:pointer;font:500 13px/1 var(--font-cn);color:var(--text-label);}
  .seg-btn.active{background:var(--card);color:var(--text-strong);box-shadow:0 1px 3px rgba(13,26,51,.08);}
  .search-hero-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
  .search-hero-bar input{flex:1;min-width:220px;height:44px;border:1px solid var(--border);border-radius:10px;padding:0 14px;font:400 14px/1 var(--font-cn);color:var(--text-body);background:#fff;}
  .search-hero-bar input:focus{outline:none;border-color:var(--gold);}
  .search-meta{font:400 12px/1.4 var(--font-cn);color:var(--text-meta);}
  .result-list{transition:opacity .2s;}
  .result-list.loading{opacity:.45;pointer-events:none;}
  .result-item{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-card);box-shadow:var(--shadow-card);padding:16px 18px;margin-bottom:12px;}
  .result-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;}
  .result-title{font:700 14px/1.4 var(--font-cn);color:var(--text-strong);}
  .rel-score{font:500 12px/1 var(--font-cn);color:#A8821F;flex:none;}
  .rel-bar{height:5px;border-radius:3px;background:#EEF1F6;overflow:hidden;margin-bottom:10px;}
  .rel-bar span{display:block;height:100%;background:linear-gradient(90deg,#C9A24A,#E0BE6E);border-radius:3px;}
  .result-snippet{font:400 13px/1.6 var(--font-cn);color:var(--text-body);margin-bottom:8px;}
  .rel-list{font:400 12px/1.5 var(--font-cn);color:var(--text-meta);}
  .rel-list b{color:#2E5A86;font-weight:600;}

  /* V3.64：「我能做什么」两张静态角色卡（.role-grid / .role-pill / .role-name /
     .role-desc）随区块下线，样式一并移除（无使用者）。
     理由：V3.63 协作机制整体停用后「协办」档已无实指，且这两张卡只读不可操作。 */
  /* V3.41：文书导出审批随个人中心下线，审批行与通过/驳回按钮样式移除。
     .app-meta 仍被法官侧写 / 材料库 / 表单标签共用，保留。 */
  .app-meta{font:400 12px/1.4 var(--font-cn);color:var(--text-meta);}

  /* V3.64：「登录设备管理」列表（.device-item / .device-icon / .device-info /
     .device-name / .device-meta）随区块下线，样式与 renderDevices 渲染函数一并移除。
     列表本就是 DEMO_DEVICES 演示数据，服务端无真实设备台账、也无撤销会话能力。 */

  /* settings */
  /* V3.93 现行版式：设置中心整体左右平分两栏（由 17-wxpay-settings.css 用
     #page-settings 高特异性覆盖本文件的单列基线）——
       左列自上而下：身份与授权 / 选购 · 续期；右列：安全与留痕。
     身份与授权组内的「身份」「授权时效」两块改为**上下堆叠**（单列），
     V3.64 曾是 1fr 1fr 横向并排，V3.93 按用户要求改回纵向；
     分组标题用 grid-column:1/-1 独占一行，不会挤进某一块里。 */
  .settings-grid{display:grid;grid-template-columns:1fr;gap:20px;align-items:start;}
  .settings-col{display:flex;flex-direction:column;gap:16px;min-width:0;}
  #page-settings .settings-col-identity{display:grid;grid-template-columns:1fr;gap:16px;align-items:start;}
  #page-settings .settings-col-identity > .settings-group-title{grid-column:1/-1;}
  #page-settings .settings-col-identity > section{min-width:0;}
  /* 栏内区块占满整栏（父级已是 flex 列，不再需要 grid 的跨列语义） */
  .settings-col > .span-2{grid-column:auto;width:100%;min-width:0;}
  /* V3.40：设置中心重组为「账号配置入口」，内容按分区组织。
     V3.93：安全与留痕位于右栏（半屏宽），操作日志宽表在
     17-wxpay-settings.css 里按窄列重排；下面两条是全宽/窄屏基线。 */
  .settings-col .grid-team{grid-template-columns:minmax(0,1fr) 84px 76px 76px 92px;min-width:460px;}
  .settings-col .grid-log{grid-template-columns:140px 110px 120px minmax(0,1fr) 90px;min-width:760px;}
  /* 表格单元格过长时截断，避免出现横向滚动条 */
  .settings-col .table-row > span,
  .settings-col .table-head > span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .settings-group-title{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;}
  .settings-group-title .sgt-main{
    font:700 15px/1.2 var(--font-cn);color:var(--text-strong);
    display:inline-flex;align-items:center;gap:8px;flex:none;
  }
  .settings-group-title .sgt-main::before{
    content:'';width:3px;height:14px;border-radius:2px;background:var(--gold);flex:none;
  }
  .settings-group-title .sgt-sub{font:400 12px/1.5 var(--font-cn);color:var(--text-meta);min-width:0;}
  /* V3.41：留痕范围说明卡随「审计与安全」下线。 */
  /* V3.64：「我能做什么」两档角色卡下线，其「设置中心内改单列竖排」的规则一并移除。 */
  /* 授权到期块（自「授权与用量」迁入）：日期是主角，故用大号数字而非普通行 */
  .expire-block{display:flex;flex-direction:column;gap:6px;}
  .expire-block .expire-date{
    font:700 28px/1.1 var(--font-num);color:var(--text-strong);
    font-variant-numeric:tabular-nums;letter-spacing:.5px;
  }
  .expire-block .expire-sub{font:500 12.5px/1.5 var(--font-cn);color:var(--text-label);}
  .model-cards{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:4px;}
  .model-card{border:1px solid var(--border);border-radius:10px;padding:14px;cursor:pointer;background:#fff;transition:border-color .15s,background .15s;}
  .model-card.active{border-color:var(--gold);background:var(--gold-tint);}
  .mc-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;}
  .mc-name{font:700 15px/1 var(--font-cn);color:var(--text-strong);}
  .mc-desc{font:400 12px/1.5 var(--font-cn);color:var(--text-meta);}
  .tpl-row{display:flex;align-items:center;justify-content:space-between;min-height:46px;}
  .tpl-row + .tpl-row{border-top:1px solid #F2F3F7;}
  .tpl-l{display:flex;flex-direction:column;gap:2px;}
  .tpl-name2{font:500 13px/1.3 var(--font-cn);color:var(--text-body);}
  .tpl-cnt{font:400 12px/1.4 var(--font-cn);color:var(--text-meta);}
  .switch-row{display:flex;align-items:center;justify-content:space-between;min-height:46px;}
  .switch-row + .switch-row{border-top:1px solid #F2F3F7;}
  .sr-label{font:500 13px/1.3 var(--font-cn);color:var(--text-body);}
  .switch{width:40px;height:22px;border-radius:11px;background:#CBD3DE;position:relative;flex:none;cursor:pointer;transition:background .15s;}
  .switch.on{background:#2E9E5B;}
  .switch::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;transition:left .15s;}
  .switch.on::after{left:20px;}
  /* V3.61：.api-key 样式随「API 密钥（开发者）」卡片下线而移除（无使用者）。 */
  .data-mgmt-actions{display:flex;gap:10px;flex-wrap:wrap;}
  .session-row{display:flex;align-items:center;gap:12px;background:#F6F8FB;border:1px solid var(--border);border-radius:10px;padding:14px;}
  .session-row .si{flex:1;min-width:0;}
  .session-row .si .n{font:600 14px/1.3 var(--font-cn);color:var(--text-strong);}
  .session-row .si .r{font:400 12px/1.4 var(--font-cn);color:var(--text-meta);margin-top:2px;}

