:root{
  --bg:#0f1115; --panel:#171a21; --panel-2:#1d212a; --line:#272c37;
  --ink:#e7eaf0; --muted:#8b93a7; --accent:#6d8cff; --danger:#ff6b6b; --ok:#4ec98a;
  --radius:12px;
}
*{box-sizing:border-box}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font:15px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans TC",sans-serif;
}
a{color:var(--accent); text-decoration:none}
a:hover{text-decoration:underline}
.muted{color:var(--muted)}
.center{text-align:center}
.right{text-align:right}
code{background:var(--panel-2); padding:1px 6px; border-radius:6px; font-size:.9em}

.topbar{
  display:flex; align-items:center; justify-content:space-between;
  padding:14px 26px; background:var(--panel); border-bottom:1px solid var(--line);
}
.brand{font-weight:700; letter-spacing:.2px}
.brand span{color:var(--accent)}
nav a{margin-left:20px; color:var(--ink); font-size:14px}
nav a.muted{color:var(--muted)}

.wrap{max-width:1000px; margin:0 auto; padding:28px 26px 60px}
h1{font-size:24px; margin:6px 0 22px}
h2{font-size:16px; margin:0 0 14px}

.grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); gap:14px; margin-bottom:22px}
.stat{
  background:var(--panel); border:1px solid var(--line); border-radius:var(--radius);
  padding:18px; color:var(--muted); font-size:13px;
}
.stat .num{display:block; font-size:26px; font-weight:700; color:var(--ink); margin-bottom:4px}

.card{
  background:var(--panel); border:1px solid var(--line); border-radius:var(--radius);
  padding:20px 22px; margin-bottom:20px;
}
.big{font-size:20px; font-weight:600}

table{width:100%; border-collapse:collapse; margin:6px 0}
th,td{text-align:left; padding:9px 8px; border-bottom:1px solid var(--line); vertical-align:top}
thead th{color:var(--muted); font-weight:600; font-size:13px}
tr:last-child td{border-bottom:none}

.row{display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin-top:12px}
.inline{display:inline}
input,button{font:inherit}
input[type=text],input[type=number],input[type=password],input:not([type]),textarea,select{
  background:var(--panel-2); border:1px solid var(--line); color:var(--ink);
  border-radius:8px; padding:9px 11px; min-width:160px;
}
textarea{width:100%; margin-top:10px; font-family:inherit; resize:vertical; min-width:0}
select{min-width:120px}
input[type=file]{color:var(--muted)}
button{
  background:var(--accent); color:#0b0e14; border:none; border-radius:8px;
  padding:9px 16px; font-weight:600; cursor:pointer;
}
button:hover{filter:brightness(1.08)}
button:disabled{opacity:.4; cursor:not-allowed}
button.danger{background:var(--danger); color:#1a0c0c}
button.link{background:none; color:var(--accent); padding:0; font-weight:500}
button.link.danger{color:var(--danger)}

.alert{padding:11px 14px; border-radius:8px; margin-bottom:18px; font-size:14px}
.alert.error{background:rgba(255,107,107,.12); color:var(--danger)}
.alert.ok{background:rgba(78,201,138,.12); color:var(--ok)}

.memory{
  border-left:3px solid var(--accent); padding:6px 0 6px 14px; margin-bottom:12px;
  display:flex; justify-content:space-between; gap:12px; align-items:flex-start;
}
.memory p{margin:0}
.msg{padding:7px 10px; border-radius:8px; margin-bottom:6px; background:var(--panel-2)}
.msg.user{border-left:3px solid var(--muted)}
.msg.assistant{border-left:3px solid var(--accent)}

.login-card{max-width:340px; margin:9vh auto 0; background:var(--panel);
  border:1px solid var(--line); border-radius:var(--radius); padding:28px}
.login-card .brand{font-size:20px; margin-bottom:20px}
.login-card label{display:block; margin-bottom:14px; font-size:13px; color:var(--muted)}
.login-card input{width:100%; margin-top:5px}
.login-card button{width:100%; margin-top:6px; padding:11px}
