/* 保险展示卡 CVIZ 版面样式（提取自保险展示卡库.html）*/
/* ---- CVIZ 版面样式（单文件内联） ---- */
.cvzUnit{display:inline-block;font-size:11px;color:#BFBFBF;background:#FAFAFA;border-radius:4px;padding:2px 7px;margin-bottom:6px}
.cvzLegend{display:flex;flex-wrap:wrap;gap:6px 14px;margin:8px 0 2px}
.cvzLegend .lg{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#595959}
.cvzLegend .lg i{width:9px;height:9px;border-radius:3px;display:inline-block;flex:none}
.cvzLegend .lg b{color:#0958D9;font-variant-numeric:tabular-nums}
.cvzTip{
  margin-top:10px;min-height:40px;padding:9px 11px;border-radius:4px;background:#FAFAFA;
  border:1px solid #F0F0F0;font-size:12.5px;color:#595959;line-height:1.8;display:flex;flex-wrap:wrap;gap:4px 16px;align-items:baseline;
}
.cvzTip b{color:#141414;font-size:13px;margin-right:2px}
.cvzTip span{display:inline-flex;align-items:center;gap:5px;color:#595959}
.cvzTip span i{width:8px;height:8px;border-radius:2px;flex:none}
.cvzTip span b{color:#0958D9;font-variant-numeric:tabular-nums;font-size:13px}
.cvzTip>span:only-of-type{color:#8C8C8C}
.cvzHit{fill:transparent}

/* 四象限 */
.cvzQuad{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.cvzQuad .qCell{
  display:flex;flex-direction:column;gap:3px;align-items:flex-start;text-align:left;padding:14px 13px;border-radius:8px;
  border:1px solid #F0F0F0;background:#fff;cursor:pointer;transition:.16s;
}
.cvzQuad .qCell:hover{border-color:#91CAFF;box-shadow:0 4px 14px rgba(22,119,255,.10)}
.cvzQuad .qCell.on{border-color:#1677FF;background:linear-gradient(180deg,#F0F7FF,#E6F4FF);box-shadow:0 6px 18px rgba(22,119,255,.14)}
.cvzQuad .qn{font-size:11.5px;color:#8C8C8C;letter-spacing:.3px}
.cvzQuad .qa{font-size:14.5px;font-weight:800;color:#0958D9;line-height:1.4}
.cvzQDesc{
  margin-top:10px;padding:11px 13px;border-radius:4px;background:#FFFBE6;border:1px solid #FFE58F;
  font-size:13px;color:#873800;line-height:1.8;min-height:46px;
}

/* 状态切换 */
.cvzStates{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:2px}
.cvzStates .sbtn{
  padding:6px 14px;border-radius:999px;border:1px solid #E6F4FF;background:#fff;font-size:12.5px;color:#595959;cursor:pointer;
}
.cvzStates .sbtn.on{background:#1677FF;border-color:#1677FF;color:#fff;font-weight:500}

/* 步骤 */
.cvzSteps{list-style:none;margin:4px 0 0;padding:0}
.cvzSteps li{display:flex;gap:12px;align-items:flex-start;padding:10px 12px;border-radius:4px;cursor:pointer;transition:.15s;border:1px solid transparent}
.cvzSteps li:hover{background:#FAFAFA}
.cvzSteps li.on{background:linear-gradient(180deg,#F0F7FF,#E6F4FF);border-color:#BAE0FF}
.cvzSteps .no{
  flex:none;width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:#F0F0F0;color:#8C8C8C;font-size:12.5px;font-weight:800;margin-top:1px;
}
.cvzSteps li.on .no{background:#1677FF;color:#fff}
.cvzSteps li b{display:block;font-size:13.5px;color:#141414}
.cvzSteps li em{display:block;font-style:normal;font-size:12.5px;color:#8C8C8C;line-height:1.75;margin-top:2px}

/* 时间轴 */
.cvzTl{margin-top:6px;padding-left:4px}
.cvzTl .tlRow{position:relative;padding:0 0 14px 22px;cursor:pointer}
.cvzTl .tlRow::before{content:'';position:absolute;left:5px;top:16px;bottom:-2px;width:2px;background:#F0F0F0}
.cvzTl .tlRow:last-child::before{display:none}
.cvzTl .dot{position:absolute;left:0;top:5px;width:12px;height:12px;border-radius:50%;background:#fff;border:2.5px solid #91CAFF}
.cvzTl .tlRow.on .dot{border-color:#1677FF;box-shadow:0 0 0 4px rgba(22,119,255,.14)}
.cvzTl .when{display:inline-block;font-size:11px;color:#8C8C8C;background:#FAFAFA;border-radius:4px;padding:1px 8px}
.cvzTl .tbody b{display:block;font-size:13.5px;margin-top:4px}
.cvzTl .tbody em{display:block;font-style:normal;font-size:12.5px;color:#8C8C8C;line-height:1.75;margin-top:2px}
.cvzTl .tlRow.on .tbody b{color:#0958D9}

/* 结构树 */
.cvzTree{font-size:13px;margin-top:4px}
.cvzTree .nd{position:relative;padding:8px 10px 8px 14px;border-radius:4px}
.cvzTree .root{background:linear-gradient(180deg,#F0F7FF,#E6F4FF);border:1px solid #BAE0FF;margin-bottom:8px}
.cvzTree ul{list-style:none;margin:0;padding:0 0 0 20px}
.cvzTree ul.lv2{display:none;padding-left:16px}
.cvzTree .has.open>ul.lv2{display:block}
.cvzTree .nd>ul>li{margin-top:6px}
.cvzTree .tg{
  display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;border-radius:5px;
  background:#F0F0F0;color:#595959;font-size:11px;font-weight:800;margin-right:7px;flex:none;
}
.cvzTree .has>.tg{cursor:pointer;background:#1677FF;color:#fff}
.cvzTree .b, .cvzTree b{font-weight:700;color:#141414}
.cvzTree em{font-style:normal;color:#8C8C8C;font-size:12.5px;margin-left:8px}
.cvzTree li.nd{border:1px solid #FAFAFA;background:#fff}

/* 翻牌 */
.cvzFlips{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:11px;margin-top:4px}
.cvzFlips .fcard{perspective:900px;height:104px;cursor:pointer}
.cvzFlips .fin{position:relative;width:100%;height:100%;transition:transform .5s cubic-bezier(.3,.8,.3,1);transform-style:preserve-3d}
.cvzFlips .fcard.flip .fin{transform:rotateY(180deg)}
.cvzFlips .face{
  position:absolute;inset:0;backface-visibility:hidden;border-radius:8px;padding:12px 13px;
  display:flex;flex-direction:column;justify-content:center;gap:5px;text-align:center;
}
.cvzFlips .front{background:linear-gradient(160deg,#1677FF,#69B1FF);color:#fff;box-shadow:0 8px 20px rgba(22,119,255,.22)}
.cvzFlips .front b{font-size:14px;line-height:1.5}
.cvzFlips .front .hint{font-size:11px;opacity:.75}
.cvzFlips .back{
  background:#FFFBEB;border:1px solid #FFE58F;color:#873800;transform:rotateY(180deg);
}
.cvzFlips .back b{font-size:13px;line-height:1.6}
.cvzFlips .back em{font-style:normal;font-size:11.5px;color:#874D00;line-height:1.6}

/* 对比表 */
.cvzTbWrap{overflow-x:auto;margin-top:4px;-webkit-overflow-scrolling:touch}
table.cvzTb{width:100%;min-width:420px;border-collapse:separate;border-spacing:0;font-size:12.5px}
table.cvzTb th,table.cvzTb td{padding:10px 12px;border-bottom:1px solid #FAFAFA;text-align:left;vertical-align:top}
table.cvzTb thead th{background:#FAFAFA;color:#434343;font-size:12px;font-weight:700;border-bottom:1px solid #F0F0F0;white-space:nowrap}
table.cvzTb thead th:first-child{border-radius:10px 0 0 0}
table.cvzTb thead th:last-child{border-radius:0 10px 0 0}
table.cvzTb td.k,table.cvzTb th.k{font-weight:700;color:#141414;width:32%;background:#FAFAFA}
table.cvzTb tr.hi td{background:#F0F7FF}
table.cvzTb tr:last-child td{border-bottom:0}

/* 数字卡 */
.cvzMetrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:11px;margin-top:4px}
.cvzMetrics .mcell{
  border:1px solid #FAFAFA;border-radius:8px;padding:13px 14px;background:linear-gradient(180deg,#FAFAFA,#FAFAFA);
  box-shadow:0 1px 2px rgba(0,0,0,.03);
}
.cvzMetrics .mn{font-size:11.5px;color:#8C8C8C;letter-spacing:.3px}
.cvzMetrics .mv{font-size:29px;font-weight:800;color:#0958D9;letter-spacing:-.8px;font-variant-numeric:tabular-nums;line-height:1.25}
.cvzMetrics .mu{font-size:11.5px;color:#BFBFBF;margin-top:-2px}
.cvzMetrics .md{font-size:12px;color:#8C8C8C;line-height:1.7;margin-top:6px}

/* 权益/债券占比条 */
.cvzSplit{display:flex;height:44px;border-radius:4px;overflow:hidden;margin-top:12px;border:1px solid #F0F0F0}
.cvzSplit .sp{
  display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:700;transition:flex .25s ease;min-width:0;white-space:nowrap;
}
.cvzSplit .sp span{padding:0 8px;overflow:hidden;text-overflow:ellipsis}
.cvzSplit .sp{min-width:118px}
.cvzSplit .sp.eq{background:linear-gradient(180deg,#1677FF,#0958D9);color:#fff;flex:65}
.cvzSplit .sp.bd{background:#F6FFED;color:#389E0D;flex:35}

/* 胜率点阵 */
.cvzDots{display:flex;flex-wrap:wrap;gap:4px;margin:10px 0 0}
.cvzDots i{width:9px;height:9px;border-radius:2px;display:block}
.cvzDots i.win{background:#CF1322}
.cvzDots i.lose{background:#B7EB8F}

.cvzNote{
  margin-top:12px;padding:10px 12px;border-radius:4px;background:#FFFBE6;border:1px solid #FFE58F;
  font-size:12.5px;color:#873800;line-height:1.8;
}
.cvzNote b{color:#AD4E00}

@media (max-width:640px){
  .cvzQuad{grid-template-columns:1fr}
  .cvzFlips{grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
  .cvzMetrics{grid-template-columns:repeat(2,1fr)}
  .cvzMetrics .mv{font-size:25px}
  .cvzLegend{gap:4px 10px}
}

/* ---------- 卡片内部排版（自基金版工作台提取，保持一致） ---------- */
/* 卡片内部通用排版 */
.cardwrap{font-size:14px}
.cardwrap h4{margin:0 0 4px;font-size:15px}
.cardwrap .sub{color:var(--mut);font-size:12px}
.crow{display:flex;gap:12px;flex-wrap:wrap}
.kbox{flex:1;min-width:96px;background:#FAFAFA;border:1px solid var(--line2);border-radius:4px;padding:8px 10px}
.kbox .l{font-size:11.5px;color:var(--mut)}
.kbox .v{font-size:18px;font-weight:700}
.sliderrow{display:flex;align-items:center;gap:10px;margin:8px 0}
.sliderrow label{width:76px;font-size:12.5px;color:var(--sub);flex:none}
.sliderrow input[type=range]{flex:1;height:28px}
.sliderrow .val{width:64px;text-align:right;font-weight:700;font-size:14px;flex:none}
/* 卡片内部排版微调 */
.cardwrap h4{font-size:15.5px;letter-spacing:.2px}
.cardwrap .sub{font-size:12px}
.kbox{background:#FAFAFA;border-radius:4px;padding:9px 11px}
.kbox .v{font-size:19px}
.sliderrow input[type=range]{accent-color:var(--brand)}
.cardwrap h4{margin-bottom:2px}
.cardwrap{
  position:relative;background:#fff;border:1px solid #F0F0F0;border-radius:8px;
  padding:22px 24px 18px;box-shadow:0 1px 2px rgba(0,0,0,.04),0 14px 34px rgba(0,0,0,.07);
}
.cardwrap::before{
  content:'';position:absolute;left:24px;right:24px;top:-1px;height:3px;border-radius:3px;
  background:linear-gradient(90deg,#0958D9,#1677FF 55%,#69B1FF);
}
.cardwrap h4{font-size:17px;margin:4px 0 3px;letter-spacing:.2px}
.cardwrap .sub{font-size:12.5px;color:#8C8C8C;line-height:1.7}
.cardwrap svg{
  background:#FAFAFA;border:1px solid #F0F0F0;border-radius:8px;
  padding:8px 10px;margin-top:10px;
}
.hero .ring svg{background:none;border:0;padding:0;margin:0;border-radius:0}
.sliderrow{margin:14px 0 0;gap:12px;align-items:center}
.sliderrow label{width:84px;font-size:12.5px;color:#8C8C8C;letter-spacing:.2px}
.sliderrow .val{
  width:auto;min-width:58px;text-align:center;font-weight:600;font-size:13.5px;padding:3px 10px;
  border-radius:4px;background:#E6F4FF;border:1px solid #BAE0FF;color:#0958D9;flex:none;font-variant-numeric:tabular-nums;
}
.kbox{border:1px solid #F0F0F0;background:#fff;box-shadow:none;border-radius:4px}
.kbox .v{font-size:17px;font-variant-numeric:tabular-nums}
/* 结果主视觉 */
.hero{
  display:flex;align-items:center;gap:18px;margin-top:16px;padding:16px 18px;border-radius:8px;
  background:#F0F7FF;border:1px solid #BAE0FF;
}
.hero .hl{flex:1;min-width:0}
.hero .hl .lab{font-size:12px;color:#595959;letter-spacing:.4px}
.hero .hl .num{
  font-size:38px;font-weight:700;letter-spacing:-.6px;line-height:1.15;
  font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
}
.hero .hl .verdict{font-size:12.5px;font-weight:600;padding:3px 10px;border-radius:4px;letter-spacing:.3px}
.hero .hl .pl{font-size:12.5px;color:#8C8C8C;margin-top:8px;line-height:1.7}
.hero .hl .pl b{color:#0958D9;font-variant-numeric:tabular-nums}
.hero .ring{flex:none;display:flex;align-items:center;justify-content:center}
/* ---- CVIZ 版面样式（单文件内联） ---- */
.cvzUnit{display:inline-block;font-size:11px;color:#BFBFBF;background:#FAFAFA;border-radius:4px;padding:2px 7px;margin-bottom:6px}

/* ---- 模拟化引擎：情景切换 / 场景表 / 模拟视图 ---- */
.cvzSim{margin-top:4px}
.cvzTabs{display:flex;flex-wrap:wrap;gap:7px;margin:10px 0 12px}
.cvzTab{
  font:inherit;font-size:12.5px;font-weight:600;color:#595959;cursor:pointer;
  padding:7px 13px;border-radius:4px;border:1px solid #F0F0F0;background:#fff;transition:.15s;
}
.cvzTab:hover{border-color:#91CAFF;color:#0958D9}
.cvzTab.on{background:linear-gradient(180deg,#F0F7FF,#E6F4FF);border-color:#1677FF;color:#0958D9;box-shadow:0 3px 10px rgba(22,119,255,.13)}
.cvzTbl{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:2px}
.cvzTbl th{
  text-align:left;font-weight:700;color:#0958D9;background:#F0F7FF;padding:9px 10px;
  border-bottom:1px solid #F0F0F0;font-size:12px;
}
.cvzTbl th.rk,.cvzTbl td.rk{color:#595959;font-weight:600;background:#FAFAFA}
.cvzTbl td{padding:9px 10px;border-bottom:1px solid #F5F5F5;color:#595959;line-height:1.65}
.cvzTbl tr:last-child td{border-bottom:none}
.cvzTbl td.hi{color:#0958D9;font-weight:700;background:#FAFAFA}

</style>
</head>
<body>
<div class="wrap">
  <div class="topbar">
    <div class="brand">
      <span class="logo"><svg width="18" height="18" viewBox="0 0 20 20" fill="none"><path d="M3 15l4.5-5 3 3L17 5" stroke="#fff" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/><path d="M3 17.5h14" stroke="#fff" stroke-width="1.5" stroke-linecap="round" opacity=".8"/></svg></span>
      <span>保险展示卡库</span>
      <span class="cnt" id="cnt"></span>
    </div>
    <div class="search">
      <input id="q" placeholder="搜索卡名 / 编号 / 标签，如：保证金、套保、期权" autocomplete="off">
      <button class="btn" id="btnClear">清空</button>
    </div>
  </div>
  <div class="libChips">
    <div class="cats" id="catsBig"></div>
    <div class="cats" id="catsSmall"></div>
    <div class="cats" id="catsScene"></div>
  </div>
  <div class="libGrid" id="grid"></div>
</div>

<div class="mask" id="mask" hidden></div>
<div class="viewer" id="viewer" hidden>
  <div class="vCard">
    <div class="vHead">
      <span class="no" id="vNo"></span>
      <h3 id="vTitle"></h3>
      <button class="x" id="vClose"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M3 3l8 8M11 3l-8 8" stroke="#6B7280" stroke-width="1.6" stroke-linecap="round"/></svg></button>
    </div>
    <div class="vBody" id="vBody"></div>
    <div class="vFoot">
      <button class="btn sm" id="vPrev">上一张</button>
      <span class="idx" id="vIdx"></span>
      <span class="sp"></span>
      <button class="btn sm" id="vNext">下一张</button>
    </div>
  </div>
</div>
