/* Basic Styles */ body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 0; background-color: #f4f7f6; color: #333; line-height: 1.6; } #app { display: flex; flex-direction: column; min-height: 100vh; } header { background-color: #2c3e50; /* Darker header for contrast */ padding: 1rem 2rem; border-bottom: 1px solid #34495e; display: flex; justify-content: space-between; align-items: center; color: #ecf0f1; } header h1 { margin: 0; font-size: 1.8rem; color: #ecf0f1; } nav a { margin: 0 1rem; text-decoration: none; color: #bdc3c7; /* Lighter grey for navigation */ font-weight: 500; transition: color 0.3s ease; } nav a:hover { color: #ecf0f1; } #auth-controls { display: flex; align-items: center; gap: 0.5rem; } #auth-status { font-size: 0.9rem; padding: 0.25rem 0.5rem; border-radius: 4px; background: #7f8c8d; } #auth-status.authed { background: #2ecc71; } #auth-token-input { width: 220px; padding: 0.4rem 0.6rem; border: 1px solid #95a5a6; border-radius: 4px; background: #ecf0f1; color: #2c3e50; } main { flex-grow: 1; padding: 2rem; max-width: 1200px; margin: 0 auto; width: 100%; } /* Reusable Components */ .card { background-color: #fff; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.05); padding: 1.5rem; margin-bottom: 2rem; animation: card-fade-in 0.5s ease-in-out; border: 1px solid #e0e0e0; } @keyframes card-fade-in { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .button { background-color: #3498db; /* A vibrant blue */ color: #fff; padding: 0.75rem 1.5rem; border: none; border-radius: 4px; cursor: pointer; font-size: 1rem; transition: background-color 0.3s ease; } .button:hover { background-color: #2980b9; } .button.danger { background-color: #e74c3c; } .button.danger:hover { background-color: #c0392b; } .error { color: #e74c3c; font-weight: bold; } /* Grid Layouts */ .dashboard-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); grid-gap: 2rem; } .grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); grid-gap: 2rem; } .card.full-width { grid-column: 1 / -1; } .table-wrapper { width: 100%; overflow-x: auto; } .role-table { width: 100%; border-collapse: collapse; font-size: 0.95rem; } .role-table th, .role-table td { padding: 0.75rem 0.5rem; border-bottom: 1px solid #e0e0e0; text-align: left; } .role-table th { background-color: #f2f4f7; font-weight: 600; color: #2c3e50; } .role-table tr:hover td { background-color: #f8f9fb; } /* Forms */ form label { display: block; margin-bottom: 0.5rem; font-weight: 600; } form input[type="text"] { width: 100%; padding: 0.8rem; margin-bottom: 1rem; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; } /* Loading Spinner */ #loading-spinner { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.8); display: flex; justify-content: center; align-items: center; z-index: 9999; } .spinner { border: 8px solid #f3f3f3; border-top: 8px solid #3498db; border-radius: 50%; width: 60px; height: 60px; animation: spin 2s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .hidden { display: none; } /* Responsive Design */ @media (max-width: 768px) { header { flex-direction: column; padding: 1rem; } nav { margin-top: 1rem; } nav a { margin: 0 0.5rem; } main { padding: 1rem; } .dashboard-grid, .grid { grid-template-columns: 1fr; grid-gap: 1rem; } .card { margin-bottom: 1rem; } }