:root{
  --bg:#eef1fb;
  --card:#ffffff;
  --border:#e6eaf6;
  --text:#1c2333;
  --muted:#8993a9;
  --accent:#3b5bfd;
  --accent-dark:#2a45d6;
  --accent-soft:#eef1ff;

  --purple:#7c6ff0; --purple-soft:#efeafd;
  --blue:#3b82f6;   --blue-soft:#e8f0fe;
  --green:#22b573;  --green-soft:#e6f9ef;
  --red:#ef4444;    --red-soft:#fdeaea;

  --radius-lg:18px;
  --radius-md:12px;
  --shadow: 0 1px 2px rgba(20,30,60,.04), 0 8px 24px rgba(20,30,60,.05);
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,Helvetica,Arial,sans-serif;
  background:var(--bg);
  color:var(--text);
  -webkit-font-smoothing:antialiased;
}

a{ text-decoration:none; color:inherit; }
button{ font-family:inherit; }
input,select,textarea{ font-family:inherit; }

/* ---------- shell ---------- */
.app-shell{ display:flex; min-height:100vh; }

.sidebar{
  width:250px;
  background:var(--card);
  border-right:1px solid var(--border);
  display:flex;
  flex-direction:column;
  padding:20px 14px;
  position:sticky;
  top:0;
  height:100vh;
}

.brand{ display:flex; align-items:center; gap:10px; padding:6px 8px 22px; }
.brand-mark{
  width:36px; height:36px; border-radius:11px;
  background:linear-gradient(135deg, var(--accent), #6d8bff);
  display:flex; align-items:center; justify-content:center;
  box-shadow:0 6px 14px rgba(59,91,253,.35);
}
.brand-name{ font-weight:700; font-size:15px; }
.brand-sub{ font-size:11.5px; color:var(--muted); }

.nav-group{ margin-bottom:18px; }
.nav-label{
  font-size:11px; font-weight:700; letter-spacing:.05em; text-transform:uppercase;
  color:var(--muted); padding:0 10px 8px;
}
.nav-item{
  display:flex; align-items:center; gap:10px;
  padding:10px 12px; border-radius:10px;
  color:var(--text); font-size:14px; font-weight:500;
  margin-bottom:2px;
  transition:background .12s ease;
}
.nav-item:hover{ background:#f4f6fc; }
.nav-item.active{ background:var(--accent-soft); color:var(--accent-dark); font-weight:600; }
.nav-ico{
  width:26px; height:26px; border-radius:8px;
  display:flex; align-items:center; justify-content:center;
  font-size:13px;
}
.ico-purple{ background:var(--purple-soft); color:var(--purple); }
.ico-blue{ background:var(--blue-soft); color:var(--blue); }
.ico-green{ background:var(--green-soft); color:var(--green); }
.ico-red{ background:var(--red-soft); color:var(--red); }

.sidebar-footer{ margin-top:auto; padding-top:14px; border-top:1px solid var(--border); }

.main{ flex:1; padding:26px 34px 60px; max-width:1240px; }

/* ---------- topbar ---------- */
.topbar{
  display:flex; align-items:flex-start; justify-content:space-between;
  margin-bottom:22px; gap:16px; flex-wrap:wrap;
}
.topbar h1{ margin:0 0 4px; font-size:24px; }
.topbar .sub{ margin:0; color:var(--muted); font-size:14px; }
.accent{ color:var(--accent); }
.topbar-actions{ display:flex; align-items:center; gap:10px; }

.pill{
  padding:8px 14px; border-radius:999px; font-size:13px; font-weight:600;
  background:var(--accent-soft); color:var(--accent-dark);
}
.pill-muted{ background:#f1f3f9; color:var(--muted); }
.pill-live{ background:var(--green-soft); color:var(--green); }

/* ---------- buttons ---------- */
.btn{
  border:1px solid var(--border); background:var(--card); color:var(--text);
  padding:10px 16px; border-radius:11px; font-size:13.5px; font-weight:600;
  cursor:pointer; transition:all .12s ease; display:inline-flex; align-items:center; gap:6px;
}
.btn:hover{ border-color:#d6ddf2; }
.btn:disabled{ opacity:.5; cursor:not-allowed; }
.btn-primary{ background:var(--accent); border-color:var(--accent); color:#fff; box-shadow:0 6px 14px rgba(59,91,253,.25); }
.btn-primary:hover{ background:var(--accent-dark); }
.btn-danger{ background:var(--red); border-color:var(--red); color:#fff; }
.btn-danger:hover{ background:#d63a3a; }
.btn-ghost{ background:var(--card); }
.btn-block{ width:100%; justify-content:center; }

/* ---------- stat cards ---------- */
.stat-grid{
  display:grid; grid-template-columns:repeat(4, 1fr); gap:16px; margin-bottom:22px;
}
.stat-card{
  background:var(--card); border:1px solid var(--border); border-radius:var(--radius-lg);
  padding:18px; box-shadow:var(--shadow);
}
.stat-ico{
  width:38px; height:38px; border-radius:11px; margin-bottom:12px;
  display:flex; align-items:center; justify-content:center; font-size:17px;
}
.stat-label{ font-size:13px; color:var(--muted); font-weight:600; margin-bottom:6px; }
.stat-value{ font-size:28px; font-weight:700; margin-bottom:2px; }
.stat-note{ font-size:12px; color:var(--muted); }

/* ---------- panels ---------- */
.panel-grid{ display:grid; grid-template-columns:1.4fr 1fr; gap:16px; align-items:start; }
.panel{
  background:var(--card); border:1px solid var(--border); border-radius:var(--radius-lg);
  padding:20px; box-shadow:var(--shadow); margin-bottom:16px;
}
.panel-head{ display:flex; align-items:center; gap:10px; margin-bottom:16px; flex-wrap:wrap; }
.panel-head h2{ font-size:15.5px; margin:0; flex:1; }
.panel-ico{
  width:28px; height:28px; border-radius:9px; background:var(--accent-soft); color:var(--accent);
  display:flex; align-items:center; justify-content:center; font-size:13px;
}

.chart-box{ height:220px; }

/* ---------- campaign status widget ---------- */
.campaign-status .cs-row{
  display:flex; justify-content:space-between; align-items:center;
  padding:8px 0; font-size:13.5px; border-bottom:1px dashed var(--border);
}
.campaign-status .cs-row span{ color:var(--muted); }
.progress-track{ height:8px; background:#eef1fb; border-radius:999px; margin-top:14px; overflow:hidden; }
.progress-fill{ height:100%; width:0%; background:linear-gradient(90deg,var(--accent),#6d8bff); border-radius:999px; transition:width .3s ease; }

.cs-stats{ display:flex; gap:10px; margin:16px 0 6px; }
.cs-stats > div{ flex:1; background:#f7f8fd; border-radius:12px; padding:12px; text-align:center; }
.cs-stats b{ display:block; font-size:18px; }
.cs-stats span{ font-size:11.5px; color:var(--muted); }

.muted{ color:var(--muted); }
.muted.small{ font-size:12px; line-height:1.5; margin:14px 0; }

/* ---------- tables ---------- */
.table-wrap{ overflow-x:auto; }
.data-table{ width:100%; border-collapse:collapse; font-size:13.5px; }
.data-table th{
  text-align:left; padding:10px 12px; color:var(--muted); font-weight:600; font-size:12px;
  text-transform:uppercase; letter-spacing:.03em; border-bottom:1px solid var(--border);
}
.data-table td{ padding:11px 12px; border-bottom:1px solid var(--border); }
.data-table tr:hover td{ background:#fafbff; }
.empty-row{ text-align:center; color:var(--muted); padding:30px !important; }

.status-badge{
  display:inline-block; padding:4px 10px; border-radius:999px; font-size:11.5px; font-weight:700;
}
.status-pending{ background:var(--blue-soft); color:var(--blue); }
.status-sent{ background:var(--green-soft); color:var(--green); }
.status-no_wp{ background:#fdf3e3; color:#c48b1c; }
.status-failed{ background:var(--red-soft); color:var(--red); }
.status-invalid{ background:#f1f3f9; color:var(--muted); }

.row-delete{ background:none; border:none; color:var(--muted); cursor:pointer; font-size:14px; }
.row-delete:hover{ color:var(--red); }

.filters{ display:flex; gap:8px; margin-left:auto; }
.filters input, .filters select{
  border:1px solid var(--border); border-radius:10px; padding:8px 12px; font-size:13px; background:#fff;
}

.pagination{ display:flex; gap:6px; justify-content:center; margin-top:16px; }
.pagination button{
  border:1px solid var(--border); background:#fff; border-radius:8px; padding:6px 12px;
  cursor:pointer; font-size:13px;
}
.pagination button.active{ background:var(--accent); color:#fff; border-color:var(--accent); }

/* ---------- schedule panel ---------- */
.schedule-add-row{ display:flex; gap:10px; margin-bottom:16px; }
.schedule-add-row input[type="time"]{
  border:1px solid var(--border); border-radius:10px; padding:9px 12px; font-size:14px; background:#fff;
}
.schedule-list{ display:flex; flex-direction:column; gap:10px; }
.schedule-row{
  display:flex; align-items:center; gap:14px; padding:12px 14px;
  background:#f9fafe; border:1px solid var(--border); border-radius:12px;
}
.schedule-time{ font-size:16px; font-weight:700; min-width:70px; }
.schedule-meta{ flex:1; font-size:12.5px; color:var(--muted); }
.schedule-toggle{
  position:relative; width:38px; height:22px; border-radius:999px; background:#d7dcef;
  border:none; cursor:pointer; flex-shrink:0;
}
.schedule-toggle::after{
  content:""; position:absolute; top:2px; left:2px; width:18px; height:18px; border-radius:50%;
  background:#fff; transition:left .15s ease; box-shadow:0 1px 3px rgba(0,0,0,.2);
}
.schedule-toggle.on{ background:var(--accent); }
.schedule-toggle.on::after{ left:18px; }
.schedule-del{ border:none; background:none; color:var(--muted); cursor:pointer; font-size:14px; }
.schedule-del:hover{ color:var(--red); }

/* ---------- messages page ---------- */
.var-chips{ display:flex; gap:8px; flex-wrap:wrap; margin-bottom:12px; }
.chip{
  border:1px dashed #c7cff0; background:var(--accent-soft); color:var(--accent-dark);
  border-radius:999px; padding:6px 12px; font-size:12.5px; font-weight:600; cursor:pointer;
}
.chip:hover{ background:#e2e7ff; }

#message-textarea{
  width:100%; border:1px solid var(--border); border-radius:14px; padding:16px;
  font-size:14px; line-height:1.6; resize:vertical; background:#fbfcff;
}
#message-textarea:focus{ outline:2px solid var(--accent-soft); border-color:var(--accent); }

.preview-panel{ margin-top:16px; }
.preview-bubble{
  background:#dcf8c6; border-radius:14px; border-top-left-radius:2px; padding:12px 14px;
  font-size:13.5px; line-height:1.55; max-width:85%; white-space:pre-wrap; word-break:break-word;
}

.action-row{ display:flex; align-items:center; gap:12px; margin-top:16px; }
.save-note{ font-size:12.5px; color:var(--green); font-weight:600; }

/* ---------- modal ---------- */
.modal-overlay{
  position:fixed; inset:0; background:rgba(20,26,46,.45); display:none;
  align-items:center; justify-content:center; z-index:50; padding:20px;
}
.modal-overlay.open{ display:flex; }
.modal{
  background:#fff; border-radius:18px; width:100%; max-width:480px; max-height:88vh;
  display:flex; flex-direction:column; box-shadow:0 20px 60px rgba(15,20,40,.25);
}
.modal-wide{ max-width:660px; }
.modal-head{
  display:flex; align-items:center; justify-content:space-between; padding:18px 22px;
  border-bottom:1px solid var(--border);
}
.modal-head h3{ margin:0; font-size:16px; }
.modal-close{ border:none; background:none; font-size:16px; cursor:pointer; color:var(--muted); }
.modal-body{ padding:20px 22px; overflow-y:auto; }
.modal-foot{ padding:16px 22px; border-top:1px solid var(--border); display:flex; justify-content:flex-end; gap:10px; }

.drop-zone{
  display:flex; flex-direction:column; align-items:center; gap:6px; text-align:center;
  border:2px dashed #ccd4f2; border-radius:16px; padding:40px 20px; cursor:pointer; background:#fbfcff;
}
.drop-zone:hover{ border-color:var(--accent); background:var(--accent-soft); }
.drop-ico{ font-size:26px; color:var(--accent); }

.mapping-table{ width:100%; border-collapse:collapse; margin-bottom:16px; font-size:13.5px; }
.mapping-table th{ text-align:left; padding:6px 8px; color:var(--muted); font-size:11.5px; text-transform:uppercase; }
.mapping-table td{ padding:6px 8px; }
.mapping-table select{
  width:100%; border:1px solid var(--border); border-radius:8px; padding:7px 8px; background:#fff;
}
.preview-box{ margin-top:6px; }
.result-box{ font-size:14px; line-height:1.9; }
.result-box b{ font-size:20px; }

/* ---------- login ---------- */
.login-body{
  height:100vh; margin:0; display:flex; align-items:center; justify-content:center;
  background:radial-gradient(circle at top, #f2f5ff 0%, var(--bg) 60%);
}
.login-card{
  background:#fff; border:1px solid var(--border); border-radius:22px; padding:38px 34px;
  width:100%; max-width:360px; text-align:center; box-shadow:var(--shadow);
}
.login-mark{ margin:0 auto 16px; }
.login-card h1{ margin:0 0 6px; font-size:22px; }
.login-sub{ color:var(--muted); font-size:13.5px; margin:0 0 22px; }
.login-form{ display:flex; flex-direction:column; gap:12px; }
.login-form input{
  border:1px solid var(--border); border-radius:12px; padding:12px 14px; font-size:14px; text-align:center;
}
.alert-error{
  background:var(--red-soft); color:var(--red); border-radius:10px; padding:9px 12px;
  font-size:13px; margin-bottom:14px;
}

/* ---------- toast ---------- */
#toast-root{ position:fixed; bottom:22px; right:22px; display:flex; flex-direction:column; gap:8px; z-index:100; }
.toast{
  background:#1c2333; color:#fff; padding:12px 16px; border-radius:12px; font-size:13.5px;
  box-shadow:0 12px 30px rgba(0,0,0,.25); animation:toast-in .18s ease;
}
.toast.error{ background:var(--red); }
.toast.success{ background:var(--green); }
@keyframes toast-in{ from{ opacity:0; transform:translateY(8px);} to{opacity:1; transform:translateY(0);} }

/* ---------- responsive ---------- */
@media (max-width: 980px){
  .panel-grid{ grid-template-columns:1fr; }
  .stat-grid{ grid-template-columns:repeat(2,1fr); }
}
@media (max-width: 720px){
  .app-shell{ flex-direction:column; }
  .sidebar{ width:100%; height:auto; position:relative; flex-direction:row; align-items:center; overflow-x:auto; }
  .nav-group{ margin-bottom:0; }
  .sidebar-footer{ margin-top:0; padding-top:0; border-top:none; border-left:1px solid var(--border); padding-left:10px; }
  .main{ padding:18px; }
  .stat-grid{ grid-template-columns:1fr 1fr; }
}
