:root{color:#182018;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#edf1ea;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-weight:400;line-height:1.45}html,body,#root{min-height:100%;margin:0}body{min-height:100vh;overflow:auto}*{box-sizing:border-box}button,input,select{font:inherit}svg{overflow:visible}.app-shell{color:#182018;background:#eef2ec;grid-template-columns:minmax(340px,400px) minmax(0,1fr);height:100vh;display:grid}.app-shell.map-focus-mode{grid-template-columns:1fr}.app-shell.map-focus-mode .sidebar{display:none}.admin-shell{color:#182018;background:#eef2ec;height:100dvh;min-height:100dvh;padding:20px;overflow:auto}.admin-topbar{background:#fff;border:1px solid #d7ded2;border-radius:8px;justify-content:space-between;align-items:center;gap:20px;margin-bottom:16px;padding:16px;display:flex}.admin-topbar h1{margin:0 0 4px;font-size:24px;line-height:1.15}.admin-topbar p{color:#65705d;margin:0;font-size:13px}.topbar-actions{grid-template-columns:repeat(2,minmax(100px,1fr));gap:8px;min-width:220px;display:grid}.admin-grid{grid-template-columns:minmax(420px,1.05fr) minmax(360px,.95fr);align-items:start;gap:16px;padding-bottom:20px;display:grid}.admin-grid .admin-panel{grid-row:span 2}.admin-grid .panel{max-height:calc(100dvh - 170px);overflow:auto}.login-shell{color:#182018;background-color:#eef2ec;background-image:linear-gradient(90deg,#21301e0d 1px,#0000 1px),linear-gradient(#21301e0d 1px,#0000 1px),none;background-position:0 0,0 0,0 0;background-repeat:repeat,repeat,repeat;background-size:44px 44px;background-attachment:scroll,scroll,scroll;background-origin:padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box;place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{background:#fffffff5;border:1px solid #d7ded2;border-radius:8px;width:min(420px,100%);padding:24px;box-shadow:0 24px 70px #18201824}.logo-lockup{grid-template-columns:58px 20px minmax(0,1fr);align-items:center;gap:12px;margin-bottom:22px;display:grid}.project-logo{object-fit:contain;background:#f8faf7;border:1px solid #d7ded2;border-radius:8px;width:58px;height:58px}.logo-times{color:#71806b;text-align:center;font-size:14px;font-weight:720}.bluemap-logo{object-fit:contain;object-position:left center;width:100%;max-height:48px}.login-heading{margin-bottom:18px}.login-heading span{color:#65705d;letter-spacing:0;font-size:12px;font-weight:740}.login-heading h1{color:#172016;margin:4px 0 6px;font-size:28px;line-height:1.15}.login-heading p,.login-meta p{color:#65705d;margin:0;font-size:12px;line-height:1.55}.login-card form{gap:8px;display:grid}.login-card .button-row{grid-template-columns:1fr}.login-meta{border-top:1px solid #dde4d8;gap:8px;margin-top:16px;padding-top:14px;display:grid}.login-meta strong{color:#334030;display:block}.login-meta a,.site-footer a{color:#315f2a}.role-chip{color:#334030;background:#f3f6f0;border:1px solid #d0d9cb;border-radius:999px;align-items:center;width:auto;min-height:28px;padding:0 10px;font-size:12px;font-weight:760;display:inline-flex}.team-card{text-align:left;gap:2px;margin-bottom:8px;padding:10px;display:grid}.team-card strong{color:#263022}.team-card span{color:#65705d;font-size:12px;font-weight:520}.team-card.active{background:#eef5ea;border-color:#315f2a}.team-card.host{border-style:double}.team-summary{gap:8px;margin-top:10px;display:grid}.check-row{align-items:center;gap:8px;display:flex}.check-row input[type=checkbox]{width:auto;min-height:0;margin:0}.member-picker{background:#fbfcfa;border:1px solid #d7ded2;border-radius:8px;gap:8px;max-height:180px;padding:8px;display:grid;overflow:auto}.sidebar{z-index:4;background:#f8faf7;border-right:1px solid #cfd8ca;flex-direction:column;padding:18px;display:flex;overflow:hidden;box-shadow:8px 0 28px #23311e14}.sidebar.locked{pointer-events:none;filter:saturate(.72)}.sidebar.locked:after{content:"地图载入中";color:#263022;background:#eef2ec8c;place-items:center;font-weight:760;display:grid;position:absolute;inset:0}.sidebar-scroll{flex:auto;min-height:0;padding-right:4px;overflow:auto}.brand{justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:18px;display:flex}.brand h1{color:#172016;align-items:center;gap:7px;margin:0 0 4px;font-size:24px;font-weight:760;line-height:1.15;display:flex}.brand p{color:#65705d;margin:0;font-size:12px}.version{color:#41513c;background:#e7eee2;border:1px solid #b9c8b1;border-radius:999px;padding:4px 9px;font-size:12px}.panel{background:#fff;border:1px solid #d7ded2;border-radius:8px;margin-bottom:12px;padding:14px}.panel h2,.modal h2,.offline-guide h2{color:#263022;align-items:center;gap:6px;margin:0 0 10px;font-size:15px;font-weight:760;display:flex}.modal h2{margin:0;font-size:18px}.help{color:#56644f;cursor:help;background:#f6f8f3;border:1px solid #a5b39d;border-radius:50%;flex:none;place-items:center;width:16px;height:16px;font-size:11px;line-height:1;display:inline-grid}.field-label{align-items:center;gap:6px;display:inline-flex}.lead,.path-readout,.error-text,.success-text{color:#65705d;font-size:12px;line-height:1.45}.error-text{color:#a22b24}.success-text{color:#276331;background:#edf7e9;border:1px solid #b9d7b2;border-radius:8px;padding:8px 10px}.connection-panel .lead{margin:10px 0 12px}.range-label{margin:8px 0}.connection-state{color:#41513c;background:#f3f6f0;border:1px solid #d0d9cb;border-radius:999px;align-items:center;gap:8px;min-height:30px;padding:0 10px;font-size:12px;font-weight:720;display:inline-flex}.connection-state span{background:#b3bbaa;border-radius:999px;width:9px;height:9px}.connection-state.online span{background:#2f8f49;box-shadow:0 0 0 4px #2f8f4924}.connection-state.offline span{background:#c94738;box-shadow:0 0 0 4px #c947381f}input,select,button,textarea{box-sizing:border-box;color:#182018;width:100%;font:inherit;background:#fbfcfa;border:1px solid #cdd7c7;border-radius:7px;font-size:13px}input,select{min-height:36px;margin-bottom:8px;padding:7px 9px}input[type=range]{accent-color:#325f2c;padding:0}button{cursor:pointer;min-height:36px;font-weight:670;transition:transform .15s,background .15s,border .15s}button:hover:not(:disabled){background:#eef5ea;transform:translateY(-1px)}button:disabled{cursor:not-allowed;opacity:.56}button.primary{color:#fff;background:#325f2c;border-color:#476f3e}button.primary:hover:not(:disabled){background:#294f25}.segmented,.button-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin-bottom:8px;display:grid}.segmented button.active{color:#23491f;background:#dfeedd;border-color:#315f2a}.grid-fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}label{color:#65705d;gap:4px;font-size:12px;display:grid}label input{margin:0 0 8px}.list{gap:6px;max-height:135px;margin-top:8px;display:grid;overflow:auto}.admin-list{gap:8px;max-height:320px}.admin-shell .admin-list{max-height:min(52vh,560px)}.admin-account-card{background:#fbfcfa;border:1px solid #d7ded2;border-radius:8px;gap:8px;padding:10px;display:grid}.admin-panel .modal-form{grid-template-columns:repeat(2,minmax(0,1fr));align-items:end}.admin-panel .modal-form label:first-child,.admin-panel .modal-form label:nth-child(2),.admin-panel .modal-form label:nth-child(3){grid-column:auto}.admin-panel .modal-form .button-row{grid-column:1/-1}.account-card-head{grid-template-columns:minmax(0,1fr) 72px;align-items:center;gap:8px;display:grid}.account-card-head strong,.account-card-head span{display:block}.account-card-head span{color:#65705d;margin-top:2px;font-size:12px}.account-card-fields{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.account-card-fields label:last-child{grid-column:1/-1}.account-card-fields input,.account-card-fields select{margin-bottom:0}.admin-section-head{grid-template-columns:minmax(0,1fr) minmax(130px,190px);align-items:center;gap:10px;margin-bottom:10px;display:grid}.admin-section-head strong,.admin-section-head span{display:block}.admin-section-head span{color:#65705d;font-size:12px}.team-admin-detail{background:#fbfcfa;border:1px solid #d7ded2;border-radius:8px;gap:8px;padding:12px;display:grid}.team-admin-detail h3,.team-admin-detail p{margin:0}.team-admin-detail p{color:#65705d;font-size:13px}.metric-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.metric-grid span{color:#65705d;background:#fff;border:1px solid #dde4d8;border-radius:8px;gap:2px;padding:8px;font-size:12px;display:grid}.metric-grid strong{color:#263022;overflow-wrap:anywhere;font-size:13px}.member-pills{flex-wrap:wrap;gap:6px;display:flex}.member-pills span{color:#334030;background:#f3f6f0;border:1px solid #d0d9cb;border-radius:999px;padding:4px 8px;font-size:12px}.team-admin-actions{grid-template-columns:repeat(3,minmax(0,1fr))}.team-admin-list{gap:7px;max-height:260px;margin-top:10px;display:grid;overflow:auto}.team-admin-row{text-align:left;gap:3px;min-height:auto;padding:9px 10px;display:grid}.team-admin-row strong,.team-admin-row span{display:block}.team-admin-row span{color:#65705d;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:520;overflow:hidden}.team-admin-row.active{background:#eef5ea;border-color:#315f2a}.row{grid-template-columns:minmax(0,1fr) 58px 58px;gap:6px;display:grid}.row.edge-row{grid-template-columns:minmax(0,1fr) 54px 54px 54px}.row button:first-child{text-align:left;justify-content:space-between;align-items:center;gap:8px;padding:0 9px;display:flex}.row span{color:#71806b;font-size:11px;font-weight:520}.muted{opacity:.5}.readonly button{cursor:default}.host-layer-note{color:#52604b;background:#f5f8f2;border:1px solid #d7ded2;border-radius:8px;gap:3px;margin:8px 0 12px;padding:10px;font-size:12px;display:grid}.host-layer-note strong{color:#263022;font-size:13px}.map-info-panel{background:#fbfcfa}.map-info-active{background:#f4f8f1;border:1px solid #d7ded2;border-radius:8px;gap:5px;padding:10px;display:grid}.map-info-active strong,.map-info-item strong,.map-range-card strong{color:#263022}.map-info-active p{margin:0}.markdown-text{gap:4px;display:grid}.markdown-text p{white-space:pre-wrap;margin:0}.markdown-text p.empty{height:.85em}.markdown-text code{color:inherit;background:#18201814;border-radius:4px;padding:1px 5px}.markdown-guide{color:#65705d;margin:-2px 0 4px;font-size:12px;line-height:1.45}.markdown-guide code{color:#263022;background:#18201814;border-radius:4px;padding:1px 5px}.map-info-active span,.map-info-item span,.map-range-card span,.map-range-card small{color:#65705d;font-size:12px;line-height:1.45}.map-info-list{gap:6px;margin-top:8px;display:grid}.map-info-item{background:#fff;border:1px solid #d7ded2;border-radius:8px;gap:3px;padding:8px;display:grid}.map-info-item.active{background:#eef5ea;border-color:#315f2a}.map-range-list{max-height:min(44vh,460px)}.map-range-card{background:#fbfcfa;border:1px solid #d7ded2;border-radius:8px;grid-template-columns:minmax(0,1fr) 210px;align-items:start;gap:12px;padding:10px;display:grid}.map-range-card.active{background:#eef5ea;border-color:#315f2a}.map-range-card div:first-child{gap:4px;display:grid}.map-range-actions{grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;display:grid}.action-status{color:#35452f;background:#f5f8f2;border:1px solid #d7ded2;border-radius:8px;margin:2px 0 0;padding:7px 9px;font-size:12px;line-height:1.45}.export-progress{color:#41513c;background:#f5f8f2;border:1px solid #d7ded2;border-radius:8px;gap:6px;margin:8px 0;padding:9px 10px;font-size:12px;font-weight:720;display:grid}.export-progress progress{accent-color:#315f2a;width:100%;height:9px}.audio-file-card{background:#fbfcfa;border:1px solid #d7ded2;border-radius:8px;grid-template-columns:minmax(120px,.8fr) minmax(180px,1.3fr) auto;align-items:center;gap:10px;padding:8px;display:grid}.audio-file-card span{text-overflow:ellipsis;white-space:nowrap;color:#34422f;font-size:12px;font-weight:720;overflow:hidden}.audio-file-card audio{width:100%;height:34px}.presentation-slide-editor{gap:8px;max-height:360px;display:grid;overflow:auto}.presentation-slide-card{background:#fbfcfa;border:1px solid #d7ded2;border-radius:8px;grid-template-columns:112px minmax(0,1fr) 72px;align-items:center;gap:10px;padding:8px;display:grid}.presentation-slide-card img{aspect-ratio:16/10;object-fit:cover;background:#172016;border-radius:6px;width:112px}.presentation-slide-card textarea{min-height:58px}.range-editor{background:#fff;border:1px solid #d7ded2;border-radius:8px;margin:10px 0;padding:10px}.map-stage{background-color:#e9eee6;background-image:linear-gradient(90deg,#2c3a2814 1px,#0000 1px),linear-gradient(#2c3a2814 1px,#0000 1px),none;background-position:0 0,0 0,0 0;background-repeat:repeat,repeat,repeat;background-size:42px 42px;background-attachment:scroll,scroll,scroll;background-origin:padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box;min-width:0;position:relative;overflow:hidden}.map-stage.fullscreen-mode{z-index:100;background:#e9eee6;position:fixed;inset:0}.map-toolbar{z-index:5;grid-template-columns:repeat(2,minmax(92px,auto));gap:8px;display:grid;position:absolute;top:16px;right:16px}.map-toolbar button{background:#f8faf7f0;border-color:#70846961;min-height:34px;padding:0 12px;box-shadow:0 8px 22px #1820181f}.bluemap-frame{opacity:1;background:#e9eee6;border:0;width:100%;height:100%;transition:opacity .24s;position:absolute;inset:0}.bluemap-frame.delayed{pointer-events:none;opacity:.18;filter:saturate(.55)brightness(.45)}.overlay-canvas{z-index:3;pointer-events:none;width:100%;height:100%;display:block;position:absolute;inset:0}.status-bar{z-index:3;color:#31402d;text-align:center;background:#f8faf7f0;border:1px solid #70846952;border-radius:999px;gap:6px;min-width:280px;max-width:min(430px,100% - 40px);padding:9px 14px;font-size:13px;display:grid;position:absolute;bottom:20px;right:20px;box-shadow:0 8px 24px #1820181f}.status-bar progress{accent-color:#2f6a2d;width:100%;height:8px}.status-bar strong{color:#8a3e12;max-width:680px;font-size:12px;font-weight:740;line-height:1.4;display:block}.map-presentation{z-index:7;color:#f6efe1;background:radial-gradient(circle at 50% 45%,#3a463d57,#0000 42%),linear-gradient(135deg,#09100f 0%,#17231f 46%,#060807 100%);place-items:center;display:grid;position:absolute;inset:0;overflow:hidden}.presentation-vignette{background:linear-gradient(90deg,#000000b8,#0000 18% 82%,#000000b8),linear-gradient(#0000008c,#0000 28% 72%,#000000ad);position:absolute;inset:0}.presentation-content{z-index:1;place-items:center;width:100%;height:100%;display:grid;position:relative}.presentation-banner{text-align:center;letter-spacing:0;color:#f6efe1;text-shadow:0 2px 18px #000000b3;background:linear-gradient(90deg,#0000,#080c0bd6 14% 86%,#0000);border-top:1px solid #d7b56db8;border-bottom:1px solid #d7b56db8;width:min(760px,100% - 64px);padding:22px 32px;font-size:clamp(26px,4vw,52px);font-weight:820}.presentation-banner.cancelled{color:#f2d1b6;border-color:#cd6f4cb8}.presentation-title-card{text-align:center;background:linear-gradient(90deg,#0000,#080c0bdb 12% 88%,#0000);border-top:1px solid #d7b56dbf;border-bottom:1px solid #d7b56dbf;width:min(860px,100% - 72px);padding:34px 46px;animation:.55s both presentationIn}.presentation-title-card span{color:#d7b56d;font-size:clamp(14px,1.8vw,22px);font-weight:760;display:block}.presentation-title-card strong{color:#f6efe1;text-shadow:0 10px 30px #0000008c;margin-top:6px;font-size:clamp(42px,7vw,92px);font-weight:880;line-height:1;display:block}.presentation-title-card p,.presentation-title-card .markdown-text{color:#d7d0c2;max-width:720px;margin:18px auto 0;font-size:clamp(14px,1.6vw,20px)}.presentation-title-card.delay-card{width:min(720px,100% - 72px)}.presentation-title-card.delay-card strong{color:#f4d06f;font-size:clamp(48px,8vw,104px)}.presentation-slide{aspect-ratio:16/10;background:#050706;border:1px solid #d7b56d7a;width:min(1180px,100% - 96px);max-height:calc(100% - 132px);animation:3s both presentationSlideCycle;position:relative;box-shadow:0 28px 100px #00000075}.presentation-slide img{object-fit:cover;width:100%;height:100%;display:block}.presentation-caption{background:linear-gradient(#0000,#0000002e,#000000c7);padding:24px 30px;position:absolute;bottom:0;left:0;right:0}.presentation-caption strong{color:#f6efe1;font-size:clamp(24px,3vw,42px);line-height:1.05;display:block}.presentation-caption p{color:#ddd5c7;max-width:760px;margin:8px 0 0;font-size:clamp(14px,1.6vw,20px)}.presentation-caption .markdown-text{color:#ddd5c7;max-width:760px;margin-top:8px;font-size:clamp(14px,1.6vw,20px)}.presentation-dots{align-items:center;gap:10px;display:flex;position:absolute;bottom:-36px;left:50%;transform:translate(-50%)}.presentation-dots span{background:#f6efe16b;border-radius:999px;width:12px;height:8px;overflow:hidden}.presentation-dots span.active{width:54px}.presentation-dots i{background:#d7b56d;height:100%;animation:3s linear both presentationProgress;display:block}.presentation-skip{z-index:2;color:#f6efe1;background:#080c0bb8;border-color:#d7b56d61;width:auto;min-width:128px;position:absolute;bottom:24px;right:26px}.presentation-logout{z-index:2;color:#f6efe1;background:#080c0b9e;border-color:#f6efe147;width:auto;min-width:116px;position:absolute;bottom:24px;left:26px}@keyframes presentationIn{0%{opacity:0;transform:translateY(16px)scale(.985)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes presentationSlideCycle{0%{opacity:0;transform:translateY(12px)scale(.992)}12%,88%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(-8px)scale(.996)}}@keyframes presentationProgress{0%{width:0%}to{width:100%}}.offline-guide{z-index:1;background:#f9fbf7f0;border:1px solid #76876d57;border-radius:8px;width:min(560px,100% - 56px);padding:24px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 24px 70px #17201429}.offline-guide.compact{z-index:2;width:min(420px,100% - 40px);padding:16px;top:78px;left:auto;right:20px;transform:none}.offline-guide p,.offline-guide li{color:#52604b;font-size:14px;line-height:1.65}.offline-guide code{color:#25351f;background:#eef4ea;border:1px solid #d4ddcf;border-radius:7px;margin:12px 0;padding:10px 12px;display:block}.edge line{fill:none;stroke-linecap:round;filter:url(#soft-shadow)}.edge text{paint-order:stroke;stroke:#f8faf7eb;stroke-width:4px;fill:#182018;dominant-baseline:middle;font-weight:740}.edge.inactive{opacity:.38;filter:grayscale()}.export-calibration{pointer-events:none}.export-calibration polygon{fill:#315f2a0d;stroke:#315f2ab8;stroke-width:3px;stroke-dasharray:10 8}.export-calibration circle{fill:#fff;stroke:#315f2a;stroke-width:3px}.export-calibration text{fill:#1f2b1d;paint-order:stroke;stroke:#f8faf7eb;stroke-width:4px;font-size:12px;font-weight:720}.map-icon,.node{filter:url(#soft-shadow);cursor:pointer;pointer-events:auto}.edge{pointer-events:none}.map-icon text,.node text{fill:#111a10;stroke:#f8faf7f5;stroke-width:5px;paint-order:stroke;font-weight:780}.node.inactive{opacity:.42;filter:grayscale()}.legend{color:#1d2a1a;pointer-events:auto;background:#f8faf7e6;border:1px solid #77886f5c;border-radius:8px;gap:6px;padding:12px;font-size:12px;display:grid;box-shadow:0 10px 24px #1923141f}.legend strong{align-items:center;gap:6px;margin-bottom:2px;display:flex}.legend span{align-items:center;gap:7px;display:flex}.legend img{object-fit:contain;width:18px;height:18px}textarea{resize:vertical;min-height:80px;padding:8px 9px}.modal-backdrop{z-index:20;background:#10181061;place-items:center;display:grid;position:fixed;inset:0}.modal{background:#fff;border:1px solid #cbd6c4;border-radius:8px;width:min(420px,100vw - 32px);max-height:calc(100vh - 48px);padding:16px;overflow:auto;box-shadow:0 24px 70px #0f180c47}.modal header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.modal header button{width:auto;padding:0 12px}.modal-form{gap:8px;display:grid}.site-footer{color:#6b7562;border-top:1px solid #dde4d8;flex:none;padding-top:12px;font-size:12px;line-height:1.5}.site-footer strong{color:#334030;font-size:13px;display:block}@media (width<=980px){.app-shell{grid-template-columns:1fr;height:auto}.sidebar{border-bottom:1px solid #cfd8ca;border-right:0;max-height:none}.sidebar-scroll{padding-right:0;overflow:visible}.admin-topbar{display:grid}.topbar-actions,.admin-grid{grid-template-columns:1fr}.admin-grid .panel{max-height:none}.metric-grid,.team-admin-actions,.admin-panel .modal-form,.map-range-card{grid-template-columns:1fr}.map-stage{height:70vh}}
