:root{
  --bg:#0F1729; --bg-elevated:#131D33; --surface:#182238; --surface-hi:#1E2A46;
  --border:#2A3752; --text:#EDF1F7; --muted:#8B9AB8; --accent:#F2A93B; --accent-dim:#C98A2A;
  --danger:#E5484D; --success:#34D399; --info:#5B8DEF;
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  background:radial-gradient(circle at 15% 0%, #16213D 0%, var(--bg) 45%);
  color:var(--text); font-family:'Inter',Arial,sans-serif; min-height:100vh;
}
h1,h2,h3,.brand{font-family:'Space Grotesk',Arial,sans-serif;}
a{color:inherit;text-decoration:none;}
button{font-family:inherit; cursor:pointer;}

.btn{border:1px solid var(--border); background:var(--surface-hi); color:var(--text);
  padding:9px 16px; border-radius:8px; font-size:14px; font-weight:600; transition:.15s; display:inline-block;}
.btn:hover{border-color:var(--accent); background:#243254;}
.btn-primary{background:var(--accent); border-color:var(--accent); color:#1A1204;}
.btn-primary:hover{background:#FFC266; border-color:#FFC266;}
.btn-danger{background:transparent;border-color:var(--danger);color:var(--danger);}
.btn-danger:hover{background:var(--danger);color:#fff;}
.btn-ghost{background:transparent;border-color:transparent;color:var(--muted);}
.btn-ghost:hover{color:var(--text);background:var(--surface-hi);}
.btn-sm{padding:6px 10px;font-size:12.5px;border-radius:6px;}
.btn:disabled{opacity:.4;cursor:not-allowed;}
.btn-block{width:100%;text-align:center;}

input,select,textarea{
  background:var(--bg-elevated); border:1px solid var(--border); color:var(--text);
  padding:9px 11px; border-radius:7px; font-size:14px; font-family:inherit; width:100%;
}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);}
label{font-size:12.5px; color:var(--muted); display:block; margin-bottom:5px; font-weight:600;}

.card{background:var(--surface); border:1px solid var(--border); border-radius:12px; padding:20px;}
.field{margin-bottom:14px;}

/* ---- Public wrapper ---- */
.public-wrap{min-height:100vh; display:flex; align-items:center; justify-content:center; padding:24px;}
.public-card{width:100%; max-width:420px;}
.logo-row{display:flex; align-items:center; gap:10px; margin-bottom:24px; justify-content:center;}
.logo-row .brand{font-size:22px; font-weight:700; letter-spacing:-.02em;}
.public-card .card{padding:26px;}
.public-card h2{margin:0 0 4px; font-size:19px;}
.public-card p.sub{color:var(--muted); font-size:13.5px; margin:0 0 20px;}
.divider{display:flex; align-items:center; gap:10px; color:var(--muted); font-size:12px; margin:20px 0;}
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--border);}
.status-msg{padding:12px 14px; border-radius:8px; font-size:13.5px; margin-bottom:14px;}
.status-msg.err{background:rgba(229,72,77,.12); color:#FF9EA1; border:1px solid rgba(229,72,77,.3);}
.status-msg.ok{background:rgba(52,211,153,.12); color:#8FF2CD; border:1px solid rgba(52,211,153,.3);}
.status-msg.warn{background:rgba(242,169,59,.12); color:#FFD08A; border:1px solid rgba(242,169,59,.3);}
.hint{color:var(--muted); font-size:12.5px; line-height:1.5;}

/* ---- Admin shell ---- */
.shell{display:flex; min-height:100vh;}
.sidebar{width:225px; background:var(--bg-elevated); border-right:1px solid var(--border);
  padding:20px 14px; display:flex; flex-direction:column; flex-shrink:0;}
.sidebar .logo-row{justify-content:flex-start; margin:6px 8px 26px;}
.nav-item{display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:8px;
  color:var(--muted); font-size:14px; font-weight:600; margin-bottom:2px; border:none; background:none;
  width:100%; text-align:left;}
.nav-item:hover{background:var(--surface-hi); color:var(--text);}
.nav-item.active{background:var(--surface-hi); color:var(--accent);}
.nav-spacer{flex:1;}
.main{flex:1; padding:28px 34px; max-width:1180px;}
.page-title{font-size:23px; margin:0 0 4px;}
.page-sub{color:var(--muted); font-size:14px; margin:0 0 24px;}

table{width:100%; border-collapse:collapse; font-size:13.5px;}
th{text-align:left; color:var(--muted); font-weight:600; font-size:12px; text-transform:uppercase;
  letter-spacing:.03em; padding:10px 12px; border-bottom:1px solid var(--border);}
td{padding:10px 12px; border-bottom:1px solid var(--border); vertical-align:middle;}
tr:last-child td{border-bottom:none;}
.table-wrap{overflow-x:auto; border:1px solid var(--border); border-radius:10px;}
.table-wrap table{min-width:640px;}
.date-group-start td{border-top:2px solid var(--accent, #F2A93B);}

.badge{display:inline-block; padding:3px 9px; border-radius:99px; font-size:11.5px; font-weight:700;}
.badge-hadir{background:rgba(52,211,153,.15); color:var(--success);}
.badge-telat{background:rgba(242,169,59,.15); color:var(--accent);}
.badge-tidak{background:rgba(229,72,77,.15); color:#FF8B8F;}
.badge-belum{background:rgba(139,154,184,.15); color:var(--muted);}

.stat-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); gap:14px; margin-bottom:26px;}
.stat-card{background:var(--surface); border:1px solid var(--border); border-radius:12px; padding:16px 18px;}
.stat-card .n{font-family:'Space Grotesk',Arial,sans-serif; font-size:26px; font-weight:700;}
.stat-card .l{color:var(--muted); font-size:12.5px; margin-top:2px;}

.pattern-grid-scroll{overflow-x:auto; margin-top:16px; -webkit-overflow-scrolling:touch;}
.pattern-grid{display:grid; grid-template-columns:repeat(7,minmax(112px,1fr)); gap:8px; min-width:820px;}
.pattern-col-head{font-size:11.5px; font-weight:700; color:var(--accent); text-align:center; padding-bottom:4px;}
.pattern-cell select{font-size:12.5px; padding:7px 6px;}
.pattern-row-label{grid-column:1/-1; color:var(--muted); font-size:11px; margin:6px 0 0;}

.toolbar{display:flex; gap:10px; align-items:flex-end; flex-wrap:wrap; margin-bottom:18px;}
.toolbar .field{margin-bottom:0; min-width:150px;}
.section-gap{margin-top:30px;}
.flex-between{display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap;}
.duty-tonight{display:flex; align-items:center; gap:16px; padding:18px 20px; border-radius:12px;
  background:linear-gradient(135deg,#22304F,#182238); border:1px solid var(--border); margin-bottom:26px;}
.duty-tonight .name{font-family:'Space Grotesk',Arial,sans-serif; font-size:19px; font-weight:700;}
.duty-tonight .meta{color:var(--muted); font-size:13px; margin-top:2px;}
.empty{color:var(--muted); font-size:13.5px; padding:30px; text-align:center;}
.row-actions{display:flex; gap:6px; flex-wrap:wrap;}

/* ================= MOBILE: TOP BAR + DRAWER NAV ================= */
.topbar{display:none;}
.mobile-only{display:none;}
.drawer-backdrop{display:none;}

@media(max-width:760px){
  .shell{flex-direction:column;}

  .desktop-only{display:none !important;}
  .mobile-only{display:block;}

  .topbar{display:flex; align-items:center; gap:12px; padding:12px 16px;
    background:var(--bg-elevated); border-bottom:1px solid var(--border);
    position:sticky; top:0; z-index:40;}
  .topbar .logo-row{margin:0; flex:1;}
  .topbar .brand{font-size:16px;}
  .hamburger{width:38px; height:38px; border-radius:9px; border:1px solid var(--border);
    background:var(--surface-hi); color:var(--text); font-size:18px; display:flex;
    align-items:center; justify-content:center; flex-shrink:0; padding:0;}

  .drawer-backdrop{position:fixed; inset:0; background:rgba(6,10,20,.6); z-index:49;}
  .drawer-backdrop.hidden{display:none;}

  .sidebar{position:fixed; top:0; left:0; bottom:0; z-index:50; width:78vw; max-width:280px;
    transform:translateX(-100%); transition:transform .22s ease; flex-direction:column;
    overflow-y:auto; padding:16px 12px; box-shadow:2px 0 24px rgba(0,0,0,.4);}
  .sidebar.drawer-open{transform:translateX(0);}
  .sidebar .logo-row{display:flex; justify-content:flex-start; margin:6px 8px 22px;}
  .nav-item{width:100%; font-size:15px; padding:12px 14px;}

  .main{padding:16px 14px 40px;}
  .page-title{font-size:20px;}

  /* Tap targets sedikit lebih besar di layar sentuh */
  .btn{padding:10px 16px; font-size:14.5px;}
  .btn-sm{padding:8px 12px; font-size:13px;}
  input,select,textarea{padding:11px 12px; font-size:15px;} /* >=15px cegah auto-zoom Safari iOS */

  .toolbar{gap:8px;}
  .toolbar .btn, .toolbar form{width:100%;}
  .toolbar .btn{text-align:center;}
  .flex-between{flex-direction:column; align-items:stretch;}
  .flex-between form{width:100%;}
  .duty-tonight{flex-wrap:wrap;}
  .duty-tonight .btn{width:100%; text-align:center; margin-top:4px;}
}

/* ---- Tabel -> daftar kartu di layar sempit (dipakai lewat class "responsive-cards" pada .table-wrap) ---- */
@media(max-width:760px){
  .table-wrap.responsive-cards{border:none; overflow-x:auto; border-radius:0;}
  .table-wrap.responsive-cards table{min-width:0; width:100%;}
  .table-wrap.responsive-cards thead{position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0,0,0,0);}
  .table-wrap.responsive-cards tr{display:block; margin-bottom:12px; border:1px solid var(--border);
    border-radius:12px; background:var(--surface); padding:4px 0; overflow:hidden;}
  .table-wrap.responsive-cards td{display:flex; align-items:center; gap:10px;
    padding:10px 14px; border-bottom:1px solid rgba(255,255,255,.06);}
  .table-wrap.responsive-cards td:last-child{border-bottom:none;}
  .table-wrap.responsive-cards td::before{content:attr(data-label); flex:0 0 40%;
    font-size:11px; text-transform:uppercase; letter-spacing:.03em; color:var(--muted); font-weight:700;}
  .table-wrap.responsive-cards td:not(:has(*))::before{flex:none;}
  .table-wrap.responsive-cards td > *{min-width:0;}
  .table-wrap.responsive-cards .row-actions{flex-direction:column; align-items:stretch; width:100%;}
  .table-wrap.responsive-cards .row-actions .btn{width:100%; text-align:center;}
}

/* ---- Jadwal & Absensi: kartu per-tanggal khusus mobile (menggantikan tabel rowspan) ---- */
.schedule-card{border:1px solid var(--border); border-radius:12px; background:var(--surface);
  margin-bottom:14px; overflow:hidden;}
.schedule-card .sc-head{background:var(--surface-hi); padding:10px 14px; display:flex;
  align-items:baseline; gap:8px; flex-wrap:wrap;}
.schedule-card .sc-head .sc-date{font-weight:700; font-family:'Space Grotesk',Arial,sans-serif; font-size:15px;}
.schedule-card .sc-head .sc-day{color:var(--muted); font-size:12.5px;}
.schedule-card .sc-member{padding:12px 14px; border-top:1px solid var(--border);}
.schedule-card .sc-member .sc-name-row{display:flex; align-items:center; justify-content:space-between;
  gap:8px; margin-bottom:10px;}
.schedule-card .sc-member .sc-name{font-weight:700; font-size:14px;}
.schedule-card .sc-member .sc-house{color:var(--muted); font-size:12.5px;}
.schedule-card .sc-row{display:flex; align-items:center; justify-content:space-between;
  gap:10px; margin-bottom:8px; font-size:13px;}
.schedule-card .sc-row .sc-label{color:var(--muted); flex-shrink:0;}
.schedule-card .sc-row select{width:auto; min-width:150px;}
.schedule-card .sc-actions{display:flex; gap:8px; flex-wrap:wrap; margin-top:10px;}
.schedule-card .sc-actions .btn, .schedule-card .sc-actions form{flex:1; min-width:120px;}
.schedule-card .sc-actions .btn{width:100%; text-align:center;}

/* ---- Pola Dasar: daftar per-hari khusus mobile (menggantikan grid 7 kolom) ---- */
.pattern-mobile .pattern-day-card{border:1px solid var(--border); border-radius:12px;
  background:var(--surface); margin-bottom:12px; padding:14px;}
.pattern-mobile .pattern-day-card h4{margin:0 0 10px; font-size:13px; color:var(--accent);
  text-transform:uppercase; letter-spacing:.03em;}
.pattern-mobile .pattern-day-card .field{margin-bottom:10px;}
.pattern-mobile .pattern-day-card .field:last-child{margin-bottom:0;}
.pattern-mobile .pattern-day-card .field label{font-size:11.5px;}

/* ================= HALAMAN ABSEN — MENU BAR WARNA-WARNI ================= */
.absen-wrap{max-width:460px;margin:0 auto;padding:18px 14px 60px;}
.absen-head{text-align:center;margin-bottom:18px;}
.absen-head .brand{font-size:20px;font-weight:700;}
.absen-info{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px 18px;margin-bottom:18px;}
.absen-info .nm{font-family:'Space Grotesk',Arial,sans-serif;font-size:18px;font-weight:700;}
.absen-info .mt{color:var(--muted);font-size:13px;margin-top:3px;}

.menubar{border-radius:14px;margin-bottom:12px;overflow:hidden;border:1px solid var(--border);
  box-shadow:0 2px 10px rgba(0,0,0,.18); background:var(--surface); transition:border-color .15s;}
.menubar-head{display:flex;align-items:center;gap:12px;padding:15px 16px;cursor:pointer;
  color:var(--text);font-weight:700;font-size:14.5px;background:var(--surface-hi);}
.menubar-head .ico{width:32px;height:32px;border-radius:9px;background:rgba(242,169,59,.16);color:var(--accent);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;}
.menubar-head .lbl{flex:1;}
.menubar-head .selesai-badge{background:rgba(52,211,153,.15);color:var(--success);font-size:11px;
  font-weight:700;padding:3px 9px;border-radius:99px;white-space:nowrap;}
.menubar-body{background:var(--surface);padding:16px;display:none;}
.menubar.open .menubar-body{display:block;}
.menubar-head .chevron{transition:.2s;font-size:12px;opacity:.7;color:var(--muted);}
.menubar.open .chevron{transform:rotate(180deg);}
.menubar.step-done{border-color:rgba(52,211,153,.35);}

.foto-preview{width:100%;aspect-ratio:4/3;background:var(--bg-elevated);border:1px dashed var(--border);
  border-radius:10px;display:flex;align-items:center;justify-content:center;overflow:hidden;margin-bottom:12px;color:var(--muted);font-size:13px;}
.foto-preview img{width:100%;height:100%;object-fit:cover;}
.foto-actions{display:flex;gap:8px;}
.foto-actions .btn{flex:1;}
.foto-status{margin-top:10px;font-size:12.5px;}
.foto-status.ok{color:var(--success);font-weight:700;}
.foto-status.pending{color:var(--muted);}
.foto-status.err{color:#FF9EA1;}

.confirm-bar{position:sticky;bottom:0;background:var(--bg);padding:14px 0 4px;margin-top:6px;}
.success-icon{font-size:52px;line-height:1;margin-bottom:8px;}

/* ---- Modal (edit/tukar jadwal) ---- */
.modal-overlay{position:fixed;inset:0;background:rgba(6,10,20,.68);display:none;
  align-items:center;justify-content:center;z-index:100;padding:16px;}
.modal-overlay.open{display:flex;}
.modal-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;
  padding:22px;max-width:420px;width:100%;max-height:90vh;overflow:auto;
  box-shadow:0 20px 60px rgba(0,0,0,.45);}
.modal-card .sub{color:var(--muted);font-size:13px;margin:0 0 16px;}
.divider{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:12px;margin:18px 0;}
.divider::before,.divider::after{content:"";flex:1;height:1px;background:var(--border);}
textarea{min-height:110px;resize:vertical;font-family:inherit;line-height:1.5;}
.template-vars{color:var(--muted);font-size:12px;margin:-8px 0 14px;line-height:1.6;}
.template-vars code{background:var(--bg-elevated);border:1px solid var(--border);border-radius:5px;
  padding:1px 6px;color:var(--accent);}
.check-row{display:flex;align-items:center;gap:8px;margin-bottom:14px;}
.check-row input[type=checkbox]{width:auto;}
.check-row label{margin:0;}
