/* Tarsign · 房地产研判 —— 共享样式（hs-* 命名空间，避免与 skin.css / app.css 冲突）
   主题：靛青蓝 + 赭石（与「黄金」模块的金褐色系刻意区分）
   ★换肤只需改下面 :root 变量，不必逐条改样式 */
:root{
  --hs-primary:#27548c;        /* 主色：靛青蓝 */
  --hs-primary-d:#1d3f6b;
  --hs-primary-soft:#eef3fa;
  --hs-primary-line:#4a7cb5;
  --hs-accent:#b45309;         /* 强调：赭石 */
  --hs-accent-soft:#fdf4e9;
  --hs-teal:#0e7490;           /* 辅助：蓝青（地产链） */
  --hs-ink:#1b2130;
  --hs-ink2:#3a4358;
  --hs-mut:#8a93a5;
  --hs-mut2:#9aa3b2;
  --hs-line:#e3e4e6;
  --hs-line2:#f0f0f2;
  --hs-panel:#ffffff;
  --hs-ok:#0ca678;             /* 已兑现 / 跌（绿） */
  --hs-mid:#f59f00;            /* 部分兑现 */
  --hs-no:#e03131;             /* 未兑现 / 涨（红） */
}

.hs-page{max-width:var(--gl-content,1720px);margin:0 auto;padding:18px 18px 44px;}
.hs-page *{box-sizing:border-box;}

/* ---- 页头 ---- */
.hs-hd{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:12px;}
.hs-hd h1{font-size:21px;margin:0;font-weight:700;letter-spacing:.4px;color:var(--hs-ink);}
.hs-hd h1 .au{color:var(--hs-accent);}
.hs-hd .sub{color:var(--hs-mut);font-size:12.5px;line-height:1.7;}
.hs-hd .sub b{color:var(--hs-primary);}

/* ---- 卡片 ---- */
.hs-card{background:var(--hs-panel);border:1px solid var(--hs-line);border-radius:22px;padding:16px 18px;margin-top:14px;
  box-shadow:0 1px 3px rgba(0,0,0,.05);}
.hs-card.tight{padding:13px 15px;}
.hs-sec{font-size:15.5px;font-weight:700;margin-bottom:6px;display:flex;align-items:center;gap:8px;color:var(--hs-ink);}
.hs-sec .bg{font-size:11px;font-weight:600;color:#fff;background:var(--hs-primary);border-radius:10px;padding:2px 7px;}
.hs-sec .bg.accent{background:var(--hs-accent);}
.hs-sec .bg.g{background:var(--hs-ok);}
.hs-sec .bg.a{background:var(--hs-mid);}
.hs-sec .bg.r{background:var(--hs-no);}
.hs-sec .bg.t{background:var(--hs-teal);}
.hs-sec .cnt{margin-left:auto;font-size:12px;font-weight:600;color:var(--hs-mut);}
.hs-desc{color:#86868b;font-size:12.5px;line-height:1.85;margin-bottom:12px;}
.hs-desc b{color:#0a0a0a;}
.hs-desc code{background:#f4f6fa;border-radius:4px;padding:1px 5px;font-size:12px;font-family:ui-monospace,Menlo,Consolas,monospace;}

/* ---- 实时条 ---- */
.hs-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:10px;}
.hs-strip .st{background:#fff;border:1px solid var(--gl-line-l);border-radius:14px;padding:11px 13px;box-shadow:var(--gl-shadow-sm);}
.hs-strip .st .k{color:var(--hs-mut);font-size:11.5px;margin-bottom:4px;display:flex;align-items:center;gap:5px;}
.hs-strip .st .v{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.15;color:var(--hs-ink);}
.hs-strip .st .v small{font-size:12px;font-weight:600;color:var(--hs-mut);margin-left:2px;}
.hs-strip .st .s{font-size:11.5px;margin-top:3px;font-variant-numeric:tabular-nums;color:var(--hs-mut);}
.up{color:var(--hs-no) !important;}.dn{color:var(--hs-ok) !important;}.flat{color:var(--hs-mut) !important;}

/* ---- KPI 网格 ---- */
.hs-grid{display:grid;gap:11px;}
.hs-grid.c2{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));}
.hs-grid.c3{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));}
.hs-grid.c4{grid-template-columns:repeat(auto-fit,minmax(168px,1fr));}
.hs-kpi{background:#fafafa;border:1px solid var(--hs-line2);border-radius:14px;padding:12px 13px;}
.hs-kpi .k{font-size:11.5px;color:var(--hs-mut);margin-bottom:5px;}
.hs-kpi .v{font-size:19px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--hs-ink);line-height:1.2;}
.hs-kpi .v small{font-size:11.5px;color:var(--hs-mut);font-weight:600;margin-left:2px;}
.hs-kpi .s{font-size:11px;color:var(--hs-mut2);margin-top:3px;}

/* ---- 变量卡 ---- */
.hs-vars{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:10px;}
.hs-var{border:1px solid var(--hs-line);border-radius:10px;padding:11px 12px;background:var(--hs-panel);cursor:pointer;
  transition:border-color .12s,box-shadow .12s,transform .12s;}
.hs-var:hover{border-color:#c3d3e8;box-shadow:0 3px 10px rgba(39,84,140,.1);transform:translateY(-1px);}
.hs-var .n{font-size:13px;font-weight:700;color:var(--hs-ink);display:flex;align-items:center;gap:6px;}
.hs-var .n .cat{font-size:10px;font-weight:600;color:var(--hs-mut);background:#f4f6fa;border-radius:4px;padding:1px 5px;}
.hs-var .row{display:flex;align-items:flex-end;justify-content:space-between;margin-top:7px;gap:8px;}
.hs-var .val{font-size:19px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--hs-ink);line-height:1;}
.hs-var .val small{font-size:10.5px;color:var(--hs-mut2);font-weight:600;margin-left:2px;}
.hs-var .chg{font-size:11.5px;font-weight:700;font-variant-numeric:tabular-nums;}
.hs-var .bar{height:5px;border-radius:3px;background:var(--hs-line2);margin-top:8px;position:relative;overflow:hidden;}
.hs-var .bar i{position:absolute;left:0;top:0;bottom:0;border-radius:3px;background:var(--hs-primary-line);}
.hs-var .bar i.hi{background:var(--hs-accent);}
.hs-var .bar i.lo{background:var(--hs-ok);}
.hs-var .meta{display:flex;justify-content:space-between;margin-top:5px;font-size:10.5px;color:var(--hs-mut2);}
.hs-var .meta .cr{font-variant-numeric:tabular-nums;}

/* ---- 表格 ---- */
.hs-tb{width:100%;border-collapse:collapse;font-size:12.5px;}
.hs-tb th{background:#f6f8fb;color:#5b6478;font-weight:700;font-size:11.5px;padding:9px 10px;text-align:right;
  border-bottom:1px solid var(--hs-line);white-space:nowrap;position:sticky;top:0;z-index:2;}
.hs-tb th:first-child,.hs-tb td:first-child{text-align:left;}
.hs-tb td{padding:8px 10px;border-bottom:1px solid #f2f5fa;text-align:right;font-variant-numeric:tabular-nums;color:#2b3244;}
.hs-tb tr:hover td{background:#fafbfe;}
.hs-tb .nm{font-weight:700;color:var(--hs-ink);cursor:pointer;}
.hs-tb .nm:hover{color:var(--hs-primary);}
.hs-tb th.sortable{cursor:pointer;user-select:none;}
.hs-tb th.sortable:hover{color:var(--hs-primary);}
.hs-tb th .ar{color:var(--hs-mut2);font-size:9px;}
.hs-scroll{overflow:auto;max-height:560px;border:1px solid var(--hs-line2);border-radius:9px;}

/* ---- 按钮/标签 ---- */
.hs-btns{display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
.hs-btn{border:1px solid #e2e8f2;background:var(--hs-panel);color:#4a5368;border-radius:7px;padding:5px 11px;font-size:12px;
  cursor:pointer;font-weight:600;transition:.12s;}
.hs-btn:hover{border-color:#c3d3e8;color:var(--hs-primary);}
.hs-btn.on{background:var(--hs-primary);border-color:var(--hs-primary);color:#fff;}
.hs-btn.accent.on{background:var(--hs-accent);border-color:var(--hs-accent);}
.hs-tag{display:inline-block;font-size:10.5px;font-weight:600;border-radius:4px;padding:1.5px 6px;background:#f4f6fa;color:#86868b;}
.hs-tag.b{background:var(--hs-primary-soft);color:var(--hs-primary);}
.hs-tag.r{background:#fff0f0;color:var(--hs-no);}
.hs-tag.g{background:#eafaf3;color:var(--hs-ok);}
.hs-tag.a{background:var(--hs-accent-soft);color:var(--hs-accent);}
.hs-tag.t{background:#e8f4f7;color:var(--hs-teal);}

/* ---- 图表 ---- */
.hs-chart{width:100%;height:420px;min-width:0;}
.hs-chart.sm{height:280px;}
.hs-chart.lg{height:520px;}

/* ---- 布局 ---- */
.hs-split{display:grid;grid-template-columns:236px minmax(0,1fr);gap:14px;align-items:start;}
.hs-side{background:var(--hs-panel);border:1px solid var(--hs-line);border-radius:12px;padding:10px;position:sticky;top:70px;
  max-height:calc(100vh - 86px);overflow:auto;}
.hs-side .catrow{font-size:11.5px;font-weight:700;color:#5b6478;padding:9px 8px 5px;display:flex;align-items:center;gap:6px;cursor:pointer;}
.hs-side .catrow .dot{width:7px;height:7px;border-radius:50%;}
.hs-side .catrow .n{margin-left:auto;color:#b9c1cf;font-weight:600;}
.hs-side .vrow{font-size:12.5px;padding:6px 9px;border-radius:7px;cursor:pointer;color:var(--hs-ink2);
  display:flex;justify-content:space-between;gap:6px;}
.hs-side .vrow:hover{background:#f4f7fb;color:var(--hs-primary);}
.hs-side .vrow.on{background:var(--hs-primary-soft);color:var(--hs-primary);font-weight:700;}
.hs-side .vrow .c{font-size:10.5px;color:var(--hs-mut2);font-variant-numeric:tabular-nums;}
.hs-search{width:100%;border:1px solid #e2e8f2;border-radius:8px;padding:7px 10px;font-size:12.5px;outline:none;margin-bottom:6px;}
.hs-search:focus{border-color:#a9c2ff;box-shadow:0 0 0 3px rgba(39,84,140,.1);}

/* ---- 说明块 ---- */
.hs-note{background:#fafafa;border:1px solid var(--hs-line2);border-left:3px solid var(--hs-primary);border-radius:8px;
  padding:11px 13px;font-size:12px;line-height:1.85;color:#5b6478;margin-top:12px;}
.hs-note.warn{border-left-color:var(--hs-mid);background:#fffdf7;}
.hs-note b{color:#0a0a0a;}
.hs-note ul{margin:6px 0 0;padding-left:18px;}
.hs-note li{margin:3px 0;}

/* ---- 研报卡片 ---- */
.hs-fw{border:1px solid var(--hs-line);border-radius:11px;padding:14px 16px;background:var(--hs-panel);}
.hs-fw h4{margin:0 0 4px;font-size:14px;font-weight:700;color:var(--hs-ink);display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.hs-fw .org{font-size:10.5px;font-weight:600;color:var(--hs-primary);background:var(--hs-primary-soft);border-radius:4px;padding:1.5px 6px;}
.hs-fw .lg{margin:7px 0 0;font-size:12.5px;line-height:1.9;color:#4a5368;}
.hs-fw .fx{margin-top:9px;background:#f6f8fb;border:1px solid var(--hs-line);border-radius:8px;padding:10px 12px;
  font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;color:#1e3f6e;line-height:1.8;word-break:break-word;}
.hs-fw .vs{margin-top:9px;display:flex;flex-wrap:wrap;gap:5px;}
.hs-th{border-left:3px solid var(--hs-accent);background:var(--hs-accent-soft);border-radius:8px;padding:10px 12px;font-size:12.5px;line-height:1.8;color:#4a5368;}
.hs-th .vv{font-weight:700;color:var(--hs-accent);font-variant-numeric:tabular-nums;}
.hs-th .nn{color:var(--hs-mut2);font-size:11px;margin-top:3px;}
.hs-hs{border:1px solid var(--hs-line);border-radius:11px;padding:13px 15px;background:var(--hs-panel);}
.hs-hs h4{margin:0;font-size:13.5px;font-weight:700;color:var(--hs-ink);}
.hs-hs .pd{font-size:11px;color:var(--hs-mut);font-weight:600;margin-left:6px;}
.hs-hs .gr{margin-top:8px;}
.hs-hs .gr .l{font-size:11px;font-weight:700;color:var(--hs-mut);margin-bottom:2px;}
.hs-hs .gr p{margin:0;font-size:12.5px;line-height:1.85;color:#4a5368;}
.hs-ins{display:flex;gap:10px;padding:10px 12px;border-radius:9px;background:#fafafa;border:1px solid var(--hs-line2);}
.hs-ins .idx{font-size:11px;font-weight:700;color:var(--hs-primary);font-variant-numeric:tabular-nums;min-width:20px;}
.hs-ins p{margin:0;font-size:12.5px;line-height:1.85;color:#4a5368;}

/* ---- 弹层 ---- */
.hs-modal{position:fixed;inset:0;background:rgba(20,26,38,.42);display:none;z-index:9000;padding:34px 16px;overflow:auto;}
.hs-modal.on{display:block;}
.hs-modal .box{max-width:920px;margin:0 auto;background:var(--hs-panel);border-radius:14px;padding:20px 22px;box-shadow:0 18px 50px rgba(18,24,40,.24);}
.hs-modal h3{margin:0 0 4px;font-size:16px;font-weight:700;color:var(--hs-ink);}
.hs-modal .x{float:right;cursor:pointer;color:#98a1b3;font-size:20px;line-height:1;border:none;background:none;}

/* ---- 房地产扩展：政策工具箱 / 分歧 / 数据缺口 ---- */
.hs-pol{border:1px solid var(--hs-line);border-radius:11px;padding:13px 15px;background:var(--hs-panel);}
.hs-pol h4{margin:0 0 6px;font-size:13.5px;font-weight:700;color:var(--hs-ink);display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.hs-pol .k{font-size:11px;font-weight:700;color:var(--hs-mut);margin-top:9px;}
.hs-pol .t{font-size:12.5px;line-height:1.85;color:#4a5368;}
.hs-chan{margin-top:6px;background:#f6f8fb;border:1px solid var(--hs-line);border-radius:8px;padding:9px 11px;font-size:12px;line-height:1.8;color:var(--hs-ink2);}
.hs-chan .ar{color:var(--hs-primary);font-weight:700;}
.hs-db{border:1px solid var(--hs-line);border-radius:11px;padding:13px 15px;background:var(--hs-panel);}
.hs-db .side{border-left:3px solid var(--hs-primary);padding:2px 0 2px 10px;margin-top:8px;}
.hs-db .side.b{border-left-color:#e8590c;}
.hs-db .side p{margin:0;font-size:12.5px;line-height:1.8;color:#4a5368;}
.hs-db .side .bs{font-size:11.5px;color:var(--hs-mut);margin-top:3px;}
.hs-gap{border-left:3px solid var(--hs-no);background:#fffafa;}
.hs-ll{border:1px solid var(--hs-line);border-radius:10px;padding:11px 13px;background:var(--hs-panel);}
.hs-ll .pair{font-size:12.5px;font-weight:700;color:var(--hs-ink);display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.hs-ll .pair .ar{color:var(--hs-primary);}
.hs-ll .lg2{font-size:12px;color:#86868b;margin-top:5px;line-height:1.75;}
.hs-ll .cc{font-size:11.5px;color:var(--hs-accent);font-weight:700;margin-top:4px;}

/* ---- B 骨架核心：四底序列定位盘 ---- */
.hs-bots{display:grid;grid-template-columns:repeat(auto-fit,minmax(292px,1fr));gap:12px;}
.hs-bot{border:1px solid var(--hs-line);border-radius:12px;padding:14px 15px 12px;background:var(--hs-panel);position:relative;overflow:hidden;}
.hs-bot::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--hs-mut2);}
.hs-bot.s-ok::before{background:var(--hs-ok);}
.hs-bot.s-mid::before{background:var(--hs-mid);}
.hs-bot.s-no::before{background:var(--hs-no);}
.hs-bot .hd{display:flex;align-items:center;gap:8px;}
.hs-bot .hd .seq{font-size:11px;font-weight:700;color:#fff;background:var(--hs-primary);border-radius:5px;padding:2px 7px;}
.hs-bot .hd .ttl{font-size:14.5px;font-weight:700;color:var(--hs-ink);}
.hs-bot .hd .en{font-size:10.5px;color:var(--hs-mut2);font-weight:600;letter-spacing:.3px;}
.hs-bot .st{margin-left:auto;font-size:11px;font-weight:700;border-radius:20px;padding:2.5px 10px;color:#fff;white-space:nowrap;}
.hs-bot .st.ok{background:var(--hs-ok);}
.hs-bot .st.mid{background:var(--hs-mid);}
.hs-bot .st.no{background:var(--hs-no);}
.hs-bot .lead{margin-top:9px;font-size:12px;color:#5b6478;line-height:1.75;}
.hs-bot .cnt2{margin-top:10px;font-size:11px;font-weight:700;color:var(--hs-mut);display:flex;align-items:center;gap:7px;}
.hs-bot .meter{flex:1;height:6px;border-radius:3px;background:var(--hs-line2);overflow:hidden;}
.hs-bot .meter i{display:block;height:100%;border-radius:3px;background:var(--hs-ok);transition:width .3s;}
.hs-bot .meter i.mid{background:var(--hs-mid);}
.hs-bot .meter i.no{background:var(--hs-no);}
.hs-cond{display:flex;gap:7px;align-items:flex-start;font-size:12px;color:#4a5368;padding:5px 0;border-top:1px dashed var(--hs-line2);line-height:1.7;}
.hs-cond .mk{flex:none;width:15px;height:15px;border-radius:4px;font-size:10px;font-weight:700;color:#fff;
  display:flex;align-items:center;justify-content:center;margin-top:2px;}
.hs-cond .mk.hit{background:var(--hs-ok);}
.hs-cond .mk.miss{background:#ccd5e2;}
.hs-cond .vv{margin-left:auto;font-size:11px;color:var(--hs-mut2);font-variant-numeric:tabular-nums;white-space:nowrap;padding-left:8px;}

/* ---- 阶段结论条 ---- */
.hs-verdict{border-radius:12px;padding:15px 18px;background:var(--hs-primary);color:#fff;display:flex;gap:16px;align-items:center;flex-wrap:wrap;}
.hs-verdict .lab{font-size:11.5px;font-weight:700;opacity:.82;letter-spacing:.5px;}
.hs-verdict .big{font-size:20px;font-weight:700;letter-spacing:.5px;}
.hs-verdict .tx{font-size:12.5px;line-height:1.8;opacity:.94;}
.hs-verdict .tx b{color:#ffe6c2;}
.hs-verdict .right{margin-left:auto;text-align:right;}
.hs-verdict .right .n{font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;}
.hs-verdict .right .l{font-size:11px;opacity:.82;}

/* ---- 链条/时滞可视化条 ---- */
.hs-chain{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;}
.hs-chain .lk{border:1px solid var(--hs-line);border-radius:9px;padding:10px 11px;background:var(--hs-panel);text-align:center;}
.hs-chain .lk .n{font-size:12.5px;font-weight:700;color:var(--hs-ink);}
.hs-chain .lk .v{font-size:15px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:5px;}
.hs-chain .lk .m{font-size:10.5px;color:var(--hs-mut2);margin-top:3px;}

/* ---- 响应式 ---- */
@media (max-width:900px){
  .hs-split{grid-template-columns:1fr;}
  .hs-side{position:static;max-height:300px;}
  .hs-chart{height:330px;}
  .hs-page{padding:14px 12px 36px;}
  .hs-verdict .right{margin-left:0;}
}
