:root { --primary: #2563eb; --primary-light: #eff6ff; --text: #111827; --text-muted: #6b7280; --border: #e5e7eb; --danger: #dc2626; --amber: #d97706; } * { box-sizing: border-box; } body { margin: 0; font-family: 'Inter', system-ui, -apple-system, sans-serif; color: var(--text); background: #f9fafb; } /* ---- Admin shell layout (desktop) ---- */ .admin-shell { display: grid; grid-template-columns: 220px 1fr; min-height: 100vh; } .admin-main { padding: 32px; overflow-y: auto; } .screen { max-width: 960px; margin: 0 auto; } .screen-title { font-size: 28px; font-weight: 600; margin: 0 0 8px; } .screen-subtitle { margin: 0 0 24px; color: var(--text-muted); font-size: 15px; } /* ---- Sidebar ---- */ .sidebar { display: flex; flex-direction: column; gap: 24px; padding: 24px 16px; background: #ffffff; border-right: 1px solid var(--border); } .sidebar-brand { font-size: 18px; font-weight: 700; color: var(--primary); padding: 0 8px; } .sidebar-nav { display: flex; flex-direction: column; gap: 4px; } .nav-link { display: block; padding: 10px 12px; font-size: 15px; font-weight: 500; text-decoration: none; color: var(--text-muted); border-radius: 10px; } .nav-link:hover { background: #f3f4f6; } .nav-link-active { color: var(--primary); background: var(--primary-light); } .nav-soon { display: flex; flex-direction: column; gap: 2px; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border); } .nav-soon-label { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); padding: 0 12px 4px; } .nav-disabled { display: block; padding: 10px 12px; font-size: 15px; font-weight: 500; color: var(--border); cursor: not-allowed; } /* ---- Topbar (signed-in identity + logout) ---- */ .topbar { margin-top: auto; display: flex; flex-direction: column; gap: 12px; padding-top: 16px; border-top: 1px solid var(--border); } .topbar-email { font-size: 13px; color: var(--text-muted); padding: 0 8px; word-break: break-all; } .btn-logout { width: 100%; padding: 10px; font-size: 14px; font-weight: 600; color: var(--danger); background: #ffffff; border: 1px solid var(--danger); border-radius: 12px; cursor: pointer; } /* ---- Login screen ---- */ .login { max-width: 420px; margin: 0 auto; padding: 48px 24px; display: flex; flex-direction: column; gap: 24px; min-height: 100vh; justify-content: center; } .login-title { font-size: 36px; font-weight: 600; text-align: center; color: var(--primary); margin: 0; } .login-form { display: flex; flex-direction: column; gap: 16px; } .field { display: flex; flex-direction: column; gap: 6px; } .field-label { font-size: 14px; font-weight: 500; color: var(--text-muted); } .field-input { width: 100%; padding: 14px 16px; font-size: 16px; border: 1px solid var(--border); border-radius: 12px; background: #ffffff; color: var(--text); } .field-input:focus { outline: none; border-color: var(--primary); } .btn-primary { width: 100%; padding: 16px; font-size: 16px; font-weight: 600; color: #ffffff; background: var(--primary); border: none; border-radius: 16px; cursor: pointer; } .btn-primary:disabled { background: var(--border); color: var(--text-muted); cursor: not-allowed; } .login-error { color: var(--danger); font-size: 14px; margin: 0; text-align: center; } /* ---- Shared helpers ---- */ .muted { color: var(--text-muted); font-size: 15px; } /* ---- Activity management (Handelingen) ---- */ .card { display: flex; flex-direction: column; gap: 12px; border: 1px solid var(--border); border-radius: 16px; padding: 16px; margin-bottom: 24px; background: #ffffff; } .section-label { font-size: 13px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); margin: 0 0 12px; } .card .section-label { margin: 0; } .sub-label { font-size: 14px; font-weight: 500; color: var(--text-muted); margin: 0; } .activity-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; } .activity-card { border: 1px solid var(--border); border-radius: 16px; padding: 16px; display: flex; flex-direction: column; gap: 8px; background: #ffffff; } .activity-row { display: flex; align-items: center; justify-content: space-between; } .activity-name { font-size: 16px; font-weight: 600; } .row-actions { display: flex; gap: 8px; } .icon-btn { width: 40px; height: 40px; border-radius: 12px; border: 1px solid var(--border); background: #ffffff; font-size: 16px; cursor: pointer; } .icon-edit { color: var(--primary); } .icon-delete { color: var(--danger); } .btn-save { flex: 1; padding: 12px; font-size: 15px; font-weight: 600; color: #166534; background: #dcfce7; border: 1px solid #86efac; border-radius: 12px; cursor: pointer; } .btn-save:disabled { opacity: 0.5; cursor: not-allowed; } .btn-cancel { flex: 1; padding: 12px; font-size: 15px; font-weight: 600; color: var(--text-muted); background: #f3f4f6; border: 1px solid var(--border); border-radius: 12px; cursor: pointer; } /* ---- Live active-work view ---- */ .live-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; } .live-card { display: flex; flex-direction: column; gap: 8px; padding: 20px; background: #ffffff; border: 1px solid var(--border); border-radius: 16px; } .live-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .live-name { font-size: 17px; font-weight: 600; color: var(--text); } .live-pill { font-size: 12px; font-weight: 600; color: var(--primary); background: var(--primary-light); border-radius: 999px; padding: 4px 10px; } .live-activity { font-size: 15px; color: var(--text); } .live-meta { font-size: 13px; color: var(--text-muted); } .live-timer { margin-top: 4px; font-size: 28px; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--text); } .live-badge-paused { align-self: flex-start; font-size: 12px; font-weight: 600; color: var(--amber); background: #fef3c7; border-radius: 999px; padding: 4px 10px; } .live-paused-total { font-size: 13px; color: var(--text-muted); font-variant-numeric: tabular-nums; } .live-card-actions { display: flex; gap: 8px; margin-top: 8px; } /* ---- Sessions management (Sessies) ---- */ .sessions-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 16px; } .sessions-head .screen-title { margin: 0; } .sessions-head .btn-primary { width: auto; white-space: nowrap; } .sessions-toolbar { display: flex; align-items: center; gap: 16px; margin-bottom: 20px; } .sessions-filter { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: var(--text-muted); } .sessions-filter select { padding: 8px 12px; font-size: 15px; border: 1px solid var(--border); border-radius: 12px; background: #ffffff; color: var(--text); } .sessions-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; } .sessions-row { display: grid; grid-template-columns: 1.2fr 1.6fr 1fr 0.8fr 0.8fr auto; align-items: center; gap: 12px; padding: 14px 16px; background: #ffffff; border: 1px solid var(--border); border-radius: 12px; } .sessions-worker { font-weight: 600; color: var(--text); } .sessions-activity { display: flex; align-items: center; gap: 8px; color: var(--text); } .sessions-type { font-size: 12px; font-weight: 600; color: var(--primary); background: var(--primary-light); border-radius: 999px; padding: 2px 10px; } .sessions-worked { display: flex; flex-direction: column; gap: 2px; } .sessions-time { font-variant-numeric: tabular-nums; font-weight: 600; } .sessions-pause { font-size: 12px; color: var(--text-muted); font-variant-numeric: tabular-nums; } .sessions-date { font-size: 14px; color: var(--text-muted); } .sessions-badge { font-size: 12px; font-weight: 600; border-radius: 999px; padding: 4px 10px; } .sessions-badge-active { color: #166534; background: #dcfce7; } .sessions-badge-completed { color: var(--text-muted); background: #f3f4f6; } .sessions-badge-discarded { color: var(--danger); background: #fee2e2; } .sessions-actions { display: flex; align-items: center; gap: 8px; justify-content: flex-end; } .btn-row-stop { padding: 8px 14px; font-size: 14px; font-weight: 600; color: #166534; background: #dcfce7; border: 1px solid #86efac; border-radius: 12px; cursor: pointer; } .btn-row-cancel { padding: 8px 14px; font-size: 14px; font-weight: 600; color: var(--danger); background: #fee2e2; border: 1px solid #fecaca; border-radius: 12px; cursor: pointer; } /* ---- Session create/edit form ---- */ .session-form { gap: 14px; } .session-field { display: flex; flex-direction: column; gap: 6px; } .session-field select, .session-field input, .session-field textarea { padding: 10px 12px; font-size: 15px; border: 1px solid var(--border); border-radius: 12px; background: #ffffff; color: var(--text); font-family: inherit; } .session-field select:focus, .session-field input:focus, .session-field textarea:focus { outline: none; border-color: var(--primary); } .session-preview { margin: 0; font-size: 15px; color: var(--text-muted); font-variant-numeric: tabular-nums; } .reports-head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; } .reports-filters { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 0.75rem; margin: 1rem 0; } .reports-filters label { display: flex; flex-direction: column; font-size: 0.8rem; gap: 0.25rem; } .reports-presets { display: flex; gap: 0.5rem; } .reports-totals { padding: 0.75rem 1rem; background: var(--surface, #f4f4f5); border-radius: 0.5rem; margin-bottom: 1.5rem; } .reports-section { margin-bottom: 1.5rem; } .reports-section-title { font-size: 1rem; margin-bottom: 0.5rem; } .reports-table { width: 100%; border-collapse: collapse; } .reports-table th, .reports-table td { text-align: left; padding: 0.4rem 0.6rem; border-bottom: 1px solid var(--border, #e4e4e7); } .reports-table td:not(:first-child), .reports-table th:not(:first-child) { text-align: right; } .users-table { width: 100%; border-collapse: collapse; margin-top: 1rem; } .users-table th, .users-table td { text-align: left; padding: 0.5rem 0.6rem; border-bottom: 1px solid var(--border, #e4e4e7); vertical-align: middle; } .users-actions { display: flex; flex-wrap: wrap; gap: 0.4rem; } .users-reset { display: inline-flex; gap: 0.3rem; align-items: center; } .pill { display: inline-block; padding: 0.1rem 0.5rem; border-radius: 999px; font-size: 0.75rem; font-weight: 600; } .pill-admin { background: #ede9fe; color: #6d28d9; } .pill-worker { background: #e0f2fe; color: #0369a1; } .pill-active { background: #dcfce7; color: #15803d; } .pill-inactive { background: #fee2e2; color: #b91c1c; } .user-self-badge { font-size: 0.7rem; color: var(--muted, #71717a); font-style: italic; } .user-form { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: flex-end; padding: 1rem; background: var(--surface, #f4f4f5); border-radius: 0.5rem; margin-bottom: 1rem; } .user-form label { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.8rem; } .user-form-actions { display: flex; gap: 0.5rem; }