    /* ── Sensing Page ── */
    .sensing-page { max-width: 1400px; margin: 0 auto; padding: 24px 24px 60px; }
    .sensing-header { text-align: center; margin-bottom: 20px; }
    .sensing-header h1 { font-size: clamp(24px, 4vw, 32px); font-weight: 800; margin-bottom: 6px;
      background: linear-gradient(135deg, #3B82F6, #F4722B, #EF4444);
      -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
    .sensing-header p { color: var(--text-dim); font-size: 14px; }
    .sensing-actions { display: flex; gap: 10px; justify-content: center; margin-bottom: 20px; flex-wrap: wrap; }
    .sensing-actions button {
      padding: 10px 22px; border-radius: 10px; font-size: 14px; font-weight: 600;
      border: none; cursor: pointer; transition: all .2s; display: inline-flex; align-items: center; gap: 6px; }
    .sensing-actions .btn-collect { background: rgba(59,130,246,.15); color: var(--blue); border: 1px solid rgba(59,130,246,.25); }
    .sensing-actions .btn-collect:hover { background: rgba(59,130,246,.25); }
    .sensing-actions .btn-analyze { background: rgba(244,114,43,.15); color: var(--orange); border: 1px solid rgba(244,114,43,.25); }
    .sensing-actions .btn-analyze:hover { background: rgba(244,114,43,.25); }
    .sensing-actions .btn-proposals { background: rgba(16,185,129,.15); color: var(--green); border: 1px solid rgba(16,185,129,.25); }
    .sensing-actions .btn-proposals:hover { background: rgba(16,185,129,.25); }
    .sensing-status { text-align: center; color: var(--text-dim); font-size: 13px; margin-bottom: 16px; }
    .sensing-status.ok { color: var(--green); }
    .sensing-status.loading { color: var(--orange); }

    /* Tabs */
    .sensing-tabs { display: flex; gap: 4px; margin-bottom: 20px; background: var(--bg-card); border-radius: 12px; padding: 4px; border: 1px solid var(--border); }
    .sensing-tab { flex: 1; padding: 10px 16px; border-radius: 8px; text-align: center; cursor: pointer;
      font-size: 14px; font-weight: 500; color: var(--text-dim); transition: all .2s; border: none; background: transparent; }
    .sensing-tab:hover { color: var(--text); background: rgba(255,255,255,.03); }
    .sensing-tab.active { background: var(--orange); color: #fff; font-weight: 600; }
    .sensing-tab-content { display: none; }
    .sensing-tab-content.active { display: block; }

    /* Layout */
    .sensing-layout { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
    @media (max-width: 900px) { .sensing-layout { grid-template-columns: 1fr; } }

    /* Signal cards */
    .signal-list { display: flex; flex-direction: column; gap: 10px; max-height: 600px; overflow-y: auto; padding-right: 8px; }
    .signal-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 14px 16px;
      transition: all .2s; cursor: default; }
    .signal-card:hover { border-color: rgba(244,114,43,.3); transform: translateY(-1px); }
    .signal-card-header { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
    .signal-source { font-size: 18px; flex-shrink: 0; }
    .signal-title { font-size: 14px; font-weight: 600; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .signal-card-desc { font-size: 12px; color: var(--text-dim); margin-bottom: 8px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .signal-card-footer { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
    .heat-bar { width: 80px; height: 6px; border-radius: 3px; background: var(--border); overflow: hidden; flex-shrink: 0; }
    .heat-bar-fill { height: 100%; border-radius: 3px; transition: width .3s; }
    .heat-cool { background: #3B82F6; }
    .heat-warm { background: #FBBF24; }
    .heat-hot { background: #F4722B; }
    .heat-boiling { background: #EF4444; }
    .signal-tag { padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 500;
      background: rgba(244,114,43,.1); color: var(--orange); }
    .signal-tag.trending { background: rgba(239,68,68,.15); color: #EF4444; }
    .signal-tag.noisy { background: rgba(138,138,148,.1); color: var(--text-dim); text-decoration: line-through; }

    /* Right panel */
    .sensing-right { display: flex; flex-direction: column; gap: 16px; }

    /* Heat map */
    .heatmap-section { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px; }
    .heatmap-section h3 { font-size: 15px; font-weight: 600; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
    .heatmap-row { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
    .heatmap-label { width: 100px; font-size: 12px; color: var(--text-dim); text-align: right; flex-shrink: 0; }
    .heatmap-bar { flex: 1; height: 20px; border-radius: 4px; background: var(--border); overflow: hidden; position: relative; }
    .heatmap-bar-fill { height: 100%; border-radius: 4px; transition: width .5s; display: flex; align-items: center; padding-left: 6px; }
    .heatmap-bar-text { font-size: 11px; font-weight: 600; color: #fff; white-space: nowrap; }
    .heatmap-trend { font-size: 11px; width: 20px; text-align: center; }
    .heatmap-trend.rising { color: #10B981; }
    .heatmap-trend.declining { color: #EF4444; }
    .heatmap-trend.stable { color: var(--text-dim); }

    /* Gap analysis */
    .gap-section { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px; }
    .gap-section h3 { font-size: 15px; font-weight: 600; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
    .gap-item { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,.04); }
    .gap-item:last-child { border-bottom: none; }
    .gap-level { padding: 3px 10px; border-radius: 6px; font-size: 11px; font-weight: 600; flex-shrink: 0; }
    .gap-level.critical { background: rgba(239,68,68,.15); color: #EF4444; }
    .gap-level.moderate { background: rgba(251,191,36,.15); color: #FBBF24; }
    .gap-level.covered { background: rgba(16,185,129,.15); color: #10B981; }
    .gap-info { flex: 1; }
    .gap-area { font-size: 13px; font-weight: 600; }
    .gap-suggest { font-size: 11px; color: var(--text-dim); }

    /* Proposals tab */
    .proposals-list { display: flex; flex-direction: column; gap: 16px; }
    .proposal-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 14px; padding: 20px;
      transition: all .2s; }
    .proposal-card:hover { border-color: rgba(244,114,43,.3); }
    .proposal-card.approved { border-color: rgba(16,185,129,.3); background: rgba(16,185,129,.03); }
    .proposal-header { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; }
    .proposal-rank { width: 32px; height: 32px; border-radius: 8px; display: flex; align-items: center; justify-content: center;
      font-size: 16px; font-weight: 800; background: linear-gradient(135deg, var(--orange), var(--gold)); color: #fff; flex-shrink: 0; }
    .proposal-title { font-size: 16px; font-weight: 700; flex: 1; }
    .proposal-score { font-size: 20px; font-weight: 800;
      background: linear-gradient(135deg, var(--orange), var(--gold));
      -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
    .proposal-status { padding: 3px 10px; border-radius: 6px; font-size: 11px; font-weight: 600; }
    .proposal-status.pending { background: rgba(251,191,36,.15); color: #FBBF24; }
    .proposal-status.approved { background: rgba(16,185,129,.15); color: #10B981; }
    .proposal-rationale { font-size: 13px; color: var(--text-dim); margin-bottom: 14px; line-height: 1.5; }

    /* Radar chart (CSS triangle) */
    .proposal-metrics { display: flex; gap: 16px; margin-bottom: 14px; flex-wrap: wrap; }
    .radar-chart { width: 120px; height: 120px; position: relative; flex-shrink: 0; }
    .radar-bg { position: absolute; inset: 0; }
    .radar-bg svg { width: 100%; height: 100%; }
    .metrics-grid { flex: 1; display: grid; grid-template-columns: 1fr 1fr; gap: 6px 16px; min-width: 200px; }
    .metric-item { display: flex; align-items: center; gap: 6px; }
    .metric-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; }
    .metric-dot.innovation { background: var(--blue); }
    .metric-dot.commercial { background: var(--orange); }
    .metric-dot.feasibility { background: var(--green); }
    .metric-dot.originality { background: #8B5CF6; }
    .metric-dot.differentiation { background: #EC4899; }
    .metric-dot.techbarrier { background: #F97316; }
    .metric-dot.demandstrength { background: #EF4444; }
    .metric-dot.audiencesize { background: #FBBF24; }
    .metric-dot.dataavail { background: #06B6D4; }
    .metric-dot.synergy { background: #10B981; }
    .metric-label { font-size: 11px; color: var(--text-dim); flex: 1; }
    .metric-value { font-size: 12px; font-weight: 600; }

    .proposal-signals { font-size: 12px; color: var(--text-dim); margin-bottom: 12px; }
    .proposal-signals span { display: inline-block; padding: 2px 8px; background: rgba(59,130,246,.08); color: var(--blue);
      border-radius: 4px; margin: 2px 4px 2px 0; font-size: 11px; }

    .btn-approve { padding: 8px 20px; border-radius: 8px; font-size: 13px; font-weight: 600;
      background: var(--green); color: #fff; border: none; cursor: pointer; transition: all .2s; }
    .btn-approve:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(16,185,129,.3); }
    .btn-approve:disabled { opacity: .5; cursor: not-allowed; transform: none; box-shadow: none; }

    /* Insights section */
    .insights-section { background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px; padding: 16px; margin-bottom: 16px; }
    .insights-section h3 { font-size: 15px; font-weight: 600; margin-bottom: 12px; display: flex; align-items: center; gap: 6px; }
    .insight-item { display: flex; align-items: flex-start; gap: 10px; padding: 8px 0; border-bottom: 1px solid rgba(255,255,255,.04); }
    .insight-item:last-child { border-bottom: none; }
    .insight-type { padding: 3px 10px; border-radius: 6px; font-size: 11px; font-weight: 600; flex-shrink: 0; }
    .insight-type.structural_trend { background: rgba(239,68,68,.15); color: #EF4444; }
    .insight-type.accelerating { background: rgba(16,185,129,.15); color: #10B981; }
    .insight-type.decelerating { background: rgba(251,191,36,.15); color: #FBBF24; }
    .insight-type.short_hype { background: rgba(138,138,148,.15); color: var(--text-dim); }
    .insight-desc { font-size: 12px; color: var(--text-dim); line-height: 1.5; flex: 1; }


