/* Universe-only prototype. No rules apply to Panel View. */
body.km-u.km-map-active #kmu{background:var(--hub-ground,#F5F7FA)!important}
body.km-u.km-map-active #kmu-gl,body.km-u.km-map-active #kmu-ov,body.km-u.km-map-active #kmu-fade,body.km-u.km-map-active #kmu-hits,body.km-u.km-map-active #kmu-veil{display:none!important;pointer-events:none!important}
body.km-u.km-map-active #kmu-layout{display:none!important}
body.km-u.km-map-active #kmu-top,body.km-u.km-map-active #kmu-dock{background:#FFFFFF!important;box-shadow:none!important;backdrop-filter:none!important;border-color:#DDE3E9!important}
body.km-u.km-map-active #kmu-top{border-bottom:1px solid #DDE3E9}
body.km-u.km-map-active #kmu-dock{border:1px solid #DDE3E9;border-radius:8px}
body.km-u.km-map-active #kmu-top .kmu-mode{background:#F3F5F8!important;box-shadow:none!important;border-radius:5px}
body.km-u.km-map-active #kmu .kmw{background:#FFFFFF!important;box-shadow:none!important;backdrop-filter:none!important;border:1px solid #DDE3E9;border-radius:6px}
body.km-u.km-map-active #kmu .kmw-chat .workspace{background:#FFFFFF}
#hub-view{position:absolute;inset:92px 0 100px;z-index:4;overflow:hidden;color:#263443;background:var(--hub-ground,#F5F7FA);font-family:"Plex SC","PingFang SC",sans-serif;}
#hub-view[hidden]{display:none!important}
.hub-heading{position:absolute;left:32px;top:24px;right:24px;display:flex;justify-content:space-between;align-items:center;gap:20px;z-index:2;pointer-events:none}
.hub-heading h1{font-size:23px;letter-spacing:-.3px;font-weight:650;margin:0;color:#203346}
.hub-heading p{font-size:12px;color:#708090;margin:5px 0 0}
.hub-heading .hub-current{font-size:12px;color:#52697B;border:1px solid #D7E0E8;padding:6px 10px;background:#FFFFFF;border-radius:4px;max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hub-viewport{position:absolute;inset:86px 12px 46px;overflow:hidden;touch-action:none;cursor:grab}
.hub-viewport.dragging{cursor:grabbing}
.hub-world{position:absolute;width:1280px;height:1000px;transform-origin:0 0}
.hub-tracks{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.hub-track{fill:none;stroke:#A8B5C1;stroke-width:4;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}
.hub-track.active{stroke:var(--hub-accent,#285477)}
.hub-trunk{fill:none;stroke:var(--hub-path,#6E9596);stroke-width:3;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}
.hub-group-title{position:absolute;display:flex;gap:12px;align-items:center;font-size:21px;font-weight:650;line-height:30px;white-space:nowrap;color:#344C5E}
.hub-group-title i{display:inline-block;width:7px;height:7px;background:#7C94A7;border-radius:1px}
.hub-group-title span{font-size:12px;color:#708090;font-weight:450}
.hub-station{position:absolute;width:150px;height:88px;padding:7px 10px!important;background:#FFFFFF!important;border:1px solid #BBC7D1!important;border-radius:5px!important;box-shadow:none!important;display:flex!important;flex-direction:column;align-items:flex-start;justify-content:center;gap:5px;cursor:pointer;color:#263443!important;text-align:left;font-size:14px;line-height:1.4;font-family:inherit;transition:border-color .12s}
.hub-station:hover{border-color:var(--hub-accent,#285477)!important;background:#F1F5F8!important}
.hub-station:focus-visible,.hub-mother button:focus-visible,.hub-tools button:focus-visible{outline:3px solid #2B638F;outline-offset:3px}
.hub-station.selected{background:var(--hub-accent,#285477)!important;border-color:var(--hub-accent,#285477)!important;color:#FFFFFF!important}
.hub-station b{font-size:18px;line-height:1.3;flex-shrink:0;font-weight:650;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hub-station .hub-meta{font-size:14px;color:#6B7C8B;display:flex;gap:12px;align-items:center;white-space:nowrap}
.hub-station.selected .hub-meta{color:#D9E6EF}
.hub-person,.hub-agent{width:9px;height:9px;border:1.3px solid currentColor;display:inline-block;flex:none;vertical-align:middle;margin-right:4px}
.hub-person{border-radius:50%}.hub-agent{transform:rotate(45deg);width:8px;height:8px}
.hub-station .hub-unread{position:absolute;right:8px;top:-8px;background:var(--hub-accent,#285477);color:white;font-size:11px;border:2px solid var(--hub-ground,#F5F7FA);border-radius:4px;min-width:19px;text-align:center;line-height:17px;font-style:normal}
.hub-station.selected .hub-unread{background:#FFFFFF;color:var(--hub-accent,#285477);border-color:var(--hub-accent,#285477)}
.hub-station .hub-type{font-size:11px;font-weight:450;margin-right:5px;color:#728698}
.hub-station.selected .hub-type{color:#D9E6EF}
.hub-mother{position:absolute;left:520px;top:410px;width:240px;min-height:180px;background:#FFFFFF;border:2px solid var(--hub-accent,#285477);border-radius:8px;overflow:hidden}
.hub-mother-title{width:100%;height:47px;background:var(--hub-accent,#285477)!important;color:#FFFFFF!important;display:flex;align-items:center;justify-content:space-between;padding:0 16px!important;font-size:20px!important;font-weight:650!important}
.hub-mother-title span{font-size:11px;font-weight:450;color:#D5E3EC}
.hub-mother-row{display:flex!important;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:10px 14px!important;background:#FFFFFF!important;color:#344C5E!important;text-align:left;font-size:14px!important;border-bottom:1px solid #E5EBF0!important}
.hub-mother-row:hover{background:#F2F6F9!important}
.hub-mother-row small{font-size:12px;color:#778896}
.hub-mother-foot{padding:10px 14px;color:#708090;font-size:12px}
.hub-tools{position:absolute;left:28px;bottom:13px;display:flex;gap:5px;align-items:center;z-index:2}
.hub-tools button{background:#FFFFFF;border:1px solid #CDD7E0;border-radius:4px;color:#425C70;min-width:30px;height:29px;font-size:13px;padding:0 10px}
.hub-tools span{font-size:11px;color:#7A8995;margin-left:6px}
.hub-legend{position:absolute;right:24px;bottom:18px;display:flex;gap:16px;font-size:11px;color:#7A8995;align-items:center}
.hub-legend .line{width:20px;height:2px;background:#A8B5C1;display:inline-block;margin-right:5px;vertical-align:middle}
.hub-legend .line.trunk{background:var(--hub-path,#6E9596)}
body.km-u.km-map-active #kmu .hub-sheet-close{flex:none;background:#F2F5F8;color:#425C70;width:28px;height:28px;border-radius:4px;border:1px solid #CDD7E0;font-size:19px}
.hub-sheet-close[hidden]{display:none!important}
@media(max-width:1100px){.hub-heading{left:20px;top:18px}.hub-heading h1{font-size:20px}.hub-heading .hub-current{display:none}.hub-tools span,.hub-legend{display:none}}
@media(max-width:720px){#hub-view{bottom:96px}.hub-heading{top:14px;left:14px}.hub-heading h1{font-size:18px}.hub-heading p{font-size:10px}.hub-viewport{inset:68px 2px 40px}.hub-tools{left:14px}.hub-tools button{padding:0 8px}}
/* Semantic zoom: keep labels legible when the overview fits beside a conversation. */
.hub-station b{font-size:var(--hub-node-font,18px)}
.hub-station .hub-meta{font-size:var(--hub-meta-font,14px)}
.hub-group-title{font-size:var(--hub-group-font,21px)}
.hub-group-title span{font-size:var(--hub-meta-font,12px)}
.hub-mother-row{font-size:var(--hub-row-font,14px)!important}
.hub-mother-row small,.hub-mother-foot{font-size:var(--hub-meta-font,12px)}

/* The native planet action bar remains above the map. */
body.km-u.km-map-active #kmu { --hub-ground: #F5F7FA; }
body.km-map-active #kmu[data-map="campus-directory"] { --hub-ground:#F4F6F1; --hub-accent:#315D4E; --hub-path:#81997E; }
body.km-map-active #kmu[data-map="council-chamber"] { --hub-ground:#F7F4EF; --hub-accent:#53483F; --hub-path:#9B7B5D; }

.hub-group-nodes { position:absolute; scrollbar-width:thin; }
.hub-group-nodes[data-scroll] { overflow:auto; }
.hub-parcel { fill:#EDF2E9; stroke:#A9B9A6; stroke-width:2; }
.hub-walkway { fill:none; stroke:#DCE5D7; stroke-width:30; stroke-linejoin:round; }
.hub-parcel.selected { stroke:#315D4E; stroke-width:4; }
.hub-section { fill:#EFE9E1; stroke:#D2C3B4; stroke-width:2; }
.hub-section.selected { stroke:#9B7B5D; stroke-width:4; }
.hub-aisle { fill:none; stroke:#DECEBD; stroke-width:2; stroke-dasharray:6 6; }
[data-map="campus-directory"] .hub-group-title i { background:#81997E; }
[data-map="campus-directory"] .hub-station { border-radius:3px!important; }
[data-map="council-chamber"] .hub-group-title i { background:#9B7B5D; border-radius:50%; }
[data-map="council-chamber"] .hub-station { border-radius:18px 18px 5px 5px!important; }
[data-map="council-chamber"] .hub-mother { border-radius:28px 28px 8px 8px; }
.hub-group-title strong { overflow:hidden; text-overflow:ellipsis; }
.hub-empty { display:block; margin:58px 12px 0; text-align:center; color:#667888; font-size:18px; }
.hub-mother-title { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }

/* ===== 2026-11-04 · formal flat language (handoff/设计规则_夜间与平面皮肤.md) =====
   Paper ground, one ink, one accent per skin, hairlines; signage badges name each group (line number / district letter /
   section numeral); nothing has depth, blur or rotation. The map keeps its pan and zoom. */
body.km-map-active #kmu { --hub-ink:#17293A; --hub-ink2:#41566A; --hub-mute:#6B7C8C; --hub-hair:#D5DDE5; --hub-hair2:#E7ECF1; --hub-tint:#EDF2F6; --hub-card:#FFFFFF; }
body.km-map-active #kmu[data-map="campus-directory"] { --hub-ink:#1C2B24; --hub-ink2:#43574D; --hub-mute:#6D7D73; --hub-hair:#D6DED3; --hub-hair2:#E7ECE4; --hub-tint:#EBF0E8; }
body.km-map-active #kmu[data-map="council-chamber"] { --hub-ink:#2A231D; --hub-ink2:#54493F; --hub-mute:#7D7064; --hub-hair:#E0D6CA; --hub-hair2:#EEE7DE; --hub-tint:#F1EBE3; }
#hub-view { color:var(--hub-ink); font-family:"IBM Plex Sans","Plex SC","PingFang SC","Microsoft YaHei",sans-serif; }
/* heading: a title block like a printed plan */
.hub-heading { left:32px; top:22px; }
.hub-heading h1 { font-size:22px; font-weight:650; letter-spacing:0; color:var(--hub-ink); }
.hub-heading p { font-size:12px; color:var(--hub-mute); margin-top:4px; font-variant-numeric:tabular-nums; }
.hub-heading h1::after { content:''; display:block; width:28px; height:3px; margin-top:8px; background:var(--hub-accent,#285477); }
.hub-heading .hub-current { border:0; background:none; padding:0; color:var(--hub-ink2); font-weight:500; border-radius:0; box-shadow:inset 0 -1px 0 var(--hub-hair); padding-bottom:4px; }
/* lines, paths, sections */
.hub-track { stroke:var(--hub-hair); stroke-width:3; }
.hub-track.active { stroke:var(--hub-accent,#285477); stroke-width:3.5; }
.hub-trunk { stroke:var(--hub-path,#6E9596); stroke-width:2.5; }
.hub-parcel { fill:#FFFFFF; stroke:var(--hub-hair); stroke-width:1.5; }
.hub-parcel.selected { stroke:var(--hub-accent,#315D4E); stroke-width:2.5; }
.hub-walkway { stroke:var(--hub-tint); }
.hub-section { fill:#FFFFFF; stroke:var(--hub-hair); stroke-width:1.5; }
.hub-section.selected { stroke:var(--hub-accent,#53483F); stroke-width:2.5; }
.hub-aisle { stroke:var(--hub-path,#9B7B5D); stroke-opacity:.45; stroke-width:1.5; stroke-dasharray:2 7; stroke-linecap:round; }
/* group signage: badge + name + count */
.hub-group-title { gap:10px; color:var(--hub-ink); font-weight:650; letter-spacing:0; }
.hub-group-title i[data-badge] { width:auto; height:auto; min-width:1.35em; padding:0 .32em; border-radius:4px; background:var(--hub-ink2); color:#fff; transform:none;
  font:650 .62em/1.5 "IBM Plex Sans",sans-serif; text-align:center; font-style:normal; }
.hub-group-title i[data-badge]::before { content:attr(data-badge); }
body.km-map-active #kmu[data-map="collaboration-hub"] .hub-group-title i[data-badge] { border-radius:50%; min-width:1.5em; padding:0; line-height:1.5em; background:var(--hub-accent,#285477); }
body.km-map-active #kmu[data-map="campus-directory"] .hub-group-title i[data-badge] { background:var(--hub-accent,#315D4E); }
body.km-map-active #kmu[data-map="council-chamber"] .hub-group-title i[data-badge] { background:transparent; color:var(--hub-path,#9B7B5D); box-shadow:inset 0 0 0 1.5px currentColor; border-radius:3px; }
.hub-group-title span { color:var(--hub-mute); font-variant-numeric:tabular-nums; }
/* stations, rooms, seats: white cards with a hairline; the accent marks the line; selected is filled */
.hub-station { background:var(--hub-card)!important; border:1px solid var(--hub-hair)!important; border-radius:4px!important; color:var(--hub-ink)!important;
  box-shadow:inset 3px 0 0 var(--hub-hair)!important; padding:8px 11px 8px 13px!important; transition:border-color .12s,box-shadow .12s,background .12s; }
.hub-station:hover { border-color:var(--hub-accent,#285477)!important; background:var(--hub-tint)!important; box-shadow:inset 3px 0 0 var(--hub-accent,#285477)!important; }
.hub-station.selected { background:var(--hub-accent,#285477)!important; border-color:var(--hub-accent,#285477)!important; color:#fff!important; box-shadow:none!important; }
.hub-station b { font-weight:600; color:inherit; letter-spacing:0; }
.hub-station .hub-meta { color:var(--hub-mute); gap:14px; font-variant-numeric:tabular-nums; }
.hub-station.selected .hub-meta { color:rgba(255,255,255,.78); }
.hub-person,.hub-agent { border-width:1.4px; opacity:.85; }
.hub-station .hub-unread { right:-6px; top:-7px; border-radius:9px; min-width:18px; line-height:16px; font-size:10.5px; font-weight:650; border-width:2px; }
[data-map="campus-directory"] .hub-station { border-radius:2px!important; }
[data-map="council-chamber"] .hub-station { border-radius:14px 14px 4px 4px!important; box-shadow:inset 0 3px 0 var(--hub-hair)!important; padding-top:10px!important; }
[data-map="council-chamber"] .hub-station:hover { box-shadow:inset 0 3px 0 var(--hub-accent,#53483F)!important; }
[data-map="council-chamber"] .hub-station.selected { box-shadow:none!important; }
.hub-station:focus-visible,.hub-mother button:focus-visible,.hub-tools button:focus-visible { outline:2px solid var(--hub-accent,#285477); outline-offset:2px; }
/* the mother: the central station / reception desk / secretariat */
.hub-mother { border:1px solid var(--hub-ink2); border-radius:6px; box-shadow:0 1px 0 var(--hub-hair); }
[data-map="council-chamber"] .hub-mother { border-radius:22px 22px 6px 6px; }
.hub-mother-title { background:var(--hub-ink)!important; font-weight:650!important; letter-spacing:0; }
.hub-mother-title span { color:rgba(255,255,255,.66); font-weight:500; letter-spacing:.04em; }
.hub-mother-row { color:var(--hub-ink)!important; border-bottom:1px solid var(--hub-hair2)!important; }
.hub-mother-row:hover { background:var(--hub-tint)!important; }
.hub-mother-row small { color:var(--hub-mute); font-variant-numeric:tabular-nums; }
.hub-mother-foot { color:var(--hub-mute); }
/* tools: one segmented control; the key on the right */
.hub-tools { gap:0; bottom:14px; }
.hub-tools button { border:1px solid var(--hub-hair); border-radius:0; margin-left:-1px; background:#fff; color:var(--hub-ink2); height:30px; font-weight:500; }
.hub-tools button:first-child { border-radius:5px 0 0 5px; margin-left:0; }
.hub-tools button[data-map-tool=reset] { border-radius:0 5px 5px 0; }
.hub-tools button:hover { background:var(--hub-tint); color:var(--hub-ink); position:relative; z-index:1; border-color:var(--hub-accent,#285477); }
.hub-tools > :not([data-map-tool]) { margin-left:10px!important; }
.hub-tools > button:not([data-map-tool]) { border-radius:5px; }
.hub-tools span:empty { display:none; }
.hub-legend { gap:18px; color:var(--hub-mute); font-size:11.5px; bottom:20px; }
.hub-legend > span { display:inline-flex; align-items:center; gap:6px; }
.hub-key { display:inline-block; flex:none; }
.hub-key-line { width:22px; height:3px; border-radius:2px; background:var(--hub-accent,#285477); }
.hub-key-trunk { width:22px; height:2.5px; background:var(--hub-path,#6E9596); }
.hub-key-parcel { width:16px; height:11px; border:1.5px solid var(--hub-accent,#315D4E); border-radius:2px; background:#fff; }
.hub-key-walk { width:22px; height:7px; border-radius:4px; background:var(--hub-tint); box-shadow:inset 0 0 0 1px var(--hub-hair); }
.hub-key-section { width:18px; height:11px; border:1.5px solid var(--hub-accent,#53483F); border-radius:9px 9px 2px 2px; background:#fff; }
.hub-key-aisle { width:22px; height:0; border-top:1.5px dashed var(--hub-path,#9B7B5D); }
.hub-legend .hub-person,.hub-legend .hub-agent { margin:0; color:var(--hub-mute); }
/* the route picker in the map */
.km-map-route-picker { border-color:var(--hub-hair); border-radius:6px; color:var(--hub-ink); box-shadow:0 10px 30px -14px rgba(20,30,40,.3); }
.km-map-route-picker button:hover { background:var(--hub-tint); }
.hub-parcel,.hub-section { fill:var(--hub-tint); }
.hub-walkway { stroke:color-mix(in srgb,var(--hub-path,#81997E) 22%,var(--hub-ground,#F4F6F1)); }
.hub-track { stroke:color-mix(in srgb,var(--hub-ink2) 28%,var(--hub-ground,#F5F7FA)); }
