:root{--accent:#315d59;--deep:#243f3c;--soft:#e4eeeb;--surface:#f4f8f6;--ink:#233a36;--muted:#687d77;--line:#dbe5e1;--body-size:16px}*{box-sizing:border-box}body{margin:0;color:var(--ink);font-family:"Microsoft YaHei","PingFang SC",sans-serif;font-size:var(--body-size);line-height:1.6}.backdrop,.veil{position:fixed;inset:0;z-index:-2}.backdrop{background:#638b7f center/cover no-repeat;transition:background-image .4s}.veil{z-index:-1;background:linear-gradient(130deg,#0f222852,#12261d1a)}button,input,select{font:inherit}button,a{ -webkit-tap-highlight-color:transparent}button{border:0;border-radius:10px;padding:10px 18px;background:var(--accent);color:#fff;cursor:pointer;transition:filter .15s,transform .15s}button:hover{filter:brightness(1.12)}button:active{transform:translateY(1px)}button:disabled{opacity:.5;cursor:wait}button.secondary{color:var(--accent);background:var(--soft)}button.danger{background:#a94348}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline}input,select{padding:10px 12px;border:1px solid var(--line);border-radius:9px;background:white;color:var(--ink);max-width:100%}input:focus,select:focus,button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.outer-header{max-width:1560px;margin:0 auto;display:flex;justify-content:space-between;align-items:center;padding:22px 32px;color:#fff;text-shadow:0 1px 6px #0005}.outer-header>span{font-size:23px;font-weight:700;letter-spacing:3px}.outer-header i{font-style:normal;opacity:.6}.outer-header>div{display:flex;align-items:center;gap:22px;font-size:14px}.glass{background:#ffffff24;border:1px solid #ffffff66;backdrop-filter:blur(10px)}.workspace{width:calc(100% - 64px);max-width:1496px;min-height:calc(100vh - 130px);margin:0 auto 32px;display:grid;grid-template-columns:244px minmax(0,1fr);border:1px solid #ffffff85;border-radius:24px;overflow:hidden;box-shadow:0 18px 70px #10241d40;background:#fff}aside{background:var(--deep);color:#fff;padding:32px 18px;display:flex;flex-direction:column;transition:background .35s}.brand{display:flex;align-items:center;gap:12px;margin:0 5px 34px}.brand-symbol{font-family:serif;font-size:24px;line-height:40px;text-align:center;width:42px;border:1px solid #ffffff4a;border-radius:12px}.brand strong{display:block;font-size:18px}.brand small{display:block;font-size:10px;letter-spacing:1.5px;opacity:.65}nav{display:flex;flex-direction:column;gap:8px}nav button{color:#ffffffbd;background:transparent;text-align:left;display:flex;gap:14px;align-items:center;padding:13px 17px}nav button.active{background:#ffffff1b;color:#fff;box-shadow:inset 3px 0 0 #ffffffab}nav button span{width:21px;text-align:center;font-size:20px}.side-bottom{margin-top:auto;padding:35px 13px 0;display:flex;flex-direction:column;gap:12px}.swatches{display:flex;gap:6px}.swatches span{width:22px;height:22px;border-radius:50%;border:1px solid #fff4}.side-bottom a,.side-bottom small{font-size:12px;color:#ffffffb0}.login{border:1px solid #ffffff42;background:#ffffff14}.side-bottom small{overflow-wrap:anywhere}main{min-width:0;background:linear-gradient(140deg,#fffffff0,var(--surface));padding:34px 34px 18px;transition:background .35s}.page-header{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:20px}.eyebrow{font-size:12px;letter-spacing:2px;color:var(--muted)}h1{font-size:28px;line-height:1.5;margin:5px 0 4px;font-weight:700}p{margin:0}.page-header p{color:var(--muted);font-size:14px}#clock{font-size:13px;color:var(--muted);white-space:nowrap}.connection{border:1px solid var(--line);border-radius:10px;background:#fff8;padding:10px 14px;margin-bottom:22px;font-size:13px;color:var(--muted)}.connection button{padding:2px 6px;background:transparent;color:var(--accent);font-size:13px;text-decoration:underline}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:15px;margin-bottom:23px}.stat{background:#fff;border:1px solid var(--line);border-radius:15px;padding:20px 22px;min-height:133px}.stat-label{color:var(--muted);font-size:14px}.stat-value{font-size:34px;font-weight:700;line-height:1.45;margin:6px 0 3px;color:var(--accent)}.stat small{font-size:12px;color:var(--muted)}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(260px,1fr);gap:20px}.card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:24px;min-width:0}.card h2{font-size:19px;margin:0 0 18px}.card h3{font-size:16px;margin:0 0 5px}.card p{font-size:14px;color:var(--muted)}.chart{height:420px;width:100%;min-width:0}.health-card{height:486px;display:flex;flex-direction:column;border-top:3px solid var(--accent)}.health-scroll{overflow-y:auto;flex:1;scrollbar-color:var(--accent) var(--soft);padding-right:8px;margin-bottom:12px}.health-item{padding:12px 14px;margin-bottom:8px;border-radius:10px;background:var(--surface)}.health-item h3{color:var(--accent)}.health-item p{font-size:15px;color:var(--ink)}.card-note{font-size:12px;color:var(--muted);margin-top:12px}.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:20px}.toolbar label{font-size:14px;color:var(--muted)}.table-scroll{overflow:auto;max-height:550px;border:1px solid var(--line);border-radius:12px}table{width:100%;border-collapse:collapse;font-size:14px;white-space:nowrap}th{position:sticky;top:0;z-index:1;background:var(--soft);color:var(--accent);text-align:left;padding:13px 12px;font-weight:600}td{padding:12px;border-bottom:1px solid var(--line)}tr:nth-child(even){background:var(--surface)}.badge{padding:3px 8px;border-radius:6px;font-size:12px;font-weight:600;background:#4f9b7217;color:#428867}.pagination{display:flex;justify-content:space-between;align-items:center;margin-top:14px;font-size:13px;color:var(--muted);gap:12px}.pagination>div{display:flex;gap:8px}.pagination button{padding:5px 12px}.empty{padding:60px 20px;text-align:center;color:var(--muted)}.form-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.field{display:flex;flex-direction:column;gap:8px;font-size:14px}.form-actions{margin-top:22px;display:flex;gap:10px;flex-wrap:wrap}.section-gap{margin-top:20px}.export-list{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:20px 0}.export-item{padding:16px;border:1px solid var(--line);border-radius:11px;background:var(--surface);font-size:14px}.export-item span{color:var(--accent);font-weight:700;margin-right:12px}.chart-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px}.chart-tabs button{background:var(--soft);color:var(--accent);font-size:13px;padding:8px 12px}.chart-tabs button.active{background:var(--accent);color:#fff}.chart-large{height:500px}.heat-view{max-height:640px;overflow:auto;cursor:grab;touch-action:pan-x pan-y}.heat-view img{display:block;width:100%;min-width:850px;max-width:none}.chart-note{margin-top:15px;color:var(--muted);font-size:13px}.hint{padding:13px 16px;background:var(--surface);border-left:3px solid var(--accent);font-size:14px;margin-bottom:18px}footer{display:flex;justify-content:space-between;color:var(--muted);font-size:12px;gap:20px;margin-top:28px}dialog{width:min(460px,calc(100% - 32px));border:0;border-radius:18px;padding:28px;color:var(--ink);box-shadow:0 20px 100px #0004}dialog::backdrop{background:#10262066;backdrop-filter:blur(4px)}dialog h2{font-size:21px;margin:0 0 18px}dialog .field{margin-bottom:16px}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:22px}#toast{position:fixed;bottom:28px;left:50%;transform:translate(-50%,20px);padding:12px 22px;background:var(--deep);color:#fff;border-radius:12px;opacity:0;pointer-events:none;z-index:20;max-width:90%;transition:.2s}#toast.show{opacity:1;transform:translate(-50%,0)}@media(min-width:1500px){main{padding:40px 40px 22px}.chart{height:440px}.health-card{height:506px}}@media(max-width:1050px){.workspace{grid-template-columns:200px minmax(0,1fr);width:calc(100% - 32px)}main{padding:26px 22px}.stats{grid-template-columns:1fr 1fr}.dashboard-grid{grid-template-columns:1fr}.health-card{height:400px}.form-grid{grid-template-columns:1fr 1fr}#clock{display:none}}@media(max-width:700px){.outer-header{padding:15px 18px}.outer-header>span{font-size:17px}.outer-header a{display:none}.outer-header>div{gap:0}.glass{padding:8px 11px;font-size:13px}.workspace{display:block;width:calc(100% - 20px);border-radius:17px;margin-bottom:10px}aside{padding:14px;display:block}.brand{margin:0 0 12px}.brand small{font-size:9px}nav{flex-direction:row;overflow:auto;gap:5px}nav button{white-space:nowrap;padding:8px 12px;font-size:14px}nav button span{display:none}.side-bottom{padding:12px 0 0;display:flex;flex-direction:row;align-items:center;gap:12px}.side-bottom a,.side-bottom small{display:none}.swatches span{width:17px;height:17px}.login{padding:6px 14px;font-size:13px;margin-left:auto}main{padding:23px 15px 15px}h1{font-size:25px}.stat{padding:15px;min-height:120px}.stat-value{font-size:29px}.stats{gap:10px}.card{padding:18px}.chart{height:330px}.chart-large{height:430px}.form-grid,.export-list{grid-template-columns:1fr}footer{flex-direction:column;gap:3px}.connection{font-size:12px}.page-header{margin-bottom:15px}}@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
:root .brand-symbol{min-width:54px;max-width:100px;width:auto;height:auto;min-height:54px;padding:8px;font-size:16px;line-height:1.35;overflow-wrap:anywhere;text-align:center;flex-shrink:0}
.severity-banner{padding:7px 12px;border:1px solid #475569;border-radius:8px;font-size:18px;font-weight:800;margin-bottom:12px}.badge{display:inline-block;border:0;font-size:12px;font-weight:600;text-align:center}.health-card{min-height:486px}.login[hidden]{display:none}#registerBtn{margin-left:0}@media(max-width:700px){.side-bottom{flex-wrap:wrap}#registerBtn{font-size:13px;padding:6px 10px}}

.city-toolbar{display:grid;grid-template-columns:150px 190px minmax(150px,1fr) auto auto;align-items:end;gap:10px;padding:18px;border:1px solid var(--line);border-radius:14px;background:var(--surface);margin-bottom:12px}.city-toolbar .field{min-width:0}.city-status{padding:10px 14px;background:var(--soft);border-radius:9px;font-size:13px;margin:10px 0;overflow-wrap:anywhere}.coverage-note{font-size:12px;color:var(--muted);margin:8px 0 14px}.history-controls{font-size:13px;padding:10px 14px;border:1px solid var(--line);border-radius:9px}.history-controls summary{cursor:pointer}.history-controls .toolbar{margin-bottom:8px}#compareSelect{min-height:190px;width:100%}@media(max-width:1200px){.city-toolbar{grid-template-columns:1fr 1fr}.city-search{grid-column:1/-1}}@media(max-width:700px){.city-toolbar{grid-template-columns:1fr 1fr;padding:12px}.city-toolbar button{font-size:13px;padding:10px}.history-controls .field{width:calc(50% - 10px)}}

/* 弹窗内反馈位于同一顶层；普通页面反馈仍固定于视口。 */
dialog #toast{z-index:1000;max-width:calc(100vw - 36px);box-shadow:0 8px 30px #17282424}button.danger{background:#f0e4e2;color:#894c46}.dialog-error{background:#f5e9e7;color:#854a43;border:1px solid #e6cdc8;border-radius:10px;padding:10px 13px;margin:0 0 16px;font-size:14px;line-height:1.6}.dialog-error[hidden]{display:none}.field-help{font-size:12px;color:var(--muted);line-height:1.7;margin:-6px 0 16px}input[aria-invalid="true"]{border-color:#b98277;background:#fffafa}dialog{max-height:calc(100dvh - 40px);overflow:auto}dialog .chart-note{margin:0 0 16px}.badge{border:1px solid #ffffff60}.stat-value{transition:background .2s,color .2s}

dialog #toast{top:12px;bottom:auto}
