/* Onchainmeme 監控終端 v5 — 照業主參考圖重製：近黑底＋螢光綠主色＋發光 icon＋左導航＋三欄 */
:root {
  --bg: #0a0a0f;            /* 近黑（參考圖底色） */
  --panel: #0e0e15;
  --card: #12121b;
  --card-hi: #181826;
  --border: #1d1d2b;
  --text: #dfe3ec;
  --dim: #8a90a3;
  --faint: #5a6072;
  --green: #34d178;         /* 螢光綠主 accent */
  --green-dim: rgba(52, 209, 120, .12);
  --blue: #4d9fff;
  --blue-dim: rgba(77, 159, 255, .12);
  --purple: #9d7bff;
  --purple-dim: rgba(157, 123, 255, .12);
  --red: #ff5d5d;
  --red-dim: rgba(255, 93, 93, .1);
  --yellow: #f5c451;
  --yellow-dim: rgba(245, 196, 81, .12);
  --cyan: #39c5cf;
  --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
[hidden] { display: none !important; } /* 防 class display 蓋掉 hidden 屬性 */
html, body { height: 100%; }
body {
  background: var(--bg); color: var(--text);
  font: 13.5px/1.5 -apple-system, "PingFang TC", "Noto Sans TC", sans-serif;
  display: flex; overflow: hidden;
}
.mono { font-family: var(--mono); }
button, select, input { font: inherit; color: inherit; }
a { color: var(--blue); text-decoration: none; }

/* ── 左側固定導航 ── */
.sidenav {
  width: 192px; flex: none; display: flex; flex-direction: column;
  background: var(--panel); border-right: 1px solid var(--border); padding: 12px 10px;
}
.sidenav__logo { font-weight: 800; font-size: 14.5px; letter-spacing: .2px; padding: 2px 6px 12px; white-space: nowrap; }
.logo-badge { font-size: 9.5px; color: var(--green); border: 1px solid var(--green); border-radius: 4px; padding: 0 4px; vertical-align: 2px; }
.sidenav__nav { display: flex; flex-direction: column; gap: 2px; flex: 1; overflow-y: auto; }
.nav-item {
  display: flex; align-items: center; gap: 9px; padding: 8px 10px;
  border: none; background: none; border-radius: 9px; cursor: pointer;
  color: var(--dim); font-size: 13px; text-align: left; text-decoration: none;
}
.nav-item:hover { background: var(--card); color: var(--text); text-decoration: none; }
.nav-item.is-on { background: var(--card-hi); color: var(--text); font-weight: 700; }
.nav-ic { width: 18px; text-align: center; flex: none; }
.nav-live { font-size: 9px; font-weight: 800; color: #0a0a0f; background: var(--green); border-radius: 4px; padding: 1px 4px; margin-left: auto; }
.sidenav__sys { border-top: 1px solid var(--border); padding-top: 10px; margin-top: 8px; }
.sys-title { font-size: 11px; color: var(--faint); margin-bottom: 6px; padding: 0 6px; }
.sys-row { display: flex; justify-content: space-between; font-size: 11.5px; color: var(--dim); padding: 2px 6px; font-family: var(--mono); }
.sys-ok { color: var(--green); }
.sys-bad { color: var(--red); }

/* ── 主殼 ── */
.shell { flex: 1; min-width: 0; display: flex; flex-direction: column; min-height: 0; }

/* 頂欄 */
.topbar {
  display: flex; align-items: center; gap: 12px;
  height: 50px; padding: 0 16px; flex: none;
  background: var(--panel); border-bottom: 1px solid var(--border);
}
.chain-pill { font-size: 12px; color: var(--dim); border: 1px solid var(--border); background: var(--card); border-radius: 8px; padding: 4px 10px; white-space: nowrap; flex: none; }
.topbar__search {
  flex: 1; min-width: 120px; max-width: 560px; height: 32px;
  background: var(--card); border: 1px solid var(--border); border-radius: 9px;
  padding: 0 12px; color: var(--text); outline: none;
}
.topbar__search:focus { border-color: var(--green); box-shadow: 0 0 0 2px var(--green-dim); }
.topbar__right { display: flex; align-items: center; gap: 9px; margin-left: auto; flex: none; }
.topbar__stat { font-size: 12px; color: var(--dim); white-space: nowrap; }
.topbar__auto { font-size: 12px; color: var(--dim); display: flex; align-items: center; gap: 4px; cursor: pointer; white-space: nowrap; }
.dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.dot--green { background: var(--green); box-shadow: 0 0 7px var(--green); }
.dot--red { background: var(--red); box-shadow: 0 0 6px var(--red); }
.dot--gray { background: var(--faint); }
.ibtn {
  width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center;
  background: var(--card); border: 1px solid var(--border); border-radius: 9px; cursor: pointer; position: relative;
}
.ibtn:hover { border-color: var(--green); }
.mobile-burger { display: none; } /* 手機才顯示 */
.nav-overlay { position: fixed; inset: 0; z-index: 44; background: rgba(0,0,0,.5); }
.bell-n {
  position: absolute; top: -5px; right: -5px; min-width: 16px; height: 16px;
  background: var(--red); color: #fff; font-size: 9.5px; font-weight: 800;
  border-radius: 8px; display: flex; align-items: center; justify-content: center; padding: 0 4px;
}
.pop {
  position: fixed; top: 52px; right: 14px; z-index: 60;
  background: var(--card-hi); border: 1px solid var(--border); border-radius: 10px;
  padding: 8px; display: flex; flex-direction: column; gap: 6px; min-width: 200px;
}
.pop button, .pop a { background: none; border: none; text-align: left; padding: 6px 8px; border-radius: 6px; cursor: pointer; font-size: 13px; color: var(--text); }
.pop button:hover, .pop a:hover { background: var(--card); text-decoration: none; }

/* ── KPI 統計卡（發光 icon 圓 + 大數字 + 漲跌% + 趨勢線） ── */
.summary {
  display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px;
  padding: 12px 16px 4px; flex: none;
}
.sum-card {
  background: var(--card); border: 1px solid var(--border); border-radius: 12px;
  padding: 10px 12px; display: flex; align-items: center; gap: 10px; min-width: 0;
}
.sum-ic {
  width: 36px; height: 36px; flex: none; border-radius: 50%; /* 參考圖:右側發光圓 */
  display: flex; align-items: center; justify-content: center; font-size: 16px;
}
.sum-ic--green { background: var(--green-dim); box-shadow: 0 0 12px var(--green-dim); }
.sum-ic--blue { background: var(--blue-dim); box-shadow: 0 0 12px var(--blue-dim); }
.sum-ic--purple { background: var(--purple-dim); box-shadow: 0 0 12px var(--purple-dim); }
.sum-ic--red { background: var(--red-dim); box-shadow: 0 0 12px var(--red-dim); }
.sum-ic--yellow { background: var(--yellow-dim); box-shadow: 0 0 12px var(--yellow-dim); }
.sum-card__body { min-width: 0; flex: 1; }
.sum-card__k { font-size: 11px; color: var(--dim); white-space: nowrap; }
.sum-card__v { font-size: 22px; font-weight: 800; font-family: var(--mono); line-height: 1.25; }
.sum-card__d { font-size: 10.5px; font-family: var(--mono); }
.sum-card svg.spark { flex: none; opacity: .9; }
.up { color: var(--green); } .down { color: var(--red); }

/* ── 中層 tab + 篩選列 ── */
.mtabs { display: flex; align-items: center; gap: 12px; padding: 10px 16px 8px; flex: none; flex-wrap: wrap; }
.tabs { display: flex; gap: 6px; }
.tab {
  padding: 6px 14px; background: var(--card); border: 1px solid var(--border);
  border-radius: 9px; cursor: pointer; font-size: 13px; font-weight: 700; color: var(--dim);
}
.tab.is-on[data-tab="all"] { color: var(--text); border-color: var(--green); background: var(--green-dim); }
.tab.is-on[data-tab="live"] { color: var(--cyan); border-color: var(--cyan); background: rgba(57,197,207,.1); }
.tab.is-on[data-tab="agg"] { color: var(--purple); border-color: var(--purple); background: var(--purple-dim); }
.tab__n { font-family: var(--mono); font-size: 11.5px; }
.filters { display: flex; flex-wrap: wrap; gap: 6px; }
.filters select {
  background: var(--card); border: 1px solid var(--border); border-radius: 8px;
  padding: 4px 8px; font-size: 12px; color: var(--dim); max-width: 128px; cursor: pointer;
}

/* 監控狀態 banner（綠 + 心電圖） */
.fw-banner {
  display: flex; align-items: center; gap: 10px;
  margin: 0 16px 8px; padding: 8px 12px; flex: none;
  background: var(--green-dim); border: 1px solid rgba(52, 209, 120, .35); border-radius: 10px;
  font-size: 12.5px; color: var(--text);
}
.fw-banner.is-down { background: var(--red-dim); border-color: rgba(255, 93, 93, .35); }
.fw-banner svg { margin-left: auto; flex: none; }

/* ── 三欄 ── */
.cols { flex: 1; display: flex; gap: 10px; min-height: 0; padding: 0 16px 12px; }
.col { display: flex; flex-direction: column; min-height: 0; background: var(--panel); border: 1px solid var(--border); border-radius: 12px; }
.col--feed { width: 30%; min-width: 300px; }
.col--focus { flex: 1; min-width: 0; }
.col--alerts { width: 21%; min-width: 220px; }
.col__head {
  flex: none; display: flex; align-items: baseline; justify-content: space-between; gap: 8px;
  padding: 10px 12px 8px; border-bottom: 1px solid var(--border);
}
.col__head--focus { border-bottom-color: rgba(255, 93, 93, .3); }
.col__title { font-size: 13px; font-weight: 800; }
.col__head--focus .col__title { color: var(--red); }
.col__hint { font-size: 10.5px; color: var(--faint); }

/* 信號列表 */
.new-banner {
  flex: none; margin: 8px 10px 0; padding: 6px 10px;
  background: var(--green-dim); border: 1px solid rgba(52, 209, 120, .4);
  border-radius: 8px; color: var(--green); font-size: 12.5px; font-weight: 700; cursor: pointer;
}
.sig-list { flex: 1; overflow-y: auto; padding: 8px 10px 30px; outline: none; }
.sig-card {
  position: relative; background: var(--card); border: 1px solid var(--border);
  border-left: 4px solid transparent; border-radius: 12px;
  padding: 9px 12px 9px 12px; margin-bottom: 8px; cursor: pointer;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .2);
  transition: transform .15s ease, box-shadow .15s ease, border-color .15s ease, background-color .15s ease;
}
.sig-card:hover {
  background: var(--card-hi); border-color: var(--faint);
  transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(0, 0, 0, .3);
}
.sig-card.pri-hi { border-left-color: var(--red); box-shadow: 0 1px 2px rgba(0, 0, 0, .2), 0 0 16px var(--red-dim); }
.sig-card.pri-hi:hover { box-shadow: 0 6px 16px rgba(0, 0, 0, .3), 0 0 20px var(--red-dim); }
.sig-card.pri-mid { border-left-color: var(--yellow); }
.sig-card.pri-lo { border-left-color: var(--faint); }
.sig-card.is-sel { background: var(--card-hi); border-color: var(--green); border-left-color: var(--green); box-shadow: 0 2px 8px rgba(0, 0, 0, .25), 0 0 16px var(--green-dim); }
.sig-card.is-sel:hover { box-shadow: 0 6px 16px rgba(0, 0, 0, .3), 0 0 18px var(--green-dim); }
.sig-card.is-read :is(.sc-sym, .sc-sum) { opacity: .55; }
.sig-card.is-ign { opacity: .4; }
.sc-row { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.sc-type {
  font-size: 12px; flex: none; width: 24px; height: 24px; border-radius: 8px;
  display: flex; align-items: center; justify-content: center;
  background: var(--green-dim); box-shadow: 0 0 8px var(--green-dim);
}
.sig-card[data-type="agg"] .sc-type { background: var(--purple-dim); box-shadow: 0 0 8px var(--purple-dim); }
.sig-card[data-type="born"] .sc-type { background: var(--yellow-dim); box-shadow: 0 0 8px var(--yellow-dim); }
.sc-sym { font-weight: 800; font-size: 13.5px; }
.sc-tag { font-size: 10px; border: 1px solid; border-radius: 5px; padding: 0 5px; white-space: nowrap; }
.sc-tag--live { color: var(--cyan); border-color: rgba(57, 197, 207, .5); }
.sc-tag--agg { color: var(--purple); border-color: rgba(157, 123, 255, .5); }
.sc-tag--born { color: var(--yellow); border-color: rgba(245, 196, 81, .5); }
.sc-tag--born-trig { color: var(--green); border-color: rgba(52, 209, 120, .5); }
.sc-tag--hi { color: var(--red); border-color: rgba(255, 93, 93, .5); }
.sc-tag--mid { color: var(--yellow); border-color: rgba(245, 196, 81, .5); }
.sc-score { font-family: var(--mono); font-weight: 800; font-size: 12.5px; margin-left: auto; }
.sc-score.hi { color: var(--red); } .sc-score.mid { color: var(--yellow); } .sc-score.lo { color: var(--dim); }
.sc-sum { font-size: 11.5px; color: var(--dim); margin: 3px 0 4px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.sc-meta { display: flex; flex-wrap: wrap; gap: 4px 10px; font-size: 10.5px; color: var(--faint); font-family: var(--mono); }
.sc-foot { display: flex; align-items: center; gap: 6px; margin-top: 4px; }
.sc-time { font-size: 10.5px; color: var(--faint); font-family: var(--mono); }
.sc-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--green); box-shadow: 0 0 5px var(--green); flex: none; }
.sc-acts { margin-left: auto; display: flex; gap: 4px; }
.sc-act { background: none; border: none; cursor: pointer; font-size: 13px; opacity: .5; padding: 1px 3px; }
.sc-act:hover, .sc-act.on { opacity: 1; }
.list-state { padding: 30px 10px; text-align: center; color: var(--dim); font-size: 13px; }
.list-state button { margin-top: 8px; padding: 5px 14px; background: var(--card); border: 1px solid var(--border); border-radius: 8px; cursor: pointer; }
.skel { height: 74px; border-radius: 12px; margin-bottom: 8px; background: linear-gradient(90deg, var(--card) 25%, var(--card-hi) 50%, var(--card) 75%); background-size: 200% 100%; animation: sk 1.2s infinite; }
@keyframes sk { from { background-position: 200% 0 } to { background-position: -200% 0 } }

/* ── 焦點詳情欄（紅框發光 = 參考圖高優先級卡） ── */
.col--focus { border-color: rgba(255, 93, 93, .35); box-shadow: 0 0 18px rgba(255, 93, 93, .06); }
.detail-empty { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; color: var(--dim); }
.detail-empty__icon { font-size: 40px; opacity: .5; }
.detail-empty .hint { font-size: 12px; color: var(--faint); font-family: var(--mono); }
.detail { flex: 1; display: flex; flex-direction: column; min-height: 0; animation: fade .18s ease; }
@keyframes fade { from { opacity: .35 } to { opacity: 1 } }
.detail__head {
  flex: none; padding: 10px 14px; border-bottom: 1px solid var(--border);
  background: var(--panel); display: flex; flex-wrap: wrap; align-items: center; gap: 7px;
}
.dh-sym { font-size: 17px; font-weight: 800; }
.dh-score {
  font-family: var(--mono); font-weight: 800; font-size: 14px;
  background: var(--red-dim); border: 1px solid rgba(255, 93, 93, .4); border-radius: 8px; padding: 2px 9px;
}
.dh-ca { font-family: var(--mono); font-size: 11px; color: var(--dim); cursor: pointer; border: 1px dashed var(--border); border-radius: 6px; padding: 1px 6px; }
.dh-ca:hover { color: var(--green); border-color: var(--green); }
.dh-time { font-size: 11.5px; color: var(--faint); font-family: var(--mono); }
.dh-acts { margin-left: auto; display: flex; flex-wrap: wrap; gap: 5px; }
.dh-btn {
  padding: 4px 10px; font-size: 12px; border-radius: 7px; cursor: pointer;
  background: var(--card); border: 1px solid var(--border); color: var(--text); white-space: nowrap;
}
.dh-btn:hover { border-color: var(--green); text-decoration: none; }
.dh-btn.on { border-color: var(--yellow); color: var(--yellow); }
.dh-btn--pri { background: var(--purple); border-color: var(--purple); color: #0d0716; font-weight: 800; }
.dh-btn--pri:hover { border-color: var(--purple); filter: brightness(1.1); }
.detail__body { flex: 1; overflow-y: auto; padding: 12px 14px 60px; }
.dsec { margin-bottom: 16px; }
.dsec__t { font-size: 12.5px; font-weight: 800; color: var(--dim); margin-bottom: 7px; letter-spacing: .4px; }
.dsec__box { background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; overflow-x: auto; } /* 表格窄屏橫捲(codex P3-R1) */
.d-summary { font-size: 13px; line-height: 1.75; }
.kgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(122px, 1fr)); gap: 7px; }
.kcell { background: var(--card); border: 1px solid var(--border); border-radius: 9px; padding: 7px 10px; }
.kcell__k { font-size: 10.5px; color: var(--faint); }
.kcell__v { font-size: 13.5px; font-weight: 700; font-family: var(--mono); margin-top: 1px; }
.rule { display: flex; gap: 8px; align-items: baseline; padding: 4px 0; font-size: 12.5px; border-bottom: 1px dashed var(--border); }
.rule:last-child { border-bottom: none; }
.rule__st { flex: none; font-size: 11px; font-weight: 700; width: 44px; }
.st-ok { color: var(--green); } .st-warn { color: var(--yellow); } .st-bad { color: var(--red); } .st-unk { color: var(--faint); }
.wtable { width: 100%; border-collapse: collapse; font-size: 12px; }
.wtable th { text-align: left; color: var(--faint); font-weight: 600; padding: 4px 6px; border-bottom: 1px solid var(--border); white-space: nowrap; }
.wtable td { padding: 5px 6px; border-bottom: 1px dashed var(--border); vertical-align: top; }
.wtable tr.w-main td { cursor: pointer; }
.wtable tr:hover.w-main td { background: var(--card-hi); }
.w-exp td { background: var(--panel); font-family: var(--mono); font-size: 11px; color: var(--dim); word-break: break-all; }
.tl { list-style: none; }
.tl li { position: relative; padding: 0 0 12px 18px; border-left: 2px solid var(--border); margin-left: 6px; }
.tl li::before { content: ""; position: absolute; left: -5px; top: 3px; width: 8px; height: 8px; border-radius: 50%; background: var(--green); box-shadow: 0 0 6px var(--green-dim); }
.tl li:last-child { border-left-color: transparent; }
.tl__t { font-family: var(--mono); font-size: 11px; color: var(--faint); }
.tl__d { font-size: 12.5px; }
.tl__gap { color: var(--purple); font-family: var(--mono); font-size: 10.5px; }
.risk { display: grid; grid-template-columns: repeat(auto-fill, minmax(185px, 1fr)); gap: 6px; }
.risk__item { display: flex; justify-content: space-between; gap: 6px; background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 6px 10px; font-size: 12px; }
.notes textarea {
  width: 100%; min-height: 70px; background: var(--card); border: 1px solid var(--border);
  border-radius: 8px; padding: 8px 10px; color: var(--text); resize: vertical; outline: none;
}
.notes textarea:focus, .notes input:focus { border-color: var(--green); }
.notes input { width: 100%; background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 6px 10px; color: var(--text); outline: none; margin-top: 6px; }
.notes__row { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; align-items: center; }
.mark-btn { padding: 4px 10px; font-size: 12px; background: var(--card); border: 1px solid var(--border); border-radius: 7px; cursor: pointer; color: var(--dim); }
.mark-btn.on { color: var(--green); border-color: var(--green); }
.note-save { margin-left: auto; padding: 4px 14px; font-size: 12px; background: var(--green); border: none; border-radius: 7px; color: #06120a; font-weight: 800; cursor: pointer; }
.note-st { font-size: 11px; color: var(--faint); }
.sec-state { color: var(--dim); font-size: 12.5px; padding: 6px 0; }
.sec-state button { margin-left: 8px; padding: 2px 10px; background: var(--card); border: 1px solid var(--border); border-radius: 6px; cursor: pointer; font-size: 12px; }
.kwrap iframe { width: 100%; height: 420px; border: 1px solid var(--border); border-radius: 10px; background: #000; }
.kbtns { display: flex; gap: 5px; margin-bottom: 6px; }
.kbtns button { padding: 3px 10px; font-size: 12px; background: var(--card); border: 1px solid var(--border); border-radius: 6px; cursor: pointer; color: var(--dim); }
.kbtns button.on { color: var(--green); border-color: var(--green); }

/* ── 右欄：即時警報流 ── */
.alerts-list { flex: 1; overflow-y: auto; padding: 8px 10px 30px; }
.alert-item {
  display: flex; gap: 8px; padding: 8px 6px; border-bottom: 1px dashed var(--border); cursor: pointer; border-radius: 8px;
}
.alert-item:hover { background: var(--card); }
.alert-dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--yellow); box-shadow: 0 0 6px var(--yellow-dim); margin-top: 5px; }
.alert-body { min-width: 0; }
.alert-t { font-size: 12.5px; font-weight: 700; }
.alert-sub { font-size: 11px; color: var(--dim); font-family: var(--mono); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.alert-time { font-size: 10.5px; color: var(--faint); font-family: var(--mono); }
.alerts-more { display: block; padding: 8px 6px; font-size: 12px; color: var(--blue); background: none; border: none; cursor: pointer; text-decoration: underline; }

/* read key 閘 / toast */
.key-gate { position: fixed; inset: 0; z-index: 80; background: rgba(5, 5, 10, .92); display: flex; align-items: center; justify-content: center; }
.key-gate__box { background: var(--card); border: 1px solid var(--border); border-radius: 12px; padding: 22px; width: min(420px, 90vw); display: flex; flex-direction: column; gap: 10px; }
.key-gate__box input { background: var(--panel); border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; color: var(--text); outline: none; }
.key-gate__box button { padding: 8px; background: var(--green); border: none; border-radius: 8px; font-weight: 800; color: #06120a; cursor: pointer; }
.toast {
  position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%); z-index: 90;
  background: var(--card-hi); border: 1px solid var(--border); border-radius: 10px;
  padding: 9px 16px; font-size: 13px; max-width: 90vw;
}
.btn-back { display: none; }

/* ── 響應式 ── */
@media (max-width: 1500px) { .col--alerts { width: 24%; min-width: 200px; } }
@media (max-width: 1200px) {
  .col--alerts { display: none; }        /* 右警報欄先收（資訊在聚合 tab 都有） */
  .summary { grid-template-columns: repeat(3, 1fr); }
  .sidenav { width: 168px; }
}
@media (max-width: 1023px) {
  .mobile-burger { display: inline-flex; }
  .sidenav { position: fixed; top: 0; left: 0; bottom: 0; z-index: 46; transform: translateX(-100%); transition: transform .2s ease; box-shadow: 2px 0 16px rgba(0,0,0,.5); }
  .sidenav.is-open { transform: translateX(0); }
  .sidenav--collapsed { width: 192px; padding: 12px 10px; } /* 手機抽屜不收窄,全展開 */
  .sidenav--collapsed .nav-tx, .sidenav--collapsed .nav-live, .sidenav--collapsed .sidenav__sys { display: revert; }
  .sidenav--collapsed .nav-item { justify-content: flex-start; padding: 8px 10px; }
  .nav-collapse { display: none !important; } /* 手機不用收折鈕(全域定位規則在後,需 important) */
  .cols { position: relative; padding: 0 10px 10px; }
  .col--feed { width: 100%; max-width: none; min-width: 0; }
  .col--focus { display: none; position: absolute; inset: 0; z-index: 30; }
  .cols.show-detail .col--feed { display: none; }
  .cols.show-detail .col--focus { display: flex; }
  .btn-back { display: block; flex: none; margin: 8px 12px 0; padding: 6px 12px; width: max-content; background: var(--card); border: 1px solid var(--border); border-radius: 8px; cursor: pointer; }
  .summary { grid-template-columns: repeat(2, 1fr); padding: 10px 10px 4px; }
  .mtabs { padding: 8px 10px 6px; }
  .fw-banner { margin: 0 10px 8px; }
  .topbar__stat, .chain-pill { display: none; }
  .topbar__search { max-width: none; }
}

/* ── v6 參考圖對照補件 ── */
.feed-pause { background: none; border: none; color: var(--faint); font-size: 11px; cursor: pointer; }
.feed-pause.on { color: var(--yellow); }
.f-q { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 4px 10px; font-size: 12px; color: var(--text); width: 190px; outline: none; }
.f-q:focus { border-color: var(--green); }
.feed-total { flex: none; padding: 9px 6px; font-size: 12px; color: var(--blue); background: none; border: none; border-top: 1px solid var(--border); cursor: pointer; text-decoration: underline; }
.sc-tag--conf-hi { color: var(--green); border-color: rgba(52,209,120,.5); }
.sc-tag--conf-mid { color: var(--yellow); border-color: rgba(245,196,81,.5); }
.sc-tag--conf-lo { color: var(--faint); border-color: var(--border); }
.sc-btns { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 5px; }
.sc-btn { font-size: 10.5px; padding: 2px 8px; border-radius: 6px; border: 1px solid var(--border); background: var(--panel); color: var(--dim); cursor: pointer; text-decoration: none; }
.sc-btn:hover { filter: brightness(1.15); text-decoration: none; }
.sc-btn--debot { color: var(--purple); border-color: rgba(157,123,255,.5); background: var(--purple-dim); }
.sc-btn--gmgn { color: var(--green); border-color: rgba(52,209,120,.5); background: var(--green-dim); }
.sc-btn--vote { color: var(--yellow); border-color: rgba(245,196,81,.5); background: var(--yellow-dim); }
.dh-bigscore { font-family: var(--mono); font-weight: 800; font-size: 34px; line-height: 1; color: var(--green); text-shadow: 0 0 14px var(--green-dim); }
.dh-bigscore.mid { color: var(--yellow); text-shadow: none; }
.dh-bigscore.lo { color: var(--dim); text-shadow: none; }
.focus-risk { font-size: 10.5px; font-weight: 800; border: 1px solid; border-radius: 6px; padding: 1px 8px; white-space: nowrap; }
.focus-risk.hi { color: var(--red); border-color: rgba(255,93,93,.5); background: var(--red-dim); }
.focus-risk.mid { color: var(--yellow); border-color: rgba(245,196,81,.5); }
.focus-risk.lo { color: var(--faint); border-color: var(--border); }
.statrow { display: flex; flex-wrap: wrap; gap: 6px 16px; font-family: var(--mono); font-size: 12.5px; color: var(--dim); margin: 8px 0 6px; }
.statrow b { color: var(--text); font-weight: 700; }
.tagrow { display: flex; flex-wrap: wrap; gap: 5px; margin: 6px 0; }
.pill { font-size: 10.5px; border: 1px solid var(--border); background: var(--card); border-radius: 6px; padding: 1px 8px; color: var(--dim); }
.pill--blue { color: var(--blue); border-color: rgba(77,159,255,.45); }
.pill--green { color: var(--green); border-color: rgba(52,209,120,.45); }
.pill--red { color: var(--red); border-color: rgba(255,93,93,.45); }
.pill--yellow { color: var(--yellow); border-color: rgba(245,196,81,.45); }
.pill--purple { color: var(--purple); border-color: rgba(157,123,255,.45); }
.quote-box { border-left: 3px solid var(--green); background: var(--card); border-radius: 0 10px 10px 0; padding: 9px 12px; font-size: 13px; line-height: 1.7; color: var(--text); font-style: normal; }
.wpills { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 8px; }
.wpill { font-size: 11px; font-family: var(--mono); border: 1px solid var(--border); background: var(--card); border-radius: 7px; padding: 2px 8px; color: var(--dim); }
.wpill b { color: var(--text); font-family: inherit; }
.tl-more { background: none; border: none; color: var(--blue); font-size: 12px; cursor: pointer; padding: 4px 0; text-decoration: underline; }
.cta3 { display: flex; gap: 8px; margin-top: 4px; }
.cta3 > * { flex: 1; text-align: center; padding: 9px 10px; border-radius: 9px; font-size: 13px; font-weight: 800; cursor: pointer; text-decoration: none; }
.cta3 .cta-a { color: var(--green); border: 1px solid rgba(52,209,120,.5); background: var(--green-dim); }
.cta3 .cta-b { color: #0d0716; border: 1px solid var(--purple); background: var(--purple); }
.cta3 .cta-c { color: var(--dim); border: 1px solid var(--border); background: var(--card); }
.cta3 > *:hover { filter: brightness(1.12); text-decoration: none; }
.alert-addr { font-size: 10.5px; color: var(--faint); font-family: var(--mono); }
.alert-btns { display: flex; gap: 5px; margin-top: 3px; }
.alert-btn { font-size: 10px; padding: 1px 7px; border-radius: 5px; border: 1px solid rgba(52,209,120,.5); color: var(--green); background: var(--green-dim); text-decoration: none; }
.alert-btn:hover { filter: brightness(1.15); text-decoration: none; }
.alert-btn--debot { color: var(--purple); border-color: rgba(157,123,255,.5); background: var(--purple-dim); }
.col__acts { display: flex; gap: 10px; align-items: center; }

/* ── 白天模式（業主4712）:變數整組覆蓋,元件全自動跟色 ── */
html[data-theme="light"] {
  --bg: #f2f4f7; --panel: #ffffff; --card: #f7f8fa; --card-hi: #eceff4; --border: #dfe3ea;
  --text: #17202e; --dim: #5b6577; --faint: #8b94a6;
  --green: #0d9d5d; --green-dim: rgba(13, 157, 93, .1);
  --blue: #1a73e8; --blue-dim: rgba(26, 115, 232, .1);
  --purple: #7c4dff; --purple-dim: rgba(124, 77, 255, .1);
  --red: #d93025; --red-dim: rgba(217, 48, 37, .08);
  --yellow: #a8720a; --yellow-dim: rgba(168, 114, 10, .12);
  --cyan: #0b8494;
}
html[data-theme="light"] .dh-bigscore { text-shadow: none; }
html[data-theme="light"] .kwrap iframe { background: #fff; }
/* 鈴鐺通知面板 */
.pop--bell { width: 340px; max-height: 62vh; overflow-y: auto; }
.bell-item { display: flex; flex-direction: column; gap: 1px; padding: 7px 8px; border-radius: 8px; cursor: pointer; border-bottom: 1px dashed var(--border); }
.bell-item:hover { background: var(--card); }
.bell-item__t { font-size: 12.5px; font-weight: 700; display: flex; gap: 6px; align-items: baseline; }
.bell-item__time { margin-left: auto; font-size: 10.5px; color: var(--faint); font-family: var(--mono); font-weight: 400; }
.bell-item__sub { font-size: 11px; color: var(--dim); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.bell-head { display: flex; justify-content: space-between; align-items: center; padding: 2px 8px 6px; font-size: 12px; color: var(--dim); border-bottom: 1px solid var(--border); }
.bell-head button { background: none; border: none; color: var(--blue); cursor: pointer; font-size: 12px; text-decoration: underline; }
.bell-empty { padding: 14px 8px; text-align: center; color: var(--faint); font-size: 12.5px; }

/* ── P0：側欄收折 + hash router 子頁 + styleguide/stub ── */
@media (min-width: 1024px) { .sidenav { position: relative; } } /* 收折鈕定位基準:僅桌面,手機是 fixed 抽屜(業主4768:原全域 relative 覆蓋手機 fixed 致衝突) */
.sidenav__logo-text { overflow: hidden; white-space: nowrap; }
.nav-collapse { /* 業主4737:移到側欄右緣垂直置中+放大,不擋 logo */
  position: absolute; right: -14px; top: 50%; transform: translateY(-50%); z-index: 45;
  width: 28px; height: 28px; border-radius: 50%; font-size: 14px;
  background: var(--card); border: 1px solid var(--border); color: var(--dim); cursor: pointer;
  display: flex; align-items: center; justify-content: center; box-shadow: 0 0 8px rgba(0,0,0,.35);
}
.nav-collapse:hover { color: var(--text); border-color: var(--green); }
.sidenav--collapsed { width: 56px; padding: 12px 8px; }
.sidenav--collapsed .sidenav__logo-text { display: none; }

.sidenav--collapsed .nav-tx, .sidenav--collapsed .nav-live { display: none; }
.sidenav--collapsed .nav-item { justify-content: center; padding: 9px 0; }
.sidenav--collapsed .sidenav__sys { display: none; }
.view-root { flex: 1; min-height: 0; overflow-y: auto; padding: 14px 18px 60px; }
.shell--sub #summary, .shell--sub .mtabs, .shell--sub #fw-banner, .shell--sub #main { display: none !important; }
.stub { max-width: 560px; margin: 8vh auto 0; text-align: center; display: flex; flex-direction: column; gap: 8px; align-items: center; }
.stub__icon { font-size: 42px; }
.stub__title { font-size: 19px; font-weight: 800; }
.stub__desc { color: var(--dim); font-size: 13px; }
.stub__phase { color: var(--yellow); font-size: 12.5px; font-weight: 700; }
.stub__hint { color: var(--faint); font-size: 12px; }
.stub__link { display: inline-block; margin-top: 4px; padding: 7px 16px; border: 1px solid rgba(52,209,120,.5); border-radius: 9px; color: var(--green); background: var(--green-dim); font-weight: 700; }
.stub__link:hover { filter: brightness(1.12); text-decoration: none; }
.sg-pal { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.sg-swatch { background: var(--card); border: 1px solid var(--border); border-radius: 9px; padding: 8px; }
.sg-swatch__chip { height: 30px; border-radius: 7px; border: 1px solid var(--border); margin-bottom: 5px; }
.sg-swatch__v { font-size: 11px; }
.sg-swatch__d { font-size: 10.5px; color: var(--faint); }
@media (max-width: 1023px) {
  .view-root { padding: 12px 10px 80px; -webkit-overflow-scrolling: touch; } /* 慣性滾動 */
  .sg-grid { columns: 1; } /* 規範頁單欄 */
  .kwrap iframe { height: 300px; }
  body { overflow: auto; } /* 手機允許整頁滾動(桌面 hidden) */
  .shell { min-height: 0; }
}

/* ── P1 views：名冊/收藏 ── */
.rv-bar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; }
.rv-chips { display: flex; flex-wrap: wrap; gap: 5px; }
.rv-chips .pill { cursor: pointer; }
.rv-group { background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 4px 8px; font-size: 12px; color: var(--dim); cursor: pointer; }
.rv-cols { display: flex; gap: 10px; min-height: 420px; margin-bottom: 14px; }
.rv-list { width: 42%; min-width: 300px; max-height: 66vh; }
.rv-det { flex: 1; min-width: 0; max-height: 66vh; }
.rv-list__body, .rv-det__body { flex: 1; overflow-y: auto; padding: 8px 10px 20px; }
.rv-row { padding: 7px 9px; border: 1px solid var(--border); border-left: 3px solid transparent; border-radius: 9px; margin-bottom: 6px; cursor: pointer; background: var(--card); }
.rv-row:hover { background: var(--card-hi); }
.rv-row.is-sel { border-color: var(--green); border-left-color: var(--green); background: var(--card-hi); }
.rv-row__l1 { display: flex; align-items: center; gap: 6px; font-size: 13px; flex-wrap: wrap; }
.rv-row__l2 { font-size: 11px; color: var(--faint); margin-top: 2px; }
.rv-det__body .kgrid { margin: 10px 0; }
.fav-note { background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 9px 11px; margin-bottom: 8px; }
.fav-note__head { display: flex; flex-wrap: wrap; gap: 6px; align-items: baseline; margin-bottom: 6px; }
.fav-note__ta { width: 100%; min-height: 48px; background: var(--panel); border: 1px solid var(--border); border-radius: 8px; padding: 6px 9px; color: var(--text); resize: vertical; outline: none; }
.fav-note__ta:focus { border-color: var(--green); }
@media (max-width: 1023px) { .rv-cols { flex-direction: column; } .rv-list { width: 100%; max-height: 40vh; } }

/* styleguide 升級（業主4737）：頂部版本區 + sticky 頁內導覽 + 驗收清單 */
.sg-head { margin-bottom: 12px; }
.sg-head__sub { color: var(--dim); font-size: 12.5px; }
.sg-head__meta { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 6px; }
.sg-nav { position: sticky; top: 0; z-index: 20; display: flex; flex-wrap: wrap; gap: 5px; padding: 8px 0; background: var(--bg); border-bottom: 1px solid var(--border); margin-bottom: 12px; }
.sg-nav a { font-size: 11.5px; padding: 2px 9px; border: 1px solid var(--border); border-radius: 6px; color: var(--dim); }
.sg-nav a:hover { color: var(--text); border-color: var(--green); text-decoration: none; }
.sg-swatch { cursor: pointer; }
.sg-swatch:hover { border-color: var(--green); }
.tq-bar { display: flex; gap: 8px; margin-bottom: 8px; }
.tq-input { flex: 1; max-width: 560px; }

/* styleguide v2（業主4737 完整規格＋參考圖）：網格卡片式 */
.sg-head__row { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px; align-items: flex-start; }
.sg-grid { columns: 3 380px; column-gap: 10px; } /* masonry 整齊填充(業主4742) */
.sg-grid .sg-card { break-inside: avoid; margin-bottom: 10px; }
.sg-card { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 12px; min-width: 0; }
.sg-card__head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; margin-bottom: 8px; border-bottom: 1px solid var(--border); padding-bottom: 6px; }
.sg-card__t { font-size: 13px; font-weight: 800; }
.sg-card__comp { font-size: 10px; color: var(--faint); }
.sg-group-t { font-size: 11px; color: var(--dim); font-weight: 700; margin: 8px 0 4px; }
.sg-swatch__n { font-size: 11.5px; font-weight: 700; margin-top: 3px; }
.sg-swatch__ban { font-size: 10px; color: var(--red); }
.sg-btnrow { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; flex-wrap: wrap; }
.sg-btn-danger { padding: 5px 14px; font-size: 12.5px; border-radius: 8px; cursor: pointer; background: var(--red-dim); border: 1px solid var(--red); color: var(--red); font-weight: 700; }
.sg-cta-demo { flex: none !important; padding: 5px 14px !important; font-size: 12.5px !important; border-radius: 8px; cursor: pointer; }
.sg-form { display: flex; flex-direction: column; gap: 7px; }
.sg-form .f-q { width: 100%; max-width: 340px; }
.rv-pager { flex: none; display: flex; gap: 5px; padding: 8px 10px; border-top: 1px solid var(--border); flex-wrap: wrap; }
.rv-pager .pill { cursor: pointer; font-family: var(--mono); }
.rv-det__body .quote-box { margin-bottom: 8px; }
.pop__k { font-size: 11px; color: var(--faint); padding: 2px 8px; }
.pop__s { font-size: 11.5px; color: var(--dim); padding: 2px 8px 6px; }
.pop__sep { height: 1px; background: var(--border); margin: 4px 0; }

/* ── P1批A M1 📇 通訊錄（忠實搬遷自舊站 style.css .contact-*/.data-table/.modal） ── */
.ct-form { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.ct-input {
  background: var(--card); border: 1px solid var(--border); border-radius: 8px;
  padding: 7px 10px; font-size: 13px; color: var(--text); outline: none; flex: 1; min-width: 130px;
}
.ct-input:focus { border-color: var(--green); }
.ct-input--mono { font-family: var(--mono); flex: 2; min-width: 200px; }
.ct-toolbar-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 8px; }
.ct-toolbar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.ct-search { width: 240px; }
.ct-table-wrap { overflow-x: auto; }
.ct-table { width: 100%; min-width: 640px; border-collapse: collapse; font-size: 12.5px; }
.ct-table thead th {
  text-align: left; font-size: 11px; font-weight: 700; color: var(--faint);
  text-transform: uppercase; letter-spacing: .03em; padding: 8px 10px; border-bottom: 1px solid var(--border); white-space: nowrap;
}
.ct-table th.ct-sortable { cursor: pointer; user-select: none; }
.ct-table th.ct-sortable:hover { color: var(--text); }
.ct-table th.is-sorted { color: var(--green); }
.ct-sort-arrow { display: inline-block; width: .9em; text-align: center; font-size: 9px; vertical-align: middle; }
.ct-table tbody td { padding: 8px 10px; border-bottom: 1px dashed var(--border); vertical-align: middle; color: var(--text); }
.ct-table tbody tr:hover td { background: var(--card-hi); }
.ct-table tbody tr:last-child td { border-bottom: none; }
.ct-gmgn-name { font-weight: 700; color: var(--text); }
.ct-note-cell { color: var(--dim); font-size: 12px; max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ct-row-actions { white-space: nowrap; display: flex; flex-wrap: wrap; gap: 5px; }
.ct-addr-btn {
  display: inline-flex; align-items: center; gap: 6px; font-family: var(--mono); font-size: 12px;
  color: var(--text); background: transparent; border: 1px solid transparent; border-radius: 6px;
  padding: 3px 6px; cursor: pointer;
}
.ct-addr-btn:hover { background: var(--card); border-color: var(--border); }
.ct-addr-icon { color: var(--faint); }
.ct-addr-btn.is-copied .ct-addr-icon { color: var(--green); }
.ct-group-row td { background: var(--card); padding: 5px 10px; }
.ct-group-row .sc-btn { font-weight: 700; color: var(--green); }
.ct-group-row--xtoken td { background: var(--yellow-dim); }
.ct-group-row--xtoken .sc-btn { color: var(--yellow); font-weight: 800; }
.cross-badge {
  display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px;
  font-size: 10.5px; font-weight: 700; color: #1a1206; vertical-align: middle;
  background: linear-gradient(135deg, #ffd76a, #f5a623);
}
.sc-btn--danger { color: var(--red); border-color: rgba(255,93,93,.5); background: var(--red-dim); }

/* 通訊錄編輯小卡 */
.ct-modal-overlay {
  position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center;
  padding: 16px; background: rgba(2, 6, 14, .72); backdrop-filter: blur(3px);
}
.ct-modal {
  width: 100%; max-width: 400px; max-height: 84vh; display: flex; flex-direction: column;
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px;
  box-shadow: 0 24px 60px -12px rgba(0,0,0,.6); overflow: hidden;
}
.ct-modal__head { display: flex; align-items: center; justify-content: space-between; padding: 14px 18px; border-bottom: 1px solid var(--border); }
.ct-modal__title { font-size: 15px; font-weight: 800; color: var(--text); }
.ct-modal__close { appearance: none; border: none; background: transparent; color: var(--dim); font-size: 16px; cursor: pointer; width: 30px; height: 30px; border-radius: 6px; }
.ct-modal__close:hover { background: var(--card); color: var(--text); }
.ct-modal__body { padding: 16px 18px; overflow-y: auto; }
.ct-modal__readonly { display: flex; flex-direction: column; gap: 4px; padding: 10px 12px; margin-bottom: 14px; background: var(--card); border: 1px solid var(--border); border-radius: 8px; }
.ct-modal__ro-row { display: flex; align-items: baseline; gap: 8px; font-size: 12.5px; }
.ct-modal__ro-key { flex: 0 0 60px; color: var(--dim); }
.ct-modal__ro-val { color: var(--text); font-weight: 600; word-break: break-word; }
.ct-modal__field { display: flex; flex-direction: column; gap: 5px; margin-bottom: 12px; }
.ct-modal__flabel { font-size: 12px; font-weight: 700; color: var(--dim); }
.ct-modal__field input, .ct-modal__note {
  background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 7px 10px;
  font-size: 13px; color: var(--text); outline: none; font-family: inherit;
}
.ct-modal__field input:focus, .ct-modal__note:focus { border-color: var(--green); }
.ct-modal__note { resize: vertical; min-height: 44px; }
.ct-modal__quicktags { display: flex; flex-wrap: wrap; gap: 6px; margin: 2px 0 10px; }
.ct-modal__actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 4px; }

/* 通訊錄群組單獨匯出視窗 */
.ct-exp-overlay {
  position: fixed; inset: 0; z-index: 110; display: flex; align-items: center; justify-content: center;
  background: rgba(0,0,0,.6); padding: 16px;
}
.ct-exp-card { background: var(--panel); border: 1px solid var(--border); border-radius: 12px; padding: 16px; width: min(560px, 96vw); max-height: 88vh; overflow-y: auto; }
.ct-exp-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; gap: 8px; }
.ct-exp-ta {
  width: 100%; box-sizing: border-box; font-family: var(--mono); font-size: 12px;
  background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 8px; padding: 8px; resize: vertical;
}
.ct-exp-actions { display: flex; gap: 8px; margin: 8px 0 14px; flex-wrap: wrap; }
@media (max-width: 640px) { .ct-search { width: 100%; } .ct-toolbar { width: 100%; } }
.ext-link { color: var(--blue); text-decoration: none; font-size: 12px; font-weight: 600; }
.ext-link:hover { opacity: .75; }

/* ── P4批A M2 🕵️ 莊家偵測完整版（忠實搬遷自舊站 style.css .decision-*/.dealer-*） ── */
.dl-params { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-bottom: 10px; font-size: 12.5px; color: var(--dim); }
.dl-params label { display: inline-flex; align-items: center; gap: 5px; }
.dl-params input {
  width: 62px; background: var(--card); border: 1px solid var(--border); border-radius: 6px;
  padding: 4px 6px; color: var(--text); font-family: var(--mono); outline: none;
}
.dl-params input:focus { border-color: var(--green); }
.dl-card { background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px; margin-bottom: 10px; }
.dl-card--go { border-color: rgba(52,209,120,.5); }
.dl-card--nogo { border-color: rgba(255,93,93,.5); }
.dl-card--watch { border-color: rgba(245,196,81,.5); }
.dl-card__head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.dl-card__title { font-weight: 800; font-size: 13.5px; }
.dl-verdict { font-size: 11.5px; font-weight: 800; padding: 3px 10px; border-radius: 999px; }
.dl-verdict--go { color: #06120a; background: var(--green); }
.dl-verdict--nogo { color: #2a0505; background: var(--red); }
.dl-verdict--watch { color: #231a03; background: var(--yellow); }
.dl-grid { display: flex; flex-direction: column; gap: 5px; margin: 6px 0; }
.dl-row { display: flex; align-items: baseline; gap: 8px; font-size: 12.5px; flex-wrap: wrap; }
.dl-dot { width: 8px; height: 8px; border-radius: 50%; flex: none; align-self: center; }
.dl-dot--green { background: var(--green); }
.dl-dot--red { background: var(--red); }
.dl-dot--amber { background: var(--yellow); }
.dl-dot--none { background: var(--faint); }
.dl-row__label { color: var(--dim); min-width: 92px; }
.dl-row__val { font-weight: 700; font-family: var(--mono); }
.dl-row__note { color: var(--faint); font-size: 11.5px; }
.dl-reason { color: var(--red); font-size: 12px; margin-top: 6px; font-weight: 600; }
.dl-filterbar { display: flex; align-items: center; gap: 6px; font-size: 12.5px; margin: 8px 0; color: var(--dim); flex-wrap: wrap; }
.dl-tracebar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 8px 0; }
.dl-progress { flex: 1; min-width: 120px; max-width: 220px; height: 6px; background: var(--border); border-radius: 99px; overflow: hidden; }
.dl-progress__fill { display: block; height: 100%; background: var(--green); width: 0%; transition: width .2s; }
.dl-cluster { border-left: 3px solid var(--border); background: var(--card); border-radius: 0 10px 10px 0; padding: 10px 12px; margin-bottom: 10px; }
.dl-cluster--funding { border-left-color: var(--red); }
.dl-cluster--distribution { border-left-color: var(--purple); }
.dl-cluster--behavior { border-left-color: var(--blue); }
.dl-cluster__head { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; justify-content: space-between; }
.dl-cluster__title { font-weight: 800; font-size: 13px; }
.dl-cluster__total { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-left: auto; font-size: 12px; }
.dl-cluster__usd { font-family: var(--mono); color: var(--dim); }
.dl-soldline { margin: 6px 0; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.dl-sold-chip { font-size: 11px; padding: 2px 8px; border-radius: 6px; background: var(--card-hi); color: var(--dim); }
.dl-sold-chip--green { color: var(--green); }
.dl-sold-chip--amber { color: var(--yellow); }
.dl-sold-chip--red { color: var(--red); }
.dl-subline { font-size: 12px; color: var(--dim); margin: 4px 0; display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }
.dl-warn { color: var(--yellow); font-size: 11.5px; margin: 4px 0; }
.dl-tablewrap { overflow-x: auto; margin-top: 6px; }
.dl-params input[type="checkbox"] { width: auto; }

/* ── P4批B M6 👛 錢包跟單 Bloom 回測資金曲線（忠實搬遷自舊站 style.css .equity-*/.spark-*） ── */
/* [hidden] 顯隱由全域 [hidden]{display:none!important}（dash.css:25）處理，此處不重複宣告 */
.wi-equity-section { margin-top: 12px; }
.wi-equity-head { display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: 6px; margin-bottom: 6px; }
.wi-equity-title { font-size: 12.5px; font-weight: 700; color: var(--text); }
.wi-equity-dd { font-family: var(--mono); font-size: 12px; font-weight: 700; color: var(--dim); }
.wi-equity-dd.is-up { color: var(--green); }
.wi-equity-dd.is-down { color: var(--red); }
.wi-equity-chart { background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 8px; }
.wi-spark { width: 100%; height: 130px; display: block; }
.wi-spark-zero { stroke: var(--border); stroke-width: 1; stroke-dasharray: 4 4; }
.wi-spark-line { fill: none; stroke-width: 2; vector-effect: non-scaling-stroke; }
.wi-spark-line.is-up { stroke: var(--green); }
.wi-spark-line.is-down { stroke: var(--red); }
.wi-spark-area.is-up { fill: var(--green-dim); }
.wi-spark-area.is-down { fill: var(--red-dim); }

/* P4批B M3 📊 持幣分析完整版（忠實搬遷自舊站 docs/style.css ~L2064-2089，變數改用 dash 慣例） */
.hm-toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 8px 0; }
.hm-check { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--dim); }
.bubble-canvas { position: relative; width: 100%; overflow-x: auto; }
.bubble-svg {
  display: block; width: 100%; height: auto; min-width: 640px; max-height: 82vh;
  background: radial-gradient(ellipse at 50% 45%, #121826 0%, var(--bg) 78%);
}
.bubble-node { cursor: pointer; transition: fill-opacity .15s ease; }
.bubble-node:hover { fill-opacity: 0.82; }
.bubble-label { font-size: 11px; fill: #e8edf5; font-family: var(--mono); font-weight: 600; pointer-events: none; }
.bubble-legend { display: flex; flex-wrap: wrap; gap: 8px 14px; padding: 10px 2px 2px; font-size: 12px; color: var(--dim); }
.bubble-legend .bl-green { color: var(--green); }
.bubble-legend .bl-red { color: var(--red); }
.bubble-detail { padding: 10px 2px 2px; border-top: 1px solid var(--border); margin-top: 8px; }
.bd-head { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 8px; }
.bd-grid { display: grid; grid-template-columns: auto 1fr; gap: 5px 16px; font-size: 13px; margin-bottom: 10px; }
.bd-k { color: var(--faint); }
.bd-v { color: var(--text); }

/* P4批B M5 💎 聰明錢篩選完整版（忠實搬遷自舊站 docs/style.css 聰明錢篩選相關規則，變數改用
   dash 慣例；classifyTier 6 級色系換皮成既有 pill 色系，多補一支 pill--cyan 供「巨鯨」使用） */
.sm-toolbar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin: 8px 0; }
.sm-select {
  background: var(--card); border: 1px solid var(--border); border-radius: 8px;
  padding: 4px 8px; font-size: 12px; color: var(--dim); max-width: 160px; cursor: pointer;
}
.sm-check { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--dim); }
.sm-badge { font-size: 11px; padding: 2px 8px; border-radius: 6px; background: var(--card-hi); color: var(--faint); white-space: nowrap; }
.sm-badge--in { color: var(--green); }
.sm-badge--out { color: var(--dim); }
.pill--cyan { color: var(--cyan); border-color: rgba(57,197,207,.45); }

/* P4批B M4 🧑‍💻 創建者追蹤完整版：沿用既有 dl-row/dl-row__label/dl-row__note（決策卡列樣式）
   呈現創建者資訊／資金鏈上溯／發幣者起底／兄弟馬甲的 label+value 列，無需新增樣式。 */

/* P4批D 🧬 進化紀錄版面對齊參考圖：KPI漲跌徽章／四欄密集列(判讀邏輯總覽｜進化史+即時複盤｜搶跑進化｜加權清單)／
   月曆(富化格+事實推導色標)＋當日詳情側欄。沿用既有 kgrid/kcell/rule/wtable/pill/dsec 詞彙，只新增此頁專屬部件樣式。 */
/* KPI 列：4 張 sum-card 一排（沿用 dash.js renderSummary() 同款 sum-card/sum-ic 標準元件，僅新增 grid 版面，
   同 evo-quad 4 欄手法/中斷點；漲跌徽章改用全站既有 .up/.down 語意色，取代原本本頁自建的 evo-kpi__delta--*） */
.evo-kpi-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 16px; }
@media (max-width: 1200px) { .evo-kpi-row { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) { .evo-kpi-row { grid-template-columns: 1fr; } }
/* P4批F(業主反饋「卡灰扁無色底、圖示淡」)：KPI 卡體加語意底色＋放大圖示。scope 僅 .evo-kpi-row 內的 .sum-card，
   不改其他頁沿用的預設 .sum-card/.sum-ic 樣式（沿用既有 --{color}/--{color}-dim CSS 變數，無新色碼/無漸層）。 */
.evo-kpi-row .sum-card--purple { background: var(--purple-dim); border-color: var(--purple); }
.evo-kpi-row .sum-card--green { background: var(--green-dim); border-color: var(--green); }
.evo-kpi-row .sum-card--blue { background: var(--blue-dim); border-color: var(--blue); }
.evo-kpi-row .sum-card--yellow { background: var(--yellow-dim); border-color: var(--yellow); }
.evo-kpi-row .sum-ic { width: 46px; height: 46px; font-size: 22px; }
/* 判讀邏輯總覽 4 類別彩色圓形圖示徽章：沿用 sum-ic，僅縮小尺寸以塞進緊湊 inline 列 */
.evo-logic-block__icon.sum-ic { width: 22px; height: 22px; font-size: 11px; }

/* 四欄密集列（業主參考圖：KPI 卡下方一排四欄，取代原本堆疊全寬段落） */
.evo-quad { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; align-items: stretch; }
.evo-quad-col { min-width: 0; height: 400px; overflow-y: auto; overflow-x: hidden; } /* 業主4894:四欄固定等高區間,各自單一捲軸,版面對齊不再高低不一 */
.evo-quad-col__t { font-size: 12px; font-weight: 800; color: var(--dim); margin-bottom: 7px; letter-spacing: .3px; position: sticky; top: 0; background: var(--card); z-index: 2; padding-bottom: 5px; border-bottom: 1px solid var(--border); } /* sticky 標題:欄內捲動時標題常駐 */
.evo-quad-scroll { max-height: none; } /* 業主4894:移除內層捲蓋,改由欄自身單一捲軸,避免巢狀捲軸+高低不齊 */
@media (max-width: 1200px) { .evo-quad { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 640px) { .evo-quad { grid-template-columns: 1fr; } }

/* 判讀邏輯總覽：常駐可見的緊湊 inline 排版（不藏在點擊後面）。
   修 bug：標題被同列右側長 range 文字壓成豎排 → head 改 flex-wrap:wrap，icon/title 強制 nowrap+flex:none
   （空間不夠時 range 整塊換行，而不是把 title 逐字擠成單行直排）。 */
.evo-logic-block { border-bottom: 1px dashed var(--border); padding: 5px 0; }
.evo-logic-block:last-child { border-bottom: none; }
.evo-logic-block__head { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 12px; margin-bottom: 3px; }
.evo-logic-block__icon { font-size: 13.5px; flex: none; }
.evo-logic-block__title { font-weight: 800; white-space: nowrap; flex: none; }
.evo-logic-block__range { font-size: 9.5px; font-family: var(--mono); color: var(--dim); background: var(--card-hi); border: 1px solid var(--border); border-radius: 999px; padding: 1px 7px; flex: none; }
.evo-logic-block__items { font-size: 11px; line-height: 1.7; color: var(--dim); }
.evo-logic-block__items b { color: var(--text); font-weight: 700; }
.evo-logic-block__sep { color: var(--faint); }

/* 進化史：8 條常駐可見(不收合)，小字+捲軸維持四欄等高 */
.evo-quad-col__sub-t { font-size: 11px; font-weight: 700; color: var(--dim); margin-bottom: 4px; }
.evo-history-scroll { margin-bottom: 8px; }
.evo-logic-block__line { display: block; padding: 1px 0; } /* 業主4894:判讀邏輯每子項分行,不再擠成一坨 inline */
.evo-history-scroll .rule { font-size: 11px; padding: 2px 0; }

.evo-review-table td, .evo-review-table th { white-space: nowrap; }

.evo-cal-wrap { display: flex; gap: 12px; align-items: flex-start; }
.evo-cal-col { flex: 1 1 62%; min-width: 0; }
.evo-cal-det { flex: 1 1 34%; min-width: 220px; max-width: 340px; background: var(--card); border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; align-self: stretch; }
.evo-cal-det__head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; flex-wrap: wrap; }
.evo-cal-det__t { font-weight: 800; font-size: 12.5px; margin-bottom: 0; color: var(--dim); }
.evo-cal-det__summary { background: var(--card-hi); border: 1px solid var(--border); border-radius: 8px; padding: 8px 10px; font-size: 12px; line-height: 1.6; margin-bottom: 4px; }
.evo-cal-head { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.evo-cal-month { font-size: 13.5px; font-weight: 700; }
.evo-cal-chips { margin-bottom: 8px; }
.evo-cal-chips .pill { cursor: pointer; }
.evo-cal-dow { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; margin-bottom: 4px; }
.evo-cal-dow span { text-align: center; font-size: 10.5px; color: var(--faint); }
.evo-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; }
.evo-cal-cell { position: relative; background: var(--card); border: 1px solid var(--border); border-radius: 8px; padding: 5px 6px; min-height: 84px; cursor: default; }
.evo-cal-cell--pad, .evo-cal-cell--empty { background: transparent; border-color: transparent; }
.evo-cal-cell:not(.evo-cal-cell--empty):not(.evo-cal-cell--pad) { cursor: pointer; }
.evo-cal-cell.is-sel { border-color: var(--blue); box-shadow: 0 0 0 1px var(--blue) inset; }
.evo-cal-cell.is-dim { opacity: .32; }
.evo-cal-cell--up { border-color: rgba(52,209,120,.45); }   /* 轉強→綠(--green) */
.evo-cal-cell--down { border-color: rgba(255,93,93,.45); }  /* 轉弱/失真→紅(--red)；修正原誤植黃色 rgba 的色碼錯位 bug，改對齊同格狀態點語意 */
.evo-cal-cell--flat { border-color: rgba(245,196,81,.35); } /* 平→黃(--yellow)；修正原誤植灰色 rgba 的色碼錯位 bug */
.evo-cal-cell--hw { box-shadow: 0 0 0 1px rgba(157,123,255,.55) inset; }
.evo-cal-cell__d { font-size: 11px; color: var(--faint); }
.evo-cal-cell__dot { position: absolute; top: 6px; right: 7px; width: 6px; height: 6px; border-radius: 50%; background: var(--faint); }
.evo-cal-cell__dot--up { background: var(--green); }
.evo-cal-cell__dot--down { background: var(--red); }
.evo-cal-cell__dot--flat { background: var(--yellow); }
.evo-cal-cell__n { font-size: 10.5px; margin-top: 2px; }
.evo-cal-cell__ha { font-size: 9.5px; margin-top: 1px; color: var(--dim); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.evo-cal-cell__ha--na { color: var(--faint); font-style: italic; }
.evo-cal-cell__top { font-size: 9.5px; color: var(--dim); margin-top: 1px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.evo-cal-cell__tag { display: block; margin-top: 2px; font-size: 8.5px; line-height: 1.5; padding: 0 4px; border-radius: 4px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.evo-cal-cell__tag.st-ok { background: var(--green-dim); }
.evo-cal-cell__tag.st-bad { background: var(--red-dim); }
.evo-cal-cell__tag.st-warn { background: var(--yellow-dim); }
.evo-cal-cell__tag.st-unk { background: var(--card-hi); color: var(--faint); }
.evo-kv { display: flex; justify-content: space-between; gap: 8px; font-size: 12px; padding: 3px 0; border-bottom: 1px dashed var(--border); }
.evo-kv:last-child { border-bottom: none; }
.evo-kv__k { color: var(--dim); }
/* 側欄最佳／失真集群語意框：最佳=綠框綠底(--green/--green-dim)，失真=紅框紅底(--red/--red-dim)，
   沿用既有 dsec__box(框元件) + st-ok/st-bad(全站既有狀態詞彙) 組合，非新元件 */
.dsec__box.st-ok { border-color: rgba(52,209,120,.45); background: var(--green-dim); }
.dsec__box.st-bad { border-color: rgba(255,93,93,.45); background: var(--red-dim); }
@media (max-width: 1023px) {
  .evo-cal-wrap { flex-direction: column; }
  .evo-cal-det { max-width: 100%; }
}
