:root{
  --bg:#eef2f8; --panel:rgba(255,255,255,.90); --panel-solid:#ffffff; --panel-2:#eef1f7;
  --line:#dbe2ee; --line-2:#c3cddf;
  --ink:#13203a; --ink-2:#46587a; --ink-3:#76869f;
  --accent:#123f7d; --accent-2:#1b5cb0; --ok:#0f7a55; --warn:#b0700f; --bad:#bc3b2c;
  --c1:#123f7d; --c2:#0f8a5f; --c3:#d4820a; --c4:#8a4bc0; --c5:#c0392b; --c6:#0d8ea8;
  --radius:10px; --shadow:0 1px 2px rgba(18,63,125,.07),0 6px 20px rgba(18,63,125,.07);
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,monospace;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  color-scheme:light;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;min-height:100%;
  background:linear-gradient(180deg,rgba(238,242,248,.72) 0%,rgba(240,244,250,.92) 46%,rgba(238,242,248,.97) 100%) fixed,
    url("campus.jpg") center top/cover no-repeat fixed,var(--bg)}
@media(max-width:820px){html{background-attachment:scroll,scroll}}
body{margin:0;background:transparent;color:var(--ink);font:15px/1.65 var(--sans);-webkit-font-smoothing:antialiased;min-height:100vh}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
code,.mono{font-family:var(--mono);font-size:.92em}

/* ---------- layout ---------- */
.wrap{display:grid;grid-template-columns:236px minmax(0,1fr);gap:0;max-width:1560px;margin:0 auto}
aside{position:sticky;top:0;height:100vh;overflow-y:auto;border-right:1px solid var(--line);padding:18px 14px 40px;background:rgba(255,255,255,.88);backdrop-filter:blur(14px) saturate(1.1);-webkit-backdrop-filter:blur(14px) saturate(1.1)}
.sitehead{display:flex;align-items:center;gap:10px;margin:0 0 10px}
.sitehead img{width:42px;height:42px;flex-shrink:0}
.sitehead .u{font-size:13px;font-weight:700;color:var(--accent);line-height:1.25;letter-spacing:.02em}
.sitehead .u small{display:block;font-weight:600;font-size:9.5px;color:var(--ink-3);letter-spacing:.08em;margin-top:2px}
.hero{position:relative;border-radius:var(--radius);overflow:hidden;border:1px solid var(--line);
  box-shadow:var(--shadow);margin:0 0 22px;background:#dfe7f3}
.hero img.bg{display:block;width:100%;height:215px;object-fit:cover;object-position:center 62%}
.hero .cap{position:absolute;inset:auto 0 0 0;display:flex;align-items:center;gap:12px;
  padding:16px 18px;background:linear-gradient(180deg,rgba(255,255,255,0),rgba(255,255,255,.80) 34%,rgba(255,255,255,.93) 100%)}
.hero .cap img{width:46px;height:46px}
.hero .cap b{font-size:15px;color:var(--accent);letter-spacing:.02em}
.hero .cap span{display:block;font-size:12px;color:var(--ink-2);margin-top:1px}
@media(max-width:1180px){.hero img.bg{height:250px}}
.brand{font-weight:700;font-size:15px;letter-spacing:.2px;line-height:1.35;margin:2px 0 4px}
.brand small{display:block;font-weight:500;color:var(--ink-3);font-size:12px;margin-top:4px}
nav{margin-top:16px;display:flex;flex-direction:column;gap:1px}
nav a{padding:7px 10px;border-radius:7px;color:var(--ink-2);font-size:13.5px;display:flex;gap:8px;align-items:center}
nav a .n{font-family:var(--mono);font-size:11px;color:var(--ink-3);min-width:16px}
nav a:hover{background:var(--panel-2);text-decoration:none;color:var(--ink)}
nav a.on{background:color-mix(in srgb,var(--accent) 14%,transparent);color:var(--accent);font-weight:600}
nav a.on .n{color:var(--accent)}
main{padding:26px 34px 120px;min-width:0}
section{scroll-margin-top:16px;margin-bottom:44px}
h1{font-size:27px;line-height:1.3;margin:4px 0 6px;letter-spacing:-.2px}
h2{font-size:20px;margin:0 0 14px;padding-bottom:9px;border-bottom:1px solid var(--line);letter-spacing:-.1px}
h3{font-size:15.5px;margin:24px 0 10px;color:var(--ink)}
h4{font-size:13.5px;margin:18px 0 8px;color:var(--ink-2);text-transform:none;letter-spacing:.02em}
p{margin:0 0 11px;color:var(--ink-2)}
.lede{font-size:15.5px;color:var(--ink-2);max-width:76ch}
.muted{color:var(--ink-3);font-size:13px}
hr{border:0;border-top:1px solid var(--line);margin:26px 0}

/* ---------- bits ---------- */
.topbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:18px}
.tag{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px;background:var(--panel-2);color:var(--ink-2);border:1px solid var(--line)}
.tag.ok{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 35%,var(--line))}
.tag.warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 35%,var(--line))}
.tag.bad{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 35%,var(--line))}
.btn{appearance:none;border:1px solid var(--line-2);background:var(--panel-solid);color:var(--ink);padding:6px 12px;border-radius:7px;font:inherit;font-size:13px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.btn:hover{border-color:var(--accent);color:var(--accent)}
.btn.pri{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.pri:hover{background:var(--accent-2);border-color:var(--accent-2);color:#fff}
.btn.sm{padding:3px 9px;font-size:12px}
select,input[type=date]{font:inherit;font-size:13px;padding:5px 9px;border-radius:7px;border:1px solid var(--line-2);background:var(--panel-solid);color:var(--ink)}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.spacer{flex:1}

.card{background:var(--panel);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow)}
.grid{display:grid;gap:14px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
@media(max-width:1100px){.g4{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:820px){.wrap{grid-template-columns:1fr}aside{position:static;height:auto;border-right:0;border-bottom:1px solid var(--line)}main{padding:20px 16px 90px}.g2,.g3,.g4{grid-template-columns:1fr}nav{flex-direction:row;flex-wrap:wrap}}

.kpi{background:var(--panel);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:var(--radius);padding:13px 15px;box-shadow:var(--shadow)}
.kpi .k{font-size:11.5px;color:var(--ink-3);font-weight:600;letter-spacing:.03em;margin-bottom:5px}
.kpi .v{font-family:var(--mono);font-size:21px;font-weight:600;letter-spacing:-.5px;line-height:1.2}
.kpi .u{font-size:11.5px;color:var(--ink-3);font-weight:500;margin-left:3px;font-family:var(--sans)}
.kpi .d{font-size:12px;margin-top:4px;color:var(--ink-3)}
.kpi .d.up{color:var(--bad)} .kpi .d.dn{color:var(--ok)}

/* ---------- tables ---------- */
.tbl-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:var(--shadow)}
table{border-collapse:collapse;width:100%;font-size:13.2px}
caption{caption-side:top;text-align:left;padding:11px 14px 9px;font-weight:650;font-size:13.5px;color:var(--ink);border-bottom:1px solid var(--line)}
th,td{padding:7px 12px;text-align:right;border-bottom:1px solid var(--line);white-space:nowrap}
th{background:var(--panel-2);font-weight:600;color:var(--ink-2);font-size:12.5px;position:sticky;top:0}
th:first-child,td:first-child{text-align:left}
tbody tr:hover{background:var(--panel-2)}
tbody tr:last-child td{border-bottom:0}
td.num,th.num{font-family:var(--mono);font-variant-numeric:tabular-nums}
tr.total td{font-weight:650;background:var(--panel-2)}
.tbl-head{display:flex;align-items:center;gap:8px;margin:0 0 8px}
.tbl-head h3,.tbl-head h4{margin:0}

/* ---------- charts ---------- */
.chart{width:100%;height:330px}
.chart.tall{height:420px}
.chart.short{height:240px}
.chart-note{font-size:12.5px;color:var(--ink-3);margin-top:8px}

/* ---------- callouts ---------- */
.note{border-left:3px solid var(--accent);background:color-mix(in srgb,var(--accent) 7%,var(--panel-solid));padding:11px 14px;border-radius:0 8px 8px 0;margin:14px 0;font-size:13.8px;color:var(--ink-2)}
.note.ok{border-color:var(--ok);background:color-mix(in srgb,var(--ok) 8%,var(--panel-solid))}
.note.warn{border-color:var(--warn);background:color-mix(in srgb,var(--warn) 8%,var(--panel-solid))}
.note.bad{border-color:var(--bad);background:color-mix(in srgb,var(--bad) 8%,var(--panel-solid))}
.note b{color:var(--ink)}

.finding{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);margin-bottom:12px;overflow:hidden}
.finding>summary{cursor:pointer;padding:12px 16px;display:flex;gap:10px;align-items:flex-start;font-weight:600;font-size:14px;list-style:none}
.finding>summary::-webkit-details-marker{display:none}
.finding>summary::before{content:"▸";color:var(--ink-3);font-size:12px;margin-top:3px;transition:transform .15s}
.finding[open]>summary::before{transform:rotate(90deg)}
.finding .body{padding:2px 16px 16px 38px;border-top:1px solid var(--line);margin-top:0}
.finding .body p:last-child{margin-bottom:0}
.sev{font-size:10.5px;font-weight:700;padding:2px 7px;border-radius:4px;letter-spacing:.04em;flex-shrink:0;margin-top:1px}
.sev.a{background:color-mix(in srgb,var(--bad) 16%,transparent);color:var(--bad)}
.sev.b{background:color-mix(in srgb,var(--warn) 18%,transparent);color:var(--warn)}
.sev.c{background:color-mix(in srgb,var(--ok) 16%,transparent);color:var(--ok)}

ul,ol{margin:0 0 11px;padding-left:22px;color:var(--ink-2)}
li{margin-bottom:5px}
.katex{font-size:1.02em}
.eq{margin:14px 0;overflow-x:auto;padding:4px 0}
.dl{display:grid;grid-template-columns:max-content 1fr;gap:4px 16px;font-size:13.5px;margin:0}
.dl dt{font-weight:600;color:var(--ink)}
.dl dd{margin:0;color:var(--ink-2)}
.pill-row{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 14px}
.pill{padding:5px 12px;border:1px solid var(--line-2);border-radius:999px;font-size:12.5px;cursor:pointer;background:var(--panel-solid);color:var(--ink-2)}
.pill:hover{border-color:var(--accent);color:var(--accent)}
.pill.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.loading{padding:40px;text-align:center;color:var(--ink-3);font-size:13px}
footer{border-top:1px solid var(--line);margin-top:40px;padding-top:18px;color:var(--ink-3);font-size:12.5px}

/* ---------- 水印 + 作者署名 ---------- */
.wm{position:fixed;inset:-35%;z-index:5;pointer-events:none;user-select:none;
  transform:rotate(-24deg);opacity:.062;
  background:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MzAiIGhlaWdodD0iMTcwIj4KPGcgZm9udC1mYW1pbHk9IlBpbmdGYW5nIFNDLEhpcmFnaW5vIFNhbnMgR0IsTWljcm9zb2Z0IFlhSGVpLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTciIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiMxMjNmN2QiIGxldHRlci1zcGFjaW5nPSIxLjUiPgo8dGV4dCB4PSI0IiB5PSIzNCI+5Y2X5piM5aSn5a2mIMK3IOaItOS6rOWFtDwvdGV4dD4KPHRleHQgeD0iMjE5IiB5PSIxMTkiPuWNl+aYjOWkp+WtpiDCtyDmiLTkuqzlhbQ8L3RleHQ+CjwvZz48L3N2Zz4=") repeat left top}
@media(max-width:820px){.wm{opacity:.05;background-size:320px 130px}}

.byline{display:flex;align-items:center;gap:8px;margin:10px 0 2px;padding:9px 10px;
  border:1px solid var(--line);border-radius:8px;background:var(--panel-2)}
.byline .nm{font-size:13.5px;font-weight:700;color:var(--accent);line-height:1.3}
.byline .nm small{display:block;font-weight:500;font-size:11px;color:var(--ink-3);
  margin-top:3px;letter-spacing:.01em;line-height:1.45}
.hero .cap .who{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  text-align:center;white-space:nowrap}
.hero .cap .who b{display:block;font-size:27px;color:var(--accent);letter-spacing:.12em;line-height:1.15}
.hero .cap .who span{display:block;font-size:14px;color:var(--ink-2);margin-top:4px;letter-spacing:.02em}
@media(max-width:1180px){
  .hero .cap{flex-direction:column;align-items:center;text-align:center;gap:6px;padding:12px 14px}
  .hero .cap .who{position:static;transform:none;white-space:normal}
  .hero .cap .who b{font-size:22px}
}

/* ---------- print / PDF ---------- */
@media print{
  html{background:#fff}
  :root{--bg:#fff;--panel:#fff;--panel-solid:#fff;--panel-2:#f6f7f9;--line:#d5dae3;--ink:#111;--ink-2:#333;--ink-3:#666}
  aside,.btn,.tbl-head .btn{display:none!important}
  .wm{opacity:.05}
  .wrap{display:block;max-width:none}
  main{padding:0}
  section{break-inside:avoid-page;margin-bottom:24px}
  .card,.tbl-wrap,.finding{box-shadow:none;break-inside:avoid}
  .finding .body{display:block!important}
  .chart{height:300px}
  a{color:#111;text-decoration:none}
  table{font-size:10.5px}
  th,td{padding:4px 7px}
}

/* ---------- MATLAB 源码：按编辑器配色，带行号 ---------- */
:root{ --cm:#028009; --kw:#0000ff; --st:#a020f0; --ln:#9aa3ae; }
.mcode{display:grid;grid-template-columns:3.2em 1fr;column-gap:.6em;
  font-family:var(--mono);font-size:12.2px;line-height:1.55;
  max-height:620px;overflow:auto;padding:10px 12px;border:1px solid var(--line);
  border-radius:8px;background:var(--panel-2)}
.mcode .ln{text-align:right;color:var(--ln);user-select:none}
.mcode .cl{white-space:pre-wrap;word-break:normal;overflow-wrap:break-word;
  padding-left:2.6em;text-indent:-2.6em}
.mcode .cm{color:var(--cm)} .mcode .kw{color:var(--kw)} .mcode .st{color:var(--st)}
.cm-lg{color:var(--cm);font-weight:600}
.kw-lg{color:var(--kw);font-weight:600}
.st-lg{color:var(--st);font-weight:600}
.eqcode-cell{font-family:var(--mono);font-size:11.6px;line-height:1.5;text-align:left;
  white-space:pre-wrap;word-break:normal;overflow-wrap:break-word}
.eqcode-cell .cm{color:var(--cm)} .eqcode-cell .kw{color:var(--kw)} .eqcode-cell .st{color:var(--st)}
#eqmap td{vertical-align:top;white-space:normal}
#eqmap td:nth-child(3),#eqmap td:nth-child(4){text-align:left}

/* ══════════════ 登录、倒计时与下载闸门 ══════════════ */
.authbar{position:fixed;top:12px;right:16px;z-index:60;display:flex;align-items:center;gap:8px}
.authcd{display:none;flex-direction:column;align-items:flex-end;line-height:1.1;
  background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:5px 10px;
  box-shadow:var(--shadow);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.authcd b{font-family:var(--mono);font-size:14px;color:var(--accent);letter-spacing:.02em;font-variant-numeric:tabular-nums}
.authcd small{font-size:10px;color:var(--ink-3);letter-spacing:.06em}
.authcd.show{display:flex}
.authcd.warn b{color:var(--bad)}
.authbtn{border:1px solid var(--line);background:var(--panel);color:var(--accent);font:600 13px/1 var(--sans);
  padding:9px 14px;border-radius:9px;cursor:pointer;box-shadow:var(--shadow);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.authbtn:hover{background:var(--panel-solid);border-color:var(--line-2)}
body.is-guest .authbtn{background:var(--accent);color:#fff;border-color:var(--accent)}
body.is-guest .authbtn:hover{background:var(--accent-2)}
@media(max-width:820px){.authbar{top:8px;right:10px}.authcd small{display:none}}

.authmask{position:fixed;inset:0;z-index:120;background:rgba(14,24,42,.42);
  backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);display:none;place-items:center;padding:20px}
.authmask.show{display:grid}
.authbox{width:min(420px,100%);background:var(--panel-solid);border:1px solid var(--line);
  border-radius:14px;padding:24px 26px;box-shadow:0 18px 50px rgba(14,32,64,.22)}
.authbox h3{margin:0 0 8px;font-size:17px}
.authtip{margin:0 0 16px;font-size:13px;color:var(--ink-2);line-height:1.6}
.authbox input[type=password]{width:100%;padding:11px 13px;font:15px var(--sans);color:var(--ink);
  border:1px solid var(--line-2);border-radius:9px;background:var(--panel-solid)}
.authbox input[type=password]:focus{outline:2px solid color-mix(in srgb,var(--accent) 35%,transparent);outline-offset:1px}
.autherr{display:none;margin-top:9px;font-size:12.5px;color:var(--bad)}
.autherr.show{display:block}
.authrow{display:flex;justify-content:flex-end;gap:9px;margin-top:16px}

/* 未登录时下载相关按钮置灰 */
.dl-locked{opacity:.42;filter:grayscale(1);cursor:not-allowed !important;
  box-shadow:none !important;text-decoration:none !important}
a.dl-locked:hover{text-decoration:none}

/* 截图干扰：未登录且触发时整页模糊 */
body.concealed .wrap{filter:blur(15px) saturate(.5);pointer-events:none;user-select:none}
body.is-guest{-webkit-user-select:none;user-select:none}
body.is-guest input,body.is-guest textarea{-webkit-user-select:text;user-select:text}
.shotveil{position:fixed;inset:0;z-index:110;display:none;place-items:center;
  background:rgba(238,242,248,.72);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.shotveil.show{display:grid}
.shotveil .sv{text-align:center;background:var(--panel-solid);border:1px solid var(--line);
  border-radius:12px;padding:20px 26px;box-shadow:var(--shadow)}
.shotveil .sv b{display:block;font-size:15px;color:var(--ink)}
.shotveil .sv span{display:block;margin-top:5px;font-size:12.5px;color:var(--ink-3)}
@media print{
  body.is-guest .wrap,body.is-guest .wm{display:none !important}
  body.is-guest::after{content:"该内容需登录后查看";display:block;margin:40vh auto;
    text-align:center;font:600 16px var(--sans)}
}
