:root{
  --ink:#2e1065; --ink-soft:#4c1d95;
  --pink:#ec4899; --pink-soft:#f9a8d4;
  --purple:#a855f7; --purple-soft:#d8b4fe;
  --blue:#38bdf8; --blue-soft:#93c5fd;
  --yellow:#fde047; --yellow-soft:#fef9c3;
  --green:#34d399; --danger:#f87171;
  --txt:#2e1065; --txt-dim:#7c6aa8;
  --card-radius:24px;
}
*{margin:0;padding:0;box-sizing:border-box}
body{
  font-family:'Poppins',sans-serif;color:var(--txt);min-height:100vh;
  background:linear-gradient(180deg,#dbeafe 0%,#fae8ff 40%,#fce7f3 100%);
}
.font-display{font-family:'Fredoka',sans-serif}
.bg-pattern{
  background-image:radial-gradient(#e9d5ff 2px,transparent 2px),radial-gradient(#bae6fd 2px,transparent 2px);
  background-size:24px 24px;background-position:0 0,12px 12px;
}
.retro{border:3px solid var(--ink);box-shadow:5px 5px 0 var(--ink);border-radius:var(--card-radius);background:#fff}
.retro-sm{border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);border-radius:14px}
.hover-pop{transition:transform .18s ease,box-shadow .18s ease}
.hover-pop:hover{transform:translate(-2px,-2px);box-shadow:7px 7px 0 var(--ink)}

.btn{border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);cursor:pointer;font-family:'Poppins';
  font-weight:700;font-size:13px;padding:10px 18px;border-radius:12px;transition:.14s;
  display:inline-flex;align-items:center;gap:7px;text-decoration:none}
.btn:active{transform:translate(3px,3px);box-shadow:0 0 0 var(--ink)}
.btn-pink{background:var(--pink);color:#fff}.btn-pink:hover{background:#db2777}
.btn-white{background:#fff;color:var(--ink)}.btn-white:hover{background:#fdf2f8}
.btn-blue{background:var(--blue);color:#fff}.btn-blue:hover{background:#0ea5e9}
.btn-purple{background:var(--purple);color:#fff}.btn-purple:hover{background:#9333ea}
.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{background:#ef4444}
.btn-sm{padding:6px 12px;font-size:12px;border-radius:10px;box-shadow:2px 2px 0 var(--ink)}

/* layout shell */
.shell{display:flex;min-height:100vh}
.sidebar{width:270px;flex-shrink:0;background:rgba(255,255,255,.92);backdrop-filter:blur(8px);
  border-right:3px solid var(--ink);padding:22px 18px;display:flex;flex-direction:column;gap:8px;
  position:sticky;top:0;height:100vh;overflow-y:auto}
.main{flex:1;padding:26px clamp(16px,3vw,40px) 60px;min-width:0}
.brand{display:flex;align-items:center;gap:12px;margin-bottom:22px}
.logo{width:46px;height:46px;border-radius:13px;background:var(--pink);display:grid;place-items:center;
  border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);flex-shrink:0}
.logo svg{width:24px;height:24px;color:#fff}
.brand h1{font-family:'Fredoka';font-size:18px;font-weight:700;line-height:1}
.brand p{font-size:9px;font-weight:700;color:var(--pink);letter-spacing:1.5px;text-transform:uppercase;margin-top:3px}

.nav-label{font-size:10px;font-weight:700;color:var(--txt-dim);text-transform:uppercase;letter-spacing:1px;
  margin:14px 6px 6px}
.nav-item{display:flex;align-items:center;gap:10px;padding:11px 14px;border-radius:13px;font-weight:600;
  font-size:14px;color:var(--ink);text-decoration:none;border:2px solid transparent;cursor:pointer;
  transition:.14s;background:none;width:100%;text-align:left;font-family:'Poppins'}
.nav-item:hover{background:#faf5ff;border-color:var(--ink)}
.nav-item.active{background:var(--purple-soft);border-color:var(--ink);box-shadow:3px 3px 0 var(--ink)}
.nav-item .ico{font-size:17px}

.sidebar-foot{margin-top:auto;padding-top:16px;border-top:2px dashed #e9d5ff}
.user-chip{display:flex;align-items:center;gap:10px;padding:10px;border-radius:13px;background:#faf5ff;
  border:2px solid var(--ink);margin-bottom:10px}
.user-chip .av{width:34px;height:34px;border-radius:9px;background:var(--purple);color:#fff;display:grid;
  place-items:center;font-weight:700;font-family:'Fredoka';flex-shrink:0}
.user-chip .nm{font-size:13px;font-weight:700;line-height:1.2}
.user-chip .rl{font-size:10px;font-weight:700;color:var(--pink);text-transform:uppercase}

/* page header */
.page-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap;gap:14px;margin-bottom:24px}
.page-head > div:first-child{min-width:0}
.page-head .pill{flex-shrink:0}
.page-title{font-family:'Fredoka';font-size:26px;font-weight:700;line-height:1}
.page-sub{font-size:13px;color:var(--txt-dim);font-weight:500;margin-top:4px}
.pill{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:700;color:var(--ink);
  background:#fff;padding:9px 15px;border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);border-radius:99px}
.dot{width:9px;height:9px;border-radius:50%;background:var(--green)}.dot.off{background:var(--danger)}

/* metric cards */
.metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:18px;margin-bottom:24px}
.card{padding:22px;position:relative;overflow:hidden}
.card .ic{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;font-size:22px;
  margin-bottom:14px;border:2px solid var(--ink);box-shadow:2px 2px 0 var(--ink)}
.card .lbl{font-size:11px;font-weight:700;color:var(--ink);opacity:.75;text-transform:uppercase;letter-spacing:.7px}
.card .val{font-family:'Fredoka';font-size:28px;font-weight:700;margin-top:6px;letter-spacing:-.5px;line-height:1}
.card .sub{font-size:11.5px;font-weight:600;color:var(--ink);opacity:.7;margin-top:8px}
.card .deco{position:absolute;bottom:10px;right:14px;font-size:22px;opacity:.85}

/* charts */
.charts{display:grid;grid-template-columns:2fr 1fr;gap:18px;margin-bottom:24px}
@media(max-width:900px){.charts{grid-template-columns:1fr}}
.panel{padding:22px}
.panel h3{font-family:'Fredoka';font-size:16px;font-weight:700;margin-bottom:18px;display:flex;align-items:center;gap:8px}
.chart-wrap{position:relative;height:265px}

/* toolbar/filters */
.toolbar{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-bottom:18px}
.toolbar input,.toolbar select{background:#fff;border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);
  border-radius:12px;padding:10px 15px;color:var(--ink);font-family:'Poppins';font-weight:600;font-size:13px}
.toolbar input:focus,.toolbar select:focus{outline:none}
.search{flex:1;min-width:200px}
/* varian satu baris: tidak membungkus, scroll horizontal bila perlu */
.toolbar-oneline{flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px}
.toolbar-oneline > *{flex-shrink:0}
.toolbar-oneline .search{flex:1 1 auto;min-width:160px}
.toolbar-oneline input[type="date"]{width:auto}

/* table */
.table-wrap{overflow:hidden;padding:0}
.table-scroll{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:13px}
thead th{text-align:left;padding:15px 16px;font-family:'Fredoka';font-size:12px;font-weight:600;
  text-transform:uppercase;letter-spacing:.5px;color:#fff;background:var(--purple);
  border-bottom:3px solid var(--ink);white-space:nowrap;cursor:pointer;user-select:none}
thead th:hover{background:var(--pink)}
tbody td{padding:13px 16px;border-bottom:2px solid #f3e8ff;white-space:nowrap;font-weight:500}
tbody tr:nth-child(even){background:#faf5ff}
tbody tr:hover{background:#fdf2f8}
tbody tr:last-child td{border-bottom:none}
.badge{font-size:11px;font-weight:700;padding:4px 11px;border-radius:99px;text-transform:capitalize;border:1.5px solid var(--ink)}
.badge.ok{background:#d1fae5;color:#065f46}
.badge.pending{background:#fef9c3;color:#854d0e}
.badge.wallet{background:#e0f2fe;color:#075985}
.amount{font-family:'Fredoka';font-weight:700;color:var(--pink)}
.empty{text-align:center;padding:52px;color:var(--txt-dim);font-weight:600;font-size:14px}
.foot{display:flex;justify-content:space-between;align-items:center;padding:16px;font-size:12px;
  font-weight:600;color:var(--txt-dim);flex-wrap:wrap;gap:10px;border-top:3px solid var(--ink);background:#faf5ff}

/* forms / admin */
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}
.field label{display:block;font-size:11px;font-weight:700;color:var(--txt-dim);margin-bottom:6px;
  text-transform:uppercase;letter-spacing:.6px}
.field input,.field select{width:100%;background:#faf5ff;border:2px solid var(--ink);border-radius:12px;
  padding:11px 13px;color:var(--ink);font-family:'Poppins';font-weight:600;font-size:13px}
.field input:focus,.field select:focus{outline:none;background:#fff;box-shadow:2px 2px 0 var(--ink)}
.section{padding:24px;margin-bottom:22px}
.section h2{font-family:'Fredoka';font-size:19px;font-weight:700;margin-bottom:6px}
.section .desc{font-size:12.5px;color:var(--txt-dim);font-weight:500;margin-bottom:18px}

.alert{padding:13px 16px;border-radius:13px;border:2px solid var(--ink);font-weight:600;font-size:13px;margin-bottom:18px}
.alert.ok{background:#d1fae5;color:#065f46}
.alert.err{background:#fee2e2;color:#991b1b}

.spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;
  border-radius:50%;animation:spin .7s linear infinite;display:inline-block}
@keyframes spin{to{transform:rotate(360deg)}}
.fade{animation:fade .4s ease both}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
.float{animation:float 4s ease-in-out infinite}

/* ===== TOPBAR MOBILE — tersembunyi total di desktop ===== */
.topbar-mobile{display:none}
.menu-toggle{background:#fff;border:2px solid var(--ink);box-shadow:3px 3px 0 var(--ink);
  border-radius:12px;padding:8px 12px;font-size:20px;line-height:1;cursor:pointer;
  align-items:center;justify-content:center}
.topbar-mobile .tb-logo{width:36px;height:36px;border-radius:10px;background:var(--pink);
  display:grid;place-items:center;border:2px solid var(--ink);flex-shrink:0}
.topbar-mobile .tb-logo svg{width:20px;height:20px;color:#fff}
/* tombol tutup di dalam drawer — hanya tampil saat mobile */
.drawer-close{display:none}

@media(max-width:900px){
  .charts{grid-template-columns:1fr}
}

@media(max-width:780px){
  body{font-size:14px}
  .shell{flex-direction:column}

  /* topbar tampil sebagai bar atas dengan tombol hamburger */
  .topbar-mobile{display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:11px 16px;background:rgba(255,255,255,.96);backdrop-filter:blur(8px);
    border-bottom:3px solid var(--ink);position:sticky;top:0;z-index:60}
  .topbar-mobile .tb-brand{display:flex;align-items:center;gap:10px;
    font-family:'Fredoka';font-weight:700;font-size:17px}
  .menu-toggle{display:inline-flex}

  /* sidebar jadi drawer yang menggeser dari kiri */
  .sidebar{position:fixed;top:0;left:0;height:100dvh;width:84%;max-width:310px;z-index:80;
    transform:translateX(-110%);transition:transform .28s cubic-bezier(.4,0,.2,1);
    border-right:3px solid var(--ink);box-shadow:8px 0 0 rgba(46,16,101,.18);overflow-y:auto}
  .sidebar.open{transform:translateX(0)}
  .sidebar-backdrop{display:none;position:fixed;inset:0;background:rgba(46,16,101,.4);
    z-index:70;opacity:0;transition:opacity .28s ease}
  .sidebar-backdrop.show{display:block;opacity:1}
  /* tombol ✕ di pojok dalam drawer */
  .drawer-close{display:grid;place-items:center;position:absolute;top:14px;right:14px;
    width:34px;height:34px;border-radius:10px;background:#fff;border:2px solid var(--ink);
    box-shadow:2px 2px 0 var(--ink);font-size:16px;cursor:pointer;color:var(--ink);z-index:2}
  .sidebar .brand{padding-right:44px}

  /* mencegah scroll body saat drawer terbuka */
  body.drawer-open{overflow:hidden}

  .main{padding:18px 16px 50px}
  .page-title{font-size:22px}
  .metrics{grid-template-columns:repeat(2,1fr);gap:12px}
  .card{padding:16px}
  .card .val{font-size:22px}
  .card .ic{width:40px;height:40px;font-size:19px;margin-bottom:10px}
  .toolbar{gap:9px}
  .toolbar:not(.toolbar-oneline) .search{flex:1 1 100%}
  .toolbar:not(.toolbar-oneline) input,.toolbar:not(.toolbar-oneline) select{flex:1 1 calc(50% - 5px);min-width:0}
  .toolbar:not(.toolbar-oneline) .btn{flex:1 1 calc(50% - 5px);justify-content:center}
  .toolbar-oneline{gap:8px}
  .toolbar-oneline .search{min-width:130px}
  .section{padding:18px}
  .form-grid{grid-template-columns:1fr}
  thead th,tbody td{padding:11px 12px}

  /* sembunyikan kolom tertentu di tablet & smartphone */
  th[data-col="Package ID"],td[data-col="Package ID"],
  th[data-col="Order ID"],td[data-col="Order ID"],
  th[data-col="Judul Notifikasi"],td[data-col="Judul Notifikasi"],
  th[data-col="Isi Notifikasi"],td[data-col="Isi Notifikasi"],
  th[data-col="ID FlowBell"],td[data-col="ID FlowBell"]{display:none}
}

@media(max-width:430px){
  .metrics{grid-template-columns:1fr}
  .page-head{gap:10px}
  .page-head .pill{font-size:11px;padding:7px 11px}
  .page-sub{font-size:12px}
}

/* login */
.login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px}
.login-card{width:100%;max-width:400px;padding:34px}
.login-logo{width:62px;height:62px;border-radius:17px;background:var(--pink);display:grid;place-items:center;
  border:3px solid var(--ink);box-shadow:4px 4px 0 var(--ink);margin:0 auto 18px}
.login-logo svg{width:32px;height:32px;color:#fff}
