/* Scrollable content area */ .content { flex: 1; overflow-y: auto; padding: 20px 24px 40px; min-width: 0; background: var(--bg-body); } .refreshIndicator { display: flex; align-items: center; gap: 6px; margin-bottom: 12px; justify-content: flex-end; } .refreshDot { width: 7px; height: 7px; border-radius: 50%; background: var(--success); box-shadow: 0 0 4px rgba(61, 124, 71, 0.5); animation: pulse 2s ease-in-out infinite; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .refreshText { font-size: 11px; color: var(--text-muted); font-family: var(--font-mono); } /* KPI strip */ .kpiStrip { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; margin-bottom: 20px; } /* KPI card */ .kpiCard { background: var(--bg-surface); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 16px 18px 12px; box-shadow: var(--shadow-card); position: relative; overflow: hidden; transition: box-shadow 0.15s; } .kpiCard:hover { box-shadow: var(--shadow-md); } .kpiCard::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; } .kpiCardAmber::before { background: linear-gradient(90deg, var(--amber), transparent); } .kpiCardGreen::before { background: linear-gradient(90deg, var(--success), transparent); } .kpiCardError::before { background: linear-gradient(90deg, var(--error), transparent); } .kpiCardTeal::before { background: linear-gradient(90deg, var(--running), transparent); } .kpiCardWarn::before { background: linear-gradient(90deg, var(--warning), transparent); } .kpiLabel { font-size: 10px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.6px; color: var(--text-muted); margin-bottom: 6px; } .kpiValueRow { display: flex; align-items: baseline; gap: 6px; margin-bottom: 4px; } .kpiValue { font-family: var(--font-mono); font-size: 26px; font-weight: 600; line-height: 1.2; } .kpiValueAmber { color: var(--amber); } .kpiValueGreen { color: var(--success); } .kpiValueError { color: var(--error); } .kpiValueTeal { color: var(--running); } .kpiValueWarn { color: var(--warning); } .kpiUnit { font-size: 12px; color: var(--text-muted); } .kpiTrend { font-family: var(--font-mono); font-size: 11px; display: inline-flex; align-items: center; gap: 2px; margin-left: auto; } .trendUpGood { color: var(--success); } .trendUpBad { color: var(--error); } .trendDownGood { color: var(--success); } .trendDownBad { color: var(--error); } .trendFlat { color: var(--text-muted); } .kpiDetail { font-size: 11px; color: var(--text-muted); margin-top: 2px; } .kpiDetailStrong { color: var(--text-secondary); font-weight: 600; } .kpiSparkline { margin-top: 8px; height: 32px; } /* Latency percentiles card */ .latencyValues { display: flex; gap: 12px; margin-bottom: 4px; } .latencyItem { flex: 1; display: flex; flex-direction: column; gap: 2px; } .latencyLabel { font-size: 9px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; color: var(--text-muted); } .latencyVal { font-family: var(--font-mono); font-size: 18px; font-weight: 600; line-height: 1.2; } .latValGreen { color: var(--success); } .latValAmber { color: var(--amber); } .latValRed { color: var(--error); } .latencyTrend { font-family: var(--font-mono); font-size: 9px; } /* Active routes donut */ .donutWrap { display: flex; align-items: center; gap: 10px; margin-top: 4px; } .donutLabel { font-family: var(--font-mono); font-size: 10px; font-weight: 600; color: var(--text-secondary); } .donutLegend { display: flex; flex-direction: column; gap: 2px; font-size: 10px; color: var(--text-muted); } .donutLegendActive { color: var(--running); font-weight: 600; } /* Route performance table */ .tableSection { background: var(--bg-surface); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); overflow: hidden; margin-bottom: 20px; } .tableHeader { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; border-bottom: 1px solid var(--border-subtle); } .tableTitle { font-size: 13px; font-weight: 600; color: var(--text-primary); } .tableRight { display: flex; align-items: center; gap: 10px; } .tableMeta { font-size: 11px; color: var(--text-muted); font-family: var(--font-mono); } /* Route name in table */ .routeNameCell { font-size: 12px; font-weight: 500; color: var(--text-primary); font-family: var(--font-mono); } /* Rate color classes */ .rateGood { color: var(--success); } .rateWarn { color: var(--warning); } .rateBad { color: var(--error); } .rateNeutral { color: var(--text-secondary); } /* 2x2 chart grid */ .chartGrid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .chartCard { background: var(--bg-surface); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); padding: 16px; overflow: hidden; } .chartTitle { font-size: 12px; font-weight: 600; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 12px; } .chart { width: 100%; } /* Processor type badges */ .processorType { display: inline-flex; align-items: center; padding: 2px 6px; border-radius: var(--radius-sm); font-size: 9px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px; } .typeConsumer { background: var(--running-bg); color: var(--running); } .typeProducer { background: var(--success-bg); color: var(--success); } .typeEnricher { background: var(--amber-bg); color: var(--amber); } .typeValidator { background: var(--running-bg); color: var(--running); } .typeTransformer { background: var(--bg-hover); color: var(--text-muted); } .typeRouter { background: #F3EEFA; color: #7C3AED; } .typeProcessor { background: var(--bg-hover); color: var(--text-secondary); } /* Route flow section */ .routeFlowSection { background: var(--bg-surface); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); padding: 16px; margin-top: 16px; } /* Application column in table */ .appCell { font-size: 12px; color: var(--text-secondary); }