:root{--radius-card: 7px;--radius-control: 5px;--radius-tag: 6px;--pad-card: 8px 10px;--topbar-height: 58px;--tree-width: 300px;--drawer-width: 306px;--font-main: "Source Han Sans CN", "Source Han Sans SC", "Noto Sans SC", "HarmonyOS Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;--fs-21: 21px;--fs-15: 15px;--fs-14: 14px;--fs-13: 13px;--fs-12: 12px;--class-c1: #c53a1f;--class-c2: #e08a2e;--class-c3: #d9c44a;--class-c4: #5da75f;--class-c5: #1d7a4f;--chart-ssp1: #45b97c;--chart-ssp2: #62b5b8;--chart-ssp3: #e7a83f;--chart-ssp4: #a887d6;--chart-ssp5: #ed654c}:root,:root[data-theme=dark]{--bg: #0d1110;--bg-deep: #070908;--surface: #151a18;--surface2: #1b211e;--surface3: #222a26;--line: #303a34;--line-soft: #26302b;--text: #eef4f0;--muted: #93a198;--faint: #5d6b63;--accent: #45b97c;--accent-soft: #1d4935;--accent-text: #c9efda;--amber: #e7a83f;--cyan: #62b5b8;--red: #ed654c;--purple: #a887d6;--shadow: 0 15px 34px rgba(0, 0, 0, .32);--shadow-soft: 0 6px 18px rgba(0, 0, 0, .28);--map-bg: #10151a;--map-panel: rgba(21, 26, 24, .92);--map-panel-border: #39453e;--tooltip-bg: #1d2420;--modal-dim: rgba(0, 0, 0, .55);--scroll-thumb: #36423b;color-scheme:dark}:root[data-theme=light]{--bg: #e8ece6;--bg-deep: #dfe4dd;--surface: #f7f9f5;--surface2: #e3e7e1;--surface3: #dae1d9;--line: #c8d1c9;--line-soft: #d6dcd6;--text: #1b241f;--muted: #5b675f;--faint: #8a958d;--accent: #1e8a55;--accent-soft: #e2f3e9;--accent-text: #105c38;--amber: #b97f1d;--cyan: #2f8a8d;--red: #d14f38;--purple: #8a66b8;--shadow: 0 10px 26px rgba(30, 45, 36, .1);--shadow-soft: 0 5px 14px rgba(30, 45, 36, .08);--map-bg: #d4dcd4;--map-panel: rgba(255, 255, 255, .94);--map-panel-border: #c3cdc4;--tooltip-bg: #ffffff;--modal-dim: rgba(20, 30, 24, .4);--scroll-thumb: #c2ccc4;color-scheme:light}@font-face{font-family:Source Han Sans CN;src:url(/fonts/SourceHanSansCN-Regular.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:Source Han Sans CN;src:url(/fonts/SourceHanSansCN-Bold.woff2) format("woff2");font-weight:700;font-display:swap}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{font:var(--fs-14)/1.5 var(--font-main);background:var(--bg-deep);color:var(--text);-webkit-font-smoothing:antialiased;overflow:hidden}small{font-size:var(--fs-12);color:var(--muted)}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}input,select{font-family:inherit}*::-webkit-scrollbar{width:8px;height:8px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background:var(--scroll-thumb);border-radius:4px}*::-webkit-scrollbar-thumb:hover{background:var(--faint)}.panel{background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow-soft)}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border-bottom:1px solid var(--line-soft)}.panel-head h2{margin:0;font-size:var(--fs-14);font-weight:700;color:var(--text);white-space:nowrap}.panel-head p{margin:2px 0 0;font-size:var(--fs-13);color:var(--muted)}.panel-head .head-title{min-width:0;display:flex;align-items:baseline;gap:8px}.panel-head .head-title p{margin:0}.panel-head .head-title h2,.panel-head .head-title p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.info-icon{width:16px;height:16px;flex:none;display:grid;place-items:center;border-radius:50%;background:var(--surface2);color:var(--muted);font-size:var(--fs-12);font-style:normal;line-height:1;-webkit-user-select:none;user-select:none}.info-icon:hover{color:var(--accent);border-color:var(--accent)}.caption{font-size:var(--fs-14);letter-spacing:.12em;font-weight:700;text-transform:uppercase;padding:0 0 0 8px;border-left:3px solid var(--accent)}.dot{width:8px;height:8px;border-radius:2px;flex:none}.empty{display:grid;place-items:center;height:100%;min-height:90px;color:var(--faint);font-size:var(--fs-13)}.num{font-variant-numeric:tabular-nums}img,canvas,svg{max-width:100%}.ant-message{font-size:var(--fs-15)}.ant-message-notice-content{padding:9px 16px}.topbar{height:var(--topbar-height);flex:none;display:flex;align-items:center;gap:28px;padding:0 16px;background:var(--surface);box-shadow:0 1px 6px #0000001f;z-index:50}.brand{display:flex;align-items:center;gap:9px;font-size:var(--fs-21);font-weight:700;color:var(--text);white-space:nowrap;text-decoration:none}.brand-logo{width:45px;height:45px;flex:none;border-radius:var(--radius-tag);object-fit:cover}.brand-copy{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:var(--fs-15);white-space:nowrap;margin-left:6px;padding-left:12px;border-left:1px solid var(--line-soft)}.brand-copy .uni-logo{height:45px;width:auto;flex:none;border-radius:var(--radius-tag);object-fit:contain}@media(max-width:1400px){.brand-copy .brand-copy-text{display:none}}@media(max-width:1100px){.brand-copy{display:none}}.top-nav{display:flex;align-items:stretch;gap:20px;height:100%}.top-nav a{display:flex;align-items:center;color:var(--muted);text-decoration:none;font-size:var(--fs-15);border-bottom:2px solid transparent;white-space:nowrap}.top-nav a:hover{color:var(--text)}.top-nav a.active{color:var(--text);border-bottom-color:var(--accent)}.top-user{margin-left:auto;display:flex;align-items:center;gap:12px;color:var(--muted);font-size:var(--fs-15);white-space:nowrap}.top-clock{font-variant-numeric:tabular-nums;color:var(--muted);font-size:var(--fs-14);padding:5px 10px;border-radius:var(--radius-tag);background:var(--surface2)}.user-name{display:inline-flex;align-items:center;gap:5px;color:var(--text)}.trend-page{flex:1;min-height:0;display:flex;flex-direction:column;overflow-y:auto;padding:8px 10px}.trend-page .metrics{margin-top:10px;grid-template-columns:repeat(6,1fr)}.head-extra{display:flex;gap:6px;align-items:center;font-size:var(--fs-13)}.head-title h2.inline{display:inline-flex;align-items:center;gap:6px}.accent-text{color:var(--accent)}.map-wrap{flex:1;min-height:210px;display:flex}.filters{display:flex;align-items:flex-end;gap:10px;padding:8px 10px;background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow-soft);font-size:var(--fs-13)}.filter{min-width:148px}.filter label{display:block;color:var(--muted);margin-bottom:4px}.f-select{height:32px;display:flex;justify-content:space-between;align-items:center;gap:8px;padding:0 10px;border:1px solid var(--line);border-radius:var(--radius-control);background:var(--surface2);color:var(--text);font-size:var(--fs-12);cursor:pointer;white-space:nowrap;min-width:0}.f-select:hover{border-color:var(--accent)}.f-select .caret{color:var(--muted);font-size:var(--fs-12)}.trend-select{width:148px}.trend-range{width:200px}.map-year-select{width:78px}.map-year-select .ant-select-selector{background:var(--surface2)!important;border-color:var(--line)!important;border-radius:var(--radius-control)!important;height:24px!important;font-size:var(--fs-12)}.map-year-select .ant-select-selection-item,.map-year-select .ant-select-selection-placeholder{line-height:22px!important;color:var(--text)}.map-year-select .ant-select-arrow{color:var(--muted)}.year-tabs{display:flex;gap:4px}.year-tab{height:32px;padding:0 14px;border:1px solid var(--line);border-radius:var(--radius-control);background:var(--surface2);color:var(--muted);font-size:var(--fs-12)}.year-tab.on{border-color:var(--accent);color:var(--text);background:var(--accent-soft)}.btn{height:32px;padding:0 15px;border:1px solid var(--line);border-radius:var(--radius-control);background:var(--surface2);color:var(--text);font-size:var(--fs-13)}.btn:hover{border-color:var(--accent);color:var(--accent)}.btn.primary{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-text)}.btn.primary:hover{color:var(--text)}.btn.tiny{line-height:1;padding:0 8px;font-size:var(--fs-14)}.switch-group{display:flex;border:1px solid var(--line);border-radius:var(--radius-control);overflow:hidden}.switch-group button{height:24px;padding:0 9px;color:var(--muted);background:var(--surface2)}.switch-group button+button{border-left:1px solid var(--line)}.switch-group button.on{color:var(--accent-text);background:var(--accent-soft)}.metrics{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-top:10px}.metric{position:relative;background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow-soft);padding:6px 11px 7px;min-width:0;font-size:var(--fs-13);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;border:1px solid transparent}.metric:hover{transform:translateY(-2px);border-color:var(--accent);box-shadow:var(--shadow-md)}.metric>small{display:block;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:18px;font-size:inherit;margin-bottom:5px}.metric>strong{font-size:var(--fs-21);margin:2px 5px 0 1px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.metric>em{font-style:normal;color:var(--accent);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.metric .tip-wrap{position:absolute;right:8px;top:7px}.tip-wrap{position:relative}.tip-title{font-weight:700;margin-bottom:3px}.ant-tooltip .ant-tooltip-container,.ant-tooltip .ant-tooltip-inner{background:var(--tooltip-bg)!important;color:var(--text)!important;font-size:var(--fs-12);line-height:1.55;border-radius:var(--radius-control);box-shadow:var(--shadow-soft);padding:var(--pad-card)}.ant-tooltip .ant-tooltip-arrow span:before,.ant-tooltip .ant-tooltip-arrow span:after{background:var(--tooltip-bg)!important}.drawer-panel{background:color-mix(in srgb,var(--surface) 88%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);display:flex;flex-direction:column;min-height:0}.drawer-panel.left{width:var(--tree-width);flex:none;box-shadow:2px 0 8px #00000014}.drawer-panel.right{width:var(--drawer-width);flex:none;box-shadow:-2px 0 8px #00000014}.drawer-panel.collapsed{width:0!important;min-width:0;opacity:0;visibility:hidden;pointer-events:none}@media(min-width:768px){.drawer-panel{transition:width .28s ease,opacity .28s ease,visibility .28s}.drawer-panel.collapsed .drawer-body{padding:0;overflow:hidden}}.drawer-body{flex:1;overflow-y:auto;min-height:0;padding:var(--pad-card);display:flex;flex-direction:column;gap:10px}.edge-tab{position:absolute;z-index:40;display:flex;align-items:center;justify-content:center;gap:6px;background:color-mix(in srgb,var(--surface) 86%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:var(--shadow-soft);color:var(--muted);font-size:var(--fs-13);letter-spacing:.08em;cursor:pointer;-webkit-user-select:none;user-select:none;transition:opacity .25s ease,transform .25s ease,visibility .25s}.edge-tab.hidden{opacity:0;transform:scale(.9);visibility:hidden;pointer-events:none}.edge-tab:hover{color:var(--accent)}.edge-tab.left{left:0;top:50%;transform:translateY(-50%);padding:10px 4px;border-left:none;border-radius:0 var(--radius-tag) var(--radius-tag) 0;writing-mode:vertical-lr}.edge-tab.left svg{rotate:90deg}.edge-tab.right{right:0;top:50%;transform:translateY(-50%);padding:10px 5px;border-right:none;border-radius:var(--radius-tag) 0 0 var(--radius-tag);writing-mode:vertical-lr}.edge-tab.right svg{rotate:-90deg}.edge-tab.bottom{left:50%;bottom:0;transform:translate(-50%);padding:5px 14px;border-bottom:none;border-radius:var(--radius-tag) var(--radius-tag) 0 0}.overview-layout{flex:1;min-height:0;display:flex;position:relative}.overview-map-wrap{flex:1;min-width:0;position:relative;display:flex}.ltree{display:flex;flex-direction:column;height:100%}.ltree-caption{flex:none;display:flex;align-items:center;justify-content:space-between;gap:6px;padding:var(--pad-card);border-bottom:1px solid var(--line-soft)}.panel-collapse-btn{flex:none;display:grid;place-items:center;color:var(--muted);font-size:var(--fs-13);line-height:1;padding:1px 3px;border-radius:4px}.panel-collapse-btn:hover{color:var(--accent);background:var(--surface3)}.ltree-root{flex:1;overflow-y:auto;padding:var(--pad-card)}.ltree-branch{margin-bottom:2px}.ltree-branch-head{height:36px;display:flex;align-items:center;gap:7px;font-weight:700;font-size:var(--fs-13);color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:var(--radius-control);padding:0 4px}.ltree-branch-head:hover{background:var(--surface2)}.ltree-arrow{width:14px;flex:none;color:var(--accent);font-size:var(--fs-12);transition:transform .15s;display:grid;place-items:center}.ltree-arrow.open{transform:rotate(90deg)}.ltree-arrow.leaf{visibility:hidden}.ltree-children{margin-left:10px;padding-left:12px;border-left:1px solid #455149;position:relative}.ltree-group-title{height:30px;display:flex;align-items:center;font-size:var(--fs-12);color:var(--faint);gap:6px}.ltree-group-title:before{content:"";width:4px;height:4px;border-radius:50%;background:var(--line)}.ltree-item{position:relative;display:flex;align-items:flex-start;gap:6px;padding:3px 3px 6px 0;border-radius:var(--radius-control);cursor:pointer;-webkit-user-select:none;user-select:none;min-width:0}.ltree-item:hover{background:var(--surface2)}.ltree-item.active{background:var(--accent-soft)}.ltree-item.active .layer-name{color:var(--accent-text);font-weight:700}.ltree-eye{width:26px;height:34px;flex:none;align-self:center;display:grid;place-items:center;font-size:var(--fs-15);color:var(--muted);border-radius:5px}.ltree-eye.off{color:var(--faint)}.ltree-eye:hover{color:var(--accent);background:var(--surface3)}.ltree-main{flex:1;min-width:0}.ltree-item-row{display:flex;align-items:center;gap:7px;height:24px;min-width:0}.ltree-item .layer-name{flex:1;min-width:0;font-size:var(--fs-13);color:var(--text);overflow:hidden;white-space:nowrap}.ltree-item .layer-name .ln{overflow:hidden;text-overflow:ellipsis}.ltree-opacity{width:100%;display:flex;align-items:center;gap:7px;padding:2px 4px 3px}.ltree-opacity input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:1;max-width:110px;min-width:36px;height:4px;margin:0;border-radius:2px;background:var(--line);outline:none;cursor:pointer}.ltree-opacity input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:10px;height:10px;border-radius:50%;background:var(--accent);border:none}.ltree-opacity input[type=range]::-moz-range-thumb{width:10px;height:10px;border-radius:50%;background:var(--accent);border:none}.ltree-opacity input[type=range]::-moz-range-track{height:4px;border-radius:2px;background:var(--line)}.ltree-opacity .op-val{color:var(--faint);font-size:var(--fs-12);min-width:30px;text-align:right;font-variant-numeric:tabular-nums}.ltree-info{width:17px;height:17px;flex:none;display:grid;place-items:center;border-radius:50%;background:var(--surface2);color:var(--muted);font-size:var(--fs-12);cursor:pointer}.ltree-item:hover .ltree-info,.ltree-item.active .ltree-info{background:var(--accent-soft);color:var(--accent)}.modal-dim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:var(--modal-dim);display:grid;place-items:center}.modal{width:min(440px,100%);max-height:82vh;background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;overflow:hidden;font-size:var(--fs-13)}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 10px;border-bottom:1px solid var(--line-soft)}.modal-head h3{margin:0;font-size:var(--fs-14);font-weight:700;color:var(--text)}.modal-close{border:none;background:none;color:var(--muted);font-size:var(--fs-14);cursor:pointer;line-height:1;padding:2px 5px}.modal-close:hover{color:var(--red)}.modal-body{padding:4px 10px 8px;overflow-y:auto}.meta-list{margin:0;display:grid;grid-template-columns:1fr 1fr;gap:0 20px}.meta-list>div{display:grid;grid-template-columns:66px 1fr;gap:0 8px;padding:5px 0;border-bottom:1px dashed var(--line-soft)}.meta-list dt{color:var(--muted)}.meta-list dd{margin:0;color:var(--text);word-break:break-all}.meta-list .meta-classes{grid-column:1 / -1;display:flex;flex-direction:column;gap:6px;padding-bottom:2px;border-bottom:none}.meta-classes dd{display:flex;flex-wrap:wrap;gap:8px 12px}.meta-class{display:inline-flex;align-items:center;gap:5px;color:var(--muted)}.meta-class i{width:20px;height:13px;border-radius:2px;display:inline-block}.stat-total{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 8px;padding:var(--pad-card);background:var(--surface2);border-radius:var(--radius-card);box-shadow:var(--shadow-soft);font-size:var(--fs-13);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;border:1px solid transparent}.stat-total:hover{transform:translateY(-2px);border-color:var(--accent);box-shadow:var(--shadow-md)}.stat-total small{font-size:inherit;white-space:nowrap;color:var(--muted)}.stat-total strong{font-size:var(--fs-21);color:var(--accent);font-variant-numeric:tabular-nums;letter-spacing:.5px}.stat-total span{color:var(--muted)}.stat-metrics{display:grid;grid-template-columns:1fr 1fr;gap:8px}.stat-metric{display:flex;align-items:baseline;flex-wrap:wrap;gap:2px 5px;background:var(--surface2);border-radius:var(--radius-card);padding:7px 5px 7px 10px;min-width:0;font-size:var(--fs-13);transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;border:1px solid transparent}.stat-metric:hover{transform:translateY(-2px);border-color:var(--accent);box-shadow:var(--shadow-md)}.stat-metric small{flex-basis:100%;color:var(--muted);font-size:inherit;margin-bottom:2px}.stat-metric b{font-size:var(--fs-15);color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-metric .unit{color:var(--faint);font-size:var(--fs-13);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-sec{background:var(--surface2);border-radius:var(--radius-card);box-shadow:var(--shadow-soft);overflow:hidden}.stat-sec>h3{flex:none;margin:0;padding:7px 8px;font-size:var(--fs-13);font-weight:700;color:var(--text);border-bottom:1px solid var(--line-soft);border-left:3px solid var(--accent);display:flex;align-items:center;gap:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-sec>h3 .tip-wrap{margin-left:auto}.stat-sec>h3 .tip-wrap .info-icon{background-color:var(--surface3)}.stat-sec.grow{flex:1;min-height:150px;display:flex;flex-direction:column;margin-bottom:0}.stat-sec.grow>div:last-child{flex:1;min-height:0;height:auto!important}.trend-grid{display:grid;grid-template-columns:1.6fr 1fr;grid-template-rows:1fr;gap:10px;margin-top:10px;flex:1;min-height:0}.trend-bottom{display:grid;grid-template-columns:1fr 1.3fr;grid-template-rows:1fr;gap:10px;margin-top:10px;flex:1;min-height:0}.scenario-grid{position:relative;display:grid;grid-template-columns:256px 1fr 380px;grid-template-rows:1fr;gap:10px;margin-top:10px;flex:0 0 auto;height:540px;min-height:0;transition:grid-template-columns .28s ease}.scenario-grid.tree-collapsed{grid-template-columns:0 1fr 380px}.scenario-grid .col-tree{overflow:hidden}.scenario-page{flex:1;min-height:0;display:flex;flex-direction:column;overflow-y:auto;padding:8px 10px;position:relative}.scenario-loading-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;background:#00000040;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.fm-row{display:flex;gap:10px;align-items:stretch}.fm-row .filters{flex:0 0 auto}.fm-row .metrics{flex:1;margin-top:0}.scenario-page .map-wrap{min-height:380px}.scenario-bottom{display:grid;grid-template-columns:1.4fr 1fr;grid-template-rows:1fr;gap:10px;margin-top:10px;flex:1 1 auto;min-height:200px;min-width:0}.scenario-bottom .chart-h{min-height:150px}.scenario-bottom>.panel{min-width:0;min-height:0;display:flex;flex-direction:column}.scenario-page .ltree-root{padding-top:0}.panel.col-line,.panel.col-rank,.panel.col-map,.panel.col-history,.panel.col-tree,.panel.col-map2,.panel.col-ssp{min-width:0;min-height:0;display:flex;flex-direction:column}.chart-h{flex:1;min-height:0;padding:8px 0 0 5px}.panel.col-history .chart-h,.panel.col-rank .chart-h{padding:8px 0 0 5px}@media(min-width:1600px){.overview-layout .map-area{min-height:0}}@media(max-width:1279px){:root{--tree-width: 236px;--drawer-width: 280px}}.map-area{position:relative;flex:1;min-height:0;overflow:hidden}.map-root{position:relative;width:100%;height:100%;background:var(--map-bg)}.map-root.dark .ol-layers>.ol-layer:first-child canvas{filter:brightness(.62) saturate(.85) contrast(.95)}.map-tools{position:absolute;top:12px;left:12px;z-index:30;display:flex;flex-direction:row;background:color-mix(in srgb,var(--map-panel) 70%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:var(--radius-card);overflow:hidden;box-shadow:var(--shadow-soft)}.map-tool{width:34px;height:34px;display:grid;place-items:center;color:var(--text);border:none;background:transparent;cursor:pointer}.map-tool+.map-tool{border-left:1px solid var(--line-soft)}.map-tool:hover{background:var(--surface3);color:var(--accent)}.map-tool.on{background:var(--accent-soft)}.map-search-panel{position:absolute;top:58px;left:12px;z-index:30;width:230px;display:flex;flex-direction:column;gap:8px;padding:10px;background:color-mix(in srgb,var(--map-panel) 74%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:var(--radius-card);box-shadow:var(--shadow-soft)}.map-search-panel .btn{display:inline-flex;align-items:center;justify-content:center;gap:4px}.lu-result{display:flex;flex-direction:column;gap:10px}.lu-conds{display:flex;flex-wrap:wrap;gap:6px}.lu-chip{padding:3px 10px;border-radius:999px;background:var(--surface2);border:1px solid var(--line-soft);font-size:var(--fs-12);color:var(--text);white-space:nowrap}.lu-chip-accent{background:var(--accent-soft);border-color:transparent;color:var(--accent-text);font-weight:700}.map-info{position:absolute;right:12px;bottom:12px;z-index:30;min-width:158px;padding:var(--pad-card);background:color-mix(in srgb,var(--map-panel) 70%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:var(--radius-card);box-shadow:var(--shadow-soft);font-size:var(--fs-13);line-height:1.5;transition:opacity .25s ease,transform .25s ease,visibility .25s}.map-info.collapsed{opacity:0;transform:translateY(10px);visibility:hidden;pointer-events:none}.map-info-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:5px;padding-bottom:4px;border-bottom:1px solid var(--line-soft)}.map-info-head b{font-weight:700}.map-info p{margin:0;display:flex;justify-content:space-between;gap:12px;font-size:inherit}.map-info span{color:var(--faint)}.map-info var{color:var(--text);font-style:normal}.map-info-collapse{color:var(--muted);font-size:var(--fs-13);line-height:1;display:grid;place-items:center;padding:1px 2px}.map-info-collapse:hover{color:var(--accent)}.map-legend-collapse{border:none;background:none;color:var(--muted);cursor:pointer;font-size:var(--fs-13);line-height:1;display:grid;place-items:center;padding:1px 2px}.map-legend-collapse:hover{color:var(--accent)}.identify-popup{width:250px;padding:var(--pad-card);background:color-mix(in srgb,var(--tooltip-bg) 92%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-radius:var(--radius-card);box-shadow:var(--shadow-lg);font-size:var(--fs-13);color:var(--text)}.identify-popup header{display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;gap:8px;padding-bottom:5px;margin-bottom:5px;border-bottom:1px solid var(--line-soft)}.identify-popup h4{margin:0;font-size:var(--fs-14);font-weight:700;color:var(--accent);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.identify-popup:before{content:"";position:absolute;width:0;height:0}.identify-popup.arrow-bottom:before{left:50%;bottom:-7px;transform:translate(-50%);border-top:7px solid var(--tooltip-bg);border-left:7px solid transparent;border-right:7px solid transparent;filter:drop-shadow(0 1px 0 var(--line))}.popup-table{width:100%;border-collapse:collapse}.popup-table td{padding:4px;vertical-align:top}.popup-table tr:first-child td{border-top:none}.popup-table td:first-child{color:var(--faint);width:64px;white-space:nowrap}.popup-table td:last-child{color:var(--text);font-variant-numeric:tabular-nums;word-break:break-all}.popup-table td.val{color:var(--accent);font-weight:700}.popup-table td.val small{color:var(--muted);font-weight:400}.popup-table td.empty{color:var(--faint)}.popup-close{position:static;flex:none;border:none;background:none;color:var(--muted);font-size:var(--fs-13);cursor:pointer;line-height:1;padding:2px 4px}.popup-close:hover{color:var(--red)}.map-root .ol-dragbox{background-color:color-mix(in srgb,var(--accent) 26%,transparent);border:2px dashed var(--accent)}.identify-loading{display:flex;align-items:center;justify-content:center;gap:2px;padding:14px 4px 12px;color:var(--muted);font-size:var(--fs-13)}.identify-loading .dots b{display:inline-block;animation:identify-blink 1.2s infinite}.identify-loading .dots b:nth-child(2){animation-delay:.2s}.identify-loading .dots b:nth-child(3){animation-delay:.4s}@keyframes identify-blink{0%,60%,to{opacity:.2}30%{opacity:1}}.map-legend{position:absolute;left:12px;bottom:12px;z-index:30;display:flex;flex-flow:column nowrap;gap:3px;min-width:150px;padding:var(--pad-card);background:color-mix(in srgb,var(--map-panel) 70%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:var(--radius-card);box-shadow:var(--shadow-soft);font-size:var(--fs-13);color:var(--text);max-width:calc(100% - 24px);transition:opacity .25s ease,transform .25s ease,visibility .25s}.map-legend.collapsed{opacity:0;transform:translateY(10px);visibility:hidden;pointer-events:none}.map-legend .legend-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-bottom:5px;border-bottom:1px solid var(--line-soft)}.map-legend .legend-title{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.map-legend .map-legend-collapse{flex:none}.map-legend .classes{display:flex;flex-direction:column;gap:3px;align-items:flex-start}.map-legend .classes.dim{opacity:.35;filter:grayscale(.4)}.map-legend .vec-items{display:flex;flex-direction:column;gap:3px;align-items:flex-start}.map-legend .cls{display:flex;flex-flow:row nowrap;align-items:center;gap:8px;white-space:nowrap}.map-legend .cls i{width:30px;height:16px;display:inline-block;flex:none}.map-legend .cls i.cls-dot{width:12px;height:12px;border-radius:50%;margin:0 9px;box-shadow:0 0 0 1.5px #ffffffd9}.map-legend .cls .cls-svg{width:30px;height:16px;flex:none}.map-legend .classes-caption{font-size:var(--fs-13);font-weight:700;color:var(--text)}.edge-tab.legend{left:0;bottom:12px;top:auto;transform:none;padding:8px 6px;border-left:none;border-radius:0 var(--radius-tag) var(--radius-tag) 0}.edge-tab.coord{right:0;bottom:12px;top:auto;transform:none;padding:8px 6px;border-right:none;border-radius:var(--radius-tag) 0 0 var(--radius-tag)}.overview-head{display:flex;align-items:center;gap:8px;padding:2px 0 8px;flex:none;border-bottom:1px solid var(--line-soft)}.overview-head .panel-collapse-btn{margin-left:auto}.overview-select.ant-select{min-width:100px;max-width:160px;background:var(--surface2);border-radius:var(--radius-control)}.overview-select.ant-select:hover{background:var(--surface3)}.overview-select .ant-select-selector{background:transparent!important}.overview-select .ant-select-selection-item,.overview-select .ant-select-placeholder{font-size:var(--fs-12)}.selection-popup-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:45;display:grid;place-items:center;background:#00000059}.selection-popup{width:min(460px,calc(100% - 28px));max-height:calc(100% - 32px);display:flex;flex-direction:column;background:color-mix(in srgb,var(--surface) 92%,transparent);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-radius:var(--radius-card);box-shadow:var(--shadow-lg);overflow:hidden}.selection-popup .stat-sec.grow{min-height:240px}.selection-popup .stat-sec.lu-rank-sec{min-height:600px}.selection-head{flex:none;display:flex;align-items:center;justify-content:space-between;padding:var(--pad-card);border-bottom:1px solid var(--line-soft);cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.selection-head:active{cursor:grabbing}.selection-head button{color:var(--muted);font-size:var(--fs-14);line-height:1;padding:2px 6px}.selection-head button:hover{color:var(--red)}.selection-body{flex:1;min-height:0;overflow-y:auto;padding:var(--pad-card);display:flex;flex-direction:column;gap:10px}.trend-loading{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;background:#00000040;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.stat-loading{display:grid;place-items:center;padding:var(--pad-card);min-height:360px}.ltree-item.no-eye{padding-left:12px}.map-root .ol-viewport,.map-root .ol-overlaycontainer,.map-root .ol-overlaycontainer-stopevent{cursor:default}.identify-out{display:flex;align-items:center;gap:6px;padding:10px 12px;color:var(--muted);font-size:var(--fs-13);max-width:240px}.identify-out .anticon{color:var(--amber)}.app-layout{height:100vh;display:flex;flex-direction:column;background:var(--bg);overflow:hidden}.app-main{flex:1;min-height:0;display:flex;flex-direction:column}.user-name .user-caret{font-size:10px}.menu-logout-icon{color:var(--red)}.w-full,.chart-host{width:100%}.map-canvas{position:absolute;top:0;right:0;bottom:0;left:0}.map-tool-icon{font-size:15px;line-height:1;display:inline-flex}.drawer-empty{min-height:200px}.error-alert{margin-bottom:8px}.topbar,.drawer-panel.left,.edge-tab,.portal-page,.map-legend,.map-tools,.ant-dropdown-menu,.ant-table-thead,.ant-pagination,.ant-tag,.ant-btn,.btn,.admin-toolbar .admin-page-head,.panel-title,.stat-card-label,.metric small,.admin-modal-header,.scenic-bg-caption{-webkit-user-select:none;user-select:none}input,textarea{-webkit-user-select:text;user-select:text}.auth-page{position:relative;height:100vh;display:flex;align-items:center;justify-content:center;background:var(--bg-deep);padding:24px;overflow:hidden}.scenic-bg{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;overflow:hidden}.scenic-bg-slide{position:absolute;top:0;right:0;bottom:0;left:0;background-size:cover;background-position:center;opacity:0;transition:opacity 1.6s ease-in-out;will-change:opacity}.scenic-bg-dim{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,#0000004d,#0000006b),radial-gradient(900px 500px at 50% 45%,transparent,rgba(0,0,0,.3))}.scenic-bg-dim.heavy{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:linear-gradient(180deg,#00000080,#0000009e),radial-gradient(900px 500px at 50% 45%,transparent,rgba(0,0,0,.4))}.scenic-bg-caption{position:absolute;left:28px;bottom:24px;display:flex;align-items:center;gap:10px;padding:8px 16px 8px 12px;color:#fffffff0;font-size:var(--fs-14);letter-spacing:1px;text-shadow:0 1px 4px rgba(0,0,0,.8);background:linear-gradient(90deg,rgba(0,0,0,.38),transparent);border-radius:var(--radius-tag);animation:scenic-caption-in .8s ease-out;pointer-events:none}.scenic-bg-caption-bar{width:3px;height:14px;border-radius:2px;background:var(--accent)}@keyframes scenic-caption-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.auth-card{position:relative;z-index:1;width:400px;max-width:100%;max-height:calc(100vh - 48px);overflow-y:auto;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-card);box-shadow:var(--shadow);padding:26px 30px 18px;font-size:var(--fs-15)}.auth-card-wide{width:640px}.auth-brand{display:flex;align-items:center;gap:12px;font-size:24px;font-weight:700;color:var(--text);justify-content:center}.auth-card .brand-logo{width:60px;height:60px}.auth-sub{margin:6px 0 16px;text-align:center;color:var(--muted);font-size:var(--fs-14)}.auth-foot{margin-top:10px;text-align:center;font-size:var(--fs-14);color:var(--muted)}.auth-foot a{color:var(--accent);margin-left:4px}.auth-send-hint{margin-top:6px;font-size:var(--fs-13);color:var(--muted)}.auth-card .ant-form-item-label>label{font-size:var(--fs-14)}.auth-card .ant-form-item{margin-bottom:14px}.auth-card .ant-form-vertical .ant-form-item-label{padding-bottom:2px}.auth-card .ant-input,.auth-card .ant-input-affix-wrapper,.auth-card .ant-input-password,.auth-card .ant-btn,.auth-card .ant-tabs-tab{font-size:var(--fs-15)}.auth-card .ant-form-item-extra{font-size:var(--fs-12);min-height:0;margin-top:2px}.auth-form-grid{display:grid;grid-template-columns:1fr 1fr;column-gap:14px}.auth-form-grid .auth-span2{grid-column:1 / -1}@media(max-width:720px){.auth-form-grid{grid-template-columns:1fr}}.slider-captcha{width:100%;user-select:none;-webkit-user-select:none}.slider-track{position:relative;height:40px;border:1px solid var(--line);border-radius:var(--radius-control);background:var(--surface2);overflow:hidden}.slider-bg{position:absolute;left:0;top:0;height:100%;background:var(--accent-soft)}.slider-hint{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;font-size:var(--fs-14);color:var(--muted);pointer-events:none;z-index:1}.slider-knob{position:absolute;top:0;left:0;width:40px;height:100%;border-radius:var(--radius-control);background:var(--surface3);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:var(--fs-15);cursor:grab;z-index:2;box-shadow:0 2px 5px #0000002e}.slider-knob.dragging{cursor:grabbing;background:var(--accent-soft);border-color:var(--accent);color:var(--accent-text)}.slider-knob.passed{background:var(--accent);border-color:var(--accent);color:#fff}.slider-knob.disabled{opacity:.45;cursor:not-allowed}.slider-knob .anticon{font-size:16px}.portal-page{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:30px;padding:24px 24px 11vh}.portal-hero{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}.portal-title{margin:0;font-size:26px;color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.75)}.portal-sub{margin:0;color:#ffffffeb;font-size:var(--fs-15);text-shadow:0 1px 4px rgba(0,0,0,.7)}.portal-grid{position:relative;z-index:1;display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:24px;width:100%;max-width:1160px}.portal-card{display:flex;align-items:flex-start;gap:18px;padding:26px 24px;min-height:150px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-card);text-align:left;cursor:pointer;color:var(--text);transition:transform .15s,box-shadow .15s,border-color .15s}.portal-card:hover{transform:translateY(-3px);border-color:var(--accent);box-shadow:var(--shadow-soft)}.portal-card-disabled{cursor:not-allowed;opacity:.7}.portal-card-disabled:hover{transform:none;border-color:var(--line);box-shadow:none}.portal-card-logo{flex:none;width:64px;height:64px;border-radius:var(--radius-tag);object-fit:cover}.portal-card-icon{flex:none;width:64px;height:64px;border-radius:var(--radius-tag);background:var(--accent-soft);border:1px solid var(--accent)}.portal-card-body{min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:6px}.portal-card-name{margin:0 0 8px;font-size:var(--fs-21);color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.portal-card-desc{margin:0 0 12px;font-size:var(--fs-14);color:var(--muted);line-height:1.6}.portal-card-action{font-size:var(--fs-14);color:var(--accent)}.portal-card-disabled .portal-card-action{color:var(--muted)}.user-name{cursor:pointer}.user-name:hover{color:var(--accent)}.user-name .user-avatar.ant-avatar{width:28px;height:28px;line-height:28px;background:var(--accent);color:#fff;font-size:var(--fs-13);font-weight:700;flex:none}.menu-svg-icon{display:block;width:15px;height:15px}.menu-logout{color:var(--red)}.admin-page{flex:1;min-height:0;overflow:hidden;padding:var(--pad-card);display:flex;flex-direction:column;gap:10px}.admin-page-head{display:flex;align-items:center;gap:10px;flex:none}.admin-page-logo{width:28px;height:28px;object-fit:contain}.admin-page-title{margin:0;font-size:var(--fs-21);font-weight:700;color:var(--text);white-space:nowrap}.admin-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;flex:none;background:var(--surface);border-radius:var(--radius-card);padding:var(--pad-card)}.admin-toolbar-right{margin-left:auto}.admin-search{display:flex;align-items:center;gap:8px}.btn-refresh{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-text)}.btn-refresh:hover{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-text);filter:brightness(1.1)}.table-scroll-wrap{flex:1;min-height:0;overflow:auto;background:var(--surface);border-radius:var(--radius-card)}.admin-link{color:var(--accent);cursor:pointer;font-size:var(--fs-13)}.admin-link:hover{text-decoration:underline}.admin-link-danger{color:var(--red)}.text-faint{color:var(--faint)}.stat-cards{flex:none;display:grid;grid-template-columns:repeat(6,1fr);gap:10px}.stat-card{background:var(--surface);border-radius:var(--radius-card);padding:var(--pad-card);min-width:0;display:flex;flex-direction:column;align-items:stretch;gap:3px}.stat-card-label{font-size:var(--fs-13);color:var(--muted);display:flex;align-items:center;justify-content:space-between;gap:6px}.stat-card-value{font-size:var(--fs-21);font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stat-card-unit{font-style:normal;font-size:var(--fs-13);font-weight:400;color:var(--accent);margin-left:5px}.stat-card-sub{font-size:var(--fs-12);color:var(--muted)}.stat-chart-panel,.stat-detail-panel{background:var(--surface);border-radius:var(--radius-card);padding:var(--pad-card)}.stat-lower{flex:1;min-height:0;display:flex;gap:10px}.stat-lower .stat-chart-panel{flex:none;width:40%;min-width:380px;display:flex;flex-direction:column;gap:4px}.chart-flex-item,.chart-flex-item .ant-spin-nested-loading,.chart-flex-item .ant-spin,.chart-flex-item .ant-spin-container{flex:1;min-height:0;display:flex;flex-direction:column}.chart-fill{flex:1;min-height:60px;width:100%}.stat-lower .stat-detail-panel{flex:1;min-width:0;display:flex;flex-direction:column;gap:10px}.stat-detail-panel .panel-title{flex:none}.stat-lower .stat-detail-panel .ant-table-wrapper,.stat-lower .stat-detail-panel .ant-spin-nested-loading,.stat-lower .stat-detail-panel .ant-spin,.stat-lower .stat-detail-panel .ant-spin-container,.stat-lower .stat-detail-panel .ant-table,.stat-lower .stat-detail-panel .ant-table-container{flex:1;min-height:0;display:flex;flex-direction:column}.stat-lower .stat-detail-panel .ant-table-body{flex:1;min-height:0;max-height:none!important}.panel-title{padding-bottom:5px;font-size:var(--fs-14);font-weight:700;color:var(--text);border-bottom:1px solid var(--line-soft)}.admin-page .ant-table{background:transparent;color:var(--text);font-size:var(--fs-13)}.admin-page .ant-table-container{background:transparent}.admin-page .ant-table-thead>tr>th,.admin-page .ant-table-thead>tr>td{background:var(--surface2);color:var(--text);font-weight:700;border-bottom:1px solid var(--line)}.admin-page .ant-table-tbody>tr:nth-child(2n)>td{background:var(--surface2)}.admin-page .ant-table-tbody>tr:hover>td,.admin-page .ant-table-tbody>tr:nth-child(2n):hover>td{background:var(--accent-soft)!important}.admin-page .ant-tag{font-size:var(--fs-12)}.stat-lower .stat-detail-panel .ant-table-wrapper{flex:1;min-height:0}.admin-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;background:var(--modal-dim)}.admin-modal-mask.hidden{display:none}.admin-modal{width:440px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);overflow-y:auto;background:var(--surface);border-radius:var(--radius-card);box-shadow:var(--shadow);padding:var(--pad-card);display:flex;flex-direction:column;gap:10px}.admin-modal-header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-bottom:8px;border-bottom:1px solid var(--line-soft)}.admin-modal-title{font-size:var(--fs-15);font-weight:700;color:var(--text)}.admin-modal-close{width:26px;height:26px;flex:none;border:none;border-radius:var(--radius-control);background:transparent;color:var(--muted);font-size:var(--fs-21);line-height:1;cursor:pointer}.admin-modal-close:hover{background:var(--surface3);color:var(--text)}.admin-modal-body{min-width:0}.admin-modal .ant-form-item{margin-bottom:10px}.admin-modal .ant-form-vertical .ant-form-item-label{padding-bottom:2px}.admin-modal-footer{display:flex;justify-content:flex-end;gap:8px;padding-top:8px;border-top:1px solid var(--line-soft)}.ant-message-notice-content{display:flex;align-items:center}.ant-message-notice-content .ant-message-custom-content{display:flex;align-items:center;gap:8px}.avatar-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.avatar-cell{display:flex;align-items:center;justify-content:center;padding:4px;border-radius:var(--radius-control);background:transparent;cursor:pointer}.avatar-cell:hover{background:var(--surface2)}.avatar-cell.selected{background:var(--accent-soft)}.role-request-state{display:flex;flex-direction:column;gap:8px;font-size:var(--fs-13)}.role-request-status{margin:0;font-weight:700}.role-request-status.rejected{color:var(--red)}.role-request-reason{margin:0;padding:8px 10px;border-radius:var(--radius-control);background:var(--surface2);white-space:pre-wrap}.admin-user-name{display:inline-flex;align-items:center;gap:6px;min-width:0}.admin-user-name .ant-avatar{flex:none}.role-request-contact{margin:0;padding-top:2px;color:var(--muted);font-size:var(--fs-13)}.scenic-bg-slide.active{opacity:1}.admin-search{width:260px}.admin-modal-wide{width:920px}.admin-modal .ant-table-body{overflow-y:auto!important}.col-head-tip{display:inline-flex;align-items:center;gap:4px}
