/* ==========================================================================
   LapInsight — Sistem Desain v2
   ---------------------------------------------------------------------------
   Prinsip:
     · Terang sebagai tampilan utama, gelap tersedia lewat tombol (data-theme).
     · Profesional & meyakinkan: netral, tipografi rapi, garis tegas, bayangan tipis.
     · Tanpa gradien menyala, tanpa efek kaca, tanpa animasi berlebihan.
     · Mobile lebih dulu: sasaran sentuh >= 44px, tabel bisa digeser mendatar.
   ========================================================================== */

/* ---------- token ---------- */
:root{
  --bg:#f6f7f9;
  --surface:#ffffff;
  --surface-2:#fafbfc;
  --surface-3:#f1f3f6;

  --ink:#12161c;
  --ink-2:#3a4250;
  --muted:#676f7b;
  --faint:#98a0ac;

  --line:#e4e7ec;
  --line-2:#d3d8e0;

  --brand:#1f6feb;
  --brand-hi:#1a5fcc;
  --brand-ink:#ffffff;
  --brand-soft:#eaf2fe;
  --brand-line:#bcd6fb;

  --ok:#137a4b;   --ok-soft:#e8f6ee;   --ok-line:#b7e2ca;
  --warn:#9a5b06; --warn-soft:#fdf3e3; --warn-line:#f0d9ae;
  --err:#c02626;  --err-soft:#fdecec;  --err-line:#f3c3c3;

  --shadow-xs:0 1px 2px rgba(16,24,40,.05);
  --shadow-sm:0 1px 2px rgba(16,24,40,.06),0 1px 3px rgba(16,24,40,.04);
  --shadow-md:0 2px 4px -2px rgba(16,24,40,.08),0 6px 16px -6px rgba(16,24,40,.14);
  --shadow-lg:0 8px 28px -8px rgba(16,24,40,.22),0 2px 8px -4px rgba(16,24,40,.10);

  --r-lg:16px; --r:12px; --r-sm:9px; --r-xs:7px;
  --max:1200px;
  --tap:44px;
  --hd:60px;

  --font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif;
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
}

/* ---------- gelap (dipilih lewat tombol) ---------- */
html[data-theme="dark"]{
  --bg:#0d1117;
  --surface:#151b23;
  --surface-2:#1a212a;
  --surface-3:#202832;

  --ink:#e8edf4;
  --ink-2:#c2cbd8;
  --muted:#8b96a5;
  --faint:#6b7684;

  --line:#252d38;
  --line-2:#333d4a;

  --brand:#4d90f0;
  --brand-hi:#6ba3f4;
  --brand-ink:#08121f;
  --brand-soft:#16273f;
  --brand-line:#2b4a78;

  --ok:#4ecb86;   --ok-soft:#122a1d;   --ok-line:#1f4a33;
  --warn:#e0a33c; --warn-soft:#2a2113; --warn-line:#4a3a1c;
  --err:#f0736f;  --err-soft:#2b1616;  --err-line:#4d2626;

  --shadow-xs:0 1px 2px rgba(0,0,0,.4);
  --shadow-sm:0 1px 2px rgba(0,0,0,.45),0 1px 3px rgba(0,0,0,.3);
  --shadow-md:0 2px 4px -2px rgba(0,0,0,.5),0 6px 16px -6px rgba(0,0,0,.55);
  --shadow-lg:0 8px 28px -8px rgba(0,0,0,.7),0 2px 8px -4px rgba(0,0,0,.5);
}

/* ---------- dasar ---------- */
*{box-sizing:border-box}
html,body{margin:0;padding:0}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{
  background:var(--bg);color:var(--ink);
  font:15.5px/1.55 var(--font);
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  transition:background .18s,color .18s;
}
h1,h2,h3,h4{margin:0;font-weight:700;line-height:1.25;letter-spacing:-.018em}
a{color:var(--brand);text-decoration:none}
a:hover{text-decoration:underline}
button,input,select,textarea{font:inherit;color:inherit}
img,svg{display:block}
.muted{color:var(--muted)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
:focus-visible{outline:2.5px solid var(--brand);outline-offset:2px;border-radius:4px}

/* ---------- kerangka ---------- */
.wrap{max-width:var(--max);margin:0 auto;padding:0 20px}
header.top{
  background:color-mix(in srgb,var(--surface) 88%,transparent);
  backdrop-filter:saturate(1.4) blur(10px);
  border-bottom:1px solid var(--line);
  position:sticky;top:0;z-index:40;
}
.top-in{
  max-width:var(--max);margin:0 auto;padding:0 20px;height:var(--hd);
  display:flex;align-items:center;gap:10px;
}
main{padding:28px 0 80px}

.brand{display:flex;align-items:center;gap:10px;font-weight:750;font-size:16.5px;letter-spacing:-.02em;
  cursor:pointer;user-select:none;flex:none;background:none;border:none;padding:4px;border-radius:var(--r-xs);
  min-height:38px}
.brand:hover{background:var(--surface-3)}
.brand .logo{width:30px;height:30px;flex:none;border-radius:9px}
.brand .txt{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15}
.brand small{font-weight:500;color:var(--muted);font-size:11px;letter-spacing:0}
.spacer{flex:1}

/* ---------- tombol ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-sm);
  min-height:var(--tap);padding:0 15px;cursor:pointer;
  font-weight:600;font-size:14.5px;white-space:nowrap;line-height:1;
  transition:background .13s,border-color .13s,color .13s,box-shadow .13s,transform .06s;
  -webkit-tap-highlight-color:transparent;
}
.btn:hover{background:var(--surface-3);border-color:var(--line-2)}
.btn:active{transform:translateY(1px)}
.btn[disabled]{opacity:.5;cursor:not-allowed;transform:none}
.btn.primary{background:var(--brand);border-color:var(--brand);color:var(--brand-ink);box-shadow:var(--shadow-xs)}
.btn.primary:hover{background:var(--brand-hi);border-color:var(--brand-hi)}
.btn.danger{color:var(--err);border-color:var(--err-line)}
.btn.danger:hover{background:var(--err-soft);border-color:var(--err)}
.btn.ghost{background:transparent;border-color:transparent}
.btn.ghost:hover{background:var(--surface-3);border-color:transparent}
.btn.sm{min-height:38px;padding:0 12px;font-size:13.5px;border-radius:var(--r-xs)}
.btn.icon{min-height:38px;width:38px;padding:0;font-size:15px}
.btn.wide{width:100%}
.btn-row{display:flex;gap:9px;flex-wrap:wrap;align-items:center}

.btn.google{background:var(--surface);color:var(--ink);border:1px solid var(--line-2);font-weight:600;gap:10px}
.btn.google:hover{background:var(--surface-3)}
html[data-theme="dark"] .btn.google{background:#fff;color:#1f2937;border-color:#c9d4e4}
html[data-theme="dark"] .btn.google:hover{background:#f2f5f9}
.btn.google svg{width:19px;height:19px;flex:none}

/* ---------- form ---------- */
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:15px}
.field>label{font-size:13px;font-weight:600;color:var(--ink-2)}
.field .hint{font-size:12.5px;color:var(--muted);line-height:1.45}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],
input[type=search],select,textarea{
  background:var(--surface);border:1px solid var(--line-2);border-radius:var(--r-sm);
  padding:0 12px;width:100%;min-height:var(--tap);
  transition:border-color .13s,box-shadow .13s,background .13s;
  -webkit-appearance:none;appearance:none;
}
input[type=date]{padding-right:8px}
select{
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%236b7480' stroke-width='1.6'%3E%3Cpath d='M4 6.5 8 10.5l4-4'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center;background-size:16px;padding-right:32px;
}
textarea{padding:10px 12px;resize:vertical;min-height:70px;line-height:1.5}
input::placeholder,textarea::placeholder{color:var(--faint)}
input:hover,select:hover,textarea:hover{border-color:var(--line-2)}
input:focus,select:focus,textarea:focus{
  outline:none;border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 16%,transparent);
}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 15px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:0 15px}
@media(max-width:640px){.grid2,.grid3{grid-template-columns:1fr}}

/* ---------- kotak pesan ---------- */
.err,.ok,.info{
  border-radius:var(--r-sm);padding:11px 13px;font-size:13.5px;margin-bottom:14px;line-height:1.45;
  border:1px solid transparent;display:flex;gap:9px;align-items:flex-start;
}
.err{background:var(--err-soft);color:var(--err);border-color:var(--err-line)}
.ok{background:var(--ok-soft);color:var(--ok);border-color:var(--ok-line)}
.info{background:var(--brand-soft);color:var(--ink-2);border-color:var(--brand-line)}

/* ---------- kartu ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm)}
.card.pad{padding:22px}

/* ==========================================================================
   LANDING PAGE
   ========================================================================== */
.hero{padding:72px 0 56px;position:relative;overflow:hidden}
.hero::after{
  content:"";position:absolute;inset:0;z-index:-1;
  background:radial-gradient(680px 340px at 78% -8%,color-mix(in srgb,var(--brand) 12%,transparent),transparent 70%);
}
.hero-grid{display:grid;grid-template-columns:1.08fr .92fr;gap:56px;align-items:center}
.hero .eyebrow{
  display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:650;
  color:var(--brand);background:var(--brand-soft);border:1px solid var(--brand-line);
  padding:5px 12px;border-radius:100px;margin-bottom:20px;
}
.hero h1{font-size:clamp(31px,4.6vw,50px);line-height:1.08;letter-spacing:-.032em;margin-bottom:18px}
.hero h1 em{font-style:normal;color:var(--brand)}
.hero .lede{font-size:17px;color:var(--ink-2);line-height:1.6;margin:0 0 28px;max-width:52ch}
.hero-cta{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:22px}
.hero-cta .btn{min-height:50px;padding:0 22px;font-size:15.5px}
.hero .trust{display:flex;gap:18px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.hero .trust span{display:flex;align-items:center;gap:6px}

/* pratinjau aplikasi di landing */
.preview{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-lg);overflow:hidden;
}
.preview-bar{
  display:flex;align-items:center;gap:7px;padding:11px 14px;border-bottom:1px solid var(--line);
  background:var(--surface-2);
}
.preview-bar i{width:10px;height:10px;border-radius:50%;background:var(--line-2);display:block}
.preview-bar .t{margin-left:8px;font-size:11.5px;color:var(--muted);font-family:var(--mono)}
.preview-body{padding:16px}
.pv-row{display:flex;align-items:center;gap:11px;padding:11px 12px;border:1px solid var(--line);
  border-radius:var(--r-sm);margin-bottom:9px;background:var(--surface)}
.pv-row:last-child{margin-bottom:0}
.pv-n{width:26px;height:26px;flex:none;border-radius:8px;background:var(--brand-soft);color:var(--brand);
  font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}
.pv-tx{flex:1;min-width:0}
.pv-tx b{display:block;font-size:13.5px;font-weight:600}
.pv-tx span{font-size:11.5px;color:var(--muted)}
.pv-amt{font-size:13.5px;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.pv-total{display:flex;justify-content:space-between;align-items:center;margin-top:12px;padding:12px 13px;
  background:var(--brand-soft);border-radius:var(--r-sm);border:1px solid var(--brand-line)}
.pv-total .k{font-size:12.5px;color:var(--ink-2);font-weight:600}
.pv-total .v{font-size:17px;font-weight:750;color:var(--brand);font-variant-numeric:tabular-nums}

/* bagian umum */
.section{padding:64px 0;border-top:1px solid var(--line)}
.section-head{text-align:center;max-width:640px;margin:0 auto 44px}
.section-head h2{font-size:clamp(24px,3vw,33px);letter-spacing:-.028em;margin-bottom:12px}
.section-head p{color:var(--muted);font-size:16px;line-height:1.6;margin:0}
.feat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.feat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:22px;box-shadow:var(--shadow-xs)}
.feat .ic{
  width:42px;height:42px;border-radius:11px;background:var(--brand-soft);border:1px solid var(--brand-line);
  display:flex;align-items:center;justify-content:center;font-size:20px;margin-bottom:15px;
}
.feat h3{font-size:16px;margin-bottom:7px}
.feat p{margin:0;font-size:14px;color:var(--muted);line-height:1.6}

.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;counter-reset:s}
.step{position:relative;padding-top:8px}
.step .num{
  width:34px;height:34px;border-radius:50%;background:var(--brand);color:var(--brand-ink);
  font-weight:700;font-size:15px;display:flex;align-items:center;justify-content:center;margin-bottom:14px;
}
.step h3{font-size:16.5px;margin-bottom:7px}
.step p{margin:0;font-size:14px;color:var(--muted);line-height:1.6}

.cta-band{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:44px 34px;text-align:center;box-shadow:var(--shadow-md);
}
.cta-band h2{font-size:clamp(22px,2.6vw,29px);margin-bottom:11px;letter-spacing:-.026em}
.cta-band p{color:var(--muted);margin:0 0 24px;font-size:15.5px}

.land-foot{
  border-top:1px solid var(--line);padding:28px 0;margin-top:8px;
  display:flex;justify-content:space-between;align-items:center;gap:16px;flex-wrap:wrap;
  font-size:13.5px;color:var(--muted);
}
.land-foot .links{display:flex;gap:18px;flex-wrap:wrap}

@media(max-width:900px){
  .hero{padding:44px 0 34px}
  .hero-grid{grid-template-columns:1fr;gap:36px}
  .hero .lede{font-size:16px}
  .feat-grid,.steps{grid-template-columns:1fr}
  .section{padding:48px 0}
  .cta-band{padding:34px 20px}
}

/* ---------- halaman masuk ---------- */
.auth{max-width:432px;margin:6vh auto}
.auth .card{padding:30px}
.auth h1{font-size:24px;margin-bottom:7px;letter-spacing:-.026em}
.auth .sub{color:var(--muted);font-size:14px;margin:0 0 24px;line-height:1.5}
.or{display:flex;align-items:center;gap:12px;margin:18px 0;color:var(--muted);font-size:12.5px}
.or::before,.or::after{content:"";height:1px;background:var(--line);flex:1}
.auth-foot{text-align:center;margin:18px 0 0;font-size:13.5px;color:var(--muted)}
.tabs{display:flex;gap:4px;background:var(--surface-3);padding:4px;border-radius:var(--r-sm);margin-bottom:24px}
.tabs button{
  flex:1;border:none;background:transparent;padding:0 10px;min-height:38px;border-radius:var(--r-xs);
  cursor:pointer;font-weight:600;font-size:14px;color:var(--muted);transition:background .13s,color .13s;
}
.tabs button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-xs)}
.tabs button:hover:not(.on){color:var(--ink-2)}

/* ---------- daftar itinerary ---------- */
.list-head{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-bottom:22px}
.list-head h1{font-size:25px;letter-spacing:-.026em}
.list-head .sub{color:var(--muted);font-size:13.5px;margin-top:4px}
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(296px,1fr));gap:16px}
.icard{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:17px;
  box-shadow:var(--shadow-xs);cursor:pointer;position:relative;
  transition:transform .14s,border-color .14s,box-shadow .14s;
}
.icard:hover{transform:translateY(-2px);border-color:var(--brand-line);box-shadow:var(--shadow-md)}
.icard h3{font-size:16px;margin-bottom:4px;padding-right:34px}
.icard .sub{font-size:13px;color:var(--muted);margin-bottom:12px;min-height:18px}
.icard .meta{
  display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--muted);
  border-top:1px solid var(--line);padding-top:12px;align-items:baseline;
}
.icard .money{font-weight:700;color:var(--ink);font-size:15px;font-variant-numeric:tabular-nums}
.icard .del{position:absolute;top:12px;right:12px;opacity:0;transition:opacity .13s}
.icard:hover .del,.icard:focus-within .del{opacity:1}
.empty{text-align:center;padding:60px 20px;color:var(--muted)}
.empty .big{font-size:44px;margin-bottom:14px;line-height:1}
.empty h3{font-size:18px;color:var(--ink);margin-bottom:8px}
.empty p{font-size:14px;margin:0 0 20px}

/* ---------- editor ---------- */
.ed-head{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:18px}
.title-in{
  font-size:21px;font-weight:700;letter-spacing:-.024em;border:1px solid transparent;background:transparent;
  padding:7px 9px;border-radius:var(--r-xs);width:100%;
}
.title-in:hover{background:var(--surface-3)}
.title-in:focus{background:var(--surface);border-color:var(--brand)}
.sub-in{
  font-size:14px;color:var(--muted);border:1px solid transparent;background:transparent;
  padding:5px 9px;border-radius:var(--r-xs);width:100%;
}
.sub-in:hover{background:var(--surface-3)}
.sub-in:focus{background:var(--surface);border-color:var(--brand)}

.metabar{display:grid;grid-template-columns:repeat(auto-fit,minmax(164px,1fr));gap:11px;margin-bottom:18px}
.metabar .m{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);padding:11px 13px}
.metabar .m label{display:block;font-size:11.5px;color:var(--muted);font-weight:600;margin-bottom:5px}
.metabar .m label .muted{font-weight:500}
.metabar .m input,.metabar .m select{
  border:none;background:transparent;padding:0;font-size:14.5px;font-weight:650;min-height:26px;
}
.metabar .m input:focus,.metabar .m select:focus{box-shadow:none;border:none}
.metabar .m select{background-image:none;padding-right:0}
.metabar .m .fx{font-size:11.5px;color:var(--muted);font-weight:500;margin-top:4px}

.stat{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px}
.stat .s{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);padding:13px 16px}
.stat .s .k{font-size:11.5px;color:var(--muted);font-weight:600}
.stat .s .v{font-size:19px;font-weight:750;margin-top:4px;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.stat .s .q{font-size:11.5px;color:var(--muted);margin-top:2px}

/* hari */
.day{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r);
  margin-bottom:13px;overflow:hidden;box-shadow:var(--shadow-xs);
}
.day-h{
  display:flex;align-items:center;gap:11px;padding:0 15px;cursor:pointer;user-select:none;
  min-height:58px;transition:background .13s;
}
.day-h:hover{background:var(--surface-2)}
.chev{
  width:28px;height:28px;flex:none;border:none;background:transparent;cursor:pointer;color:var(--muted);
  font-size:13px;transition:transform .2s;border-radius:7px;
  display:flex;align-items:center;justify-content:center;
}
.chev:hover{background:var(--surface-3)}
.day.collapsed .chev{transform:rotate(-90deg)}
.day-h .n{
  font-weight:700;font-size:12px;color:var(--brand-ink);background:var(--brand);
  border-radius:20px;padding:3px 11px;flex:none;
}
.day-h .t{font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:15px}
.day-h .d{font-size:13px;color:var(--muted);flex:none}
.day-h .sum{font-weight:700;font-size:14px;flex:none;text-align:right;font-variant-numeric:tabular-nums}
.day-h .sum .q{font-weight:500;color:var(--muted);font-size:11.5px;display:block;text-align:right}
.day-b{border-top:1px solid var(--line)}
.day.collapsed .day-b{display:none}
.day-focus{
  width:100%;border:none;border-bottom:1px solid var(--line);background:var(--surface-2);
  padding:11px 15px;font-size:13.5px;color:var(--muted);border-radius:0;min-height:44px;
}
.day-focus:focus{box-shadow:none;background:var(--surface)}

/* tabel */
.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.tbl-hint{display:none;font-size:11.5px;color:var(--muted);padding:8px 15px 0;align-items:center;gap:6px}
table.it{width:100%;border-collapse:collapse;font-size:14px;min-width:920px}
table.it th{
  background:var(--surface-3);text-align:left;padding:11px 10px;font-size:11px;font-weight:700;
  color:var(--ink-2);text-transform:uppercase;letter-spacing:.4px;white-space:nowrap;
  border-bottom:1px solid var(--line-2);position:sticky;top:0;z-index:2;
}
table.it td{border-bottom:1px solid var(--line);padding:0;vertical-align:top}
table.it tr:last-child td{border-bottom:none}
table.it tbody tr:hover{background:var(--surface-2)}
.cell-in{
  width:100%;border:none;background:transparent;padding:11px 10px;border-radius:0;resize:none;
  font-size:14px;line-height:1.45;overflow:hidden;display:block;min-height:44px;
}
.cell-in:hover{background:color-mix(in srgb,var(--brand) 5%,transparent)}
.cell-in:focus{background:var(--surface);box-shadow:inset 0 0 0 2px var(--brand);outline:none;position:relative;z-index:3}
.cell-in.num{text-align:right;font-variant-numeric:tabular-nums;font-weight:600}
.cell-in.act{font-weight:600}
td.money{width:140px}
td.waktu{width:110px}
td.kat{width:126px}
td.stat{width:112px}
td.act-x{width:50px;text-align:center}
.rowdel{
  opacity:.35;border:none;background:transparent;cursor:pointer;color:var(--err);
  font-size:16px;padding:11px;transition:opacity .13s;border-radius:7px;
}
tr:hover .rowdel{opacity:1}
.rowdel:hover{background:var(--err-soft)}
.currency-cell{display:flex;flex-direction:column}
.currency-cell .q{font-size:11px;color:var(--muted);padding:0 10px 9px;text-align:right;font-variant-numeric:tabular-nums}
.day-foot{
  display:flex;align-items:center;gap:10px;padding:12px 15px;border-top:1px solid var(--line);
  background:var(--surface-2);flex-wrap:wrap;
}
.day-foot .sp{flex:1}
.day-foot .st{font-weight:700;font-size:14px;font-variant-numeric:tabular-nums}
.day-foot .st small{font-weight:500;color:var(--muted);font-size:11.5px;margin-left:6px}

/* ---------- modal ---------- */
.mask{
  position:fixed;inset:0;background:color-mix(in srgb,#0b1220 55%,transparent);z-index:100;
  display:flex;align-items:center;justify-content:center;padding:18px;animation:fade .16s;
}
@keyframes fade{from{opacity:0}to{opacity:1}}
.modal{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  max-width:540px;width:100%;max-height:88vh;overflow:auto;box-shadow:var(--shadow-lg);
  animation:pop .18s;
}
@keyframes pop{from{transform:scale(.975) translateY(6px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}
.modal h2{font-size:19px;padding:22px 24px 0;letter-spacing:-.024em}
.modal .body{padding:16px 24px}
.modal .acts{display:flex;gap:10px;justify-content:flex-end;padding:0 24px 22px;flex-wrap:wrap}
.opt{
  display:flex;gap:13px;align-items:flex-start;border:1.5px solid var(--line-2);
  border-radius:var(--r-sm);padding:15px;cursor:pointer;margin-bottom:11px;
  transition:border-color .13s,background .13s;
}
.opt:hover{background:var(--surface-2);border-color:var(--brand-line)}
.opt.sel{border-color:var(--brand);background:var(--brand-soft)}
.opt .ic{font-size:22px;flex:none;line-height:1.2}
.opt .tx b{display:block;margin-bottom:3px;font-size:14.5px}
.opt .tx span{font-size:13px;color:var(--muted);line-height:1.45}
.tpl-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
@media(max-width:560px){.tpl-grid{grid-template-columns:1fr}}

/* ---------- dialog konfirmasi & peringatan (pengganti alert bawaan) ---------- */
.modal.confirm{max-width:412px}
.modal.confirm .cf-head{display:flex;gap:14px;align-items:flex-start;padding:24px 24px 0}
.modal.confirm .cf-ic{
  width:42px;height:42px;flex:none;border-radius:12px;display:flex;align-items:center;
  justify-content:center;font-size:20px;background:var(--brand-soft);border:1px solid var(--brand-line);
}
.modal.confirm.danger .cf-ic{background:var(--err-soft);border-color:var(--err-line)}
.modal.confirm.warn .cf-ic{background:var(--warn-soft);border-color:var(--warn-line)}
.modal.confirm .cf-tx h2{padding:0;font-size:17.5px;margin-bottom:7px}
.modal.confirm .cf-tx p{margin:0;font-size:14px;color:var(--muted);line-height:1.55}
.modal.confirm .acts{padding:22px 24px 22px}
.modal.confirm .acts .btn{flex:1;min-width:110px}

/* ---------- toast & status simpan ---------- */
#toast{
  position:fixed;left:50%;bottom:24px;transform:translateX(-50%) translateY(100px);z-index:200;
  background:var(--ink);color:var(--bg);padding:12px 20px;border-radius:12px;font-size:14px;font-weight:600;
  box-shadow:var(--shadow-lg);opacity:0;transition:transform .26s cubic-bezier(.2,.9,.3,1),opacity .26s;
  max-width:calc(100vw - 32px);text-align:center;
}
html[data-theme="dark"] #toast{background:#e8edf4;color:#0d1117}
#toast.show{transform:translateX(-50%) translateY(0);opacity:1}
#toast.err{background:var(--err);color:#fff}
#toast.ok{background:var(--ok);color:#fff}
#save{
  position:fixed;bottom:18px;right:18px;z-index:90;background:var(--surface);border:1px solid var(--line-2);
  border-radius:24px;padding:9px 17px;font-size:13px;box-shadow:var(--shadow-md);opacity:0;
  transition:opacity .2s;pointer-events:none;font-weight:600;
}
#save.show{opacity:1}

/* ---------- boot ---------- */
.boot{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:70vh;color:var(--muted)}
.spin{
  width:30px;height:30px;border:3px solid var(--line-2);border-top-color:var(--brand);
  border-radius:50%;animation:sp .7s linear infinite;margin-bottom:14px;
}
@keyframes sp{to{transform:rotate(360deg)}}

/* ---------- tabel admin ---------- */
table.adm{width:100%;border-collapse:collapse;font-size:14px}
table.adm th{text-align:left;padding:12px 11px;border-bottom:1px solid var(--line-2);font-size:12.5px;color:var(--ink-2);white-space:nowrap}
table.adm td{padding:12px 11px;border-bottom:1px solid var(--line)}
table.adm tbody tr:hover{background:var(--surface-2)}
.badge{display:inline-block;padding:3px 10px;border-radius:20px;font-size:12px;font-weight:600;background:var(--surface-3);color:var(--ink-2)}
.badge.on{background:var(--ok-soft);color:var(--ok)}
.badge.off{background:var(--err-soft);color:var(--err)}

/* ==========================================================================
   MOBILE — pengguna utama
   ========================================================================== */
@media(max-width:860px){
  header.top .top-in{flex-wrap:wrap;row-gap:8px;height:auto;padding:9px 16px;min-height:var(--hd)}
  header.top .top-in .spacer{flex:1 1 0}
  #ed-stat{display:none}
  .tbl-hint{display:flex}
}
@media(max-width:640px){
  .wrap{padding:0 14px}
  .top-in{padding:9px 14px;gap:8px}
  .brand small{display:none}
  .brand{font-size:16px}
  .brand .logo{width:27px;height:27px}
  main{padding:18px 0 70px}
  .icard .del{opacity:1}
  .day-h .d{display:none}
  .day-h{gap:9px;padding:0 12px;min-height:56px}
  .day-h .t{font-size:14.5px}
  .auth{margin:3vh auto}
  .auth .card{padding:24px}
  .list-head h1{font-size:22px}
  .stat .s{padding:12px 13px}
  .stat .s .v{font-size:17.5px}
  /* Modal jadi lembar bawah — lebih nyaman di jempol */
  .mask{padding:0;align-items:flex-end}
  .modal{
    max-width:none;border-radius:20px 20px 0 0;max-height:92vh;
    animation:sheet .22s cubic-bezier(.2,.9,.3,1);
  }
  @keyframes sheet{from{transform:translateY(24px);opacity:.6}to{transform:translateY(0);opacity:1}}
  .modal h2{padding:20px 20px 0}
  .modal .body{padding:15px 20px}
  .modal .acts{padding:0 20px 20px}
  .modal .acts .btn{flex:1}
  .modal.confirm .cf-head{padding:20px 20px 0}
  .modal.confirm .acts{padding:20px 20px 20px}
  .hero h1{letter-spacing:-.028em}
  .hero-cta .btn{width:100%}
  .section-head{margin-bottom:32px}
  .land-foot{flex-direction:column;text-align:center;gap:12px}
}
@media(max-width:420px){
  .top-in{gap:7px;padding:9px 12px}
  .btn.sm{padding:0 10px;font-size:13px}
  .wrap{padding:0 12px}
  .metabar{grid-template-columns:1fr 1fr}
}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
}

@media print{
  header.top,.ed-head,.metabar,.stat,.day-foot,.rowdel,#save,#toast,.btn,.tbl-hint{display:none!important}
  .day{break-inside:avoid;box-shadow:none}
}
