/* 郁见投资 · 看板统一外观层（xz-ui.css）
 *
 * 由 core.finalize 注入每个子看板的 </head> 之前，排在页面自身样式之后。
 * 只改外观：颜色、字号、圆角、边框、阴影、间距；不改布局结构、不改数据与交互。
 * <html> 上有两个属性可用来限定范围：
 *   data-xz-route   路由，如 /inst
 *   data-xz-family  生成器家族，如 classic / macro / gold（映射表在 core._UI_FAMILY）
 * 同名 class 在不同家族里含义可能不同（.kpi 有的是卡片、有的是横条里的一格；.foot 有的是注释卡、
 * 有的是页脚），这类组件放在第 11 节按家族写，前 10 节只放各家族含义一致的组件。
 *
 * 目录
 *   0 设计令牌      1 页面底色与字体   2 页头横幅      3 导航衔接
 *   4 分节标题      5 面板标题         6 按钮与页签    7 表单控件
 *   8 表格          9 通用卡片         10 信息条衔接   11 各家族适配
 */

/* ── 0 设计令牌 ──────────────────────────────────────────────
 * 主色：#004C94 深蓝 / #00B0F0 亮蓝 / #9CE1F9 浅蓝；附色：#F05F5F 红 / #F9BFBF 浅红 / #BFBFBF 灰
 * 涨红跌绿：上行 #F05F5F，下行 #22B07A；琥珀 #E7A23C、靛蓝 #6D78B4 只作第三、四强调色。 */
:root{
  --xz-navy:#004C94; --xz-navy-deep:#003263; --xz-azure:#00B0F0; --xz-sky:#9CE1F9; --xz-ice:#E6F5FD;
  --xz-coral:#F05F5F; --xz-rose:#F9BFBF; --xz-gray:#BFBFBF; --xz-amber:#E7A23C; --xz-green:#22B07A; --xz-indigo:#6D78B4;
  --xz-ink:#16232F; --xz-slate:#54657A; --xz-muted:#8698A8;
  --xz-line:#E7EFF7; --xz-line-2:#CFE0EE; --xz-soft:#F4F8FC; --xz-paper:#FFFFFF; --xz-wash:#EEF4FA;
  --xz-shadow:0 6px 20px rgba(0,76,148,.08); --xz-shadow-lg:0 12px 34px rgba(0,76,148,.14);
  --xz-r-card:12px; --xz-r-ctrl:8px;
  --xz-font:"Microsoft YaHei","PingFang SC","Hiragino Sans GB",-apple-system,sans-serif;
  --xz-grad-mast:linear-gradient(120deg,#003263 0%,#004C94 52%,#0B7BC4 90%,#00B0F0 130%);
  --xz-glow:radial-gradient(560px 200px at 88% -40%,rgba(156,225,249,.35),transparent 70%);
  --xz-grad-badge:linear-gradient(135deg,#004C94,#00B0F0);
  --xz-grad-th:linear-gradient(#004C94,#003263);
}

/* ── 1 页面底色与字体 ── */
html[data-xz-route]:not([data-xz-family="plusapp"]) body{
  background:radial-gradient(1200px 480px at 12% -8%,#F4F9FE 0%,transparent 60%),
             radial-gradient(1000px 420px at 108% 0%,#EAF3FC 0%,transparent 55%),var(--xz-wash);
  color:var(--xz-ink); font-family:var(--xz-font);
}

/* ── 2 页头横幅 ──────────────────────────────────────────────
 * 深蓝渐变、上圆角 14px、内边距 24px 28px；眉题 11px 字距 4px 浅蓝；
 * 标题 23px 加粗白字；副题 12px；右侧日期戳 32px 加粗。 */
html[data-xz-route] .masthead,
html[data-xz-route] .mast,
html[data-xz-route] header.hero,
html[data-xz-route] section.hero,
html[data-xz-route] header.top,
html[data-xz-route] .credit-layout header,
html[data-xz-route] .host-masthead{
  background:var(--xz-grad-mast); color:#fff;
  border-radius:14px 14px 0 0; padding:24px 28px; margin-top:0;
  box-shadow:var(--xz-shadow-lg); min-height:0; height:auto;
}
/* 高度下限对齐（没有副题的横幅不再矮一截），弹性布局的横幅内容一律贴底 */
html[data-xz-route] .masthead, html[data-xz-route] .mast, html[data-xz-route] header.hero,
html[data-xz-route] section.hero, html[data-xz-route] header.top, html[data-xz-route] .host-masthead{min-height:128px}
/* 右上角装饰统一成柔光（原先有的是大圆环、有的是底部彩条）。
   横幅自成层叠上下文，柔光放在 z-index:-1，压在文字下面又不必改子元素的定位。 */
html[data-xz-route] .mast, html[data-xz-route] header.hero,
html[data-xz-route] section.hero, html[data-xz-route] .host-masthead{position:relative; overflow:hidden; isolation:isolate}
html[data-xz-route] .mast::after,
html[data-xz-route] section.hero::after,
html[data-xz-route] .host-masthead::after,
html[data-xz-route] header.hero::after{
  content:""; position:absolute; inset:0; width:auto; height:auto; border:0; border-radius:0;
  background:var(--xz-glow); opacity:1; pointer-events:none; box-shadow:none; z-index:-1;
}

html[data-xz-route] .masthead h1,
html[data-xz-route] .mast h1,
html[data-xz-route] header.hero h1,
html[data-xz-route] section.hero h1,
html[data-xz-route] header.top h1,
html[data-xz-route] .credit-layout header h1,
html[data-xz-route] .host-masthead h1{
  font-size:23px; font-weight:800; letter-spacing:.6px; line-height:1.3; color:#fff; margin:6px 0 0;
}
/* 眉题 */
html[data-xz-route] .masthead .kicker, html[data-xz-route] .masthead .brand,
html[data-xz-route] .mast .kicker, html[data-xz-route] .top .kicker,
html[data-xz-route] header.hero .hero-kicker, html[data-xz-route] header.hero .hero__kicker,
html[data-xz-route] section.hero .eyebrow,
html[data-xz-route] .credit-layout header .eyebrow, html[data-xz-route] .host-kicker{
  font-size:11px; font-weight:700; letter-spacing:4px; color:var(--xz-sky); line-height:1.4; opacity:1; margin:0;
}
/* 副题 */
html[data-xz-route] .masthead .unit, html[data-xz-route] .masthead .update-line,
html[data-xz-route] .mast p, html[data-xz-route] .top .asof,
html[data-xz-route] header.hero .hero-sub, html[data-xz-route] header.hero .hero__lead,
html[data-xz-route] section.hero p,
html[data-xz-route] .credit-layout header p, html[data-xz-route] .host-sub{
  font-size:12px; line-height:1.7; color:rgba(228,241,251,.82); opacity:1; margin-top:8px;
}
/* 日期戳 */
html[data-xz-route] .masthead .stamp .big, html[data-xz-route] .mast .asof strong,
html[data-xz-route] .top-date strong, html[data-xz-route] header.hero .hero-date strong,
html[data-xz-route] header.hero .hero__years, html[data-xz-route] .host-date{
  font-size:32px; font-weight:800; line-height:1; letter-spacing:1px; font-variant-numeric:tabular-nums; color:#fff;
  font-family:var(--xz-font);
}
html[data-xz-route] .masthead .stamp .small, html[data-xz-route] .mast .asof span,
html[data-xz-route] .top-date span, html[data-xz-route] header.hero .hero-date span,
html[data-xz-route] header.hero .hero__stats-label, html[data-xz-route] .host-date-note{
  font-size:12px; font-weight:600; color:var(--xz-sky); letter-spacing:0;
}

/* ── 3 导航衔接：横幅下紧贴白色导航条，下圆角收口 ── */
html[data-xz-route] .xznav{margin-top:0; border-radius:0 0 14px 14px}

/* ── 4 分节标题 ──────────────────────────────────────────────
 * 编号徽标（深蓝→亮蓝渐变，11px 白字）+ 18px 加粗深蓝标题 + 12px 灰色说明。 */
html[data-xz-route] .section-hd .no,
html[data-xz-route] .section-title .no,
html[data-xz-route] .panel-heading .eyebrow{
  background:var(--xz-grad-badge); color:#fff; font-size:11px; font-weight:800; letter-spacing:1px;
  border-radius:6px; padding:4px 9px; line-height:1.4;
}
html[data-xz-route] .section-hd h2,
html[data-xz-route] .section-title h2,
html[data-xz-route] .panel-heading h2,
html[data-xz-route] .panel-head h2{
  font-size:18px; font-weight:800; color:var(--xz-navy-deep); letter-spacing:.3px;
}
html[data-xz-route] .section-hd .desc{font-size:12px; color:var(--xz-muted)}

/* ── 5 面板标题：左侧 4px 红色竖条 + 15px 加粗深蓝字，标题栏下沿 2px 浅蓝分隔 ── */
html[data-xz-route] .ph,
html[data-xz-route] .panel-hd{border-bottom:2px solid var(--xz-ice)}
html[data-xz-route] .ph > .tag,
html[data-xz-route] .panel-hd > .tag{
  font-size:15px; font-weight:800; color:var(--xz-navy-deep); letter-spacing:.3px;
  border-left:4px solid var(--xz-coral); padding-left:11px; line-height:1.35;
}
html[data-xz-route] .ph > .sub,
html[data-xz-route] .panel-hd > .sub{font-size:12px; color:var(--xz-muted)}

/* ── 6 按钮与页签 ────────────────────────────────────────────
 * 选中态一律深蓝底白字（亮蓝底配白字对比度不足）；未选中白底、浅灰蓝边、灰字；悬停浅蓝底。 */
html[data-xz-route] .chip:not(.on):not(.active):not([aria-pressed="true"]){
  background:#fff; border-color:var(--xz-line-2); color:var(--xz-slate);
}
html[data-xz-route] .chip{font-weight:700; transition:background .15s,border-color .15s,color .15s}
html[data-xz-route] .chip:not(.on):not(.active):hover{background:var(--xz-ice); border-color:var(--xz-azure); color:var(--xz-navy)}
html[data-xz-route] .chip.on, html[data-xz-route] .chip.active, html[data-xz-route] .chip[aria-pressed="true"]{
  background:var(--xz-navy); border-color:var(--xz-navy); color:#fff;
}
/* 分段按钮组：整组一个外框，选中一格深蓝 */
html[data-xz-route] .seg{border-color:var(--xz-line-2)}
html[data-xz-route] .seg button{color:var(--xz-navy)}
html[data-xz-route] .seg button.on, html[data-xz-route] .seg button.active,
html[data-xz-route] .segbtn.on, html[data-xz-route] .segbtn.active{background:var(--xz-navy); color:#fff}
/* 全站导航里的“筹备中”小标签不吃第 6 节的按钮样式 */
html[data-xz-route] .xznav .dd .chip{background:#EEF2F6; border:0; color:#8698A8; font-weight:400}

/* ── 7 表单控件 ── */
html[data-xz-route] select,
html[data-xz-route] input[type=date],
html[data-xz-route] input[type=month],
html[data-xz-route] input[type=text],
html[data-xz-route] input[type=search],
html[data-xz-route] input[type=number]{
  border:1px solid var(--xz-line-2); border-radius:var(--xz-r-ctrl); background-color:#fff; color:var(--xz-ink);
  font-family:inherit;
}
html[data-xz-route] select:focus,
html[data-xz-route] input:focus{outline:none; border-color:var(--xz-azure); box-shadow:0 0 0 3px rgba(0,176,240,.15)}

/* ── 8 表格：表头统一深蓝渐变白字，正文行线浅灰蓝（利差看板的格子矩阵除外） ── */
html[data-xz-route]:not([data-xz-family="spread"]) table thead th{
  background:var(--xz-grad-th); color:#fff; font-weight:700; border-color:rgba(255,255,255,.14);
}
html[data-xz-route]:not([data-xz-family="spread"]) table thead th *{color:inherit}
html[data-xz-route] table tbody td{border-bottom-color:#EEF3F8}

/* ── 9 通用卡片：白底、1px 浅边、圆角 12px、同一种投影 ── */
html[data-xz-route] .panel,
html[data-xz-route] .chart-card,
html[data-xz-route] .chart-panel,
html[data-xz-route] .detail-panel,
html[data-xz-route] .workspace,
html[data-xz-route] .scorebox,
html[data-xz-route] .metric-card{
  border-radius:var(--xz-r-card); border-color:var(--xz-line); box-shadow:var(--xz-shadow);
}
/* 控制条（筛选区）：顶部 4px 深蓝，是各看板共用的“操作区”标识 */
html[data-xz-route] .filters{border-radius:var(--xz-r-card); border-top:4px solid var(--xz-navy); box-shadow:var(--xz-shadow)}

/* ── 10 信息条衔接：紧贴在导航下面的信息条（原设计是贴在横幅下），导航下沿改直角、由信息条收圆角，看起来是一整块。
 * 只限这四个家族：别的看板导航下面也可能紧跟 .kpis，但那是隔开的卡片（如价格等四页），导航要保留圆角。 */
html[data-xz-family="mpol"] .xznav:has(+ .summary),
html[data-xz-family="gold"] .xznav:has(+ .kpis),
html[data-xz-family="tracking"] .xznav:has(+ .data-strip),
html[data-xz-family="forecast"] .xznav:has(+ .status-strip){border-radius:0}
html[data-xz-family="mpol"] .summary,
html[data-xz-family="gold"] .kpis,
html[data-xz-family="tracking"] .data-strip,
html[data-xz-family="forecast"] .status-strip{border-radius:0 0 var(--xz-r-card) var(--xz-r-card); overflow:hidden}

/* ════ 11 各家族适配 ════════════════════════════════════════ */

/* ── classic：机构 / 票据 / 久期 / 期货 / 理财（服务器旧版模板） ── */
html[data-xz-family="classic"] .console{border-radius:var(--xz-r-card); border-top:4px solid var(--xz-navy); box-shadow:var(--xz-shadow)}
html[data-xz-family="classic"] .scope{border-radius:var(--xz-r-card); border-left-color:var(--xz-azure)}
html[data-xz-family="classic"] .foot{
  border-radius:var(--xz-r-card); border-left:4px solid var(--xz-azure); color:var(--xz-slate); box-shadow:var(--xz-shadow);
}
html[data-xz-family="classic"] .btn,
html[data-xz-family="classic"] button.go{
  background:var(--xz-navy); color:#fff; border:0; border-radius:var(--xz-r-ctrl); font-size:13px; font-weight:700;
  box-shadow:0 4px 12px rgba(0,76,148,.18);
}
html[data-xz-family="classic"] .btn:hover,
html[data-xz-family="classic"] button.go:hover{background:var(--xz-navy-deep)}
html[data-xz-family="classic"] .step{border-color:var(--xz-line-2); border-radius:var(--xz-r-ctrl)}
html[data-xz-family="classic"] .triple-item{border-color:var(--xz-line-2); border-radius:10px}
html[data-xz-family="classic"] .comment-box{background:var(--xz-soft); border-top:1px solid var(--xz-line); border-radius:0 0 var(--xz-r-card) var(--xz-r-card)}

/* ── macro：价格 / 外需 / 内需 / 经济 ── */
html[data-xz-family="macro"] .console{border-radius:var(--xz-r-card)}
html[data-xz-family="macro"] .foot{border-left:4px solid var(--xz-azure); border-radius:var(--xz-r-card)}
html[data-xz-family="macro"] .kpi{border-radius:var(--xz-r-card)}

/* ── spread：期限 / 品种 / 信用利差 ── */
html[data-xz-family="spread"] .console{border-radius:var(--xz-r-card)}
html[data-xz-family="spread"] .panel > .console{border-radius:0}
html[data-xz-family="spread"] .foot{border-left:4px solid var(--xz-azure); border-radius:var(--xz-r-card)}
html[data-xz-family="spread"] .btn{
  background:var(--xz-navy); color:#fff; border:0; border-radius:var(--xz-r-ctrl); font-size:13px; font-weight:700;
  box-shadow:0 4px 12px rgba(0,76,148,.18);
}
html[data-xz-family="spread"] .btn:hover{background:var(--xz-navy-deep)}

/* ── omo：央行操作 ── */
html[data-xz-family="omo"] .tile{border-radius:var(--xz-r-card); border-top:1px solid var(--xz-line)}
html[data-xz-family="omo"] .tile.alert{border-top:3px solid var(--xz-coral)}
html[data-xz-family="omo"] .tile .val{font-size:24px}
html[data-xz-family="omo"] .panel{border-radius:var(--xz-r-card)}
html[data-xz-family="omo"] .export-btn{border-radius:var(--xz-r-ctrl); border-color:var(--xz-line-2)}
html[data-xz-family="omo"] .export-btn:hover{background:var(--xz-ice)}
html[data-xz-family="omo"] .toolbar{border-radius:var(--xz-r-card)}

/* ── funding：资金供需 ── */
html[data-xz-family="funding"] .metric-card[aria-pressed="true"]{border-color:var(--xz-azure)}
html[data-xz-family="funding"] .numbered-title .detail-title,
html[data-xz-family="funding"] .numbered-title .daily-table-title{font-size:16px; font-weight:800; color:var(--xz-navy-deep)}

/* ── mpol：货币政策表态 / 地产高频（同一套模板） ── */
html[data-xz-family="mpol"] .hd{border-bottom:2px solid var(--xz-ice)}
html[data-xz-family="mpol"] .hd > h2{
  font-size:15px; font-weight:800; color:var(--xz-navy-deep);
  border-left:4px solid var(--xz-coral); padding-left:11px; line-height:1.35;
}
html[data-xz-family="mpol"] .theme-btn{border-color:var(--xz-line-2); border-radius:999px; font-weight:700; color:var(--xz-slate)}
html[data-xz-family="mpol"] .theme-btn:hover{background:var(--xz-ice); border-color:var(--xz-azure); color:var(--xz-navy)}
html[data-xz-family="mpol"] .theme-btn.on, html[data-xz-family="mpol"] .theme-btn.active{background:var(--xz-navy); border-color:var(--xz-navy); color:#fff}
html[data-xz-family="mpol"] button.more{border-radius:var(--xz-r-ctrl); border-color:var(--xz-line-2); font-size:13px; font-weight:700}
html[data-xz-family="mpol"] button.more:hover{background:var(--xz-ice)}

/* ── credit：信用债一级 / 二级 ── */
html[data-xz-family="credit"] .panel{border-color:var(--xz-line); box-shadow:var(--xz-shadow)}
html[data-xz-family="credit"] .secondary-title,
html[data-xz-family="credit"] .credit-numbered-title{border-left:0; padding-left:0}
html[data-xz-family="credit"] .secondary-title > h2,
html[data-xz-family="credit"] .credit-numbered-title > h2{font-size:18px; font-weight:800; color:var(--xz-navy-deep)}
html[data-xz-family="credit"] .credit-layout button{border-color:var(--xz-line-2); border-radius:var(--xz-r-ctrl); font-weight:700}
html[data-xz-family="credit"] .credit-layout button:hover{background:var(--xz-ice); border-color:var(--xz-azure)}
html[data-xz-family="credit"] .credit-index,
html[data-xz-family="credit"] .secondary-title > span:first-child{
  background:var(--xz-grad-badge); color:#fff; font-size:11px; font-weight:800; letter-spacing:1px;
  border-radius:6px; padding:4px 9px; line-height:1.4; border:0; min-width:0; height:auto;
}
html[data-xz-family="credit"] section.panel > h2{
  font-size:15px; font-weight:800; color:var(--xz-navy-deep); border-left:4px solid var(--xz-coral); padding-left:11px; line-height:1.35;
}

/* ── govbond：利率债每日发行点评 / 政府债发行期限结构 ── */
html[data-xz-family="govbond"] .wrap > .xznav{margin:0 0 18px}
html[data-xz-family="govbond"] .card{border:1px solid var(--xz-line); border-radius:var(--xz-r-card); box-shadow:var(--xz-shadow)}
html[data-xz-family="govbond"] .panel-head{border-bottom:2px solid var(--xz-ice)}
html[data-xz-family="govbond"] .filter-action{background:#fff; color:var(--xz-navy); border-color:var(--xz-line-2)}
html[data-xz-family="govbond"] .tab.active, html[data-xz-family="govbond"] .tab[aria-selected="true"]{color:var(--xz-navy)}

/* ── meeting：财政发力节奏（中央经济工作会议财政表述） ── */
html[data-xz-family="meeting"] .hero,
html[data-xz-family="meeting"] .dashboard,
html[data-xz-family="meeting"] .site-footer__inner{width:100%; max-width:1680px; margin-inline:auto}
html[data-xz-family="meeting"] header.hero{padding:0}
html[data-xz-family="meeting"] .dashboard{padding-top:18px}
html[data-xz-family="meeting"] .hero__inner{padding:24px 28px; gap:28px}
html[data-xz-family="meeting"] .hero__stats{border-left-color:rgba(255,255,255,.18)}
html[data-xz-family="meeting"] .hero__target-years,
html[data-xz-family="meeting"] .hero__stat-line{font-size:12px; color:rgba(228,241,251,.82)}
html[data-xz-family="meeting"] .card{border:1px solid var(--xz-line); border-top:1px solid var(--xz-line); border-radius:var(--xz-r-card); box-shadow:var(--xz-shadow)}
html[data-xz-family="meeting"] .button{border-color:var(--xz-line-2)}
html[data-xz-family="meeting"] .quote-toggle{border-color:var(--xz-line-2); color:var(--xz-navy)}
html[data-xz-family="meeting"] .hero__years{margin:4px 0 6px}
html[data-xz-family="meeting"] .hero__target-years{margin:0 0 6px}
html[data-xz-family="meeting"] .hero__stat-line{margin:2px 0 0; line-height:1.5}
html[data-xz-family="meeting"] .section-heading h2{font-size:18px; font-weight:800; color:var(--xz-navy-deep); letter-spacing:.3px}
html[data-xz-family="meeting"] .method-panel > summary > span:first-child,
html[data-xz-family="meeting"] .legend-title{
  font-size:15px; font-weight:800; color:var(--xz-navy-deep); border-left:4px solid var(--xz-coral); padding-left:11px; line-height:1.35;
}

/* ── tracking：政府债发行跟踪 ── */
html[data-xz-family="tracking"] .data-strip{border-radius:0 0 var(--xz-r-card) var(--xz-r-card); border-color:var(--xz-line); background:var(--xz-line)}
html[data-xz-family="tracking"] .chart-nav{border-radius:var(--xz-r-card)}
html[data-xz-family="tracking"] .chart-nav a{background:#fff; border-color:var(--xz-line-2); color:var(--xz-slate)}
html[data-xz-family="tracking"] .chart-nav a.on{background:var(--xz-navy); border-color:var(--xz-navy); color:#fff}
html[data-xz-family="tracking"] header.hero, html[data-xz-family="forecast"] header.hero{align-items:flex-end}

/* ── forecast：政府债发行预测 ── */
html[data-xz-family="forecast"] .dashboard-shell{max-width:1680px}
html[data-xz-family="forecast"] .status-strip{border-radius:0 0 var(--xz-r-card) var(--xz-r-card); box-shadow:var(--xz-shadow)}
html[data-xz-family="forecast"] .segmented button{border-color:var(--xz-line-2); font-size:12.5px; font-weight:700}
html[data-xz-family="forecast"] .segmented button.active{background:var(--xz-navy); border-color:var(--xz-navy); color:#fff}

/* ── framework：框架分析 · 利率方向 ── */
html[data-xz-family="framework"] .wrap > .xznav{margin:0 0 18px}
html[data-xz-family="framework"] .panel{border:1px solid var(--xz-line)}
html[data-xz-family="framework"] .face{border-radius:var(--xz-r-card); border:1px solid var(--xz-line); border-top-width:3px; box-shadow:var(--xz-shadow)}
html[data-xz-family="framework"] .face:nth-child(1){border-top-color:var(--xz-navy)}
html[data-xz-family="framework"] .face:nth-child(2){border-top-color:var(--xz-azure)}
html[data-xz-family="framework"] .face:nth-child(3){border-top-color:var(--xz-amber)}
html[data-xz-family="framework"] .face:nth-child(4){border-top-color:var(--xz-green)}
html[data-xz-family="framework"] .face:nth-child(5){border-top-color:var(--xz-indigo)}
html[data-xz-family="framework"] .panel-title{
  font-size:15px; font-weight:800; color:var(--xz-navy-deep);
  border-left:4px solid var(--xz-coral); padding-left:11px; line-height:1.35;
}
html[data-xz-family="framework"] .tab{border-color:var(--xz-line-2); border-radius:999px; color:var(--xz-slate)}
html[data-xz-family="framework"] .tab.on{background:var(--xz-navy); border-color:var(--xz-navy); color:#fff}

/* ── tech：海外科技债 ── */
html[data-xz-family="tech"] .kpi{border:1px solid var(--xz-line); border-top:1px solid var(--xz-line); border-radius:var(--xz-r-card)}
html[data-xz-family="tech"] .kpi .val{font-size:24px; font-weight:800}
html[data-xz-family="tech"] .note{border-left:4px solid var(--xz-azure); border-radius:var(--xz-r-card)}
html[data-xz-family="tech"] .stamp{color:var(--xz-sky)}

/* ── omacro：海外利率 / 基本面 / 政策 ── */
html[data-xz-family="omacro"] header.top{max-width:1680px}
html[data-xz-family="omacro"] .pulse,
html[data-xz-family="omacro"] article.card{border-color:var(--xz-line); border-radius:var(--xz-r-card); box-shadow:var(--xz-shadow)}
html[data-xz-family="omacro"] .toolbar > .group .chip{font-size:12px; background:#fff; border-color:var(--xz-line-2); color:var(--xz-slate)}
html[data-xz-family="omacro"] .toolbar > .group .chip:hover{background:var(--xz-ice); border-color:var(--xz-azure); color:var(--xz-navy)}
html[data-xz-family="omacro"] .toolbar > .group .chip.on{background:var(--xz-navy); border-color:var(--xz-navy); color:#fff; box-shadow:0 2px 7px rgba(0,76,148,.2)}
html[data-xz-family="omacro"] .single-group .chip.on::before{border-color:#fff; background:var(--xz-navy)}
html[data-xz-family="omacro"] .multi-group .chip.on::before{background:#fff; color:var(--xz-navy)}

/* ── plus：固收+ 宿主页（横幅 + iframe） ── */
html[data-xz-family="plus"] .head-shell{box-shadow:var(--xz-shadow-lg)}

/* ── plusapp：固收+ 已编译前端（iframe 内） ── */
html[data-xz-family="plusapp"] .panel{border-radius:var(--xz-r-card)}
html[data-xz-family="plusapp"] .panel-heading h3{
  font-size:15px; font-weight:800; color:var(--xz-navy-deep); border-left:4px solid var(--xz-coral); padding-left:11px; line-height:1.35;
}
