* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: #0f1117; color: #e1e4e8; min-height: 100vh; } .screen { min-height: 100vh; } .hidden { display: none !important; } /* Login */ #login-screen { display: flex; align-items: center; justify-content: center; } .login-box { background: #161b22; padding: 2rem; border-radius: 12px; width: 100%; max-width: 360px; border: 1px solid #30363d; } .login-box h1 { text-align: center; margin-bottom: 1.5rem; font-size: 1.5rem; } .form-group { margin-bottom: 1rem; } .form-group label { display: block; margin-bottom: 0.4rem; font-size: 0.875rem; color: #8b949e; } .form-group input { width: 100%; padding: 0.6rem 0.8rem; background: #0d1117; border: 1px solid #30363d; border-radius: 6px; color: #e1e4e8; font-size: 1rem; } .form-group input:focus { outline: none; border-color: #58a6ff; } .login-box button { width: 100%; padding: 0.7rem; background: #238636; color: #fff; border: none; border-radius: 6px; font-size: 1rem; cursor: pointer; margin-top: 0.5rem; } .login-box button:hover { background: #2ea043; } .error { color: #f85149; font-size: 0.875rem; margin-top: 0.75rem; text-align: center; } /* Dashboard */ header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 2rem; background: #161b22; border-bottom: 1px solid #30363d; } header h1 { font-size: 1.25rem; } #logout-btn { padding: 0.5rem 1rem; background: transparent; border: 1px solid #30363d; border-radius: 6px; color: #8b949e; cursor: pointer; } #logout-btn:hover { border-color: #f85149; color: #f85149; } main { padding: 2rem; max-width: 900px; margin: 0 auto; } section { margin-bottom: 2rem; } section h2 { font-size: 1rem; color: #8b949e; margin-bottom: 1rem; text-transform: uppercase; letter-spacing: 0.05em; } /* Config */ .config-row { display: flex; gap: 0.75rem; align-items: center; } .config-row label { font-size: 0.875rem; color: #8b949e; white-space: nowrap; } .config-row input { flex: 1; padding: 0.5rem 0.75rem; background: #0d1117; border: 1px solid #30363d; border-radius: 6px; color: #e1e4e8; font-size: 0.875rem; } .config-row input:focus { outline: none; border-color: #58a6ff; } .config-row button { padding: 0.5rem 1rem; background: #1f6feb; color: #fff; border: none; border-radius: 6px; cursor: pointer; white-space: nowrap; } .config-row button:hover { background: #388bfd; } /* Actions */ #run-btn { padding: 0.75rem 1.5rem; background: #238636; color: #fff; border: none; border-radius: 6px; font-size: 1rem; cursor: pointer; } #run-btn:hover:not(:disabled) { background: #2ea043; } #run-btn:disabled { opacity: 0.5; cursor: not-allowed; } .msg { margin-top: 0.5rem; font-size: 0.875rem; } .msg.success { color: #3fb950; } .msg.error { color: #f85149; } /* Running indicator */ .running-indicator { display: flex; align-items: center; gap: 0.75rem; padding: 1rem; background: #161b22; border: 1px solid #30363d; border-radius: 8px; } .spinner { width: 20px; height: 20px; border: 2px solid #30363d; border-top-color: #58a6ff; border-radius: 50%; animation: spin 0.8s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* Status grid */ .status-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; } .status-card { background: #161b22; border: 1px solid #30363d; border-radius: 8px; padding: 1rem; } .status-card h3 { font-size: 0.875rem; color: #8b949e; margin-bottom: 0.75rem; } .status-badge { display: inline-block; padding: 0.25rem 0.5rem; border-radius: 4px; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; margin-bottom: 0.5rem; } .status-badge.idle { background: #30363d; color: #8b949e; } .status-badge.success { background: #122d1a; color: #3fb950; } .status-badge.error { background: #2d1215; color: #f85149; } .status-detail { font-size: 0.875rem; color: #c9d1d9; margin-bottom: 0.25rem; } .status-time { font-size: 0.75rem; color: #484f58; } /* Last run */ #last-run { font-size: 0.875rem; color: #c9d1d9; }