:root {
  --sidebar-bg:#1a2540;
  --sidebar-text:#9aa6c4;
  --sidebar-active-bg:#2d4574;
  --primary:#2563eb;
  --primary-hover:#1d4ed8;
  --bg:#f4f6fb;
  --card:#fff;
  --border:#e5e7eb;
  --text:#1f2937;
  --text-muted:#6b7280;
  --status-wait-bg:#f1f5f9;
  --status-wait-text:#475569;
  --status-sending-bg:#dbeafe;
  --status-sending-text:#1d4ed8;
  --status-fail-bg:#fee2e2;
  --status-fail-text:#b91c1c;
  --danger:#ef4444;
  --warning:#f59e0b;
  --success:#10b981;
}

*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  font-family:-apple-system,BlinkMacSystemFont,'Pretendard','Noto Sans KR','맑은 고딕',Arial,sans-serif;
  background:var(--bg);
  color:var(--text);
  font-size:14px;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
button{font-family:inherit}

/* Layout */
.layout{display:flex;min-height:100vh}
.sidebar{
  width:230px;background:var(--sidebar-bg);color:var(--sidebar-text);
  display:flex;flex-direction:column;flex-shrink:0;
}
.sidebar-brand{
  padding:22px 20px 26px;display:flex;gap:10px;align-items:center;color:#fff;
  font-weight:700;font-size:15px;letter-spacing:-.2px;
}
.sidebar-brand-icon{
  width:24px;height:24px;border-radius:6px;
  background:linear-gradient(135deg,#3b82f6 0%,#60a5fa 100%);
  display:inline-block;
}
.sidebar-nav{flex:1;padding:6px 12px}
.sidebar-item{
  display:flex;align-items:center;gap:11px;padding:11px 14px;
  border-radius:8px;color:var(--sidebar-text);
  font-size:14px;margin-bottom:4px;cursor:pointer;
}
.sidebar-item:hover{background:rgba(255,255,255,.05);color:#fff}
.sidebar-item.active{background:var(--sidebar-active-bg);color:#fff;font-weight:600}
.sidebar-item svg{width:18px;height:18px;flex-shrink:0}
.sidebar-bottom{padding:8px 12px 16px;border-top:1px solid rgba(255,255,255,.06)}

.main{flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{
  background:#fff;border-bottom:1px solid var(--border);
  padding:10px 28px;display:flex;justify-content:flex-end;align-items:center;gap:12px;
  height:56px;
}
.user-chip{display:flex;align-items:center;gap:8px;font-size:13px}
.user-avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#cbd5e1,#94a3b8)}

.content{padding:24px 28px;flex:1}
.page-title{font-size:22px;font-weight:700;margin:0 0 4px}
.page-desc{color:var(--text-muted);margin:0 0 20px;font-size:13px}

/* Tabs */
.tabs{display:flex;gap:24px;border-bottom:1px solid var(--border);margin-bottom:18px}
.tab{
  padding:10px 0;cursor:pointer;color:var(--text-muted);
  font-weight:500;border-bottom:2px solid transparent;transition:.15s;
}
.tab:hover{color:var(--text)}
.tab.active{color:var(--primary);border-bottom-color:var(--primary);font-weight:600}

/* Toolbar */
.toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap}
.toolbar-left{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.toolbar-right{display:flex;gap:8px;align-items:center}

/* Form controls */
.input,.select{
  padding:8px 12px;border:1px solid var(--border);border-radius:8px;
  background:#fff;font-size:13px;color:var(--text);height:36px;
  font-family:inherit;
}
.input:focus,.select:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.1)}
textarea.input{height:auto;padding:10px 12px;resize:vertical}

.btn{
  padding:8px 14px;border:0;border-radius:8px;font-weight:600;cursor:pointer;
  font-size:13px;height:36px;display:inline-flex;align-items:center;gap:6px;
  transition:.15s;font-family:inherit;
}
.btn-primary{background:var(--primary);color:#fff}
.btn-primary:hover{background:var(--primary-hover)}
.btn-ghost{background:#fff;color:var(--text);border:1px solid var(--border)}
.btn-ghost:hover{background:#f9fafb}
.btn-icon{
  padding:6px;height:30px;width:30px;background:transparent;color:var(--text-muted);
  display:inline-flex;align-items:center;justify-content:center;border-radius:6px;
}
.btn-icon:hover{background:#f1f5f9;color:var(--primary)}
.btn-icon.danger:hover{color:var(--danger)}
.btn[disabled]{opacity:.5;cursor:not-allowed}

/* Table */
.table-wrap{
  background:var(--card);border:1px solid var(--border);
  border-radius:12px;overflow:hidden;
}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{padding:12px 14px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}
th{
  background:#f9fafb;font-weight:600;color:var(--text-muted);font-size:12px;
  letter-spacing:-.1px;
}
tbody tr:last-child td{border-bottom:0}
tbody tr:hover{background:#fafbfd}
td.center,th.center{text-align:center}
td.truncate{max-width:280px;overflow:hidden;text-overflow:ellipsis}
td a.link-text{color:var(--primary)}

.app-tag{display:inline-flex;align-items:center;gap:8px;font-weight:600}
.app-icon{width:18px;height:18px;border-radius:5px;display:inline-block;flex-shrink:0}

.status{
  display:inline-block;padding:3px 10px;border-radius:999px;
  font-size:11px;font-weight:700;letter-spacing:-.1px;
}
.status-wait{background:var(--status-wait-bg);color:var(--status-wait-text)}
.status-sending{background:var(--status-sending-bg);color:var(--status-sending-text)}
.status-fail{background:var(--status-fail-bg);color:var(--status-fail-text)}
.status-done{background:#dcfce7;color:#15803d}

.cell-actions{display:inline-flex;gap:4px}

/* Pagination */
.pagination{display:flex;justify-content:center;gap:4px;padding:18px 0}
.pagination button{
  min-width:32px;height:32px;padding:0 10px;border:1px solid var(--border);
  background:#fff;border-radius:6px;cursor:pointer;font-size:13px;color:var(--text);
}
.pagination button:hover:not([disabled]){border-color:var(--primary);color:var(--primary)}
.pagination button.active{background:var(--primary);color:#fff;border-color:var(--primary)}
.pagination button[disabled]{opacity:.4;cursor:not-allowed}

/* Modal */
.modal-overlay{
  position:fixed;inset:0;background:rgba(15,23,42,.5);
  display:none;align-items:center;justify-content:center;z-index:100;
}
.modal-overlay.show{display:flex}
.modal{
  background:#fff;width:480px;max-width:calc(100vw - 24px);
  max-height:calc(100vh - 24px);border-radius:14px;overflow:hidden;
  display:flex;flex-direction:column;box-shadow:0 20px 50px rgba(15,23,42,.25);
}
.modal-head{
  padding:18px 22px;display:flex;justify-content:space-between;align-items:center;
  border-bottom:1px solid var(--border);
}
.modal-title{font-size:16px;font-weight:700;margin:0}
.modal-close{
  background:none;border:0;font-size:22px;cursor:pointer;color:var(--text-muted);
  width:30px;height:30px;border-radius:6px;line-height:1;
}
.modal-close:hover{background:#f1f5f9;color:var(--text)}
.modal-body{padding:18px 22px;overflow:auto;flex:1}
.modal-foot{padding:14px 22px;border-top:1px solid var(--border)}
.modal.modal-wide{width:640px}

.modal-tabs{display:flex;border-bottom:1px solid var(--border);padding:0 22px;gap:18px}
.modal-tab{
  border:0;background:transparent;padding:12px 0;font-size:13px;font-weight:600;
  color:var(--text-muted);cursor:pointer;border-bottom:2px solid transparent;
  font-family:inherit;
}
.modal-tab:hover{color:var(--text)}
.modal-tab.active{color:var(--primary);border-bottom-color:var(--primary)}

.bulk-textarea{
  width:100%;font-family:'Consolas','Menlo','D2Coding',monospace;
  font-size:12.5px;line-height:1.55;white-space:pre;
  padding:12px;border:1px solid var(--border);border-radius:8px;
  resize:vertical;min-height:200px;
}
.bulk-textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(37,99,235,.1)}

/* Form rows */
.form-row{margin-bottom:14px}
.form-row label{display:block;font-size:13px;font-weight:600;margin-bottom:6px}
.form-row .input,.form-row textarea,.form-row select{width:100%}
.form-row .help{font-size:12px;color:var(--text-muted);margin-top:4px}

/* App pick (multi-select boxes) */
.app-pick{display:flex;gap:8px;flex-wrap:wrap}
.app-pick label{
  display:inline-flex;align-items:center;gap:7px;padding:8px 12px;
  border:2px solid var(--border);border-radius:10px;cursor:pointer;
  font-weight:600;font-size:13px;user-select:none;background:#fff;transition:.15s;
}
.app-pick input{display:none}
.app-pick label.checked{border-color:var(--primary);background:#eff6ff}
.app-pick label .app-icon{width:16px;height:16px;border-radius:4px}

.row-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.row-grid-2 .form-row{margin-bottom:0}
.time-grid{display:flex;gap:6px}
.time-grid .select{flex:1}

/* Empty state */
.empty{padding:60px 20px;text-align:center;color:var(--text-muted)}

/* Stats delta (변화량) */
.delta{font-weight:700;font-size:13px}
.delta-up{color:#dc2626}
.delta-down{color:#2563eb}
.delta-zero{color:var(--text-muted)}
.stats-foot-note{margin-top:18px;font-size:12px;color:var(--text-muted);text-align:center}

/* Login */
.login-body{background:linear-gradient(135deg,#1e3a8a 0%,#1e293b 100%);min-height:100vh}
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}
.login-card{
  width:100%;max-width:380px;background:#fff;border-radius:16px;
  padding:32px;box-shadow:0 20px 50px rgba(0,0,0,.2);
}
.login-brand{display:flex;align-items:center;gap:8px;margin-bottom:18px;font-size:14px;color:var(--text-muted)}
.login-title{font-size:22px;margin:0 0 18px;color:var(--text)}
.login-error{
  background:#fee2e2;color:#b91c1c;padding:10px 12px;border-radius:8px;
  margin-bottom:14px;font-size:13px;
}

/* Toast */
.toast{
  position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(20px);
  background:#1f2937;color:#fff;padding:10px 18px;border-radius:8px;font-size:13px;
  opacity:0;transition:.2s;z-index:200;pointer-events:none;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.error{background:#b91c1c}
.toast.success{background:#15803d}

/* Responsive */
@media (max-width:900px){
  .sidebar{width:64px}
  .sidebar-brand-text,.sidebar-item-text{display:none}
  .sidebar-brand{justify-content:center;padding:18px 0}
  .sidebar-item{justify-content:center;padding:11px 0}
  .content{padding:16px}
  .row-grid-2{grid-template-columns:1fr}
}
