*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
:root{
  --bg:#0d1117;
  --surface:#161b22;
  --input:#0d1117;
  --border:#30363d;
  --text:#c9d1d9;
  --dim:#8b949e;
  --bright:#e6edf3;
  --accent:#58a6ff;
  --danger:#f85149;
  --success:#3fb950;
  --warning:#d29922;
}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
  font-size:14px;
  background:var(--bg);
  color:var(--text);
  display:flex;
  min-height:100vh;
}

/* Sidebar */
.sidebar{
  width:220px;
  background:var(--surface);
  border-right:1px solid var(--border);
  display:flex;
  flex-direction:column;
  flex-shrink:0;
  position:fixed;
  top:0;bottom:0;left:0;
  z-index:10;
}
.sidebar .brand{
  padding:20px 16px;
  font-size:15px;
  font-weight:600;
  color:var(--bright);
  border-bottom:1px solid var(--border);
  letter-spacing:0.02em;
}
.sidebar nav{flex:1;padding:8px 0}
.sidebar nav a{
  display:block;
  padding:8px 16px;
  color:var(--text);
  text-decoration:none;
  font-size:13px;
  border-left:2px solid transparent;
}
.sidebar nav a:hover{background:var(--bg)}
.sidebar nav a.active{
  color:var(--bright);
  background:var(--bg);
  border-left-color:var(--accent);
}
.sidebar-footer{
  padding:12px 16px;
  border-top:1px solid var(--border);
  font-size:12px;
  color:var(--dim);
}
.sidebar-footer .node-info{display:block;margin-bottom:6px}
.sidebar-footer a{color:var(--dim);text-decoration:none}
.sidebar-footer a:hover{color:var(--text)}

/* Main */
main{
  flex:1;
  margin-left:220px;
  display:flex;
  flex-direction:column;
  min-width:0;
}
main>header{
  padding:20px 32px;
  border-bottom:1px solid var(--border);
}
main>header h1{
  font-size:18px;
  font-weight:600;
  color:var(--bright);
}
.content{
  padding:24px 32px;
  flex:1;
}

/* Stats */
.stats{
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  gap:12px;
  margin-bottom:32px;
}
.stat{
  background:var(--surface);
  border:1px solid var(--border);
  padding:16px;
}
.stat .label{
  font-size:11px;
  color:var(--dim);
  text-transform:uppercase;
  letter-spacing:0.05em;
}
.stat .value{
  font-size:24px;
  font-weight:600;
  color:var(--bright);
  margin-top:4px;
}

/* Tables */
table{width:100%;border-collapse:collapse;font-size:13px}
thead{position:sticky;top:0}
th{
  text-align:left;
  padding:10px 12px;
  background:var(--surface);
  border-bottom:1px solid var(--border);
  font-weight:600;
  color:var(--dim);
  text-transform:uppercase;
  font-size:11px;
  letter-spacing:0.05em;
  white-space:nowrap;
}
td{padding:10px 12px;border-bottom:1px solid var(--border)}
tr:hover td{background:rgba(22,27,34,0.5)}
code{
  font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,monospace;
  font-size:12px;
  background:var(--surface);
  padding:2px 6px;
  border-radius:3px;
}

/* Forms */
.form-row{
  display:flex;
  gap:12px;
  align-items:flex-end;
  margin-bottom:24px;
  flex-wrap:wrap;
}
.form-group{display:flex;flex-direction:column;gap:4px}
.form-group label{font-size:11px;color:var(--dim);text-transform:uppercase;letter-spacing:0.03em}
input,select{
  background:var(--input);
  border:1px solid var(--border);
  color:var(--text);
  padding:7px 10px;
  font-size:13px;
  font-family:inherit;
  min-width:140px;
}
input:focus,select:focus{outline:none;border-color:var(--accent)}
select{cursor:pointer}
select option{background:var(--surface)}

/* Buttons */
button,.btn{
  padding:7px 14px;
  border:1px solid var(--border);
  background:var(--surface);
  color:var(--text);
  font-size:13px;
  cursor:pointer;
  font-family:inherit;
  white-space:nowrap;
}
button:hover,.btn:hover{border-color:var(--dim)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn-primary:hover{opacity:0.85}
.btn-danger{color:var(--danger);border-color:transparent;background:transparent;padding:4px 8px}
.btn-danger:hover{background:rgba(248,81,73,0.1)}
.btn-sm{padding:4px 8px;font-size:12px}
.btn-copy{color:var(--dim);border-color:transparent;background:transparent;padding:4px 8px;font-size:12px}
.btn-copy:hover{color:var(--text)}

/* Alert */
.alert{padding:10px 14px;border:1px solid;margin-bottom:16px;font-size:13px}
.alert-error{border-color:var(--danger);color:var(--danger);background:rgba(248,81,73,0.08)}

/* Badge */
.badge{
  display:inline-block;
  padding:2px 8px;
  font-size:11px;
  font-weight:500;
}
.badge-active{background:rgba(63,185,80,0.15);color:var(--success)}
.badge-pending{background:rgba(210,153,34,0.15);color:var(--warning)}
.badge-expired{background:rgba(248,81,73,0.15);color:var(--danger)}

/* Section title */
.section-title{
  font-size:13px;
  font-weight:600;
  color:var(--bright);
  margin-bottom:12px;
  margin-top:32px;
}
.section-title:first-child{margin-top:0}

/* Empty state */
.empty{text-align:center;padding:48px;color:var(--dim);font-size:13px}

/* Login */
.login-container{
  display:flex;
  align-items:center;
  justify-content:center;
  min-height:100vh;
  width:100%;
  background:var(--bg);
}
.login-box{
  width:340px;
  background:var(--surface);
  border:1px solid var(--border);
  padding:32px;
}
.login-box h1{
  font-size:18px;
  color:var(--bright);
  margin-bottom:24px;
  font-weight:600;
}
.login-box input{width:100%;margin-bottom:12px}
.login-box button{width:100%}
.login-box .error{
  color:var(--danger);
  font-size:13px;
  margin-bottom:12px;
  display:none;
}

/* Utility */
.text-dim{color:var(--dim)}
.text-mono{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,monospace;font-size:12px}
.mt-0{margin-top:0}
.nowrap{white-space:nowrap}

/* Fade out deleted rows */
tr.htmx-swapping{opacity:0;transition:opacity 0.2s ease-out}
