
:root{
  --bg: oklch(0.970 0.004 250);
  --surface: oklch(1 0 0);
  --surface-2: oklch(0.985 0.003 250);
  --fg: oklch(0.225 0.018 260);
  --fg-strong: oklch(0.175 0.02 260);
  --muted: oklch(0.50 0.018 255);
  --muted-2: oklch(0.64 0.014 250);
  --border: oklch(0.905 0.006 250);
  --border-strong: oklch(0.85 0.008 250);
  --accent: oklch(0.47 0.18 256);
  --accent-hover: oklch(0.41 0.18 256);
  --accent-active: oklch(0.37 0.18 256);
  --accent-soft: oklch(0.945 0.035 255);
  --accent-border: oklch(0.88 0.06 255);
  --on-accent: oklch(0.99 0 0);

  --ok: oklch(0.53 0.14 152);
  --ok-soft: oklch(0.955 0.04 152);
  --warn: oklch(0.58 0.13 78);
  --warn-soft: oklch(0.962 0.04 85);
  --danger: oklch(0.54 0.19 25);
  --danger-soft: oklch(0.962 0.025 25);
  --info-soft: oklch(0.955 0.03 255);

  --sidebar-bg: oklch(0.215 0.028 260);
  --sidebar-2: oklch(0.25 0.03 260);
  --sidebar-fg: oklch(0.94 0.01 250);
  --sidebar-muted: oklch(0.64 0.02 255);
  --sidebar-border: oklch(0.30 0.03 260);
  --sidebar-active: oklch(0.315 0.045 256);
  --sidebar-hover: oklch(0.27 0.035 258);

  --radius: 10px;
  --radius-sm: 7px;
  --radius-lg: 14px;
  --shadow-sm: 0 1px 2px oklch(0.2 0.02 260 / 0.06);
  --shadow: 0 1px 3px oklch(0.2 0.02 260 / 0.07), 0 8px 24px oklch(0.2 0.02 260 / 0.05);
  --shadow-lg: 0 12px 40px oklch(0.2 0.02 260 / 0.16);

  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
  --font-mono: ui-monospace, "SF Mono", "Cascadia Code", "Roboto Mono", Menlo, Consolas, monospace;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:var(--font-sans);
  background:var(--bg);
  color:var(--fg);
  font-size:14px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
button{font-family:inherit;cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}

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

/* ---------- Sidebar ---------- */
.sidebar{
  position:fixed;inset:0 auto 0 0;width:244px;
  background:var(--sidebar-bg);color:var(--sidebar-fg);
  display:flex;flex-direction:column;z-index:40;
  border-right:1px solid var(--sidebar-border);
}
.brand{
  display:flex;align-items:center;gap:10px;
  padding:18px 18px 16px;border-bottom:1px solid var(--sidebar-border);
}
.brand-mark{
  width:30px;height:30px;border-radius:8px;flex:0 0 auto;
  background:linear-gradient(135deg,var(--accent),oklch(0.58 0.16 230));
  display:grid;place-items:center;color:#fff;font-weight:700;font-size:15px;
}
.brand-name{font-weight:650;font-size:15px;letter-spacing:-.01em}
.brand-sub{font-family:var(--font-mono);font-size:10.5px;color:var(--sidebar-muted);letter-spacing:.02em}
.nav{flex:1;overflow-y:auto;padding:12px 10px}
.nav-group-label{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;
  color:var(--sidebar-muted);padding:14px 10px 6px;
}
.nav-item{
  display:flex;align-items:center;gap:11px;width:100%;
  padding:8px 10px;border-radius:8px;border:0;background:transparent;
  color:var(--sidebar-muted);font-size:13.5px;font-weight:500;text-align:left;
  transition:background .12s ease,color .12s ease;
}
.nav-item svg{width:18px;height:18px;flex:0 0 auto;opacity:.85}
.nav-item:hover{background:var(--sidebar-hover);color:var(--sidebar-fg)}
.nav-item.active{background:var(--sidebar-active);color:var(--sidebar-fg)}
.nav-item.active svg{color:oklch(0.75 0.12 250)}
.nav-item .nav-count{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--sidebar-muted)}
.sidebar-foot{border-top:1px solid var(--sidebar-border);padding:10px}
.account{
  display:flex;align-items:center;gap:10px;padding:8px;border-radius:8px;
  background:transparent;border:0;width:100%;text-align:left;color:var(--sidebar-fg);
}
.account:hover{background:var(--sidebar-hover)}
.avatar{
  width:30px;height:30px;border-radius:50%;flex:0 0 auto;
  background:linear-gradient(135deg,oklch(0.62 0.14 256),oklch(0.5 0.14 280));
  display:grid;place-items:center;color:#fff;font-weight:600;font-size:13px;
}
.account-name{font-size:13px;font-weight:550;line-height:1.2}
.account-org{font-size:11.5px;color:var(--sidebar-muted)}

/* ---------- Main ---------- */
.main{margin-left:244px;flex:1;display:flex;flex-direction:column;min-width:0}
.topbar{
  position:sticky;top:0;z-index:30;
  height:60px;display:flex;align-items:center;gap:16px;
  padding:0 28px;background:oklch(0.985 0.003 250 / .86);
  backdrop-filter:blur(10px);border-bottom:1px solid var(--border);
}
.menu-btn{display:none;background:none;border:0;padding:6px;color:var(--fg)}
.topbar-title{font-size:16px;font-weight:650;letter-spacing:-.01em}
.topbar-desc{font-size:13px;color:var(--muted);margin-left:2px}
.topbar-actions{margin-left:auto;display:flex;align-items:center;gap:8px}
.icon-btn{
  position:relative;width:38px;height:38px;border-radius:9px;border:1px solid var(--border);
  background:var(--surface);color:var(--fg);display:grid;place-items:center;
}
.icon-btn:hover{background:var(--surface-2);border-color:var(--border-strong)}
.icon-btn svg{width:18px;height:18px}
.icon-btn .dot{
  position:absolute;top:8px;right:9px;width:7px;height:7px;border-radius:50%;
  background:var(--danger);border:2px solid var(--surface);
}

.content{padding:28px;max-width:1240px;width:100%;margin:0 auto}

/* ---------- Buttons ---------- */
.btn{
  display:inline-flex;align-items:center;gap:7px;justify-content:center;
  height:38px;padding:0 16px;border-radius:9px;border:1px solid transparent;
  font-size:13.5px;font-weight:600;letter-spacing:-.005em;
  transition:background .12s ease,border-color .12s ease,transform .05s ease;
  white-space:nowrap;
}
.btn svg{width:16px;height:16px}
.btn:active{transform:translateY(.5px)}
.btn-primary{background:var(--accent);color:var(--on-accent)}
.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}
.btn-primary:active{background:var(--accent-active)}
.btn-secondary{background:var(--surface);border-color:var(--border-strong);color:var(--fg)}
.btn-secondary:hover{background:var(--surface-2);border-color:var(--muted-2)}
.btn-ghost{background:transparent;border-color:transparent;color:var(--muted)}
.btn-ghost:hover{background:var(--surface-2);color:var(--fg)}
.btn-danger{background:var(--danger);color:#fff}
.btn-danger:hover{background:oklch(0.48 0.19 25)}
.btn-sm{height:32px;padding:0 12px;font-size:12.5px;border-radius:7px}
.btn-lg{height:44px;padding:0 20px;font-size:14px;border-radius:10px}
.btn:disabled{opacity:.5;cursor:not-allowed}

/* ---------- Cards / layout ---------- */
.grid{display:grid;gap:16px}
.cols-4{grid-template-columns:repeat(4,1fr)}
.cols-3{grid-template-columns:repeat(3,1fr)}
.cols-2{grid-template-columns:repeat(2,1fr)}
.card{
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);
  box-shadow:var(--shadow-sm);
}
.card-pad{padding:20px}
.card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:20px 20px 0}
.card-title{font-size:14px;font-weight:650;letter-spacing:-.01em}
.card-sub{font-size:12.5px;color:var(--muted);margin-top:2px}

.metric{padding:18px 20px}
.metric-label{font-size:12px;color:var(--muted);font-weight:500;display:flex;align-items:center;gap:6px}
.metric-value{font-size:28px;font-weight:680;letter-spacing:-.02em;margin-top:6px;font-variant-numeric:tabular-nums}
.metric-value .unit{font-size:15px;font-weight:550;color:var(--muted);margin-left:2px}
.metric-delta{font-size:12px;margin-top:4px;font-weight:550}
.metric-delta.up{color:var(--ok)}
.metric-delta.down{color:var(--danger)}
.metric-delta.flat{color:var(--muted)}

/* ---------- Status badges ---------- */
.badge{
  display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 9px;
  border-radius:999px;font-size:12px;font-weight:600;letter-spacing:-.005em;
  border:1px solid transparent;white-space:nowrap;
}
.badge .bdot{width:7px;height:7px;border-radius:50%;flex:0 0 auto}
.badge-online{background:var(--ok-soft);color:oklch(0.38 0.12 152);border-color:oklch(0.85 0.05 152)}
.badge-online .bdot{background:var(--ok)}
.badge-warn{background:var(--warn-soft);color:oklch(0.45 0.12 78);border-color:oklch(0.85 0.07 85)}
.badge-warn .bdot{background:var(--warn)}
.badge-danger{background:var(--danger-soft);color:oklch(0.42 0.16 25);border-color:oklch(0.86 0.05 25)}
.badge-danger .bdot{background:var(--danger)}
.badge-neutral{background:var(--surface-2);color:var(--muted);border-color:var(--border-strong)}
.badge-neutral .bdot{background:var(--muted-2)}
.badge-info{background:var(--info-soft);color:var(--accent);border-color:var(--accent-border)}
.badge-info .bdot{background:var(--accent)}

/* ---------- Tables ---------- */
.table-wrap{overflow-x:auto;border-radius:var(--radius-lg);background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-sm)}
table{width:100%;border-collapse:collapse;font-size:13.5px;min-width:640px}
th{
  text-align:left;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;
  color:var(--muted);font-weight:600;padding:12px 16px;border-bottom:1px solid var(--border);
  background:var(--surface-2);white-space:nowrap;
}
td{padding:14px 16px;border-bottom:1px solid var(--border);vertical-align:middle}
tr:last-child td{border-bottom:0}
tbody tr{transition:background .1s ease}
tbody tr:hover{background:var(--surface-2)}
tbody tr.clickable{cursor:pointer}
td.mono, .mono{font-family:var(--font-mono);font-size:12.5px}
.cell-title{font-weight:600;color:var(--fg-strong)}
.cell-sub{font-size:12px;color:var(--muted);margin-top:1px}

/* ---------- Endpoint / copy ---------- */
.copy{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-mono);font-size:12.5px}
.copy button{
  background:none;border:0;padding:3px;border-radius:5px;color:var(--muted);display:grid;place-items:center;
}
.copy button:hover{background:var(--accent-soft);color:var(--accent)}
.copy button svg{width:14px;height:14px}
.copy button.copied{color:var(--ok)}

/* ---------- Forms ---------- */
.field{margin-bottom:16px}
.label{display:block;font-size:12.5px;font-weight:600;color:var(--fg);margin-bottom:6px}
.label .req{color:var(--danger)}
.hint{font-size:12px;color:var(--muted);margin-top:5px}
input[type=text],input[type=number],input[type=password],select,textarea{
  width:100%;height:40px;padding:0 12px;border-radius:9px;border:1px solid var(--border-strong);
  background:var(--surface);color:var(--fg);font-family:inherit;font-size:13.5px;
  transition:border-color .12s ease,box-shadow .12s ease;
}
textarea{height:auto;padding:10px 12px;resize:vertical;min-height:72px}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
input[type=number]{font-family:var(--font-mono)}
select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:36px}
.check{display:flex;align-items:flex-start;gap:9px;padding:12px;border:1px solid var(--border-strong);border-radius:9px;cursor:pointer;transition:border-color .12s ease,background .12s ease}
.check:hover{border-color:var(--muted-2)}
.check input{margin-top:2px;accent-color:var(--accent);width:15px;height:15px}
.check.checked{border-color:var(--accent);background:var(--accent-soft)}
.check-title{font-weight:600;font-size:13.5px}
.check-desc{font-size:12px;color:var(--muted);margin-top:1px}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.field-row-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}

.switch{position:relative;width:38px;height:22px;flex:0 0 auto}
.switch input{position:absolute;opacity:0;width:100%;height:100%;margin:0;cursor:pointer}
.switch .track{position:absolute;inset:0;background:var(--muted-2);border-radius:99px;transition:background .15s ease;pointer-events:none}
.switch .track:before{content:'';position:absolute;left:3px;top:3px;width:16px;height:16px;background:#fff;border-radius:50%;transition:transform .15s ease;box-shadow:0 1px 2px oklch(0.2 0.02 260/.3)}
.switch input:checked + .track{background:var(--accent)}
.switch input:checked + .track:before{transform:translateX(16px)}
.switch input:focus-visible + .track{outline:2px solid var(--accent);outline-offset:2px}

.chip{display:inline-flex;align-items:center;gap:7px;background:var(--surface-2);border:1px solid var(--border-strong);border-radius:99px;padding:4px 12px;font-size:12.5px;font-family:var(--font-mono)}
.chip button{background:none;border:0;padding:0;color:var(--muted);cursor:pointer;display:grid;place-items:center}
.chip button:hover{color:var(--danger)}
.chip button svg{width:13px;height:13px}
.opt-check{display:flex;align-items:center;gap:9px;padding:8px 0;cursor:pointer}
.opt-check input{width:16px;height:16px;accent-color:var(--accent);margin:0}

/* ---------- Segmented control ---------- */
.seg{display:inline-flex;background:var(--surface-2);border:1px solid var(--border-strong);border-radius:9px;padding:3px;gap:2px}
.seg button{
  border:0;background:transparent;padding:6px 13px;border-radius:7px;font-size:12.5px;font-weight:550;color:var(--muted);
}
.seg button:hover{color:var(--fg)}
.seg button.active{background:var(--surface);color:var(--fg);box-shadow:var(--shadow-sm);font-weight:600}

/* ---------- Tabs ---------- */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);padding:0 20px}
.tab{
  border:0;background:transparent;padding:12px 14px;font-size:13.5px;font-weight:550;color:var(--muted);
  border-bottom:2px solid transparent;margin-bottom:-1px;
}
.tab:hover{color:var(--fg)}
.tab.active{color:var(--fg);border-bottom-color:var(--accent);font-weight:600}

/* ---------- Toasts ---------- */
.toasts{position:fixed;right:20px;bottom:20px;z-index:100;display:flex;flex-direction:column;gap:8px}
.toast{
  display:flex;align-items:center;gap:10px;background:var(--fg-strong);color:oklch(0.96 0 0);
  padding:11px 14px;border-radius:10px;font-size:13px;font-weight:500;box-shadow:var(--shadow-lg);
  animation:slideIn .22s ease;
}
.toast.success svg{color:var(--ok)}
.toast.error svg{color:oklch(0.7 0.16 25)}
.toast svg{width:16px;height:16px;flex:0 0 auto}
@keyframes slideIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* ---------- Modal ---------- */
.modal{
  position:fixed;inset:0;z-index:80;display:none;align-items:flex-start;justify-content:center;
  background:oklch(0.15 0.02 260 / .5);padding:40px 16px;overflow-y:auto;
}
.modal.open{display:flex}
.modal-card{
  position:relative;background:var(--surface);border-radius:14px;width:100%;max-width:520px;box-shadow:var(--shadow-lg);
  animation:pop .18s ease;
}
@keyframes pop{from{opacity:0;transform:translateY(10px) scale(.99)}to{opacity:1;transform:none}}
.modal-head{display:flex;align-items:flex-start;justify-content:space-between;padding:20px 22px;border-bottom:1px solid var(--border)}
.modal-title{font-size:16px;font-weight:650;letter-spacing:-.01em}
.modal-sub{font-size:12.5px;color:var(--muted);margin-top:3px}
.modal-close{background:none;border:0;color:var(--muted);padding:4px;border-radius:6px;display:grid;place-items:center}
.modal-close:hover{background:var(--surface-2);color:var(--fg)}
.modal-close svg{width:18px;height:18px}
.modal-body{padding:20px 22px}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:16px 22px;border-top:1px solid var(--border)}

/* ---------- Secret reveal ---------- */
.secret-box{
  background:var(--fg-strong);color:oklch(0.85 0.12 250);border-radius:9px;padding:12px 14px;
  font-family:var(--font-mono);font-size:12.5px;display:flex;align-items:center;justify-content:space-between;gap:10px;
  word-break:break-all;
}
.secret-box button{background:none;border:0;color:oklch(0.85 0.12 250);display:grid;place-items:center;padding:3px;border-radius:5px;flex:0 0 auto}
.secret-box button:hover{background:oklch(0.35 0.02 260)}

/* ---------- Chart ---------- */
.chart-legend{display:flex;gap:18px;align-items:center}
.legend-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
.legend-dot{width:8px;height:8px;border-radius:50%}
.legend-dot.actual{background:var(--accent)}
.legend-dot.forecast{background:var(--muted-2)}

/* ---------- Status banner ---------- */
.banner{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:var(--radius-lg);border:1px solid;font-size:13.5px}
.banner svg{width:18px;height:18px;flex:0 0 auto;margin-top:1px}
.banner-warn{background:var(--warn-soft);border-color:oklch(0.85 0.07 85);color:oklch(0.42 0.12 78)}
.banner-danger{background:var(--danger-soft);border-color:oklch(0.86 0.05 25);color:oklch(0.42 0.16 25)}
.banner-info{background:var(--info-soft);border-color:var(--accent-border);color:var(--accent)}

/* ---------- Detail list ---------- */
.kv{display:grid;grid-template-columns:200px 1fr;gap:0;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}
.kv-row{display:contents}
.kv-key{padding:12px 16px;background:var(--surface-2);color:var(--muted);font-size:12.5px;border-bottom:1px solid var(--border);font-weight:550}
.kv-val{padding:12px 16px;border-bottom:1px solid var(--border);font-size:13.5px}
.kv-row:last-child .kv-key,.kv-row:last-child .kv-val{border-bottom:0}

/* ---------- Notifications panel ---------- */
.panel{
  position:fixed;top:60px;right:20px;width:360px;max-width:calc(100vw - 32px);z-index:70;
  background:var(--surface);border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-lg);
  display:none;
}
.panel.open{display:block;animation:pop .16s ease}
.panel-head{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.panel-title{font-weight:650;font-size:14px}
.notif{padding:13px 18px;border-bottom:1px solid var(--border)}
.notif:last-child{border-bottom:0}
.notif-title{font-size:13px;font-weight:600}
.notif-desc{font-size:12.5px;color:var(--muted);margin-top:2px}
.notif-time{font-family:var(--font-mono);font-size:11px;color:var(--muted-2);margin-top:4px}

/* ---------- Empty / error states ---------- */
.empty{text-align:center;padding:48px 20px}
.empty-icon{width:44px;height:44px;border-radius:12px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;margin:0 auto 14px}
.empty-icon svg{width:20px;height:20px}
.empty-title{font-weight:650;font-size:15px}
.empty-desc{font-size:13px;color:var(--muted);max-width:360px;margin:6px auto 18px}

/* ---------- Responsive ---------- */
.scrim{display:none;position:fixed;inset:0;background:oklch(0.15 0.02 260/.4);z-index:35}
@media (max-width:920px){
  .sidebar{transform:translateX(-100%);transition:transform .2s ease}
  .sidebar.open{transform:translateX(0)}
  .scrim.show{display:block}
  .main{margin-left:0}
  .menu-btn{display:grid}
  .cols-4{grid-template-columns:repeat(2,1fr)}
  .cols-3{grid-template-columns:1fr}
  .cols-2{grid-template-columns:1fr}
  .field-row,.field-row-3{grid-template-columns:1fr}
  .topbar{padding:0 16px}
  .topbar-desc{display:none}
  .content{padding:18px 16px}
  .kv{grid-template-columns:1fr}
  .kv-key{border-bottom:0;padding-bottom:2px}
}
@media (max-width:520px){
  .cols-4{grid-template-columns:1fr}
}
