/* EWGS Admin App — styles.css  v1.0.0
   Aesthetic: Clean slate with indigo authority. Functional clarity.
   Online-first management dashboard.  */

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}

:root {
  --bg:         #f8fafc;
  --bg-card:    #ffffff;
  --bg-hover:   #f1f5f9;
  --bg-input:   #f8fafc;
  --border:     #e2e8f0;
  --border-hi:  #cbd5e1;

  --text:       #1e293b;
  --text-sub:   #64748b;
  --text-dim:   #94a3b8;

  --indigo:     #6366f1;
  --indigo-hi:  #818cf8;
  --indigo-bg:  rgba(99,102,241,0.08);

  --green:      #10b981;
  --green-bg:   rgba(16,185,129,0.10);
  --amber:      #f59e0b;
  --amber-bg:   rgba(245,158,11,0.10);
  --red:        #ef4444;
  --red-bg:     rgba(239,68,68,0.10);
  --blue:       #3b82f6;
  --blue-bg:    rgba(59,130,246,0.10);
  --purple:     #a855f7;
  --purple-bg:  rgba(168,85,247,0.10);

  --mono: 'JetBrains Mono','Fira Code','Cascadia Code','SF Mono',Consolas,monospace;
  --ui:   -apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif;
  --r: 6px; --r-lg: 10px;
  --shadow: 0 2px 10px rgba(0,0,0,0.08);
}

html,body{height:100%;background:var(--bg);color:var(--text);font-family:var(--ui);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}
#app{min-height:100vh}

/* ─── Login ──────────────────────────────────────── */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(ellipse 50% 60% at 50% -10%, rgba(99,102,241,0.12) 0%, transparent 60%), var(--bg)}
.login-card{width:360px;background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-lg);padding:32px;box-shadow:var(--shadow)}
.brand{display:flex;align-items:center;gap:12px;margin-bottom:28px}
.brand-icon{font-size:26px;color:var(--indigo)}
.brand-icon.sm{font-size:18px}
.brand-name{font-size:16px;font-weight:700;letter-spacing:0.04em}
.brand-ver{font-size:10px;color:var(--text-sub);font-family:var(--mono);margin-top:2px}

/* ─── Dept select ────────────────────────────────── */
.dept-list{display:flex;flex-direction:column;gap:8px}
.dept-item{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;background:var(--bg-hover);border:1px solid var(--border);border-radius:var(--r);cursor:pointer;font:inherit;color:var(--text);transition:all .15s}
.dept-item:hover{border-color:var(--indigo);background:var(--indigo-bg)}
.dept-name{font-weight:500;font-size:14px}
.dept-arrow{color:var(--text-sub)}

/* ─── Shell ──────────────────────────────────────── */
.shell{display:flex;min-height:100vh}
.sidebar{width:210px;flex-shrink:0;background:var(--bg-card);border-right:1px solid var(--border);display:flex;flex-direction:column;position:fixed;top:0;left:0;bottom:0}
.sidebar-brand{display:flex;align-items:center;gap:10px;padding:18px 16px;border-bottom:1px solid var(--border)}
nav{flex:1;padding:10px 8px;display:flex;flex-direction:column;gap:2px}
.nav-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;background:none;border:none;border-radius:var(--r);color:var(--text-sub);cursor:pointer;font:inherit;font-size:13px;text-align:left;transition:all .15s;position:relative}
.nav-item:hover{background:var(--bg-hover);color:var(--text)}
.nav-item.active{background:var(--indigo-bg);color:var(--indigo-hi);border:1px solid rgba(99,102,241,0.2)}
.nav-icon{font-size:14px;flex-shrink:0}
.nav-badge{margin-left:auto;background:var(--red);color:#fff;font-size:10px;font-family:var(--mono);font-weight:700;padding:1px 6px;border-radius:20px}
.sidebar-footer{padding:10px 8px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:4px}
.btn-footer{width:100%;padding:8px 12px;background:none;border:1px solid var(--border);border-radius:var(--r);color:var(--text-sub);cursor:pointer;font:inherit;font-size:12px;display:flex;align-items:center;gap:6px;transition:all .15s}
.btn-footer:hover{border-color:var(--indigo);color:var(--indigo)}
.btn-footer-danger:hover{border-color:var(--red);color:var(--red)}
.main{margin-left:210px;flex:1;min-height:100vh}
.main-inner{max-width:1060px;margin:0 auto;padding:28px 24px}

/* ─── Forms ─────────────────────────────────────── */
.field{margin-bottom:14px}
label{display:block;font-size:11px;font-weight:500;color:var(--text-sub);letter-spacing:.04em;text-transform:uppercase;margin-bottom:5px}
input[type="text"],input[type="email"],input[type="password"],input[type="number"],select{width:100%;padding:8px 11px;background:var(--bg-input);border:1px solid var(--border);border-radius:var(--r);color:var(--text);font:inherit;font-size:14px;outline:none;transition:border-color .15s}
input:focus,select:focus{border-color:var(--indigo);box-shadow:0 0 0 2px rgba(99,102,241,0.1)}
select{cursor:pointer}

/* ─── Buttons ────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:var(--r);border:1px solid transparent;cursor:pointer;font:inherit;font-size:13px;font-weight:500;transition:all .15s;white-space:nowrap;text-decoration:none}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-primary{background:var(--indigo);border-color:var(--indigo);color:#fff}
.btn-primary:hover:not(:disabled){background:var(--indigo-hi);border-color:var(--indigo-hi)}
.btn-ghost{background:none;border-color:var(--border-hi);color:var(--text-sub)}
.btn-ghost:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}
.btn-danger{background:var(--red-bg);border-color:var(--red);color:var(--red)}
.btn-danger:hover:not(:disabled){background:rgba(239,68,68,.2)}
.btn-ok{background:var(--green-bg);border-color:var(--green);color:var(--green)}
.btn-ok:hover:not(:disabled){background:rgba(16,185,129,.2)}
.btn-sm{padding:5px 10px;font-size:12px}
.btn-full{width:100%;justify-content:center}
.btn-action{padding:3px 9px;background:none;border:1px solid var(--border-hi);border-radius:var(--r);color:var(--text-sub);cursor:pointer;font:inherit;font-size:11px;transition:all .15s}
.btn-action:hover{border-color:var(--indigo);color:var(--indigo)}
.btn-action.btn-ok{border-color:rgba(16,185,129,.4);color:var(--green)}
.btn-action.btn-ok:hover{border-color:var(--green);background:var(--green-bg)}
.btn-action.btn-danger{border-color:rgba(239,68,68,.4);color:var(--red)}
.btn-action.btn-danger:hover{border-color:var(--red);background:var(--red-bg)}

/* ─── Page layout ────────────────────────────────── */
.page-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}
h1{font-size:18px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:10px}
h2{font-size:14px;font-weight:600;color:var(--text)}
.section-hdr{display:flex;align-items:center;justify-content:space-between;margin:24px 0 12px}
.count{font-size:12px;background:var(--bg-hover);border:1px solid var(--border);border-radius:20px;padding:1px 8px;color:var(--text-sub);font-family:var(--mono);font-weight:400}
.hstack{display:flex;align-items:center}
.gap-sm{gap:8px}

/* ─── Stat cards ─────────────────────────────────── */
.stat-row{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:12px;margin-bottom:20px}
.stat-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-lg);padding:14px 16px;display:flex;align-items:center;gap:12px}
.stat-card.ok{border-color:rgba(16,185,129,.25)}
.stat-card.warn{border-color:rgba(245,158,11,.25)}
.stat-card.danger{border-color:rgba(239,68,68,.25)}
.stat-icon{font-size:20px;color:var(--indigo);flex-shrink:0}
.stat-val{font-family:var(--mono);font-size:22px;font-weight:700;line-height:1}
.stat-label{font-size:11px;color:var(--text-sub);margin-top:2px}

/* ─── Presence bar ───────────────────────────────── */
.presence-bar{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px 20px;margin-bottom:20px}
.pb-label{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-sub);margin-bottom:10px}
.pb-track{height:8px;background:var(--bg-hover);border-radius:4px;overflow:hidden;display:flex;margin-bottom:8px}
.pb-seg{height:100%;transition:width .3s}
.pb-checkedin{background:var(--green)}
.pb-absent{background:var(--red)}
.pb-legend{font-size:12px;color:var(--text-sub);display:flex;gap:16px;flex-wrap:wrap}
.pb-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px}
.dot-in{background:var(--green)}
.dot-ab{background:var(--red)}
.dot-ex{background:var(--text-dim)}

/* ─── Cycle cards ────────────────────────────────── */
.cycle-card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-lg);padding:14px 18px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:10px}
.cycle-name{font-weight:600;font-size:14px}
.cycle-period{font-family:var(--mono);font-size:12px;color:var(--text-sub);margin-top:2px}
.cycle-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

/* ─── Template grid ──────────────────────────────── */
.tmpl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin-bottom:20px}
.tmpl-card{background:var(--bg-card);border:1px solid var(--border);border-left-width:3px;border-radius:var(--r);padding:12px 14px}
.tmpl-name{font-weight:600;font-size:13px}
.tmpl-time{font-family:var(--mono);font-size:12px;color:var(--text-sub);margin-top:4px}
.tmpl-dur{font-size:11px;color:var(--text-dim);margin-top:2px;text-transform:capitalize}

/* ─── Allocation ─────────────────────────────────── */
.alloc-controls{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px 20px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px;margin-bottom:16px}
.ctrl-label{font-weight:500;font-size:14px;display:flex;align-items:center;gap:8px}
.ctrl-sub{font-family:var(--mono);font-size:12px;color:var(--text-sub);margin-top:2px}
.alloc-result{border-radius:var(--r-lg);padding:16px 20px;margin-bottom:20px}
.result-ok{background:var(--green-bg);border:1px solid rgba(16,185,129,.3)}
.result-warn{background:var(--amber-bg);border:1px solid rgba(245,158,11,.3)}
.result-hdr{font-weight:600;font-size:14px;margin-bottom:8px}
.result-ok .result-hdr{color:var(--green)}
.result-warn .result-hdr{color:var(--amber)}
.result-stats{display:flex;gap:16px;font-family:var(--mono);font-size:12px;color:var(--text-sub);margin-bottom:10px}
.result-slots{margin-top:10px;border-top:1px solid var(--border);padding-top:10px}
.result-slots-hdr{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-sub);margin-bottom:8px}
.result-slot{display:grid;grid-template-columns:100px 1fr auto;gap:12px;font-size:12px;padding:4px 0;color:var(--text)}
.result-slot .text-dim{color:var(--text-sub)}

/* ─── Presence ───────────────────────────────────── */
.presence-date{font-family:var(--mono);font-size:12px;color:var(--text-sub);margin-bottom:16px}

/* ─── Tables ─────────────────────────────────────── */
.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r-lg)}
.data-table{width:100%;border-collapse:collapse;font-size:13px}
.data-table th{background:var(--bg-card);padding:9px 13px;text-align:left;font-size:11px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-sub);border-bottom:1px solid var(--border);white-space:nowrap}
.data-table td{padding:9px 13px;border-bottom:1px solid var(--border);color:var(--text);vertical-align:middle}
.data-table tbody tr:last-child td{border-bottom:none}
.data-table tbody tr:hover td{background:var(--bg-hover)}
.td-primary{font-weight:500}
.td-actions{display:flex;gap:6px;flex-wrap:nowrap}
.mono{font-family:var(--mono)}
.text-sm{font-size:12px}
.text-danger{color:var(--red)}

/* ─── Badges ─────────────────────────────────────── */
.badge{display:inline-block;padding:2px 8px;border-radius:20px;font-size:10px;font-weight:600;font-family:var(--mono);letter-spacing:.04em}
.badge-green{background:var(--green-bg);color:var(--green);border:1px solid rgba(16,185,129,.3)}
.badge-red{background:var(--red-bg);color:var(--red);border:1px solid rgba(239,68,68,.3)}
.badge-amber{background:var(--amber-bg);color:var(--amber);border:1px solid rgba(245,158,11,.3)}
.badge-blue{background:var(--blue-bg);color:var(--blue);border:1px solid rgba(59,130,246,.3)}
.badge-purple{background:var(--purple-bg);color:var(--purple);border:1px solid rgba(168,85,247,.3)}
.badge-gray{background:var(--bg-hover);color:var(--text-sub);border:1px solid var(--border)}

/* ─── Alerts/toasts ──────────────────────────────── */
.alert{padding:10px 14px;border-radius:var(--r);font-size:13px;margin-bottom:14px}
.alert-error{background:var(--red-bg);border:1px solid rgba(239,68,68,.3);color:var(--red)}
.toast{position:fixed;top:16px;right:16px;z-index:9999;padding:11px 18px;border-radius:var(--r-lg);font-size:13px;font-weight:500;box-shadow:var(--shadow);animation:slideIn .2s ease;max-width:340px}
.toast-success{background:var(--green-bg);border:1px solid var(--green);color:var(--green)}
.toast-error{background:var(--red-bg);border:1px solid var(--red);color:var(--red)}
.toast-warn{background:var(--amber-bg);border:1px solid var(--amber);color:var(--amber)}
.toast-info{background:var(--blue-bg);border:1px solid var(--blue);color:var(--blue)}
@keyframes slideIn{from{transform:translateX(16px);opacity:0}to{transform:translateX(0);opacity:1}}

/* ─── Modal ─────────────────────────────────────── */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.65);backdrop-filter:blur(2px);z-index:1000;display:flex;align-items:center;justify-content:center;padding:20px}
.modal-box{background:var(--bg-card);border:1px solid var(--border-hi);border-radius:var(--r-lg);padding:24px;width:100%;max-width:480px;box-shadow:var(--shadow);animation:fadeUp .18s ease}
@keyframes fadeUp{from{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}

/* ─── Misc ───────────────────────────────────────── */
.placeholder{padding:36px;text-align:center;color:var(--text-dim);font-size:13px;border:1px dashed var(--border);border-radius:var(--r-lg)}
.loading-bar{height:2px;background:linear-gradient(90deg,transparent,var(--indigo),transparent);margin-bottom:16px;animation:shimmer 1.2s infinite;background-size:200%}
@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
.spinner{display:inline-block;width:12px;height:12px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

@media(max-width:680px){
  .sidebar{display:none}
  .main{margin-left:0}
  .main-inner{padding:16px}
  .login-card{width:100%;margin:16px}
}

/* ─── Logo images ─────────────────────────────────── */
.brand-logo {
  width: 34px; height: 34px;
  border-radius: 6px;
  object-fit: contain;
  flex-shrink: 0;
}
.brand-logo-sm {
  width: 22px; height: 22px;
  border-radius: 4px;
  object-fit: contain;
  flex-shrink: 0;
}

/* ── Expiry banners v1.0.2 ─────────────────────────────────────────────────── */
.expiry-banner { padding: 0.65rem 1rem; border-radius: 0.375rem; margin-bottom: 1rem; font-size: 0.875rem; font-weight: 500; }
.banner-notice   { background: #eff6ff; border: 1px solid #93c5fd; color: #1e40af; }
.banner-warning  { background: #fefce8; border: 1px solid #fbbf24; color: #92400e; }
.banner-danger   { background: #fef2f2; border: 1px solid #f87171; color: #991b1b; }
.banner-critical { background: #7f1d1d; border: 1px solid #ef4444; color: #fff; font-weight: 700; animation: pulse-warn 1.5s infinite; }
@keyframes pulse-warn { 0%,100% { opacity:1; } 50% { opacity:.8; } }

/* ── Activation flow v1.0.4 ────────────────────────────────────────────────── */
.tab-bar { display: flex; gap: 0; margin-bottom: 1.25rem; border-bottom: 2px solid #e2e8f0; }
.tab-btn { flex: 1; padding: 0.6rem 0.5rem; background: none; border: none; border-bottom: 3px solid transparent; margin-bottom: -2px; font-size: 0.85rem; font-weight: 500; color: #64748b; cursor: pointer; transition: all 0.15s; }
.tab-btn.active { color: #6366f1; border-bottom-color: #6366f1; font-weight: 700; }
.tab-btn:hover:not(.active) { color: #334155; }
.activate-hint { font-size: 0.85rem; color: #64748b; margin-bottom: 1rem; line-height: 1.5; }
.req { color: #ef4444; margin-left: 2px; }
