html,#root{overflow-x:hidden;width:100%;max-width:100%}:root{--font-logo:'Passion One', sans-serif;--font-body:'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;--color-rota:#FB7185;--color-keep:#78350F;--color-coral:#FB7185;--color-coral-hover:#F43F5E;--color-coral-light:#FFF1F2;--color-dark-brown:#78350F;--color-warm-grey:#92400E;--color-text-muted:#A8A29E;--color-cream:#FFFBEB;--color-charcoal:#1C1917;--amber:#F59E0B;--coral:#FB7185;--charcoal:#78350F;--amber-hover:#D97706;--amber-light:#FEF3C7;--amber-secondary:#FBBF24;--coral-hover:#F43F5E;--coral-light:#FDA4AF;--inactive:#78716C;--success:#22C55E;--warning:#EAB308;--error:#EF4444;--white:#FFFFFF;--black:#1C1917;--gray-50:#FAFAF9;--gray-100:#F5F5F4;--gray-200:#E7E5E4;--gray-300:#D6D3D1;--gray-400:#A8A29E;--gray-500:#78716C;--gray-600:#57534E;--gray-700:#44403C;--gray-800:#292524;--gray-900:#1C1917;--teal:#F59E0B;--teal-500:#F59E0B;--teal-400:#FBBF24;--teal-300:#FCD34D;--teal-200:#FDE68A;--teal-700:#B45309;--mint:#FBBF24;--primary:#F59E0B;--primary-hover:#D97706;--primary-dark:#B45309;--primary-light:#FEF3C7;--primary-muted:#FDE68A;--coral-400:#FB7185;--coral-300:#FDA4AF;--slate-50:#FAFAF9;--slate-100:#F5F5F4;--slate-200:#E7E5E4;--slate-300:#D6D3D1;--slate-400:#A8A29E;--slate-500:#78716C;--slate-600:#57534E;--slate-700:#44403C;--slate-800:#292524;--slate-900:#1C1917;--cream:#FFFBEB;--gray:#78716C;--gray-light:#E7E5E4;--gray-lighter:#F5F5F4;--gray-dark:#44403C;--accent-1:#fdf4f0;--accent-1-dark:#e8c4b8;--accent-2:#f0f7f4;--accent-2-dark:#93c5b4;--accent-3:#fef9ed;--accent-3-dark:#e8d59c;--accent-4:#f0f4f8;--accent-4-dark:#94b8d4;--accent-5:#faf0f5;--accent-5-dark:#d4a0b8;--accent-6:#f5f0fa;--accent-6-dark:#b8a0d4;--success-light:#DCFCE7;--success-dark:#166534;--success-muted:#86EFAC;--warning-light:#FEF3C7;--warning-dark:#92400E;--warning-muted:#FDE68A;--error-light:#FEE2E2;--error-dark:#991B1B;--error-muted:#FECACA;--info:#F59E0B;--info-light:#FEF3C7;--shadow-xs:0 1px 2px rgba(245, 158, 11, 0.05);--shadow-sm:0 2px 4px rgba(245, 158, 11, 0.06),0 1px 2px rgba(245, 158, 11, 0.04);--shadow-md:0 4px 8px rgba(245, 158, 11, 0.08),0 2px 4px rgba(245, 158, 11, 0.05);--shadow-lg:0 12px 20px rgba(245, 158, 11, 0.12),0 4px 8px rgba(245, 158, 11, 0.06);--shadow-xl:0 24px 32px rgba(245, 158, 11, 0.14),0 8px 16px rgba(245, 158, 11, 0.08);--shadow-2xl:0 32px 48px rgba(245, 158, 11, 0.18),0 12px 24px rgba(245, 158, 11, 0.10);--shadow-elevated:0 16px 32px rgba(245, 158, 11, 0.15),0 0 1px rgba(0, 0, 0, 0.1);--shadow-coral:0 4px 12px rgba(251, 113, 133, 0.30);--shadow-coral-lg:0 8px 20px rgba(251, 113, 133, 0.35);--shadow-focus:0 0 0 3px rgba(251,113,133,0.2),0 0 0 1px #FB7185;--shadow-focus-amber:0 0 0 3px #FDE68A,0 0 0 1px #F59E0B;--shadow-focus-coral:0 0 0 3px rgba(251,113,133,0.2),0 0 0 1px #FB7185;--shadow-focus-error:0 0 0 3px var(--error-muted);--border:1px solid var(--slate-200);--border-dark:1px solid var(--slate-400);--border-subtle:1px solid var(--slate-100);--border-primary:1px solid var(--teal-300);--border-focus:2px solid var(--teal-500);--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:10px;--radius-2xl:12px;--radius-full:9999px;--transition-fast:0.15s ease;--transition-base:0.2s ease;--transition-slow:0.3s ease}*{box-sizing:border-box}body{margin:0;font-family:var(--font-body);background:var(--cream);color:var(--black);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden;width:100%;line-height:1.6;font-size:15px}.container{width:100%;max-width:100%;margin:0 auto;padding:16px;overflow-x:hidden}@media (max-width:768px){.container{padding:8px;padding-top:max(8px, env(safe-area-inset-top, 0px));padding-bottom:calc(90px + env(safe-area-inset-bottom, 0px))}}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:nowrap;margin-bottom:16px;padding:12px 18px;background:linear-gradient(180deg,var(--white) 0,var(--slate-50) 100%);border:1px solid var(--slate-200);border-radius:var(--radius-xl);box-shadow:var(--shadow-sm);position:sticky;top:8px;z-index:100;backdrop-filter:blur(8px)}@media (max-width:768px){.toolbar{padding:14px 14px;gap:6px;border-radius:var(--radius-lg)}}.toolbar h1{font-size:24px;font-weight:700;margin:0;margin-right:auto;color:var(--black);display:none;letter-spacing:-.02em}button{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 20px;border:2px solid #e5e7eb;background:#fff;border-radius:8px;cursor:pointer;font-family:var(--font-body);font-size:14px;font-weight:600;transition:all .15s ease;color:#1a1a1a;position:relative;overflow:hidden}@media (max-width:768px){button{padding:8px 14px;font-size:12px;min-height:44px;min-width:44px}}button:hover{background:#fafaf9;border-color:#f59e0b;color:#f59e0b}button:active{transform:scale(.98)}button.primary{background:#FB7185;color:#fff;border-color:#FB7185}button.primary:hover{background:#F43F5E;border-color:#F43F5E}button.primary:active{background:#FB7185}button.coral,button.cta{background:#fb7185;color:#fff;border-color:#fb7185}button.coral:hover,button.cta:hover{background:#f43f5e;border-color:#f43f5e}button.coral:active,button.cta:active{background:#fb7185}button.secondary{background:0 0;color:#FB7185;border-color:#FB7185}button.secondary:hover{background:#FB7185;color:#fff}button.ghost{background:0 0;border-color:transparent;color:#FB7185}button.ghost:hover{background:#FFF1F2;border-color:#FFF1F2}button.destructive{background:#ef4444;color:#fff;border-color:#ef4444}button.destructive:hover{background:#dc2626;border-color:#dc2626}button:disabled{background:#f5f5f4;color:#a8a29e;border-color:#e7e5e4;cursor:not-allowed;transform:none!important}button:disabled:hover{background:#f5f5f4;color:#a8a29e;border-color:#e5e7eb}.tabs{display:flex;gap:2px;flex-wrap:wrap;background:linear-gradient(180deg,var(--slate-100) 0,var(--slate-50) 100%);padding:6px;border:1px solid var(--slate-200);border-radius:var(--radius-xl);box-shadow:var(--shadow-sm),inset 0 1px 2px rgba(0,0,0,.04)}@media (max-width:768px){.tabs{flex-wrap:nowrap;overflow-x:auto;border-radius:var(--radius-lg);padding:5px;-webkit-overflow-scrolling:touch}.tabs-desktop-only{display:none!important}.btn-desktop-only{display:none!important}.mobile-hide{display:none!important}}.tab{padding:12px 22px;border:none;background:0 0;cursor:pointer;font-family:var(--font-body);font-size:14px;font-weight:600;transition:all .2s cubic-bezier(.4, 0, .2, 1);color:var(--slate-500);position:relative;box-shadow:none;border-radius:var(--radius-lg);margin:2px}.tab:last-child{border-right:none}@media (max-width:768px){.tab{padding:10px 16px;font-size:12px;white-space:nowrap;flex-shrink:0}}.tab:hover{background:var(--white);color:var(--slate-700);transform:none;box-shadow:0 1px 2px rgba(0,0,0,.05)}.tab.active{background:var(--white);color:#FB7185;box-shadow:var(--shadow-sm);font-weight:700}.tab.active::after{content:'';position:absolute;bottom:6px;left:50%;transform:translateX(-50%);width:24px;height:3px;background:#FB7185;border-radius:var(--radius-full)}.card{background:var(--white);border:1px solid var(--slate-200);border-radius:var(--radius-xl);margin:16px 0;box-shadow:var(--shadow-sm);transition:box-shadow .2s ease,transform .2s ease;overflow:hidden}.card .content{padding:0;overflow:visible;-webkit-overflow-scrolling:touch;border-radius:var(--radius-xl)}.card:has([data-wrap]) .content{overflow:auto;max-height:80vh}.card:has(.people-table) .content{overflow-x:hidden;overflow-y:visible;padding:12px}@media (max-width:768px){.card:has(.people-table) .content{overflow-x:auto;-webkit-overflow-scrolling:touch}}.people-table{margin:0}.card .content>div{overflow:visible;max-width:100%}@media (max-width:768px){.card{border-radius:var(--radius-lg)}.card .content{padding:0}.card:has(.people-table) .content{padding:6px}.people-table{margin:0}}.card:first-child .content>div:first-child{padding:20px 24px;padding-bottom:16px;background:var(--primary-light);border-radius:var(--radius-xl) var(--radius-xl) 0 0}@media (max-width:768px){.card:first-child .content>div:first-child{padding:12px 16px;padding-bottom:12px}}.card:first-child .content>div:first-child>div:last-child{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}@media (max-width:768px){.card:first-child .content>div:first-child>div:last-child{gap:6px;margin-top:8px}}.grid-wrap[data-chart]{width:100%;overflow:visible!important;max-height:none!important;height:auto!important;padding-right:9px}.grid-wrap[data-chart] *{overflow:visible!important}.grid-wrap[data-wrap]{overflow:auto;max-height:65vh;width:100%}.grid{display:grid;width:100%}.td,.th{border:1px solid var(--gray-light);padding:8px;text-align:center;font-size:13px}.th.sticky{position:sticky;left:0;background:var(--white);z-index:5}.td.sticky{position:sticky;left:0;z-index:5}.td.sticky-left,.th.sticky-left{position:sticky;left:0;background:var(--white);z-index:11}.th{position:sticky;top:0;background:var(--primary-light);color:var(--black);z-index:9;font-weight:600;border-bottom:2px solid var(--primary-muted);font-size:12px}.th.sticky-header{top:80px;z-index:7}.th.sticky{z-index:12}.th.sticky-left.sticky-header{z-index:11}.time-header{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;height:72px;display:flex;align-items:center;justify-content:center;font-weight:600}.cell{user-select:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s ease;position:relative;border:1px solid var(--gray-light)}.cell:hover:not(.unavail){filter:brightness(.95);transform:scale(1.02);z-index:2}.on-mgr{background:var(--accent-1);border-color:var(--accent-1-dark);color:var(--black);font-weight:600}.on-dep{background:var(--accent-6);border-color:var(--accent-6-dark);color:var(--black);font-weight:600}.on-am{background:var(--accent-3);border-color:var(--accent-3-dark);color:var(--black);font-weight:600}.on-sup{background:var(--accent-4);border-color:var(--accent-4-dark);color:var(--black);font-weight:600}.on-team{background:var(--accent-2);border-color:var(--accent-2-dark);color:var(--black);font-weight:600}.on-kitchen{background:var(--accent-5);border-color:var(--accent-5-dark);color:var(--black);font-weight:600}.unavail{background:repeating-linear-gradient(45deg,var(--gray-lighter),var(--gray-lighter) 8px,var(--gray-light) 8px,var(--gray-light) 16px)!important;color:var(--gray);opacity:.6;cursor:not-allowed!important;pointer-events:none!important}.cell.preview-fill{background:var(--accent-4)!important;border:2px dashed var(--accent-4-dark)!important;animation:pulse-preview .8s ease-in-out infinite}.cell.preview-clear{background:var(--error-light)!important;border:2px dashed var(--error)!important;animation:pulse-preview-clear .8s ease-in-out infinite}@keyframes pulse-preview{0%,100%{opacity:1}50%{opacity:.6}}@keyframes pulse-preview-clear{0%,100%{opacity:1}50%{opacity:.5}}.chip{display:inline-flex;align-items:center;padding:6px 14px;border-radius:var(--radius-full);font-size:12px;font-weight:600;border:none}@media (max-width:768px){.chip{padding:4px 10px;font-size:10px}}.chip.mgr{background:var(--accent-1);color:var(--black)}.chip.dep{background:var(--accent-6);color:var(--black)}.chip.am{background:var(--accent-3);color:var(--black)}.chip.sup{background:var(--accent-4);color:var(--black)}.chip.team{background:var(--accent-2);color:var(--black)}.chip.kitchen{background:var(--accent-5);color:var(--black)}.pill{display:inline-flex;align-items:center;gap:6px;background:var(--white);color:var(--black);border:var(--border);border-radius:var(--radius-full);padding:8px 16px;font-size:13px;font-weight:600;box-shadow:var(--shadow-xs)}@media (max-width:768px){.pill{padding:6px 12px;font-size:11px}}.card:first-child .pill{padding:10px 18px;background:var(--white)}@media (max-width:768px){.card:first-child .pill{padding:6px 12px;font-size:10px}}.week-controls{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;margin-bottom:12px;background:var(--white);border:var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs)}.week-controls-group{display:flex;align-items:center;gap:8px}.week-controls-group.actions{gap:10px}.week-controls-divider{width:1px;height:24px;background:var(--gray-light);margin:0 4px}.week-control-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;font-size:12px;font-weight:600;border-radius:var(--radius-md);border:var(--border);background:var(--white);color:var(--black);cursor:pointer;transition:all .15s ease;white-space:nowrap}.week-control-btn:hover{background:var(--gray-lighter);border-color:var(--gray)}.week-control-btn.primary{background:linear-gradient(135deg,var(--primary) 0,var(--primary-dark) 100%);color:var(--white);border-color:var(--primary);box-shadow:0 2px 4px rgba(245,158,11,.2)}.week-control-btn.primary:hover{box-shadow:0 4px 8px rgba(245,158,11,.3);transform:translateY(-1px)}.week-control-btn.success{background:var(--success-light);color:var(--success);border-color:var(--success)}.week-control-toggle{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;font-size:11px;font-weight:600;border-radius:var(--radius-md);border:var(--border);background:var(--gray-lighter);color:var(--gray);cursor:pointer;transition:all .15s ease}.week-control-toggle:hover{background:var(--gray-light)}.week-control-toggle.active{background:var(--primary-light);color:var(--primary);border-color:var(--primary-muted)}.week-control-toggle input[type=checkbox]{width:14px;height:14px;accent-color:var(--primary);cursor:pointer}@media (max-width:768px){.week-controls{display:none}}.week-stats{display:flex;gap:20px;padding:0 8px}.week-stat{display:flex;flex-direction:column;gap:2px}.week-stat-label{font-size:10px;font-weight:500;color:var(--gray);text-transform:uppercase;letter-spacing:.5px}.week-stat-value{font-size:14px;font-weight:700;color:var(--black)}.week-stat-value.success{color:var(--success)}.week-stat-value.warning{color:var(--warning)}.week-stat-value.error{color:var(--error)}.people-table{width:100%;border-collapse:collapse;table-layout:fixed;margin:0;border:1px solid var(--slate-200);border-radius:var(--radius-lg);overflow:hidden}@media (max-width:768px){.people-table{table-layout:auto;min-width:600px}}.people-table thead th{background:var(--primary-light);color:var(--black);padding:12px 8px;font-weight:600;font-size:12px;border-bottom:1px solid var(--teal-300);border-right:1px solid var(--teal-200);text-align:center;height:52px}.people-table thead th:last-child{border-right:none}@media (max-width:768px){.people-table thead th{padding:10px 6px;font-size:10px;height:46px}}.people-table thead tr:first-child th{top:0}.people-table thead tr:nth-child(2) th{top:52px}@media (max-width:768px){.people-table thead tr:nth-child(2) th{top:46px}}.people-table thead tr:nth-child(3) th{top:104px}@media (max-width:768px){.people-table thead tr:nth-child(3) th{top:92px}}.people-table thead th:first-child{background:var(--primary-light)!important;width:15%;min-width:100px;text-align:left;border-right:1px solid var(--teal-300)}@media (max-width:768px){.people-table thead th:first-child{width:25%;min-width:80px}}.people-table thead th:not(:first-child){width:auto}.people-table tbody td{padding:10px 8px;border-bottom:1px solid var(--slate-200);border-right:1px solid var(--slate-100);font-size:13px;text-align:center;vertical-align:top;overflow:hidden;position:relative}.people-table tbody td:last-child{border-right:none}.people-table tbody td.name.has-role::after{content:'\A' attr(data-role);white-space:pre-wrap;font-size:9px;color:var(--slate-400);font-weight:400}.people-table tbody tr:last-child td{border-bottom:none}@media (max-width:768px){.people-table tbody td{padding:8px 6px;font-size:11px}}.shift-time{display:inline-block;padding:4px 8px;background:var(--white);border:1px solid var(--gray-light);border-radius:var(--radius-sm);font-weight:600;font-size:12px;color:var(--black);margin:2px 0;box-shadow:var(--shadow-xs)}.shift-time.kitchen{border-color:var(--success);background:var(--success-light);color:var(--success)}.status-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:var(--radius-sm);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.3px}.status-badge.holiday{background:var(--warning-light);color:var(--warning-dark);border:1px solid var(--warning-muted)}.status-badge.approved-holiday{background:var(--success-light);color:var(--success-dark);border:1px solid var(--success-muted)}.status-badge.pending{background:var(--warning-light);color:var(--warning-dark);border:1px solid var(--warning-muted)}.status-badge.sick{background:var(--error-light);color:var(--error);border:1px solid var(--error-muted)}.status-badge.off{background:var(--slate-100);color:var(--slate-500);border:1px solid var(--slate-200)}.status-badge.exclusion{background:var(--error-muted);color:var(--error-dark);border:1px solid var(--error)}.hours-display{font-size:10px;color:var(--gray);font-weight:500;margin-top:4px}.clock-record{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:3px 6px;border-radius:var(--radius-sm);font-size:10px;font-weight:500}.clock-record.complete{background:var(--success-light);color:var(--success-dark)}.clock-record.in-progress{background:var(--warning-light);color:var(--warning-dark)}.people-table td.today-column,.people-table th.today-column{background:linear-gradient(180deg,rgba(245,158,11,.08) 0,rgba(245,158,11,.04) 100%)!important}.people-table tbody tr.role-group-start td{border-top:2px solid var(--primary-muted)!important}.role-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.role-dot.manager{background:#f59e0b}.role-dot.supervisor{background:#d97706}.role-dot.kitchen{background:#9d174d}.role-dot.team{background:var(--success-dark)}.people-table tbody td:first-child{font-weight:600;text-align:left;padding-left:14px;border-right:1px solid var(--slate-200);overflow:hidden}@media (max-width:768px){.people-table tbody td:first-child{padding-left:10px}}.people-table tbody tr:nth-child(odd){background:var(--white)}.people-table tbody tr:nth-child(2n){background:var(--gray-lighter)}.people-table td .ranges{white-space:pre-wrap;line-height:1.5;font-weight:600}@media (max-width:768px){.people-table td .ranges{font-size:10px;line-height:1.3}}.people-table td[draggable=true]{cursor:grab;-webkit-user-select:none;user-select:none}@media (max-width:768px){.people-table td[draggable=true]{cursor:pointer}}.people-table td.drop-target{outline:2px solid var(--accent-4-dark);outline-offset:-2px;background:var(--accent-4)!important}.holiday-shaded{background:var(--accent-3)!important;opacity:.8;cursor:not-allowed!important;pointer-events:none!important}.users-container{max-width:1400px;margin:0 auto}.users-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;padding:20px 24px;background:var(--white);border:var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-sm)}.users-header h2{margin:0;font-size:24px;font-weight:700;color:var(--black)}.users-header-actions{display:flex;gap:12px}.user-card{background:var(--white);border:var(--border);border-radius:var(--radius-xl);padding:24px;margin-bottom:16px;box-shadow:var(--shadow-sm);transition:all .2s ease;display:flex;flex-direction:column}.user-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.user-card-header{order:1;display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--gray-light)}.user-card-title{display:flex;align-items:center;gap:14px}.user-avatar{width:52px;height:52px;border-radius:50%;background:var(--primary-light);border:2px solid var(--primary-muted);display:flex;align-items:center;justify-content:center;color:var(--primary);font-size:20px;font-weight:700;box-shadow:var(--shadow-xs)}.user-info{flex:1}.user-name{font-size:18px;font-weight:700;color:var(--black);margin:0 0 6px 0}.user-role-badge{display:inline-block;padding:4px 12px;border-radius:var(--radius-full);font-size:11px;font-weight:600;background:var(--primary-light);color:var(--primary)}.user-card-body{order:2;display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:16px}.user-card-body-force-grid{display:grid!important;grid-template-columns:repeat(3,1fr)!important;gap:16px!important}.user-field{display:flex;flex-direction:column;gap:8px}.user-field-label{font-size:12px;font-weight:700;color:var(--gray)}.user-field input,.user-field select{width:100%;padding:12px 14px;border:var(--border);border-radius:var(--radius-md);font-size:14px;font-family:var(--font-body);transition:var(--transition-base);background:var(--white)}.user-field input:hover,.user-field select:hover{border-color:var(--primary-muted)}.user-field input:focus,.user-field select:focus{outline:0;border-color:#FB7185;box-shadow:var(--shadow-focus);background:var(--white)}.availability-section{margin-top:16px;border-top:1px solid var(--gray-light);padding-top:16px}.availability-toggle{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;background:var(--primary-light);border:var(--border);border-radius:var(--radius-lg);cursor:pointer;transition:all .2s ease;user-select:none}.availability-toggle:hover{background:var(--teal-200);border-color:var(--teal-300)}.availability-toggle-left{display:flex;align-items:center;gap:10px}.availability-toggle-icon{font-size:22px}.availability-toggle-text{font-size:15px;font-weight:700;color:var(--black)}.availability-toggle-arrow{font-size:20px;transition:transform .2s ease;color:var(--black)}.availability-toggle-arrow.expanded{transform:rotate(180deg)}.availability-content{max-height:0;overflow:hidden;transition:max-height .3s ease}.availability-content.expanded{max-height:400px;padding-top:16px}.availability-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px}.availability-day{background:var(--white);border:var(--border);border-radius:var(--radius-lg);padding:14px;text-align:center;transition:all .2s ease}.availability-day:hover{border-color:var(--primary-muted);box-shadow:var(--shadow-sm)}.availability-day-name{font-size:12px;font-weight:700;color:var(--black);margin-bottom:10px}.availability-checkboxes{display:flex;flex-direction:column;gap:8px}.availability-checkbox{display:flex;align-items:center;justify-content:center;gap:8px;font-size:13px;font-weight:500;color:var(--black)}.availability-checkbox input[type=checkbox]{width:18px;height:18px;cursor:pointer;accent-color:var(--primary)}.users-empty{text-align:center;padding:60px 20px;color:var(--gray)}.users-empty-icon{font-size:72px;margin-bottom:20px}.users-empty-text{font-size:18px;font-weight:600;margin-bottom:24px}.finance-table,.forecast-table{width:100%;border-collapse:separate;border-spacing:0;background:var(--white);border:var(--border);border-radius:var(--radius-xl);overflow:hidden}.finance-table thead th,.forecast-table thead th{background:var(--primary-light);color:var(--black);padding:14px 16px;font-weight:600;font-size:13px;text-align:left;border-bottom:2px solid var(--primary-muted);position:sticky;top:0;z-index:10}.finance-table tbody td,.forecast-table tbody td{padding:14px 16px;border-bottom:1px solid var(--gray-light);font-size:14px;color:var(--black)}.finance-table tbody tr:nth-child(2n),.forecast-table tbody tr:nth-child(2n){background:var(--gray-lighter)}.finance-table tbody tr:hover,.forecast-table tbody tr:hover{background:var(--primary-light)}.finance-table tfoot td,.forecast-table tfoot td{padding:18px 16px;font-weight:700;font-size:15px;background:var(--success-light);border-top:2px solid var(--success)}.finance-table tbody input[type=number],.forecast-table tbody input[type=number]{max-width:120px}.forecast-table tbody textarea{width:100%;min-width:220px;resize:vertical}input[type=date],input[type=email],input[type=number],input[type=password],input[type=tel],input[type=text],select,textarea{border:var(--border);border-radius:var(--radius-md);padding:12px 14px;font-size:14px;font-family:var(--font-body);transition:var(--transition-base);background:var(--white)}input:hover,select:hover,textarea:hover{border-color:var(--primary-muted)}input:focus,select:focus,textarea:focus{outline:0;border-color:#FB7185;box-shadow:var(--shadow-focus);background:var(--white)}.time-select{font-size:12px;padding:6px 8px;border:var(--border);border-radius:var(--radius-sm);font-family:var(--font-body);min-width:0;flex:1;max-width:65px}.time-select-wrap{display:flex;align-items:center;gap:4px;margin-top:8px;justify-content:center;flex-wrap:nowrap;overflow:hidden;max-width:100%}.time-select-wrap.hidden{display:none}@media (max-width:1024px){.time-select{font-size:11px;padding:4px 6px;max-width:55px}.time-select-wrap{gap:3px}.time-select-wrap span{font-size:11px}}@media (max-width:768px){.time-select-wrap{display:none!important}}.availability-marker{display:inline;color:var(--coral);font-weight:700}.hide-availability-markers .availability-marker{display:none}.ics-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border:var(--border);border-radius:var(--radius-full);background:var(--white);font-size:13px;font-weight:600;cursor:pointer;color:var(--black);transition:all .2s ease;box-shadow:none}.ics-btn:hover{background:var(--primary-light);box-shadow:var(--shadow-sm)}.delete-shift-btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;padding:0;margin-left:6px;border:none;border-radius:50%;background:var(--error);color:#fff;font-size:12px;font-weight:700;cursor:pointer;box-shadow:var(--shadow-xs);transition:all .2s ease}.delete-shift-btn:hover{background:var(--error-dark);transform:scale(1.1)}.delete-shift-btn.hidden{display:none}.login-container{display:flex;align-items:center;justify-content:center;min-height:100vh;min-height:100dvh;background:var(--cream);padding:20px;position:relative;overflow-y:auto;-webkit-overflow-scrolling:touch}.login-box{position:relative;z-index:1;background:var(--white);padding:48px;border:var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);width:100%;max-width:420px}@media (max-width:768px){.login-box{padding:32px 24px;border-radius:var(--radius-lg)}}.login-icon{font-size:56px;text-align:center;margin-bottom:20px}.login-title{margin:0 0 8px 0;font-size:28px;font-weight:700;text-align:center;color:var(--black)}.login-subtitle{margin:0 0 32px 0;font-size:15px;font-weight:500;text-align:center;color:var(--gray)}.login-form-group{margin-bottom:20px}.login-label{display:block;margin-bottom:8px;font-size:13px;font-weight:700;color:var(--black)}.login-input{width:100%;padding:14px 16px;border:var(--border);border-radius:var(--radius-md);font-size:15px;font-family:var(--font-body);transition:var(--transition-base);background:var(--white);color:var(--black)}.login-input:hover{border-color:var(--primary-muted)}.login-input:focus{outline:0;border-color:#FB7185;box-shadow:var(--shadow-focus);background:var(--white)}.login-input::placeholder{color:var(--gray);opacity:.6}.login-submit{width:100%;padding:16px;background:#FB7185;color:var(--white);border:none;border-radius:var(--radius-full);font-size:15px;font-weight:700;cursor:pointer;transition:all .2s ease;box-shadow:var(--shadow-coral)}.login-submit:hover{background:#F43F5E;box-shadow:var(--shadow-coral-lg)}.login-submit:disabled{opacity:.6;cursor:not-allowed}.oauth-button{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;padding:14px 16px;background:var(--white);color:var(--text-primary);border:2px solid var(--neutral-200);border-radius:var(--radius-full);font-size:15px;font-weight:600;cursor:pointer;transition:all .2s ease;box-shadow:var(--shadow-sm)}.oauth-button:hover{border-color:var(--neutral-300);box-shadow:var(--shadow-md);background:var(--neutral-50)}.oauth-button:disabled{opacity:.6;cursor:not-allowed}.oauth-icon{flex-shrink:0}.oauth-google:hover{border-color:#4285f4}.oauth-divider{display:flex;align-items:center;gap:16px;margin:20px 0;color:var(--neutral-400);font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.oauth-divider::after,.oauth-divider::before{content:'';flex:1;height:1px;background:var(--neutral-200)}.login-error{padding:14px;margin-bottom:20px;background:var(--error-light);color:var(--error);border:1px solid var(--error);border-radius:var(--radius-md);font-size:14px;font-weight:600;text-align:center}.login-success{padding:16px;margin-bottom:20px;background:var(--success-light);color:var(--primary-dark);border:1px solid var(--success);border-radius:var(--radius-md);font-size:14px;font-weight:600;text-align:center;white-space:pre-line;line-height:1.6}.login-forgot-link{display:block;width:100%;margin-top:16px;padding:10px;background:0 0;border:none;color:#FB7185;font-family:inherit;font-size:14px;font-weight:500;cursor:pointer;text-align:center;transition:color .2s}.login-forgot-link:hover{color:#F43F5E;text-decoration:underline}.login-version{margin-top:24px;padding-top:16px;border-top:1px solid var(--gray-light);text-align:center;font-size:13px;font-weight:500;color:var(--gray)}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(45,52,54,.5);display:flex;align-items:center;justify-content:center;z-index:10000;animation:fadeIn .2s ease-in-out;backdrop-filter:blur(4px)}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.modal-dialog{background:var(--white);border:var(--border);border-radius:var(--radius-xl);padding:28px;max-width:500px;width:90%;box-shadow:var(--shadow-lg);animation:slideUp .3s ease-out}@keyframes slideUp{from{transform:translateY(30px);opacity:0}to{transform:translateY(0);opacity:1}}@media (max-width:768px){.modal-dialog{width:95%;padding:24px;border-radius:var(--radius-lg)}}.modal-title{font-size:22px;font-weight:700;margin:0 0 24px 0;color:#78350F;text-align:center;font-family:'Passion One',sans-serif;letter-spacing:0.01em}.modal-options{display:flex;flex-direction:column;gap:12px;margin-bottom:20px}.modal-option-btn{display:flex;align-items:flex-start;padding:18px;border:var(--border);border-radius:var(--radius-lg);background:var(--white);cursor:pointer;transition:var(--transition-base);text-align:left;font-family:var(--font-body);box-shadow:none}.modal-option-btn:hover{background:var(--primary-light);border-color:var(--primary-muted)}.modal-option-icon{font-size:36px;margin-right:16px;flex-shrink:0}@media (max-width:768px){.modal-option-icon{font-size:28px;margin-right:12px}}.modal-option-content{flex:1}.modal-option-title{font-size:17px;font-weight:700;margin:0 0 8px 0;color:var(--black)}.modal-option-desc{font-size:14px;margin:0;color:var(--gray);line-height:1.6}.modal-option-desc li{margin:4px 0}.modal-cancel{width:100%;padding:12px;background:0 0;border:var(--border);border-radius:var(--radius-full);font-size:14px;font-weight:700;color:var(--black);cursor:pointer;transition:all .2s ease;box-shadow:none}.modal-cancel:hover{background:var(--gray-lighter)}.birthday-emoji{display:inline-block!important;animation:bounce 1.5s ease-in-out infinite;transform-origin:center center}@keyframes bounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}.mobile-nav{display:none;position:fixed;bottom:0;left:0;right:0;background:var(--white);border-top:var(--border);padding:8px 12px;z-index:1000;box-shadow:0 -4px 16px rgba(0,0,0,.08)}@media (max-width:768px){.mobile-nav{display:flex;justify-content:space-around;align-items:center}}.mobile-nav-btn{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 12px;background:0 0;border:none;border-radius:var(--radius-lg);cursor:pointer;transition:all .2s ease;color:var(--gray);box-shadow:none;min-width:60px}.mobile-nav-btn:hover{background:var(--gray-lighter)}.mobile-nav-btn.active{background:var(--primary-light);color:var(--primary)}.mobile-nav-icon{font-size:22px}.mobile-nav-label{font-size:11px;font-weight:700}.messages-container{max-width:800px;margin:0 auto}.message-card{background:var(--white);border:var(--border);border-radius:var(--radius-xl);padding:20px;margin-bottom:12px;box-shadow:var(--shadow-sm);transition:all .2s ease}.message-card:hover{box-shadow:var(--shadow-md)}.message-card.unread{border-left:4px solid var(--primary);background:var(--primary-light)}.message-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:12px}.message-from{font-weight:700;font-size:16px;color:var(--black)}.message-date{font-size:13px;color:var(--gray);font-weight:500}.message-content{font-size:15px;color:var(--black);line-height:1.7}.toast{position:fixed;top:20px;right:20px;background:var(--black);color:var(--white);padding:16px 24px;border-radius:var(--radius-xl);border:none;box-shadow:var(--shadow-lg);z-index:10100;animation:slideIn .3s ease-out;font-weight:600}.toast.success{background:var(--success);color:var(--white)}.toast.error{background:var(--error);color:var(--white)}@keyframes slideIn{from{transform:translateX(100px);opacity:0}to{transform:translateX(0);opacity:1}}.settings-section{background:var(--white);border:var(--border);border-radius:var(--radius-xl);padding:24px;margin-bottom:20px;box-shadow:var(--shadow-sm)}.settings-section-title{font-size:18px;font-weight:700;color:var(--black);margin:0 0 20px 0;padding-bottom:12px;border-bottom:1px solid var(--gray-light)}.settings-row{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--gray-light)}.settings-row:last-child{border-bottom:none}.settings-label{font-weight:600;color:var(--black)}.settings-desc{font-size:14px;color:var(--gray);margin-top:4px}.toggle-switch{position:relative;width:52px;height:28px;background:var(--gray-light);border:none;border-radius:var(--radius-full);cursor:pointer;transition:all .2s ease}.toggle-switch.active{background:var(--success)}.toggle-switch::after{content:'';position:absolute;top:3px;left:3px;width:22px;height:22px;background:var(--white);border:none;border-radius:50%;transition:all .2s ease;box-shadow:var(--shadow-sm)}.toggle-switch.active::after{left:27px}.loading{display:flex;align-items:center;justify-content:center;padding:60px}.loading-spinner{width:48px;height:48px;border:3px solid var(--gray-light);border-top-color:var(--primary);border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.empty-state{text-align:center;padding:80px 40px;color:var(--gray)}.empty-state-icon{font-size:80px;margin-bottom:24px}.empty-state-title{font-size:24px;font-weight:700;color:var(--black);margin-bottom:12px}.empty-state-desc{font-size:16px;color:var(--gray);max-width:400px;margin:0 auto 32px}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-bold{font-weight:700}.text-sm{font-size:13px}.text-lg{font-size:18px}.mt-4{margin-top:16px}.mb-4{margin-bottom:16px}.p-4{padding:16px}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--gray-lighter);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb{background:var(--primary-muted);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--primary)}@media print{body{background:var(--white)!important}.mobile-nav,.tabs,.toolbar,button{display:none!important}.card{box-shadow:none!important;border:1px solid var(--slate-300)!important;break-inside:avoid}}
/* Google OAuth Spinner */
.oauth-button.oauth-loading{opacity:.8;cursor:wait}
.oauth-spinner{width:20px;height:20px;border:2px solid #e5e7eb;border-top-color:#4285F4;border-radius:50%;animation:oauth-spin .8s linear infinite}
@keyframes oauth-spin{to{transform:rotate(360deg)}}

/* Open Shifts Section */
.open-shifts-header{grid-column:1/-1;background:linear-gradient(135deg,#F3F4F6 25%,#E5E7EB 25%,#E5E7EB 50%,#F3F4F6 50%,#F3F4F6 75%,#E5E7EB 75%);background-size:20px 20px;padding:8px 12px;font-weight:600;font-size:13px;color:#374151;border-top:2px solid #9CA3AF;margin-top:8px;display:flex;align-items:center;gap:8px}
.open-shift-name{border-left-width:4px;border-left-style:solid}
.open-shifts-empty{grid-column:1/-1;padding:12px;text-align:center;background:#F9FAFB;color:#9CA3AF;cursor:pointer;font-size:13px;border-radius:4px;border:2px dashed #E5E7EB;margin-top:4px;transition:all .2s ease}
.open-shifts-empty:hover{background:#F3F4F6;color:#6B7280;border-color:#D1D5DB}
.open-shift-row .cell{background:#F9FAFB}
.open-shift-row:nth-child(even) .cell{background:#F3F4F6}
/* Hide role text below open shift name */
.people-table tbody td.name.open-shift-row::after{display:none!important;content:none!important}
/* Pulse animation for claim request badge */
@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.85;transform:scale(1.05)}}
@keyframes wizardFadeIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
@keyframes slideDown {
  from { transform: translateX(-50%) translateY(-20px); opacity: 0; }
  to { transform: translateX(-50%) translateY(0); opacity: 1; }
}

/* Week Status Banner Styles */
.week-status-banner{padding:12px 20px;border-radius:8px;border-left:4px solid;display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:12px}
.week-status-banner .status-info{display:flex;align-items:center;gap:10px}
.week-status-banner .status-icon{font-size:20px}
.week-status-banner .status-text{display:flex;flex-direction:column;gap:2px}
.week-status-banner .status-label{font-weight:600;font-size:14px}
.week-status-banner .status-message{font-size:13px;opacity:.9}
.week-status-banner .status-actions{display:flex;gap:8px;flex-wrap:wrap}

/* Draft status */
.week-status-banner.status-draft{background:#f3f4f6;border-color:#9ca3af;color:#374151}
/* Pending Review status */
.week-status-banner.status-pending-review{background:#fef3c7;border-color:#f59e0b;color:#92400e}
/* Returned for changes status */
.week-status-banner.status-returned{background:#fee2e2;border-color:#ef4444;color:#991b1b}
/* Published status */
.week-status-banner.status-published{background:#dbeafe;border-color:#3b82f6;color:#1e40af}
/* Pending Approval (week-end submitted) */
.week-status-banner.status-pending-approval{background:#fef3c7;border-color:#f59e0b;color:#92400e}
/* Finalised status */
.week-status-banner.status-finalised{background:#d1fae5;border-color:#10b981;color:#065f46}

/* Status action buttons */
.status-action-btn{padding:6px 14px;border-radius:6px;font-size:13px;font-weight:500;cursor:pointer;transition:all .15s ease;border:none}
.status-action-btn.primary{background:#3b82f6;color:#fff}
.status-action-btn.primary:hover{background:#2563eb}
.status-action-btn.success{background:#22c55e;color:#fff}
.status-action-btn.success:hover{background:#16a34a}
.status-action-btn.warning{background:#f59e0b;color:#fff}
.status-action-btn.warning:hover{background:#d97706}
.status-action-btn.danger{background:#ef4444;color:#fff}
.status-action-btn.danger:hover{background:#dc2626}
.status-action-btn.outline{background:#fff;color:#374151;border:1px solid #d1d5db}
.status-action-btn.outline:hover{background:#f3f4f6}
.status-action-btn:disabled{opacity:.6;cursor:not-allowed}

/* Budget Stats Strip - Responsive */
.budget-stats-strip{display:flex;align-items:center;flex-wrap:wrap;gap:6px 0}
.budget-stat-item{flex:0 0 auto;padding:4px 0}
.budget-stat-divider{color:#d1d5db;margin:0 16px;font-size:14px}
.budget-stat-publish{margin-left:auto;padding-left:16px;display:flex;align-items:center;gap:10px}

@media (max-width:640px){
  .budget-stats-strip{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;padding:12px 14px}
  .budget-stat-item{padding:6px 0}
  .budget-stat-divider{display:none}
  .budget-stat-publish{grid-column:1/-1;margin-left:0;padding-left:0;padding-top:8px;border-top:1px solid #e5e7eb;margin-top:4px;justify-content:space-between}
}
@media (max-width:380px){
  .budget-stats-strip{grid-template-columns:1fr;gap:4px}
  .budget-stat-item{justify-content:space-between;width:100%}
  .budget-stat-publish{flex-direction:row;gap:8px}
}

/* Consistent diagonal stripe patterns for blocked cells */
/* Holiday cells - green-tinted diagonal stripes */
.holiday-shaded{background:repeating-linear-gradient(45deg,rgba(74,222,128,.15),rgba(74,222,128,.15) 8px,rgba(74,222,128,.3) 8px,rgba(74,222,128,.3) 16px)!important;color:var(--gray);opacity:.8;cursor:not-allowed!important;pointer-events:none!important}
/* Half-day holiday cells - lighter green stripes, still editable */
.holiday-half-shaded{background:repeating-linear-gradient(45deg,rgba(74,222,128,.08),rgba(74,222,128,.08) 8px,rgba(74,222,128,.16) 8px,rgba(74,222,128,.16) 16px)!important}
/* Day off cells - grey diagonal stripes */
.off-shaded{background:repeating-linear-gradient(45deg,var(--gray-lighter),var(--gray-lighter) 8px,var(--gray-light) 8px,var(--gray-light) 16px)!important;color:var(--gray);opacity:.6;cursor:not-allowed!important;pointer-events:none!important}
/* Sick day cells - red-tinted diagonal stripes */
.sick-shaded{background:repeating-linear-gradient(45deg,rgba(239,68,68,.08),rgba(239,68,68,.08) 8px,rgba(239,68,68,.18) 8px,rgba(239,68,68,.18) 16px)!important;color:var(--gray);opacity:.7;cursor:not-allowed!important;pointer-events:none!important}
/* Sick leave (extended absence) cells - darker red stripes */
.sick-leave-shaded{background:repeating-linear-gradient(45deg,rgba(239,68,68,.12),rgba(239,68,68,.12) 8px,rgba(239,68,68,.25) 8px,rgba(239,68,68,.25) 16px)!important;color:var(--gray);opacity:.7;cursor:not-allowed!important;pointer-events:none!important}
/* No-show cells - orange/red diagonal stripes */
.noshow-shaded{background:repeating-linear-gradient(45deg,rgba(220,38,38,.1),rgba(220,38,38,.1) 8px,rgba(220,38,38,.2) 8px,rgba(220,38,38,.2) 16px)!important;color:var(--gray);opacity:.7;cursor:not-allowed!important;pointer-events:none!important}

/* Quill Editor Customizations */
.ql-container{font-family:inherit;font-size:14px}
.ql-editor{min-height:60px;padding:10px 12px}
.ql-editor.ql-blank::before{font-style:normal;color:#a8a29e}
.ql-toolbar.ql-snow{border-color:#d6d3d1;border-radius:8px 8px 0 0;padding:6px 8px;background:#fafaf9}
.ql-container.ql-snow{border-color:#d6d3d1;border-radius:0 0 8px 8px}
.ql-snow .ql-stroke{stroke:#78716c}
.ql-snow .ql-fill{fill:#78716c}
.ql-snow .ql-picker{color:#44403c}
.ql-snow button:hover .ql-stroke,.ql-snow button:focus .ql-stroke{stroke:#f59e0b}
.ql-snow button:hover .ql-fill,.ql-snow button:focus .ql-fill{fill:#f59e0b}
.ql-snow button.ql-active .ql-stroke{stroke:#f59e0b}
.ql-snow button.ql-active .ql-fill{fill:#f59e0b}
.ql-snow .ql-picker-label:hover,.ql-snow .ql-picker-item:hover{color:#f59e0b}

/* Quill content display in messages */
.quill-content{line-height:1.5}
.quill-content p{margin:0 0 0.5em 0}
.quill-content p:last-child{margin-bottom:0}
.quill-content ul,.quill-content ol{margin:0.5em 0;padding-left:1.5em}
.quill-content li{margin:0.25em 0}
.quill-content a{color:#3b82f6;text-decoration:underline}
.quill-content strong{font-weight:600}

/* Rich text editor placeholder */
[contenteditable=true]:empty:before{content:attr(data-placeholder);color:#a8a29e;pointer-events:none}
[contenteditable=true]:focus{outline:none}

/* Shift Board Tabs - explicit full-width layout */
.shift-board-tabs{display:flex!important;width:100%!important;gap:4px;margin-bottom:24px;padding:4px;background:#FAFAF9;border-radius:24px;border:1px solid #E7E5E4;box-sizing:border-box}
.shift-board-tabs .shift-board-tab{flex:1 1 0%!important;min-width:0!important;display:flex!important;align-items:center;justify-content:center;gap:6px;padding:10px 8px;border:none;border-radius:20px;font-weight:500;font-size:13px;cursor:pointer;transition:all .15s ease;white-space:nowrap;background:transparent;color:#57534E;box-shadow:none}
.shift-board-tabs .shift-board-tab.active{background:#1C1917;color:white;box-shadow:0 2px 8px rgba(0,0,0,0.15)}
.shift-board-tabs .shift-board-tab:hover:not(.active){background:#E7E5E4}

/* Compliance Report 2-column grid - responsive */
.compliance-grid{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:1.5rem}
@media (max-width:900px){
  .compliance-grid{grid-template-columns:1fr}
}

/* ========================================
   REPORTS PANEL - Responsive Styles
   ======================================== */

/* Main container */
.reports-panel{width:100%;max-width:100%;margin:0;padding:0 1rem}
@media (max-width:768px){
  .reports-panel{padding:0 0.5rem}
}

/* Reports header - responsive */
.reports-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;padding-bottom:20px;border-bottom:1px solid #E7E5E4;flex-wrap:wrap;gap:16px}
@media (max-width:768px){
  .reports-header{flex-direction:column;align-items:flex-start;gap:12px;margin-bottom:16px;padding-bottom:16px}
  .reports-header .export-btn{width:100%;justify-content:center}
}

/* Summary cards grid - 4 columns max, full width */
.reports-summary-cards{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-bottom:24px;width:100%}
@media (max-width:900px){
  .reports-summary-cards{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:600px){
  .reports-summary-cards{grid-template-columns:1fr}
}

/* Smaller summary cards (hours variance, late arrivals) - 4 columns max */
.reports-summary-cards-sm{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-bottom:24px;width:100%}
@media (max-width:900px){
  .reports-summary-cards-sm{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:600px){
  .reports-summary-cards-sm{grid-template-columns:1fr}
}

/* Charts container - responsive */
.reports-charts{display:grid;grid-template-columns:repeat(2,1fr);gap:1.5rem;margin-bottom:24px}
@media (max-width:900px){
  .reports-charts{grid-template-columns:1fr}
}

/* Individual chart - responsive height */
.reports-chart{background:white;border-radius:12px;border:1px solid #E7E5E4;padding:20px;box-shadow:0 1px 3px rgba(245,158,11,0.04)}
.reports-chart svg{width:100%;height:220px}
@media (max-width:768px){
  .reports-chart{padding:16px}
  .reports-chart svg{height:180px}
  .reports-chart .chart-label{font-size:10px}
}

/* Tables - horizontal scroll wrapper */
.reports-table-wrapper{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -0.5rem;padding:0 0.5rem}
.reports-table-wrapper table{min-width:600px}
@media (max-width:768px){
  .reports-table-wrapper{margin:0 -1rem;padding:0 1rem}
  .reports-table-wrapper table{font-size:12px}
  .reports-table-wrapper th,.reports-table-wrapper td{padding:10px 8px}
}

/* Reports panel tables - apply scroll on mobile */
.reports-panel table{width:100%}
@media (max-width:768px){
  .reports-panel>div>div:has(table){overflow-x:auto;-webkit-overflow-scrolling:touch}
  .reports-panel table{min-width:500px;font-size:12px}
  .reports-panel th,.reports-panel td{padding:10px 8px!important}
}

/* Hide less important columns on small screens */
@media (max-width:600px){
  .reports-table-wrapper .hide-mobile{display:none}
}

/* Tab navigation - horizontal scroll on mobile */
.reports-tabs{display:flex;align-items:center;gap:12px;margin-bottom:24px;padding:8px;background:#FAFAF9;border-radius:12px;border:1px solid #E7E5E4;flex-wrap:wrap}
@media (max-width:768px){
  .reports-tabs{flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;gap:6px;padding:6px;margin-bottom:16px;scrollbar-width:none;-ms-overflow-style:none}
  .reports-tabs::-webkit-scrollbar{display:none}
  .reports-tabs>*{flex-shrink:0}
}

/* Date navigation inside tabs */
.reports-date-nav{display:flex;align-items:center;gap:8px;padding:4px 8px;background:white;border-radius:8px;border:1px solid #E7E5E4}
@media (max-width:768px){
  .reports-date-nav{padding:4px 6px;gap:4px}
  .reports-date-nav select{font-size:12px;padding:6px 8px}
  .reports-date-nav button{padding:4px 8px}
}

/* Tab buttons - ensure consistent sizing on mobile */
.reports-tab-btn{padding:8px 16px;border:none;border-radius:8px;font-weight:500;font-size:13px;cursor:pointer;transition:all 0.15s ease;white-space:nowrap}
@media (max-width:768px){
  .reports-tab-btn{padding:8px 12px;font-size:12px}
}

/* T&A view toggle buttons */
.reports-view-toggle{display:flex;gap:4px;padding:4px;background:white;border-radius:8px;border:1px solid #E7E5E4}
@media (max-width:768px){
  .reports-view-toggle{gap:2px;padding:3px}
  .reports-view-toggle button{padding:6px 10px;font-size:11px}
}

/* Empty states - responsive */
.reports-empty-state{text-align:center;padding:60px 20px;background:white;border-radius:12px;border:1px solid #E7E5E4}
@media (max-width:768px){
  .reports-empty-state{padding:40px 16px}
  .reports-empty-state h4{font-size:15px}
  .reports-empty-state p{font-size:13px}
}

/* Weekly breakdown cards on mobile */
@media (max-width:600px){
  .reports-weekly-breakdown{display:flex;flex-direction:column;gap:12px}
  .reports-weekly-breakdown .card{padding:16px;border-radius:10px;background:white;border:1px solid #E7E5E4}
}

/* Hide elements on mobile */
@media (max-width:768px){
  .hide-mobile{display:none!important}
}

/* Export dropdown styles */
.export-dropdown{position:relative}
.export-dropdown .export-btn{display:flex;align-items:center;gap:8px}
@media (max-width:768px){
  .export-dropdown .export-btn{padding:8px 12px;font-size:12px}
  .export-dropdown .export-btn span:not(:first-child){display:none}
}

/* ========================================
   REPORTS PANEL - Print Styles
   ======================================== */
@media print {
  /* Hide navigation elements */
  .reports-tabs{display:none!important}
  .export-dropdown{display:none!important}
  .export-btn{display:none!important}
  .mobile-nav{display:none!important}
  .toolbar{display:none!important}
  .tabs{display:none!important}

  /* Page setup */
  .reports-panel{max-width:100%!important;padding:0!important;margin:0!important}
  .reports-header{border-bottom:2px solid #333!important;margin-bottom:20px!important;padding-bottom:15px!important}

  /* Prevent page breaks in cards */
  .reports-summary-cards{break-inside:avoid;page-break-inside:avoid;display:grid!important;grid-template-columns:repeat(4,1fr)!important;gap:10px!important}
  .reports-summary-cards>div{break-inside:avoid;page-break-inside:avoid}
  .reports-summary-cards-sm{break-inside:avoid;page-break-inside:avoid}

  /* Charts - reduce size for print */
  .reports-charts{break-inside:avoid;page-break-inside:avoid;grid-template-columns:1fr!important}
  .reports-chart{break-inside:avoid;page-break-inside:avoid;margin-bottom:20px!important}
  .reports-chart svg{height:180px!important}

  /* Tables - print-friendly */
  .reports-panel table{font-size:10pt!important;border-collapse:collapse!important;width:100%!important}
  .reports-panel th,.reports-panel td{padding:6px 8px!important;border:1px solid #ccc!important}
  .reports-panel th{background:#f0f0f0!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .reports-panel tbody tr:nth-child(even){background:#f9f9f9!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}

  /* Card styling for print */
  .reports-panel>div>div{box-shadow:none!important;border:1px solid #ddd!important}

  /* Empty states - hide on print */
  .reports-empty-state{display:none!important}

  /* Ensure compliance grid prints well */
  .compliance-grid{grid-template-columns:1fr 1fr!important}

  /* Footer */
  @page{margin:1.5cm;size:A4}
}

/* ============================================================================
   TIME & ATTENDANCE VIEW STYLES
   ============================================================================ */

/* T&A View Container */
.time-attendance-view {
  padding: 1.5rem;
  max-width: 800px;
  margin: 0 auto;
}

.ta-header {
  margin-bottom: 1.5rem;
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 1rem;
  flex-wrap: wrap;
}

.ta-header-content {
  flex: 1;
}

.ta-header h1 {
  font-size: 1.5rem;
  font-weight: 600;
  margin: 0 0 0.25rem 0;
  color: #1C1917;
}

.ta-subtitle {
  color: #78716C;
  font-size: 0.9rem;
  margin: 0;
}

.ta-log-sickness-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.625rem 1rem;
  background: #fef2f2;
  color: #dc2626;
  border: 1px solid #fecaca;
  border-radius: 8px;
  font-size: 0.875rem;
  font-weight: 500;
  cursor: pointer;
  transition: all 0.15s;
  white-space: nowrap;
}

.ta-log-sickness-btn:hover {
  background: #fee2e2;
  border-color: #fca5a5;
}

.ta-log-sickness-btn svg {
  flex-shrink: 0;
}

/* Sub-tabs */
.ta-tabs {
  display: flex;
  gap: 0.5rem;
  margin-bottom: 1.5rem;
  border-bottom: 1px solid #E7E5E4;
  padding-bottom: 0.5rem;
}

.ta-tab {
  padding: 0.5rem 1rem;
  background: none;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  font-size: 0.9rem;
  color: #78716C;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  transition: all 0.15s;
}

.ta-tab:hover {
  background: #F5F5F4;
  color: #1C1917;
}

.ta-tab.active {
  background: #3b82f6;
  color: white;
}

.ta-tab .badge {
  font-size: 0.7rem;
  padding: 0.1rem 0.4rem;
  border-radius: 9999px;
  background: rgba(0,0,0,0.1);
}

.ta-tab .badge-red {
  background: #EF4444;
  color: white;
}

.ta-tab.active .badge {
  background: rgba(255,255,255,0.3);
}

/* Empty State */
.ta-empty-state {
  text-align: center;
  padding: 3rem;
  color: #78716C;
}

.ta-empty-icon {
  font-size: 3rem;
  margin-bottom: 1rem;
}

.ta-empty-state h3 {
  margin: 0 0 0.5rem 0;
  color: #1C1917;
  font-weight: 600;
}

.ta-empty-state p {
  margin: 0;
}

.ta-loading {
  text-align: center;
  padding: 2rem;
  color: #78716C;
}

.ta-content {
  width: 100%;
}

.ta-issues-section {
  width: 100%;
}

.ta-issues-list {
  width: 100%;
}

.ta-today {
  width: 100%;
}

.ta-history {
  width: 100%;
}

/* Issues List */
.ta-issues-summary {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 1rem;
  padding: 0.75rem 1rem;
  background: #fef2f2;
  border-radius: 8px;
  width: 100%;
}

.ta-issues-count {
  font-weight: 600;
  color: #DC2626;
}

.ta-bulk-action {
  font-size: 0.8rem;
  color: #78716C;
  background: white;
  border: 1px solid #E7E5E4;
  padding: 0.4rem 0.75rem;
  border-radius: 4px;
  cursor: pointer;
  transition: all 0.15s;
}

.ta-bulk-action:hover {
  background: #F5F5F4;
  border-color: #D6D3D1;
}

.ta-issue-card {
  background: white;
  border: 1px solid #E7E5E4;
  border-radius: 8px;
  padding: 1rem;
  margin-bottom: 0.75rem;
  box-shadow: 0 1px 2px rgba(0,0,0,0.05);
  width: 100%;
}

.ta-issue-header {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin-bottom: 0.75rem;
}

.ta-issue-avatar {
  width: 40px;
  height: 40px;
  background: #E7E5E4;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 600;
  font-size: 0.85rem;
  color: #57534E;
}

.ta-issue-info {
  flex: 1;
}

.ta-issue-name {
  font-weight: 600;
  color: #1C1917;
}

.ta-issue-role {
  font-size: 0.8rem;
  color: #78716C;
}

.ta-issue-date {
  text-align: right;
  font-size: 0.85rem;
  color: #1C1917;
}

.ta-issue-day {
  display: block;
  color: #78716C;
  font-size: 0.8rem;
}

.ta-issue-shift {
  font-size: 0.85rem;
  color: #57534E;
  margin-bottom: 0.5rem;
}

.ta-label {
  font-weight: 500;
  margin-right: 0.25rem;
}

.ta-hours {
  color: #A8A29E;
  margin-left: 0.25rem;
}

.ta-issue-explanation {
  font-size: 0.85rem;
  padding: 0.5rem 0.75rem;
  background: #F5F5F4;
  border-radius: 6px;
  margin-bottom: 0.75rem;
  font-style: italic;
  color: #57534E;
}

.ta-issue-actions label {
  display: block;
  font-size: 0.8rem;
  font-weight: 500;
  color: #78716C;
  margin-bottom: 0.5rem;
}

.ta-resolution-options {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.ta-resolve-btn {
  padding: 0.5rem 0.75rem;
  border: 1px solid #E7E5E4;
  border-radius: 6px;
  background: white;
  cursor: pointer;
  font-size: 0.85rem;
  transition: all 0.15s;
  color: #44403C;
}

.ta-resolve-btn:hover:not(:disabled) {
  border-color: #3b82f6;
  background: #eff6ff;
}

.ta-resolve-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.ta-resolve-btn.sick:hover:not(:disabled) { border-color: #f59e0b; background: #fffbeb; }
.ta-resolve-btn.no-show:hover:not(:disabled) { border-color: #ef4444; background: #fef2f2; }
.ta-resolve-btn.cancelled:hover:not(:disabled) { border-color: #6b7280; background: #f3f4f6; }
.ta-resolve-btn.forgot:hover:not(:disabled) { border-color: #78716C; background: #F5F5F4; }
.ta-resolve-btn.tech:hover:not(:disabled) { border-color: #3b82f6; background: #eff6ff; }

/* Today's Attendance */
.ta-today-summary {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1rem;
  margin-bottom: 1.5rem;
}

.ta-summary-card {
  background: white;
  border: 1px solid #E7E5E4;
  border-radius: 8px;
  padding: 1rem;
  text-align: center;
}

.ta-summary-card.green { border-color: #10b981; background: #ecfdf5; }
.ta-summary-card.orange { border-color: #f59e0b; background: #fffbeb; }
.ta-summary-card.red { border-color: #ef4444; background: #fef2f2; }

.ta-summary-number {
  font-size: 1.75rem;
  font-weight: 700;
  color: #1C1917;
}

.ta-summary-card.green .ta-summary-number { color: #10b981; }
.ta-summary-card.orange .ta-summary-number { color: #f59e0b; }
.ta-summary-card.red .ta-summary-number { color: #ef4444; }

.ta-summary-label {
  font-size: 0.8rem;
  color: #78716C;
  margin-top: 0.25rem;
}

.ta-section {
  margin-bottom: 1.5rem;
}

.ta-section-title {
  font-size: 0.9rem;
  font-weight: 600;
  margin: 0 0 0.75rem 0;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  color: #1C1917;
}

.ta-section-title.warning { color: #f59e0b; }
.ta-section-title.muted { color: #A8A29E; }

.ta-staff-list {
  background: white;
  border: 1px solid #E7E5E4;
  border-radius: 8px;
  overflow: hidden;
}

.ta-staff-row {
  display: flex;
  align-items: center;
  padding: 0.75rem 1rem;
  border-bottom: 1px solid #F5F5F4;
  gap: 1rem;
}

.ta-staff-row:last-child {
  border-bottom: none;
}

.ta-staff-row.warning {
  background: #fffbeb;
}

.ta-staff-row.muted {
  color: #A8A29E;
}

/* Avatar */
.ta-avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: #f3f4f6;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 600;
  font-size: 0.8rem;
  color: #6b7280;
  flex-shrink: 0;
}

.ta-avatar.success {
  background: #d1fae5;
  color: #065f46;
}

.ta-avatar.warning {
  background: #fde68a;
  color: #92400e;
}

.ta-avatar.danger {
  background: #fecaca;
  color: #991b1b;
}

/* Name and Role */
.ta-name-role {
  flex: 1;
  min-width: 0;
}

.ta-staff-name {
  font-weight: 500;
  color: #111827;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.ta-staff-row.muted .ta-staff-name {
  color: #6b7280;
}

.ta-staff-role {
  font-size: 0.8rem;
  color: #6b7280;
}

.ta-section-title.success {
  color: #10b981;
}

.ta-hours-badge {
  font-size: 0.8rem;
  background: #f3f4f6;
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  white-space: nowrap;
  color: #6b7280;
}

.ta-shift-time {
  font-size: 0.85rem;
  color: #78716C;
}

.ta-status {
  font-size: 0.8rem;
  color: #78716C;
}

.ta-status.ok { color: #10b981; }
.ta-status.late { color: #f59e0b; font-weight: 500; }

.ta-late-badge {
  font-size: 0.7rem;
  background: #fef3c7;
  color: #b45309;
  padding: 0.15rem 0.4rem;
  border-radius: 4px;
  font-weight: 500;
}

.ta-hours-worked {
  font-size: 0.85rem;
  color: #78716C;
}

.ta-action-btn {
  font-size: 0.8rem;
  padding: 0.4rem 0.75rem;
  background: #ef4444;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  transition: background 0.15s;
}

.ta-action-btn:hover {
  background: #dc2626;
}

.ta-link-btn {
  margin-top: 1rem;
  padding: 0.5rem 1rem;
  background: #3b82f6;
  color: white;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  font-size: 0.9rem;
}

.ta-link-btn:hover {
  background: #2563eb;
}

/* Filter Pills */
.ta-filter-pills {
  display: flex;
  gap: 0.5rem;
  margin-bottom: 1.5rem;
}

.ta-filter-pill {
  padding: 0.4rem 0.75rem;
  background: #f3f4f6;
  border: 1px solid #e5e7eb;
  border-radius: 20px;
  font-size: 0.85rem;
  color: #6b7280;
  cursor: pointer;
  transition: all 0.15s;
}

.ta-filter-pill:hover {
  background: #e5e7eb;
}

.ta-filter-pill.active {
  background: #3b82f6;
  border-color: #3b82f6;
  color: white;
}

/* History Summary */
.ta-history-summary {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1rem;
  margin-bottom: 1.5rem;
}

/* History List */
.ta-history-list {
  background: white;
  border: 1px solid #e5e7eb;
  border-radius: 8px;
  overflow: hidden;
}

.ta-history-header {
  display: grid;
  grid-template-columns: 1fr 80px 100px 100px 90px;
  padding: 0.75rem 1rem;
  background: #f9fafb;
  border-bottom: 1px solid #e5e7eb;
  font-size: 0.75rem;
  font-weight: 600;
  color: #6b7280;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.ta-history-row {
  display: grid;
  grid-template-columns: 1fr 80px 100px 100px 90px;
  padding: 0.75rem 1rem;
  border-bottom: 1px solid #f3f4f6;
  font-size: 0.85rem;
  align-items: center;
}

.ta-history-row:last-child {
  border-bottom: none;
}

.ta-history-row.absent {
  background: #fef2f2;
}

.ta-history-col {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

.ta-history-col.name {
  min-width: 0;
}

.ta-history-col.name span {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-weight: 500;
  color: #111827;
}

.ta-history-col.date {
  color: #6b7280;
}

.ta-history-col.time {
  color: #6b7280;
  font-size: 0.8rem;
}

/* Status Badges */
.ta-status-badge {
  display: inline-block;
  padding: 0.2rem 0.5rem;
  border-radius: 4px;
  font-size: 0.75rem;
  font-weight: 500;
  white-space: nowrap;
}

.ta-status-badge.ok {
  background: #ecfdf5;
  color: #059669;
}

.ta-status-badge.late {
  background: #fef3c7;
  color: #b45309;
}

.ta-status-badge.absent {
  background: #fef2f2;
  color: #dc2626;
}

.ta-history-empty {
  padding: 2rem;
  text-align: center;
  color: #6b7280;
}

/* Mobile responsive */
@media (max-width: 768px) {
  .time-attendance-view {
    padding: 1rem;
  }

  .ta-today-summary,
  .ta-history-summary {
    grid-template-columns: repeat(2, 1fr);
  }

  .ta-resolution-options {
    flex-direction: column;
  }

  .ta-resolve-btn {
    width: 100%;
    text-align: left;
  }

  .ta-staff-row {
    flex-wrap: wrap;
  }

  .ta-tabs {
    flex-wrap: wrap;
  }

  .ta-issue-header {
    flex-wrap: wrap;
  }

  .ta-issue-date {
    width: 100%;
    text-align: left;
    margin-top: 0.5rem;
  }

  .ta-filter-pills {
    flex-wrap: wrap;
  }

  /* History table scrollable on mobile */
  .ta-history-list {
    overflow-x: auto;
  }

  .ta-history-header,
  .ta-history-row {
    min-width: 500px;
  }
}

@media (max-width: 480px) {
  .ta-today-summary,
  .ta-history-summary {
    grid-template-columns: 1fr;
  }

  .ta-avatar {
    width: 32px;
    height: 32px;
    font-size: 0.7rem;
  }
}

/* Bradford Factor Tooltip */
.bradford-tooltip-trigger:hover .bradford-tooltip {
  opacity: 1 !important;
  visibility: visible !important;
}

/* Help Centre Slide-Out Panel Animations */
@keyframes helpSlideIn {
  from { transform: translateX(100%); }
  to { transform: translateX(0); }
}

@keyframes helpSlideOut {
  from { transform: translateX(0); }
  to { transform: translateX(100%); }
}

@keyframes helpBackdropIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes helpBackdropOut {
  from { opacity: 1; }
  to { opacity: 0; }
}

/* Help Centre Article Content Styles */
.help-article-content h3 {
  font-size: 16px;
  font-weight: 700;
  margin: 20px 0 8px 0;
  color: #1C1917;
}

.help-article-content p {
  margin: 0 0 12px 0;
  color: #44403C;
}

.help-article-content ul,
.help-article-content ol {
  padding-left: 20px;
  margin: 0 0 12px 0;
}

.help-article-content li {
  margin-bottom: 6px;
  color: #44403C;
}

.help-article-content strong {
  color: #1C1917;
}

/* Bob the Barkeep typing animation */
.bob-typing-dots span {
  animation: bobDot 1.4s infinite;
  opacity: 0;
  font-weight: bold;
}
.bob-typing-dots span:nth-child(1) { animation-delay: 0s; }
.bob-typing-dots span:nth-child(2) { animation-delay: 0.2s; }
.bob-typing-dots span:nth-child(3) { animation-delay: 0.4s; }

@keyframes bobDot {
  0%, 60%, 100% { opacity: 0; }
  30% { opacity: 1; }
}

/* ========================================
   CONVERSATION PORTAL - Flex chain fix
   When a conversation is open on mobile,
   propagate flex height down to the portal
   ======================================== */
@media (max-width: 768px) {
  [data-scrollable]:has([data-conv-portal]) {
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
  }
  [data-scrollable] > div:has([data-conv-portal]) {
    flex: 1 1 0 !important;
    min-height: 0 !important;
    display: flex !important;
    flex-direction: column !important;
  }
  [data-scrollable] > div > .card:has([data-conv-portal]) {
    flex: 1 1 0 !important;
    min-height: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    margin: 0 !important;
    overflow: hidden !important;
    border: none !important;
    border-radius: 0 !important;
    box-shadow: none !important;
  }
  .card > .content:has([data-conv-portal]) {
    flex: 1 1 0 !important;
    min-height: 0 !important;
    display: flex !important;
    flex-direction: column !important;
    position: relative !important;
    overflow: hidden !important;
  }
  [data-messages-view]:has([data-conv-portal]) {
    flex: 1 1 0 !important;
    min-height: 0 !important;
    height: auto !important;
  }
}

/* ========================================
   DESKTOP MESSAGES SPLIT-VIEW POLISH
   WhatsApp-inspired clean chat interface
   ======================================== */
@media (min-width: 768px) {
  /* Card parent: don't interfere with viewport-height layout */
  .card:has([data-messages-view]) {
    overflow: visible;
    margin-bottom: 0;
    border: none;
    box-shadow: none;
    border-radius: 0;
  }
  .card:has([data-messages-view]) .content {
    overflow: visible;
  }
  /* Override the generic first-card header styles that add padding/bg to
     data-messages-view and margin-top to its last child (right panel) */
  .card:first-child .content > [data-messages-view] {
    padding: 0 !important;
    background: transparent !important;
    border-radius: 0 !important;
  }
  .card:first-child .content > [data-messages-view] > div:last-child {
    margin-top: 0 !important;
    gap: 0 !important;
    flex-wrap: nowrap !important;
  }

  /* === LEFT PANEL — conversation list === */
  .messages-list-panel {
    background: #fff !important;
    padding: 0 !important;
  }
  .messages-list-panel .page-header {
    margin-bottom: 4px !important;
  }
  .messages-list-panel .page-header h2 {
    font-size: 16px !important;
  }
  .messages-list-panel .conv-row {
    border-bottom: 1px solid #f3f4f6 !important;
    border-radius: 0 !important;
    padding: 12px 16px !important;
    gap: 12px !important;
  }
  .messages-list-panel .conv-row:hover {
    background: #f9fafb !important;
  }
  .messages-list-panel .archived-row {
    border-bottom: 1px solid #f3f4f6 !important;
  }

  /* === RIGHT PANEL — conversation body === */
  .messages-body-panel {
    background: #efeae2;
  }

  /* Conversation header */
  .messages-body-panel [data-conv-header] {
    height: 52px !important;
    padding: 0 16px !important;
    border-bottom: 1px solid #e5e7eb !important;
    box-shadow: 0 1px 3px rgba(0,0,0,0.08);
    z-index: 1;
    position: relative;
  }
  .messages-body-panel [data-conv-header] > div {
    font-size: 15px !important;
  }

  /* Messages scroll area */
  .messages-body-panel [data-messages-scroll] {
    background: #efeae2 !important;
    padding: 12px 48px !important;
    gap: 1px !important;
  }

  /* Message bubbles — RotaKeep brand */
  .messages-body-panel .msg-row .message-card {
    max-width: 65% !important;
    background-color: #fff !important;
    border: 1px solid #e5e7eb !important;
    border-radius: 8px 8px 8px 0 !important;
    padding: 6px 8px 4px !important;
    box-shadow: 0 1px 1px rgba(0,0,0,0.04);
  }
  .messages-body-panel .msg-row .message-card.message-self {
    background-color: #fef3c7 !important;
    border: 1px solid #fde68a !important;
    border-radius: 8px 8px 0 8px !important;
  }
  .messages-body-panel .msg-row .message-card.message-holiday {
    background-color: #FEF3C7 !important;
    border: 1px solid #FCD34D !important;
    border-radius: 8px !important;
  }
  .messages-body-panel .msg-row .message-card.message-notice {
    background: #F0FDF4 !important;
    border: 1px solid #BBF7D0 !important;
    border-left: 4px solid #10B981 !important;
    border-radius: 8px !important;
    max-width: 100% !important;
  }

  /* Read ticks — blue for read */
  .messages-body-panel .msg-inline-time svg[width="16"] path {
    stroke: #53bdeb !important;
  }

  /* Date separators */
  .messages-body-panel .date-separator-pill {
    background: rgba(255,255,255,0.92) !important;
    color: #6b7280 !important;
    padding: 5px 12px !important;
    border-radius: 8px !important;
    font-size: 12px !important;
    font-weight: 500 !important;
    box-shadow: 0 1px 2px rgba(0,0,0,0.08);
  }

  /* Input row */
  .messages-body-panel [data-conv-input] {
    background: #f0f0f0 !important;
    border-top: 1px solid #e5e7eb !important;
    padding: 8px 16px !important;
    padding-bottom: 8px !important;
  }

  /* === CONTENTEDITABLE MESSAGE INPUT — desktop only === */
  .message-input-editable {
    flex: 1;
    min-height: 20px;
    max-height: 120px;
    overflow-y: auto;
    padding: 8px 12px;
    border-radius: 20px;
    background: #ffffff;
    font-size: 14px;
    line-height: 1.4;
    color: #111827;
    outline: none;
    word-wrap: break-word;
    white-space: pre-wrap;
    -webkit-user-modify: read-write-plaintext-only;
  }
  .message-input-editable:focus {
    border-color: #f59e0b;
    box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.15);
  }
  /* Placeholder via CSS */
  .message-input-editable:empty::before {
    content: attr(data-placeholder);
    color: #9ca3af;
    pointer-events: none;
  }
  /* Hide autofill suggestions */
  .message-input-editable:-webkit-autofill,
  .message-input-editable:-webkit-autofill:hover,
  .message-input-editable:-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
    transition: background-color 5000s ease-in-out 0s;
  }
  /* Thin scrollbar for contentEditable */
  .message-input-editable::-webkit-scrollbar {
    width: 4px;
  }
  .message-input-editable::-webkit-scrollbar-thumb {
    background: #c1c1c1;
    border-radius: 2px;
  }
  .message-input-editable::-webkit-scrollbar-track {
    background: transparent;
  }

  /* === FORMAT TOOLBAR — desktop conversation input === */
  .msg-format-toolbar .fmt-btn:hover {
    background: #E7E5E4 !important;
    color: #1C1917 !important;
  }
  .msg-format-toolbar .fmt-btn:active {
    background: #D6D3D1 !important;
  }
  /* Formatted content inside contentEditable */
  .message-input-editable ul {
    margin: 2px 0;
    padding-left: 20px;
  }
  .message-input-editable li {
    margin: 0;
  }

  /* Empty state */
  .messages-body-panel .messages-empty-state {
    background: #efeae2;
  }

  /* Thin scrollbars */
  .messages-list-panel ::-webkit-scrollbar,
  .messages-body-panel [data-messages-scroll]::-webkit-scrollbar {
    width: 6px;
  }
  .messages-list-panel ::-webkit-scrollbar-thumb,
  .messages-body-panel [data-messages-scroll]::-webkit-scrollbar-thumb {
    background: #c1c1c1;
    border-radius: 3px;
  }
  .messages-list-panel ::-webkit-scrollbar-track,
  .messages-body-panel [data-messages-scroll]::-webkit-scrollbar-track {
    background: transparent;
  }

  /* === ANNOUNCEMENT CARDS — desktop polish === */
  .messages-body-panel .announcement-card {
    background: #FFFBEB !important;
    border-radius: 12px !important;
    padding: 20px 24px !important;
    border: 1px solid #fde68a !important;
    border-left: 4px solid #FB7185 !important;
    box-shadow: 0 1px 3px rgba(0,0,0,0.06) !important;
    transition: box-shadow 0.2s !important;
  }
  .messages-body-panel .announcement-card:hover {
    box-shadow: 0 2px 8px rgba(0,0,0,0.1) !important;
  }
  .messages-body-panel .ann-action-btn:hover {
    color: #111827 !important;
  }
  .messages-body-panel .ann-delete-btn:hover {
    color: #991b1b !important;
  }
  .messages-body-panel .ann-send-btn:hover {
    background: #F43F5E !important;
  }

  /* Announcements scrollable area thin scrollbar */
  .messages-body-panel > div > div:last-child::-webkit-scrollbar {
    width: 6px;
  }
  .messages-body-panel > div > div:last-child::-webkit-scrollbar-thumb {
    background: #c1c1c1;
    border-radius: 3px;
  }
  .messages-body-panel > div > div:last-child::-webkit-scrollbar-track {
    background: transparent;
  }
}

/* ========================================
   NATIVE APP (Capacitor) overrides
   Keyboard resize:'none' — JS sets exact pixel height
   on html/body when keyboard opens via Keyboard plugin.
   ======================================== */
.native-app {
  --safe-area-top: env(safe-area-inset-top, 0px);
  --safe-area-bottom: env(safe-area-inset-bottom, 0px);
}
.native-app, .native-app body {
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
  position: relative;
}
.native-app #app {
  height: 100%;
  overflow: hidden;
}
/* .container uses position:fixed on mobile — fixed ignores html height.
   Override to absolute so it follows the html/body height set by JS. */
.native-app .container {
  position: absolute !important;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}
.native-app .container,
body.is-app .container {
  padding-top: calc(env(safe-area-inset-top, 0px) - 10px) !important;
}
/* On native, the bottom nav handles safe-area — remove safe-area padding
   from conversation input rows to avoid double gap */
.native-app [data-conv-portal] > div:last-child {
  padding-bottom: 4px !important;
}
/* Hide bottom nav when keyboard is open — frees space for input row */
.native-app.keyboard-visible .mobile-bottom-nav {
  display: none !important;
}
.native-app.keyboard-visible {
  padding-bottom: 0 !important;
}
.native-app.keyboard-visible body {
  padding-bottom: 0 !important;
}
/* RTW toast container (React-rendered) */
.rtw-toast-container {
  position: fixed;
  top: 16px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 10002;
  display: flex;
  flex-direction: column;
  gap: 8px;
  pointer-events: none;
  max-width: 480px;
  width: calc(100% - 32px);
}
.native-app .rtw-toast-container {
  top: calc(env(safe-area-inset-top, 0px) + 16px);
}
.rtw-toast-item {
  pointer-events: auto;
  animation: slideDown 0.3s ease-out;
}
.rtw-block-modal .modal-dialog {
  max-width: 420px;
}
/* Constrain conversation portal to sit above the keyboard on native iOS.
   Uses bottom: var(--keyboard-height) so the portal stretches from safe-area-top
   to the top of the keyboard. The flex column inside (header → messages → input)
   naturally keeps the input row visible. */
html.keyboard-visible [data-conv-portal] {
  position: fixed !important;
  top: var(--conv-portal-top, env(safe-area-inset-top, 0px)) !important;
  left: 0 !important;
  right: 0 !important;
  bottom: var(--keyboard-height, 0px) !important;
  height: auto !important;
  z-index: 9999 !important;
  display: flex !important;
  flex-direction: column !important;
  overflow: hidden !important;
}
/* Keep conversation header pinned at top when keyboard is open */
html.keyboard-visible [data-conv-portal] > [data-conv-header] {
  flex-shrink: 0 !important;
  position: relative !important;
  z-index: 2 !important;
}
/* Messages scroll area fills remaining space between header and input */
html.keyboard-visible [data-conv-portal] > [data-messages-scroll] {
  flex: 1 1 0 !important;
  min-height: 0 !important;
  overflow-y: auto !important;
  -webkit-overflow-scrolling: touch !important;
}
/* Input row stays at bottom */
html.keyboard-visible [data-conv-portal] > [data-conv-input] {
  flex-shrink: 0 !important;
}

/* ========================================
   CONVERSATION THREAD - Message Bubbles
   ======================================== */

.msg-row {
  display: flex;
}

.msg-row-self {
  justify-content: flex-end;
}

/* Selected message highlight when action menu is open */
.msg-row .message-card.message-selected {
  box-shadow: 0 0 0 1.5px rgba(251, 113, 133, 0.4);
  transition: box-shadow 0.15s;
}

/* Bottom action sheet slide-up animation */
@keyframes sheetSlideUp {
  from { transform: translateY(100%); }
  to { transform: translateY(0); }
}

/* === REPLY ICON — hover to reply (desktop) === */
.msg-row .msg-reply-trigger {
  opacity: 0;
  transition: opacity 0.15s;
  order: -1;
  align-self: center;
  flex-shrink: 0;
}
.msg-row-self .msg-reply-trigger {
  order: -1;
}
.msg-row:hover .msg-reply-trigger {
  opacity: 0.5;
}
.msg-row .msg-reply-trigger:hover {
  opacity: 1 !important;
  background: rgba(0,0,0,0.05) !important;
}
/* Hide reply icon on touch devices */
@media (hover: none) {
  .msg-row .msg-reply-trigger { display: none !important; }
}

/* === REPLY QUOTE inside message bubble === */
.reply-quote {
  transition: background 0.15s;
}
.reply-quote:hover {
  background: rgba(0,0,0,0.08) !important;
}

/* === MESSAGE HIGHLIGHT — flash when scrolling to original === */
@keyframes msgHighlight {
  0% { background-color: rgba(245, 158, 11, 0.25); }
  100% { background-color: transparent; }
}
.msg-highlight {
  animation: msgHighlight 1.5s ease-out;
  border-radius: 8px;
}

/* WhatsApp-style inline timestamp floated right */
.msg-inline-time {
  float: right;
  margin-top: 4px;
  margin-left: 8px;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  line-height: 1;
  white-space: nowrap;
}

/* Override the base .message-card styles when used as a chat bubble */
.msg-row .message-card {
  margin-right: auto;
  margin-left: 0;
  max-width: 80%;
  padding: 4px 8px;
  background-color: #fff;
  color: #1C1917;
  border: 1px solid #E7E5E4;
  border-radius: 10px 10px 10px 3px;
  box-shadow: none;
  overflow: hidden;
  /* Prevent text selection on long-press — context menu handles actions */
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}

.msg-row .message-card.message-self {
  margin-left: auto;
  margin-right: 0;
  background-color: #FFFBEB;
  color: #1C1917;
  border: 1px solid #FDE68A;
  border-radius: 10px 10px 3px 10px;
}

.msg-row .message-card.message-holiday {
  background-color: #FEF3C7;
  color: #92400E;
  border: 1px solid #FCD34D;
  border-radius: 10px;
  max-width: 80%;
  padding: 8px 10px 16px;
}

/* Sender name */
.msg-row .message-card .message-from {
  font-size: 11px;
  font-weight: 700;
  color: #6B7280;
  margin-bottom: 2px;
}

.msg-row .message-self .message-from {
  color: #92400E;
}

/* System notices: full-width cards */
.msg-row-notice {
  width: 100%;
}
.msg-row .message-card.message-notice {
  max-width: 100%;
  width: 100%;
  background: #F0FDF4;
  border: 1px solid #BBF7D0;
  border-left: 4px solid #10B981;
  border-radius: 8px;
}

/* Settings group expand/collapse animation */
.settings-group-body {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 250ms ease;
}
.settings-group-body.open {
  grid-template-rows: 1fr;
}
.settings-group-body > div {
  overflow: hidden;
}

/* ============================================================================
   APP FIXED-WIDTH LAYOUT — body.is-app
   Desktop: min 1280px (h-scroll below), max 1920px (centred above).
   The landing page (rotakeep.co.uk) does NOT get body.is-app and stays
   fully responsive.  These base rules apply ALWAYS so that narrowing a
   desktop browser below 1280px shows a scrollbar instead of squeezing.
   ============================================================================ */

/* Base constraints — always active for the app */
html:has(body.is-app) {
  overflow-x: auto !important;
  width: auto !important;
  max-width: none !important;
  background: var(--cream);
}
body.is-app {
  min-width: 1280px;
  overflow-x: visible;
  background: var(--cream);
}
body.is-app #app {
  min-width: 1280px;
}

/* Real mobile/touch devices: remove desktop width constraints */
@media (max-width: 1024px) and (pointer: coarse) {
  html:has(body.is-app) {
    overflow-x: hidden !important;
    width: 100% !important;
    max-width: 100% !important;
  }
  body.is-app {
    min-width: unset;
    overflow-x: hidden;
  }
  body.is-app #app {
    min-width: unset;
  }
}

/* Desktop viewport (≥1025px): max-width centering + counter-rules for
   mobile-only CSS that would otherwise hide desktop elements. */
@media (min-width: 1025px) {
  body.is-app #app {
    max-width: 1920px;
    margin: 0 auto;
  }
  body.is-app .container {
    min-width: 0;
    max-width: 100%;
    overflow-x: visible;
  }

  /* --- Counter @media (max-width: 768px) rules --- */
  body.is-app .container { padding: 16px; }
  body.is-app .toolbar { padding: 12px 18px; gap: 10px; border-radius: var(--radius-xl); }
  body.is-app button { padding: 10px 20px; font-size: 14px; min-height: unset; min-width: unset; }
  body.is-app .tabs { flex-wrap: wrap; overflow-x: visible; border-radius: var(--radius-xl); padding: 6px; }
  body.is-app .tab { padding: 12px 22px; font-size: 14px; white-space: normal; flex-shrink: 1; }
  body.is-app .tabs-desktop-only { display: revert !important; }
  body.is-app .btn-desktop-only { display: revert !important; }
  body.is-app .mobile-hide { display: revert !important; }
  body.is-app .hide-mobile { display: revert !important; }
  body.is-app .week-controls { display: flex !important; }
  body.is-app .mobile-nav { display: none !important; }
  body.is-app .time-select-wrap { display: flex !important; }
  body.is-app .time-select { font-size: 12px; padding: 6px 8px; max-width: 65px; }
  body.is-app .time-select-wrap span { font-size: inherit; }
  body.is-app .card { border-radius: var(--radius-xl); }
  body.is-app .card .content { padding: 0; }
  body.is-app .card:has(.people-table) .content { overflow-x: hidden; overflow-y: visible; padding: 12px; }
  body.is-app .card:first-child .content > div:first-child { padding: 20px 24px; padding-bottom: 16px; }
  body.is-app .card:first-child .content > div:first-child > div:last-child { gap: 10px; margin-top: 12px; }
  body.is-app .people-table { table-layout: fixed; min-width: 0; }
  body.is-app .people-table thead th { padding: 12px 8px; font-size: 12px; height: 52px; }
  body.is-app .people-table thead th:first-child { width: 15%; min-width: 100px; }
  body.is-app .people-table thead tr:nth-child(2) th { top: 52px; }
  body.is-app .people-table thead tr:nth-child(3) th { top: 104px; }
  body.is-app .people-table tbody td { padding: 10px 8px; font-size: 13px; }
  body.is-app .people-table tbody td:first-child { padding-left: 14px; }
  body.is-app .people-table td .ranges { font-size: inherit; line-height: 1.5; }
  body.is-app .people-table td[draggable=true] { cursor: grab; }
  body.is-app .chip { padding: 6px 14px; font-size: 12px; }
  body.is-app .pill { padding: 8px 16px; font-size: 13px; }
  body.is-app .card:first-child .pill { padding: 10px 18px; }
  body.is-app .login-box { padding: 48px; border-radius: var(--radius-xl); }
  body.is-app .modal-dialog { width: 90%; padding: 28px; border-radius: var(--radius-xl); }
  body.is-app .modal-option-icon { font-size: 36px; margin-right: 16px; }

  /* --- Counter @media (max-width: 900px) rules --- */
  body.is-app .reports-summary-cards { grid-template-columns: repeat(4, 1fr); }
  body.is-app .reports-summary-cards-sm { grid-template-columns: repeat(4, 1fr); }
  body.is-app .reports-charts { grid-template-columns: repeat(2, 1fr); }
  body.is-app .compliance-grid { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); }

  /* --- Counter budget rules --- */
  body.is-app .budget-stats-strip { display: flex; }
  body.is-app .budget-stat-divider { display: inline; }
  body.is-app .budget-stat-publish { grid-column: unset; margin-left: auto; padding-left: 16px; border-top: none; margin-top: 0; }

  /* --- Counter T&A responsive rules --- */
  body.is-app .time-attendance-view { padding: 1.5rem; }
  body.is-app .ta-today-summary,
  body.is-app .ta-history-summary { grid-template-columns: repeat(4, 1fr); }
  body.is-app .ta-resolution-options { flex-direction: row; }
  body.is-app .ta-resolve-btn { width: auto; text-align: center; }
  body.is-app .ta-staff-row { flex-wrap: nowrap; }
  body.is-app .ta-tabs { flex-wrap: nowrap; }
  body.is-app .ta-issue-header { flex-wrap: nowrap; }
  body.is-app .ta-issue-date { width: auto; text-align: right; margin-top: 0; }
  body.is-app .ta-filter-pills { flex-wrap: nowrap; }
  body.is-app .ta-avatar { width: 36px; height: 36px; font-size: 0.8rem; }

  /* --- Counter reports responsive --- */
  body.is-app .reports-panel { padding: 0 1rem; }
  body.is-app .reports-header { flex-direction: row; align-items: center; }
  body.is-app .reports-chart { padding: 20px; }
  body.is-app .reports-chart svg { height: 220px; }
  body.is-app .reports-tabs { flex-wrap: wrap; gap: 12px; padding: 8px; }
  body.is-app .reports-tabs::-webkit-scrollbar { display: unset; }
  body.is-app .reports-tab-btn { padding: 8px 16px; font-size: 13px; }
  body.is-app .reports-date-nav { padding: 4px 8px; gap: 8px; }
  body.is-app .reports-date-nav select { font-size: inherit; padding: revert; }
  body.is-app .reports-view-toggle { gap: 4px; padding: 4px; }
  body.is-app .reports-view-toggle button { padding: revert; font-size: revert; }

  /* --- Styled horizontal scrollbar --- */
  html:has(body.is-app)::-webkit-scrollbar { height: 8px; }
  html:has(body.is-app)::-webkit-scrollbar-track { background: #f0ede8; }
  html:has(body.is-app)::-webkit-scrollbar-thumb { background: #ccc; border-radius: 4px; }
  html:has(body.is-app)::-webkit-scrollbar-thumb:hover { background: #aaa; }
} /* end @media (min-width: 1025px) */

/* Mobile: ensure the rota grid scrolls within its container, not the whole page */
@media (max-width: 1024px) {
  body.is-app .card:has(.people-table) .content {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
}

/* Mobile: stack page headers (title on top, actions below) */
@media (max-width: 768px) {
  .page-header {
    flex-wrap: wrap !important;
    gap: 10px !important;
  }
  .page-header-title {
    width: 100% !important;
  }
  .page-header-actions {
    width: 100% !important;
    flex-wrap: wrap !important;
  }
  .page-header-actions > button {
    flex: 1 1 0% !important;
    min-height: 44px !important;
    justify-content: center !important;
  }
  /* Full-width tab bars on mobile */
  .msg-tabs {
    width: 100% !important;
  }
  .msg-tabs > button {
    min-height: 44px !important;
  }
}

/* Mobile: lock page-level scroll — single fixed container, no nested fixed.
   Scoped to .is-app (added by index.html loader for non-landing pages)
   so the landing page retains normal document scrolling. */
@media (max-width: 768px) {
  html:has(body.is-app) {
    height: 100%;
    overflow: hidden;
  }
  body.is-app {
    height: 100%;
    overflow: hidden;
    margin: 0;
    overscroll-behavior-y: contain;
  }
  body.is-app #app {
    height: 100%;
    min-height: 0 !important;
    overflow: hidden;
  }
  body.is-app .container {
    position: fixed !important;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    display: flex !important;
    flex-direction: column !important;
    overflow: hidden !important;
    padding-bottom: 0 !important;
    height: auto !important;
    max-height: none !important;
  }
  body.is-app .toolbar {
    flex-shrink: 0;
    position: relative !important;
    top: auto !important;
    margin-bottom: 0 !important;
    z-index: 10005;
  }
}

/* ============================================================================
   UNIVERSAL LOGIN — loaded by js/universal-login.js on app.rotakeep.co.uk
   All classes prefixed with ul- to avoid collisions with main app styles.
   ============================================================================ */
.ul-container {
  height: 100%; overflow: hidden;
  padding: calc(env(safe-area-inset-top, 20px) + 40px) 24px 24px;
  display: flex; flex-direction: column; align-items: center;
  background: var(--cream); font-family: var(--font-body);
}
.ul-box {
  background: var(--white); padding: 24px;
  border: var(--border); border-radius: var(--radius-xl);
  box-shadow: var(--shadow-lg); width: 100%; max-width: 400px;
}
.ul-logo-wrap { text-align: center; margin-bottom: 6px; }
.ul-logo-wrap svg { max-width: 120px; height: auto; display: inline-block; }
.ul-heading {
  margin: 0 0 12px; font-size: 20px; font-weight: 700;
  text-align: center; color: var(--black);
}
.ul-form-group { margin-bottom: 12px; }
.ul-form-group label {
  display: block; margin-bottom: 4px;
  font-size: 12px; font-weight: 700; color: var(--black);
}
.ul-form-group input {
  width: 100%; padding: 11px 14px; height: 44px;
  border: var(--border); border-radius: var(--radius-md);
  font-size: 15px; font-family: inherit;
  background: var(--white); color: var(--black);
  transition: border-color 0.2s, box-shadow 0.2s;
}
.ul-form-group input:hover { border-color: var(--primary-muted); }
.ul-form-group input:focus {
  outline: none; border-color: var(--coral);
  box-shadow: var(--shadow-focus);
}
.ul-form-group input::placeholder { color: var(--gray); opacity: 0.6; }
.ul-submit {
  width: 100%; padding: 12px; height: 44px;
  background: var(--coral); color: var(--white); border: none;
  border-radius: var(--radius-full); font-size: 15px; font-weight: 700;
  cursor: pointer; font-family: inherit;
  transition: background 0.2s, box-shadow 0.2s;
  box-shadow: var(--shadow-coral);
}
.ul-submit:hover { background: var(--coral-hover); box-shadow: var(--shadow-coral-lg); }
.ul-submit:disabled { opacity: 0.6; cursor: not-allowed; }
/* Remember me */
.ul-remember-row { display: flex; align-items: center; margin-bottom: 14px; }
.ul-remember-label {
  display: flex; align-items: center; gap: 6px;
  font-size: 13px; color: var(--text-secondary); cursor: pointer;
  user-select: none;
}
.ul-remember-check { accent-color: var(--coral); width: 16px; height: 16px; margin: 0; cursor: pointer; }
/* Biometric login */
.ul-biometric-wrap { margin-top: 16px; text-align: center; }
.ul-biometric-btn {
  width: 100%; padding: 12px; height: 44px;
  display: flex; align-items: center; justify-content: center; gap: 8px;
  background: transparent; color: var(--coral); border: 2px solid var(--coral);
  border-radius: var(--radius-full); font-size: 15px; font-weight: 700;
  cursor: pointer; font-family: inherit;
  transition: background 0.2s, color 0.2s;
}
.ul-biometric-btn:hover { background: var(--coral); color: var(--white); }
.ul-biometric-btn svg { flex-shrink: 0; }
.ul-biometric-disable {
  display: inline-block; margin-top: 8px; padding: 4px 8px;
  background: none; border: none; color: var(--text-tertiary);
  font-size: 12px; cursor: pointer; font-family: inherit;
}
.ul-biometric-disable:hover { color: var(--text-secondary); text-decoration: underline; }
.ul-error {
  padding: 10px; margin-bottom: 10px;
  background: var(--error-light); color: var(--error);
  border: 1px solid var(--error); border-radius: var(--radius-md);
  font-size: 13px; font-weight: 600; text-align: center;
  display: none;
}
.ul-error.visible { display: block; }
.ul-spinner {
  display: inline-block; width: 18px; height: 18px;
  border: 2px solid rgba(255,255,255,0.3);
  border-top-color: #fff; border-radius: 50%;
  animation: spin 0.8s linear infinite;
  vertical-align: middle; margin-right: 8px;
}
/* Venue selector */
.ul-venue-list { display: none; flex-direction: column; gap: 10px; margin-bottom: 12px; }
.ul-venue-list.visible { display: flex; }
.ul-venue-btn {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 16px; background: var(--white);
  border: var(--border); border-radius: var(--radius-lg);
  cursor: pointer; font-family: inherit;
  transition: all 0.2s; text-align: left;
}
.ul-venue-btn:hover {
  background: var(--primary-light); border-color: var(--primary-muted);
  box-shadow: var(--shadow-sm);
}
.ul-venue-icon {
  width: 40px; height: 40px; border-radius: 10px;
  background: linear-gradient(135deg, var(--coral), var(--coral-hover));
  display: flex; align-items: center; justify-content: center;
  color: #fff; font-size: 16px; font-weight: 700; flex-shrink: 0;
}
.ul-venue-info { flex: 1; }
.ul-venue-name { font-size: 15px; font-weight: 700; color: var(--black); margin: 0 0 2px; }
.ul-venue-role { font-size: 12px; color: var(--gray); margin: 0; text-transform: capitalize; }
.ul-venue-arrow { color: var(--gray-400); font-size: 18px; }
/* Quick-launch */
.ul-quick-launch { display: none; text-align: center; }
.ul-quick-launch.visible { display: block; }
.ul-ql-greeting { font-size: 24px; font-weight: 700; color: var(--black); margin: 0 0 4px; }
.ul-ql-hint { font-size: 14px; color: var(--gray); margin: 0 0 20px; }
.ul-ql-btn {
  display: flex; align-items: center; gap: 14px;
  width: 100%; padding: 16px; background: var(--white);
  border: 2px solid var(--coral); border-radius: var(--radius-xl);
  cursor: pointer; font-family: inherit; text-align: left;
  transition: all 0.2s;
  box-shadow: 0 4px 12px rgba(251,113,133,0.15);
}
.ul-ql-btn:hover {
  background: var(--coral-light); border-color: var(--coral-hover);
  box-shadow: 0 8px 20px rgba(251,113,133,0.25);
  transform: translateY(-1px);
}
.ul-ql-btn:active { transform: translateY(0); }
.ul-ql-icon {
  width: 44px; height: 44px; border-radius: 12px;
  background: linear-gradient(135deg, var(--coral), var(--coral-hover));
  display: flex; align-items: center; justify-content: center;
  color: #fff; font-size: 20px; font-weight: 700; flex-shrink: 0;
}
.ul-ql-info { flex: 1; }
.ul-ql-label { font-size: 12px; color: var(--gray); margin: 0 0 2px; font-weight: 500; }
.ul-ql-name { font-size: 16px; font-weight: 700; color: var(--black); margin: 0; }
.ul-ql-arrow { color: var(--coral); font-size: 22px; font-weight: 700; }
.ul-switch-link {
  display: block; width: 100%; margin-top: 16px;
  padding: 8px; background: none; border: none;
  color: var(--gray); font-family: inherit; font-size: 13px;
  font-weight: 500; cursor: pointer; text-align: center;
}
.ul-switch-link:hover { color: var(--coral); text-decoration: underline; }
.ul-back-link {
  display: block; width: 100%; margin-top: 12px;
  padding: 8px; background: none; border: none;
  color: var(--coral); font-family: inherit; font-size: 13px;
  font-weight: 500; cursor: pointer; text-align: center;
}
.ul-back-link:hover { color: var(--coral-hover); text-decoration: underline; }
.ul-version {
  margin-top: 16px; padding-top: 12px;
  border-top: 1px solid var(--gray-light);
  text-align: center; font-size: 12px;
  font-weight: 500; color: var(--gray);
}
.ul-help-section {
  margin-top: 20px; padding-top: 16px;
  border-top: 1px solid var(--gray-light);
  display: flex; flex-direction: column; gap: 14px;
}
.ul-help-block { text-align: center; }
.ul-help-q {
  font-size: 12px; font-weight: 600;
  color: var(--gray); margin-bottom: 3px;
}
.ul-help-link {
  background: none; border: none; padding: 0;
  font-family: inherit; font-size: 12px; font-weight: 500;
  color: var(--coral); cursor: pointer;
}
.ul-help-link:hover { text-decoration: underline; }
.ul-help-sub {
  font-size: 11px; font-weight: 400;
  color: var(--gray); line-height: 1.4;
}

/* ============================================================================
   MOBILE COMPACT MODE — ~25% denser layout for phone screens
   Overrides inline styles with !important where needed
   ============================================================================ */
@media (max-width: 768px) {

  /* --- Global text --- */
  body {
    font-size: 14px !important;
    line-height: 1.45 !important;
  }

  /* --- Headings (override inline fontSize) --- */
  h1 { font-size: 20px !important; }
  h2 { font-size: 18px !important; }
  h3 { font-size: 15px !important; }
  h4 { font-size: 14px !important; }

  /* --- Buttons (global) --- */
  button {
    font-size: 13px !important;
  }
  /* Larger action buttons (not inline icon buttons, not nav buttons) */
  .card button,
  .content button,
  .settings-section button,
  .modal-dialog button,
  form button[type="submit"] {
    padding: 6px 12px !important;
    min-height: 34px !important;
  }

  /* --- Bottom Navigation (legacy classes) --- */
  .mobile-nav {
    padding: 3px 6px !important;
    padding-bottom: calc(3px + env(safe-area-inset-bottom, 0px)) !important;
  }
  .mobile-nav-btn {
    padding: 3px 6px !important;
    min-width: 44px !important;
    gap: 1px !important;
    min-height: unset !important;
  }
  .mobile-nav-icon { font-size: 19px !important; }
  .mobile-nav-label { font-size: 10px !important; }

  /* --- Bottom Navigation (new inline-styled mobile-bottom-nav) --- */
  .mobile-bottom-nav {
    padding: 4px 16px !important;
    padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 10px) !important;
  }
  .mobile-bottom-nav > button {
    padding: 3px 0 !important;
    min-height: unset !important;
    min-width: unset !important;
    font-size: 10px !important;
    gap: 1px !important;
  }
  .mobile-bottom-nav > button > svg {
    width: 20px !important;
    height: 20px !important;
  }

  /* --- Container --- */
  .container {
    padding: 6px !important;
  }

  /* --- Toolbar --- */
  .toolbar {
    padding: 6px 10px !important;
    gap: 6px !important;
  }

  /* --- Tabs --- */
  .tabs {
    padding: 3px !important;
    gap: 1px !important;
  }
  .tab {
    padding: 7px 10px !important;
    font-size: 12px !important;
  }

  /* --- Cards --- */
  .card {
    margin: 6px 0 !important;
    border-radius: 8px !important;
  }
  .card:first-child .content > div:first-child {
    padding: 8px 12px !important;
    padding-bottom: 8px !important;
  }
  .card:first-child .content > div:first-child > div:last-child {
    gap: 4px !important;
    margin-top: 6px !important;
  }

  /* --- Stat pills (inside top card) --- */
  .pill {
    padding: 4px 8px !important;
    font-size: 11px !important;
    gap: 4px !important;
  }
  .card:first-child .pill {
    padding: 4px 8px !important;
    font-size: 10px !important;
  }

  /* --- Chips (role badges) --- */
  .chip {
    padding: 2px 6px !important;
    font-size: 10px !important;
  }

  /* --- Page headers --- */
  .page-header {
    margin-bottom: 8px !important;
    gap: 8px !important;
  }
  .page-header-actions > button {
    min-height: 36px !important;
    font-size: 12px !important;
    padding: 6px 10px !important;
  }

  /* --- Settings sections --- */
  .settings-section {
    padding: 12px !important;
    margin-bottom: 10px !important;
  }
  .settings-section-title {
    font-size: 15px !important;
    margin-bottom: 10px !important;
    padding-bottom: 8px !important;
  }
  .settings-row {
    padding: 8px 0 !important;
  }

  /* --- Inputs / textareas --- */
  input[type="text"],
  input[type="email"],
  input[type="password"],
  input[type="number"],
  input[type="tel"],
  input[type="date"],
  textarea,
  select {
    padding: 8px 10px !important;
    font-size: 14px !important;
  }

  /* --- Message cards / announcements --- */
  .message-card {
    padding: 10px !important;
    margin-bottom: 6px !important;
  }

  /* --- Message bubbles --- */
  .msg-row .message-card {
    padding: 4px 8px !important;
    max-width: 82% !important;
  }

  /* --- Tables --- */
  .people-table thead th {
    padding: 6px 4px !important;
    font-size: 10px !important;
    height: 38px !important;
  }
  .people-table tbody td {
    padding: 6px 4px !important;
    font-size: 11px !important;
  }
  .people-table tbody td:first-child {
    padding-left: 6px !important;
  }

  /* --- User cards --- */
  .user-card {
    padding: 14px !important;
    margin-bottom: 10px !important;
  }
  .user-card-header {
    margin-bottom: 12px !important;
    padding-bottom: 10px !important;
  }
  .user-avatar {
    width: 40px !important;
    height: 40px !important;
    font-size: 16px !important;
  }
  .user-name {
    font-size: 15px !important;
  }
  .user-card-body {
    gap: 10px !important;
    margin-bottom: 10px !important;
  }
  .user-field-label {
    font-size: 11px !important;
  }

  /* --- Finance/forecast tables --- */
  .finance-table thead th,
  .forecast-table thead th {
    padding: 8px 10px !important;
    font-size: 12px !important;
  }
  .finance-table tbody td,
  .forecast-table tbody td {
    padding: 8px 10px !important;
    font-size: 13px !important;
  }

  /* --- Login page --- */
  .login-box {
    padding: 20px 18px !important;
  }
  .login-box svg[aria-label="RotaKeep"] { max-width: 160px; height: auto; }
  .login-title { font-size: 20px !important; margin-bottom: 4px !important; }
  .login-subtitle { font-size: 12px !important; margin-bottom: 16px !important; }
  .login-form-group { margin-bottom: 12px !important; }
  .login-label { font-size: 11px !important; margin-bottom: 4px !important; }
  .login-input { padding: 10px 12px !important; font-size: 14px !important; }
  .login-submit { padding: 11px !important; font-size: 14px !important; }
  .login-forgot-link { margin-top: 8px !important; padding: 6px !important; font-size: 13px !important; }
  .login-version { margin-top: 12px !important; padding-top: 10px !important; font-size: 12px !important; }
  .login-error { padding: 10px !important; margin-bottom: 12px !important; font-size: 13px !important; }

  /* --- Modal dialogs --- */
  .modal-dialog {
    padding: 18px !important;
  }
  .modal-title {
    font-size: 18px !important;
    margin-bottom: 16px !important;
  }
  .modal-option-btn {
    padding: 12px !important;
  }
  .modal-option-icon {
    font-size: 24px !important;
    margin-right: 10px !important;
  }
  .modal-option-title {
    font-size: 14px !important;
    margin-bottom: 4px !important;
  }
  .modal-option-desc {
    font-size: 13px !important;
  }

  /* --- Shift time badges --- */
  .shift-time {
    padding: 2px 6px !important;
    font-size: 11px !important;
  }

  /* --- Status badges --- */
  .status-badge {
    padding: 2px 6px !important;
    font-size: 9px !important;
  }

  /* --- Toggle switch --- */
  .toggle-switch {
    width: 44px !important;
    height: 24px !important;
  }
  .toggle-switch::after {
    width: 18px !important;
    height: 18px !important;
  }
  .toggle-switch.active::after {
    left: 23px !important;
  }

  /* --- Empty states --- */
  .empty-state {
    padding: 40px 24px !important;
  }
  .empty-state-icon { font-size: 56px !important; }
  .empty-state-title { font-size: 18px !important; }
  .empty-state-desc { font-size: 14px !important; }

  /* --- Toast notifications --- */
  .toast {
    padding: 10px 16px !important;
    font-size: 13px !important;
    top: calc(env(safe-area-inset-top, 0px) + 56px) !important;
    right: 12px !important;
    left: 12px !important;
    text-align: center;
  }

  /* --- Week controls (hidden on mobile but just in case) --- */
  .week-stat-label { font-size: 9px !important; }
  .week-stat-value { font-size: 12px !important; }

  /* --- Time attendance view --- */
  .time-attendance-view {
    padding: 0.5rem !important;
  }
}

/* ============================================================================
   ORG DASHBOARD — PWA & MOBILE RESPONSIVE
   ============================================================================ */

/* Safe area insets for standalone PWA (iOS notch / Dynamic Island) */
.org-header {
  padding-top: env(safe-area-inset-top, 0px);
}
.org-main {
  padding-bottom: env(safe-area-inset-bottom, 0px);
}

/* Mobile responsive header */
@media (max-width: 768px) {
  .org-header {
    flex-wrap: wrap !important;
    padding: 12px 16px !important;
    padding-top: calc(12px + env(safe-area-inset-top, 0px)) !important;
    gap: 8px !important;
  }
  .org-header-left {
    flex: 1 1 auto !important;
    min-width: 0 !important;
  }
  .org-header-left .org-icon {
    width: 36px !important;
    height: 36px !important;
    font-size: 14px !important;
  }
  .org-header-left .org-title {
    font-size: 18px !important;
  }
  .org-header-left .org-subtitle {
    font-size: 12px !important;
  }
  .org-header-right {
    flex: 1 1 100% !important;
    overflow-x: auto !important;
    -webkit-overflow-scrolling: touch !important;
    gap: 6px !important;
    padding-bottom: 4px !important;
    scrollbar-width: none !important;
  }
  .org-header-right::-webkit-scrollbar { display: none; }
  .org-header-right .org-email {
    display: none !important;
  }
  .org-header-right a,
  .org-header-right button {
    padding: 6px 10px !important;
    font-size: 12px !important;
    white-space: nowrap !important;
    flex-shrink: 0 !important;
    margin-right: 0 !important;
  }

  /* Reduce main content padding */
  .org-main {
    padding: 16px !important;
  }

  /* Stats grid: 2 columns on mobile */
  .org-stats-grid {
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 8px !important;
    margin-bottom: 16px !important;
  }
  .org-stat-card {
    padding: 14px !important;
  }

  /* Sites grid: single column on narrow screens */
  .org-sites-grid {
    grid-template-columns: 1fr !important;
    gap: 12px !important;
  }
}

/* OrgRotasList — card-based layout on mobile */
@media (max-width: 640px) {
  .org-rotas-table {
    border: none !important;
    background: transparent !important;
    border-radius: 0 !important;
  }
  .org-rotas-table thead {
    display: none !important;
  }
  .org-rotas-table tbody {
    display: flex !important;
    flex-direction: column !important;
    gap: 12px !important;
  }
  .org-rotas-table tr {
    display: block !important;
    background: white !important;
    border: 1px solid #e5e7eb !important;
    border-radius: 10px !important;
    padding: 14px !important;
    border-bottom: 1px solid #e5e7eb !important;
  }
  .org-rotas-table td {
    display: flex !important;
    justify-content: space-between !important;
    align-items: center !important;
    padding: 3px 0 !important;
    font-size: 14px !important;
    border-bottom: none !important;
  }
  .org-rotas-table td::before {
    content: attr(data-label);
    font-weight: 600;
    color: #6b7280;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    flex-shrink: 0;
    margin-right: 12px;
  }
  .org-rotas-table td[data-label="Actions"] {
    margin-top: 8px;
    padding-top: 10px;
    border-top: 1px solid #f3f4f6;
  }
  .org-rotas-table td[data-label="Actions"]::before {
    display: none;
  }
  .org-rotas-table td[data-label="Actions"] a {
    width: 100% !important;
    text-align: center !important;
    justify-content: center !important;
    padding: 10px 16px !important;
    min-height: 44px !important;
    font-size: 14px !important;
    font-weight: 600 !important;
    background: #1e40af !important;
    color: white !important;
    border-color: #1e40af !important;
    border-radius: 8px !important;
  }

  /* Site card stats: keep compact */
  .site-card .site-card-stats {
    grid-template-columns: repeat(3, 1fr) !important;
    gap: 8px !important;
    padding: 12px 14px !important;
  }
}
