:root { --bs-body-bg: #1a1a1a; --bs-body-color: #f8f9fa; --bs-secondary-bg: #2d2d2d; --bs-tertiary-bg: #333333; --bs-border-color: #3d3d3d; } body { background-color: var(--bs-body-bg); color: var(--bs-body-color); font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; min-height: 100vh; } .text-gradient { background: linear-gradient(45deg, #3a7bd5, #00d2ff); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; } .widget-card { border-radius: 12px; border: 1px solid var(--bs-border-color); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); transition: transform 0.2s ease, box-shadow 0.2s ease; height: 100%; position: relative; overflow: hidden; } .widget-card:hover { transform: translateY(-5px); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); } .widget-card.small { min-height: 180px; } .widget-card.medium { min-height: 240px; } .widget-card.large { min-height: 300px; } .widget-header { border-bottom: 1px solid var(--bs-border-color); padding: 0.75rem 1rem; display: flex; justify-content: space-between; align-items: center; } .widget-title { font-weight: 600; font-size: 1rem; margin: 0; } .widget-body { padding: 1rem; } .badge-color { width: 10px; height: 10px; border-radius: 50%; display: inline-block; margin-right: 6px; } .value-display { font-size: 2.25rem; font-weight: 700; margin: 0.5rem 0; } .value-change { font-size: 0.85rem; display: flex; align-items: center; } .chart-container { position: relative; height: 80px; margin-top: 1rem; } .news-item { border-bottom: 1px solid var(--bs-border-color); padding: 0.75rem 0; } .news-item:last-child { border-bottom: none; } .uptime-stats { display: flex; justify-content: space-between; margin-bottom: 1rem; } .uptime-stat { text-align: center; } .uptime-value { font-size: 1.5rem; font-weight: 600; } .uptime-label { font-size: 0.75rem; color: #adb5bd; } .status-badge { padding: 0.25rem 0.5rem; border-radius: 20px; font-size: 0.75rem; font-weight: 600; } .status-online { background-color: rgba(40, 167, 69, 0.2); color: #28a745; } .status-offline { background-color: rgba(220, 53, 69, 0.2); color: #dc3545; } .modal-content { border: 1px solid var(--bs-border-color); } .modal-header { background-color: var(--bs-tertiary-bg); } .modal-body { background-color: var(--bs-secondary-bg); } .modal-footer { background-color: var(--bs-tertiary-bg); } /* Color variants for widget cards */ .widget-bg-orange { background: linear-gradient(135deg, rgba(253, 126, 20, 0.1), transparent); } .widget-bg-purple { background: linear-gradient(135deg, rgba(111, 66, 193, 0.1), transparent); } .widget-bg-blue { background: linear-gradient(135deg, rgba(13, 110, 253, 0.1), transparent); } .widget-bg-green { background: linear-gradient(135deg, rgba(25, 135, 84, 0.1), transparent); } .widget-bg-teal { background: linear-gradient(135deg, rgba(32, 201, 151, 0.1), transparent); } .widget-bg-pink { background: linear-gradient(135deg, rgba(214, 51, 132, 0.1), transparent); } .widget-bg-yellow { background: linear-gradient(135deg, rgba(255, 193, 7, 0.1), transparent); } .widget-bg-red { background: linear-gradient(135deg, rgba(220, 53, 69, 0.1), transparent); } .widget-bg-indigo { background: linear-gradient(135deg, rgba(102, 16, 242, 0.1), transparent); }