: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; } .container { max-width: 800px; margin: 60px auto; background: #1E1E1E; padding: 40px; border-radius: 24px; box-shadow: 0 4px 20px rgba(0,0,0,0.4); border: 1px solid rgba(255, 255, 255, 0.05); transition: background-color 0.3s ease; } h1 { font-size: 2.4em; margin-bottom: 32px; text-align: center; color: #FFFFFF; font-weight: 500; } .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; } }