/* 地址透视页 —— 复用 dict.css 的 .mask/.btn/.badge/.mainnav/.topbar/.toast 等,
 * 这里只加本页专属:搜索条、上下游两栏、对手方卡片、三色打标、抽样/告警横幅。 */
.flow-bar { display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin:14px 0; }
.flow-bar input[type=text]{ flex:1; min-width:320px; padding:10px 12px; border:1px solid #d5d9e0;
  border-radius:8px; font-size:14px; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
.flow-bar select{ padding:10px; border:1px solid #d5d9e0; border-radius:8px; }

.flow-note{ border-radius:8px; padding:9px 12px; margin-bottom:12px; font-size:13px; }
.flow-note.sample{ background:#fffbeb; color:#92400e; border:1px solid #fde68a; }
.flow-note.alert{ background:#fef2f2; color:#b91c1c; border:1px solid #fecaca; font-weight:600; }
/* 同形异码规范化提示:蓝紫一色,不跟"抽样(黄)/告警(红)"抢眼 —— 它是提醒核对,不是风险 */
.flow-note.norm{ background:#eef2ff; color:#4338ca; border:1px solid #c7d2fe; }
/* 实时拉取横幅:橙框加粗,必须一眼看见"未入库·仅近 30 笔" */
.flow-note.live{ background:#fff7ed; color:#9a3412; border:1px solid #fdba74; font-weight:600; }

/* 库内没抓过 → 问用户要不要出网。出网这个动作交给用户显式决定,不自动跑 */
.flow-ask{ background:#fff; border:1px dashed #94a3b8; border-radius:10px;
  padding:14px 16px; margin-bottom:16px; display:flex; gap:14px;
  align-items:center; justify-content:space-between; flex-wrap:wrap; }
.flow-ask .ask-text{ color:#334155; font-size:13px; }
/* 未能确认 ≠ 没有对手方:失败要长得像失败,绝不能长得像"干净" */
.flow-failed{ background:#fef2f2; color:#b91c1c; border:1px solid #fecaca;
  border-radius:10px; padding:14px 16px; font-weight:600; }
.flow-failed .sub{ font-weight:400; color:#7f1d1d; margin-top:5px; font-size:13px; }

.flow-subject{ background:#fff; border:1px solid #e5e7eb; border-radius:10px;
  padding:12px 14px; margin-bottom:16px; }
.flow-subject .saddr{ font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-weight:700; word-break:break-all; }
.flow-subject .smeta{ color:#6b7280; margin-top:4px; }
/* 「加入监控」按钮:本页唯一的写动作,故【不给 btn-primary】——
   蓝色主按钮留给"查询/实时查询"那些只读动作,写动作反而低调些,避免顺手点。 */
.flow-subject .sactions{ margin-top:10px; }
.flow-subject .sactions .btn{ border-color:#94a3b8; color:#334155; }
.flow-subject .sactions .btn:hover{ background:#f1f5f9; }

/* 加入监控弹窗:提示块用中性蓝紫(与 norm 同色系)—— 它讲的是"接下来会发生什么",不是风险告警 */
.monitor-hint{ background:#eef2ff; color:#3730a3; border:1px solid #c7d2fe; line-height:1.65; }
.modal textarea{ width:100%; box-sizing:border-box; padding:7px 9px; font-size:14px;
  border:1px solid #d5d8dd; border-radius:6px; font-family:inherit; resize:vertical; }
.modal .mono-block{ font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  word-break:break-all; background:#f8fafc; border:1px solid #e5e7eb;
  border-radius:6px; padding:7px 9px; font-size:13px; }

.flow-cols{ display:grid; grid-template-columns:1fr 1fr; gap:16px; }
@media (max-width:820px){ .flow-cols{ grid-template-columns:1fr; } }
.flow-col h3{ font-size:15px; margin:0 0 10px; }
.flow-col h3 .cnt{ color:#6b7280; font-weight:400; font-size:13px; margin-left:6px; }

.cp-row{ background:#fff; border:1px solid #e5e7eb; border-radius:10px;
  padding:11px 13px; margin-bottom:9px; }
.cp-row .cp-top{ display:flex; justify-content:space-between; gap:8px; align-items:flex-start; }
.cp-addr{ font-family:ui-monospace,SFMono-Regular,Menlo,monospace; word-break:break-all;
  color:#0b5cff; cursor:pointer; background:none; border:0; padding:0; text-align:left; font-size:13px; }
.cp-addr:hover{ text-decoration:underline; }
.cp-amt{ font-weight:700; white-space:nowrap; }
.cp-amt small{ color:#6b7280; font-weight:400; }
.cp-line2{ color:#6b7280; margin-top:5px; font-size:13px; }
.cp-line2 span{ margin-right:14px; }

.tag{ display:inline-block; padding:2px 9px; border-radius:999px; font-size:12px;
  font-weight:600; margin-top:7px; }
.tag.red{ background:#fee2e2; color:#b91c1c; }
/* 橙 = 业务黑名单(公司内部名单),介于制裁红线与普通外部地址之间 */
.tag.orange{ background:#ffedd5; color:#b45309; }
.tag.green{ background:#dcfce7; color:#15803d; }
.tag.gray{ background:#f1f5f9; color:#64748b; }
/* 同时命中制裁和黑名单时两个标并排,给点间距免得挤在一起 */
.tag + .tag{ margin-left:6px; }
.tag-risk{ font-size:12px; color:#6b7280; margin-left:6px; }
.flow-empty{ color:#6b7280; padding:14px 0; }
.flow-empty.err{ color:#b91c1c; }
