/* =========================================================
   KASIR WARUNG MASA DEPAN — Premium UI
   ========================================================= */
:root{
  --primary:#0b2c5c;
  --primary-2:#123f7d;
  --primary-soft:#e8eef8;
  --accent:#16a34a;
  --accent-soft:#e7f7ee;
  --danger:#dc2626;
  --warning:#f59e0b;
  --bg:#f4f7fb;
  --card:#ffffff;
  --text:#1e293b;
  --muted:#64748b;
  --border:#e2e8f0;
  --radius:14px;
  --shadow:0 2px 12px rgba(15,23,42,.06);
  --shadow-lg:0 12px 32px rgba(15,23,42,.12);
  --sidebar-w:260px;
}
*{box-sizing:border-box}
body{
  font-family:'Poppins',system-ui,-apple-system,'Segoe UI',sans-serif;
  background:var(--bg); color:var(--text); margin:0; font-size:14.5px;
}
a{text-decoration:none}
.bg-install{background:linear-gradient(135deg,#0b2c5c 0%,#123f7d 55%,#16a34a 140%);min-height:100vh}
.install-logo{
  width:76px;height:76px;border-radius:22px;margin:0 auto;
  background:linear-gradient(135deg,var(--primary),var(--accent));
  color:#fff;display:grid;place-items:center;font-size:2rem;
  box-shadow:var(--shadow-lg);
}

/* ---------------- LAYOUT ---------------- */
.app-wrap{display:flex;min-height:100vh}
.app-main{flex:1;min-width:0;display:flex;flex-direction:column;margin-left:var(--sidebar-w);transition:margin .25s ease}
body.sidebar-collapsed .app-main{margin-left:0}
body.sidebar-collapsed .sidebar{transform:translateX(-100%)}

/* ---------------- SIDEBAR ---------------- */
.sidebar{
  position:fixed;inset:0 auto 0 0;width:var(--sidebar-w);z-index:1040;
  background:linear-gradient(180deg,#0b2c5c 0%,#0a2450 100%);
  color:#cbd5e1;display:flex;flex-direction:column;transition:transform .25s ease;
}
.sidebar-brand{display:flex;align-items:center;gap:.75rem;padding:1.1rem 1.15rem;border-bottom:1px solid rgba(255,255,255,.08)}
.brand-icon{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;
  background:linear-gradient(135deg,#16a34a,#22c55e);color:#fff;font-size:1.3rem}
.brand-logo{width:42px;height:42px;border-radius:12px;object-fit:cover}
.brand-text strong{display:block;color:#fff;font-size:.92rem;line-height:1.15}
.brand-text small{color:#94a3b8;font-size:.72rem}
.sidebar-nav{flex:1;overflow-y:auto;padding:.85rem .6rem}
.nav-label{font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:#64748b;
  padding:.9rem .75rem .4rem;font-weight:600}
.nav-item{display:flex;align-items:center;gap:.7rem;padding:.62rem .8rem;border-radius:10px;
  color:#cbd5e1;font-size:.88rem;font-weight:500;transition:.18s;margin-bottom:2px}
.nav-item i{font-size:1.05rem;width:20px;text-align:center}
.nav-item:hover{background:rgba(255,255,255,.08);color:#fff}
.nav-item.active{background:linear-gradient(90deg,#16a34a,#22c55e);color:#fff;
  box-shadow:0 6px 16px rgba(22,163,74,.35)}
.text-danger-soft{color:#fca5a5 !important}
.text-danger-soft:hover{background:rgba(220,38,38,.18)!important;color:#fff!important}
.sidebar-footer{padding:.8rem 1rem;border-top:1px solid rgba(255,255,255,.08);color:#64748b;font-size:.72rem}
.sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(15,23,42,.5);z-index:1035}
.sidebar-backdrop.show{display:block}

/* ---------------- TOPBAR ---------------- */
.topbar{background:#fff;border-bottom:1px solid var(--border);padding:.7rem 1.15rem;
  display:flex;align-items:center;gap:.9rem;position:sticky;top:0;z-index:1020}
.topbar-title h5{font-size:1.02rem;font-weight:600}
.btn-icon{width:38px;height:38px;display:grid;place-items:center;border-radius:10px;
  background:var(--primary-soft);color:var(--primary);border:0;font-size:1.15rem}
.btn-icon:hover{background:#d6e2f5}
.btn-user{display:flex;align-items:center;background:transparent;border:0;font-weight:500;color:var(--text)}
.avatar{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;
  background:linear-gradient(135deg,var(--primary),var(--primary-2));color:#fff;font-weight:600}

/* ---------------- CONTENT ---------------- */
.content{flex:1;padding:1.15rem}
.app-footer{background:#fff;border-top:1px solid var(--border);padding:.75rem 1.15rem;
  display:flex;justify-content:space-between;flex-wrap:wrap;gap:.4rem;font-size:.78rem;color:var(--muted)}

/* ---------------- CARDS ---------------- */
.card{border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);background:var(--card)}
.card-header{background:#fff;border-bottom:1px solid var(--border);padding:.9rem 1.1rem;font-weight:600;border-radius:var(--radius) var(--radius) 0 0}
.stat-card{display:flex;gap:.9rem;align-items:flex-start;padding:1.05rem}
.stat-icon{width:48px;height:48px;border-radius:13px;display:grid;place-items:center;font-size:1.4rem;flex-shrink:0}
.stat-icon.blue{background:var(--primary-soft);color:var(--primary)}
.stat-icon.green{background:var(--accent-soft);color:var(--accent)}
.stat-icon.orange{background:#fff4e5;color:var(--warning)}
.stat-icon.red{background:#fdecec;color:var(--danger)}
.stat-icon.purple{background:#f2ecfd;color:#7c3aed}
.stat-label{font-size:.76rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-weight:600}
.stat-value{font-size:1.32rem;font-weight:700;line-height:1.2;margin-top:.15rem}

/* ---------------- TABLE ---------------- */
.table{font-size:.86rem;margin-bottom:0}
.table thead th{background:#f8fafc;border-bottom:1px solid var(--border);color:var(--muted);
  font-size:.74rem;text-transform:uppercase;letter-spacing:.05em;font-weight:600;padding:.7rem .8rem;white-space:nowrap}
.table tbody td{padding:.68rem .8rem;vertical-align:middle;border-color:#f1f5f9}
.table-hover tbody tr:hover{background:#f8fbff}

/* ---------------- BUTTONS & FORM ---------------- */
.btn{border-radius:10px;font-weight:500;font-size:.87rem}
.btn-primary{background:var(--primary);border-color:var(--primary)}
.btn-primary:hover{background:var(--primary-2);border-color:var(--primary-2)}
.btn-success{background:var(--accent);border-color:var(--accent)}
.btn-success:hover{background:#128a3e;border-color:#128a3e}
.btn-lg{font-size:1rem;padding:.7rem 1.3rem}
.form-control,.form-select{border-radius:10px;border:1px solid var(--border);padding:.55rem .8rem;font-size:.88rem}
.form-control:focus,.form-select:focus{border-color:var(--primary);box-shadow:0 0 0 .18rem rgba(11,44,92,.12)}
.form-label{font-size:.8rem;font-weight:600;color:#475569;margin-bottom:.3rem}

/* ---------------- KASIR ---------------- */
.pos-wrap{display:grid;grid-template-columns:1fr 480px;gap:1rem;align-items:start}
.produk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.7rem}
.produk-card{background:#fff;border:1px solid var(--border);border-radius:12px;padding:.75rem;
  cursor:pointer;transition:.15s;user-select:none}
.produk-card:hover{border-color:var(--primary);transform:translateY(-2px);box-shadow:var(--shadow-lg)}
.produk-card .p-nama{font-weight:600;font-size:.86rem;line-height:1.25;min-height:2.2em;overflow:hidden}
.produk-card .p-harga{color:var(--accent);font-weight:700;font-size:.92rem}
.produk-card .p-stok{font-size:.72rem;color:var(--muted)}
.produk-card.habis{opacity:.5;cursor:not-allowed}

/* ---------- PANEL KERANJANG (DIPERLEBAR) ---------- */
.cart-panel{
  background:#fff;
  border:1px solid var(--border);
  border-radius:var(--radius);
  box-shadow:var(--shadow);
  position:sticky;
  top:80px;
  display:flex;
  flex-direction:column;
  max-height:calc(100vh - 110px);
}
.cart-head{
  padding:.85rem 1rem;
  border-bottom:1px solid var(--border);
  font-weight:600;
  display:flex;
  justify-content:space-between;
  align-items:center;
  background:#fbfdff;
  border-radius:var(--radius) var(--radius) 0 0;
}
.cart-head .badge{font-size:.78rem}
.cart-body{flex:1;overflow-y:auto;padding:.65rem}

/* ---------- ITEM KERANJANG ---------- */
.cart-item{
  background:#fff;
  border:1px solid var(--border);
  border-radius:10px;
  padding:.7rem .8rem;
  margin-bottom:.55rem;
  transition:.15s;
}
.cart-item:hover{border-color:var(--primary);box-shadow:0 3px 10px rgba(11,44,92,.06)}
.cart-item:last-child{margin-bottom:0}

/* Baris atas: nama produk + tombol hapus */
.cart-item .ci-head{
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:.5rem;
  margin-bottom:.35rem;
}
.cart-item .ci-nama{
  font-weight:600;
  font-size:.9rem;
  line-height:1.25;
  color:var(--text);
  flex:1;
  word-break:break-word;
}
.cart-item .ci-hapus{
  width:24px;
  height:24px;
  display:grid;
  place-items:center;
  border:0;
  border-radius:6px;
  background:#fdecec;
  color:var(--danger);
  font-size:.75rem;
  cursor:pointer;
  flex-shrink:0;
  transition:.15s;
}
.cart-item .ci-hapus:hover{background:var(--danger);color:#fff}

/* Baris tengah: harga satuan × qty ... subtotal */
.cart-item .ci-info{
  display:flex;
  justify-content:space-between;
  align-items:baseline;
  gap:.5rem;
  padding:.35rem .55rem;
  background:#f8fafc;
  border-radius:7px;
  margin-bottom:.5rem;
  font-size:.78rem;
}
.cart-item .ci-harga{color:var(--muted)}
.cart-item .ci-subtotal{
  font-weight:700;
  color:var(--primary);
  font-size:.92rem;
}

/* Baris bawah: kontrol qty + info stok */
.cart-item .ci-aksi{
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:.5rem;
}
.cart-item .ci-stok{
  font-size:.72rem;
  color:var(--muted);
}
.cart-item .qty-box{
  display:flex;
  align-items:center;
  gap:.3rem;
}
.cart-item .qty-box button{
  width:32px;
  height:32px;
  border-radius:8px;
  border:1px solid var(--border);
  background:#fff;
  font-weight:700;
  font-size:1rem;
  line-height:1;
  color:var(--primary);
  cursor:pointer;
  transition:.15s;
}
.cart-item .qty-box button:hover{background:var(--primary);color:#fff;border-color:var(--primary)}
.cart-item .qty-box input{
  width:52px;
  height:32px;
  text-align:center;
  border:1px solid var(--border);
  border-radius:8px;
  font-size:.85rem;
  font-weight:600;
  color:var(--primary);
}

/* ---------- FOOTER KERANJANG ---------- */
.cart-foot{
  border-top:1px solid var(--border);
  padding:.9rem 1rem;
  background:#fbfdff;
  border-radius:0 0 var(--radius) var(--radius);
}
.total-row{display:flex;justify-content:space-between;font-size:.87rem;margin-bottom:.35rem}
.total-row.grand{font-size:1.25rem;font-weight:700;color:var(--primary);
  border-top:1px dashed var(--border);padding-top:.5rem;margin-top:.5rem}
.uang-cepat button{margin:.15rem;font-size:.75rem;padding:.28rem .55rem}

/* ---------------- MISC ---------------- */
.empty-state{text-align:center;padding:3rem 1rem;color:var(--muted)}
.empty-state i{font-size:3rem;opacity:.35;display:block;margin-bottom:.6rem}
.badge-soft{padding:.32em .6em;border-radius:7px;font-weight:600;font-size:.72rem;display:inline-block}
.badge-soft.green{background:var(--accent-soft);color:#15803d}
.badge-soft.red{background:#fdecec;color:#b91c1c}
.badge-soft.orange{background:#fff4e5;color:#b45309}
.badge-soft.blue{background:var(--primary-soft);color:var(--primary)}

/* ---------------- LOGIN / LANDING ---------------- */
.auth-wrap{min-height:100vh;display:grid;place-items:center;
  background:linear-gradient(135deg,#0b2c5c 0%,#123f7d 60%,#16a34a 145%);padding:1rem}
.auth-card{width:100%;max-width:420px;background:#fff;border-radius:20px;padding:2.2rem;
  box-shadow:var(--shadow-lg)}
.hero{background:linear-gradient(135deg,#0b2c5c 0%,#123f7d 60%,#0f5132 130%);color:#fff;
  padding:5rem 0 4rem;position:relative;overflow:hidden}
.hero h1{font-size:clamp(1.9rem,4vw,3rem);font-weight:700;line-height:1.15}
.hero p.lead{color:#c7d7ee}
.hero-badge{display:inline-block;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.22);
  padding:.35rem .9rem;border-radius:50px;font-size:.78rem;margin-bottom:1rem}
.hero-visual{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);
  border-radius:20px;padding:1.4rem;backdrop-filter:blur(6px)}
.feature-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius);
  padding:1.5rem;height:100%;transition:.2s;box-shadow:var(--shadow)}
.feature-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.feature-icon{width:52px;height:52px;border-radius:14px;display:grid;place-items:center;font-size:1.5rem;margin-bottom:.9rem}
.navbar-landing{background:rgba(255,255,255,.97);backdrop-filter:blur(8px);box-shadow:0 1px 12px rgba(0,0,0,.06)}
.section-title{font-weight:700;font-size:clamp(1.4rem,3vw,2rem)}
.footer-landing{background:#0b2c5c;color:#94a3b8;padding:2.5rem 0 1.5rem}
.kalkulator-box{background:#fff;border-radius:18px;padding:1.4rem;box-shadow:var(--shadow-lg)}

/* ---------------- PRINT STRUK ---------------- */
.struk{font-family:'Courier New',monospace;color:#000;background:#fff;margin:0 auto;padding:10px}
.struk-58{width:58mm;font-size:11px}
.struk-80{width:80mm;font-size:12px}
.struk-a4{width:210mm;font-size:13px;padding:15mm}
.struk .center{text-align:center}
.struk .line{border-top:1px dashed #000;margin:6px 0}
.struk table{width:100%;border-collapse:collapse;font-size:inherit}
.struk td{padding:1px 0;vertical-align:top}
.struk .right{text-align:right}
@media print{
  body{background:#fff}
  .no-print{display:none !important}
  .sidebar,.topbar,.app-footer,.sidebar-backdrop{display:none !important}
  .app-main{margin-left:0 !important}
  .content{padding:0 !important}
  .struk{box-shadow:none;margin:0}
  @page{margin:4mm}
}

/* ---------------- RESPONSIVE ---------------- */
@media (max-width: 991.98px){
  .sidebar{transform:translateX(-100%)}
  body.sidebar-open .sidebar{transform:translateX(0)}
  .app-main{margin-left:0}
  .pos-wrap{grid-template-columns:1fr}
  .cart-panel{position:static;max-height:none}
}
@media (max-width: 575.98px){
  .content{padding:.75rem}
  .stat-value{font-size:1.1rem}
  .produk-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr))}
}

/* =========================================================
   SCANNER BARCODE
   ========================================================= */
#inputScan{
  border-color:#16a34a;
  border-width:2px;
  letter-spacing:.5px;
  font-size:1.05rem;
}
#inputScan:focus{
  border-color:#16a34a;
  box-shadow:0 0 0 .2rem rgba(22,163,74,.2);
}
#scanStatus i{margin-right:4px}
#scanStatus strong{font-weight:600}

/* Kamera scanner container */
#readerKamera{
  min-height:260px;
  background:#0b2c5c;
  display:flex;
  align-items:center;
  justify-content:center;
  border-radius:10px;
}
#readerKamera video{border-radius:8px;width:100%!important}

/* Animasi pulse pada tombol kamera */
@keyframes pulseScan{
  0%,100%{box-shadow:0 0 0 0 rgba(22,163,74,.5)}
  50%{box-shadow:0 0 0 8px rgba(22,163,74,0)}
}
.btn-scan-pulse{animation:pulseScan 1.8s infinite}

/* =========================================================
   LABEL HARGA (Preview & Cetak)
   ========================================================= */
.bg-success-subtle{background-color:#e7f7ee!important}

.label-preview{
  display:inline-block;
  border:1px dashed #cbd5e1;
  border-radius:6px;
  padding:4px 8px;
  font-family:'Courier New',monospace;
  font-size:11px;
  color:#475569;
  background:#f8fafc;
}

/* Badge barcode kecil di daftar produk */
.barcode-badge{
  display:inline-flex;
  align-items:center;
  gap:4px;
  font-size:.7rem;
  color:#64748b;
  background:#f1f5f9;
  padding:2px 6px;
  border-radius:6px;
  font-family:'Courier New',monospace;
}
.barcode-badge i{font-size:.75rem}