:root { --md3-primary: #2962FF; /* Blue 800 */ --md3-primary-container: #82B1FF; /* Light Blue */ } /* Desktop Dark Mode — Material 3 Expressive Style */ body { font-family: "Roboto", "Segoe UI", sans-serif; background-color: #121212; color: #E3E3E3; margin: 0; padding: 0; } .main-container { max-width: 1200px; margin: 0 auto; padding: 40px 20px; } h1 { font-size: 2.4em; margin-bottom: 40px; text-align: center; color: #FFFFFF; font-weight: 500; } .servers-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 24px; } .server-card { background: #1E1E1E; padding: 32px; border-radius: 24px; box-shadow: 0 4px 20px rgba(0,0,0,0.4); border: 1px solid rgba(255, 255, 255, 0.05); transition: all 0.3s ease; } .server-card:hover { box-shadow: 0 8px 24px rgba(0,0,0,0.5); border-color: rgba(255, 255, 255, 0.1); transform: translateY(-2px); } .server-card h2 { font-size: 1.3em; margin-top: 0; margin-bottom: 24px; text-align: center; color: #FFFFFF; font-weight: 500; } .server-info { margin-bottom: 20px; font-size: 0.9em; text-align: center; } .server-info p { margin: 4px 0; font-family: 'Courier New', monospace; color: #B0B0B0; } .server-info strong { color: #E3E3E3; font-weight: 600; } .button-group { display: flex; justify-content: center; gap: 20px; margin-bottom: 36px; } button { background-color: var(--md3-primary); color: white; border: none; padding: 14px 28px; font-size: 1.1em; border-radius: 28px; cursor: pointer; font-weight: 500; box-shadow: 0 2px 4px rgba(0,0,0,0.3); transition: background-color 0.25s ease, box-shadow 0.25s ease, transform 0.15s ease; } button:hover { background-color: var(--md3-primary-container); box-shadow: 0 4px 10px rgba(0,0,0,0.4); transform: translateY(-2px); } .status-container { text-align: center; font-size: 1.3em; } .status-text.green { color: #4CAF50; font-weight: 600; } .status-text.red { color: #FF6D60; font-weight: 600; } /* Material 3 Spinner */ .spinner { display: none; width: 48px; height: 48px; margin: 20px auto 0; animation: spinner-rotate 2s linear infinite; transform-origin: 50% 50%; } .spinner.visible { display: block; } .spinner .path { stroke: var(--md3-primary); stroke-linecap: round; stroke-dasharray: 90, 150; stroke-dashoffset: 0; animation: spinner-dash 1.5s ease-in-out infinite; } /* Rotation animation on the whole SVG */ @keyframes spinner-rotate { 100% { transform: rotate(360deg); } } /* Stroke dash animation on the circle */ @keyframes spinner-dash { 0% { stroke-dasharray: 1, 150; stroke-dashoffset: 0; } 50% { stroke-dasharray: 90, 150; stroke-dashoffset: -35; } 100% { stroke-dasharray: 90, 150; stroke-dashoffset: -124; } }