
*{margin:0;padding:0;box-sizing:border-box;}
body{font-family:'Plus Jakarta Sans',sans-serif;background:#f0f4f8;color:#1e293b;display:flex;flex-direction:column;height:100vh;overflow:hidden;}

.topbar{background:#1e2a38;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 24px;height:48px;flex-shrink:0;}
.topbar-title{font-weight:600;font-size:0.88rem;display:flex;align-items:center;gap:8px;}
.live-badge{font-size:0.7rem;font-weight:600;padding:3px 12px;border-radius:20px;display:flex;align-items:center;gap:5px;transition:background 0.3s;}
.live-badge.online{background:#16a34a;}
.live-badge.offline{background:#dc2626;}
.live-badge.loading{background:#d97706;}
.live-badge::before{content:'';width:6px;height:6px;border-radius:50%;background:#fff;animation:blink 1.2s infinite;}
@keyframes blink{0%,100%{opacity:1}50%{opacity:0.3}}

.layout{display:flex;flex:1;overflow:hidden;}
.sidebar{width:195px;background:#fff;border-right:1px solid #e2e8f0;flex-shrink:0;display:flex;flex-direction:column;}
.sidebar-logo{padding:16px 18px 14px;display:flex;align-items:center;gap:8px;border-bottom:1px solid #e2e8f0;font-weight:700;font-size:0.85rem;}
.menu-label{padding:14px 18px 6px;font-size:0.63rem;font-weight:700;color:#94a3b8;letter-spacing:1.5px;text-transform:uppercase;}
.nav-item{display:flex;align-items:center;gap:9px;padding:9px 14px;margin:1px 8px;border-radius:8px;font-size:0.81rem;font-weight:500;color:#475569;cursor:pointer;transition:all 0.15s;}
.nav-item:hover{background:#f1f5f9;color:#1e293b;}
.nav-item.active{background:#0d9488;color:#fff;font-weight:600;}
.nav-item svg{width:15px;height:15px;flex-shrink:0;}
.notif-badge{margin-left:auto;background:#ef4444;color:#fff;font-size:0.6rem;font-weight:700;padding:1px 6px;border-radius:10px;}

.main{flex:1;overflow-y:auto;padding:20px 22px;}
.page{display:none;}
.page.active{display:block;}

.page-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;}
.page-title{font-size:1.35rem;font-weight:700;color:#0f172a;}
.last-update{font-size:0.72rem;color:#64748b;display:flex;align-items:center;gap:5px;}

/* API ERROR BANNER */
.api-error{display:none;align-items:center;gap:10px;padding:10px 16px;margin-bottom:14px;background:#fef2f2;border:1px solid #fecaca;border-radius:10px;font-size:0.78rem;color:#b91c1c;}
.api-error.show{display:flex;}

.cards-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:16px;}
.stat-card{background:#fff;border-radius:12px;padding:16px 18px;border:1px solid #e2e8f0;box-shadow:0 1px 3px rgba(0,0,0,0.05);transition:box-shadow 0.2s;}
.stat-card:hover{box-shadow:0 4px 14px rgba(0,0,0,0.09);}
.stat-label{font-size:0.75rem;color:#64748b;font-weight:500;margin-bottom:6px;}
.stat-value{font-size:1.55rem;font-weight:700;color:#0d9488;margin-bottom:8px;line-height:1;transition:color 0.3s;}
.stat-status{display:flex;align-items:center;gap:6px;font-size:0.73rem;font-weight:500;}
.dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}
.dot-green{background:#16a34a;}.dot-yellow{background:#d97706;}.dot-red{background:#dc2626;}
.status-green{color:#15803d;}.status-yellow{color:#b45309;}.status-red{color:#b91c1c;}
.skeleton{background:linear-gradient(90deg,#f1f5f9 25%,#e2e8f0 50%,#f1f5f9 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;border-radius:6px;color:transparent!important;}
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}

.charts-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.chart-card{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:16px 18px;box-shadow:0 1px 3px rgba(0,0,0,0.05);}
.chart-title{display:flex;align-items:center;gap:7px;font-size:0.85rem;font-weight:700;color:#0f172a;margin-bottom:12px;}
.chart-wrap{position:relative;height:175px;}

/* GRAFIK */
.grafik-controls{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap;}
.grafik-controls select,.grafik-controls input{padding:7px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:0.78rem;font-family:inherit;color:#1e293b;background:#fff;outline:none;}
.grafik-controls select:focus{border-color:#0d9488;}
.btn{padding:7px 16px;border-radius:8px;border:none;font-size:0.78rem;font-weight:600;font-family:inherit;cursor:pointer;transition:all 0.15s;}
.btn-primary{background:#0d9488;color:#fff;}.btn-primary:hover{background:#0b7b70;}
.btn-secondary{background:#f1f5f9;color:#475569;border:1px solid #e2e8f0;}.btn-secondary:hover{background:#e2e8f0;}
.big-chart-wrap{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:18px 20px;box-shadow:0 1px 3px rgba(0,0,0,0.05);}
.big-chart-canvas{position:relative;height:320px;}
.grafik-stats-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:16px;}
.mini-stat{background:#fff;border-radius:10px;padding:14px 16px;border:1px solid #e2e8f0;box-shadow:0 1px 3px rgba(0,0,0,0.04);}
.mini-stat-label{font-size:0.7rem;color:#64748b;margin-bottom:4px;}
.mini-stat-val{font-size:1.1rem;font-weight:700;color:#0d9488;}
.mini-stat-sub{font-size:0.68rem;color:#94a3b8;margin-top:2px;}

/* HISTORIS */
.table-controls{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap;}
.search-box{padding:7px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:0.78rem;font-family:inherit;outline:none;width:200px;}
.search-box:focus{border-color:#0d9488;}
.table-wrap{background:#fff;border-radius:12px;border:1px solid #e2e8f0;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,0.05);}
.data-table{width:100%;border-collapse:collapse;font-size:0.78rem;}
.data-table thead tr{background:#f8fafc;border-bottom:2px solid #e2e8f0;}
.data-table th{padding:11px 14px;text-align:left;font-weight:600;color:#475569;font-size:0.7rem;text-transform:uppercase;letter-spacing:0.5px;white-space:nowrap;}
.data-table td{padding:9px 14px;border-bottom:1px solid #f1f5f9;color:#334155;white-space:nowrap;}
.data-table tbody tr:last-child td{border-bottom:none;}
.data-table tbody tr:hover td{background:#f8fafc;}
.val-cell{font-weight:600;font-size:0.82rem;}
.val-tma{color:#0d9488;}
.val-kel{color:#16a34a;}
.val-hujan{color:#2563eb;}
.val-suhu{color:#ea580c;}
.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 9px;border-radius:20px;font-size:0.68rem;font-weight:600;}
.badge-green{background:#dcfce7;color:#15803d;}
.badge-yellow{background:#fef9c3;color:#854d0e;}
.badge-red{background:#fee2e2;color:#991b1b;}
.table-footer{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-top:1px solid #e2e8f0;font-size:0.73rem;color:#64748b;}
.pagination{display:flex;gap:4px;}
.page-btn{padding:4px 10px;border-radius:6px;border:1px solid #e2e8f0;background:#fff;font-size:0.72rem;cursor:pointer;transition:all 0.15s;font-family:inherit;}
.page-btn:hover{background:#f1f5f9;}
.page-btn.active{background:#0d9488;color:#fff;border-color:#0d9488;}

/* NOTIFIKASI */
.notif-filters{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;}
.filter-chip{padding:5px 14px;border-radius:20px;border:1px solid #e2e8f0;background:#fff;font-size:0.75rem;font-weight:500;cursor:pointer;transition:all 0.15s;font-family:inherit;color:#475569;}
.filter-chip:hover{border-color:#0d9488;color:#0d9488;}
.filter-chip.active{background:#0d9488;color:#fff;border-color:#0d9488;}
.notif-list{display:flex;flex-direction:column;gap:10px;}
.notif-item{background:#fff;border-radius:10px;padding:14px 16px;border:1px solid #e2e8f0;display:flex;gap:12px;align-items:flex-start;box-shadow:0 1px 3px rgba(0,0,0,0.04);}
.notif-item.unread{border-left:3px solid #0d9488;}
.notif-icon{width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:1rem;flex-shrink:0;}
.ni-green{background:#dcfce7;}.ni-yellow{background:#fef9c3;}.ni-red{background:#fee2e2;}.ni-blue{background:#dbeafe;}
.notif-body{flex:1;}
.notif-title{font-size:0.82rem;font-weight:600;color:#0f172a;margin-bottom:3px;}
.notif-desc{font-size:0.75rem;color:#64748b;line-height:1.5;}
.notif-time{font-size:0.68rem;color:#94a3b8;margin-top:5px;}
.notif-unread-dot{width:8px;height:8px;border-radius:50%;background:#0d9488;margin-top:4px;flex-shrink:0;}

/* PENGATURAN */
.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
.settings-card{background:#fff;border-radius:12px;border:1px solid #e2e8f0;padding:20px;box-shadow:0 1px 3px rgba(0,0,0,0.05);}
.settings-card-title{font-size:0.88rem;font-weight:700;color:#0f172a;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #f1f5f9;display:flex;align-items:center;gap:8px;}
.form-row{margin-bottom:14px;}
.form-label{display:block;font-size:0.75rem;font-weight:600;color:#475569;margin-bottom:5px;}
.form-input{width:100%;padding:8px 12px;border:1px solid #e2e8f0;border-radius:8px;font-size:0.8rem;font-family:inherit;outline:none;color:#1e293b;transition:border 0.15s;}
.form-input:focus{border-color:#0d9488;}
.form-row-2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.toggle-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0;border-bottom:1px solid #f8fafc;}
.toggle-row:last-child{border-bottom:none;}
.toggle-label{font-size:0.8rem;color:#334155;}
.toggle-sub{font-size:0.7rem;color:#94a3b8;margin-top:2px;}
.toggle{position:relative;width:40px;height:22px;flex-shrink:0;}
.toggle input{opacity:0;width:0;height:0;}
.toggle-slider{position:absolute;inset:0;background:#cbd5e1;border-radius:22px;cursor:pointer;transition:0.3s;}
.toggle-slider::before{content:'';position:absolute;width:16px;height:16px;left:3px;top:3px;background:#fff;border-radius:50%;transition:0.3s;box-shadow:0 1px 3px rgba(0,0,0,0.2);}
.toggle input:checked+.toggle-slider{background:#0d9488;}
.toggle input:checked+.toggle-slider::before{transform:translateX(18px);}
.threshold-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid #f8fafc;}
.threshold-row:last-child{border-bottom:none;}
.th-label{font-size:0.78rem;color:#334155;flex:1;}
.th-input{width:80px;padding:5px 8px;border:1px solid #e2e8f0;border-radius:6px;font-size:0.78rem;text-align:center;font-family:inherit;outline:none;}
.th-input:focus{border-color:#0d9488;}
.th-unit{font-size:0.72rem;color:#94a3b8;width:30px;}
.btn-row{display:flex;gap:8px;margin-top:14px;justify-content:flex-end;}

/* API CONFIG */
.api-info{display:flex;align-items:center;gap:8px;padding:10px 14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;font-size:0.75rem;color:#15803d;margin-bottom:14px;}

.save-toast{position:fixed;bottom:24px;right:24px;background:#0d9488;color:#fff;padding:10px 20px;border-radius:10px;font-size:0.82rem;font-weight:600;box-shadow:0 4px 16px rgba(13,148,136,0.4);transform:translateY(60px);opacity:0;transition:all 0.35s;z-index:1000;}
.save-toast.show{transform:translateY(0);opacity:1;}
