diff --git a/modules/helpdesk/web/css/helpdesk.css b/modules/helpdesk/web/css/helpdesk.css index 89f0aeb..57ca986 100644 --- a/modules/helpdesk/web/css/helpdesk.css +++ b/modules/helpdesk/web/css/helpdesk.css @@ -609,36 +609,28 @@ background: var(--app-success, #198754); } - .helpdesk-risk-card-metrics { - display: flex; - flex-wrap: wrap; - gap: calc(var(--app-spacing) * 0.3); - margin-bottom: calc(var(--app-spacing) * 0.35); - font-size: var(--text-xs, 0.75rem); - } - - .helpdesk-risk-card-metric { - padding: 0.1em 0.45em; - border-radius: var(--app-border-radius, 0.25rem); - background: color-mix(in srgb, var(--app-muted-border-color) 40%, transparent); - color: var(--app-muted-color); - } - - .helpdesk-risk-card-metric-warn { - background: color-mix(in srgb, var(--app-warning, #f59e0b) 15%, transparent); - color: var(--app-warning, #f59e0b); - font-weight: 600; - } .helpdesk-risk-card-reasons { list-style: none; - margin: 0; + margin: calc(var(--app-spacing) * 0.25) 0 0; padding: 0; font-size: var(--text-xs, 0.75rem); color: var(--app-muted-color); display: flex; - flex-direction: column; - gap: 0.15em; + flex-wrap: wrap; + gap: calc(var(--app-spacing) * 0.25); + } + + .helpdesk-risk-card-reasons li { + padding: 0.1em 0.4em; + border-radius: var(--app-border-radius, 0.25rem); + background: color-mix(in srgb, var(--app-muted-border-color) 30%, transparent); + } + + .helpdesk-risk-card-reason-warn { + background: color-mix(in srgb, var(--app-warning, #f59e0b) 15%, transparent); + color: var(--app-warning, #f59e0b); + font-weight: 600; } .helpdesk-risk-card-driver-bar { diff --git a/modules/helpdesk/web/js/helpdesk-risk-radar.js b/modules/helpdesk/web/js/helpdesk-risk-radar.js index 3b415eb..139f648 100644 --- a/modules/helpdesk/web/js/helpdesk-risk-radar.js +++ b/modules/helpdesk/web/js/helpdesk-risk-radar.js @@ -83,58 +83,30 @@ if (container) { header.appendChild(scoreBadge); card.appendChild(header); - // Core metrics row - const metrics = h('div', 'helpdesk-risk-card-metrics'); + // Key facts as compact pills const kpis = customer.kpis || {}; + const pills = h('ul', 'helpdesk-risk-card-reasons'); - if (kpis.sla_overdue > 0) { - const m = h('span', 'helpdesk-risk-card-metric helpdesk-risk-card-metric-warn'); - m.textContent = kpis.sla_overdue + ' ' + d('labelOverdue', 'overdue'); - metrics.appendChild(m); + if (kpis.open > 0) { + const li = h('li', '', kpis.open + ' ' + d('labelOpen', 'open')); + pills.appendChild(li); } if (kpis.critical > 0) { - const m = h('span', 'helpdesk-risk-card-metric helpdesk-risk-card-metric-warn'); - m.textContent = kpis.critical + ' ' + d('labelCritical', 'critical'); - metrics.appendChild(m); + const li = h('li', 'helpdesk-risk-card-reason-warn', kpis.critical + ' ' + d('labelCritical', 'critical')); + pills.appendChild(li); } - const openM = h('span', 'helpdesk-risk-card-metric'); - openM.textContent = kpis.open + ' ' + d('labelOpen', 'open'); - metrics.appendChild(openM); - - if (kpis.net_flow !== 0) { - const flowM = h('span', 'helpdesk-risk-card-metric'); - const arrow = kpis.net_flow > 0 ? '↑' : '↓'; - flowM.textContent = arrow + Math.abs(kpis.net_flow); - if (kpis.net_flow > 0) flowM.classList.add('helpdesk-risk-card-metric-warn'); - metrics.appendChild(flowM); + if (kpis.sla_overdue > 0) { + const li = h('li', 'helpdesk-risk-card-reason-warn', kpis.sla_overdue + ' ' + d('labelSlaBreaches', 'SLA')); + pills.appendChild(li); + } + if (kpis.net_flow > 0) { + const li = h('li', 'helpdesk-risk-card-reason-warn', '↑' + kpis.net_flow); + pills.appendChild(li); + } else if (kpis.net_flow < 0) { + pills.appendChild(h('li', '', '↓' + Math.abs(kpis.net_flow))); } - card.appendChild(metrics); - - // Why at risk — concrete facts - const kpiOpen = kpis.open || 0; - const kpiCritical = kpis.critical || 0; - const kpiSla = kpis.sla_overdue || 0; - const kpiNet = kpis.net_flow || 0; - const kpiOldest = kpis.oldest_open_hours || 0; - - const reasons = []; - if (kpiOpen > 0) { - let text = kpiOpen + ' ' + d('labelOpen', 'open'); - if (kpiCritical > 0) text += ', ' + kpiCritical + ' ' + d('labelCritical', 'critical'); - reasons.push(text); - } - if (kpiNet > 0) reasons.push('↑' + kpiNet + ' ' + d('labelMoreThanResolved', 'more than resolved')); - if (kpiSla > 0) reasons.push(kpiSla + ' ' + d('labelSlaBreaches', 'SLA breaches')); - if (kpiOldest > 168) reasons.push(d('labelOldestTicket', 'Oldest ticket') + ' ' + formatAge(kpiOldest)); - - if (reasons.length > 0) { - const reasonList = h('ul', 'helpdesk-risk-card-reasons'); - for (const r of reasons) { - reasonList.appendChild(h('li', '', r)); - } - card.appendChild(reasonList); - } + card.appendChild(pills); // Click/keyboard to open detail card.tabIndex = 0;