*{box-sizing:border-box;margin:0;padding:0;-webkit-font-smoothing:antialiased}
:root{
  --bg:#0D1117;--bg2:#161C27;--bg3:#1E2637;--bg4:#252E42;--bg5:#2D3850;
  --border:#242E40;--border2:#2E3A52;--border3:#3A4860;
  --text:#E2E6F0;--text2:#8892AA;--text3:#4E5A72;--text4:#3A4558;
  --green:#22D488;--green2:#1ABD78;--green-dim:rgba(34,212,136,.1);--green-glow:rgba(34,212,136,.2);
  --red:#FF3E5E;--red2:#E8354F;--red-dim:rgba(255,62,94,.1);--red-glow:rgba(255,62,94,.2);
  --amber:#F59E0B;--amber-dim:rgba(245,158,11,.1);--amber-glow:rgba(245,158,11,.2);
  --blue:#3B82F6;--blue2:#2563EB;--blue-dim:rgba(59,130,246,.1);--blue-glow:rgba(59,130,246,.2);
  --purple:#8B5CF6;--purple-dim:rgba(139,92,246,.1);
  --teal:#06B6D4;--teal-dim:rgba(6,182,212,.1);
  --r6:6px;--r8:8px;--r10:10px;--r12:12px;--r16:16px;
  --shadow:0 1px 3px rgba(0,0,0,.4),0 4px 12px rgba(0,0,0,.2);
  --shadow-lg:0 4px 16px rgba(0,0,0,.5);
  --trans:.15s ease;
}
html,body{height:100%;overflow:hidden}
body{font-family:'DM Sans',system-ui,sans-serif;background:var(--bg);color:var(--text);font-size:13px;line-height:1.5}
a{text-decoration:none;color:inherit}
button,input,select,textarea{font-family:inherit;outline:none;border:none}
::-webkit-scrollbar{width:4px;height:4px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--border3);border-radius:10px}

/* LAYOUT */
#app{display:flex;height:100vh;overflow:hidden}
#sidebar{width:224px;min-width:224px;background:var(--bg2);border-right:1px solid var(--border);display:flex;flex-direction:column;z-index:20}
#main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
#page{flex:1;overflow-y:auto}
.page-inner{padding:20px 22px 28px}

/* SIDEBAR */
.sb-logo{padding:16px 14px 14px;border-bottom:1px solid var(--border);flex-shrink:0}
.sb-logo-wrap{display:flex;align-items:center;gap:10px}
.sb-logo-icon{width:32px;height:32px;border-radius:9px;background:linear-gradient(135deg,#3B82F6,#8B5CF6);display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:0 2px 8px rgba(59,130,246,.4)}
.sb-logo-text{font-size:14px;font-weight:700;letter-spacing:-.4px}
.sb-logo-ver{font-size:10px;color:var(--text3);font-family:'DM Mono',monospace;margin-top:1px}
.sb-nav{flex:1;overflow-y:auto;padding:10px 8px;display:flex;flex-direction:column;gap:1px}
.sb-sec-label{font-size:9.5px;font-weight:700;letter-spacing:.9px;text-transform:uppercase;color:var(--text4);padding:10px 10px 4px;margin-top:2px}
.nav-btn{display:flex;align-items:center;gap:9px;padding:7px 10px;border-radius:var(--r6);color:var(--text3);font-size:12.5px;font-weight:500;transition:all var(--trans);position:relative}
.nav-btn:hover{background:var(--bg3);color:var(--text2)}
.nav-btn.active{background:rgba(59,130,246,.12);color:var(--blue)}
.nav-btn.active::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:2.5px;height:18px;background:var(--blue);border-radius:0 3px 3px 0}
.nav-btn i{font-size:15px;width:16px;text-align:center;flex-shrink:0}
.nav-btn span:not(.nav-badge){flex:1}
.nav-badge{font-size:9px;font-weight:800;padding:2px 5px;border-radius:20px}
.badge-red{background:var(--red);color:#fff}
.badge-amber{background:var(--amber);color:#0D1117}
.sb-footer{padding:12px 14px;border-top:1px solid var(--border);flex-shrink:0}
.sb-server{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:var(--r8);cursor:default}
.sb-server-dot{width:8px;height:8px;border-radius:50%;background:var(--green);flex-shrink:0;animation:pulse-dot 2.5s ease-in-out infinite;box-shadow:0 0 0 2px var(--green-dim)}
@keyframes pulse-dot{0%,100%{box-shadow:0 0 0 2px var(--green-dim)}50%{box-shadow:0 0 0 4px var(--green-dim)}}
.sb-server-name{font-size:12px;font-weight:600}
.sb-server-ip{font-size:10px;color:var(--text3);font-family:'DM Mono',monospace;margin-top:1px}

/* TOPBAR */
#topbar{background:var(--bg2);border-bottom:1px solid var(--border);padding:13px 22px;display:flex;align-items:center;gap:12px;flex-shrink:0;z-index:10}
.topbar-info{flex:1;min-width:0}
.topbar-title{font-size:15px;font-weight:700;letter-spacing:-.3px}
.topbar-sub{font-size:11px;color:var(--text3);margin-top:1px}
.topbar-acts{display:flex;align-items:center;gap:6px;flex-shrink:0}
.user-avatar{width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,var(--blue),var(--purple));display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;color:#fff;cursor:pointer}
.user-menu{position:absolute;right:0;top:36px;background:var(--bg3);border:1px solid var(--border2);border-radius:var(--r10);width:180px;box-shadow:var(--shadow-lg);z-index:100}
.user-menu-item{display:flex;align-items:center;gap:8px;padding:9px 14px;font-size:12.5px;color:var(--text2);transition:background var(--trans)}
.user-menu-item:hover{background:var(--bg4);color:var(--text)}
.user-menu-item i{font-size:14px}
.hidden{display:none!important}

/* BUTTONS */
.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border-radius:var(--r6);font-size:12px;font-weight:500;transition:all var(--trans);cursor:pointer}
.btn i{font-size:13px}
.btn-ghost{background:transparent;color:var(--text2);border:1px solid var(--border2)}
.btn-ghost:hover{background:var(--bg3);color:var(--text);border-color:var(--border3)}
.btn-primary{background:var(--blue);color:#fff;border:1px solid var(--blue)}
.btn-primary:hover{background:var(--blue2)}
.btn-success{background:var(--green);color:#0D1117;border:1px solid var(--green);font-weight:700}
.btn-danger{background:var(--red-dim);color:var(--red);border:1px solid rgba(255,62,94,.3)}
.btn-sm{padding:5px 10px;font-size:11.5px}
.btn-icon{padding:6px;width:30px;height:30px;justify-content:center}
.w-full{width:100%;justify-content:center}

/* CARDS */
.card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r10)}
.card-head{display:flex;align-items:center;gap:8px;padding:13px 16px;border-bottom:1px solid var(--border)}
.card-title{font-size:12.5px;font-weight:700;flex:1;letter-spacing:-.1px}
.card-body{padding:16px}

/* TAGS */
.tag{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;padding:3px 8px;border-radius:20px;letter-spacing:.2px}
.tag i{font-size:11px}
.tag-green{background:var(--green-dim);color:var(--green);border:1px solid var(--green-glow)}
.tag-red{background:var(--red-dim);color:var(--red);border:1px solid var(--red-glow)}
.tag-amber{background:var(--amber-dim);color:var(--amber);border:1px solid var(--amber-glow)}
.tag-blue{background:var(--blue-dim);color:var(--blue);border:1px solid var(--blue-glow)}
.tag-purple{background:var(--purple-dim);color:var(--purple)}
.tag-teal{background:var(--teal-dim);color:var(--teal)}
.tag-gray{background:var(--bg3);color:var(--text2);border:1px solid var(--border2)}

/* STATS */
.stats-row{display:grid;gap:12px;margin-bottom:18px}
.stats-4{grid-template-columns:repeat(4,1fr)}
.stats-3{grid-template-columns:repeat(3,1fr)}
.stat-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--r10);padding:15px 16px;position:relative;overflow:hidden;cursor:pointer;transition:border-color var(--trans)}
.stat-card:hover{border-color:var(--border3)}
.stat-accent{position:absolute;left:0;top:0;bottom:0;width:3px;border-radius:var(--r10) 0 0 var(--r10)}
.stat-lbl{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--text3);margin-bottom:10px;display:flex;align-items:center;gap:5px}
.stat-lbl i{font-size:13px}
.stat-num{font-size:26px;font-weight:700;letter-spacing:-1.2px;line-height:1}
.stat-num .unit{font-size:13px;font-weight:400;color:var(--text3);margin-left:2px}
.stat-meta{margin-top:7px;font-size:11px;color:var(--text3);display:flex;align-items:center;gap:5px}
.stat-up{color:var(--green)}
.stat-down{color:var(--red)}
.stat-warn{color:var(--amber)}

/* TABLE */
.table-wrap{overflow-x:auto}
table{width:100%;border-collapse:collapse}
thead th{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--text3);padding:10px 14px;border-bottom:1px solid var(--border);white-space:nowrap;text-align:left}
tbody tr{border-bottom:1px solid var(--border);transition:background var(--trans)}
tbody tr:last-child{border-bottom:none}
tbody tr:hover{background:var(--bg3)}
tbody td{padding:11px 14px;font-size:12.5px;vertical-align:middle}
.td-site{display:flex;align-items:center;gap:10px}
.site-favicon{width:26px;height:26px;border-radius:6px;background:var(--bg4);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;flex-shrink:0}
.site-title{font-weight:700;font-size:13px}
.site-url{font-size:10.5px;color:var(--text3);font-family:'DM Mono',monospace;margin-top:1px}

/* STATUS DOT */
.status-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;display:inline-block}
.dot-green{background:var(--green);box-shadow:0 0 5px var(--green-glow)}
.dot-red{background:var(--red);box-shadow:0 0 5px var(--red-glow)}
.dot-amber{background:var(--amber);box-shadow:0 0 5px var(--amber-glow)}

/* PROGRESS */
.prog-track{background:var(--bg4);border-radius:3px;overflow:hidden}
.prog-fill{height:100%;border-radius:3px;transition:width .4s}
.prog-row{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.prog-label{font-size:11px;color:var(--text2);min-width:48px}
.prog-val{font-size:11px;font-weight:600;font-family:'DM Mono',monospace;min-width:38px;text-align:right}

/* GRID */
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}
.col-6040{display:grid;grid-template-columns:1.6fr 1fr;gap:14px}
.col-7030{display:grid;grid-template-columns:2fr 1fr;gap:14px}
.mb-14{margin-bottom:14px}
.mb-18{margin-bottom:18px}

/* ALERT ITEM */
.alert-item{display:flex;align-items:flex-start;gap:10px;padding:11px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background var(--trans)}
.alert-item:last-child{border-bottom:none}
.alert-item:hover{background:var(--bg3)}
.alert-icon-wrap{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.alert-icon-wrap i{font-size:14px}
.ai-red{background:var(--red-dim);color:var(--red)}
.ai-amber{background:var(--amber-dim);color:var(--amber)}
.ai-blue{background:var(--blue-dim);color:var(--blue)}
.ai-green{background:var(--green-dim);color:var(--green)}
.ai-purple{background:var(--purple-dim);color:var(--purple)}
.alert-text{flex:1;min-width:0}
.alert-title{font-size:12.5px;font-weight:700;margin-bottom:2px}
.alert-desc{font-size:11px;color:var(--text3)}

/* FORM */
.form-group{margin-bottom:14px}
.form-label{font-size:11px;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;display:block}
.form-input{width:100%;padding:8px 12px;background:var(--bg3);border:1px solid var(--border2);border-radius:var(--r6);color:var(--text);font-size:13px;transition:border-color var(--trans)}
.form-input:focus{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-dim)}
.form-select{width:100%;padding:8px 12px;background:var(--bg3);border:1px solid var(--border2);border-radius:var(--r6);color:var(--text);font-size:13px;cursor:pointer}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.form-error{color:var(--red);font-size:11px;margin-top:4px}

/* TOGGLE */
.toggle{position:relative;width:36px;height:20px;flex-shrink:0}
.toggle input{opacity:0;width:0;height:0;position:absolute}
.toggle-track{position:absolute;inset:0;background:var(--bg4);border-radius:10px;cursor:pointer;border:1px solid var(--border2);transition:all var(--trans)}
.toggle input:checked~.toggle-track{background:var(--blue);border-color:var(--blue)}
.toggle-thumb{position:absolute;top:2px;left:2px;width:14px;height:14px;background:#fff;border-radius:50%;transition:transform var(--trans);box-shadow:0 1px 3px rgba(0,0,0,.3);pointer-events:none}
.toggle input:checked~.toggle-track~.toggle-thumb{transform:translateX(16px)}
.toggle-wrap{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--border)}
.toggle-wrap:last-child{border-bottom:none}
.toggle-info{flex:1}
.toggle-name{font-size:13px;font-weight:600}
.toggle-desc{font-size:11px;color:var(--text3);margin-top:2px}

/* UPTIME TIMELINE */
.uptime-timeline{display:flex;gap:2px;height:20px}
.ut-seg{flex:1;border-radius:2px;cursor:pointer;transition:opacity var(--trans)}
.ut-seg:hover{opacity:.7}
.ut-green{background:var(--green)}
.ut-red{background:var(--red)}
.ut-amber{background:var(--amber)}
.ut-gray{background:var(--bg4)}

/* TOAST */
#toast-container{position:fixed;bottom:20px;right:20px;z-index:9999;display:flex;flex-direction:column;gap:8px}
.toast{background:var(--bg3);border:1px solid var(--border2);border-radius:var(--r8);padding:10px 14px;display:flex;align-items:center;gap:10px;box-shadow:var(--shadow-lg);min-width:240px;max-width:320px;transform:translateX(110%);transition:transform .25s;font-size:12.5px}
.toast.show{transform:translateX(0)}

/* MODAL */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:1000;display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .2s;backdrop-filter:blur(3px)}
.modal-overlay.open{opacity:1;pointer-events:all}
.modal-box{background:var(--bg2);border:1px solid var(--border2);border-radius:var(--r16);width:500px;max-width:calc(100vw - 40px);max-height:85vh;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);transform:scale(.96);transition:transform .2s}
.modal-overlay.open .modal-box{transform:scale(1)}
.modal-head{display:flex;align-items:center;gap:10px;padding:18px 22px;border-bottom:1px solid var(--border);flex-shrink:0}
.modal-head-icon{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.modal-title{font-size:14px;font-weight:700;flex:1}
.modal-close{width:28px;height:28px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text3);transition:all var(--trans);background:transparent;border:1px solid transparent}
.modal-close:hover{background:var(--bg4);color:var(--text)}
.modal-body{padding:20px 22px;overflow-y:auto;flex:1}
.modal-foot{padding:14px 22px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end;flex-shrink:0}

/* DETAIL GRID */
.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:16px}
.detail-cell{background:var(--bg3);border-radius:var(--r8);padding:12px 14px;border:1px solid var(--border)}
.detail-cell-lbl{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--text3);margin-bottom:5px}
.detail-cell-val{font-size:15px;font-weight:700;letter-spacing:-.3px}
.detail-cell-sub{font-size:10px;color:var(--text3);margin-top:3px}

/* EMPTY STATE */
.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;gap:12px;text-align:center}
.empty-icon{width:52px;height:52px;border-radius:14px;background:var(--bg3);display:flex;align-items:center;justify-content:center}
.empty-icon i{font-size:24px;color:var(--text3)}

/* MISC */
.sec-divider{border:none;border-top:1px solid var(--border);margin:16px 0}
.text-mono{font-family:'DM Mono',monospace}
.text-green{color:var(--green)}.text-red{color:var(--red)}.text-amber{color:var(--amber)}.text-blue{color:var(--blue)}.text-muted{color:var(--text3)}
@keyframes spin{to{transform:rotate(360deg)}}
.spin{animation:spin .7s linear infinite}

/* LOGIN PAGE */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg);overflow:auto}
.login-card{background:var(--bg2);border:1px solid var(--border2);border-radius:var(--r16);padding:36px 32px;width:380px;box-shadow:var(--shadow-lg)}
.login-logo{display:flex;align-items:center;gap:12px;margin-bottom:28px;justify-content:center}

/* ============================================================
   LIGHT THEME
   Tambahkan class "light" ke <html> untuk aktifkan
   ============================================================ */
.light {
  --bg:#F0F2F5;--bg2:#FFFFFF;--bg3:#F4F6FA;--bg4:#E8ECF4;--bg5:#DDE3F0;
  --border:#DDE1EC;--border2:#C8CEDF;--border3:#B0B9D0;
  --text:#111827;--text2:#374151;--text3:#6B7280;--text4:#9CA3AF;
  --green:#059669;--green2:#047857;--green-dim:rgba(5,150,105,.1);--green-glow:rgba(5,150,105,.2);
  --red:#DC2626;--red2:#B91C1C;--red-dim:rgba(220,38,38,.1);--red-glow:rgba(220,38,38,.2);
  --amber:#D97706;--amber-dim:rgba(217,119,6,.1);--amber-glow:rgba(217,119,6,.2);
  --blue:#2563EB;--blue2:#1D4ED8;--blue-dim:rgba(37,99,235,.1);--blue-glow:rgba(37,99,235,.2);
  --purple:#7C3AED;--purple-dim:rgba(124,58,237,.1);
  --teal:#0891B2;--teal-dim:rgba(8,145,178,.1);
  --shadow:0 1px 3px rgba(0,0,0,.1),0 4px 12px rgba(0,0,0,.06);
  --shadow-lg:0 4px 16px rgba(0,0,0,.12);
}
.light html,
.light body {
  background:var(--bg);
  color:var(--text);
}
/* Sidebar light */
.light #sidebar { background:var(--bg2); border-color:var(--border); }
.light #topbar  { background:var(--bg2); border-color:var(--border); }
/* Card light */
.light .card    { background:var(--bg2); border-color:var(--border); }
/* Nav buttons light */
.light .nav-btn { color:var(--text3); }
.light .nav-btn:hover { background:var(--bg3); color:var(--text2); }
.light .nav-btn.active { background:var(--blue-dim); color:var(--blue); }
/* Stat card */
.light .stat-card { background:var(--bg2); border-color:var(--border); }
/* Inputs */
.light select,
.light input,
.light textarea { background:var(--bg3); border-color:var(--border2); color:var(--text); }
/* Table rows */
.light tbody tr:hover { background:var(--bg3); }
/* Buttons */
.light .btn-ghost { background:transparent; border-color:var(--border2); color:var(--text2); }
.light .btn-ghost:hover { background:var(--bg3); color:var(--text); }