:root{
  --bg0:#060812;
  --bg1:#0b1020;
  --panel:rgba(255,255,255,.06);
  --panel2:rgba(255,255,255,.08);
  --line:rgba(255,255,255,.14);
  --text:#e9ecff;
  --muted:#aeb6df;
  --blue:#4da3ff;
  --cyan:#2df4ff;
  --violet:#8b5cf6;
  --danger:#ff3b6a;
  --ok:#27f7a1;
  --shadow: 0 18px 60px rgba(0,0,0,.55);
  --r:18px;
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans TC", Arial, sans-serif;
  color:var(--text);
  background: radial-gradient(1200px 700px at 20% 10%, rgba(77,163,255,.10), transparent 60%),
              radial-gradient(900px 600px at 80% 30%, rgba(139,92,246,.10), transparent 55%),
              linear-gradient(180deg, var(--bg0), var(--bg1));
  overflow-x:hidden;
}

.bg{position:fixed;inset:0;pointer-events:none;z-index:-1}
.bg .grid{
  position:absolute;inset:-40px;
  background-image:
    linear-gradient(to right, rgba(77,163,255,.08) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(77,163,255,.06) 1px, transparent 1px);
  background-size: 48px 48px;
  filter: blur(.0px);
  opacity:.35;
  transform: perspective(1200px) rotateX(65deg) translateY(-260px);
  transform-origin: top;
}
.glow{position:absolute; width:520px; height:520px; border-radius:999px; filter: blur(60px); opacity:.35}
.glow-a{left:-120px; top:120px; background: radial-gradient(circle at 30% 30%, rgba(45,244,255,.7), transparent 60%)}
.glow-b{right:-160px; top:260px; background: radial-gradient(circle at 30% 30%, rgba(139,92,246,.7), transparent 62%)}

.appShell{display:flex; min-height:100vh}
.sidebar{
  width:280px;
  padding:18px;
  border-right:1px solid rgba(255,255,255,.10);
  background: rgba(0,0,0,.22);
  backdrop-filter: blur(10px);
}
.brand{display:flex; gap:12px; align-items:center; padding:12px; border:1px solid var(--line);
  border-radius:var(--r);
  background: linear-gradient(135deg, rgba(77,163,255,.12), rgba(139,92,246,.10));
  box-shadow: var(--shadow);
}
.logo{
  width:46px;height:46px;border-radius:14px;
  display:flex;align-items:center;justify-content:center;
  font-weight:800;letter-spacing:1px;
  background: linear-gradient(135deg, rgba(77,163,255,.95), rgba(45,244,255,.75));
  color:#06101c;
}
.brandText .name{font-weight:800; font-size:15px}
.brandText .sub{font-size:12px; color:var(--muted)}

.nav{margin-top:16px; display:flex; flex-direction:column; gap:10px}
.navItem{
  text-decoration:none; color:var(--text);
  padding:12px 12px;
  border-radius:14px;
  border:1px solid rgba(255,255,255,.10);
  background: rgba(255,255,255,.04);
}
.navItem:hover{border-color: rgba(77,163,255,.35); background: rgba(77,163,255,.08)}

.sideFooter{margin-top:auto; padding-top:16px; display:flex; flex-direction:column; gap:10px}
.logout{color:var(--muted); text-decoration:none; font-size:13px}
.logout:hover{color:var(--text)}

.main{flex:1; padding:18px 18px 0 18px}
.topbar{
  display:flex; align-items:center; justify-content:space-between;
  padding:12px 14px;
  border:1px solid rgba(255,255,255,.10);
  border-radius:var(--r);
  background: rgba(255,255,255,.04);
  backdrop-filter: blur(10px);
}
.crumb{font-weight:800; letter-spacing:.2px}
.topActions{display:flex; gap:10px}

.content{padding:16px 0 18px 0}
.footer{padding:14px 0 18px 0; color:rgba(255,255,255,.55); font-size:12px}

.card{
  border-radius:var(--r);
  border:1px solid rgba(255,255,255,.12);
  background: var(--panel);
  box-shadow: var(--shadow);
}
.cardHeader{display:flex; justify-content:space-between; gap:10px; padding:16px 16px 10px 16px}
.h1{font-size:20px; font-weight:900}
.h2{font-size:16px; font-weight:900}
.muted{color:var(--muted); font-size:12.5px; line-height:1.5}
.note{margin:0 16px 10px 16px; color:rgba(233,236,255,.9)}

.grid2{display:grid; grid-template-columns: 1.3fr 1fr; gap:16px}
@media (max-width:980px){
  .sidebar{display:none}
  .grid2{grid-template-columns:1fr}
  .main{padding:14px}
}

.tableWrap{overflow:auto; border-top:1px solid rgba(255,255,255,.10)}
.table{width:100%; border-collapse:collapse; min-width:860px}
.table th,.table td{padding:12px 16px; border-bottom:1px solid rgba(255,255,255,.10); text-align:left; vertical-align:top}
.table th{color:rgba(233,236,255,.85); font-size:12px; letter-spacing:.2px}

.form{padding:0 16px 16px 16px; display:flex; flex-direction:column; gap:12px}
label span{display:block; margin-bottom:6px; font-size:12px; color:rgba(233,236,255,.8)}
input,select,textarea{
  width:100%;
  padding:12px 12px;
  border-radius:14px;
  border:1px solid rgba(255,255,255,.14);
  background: rgba(0,0,0,.22);
  color: var(--text);
  outline:none;
}
textarea{resize:vertical; min-height:120px; line-height:1.5}
input:focus,select:focus,textarea:focus{border-color: rgba(77,163,255,.45); box-shadow: 0 0 0 3px rgba(77,163,255,.12)}

.row{display:flex; gap:10px; align-items:center; flex-wrap:wrap}
.row2{display:grid; grid-template-columns:1fr 1fr; gap:12px}
.row3{display:grid; grid-template-columns:1fr 1fr 1fr; gap:12px}
@media (max-width:980px){.row3{grid-template-columns:1fr}}

.btn{
  display:inline-flex; align-items:center; justify-content:center;
  padding:10px 14px;
  border-radius:14px;
  border:1px solid rgba(255,255,255,.14);
  background: rgba(255,255,255,.05);
  color: var(--text);
  text-decoration:none;
  cursor:pointer;
  font-weight:700;
}
.btn:hover{border-color: rgba(77,163,255,.35); background: rgba(77,163,255,.08)}
.btn.small{padding:8px 10px; border-radius:12px; font-size:12px}
.btn.primary{border-color: rgba(45,244,255,.35); background: linear-gradient(135deg, rgba(77,163,255,.22), rgba(45,244,255,.12))}
.btn.primary:hover{background: linear-gradient(135deg, rgba(77,163,255,.30), rgba(45,244,255,.18))}
.btn.danger{border-color: rgba(255,59,106,.35); background: rgba(255,59,106,.10)}

.pill{
  display:inline-flex; align-items:center; gap:8px;
  padding:6px 10px;
  border-radius:999px;
  border:1px solid rgba(255,255,255,.14);
  background: rgba(255,255,255,.05);
  font-size:12px;
}
.pill.ok{border-color: rgba(39,247,161,.35); background: rgba(39,247,161,.10)}
.pill.danger{border-color: rgba(255,59,106,.35); background: rgba(255,59,106,.10)}
.pill.mutedPill{opacity:.75}

.code{
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
  font-size:12px;
  padding:3px 7px;
  border-radius:10px;
  border:1px solid rgba(255,255,255,.12);
  background: rgba(0,0,0,.22);
}
.link{color:rgba(180,205,255,.95); text-decoration:none}
.link:hover{color:var(--cyan)}

.divider{height:1px; background: rgba(255,255,255,.10); margin:12px 16px}

.toasts{padding:0 16px 16px 16px; display:flex; flex-direction:column; gap:8px}
.toast{padding:10px 12px; border-radius:14px; border:1px solid rgba(255,255,255,.14); background: rgba(255,255,255,.05); font-size:13px}
.toast.ok{border-color: rgba(39,247,161,.35); background: rgba(39,247,161,.10)}
.toast.error{border-color: rgba(255,59,106,.35); background: rgba(255,59,106,.10)}

.loginWrap{min-height:100vh; display:flex; align-items:center; justify-content:center; padding:22px}
.loginCard{width:min(520px, 100%); padding-bottom:10px}
.brandRow{display:flex; gap:12px; align-items:center; padding:18px 16px 8px 16px}
.hint{padding:0 16px 18px 16px; color:rgba(233,236,255,.75); font-size:12.5px; line-height:1.6}

.empty{padding:16px; color:rgba(233,236,255,.75)}
.check{display:flex; gap:10px; align-items:center; padding:0 16px}
.ul{margin:8px 0 0 16px; color:rgba(233,236,255,.75)}
