/** * demand-radar 樣式落點(商機雷達+成交 CRM)。 * * global.css 已經 6,000 多行,radar/crm 的樣式一律寫在這裡,不再往那邊加。 * 顏色、字級、間距只能引用 tokens.css 的 --hb-*,否則深淺模式會有一半畫面不跟著切 * (scripts/check-tokens.mjs 會擋)。 * * 分區:訂閱與服務檔案(M1)→ 統計列與商機卡(M2)→ 回覆(M3)→ CRM 階段與時間軸(M4) * → 追單(M5)→ 轉換統計(M6)。各 FE task 把細節補進對應分區。 */ /* ---------- 共用 ---------- */ .hb-radar-page { display: flex; flex-direction: column; gap: var(--hb-space-5); min-width: 0; max-width: 100%; } .hb-radar-section { display: flex; flex-direction: column; gap: var(--hb-space-3); min-width: 0; max-width: 100%; } .hb-radar-section__title { font-size: var(--hb-text-lg); font-weight: 600; color: var(--hb-ink); } .hb-radar-section__hint { font-size: var(--hb-text-sm); color: var(--hb-muted); } /** 空狀態一律要說「為什麼空」與「下一步做什麼」,不是只寫「沒有資料」。 */ .hb-radar-empty { display: flex; flex-direction: column; gap: var(--hb-space-2); padding: var(--hb-space-6); border: 1px dashed var(--hb-line-strong); border-radius: var(--hb-radius-lg); background: var(--hb-surface-muted); color: var(--hb-muted); font-size: var(--hb-text-sm); } .hb-radar-chip { display: inline-flex; align-items: center; flex: 0 1 auto; min-width: 0; max-width: 100%; gap: var(--hb-space-1); padding: var(--hb-space-1) var(--hb-space-3); border: 1px solid var(--hb-line-strong); border-radius: var(--hb-radius-pill); background: var(--hb-surface-solid); font-size: var(--hb-text-xs); color: var(--hb-ink-secondary); white-space: normal; overflow-wrap: anywhere; word-break: break-word; } .hb-radar-chip--exclude { border-color: color-mix(in srgb, var(--hb-danger) 45%, var(--hb-line-strong)); color: var(--hb-danger-deep); } /* ---------- M1:服務檔案/雷達訂閱 ---------- */ /** 服務/案例/FAQ 都是「幾個窄欄位+刪除鈕」,窄螢幕改成單欄疊起來。 */ .hb-radar-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); align-items: end; gap: var(--hb-space-3); padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius-lg); background: var(--hb-surface); } .hb-radar-area-grid { display: flex; flex-wrap: wrap; gap: var(--hb-space-2); } /** 選取狀態不能只靠顏色:aria-pressed 之外再加粗邊框。 */ .hb-radar-chip.is-active { border-color: var(--hb-brand); border-width: 2px; background: var(--hb-brand-soft); color: var(--hb-brand-deep); font-weight: 600; } .hb-radar-check { display: flex; align-items: center; gap: var(--hb-space-2); font-size: var(--hb-text-sm); color: var(--hb-ink-secondary); } .hb-radar-actions { display: flex; flex-wrap: wrap; min-width: 0; max-width: 100%; gap: var(--hb-space-3); } .hb-radar-watch-list { display: flex; flex-direction: column; gap: var(--hb-space-3); } .hb-radar-watch { display: flex; flex-direction: column; min-width: 0; max-width: 100%; gap: var(--hb-space-2); padding: var(--hb-space-4); border: 1px solid var(--hb-line); border-radius: var(--hb-radius-lg); background: var(--hb-surface); box-shadow: var(--hb-shadow-card); } .hb-radar-watch--paused { opacity: 0.72; } .hb-radar-watch__terms { display: flex; flex-wrap: wrap; width: 100%; min-width: 0; max-width: 100%; gap: var(--hb-space-2); } .hb-radar-watch__meta { display: flex; flex-wrap: wrap; width: 100%; min-width: 0; max-width: 100%; gap: var(--hb-space-3); font-size: var(--hb-text-xs); color: var(--hb-muted); } /** 配額用滿時要看得出是「上限」而不是「錯誤」。 */ .hb-radar-quota { display: flex; align-items: center; gap: var(--hb-space-2); font-size: var(--hb-text-sm); color: var(--hb-ink-secondary); } .hb-radar-quota--full { color: var(--hb-warning-deep); } .hb-radar-form { padding: var(--hb-space-4); border: 1px solid var(--hb-line-strong); border-radius: var(--hb-radius-lg); background: var(--hb-surface); overflow: hidden; } .hb-radar-suggest-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); gap: var(--hb-space-3); list-style: none; padding: 0; } /** 建議一定要帶理由:沒有理由的關鍵字使用者無法判斷該不該採用。 */ .hb-radar-suggest { display: flex; flex-direction: column; gap: var(--hb-space-2); padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius-lg); background: var(--hb-surface-muted); } .hb-radar-suggest__head { display: flex; align-items: center; justify-content: space-between; gap: var(--hb-space-2); } .hb-radar-suggest__term { font-size: var(--hb-text-sm); font-weight: 600; color: var(--hb-ink); } .hb-radar-suggest__reason { font-size: var(--hb-text-xs); color: var(--hb-muted); } /* ---------- M2:今日雷達統計列與商機卡 ---------- */ .hb-radar-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr)); gap: var(--hb-space-3); } .hb-radar-stat { display: flex; flex-direction: column; gap: var(--hb-space-1); padding: var(--hb-space-4); border: 1px solid var(--hb-line); border-radius: var(--hb-radius-lg); background: var(--hb-surface); } .hb-radar-stat__value { font-size: var(--hb-text-2xl); font-weight: 700; color: var(--hb-ink); } .hb-radar-stat__label { font-size: var(--hb-text-xs); color: var(--hb-muted); } .hb-opp-card { display: flex; flex-direction: column; gap: var(--hb-space-3); padding: var(--hb-space-4); border: 1px solid var(--hb-line); border-left: 3px solid var(--hb-line-strong); border-radius: var(--hb-radius-lg); background: var(--hb-surface); box-shadow: var(--hb-shadow-card); } .hb-opp-card--high { border-left-color: var(--hb-success); } .hb-opp-card--mid { border-left-color: var(--hb-warning); } .hb-opp-card--low { border-left-color: var(--hb-subtle); } .hb-opp-card__head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--hb-space-3); } .hb-opp-card__meta { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hb-space-2); font-size: var(--hb-text-xs); color: var(--hb-muted); } .hb-radar-actions--toolbar { margin-bottom: var(--hb-space-3); } .hb-radar-intro { display: flex; align-items: center; justify-content: space-between; gap: var(--hb-space-5); margin-bottom: var(--hb-space-4); padding: var(--hb-space-5); border: 1px solid color-mix(in srgb, var(--hb-brand) 30%, var(--hb-line)); border-radius: var(--hb-radius-xl); background: linear-gradient(135deg, var(--hb-brand-soft), var(--hb-surface)); box-shadow: var(--hb-shadow-card); } .hb-radar-intro > div { display: grid; gap: var(--hb-space-1); } .hb-radar-intro strong { color: var(--hb-ink); font-size: var(--hb-text-lg); } .hb-radar-intro p { max-width: 44rem; margin: 0; color: var(--hb-ink-secondary); font-size: var(--hb-text-sm); line-height: 1.6; } .hb-radar-intro__actions, .hb-radar-utility-actions, .hb-opp-card__secondary-actions { display: flex; align-items: center; flex-wrap: wrap; gap: var(--hb-space-2); } .hb-radar-intro__actions { justify-content: flex-end; flex: 0 0 auto; } .hb-inbox-decision-guide { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--hb-space-3); margin: 0 0 var(--hb-space-4); padding: 0; list-style: none; } .hb-inbox-decision-guide li { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--hb-space-3); align-items: start; padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius-lg); background: var(--hb-surface); } .hb-inbox-decision-guide li > span { display: grid; place-items: center; width: var(--hb-space-8); height: var(--hb-space-8); border-radius: var(--hb-radius-pill); background: var(--hb-brand-soft); color: var(--hb-brand-deep); font-weight: 700; } .hb-inbox-decision-guide li > div { display: grid; gap: var(--hb-space-1); min-width: 0; } .hb-inbox-decision-guide strong { color: var(--hb-ink); } .hb-inbox-decision-guide small { color: var(--hb-muted); line-height: 1.45; } .hb-radar-filter-panel { display: grid; gap: var(--hb-space-3); margin-bottom: var(--hb-space-3); padding: var(--hb-space-4); border: 1px solid var(--hb-line); border-radius: var(--hb-radius-lg); background: var(--hb-surface); } .hb-radar-filter-panel__head { display: flex; align-items: flex-start; flex-wrap: wrap; justify-content: space-between; gap: var(--hb-space-3); color: var(--hb-ink); } .hb-radar-inbox-tabs { display: flex; align-items: center; flex: 1 1 28rem; flex-wrap: wrap; min-width: 0; gap: var(--hb-space-3); } .hb-radar-inbox-tabs .hb-btn { flex: 0 1 auto; } .hb-radar-inbox-tabs > span { margin-inline-start: var(--hb-space-1); } .hb-radar-filter-panel__head span, .hb-radar-utility-actions > span { color: var(--hb-muted); font-size: var(--hb-text-xs); } .hb-radar-schedule { display: flex; align-items: flex-start; justify-content: space-between; flex-wrap: wrap; gap: var(--hb-space-3); padding: var(--hb-space-3) var(--hb-space-4); border: 1px solid color-mix(in srgb, var(--hb-brand) 28%, var(--hb-line)); border-radius: var(--hb-radius-lg); background: var(--hb-brand-soft); } .hb-radar-schedule > div { display: grid; gap: var(--hb-space-1); min-width: 0; } .hb-radar-schedule strong { color: var(--hb-ink); font-size: var(--hb-text-sm); } .hb-radar-schedule p { max-width: 48rem; margin: 0; color: var(--hb-ink-secondary); font-size: var(--hb-text-xs); line-height: 1.55; } .hb-radar-filter-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); gap: var(--hb-space-3); align-items: end; } .hb-radar-filter-grid--all { grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)); } .hb-radar-inbox-essential-filters { display: grid; grid-template-columns: minmax(10rem, 13rem) minmax(10rem, 13rem) auto; gap: var(--hb-space-3); align-items: end; } .hb-radar-inbox-essential-filters .hb-btn { justify-self: start; } .hb-radar-utility-actions { margin-bottom: var(--hb-space-5); padding-inline: var(--hb-space-2); } .hb-radar-setup { display: grid; gap: var(--hb-space-4); margin-bottom: var(--hb-space-5); padding: var(--hb-space-5); border: 1px solid var(--hb-line-strong); border-radius: var(--hb-radius-xl); background: var(--hb-surface); box-shadow: var(--hb-shadow-card); } .hb-radar-setup__head { display: flex; align-items: center; justify-content: space-between; gap: var(--hb-space-3); } .hb-radar-setup__head > div { display: grid; gap: var(--hb-space-1); } .hb-radar-setup__head span { color: var(--hb-muted); font-size: var(--hb-text-sm); } .hb-radar-setup__progress { padding: var(--hb-space-1) var(--hb-space-3); border-radius: var(--hb-radius-pill); background: var(--hb-brand-soft); color: var(--hb-brand-deep) !important; font-weight: 600; } .hb-radar-setup__steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--hb-space-3); margin: 0; padding: 0; list-style: none; } .hb-radar-setup__steps li { display: grid; grid-template-columns: auto 1fr; gap: var(--hb-space-2) var(--hb-space-3); align-items: start; padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius-lg); background: var(--hb-surface-muted); } .hb-radar-setup__steps li > span { display: grid; place-items: center; width: var(--hb-space-8); height: var(--hb-space-8); border-radius: var(--hb-radius-pill); background: var(--hb-surface-solid); color: var(--hb-muted); font-weight: 700; } .hb-radar-setup__steps li.is-current { border-color: var(--hb-brand); background: var(--hb-brand-soft); } .hb-radar-setup__steps li.is-current > span, .hb-radar-setup__steps li.is-done > span { background: var(--hb-brand); color: var(--hb-brand-on); } .hb-radar-setup__steps li > div { display: grid; gap: var(--hb-space-1); color: var(--hb-ink); } .hb-radar-setup__steps small { color: var(--hb-muted); line-height: 1.45; } .hb-radar-setup__steps a { grid-column: 2; font-size: var(--hb-text-sm); font-weight: 600; } .hb-opp-card__text { font-size: var(--hb-text-base); color: var(--hb-ink); line-height: 1.65; white-space: pre-wrap; } .hb-opp-card__secondary-actions { margin-left: auto; padding-left: var(--hb-space-2); border-left: 1px solid var(--hb-line); } .hb-opp-card__source { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--hb-space-2); padding-top: var(--hb-space-2); border-top: 1px solid var(--hb-line); color: var(--hb-muted); font-size: var(--hb-text-xs); } .hb-opp-card__source a { color: var(--hb-brand-deep); font-weight: 600; } .hb-opp-card__evidence { margin: 0; padding: var(--hb-space-2) var(--hb-space-3); border-left: 2px solid var(--hb-brand); background: var(--hb-surface-muted); color: var(--hb-ink-secondary); font-size: var(--hb-text-sm); line-height: 1.5; } .hb-opp-card__actions { display: flex; align-items: center; flex-wrap: wrap; gap: var(--hb-space-2); } .hb-opp-drawer__actions { display: flex; align-items: center; flex-wrap: wrap; gap: var(--hb-space-2); } .hb-radar-filter-panel + .hb-banner-ok { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: var(--hb-space-2); margin-bottom: var(--hb-space-3); } .hb-radar-filter-panel + .hb-banner-ok a { font-weight: 700; } .hb-opp-card__remove-form { display: grid; gap: var(--hb-space-3); padding: var(--hb-space-3); border: 1px solid color-mix(in srgb, var(--hb-danger) 35%, var(--hb-line)); border-radius: var(--hb-radius); background: var(--hb-surface-muted); } .hb-opp-drawer { position: fixed; z-index: 20; inset: 0 0 0 auto; display: flex; flex-direction: column; width: min(34rem, 100vw); border-left: 1px solid var(--hb-line-strong); background: var(--hb-surface-solid); box-shadow: var(--hb-shadow-float); } .hb-opp-drawer__head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--hb-space-3); padding: var(--hb-space-5); border-bottom: 1px solid var(--hb-line); } .hb-opp-drawer__head h2 { margin: var(--hb-space-1) 0 0; color: var(--hb-ink); font-size: var(--hb-text-lg); } .hb-opp-drawer__body { display: grid; gap: var(--hb-space-4); overflow: auto; padding: var(--hb-space-5); } .hb-opp-drawer__section { display: grid; gap: var(--hb-space-2); } .hb-opp-drawer__section h3 { margin: 0; color: var(--hb-ink); font-size: var(--hb-text-sm); } .hb-opp-drawer__section ul { display: grid; gap: var(--hb-space-2); margin: 0; padding-left: var(--hb-space-5); color: var(--hb-ink-secondary); font-size: var(--hb-text-sm); } .hb-demand-map-editor { display: grid; gap: var(--hb-space-4); padding: var(--hb-space-4); border: 1px solid color-mix(in srgb, var(--hb-brand) 28%, var(--hb-line)); border-radius: var(--hb-radius-lg); background: var(--hb-surface-muted); } .hb-demand-map-editor__head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--hb-space-3); min-width: 0; max-width: 100%; flex-wrap: wrap; } .hb-demand-map-editor__head h3 { margin: 0; color: var(--hb-ink); font-size: var(--hb-text-base); } .hb-demand-map-editor__head p { margin: var(--hb-space-1) 0 0; } .hb-demand-map-editor__field { display: grid; gap: var(--hb-space-2); } .hb-demand-map-editor__basis { display: flex; flex-wrap: wrap; width: 100%; min-width: 0; max-width: 100%; gap: var(--hb-space-1); } .hb-demand-map-editor__actions { display: flex; justify-content: flex-end; } .hb-query-plan { display: grid; gap: var(--hb-space-3); padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface-muted); } .hb-query-plan__head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--hb-space-3); } .hb-query-plan__head h4 { margin: 0; color: var(--hb-ink); font-size: var(--hb-text-sm); } .hb-query-plan__head p { margin: var(--hb-space-1) 0 0; } .hb-query-plan__groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); gap: var(--hb-space-2); } .hb-query-plan__group { display: grid; gap: var(--hb-space-2); padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface-solid); } .hb-query-plan__group strong { color: var(--hb-ink); font-size: var(--hb-text-xs); } .hb-query-plan__group small { color: var(--hb-muted); font-size: var(--hb-text-2xs); } .hb-cost-dialog { display: grid; gap: var(--hb-space-4); padding: var(--hb-space-4); border: 1px solid color-mix(in srgb, var(--hb-warning) 40%, var(--hb-line)); border-radius: var(--hb-radius-lg); background: var(--hb-surface-solid); } .hb-cost-dialog__head, .hb-cost-dialog__actions { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--hb-space-3); } .hb-cost-dialog__head h3 { margin: 0; color: var(--hb-ink); font-size: var(--hb-text-base); } .hb-cost-dialog__head p { margin: var(--hb-space-1) 0 0; } .hb-cost-dialog__stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--hb-space-2); margin: 0; } .hb-cost-dialog__stats div { padding: var(--hb-space-2); border-radius: var(--hb-radius); background: var(--hb-surface-muted); } .hb-cost-dialog__stats dt { color: var(--hb-muted); font-size: var(--hb-text-2xs); } .hb-cost-dialog__stats dd { margin: var(--hb-space-1) 0 0; color: var(--hb-ink); font-weight: 700; } .hb-sweep-funnel { display: grid; gap: var(--hb-space-3); padding: var(--hb-space-4); border: 1px solid var(--hb-line); border-radius: var(--hb-radius-lg); background: var(--hb-surface); } .hb-sweep-funnel__head, .hb-sweep-funnel__credits { display: flex; align-items: center; justify-content: space-between; gap: var(--hb-space-3); } .hb-sweep-funnel__head h3 { margin: 0; color: var(--hb-ink); font-size: var(--hb-text-base); } .hb-sweep-funnel__head p { margin: var(--hb-space-1) 0 0; } .hb-sweep-funnel__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--hb-space-2); } .hb-sweep-funnel__grid div { display: grid; gap: var(--hb-space-1); padding: var(--hb-space-2); border-radius: var(--hb-radius); background: var(--hb-surface-muted); } .hb-sweep-funnel__grid span { color: var(--hb-muted); font-size: var(--hb-text-2xs); } .hb-sweep-funnel__grid strong { color: var(--hb-ink); font-size: var(--hb-text-lg); } .hb-sweep-funnel__credits { color: var(--hb-ink-secondary); font-size: var(--hb-text-xs); } .hb-radar-pager { display: flex; align-items: center; justify-content: center; gap: var(--hb-space-3); color: var(--hb-muted); font-size: var(--hb-text-sm); } /** 五問判定:每個維度一列,理由是說服使用者的主體,不能折疊成一句總分。 */ .hb-opp-reasons { display: flex; flex-direction: column; gap: var(--hb-space-2); padding: var(--hb-space-3); border-radius: var(--hb-radius); background: var(--hb-surface-muted); } .hb-opp-reason { display: grid; grid-template-columns: 5rem 3rem 1fr; gap: var(--hb-space-2); font-size: var(--hb-text-xs); color: var(--hb-ink-secondary); } /** 地區判不出來不等於不符合,樣式要跟 mismatch 明顯不同。 */ .hb-opp-region--unknown { color: var(--hb-muted); } .hb-opp-region--mismatch { color: var(--hb-warning-deep); } /* ---------- M3:回覆草稿 ---------- */ .hb-reply-variants { display: flex; flex-direction: column; gap: var(--hb-space-3); } .hb-reply-variant { display: flex; flex-direction: column; gap: var(--hb-space-2); padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface-solid); } .hb-reply-variant__kind { font-size: var(--hb-text-2xs); letter-spacing: 0.04em; text-transform: uppercase; color: var(--hb-muted); } .hb-reply-variant--used { border-color: color-mix(in srgb, var(--hb-success) 40%, var(--hb-line-strong)); } /* ---------- M4:CRM 階段板與時間軸 ---------- */ /** 七階段;needs_follow_up 是並存標記,不佔一格。 */ .hb-crm-stages { display: grid; grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr)); gap: var(--hb-space-3); } .hb-crm-stage { display: flex; flex-direction: column; gap: var(--hb-space-1); padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface); cursor: pointer; } .hb-crm-stage.is-active { border-color: var(--hb-brand); background: var(--hb-brand-soft); } .hb-crm-stage__count { font-size: var(--hb-text-xl); font-weight: 700; color: var(--hb-ink); } .hb-crm-stage__label { font-size: var(--hb-text-xs); color: var(--hb-muted); } .hb-crm-timeline { display: flex; flex-direction: column; gap: var(--hb-space-3); padding-left: var(--hb-space-4); border-left: 2px solid var(--hb-line-strong); } .hb-crm-touch { display: flex; flex-direction: column; gap: var(--hb-space-1); font-size: var(--hb-text-sm); color: var(--hb-ink-secondary); } .hb-crm-touch__at { font-size: var(--hb-text-2xs); color: var(--hb-muted); } /* ---------- M5:追單 ---------- */ .hb-followup-row { display: flex; align-items: center; justify-content: space-between; gap: var(--hb-space-3); padding: var(--hb-space-3) var(--hb-space-4); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface); } .hb-followup-row--overdue { border-color: color-mix(in srgb, var(--hb-danger) 45%, var(--hb-line-strong)); } /* ---------- M6:轉換統計 ---------- */ .hb-crm-stats-table { width: 100%; border-collapse: collapse; font-size: var(--hb-text-sm); } .hb-crm-stats-table th, .hb-crm-stats-table td { padding: var(--hb-space-2) var(--hb-space-3); border-bottom: 1px solid var(--hb-line); text-align: left; color: var(--hb-ink-secondary); } /** 樣本 < 5:只能顯示絕對數,比率與排名要壓下去。 */ .hb-crm-stats-table td.is-insufficient { color: var(--hb-muted); font-style: italic; } /* ---------- CRM board / today cards (M3–M5) ---------- */ .radar-page { display: flex; flex-direction: column; gap: var(--hb-space-5); } .radar-page__header { display: flex; flex-wrap: wrap; gap: var(--hb-space-3); align-items: baseline; } .radar-page__header h1 { font-size: var(--hb-text-xl); font-weight: 600; color: var(--hb-ink); margin: 0; } .radar-stats { font-size: var(--hb-text-sm); color: var(--hb-muted); } .radar-error { color: var(--hb-danger); font-size: var(--hb-text-sm); } .radar-empty { display: flex; flex-direction: column; gap: var(--hb-space-2); padding: var(--hb-space-5); border: 1px dashed var(--hb-line); border-radius: var(--hb-radius); } .radar-card { border: 1px solid var(--hb-line); border-radius: var(--hb-radius); padding: var(--hb-space-3); margin-bottom: var(--hb-space-3); background: var(--hb-surface); color: var(--hb-ink); } .radar-card__head { display: flex; gap: var(--hb-space-2); align-items: center; margin-bottom: var(--hb-space-2); } .radar-card__text { font-size: var(--hb-text-sm); margin: 0 0 var(--hb-space-2); } .radar-card__meta { font-size: var(--hb-text-xs); color: var(--hb-muted); } .radar-card__actions { display: flex; flex-wrap: wrap; gap: var(--hb-space-2); margin-top: var(--hb-space-2); } .radar-card__reply { white-space: pre-wrap; font-size: var(--hb-text-sm); background: var(--hb-surface-muted); padding: var(--hb-space-2); border-radius: var(--hb-radius); } .radar-card__reasons { font-size: var(--hb-text-xs); color: var(--hb-muted); padding-left: var(--hb-space-4); } .radar-band { display: inline-block; padding: 0.1rem 0.45rem; border-radius: 999px; font-size: var(--hb-text-xs); background: var(--hb-surface-muted); color: var(--hb-ink); } .radar-band--high { background: var(--hb-brand-soft); color: var(--hb-brand); } .radar-band--mid { background: var(--hb-warning-soft); color: var(--hb-warning); } .radar-btn-muted { opacity: 0.8; } .crm-controls { display: grid; grid-template-columns: minmax(16rem, 1.5fr) minmax(10rem, 0.7fr) minmax(11rem, 0.7fr) auto; align-items: end; gap: var(--hb-space-3); margin: var(--hb-space-4) 0; padding: var(--hb-space-4); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface-muted); } .crm-search { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: var(--hb-space-2); } .crm-workspace { display: grid; grid-template-columns: minmax(0, 1fr); align-items: start; gap: var(--hb-space-4); } .crm-workspace--detail { grid-template-columns: minmax(0, 1.35fr) minmax(20rem, 0.85fr); } .crm-list-panel { min-width: 0; } .crm-result-count { margin: 0 0 var(--hb-space-3); color: var(--hb-muted); font-size: var(--hb-text-sm); } .crm-contact-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr)); gap: var(--hb-space-3); } .crm-contact-card { display: flex; min-width: 0; flex-direction: column; gap: var(--hb-space-2); padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface); color: var(--hb-ink); text-align: left; cursor: pointer; } .crm-contact-card:hover, .crm-contact-card.is-active { border-color: var(--hb-brand); box-shadow: var(--hb-shadow-soft); } .crm-contact-card__head, .crm-contact-card__meta { display: flex; min-width: 0; align-items: flex-start; justify-content: space-between; gap: var(--hb-space-2); } .crm-contact-card__head > span:first-child { display: flex; min-width: 0; flex-direction: column; } .crm-contact-card__head strong, .crm-contact-card__head small { overflow-wrap: anywhere; } .crm-contact-card__head small, .crm-contact-card__time, .crm-contact-card__meta { color: var(--hb-muted); font-size: var(--hb-text-xs); } .crm-detail { position: sticky; top: var(--hb-space-4); min-width: 0; max-height: calc(100vh - var(--hb-space-6)); overflow: auto; padding: var(--hb-space-4); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface); } .crm-detail__header, .crm-detail__primary-actions, .crm-detail__danger { display: flex; align-items: center; justify-content: space-between; gap: var(--hb-space-3); } .crm-detail__header h2, .crm-detail__header p, .crm-detail__danger p { margin: 0; overflow-wrap: anywhere; } .crm-detail__header p, .crm-detail__danger p { color: var(--hb-muted); font-size: var(--hb-text-xs); } .crm-detail__primary-actions { align-items: end; margin: var(--hb-space-4) 0; } .crm-detail__primary-actions .hb-field { flex: 1; } .crm-detail__danger { align-items: flex-end; margin-top: var(--hb-space-5); padding-top: var(--hb-space-4); border-top: 1px solid var(--hb-danger); } @media (max-width: 64rem) { .crm-controls { grid-template-columns: minmax(0, 1fr) minmax(10rem, 0.6fr); } .crm-workspace--detail { grid-template-columns: minmax(0, 1fr); } .crm-detail { position: static; max-height: none; } } @media (max-width: 40rem) { .crm-controls, .crm-search { grid-template-columns: minmax(0, 1fr); } .crm-detail__primary-actions, .crm-detail__danger { align-items: stretch; flex-direction: column; } } .radar-list { list-style: none; margin: 0; padding: 0; } /* ---------- 手動匯入(P1,spec §4.11) ---------- */ .hb-radar-import { padding: var(--hb-space-4); border: 1px solid var(--hb-line); border-radius: var(--hb-radius-lg); background: var(--hb-surface); } .hb-radar-import__csv { display: flex; flex-direction: column; gap: var(--hb-space-2); } .hb-radar-import__row { display: grid; grid-template-columns: minmax(11rem, 1.4fr) minmax(14rem, 2fr) minmax(8rem, 1fr) auto; align-items: end; gap: var(--hb-space-3); padding: var(--hb-space-3) 0; border-top: 1px solid var(--hb-line); } .hb-radar-import__row:first-of-type { border-top: none; } .hb-radar-import__results { display: flex; flex-direction: column; gap: var(--hb-space-2); list-style: none; margin: 0; padding: 0; } .hb-radar-import__result { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hb-space-2); padding: var(--hb-space-2) var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface-muted); } .hb-radar-import__resultUrl { font-size: var(--hb-text-sm); color: var(--hb-ink-secondary); word-break: break-all; } /* ---------- 立即探索面板 ---------- */ .hb-radar-explore { padding: var(--hb-space-4); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface); } .hb-radar-explore__suggest { display: flex; flex-direction: column; gap: var(--hb-space-2); } .hb-radar-explore__chips { display: flex; flex-wrap: wrap; gap: var(--hb-space-2); min-height: var(--hb-space-8); } .hb-radar-explore__chip { display: inline-flex; align-items: center; gap: var(--hb-space-1); border: none; background: transparent; cursor: pointer; padding: 0; color: inherit; font: inherit; } .hb-radar-explore__chip:disabled { opacity: 0.6; cursor: not-allowed; } .hb-radar-explore__chip-x { font-size: var(--hb-text-sm); color: var(--hb-muted); } .hb-radar-explore__add { display: grid; grid-template-columns: minmax(12rem, 1fr) auto; gap: var(--hb-space-3); align-items: end; } .hb-radar-explore__result { padding: var(--hb-space-3); border-radius: var(--hb-radius); background: var(--hb-surface-muted); border: 1px solid var(--hb-line); font-size: var(--hb-text-sm); color: var(--hb-ink); } .hb-radar-product-context, .hb-radar-readiness, .hb-opp-products, .hb-product-match, .hb-primary-product-picker { display: grid; gap: var(--hb-space-2); } .hb-radar-readiness, .hb-opp-products, .hb-product-match { padding: var(--hb-space-3); border: 1px solid var(--hb-line); border-radius: var(--hb-radius); background: var(--hb-surface-muted); } .hb-opp-products { border-color: color-mix(in srgb, var(--hb-brand) 35%, var(--hb-line)); background: var(--hb-surface-solid); } .hb-opp-products--archive { display: block; } .hb-opp-products--archive > summary { cursor: pointer; color: var(--hb-brand-deep); font-size: var(--hb-text-sm); font-weight: 600; } .hb-opp-products--archive[open] > summary { margin-bottom: var(--hb-space-3); } .hb-radar-readiness__head, .hb-opp-products__summary, .hb-product-match__head { display: flex; align-items: center; flex-wrap: wrap; gap: var(--hb-space-2); } .hb-opp-products__summary { justify-content: space-between; } .hb-opp-products__primary { display: flex; align-items: center; flex-wrap: wrap; gap: var(--hb-space-2); } .hb-opp-products__eyebrow { color: var(--hb-muted); font-size: var(--hb-text-2xs); font-weight: 600; letter-spacing: 0.04em; } .hb-opp-products__details { display: grid; gap: var(--hb-space-3); padding-top: var(--hb-space-3); border-top: 1px solid var(--hb-line); } .hb-product-match__head { justify-content: space-between; } .hb-product-match__reasons { display: grid; gap: var(--hb-space-2); } .hb-product-reason { display: grid; gap: var(--hb-space-1); padding-top: var(--hb-space-2); border-top: 1px solid var(--hb-line); } .hb-product-reason q, .hb-product-reason small { color: var(--hb-ink-secondary); } .hb-primary-product-picker { grid-template-columns: minmax(12rem, 1fr) minmax(12rem, 1fr) auto; align-items: end; padding-top: var(--hb-space-3); border-top: 1px solid var(--hb-line); } .hb-primary-product-picker input, .hb-radar-product-context select { min-height: 2.5rem; } @media (max-width: 720px) { .hb-radar-intro, .hb-radar-filter-panel__head, .hb-radar-setup__head { align-items: stretch; flex-direction: column; } .hb-radar-intro__actions { justify-content: flex-start; } .hb-radar-intro__actions .hb-btn { flex: 1 1 auto; text-align: center; } .hb-radar-inbox-tabs { width: 100%; flex-basis: 100%; gap: var(--hb-space-2); } .hb-radar-inbox-tabs .hb-btn { flex: 1 1 7rem; min-width: 0; } .hb-radar-inbox-tabs > span { flex-basis: 100%; margin-inline-start: 0; } .hb-inbox-decision-guide, .hb-radar-inbox-essential-filters { grid-template-columns: 1fr; } .hb-radar-inbox-essential-filters .hb-btn { width: 100%; justify-self: stretch; } .hb-radar-setup__steps { grid-template-columns: 1fr; } .hb-opp-card__secondary-actions { width: 100%; margin-left: 0; padding-top: var(--hb-space-2); padding-left: 0; border-top: 1px solid var(--hb-line); border-left: 0; } .hb-opp-drawer { width: 100vw; } .hb-primary-product-picker { grid-template-columns: 1fr; } }