:root { font-family: Inter,"Microsoft YaHei",sans-serif; color:#1d2433; background:#f3f5f8; }
* { box-sizing:border-box; }
body { margin:0; }
.layout { display:grid; grid-template-columns:230px 1fr; min-height:100vh; }
.sidebar { background:#202737; color:#fff; padding:24px 14px; }
.brand { font-size:22px; font-weight:800; padding:0 12px; }
.store { color:#9eabc1; font-size:12px; padding:8px 12px 24px; border-bottom:1px solid #343d50; }
.hidden { display:none !important; }
nav { margin-top:18px; }
nav button { width:100%; background:none; color:#c6cede; border:0; text-align:left; padding:12px 14px; border-radius:8px; cursor:pointer; }
nav button:hover,nav button.active { background:#1557d5; color:#fff; }
.group { color:#708098; font-size:12px; padding:18px 14px 6px; }
main { min-width:0; }
header { height:64px; background:#fff; padding:0 28px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid #e4e8ef; }
.header-actions { display:flex; align-items:center; gap:18px; }
.campus-filter { display:flex; align-items:center; gap:8px; color:#667186; font-size:13px; }
.campus-filter select { min-width:150px; height:34px; border:1px solid #dbe0e8; border-radius:7px; padding:0 9px; background:#fff; }
#breadcrumb { color:#8b96a9; font-size:13px; }
.user { font-size:13px; color:#5b6575; }
.role-badge { display:inline-block; margin-right:10px; padding:4px 9px; border-radius:999px; background:#e9f1ff; color:#1557d5; font-weight:700; }
.link { border:0; color:#1557d5; padding:4px 8px; }
#content { padding:28px; }
.metrics { display:grid; grid-template-columns:repeat(4,minmax(150px,1fr)); gap:18px; }
.metric,.panel { background:#fff; border-radius:12px; padding:22px; border:1px solid #e8ebf1; }
.metric b { display:block; font-size:30px; margin-top:12px; color:#1557d5; }
.panel { margin-top:20px; }
.toolbar { display:flex; gap:12px; align-items:center; margin-bottom:18px; flex-wrap:wrap; }
.page-tip { margin:-4px 0 18px; padding:12px 14px; border-radius:8px; color:#4f6078; background:#f0f6ff; border-left:4px solid #3878e8; line-height:1.6; font-size:13px; }
.toolbar input,.toolbar select,.field input,.field select,.field textarea { min-height:38px; border:1px solid #dbe0e8; border-radius:7px; padding:8px 12px; background:#fff; }
.field > div > select,.field > div > input,.field > div > textarea { width:100%; }
.field textarea { resize:vertical; line-height:1.5; }
button { cursor:pointer; border:1px solid #d8dee8; background:#fff; border-radius:7px; padding:9px 14px; }
button.primary { background:#1557d5; color:#fff; border-color:#1557d5; }
button.danger { background:#c9362b; color:#fff; border-color:#c9362b; }
button:disabled { cursor:not-allowed; opacity:.55; }
table { width:100%; border-collapse:collapse; background:#fff; }
.table-wrap { overflow:auto; }
th,td { padding:14px 12px; border-bottom:1px solid #edf0f4; text-align:left; font-size:13px; white-space:nowrap; }
th { background:#f7f9fc; color:#667186; font-weight:600; }
.status { padding:4px 9px; border-radius:999px; background:#e9f7ef; color:#158447; }
.status.warn { background:#fff3dd; color:#a96500; }
.status.bad { background:#feeceb; color:#cc3d36; }
.action { color:#1557d5; border:0; padding:4px 6px; }
.empty { padding:60px; text-align:center; color:#8b96a9; }
dialog { border:0; border-radius:14px; width:min(620px,90vw); box-shadow:0 24px 80px rgba(23,38,70,.25); }
dialog::backdrop { background:rgba(15,24,43,.4); }
dialog[aria-busy="true"] { cursor:progress; }
.dialog-head,.dialog-actions { display:flex; justify-content:space-between; align-items:center; }
.dialog-actions { justify-content:flex-end; gap:12px; margin-top:22px; }
.dialog-close { border:0; background:transparent; color:#667186; font-size:22px; line-height:1; padding:7px 9px; }
.dialog-close:hover { color:#1d2433; background:#f1f4f8; }
.confirm-dialog { width:min(460px,90vw); }
.confirm-dialog p { color:#4f6078; line-height:1.7; white-space:pre-line; }
.dialog-error { margin:8px 0 0 122px; }
.field { display:grid; grid-template-columns:110px 1fr; align-items:center; margin:14px 0; gap:12px; }
.field-top { align-items:start; }
.field-help { display:block; color:#596273; line-height:1.5; margin-top:6px; }
.field-help.warning { color:#a96500; }
.choice-list { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; max-height:180px; overflow:auto; padding:10px; border:1px solid #dbe0e8; border-radius:7px; background:#fafbfc; }
.choice-list label { display:flex; align-items:center; gap:8px; padding:6px 8px; background:#fff; border-radius:6px; }
.choice-list input[type="checkbox"] { width:16px; height:16px; min-height:0; }
.choice-empty { color:#8b96a9; padding:8px; grid-column:1/-1; }
.field input[type="checkbox"] { width:20px; height:20px; }
.login-screen { position:fixed; inset:0; z-index:20; background:linear-gradient(135deg,#0f46b8,#1870e7); display:grid; place-items:center; }
.login-screen.hidden { display:none; }
.login-card { width:min(420px,90vw); background:#fff; padding:36px; border-radius:18px; box-shadow:0 28px 80px rgba(0,0,0,.25); }
.login-card h1 { margin:0 0 8px; font-size:24px; }
.login-card p,.login-card small { color:#596273; }
.login-card label { display:grid; gap:7px; margin:18px 0; }
.login-card input { height:44px; border:1px solid #dbe0e8; border-radius:8px; padding:0 12px; }
.login-card button { width:100%; height:44px; }
.password-wrap { position:relative; width:100%; }
.password-wrap input { width:100%; padding-right:62px !important; }
.password-wrap .password-toggle { position:absolute; right:5px; top:50%; transform:translateY(-50%); width:auto; height:30px; min-height:30px; padding:3px 8px; border:0; color:#1557d5; background:transparent; }
.error { color:#cc3d36; min-height:22px; margin-top:12px; }
@media(max-width:1000px){ .metrics{grid-template-columns:repeat(2,1fr)} .layout{grid-template-columns:190px 1fr} }
/* The ICP number must remain visible on every publicly accessible page. */
.beian-footer{position:fixed;left:0;right:0;bottom:4px;z-index:30;text-align:center;font-size:12px;pointer-events:none}.beian-footer a{color:#667085;text-decoration:none;pointer-events:auto}.beian-footer a:hover{text-decoration:underline}
