:root { --md3-primary: #2962FF; /* Blue 800 */ --md3-primary-container: #82B1FF; /* Light Blue */ } /* Mobile Dark Mode — Material 3 Expressive Style */ body { font-family: "Roboto", "Segoe UI", sans-serif; background-color: #121212; color: #E3E3E3; margin: 0; padding: 0; text-align: center; } .container { padding: 20px; background-color: #1E1E1E; border-radius: 24px; margin: 12px; box-shadow: 0 4px 16px rgba(0,0,0,0.4); border: 1px solid rgba(255, 255, 255, 0.05); } h1 { font-size: 2em; margin-bottom: 28px; font-weight: 500; color: #FFFFFF; } .button-group { display: flex; flex-direction: column; gap: 18px; } button { background-color: var(--md3-primary); color: white; border: none; padding: 18px; font-size: 1.3em; border-radius: 30px; cursor: pointer; font-weight: 500; box-shadow: 0 2px 6px rgba(0,0,0,0.3); transition: background-color 0.25s ease, box-shadow 0.25s ease, transform 0.15s ease; } button:active { transform: scale(0.97); background-color: var(--md3-primary-container); } .status-container { margin-top: 28px; font-size: 1.2em; } .status-text { display: block; margin-top: 10px; } .status-text.green { color: #4CAF50; font-weight: 600; } .status-text.red { color: #FF6D60; font-weight: 600; } /* Material 3 Spinner */ .spinner { display: none; width: 64px; height: 64px; margin: 24px 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; } }