/* Analytics Dashboard Styles */ /* Analytics is a sidebar-only mode — hide the output panel and expand the sidebar */ @media (min-width: 1024px) { .main-content.analytics-active { grid-template-columns: 1fr !important; } .main-content.analytics-active > .output-panel { display: none !important; } .main-content.analytics-active > .sidebar { max-width: 100% !important; width: 100% !important; } .main-content.analytics-active .sidebar-collapse-btn { display: none !important; } } @media (max-width: 1023px) { .main-content.analytics-active > .output-panel { display: none !important; } } .analytics-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: var(--space-3, 12px); margin-bottom: var(--space-4, 16px); } .analytics-insight-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: var(--space-3, 12px); } .analytics-insight-card { background: var(--bg-card, #151f2b); border: 1px solid var(--border-color, #1e2d3d); border-radius: var(--radius-md, 8px); padding: 10px; display: flex; flex-direction: column; gap: 4px; } .analytics-insight-card.low { border-color: rgba(90, 106, 122, 0.5); } .analytics-insight-card.medium { border-color: rgba(74, 163, 255, 0.45); } .analytics-insight-card.high { border-color: rgba(214, 168, 94, 0.55); } .analytics-insight-card.critical { border-color: rgba(226, 93, 93, 0.65); } .analytics-insight-card .insight-title { font-size: 10px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-dim, #5a6a7a); } .analytics-insight-card .insight-value { font-size: 16px; font-weight: 700; color: var(--text-primary, #e0e6ed); line-height: 1.2; } .analytics-insight-card .insight-label { font-size: 10px; color: var(--text-secondary, #9aabba); } .analytics-insight-card .insight-detail { font-size: 10px; color: var(--text-dim, #5a6a7a); } .analytics-top-changes { margin-top: 12px; } .analytics-change-row { display: flex; align-items: center; gap: 10px; padding: 7px 0; border-bottom: 1px solid var(--border-color, #1e2d3d); font-size: 10px; } .analytics-change-row:last-child { border-bottom: none; } .analytics-change-row .mode { min-width: 84px; color: var(--text-primary, #e0e6ed); font-weight: 600; } .analytics-change-row .delta { min-width: 48px; font-family: var(--font-mono, monospace); } .analytics-change-row .delta.up { color: var(--accent-green, #38c180); } .analytics-change-row .delta.down { color: var(--accent-red, #e25d5d); } .analytics-change-row .delta.flat { color: var(--text-dim, #5a6a7a); } .analytics-change-row .avg { color: var(--text-dim, #5a6a7a); } .analytics-card { background: var(--bg-card, #151f2b); border: 1px solid var(--border-color, #1e2d3d); border-radius: var(--radius-md, 8px); padding: var(--space-3, 12px); text-align: center; transition: var(--transition-fast, 150ms ease); } .analytics-card:hover { border-color: var(--accent-cyan, #4aa3ff); } .analytics-card .card-count { font-size: var(--text-2xl, 24px); font-weight: 700; color: var(--text-primary, #e0e6ed); line-height: 1.2; } .analytics-card .card-label { font-size: var(--text-xs, 10px); color: var(--text-dim, #5a6a7a); text-transform: uppercase; letter-spacing: 0.05em; margin-top: var(--space-1, 4px); } .analytics-card .card-sparkline { height: 24px; margin-top: var(--space-2, 8px); } .analytics-card .card-sparkline svg { width: 100%; height: 100%; } .analytics-card .card-sparkline polyline { fill: none; stroke: var(--accent-cyan, #4aa3ff); stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; } /* Health indicators */ .analytics-health { display: flex; flex-wrap: wrap; gap: var(--space-2, 8px); margin-bottom: var(--space-4, 16px); } .health-item { display: flex; align-items: center; gap: var(--space-1, 4px); font-size: var(--text-xs, 10px); color: var(--text-dim, #5a6a7a); text-transform: uppercase; } .health-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent-red, #e25d5d); } .health-dot.running { background: var(--accent-green, #38c180); } /* Emergency squawk panel */ .squawk-emergency { background: rgba(226, 93, 93, 0.1); border: 1px solid var(--accent-red, #e25d5d); border-radius: var(--radius-md, 8px); padding: var(--space-3, 12px); margin-bottom: var(--space-3, 12px); } .squawk-emergency .squawk-title { color: var(--accent-red, #e25d5d); font-weight: 700; font-size: var(--text-sm, 12px); text-transform: uppercase; margin-bottom: var(--space-2, 8px); } .squawk-emergency .squawk-item { font-size: var(--text-sm, 12px); color: var(--text-primary, #e0e6ed); padding: var(--space-1, 4px) 0; border-bottom: 1px solid rgba(226, 93, 93, 0.2); } .squawk-emergency .squawk-item:last-child { border-bottom: none; } /* Alert feed */ .analytics-alert-feed { max-height: 200px; overflow-y: auto; margin-bottom: var(--space-4, 16px); } .analytics-alert-item { display: flex; align-items: flex-start; gap: var(--space-2, 8px); padding: var(--space-2, 8px); border-bottom: 1px solid var(--border-color, #1e2d3d); font-size: var(--text-xs, 10px); } .analytics-alert-item .alert-severity { padding: 1px 6px; border-radius: var(--radius-sm, 4px); font-weight: 600; text-transform: uppercase; font-size: 9px; white-space: nowrap; } .alert-severity.critical { background: var(--accent-red, #e25d5d); color: #fff; } .alert-severity.high { background: var(--accent-orange, #d6a85e); color: #000; } .alert-severity.medium { background: var(--accent-cyan, #4aa3ff); color: #fff; } .alert-severity.low { background: var(--border-color, #1e2d3d); color: var(--text-dim, #5a6a7a); } /* Correlation panel */ .analytics-correlation-pair { display: flex; align-items: center; gap: var(--space-2, 8px); padding: var(--space-2, 8px); border-bottom: 1px solid var(--border-color, #1e2d3d); font-size: var(--text-xs, 10px); } .analytics-correlation-pair .confidence-bar { height: 4px; background: var(--bg-secondary, #101823); border-radius: 2px; flex: 1; max-width: 60px; } .analytics-correlation-pair .confidence-fill { height: 100%; background: var(--accent-green, #38c180); border-radius: 2px; } .analytics-pattern-item { padding: 8px; border-bottom: 1px solid var(--border-color, #1e2d3d); display: flex; flex-direction: column; gap: 4px; } .analytics-pattern-item:last-child { border-bottom: none; } .analytics-pattern-item .pattern-main { display: flex; justify-content: space-between; align-items: center; gap: 8px; } .analytics-pattern-item .pattern-mode { font-size: 10px; font-weight: 600; color: var(--text-primary, #e0e6ed); text-transform: uppercase; letter-spacing: 0.04em; } .analytics-pattern-item .pattern-device { font-size: 10px; color: var(--text-dim, #5a6a7a); font-family: var(--font-mono, monospace); } .analytics-pattern-item .pattern-meta { display: flex; gap: 10px; font-size: 10px; color: var(--text-dim, #5a6a7a); flex-wrap: wrap; } .analytics-pattern-item .pattern-confidence { color: var(--accent-green, #38c180); font-weight: 600; } /* Geofence zone list */ .geofence-zone-item { display: flex; align-items: center; justify-content: space-between; padding: var(--space-2, 8px); border-bottom: 1px solid var(--border-color, #1e2d3d); font-size: var(--text-xs, 10px); } .geofence-zone-item .zone-name { font-weight: 600; color: var(--text-primary, #e0e6ed); } .geofence-zone-item .zone-radius { color: var(--text-dim, #5a6a7a); } .geofence-zone-item .zone-delete { cursor: pointer; color: var(--accent-red, #e25d5d); padding: 2px 6px; border: 1px solid var(--accent-red, #e25d5d); border-radius: var(--radius-sm, 4px); background: transparent; font-size: 9px; } /* Export controls */ .export-controls { display: flex; gap: var(--space-2, 8px); align-items: center; flex-wrap: wrap; } .export-controls select, .export-controls button { font-size: var(--text-xs, 10px); padding: var(--space-1, 4px) var(--space-2, 8px); background: var(--bg-card, #151f2b); color: var(--text-primary, #e0e6ed); border: 1px solid var(--border-color, #1e2d3d); border-radius: var(--radius-sm, 4px); } .export-controls button { cursor: pointer; background: var(--accent-cyan, #4aa3ff); color: #fff; border-color: var(--accent-cyan, #4aa3ff); } .export-controls button:hover { opacity: 0.9; } /* Section headers */ .analytics-section-header { font-size: var(--text-xs, 10px); font-weight: 600; color: var(--text-dim, #5a6a7a); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: var(--space-2, 8px); padding-bottom: var(--space-1, 4px); border-bottom: 1px solid var(--border-color, #1e2d3d); } /* Empty state */ .analytics-empty { text-align: center; color: var(--text-dim, #5a6a7a); font-size: var(--text-xs, 10px); padding: var(--space-4, 16px); font-style: italic; } .analytics-target-toolbar, .analytics-replay-toolbar { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 10px; } .analytics-target-toolbar input { flex: 1; min-width: 220px; background: var(--bg-card, #151f2b); color: var(--text-primary, #e0e6ed); border: 1px solid var(--border-color, #1e2d3d); border-radius: 4px; padding: 6px 8px; font-size: 11px; } .analytics-target-toolbar button, .analytics-replay-toolbar button, .analytics-replay-toolbar select { font-size: 10px; padding: 5px 9px; border-radius: 4px; border: 1px solid var(--border-color, #1e2d3d); background: var(--bg-card, #151f2b); color: var(--text-primary, #e0e6ed); } .analytics-target-toolbar button, .analytics-replay-toolbar button { cursor: pointer; background: rgba(74, 163, 255, 0.2); border-color: rgba(74, 163, 255, 0.45); } .analytics-target-summary { font-size: 10px; color: var(--text-dim, #5a6a7a); margin-bottom: 8px; } .analytics-target-item, .analytics-replay-item { border-bottom: 1px solid var(--border-color, #1e2d3d); padding: 7px 0; display: grid; gap: 4px; } .analytics-target-item:last-child, .analytics-replay-item:last-child { border-bottom: none; } .analytics-target-item .title, .analytics-replay-item .title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 11px; color: var(--text-primary, #e0e6ed); font-weight: 600; } .analytics-target-item .mode, .analytics-replay-item .mode { font-size: 9px; text-transform: uppercase; letter-spacing: 0.05em; border: 1px solid rgba(74, 163, 255, 0.35); color: var(--accent-cyan, #4aa3ff); border-radius: 4px; padding: 1px 6px; } .analytics-target-item .meta, .analytics-replay-item .meta { font-size: 10px; color: var(--text-dim, #5a6a7a); display: flex; gap: 10px; flex-wrap: wrap; }