| |
|
|
| |
| .loading-container { |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| justify-content: center; |
| padding: var(--space-12); |
| gap: var(--space-4); |
| } |
|
|
| .spinner { |
| width: 48px; |
| height: 48px; |
| border: 4px solid rgba(45, 212, 191, 0.2); |
| border-top-color: var(--brand-cyan); |
| border-radius: 50%; |
| animation: spin 0.8s linear infinite; |
| } |
|
|
| @keyframes spin { |
| to { transform: rotate(360deg); } |
| } |
|
|
| |
| .diagnostics-summary { |
| margin-bottom: var(--space-6); |
| padding: var(--space-6); |
| background: var(--surface-glass); |
| border: 1px solid var(--border-subtle); |
| border-radius: var(--radius-lg); |
| box-shadow: var(--shadow-md); |
| } |
|
|
| .summary-header { |
| display: flex; |
| align-items: center; |
| gap: var(--space-4); |
| } |
|
|
| .summary-icon { |
| width: 64px; |
| height: 64px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| border-radius: var(--radius-full); |
| font-size: 2rem; |
| font-weight: var(--font-weight-bold); |
| flex-shrink: 0; |
| } |
|
|
| .summary-icon.success { |
| background: linear-gradient(135deg, rgba(34, 197, 94, 0.2), rgba(45, 212, 191, 0.2)); |
| color: var(--success); |
| box-shadow: 0 4px 20px rgba(34, 197, 94, 0.3); |
| } |
|
|
| .summary-icon.warning { |
| background: linear-gradient(135deg, rgba(251, 191, 36, 0.2), rgba(245, 158, 11, 0.2)); |
| color: var(--warning); |
| box-shadow: 0 4px 20px rgba(251, 191, 36, 0.3); |
| } |
|
|
| .summary-icon.error { |
| background: linear-gradient(135deg, rgba(239, 68, 68, 0.2), rgba(220, 38, 38, 0.2)); |
| color: var(--danger); |
| box-shadow: 0 4px 20px rgba(239, 68, 68, 0.3); |
| } |
|
|
| .summary-content { |
| flex: 1; |
| } |
|
|
| .summary-content h3 { |
| font-size: var(--font-size-xl); |
| font-weight: var(--font-weight-bold); |
| color: var(--text-strong); |
| margin-bottom: var(--space-2); |
| } |
|
|
| .summary-text { |
| font-size: var(--font-size-base); |
| color: var(--text-soft); |
| margin: 0; |
| } |
|
|
| .summary-stats { |
| display: flex; |
| gap: var(--space-4); |
| } |
|
|
| .stat-mini { |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| gap: var(--space-1); |
| } |
|
|
| .stat-mini .stat-label { |
| font-size: var(--font-size-xs); |
| color: var(--text-muted); |
| text-transform: uppercase; |
| letter-spacing: 0.05em; |
| } |
|
|
| .stat-mini .stat-value { |
| font-size: var(--font-size-lg); |
| font-weight: var(--font-weight-bold); |
| color: var(--brand-cyan); |
| } |
|
|
| |
| .diagnostics-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); |
| gap: var(--space-4); |
| } |
|
|
| .diagnostic-card { |
| background: var(--surface-glass); |
| border: 1px solid var(--border-subtle); |
| border-radius: var(--radius-lg); |
| padding: var(--space-4); |
| transition: all 0.3s ease; |
| position: relative; |
| overflow: hidden; |
| } |
|
|
| .diagnostic-card::before { |
| content: ''; |
| position: absolute; |
| top: 0; |
| left: 0; |
| right: 0; |
| height: 3px; |
| background: var(--card-color, var(--brand-blue)); |
| transform: scaleX(0); |
| transform-origin: left; |
| transition: transform 0.3s ease; |
| } |
|
|
| .diagnostic-card:hover::before { |
| transform: scaleX(1); |
| } |
|
|
| .diagnostic-card:hover { |
| transform: translateY(-2px); |
| box-shadow: var(--shadow-lg); |
| border-color: var(--border-light); |
| } |
|
|
| .diagnostic-card.pass { --card-color: linear-gradient(90deg, var(--color-success), var(--brand-cyan)); } |
| .diagnostic-card.warn { --card-color: linear-gradient(90deg, var(--color-warning), #fb923c); } |
| .diagnostic-card.fail { --card-color: linear-gradient(90deg, var(--color-danger), #f87171); } |
|
|
| .diagnostic-header { |
| display: flex; |
| align-items: center; |
| gap: var(--space-3); |
| margin-bottom: var(--space-3); |
| } |
|
|
| .diagnostic-icon { |
| width: 40px; |
| height: 40px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| border-radius: var(--radius-md); |
| flex-shrink: 0; |
| } |
|
|
| .diagnostic-icon.pass { |
| background: rgba(34, 197, 94, 0.15); |
| color: var(--color-success); |
| } |
|
|
| .diagnostic-icon.warn { |
| background: rgba(251, 191, 36, 0.15); |
| color: var(--color-warning); |
| } |
|
|
| .diagnostic-icon.fail { |
| background: rgba(239, 68, 68, 0.15); |
| color: var(--color-danger); |
| } |
|
|
| .diagnostic-title { |
| flex: 1; |
| display: flex; |
| flex-direction: column; |
| gap: var(--space-1); |
| } |
|
|
| .diagnostic-title strong { |
| font-size: var(--font-size-base); |
| font-weight: var(--font-weight-semibold); |
| color: var(--text-strong); |
| } |
|
|
| .type-badge { |
| display: inline-block; |
| padding: var(--space-1) var(--space-2); |
| font-size: var(--font-size-xs); |
| font-weight: var(--font-weight-bold); |
| text-transform: uppercase; |
| letter-spacing: 0.05em; |
| border-radius: var(--radius-sm); |
| } |
|
|
| .type-badge.internal { |
| background: rgba(59, 130, 246, 0.15); |
| color: var(--brand-blue); |
| } |
|
|
| .type-badge.external { |
| background: rgba(129, 140, 248, 0.15); |
| color: #a5b4fc; |
| } |
|
|
| .diagnostic-body { |
| display: flex; |
| justify-content: space-between; |
| align-items: center; |
| gap: var(--space-2); |
| } |
|
|
| .diagnostic-message { |
| font-size: var(--font-size-sm); |
| color: var(--text-soft); |
| margin: 0; |
| } |
|
|
| .response-time { |
| font-size: var(--font-size-xs); |
| font-weight: var(--font-weight-medium); |
| color: var(--brand-cyan); |
| font-family: var(--font-mono); |
| padding: var(--space-1) var(--space-2); |
| background: rgba(45, 212, 191, 0.1); |
| border-radius: var(--radius-sm); |
| } |
|
|
| .health-section, |
| .logs-section, |
| .requests-section { |
| margin-bottom: var(--space-6); |
| } |
|
|
| .section-header { |
| display: flex; |
| align-items: center; |
| justify-content: space-between; |
| margin-bottom: var(--space-4); |
| } |
|
|
| .section-header h2 { |
| display: flex; |
| align-items: center; |
| gap: var(--space-2); |
| font-size: var(--font-size-lg); |
| font-weight: var(--font-weight-semibold); |
| color: var(--text-strong); |
| margin: 0; |
| } |
|
|
| .log-actions { |
| display: flex; |
| gap: var(--space-2); |
| } |
|
|
| .log-actions .form-select { |
| width: 150px; |
| } |
|
|
| |
| .health-grid { |
| display: grid; |
| grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); |
| gap: var(--space-3); |
| } |
|
|
| .health-card { |
| display: flex; |
| align-items: center; |
| gap: var(--space-3); |
| padding: var(--space-4); |
| background: var(--surface-glass); |
| border: 1px solid var(--border-subtle); |
| border-radius: var(--radius-lg); |
| transition: transform 0.2s ease; |
| } |
|
|
| .health-card:hover { |
| transform: translateY(-2px); |
| } |
|
|
| .health-icon { |
| width: 40px; |
| height: 40px; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| border-radius: var(--radius-md); |
| } |
|
|
| .health-card.success .health-icon { |
| background: rgba(34, 197, 94, 0.15); |
| color: var(--success); |
| } |
|
|
| .health-card.warning .health-icon { |
| background: rgba(251, 191, 36, 0.15); |
| color: var(--warning); |
| } |
|
|
| .health-card.error .health-icon { |
| background: rgba(239, 68, 68, 0.15); |
| color: var(--danger); |
| } |
|
|
| .health-card.info .health-icon, |
| .health-card.unknown .health-icon { |
| background: rgba(14, 165, 233, 0.15); |
| color: var(--info); |
| } |
|
|
| .health-card.online .health-icon, |
| .health-card.healthy .health-icon, |
| .health-card.operational .health-icon { |
| background: rgba(34, 197, 94, 0.15); |
| color: var(--color-success); |
| } |
|
|
| .health-card.offline .health-icon, |
| .health-card.error .health-icon { |
| background: rgba(239, 68, 68, 0.15); |
| color: var(--color-danger); |
| } |
|
|
| .health-card.degraded .health-icon, |
| .health-card.warning .health-icon { |
| background: rgba(251, 191, 36, 0.15); |
| color: var(--color-warning); |
| } |
|
|
| .health-info { |
| flex: 1; |
| } |
|
|
| .health-info h4 { |
| font-size: var(--font-size-sm); |
| font-weight: var(--font-weight-semibold); |
| color: var(--text-strong); |
| margin: 0 0 var(--space-1) 0; |
| } |
|
|
| .health-info .status-badge { |
| font-size: var(--font-size-xs); |
| padding: 2px 8px; |
| border-radius: var(--radius-sm); |
| text-transform: capitalize; |
| } |
|
|
| .health-info .status-badge.online, |
| .health-info .status-badge.healthy, |
| .health-info .status-badge.operational { |
| background: rgba(34, 197, 94, 0.15); |
| color: var(--success); |
| } |
|
|
| .health-info .status-badge.offline, |
| .health-info .status-badge.error { |
| background: rgba(239, 68, 68, 0.15); |
| color: var(--danger); |
| } |
|
|
| .health-info .status-badge.degraded, |
| .health-info .status-badge.warning, |
| .health-info .status-badge.unknown { |
| background: rgba(251, 191, 36, 0.15); |
| color: var(--warning); |
| } |
|
|
| .health-label { |
| display: block; |
| font-size: var(--font-size-xs); |
| color: var(--text-muted); |
| text-transform: uppercase; |
| margin-bottom: var(--space-1); |
| } |
|
|
| .health-value { |
| font-size: var(--font-size-lg); |
| font-weight: var(--font-weight-semibold); |
| color: var(--text-strong); |
| } |
|
|
| |
| .logs-container { |
| background: var(--surface-glass); |
| border: 1px solid var(--border-subtle); |
| border-radius: var(--radius-lg); |
| max-height: 400px; |
| overflow-y: auto; |
| } |
|
|
| .logs-list { |
| display: flex; |
| flex-direction: column; |
| } |
|
|
| .log-entry { |
| padding: var(--space-3) var(--space-4); |
| border-bottom: 1px solid var(--border-subtle); |
| display: grid; |
| grid-template-columns: 80px 60px 1fr; |
| gap: var(--space-3); |
| align-items: start; |
| } |
|
|
| .log-entry:last-child { |
| border-bottom: none; |
| } |
|
|
| .log-entry.error { |
| background: rgba(239, 68, 68, 0.1); |
| } |
|
|
| .log-entry.warning { |
| background: rgba(251, 191, 36, 0.1); |
| } |
|
|
| .log-time { |
| font-size: var(--font-size-xs); |
| color: var(--text-muted); |
| font-family: 'SF Mono', monospace; |
| } |
|
|
| .log-level { |
| font-size: var(--font-size-xs); |
| font-weight: var(--font-weight-bold); |
| padding: var(--space-1) var(--space-2); |
| border-radius: var(--radius-sm); |
| text-align: center; |
| } |
|
|
| .log-entry.info .log-level { |
| background: rgba(14, 165, 233, 0.15); |
| color: var(--info); |
| } |
|
|
| .log-entry.warning .log-level { |
| background: rgba(251, 191, 36, 0.15); |
| color: var(--warning); |
| } |
|
|
| .log-entry.error .log-level { |
| background: rgba(239, 68, 68, 0.15); |
| color: var(--danger); |
| } |
|
|
| .log-entry.debug .log-level { |
| background: var(--surface-elevated); |
| color: var(--text-muted); |
| } |
|
|
| .log-message { |
| font-size: var(--font-size-sm); |
| color: var(--text-secondary); |
| word-break: break-word; |
| } |
|
|
| .log-details { |
| grid-column: 1 / -1; |
| margin: var(--space-2) 0 0; |
| padding: var(--space-2); |
| background: var(--background-secondary); |
| border-radius: var(--radius-sm); |
| font-size: var(--font-size-xs); |
| color: var(--text-muted); |
| overflow-x: auto; |
| } |
|
|
| |
| .requests-table { |
| background: var(--surface-glass); |
| border: 1px solid var(--border-subtle); |
| border-radius: var(--radius-lg); |
| overflow: hidden; |
| } |
|
|
| .data-table { |
| width: 100%; |
| border-collapse: collapse; |
| } |
|
|
| .data-table th, |
| .data-table td { |
| padding: var(--space-3); |
| text-align: left; |
| border-bottom: 1px solid var(--border-subtle); |
| } |
|
|
| .data-table th { |
| background: var(--surface-elevated); |
| font-size: var(--font-size-xs); |
| font-weight: var(--font-weight-semibold); |
| color: var(--text-muted); |
| text-transform: uppercase; |
| } |
|
|
| .data-table td { |
| font-size: var(--font-size-sm); |
| color: var(--text-secondary); |
| } |
|
|
| .status-badge { |
| font-size: var(--font-size-xs); |
| font-weight: var(--font-weight-medium); |
| padding: var(--space-1) var(--space-2); |
| border-radius: var(--radius-sm); |
| } |
|
|
| .status-badge.success, |
| .status-badge.status-2xx { |
| background: rgba(34, 197, 94, 0.15); |
| color: var(--success); |
| } |
|
|
| .status-badge.error, |
| .status-badge.status-4xx, |
| .status-badge.status-5xx { |
| background: rgba(239, 68, 68, 0.15); |
| color: var(--danger); |
| } |
|
|
| .status-badge.status-3xx { |
| background: rgba(251, 191, 36, 0.15); |
| color: var(--warning); |
| } |
|
|
| .method-badge { |
| display: inline-block; |
| font-size: var(--font-size-xs); |
| font-weight: var(--font-weight-bold); |
| padding: 2px 8px; |
| border-radius: var(--radius-sm); |
| text-transform: uppercase; |
| background: rgba(59, 130, 246, 0.15); |
| color: var(--brand-blue); |
| } |
|
|
| .loading-container, |
| .empty-state, |
| .error-state { |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| justify-content: center; |
| padding: var(--space-8); |
| color: var(--text-muted); |
| } |
|
|
| .error-message { |
| padding: var(--space-4); |
| text-align: center; |
| color: var(--danger); |
| background: rgba(239, 68, 68, 0.1); |
| border-radius: var(--radius-md); |
| margin: var(--space-4) 0; |
| } |
|
|
| .error-message p { |
| margin: 0; |
| } |
|
|
| .text-center { |
| text-align: center; |
| } |
|
|
| .text-muted { |
| color: var(--text-muted); |
| } |
|
|
| .btn-danger { |
| background: var(--danger); |
| color: white; |
| } |
|
|
| .btn-danger:hover { |
| background: var(--danger-dark); |
| } |
|
|
| @media (max-width: 768px) { |
| .log-entry { |
| grid-template-columns: 1fr; |
| gap: var(--space-1); |
| } |
| |
| .log-actions { |
| flex-wrap: wrap; |
| } |
| |
| .health-grid { |
| grid-template-columns: 1fr 1fr; |
| } |
| } |
|
|